summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-04-14 11:46:51 -0400
committerBenjamin Peterson <benjamin@python.org>2014-04-14 11:46:51 -0400
commit7a94319d434dec81571925b7a9d9312c08a8c483 (patch)
treeeca86248ce52d5e8e73e63f27742cc0e2aa7767e /Modules
parentd3f55143df3157922d225653c574aed1c86056ac (diff)
parentdea0e854fbc25dada42f1d324362aba73c473caa (diff)
downloadcpython-7a94319d434dec81571925b7a9d9312c08a8c483.tar.gz
merge 3.2
Diffstat (limited to 'Modules')
-rw-r--r--Modules/Setup.dist12
-rw-r--r--Modules/_bisectmodule.c7
-rw-r--r--Modules/_bz2module.c625
-rw-r--r--Modules/_codecsmodule.c259
-rw-r--r--Modules/_collectionsmodule.c281
-rw-r--r--Modules/_cryptmodule.c (renamed from Modules/cryptmodule.c)4
-rw-r--r--Modules/_csv.c281
-rw-r--r--Modules/_ctypes/_ctypes.c148
-rw-r--r--Modules/_ctypes/callbacks.c12
-rw-r--r--Modules/_ctypes/callproc.c24
-rw-r--r--Modules/_ctypes/cfield.c96
-rw-r--r--Modules/_ctypes/libffi.diff53
-rw-r--r--Modules/_ctypes/libffi/fficonfig.py.in3
-rwxr-xr-x[-rw-r--r--]Modules/_ctypes/libffi/generate-osx-source-and-headers.py0
-rw-r--r--Modules/_ctypes/libffi/src/arm/ffi.c14
-rw-r--r--Modules/_ctypes/libffi/src/powerpc/ffi.c4
-rw-r--r--Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp300
-rw-r--r--Modules/_ctypes/libffi/testsuite/libffi.call/a.out0
-rw-r--r--Modules/_ctypes/libffi_osx/x86/x86-ffi64.c4
-rw-r--r--Modules/_ctypes/stgdict.c12
-rw-r--r--Modules/_curses_panel.c135
-rw-r--r--Modules/_cursesmodule.c695
-rw-r--r--Modules/_datetimemodule.c519
-rw-r--r--Modules/_dbmmodule.c16
-rw-r--r--Modules/_decimal/README.txt46
-rw-r--r--Modules/_decimal/_decimal.c5764
-rw-r--r--Modules/_decimal/docstrings.h771
-rw-r--r--Modules/_decimal/libmpdec/README.txt90
-rw-r--r--Modules/_decimal/libmpdec/basearith.c658
-rw-r--r--Modules/_decimal/libmpdec/basearith.h222
-rw-r--r--Modules/_decimal/libmpdec/bits.h192
-rw-r--r--Modules/_decimal/libmpdec/constants.c132
-rw-r--r--Modules/_decimal/libmpdec/constants.h90
-rw-r--r--Modules/_decimal/libmpdec/context.c286
-rw-r--r--Modules/_decimal/libmpdec/convolute.c174
-rw-r--r--Modules/_decimal/libmpdec/convolute.h50
-rw-r--r--Modules/_decimal/libmpdec/crt.c179
-rw-r--r--Modules/_decimal/libmpdec/crt.h47
-rw-r--r--Modules/_decimal/libmpdec/difradix2.c173
-rw-r--r--Modules/_decimal/libmpdec/difradix2.h48
-rw-r--r--Modules/_decimal/libmpdec/fnt.c81
-rw-r--r--Modules/_decimal/libmpdec/fnt.h49
-rw-r--r--Modules/_decimal/libmpdec/fourstep.c257
-rw-r--r--Modules/_decimal/libmpdec/fourstep.h48
-rw-r--r--Modules/_decimal/libmpdec/io.c1575
-rw-r--r--Modules/_decimal/libmpdec/io.h59
-rw-r--r--Modules/_decimal/libmpdec/literature/REFERENCES.txt51
-rw-r--r--Modules/_decimal/libmpdec/literature/bignum.txt83
-rw-r--r--Modules/_decimal/libmpdec/literature/fnt.py208
-rw-r--r--Modules/_decimal/libmpdec/literature/matrix-transform.txt256
-rw-r--r--Modules/_decimal/libmpdec/literature/mulmod-64.txt127
-rw-r--r--Modules/_decimal/libmpdec/literature/mulmod-ppro.txt269
-rw-r--r--Modules/_decimal/libmpdec/literature/six-step.txt63
-rw-r--r--Modules/_decimal/libmpdec/literature/umodarith.lisp692
-rw-r--r--Modules/_decimal/libmpdec/memory.c292
-rw-r--r--Modules/_decimal/libmpdec/memory.h51
-rw-r--r--Modules/_decimal/libmpdec/mpdecimal.c8410
-rw-r--r--Modules/_decimal/libmpdec/mpdecimal.h847
-rw-r--r--Modules/_decimal/libmpdec/numbertheory.c132
-rw-r--r--Modules/_decimal/libmpdec/numbertheory.h78
-rw-r--r--Modules/_decimal/libmpdec/sixstep.c214
-rw-r--r--Modules/_decimal/libmpdec/sixstep.h48
-rw-r--r--Modules/_decimal/libmpdec/transpose.c276
-rw-r--r--Modules/_decimal/libmpdec/transpose.h62
-rw-r--r--Modules/_decimal/libmpdec/typearith.h669
-rw-r--r--Modules/_decimal/libmpdec/umodarith.h650
-rw-r--r--Modules/_decimal/libmpdec/vccompat.h62
-rw-r--r--Modules/_decimal/libmpdec/vcdiv64.asm48
-rw-r--r--Modules/_decimal/libmpdec/vcstdint.h232
-rw-r--r--Modules/_decimal/tests/README.txt15
-rw-r--r--Modules/_decimal/tests/bench.py133
-rw-r--r--Modules/_decimal/tests/bignum.py42
-rw-r--r--Modules/_decimal/tests/deccheck.py1099
-rw-r--r--Modules/_decimal/tests/formathelper.py342
-rw-r--r--Modules/_decimal/tests/randdec.py575
-rw-r--r--Modules/_decimal/tests/randfloat.py250
-rwxr-xr-xModules/_decimal/tests/runall-memorydebugger.sh176
-rwxr-xr-xModules/_decimal/tests/runall.bat111
-rw-r--r--Modules/_elementtree.c2386
-rw-r--r--Modules/_freeze_importlib.c144
-rw-r--r--Modules/_functoolsmodule.c210
-rw-r--r--Modules/_gdbmmodule.c17
-rw-r--r--Modules/_gestalt.c2
-rw-r--r--Modules/_hashopenssl.c8
-rw-r--r--Modules/_heapqmodule.c6
-rw-r--r--Modules/_io/_iomodule.c177
-rw-r--r--Modules/_io/_iomodule.h17
-rw-r--r--Modules/_io/bufferedio.c400
-rw-r--r--Modules/_io/bytesio.c2
-rw-r--r--Modules/_io/fileio.c178
-rw-r--r--Modules/_io/iobase.c49
-rw-r--r--Modules/_io/stringio.c185
-rw-r--r--Modules/_io/textio.c738
-rw-r--r--Modules/_json.c465
-rw-r--r--Modules/_localemodule.c103
-rw-r--r--Modules/_lsprof.c57
-rw-r--r--Modules/_lzmamodule.c1304
-rw-r--r--Modules/_math.c2
-rw-r--r--Modules/_multiprocessing/connection.h527
-rw-r--r--Modules/_multiprocessing/multiprocessing.c243
-rw-r--r--Modules/_multiprocessing/multiprocessing.h80
-rw-r--r--Modules/_multiprocessing/pipe_connection.c149
-rw-r--r--Modules/_multiprocessing/semaphore.c59
-rw-r--r--Modules/_multiprocessing/socket_connection.c238
-rw-r--r--Modules/_multiprocessing/win32_functions.c267
-rw-r--r--Modules/_pickle.c387
-rw-r--r--Modules/_posixsubprocess.c115
-rw-r--r--Modules/_randommodule.c21
-rw-r--r--Modules/_sqlite/cache.c21
-rw-r--r--Modules/_sqlite/connection.c107
-rw-r--r--Modules/_sqlite/connection.h3
-rw-r--r--Modules/_sqlite/cursor.c40
-rw-r--r--Modules/_sqlite/microprotocols.c8
-rw-r--r--Modules/_sqlite/module.c19
-rw-r--r--Modules/_sqlite/module.h2
-rw-r--r--Modules/_sqlite/row.c10
-rw-r--r--Modules/_sqlite/statement.c12
-rw-r--r--Modules/_sqlite/statement.h4
-rw-r--r--Modules/_sre.c793
-rw-r--r--Modules/_ssl.c955
-rw-r--r--Modules/_ssl_data.h1653
-rw-r--r--Modules/_struct.c92
-rw-r--r--Modules/_testbuffer.c2875
-rw-r--r--Modules/_testcapimodule.c560
-rw-r--r--Modules/_threadmodule.c60
-rw-r--r--Modules/_time.c28
-rw-r--r--Modules/_time.h3
-rw-r--r--Modules/_tkinter.c428
-rw-r--r--Modules/_winapi.c1328
-rw-r--r--Modules/arraymodule.c214
-rw-r--r--Modules/atexitmodule.c10
-rw-r--r--Modules/audioop.c15
-rw-r--r--Modules/binascii.c61
-rw-r--r--Modules/bz2module.c2193
-rw-r--r--Modules/cjkcodecs/_codecs_cn.c14
-rw-r--r--Modules/cjkcodecs/_codecs_hk.c2
-rw-r--r--Modules/cjkcodecs/_codecs_iso2022.c2
-rw-r--r--Modules/cjkcodecs/_codecs_jp.c34
-rw-r--r--Modules/cjkcodecs/_codecs_kr.c18
-rw-r--r--Modules/cjkcodecs/_codecs_tw.c4
-rw-r--r--Modules/cjkcodecs/multibytecodec.c62
-rw-r--r--Modules/cmathmodule.c7
-rw-r--r--Modules/config.c.in3
-rw-r--r--Modules/errnomodule.c82
-rw-r--r--Modules/expat/expat_external.h4
-rw-r--r--Modules/faulthandler.c1153
-rw-r--r--Modules/fcntlmodule.c31
-rw-r--r--Modules/fpectlmodule.c11
-rw-r--r--Modules/gc_weakref.txt6
-rw-r--r--Modules/gcmodule.c126
-rw-r--r--Modules/getbuildinfo.c18
-rw-r--r--Modules/getpath.c134
-rw-r--r--Modules/grpmodule.c2
-rw-r--r--Modules/hashlib.h2
-rw-r--r--Modules/itertoolsmodule.c963
-rw-r--r--Modules/main.c72
-rw-r--r--Modules/mathmodule.c104
-rw-r--r--Modules/md5module.c33
-rw-r--r--Modules/mmapmodule.c90
-rw-r--r--Modules/nismodule.c2
-rw-r--r--Modules/operator.c180
-rw-r--r--Modules/ossaudiodev.c110
-rw-r--r--Modules/parsermodule.c177
-rw-r--r--Modules/posixmodule.c6359
-rw-r--r--Modules/pyexpat.c126
-rw-r--r--Modules/python.c19
-rw-r--r--Modules/readline.c99
-rw-r--r--Modules/resource.c16
-rw-r--r--Modules/selectmodule.c575
-rw-r--r--Modules/sha1module.c43
-rw-r--r--Modules/sha256module.c21
-rw-r--r--Modules/sha512module.c21
-rw-r--r--Modules/signalmodule.c474
-rw-r--r--Modules/socketmodule.c1575
-rw-r--r--Modules/socketmodule.h27
-rw-r--r--Modules/sre.h6
-rw-r--r--Modules/symtablemodule.c2
-rw-r--r--Modules/syslogmodule.c25
-rw-r--r--Modules/termios.c5
-rw-r--r--Modules/testcapi_long.h29
-rw-r--r--Modules/timemodule.c968
-rw-r--r--Modules/tkappinit.c6
-rw-r--r--Modules/unicodedata.c315
-rw-r--r--Modules/unicodedata_db.h7148
-rw-r--r--Modules/unicodename_db.h38401
-rw-r--r--Modules/xxlimited.c3
-rw-r--r--Modules/xxmodule.c56
-rw-r--r--Modules/zipimport.c667
-rw-r--r--Modules/zlibmodule.c165
189 files changed, 79067 insertions, 32618 deletions
diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index 9269ddf286..f45de5caf4 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -127,6 +127,9 @@ _io -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesi
# builtin module avoids some bootstrapping problems and reduces overhead.
zipimport zipimport.c
+# faulthandler module
+faulthandler faulthandler.c
+
# The rest of the modules listed in this file are all commented out by
# default. Usually they can be detected and built as dynamically
# loaded modules by the new setup.py script added in Python 2.1. If
@@ -207,7 +210,7 @@ _symtable symtablemodule.c
#
# First, look at Setup.config; configure may have set this for you.
-#crypt cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems
+#_crypt _cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems
# Some more UNIX dependent modules -- off by default, since these
@@ -231,15 +234,14 @@ _symtable symtablemodule.c
# system does not have the OpenSSL libs containing an optimized version.
# The _md5 module implements the RSA Data Security, Inc. MD5
-# Message-Digest Algorithm, described in RFC 1321. The necessary files
-# md5.c and md5.h are included here.
+# Message-Digest Algorithm, described in RFC 1321.
-#_md5 md5module.c md5.c
+#_md5 md5module.c
# The _sha module implements the SHA checksum algorithms.
# (NIST's Secure Hash Algorithms.)
-#_sha shamodule.c
+#_sha1 sha1module.c
#_sha256 sha256module.c
#_sha512 sha512module.c
diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c
index eae29784dc..faca8cfbca 100644
--- a/Modules/_bisectmodule.c
+++ b/Modules/_bisectmodule.c
@@ -90,7 +90,9 @@ insort_right(PyObject *self, PyObject *args, PyObject *kw)
if (PyList_Insert(list, index, item) < 0)
return NULL;
} else {
- result = PyObject_CallMethod(list, "insert", "nO", index, item);
+ _Py_IDENTIFIER(insert);
+
+ result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
if (result == NULL)
return NULL;
Py_DECREF(result);
@@ -193,7 +195,8 @@ insort_left(PyObject *self, PyObject *args, PyObject *kw)
if (PyList_Insert(list, index, item) < 0)
return NULL;
} else {
- result = PyObject_CallMethod(list, "insert", "nO", index, item);
+ _Py_IDENTIFIER(insert);
+ result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
if (result == NULL)
return NULL;
Py_DECREF(result);
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
new file mode 100644
index 0000000000..3f7a6cf026
--- /dev/null
+++ b/Modules/_bz2module.c
@@ -0,0 +1,625 @@
+/* _bz2 - Low-level Python interface to libbzip2. */
+
+#define PY_SSIZE_T_CLEAN
+
+#include "Python.h"
+#include "structmember.h"
+
+#ifdef WITH_THREAD
+#include "pythread.h"
+#endif
+
+#include <bzlib.h>
+#include <stdio.h>
+
+
+#ifndef BZ_CONFIG_ERROR
+#define BZ2_bzCompress bzCompress
+#define BZ2_bzCompressInit bzCompressInit
+#define BZ2_bzCompressEnd bzCompressEnd
+#define BZ2_bzDecompress bzDecompress
+#define BZ2_bzDecompressInit bzDecompressInit
+#define BZ2_bzDecompressEnd bzDecompressEnd
+#endif /* ! BZ_CONFIG_ERROR */
+
+
+#ifdef WITH_THREAD
+#define ACQUIRE_LOCK(obj) do { \
+ if (!PyThread_acquire_lock((obj)->lock, 0)) { \
+ Py_BEGIN_ALLOW_THREADS \
+ PyThread_acquire_lock((obj)->lock, 1); \
+ Py_END_ALLOW_THREADS \
+ } } while (0)
+#define RELEASE_LOCK(obj) PyThread_release_lock((obj)->lock)
+#else
+#define ACQUIRE_LOCK(obj)
+#define RELEASE_LOCK(obj)
+#endif
+
+#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
+
+
+typedef struct {
+ PyObject_HEAD
+ bz_stream bzs;
+ int flushed;
+#ifdef WITH_THREAD
+ PyThread_type_lock lock;
+#endif
+} BZ2Compressor;
+
+typedef struct {
+ PyObject_HEAD
+ bz_stream bzs;
+ char eof; /* T_BOOL expects a char */
+ PyObject *unused_data;
+#ifdef WITH_THREAD
+ PyThread_type_lock lock;
+#endif
+} BZ2Decompressor;
+
+
+/* Helper functions. */
+
+static int
+catch_bz2_error(int bzerror)
+{
+ switch(bzerror) {
+ case BZ_OK:
+ case BZ_RUN_OK:
+ case BZ_FLUSH_OK:
+ case BZ_FINISH_OK:
+ case BZ_STREAM_END:
+ return 0;
+
+#ifdef BZ_CONFIG_ERROR
+ case BZ_CONFIG_ERROR:
+ PyErr_SetString(PyExc_SystemError,
+ "libbzip2 was not compiled correctly");
+ return 1;
+#endif
+ case BZ_PARAM_ERROR:
+ PyErr_SetString(PyExc_ValueError,
+ "Internal error - "
+ "invalid parameters passed to libbzip2");
+ return 1;
+ case BZ_MEM_ERROR:
+ PyErr_NoMemory();
+ return 1;
+ case BZ_DATA_ERROR:
+ case BZ_DATA_ERROR_MAGIC:
+ PyErr_SetString(PyExc_IOError, "Invalid data stream");
+ return 1;
+ case BZ_IO_ERROR:
+ PyErr_SetString(PyExc_IOError, "Unknown I/O error");
+ return 1;
+ case BZ_UNEXPECTED_EOF:
+ PyErr_SetString(PyExc_EOFError,
+ "Compressed file ended before the logical "
+ "end-of-stream was detected");
+ return 1;
+ case BZ_SEQUENCE_ERROR:
+ PyErr_SetString(PyExc_RuntimeError,
+ "Internal error - "
+ "Invalid sequence of commands sent to libbzip2");
+ return 1;
+ default:
+ PyErr_Format(PyExc_IOError,
+ "Unrecognized error from libbzip2: %d", bzerror);
+ return 1;
+ }
+}
+
+#if BUFSIZ < 8192
+#define SMALLCHUNK 8192
+#else
+#define SMALLCHUNK BUFSIZ
+#endif
+
+static int
+grow_buffer(PyObject **buf)
+{
+ /* Expand the buffer by an amount proportional to the current size,
+ giving us amortized linear-time behavior. Use a less-than-double
+ growth factor to avoid excessive allocation. */
+ size_t size = PyBytes_GET_SIZE(*buf);
+ size_t new_size = size + (size >> 3) + 6;
+ if (new_size > size) {
+ return _PyBytes_Resize(buf, new_size);
+ } else { /* overflow */
+ PyErr_SetString(PyExc_OverflowError,
+ "Unable to allocate buffer - output too large");
+ return -1;
+ }
+}
+
+
+/* BZ2Compressor class. */
+
+static PyObject *
+compress(BZ2Compressor *c, char *data, size_t len, int action)
+{
+ size_t data_size = 0;
+ PyObject *result;
+
+ result = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
+ if (result == NULL)
+ return NULL;
+
+ c->bzs.next_in = data;
+ c->bzs.avail_in = 0;
+ c->bzs.next_out = PyBytes_AS_STRING(result);
+ c->bzs.avail_out = PyBytes_GET_SIZE(result);
+ for (;;) {
+ char *this_out;
+ int bzerror;
+
+ /* On a 64-bit system, len might not fit in avail_in (an unsigned int).
+ Do compression in chunks of no more than UINT_MAX bytes each. */
+ if (c->bzs.avail_in == 0 && len > 0) {
+ c->bzs.avail_in = MIN(len, UINT_MAX);
+ len -= c->bzs.avail_in;
+ }
+
+ /* In regular compression mode, stop when input data is exhausted. */
+ if (action == BZ_RUN && c->bzs.avail_in == 0)
+ break;
+
+ if (c->bzs.avail_out == 0) {
+ size_t buffer_left = PyBytes_GET_SIZE(result) - data_size;
+ if (buffer_left == 0) {
+ if (grow_buffer(&result) < 0)
+ goto error;
+ c->bzs.next_out = PyBytes_AS_STRING(result) + data_size;
+ buffer_left = PyBytes_GET_SIZE(result) - data_size;
+ }
+ c->bzs.avail_out = MIN(buffer_left, UINT_MAX);
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ this_out = c->bzs.next_out;
+ bzerror = BZ2_bzCompress(&c->bzs, action);
+ data_size += c->bzs.next_out - this_out;
+ Py_END_ALLOW_THREADS
+ if (catch_bz2_error(bzerror))
+ goto error;
+
+ /* In flushing mode, stop when all buffered data has been flushed. */
+ if (action == BZ_FINISH && bzerror == BZ_STREAM_END)
+ break;
+ }
+ if (data_size != PyBytes_GET_SIZE(result))
+ if (_PyBytes_Resize(&result, data_size) < 0)
+ goto error;
+ return result;
+
+error:
+ Py_XDECREF(result);
+ return NULL;
+}
+
+PyDoc_STRVAR(BZ2Compressor_compress__doc__,
+"compress(data) -> bytes\n"
+"\n"
+"Provide data to the compressor object. Returns a chunk of\n"
+"compressed data if possible, or b'' otherwise.\n"
+"\n"
+"When you have finished providing data to the compressor, call the\n"
+"flush() method to finish the compression process.\n");
+
+static PyObject *
+BZ2Compressor_compress(BZ2Compressor *self, PyObject *args)
+{
+ Py_buffer buffer;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "y*:compress", &buffer))
+ return NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->flushed)
+ PyErr_SetString(PyExc_ValueError, "Compressor has been flushed");
+ else
+ result = compress(self, buffer.buf, buffer.len, BZ_RUN);
+ RELEASE_LOCK(self);
+ PyBuffer_Release(&buffer);
+ return result;
+}
+
+PyDoc_STRVAR(BZ2Compressor_flush__doc__,
+"flush() -> bytes\n"
+"\n"
+"Finish the compression process. Returns the compressed data left\n"
+"in internal buffers.\n"
+"\n"
+"The compressor object may not be used after this method is called.\n");
+
+static PyObject *
+BZ2Compressor_flush(BZ2Compressor *self, PyObject *noargs)
+{
+ PyObject *result = NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->flushed)
+ PyErr_SetString(PyExc_ValueError, "Repeated call to flush()");
+ else {
+ self->flushed = 1;
+ result = compress(self, NULL, 0, BZ_FINISH);
+ }
+ RELEASE_LOCK(self);
+ return result;
+}
+
+static PyObject *
+BZ2Compressor_getstate(BZ2Compressor *self, PyObject *noargs)
+{
+ PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+ Py_TYPE(self)->tp_name);
+ return NULL;
+}
+
+static int
+BZ2Compressor_init(BZ2Compressor *self, PyObject *args, PyObject *kwargs)
+{
+ int compresslevel = 9;
+ int bzerror;
+
+ if (!PyArg_ParseTuple(args, "|i:BZ2Compressor", &compresslevel))
+ return -1;
+ if (!(1 <= compresslevel && compresslevel <= 9)) {
+ PyErr_SetString(PyExc_ValueError,
+ "compresslevel must be between 1 and 9");
+ return -1;
+ }
+
+#ifdef WITH_THREAD
+ self->lock = PyThread_allocate_lock();
+ if (self->lock == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock");
+ return -1;
+ }
+#endif
+
+ bzerror = BZ2_bzCompressInit(&self->bzs, compresslevel, 0, 0);
+ if (catch_bz2_error(bzerror))
+ goto error;
+
+ return 0;
+
+error:
+#ifdef WITH_THREAD
+ PyThread_free_lock(self->lock);
+ self->lock = NULL;
+#endif
+ return -1;
+}
+
+static void
+BZ2Compressor_dealloc(BZ2Compressor *self)
+{
+ BZ2_bzCompressEnd(&self->bzs);
+#ifdef WITH_THREAD
+ if (self->lock != NULL)
+ PyThread_free_lock(self->lock);
+#endif
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef BZ2Compressor_methods[] = {
+ {"compress", (PyCFunction)BZ2Compressor_compress, METH_VARARGS,
+ BZ2Compressor_compress__doc__},
+ {"flush", (PyCFunction)BZ2Compressor_flush, METH_NOARGS,
+ BZ2Compressor_flush__doc__},
+ {"__getstate__", (PyCFunction)BZ2Compressor_getstate, METH_NOARGS},
+ {NULL}
+};
+
+PyDoc_STRVAR(BZ2Compressor__doc__,
+"BZ2Compressor(compresslevel=9)\n"
+"\n"
+"Create a compressor object for compressing data incrementally.\n"
+"\n"
+"compresslevel, if given, must be a number between 1 and 9.\n"
+"\n"
+"For one-shot compression, use the compress() function instead.\n");
+
+static PyTypeObject BZ2Compressor_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "_bz2.BZ2Compressor", /* tp_name */
+ sizeof(BZ2Compressor), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)BZ2Compressor_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ BZ2Compressor__doc__, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ BZ2Compressor_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)BZ2Compressor_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
+};
+
+
+/* BZ2Decompressor class. */
+
+static PyObject *
+decompress(BZ2Decompressor *d, char *data, size_t len)
+{
+ size_t data_size = 0;
+ PyObject *result;
+
+ result = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
+ if (result == NULL)
+ return result;
+ d->bzs.next_in = data;
+ /* On a 64-bit system, len might not fit in avail_in (an unsigned int).
+ Do decompression in chunks of no more than UINT_MAX bytes each. */
+ d->bzs.avail_in = MIN(len, UINT_MAX);
+ len -= d->bzs.avail_in;
+ d->bzs.next_out = PyBytes_AS_STRING(result);
+ d->bzs.avail_out = PyBytes_GET_SIZE(result);
+ for (;;) {
+ char *this_out;
+ int bzerror;
+
+ Py_BEGIN_ALLOW_THREADS
+ this_out = d->bzs.next_out;
+ bzerror = BZ2_bzDecompress(&d->bzs);
+ data_size += d->bzs.next_out - this_out;
+ Py_END_ALLOW_THREADS
+ if (catch_bz2_error(bzerror))
+ goto error;
+ if (bzerror == BZ_STREAM_END) {
+ d->eof = 1;
+ len += d->bzs.avail_in;
+ if (len > 0) { /* Save leftover input to unused_data */
+ Py_CLEAR(d->unused_data);
+ d->unused_data = PyBytes_FromStringAndSize(d->bzs.next_in, len);
+ if (d->unused_data == NULL)
+ goto error;
+ }
+ break;
+ }
+ if (d->bzs.avail_in == 0) {
+ if (len == 0)
+ break;
+ d->bzs.avail_in = MIN(len, UINT_MAX);
+ len -= d->bzs.avail_in;
+ }
+ if (d->bzs.avail_out == 0) {
+ size_t buffer_left = PyBytes_GET_SIZE(result) - data_size;
+ if (buffer_left == 0) {
+ if (grow_buffer(&result) < 0)
+ goto error;
+ d->bzs.next_out = PyBytes_AS_STRING(result) + data_size;
+ buffer_left = PyBytes_GET_SIZE(result) - data_size;
+ }
+ d->bzs.avail_out = MIN(buffer_left, UINT_MAX);
+ }
+ }
+ if (data_size != PyBytes_GET_SIZE(result))
+ if (_PyBytes_Resize(&result, data_size) < 0)
+ goto error;
+ return result;
+
+error:
+ Py_XDECREF(result);
+ return NULL;
+}
+
+PyDoc_STRVAR(BZ2Decompressor_decompress__doc__,
+"decompress(data) -> bytes\n"
+"\n"
+"Provide data to the decompressor object. Returns a chunk of\n"
+"decompressed data if possible, or b'' otherwise.\n"
+"\n"
+"Attempting to decompress data after the end of stream is reached\n"
+"raises an EOFError. Any data found after the end of the stream\n"
+"is ignored and saved in the unused_data attribute.\n");
+
+static PyObject *
+BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args)
+{
+ Py_buffer buffer;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "y*:decompress", &buffer))
+ return NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->eof)
+ PyErr_SetString(PyExc_EOFError, "End of stream already reached");
+ else
+ result = decompress(self, buffer.buf, buffer.len);
+ RELEASE_LOCK(self);
+ PyBuffer_Release(&buffer);
+ return result;
+}
+
+static PyObject *
+BZ2Decompressor_getstate(BZ2Decompressor *self, PyObject *noargs)
+{
+ PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+ Py_TYPE(self)->tp_name);
+ return NULL;
+}
+
+static int
+BZ2Decompressor_init(BZ2Decompressor *self, PyObject *args, PyObject *kwargs)
+{
+ int bzerror;
+
+ if (!PyArg_ParseTuple(args, ":BZ2Decompressor"))
+ return -1;
+
+#ifdef WITH_THREAD
+ self->lock = PyThread_allocate_lock();
+ if (self->lock == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock");
+ return -1;
+ }
+#endif
+
+ self->unused_data = PyBytes_FromStringAndSize("", 0);
+ if (self->unused_data == NULL)
+ goto error;
+
+ bzerror = BZ2_bzDecompressInit(&self->bzs, 0, 0);
+ if (catch_bz2_error(bzerror))
+ goto error;
+
+ return 0;
+
+error:
+ Py_CLEAR(self->unused_data);
+#ifdef WITH_THREAD
+ PyThread_free_lock(self->lock);
+ self->lock = NULL;
+#endif
+ return -1;
+}
+
+static void
+BZ2Decompressor_dealloc(BZ2Decompressor *self)
+{
+ BZ2_bzDecompressEnd(&self->bzs);
+ Py_CLEAR(self->unused_data);
+#ifdef WITH_THREAD
+ if (self->lock != NULL)
+ PyThread_free_lock(self->lock);
+#endif
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef BZ2Decompressor_methods[] = {
+ {"decompress", (PyCFunction)BZ2Decompressor_decompress, METH_VARARGS,
+ BZ2Decompressor_decompress__doc__},
+ {"__getstate__", (PyCFunction)BZ2Decompressor_getstate, METH_NOARGS},
+ {NULL}
+};
+
+PyDoc_STRVAR(BZ2Decompressor_eof__doc__,
+"True if the end-of-stream marker has been reached.");
+
+PyDoc_STRVAR(BZ2Decompressor_unused_data__doc__,
+"Data found after the end of the compressed stream.");
+
+static PyMemberDef BZ2Decompressor_members[] = {
+ {"eof", T_BOOL, offsetof(BZ2Decompressor, eof),
+ READONLY, BZ2Decompressor_eof__doc__},
+ {"unused_data", T_OBJECT_EX, offsetof(BZ2Decompressor, unused_data),
+ READONLY, BZ2Decompressor_unused_data__doc__},
+ {NULL}
+};
+
+PyDoc_STRVAR(BZ2Decompressor__doc__,
+"BZ2Decompressor()\n"
+"\n"
+"Create a decompressor object for decompressing data incrementally.\n"
+"\n"
+"For one-shot decompression, use the decompress() function instead.\n");
+
+static PyTypeObject BZ2Decompressor_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "_bz2.BZ2Decompressor", /* tp_name */
+ sizeof(BZ2Decompressor), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)BZ2Decompressor_dealloc,/* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ BZ2Decompressor__doc__, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ BZ2Decompressor_methods, /* tp_methods */
+ BZ2Decompressor_members, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)BZ2Decompressor_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
+};
+
+
+/* Module initialization. */
+
+static struct PyModuleDef _bz2module = {
+ PyModuleDef_HEAD_INIT,
+ "_bz2",
+ NULL,
+ -1,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+PyMODINIT_FUNC
+PyInit__bz2(void)
+{
+ PyObject *m;
+
+ if (PyType_Ready(&BZ2Compressor_Type) < 0)
+ return NULL;
+ if (PyType_Ready(&BZ2Decompressor_Type) < 0)
+ return NULL;
+
+ m = PyModule_Create(&_bz2module);
+ if (m == NULL)
+ return NULL;
+
+ Py_INCREF(&BZ2Compressor_Type);
+ PyModule_AddObject(m, "BZ2Compressor", (PyObject *)&BZ2Compressor_Type);
+
+ Py_INCREF(&BZ2Decompressor_Type);
+ PyModule_AddObject(m, "BZ2Decompressor",
+ (PyObject *)&BZ2Decompressor_Type);
+
+ return m;
+}
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index eb740f95fd..40037b1dc6 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -38,6 +38,10 @@ Copyright (c) Corporation for National Research Initiatives.
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#ifdef MS_WINDOWS
+#include <windows.h>
+#endif
+
/* --- Registry ----------------------------------------------------------- */
PyDoc_STRVAR(register__doc__,
@@ -162,7 +166,6 @@ static PyObject *
escape_encode(PyObject *self,
PyObject *args)
{
- static const char *hexdigits = "0123456789abcdef";
PyObject *str;
Py_ssize_t size;
Py_ssize_t newsize;
@@ -174,12 +177,12 @@ escape_encode(PyObject *self,
return NULL;
size = PyBytes_GET_SIZE(str);
- newsize = 4*size;
- if (newsize > PY_SSIZE_T_MAX || newsize / 4 != size) {
+ if (size > PY_SSIZE_T_MAX / 4) {
PyErr_SetString(PyExc_OverflowError,
"string is too large to encode");
return NULL;
}
+ newsize = 4*size;
v = PyBytes_FromStringAndSize(NULL, newsize);
if (v == NULL) {
@@ -205,8 +208,8 @@ escape_encode(PyObject *self,
else if (c < ' ' || c >= 0x7f) {
*p++ = '\\';
*p++ = 'x';
- *p++ = hexdigits[(c & 0xf0) >> 4];
- *p++ = hexdigits[c & 0xf];
+ *p++ = Py_hexdigits[(c & 0xf0) >> 4];
+ *p++ = Py_hexdigits[c & 0xf];
}
else
*p++ = c;
@@ -236,8 +239,10 @@ unicode_internal_decode(PyObject *self,
return NULL;
if (PyUnicode_Check(obj)) {
+ if (PyUnicode_READY(obj) < 0)
+ return NULL;
Py_INCREF(obj);
- return codec_tuple(obj, PyUnicode_GET_SIZE(obj));
+ return codec_tuple(obj, PyUnicode_GET_LENGTH(obj));
}
else {
if (PyObject_AsReadBuffer(obj, (const void **)&data, &size))
@@ -588,7 +593,7 @@ charmap_decode(PyObject *self,
return codec_tuple(unicode, pbuf.len);
}
-#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
+#ifdef HAVE_MBCS
static PyObject *
mbcs_decode(PyObject *self,
@@ -613,7 +618,32 @@ mbcs_decode(PyObject *self,
return codec_tuple(decoded, consumed);
}
-#endif /* MS_WINDOWS */
+static PyObject *
+code_page_decode(PyObject *self,
+ PyObject *args)
+{
+ Py_buffer pbuf;
+ const char *errors = NULL;
+ int final = 0;
+ Py_ssize_t consumed;
+ PyObject *decoded = NULL;
+ int code_page;
+
+ if (!PyArg_ParseTuple(args, "iy*|zi:code_page_decode",
+ &code_page, &pbuf, &errors, &final))
+ return NULL;
+ consumed = pbuf.len;
+
+ decoded = PyUnicode_DecodeCodePageStateful(code_page,
+ pbuf.buf, pbuf.len, errors,
+ final ? NULL : &consumed);
+ PyBuffer_Release(&pbuf);
+ if (decoded == NULL)
+ return NULL;
+ return codec_tuple(decoded, consumed);
+}
+
+#endif /* HAVE_MBCS */
/* --- Encoder ------------------------------------------------------------ */
@@ -645,17 +675,31 @@ unicode_internal_encode(PyObject *self,
PyObject *obj;
const char *errors = NULL;
const char *data;
- Py_ssize_t size;
+ Py_ssize_t len, size;
+
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "unicode_internal codec has been deprecated",
+ 1))
+ return NULL;
if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode",
&obj, &errors))
return NULL;
if (PyUnicode_Check(obj)) {
- data = PyUnicode_AS_DATA(obj);
- size = PyUnicode_GET_DATA_SIZE(obj);
- return codec_tuple(PyBytes_FromStringAndSize(data, size),
- PyUnicode_GET_SIZE(obj));
+ Py_UNICODE *u;
+
+ if (PyUnicode_READY(obj) < 0)
+ return NULL;
+
+ u = PyUnicode_AsUnicodeAndSize(obj, &len);
+ if (u == NULL)
+ return NULL;
+ if (len > PY_SSIZE_T_MAX / sizeof(Py_UNICODE))
+ return PyErr_NoMemory();
+ size = len * sizeof(Py_UNICODE);
+ return codec_tuple(PyBytes_FromStringAndSize((const char*)u, size),
+ PyUnicode_GET_LENGTH(obj));
}
else {
if (PyObject_AsReadBuffer(obj, (const void **)&data, &size))
@@ -676,14 +720,12 @@ utf_7_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
- return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF7(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- 0,
- 0,
- errors),
- PyUnicode_GET_SIZE(str));
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
+ return NULL;
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF7(str, 0, 0, errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -700,12 +742,12 @@ utf_8_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(PyUnicode_AsEncodedString(str, "utf-8", errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -730,13 +772,12 @@ utf_16_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- byteorder),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, byteorder),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -753,13 +794,12 @@ utf_16_le_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- -1),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, -1),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -776,13 +816,12 @@ utf_16_be_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- +1),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, +1),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -807,13 +846,12 @@ utf_32_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- byteorder),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, byteorder),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -830,13 +868,12 @@ utf_32_le_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- -1),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, -1),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -853,13 +890,12 @@ utf_32_be_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors,
- +1),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, +1),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -876,11 +912,12 @@ unicode_escape_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeUnicodeEscape(PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str)),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(PyUnicode_AsUnicodeEscapeString(str),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -897,12 +934,12 @@ raw_unicode_escape_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeRawUnicodeEscape(
- PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str)),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(PyUnicode_AsRawUnicodeEscapeString(str),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -919,13 +956,12 @@ latin_1_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeLatin1(
- PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_AsLatin1String(str, errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -942,13 +978,12 @@ ascii_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeASCII(
- PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(_PyUnicode_AsASCIIString(str, errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -968,14 +1003,12 @@ charmap_encode(PyObject *self,
mapping = NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
- return NULL;
- v = codec_tuple(PyUnicode_EncodeCharmap(
- PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- mapping,
- errors),
- PyUnicode_GET_SIZE(str));
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
+ return NULL;
+ }
+ v = codec_tuple(_PyUnicode_EncodeCharmap(str, mapping, errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
@@ -989,7 +1022,7 @@ charmap_build(PyObject *self, PyObject *args)
return PyUnicode_BuildEncodingMap(map);
}
-#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
+#ifdef HAVE_MBCS
static PyObject *
mbcs_encode(PyObject *self,
@@ -1003,18 +1036,42 @@ mbcs_encode(PyObject *self,
return NULL;
str = PyUnicode_FromObject(str);
- if (str == NULL)
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
+ return NULL;
+ }
+ v = codec_tuple(PyUnicode_EncodeCodePage(CP_ACP, str, errors),
+ PyUnicode_GET_LENGTH(str));
+ Py_DECREF(str);
+ return v;
+}
+
+static PyObject *
+code_page_encode(PyObject *self,
+ PyObject *args)
+{
+ PyObject *str, *v;
+ const char *errors = NULL;
+ int code_page;
+
+ if (!PyArg_ParseTuple(args, "iO|z:code_page_encode",
+ &code_page, &str, &errors))
+ return NULL;
+
+ str = PyUnicode_FromObject(str);
+ if (str == NULL || PyUnicode_READY(str) < 0) {
+ Py_XDECREF(str);
return NULL;
- v = codec_tuple(PyUnicode_EncodeMBCS(
- PyUnicode_AS_UNICODE(str),
- PyUnicode_GET_SIZE(str),
- errors),
- PyUnicode_GET_SIZE(str));
+ }
+ v = codec_tuple(PyUnicode_EncodeCodePage(code_page,
+ str,
+ errors),
+ PyUnicode_GET_LENGTH(str));
Py_DECREF(str);
return v;
}
-#endif /* MS_WINDOWS */
+#endif /* HAVE_MBCS */
/* --- Error handler registry --------------------------------------------- */
@@ -1101,9 +1158,11 @@ static PyMethodDef _codecs_functions[] = {
{"charmap_decode", charmap_decode, METH_VARARGS},
{"charmap_build", charmap_build, METH_VARARGS},
{"readbuffer_encode", readbuffer_encode, METH_VARARGS},
-#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
+#ifdef HAVE_MBCS
{"mbcs_encode", mbcs_encode, METH_VARARGS},
{"mbcs_decode", mbcs_decode, METH_VARARGS},
+ {"code_page_encode", code_page_encode, METH_VARARGS},
+ {"code_page_decode", code_page_decode, METH_VARARGS},
#endif
{"register_error", register_error, METH_VARARGS,
register_error__doc__},
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 54c1343e2a..3cf4764c4f 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -413,10 +413,9 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
static int
_deque_rotate(dequeobject *deque, Py_ssize_t n)
{
- Py_ssize_t i, len=deque->len, halflen=(len+1)>>1;
- PyObject *item, *rv;
+ Py_ssize_t m, len=deque->len, halflen=len>>1;
- if (len == 0)
+ if (len <= 1)
return 0;
if (n > halflen || n < -halflen) {
n %= len;
@@ -425,24 +424,79 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n)
else if (n < -halflen)
n += len;
}
+ assert(len > 1);
+ assert(-halflen <= n && n <= halflen);
- for (i=0 ; i<n ; i++) {
- item = deque_pop(deque, NULL);
- assert (item != NULL);
- rv = deque_appendleft(deque, item);
- Py_DECREF(item);
- if (rv == NULL)
- return -1;
- Py_DECREF(rv);
+ deque->state++;
+ while (n > 0) {
+ if (deque->leftindex == 0) {
+ block *b = newblock(NULL, deque->leftblock, len);
+ if (b == NULL)
+ return -1;
+ assert(deque->leftblock->leftlink == NULL);
+ deque->leftblock->leftlink = b;
+ deque->leftblock = b;
+ deque->leftindex = BLOCKLEN;
+ }
+ assert(deque->leftindex > 0);
+
+ m = n;
+ if (m > deque->rightindex + 1)
+ m = deque->rightindex + 1;
+ if (m > deque->leftindex)
+ m = deque->leftindex;
+ assert (m > 0 && m <= len);
+ memcpy(&deque->leftblock->data[deque->leftindex - m],
+ &deque->rightblock->data[deque->rightindex + 1 - m],
+ m * sizeof(PyObject *));
+ deque->rightindex -= m;
+ deque->leftindex -= m;
+ n -= m;
+
+ if (deque->rightindex == -1) {
+ block *prevblock = deque->rightblock->leftlink;
+ assert(deque->rightblock != NULL);
+ assert(deque->leftblock != deque->rightblock);
+ freeblock(deque->rightblock);
+ prevblock->rightlink = NULL;
+ deque->rightblock = prevblock;
+ deque->rightindex = BLOCKLEN - 1;
+ }
}
- for (i=0 ; i>n ; i--) {
- item = deque_popleft(deque, NULL);
- assert (item != NULL);
- rv = deque_append(deque, item);
- Py_DECREF(item);
- if (rv == NULL)
- return -1;
- Py_DECREF(rv);
+ while (n < 0) {
+ if (deque->rightindex == BLOCKLEN - 1) {
+ block *b = newblock(deque->rightblock, NULL, len);
+ if (b == NULL)
+ return -1;
+ assert(deque->rightblock->rightlink == NULL);
+ deque->rightblock->rightlink = b;
+ deque->rightblock = b;
+ deque->rightindex = -1;
+ }
+ assert (deque->rightindex < BLOCKLEN - 1);
+
+ m = -n;
+ if (m > BLOCKLEN - deque->leftindex)
+ m = BLOCKLEN - deque->leftindex;
+ if (m > BLOCKLEN - 1 - deque->rightindex)
+ m = BLOCKLEN - 1 - deque->rightindex;
+ assert (m > 0 && m <= len);
+ memcpy(&deque->rightblock->data[deque->rightindex + 1],
+ &deque->leftblock->data[deque->leftindex],
+ m * sizeof(PyObject *));
+ deque->leftindex += m;
+ deque->rightindex += m;
+ n += m;
+
+ if (deque->leftindex == BLOCKLEN) {
+ block *nextblock = deque->leftblock->rightlink;
+ assert(deque->leftblock != deque->rightblock);
+ freeblock(deque->leftblock);
+ assert(nextblock != NULL);
+ nextblock->leftlink = NULL;
+ deque->leftblock = nextblock;
+ deque->leftindex = 0;
+ }
}
return 0;
}
@@ -588,7 +642,7 @@ deque_remove(dequeobject *deque, PyObject *value)
PyDoc_STRVAR(remove_doc,
"D.remove(value) -- remove first occurrence of value.");
-static int
+static void
deque_clear(dequeobject *deque)
{
PyObject *item;
@@ -601,7 +655,6 @@ deque_clear(dequeobject *deque)
assert(deque->leftblock == deque->rightblock &&
deque->leftindex - 1 == deque->rightindex &&
deque->len == 0);
- return 0;
}
static PyObject *
@@ -704,10 +757,7 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v)
static PyObject *
deque_clearmethod(dequeobject *deque)
{
- int rv;
-
- rv = deque_clear(deque);
- assert (rv != -1);
+ deque_clear(deque);
Py_RETURN_NONE;
}
@@ -767,8 +817,9 @@ static PyObject *
deque_reduce(dequeobject *deque)
{
PyObject *dict, *result, *aslist;
+ _Py_IDENTIFIER(__dict__);
- dict = PyObject_GetAttrString((PyObject *)deque, "__dict__");
+ dict = _PyObject_GetAttrId((PyObject *)deque, &PyId___dict__);
if (dict == NULL)
PyErr_Clear();
aslist = PySequence_List((PyObject *)deque);
@@ -832,8 +883,7 @@ deque_richcompare(PyObject *v, PyObject *w, int op)
if (!PyObject_TypeCheck(v, &deque_type) ||
!PyObject_TypeCheck(w, &deque_type)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
/* Shortcuts */
@@ -1141,6 +1191,35 @@ dequeiter_next(dequeiterobject *it)
}
static PyObject *
+dequeiter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ Py_ssize_t i, index=0;
+ PyObject *deque;
+ dequeiterobject *it;
+ if (!PyArg_ParseTuple(args, "O!|n", &deque_type, &deque, &index))
+ return NULL;
+ assert(type == &dequeiter_type);
+
+ it = (dequeiterobject*)deque_iter((dequeobject *)deque);
+ if (!it)
+ return NULL;
+ /* consume items from the queue */
+ for(i=0; i<index; i++) {
+ PyObject *item = dequeiter_next(it);
+ if (item) {
+ Py_DECREF(item);
+ } else {
+ if (it->counter) {
+ Py_DECREF(it);
+ return NULL;
+ } else
+ break;
+ }
+ }
+ return (PyObject*)it;
+}
+
+static PyObject *
dequeiter_len(dequeiterobject *it)
{
return PyLong_FromSsize_t(it->counter);
@@ -1148,14 +1227,21 @@ dequeiter_len(dequeiterobject *it)
PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(it)).");
+static PyObject *
+dequeiter_reduce(dequeiterobject *it)
+{
+ return Py_BuildValue("O(On)", Py_TYPE(it), it->deque, it->deque->len - it->counter);
+}
+
static PyMethodDef dequeiter_methods[] = {
{"__length_hint__", (PyCFunction)dequeiter_len, METH_NOARGS, length_hint_doc},
+ {"__reduce__", (PyCFunction)dequeiter_reduce, METH_NOARGS, reduce_doc},
{NULL, NULL} /* sentinel */
};
static PyTypeObject dequeiter_type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "deque_iterator", /* tp_name */
+ "_collections._deque_iterator", /* tp_name */
sizeof(dequeiterobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
@@ -1183,6 +1269,16 @@ static PyTypeObject dequeiter_type = {
PyObject_SelfIter, /* tp_iter */
(iternextfunc)dequeiter_next, /* tp_iternext */
dequeiter_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ dequeiter_new, /* tp_new */
0,
};
@@ -1236,9 +1332,38 @@ dequereviter_next(dequeiterobject *it)
return item;
}
+static PyObject *
+dequereviter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ Py_ssize_t i, index=0;
+ PyObject *deque;
+ dequeiterobject *it;
+ if (!PyArg_ParseTuple(args, "O!|n", &deque_type, &deque, &index))
+ return NULL;
+ assert(type == &dequereviter_type);
+
+ it = (dequeiterobject*)deque_reviter((dequeobject *)deque);
+ if (!it)
+ return NULL;
+ /* consume items from the queue */
+ for(i=0; i<index; i++) {
+ PyObject *item = dequereviter_next(it);
+ if (item) {
+ Py_DECREF(item);
+ } else {
+ if (it->counter) {
+ Py_DECREF(it);
+ return NULL;
+ } else
+ break;
+ }
+ }
+ return (PyObject*)it;
+}
+
static PyTypeObject dequereviter_type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "deque_reverse_iterator", /* tp_name */
+ "_collections._deque_reverse_iterator", /* tp_name */
sizeof(dequeiterobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
@@ -1266,6 +1391,16 @@ static PyTypeObject dequereviter_type = {
PyObject_SelfIter, /* tp_iter */
(iternextfunc)dequereviter_next, /* tp_iternext */
dequeiter_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ dequereviter_new, /* tp_new */
0,
};
@@ -1354,13 +1489,15 @@ defdict_reduce(defdictobject *dd)
PyObject *items;
PyObject *iter;
PyObject *result;
+ _Py_IDENTIFIER(items);
+
if (dd->default_factory == NULL || dd->default_factory == Py_None)
args = PyTuple_New(0);
else
args = PyTuple_Pack(1, dd->default_factory);
if (args == NULL)
return NULL;
- items = PyObject_CallMethod((PyObject *)dd, "items", "()");
+ items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, "()");
if (items == NULL) {
Py_DECREF(args);
return NULL;
@@ -1488,11 +1625,13 @@ defdict_init(PyObject *self, PyObject *args, PyObject *kwds)
}
PyDoc_STRVAR(defdict_doc,
-"defaultdict(default_factory) --> dict with default factory\n\
+"defaultdict(default_factory[, ...]) --> dict with default factory\n\
\n\
The default factory is called without arguments to produce\n\
a new value when a key is not present, in __getitem__ only.\n\
A defaultdict compares equal to a dict with the same items.\n\
+All remaining arguments are treated the same as if they were\n\
+passed to the dict constructor, including keyword arguments.\n\
");
/* See comment in xxsubtype.c */
@@ -1552,10 +1691,18 @@ Count elements in the iterable, updating the mappping");
static PyObject *
_count_elements(PyObject *self, PyObject *args)
{
+ _Py_IDENTIFIER(get);
+ _Py_IDENTIFIER(__setitem__);
PyObject *it, *iterable, *mapping, *oldval;
PyObject *newval = NULL;
PyObject *key = NULL;
+ PyObject *zero = NULL;
PyObject *one = NULL;
+ PyObject *bound_get = NULL;
+ PyObject *mapping_get;
+ PyObject *dict_get;
+ PyObject *mapping_setitem;
+ PyObject *dict_setitem;
if (!PyArg_UnpackTuple(args, "_count_elements", 2, 2, &mapping, &iterable))
return NULL;
@@ -1565,20 +1712,23 @@ _count_elements(PyObject *self, PyObject *args)
return NULL;
one = PyLong_FromLong(1);
- if (one == NULL) {
- Py_DECREF(it);
- return NULL;
- }
+ if (one == NULL)
+ goto done;
+
+ /* Only take the fast path when get() and __setitem__()
+ * have not been overridden.
+ */
+ mapping_get = _PyType_LookupId(Py_TYPE(mapping), &PyId_get);
+ dict_get = _PyType_LookupId(&PyDict_Type, &PyId_get);
+ mapping_setitem = _PyType_LookupId(Py_TYPE(mapping), &PyId___setitem__);
+ dict_setitem = _PyType_LookupId(&PyDict_Type, &PyId___setitem__);
- if (PyDict_CheckExact(mapping)) {
+ if (mapping_get != NULL && mapping_get == dict_get &&
+ mapping_setitem != NULL && mapping_setitem == dict_setitem) {
while (1) {
key = PyIter_Next(it);
- if (key == NULL) {
- if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration))
- PyErr_Clear();
- else
- break;
- }
+ if (key == NULL)
+ break;
oldval = PyDict_GetItem(mapping, key);
if (oldval == NULL) {
if (PyDict_SetItem(mapping, key, one) == -1)
@@ -1594,27 +1744,25 @@ _count_elements(PyObject *self, PyObject *args)
Py_DECREF(key);
}
} else {
+ bound_get = PyObject_GetAttrString(mapping, "get");
+ if (bound_get == NULL)
+ goto done;
+
+ zero = PyLong_FromLong(0);
+ if (zero == NULL)
+ goto done;
+
while (1) {
key = PyIter_Next(it);
- if (key == NULL) {
- if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration))
- PyErr_Clear();
- else
- break;
- }
- oldval = PyObject_GetItem(mapping, key);
- if (oldval == NULL) {
- if (!PyErr_Occurred() || !PyErr_ExceptionMatches(PyExc_KeyError))
- break;
- PyErr_Clear();
- Py_INCREF(one);
- newval = one;
- } else {
- newval = PyNumber_Add(oldval, one);
- Py_DECREF(oldval);
- if (newval == NULL)
- break;
- }
+ if (key == NULL)
+ break;
+ oldval = PyObject_CallFunctionObjArgs(bound_get, key, zero, NULL);
+ if (oldval == NULL)
+ break;
+ newval = PyNumber_Add(oldval, one);
+ Py_DECREF(oldval);
+ if (newval == NULL)
+ break;
if (PyObject_SetItem(mapping, key, newval) == -1)
break;
Py_CLEAR(newval);
@@ -1622,10 +1770,13 @@ _count_elements(PyObject *self, PyObject *args)
}
}
+done:
Py_DECREF(it);
Py_XDECREF(key);
Py_XDECREF(newval);
- Py_DECREF(one);
+ Py_XDECREF(bound_get);
+ Py_XDECREF(zero);
+ Py_XDECREF(one);
if (PyErr_Occurred())
return NULL;
Py_RETURN_NONE;
@@ -1678,9 +1829,13 @@ PyInit__collections(void)
if (PyType_Ready(&dequeiter_type) < 0)
return NULL;
+ Py_INCREF(&dequeiter_type);
+ PyModule_AddObject(m, "_deque_iterator", (PyObject *)&dequeiter_type);
if (PyType_Ready(&dequereviter_type) < 0)
return NULL;
+ Py_INCREF(&dequereviter_type);
+ PyModule_AddObject(m, "_deque_reverse_iterator", (PyObject *)&dequereviter_type);
return m;
}
diff --git a/Modules/cryptmodule.c b/Modules/_cryptmodule.c
index d5a42ff951..51007889bf 100644
--- a/Modules/cryptmodule.c
+++ b/Modules/_cryptmodule.c
@@ -45,7 +45,7 @@ static PyMethodDef crypt_methods[] = {
static struct PyModuleDef cryptmodule = {
PyModuleDef_HEAD_INIT,
- "crypt",
+ "_crypt",
NULL,
-1,
crypt_methods,
@@ -56,7 +56,7 @@ static struct PyModuleDef cryptmodule = {
};
PyMODINIT_FUNC
-PyInit_crypt(void)
+PyInit__crypt(void)
{
return PyModule_Create(&cryptmodule);
}
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 88d4f9774f..f5f6e71686 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -13,12 +13,40 @@ module instead.
#include "Python.h"
#include "structmember.h"
-#define IS_BASESTRING(o) \
- PyUnicode_Check(o)
-static PyObject *error_obj; /* CSV exception */
-static PyObject *dialects; /* Dialect registry */
-static long field_limit = 128 * 1024; /* max parsed field size */
+typedef struct {
+ PyObject *error_obj; /* CSV exception */
+ PyObject *dialects; /* Dialect registry */
+ long field_limit; /* max parsed field size */
+} _csvstate;
+
+#define _csvstate(o) ((_csvstate *)PyModule_GetState(o))
+
+static int
+_csv_clear(PyObject *m)
+{
+ Py_CLEAR(_csvstate(m)->error_obj);
+ Py_CLEAR(_csvstate(m)->dialects);
+ return 0;
+}
+
+static int
+_csv_traverse(PyObject *m, visitproc visit, void *arg)
+{
+ Py_VISIT(_csvstate(m)->error_obj);
+ Py_VISIT(_csvstate(m)->dialects);
+ return 0;
+}
+
+static void
+_csv_free(void *m)
+{
+ _csv_clear((PyObject *)m);
+}
+
+static struct PyModuleDef _csvmodule;
+
+#define _csvstate_global ((_csvstate *)PyModule_GetState(PyState_FindModule(&_csvmodule)))
typedef enum {
START_RECORD, START_FIELD, ESCAPED_CHAR, IN_FIELD,
@@ -47,9 +75,9 @@ typedef struct {
PyObject_HEAD
int doublequote; /* is " represented by ""? */
- Py_UNICODE delimiter; /* field separator */
- Py_UNICODE quotechar; /* quote character */
- Py_UNICODE escapechar; /* escape character */
+ Py_UCS4 delimiter; /* field separator */
+ Py_UCS4 quotechar; /* quote character */
+ Py_UCS4 escapechar; /* escape character */
int skipinitialspace; /* ignore spaces following delimiter? */
PyObject *lineterminator; /* string to write between records */
int quoting; /* style of quoting to write */
@@ -68,7 +96,7 @@ typedef struct {
PyObject *fields; /* field list for current record */
ParserState state; /* current CSV parse state */
- Py_UNICODE *field; /* build current field in here */
+ Py_UCS4 *field; /* temporary buffer */
Py_ssize_t field_size; /* size of allocated buffer */
Py_ssize_t field_len; /* length of current field */
int numeric_field; /* treat field as numeric */
@@ -86,7 +114,7 @@ typedef struct {
DialectObj *dialect; /* parsing dialect */
- Py_UNICODE *rec; /* buffer for parser.join */
+ Py_UCS4 *rec; /* buffer for parser.join */
Py_ssize_t rec_size; /* size of allocated record */
Py_ssize_t rec_len; /* length of record */
int num_fields; /* number of fields in record */
@@ -103,10 +131,10 @@ get_dialect_from_registry(PyObject * name_obj)
{
PyObject *dialect_obj;
- dialect_obj = PyDict_GetItem(dialects, name_obj);
+ dialect_obj = PyDict_GetItem(_csvstate_global->dialects, name_obj);
if (dialect_obj == NULL) {
if (!PyErr_Occurred())
- PyErr_Format(error_obj, "unknown dialect");
+ PyErr_Format(_csvstate_global->error_obj, "unknown dialect");
}
else
Py_INCREF(dialect_obj);
@@ -121,14 +149,14 @@ get_string(PyObject *str)
}
static PyObject *
-get_nullchar_as_None(Py_UNICODE c)
+get_nullchar_as_None(Py_UCS4 c)
{
if (c == '\0') {
Py_INCREF(Py_None);
return Py_None;
}
else
- return PyUnicode_FromUnicode((Py_UNICODE *)&c, 1);
+ return PyUnicode_FromOrdinal(c);
}
static PyObject *
@@ -203,25 +231,30 @@ _set_int(const char *name, int *target, PyObject *src, int dflt)
}
static int
-_set_char(const char *name, Py_UNICODE *target, PyObject *src, Py_UNICODE dflt)
+_set_char(const char *name, Py_UCS4 *target, PyObject *src, Py_UCS4 dflt)
{
if (src == NULL)
*target = dflt;
else {
*target = '\0';
if (src != Py_None) {
- Py_UNICODE *buf;
Py_ssize_t len;
- buf = PyUnicode_AsUnicode(src);
- len = PyUnicode_GetSize(src);
- if (buf == NULL || len > 1) {
+ if (!PyUnicode_Check(src)) {
+ PyErr_Format(PyExc_TypeError,
+ "\"%s\" must be string, not %.200s", name,
+ src->ob_type->tp_name);
+ return -1;
+ }
+ len = PyUnicode_GetLength(src);
+ if (len > 1) {
PyErr_Format(PyExc_TypeError,
"\"%s\" must be an 1-character string",
name);
return -1;
}
+ /* PyUnicode_READY() is called in PyUnicode_GetLength() */
if (len > 0)
- *target = buf[0];
+ *target = PyUnicode_READ_CHAR(src, 0);
}
}
return 0;
@@ -235,12 +268,14 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt)
else {
if (src == Py_None)
*target = NULL;
- else if (!IS_BASESTRING(src)) {
+ else if (!PyUnicode_Check(src)) {
PyErr_Format(PyExc_TypeError,
"\"%s\" must be a string", name);
return -1;
}
else {
+ if (PyUnicode_READY(src) == -1)
+ return -1;
Py_XDECREF(*target);
Py_INCREF(src);
*target = src;
@@ -329,7 +364,7 @@ dialect_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
return NULL;
if (dialect != NULL) {
- if (IS_BASESTRING(dialect)) {
+ if (PyUnicode_Check(dialect)) {
dialect = get_dialect_from_registry(dialect);
if (dialect == NULL)
return NULL;
@@ -396,7 +431,8 @@ dialect_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
if (dialect_check_quoting(self->quoting))
goto err;
if (self->delimiter == 0) {
- PyErr_SetString(PyExc_TypeError, "delimiter must be set");
+ PyErr_SetString(PyExc_TypeError,
+ "\"delimiter\" must be an 1-character string");
goto err;
}
if (quotechar == Py_None && quoting == NULL)
@@ -502,7 +538,8 @@ parse_save_field(ReaderObj *self)
{
PyObject *field;
- field = PyUnicode_FromUnicode(self->field, self->field_len);
+ field = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
+ (void *) self->field, self->field_len);
if (field == NULL)
return -1;
self->field_len = 0;
@@ -511,11 +548,9 @@ parse_save_field(ReaderObj *self)
self->numeric_field = 0;
tmp = PyNumber_Float(field);
- if (tmp == NULL) {
- Py_DECREF(field);
- return -1;
- }
Py_DECREF(field);
+ if (tmp == NULL)
+ return -1;
field = tmp;
}
PyList_Append(self->fields, field);
@@ -530,16 +565,16 @@ parse_grow_buff(ReaderObj *self)
self->field_size = 4096;
if (self->field != NULL)
PyMem_Free(self->field);
- self->field = PyMem_New(Py_UNICODE, self->field_size);
+ self->field = PyMem_New(Py_UCS4, self->field_size);
}
else {
+ Py_UCS4 *field = self->field;
if (self->field_size > PY_SSIZE_T_MAX / 2) {
PyErr_NoMemory();
return 0;
}
self->field_size *= 2;
- self->field = PyMem_Resize(self->field, Py_UNICODE,
- self->field_size);
+ self->field = PyMem_Resize(field, Py_UCS4, self->field_size);
}
if (self->field == NULL) {
PyErr_NoMemory();
@@ -549,11 +584,11 @@ parse_grow_buff(ReaderObj *self)
}
static int
-parse_add_char(ReaderObj *self, Py_UNICODE c)
+parse_add_char(ReaderObj *self, Py_UCS4 c)
{
- if (self->field_len >= field_limit) {
- PyErr_Format(error_obj, "field larger than field limit (%ld)",
- field_limit);
+ if (self->field_len >= _csvstate_global->field_limit) {
+ PyErr_Format(_csvstate_global->error_obj, "field larger than field limit (%ld)",
+ _csvstate_global->field_limit);
return -1;
}
if (self->field_len == self->field_size && !parse_grow_buff(self))
@@ -563,7 +598,7 @@ parse_add_char(ReaderObj *self, Py_UNICODE c)
}
static int
-parse_process_char(ReaderObj *self, Py_UNICODE c)
+parse_process_char(ReaderObj *self, Py_UCS4 c)
{
DialectObj *dialect = self->dialect;
@@ -710,7 +745,7 @@ parse_process_char(ReaderObj *self, Py_UNICODE c)
}
else {
/* illegal */
- PyErr_Format(error_obj, "'%c' expected after '%c'",
+ PyErr_Format(_csvstate_global->error_obj, "'%c' expected after '%c'",
dialect->delimiter,
dialect->quotechar);
return -1;
@@ -723,7 +758,7 @@ parse_process_char(ReaderObj *self, Py_UNICODE c)
else if (c == '\0')
self->state = START_RECORD;
else {
- PyErr_Format(error_obj, "new-line character seen in unquoted field - do you need to open the file in universal-newline mode?");
+ PyErr_Format(_csvstate_global->error_obj, "new-line character seen in unquoted field - do you need to open the file in universal-newline mode?");
return -1;
}
break;
@@ -748,10 +783,12 @@ parse_reset(ReaderObj *self)
static PyObject *
Reader_iternext(ReaderObj *self)
{
- PyObject *lineobj;
PyObject *fields = NULL;
- Py_UNICODE *line, c;
- Py_ssize_t linelen;
+ Py_UCS4 c;
+ Py_ssize_t pos, linelen;
+ unsigned int kind;
+ void *data;
+ PyObject *lineobj;
if (parse_reset(self) < 0)
return NULL;
@@ -762,14 +799,15 @@ Reader_iternext(ReaderObj *self)
if (!PyErr_Occurred() && (self->field_len != 0 ||
self->state == IN_QUOTED_FIELD)) {
if (self->dialect->strict)
- PyErr_SetString(error_obj, "unexpected end of data");
+ PyErr_SetString(_csvstate_global->error_obj,
+ "unexpected end of data");
else if (parse_save_field(self) >= 0)
break;
}
return NULL;
}
if (!PyUnicode_Check(lineobj)) {
- PyErr_Format(error_obj,
+ PyErr_Format(_csvstate_global->error_obj,
"iterator should return strings, "
"not %.200s "
"(did you open the file in text mode?)",
@@ -778,18 +816,20 @@ Reader_iternext(ReaderObj *self)
Py_DECREF(lineobj);
return NULL;
}
- ++self->line_num;
- line = PyUnicode_AsUnicode(lineobj);
- linelen = PyUnicode_GetSize(lineobj);
- if (line == NULL || linelen < 0) {
+ if (PyUnicode_READY(lineobj) == -1) {
Py_DECREF(lineobj);
return NULL;
}
+ ++self->line_num;
+ kind = PyUnicode_KIND(lineobj);
+ data = PyUnicode_DATA(lineobj);
+ pos = 0;
+ linelen = PyUnicode_GET_LENGTH(lineobj);
while (linelen--) {
- c = *line++;
+ c = PyUnicode_READ(kind, data, pos);
if (c == '\0') {
Py_DECREF(lineobj);
- PyErr_Format(error_obj,
+ PyErr_Format(_csvstate_global->error_obj,
"line contains NULL byte");
goto err;
}
@@ -797,6 +837,7 @@ Reader_iternext(ReaderObj *self)
Py_DECREF(lineobj);
goto err;
}
+ pos++;
}
Py_DECREF(lineobj);
if (parse_process_char(self, 0) < 0)
@@ -953,13 +994,13 @@ join_reset(WriterObj *self)
* record length.
*/
static Py_ssize_t
-join_append_data(WriterObj *self, Py_UNICODE *field, int quote_empty,
- int *quoted, int copy_phase)
+join_append_data(WriterObj *self, unsigned int field_kind, void *field_data,
+ Py_ssize_t field_len, int quote_empty, int *quoted,
+ int copy_phase)
{
DialectObj *dialect = self->dialect;
int i;
Py_ssize_t rec_len;
- Py_UNICODE *lineterm;
#define ADDCH(c) \
do {\
@@ -968,10 +1009,6 @@ join_append_data(WriterObj *self, Py_UNICODE *field, int quote_empty,
rec_len++;\
} while(0)
- lineterm = PyUnicode_AsUnicode(dialect->lineterminator);
- if (lineterm == NULL)
- return -1;
-
rec_len = self->rec_len;
/* If this is not the first field we need a field separator */
@@ -984,17 +1021,16 @@ join_append_data(WriterObj *self, Py_UNICODE *field, int quote_empty,
/* Copy/count field data */
/* If field is null just pass over */
- for (i = 0; field; i++) {
- Py_UNICODE c = field[i];
+ for (i = 0; field_data && (i < field_len); i++) {
+ Py_UCS4 c = PyUnicode_READ(field_kind, field_data, i);
int want_escape = 0;
- if (c == '\0')
- break;
-
if (c == dialect->delimiter ||
c == dialect->escapechar ||
c == dialect->quotechar ||
- Py_UNICODE_strchr(lineterm, c)) {
+ PyUnicode_FindChar(
+ dialect->lineterminator, c, 0,
+ PyUnicode_GET_LENGTH(dialect->lineterminator), 1) >= 0) {
if (dialect->quoting == QUOTE_NONE)
want_escape = 1;
else {
@@ -1009,7 +1045,7 @@ join_append_data(WriterObj *self, Py_UNICODE *field, int quote_empty,
}
if (want_escape) {
if (!dialect->escapechar) {
- PyErr_Format(error_obj,
+ PyErr_Format(_csvstate_global->error_obj,
"need to escape, but no escapechar set");
return -1;
}
@@ -1025,7 +1061,7 @@ join_append_data(WriterObj *self, Py_UNICODE *field, int quote_empty,
*/
if (i == 0 && quote_empty) {
if (dialect->quoting == QUOTE_NONE) {
- PyErr_Format(error_obj,
+ PyErr_Format(_csvstate_global->error_obj,
"single empty field record must be quoted");
return -1;
}
@@ -1057,14 +1093,13 @@ join_check_rec_size(WriterObj *self, Py_ssize_t rec_len)
self->rec_size = (rec_len / MEM_INCR + 1) * MEM_INCR;
if (self->rec != NULL)
PyMem_Free(self->rec);
- self->rec = PyMem_New(Py_UNICODE, self->rec_size);
+ self->rec = PyMem_New(Py_UCS4, self->rec_size);
}
else {
- Py_UNICODE* old_rec = self->rec;
+ Py_UCS4* old_rec = self->rec;
self->rec_size = (rec_len / MEM_INCR + 1) * MEM_INCR;
- self->rec = PyMem_Resize(self->rec, Py_UNICODE,
- self->rec_size);
+ self->rec = PyMem_Resize(old_rec, Py_UCS4, self->rec_size);
if (self->rec == NULL)
PyMem_Free(old_rec);
}
@@ -1077,11 +1112,22 @@ join_check_rec_size(WriterObj *self, Py_ssize_t rec_len)
}
static int
-join_append(WriterObj *self, Py_UNICODE *field, int *quoted, int quote_empty)
+join_append(WriterObj *self, PyObject *field, int *quoted, int quote_empty)
{
+ unsigned int field_kind = -1;
+ void *field_data = NULL;
+ Py_ssize_t field_len = 0;
Py_ssize_t rec_len;
- rec_len = join_append_data(self, field, quote_empty, quoted, 0);
+ if (field != NULL) {
+ if (PyUnicode_READY(field) == -1)
+ return 0;
+ field_kind = PyUnicode_KIND(field);
+ field_data = PyUnicode_DATA(field);
+ field_len = PyUnicode_GET_LENGTH(field);
+ }
+ rec_len = join_append_data(self, field_kind, field_data, field_len,
+ quote_empty, quoted, 0);
if (rec_len < 0)
return 0;
@@ -1089,7 +1135,8 @@ join_append(WriterObj *self, Py_UNICODE *field, int *quoted, int quote_empty)
if (!join_check_rec_size(self, rec_len))
return 0;
- self->rec_len = join_append_data(self, field, quote_empty, quoted, 1);
+ self->rec_len = join_append_data(self, field_kind, field_data, field_len,
+ quote_empty, quoted, 1);
self->num_fields++;
return 1;
@@ -1098,10 +1145,11 @@ join_append(WriterObj *self, Py_UNICODE *field, int *quoted, int quote_empty)
static int
join_append_lineterminator(WriterObj *self)
{
- Py_ssize_t terminator_len;
- Py_UNICODE *terminator;
+ Py_ssize_t terminator_len, i;
+ unsigned int term_kind;
+ void *term_data;
- terminator_len = PyUnicode_GetSize(self->dialect->lineterminator);
+ terminator_len = PyUnicode_GET_LENGTH(self->dialect->lineterminator);
if (terminator_len == -1)
return 0;
@@ -1109,11 +1157,10 @@ join_append_lineterminator(WriterObj *self)
if (!join_check_rec_size(self, self->rec_len + terminator_len))
return 0;
- terminator = PyUnicode_AsUnicode(self->dialect->lineterminator);
- if (terminator == NULL)
- return 0;
- memmove(self->rec + self->rec_len, terminator,
- sizeof(Py_UNICODE)*terminator_len);
+ term_kind = PyUnicode_KIND(self->dialect->lineterminator);
+ term_data = PyUnicode_DATA(self->dialect->lineterminator);
+ for (i = 0; i < terminator_len; i++)
+ self->rec[self->rec_len + i] = PyUnicode_READ(term_kind, term_data, i);
self->rec_len += terminator_len;
return 1;
@@ -1130,9 +1177,10 @@ csv_writerow(WriterObj *self, PyObject *seq)
{
DialectObj *dialect = self->dialect;
Py_ssize_t len, i;
+ PyObject *line, *result;
if (!PySequence_Check(seq))
- return PyErr_Format(error_obj, "sequence expected");
+ return PyErr_Format(_csvstate_global->error_obj, "sequence expected");
len = PySequence_Length(seq);
if (len < 0)
@@ -1163,14 +1211,11 @@ csv_writerow(WriterObj *self, PyObject *seq)
}
if (PyUnicode_Check(field)) {
- append_ok = join_append(self,
- PyUnicode_AS_UNICODE(field),
- &quoted, len == 1);
+ append_ok = join_append(self, field, &quoted, len == 1);
Py_DECREF(field);
}
else if (field == Py_None) {
- append_ok = join_append(self, NULL,
- &quoted, len == 1);
+ append_ok = join_append(self, NULL, &quoted, len == 1);
Py_DECREF(field);
}
else {
@@ -1180,9 +1225,7 @@ csv_writerow(WriterObj *self, PyObject *seq)
Py_DECREF(field);
if (str == NULL)
return NULL;
- append_ok = join_append(self,
- PyUnicode_AS_UNICODE(str),
- &quoted, len == 1);
+ append_ok = join_append(self, str, &quoted, len == 1);
Py_DECREF(str);
}
if (!append_ok)
@@ -1194,9 +1237,13 @@ csv_writerow(WriterObj *self, PyObject *seq)
if (!join_append_lineterminator(self))
return 0;
- return PyObject_CallFunction(self->writeline,
- "(u#)", self->rec,
- self->rec_len);
+ line = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
+ (void *) self->rec, self->rec_len);
+ if (line == NULL)
+ return NULL;
+ result = PyObject_CallFunctionObjArgs(self->writeline, line, NULL);
+ Py_DECREF(line);
+ return result;
}
PyDoc_STRVAR(csv_writerows_doc,
@@ -1320,6 +1367,7 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
{
PyObject * output_file, * dialect = NULL;
WriterObj * self = PyObject_GC_New(WriterObj, &Writer_Type);
+ _Py_IDENTIFIER(write);
if (!self)
return NULL;
@@ -1336,7 +1384,7 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
Py_DECREF(self);
return NULL;
}
- self->writeline = PyObject_GetAttrString(output_file, "write");
+ self->writeline = _PyObject_GetAttrId(output_file, &PyId_write);
if (self->writeline == NULL || !PyCallable_Check(self->writeline)) {
PyErr_SetString(PyExc_TypeError,
"argument 1 must have a \"write\" method");
@@ -1358,7 +1406,7 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
static PyObject *
csv_list_dialects(PyObject *module, PyObject *args)
{
- return PyDict_Keys(dialects);
+ return PyDict_Keys(_csvstate_global->dialects);
}
static PyObject *
@@ -1369,15 +1417,17 @@ csv_register_dialect(PyObject *module, PyObject *args, PyObject *kwargs)
if (!PyArg_UnpackTuple(args, "", 1, 2, &name_obj, &dialect_obj))
return NULL;
- if (!IS_BASESTRING(name_obj)) {
+ if (!PyUnicode_Check(name_obj)) {
PyErr_SetString(PyExc_TypeError,
- "dialect name must be a string or unicode");
+ "dialect name must be a string");
return NULL;
}
+ if (PyUnicode_READY(name_obj) == -1)
+ return NULL;
dialect = _call_dialect(dialect_obj, kwargs);
if (dialect == NULL)
return NULL;
- if (PyDict_SetItem(dialects, name_obj, dialect) < 0) {
+ if (PyDict_SetItem(_csvstate_global->dialects, name_obj, dialect) < 0) {
Py_DECREF(dialect);
return NULL;
}
@@ -1389,8 +1439,8 @@ csv_register_dialect(PyObject *module, PyObject *args, PyObject *kwargs)
static PyObject *
csv_unregister_dialect(PyObject *module, PyObject *name_obj)
{
- if (PyDict_DelItem(dialects, name_obj) < 0)
- return PyErr_Format(error_obj, "unknown dialect");
+ if (PyDict_DelItem(_csvstate_global->dialects, name_obj) < 0)
+ return PyErr_Format(_csvstate_global->error_obj, "unknown dialect");
Py_INCREF(Py_None);
return Py_None;
}
@@ -1405,7 +1455,7 @@ static PyObject *
csv_field_size_limit(PyObject *module, PyObject *args)
{
PyObject *new_limit = NULL;
- long old_limit = field_limit;
+ long old_limit = _csvstate_global->field_limit;
if (!PyArg_UnpackTuple(args, "field_size_limit", 0, 1, &new_limit))
return NULL;
@@ -1415,9 +1465,9 @@ csv_field_size_limit(PyObject *module, PyObject *args)
"limit must be an integer");
return NULL;
}
- field_limit = PyLong_AsLong(new_limit);
- if (field_limit == -1 && PyErr_Occurred()) {
- field_limit = old_limit;
+ _csvstate_global->field_limit = PyLong_AsLong(new_limit);
+ if (_csvstate_global->field_limit == -1 && PyErr_Occurred()) {
+ _csvstate_global->field_limit = old_limit;
return NULL;
}
}
@@ -1556,17 +1606,16 @@ static struct PyMethodDef csv_methods[] = {
{ NULL, NULL }
};
-
static struct PyModuleDef _csvmodule = {
PyModuleDef_HEAD_INIT,
"_csv",
csv_module_doc,
- -1,
+ sizeof(_csvstate),
csv_methods,
NULL,
- NULL,
- NULL,
- NULL
+ _csv_traverse,
+ _csv_clear,
+ _csv_free
};
PyMODINIT_FUNC
@@ -1594,11 +1643,16 @@ PyInit__csv(void)
MODULE_VERSION) == -1)
return NULL;
+ /* Set the field limit */
+ _csvstate(module)->field_limit = 128 * 1024;
+ /* Do I still need to add this var to the Module Dict? */
+
/* Add _dialects dictionary */
- dialects = PyDict_New();
- if (dialects == NULL)
+ _csvstate(module)->dialects = PyDict_New();
+ if (_csvstate(module)->dialects == NULL)
return NULL;
- if (PyModule_AddObject(module, "_dialects", dialects))
+ Py_INCREF(_csvstate(module)->dialects);
+ if (PyModule_AddObject(module, "_dialects", _csvstate(module)->dialects))
return NULL;
/* Add quote styles into dictionary */
@@ -1614,9 +1668,10 @@ PyInit__csv(void)
return NULL;
/* Add the CSV exception object to the module. */
- error_obj = PyErr_NewException("_csv.Error", NULL, NULL);
- if (error_obj == NULL)
+ _csvstate(module)->error_obj = PyErr_NewException("_csv.Error", NULL, NULL);
+ if (_csvstate(module)->error_obj == NULL)
return NULL;
- PyModule_AddObject(module, "Error", error_obj);
+ Py_INCREF(_csvstate(module)->error_obj);
+ PyModule_AddObject(module, "Error", _csvstate(module)->error_obj);
return module;
}
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index e4e237ea84..48351bee03 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -143,26 +143,24 @@ typedef struct {
} DictRemoverObject;
static void
-_DictRemover_dealloc(PyObject *_self)
+_DictRemover_dealloc(PyObject *myself)
{
- DictRemoverObject *self = (DictRemoverObject *)_self;
+ DictRemoverObject *self = (DictRemoverObject *)myself;
Py_XDECREF(self->key);
Py_XDECREF(self->dict);
- Py_TYPE(self)->tp_free(_self);
+ Py_TYPE(self)->tp_free(myself);
}
static PyObject *
-_DictRemover_call(PyObject *_self, PyObject *args, PyObject *kw)
+_DictRemover_call(PyObject *myself, PyObject *args, PyObject *kw)
{
- DictRemoverObject *self = (DictRemoverObject *)_self;
+ DictRemoverObject *self = (DictRemoverObject *)myself;
if (self->key && self->dict) {
if (-1 == PyDict_DelItem(self->dict, self->key))
/* XXX Error context */
PyErr_WriteUnraisable(Py_None);
- Py_DECREF(self->key);
- self->key = NULL;
- Py_DECREF(self->dict);
- self->dict = NULL;
+ Py_CLEAR(self->key);
+ Py_CLEAR(self->dict);
}
Py_INCREF(Py_None);
return Py_None;
@@ -1142,6 +1140,8 @@ static int
WCharArray_set_value(CDataObject *self, PyObject *value)
{
Py_ssize_t result = 0;
+ Py_UNICODE *wstr;
+ Py_ssize_t len;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -1155,7 +1155,11 @@ WCharArray_set_value(CDataObject *self, PyObject *value)
return -1;
} else
Py_INCREF(value);
- if ((unsigned)PyUnicode_GET_SIZE(value) > self->b_size/sizeof(wchar_t)) {
+
+ wstr = PyUnicode_AsUnicodeAndSize(value, &len);
+ if (wstr == NULL)
+ return -1;
+ if ((unsigned)len > self->b_size/sizeof(wchar_t)) {
PyErr_SetString(PyExc_ValueError,
"string too long");
result = -1;
@@ -1843,11 +1847,9 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
if (PyUnicode_Check(proto)) {
- PyObject *v = _PyUnicode_AsDefaultEncodedString(proto, NULL);
- if (!v)
+ proto_str = PyUnicode_AsUTF8AndSize(proto, &proto_len);
+ if (!proto_str)
goto error;
- proto_str = PyBytes_AS_STRING(v);
- proto_len = PyBytes_GET_SIZE(v);
} else {
PyErr_SetString(PyExc_TypeError,
"class must define a '_type_' string attribute");
@@ -2467,17 +2469,17 @@ static PyMemberDef PyCData_members[] = {
{ NULL },
};
-static int PyCData_NewGetBuffer(PyObject *_self, Py_buffer *view, int flags)
+static int PyCData_NewGetBuffer(PyObject *myself, Py_buffer *view, int flags)
{
- CDataObject *self = (CDataObject *)_self;
- StgDictObject *dict = PyObject_stgdict(_self);
+ CDataObject *self = (CDataObject *)myself;
+ StgDictObject *dict = PyObject_stgdict(myself);
Py_ssize_t i;
if (view == NULL) return 0;
view->buf = self->b_ptr;
- view->obj = _self;
- Py_INCREF(_self);
+ view->obj = myself;
+ Py_INCREF(myself);
view->len = self->b_size;
view->readonly = 0;
/* use default format character if not set */
@@ -2512,36 +2514,36 @@ PyCData_nohash(PyObject *self)
}
static PyObject *
-PyCData_reduce(PyObject *_self, PyObject *args)
+PyCData_reduce(PyObject *myself, PyObject *args)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
- if (PyObject_stgdict(_self)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
+ if (PyObject_stgdict(myself)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
PyErr_SetString(PyExc_ValueError,
"ctypes objects containing pointers cannot be pickled");
return NULL;
}
return Py_BuildValue("O(O(NN))",
_unpickle,
- Py_TYPE(_self),
- PyObject_GetAttrString(_self, "__dict__"),
+ Py_TYPE(myself),
+ PyObject_GetAttrString(myself, "__dict__"),
PyBytes_FromStringAndSize(self->b_ptr, self->b_size));
}
static PyObject *
-PyCData_setstate(PyObject *_self, PyObject *args)
+PyCData_setstate(PyObject *myself, PyObject *args)
{
void *data;
Py_ssize_t len;
int res;
PyObject *dict, *mydict;
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (!PyArg_ParseTuple(args, "Os#", &dict, &data, &len))
return NULL;
if (len > self->b_size)
len = self->b_size;
memmove(self->b_ptr, data, len);
- mydict = PyObject_GetAttrString(_self, "__dict__");
+ mydict = PyObject_GetAttrString(myself, "__dict__");
res = PyDict_Update(mydict, dict);
Py_DECREF(mydict);
if (res == -1)
@@ -2667,8 +2669,8 @@ PyCData_FromBaseObj(PyObject *type, PyObject *base, Py_ssize_t index, char *adr)
cmem->b_index = index;
} else { /* copy contents of adr */
if (-1 == PyCData_MallocBuffer(cmem, dict)) {
- return NULL;
Py_DECREF(cmem);
+ return NULL;
}
memcpy(cmem->b_ptr, adr, dict->size);
cmem->b_index = index;
@@ -2926,10 +2928,8 @@ static int
PyCFuncPtr_set_restype(PyCFuncPtrObject *self, PyObject *ob)
{
if (ob == NULL) {
- Py_XDECREF(self->restype);
- self->restype = NULL;
- Py_XDECREF(self->checker);
- self->checker = NULL;
+ Py_CLEAR(self->restype);
+ Py_CLEAR(self->checker);
return 0;
}
if (ob != Py_None && !PyType_stgdict(ob) && !PyCallable_Check(ob)) {
@@ -2972,10 +2972,8 @@ PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob)
PyObject *converters;
if (ob == NULL || ob == Py_None) {
- Py_XDECREF(self->converters);
- self->converters = NULL;
- Py_XDECREF(self->argtypes);
- self->argtypes = NULL;
+ Py_CLEAR(self->converters);
+ Py_CLEAR(self->argtypes);
} else {
converters = converters_from_argtypes(ob);
if (!converters)
@@ -3449,7 +3447,7 @@ _get_arg(int *pindex, PyObject *name, PyObject *defval, PyObject *inargs, PyObje
Py_INCREF(v);
return v;
}
- if (kwds && (v = PyDict_GetItem(kwds, name))) {
+ if (kwds && name && (v = PyDict_GetItem(kwds, name))) {
++*pindex;
Py_INCREF(v);
return v;
@@ -3697,8 +3695,10 @@ _build_result(PyObject *result, PyObject *callargs,
PyTuple_SET_ITEM(tup, index, v);
index++;
} else if (bit & outmask) {
+ _Py_IDENTIFIER(__ctypes_from_outparam__);
+
v = PyTuple_GET_ITEM(callargs, i);
- v = PyObject_CallMethod(v, "__ctypes_from_outparam__", NULL);
+ v = _PyObject_CallMethodId(v, &PyId___ctypes_from_outparam__, NULL);
if (v == NULL || numretvals == 1) {
Py_DECREF(callargs);
return v;
@@ -4177,9 +4177,9 @@ Array_init(CDataObject *self, PyObject *args, PyObject *kw)
}
static PyObject *
-Array_item(PyObject *_self, Py_ssize_t index)
+Array_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t offset, size;
StgDictObject *stgdict;
@@ -4203,9 +4203,9 @@ Array_item(PyObject *_self, Py_ssize_t index)
}
static PyObject *
-Array_subscript(PyObject *_self, PyObject *item)
+Array_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
@@ -4214,7 +4214,7 @@ Array_subscript(PyObject *_self, PyObject *item)
return NULL;
if (i < 0)
i += self->b_length;
- return Array_item(_self, i);
+ return Array_item(myself, i);
}
else if PySlice_Check(item) {
StgDictObject *stgdict, *itemdict;
@@ -4265,7 +4265,7 @@ Array_subscript(PyObject *_self, PyObject *item)
wchar_t *dest;
if (slicelen <= 0)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
if (step == 1) {
return PyUnicode_FromWideChar(ptr + start,
slicelen);
@@ -4291,7 +4291,7 @@ Array_subscript(PyObject *_self, PyObject *item)
for (cur = start, i = 0; i < slicelen;
cur += step, i++) {
- PyObject *v = Array_item(_self, cur);
+ PyObject *v = Array_item(myself, cur);
PyList_SET_ITEM(np, i, v);
}
return np;
@@ -4305,9 +4305,9 @@ Array_subscript(PyObject *_self, PyObject *item)
}
static int
-Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Array_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size, offset;
StgDictObject *stgdict;
char *ptr;
@@ -4334,9 +4334,9 @@ Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
}
static int
-Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
+Array_ass_subscript(PyObject *myself, PyObject *item, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -4351,7 +4351,7 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
return -1;
if (i < 0)
i += self->b_length;
- return Array_ass_item(_self, i, value);
+ return Array_ass_item(myself, i, value);
}
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
@@ -4376,7 +4376,7 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
int result;
if (item == NULL)
return -1;
- result = Array_ass_item(_self, cur, item);
+ result = Array_ass_item(myself, cur, item);
Py_DECREF(item);
if (result == -1)
return -1;
@@ -4391,9 +4391,9 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
}
static Py_ssize_t
-Array_length(PyObject *_self)
+Array_length(PyObject *myself)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
return self->b_length;
}
@@ -4615,38 +4615,20 @@ static PyNumberMethods Simple_as_number = {
static PyObject *
Simple_repr(CDataObject *self)
{
- PyObject *val, *name, *args, *result;
- static PyObject *format;
+ PyObject *val, *result;
if (Py_TYPE(self)->tp_base != &Simple_Type) {
return PyUnicode_FromFormat("<%s object at %p>",
Py_TYPE(self)->tp_name, self);
}
- if (format == NULL) {
- format = PyUnicode_InternFromString("%s(%r)");
- if (format == NULL)
- return NULL;
- }
-
val = Simple_get_value(self);
if (val == NULL)
return NULL;
- name = PyUnicode_FromString(Py_TYPE(self)->tp_name);
- if (name == NULL) {
- Py_DECREF(val);
- return NULL;
- }
-
- args = PyTuple_Pack(2, name, val);
- Py_DECREF(name);
+ result = PyUnicode_FromFormat("%s(%R)",
+ Py_TYPE(self)->tp_name, val);
Py_DECREF(val);
- if (args == NULL)
- return NULL;
-
- result = PyUnicode_Format(format, args);
- Py_DECREF(args);
return result;
}
@@ -4697,9 +4679,9 @@ static PyTypeObject Simple_Type = {
PyCPointer_Type
*/
static PyObject *
-Pointer_item(PyObject *_self, Py_ssize_t index)
+Pointer_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
@@ -4728,9 +4710,9 @@ Pointer_item(PyObject *_self, Py_ssize_t index)
}
static int
-Pointer_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Pointer_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
@@ -4860,14 +4842,14 @@ Pointer_new(PyTypeObject *type, PyObject *args, PyObject *kw)
}
static PyObject *
-Pointer_subscript(PyObject *_self, PyObject *item)
+Pointer_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
if (i == -1 && PyErr_Occurred())
return NULL;
- return Pointer_item(_self, i);
+ return Pointer_item(myself, i);
}
else if (PySlice_Check(item)) {
PySliceObject *slice = (PySliceObject *)item;
@@ -4958,7 +4940,7 @@ Pointer_subscript(PyObject *_self, PyObject *item)
wchar_t *dest;
if (len <= 0)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
if (step == 1) {
return PyUnicode_FromWideChar(ptr + start,
len);
@@ -4980,7 +4962,7 @@ Pointer_subscript(PyObject *_self, PyObject *item)
return NULL;
for (cur = start, i = 0; i < len; cur += step, i++) {
- PyObject *v = Pointer_item(_self, cur);
+ PyObject *v = Pointer_item(myself, cur);
PyList_SET_ITEM(np, i, v);
}
return np;
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 34c46ad7a7..a3d232118b 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -10,9 +10,9 @@
/**************************************************************/
static void
-CThunkObject_dealloc(PyObject *_self)
+CThunkObject_dealloc(PyObject *myself)
{
- CThunkObject *self = (CThunkObject *)_self;
+ CThunkObject *self = (CThunkObject *)myself;
PyObject_GC_UnTrack(self);
Py_XDECREF(self->converters);
Py_XDECREF(self->callable);
@@ -23,9 +23,9 @@ CThunkObject_dealloc(PyObject *_self)
}
static int
-CThunkObject_traverse(PyObject *_self, visitproc visit, void *arg)
+CThunkObject_traverse(PyObject *myself, visitproc visit, void *arg)
{
- CThunkObject *self = (CThunkObject *)_self;
+ CThunkObject *self = (CThunkObject *)myself;
Py_VISIT(self->converters);
Py_VISIT(self->callable);
Py_VISIT(self->restype);
@@ -33,9 +33,9 @@ CThunkObject_traverse(PyObject *_self, visitproc visit, void *arg)
}
static int
-CThunkObject_clear(PyObject *_self)
+CThunkObject_clear(PyObject *myself)
{
- CThunkObject *self = (CThunkObject *)_self;
+ CThunkObject *self = (CThunkObject *)myself;
Py_CLEAR(self->converters);
Py_CLEAR(self->callable);
Py_CLEAR(self->restype);
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index bf7d8fd75e..09eb653b30 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -70,6 +70,10 @@
#include <ffi.h>
#include "ctypes.h"
+#ifdef HAVE_ALLOCA_H
+/* AIX needs alloca.h for alloca() */
+#include <alloca.h>
+#endif
#if defined(_DEBUG) || defined(__MINGW32__)
/* Don't use structured exception handling on Windows if this is defined.
@@ -646,7 +650,7 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
pa->value.i = PyLong_AsLong(obj);
if (pa->value.i == -1 && PyErr_Occurred()) {
PyErr_SetString(PyExc_OverflowError,
- "long int too long to convert");
+ "int too long to convert");
return -1;
}
}
@@ -663,13 +667,6 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
#ifdef CTYPES_UNICODE
if (PyUnicode_Check(obj)) {
-#if Py_UNICODE_SIZE == SIZEOF_WCHAR_T
- pa->ffi_type = &ffi_type_pointer;
- pa->value.p = PyUnicode_AS_UNICODE(obj);
- Py_INCREF(obj);
- pa->keep = obj;
- return 0;
-#else
pa->ffi_type = &ffi_type_pointer;
pa->value.p = PyUnicode_AsWideCharString(obj, NULL);
if (pa->value.p == NULL)
@@ -680,7 +677,6 @@ static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
return -1;
}
return 0;
-#endif
}
#endif
@@ -957,9 +953,9 @@ void _ctypes_extend_error(PyObject *exc_class, char *fmt, ...)
else {
PyErr_Clear();
PyUnicode_AppendAndDel(&s, PyUnicode_FromString("???"));
- if (s == NULL)
- goto error;
}
+ if (s == NULL)
+ goto error;
PyErr_SetObject(exc_class, s);
error:
Py_XDECREF(tp);
@@ -1700,13 +1696,15 @@ unpickle(PyObject *self, PyObject *args)
PyObject *state;
PyObject *result;
PyObject *tmp;
+ _Py_IDENTIFIER(__new__);
+ _Py_IDENTIFIER(__setstate__);
if (!PyArg_ParseTuple(args, "OO", &typ, &state))
return NULL;
- result = PyObject_CallMethod(typ, "__new__", "O", typ);
+ result = _PyObject_CallMethodId(typ, &PyId___new__, "O", typ);
if (result == NULL)
return NULL;
- tmp = PyObject_CallMethod(result, "__setstate__", "O", state);
+ tmp = _PyObject_CallMethodId(result, &PyId___setstate__, "O", state);
if (tmp == NULL) {
Py_DECREF(result);
return NULL;
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 9da890dbdc..79d60f3728 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -9,7 +9,6 @@
#define CTYPES_CFIELD_CAPSULE_NAME_PYMEM "_ctypes/cfield.c pymem"
-#if Py_UNICODE_SIZE != SIZEOF_WCHAR_T
static void pymem_destructor(PyObject *ptr)
{
void *p = PyCapsule_GetPointer(ptr, CTYPES_CFIELD_CAPSULE_NAME_PYMEM);
@@ -17,7 +16,6 @@ static void pymem_destructor(PyObject *ptr)
PyMem_Free(p);
}
}
-#endif
/******************************************************************/
@@ -52,7 +50,7 @@ PyCField_FromDesc(PyObject *desc, Py_ssize_t index,
{
CFieldObject *self;
PyObject *proto;
- Py_ssize_t size, align, length;
+ Py_ssize_t size, align;
SETFUNC setfunc = NULL;
GETFUNC getfunc = NULL;
StgDictObject *dict;
@@ -106,7 +104,6 @@ PyCField_FromDesc(PyObject *desc, Py_ssize_t index,
}
size = dict->size;
- length = dict->length;
proto = desc;
/* Field descriptors for 'c_char * n' are be scpecial cased to
@@ -1214,37 +1211,30 @@ u_get(void *ptr, Py_ssize_t size)
static PyObject *
U_get(void *ptr, Py_ssize_t size)
{
- PyObject *result;
Py_ssize_t len;
- Py_UNICODE *p;
+ wchar_t *p;
size /= sizeof(wchar_t); /* we count character units here, not bytes */
- result = PyUnicode_FromWideChar((wchar_t *)ptr, size);
- if (!result)
- return NULL;
/* We need 'result' to be able to count the characters with wcslen,
since ptr may not be NUL terminated. If the length is smaller (if
it was actually NUL terminated, we construct a new one and throw
away the result.
*/
/* chop off at the first NUL character, if any. */
- p = PyUnicode_AS_UNICODE(result);
- for (len = 0; len < size; ++len)
+ p = (wchar_t*)ptr;
+ for (len = 0; len < size; ++len) {
if (!p[len])
break;
-
- if (len < size) {
- PyObject *ob = PyUnicode_FromWideChar((wchar_t *)ptr, len);
- Py_DECREF(result);
- return ob;
}
- return result;
+
+ return PyUnicode_FromWideChar((wchar_t *)ptr, len);
}
static PyObject *
U_set(void *ptr, PyObject *value, Py_ssize_t length)
{
+ Py_UNICODE *wstr;
Py_ssize_t size;
/* It's easier to calculate in characters than in bytes */
@@ -1257,7 +1247,10 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
return NULL;
} else
Py_INCREF(value);
- size = PyUnicode_GET_SIZE(value);
+
+ wstr = PyUnicode_AsUnicodeAndSize(value, &size);
+ if (wstr == NULL)
+ return NULL;
if (size > length) {
PyErr_Format(PyExc_ValueError,
"string too long (%zd, maximum length %zd)",
@@ -1267,7 +1260,11 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
} else if (size < length-1)
/* copy terminating NUL character if there is space */
size += 1;
- PyUnicode_AsWideChar(value, (wchar_t *)ptr, size);
+
+ if (PyUnicode_AsWideChar(value, (wchar_t *)ptr, size) == -1) {
+ return NULL;
+ }
+
return value;
}
@@ -1377,6 +1374,9 @@ z_get(void *ptr, Py_ssize_t size)
static PyObject *
Z_set(void *ptr, PyObject *value, Py_ssize_t size)
{
+ PyObject *keep;
+ wchar_t *buffer;
+
if (value == Py_None) {
*(wchar_t **)ptr = NULL;
Py_INCREF(value);
@@ -1396,37 +1396,20 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size)
"unicode string or integer address expected instead of %s instance",
value->ob_type->tp_name);
return NULL;
- } else
- Py_INCREF(value);
-#if Py_UNICODE_SIZE == SIZEOF_WCHAR_T
- /* We can copy directly. Hm, are unicode objects always NUL
- terminated in Python, internally?
- */
- *(wchar_t **)ptr = (wchar_t *) PyUnicode_AS_UNICODE(value);
- return value;
-#else
- {
- /* We must create a wchar_t* buffer from the unicode object,
- and keep it alive */
- PyObject *keep;
- wchar_t *buffer;
-
- buffer = PyUnicode_AsWideCharString(value, NULL);
- if (!buffer) {
- Py_DECREF(value);
- return NULL;
- }
- keep = PyCapsule_New(buffer, CTYPES_CFIELD_CAPSULE_NAME_PYMEM, pymem_destructor);
- if (!keep) {
- Py_DECREF(value);
- PyMem_Free(buffer);
- return NULL;
- }
- *(wchar_t **)ptr = (wchar_t *)buffer;
- Py_DECREF(value);
- return keep;
}
-#endif
+
+ /* We must create a wchar_t* buffer from the unicode object,
+ and keep it alive */
+ buffer = PyUnicode_AsWideCharString(value, NULL);
+ if (!buffer)
+ return NULL;
+ keep = PyCapsule_New(buffer, CTYPES_CFIELD_CAPSULE_NAME_PYMEM, pymem_destructor);
+ if (!keep) {
+ PyMem_Free(buffer);
+ return NULL;
+ }
+ *(wchar_t **)ptr = buffer;
+ return keep;
}
static PyObject *
@@ -1471,13 +1454,16 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size)
/* create a BSTR from value */
if (value) {
- Py_ssize_t size = PyUnicode_GET_SIZE(value);
+ wchar_t* wvalue;
+ Py_ssize_t size;
+ wvalue = PyUnicode_AsUnicodeAndSize(value, &size);
+ if (wvalue == NULL)
+ return NULL;
if ((unsigned) size != size) {
PyErr_SetString(PyExc_ValueError, "String too long for BSTR");
return NULL;
}
- bstr = SysAllocStringLen(PyUnicode_AS_UNICODE(value),
- (unsigned)size);
+ bstr = SysAllocStringLen(wvalue, (unsigned)size);
Py_DECREF(value);
} else
bstr = NULL;
@@ -1654,9 +1640,9 @@ typedef struct { char c; void *x; } s_void_p;
/*
#define CHAR_ALIGN (sizeof(s_char) - sizeof(char))
#define SHORT_ALIGN (sizeof(s_short) - sizeof(short))
-#define INT_ALIGN (sizeof(s_int) - sizeof(int))
#define LONG_ALIGN (sizeof(s_long) - sizeof(long))
*/
+#define INT_ALIGN (sizeof(s_int) - sizeof(int))
#define FLOAT_ALIGN (sizeof(s_float) - sizeof(float))
#define DOUBLE_ALIGN (sizeof(s_double) - sizeof(double))
#define LONGDOUBLE_ALIGN (sizeof(s_long_double) - sizeof(long double))
@@ -1698,8 +1684,8 @@ ffi_type ffi_type_sint8 = { 1, 1, FFI_TYPE_SINT8 };
ffi_type ffi_type_uint16 = { 2, 2, FFI_TYPE_UINT16 };
ffi_type ffi_type_sint16 = { 2, 2, FFI_TYPE_SINT16 };
-ffi_type ffi_type_uint32 = { 4, 4, FFI_TYPE_UINT32 };
-ffi_type ffi_type_sint32 = { 4, 4, FFI_TYPE_SINT32 };
+ffi_type ffi_type_uint32 = { 4, INT_ALIGN, FFI_TYPE_UINT32 };
+ffi_type ffi_type_sint32 = { 4, INT_ALIGN, FFI_TYPE_SINT32 };
ffi_type ffi_type_uint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_UINT64 };
ffi_type ffi_type_sint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_SINT64 };
diff --git a/Modules/_ctypes/libffi.diff b/Modules/_ctypes/libffi.diff
index 828a2779b7..ade28e5f9e 100644
--- a/Modules/_ctypes/libffi.diff
+++ b/Modules/_ctypes/libffi.diff
@@ -114,3 +114,56 @@ diff -r -N -u libffi.orig/configure.ac libffi/configure.ac
+AC_CONFIG_FILES(fficonfig.py)
+
AC_OUTPUT
+--- libffi-3.0.11/fficonfig.py.in 1970-01-01 01:00:00.000000000 +0100
++++ libffi/fficonfig.py.in 2012-03-15 01:04:27.000000000 +0100
+@@ -0,0 +1,35 @@
++ffi_sources = """
++src/prep_cif.c
++src/closures.c
++src/dlmalloc.c
++""".split()
++
++ffi_platforms = {
++ 'MIPS_IRIX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S'],
++ 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S'],
++ 'X86': ['src/x86/ffi.c', 'src/x86/sysv.S'],
++ 'X86_FREEBSD': ['src/x86/ffi.c', 'src/x86/freebsd.S'],
++ 'X86_WIN32': ['src/x86/ffi.c', 'src/x86/win32.S'],
++ 'SPARC': ['src/sparc/ffi.c', 'src/sparc/v8.S', 'src/sparc/v9.S'],
++ 'ALPHA': ['src/alpha/ffi.c', 'src/alpha/osf.S'],
++ 'IA64': ['src/ia64/ffi.c', 'src/ia64/unix.S'],
++ 'M32R': ['src/m32r/sysv.S', 'src/m32r/ffi.c'],
++ 'M68K': ['src/m68k/ffi.c', 'src/m68k/sysv.S'],
++ 'POWERPC': ['src/powerpc/ffi.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S', 'src/powerpc/linux64.S', 'src/powerpc/linux64_closure.S'],
++ 'POWERPC_AIX': ['src/powerpc/ffi_darwin.c', 'src/powerpc/aix.S', 'src/powerpc/aix_closure.S'],
++ 'POWERPC_FREEBSD': ['src/powerpc/ffi.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S'],
++ 'ARM': ['src/arm/sysv.S', 'src/arm/ffi.c'],
++ 'LIBFFI_CRIS': ['src/cris/sysv.S', 'src/cris/ffi.c'],
++ 'FRV': ['src/frv/eabi.S', 'src/frv/ffi.c'],
++ 'S390': ['src/s390/sysv.S', 'src/s390/ffi.c'],
++ 'X86_64': ['src/x86/ffi64.c', 'src/x86/unix64.S', 'src/x86/ffi.c', 'src/x86/sysv.S'],
++ 'SH': ['src/sh/sysv.S', 'src/sh/ffi.c'],
++ 'SH64': ['src/sh64/sysv.S', 'src/sh64/ffi.c'],
++ 'PA': ['src/pa/linux.S', 'src/pa/ffi.c'],
++ 'PA_LINUX': ['src/pa/linux.S', 'src/pa/ffi.c'],
++ 'PA_HPUX': ['src/pa/hpux32.S', 'src/pa/ffi.c'],
++}
++
++ffi_sources += ffi_platforms['@TARGET@']
++
++ffi_cflags = '@CFLAGS@'
+diff -urN libffi-3.0.11/src/dlmalloc.c libffi/src/dlmalloc.c
+--- libffi-3.0.11/src/dlmalloc.c 2012-04-12 04:46:06.000000000 +0200
++++ libffi/src/dlmalloc.c 2012-06-26 15:15:58.949547461 +0200
+@@ -457,6 +457,11 @@
+ #define LACKS_ERRNO_H
+ #define MALLOC_FAILURE_ACTION
+ #define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */
++#elif !defined _GNU_SOURCE
++/* mremap() on Linux requires this via sys/mman.h
++ * See roundup issue 10309
++ */
++#define _GNU_SOURCE 1
+ #endif /* WIN32 */
+
+ #ifdef __OS2__
diff --git a/Modules/_ctypes/libffi/fficonfig.py.in b/Modules/_ctypes/libffi/fficonfig.py.in
index 27c971f86f..35be29cb3a 100644
--- a/Modules/_ctypes/libffi/fficonfig.py.in
+++ b/Modules/_ctypes/libffi/fficonfig.py.in
@@ -1,7 +1,6 @@
ffi_sources = """
src/prep_cif.c
src/closures.c
-src/dlmalloc.c
""".split()
ffi_platforms = {
@@ -16,7 +15,7 @@ ffi_platforms = {
'M32R': ['src/m32r/sysv.S', 'src/m32r/ffi.c'],
'M68K': ['src/m68k/ffi.c', 'src/m68k/sysv.S'],
'POWERPC': ['src/powerpc/ffi.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S', 'src/powerpc/linux64.S', 'src/powerpc/linux64_closure.S'],
- 'POWERPC_AIX': ['src/powerpc/ffi.c', 'src/powerpc/aix.S', 'src/powerpc/aix_closure.S'],
+ 'POWERPC_AIX': ['src/powerpc/ffi_darwin.c', 'src/powerpc/aix.S', 'src/powerpc/aix_closure.S'],
'POWERPC_FREEBSD': ['src/powerpc/ffi.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S'],
'ARM': ['src/arm/sysv.S', 'src/arm/ffi.c'],
'LIBFFI_CRIS': ['src/cris/sysv.S', 'src/cris/ffi.c'],
diff --git a/Modules/_ctypes/libffi/generate-osx-source-and-headers.py b/Modules/_ctypes/libffi/generate-osx-source-and-headers.py
index 64313c1a36..64313c1a36 100644..100755
--- a/Modules/_ctypes/libffi/generate-osx-source-and-headers.py
+++ b/Modules/_ctypes/libffi/generate-osx-source-and-headers.py
diff --git a/Modules/_ctypes/libffi/src/arm/ffi.c b/Modules/_ctypes/libffi/src/arm/ffi.c
index 3ccceb9a50..7fd7f44c4d 100644
--- a/Modules/_ctypes/libffi/src/arm/ffi.c
+++ b/Modules/_ctypes/libffi/src/arm/ffi.c
@@ -221,11 +221,11 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT
|| cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE);
+ unsigned int temp;
+
ecif.cif = cif;
ecif.avalue = avalue;
- unsigned int temp;
-
/* If the return value is a struct and we don't have a return */
/* value address then we need to make one */
@@ -278,11 +278,11 @@ void ffi_closure_VFP (ffi_closure *);
/* This function is jumped to by the trampoline */
unsigned int
-ffi_closure_SYSV_inner (closure, respp, args, vfp_args)
- ffi_closure *closure;
- void **respp;
- void *args;
- void *vfp_args;
+ffi_closure_SYSV_inner(
+ ffi_closure *closure,
+ void **respp,
+ void *args,
+ void *vfp_args)
{
// our various things...
ffi_cif *cif;
diff --git a/Modules/_ctypes/libffi/src/powerpc/ffi.c b/Modules/_ctypes/libffi/src/powerpc/ffi.c
index 54f2731b6b..5381d3d10d 100644
--- a/Modules/_ctypes/libffi/src/powerpc/ffi.c
+++ b/Modules/_ctypes/libffi/src/powerpc/ffi.c
@@ -146,12 +146,14 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
} p_argv;
size_t struct_copy_size;
unsigned gprvalue;
+#ifndef __NO_FPRS__
+ double double_tmp;
+#endif
stacktop.c = (char *) stack + bytes;
gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
intarg_count = 0;
#ifndef __NO_FPRS__
- double double_tmp;
fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
fparg_count = 0;
copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
diff --git a/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp b/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp
deleted file mode 100644
index 838a306d96..0000000000
--- a/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp
+++ /dev/null
@@ -1,300 +0,0 @@
-# Copyright (C) 2003, 2005, 2008, 2009, 2010 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-proc load_gcc_lib { filename } {
- global srcdir
- load_file $srcdir/lib/$filename
-}
-
-load_lib dg.exp
-load_lib libgloss.exp
-load_gcc_lib target-libpath.exp
-load_gcc_lib wrapper.exp
-
-
-# Define libffi callbacks for dg.exp.
-
-proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } {
-
- # To get all \n in dg-output test strings to match printf output
- # in a system that outputs it as \015\012 (i.e. not just \012), we
- # need to change all \n into \r?\n. As there is no dejagnu flag
- # or hook to do that, we simply change the text being tested.
- # Unfortunately, we have to know that the variable is called
- # dg-output-text and lives in the caller of libffi-dg-test, which
- # is two calls up. Overriding proc dg-output would be longer and
- # would necessarily have the same assumption.
- upvar 2 dg-output-text output_match
-
- if { [llength $output_match] > 1 } {
- regsub -all "\n" [lindex $output_match 1] "\r?\n" x
- set output_match [lreplace $output_match 1 1 $x]
- }
-
- # Set up the compiler flags, based on what we're going to do.
-
- set options [list]
- switch $do_what {
- "compile" {
- set compile_type "assembly"
- set output_file "[file rootname [file tail $prog]].s"
- }
- "link" {
- set compile_type "executable"
- set output_file "[file rootname [file tail $prog]].exe"
- # The following line is needed for targets like the i960 where
- # the default output file is b.out. Sigh.
- }
- "run" {
- set compile_type "executable"
- # FIXME: "./" is to cope with "." not being in $PATH.
- # Should this be handled elsewhere?
- # YES.
- set output_file "./[file rootname [file tail $prog]].exe"
- # This is the only place where we care if an executable was
- # created or not. If it was, dg.exp will try to run it.
- remote_file build delete $output_file;
- }
- default {
- perror "$do_what: not a valid dg-do keyword"
- return ""
- }
- }
-
- if { $extra_tool_flags != "" } {
- lappend options "additional_flags=$extra_tool_flags"
- }
-
- set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options];
-
-
- return [list $comp_output $output_file]
-}
-
-
-proc libffi-dg-test { prog do_what extra_tool_flags } {
- return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags]
-}
-
-proc libffi-init { args } {
- global gluefile wrap_flags;
- global srcdir
- global blddirffi
- global objdir
- global TOOL_OPTIONS
- global tool
- global libffi_include
- global libffi_link_flags
- global tool_root_dir
- global ld_library_path
-
- set blddirffi [pwd]/..
- verbose "libffi $blddirffi"
-
- set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
- if {$gccdir != ""} {
- set gccdir [file dirname $gccdir]
- }
- verbose "gccdir $gccdir"
-
- set ld_library_path "."
- append ld_library_path ":${gccdir}"
-
- set compiler "${gccdir}/xgcc"
- if { [is_remote host] == 0 && [which $compiler] != 0 } {
- foreach i "[exec $compiler --print-multi-lib]" {
- set mldir ""
- regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
- set mldir [string trimright $mldir "\;@"]
- if { "$mldir" == "." } {
- continue
- }
- if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
- append ld_library_path ":${gccdir}/${mldir}"
- }
- }
- }
- # add the library path for libffi.
- append ld_library_path ":${blddirffi}/.libs"
-
- verbose "ld_library_path: $ld_library_path"
-
- # Point to the Libffi headers in libffi.
- set libffi_include "${blddirffi}/include"
- verbose "libffi_include $libffi_include"
-
- set libffi_dir "${blddirffi}/.libs"
- verbose "libffi_dir $libffi_dir"
- if { $libffi_dir != "" } {
- set libffi_dir [file dirname ${libffi_dir}]
- set libffi_link_flags "-L${libffi_dir}/.libs"
- }
-
- set_ld_library_path_env_vars
- libffi_maybe_build_wrapper "${objdir}/testglue.o"
-}
-
-proc libffi_exit { } {
- global gluefile;
-
- if [info exists gluefile] {
- file_on_build delete $gluefile;
- unset gluefile;
- }
-}
-
-proc libffi_target_compile { source dest type options } {
- global gluefile wrap_flags;
- global srcdir
- global blddirffi
- global TOOL_OPTIONS
- global libffi_link_flags
- global libffi_include
- global target_triplet
-
-
- if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
- lappend options "libs=${gluefile}"
- lappend options "ldflags=$wrap_flags"
- }
-
- # TOOL_OPTIONS must come first, so that it doesn't override testcase
- # specific options.
- if [info exists TOOL_OPTIONS] {
- lappend options [concat "additional_flags=$TOOL_OPTIONS" $options];
- }
-
- # search for ffi_mips.h in srcdir, too
- lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.."
- lappend options "additional_flags=${libffi_link_flags}"
-
- # Darwin needs a stack execution allowed flag.
-
- if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"]
- || [istarget "*-*-darwin2*"] } {
- lappend options "additional_flags=-Wl,-allow_stack_execute"
- }
-
- # If you're building the compiler with --prefix set to a place
- # where it's not yet installed, then the linker won't be able to
- # find the libgcc used by libffi.dylib. We could pass the
- # -dylib_file option, but that's complicated, and it's much easier
- # to just make the linker find libgcc using -L options.
- if { [string match "*-*-darwin*" $target_triplet] } {
- lappend options "libs= -shared-libgcc"
- }
-
- if { [string match "*-*-openbsd*" $target_triplet] } {
- lappend options "libs= -lpthread"
- }
-
- lappend options "libs= -lffi"
-
- verbose "options: $options"
- return [target_compile $source $dest $type $options]
-}
-
-# Utility routines.
-
-#
-# search_for -- looks for a string match in a file
-#
-proc search_for { file pattern } {
- set fd [open $file r]
- while { [gets $fd cur_line]>=0 } {
- if [string match "*$pattern*" $cur_line] then {
- close $fd
- return 1
- }
- }
- close $fd
- return 0
-}
-
-# Modified dg-runtest that can cycle through a list of optimization options
-# as c-torture does.
-proc libffi-dg-runtest { testcases default-extra-flags } {
- global runtests
-
- foreach test $testcases {
- # If we're only testing specific files and this isn't one of
- # them, skip it.
- if ![runtest_file_p $runtests $test] {
- continue
- }
-
- # Look for a loop within the source code - if we don't find one,
- # don't pass -funroll[-all]-loops.
- global torture_with_loops torture_without_loops
- if [expr [search_for $test "for*("]+[search_for $test "while*("]] {
- set option_list $torture_with_loops
- } else {
- set option_list $torture_without_loops
- }
-
- set nshort [file tail [file dirname $test]]/[file tail $test]
-
- foreach flags $option_list {
- verbose "Testing $nshort, $flags" 1
- dg-test $test $flags ${default-extra-flags}
- }
- }
-}
-
-
-# Like check_conditional_xfail, but callable from a dg test.
-
-proc dg-xfail-if { args } {
- set args [lreplace $args 0 0]
- set selector "target [join [lindex $args 1]]"
- if { [dg-process-target $selector] == "S" } {
- global compiler_conditional_xfail_data
- set compiler_conditional_xfail_data $args
- }
-}
-
-
-# We need to make sure that additional_files and additional_sources
-# are both cleared out after every test. It is not enough to clear
-# them out *before* the next test run because gcc-target-compile gets
-# run directly from some .exp files (outside of any test). (Those
-# uses should eventually be eliminated.)
-
-# Because the DG framework doesn't provide a hook that is run at the
-# end of a test, we must replace dg-test with a wrapper.
-
-if { [info procs saved-dg-test] == [list] } {
- rename dg-test saved-dg-test
-
- proc dg-test { args } {
- global additional_files
- global additional_sources
- global errorInfo
-
- if { [ catch { eval saved-dg-test $args } errmsg ] } {
- set saved_info $errorInfo
- set additional_files ""
- set additional_sources ""
- error $errmsg $saved_info
- }
- set additional_files ""
- set additional_sources ""
- }
-}
-
-# Local Variables:
-# tcl-indent-level:4
-# End:
diff --git a/Modules/_ctypes/libffi/testsuite/libffi.call/a.out b/Modules/_ctypes/libffi/testsuite/libffi.call/a.out
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/Modules/_ctypes/libffi/testsuite/libffi.call/a.out
diff --git a/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c b/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
index 06feaf23da..2affb14c1a 100644
--- a/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
+++ b/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
@@ -46,7 +46,7 @@ ffi_call_unix64(
unsigned long bytes,
unsigned flags,
void* raddr,
- void (*fnaddr)(),
+ void (*fnaddr)(void),
unsigned ssecount);
/* All reference to register classes here is identical to the code in
@@ -429,7 +429,7 @@ ffi_prep_cif_machdep(
void
ffi_call(
ffi_cif* cif,
- void (*fn)(),
+ void (*fn)(void),
void* rvalue,
void** avalue)
{
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 2338818a9a..25d999626a 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -426,9 +426,9 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
StgDictObject *dict;
int bitsize = 0;
- if (!pair || !PyArg_ParseTuple(pair, "OO|i", &name, &desc, &bitsize)) {
- PyErr_SetString(PyExc_AttributeError,
- "'_fields_' must be a sequence of pairs");
+ if (!pair || !PyArg_ParseTuple(pair, "UO|i", &name, &desc, &bitsize)) {
+ PyErr_SetString(PyExc_TypeError,
+ "'_fields_' must be a sequence of (name, C type) pairs");
Py_XDECREF(pair);
return -1;
}
@@ -478,6 +478,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
}
} else
bitsize = 0;
+
if (isStruct && !isPacked) {
char *fieldfmt = dict->format ? dict->format : "B";
char *fieldname = _PyUnicode_AsString(name);
@@ -487,10 +488,6 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
if (fieldname == NULL)
{
- PyErr_Format(PyExc_TypeError,
- "structure field name must be string not %s",
- name->ob_type->tp_name);
-
Py_DECREF(pair);
return -1;
}
@@ -515,6 +512,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
return -1;
}
}
+
if (isStruct) {
prop = PyCField_FromDesc(desc, i,
&field_size, bitsize, &bitofs,
diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c
index 8561a2e70c..f560702878 100644
--- a/Modules/_curses_panel.c
+++ b/Modules/_curses_panel.c
@@ -16,8 +16,37 @@ static char *PyCursesVersion = "2.1";
#include <panel.h>
-static PyObject *PyCursesError;
+typedef struct {
+ PyObject *PyCursesError;
+ PyObject *PyCursesPanel_Type;
+} _curses_panelstate;
+
+#define _curses_panelstate(o) ((_curses_panelstate *)PyModule_GetState(o))
+
+static int
+_curses_panel_clear(PyObject *m)
+{
+ Py_CLEAR(_curses_panelstate(m)->PyCursesError);
+ return 0;
+}
+
+static int
+_curses_panel_traverse(PyObject *m, visitproc visit, void *arg)
+{
+ Py_VISIT(_curses_panelstate(m)->PyCursesError);
+ return 0;
+}
+
+static void
+_curses_panel_free(void *m)
+{
+ _curses_panel_clear((PyObject *) m);
+}
+
+static struct PyModuleDef _curses_panelmodule;
+#define _curses_panelstate_global \
+((_curses_panelstate *) PyModule_GetState(PyState_FindModule(&_curses_panelmodule)))
/* Utility Functions */
@@ -34,9 +63,9 @@ PyCursesCheckERR(int code, char *fname)
return Py_None;
} else {
if (fname == NULL) {
- PyErr_SetString(PyCursesError, catchall_ERR);
+ PyErr_SetString(_curses_panelstate_global->PyCursesError, catchall_ERR);
} else {
- PyErr_Format(PyCursesError, "%s() returned ERR", fname);
+ PyErr_Format(_curses_panelstate_global->PyCursesError, "%s() returned ERR", fname);
}
return NULL;
}
@@ -54,9 +83,8 @@ typedef struct {
PyCursesWindowObject *wo; /* for reference counts */
} PyCursesPanelObject;
-PyTypeObject PyCursesPanel_Type;
-
-#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type)
+#define PyCursesPanel_Check(v) \
+ (Py_TYPE(v) == _curses_panelstate_global->PyCursesPanel_Type)
/* Some helper functions. The problem is that there's always a window
associated with a panel. To ensure that Python's GC doesn't pull
@@ -175,7 +203,8 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo)
{
PyCursesPanelObject *po;
- po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type);
+ po = PyObject_NEW(PyCursesPanelObject,
+ (PyTypeObject *)(_curses_panelstate_global)->PyCursesPanel_Type);
if (po == NULL) return NULL;
po->pan = pan;
if (insert_lop(po) < 0) {
@@ -280,7 +309,7 @@ PyCursesPanel_replace_panel(PyCursesPanelObject *self, PyObject *args)
rtn = replace_panel(self->pan, temp->win);
if (rtn == ERR) {
- PyErr_SetString(PyCursesError, "replace_panel() returned ERR");
+ PyErr_SetString(_curses_panelstate_global->PyCursesError, "replace_panel() returned ERR");
return NULL;
}
Py_DECREF(po->wo);
@@ -293,9 +322,18 @@ PyCursesPanel_replace_panel(PyCursesPanelObject *self, PyObject *args)
static PyObject *
PyCursesPanel_set_panel_userptr(PyCursesPanelObject *self, PyObject *obj)
{
+ PyObject *oldobj;
+ int rc;
+ PyCursesInitialised;
Py_INCREF(obj);
- return PyCursesCheckERR(set_panel_userptr(self->pan, (void*)obj),
- "set_panel_userptr");
+ oldobj = (PyObject *) panel_userptr(self->pan);
+ rc = set_panel_userptr(self->pan, (void*)obj);
+ if (rc == ERR) {
+ /* In case of an ncurses error, decref the new object again */
+ Py_DECREF(obj);
+ }
+ Py_XDECREF(oldobj);
+ return PyCursesCheckERR(rc, "set_panel_userptr");
}
static PyObject *
@@ -305,7 +343,7 @@ PyCursesPanel_userptr(PyCursesPanelObject *self)
PyCursesInitialised;
obj = (PyObject *) panel_userptr(self->pan);
if (obj == NULL) {
- PyErr_SetString(PyCursesError, "no userptr set");
+ PyErr_SetString(_curses_panelstate_global->PyCursesError, "no userptr set");
return NULL;
}
@@ -334,36 +372,18 @@ static PyMethodDef PyCursesPanel_Methods[] = {
/* -------------------------------------------------------*/
-PyTypeObject PyCursesPanel_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "_curses_panel.curses panel", /*tp_name*/
- sizeof(PyCursesPanelObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /* methods */
- (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_reserved*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT, /*tp_flags*/
- 0, /*tp_doc*/
- 0, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- PyCursesPanel_Methods, /*tp_methods*/
+static PyType_Slot PyCursesPanel_Type_slots[] = {
+ {Py_tp_dealloc, PyCursesPanel_Dealloc},
+ {Py_tp_methods, PyCursesPanel_Methods},
+ {0, 0},
+};
+
+static PyType_Spec PyCursesPanel_Type_spec = {
+ "_curses_panel.curses panel",
+ sizeof(PyCursesPanelObject),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ PyCursesPanel_Type_slots
};
/* Wrapper for panel_above(NULL). This function returns the bottom
@@ -405,7 +425,7 @@ PyCurses_new_panel(PyObject *self, PyObject *args)
return NULL;
pan = new_panel(win->win);
if (pan == NULL) {
- PyErr_SetString(PyCursesError, catchall_NULL);
+ PyErr_SetString(_curses_panelstate_global->PyCursesError, catchall_NULL);
return NULL;
}
return (PyObject *)PyCursesPanel_New(pan, win);
@@ -467,12 +487,12 @@ static struct PyModuleDef _curses_panelmodule = {
PyModuleDef_HEAD_INIT,
"_curses_panel",
NULL,
- -1,
+ sizeof(_curses_panelstate),
PyCurses_methods,
NULL,
- NULL,
- NULL,
- NULL
+ _curses_panel_traverse,
+ _curses_panel_clear,
+ _curses_panel_free
};
PyMODINIT_FUNC
@@ -480,21 +500,23 @@ PyInit__curses_panel(void)
{
PyObject *m, *d, *v;
- /* Initialize object type */
- if (PyType_Ready(&PyCursesPanel_Type) < 0)
- return NULL;
-
- import_curses();
-
/* Create the module and add the functions */
m = PyModule_Create(&_curses_panelmodule);
if (m == NULL)
- return NULL;
+ goto fail;
d = PyModule_GetDict(m);
+ /* Initialize object type */
+ _curses_panelstate(m)->PyCursesPanel_Type = \
+ PyType_FromSpec(&PyCursesPanel_Type_spec);
+ if (_curses_panelstate(m)->PyCursesPanel_Type == NULL)
+ goto fail;
+
+ import_curses();
+
/* For exception _curses_panel.error */
- PyCursesError = PyErr_NewException("_curses_panel.error", NULL, NULL);
- PyDict_SetItemString(d, "error", PyCursesError);
+ _curses_panelstate(m)->PyCursesError = PyErr_NewException("_curses_panel.error", NULL, NULL);
+ PyDict_SetItemString(d, "error", _curses_panelstate(m)->PyCursesError);
/* Make the version available */
v = PyUnicode_FromString(PyCursesVersion);
@@ -502,4 +524,7 @@ PyInit__curses_panel(void)
PyDict_SetItemString(d, "__version__", v);
Py_DECREF(v);
return m;
+ fail:
+ Py_XDECREF(m);
+ return NULL;
}
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index d1dedb0bb0..13cfcf5307 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -105,10 +105,6 @@ char *PyCursesVersion = "2.2";
#include "Python.h"
-#ifdef __osf__
-#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
-#endif
-
#ifdef __hpux
#define STRICT_SYSV_CURSES
#endif
@@ -125,6 +121,10 @@ extern int setupterm(char *,int,int *);
#include <term.h>
#endif
+#ifdef HAVE_LANGINFO_H
+#include <langinfo.h>
+#endif
+
#if !defined(HAVE_NCURSES_H) && (defined(sgi) || defined(__sun) || defined(SCO5))
#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
typedef chtype attr_t; /* No attr_t type is available */
@@ -147,6 +147,8 @@ static int initialised = FALSE;
/* Tells whether start_color() has been called to initialise color usage. */
static int initialisedcolors = FALSE;
+static char *screen_encoding = NULL;
+
/* Utility Macros */
#define PyCursesSetupTermCalled \
if (initialised_setupterm != TRUE) { \
@@ -179,7 +181,7 @@ static int initialisedcolors = FALSE;
*/
static PyObject *
-PyCursesCheckERR(int code, char *fname)
+PyCursesCheckERR(int code, const char *fname)
{
if (code != ERR) {
Py_INCREF(Py_None);
@@ -194,27 +196,175 @@ PyCursesCheckERR(int code, char *fname)
}
}
+/* Convert an object to a byte (an integer of type chtype):
+
+ - int
+ - bytes of length 1
+ - str of length 1
+
+ Return 1 on success, 0 on error (invalid type or integer overflow). */
static int
-PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
+PyCurses_ConvertToChtype(PyCursesWindowObject *win, PyObject *obj, chtype *ch)
{
- if (PyLong_CheckExact(obj)) {
+ long value;
+ if(PyBytes_Check(obj) && PyBytes_Size(obj) == 1) {
+ value = (unsigned char)PyBytes_AsString(obj)[0];
+ }
+ else if (PyUnicode_Check(obj)) {
+ if (PyUnicode_GetLength(obj) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, "
+ "got a str of length %zi",
+ PyUnicode_GET_LENGTH(obj));
+ return 0;
+ }
+ value = PyUnicode_READ_CHAR(obj, 0);
+ if (128 < value) {
+ PyObject *bytes;
+ const char *encoding;
+ if (win)
+ encoding = win->encoding;
+ else
+ encoding = screen_encoding;
+ bytes = PyUnicode_AsEncodedObject(obj, encoding, NULL);
+ if (bytes == NULL)
+ return 0;
+ if (PyBytes_GET_SIZE(bytes) == 1)
+ value = (unsigned char)PyBytes_AS_STRING(bytes)[0];
+ else
+ value = -1;
+ Py_DECREF(bytes);
+ if (value < 0)
+ goto overflow;
+ }
+ }
+ else if (PyLong_CheckExact(obj)) {
+ int long_overflow;
+ value = PyLong_AsLongAndOverflow(obj, &long_overflow);
+ if (long_overflow)
+ goto overflow;
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, got %s",
+ Py_TYPE(obj)->tp_name);
+ return 0;
+ }
+ *ch = (chtype)value;
+ if ((long)*ch != value)
+ goto overflow;
+ return 1;
+
+overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "byte doesn't fit in chtype");
+ return 0;
+}
+
+/* Convert an object to a byte (chtype) or a character (cchar_t):
+
+ - int
+ - bytes of length 1
+ - str of length 1
+
+ Return:
+
+ - 2 if obj is a character (written into *wch)
+ - 1 if obj is a byte (written into *ch)
+ - 0 on error: raise an exception */
+static int
+PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
+ chtype *ch
+#ifdef HAVE_NCURSESW
+ , cchar_t *wch
+#endif
+ )
+{
+ long value;
+#ifdef HAVE_NCURSESW
+ wchar_t buffer[2];
+#endif
+
+ if (PyUnicode_Check(obj)) {
+#ifdef HAVE_NCURSESW
+ if (PyUnicode_AsWideChar(obj, buffer, 2) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, "
+ "got a str of length %zi",
+ PyUnicode_GET_LENGTH(obj));
+ return 0;
+ }
+ memset(wch->chars, 0, sizeof(wch->chars));
+ wch->chars[0] = buffer[0];
+ return 2;
+#else
+ return PyCurses_ConvertToChtype(win, obj, ch);
+#endif
+ }
+ else if(PyBytes_Check(obj) && PyBytes_Size(obj) == 1) {
+ value = (unsigned char)PyBytes_AsString(obj)[0];
+ }
+ else if (PyLong_CheckExact(obj)) {
int overflow;
- /* XXX should the truncation by the cast also be reported
- as an error? */
- *ch = (chtype) PyLong_AsLongAndOverflow(obj, &overflow);
- if (overflow)
+ value = PyLong_AsLongAndOverflow(obj, &overflow);
+ if (overflow) {
+ PyErr_SetString(PyExc_OverflowError,
+ "int doesn't fit in long");
return 0;
- } else if(PyBytes_Check(obj)
- && (PyBytes_Size(obj) == 1)) {
- *ch = (chtype) *PyBytes_AsString(obj);
- } else if (PyUnicode_Check(obj) && PyUnicode_GetSize(obj) == 1) {
- *ch = (chtype) *PyUnicode_AS_UNICODE(obj);
- } else {
+ }
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, got %s",
+ Py_TYPE(obj)->tp_name);
+ return 0;
+ }
+
+ *ch = (chtype)value;
+ if ((long)*ch != value) {
+ PyErr_Format(PyExc_OverflowError,
+ "byte doesn't fit in chtype");
return 0;
}
return 1;
}
+/* Convert an object to a byte string (char*) or a wide character string
+ (wchar_t*). Return:
+
+ - 2 if obj is a character string (written into *wch)
+ - 1 if obj is a byte string (written into *bytes)
+ - 0 on error: raise an exception */
+static int
+PyCurses_ConvertToString(PyCursesWindowObject *win, PyObject *obj,
+ PyObject **bytes, wchar_t **wstr)
+{
+ if (PyUnicode_Check(obj)) {
+#ifdef HAVE_NCURSESW
+ assert (wstr != NULL);
+ *wstr = PyUnicode_AsWideCharString(obj, NULL);
+ if (*wstr == NULL)
+ return 0;
+ return 2;
+#else
+ assert (wstr == NULL);
+ *bytes = PyUnicode_AsEncodedObject(obj, win->encoding, NULL);
+ if (*bytes == NULL)
+ return 0;
+ return 1;
+#endif
+ }
+ else if (PyBytes_Check(obj)) {
+ Py_INCREF(obj);
+ *bytes = obj;
+ return 1;
+ }
+
+ PyErr_Format(PyExc_TypeError, "expect bytes or str, got %s",
+ Py_TYPE(obj)->tp_name);
+ return 0;
+}
+
/* Function versions of the 3 functions for testing whether curses has been
initialised or not. */
@@ -358,13 +508,37 @@ Window_TwoArgNoReturnFunction(wresize, int, "ii;lines,columns")
/* Allocation and deallocation of Window Objects */
static PyObject *
-PyCursesWindow_New(WINDOW *win)
+PyCursesWindow_New(WINDOW *win, const char *encoding)
{
PyCursesWindowObject *wo;
+ if (encoding == NULL) {
+#if defined(MS_WINDOWS)
+ char *buffer[100];
+ UINT cp;
+ cp = GetConsoleOutputCP();
+ if (cp != 0) {
+ PyOS_snprintf(buffer, sizeof(buffer), "cp%u", cp);
+ encoding = buffer;
+ }
+#elif defined(CODESET)
+ const char *codeset = nl_langinfo(CODESET);
+ if (codeset != NULL && codeset[0] != 0)
+ encoding = codeset;
+#endif
+ if (encoding == NULL)
+ encoding = "utf-8";
+ }
+
wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
if (wo == NULL) return NULL;
wo->win = win;
+ wo->encoding = strdup(encoding);
+ if (wo->encoding == NULL) {
+ Py_DECREF(wo);
+ PyErr_NoMemory();
+ return NULL;
+ }
return (PyObject *)wo;
}
@@ -372,6 +546,8 @@ static void
PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
{
if (wo->win != stdscr) delwin(wo->win);
+ if (wo->encoding != NULL)
+ free(wo->encoding);
PyObject_DEL(wo);
}
@@ -381,29 +557,34 @@ static PyObject *
PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
{
int rtn, x, y, use_xy = FALSE;
- PyObject *temp;
- chtype ch = 0;
+ PyObject *chobj;
+ int type;
+ chtype ch;
+#ifdef HAVE_NCURSESW
+ cchar_t wch;
+#endif
attr_t attr = A_NORMAL;
long lattr;
+ const char *funcname;
switch (PyTuple_Size(args)) {
case 1:
- if (!PyArg_ParseTuple(args, "O;ch or int", &temp))
+ if (!PyArg_ParseTuple(args, "O;ch or int", &chobj))
return NULL;
break;
case 2:
- if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &temp, &lattr))
+ if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &chobj, &lattr))
return NULL;
attr = lattr;
break;
case 3:
- if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &temp))
+ if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &chobj))
return NULL;
use_xy = TRUE;
break;
case 4:
if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr",
- &y, &x, &temp, &lattr))
+ &y, &x, &chobj, &lattr))
return NULL;
attr = lattr;
use_xy = TRUE;
@@ -413,17 +594,33 @@ PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
- return NULL;
+#ifdef HAVE_NCURSESW
+ type = PyCurses_ConvertToCchar_t(self, chobj, &ch, &wch);
+ if (type == 2) {
+ funcname = "add_wch";
+ wch.attr = attr;
+ if (use_xy == TRUE)
+ rtn = mvwadd_wch(self->win,y,x, &wch);
+ else {
+ rtn = wadd_wch(self->win, &wch);
+ }
+ }
+ else
+#else
+ type = PyCurses_ConvertToCchar_t(self, chobj, &ch);
+#endif
+ if (type == 1) {
+ funcname = "addch";
+ if (use_xy == TRUE)
+ rtn = mvwaddch(self->win,y,x, ch | attr);
+ else {
+ rtn = waddch(self->win, ch | attr);
+ }
}
-
- if (use_xy == TRUE)
- rtn = mvwaddch(self->win,y,x, ch | attr);
else {
- rtn = waddch(self->win, ch | attr);
+ return NULL;
}
- return PyCursesCheckERR(rtn, "addch");
+ return PyCursesCheckERR(rtn, funcname);
}
static PyObject *
@@ -431,29 +628,34 @@ PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
{
int rtn;
int x, y;
- char *str;
+ int strtype;
+ PyObject *strobj, *bytesobj = NULL;
+#ifdef HAVE_NCURSESW
+ wchar_t *wstr = NULL;
+#endif
attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE;
+ const char *funcname;
switch (PyTuple_Size(args)) {
case 1:
- if (!PyArg_ParseTuple(args,"s;str", &str))
+ if (!PyArg_ParseTuple(args,"O;str", &strobj))
return NULL;
break;
case 2:
- if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &lattr))
+ if (!PyArg_ParseTuple(args,"Ol;str,attr", &strobj, &lattr))
return NULL;
attr = lattr;
use_attr = TRUE;
break;
case 3:
- if (!PyArg_ParseTuple(args,"iis;int,int,str", &y, &x, &str))
+ if (!PyArg_ParseTuple(args,"iiO;int,int,str", &y, &x, &strobj))
return NULL;
use_xy = TRUE;
break;
case 4:
- if (!PyArg_ParseTuple(args,"iisl;int,int,str,attr", &y, &x, &str, &lattr))
+ if (!PyArg_ParseTuple(args,"iiOl;int,int,str,attr", &y, &x, &strobj, &lattr))
return NULL;
attr = lattr;
use_xy = use_attr = TRUE;
@@ -462,47 +664,74 @@ PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "addstr requires 1 to 4 arguments");
return NULL;
}
-
+#ifdef HAVE_NCURSESW
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, &wstr);
+#else
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, NULL);
+#endif
+ if (strtype == 0)
+ return NULL;
if (use_attr == TRUE) {
attr_old = getattrs(self->win);
(void)wattrset(self->win,attr);
}
- if (use_xy == TRUE)
- rtn = mvwaddstr(self->win,y,x,str);
+#ifdef HAVE_NCURSESW
+ if (strtype == 2) {
+ funcname = "addwstr";
+ if (use_xy == TRUE)
+ rtn = mvwaddwstr(self->win,y,x,wstr);
+ else
+ rtn = waddwstr(self->win,wstr);
+ PyMem_Free(wstr);
+ }
else
- rtn = waddstr(self->win,str);
+#endif
+ {
+ char *str = PyBytes_AS_STRING(bytesobj);
+ funcname = "addstr";
+ if (use_xy == TRUE)
+ rtn = mvwaddstr(self->win,y,x,str);
+ else
+ rtn = waddstr(self->win,str);
+ Py_DECREF(bytesobj);
+ }
if (use_attr == TRUE)
(void)wattrset(self->win,attr_old);
- return PyCursesCheckERR(rtn, "addstr");
+ return PyCursesCheckERR(rtn, funcname);
}
static PyObject *
PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
{
int rtn, x, y, n;
- char *str;
+ int strtype;
+ PyObject *strobj, *bytesobj = NULL;
+#ifdef HAVE_NCURSESW
+ wchar_t *wstr = NULL;
+#endif
attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE;
+ const char *funcname;
switch (PyTuple_Size(args)) {
case 2:
- if (!PyArg_ParseTuple(args,"si;str,n", &str, &n))
+ if (!PyArg_ParseTuple(args,"Oi;str,n", &strobj, &n))
return NULL;
break;
case 3:
- if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &lattr))
+ if (!PyArg_ParseTuple(args,"Oil;str,n,attr", &strobj, &n, &lattr))
return NULL;
attr = lattr;
use_attr = TRUE;
break;
case 4:
- if (!PyArg_ParseTuple(args,"iisi;y,x,str,n", &y, &x, &str, &n))
+ if (!PyArg_ParseTuple(args,"iiOi;y,x,str,n", &y, &x, &strobj, &n))
return NULL;
use_xy = TRUE;
break;
case 5:
- if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &lattr))
+ if (!PyArg_ParseTuple(args,"iiOil;y,x,str,n,attr", &y, &x, &strobj, &n, &lattr))
return NULL;
attr = lattr;
use_xy = use_attr = TRUE;
@@ -511,18 +740,41 @@ PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "addnstr requires 2 to 5 arguments");
return NULL;
}
+#ifdef HAVE_NCURSESW
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, &wstr);
+#else
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, NULL);
+#endif
+ if (strtype == 0)
+ return NULL;
if (use_attr == TRUE) {
attr_old = getattrs(self->win);
(void)wattrset(self->win,attr);
}
- if (use_xy == TRUE)
- rtn = mvwaddnstr(self->win,y,x,str,n);
+#ifdef HAVE_NCURSESW
+ if (strtype == 2) {
+ funcname = "addnwstr";
+ if (use_xy == TRUE)
+ rtn = mvwaddnwstr(self->win,y,x,wstr,n);
+ else
+ rtn = waddnwstr(self->win,wstr,n);
+ PyMem_Free(wstr);
+ }
else
- rtn = waddnstr(self->win,str,n);
+#endif
+ {
+ char *str = PyBytes_AS_STRING(bytesobj);
+ funcname = "addnstr";
+ if (use_xy == TRUE)
+ rtn = mvwaddnstr(self->win,y,x,str,n);
+ else
+ rtn = waddnstr(self->win,str,n);
+ Py_DECREF(bytesobj);
+ }
if (use_attr == TRUE)
(void)wattrset(self->win,attr_old);
- return PyCursesCheckERR(rtn, "addnstr");
+ return PyCursesCheckERR(rtn, funcname);
}
static PyObject *
@@ -548,10 +800,8 @@ PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
- PyErr_SetString(PyExc_TypeError, "argument 1 or 3 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &bkgd))
return NULL;
- }
return PyCursesCheckERR(wbkgd(self->win, bkgd | attr), "bkgd");
}
@@ -606,10 +856,8 @@ PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- if (!PyCurses_ConvertToChtype(temp, &bkgd)) {
- PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &bkgd))
return NULL;
- }
wbkgdset(self->win, bkgd | attr);
return PyCursesCheckERR(0, "bkgdset");
@@ -634,11 +882,8 @@ PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
return NULL;
for(i=0; i<8; i++) {
- if (temp[i] != NULL && !PyCurses_ConvertToChtype(temp[i], &ch[i])) {
- PyErr_Format(PyExc_TypeError,
- "argument %i must be a ch or an int", i+1);
+ if (temp[i] != NULL && !PyCurses_ConvertToChtype(self, temp[i], &ch[i]))
return NULL;
- }
}
wborder(self->win,
@@ -783,7 +1028,7 @@ PyCursesWindow_DerWin(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- return (PyObject *)PyCursesWindow_New(win);
+ return (PyObject *)PyCursesWindow_New(win, NULL);
}
static PyObject *
@@ -811,10 +1056,8 @@ PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError, "argument 1 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &ch))
return NULL;
- }
#ifdef WINDOW_HAS_FLAGS
if (self->win->_flags & _ISPAD)
@@ -912,6 +1155,46 @@ PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
}
}
+#ifdef HAVE_NCURSESW
+static PyObject *
+PyCursesWindow_Get_WCh(PyCursesWindowObject *self, PyObject *args)
+{
+ int x, y;
+ int ct;
+ wint_t rtn;
+
+ switch (PyTuple_Size(args)) {
+ case 0:
+ Py_BEGIN_ALLOW_THREADS
+ ct = wget_wch(self->win,&rtn);
+ Py_END_ALLOW_THREADS
+ break;
+ case 2:
+ if (!PyArg_ParseTuple(args,"ii;y,x",&y,&x))
+ return NULL;
+ Py_BEGIN_ALLOW_THREADS
+ ct = mvwget_wch(self->win,y,x,&rtn);
+ Py_END_ALLOW_THREADS
+ break;
+ default:
+ PyErr_SetString(PyExc_TypeError, "get_wch requires 0 or 2 arguments");
+ return NULL;
+ }
+ if (ct == ERR) {
+ if (PyErr_CheckSignals())
+ return NULL;
+
+ /* get_wch() returns ERR in nodelay mode */
+ PyErr_SetString(PyCursesError, "no input");
+ return NULL;
+ }
+ if (ct == KEY_CODE_YES)
+ return PyLong_FromLong(rtn);
+ else
+ return PyUnicode_FromOrdinal(rtn);
+}
+#endif
+
static PyObject *
PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args)
{
@@ -1003,11 +1286,8 @@ PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
}
if (code != ERR) {
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError,
- "argument 1 or 3 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &ch))
return NULL;
- }
return PyCursesCheckERR(whline(self->win, ch | attr, n), "hline");
} else
return PyCursesCheckERR(code, "wmove");
@@ -1048,11 +1328,8 @@ PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError,
- "argument 1 or 3 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &ch))
return NULL;
- }
if (use_xy == TRUE)
rtn = mvwinsch(self->win,y,x, ch | attr);
@@ -1065,7 +1342,8 @@ PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
static PyObject *
PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
{
- int x, y, rtn;
+ int x, y;
+ unsigned long rtn;
switch (PyTuple_Size(args)) {
case 0:
@@ -1080,7 +1358,7 @@ PyCursesWindow_InCh(PyCursesWindowObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "inch requires 0 or 2 arguments");
return NULL;
}
- return PyLong_FromLong((long) rtn);
+ return PyLong_FromUnsignedLong(rtn);
}
static PyObject *
@@ -1123,29 +1401,34 @@ PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
{
int rtn;
int x, y;
- char *str;
+ int strtype;
+ PyObject *strobj, *bytesobj = NULL;
+#ifdef HAVE_NCURSESW
+ wchar_t *wstr = NULL;
+#endif
attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE;
+ const char *funcname;
switch (PyTuple_Size(args)) {
case 1:
- if (!PyArg_ParseTuple(args,"s;str", &str))
+ if (!PyArg_ParseTuple(args,"O;str", &strobj))
return NULL;
break;
case 2:
- if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &lattr))
+ if (!PyArg_ParseTuple(args,"Ol;str,attr", &strobj, &lattr))
return NULL;
attr = lattr;
use_attr = TRUE;
break;
case 3:
- if (!PyArg_ParseTuple(args,"iis;y,x,str", &y, &x, &str))
+ if (!PyArg_ParseTuple(args,"iiO;y,x,str", &y, &x, &strobj))
return NULL;
use_xy = TRUE;
break;
case 4:
- if (!PyArg_ParseTuple(args,"iisl;y,x,str,attr", &y, &x, &str, &lattr))
+ if (!PyArg_ParseTuple(args,"iiOl;y,x,str,attr", &y, &x, &strobj, &lattr))
return NULL;
attr = lattr;
use_xy = use_attr = TRUE;
@@ -1155,46 +1438,75 @@ PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
+#ifdef HAVE_NCURSESW
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, &wstr);
+#else
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, NULL);
+#endif
+ if (strtype == 0)
+ return NULL;
+
if (use_attr == TRUE) {
attr_old = getattrs(self->win);
(void)wattrset(self->win,attr);
}
- if (use_xy == TRUE)
- rtn = mvwinsstr(self->win,y,x,str);
+#ifdef HAVE_NCURSESW
+ if (strtype == 2) {
+ funcname = "inswstr";
+ if (use_xy == TRUE)
+ rtn = mvwins_wstr(self->win,y,x,wstr);
+ else
+ rtn = wins_wstr(self->win,wstr);
+ PyMem_Free(wstr);
+ }
else
- rtn = winsstr(self->win,str);
+#endif
+ {
+ char *str = PyBytes_AS_STRING(bytesobj);
+ funcname = "insstr";
+ if (use_xy == TRUE)
+ rtn = mvwinsstr(self->win,y,x,str);
+ else
+ rtn = winsstr(self->win,str);
+ Py_DECREF(bytesobj);
+ }
if (use_attr == TRUE)
(void)wattrset(self->win,attr_old);
- return PyCursesCheckERR(rtn, "insstr");
+ return PyCursesCheckERR(rtn, funcname);
}
static PyObject *
PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
{
int rtn, x, y, n;
- char *str;
+ int strtype;
+ PyObject *strobj, *bytesobj = NULL;
+#ifdef HAVE_NCURSESW
+ wchar_t *wstr = NULL;
+#endif
attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE;
+ const char *funcname;
switch (PyTuple_Size(args)) {
case 2:
- if (!PyArg_ParseTuple(args,"si;str,n", &str, &n))
+ if (!PyArg_ParseTuple(args,"Oi;str,n", &strobj, &n))
return NULL;
break;
case 3:
- if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &lattr))
+ if (!PyArg_ParseTuple(args,"Oil;str,n,attr", &strobj, &n, &lattr))
return NULL;
attr = lattr;
use_attr = TRUE;
break;
case 4:
- if (!PyArg_ParseTuple(args,"iisi;y,x,str,n", &y, &x, &str, &n))
+ if (!PyArg_ParseTuple(args,"iiOi;y,x,str,n", &y, &x, &strobj, &n))
return NULL;
use_xy = TRUE;
break;
case 5:
- if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &lattr))
+ if (!PyArg_ParseTuple(args,"iiOil;y,x,str,n,attr", &y, &x, &strobj, &n, &lattr))
return NULL;
attr = lattr;
use_xy = use_attr = TRUE;
@@ -1204,17 +1516,41 @@ PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
+#ifdef HAVE_NCURSESW
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, &wstr);
+#else
+ strtype = PyCurses_ConvertToString(self, strobj, &bytesobj, NULL);
+#endif
+ if (strtype == 0)
+ return NULL;
+
if (use_attr == TRUE) {
attr_old = getattrs(self->win);
(void)wattrset(self->win,attr);
}
- if (use_xy == TRUE)
- rtn = mvwinsnstr(self->win,y,x,str,n);
+#ifdef HAVE_NCURSESW
+ if (strtype == 2) {
+ funcname = "insn_wstr";
+ if (use_xy == TRUE)
+ rtn = mvwins_nwstr(self->win,y,x,wstr,n);
+ else
+ rtn = wins_nwstr(self->win,wstr,n);
+ PyMem_Free(wstr);
+ }
else
- rtn = winsnstr(self->win,str,n);
+#endif
+ {
+ char *str = PyBytes_AS_STRING(bytesobj);
+ funcname = "insnstr";
+ if (use_xy == TRUE)
+ rtn = mvwinsnstr(self->win,y,x,str,n);
+ else
+ rtn = winsnstr(self->win,str,n);
+ Py_DECREF(bytesobj);
+ }
if (use_attr == TRUE)
(void)wattrset(self->win,attr_old);
- return PyCursesCheckERR(rtn, "insnstr");
+ return PyCursesCheckERR(rtn, funcname);
}
static PyObject *
@@ -1387,10 +1723,12 @@ PyCursesWindow_PutWin(PyCursesWindowObject *self, PyObject *stream)
while (1) {
char buf[BUFSIZ];
Py_ssize_t n = fread(buf, 1, BUFSIZ, fp);
+ _Py_IDENTIFIER(write);
+
if (n <= 0)
break;
Py_DECREF(res);
- res = PyObject_CallMethod(stream, "write", "y#", buf, n);
+ res = _PyObject_CallMethodId(stream, &PyId_write, "y#", buf, n);
if (res == NULL)
break;
}
@@ -1495,7 +1833,7 @@ PyCursesWindow_SubWin(PyCursesWindowObject *self, PyObject *args)
return NULL;
}
- return (PyObject *)PyCursesWindow_New(win);
+ return (PyObject *)PyCursesWindow_New(win, self->encoding);
}
static PyObject *
@@ -1571,16 +1909,52 @@ PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
}
if (code != ERR) {
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError,
- "argument 1 or 3 must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(self, temp, &ch))
return NULL;
- }
return PyCursesCheckERR(wvline(self->win, ch | attr, n), "vline");
} else
return PyCursesCheckERR(code, "wmove");
}
+static PyObject *
+PyCursesWindow_get_encoding(PyCursesWindowObject *self, void *closure)
+{
+ return PyUnicode_FromString(self->encoding);
+}
+
+static int
+PyCursesWindow_set_encoding(PyCursesWindowObject *self, PyObject *value)
+{
+ PyObject *ascii;
+ char *encoding;
+
+ /* It is illegal to del win.encoding */
+ if (value == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "encoding may not be deleted");
+ return -1;
+ }
+
+ if (!PyUnicode_Check(value)) {
+ PyErr_SetString(PyExc_TypeError,
+ "setting encoding to a non-string");
+ return -1;
+ }
+ ascii = PyUnicode_AsASCIIString(value);
+ if (ascii == NULL)
+ return -1;
+ encoding = strdup(PyBytes_AS_STRING(ascii));
+ Py_DECREF(ascii);
+ if (encoding == NULL) {
+ PyErr_NoMemory();
+ return -1;
+ }
+ free(self->encoding);
+ self->encoding = encoding;
+ return 0;
+}
+
+
static PyMethodDef PyCursesWindow_Methods[] = {
{"addch", (PyCFunction)PyCursesWindow_AddCh, METH_VARARGS},
{"addnstr", (PyCFunction)PyCursesWindow_AddNStr, METH_VARARGS},
@@ -1610,6 +1984,9 @@ static PyMethodDef PyCursesWindow_Methods[] = {
{"getbkgd", (PyCFunction)PyCursesWindow_GetBkgd, METH_NOARGS},
{"getch", (PyCFunction)PyCursesWindow_GetCh, METH_VARARGS},
{"getkey", (PyCFunction)PyCursesWindow_GetKey, METH_VARARGS},
+#ifdef HAVE_NCURSESW
+ {"get_wch", (PyCFunction)PyCursesWindow_Get_WCh, METH_VARARGS},
+#endif
{"getmaxyx", (PyCFunction)PyCursesWindow_getmaxyx, METH_NOARGS},
{"getparyx", (PyCFunction)PyCursesWindow_getparyx, METH_NOARGS},
{"getstr", (PyCFunction)PyCursesWindow_GetStr, METH_VARARGS},
@@ -1665,6 +2042,14 @@ static PyMethodDef PyCursesWindow_Methods[] = {
{NULL, NULL} /* sentinel */
};
+static PyGetSetDef PyCursesWindow_getsets[] = {
+ {"encoding",
+ (getter)PyCursesWindow_get_encoding,
+ (setter)PyCursesWindow_set_encoding,
+ "the typecode character used to create the array"},
+ {NULL, NULL, NULL, NULL } /* sentinel */
+};
+
/* -------------------------------------------------------*/
PyTypeObject PyCursesWindow_Type = {
@@ -1697,6 +2082,8 @@ PyTypeObject PyCursesWindow_Type = {
0, /*tp_iter*/
0, /*tp_iternext*/
PyCursesWindow_Methods, /*tp_methods*/
+ 0, /* tp_members */
+ PyCursesWindow_getsets, /* tp_getset */
};
/*********************************************************************
@@ -1875,6 +2262,7 @@ PyCurses_GetWin(PyCursesWindowObject *self, PyObject *stream)
PyObject *data;
size_t datalen;
WINDOW *win;
+ _Py_IDENTIFIER(read);
PyCursesInitialised;
@@ -1888,7 +2276,7 @@ PyCurses_GetWin(PyCursesWindowObject *self, PyObject *stream)
remove(fn);
return PyErr_SetFromErrnoWithFilename(PyExc_IOError, fn);
}
- data = PyObject_CallMethod(stream, "read", "");
+ data = _PyObject_CallMethodId(stream, &PyId_read, "");
if (data == NULL) {
fclose(fp);
remove(fn);
@@ -1919,7 +2307,7 @@ PyCurses_GetWin(PyCursesWindowObject *self, PyObject *stream)
PyErr_SetString(PyCursesError, catchall_NULL);
return NULL;
}
- return PyCursesWindow_New(win);
+ return PyCursesWindow_New(win, NULL);
}
static PyObject *
@@ -1997,10 +2385,11 @@ static PyObject *
PyCurses_InitScr(PyObject *self)
{
WINDOW *win;
+ PyCursesWindowObject *winobj;
if (initialised == TRUE) {
wrefresh(stdscr);
- return (PyObject *)PyCursesWindow_New(stdscr);
+ return (PyObject *)PyCursesWindow_New(stdscr, NULL);
}
win = initscr();
@@ -2092,7 +2481,9 @@ PyCurses_InitScr(PyObject *self)
SetDictInt("LINES", LINES);
SetDictInt("COLS", COLS);
- return (PyObject *)PyCursesWindow_New(win);
+ winobj = (PyCursesWindowObject *)PyCursesWindow_New(win, NULL);
+ screen_encoding = winobj->encoding;
+ return (PyObject *)winobj;
}
static PyObject *
@@ -2294,7 +2685,7 @@ PyCurses_NewPad(PyObject *self, PyObject *args)
return NULL;
}
- return (PyObject *)PyCursesWindow_New(win);
+ return (PyObject *)PyCursesWindow_New(win, NULL);
}
static PyObject *
@@ -2326,7 +2717,7 @@ PyCurses_NewWindow(PyObject *self, PyObject *args)
return NULL;
}
- return (PyObject *)PyCursesWindow_New(win);
+ return (PyObject *)PyCursesWindow_New(win, NULL);
}
static PyObject *
@@ -2418,6 +2809,8 @@ update_lines_cols(void)
{
PyObject *o;
PyObject *m = PyImport_ImportModuleNoBlock("curses");
+ _Py_IDENTIFIER(LINES);
+ _Py_IDENTIFIER(COLS);
if (!m)
return 0;
@@ -2427,12 +2820,13 @@ update_lines_cols(void)
Py_DECREF(m);
return 0;
}
- if (PyObject_SetAttrString(m, "LINES", o)) {
+ if (_PyObject_SetAttrId(m, &PyId_LINES, o)) {
Py_DECREF(m);
Py_DECREF(o);
return 0;
}
- if (PyDict_SetItemString(ModDict, "LINES", o)) {
+ /* PyId_LINES.object will be initialized here. */
+ if (PyDict_SetItem(ModDict, PyId_LINES.object, o)) {
Py_DECREF(m);
Py_DECREF(o);
return 0;
@@ -2443,12 +2837,12 @@ update_lines_cols(void)
Py_DECREF(m);
return 0;
}
- if (PyObject_SetAttrString(m, "COLS", o)) {
+ if (_PyObject_SetAttrId(m, &PyId_COLS, o)) {
Py_DECREF(m);
Py_DECREF(o);
return 0;
}
- if (PyDict_SetItemString(ModDict, "COLS", o)) {
+ if (PyDict_SetItem(ModDict, PyId_COLS.object, o)) {
Py_DECREF(m);
Py_DECREF(o);
return 0;
@@ -2537,9 +2931,13 @@ PyCurses_Start_Color(PyObject *self)
if (code != ERR) {
initialisedcolors = TRUE;
c = PyLong_FromLong((long) COLORS);
+ if (c == NULL)
+ return NULL;
PyDict_SetItemString(ModDict, "COLORS", c);
Py_DECREF(c);
cp = PyLong_FromLong((long) COLOR_PAIRS);
+ if (cp == NULL)
+ return NULL;
PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
Py_DECREF(cp);
Py_INCREF(Py_None);
@@ -2640,10 +3038,8 @@ PyCurses_UnCtrl(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(NULL, temp, &ch))
return NULL;
- }
return PyBytes_FromString(unctrl(ch));
}
@@ -2656,16 +3052,80 @@ PyCurses_UngetCh(PyObject *self, PyObject *args)
PyCursesInitialised;
- if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
+ if (!PyArg_ParseTuple(args,"O;ch or int",&temp))
+ return NULL;
- if (!PyCurses_ConvertToChtype(temp, &ch)) {
- PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
+ if (!PyCurses_ConvertToChtype(NULL, temp, &ch))
return NULL;
- }
return PyCursesCheckERR(ungetch(ch), "ungetch");
}
+#ifdef HAVE_NCURSESW
+/* Convert an object to a character (wchar_t):
+
+ - int
+ - str of length 1
+
+ Return 1 on success, 0 on error. */
+static int
+PyCurses_ConvertToWchar_t(PyObject *obj,
+ wchar_t *wch)
+{
+ if (PyUnicode_Check(obj)) {
+ wchar_t buffer[2];
+ if (PyUnicode_AsWideChar(obj, buffer, 2) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, "
+ "got a str of length %zi",
+ PyUnicode_GET_LENGTH(obj));
+ return 0;
+ }
+ *wch = buffer[0];
+ return 2;
+ }
+ else if (PyLong_CheckExact(obj)) {
+ long value;
+ int overflow;
+ value = PyLong_AsLongAndOverflow(obj, &overflow);
+ if (overflow) {
+ PyErr_SetString(PyExc_OverflowError,
+ "int doesn't fit in long");
+ return 0;
+ }
+ *wch = (wchar_t)value;
+ if ((long)*wch != value) {
+ PyErr_Format(PyExc_OverflowError,
+ "character doesn't fit in wchar_t");
+ return 0;
+ }
+ return 1;
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "expect bytes or str of length 1, or int, got %s",
+ Py_TYPE(obj)->tp_name);
+ return 0;
+ }
+}
+
+static PyObject *
+PyCurses_Unget_Wch(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ wchar_t wch;
+
+ PyCursesInitialised;
+
+ if (!PyArg_ParseTuple(args,"O", &obj))
+ return NULL;
+
+ if (!PyCurses_ConvertToWchar_t(obj, &wch))
+ return NULL;
+ return PyCursesCheckERR(unget_wch(wch), "unget_wch");
+}
+#endif
+
static PyObject *
PyCurses_Use_Env(PyObject *self, PyObject *args)
{
@@ -2793,6 +3253,9 @@ static PyMethodDef PyCurses_methods[] = {
{"typeahead", (PyCFunction)PyCurses_TypeAhead, METH_VARARGS},
{"unctrl", (PyCFunction)PyCurses_UnCtrl, METH_VARARGS},
{"ungetch", (PyCFunction)PyCurses_UngetCh, METH_VARARGS},
+#ifdef HAVE_NCURSESW
+ {"unget_wch", (PyCFunction)PyCurses_Unget_Wch, METH_VARARGS},
+#endif
{"use_env", (PyCFunction)PyCurses_Use_Env, METH_VARARGS},
#ifndef STRICT_SYSV_CURSES
{"use_default_colors", (PyCFunction)PyCurses_Use_Default_Colors, METH_NOARGS},
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index ef2f7b306a..fa231d9259 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -7,8 +7,6 @@
#include <time.h>
-#include "_time.h"
-
/* Differentiate between building the core module and building extension
* modules.
*/
@@ -766,8 +764,10 @@ typedef struct
PyObject *name;
} PyDateTime_TimeZone;
-/* The interned UTC timezone instance */
+/* The interned UTC timezone instance */
static PyObject *PyDateTime_TimeZone_UTC;
+/* The interned Epoch datetime instance */
+static PyObject *PyDateTime_Epoch;
/* Create new timezone instance checking offset range. This
function does not check the name argument. Caller must assure
@@ -809,14 +809,16 @@ new_timezone(PyObject *offset, PyObject *name)
}
if (GET_TD_MICROSECONDS(offset) != 0 || GET_TD_SECONDS(offset) % 60 != 0) {
PyErr_Format(PyExc_ValueError, "offset must be a timedelta"
- " representing a whole number of minutes");
+ " representing a whole number of minutes,"
+ " not %R.", offset);
return NULL;
}
if ((GET_TD_DAYS(offset) == -1 && GET_TD_SECONDS(offset) == 0) ||
GET_TD_DAYS(offset) < -1 || GET_TD_DAYS(offset) >= 1) {
PyErr_Format(PyExc_ValueError, "offset must be a timedelta"
" strictly between -timedelta(hours=24) and"
- " timedelta(hours=24).");
+ " timedelta(hours=24),"
+ " not %R.", offset);
return NULL;
}
@@ -946,6 +948,7 @@ static PyObject *
call_tzname(PyObject *tzinfo, PyObject *tzinfoarg)
{
PyObject *result;
+ _Py_IDENTIFIER(tzname);
assert(tzinfo != NULL);
assert(check_tzinfo_subclass(tzinfo) >= 0);
@@ -954,7 +957,7 @@ call_tzname(PyObject *tzinfo, PyObject *tzinfoarg)
if (tzinfo == Py_None)
Py_RETURN_NONE;
- result = PyObject_CallMethod(tzinfo, "tzname", "O", tzinfoarg);
+ result = _PyObject_CallMethodId(tzinfo, &PyId_tzname, "O", tzinfoarg);
if (result == NULL || result == Py_None)
return result;
@@ -985,9 +988,8 @@ append_keyword_tzinfo(PyObject *repr, PyObject *tzinfo)
if (tzinfo == Py_None)
return repr;
/* Get rid of the trailing ')'. */
- assert(PyUnicode_AS_UNICODE(repr)[PyUnicode_GET_SIZE(repr)-1] == ')');
- temp = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(repr),
- PyUnicode_GET_SIZE(repr) - 1);
+ assert(PyUnicode_READ_CHAR(repr, PyUnicode_GET_LENGTH(repr)-1) == ')');
+ temp = PyUnicode_Substring(repr, 0, PyUnicode_GET_LENGTH(repr) - 1);
Py_DECREF(repr);
if (temp == NULL)
return NULL;
@@ -1079,6 +1081,8 @@ make_Zreplacement(PyObject *object, PyObject *tzinfoarg)
PyObject *temp;
PyObject *tzinfo = get_tzinfo_member(object);
PyObject *Zreplacement = PyUnicode_FromStringAndSize(NULL, 0);
+ _Py_IDENTIFIER(replace);
+
if (Zreplacement == NULL)
return NULL;
if (tzinfo == Py_None || tzinfo == NULL)
@@ -1099,7 +1103,7 @@ make_Zreplacement(PyObject *object, PyObject *tzinfoarg)
* strftime doesn't treat them as format codes.
*/
Py_DECREF(Zreplacement);
- Zreplacement = PyObject_CallMethod(temp, "replace", "ss", "%", "%%");
+ Zreplacement = _PyObject_CallMethodId(temp, &PyId_replace, "ss", "%", "%%");
Py_DECREF(temp);
if (Zreplacement == NULL)
return NULL;
@@ -1166,31 +1170,6 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
if (!pin)
return NULL;
- /* Give up if the year is before 1000.
- * Python strftime() plays games with the year, and different
- * games depending on whether envar PYTHON2K is set. This makes
- * years before 1000 a nightmare, even if the platform strftime
- * supports them (and not all do).
- * We could get a lot farther here by avoiding Python's strftime
- * wrapper and calling the C strftime() directly, but that isn't
- * an option in the Python implementation of this module.
- */
- {
- long year;
- PyObject *pyyear = PySequence_GetItem(timetuple, 0);
- if (pyyear == NULL) return NULL;
- assert(PyLong_Check(pyyear));
- year = PyLong_AsLong(pyyear);
- Py_DECREF(pyyear);
- if (year < 1000) {
- PyErr_Format(PyExc_ValueError, "year=%ld is before "
- "1000; the datetime strftime() "
- "methods require year >= 1000",
- year);
- return NULL;
- }
- }
-
/* Scan the input format, looking for %z/%Z/%f escapes, building
* a new format. Since computing the replacements for those codes
* is expensive, don't unless they're actually used.
@@ -1286,14 +1265,13 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
assert(ptoappend != NULL);
assert(ntoappend > 0);
while (usednew + ntoappend > totalnew) {
- size_t bigger = totalnew << 1;
- if ((bigger >> 1) != totalnew) { /* overflow */
+ if (totalnew > (PY_SSIZE_T_MAX >> 1)) { /* overflow */
PyErr_NoMemory();
goto Done;
}
- if (_PyBytes_Resize(&newfmt, bigger) < 0)
+ totalnew <<= 1;
+ if (_PyBytes_Resize(&newfmt, totalnew) < 0)
goto Done;
- totalnew = bigger;
pnew = PyBytes_AsString(newfmt) + usednew;
}
memcpy(pnew, ptoappend, ntoappend);
@@ -1307,12 +1285,15 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
{
PyObject *format;
PyObject *time = PyImport_ImportModuleNoBlock("time");
+
if (time == NULL)
goto Done;
format = PyUnicode_FromString(PyBytes_AS_STRING(newfmt));
if (format != NULL) {
- result = PyObject_CallMethod(time, "strftime", "OO",
- format, timetuple, NULL);
+ _Py_IDENTIFIER(strftime);
+
+ result = _PyObject_CallMethodId(time, &PyId_strftime, "OO",
+ format, timetuple, NULL);
Py_DECREF(format);
}
Py_DECREF(time);
@@ -1338,7 +1319,9 @@ time_time(void)
PyObject *time = PyImport_ImportModuleNoBlock("time");
if (time != NULL) {
- result = PyObject_CallMethod(time, "time", "()");
+ _Py_IDENTIFIER(time);
+
+ result = _PyObject_CallMethodId(time, &PyId_time, "()");
Py_DECREF(time);
}
return result;
@@ -1355,13 +1338,15 @@ build_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag)
time = PyImport_ImportModuleNoBlock("time");
if (time != NULL) {
- result = PyObject_CallMethod(time, "struct_time",
- "((iiiiiiiii))",
- y, m, d,
- hh, mm, ss,
- weekday(y, m, d),
- days_before_month(y, m) + d,
- dstflag);
+ _Py_IDENTIFIER(struct_time);
+
+ result = _PyObject_CallMethodId(time, &PyId_struct_time,
+ "((iiiiiiiii))",
+ y, m, d,
+ hh, mm, ss,
+ weekday(y, m, d),
+ days_before_month(y, m) + d,
+ dstflag);
Py_DECREF(time);
}
return result;
@@ -1416,9 +1401,9 @@ static PyObject *us_per_us = NULL; /* 1 */
static PyObject *us_per_ms = NULL; /* 1000 */
static PyObject *us_per_second = NULL; /* 1000000 */
static PyObject *us_per_minute = NULL; /* 1e6 * 60 as Python int */
-static PyObject *us_per_hour = NULL; /* 1e6 * 3600 as Python long */
-static PyObject *us_per_day = NULL; /* 1e6 * 3600 * 24 as Python long */
-static PyObject *us_per_week = NULL; /* 1e6*3600*24*7 as Python long */
+static PyObject *us_per_hour = NULL; /* 1e6 * 3600 as Python int */
+static PyObject *us_per_day = NULL; /* 1e6 * 3600 * 24 as Python int */
+static PyObject *us_per_week = NULL; /* 1e6*3600*24*7 as Python int */
static PyObject *seconds_per_day = NULL; /* 3600*24 as Python int */
/* ---------------------------------------------------------------------------
@@ -1431,7 +1416,7 @@ static PyObject *seconds_per_day = NULL; /* 3600*24 as Python int */
/* Convert a timedelta to a number of us,
* (24*3600*self.days + self.seconds)*1000000 + self.microseconds
- * as a Python int or long.
+ * as a Python int.
* Doing mixed-radix arithmetic by hand instead is excruciating in C,
* due to ubiquitous overflow possibilities.
*/
@@ -1461,7 +1446,7 @@ delta_to_microseconds(PyDateTime_Delta *self)
goto Done;
Py_DECREF(x1);
Py_DECREF(x2);
- x1 = x2 = NULL;
+ /* x1 = */ x2 = NULL;
/* x3 has days+seconds in seconds */
x1 = PyNumber_Multiply(x3, us_per_second); /* us */
@@ -1483,7 +1468,7 @@ Done:
return result;
}
-/* Convert a number of us (as a Python int or long) to a timedelta.
+/* Convert a number of us (as a Python int) to a timedelta.
*/
static PyObject *
microseconds_to_delta_ex(PyObject *pyus, PyTypeObject *type)
@@ -1594,11 +1579,12 @@ multiply_float_timedelta(PyObject *floatobj, PyDateTime_Delta *delta)
PyObject *result = NULL;
PyObject *pyus_in = NULL, *temp, *pyus_out;
PyObject *ratio = NULL;
+ _Py_IDENTIFIER(as_integer_ratio);
pyus_in = delta_to_microseconds(delta);
if (pyus_in == NULL)
return NULL;
- ratio = PyObject_CallMethod(floatobj, "as_integer_ratio", NULL);
+ ratio = _PyObject_CallMethodId(floatobj, &PyId_as_integer_ratio, NULL);
if (ratio == NULL)
goto error;
temp = PyNumber_Multiply(pyus_in, PyTuple_GET_ITEM(ratio, 0));
@@ -1692,11 +1678,12 @@ truedivide_timedelta_float(PyDateTime_Delta *delta, PyObject *f)
PyObject *result = NULL;
PyObject *pyus_in = NULL, *temp, *pyus_out;
PyObject *ratio = NULL;
+ _Py_IDENTIFIER(as_integer_ratio);
pyus_in = delta_to_microseconds(delta);
if (pyus_in == NULL)
return NULL;
- ratio = PyObject_CallMethod(f, "as_integer_ratio", NULL);
+ ratio = _PyObject_CallMethodId(f, &PyId_as_integer_ratio, NULL);
if (ratio == NULL)
goto error;
temp = PyNumber_Multiply(pyus_in, PyTuple_GET_ITEM(ratio, 1));
@@ -1837,8 +1824,7 @@ delta_richcompare(PyObject *self, PyObject *other, int op)
return diff_to_bool(diff, op);
}
else {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
}
@@ -1936,10 +1922,8 @@ delta_remainder(PyObject *left, PyObject *right)
PyObject *pyus_remainder;
PyObject *remainder;
- if (!PyDelta_Check(left) || !PyDelta_Check(right)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (!PyDelta_Check(left) || !PyDelta_Check(right))
+ Py_RETURN_NOTIMPLEMENTED;
pyus_left = delta_to_microseconds((PyDateTime_Delta *)left);
if (pyus_left == NULL)
@@ -1974,10 +1958,8 @@ delta_divmod(PyObject *left, PyObject *right)
PyObject *delta;
PyObject *result;
- if (!PyDelta_Check(left) || !PyDelta_Check(right)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (!PyDelta_Check(left) || !PyDelta_Check(right))
+ Py_RETURN_NOTIMPLEMENTED;
pyus_left = delta_to_microseconds((PyDateTime_Delta *)left);
if (pyus_left == NULL)
@@ -2460,26 +2442,29 @@ date_new(PyTypeObject *type, PyObject *args, PyObject *kw)
/* Return new date from localtime(t). */
static PyObject *
-date_local_from_time_t(PyObject *cls, double ts)
+date_local_from_object(PyObject *cls, PyObject *obj)
{
struct tm *tm;
time_t t;
- PyObject *result = NULL;
- t = _PyTime_DoubleToTimet(ts);
- if (t == (time_t)-1 && PyErr_Occurred())
+ if (_PyTime_ObjectToTime_t(obj, &t) == -1)
return NULL;
+
tm = localtime(&t);
- if (tm)
- result = PyObject_CallFunction(cls, "iii",
- tm->tm_year + 1900,
- tm->tm_mon + 1,
- tm->tm_mday);
- else
- PyErr_SetString(PyExc_ValueError,
- "timestamp out of range for "
- "platform localtime() function");
- return result;
+ if (tm == NULL) {
+ /* unconvertible time */
+#ifdef EINVAL
+ if (errno == 0)
+ errno = EINVAL;
+#endif
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ return PyObject_CallFunction(cls, "iii",
+ tm->tm_year + 1900,
+ tm->tm_mon + 1,
+ tm->tm_mday);
}
/* Return new date from current time.
@@ -2492,6 +2477,7 @@ date_today(PyObject *cls, PyObject *dummy)
{
PyObject *time;
PyObject *result;
+ _Py_IDENTIFIER(fromtimestamp);
time = time_time();
if (time == NULL)
@@ -2503,7 +2489,7 @@ date_today(PyObject *cls, PyObject *dummy)
* time.time() delivers; if someone were gonzo about optimization,
* date.today() could get away with plain C time().
*/
- result = PyObject_CallMethod(cls, "fromtimestamp", "O", time);
+ result = _PyObject_CallMethodId(cls, &PyId_fromtimestamp, "O", time);
Py_DECREF(time);
return result;
}
@@ -2512,11 +2498,11 @@ date_today(PyObject *cls, PyObject *dummy)
static PyObject *
date_fromtimestamp(PyObject *cls, PyObject *args)
{
- double timestamp;
+ PyObject *timestamp;
PyObject *result = NULL;
- if (PyArg_ParseTuple(args, "d:fromtimestamp", &timestamp))
- result = date_local_from_time_t(cls, timestamp);
+ if (PyArg_ParseTuple(args, "O:fromtimestamp", &timestamp))
+ result = date_local_from_object(cls, timestamp);
return result;
}
@@ -2571,10 +2557,9 @@ add_date_timedelta(PyDateTime_Date *date, PyDateTime_Delta *delta, int negate)
static PyObject *
date_add(PyObject *left, PyObject *right)
{
- if (PyDateTime_Check(left) || PyDateTime_Check(right)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (PyDateTime_Check(left) || PyDateTime_Check(right))
+ Py_RETURN_NOTIMPLEMENTED;
+
if (PyDate_Check(left)) {
/* date + ??? */
if (PyDelta_Check(right))
@@ -2593,17 +2578,15 @@ date_add(PyObject *left, PyObject *right)
(PyDateTime_Delta *) left,
0);
}
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
static PyObject *
date_subtract(PyObject *left, PyObject *right)
{
- if (PyDateTime_Check(left) || PyDateTime_Check(right)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (PyDateTime_Check(left) || PyDateTime_Check(right))
+ Py_RETURN_NOTIMPLEMENTED;
+
if (PyDate_Check(left)) {
if (PyDate_Check(right)) {
/* date - date */
@@ -2622,8 +2605,7 @@ date_subtract(PyObject *left, PyObject *right)
1);
}
}
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
@@ -2648,7 +2630,9 @@ date_isoformat(PyDateTime_Date *self)
static PyObject *
date_str(PyDateTime_Date *self)
{
- return PyObject_CallMethod((PyObject *)self, "isoformat", "()");
+ _Py_IDENTIFIER(isoformat);
+
+ return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
}
@@ -2667,13 +2651,14 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw)
PyObject *result;
PyObject *tuple;
PyObject *format;
+ _Py_IDENTIFIER(timetuple);
static char *keywords[] = {"format", NULL};
if (! PyArg_ParseTupleAndKeywords(args, kw, "U:strftime", keywords,
&format))
return NULL;
- tuple = PyObject_CallMethod((PyObject *)self, "timetuple", "()");
+ tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, "()");
if (tuple == NULL)
return NULL;
result = wrap_strftime((PyObject *)self, format, tuple,
@@ -2686,15 +2671,16 @@ static PyObject *
date_format(PyDateTime_Date *self, PyObject *args)
{
PyObject *format;
+ _Py_IDENTIFIER(strftime);
if (!PyArg_ParseTuple(args, "U:__format__", &format))
return NULL;
/* if the format is zero length, return str(self) */
- if (PyUnicode_GetSize(format) == 0)
+ if (PyUnicode_GetLength(format) == 0)
return PyObject_Str((PyObject *)self);
- return PyObject_CallMethod((PyObject *)self, "strftime", "O", format);
+ return _PyObject_CallMethodId((PyObject *)self, &PyId_strftime, "O", format);
}
/* ISO methods. */
@@ -2740,10 +2726,8 @@ date_richcompare(PyObject *self, PyObject *other, int op)
_PyDateTime_DATE_DATASIZE);
return diff_to_bool(diff, op);
}
- else {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ else
+ Py_RETURN_NOTIMPLEMENTED;
}
static PyObject *
@@ -2775,27 +2759,10 @@ date_replace(PyDateTime_Date *self, PyObject *args, PyObject *kw)
return clone;
}
-/*
- Borrowed from stringobject.c, originally it was string_hash()
-*/
static Py_hash_t
generic_hash(unsigned char *data, int len)
{
- register unsigned char *p;
- register Py_hash_t x;
-
- assert(_Py_HashSecret_Initialized);
- p = (unsigned char *) data;
- x = _Py_HashSecret.prefix;
- x ^= *p << 7;
- while (--len >= 0)
- x = (1000003*x) ^ *p++;
- x ^= len;
- x ^= _Py_HashSecret.suffix;
- if (x == -1)
- x = -2;
-
- return x;
+ return _Py_HashBytes(data, len);
}
@@ -3100,12 +3067,14 @@ tzinfo_reduce(PyObject *self)
{
PyObject *args, *state, *tmp;
PyObject *getinitargs, *getstate;
+ _Py_IDENTIFIER(__getinitargs__);
+ _Py_IDENTIFIER(__getstate__);
tmp = PyTuple_New(0);
if (tmp == NULL)
return NULL;
- getinitargs = PyObject_GetAttrString(self, "__getinitargs__");
+ getinitargs = _PyObject_GetAttrId(self, &PyId___getinitargs__);
if (getinitargs != NULL) {
args = PyObject_CallObject(getinitargs, tmp);
Py_DECREF(getinitargs);
@@ -3120,7 +3089,7 @@ tzinfo_reduce(PyObject *self)
Py_INCREF(args);
}
- getstate = PyObject_GetAttrString(self, "__getstate__");
+ getstate = _PyObject_GetAttrId(self, &PyId___getstate__);
if (getstate != NULL) {
state = PyObject_CallObject(getstate, tmp);
Py_DECREF(getstate);
@@ -3243,10 +3212,8 @@ static PyObject *
timezone_richcompare(PyDateTime_TimeZone *self,
PyDateTime_TimeZone *other, int op)
{
- if (op != Py_EQ && op != Py_NE) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (op != Py_EQ && op != Py_NE)
+ Py_RETURN_NOTIMPLEMENTED;
if (Py_TYPE(other) != &PyDateTime_TimeZoneType) {
if (op == Py_EQ)
Py_RETURN_FALSE;
@@ -3297,7 +3264,6 @@ timezone_repr(PyDateTime_TimeZone *self)
static PyObject *
timezone_str(PyDateTime_TimeZone *self)
{
- char buf[10];
int hours, minutes, seconds;
PyObject *offset;
char sign;
@@ -3323,11 +3289,9 @@ timezone_str(PyDateTime_TimeZone *self)
Py_DECREF(offset);
minutes = divmod(seconds, 60, &seconds);
hours = divmod(minutes, 60, &minutes);
- assert(seconds == 0);
/* XXX ignore sub-minute data, curently not allowed. */
- PyOS_snprintf(buf, sizeof(buf), "UTC%c%02d:%02d", sign, hours, minutes);
-
- return PyUnicode_FromString(buf);
+ assert(seconds == 0);
+ return PyUnicode_FromFormat("UTC%c%02d:%02d", sign, hours, minutes);
}
static PyObject *
@@ -3624,7 +3588,9 @@ time_repr(PyDateTime_Time *self)
static PyObject *
time_str(PyDateTime_Time *self)
{
- return PyObject_CallMethod((PyObject *)self, "isoformat", "()");
+ _Py_IDENTIFIER(isoformat);
+
+ return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
}
static PyObject *
@@ -3632,7 +3598,7 @@ time_isoformat(PyDateTime_Time *self, PyObject *unused)
{
char buf[100];
PyObject *result;
- int us = TIME_GET_MICROSECOND(self);;
+ int us = TIME_GET_MICROSECOND(self);
if (us)
result = PyUnicode_FromFormat("%02d:%02d:%02d.%06d",
@@ -3701,10 +3667,8 @@ time_richcompare(PyObject *self, PyObject *other, int op)
PyObject *offset1, *offset2;
int diff;
- if (! PyTime_Check(other)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (! PyTime_Check(other))
+ Py_RETURN_NOTIMPLEMENTED;
if (GET_TIME_TZINFO(self) == GET_TIME_TZINFO(other)) {
diff = memcmp(((PyDateTime_Time *)self)->data,
@@ -3750,6 +3714,14 @@ time_richcompare(PyObject *self, PyObject *other, int op)
TIME_GET_MICROSECOND(other);
result = diff_to_bool(diff, op);
}
+ else if (op == Py_EQ) {
+ result = Py_False;
+ Py_INCREF(result);
+ }
+ else if (op == Py_NE) {
+ result = Py_True;
+ Py_INCREF(result);
+ }
else {
PyErr_SetString(PyExc_TypeError,
"can't compare offset-naive and "
@@ -3914,7 +3886,7 @@ static char time_doc[] =
PyDoc_STR("time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) --> a time object\n\
\n\
All arguments are optional. tzinfo may be None, or an instance of\n\
-a tzinfo subclass. The remaining arguments may be ints or longs.\n");
+a tzinfo subclass. The remaining arguments may be ints.\n");
static PyNumberMethods time_as_number = {
0, /* nb_add */
@@ -4105,33 +4077,33 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us,
PyObject *tzinfo)
{
struct tm *tm;
- PyObject *result = NULL;
tm = f(&timet);
- if (tm) {
- /* The platform localtime/gmtime may insert leap seconds,
- * indicated by tm->tm_sec > 59. We don't care about them,
- * except to the extent that passing them on to the datetime
- * constructor would raise ValueError for a reason that
- * made no sense to the user.
- */
- if (tm->tm_sec > 59)
- tm->tm_sec = 59;
- result = PyObject_CallFunction(cls, "iiiiiiiO",
- tm->tm_year + 1900,
- tm->tm_mon + 1,
- tm->tm_mday,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec,
- us,
- tzinfo);
+ if (tm == NULL) {
+#ifdef EINVAL
+ if (errno == 0)
+ errno = EINVAL;
+#endif
+ return PyErr_SetFromErrno(PyExc_OSError);
}
- else
- PyErr_SetString(PyExc_ValueError,
- "timestamp out of range for "
- "platform localtime()/gmtime() function");
- return result;
+
+ /* The platform localtime/gmtime may insert leap seconds,
+ * indicated by tm->tm_sec > 59. We don't care about them,
+ * except to the extent that passing them on to the datetime
+ * constructor would raise ValueError for a reason that
+ * made no sense to the user.
+ */
+ if (tm->tm_sec > 59)
+ tm->tm_sec = 59;
+ return PyObject_CallFunction(cls, "iiiiiiiO",
+ tm->tm_year + 1900,
+ tm->tm_mon + 1,
+ tm->tm_mday,
+ tm->tm_hour,
+ tm->tm_min,
+ tm->tm_sec,
+ us,
+ tzinfo);
}
/* Internal helper.
@@ -4142,32 +4114,15 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us,
* to get that much precision (e.g., C time() isn't good enough).
*/
static PyObject *
-datetime_from_timestamp(PyObject *cls, TM_FUNC f, double timestamp,
+datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp,
PyObject *tzinfo)
{
time_t timet;
- double fraction;
- int us;
+ long us;
- timet = _PyTime_DoubleToTimet(timestamp);
- if (timet == (time_t)-1 && PyErr_Occurred())
+ if (_PyTime_ObjectToTimeval(timestamp, &timet, &us) == -1)
return NULL;
- fraction = timestamp - (double)timet;
- us = (int)round_to_long(fraction * 1e6);
- if (us < 0) {
- /* Truncation towards zero is not what we wanted
- for negative numbers (Python's mod semantics) */
- timet -= 1;
- us += 1000000;
- }
- /* If timestamp is less than one microsecond smaller than a
- * full second, round up. Otherwise, ValueErrors are raised
- * for some floats. */
- if (us == 1000000) {
- timet += 1;
- us = 0;
- }
- return datetime_from_timet_and_us(cls, f, timet, us, tzinfo);
+ return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo);
}
/* Internal helper.
@@ -4205,7 +4160,9 @@ datetime_now(PyObject *cls, PyObject *args, PyObject *kw)
if (self != NULL && tzinfo != Py_None) {
/* Convert UTC to tzinfo's zone. */
PyObject *temp = self;
- self = PyObject_CallMethod(tzinfo, "fromutc", "O", self);
+ _Py_IDENTIFIER(fromutc);
+
+ self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
Py_DECREF(temp);
}
return self;
@@ -4225,11 +4182,11 @@ static PyObject *
datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw)
{
PyObject *self;
- double timestamp;
+ PyObject *timestamp;
PyObject *tzinfo = Py_None;
static char *keywords[] = {"timestamp", "tz", NULL};
- if (! PyArg_ParseTupleAndKeywords(args, kw, "d|O:fromtimestamp",
+ if (! PyArg_ParseTupleAndKeywords(args, kw, "O|O:fromtimestamp",
keywords, &timestamp, &tzinfo))
return NULL;
if (check_tzinfo_subclass(tzinfo) < 0)
@@ -4242,7 +4199,9 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw)
if (self != NULL && tzinfo != Py_None) {
/* Convert UTC to tzinfo's zone. */
PyObject *temp = self;
- self = PyObject_CallMethod(tzinfo, "fromutc", "O", self);
+ _Py_IDENTIFIER(fromutc);
+
+ self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
Py_DECREF(temp);
}
return self;
@@ -4252,10 +4211,10 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw)
static PyObject *
datetime_utcfromtimestamp(PyObject *cls, PyObject *args)
{
- double timestamp;
+ PyObject *timestamp;
PyObject *result = NULL;
- if (PyArg_ParseTuple(args, "d:utcfromtimestamp", &timestamp))
+ if (PyArg_ParseTuple(args, "O:utcfromtimestamp", &timestamp))
result = datetime_from_timestamp(cls, gmtime, timestamp,
Py_None);
return result;
@@ -4266,9 +4225,10 @@ static PyObject *
datetime_strptime(PyObject *cls, PyObject *args)
{
static PyObject *module = NULL;
- const Py_UNICODE *string, *format;
+ PyObject *string, *format;
+ _Py_IDENTIFIER(_strptime_datetime);
- if (!PyArg_ParseTuple(args, "uu:strptime", &string, &format))
+ if (!PyArg_ParseTuple(args, "UU:strptime", &string, &format))
return NULL;
if (module == NULL) {
@@ -4276,8 +4236,8 @@ datetime_strptime(PyObject *cls, PyObject *args)
if (module == NULL)
return NULL;
}
- return PyObject_CallMethod(module, "_strptime_datetime", "Ouu",
- cls, string, format);
+ return _PyObject_CallMethodId(module, &PyId__strptime_datetime, "OOO",
+ cls, string, format);
}
/* Return new datetime from date/datetime and time arguments. */
@@ -4393,8 +4353,7 @@ datetime_add(PyObject *left, PyObject *right)
(PyDateTime_Delta *) left,
1);
}
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
static PyObject *
@@ -4523,7 +4482,9 @@ datetime_repr(PyDateTime_DateTime *self)
static PyObject *
datetime_str(PyDateTime_DateTime *self)
{
- return PyObject_CallMethod((PyObject *)self, "isoformat", "(s)", " ");
+ _Py_IDENTIFIER(isoformat);
+
+ return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "(s)", " ");
}
static PyObject *
@@ -4596,8 +4557,7 @@ datetime_richcompare(PyObject *self, PyObject *other, int op)
Py_RETURN_TRUE;
return cmperror(self, other);
}
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
if (GET_DT_TZINFO(self) == GET_DT_TZINFO(other)) {
@@ -4639,6 +4599,14 @@ datetime_richcompare(PyObject *self, PyObject *other, int op)
Py_DECREF(delta);
result = diff_to_bool(diff, op);
}
+ else if (op == Py_EQ) {
+ result = Py_False;
+ Py_INCREF(result);
+ }
+ else if (op == Py_NE) {
+ result = Py_True;
+ Py_INCREF(result);
+ }
else {
PyErr_SetString(PyExc_TypeError,
"can't compare offset-naive and "
@@ -4725,16 +4693,83 @@ datetime_replace(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
}
static PyObject *
+local_timezone(PyDateTime_DateTime *utc_time)
+{
+ PyObject *result = NULL;
+ struct tm *timep;
+ time_t timestamp;
+ PyObject *delta;
+ PyObject *one_second;
+ PyObject *seconds;
+ PyObject *nameo = NULL;
+ const char *zone = NULL;
+
+ delta = datetime_subtract((PyObject *)utc_time, PyDateTime_Epoch);
+ if (delta == NULL)
+ return NULL;
+ one_second = new_delta(0, 1, 0, 0);
+ if (one_second == NULL)
+ goto error;
+ seconds = divide_timedelta_timedelta((PyDateTime_Delta *)delta,
+ (PyDateTime_Delta *)one_second);
+ Py_DECREF(one_second);
+ if (seconds == NULL)
+ goto error;
+ Py_DECREF(delta);
+ timestamp = PyLong_AsLong(seconds);
+ Py_DECREF(seconds);
+ if (timestamp == -1 && PyErr_Occurred())
+ return NULL;
+ timep = localtime(&timestamp);
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ zone = timep->tm_zone;
+ delta = new_delta(0, timep->tm_gmtoff, 0, 1);
+#else /* HAVE_STRUCT_TM_TM_ZONE */
+ {
+ PyObject *local_time;
+ local_time = new_datetime(timep->tm_year + 1900, timep->tm_mon + 1,
+ timep->tm_mday, timep->tm_hour, timep->tm_min,
+ timep->tm_sec, DATE_GET_MICROSECOND(utc_time),
+ utc_time->tzinfo);
+ if (local_time == NULL)
+ goto error;
+ delta = datetime_subtract(local_time, (PyObject*)utc_time);
+ /* XXX: before relying on tzname, we should compare delta
+ to the offset implied by timezone/altzone */
+ if (daylight && timep->tm_isdst >= 0)
+ zone = tzname[timep->tm_isdst % 2];
+ else
+ zone = tzname[0];
+ Py_DECREF(local_time);
+ }
+#endif /* HAVE_STRUCT_TM_TM_ZONE */
+ if (zone != NULL) {
+ nameo = PyUnicode_DecodeLocale(zone, "surrogateescape");
+ if (nameo == NULL)
+ goto error;
+ }
+ result = new_timezone(delta, nameo);
+ Py_DECREF(nameo);
+ error:
+ Py_DECREF(delta);
+ return result;
+}
+
+static PyDateTime_DateTime *
datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
{
- PyObject *result;
+ PyDateTime_DateTime *result;
PyObject *offset;
PyObject *temp;
- PyObject *tzinfo;
+ PyObject *tzinfo = Py_None;
+ _Py_IDENTIFIER(fromutc);
static char *keywords[] = {"tz", NULL};
- if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:astimezone", keywords,
- &PyDateTime_TZInfoType, &tzinfo))
+ if (! PyArg_ParseTupleAndKeywords(args, kw, "|O:astimezone", keywords,
+ &tzinfo))
+ return NULL;
+
+ if (check_tzinfo_subclass(tzinfo) == -1)
return NULL;
if (!HASTZINFO(self) || self->tzinfo == Py_None)
@@ -4743,7 +4778,7 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
/* Conversion to self's own time zone is a NOP. */
if (self->tzinfo == tzinfo) {
Py_INCREF(self);
- return (PyObject *)self;
+ return self;
}
/* Convert self to UTC. */
@@ -4759,20 +4794,29 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
}
/* result = self - offset */
- result = add_datetime_timedelta(self,
- (PyDateTime_Delta *)offset, -1);
+ result = (PyDateTime_DateTime *)add_datetime_timedelta(self,
+ (PyDateTime_Delta *)offset, -1);
Py_DECREF(offset);
if (result == NULL)
return NULL;
/* Attach new tzinfo and let fromutc() do the rest. */
- temp = ((PyDateTime_DateTime *)result)->tzinfo;
- ((PyDateTime_DateTime *)result)->tzinfo = tzinfo;
- Py_INCREF(tzinfo);
+ temp = result->tzinfo;
+ if (tzinfo == Py_None) {
+ tzinfo = local_timezone(result);
+ if (tzinfo == NULL) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ }
+ else
+ Py_INCREF(tzinfo);
+ result->tzinfo = tzinfo;
Py_DECREF(temp);
- temp = result;
- result = PyObject_CallMethod(tzinfo, "fromutc", "O", temp);
+ temp = (PyObject *)result;
+ result = (PyDateTime_DateTime *)
+ _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", temp);
Py_DECREF(temp);
return result;
@@ -4804,6 +4848,44 @@ datetime_timetuple(PyDateTime_DateTime *self)
}
static PyObject *
+datetime_timestamp(PyDateTime_DateTime *self)
+{
+ PyObject *result;
+
+ if (HASTZINFO(self) && self->tzinfo != Py_None) {
+ PyObject *delta;
+ delta = datetime_subtract((PyObject *)self, PyDateTime_Epoch);
+ if (delta == NULL)
+ return NULL;
+ result = delta_total_seconds(delta);
+ Py_DECREF(delta);
+ }
+ else {
+ struct tm time;
+ time_t timestamp;
+ memset((void *) &time, '\0', sizeof(struct tm));
+ time.tm_year = GET_YEAR(self) - 1900;
+ time.tm_mon = GET_MONTH(self) - 1;
+ time.tm_mday = GET_DAY(self);
+ time.tm_hour = DATE_GET_HOUR(self);
+ time.tm_min = DATE_GET_MINUTE(self);
+ time.tm_sec = DATE_GET_SECOND(self);
+ time.tm_wday = -1;
+ time.tm_isdst = -1;
+ timestamp = mktime(&time);
+ /* Return value of -1 does not necessarily mean an error, but tm_wday
+ * cannot remain set to -1 if mktime succeeded. */
+ if (timestamp == (time_t)(-1) && time.tm_wday == -1) {
+ PyErr_SetString(PyExc_OverflowError,
+ "timestamp out of range");
+ return NULL;
+ }
+ result = PyFloat_FromDouble(timestamp + DATE_GET_MICROSECOND(self) / 1e6);
+ }
+ return result;
+}
+
+static PyObject *
datetime_getdate(PyDateTime_DateTime *self)
{
return new_date(GET_YEAR(self),
@@ -4950,6 +5032,9 @@ static PyMethodDef datetime_methods[] = {
{"timetuple", (PyCFunction)datetime_timetuple, METH_NOARGS,
PyDoc_STR("Return time tuple, compatible with time.localtime().")},
+ {"timestamp", (PyCFunction)datetime_timestamp, METH_NOARGS,
+ PyDoc_STR("Return POSIX timestamp as float.")},
+
{"utctimetuple", (PyCFunction)datetime_utctimetuple, METH_NOARGS,
PyDoc_STR("Return UTC time tuple, compatible with time.localtime().")},
@@ -4984,7 +5069,7 @@ static char datetime_doc[] =
PyDoc_STR("datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])\n\
\n\
The year, month and day arguments are required. tzinfo may be None, or an\n\
-instance of a tzinfo subclass. The remaining arguments may be ints or longs.\n");
+instance of a tzinfo subclass. The remaining arguments may be ints.\n");
static PyNumberMethods datetime_as_number = {
datetime_add, /* nb_add */
@@ -5207,6 +5292,12 @@ PyInit__datetime(void)
return NULL;
Py_DECREF(x);
+ /* Epoch */
+ PyDateTime_Epoch = new_datetime(1970, 1, 1, 0, 0, 0, 0,
+ PyDateTime_TimeZone_UTC);
+ if (PyDateTime_Epoch == NULL)
+ return NULL;
+
/* module initialization */
PyModule_AddIntConstant(m, "MINYEAR", MINYEAR);
PyModule_AddIntConstant(m, "MAXYEAR", MAXYEAR);
diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c
index 827acce895..83c051c505 100644
--- a/Modules/_dbmmodule.c
+++ b/Modules/_dbmmodule.c
@@ -212,6 +212,7 @@ dbm_contains(PyObject *self, PyObject *arg)
{
dbmobject *dp = (dbmobject *)self;
datum key, val;
+ Py_ssize_t size;
if ((dp)->di_dbm == NULL) {
PyErr_SetString(DbmError,
@@ -219,18 +220,21 @@ dbm_contains(PyObject *self, PyObject *arg)
return -1;
}
if (PyUnicode_Check(arg)) {
- arg = _PyUnicode_AsDefaultEncodedString(arg, NULL);
- if (arg == NULL)
+ key.dptr = PyUnicode_AsUTF8AndSize(arg, &size);
+ key.dsize = size;
+ if (key.dptr == NULL)
return -1;
}
- if (!PyBytes_Check(arg)) {
+ else if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
- "dbm key must be string, not %.100s",
+ "dbm key must be bytes or string, not %.100s",
arg->ob_type->tp_name);
return -1;
}
- key.dptr = PyBytes_AS_STRING(arg);
- key.dsize = PyBytes_GET_SIZE(arg);
+ else {
+ key.dptr = PyBytes_AS_STRING(arg);
+ key.dsize = PyBytes_GET_SIZE(arg);
+ }
val = dbm_fetch(dp->di_dbm, key);
return val.dptr != NULL;
}
diff --git a/Modules/_decimal/README.txt b/Modules/_decimal/README.txt
new file mode 100644
index 0000000000..7eae0f88f2
--- /dev/null
+++ b/Modules/_decimal/README.txt
@@ -0,0 +1,46 @@
+
+
+About
+=====
+
+_decimal.c is a wrapper for the libmpdec library. libmpdec is a fast C
+library for correctly-rounded arbitrary precision decimal floating point
+arithmetic. It is a complete implementation of Mike Cowlishaw/IBM's
+General Decimal Arithmetic Specification.
+
+
+Build process for the module
+============================
+
+As usual, the build process for _decimal.so is driven by setup.py in the top
+level directory. setup.py autodetects the following build configurations:
+
+ 1) x64 - 64-bit Python, x86_64 processor (AMD, Intel)
+
+ 2) uint128 - 64-bit Python, compiler provides __uint128_t (gcc)
+
+ 3) ansi64 - 64-bit Python, ANSI C
+
+ 4) ppro - 32-bit Python, x86 CPU, PentiumPro or later
+
+ 5) ansi32 - 32-bit Python, ANSI C
+
+ 6) ansi-legacy - 32-bit Python, compiler without uint64_t
+
+ 7) universal - Mac OS only (multi-arch)
+
+
+It is possible to override autodetection by exporting:
+
+ PYTHON_DECIMAL_WITH_MACHINE=value, where value is one of the above options.
+
+
+NOTE
+====
+
+decimal.so is not built from a static libmpdec.a since doing so led to
+failures on AIX (user report) and Windows (mixing static and dynamic CRTs
+causes locale problems and more).
+
+
+
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
new file mode 100644
index 0000000000..ea5253efb6
--- /dev/null
+++ b/Modules/_decimal/_decimal.c
@@ -0,0 +1,5764 @@
+/*
+ * Copyright (c) 2008-2012 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include <Python.h>
+#include "longintrepr.h"
+#include "pythread.h"
+#include "structmember.h"
+#include "complexobject.h"
+#include "mpdecimal.h"
+
+#include <stdlib.h>
+
+#include "docstrings.h"
+#include "memory.h"
+
+
+#if MPD_MAJOR_VERSION != 2
+ #error "libmpdec major version 2 required"
+#endif
+
+
+/*
+ * Type sizes with assertions in mpdecimal.h and pyport.h:
+ * sizeof(size_t) == sizeof(Py_ssize_t)
+ * sizeof(size_t) == sizeof(mpd_uint_t) == sizeof(mpd_ssize_t)
+ */
+
+#ifdef TEST_COVERAGE
+ #undef Py_LOCAL_INLINE
+ #define Py_LOCAL_INLINE Py_LOCAL
+#endif
+
+#define MPD_Float_operation MPD_Not_implemented
+
+#define BOUNDS_CHECK(x, MIN, MAX) x = (x < MIN || MAX < x) ? MAX : x
+
+
+/* _Py_DEC_MINALLOC >= MPD_MINALLOC */
+#define _Py_DEC_MINALLOC 4
+
+typedef struct {
+ PyObject_HEAD
+ Py_hash_t hash;
+ mpd_t dec;
+ mpd_uint_t data[_Py_DEC_MINALLOC];
+} PyDecObject;
+
+typedef struct {
+ PyObject_HEAD
+ uint32_t *flags;
+} PyDecSignalDictObject;
+
+typedef struct {
+ PyObject_HEAD
+ mpd_context_t ctx;
+ PyObject *traps;
+ PyObject *flags;
+ int capitals;
+#ifndef WITHOUT_THREADS
+ PyThreadState *tstate;
+#endif
+} PyDecContextObject;
+
+typedef struct {
+ PyObject_HEAD
+ PyObject *local;
+ PyObject *global;
+} PyDecContextManagerObject;
+
+
+#undef MPD
+#undef CTX
+static PyTypeObject PyDec_Type;
+static PyTypeObject *PyDecSignalDict_Type;
+static PyTypeObject PyDecContext_Type;
+static PyTypeObject PyDecContextManager_Type;
+#define PyDec_CheckExact(v) (Py_TYPE(v) == &PyDec_Type)
+#define PyDec_Check(v) PyObject_TypeCheck(v, &PyDec_Type)
+#define PyDecSignalDict_Check(v) (Py_TYPE(v) == PyDecSignalDict_Type)
+#define PyDecContext_Check(v) PyObject_TypeCheck(v, &PyDecContext_Type)
+#define MPD(v) (&((PyDecObject *)v)->dec)
+#define SdFlagAddr(v) (((PyDecSignalDictObject *)v)->flags)
+#define SdFlags(v) (*((PyDecSignalDictObject *)v)->flags)
+#define CTX(v) (&((PyDecContextObject *)v)->ctx)
+#define CtxCaps(v) (((PyDecContextObject *)v)->capitals)
+
+
+Py_LOCAL_INLINE(PyObject *)
+incr_true(void)
+{
+ Py_INCREF(Py_True);
+ return Py_True;
+}
+
+Py_LOCAL_INLINE(PyObject *)
+incr_false(void)
+{
+ Py_INCREF(Py_False);
+ return Py_False;
+}
+
+
+#ifdef WITHOUT_THREADS
+/* Default module context */
+static PyObject *module_context = NULL;
+#else
+/* Key for thread state dictionary */
+static PyObject *tls_context_key = NULL;
+/* Invariant: NULL or the most recently accessed thread local context */
+static PyDecContextObject *cached_context = NULL;
+#endif
+
+/* Template for creating new thread contexts, calling Context() without
+ * arguments and initializing the module_context on first access. */
+static PyObject *default_context_template = NULL;
+/* Basic and extended context templates */
+static PyObject *basic_context_template = NULL;
+static PyObject *extended_context_template = NULL;
+
+
+/* Error codes for functions that return signals or conditions */
+#define DEC_INVALID_SIGNALS (MPD_Max_status+1U)
+#define DEC_ERR_OCCURRED (DEC_INVALID_SIGNALS<<1)
+#define DEC_ERRORS (DEC_INVALID_SIGNALS|DEC_ERR_OCCURRED)
+
+typedef struct {
+ const char *name; /* condition or signal name */
+ const char *fqname; /* fully qualified name */
+ uint32_t flag; /* libmpdec flag */
+ PyObject *ex; /* corresponding exception */
+} DecCondMap;
+
+/* Top level Exception; inherits from ArithmeticError */
+static PyObject *DecimalException = NULL;
+
+/* Exceptions that correspond to IEEE signals */
+#define SUBNORMAL 5
+#define INEXACT 6
+#define ROUNDED 7
+#define SIGNAL_MAP_LEN 9
+static DecCondMap signal_map[] = {
+ {"InvalidOperation", "decimal.InvalidOperation", MPD_IEEE_Invalid_operation, NULL},
+ {"FloatOperation", "decimal.FloatOperation", MPD_Float_operation, NULL},
+ {"DivisionByZero", "decimal.DivisionByZero", MPD_Division_by_zero, NULL},
+ {"Overflow", "decimal.Overflow", MPD_Overflow, NULL},
+ {"Underflow", "decimal.Underflow", MPD_Underflow, NULL},
+ {"Subnormal", "decimal.Subnormal", MPD_Subnormal, NULL},
+ {"Inexact", "decimal.Inexact", MPD_Inexact, NULL},
+ {"Rounded", "decimal.Rounded", MPD_Rounded, NULL},
+ {"Clamped", "decimal.Clamped", MPD_Clamped, NULL},
+ {NULL}
+};
+
+/* Exceptions that inherit from InvalidOperation */
+static DecCondMap cond_map[] = {
+ {"InvalidOperation", "decimal.InvalidOperation", MPD_Invalid_operation, NULL},
+ {"ConversionSyntax", "decimal.ConversionSyntax", MPD_Conversion_syntax, NULL},
+ {"DivisionImpossible", "decimal.DivisionImpossible", MPD_Division_impossible, NULL},
+ {"DivisionUndefined", "decimal.DivisionUndefined", MPD_Division_undefined, NULL},
+ {"InvalidContext", "decimal.InvalidContext", MPD_Invalid_context, NULL},
+#ifdef EXTRA_FUNCTIONALITY
+ {"MallocError", "decimal.MallocError", MPD_Malloc_error, NULL},
+#endif
+ {NULL}
+};
+
+static const char *dec_signal_string[MPD_NUM_FLAGS] = {
+ "Clamped",
+ "InvalidOperation",
+ "DivisionByZero",
+ "InvalidOperation",
+ "InvalidOperation",
+ "InvalidOperation",
+ "Inexact",
+ "InvalidOperation",
+ "InvalidOperation",
+ "InvalidOperation",
+ "FloatOperation",
+ "Overflow",
+ "Rounded",
+ "Subnormal",
+ "Underflow",
+};
+
+#ifdef EXTRA_FUNCTIONALITY
+ #define _PY_DEC_ROUND_GUARD MPD_ROUND_GUARD
+#else
+ #define _PY_DEC_ROUND_GUARD (MPD_ROUND_GUARD-1)
+#endif
+static PyObject *round_map[_PY_DEC_ROUND_GUARD];
+
+static const char *invalid_rounding_err =
+"valid values for rounding are:\n\
+ [ROUND_CEILING, ROUND_FLOOR, ROUND_UP, ROUND_DOWN,\n\
+ ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN,\n\
+ ROUND_05UP]";
+
+static const char *invalid_signals_err =
+"valid values for signals are:\n\
+ [InvalidOperation, FloatOperation, DivisionByZero,\n\
+ Overflow, Underflow, Subnormal, Inexact, Rounded,\n\
+ Clamped]";
+
+#ifdef EXTRA_FUNCTIONALITY
+static const char *invalid_flags_err =
+"valid values for _flags or _traps are:\n\
+ signals:\n\
+ [DecIEEEInvalidOperation, DecFloatOperation, DecDivisionByZero,\n\
+ DecOverflow, DecUnderflow, DecSubnormal, DecInexact, DecRounded,\n\
+ DecClamped]\n\
+ conditions which trigger DecIEEEInvalidOperation:\n\
+ [DecInvalidOperation, DecConversionSyntax, DecDivisionImpossible,\n\
+ DecDivisionUndefined, DecFpuError, DecInvalidContext, DecMallocError]";
+#endif
+
+static int
+value_error_int(const char *mesg)
+{
+ PyErr_SetString(PyExc_ValueError, mesg);
+ return -1;
+}
+
+#ifdef CONFIG_32
+static PyObject *
+value_error_ptr(const char *mesg)
+{
+ PyErr_SetString(PyExc_ValueError, mesg);
+ return NULL;
+}
+#endif
+
+static int
+type_error_int(const char *mesg)
+{
+ PyErr_SetString(PyExc_TypeError, mesg);
+ return -1;
+}
+
+static int
+runtime_error_int(const char *mesg)
+{
+ PyErr_SetString(PyExc_RuntimeError, mesg);
+ return -1;
+}
+#define INTERNAL_ERROR_INT(funcname) \
+ return runtime_error_int("internal error in " funcname)
+
+static PyObject *
+runtime_error_ptr(const char *mesg)
+{
+ PyErr_SetString(PyExc_RuntimeError, mesg);
+ return NULL;
+}
+#define INTERNAL_ERROR_PTR(funcname) \
+ return runtime_error_ptr("internal error in " funcname)
+
+static void
+dec_traphandler(mpd_context_t *ctx UNUSED) /* GCOV_NOT_REACHED */
+{ /* GCOV_NOT_REACHED */
+ return; /* GCOV_NOT_REACHED */
+}
+
+static PyObject *
+flags_as_exception(uint32_t flags)
+{
+ DecCondMap *cm;
+
+ for (cm = signal_map; cm->name != NULL; cm++) {
+ if (flags&cm->flag) {
+ return cm->ex;
+ }
+ }
+
+ INTERNAL_ERROR_PTR("flags_as_exception"); /* GCOV_NOT_REACHED */
+}
+
+Py_LOCAL_INLINE(uint32_t)
+exception_as_flag(PyObject *ex)
+{
+ DecCondMap *cm;
+
+ for (cm = signal_map; cm->name != NULL; cm++) {
+ if (cm->ex == ex) {
+ return cm->flag;
+ }
+ }
+
+ PyErr_SetString(PyExc_KeyError, invalid_signals_err);
+ return DEC_INVALID_SIGNALS;
+}
+
+static PyObject *
+flags_as_list(uint32_t flags)
+{
+ PyObject *list;
+ DecCondMap *cm;
+
+ list = PyList_New(0);
+ if (list == NULL) {
+ return NULL;
+ }
+
+ for (cm = cond_map; cm->name != NULL; cm++) {
+ if (flags&cm->flag) {
+ if (PyList_Append(list, cm->ex) < 0) {
+ goto error;
+ }
+ }
+ }
+ for (cm = signal_map+1; cm->name != NULL; cm++) {
+ if (flags&cm->flag) {
+ if (PyList_Append(list, cm->ex) < 0) {
+ goto error;
+ }
+ }
+ }
+
+ return list;
+
+error:
+ Py_DECREF(list);
+ return NULL;
+}
+
+static PyObject *
+signals_as_list(uint32_t flags)
+{
+ PyObject *list;
+ DecCondMap *cm;
+
+ list = PyList_New(0);
+ if (list == NULL) {
+ return NULL;
+ }
+
+ for (cm = signal_map; cm->name != NULL; cm++) {
+ if (flags&cm->flag) {
+ if (PyList_Append(list, cm->ex) < 0) {
+ Py_DECREF(list);
+ return NULL;
+ }
+ }
+ }
+
+ return list;
+}
+
+static uint32_t
+list_as_flags(PyObject *list)
+{
+ PyObject *item;
+ uint32_t flags, x;
+ Py_ssize_t n, j;
+
+ assert(PyList_Check(list));
+
+ n = PyList_Size(list);
+ flags = 0;
+ for (j = 0; j < n; j++) {
+ item = PyList_GetItem(list, j);
+ x = exception_as_flag(item);
+ if (x & DEC_ERRORS) {
+ return x;
+ }
+ flags |= x;
+ }
+
+ return flags;
+}
+
+static PyObject *
+flags_as_dict(uint32_t flags)
+{
+ DecCondMap *cm;
+ PyObject *dict;
+
+ dict = PyDict_New();
+ if (dict == NULL) {
+ return NULL;
+ }
+
+ for (cm = signal_map; cm->name != NULL; cm++) {
+ PyObject *b = flags&cm->flag ? Py_True : Py_False;
+ if (PyDict_SetItem(dict, cm->ex, b) < 0) {
+ Py_DECREF(dict);
+ return NULL;
+ }
+ }
+
+ return dict;
+}
+
+static uint32_t
+dict_as_flags(PyObject *val)
+{
+ PyObject *b;
+ DecCondMap *cm;
+ uint32_t flags = 0;
+ int x;
+
+ if (!PyDict_Check(val)) {
+ PyErr_SetString(PyExc_TypeError,
+ "argument must be a signal dict");
+ return DEC_INVALID_SIGNALS;
+ }
+
+ if (PyDict_Size(val) != SIGNAL_MAP_LEN) {
+ PyErr_SetString(PyExc_KeyError,
+ "invalid signal dict");
+ return DEC_INVALID_SIGNALS;
+ }
+
+ for (cm = signal_map; cm->name != NULL; cm++) {
+ b = PyDict_GetItemWithError(val, cm->ex);
+ if (b == NULL) {
+ if (PyErr_Occurred()) {
+ return DEC_ERR_OCCURRED;
+ }
+ PyErr_SetString(PyExc_KeyError,
+ "invalid signal dict");
+ return DEC_INVALID_SIGNALS;
+ }
+
+ x = PyObject_IsTrue(b);
+ if (x < 0) {
+ return DEC_ERR_OCCURRED;
+ }
+ if (x == 1) {
+ flags |= cm->flag;
+ }
+ }
+
+ return flags;
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+static uint32_t
+long_as_flags(PyObject *v)
+{
+ long x;
+
+ x = PyLong_AsLong(v);
+ if (x == -1 && PyErr_Occurred()) {
+ return DEC_ERR_OCCURRED;
+ }
+ if (x < 0 || x > (long)MPD_Max_status) {
+ PyErr_SetString(PyExc_TypeError, invalid_flags_err);
+ return DEC_INVALID_SIGNALS;
+ }
+
+ return x;
+}
+#endif
+
+static int
+dec_addstatus(PyObject *context, uint32_t status)
+{
+ mpd_context_t *ctx = CTX(context);
+
+ ctx->status |= status;
+ if (status & (ctx->traps|MPD_Malloc_error)) {
+ PyObject *ex, *siglist;
+
+ if (status & MPD_Malloc_error) {
+ PyErr_NoMemory();
+ return 1;
+ }
+
+ ex = flags_as_exception(ctx->traps&status);
+ if (ex == NULL) {
+ return 1; /* GCOV_NOT_REACHED */
+ }
+ siglist = flags_as_list(ctx->traps&status);
+ if (siglist == NULL) {
+ return 1;
+ }
+
+ PyErr_SetObject(ex, siglist);
+ Py_DECREF(siglist);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+getround(PyObject *v)
+{
+ int i;
+
+ if (PyUnicode_Check(v)) {
+ for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) {
+ if (v == round_map[i]) {
+ return i;
+ }
+ }
+ for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) {
+ if (PyUnicode_Compare(v, round_map[i]) == 0) {
+ return i;
+ }
+ }
+ }
+
+ return type_error_int(invalid_rounding_err);
+}
+
+
+/******************************************************************************/
+/* SignalDict Object */
+/******************************************************************************/
+
+/* The SignalDict is a MutableMapping that provides access to the
+ mpd_context_t flags, which reside in the context object. When a
+ new context is created, context.traps and context.flags are
+ initialized to new SignalDicts. Once a SignalDict is tied to
+ a context, it cannot be deleted. */
+
+static int
+signaldict_init(PyObject *self, PyObject *args UNUSED, PyObject *kwds UNUSED)
+{
+ SdFlagAddr(self) = NULL;
+ return 0;
+}
+
+static Py_ssize_t
+signaldict_len(PyObject *self UNUSED)
+{
+ return SIGNAL_MAP_LEN;
+}
+
+static PyObject *SignalTuple;
+static PyObject *
+signaldict_iter(PyObject *self UNUSED)
+{
+ return PyTuple_Type.tp_iter(SignalTuple);
+}
+
+static PyObject *
+signaldict_getitem(PyObject *self, PyObject *key)
+{
+ uint32_t flag;
+
+ flag = exception_as_flag(key);
+ if (flag & DEC_ERRORS) {
+ return NULL;
+ }
+
+ return SdFlags(self)&flag ? incr_true() : incr_false();
+}
+
+static int
+signaldict_setitem(PyObject *self, PyObject *key, PyObject *value)
+{
+ uint32_t flag;
+ int x;
+
+ if (value == NULL) {
+ return value_error_int("signal keys cannot be deleted");
+ }
+
+ flag = exception_as_flag(key);
+ if (flag & DEC_ERRORS) {
+ return -1;
+ }
+
+ x = PyObject_IsTrue(value);
+ if (x < 0) {
+ return -1;
+ }
+
+ if (x == 1) {
+ SdFlags(self) |= flag;
+ }
+ else {
+ SdFlags(self) &= ~flag;
+ }
+
+ return 0;
+}
+
+static PyObject *
+signaldict_repr(PyObject *self)
+{
+ DecCondMap *cm;
+ const char *n[SIGNAL_MAP_LEN]; /* name */
+ const char *b[SIGNAL_MAP_LEN]; /* bool */
+ int i;
+
+ assert(SIGNAL_MAP_LEN == 9);
+
+ for (cm=signal_map, i=0; cm->name != NULL; cm++, i++) {
+ n[i] = cm->fqname;
+ b[i] = SdFlags(self)&cm->flag ? "True" : "False";
+ }
+ return PyUnicode_FromFormat(
+ "{<class '%s'>:%s, <class '%s'>:%s, <class '%s'>:%s, "
+ "<class '%s'>:%s, <class '%s'>:%s, <class '%s'>:%s, "
+ "<class '%s'>:%s, <class '%s'>:%s, <class '%s'>:%s}",
+ n[0], b[0], n[1], b[1], n[2], b[2],
+ n[3], b[3], n[4], b[4], n[5], b[5],
+ n[6], b[6], n[7], b[7], n[8], b[8]);
+}
+
+static PyObject *
+signaldict_richcompare(PyObject *v, PyObject *w, int op)
+{
+ PyObject *res = Py_NotImplemented;
+
+ assert(PyDecSignalDict_Check(v));
+
+ if (op == Py_EQ || op == Py_NE) {
+ if (PyDecSignalDict_Check(w)) {
+ res = (SdFlags(v)==SdFlags(w)) ^ (op==Py_NE) ? Py_True : Py_False;
+ }
+ else if (PyDict_Check(w)) {
+ uint32_t flags = dict_as_flags(w);
+ if (flags & DEC_ERRORS) {
+ if (flags & DEC_INVALID_SIGNALS) {
+ /* non-comparable: Py_NotImplemented */
+ PyErr_Clear();
+ }
+ else {
+ return NULL;
+ }
+ }
+ else {
+ res = (SdFlags(v)==flags) ^ (op==Py_NE) ? Py_True : Py_False;
+ }
+ }
+ }
+
+ Py_INCREF(res);
+ return res;
+}
+
+static PyObject *
+signaldict_copy(PyObject *self, PyObject *args UNUSED)
+{
+ return flags_as_dict(SdFlags(self));
+}
+
+
+static PyMappingMethods signaldict_as_mapping = {
+ (lenfunc)signaldict_len, /* mp_length */
+ (binaryfunc)signaldict_getitem, /* mp_subscript */
+ (objobjargproc)signaldict_setitem /* mp_ass_subscript */
+};
+
+static PyMethodDef signaldict_methods[] = {
+ { "copy", (PyCFunction)signaldict_copy, METH_NOARGS, NULL},
+ {NULL, NULL}
+};
+
+
+static PyTypeObject PyDecSignalDictMixin_Type =
+{
+ PyVarObject_HEAD_INIT(0, 0)
+ "decimal.SignalDictMixin", /* tp_name */
+ sizeof(PyDecSignalDictObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ 0, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) 0, /* tp_getattr */
+ (setattrfunc) 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc) signaldict_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ &signaldict_as_mapping, /* tp_as_mapping */
+ PyObject_HashNotImplemented, /* tp_hash */
+ 0, /* tp_call */
+ (reprfunc) 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ (setattrofunc) 0, /* tp_setattro */
+ (PyBufferProcs *) 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|
+ Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ signaldict_richcompare, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ (getiterfunc)signaldict_iter, /* tp_iter */
+ 0, /* tp_iternext */
+ signaldict_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)signaldict_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
+};
+
+
+/******************************************************************************/
+/* Context Object, Part 1 */
+/******************************************************************************/
+
+#define Dec_CONTEXT_GET_SSIZE(mem) \
+static PyObject * \
+context_get##mem(PyObject *self, void *closure UNUSED) \
+{ \
+ return PyLong_FromSsize_t(mpd_get##mem(CTX(self))); \
+}
+
+#define Dec_CONTEXT_GET_ULONG(mem) \
+static PyObject * \
+context_get##mem(PyObject *self, void *closure UNUSED) \
+{ \
+ return PyLong_FromUnsignedLong(mpd_get##mem(CTX(self))); \
+}
+
+Dec_CONTEXT_GET_SSIZE(prec)
+Dec_CONTEXT_GET_SSIZE(emax)
+Dec_CONTEXT_GET_SSIZE(emin)
+Dec_CONTEXT_GET_SSIZE(clamp)
+
+#ifdef EXTRA_FUNCTIONALITY
+Dec_CONTEXT_GET_ULONG(traps)
+Dec_CONTEXT_GET_ULONG(status)
+#endif
+
+static PyObject *
+context_getround(PyObject *self, void *closure UNUSED)
+{
+ int i = mpd_getround(CTX(self));
+
+ Py_INCREF(round_map[i]);
+ return round_map[i];
+}
+
+static PyObject *
+context_getcapitals(PyObject *self, void *closure UNUSED)
+{
+ return PyLong_FromLong(CtxCaps(self));
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+static PyObject *
+context_getallcr(PyObject *self, void *closure UNUSED)
+{
+ return PyLong_FromLong(mpd_getcr(CTX(self)));
+}
+#endif
+
+static PyObject *
+context_getetiny(PyObject *self, PyObject *dummy UNUSED)
+{
+ return PyLong_FromSsize_t(mpd_etiny(CTX(self)));
+}
+
+static PyObject *
+context_getetop(PyObject *self, PyObject *dummy UNUSED)
+{
+ return PyLong_FromSsize_t(mpd_etop(CTX(self)));
+}
+
+static int
+context_setprec(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetprec(ctx, x)) {
+ return value_error_int(
+ "valid range for prec is [1, MAX_PREC]");
+ }
+
+ return 0;
+}
+
+static int
+context_setemin(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetemin(ctx, x)) {
+ return value_error_int(
+ "valid range for Emin is [MIN_EMIN, 0]");
+ }
+
+ return 0;
+}
+
+static int
+context_setemax(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetemax(ctx, x)) {
+ return value_error_int(
+ "valid range for Emax is [0, MAX_EMAX]");
+ }
+
+ return 0;
+}
+
+#ifdef CONFIG_32
+static PyObject *
+context_unsafe_setprec(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx = CTX(self);
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+
+ if (x < 1 || x > 1070000000L) {
+ return value_error_ptr(
+ "valid range for unsafe prec is [1, 1070000000]");
+ }
+
+ ctx->prec = x;
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+context_unsafe_setemin(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx = CTX(self);
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+
+ if (x < -1070000000L || x > 0) {
+ return value_error_ptr(
+ "valid range for unsafe emin is [-1070000000, 0]");
+ }
+
+ ctx->emin = x;
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+context_unsafe_setemax(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx = CTX(self);
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+
+ if (x < 0 || x > 1070000000L) {
+ return value_error_ptr(
+ "valid range for unsafe emax is [0, 1070000000]");
+ }
+
+ ctx->emax = x;
+ Py_RETURN_NONE;
+}
+#endif
+
+static int
+context_setround(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ int x;
+
+ x = getround(value);
+ if (x == -1) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetround(ctx, x)) {
+ INTERNAL_ERROR_INT("context_setround"); /* GCOV_NOT_REACHED */
+ }
+
+ return 0;
+}
+
+static int
+context_setcapitals(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+
+ if (x != 0 && x != 1) {
+ return value_error_int(
+ "valid values for capitals are 0 or 1");
+ }
+ CtxCaps(self) = (int)x;
+
+ return 0;
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+static int
+context_settraps(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ flags = long_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsettraps(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_settraps");
+ }
+
+ return 0;
+}
+#endif
+
+static int
+context_settraps_list(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ flags = list_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsettraps(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_settraps_list");
+ }
+
+ return 0;
+}
+
+static int
+context_settraps_dict(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ if (PyDecSignalDict_Check(value)) {
+ flags = SdFlags(value);
+ }
+ else {
+ flags = dict_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsettraps(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_settraps_dict");
+ }
+
+ return 0;
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+static int
+context_setstatus(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ flags = long_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetstatus(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_setstatus");
+ }
+
+ return 0;
+}
+#endif
+
+static int
+context_setstatus_list(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ flags = list_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetstatus(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_setstatus_list");
+ }
+
+ return 0;
+}
+
+static int
+context_setstatus_dict(PyObject *self, PyObject *value)
+{
+ mpd_context_t *ctx;
+ uint32_t flags;
+
+ if (PyDecSignalDict_Check(value)) {
+ flags = SdFlags(value);
+ }
+ else {
+ flags = dict_as_flags(value);
+ if (flags & DEC_ERRORS) {
+ return -1;
+ }
+ }
+
+ ctx = CTX(self);
+ if (!mpd_qsetstatus(ctx, flags)) {
+ INTERNAL_ERROR_INT("context_setstatus_dict");
+ }
+
+ return 0;
+}
+
+static int
+context_setclamp(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+ BOUNDS_CHECK(x, INT_MIN, INT_MAX);
+
+ ctx = CTX(self);
+ if (!mpd_qsetclamp(ctx, (int)x)) {
+ return value_error_int("valid values for clamp are 0 or 1");
+ }
+
+ return 0;
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+static int
+context_setallcr(PyObject *self, PyObject *value, void *closure UNUSED)
+{
+ mpd_context_t *ctx;
+ mpd_ssize_t x;
+
+ x = PyLong_AsSsize_t(value);
+ if (x == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+ BOUNDS_CHECK(x, INT_MIN, INT_MAX);
+
+ ctx = CTX(self);
+ if (!mpd_qsetcr(ctx, (int)x)) {
+ return value_error_int("valid values for _allcr are 0 or 1");
+ }
+
+ return 0;
+}
+#endif
+
+static PyObject *
+context_getattr(PyObject *self, PyObject *name)
+{
+ PyObject *retval;
+
+ if (PyUnicode_Check(name)) {
+ if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) {
+ retval = ((PyDecContextObject *)self)->traps;
+ Py_INCREF(retval);
+ return retval;
+ }
+ if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) {
+ retval = ((PyDecContextObject *)self)->flags;
+ Py_INCREF(retval);
+ return retval;
+ }
+ }
+
+ return PyObject_GenericGetAttr(self, name);
+}
+
+static int
+context_setattr(PyObject *self, PyObject *name, PyObject *value)
+{
+ if (value == NULL) {
+ PyErr_SetString(PyExc_AttributeError,
+ "context attributes cannot be deleted");
+ return -1;
+ }
+
+ if (PyUnicode_Check(name)) {
+ if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) {
+ return context_settraps_dict(self, value);
+ }
+ if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) {
+ return context_setstatus_dict(self, value);
+ }
+ }
+
+ return PyObject_GenericSetAttr(self, name, value);
+}
+
+static PyObject *
+context_clear_traps(PyObject *self, PyObject *dummy UNUSED)
+{
+ CTX(self)->traps = 0;
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+context_clear_flags(PyObject *self, PyObject *dummy UNUSED)
+{
+ CTX(self)->status = 0;
+ Py_RETURN_NONE;
+}
+
+#define DEC_DFLT_EMAX 999999
+#define DEC_DFLT_EMIN -999999
+
+static mpd_context_t dflt_ctx = {
+ 28, DEC_DFLT_EMAX, DEC_DFLT_EMIN,
+ MPD_IEEE_Invalid_operation|MPD_Division_by_zero|MPD_Overflow,
+ 0, 0, MPD_ROUND_HALF_EVEN, 0, 1
+};
+
+static PyObject *
+context_new(PyTypeObject *type, PyObject *args UNUSED, PyObject *kwds UNUSED)
+{
+ PyDecContextObject *self = NULL;
+ mpd_context_t *ctx;
+
+ if (type == &PyDecContext_Type) {
+ self = PyObject_New(PyDecContextObject, &PyDecContext_Type);
+ }
+ else {
+ self = (PyDecContextObject *)type->tp_alloc(type, 0);
+ }
+
+ if (self == NULL) {
+ return NULL;
+ }
+
+ self->traps = PyObject_CallObject((PyObject *)PyDecSignalDict_Type, NULL);
+ if (self->traps == NULL) {
+ self->flags = NULL;
+ Py_DECREF(self);
+ return NULL;
+ }
+ self->flags = PyObject_CallObject((PyObject *)PyDecSignalDict_Type, NULL);
+ if (self->flags == NULL) {
+ Py_DECREF(self);
+ return NULL;
+ }
+
+ ctx = CTX(self);
+
+ if (default_context_template) {
+ *ctx = *CTX(default_context_template);
+ }
+ else {
+ *ctx = dflt_ctx;
+ }
+
+ SdFlagAddr(self->traps) = &ctx->traps;
+ SdFlagAddr(self->flags) = &ctx->status;
+
+ CtxCaps(self) = 1;
+#ifndef WITHOUT_THREADS
+ self->tstate = NULL;
+#endif
+
+ return (PyObject *)self;
+}
+
+static void
+context_dealloc(PyDecContextObject *self)
+{
+#ifndef WITHOUT_THREADS
+ if (self == cached_context) {
+ cached_context = NULL;
+ }
+#endif
+ Py_XDECREF(self->traps);
+ Py_XDECREF(self->flags);
+ Py_TYPE(self)->tp_free(self);
+}
+
+static int
+context_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {
+ "prec", "rounding", "Emin", "Emax", "capitals", "clamp",
+ "flags", "traps", NULL
+ };
+ PyObject *prec = Py_None;
+ PyObject *rounding = Py_None;
+ PyObject *emin = Py_None;
+ PyObject *emax = Py_None;
+ PyObject *capitals = Py_None;
+ PyObject *clamp = Py_None;
+ PyObject *status = Py_None;
+ PyObject *traps = Py_None;
+ int ret;
+
+ assert(PyTuple_Check(args));
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds,
+ "|OOOOOOOO", kwlist,
+ &prec, &rounding, &emin, &emax, &capitals, &clamp, &status, &traps
+ )) {
+ return -1;
+ }
+
+ if (prec != Py_None && context_setprec(self, prec, NULL) < 0) {
+ return -1;
+ }
+ if (rounding != Py_None && context_setround(self, rounding, NULL) < 0) {
+ return -1;
+ }
+ if (emin != Py_None && context_setemin(self, emin, NULL) < 0) {
+ return -1;
+ }
+ if (emax != Py_None && context_setemax(self, emax, NULL) < 0) {
+ return -1;
+ }
+ if (capitals != Py_None && context_setcapitals(self, capitals, NULL) < 0) {
+ return -1;
+ }
+ if (clamp != Py_None && context_setclamp(self, clamp, NULL) < 0) {
+ return -1;
+ }
+
+ if (traps != Py_None) {
+ if (PyList_Check(traps)) {
+ ret = context_settraps_list(self, traps);
+ }
+#ifdef EXTRA_FUNCTIONALITY
+ else if (PyLong_Check(traps)) {
+ ret = context_settraps(self, traps, NULL);
+ }
+#endif
+ else {
+ ret = context_settraps_dict(self, traps);
+ }
+ if (ret < 0) {
+ return ret;
+ }
+ }
+ if (status != Py_None) {
+ if (PyList_Check(status)) {
+ ret = context_setstatus_list(self, status);
+ }
+#ifdef EXTRA_FUNCTIONALITY
+ else if (PyLong_Check(status)) {
+ ret = context_setstatus(self, status, NULL);
+ }
+#endif
+ else {
+ ret = context_setstatus_dict(self, status);
+ }
+ if (ret < 0) {
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static PyObject *
+context_repr(PyDecContextObject *self)
+{
+ mpd_context_t *ctx;
+ char flags[MPD_MAX_SIGNAL_LIST];
+ char traps[MPD_MAX_SIGNAL_LIST];
+ int n, mem;
+
+ assert(PyDecContext_Check(self));
+ ctx = CTX(self);
+
+ mem = MPD_MAX_SIGNAL_LIST;
+ n = mpd_lsnprint_signals(flags, mem, ctx->status, dec_signal_string);
+ if (n < 0 || n >= mem) {
+ INTERNAL_ERROR_PTR("context_repr");
+ }
+
+ n = mpd_lsnprint_signals(traps, mem, ctx->traps, dec_signal_string);
+ if (n < 0 || n >= mem) {
+ INTERNAL_ERROR_PTR("context_repr");
+ }
+
+ return PyUnicode_FromFormat(
+ "Context(prec=%zd, rounding=%s, Emin=%zd, Emax=%zd, "
+ "capitals=%d, clamp=%d, flags=%s, traps=%s)",
+ ctx->prec, mpd_round_string[ctx->round], ctx->emin, ctx->emax,
+ self->capitals, ctx->clamp, flags, traps);
+}
+
+static void
+init_basic_context(PyObject *v)
+{
+ mpd_context_t ctx = dflt_ctx;
+
+ ctx.prec = 9;
+ ctx.traps |= (MPD_Underflow|MPD_Clamped);
+ ctx.round = MPD_ROUND_HALF_UP;
+
+ *CTX(v) = ctx;
+ CtxCaps(v) = 1;
+}
+
+static void
+init_extended_context(PyObject *v)
+{
+ mpd_context_t ctx = dflt_ctx;
+
+ ctx.prec = 9;
+ ctx.traps = 0;
+
+ *CTX(v) = ctx;
+ CtxCaps(v) = 1;
+}
+
+#ifdef EXTRA_FUNCTIONALITY
+/* Factory function for creating IEEE interchange format contexts */
+static PyObject *
+ieee_context(PyObject *dummy UNUSED, PyObject *v)
+{
+ PyObject *context;
+ mpd_ssize_t bits;
+ mpd_context_t ctx;
+
+ bits = PyLong_AsSsize_t(v);
+ if (bits == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+ if (bits <= 0 || bits > INT_MAX) {
+ goto error;
+ }
+ if (mpd_ieee_context(&ctx, (int)bits) < 0) {
+ goto error;
+ }
+
+ context = PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL);
+ if (context == NULL) {
+ return NULL;
+ }
+ *CTX(context) = ctx;
+
+ return context;
+
+error:
+ PyErr_Format(PyExc_ValueError,
+ "argument must be a multiple of 32, with a maximum of %d",
+ MPD_IEEE_CONTEXT_MAX_BITS);
+
+ return NULL;
+}
+#endif
+
+static PyObject *
+context_copy(PyObject *self, PyObject *args UNUSED)
+{
+ PyObject *copy;
+
+ copy = PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL);
+ if (copy == NULL) {
+ return NULL;
+ }
+
+ *CTX(copy) = *CTX(self);
+ CTX(copy)->newtrap = 0;
+ CtxCaps(copy) = CtxCaps(self);
+
+ return copy;
+}
+
+static PyObject *
+context_reduce(PyObject *self, PyObject *args UNUSED)
+{
+ PyObject *flags;
+ PyObject *traps;
+ PyObject *ret;
+ mpd_context_t *ctx;
+
+ ctx = CTX(self);
+
+ flags = signals_as_list(ctx->status);
+ if (flags == NULL) {
+ return NULL;
+ }
+ traps = signals_as_list(ctx->traps);
+ if (traps == NULL) {
+ Py_DECREF(flags);
+ return NULL;
+ }
+
+ ret = Py_BuildValue(
+ "O(nsnniiOO)",
+ Py_TYPE(self),
+ ctx->prec, mpd_round_string[ctx->round], ctx->emin, ctx->emax,
+ CtxCaps(self), ctx->clamp, flags, traps
+ );
+
+ Py_DECREF(flags);
+ Py_DECREF(traps);
+ return ret;
+}
+
+
+static PyGetSetDef context_getsets [] =
+{
+ { "prec", (getter)context_getprec, (setter)context_setprec, NULL, NULL},
+ { "Emax", (getter)context_getemax, (setter)context_setemax, NULL, NULL},
+ { "Emin", (getter)context_getemin, (setter)context_setemin, NULL, NULL},
+ { "rounding", (getter)context_getround, (setter)context_setround, NULL, NULL},
+ { "capitals", (getter)context_getcapitals, (setter)context_setcapitals, NULL, NULL},
+ { "clamp", (getter)context_getclamp, (setter)context_setclamp, NULL, NULL},
+#ifdef EXTRA_FUNCTIONALITY
+ { "_allcr", (getter)context_getallcr, (setter)context_setallcr, NULL, NULL},
+ { "_traps", (getter)context_gettraps, (setter)context_settraps, NULL, NULL},
+ { "_flags", (getter)context_getstatus, (setter)context_setstatus, NULL, NULL},
+#endif
+ {NULL}
+};
+
+
+#define CONTEXT_CHECK(obj) \
+ if (!PyDecContext_Check(obj)) { \
+ PyErr_SetString(PyExc_TypeError, \
+ "argument must be a context"); \
+ return NULL; \
+ }
+
+#define CONTEXT_CHECK_VA(obj) \
+ if (obj == Py_None) { \
+ CURRENT_CONTEXT(obj); \
+ } \
+ else if (!PyDecContext_Check(obj)) { \
+ PyErr_SetString(PyExc_TypeError, \
+ "optional argument must be a context"); \
+ return NULL; \
+ }
+
+
+/******************************************************************************/
+/* Global, thread local and temporary contexts */
+/******************************************************************************/
+
+#ifdef WITHOUT_THREADS
+/* Return borrowed reference to the current context. When compiled
+ * without threads, this is always the module context. */
+static int module_context_set = 0;
+static PyObject *
+current_context(void)
+{
+ /* In decimal.py, the module context is automatically initialized
+ * from the DefaultContext when it is first accessed. This
+ * complicates the code and has a speed penalty of 1-2%. */
+ if (module_context_set) {
+ return module_context;
+ }
+
+ *CTX(module_context) = *CTX(default_context_template);
+ CTX(module_context)->status = 0;
+ CTX(module_context)->newtrap = 0;
+ CtxCaps(module_context) = CtxCaps(default_context_template);
+
+ module_context_set = 1;
+ return module_context;
+}
+
+/* ctxobj := borrowed reference to the current context */
+#define CURRENT_CONTEXT(ctxobj) \
+ ctxobj = current_context()
+
+/* ctx := pointer to the mpd_context_t struct of the current context */
+#define CURRENT_CONTEXT_ADDR(ctx) \
+ ctx = CTX(current_context())
+
+/* Return a new reference to the current context */
+static PyObject *
+PyDec_GetCurrentContext(PyObject *self UNUSED, PyObject *args UNUSED)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+
+ Py_INCREF(context);
+ return context;
+}
+
+/* Set the module context to a new context, decrement old reference */
+static PyObject *
+PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
+{
+ CONTEXT_CHECK(v);
+
+ /* If the new context is one of the templates, make a copy.
+ * This is the current behavior of decimal.py. */
+ if (v == default_context_template ||
+ v == basic_context_template ||
+ v == extended_context_template) {
+ v = context_copy(v, NULL);
+ if (v == NULL) {
+ return NULL;
+ }
+ CTX(v)->status = 0;
+ }
+ else {
+ Py_INCREF(v);
+ }
+
+ Py_XDECREF(module_context);
+ module_context = v;
+ module_context_set = 1;
+ Py_RETURN_NONE;
+}
+#else
+/*
+ * Thread local storage currently has a speed penalty of about 4%.
+ * All functions that map Python's arithmetic operators to mpdecimal
+ * functions have to look up the current context for each and every
+ * operation.
+ */
+
+/* Get the context from the thread state dictionary. */
+static PyObject *
+current_context_from_dict(void)
+{
+ PyObject *dict;
+ PyObject *tl_context;
+ PyThreadState *tstate;
+
+ dict = PyThreadState_GetDict();
+ if (dict == NULL) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "cannot get thread state");
+ return NULL;
+ }
+
+ tl_context = PyDict_GetItemWithError(dict, tls_context_key);
+ if (tl_context != NULL) {
+ /* We already have a thread local context. */
+ CONTEXT_CHECK(tl_context);
+ }
+ else {
+ if (PyErr_Occurred()) {
+ return NULL;
+ }
+
+ /* Set up a new thread local context. */
+ tl_context = context_copy(default_context_template, NULL);
+ if (tl_context == NULL) {
+ return NULL;
+ }
+ CTX(tl_context)->status = 0;
+
+ if (PyDict_SetItem(dict, tls_context_key, tl_context) < 0) {
+ Py_DECREF(tl_context);
+ return NULL;
+ }
+ Py_DECREF(tl_context);
+ }
+
+ /* Cache the context of the current thread, assuming that it
+ * will be accessed several times before a thread switch. */
+ tstate = PyThreadState_GET();
+ if (tstate) {
+ cached_context = (PyDecContextObject *)tl_context;
+ cached_context->tstate = tstate;
+ }
+
+ /* Borrowed reference with refcount==1 */
+ return tl_context;
+}
+
+/* Return borrowed reference to thread local context. */
+static PyObject *
+current_context(void)
+{
+ PyThreadState *tstate;
+
+ tstate = PyThreadState_GET();
+ if (cached_context && cached_context->tstate == tstate) {
+ return (PyObject *)cached_context;
+ }
+
+ return current_context_from_dict();
+}
+
+/* ctxobj := borrowed reference to the current context */
+#define CURRENT_CONTEXT(ctxobj) \
+ ctxobj = current_context(); \
+ if (ctxobj == NULL) { \
+ return NULL; \
+ }
+
+/* ctx := pointer to the mpd_context_t struct of the current context */
+#define CURRENT_CONTEXT_ADDR(ctx) { \
+ PyObject *_c_t_x_o_b_j = current_context(); \
+ if (_c_t_x_o_b_j == NULL) { \
+ return NULL; \
+ } \
+ ctx = CTX(_c_t_x_o_b_j); \
+}
+
+/* Return a new reference to the current context */
+static PyObject *
+PyDec_GetCurrentContext(PyObject *self UNUSED, PyObject *args UNUSED)
+{
+ PyObject *context;
+
+ context = current_context();
+ if (context == NULL) {
+ return NULL;
+ }
+
+ Py_INCREF(context);
+ return context;
+}
+
+/* Set the thread local context to a new context, decrement old reference */
+static PyObject *
+PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
+{
+ PyObject *dict;
+
+ CONTEXT_CHECK(v);
+
+ dict = PyThreadState_GetDict();
+ if (dict == NULL) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "cannot get thread state");
+ return NULL;
+ }
+
+ /* If the new context is one of the templates, make a copy.
+ * This is the current behavior of decimal.py. */
+ if (v == default_context_template ||
+ v == basic_context_template ||
+ v == extended_context_template) {
+ v = context_copy(v, NULL);
+ if (v == NULL) {
+ return NULL;
+ }
+ CTX(v)->status = 0;
+ }
+ else {
+ Py_INCREF(v);
+ }
+
+ cached_context = NULL;
+ if (PyDict_SetItem(dict, tls_context_key, v) < 0) {
+ Py_DECREF(v);
+ return NULL;
+ }
+
+ Py_DECREF(v);
+ Py_RETURN_NONE;
+}
+#endif
+
+/* Context manager object for the 'with' statement. The manager
+ * owns one reference to the global (outer) context and one
+ * to the local (inner) context. */
+static PyObject *
+ctxmanager_new(PyTypeObject *type UNUSED, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"ctx", NULL};
+ PyDecContextManagerObject *self;
+ PyObject *local = Py_None;
+ PyObject *global;
+
+ CURRENT_CONTEXT(global);
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &local)) {
+ return NULL;
+ }
+ if (local == Py_None) {
+ local = global;
+ }
+ else if (!PyDecContext_Check(local)) {
+ PyErr_SetString(PyExc_TypeError,
+ "optional argument must be a context");
+ return NULL;
+ }
+
+ self = PyObject_New(PyDecContextManagerObject,
+ &PyDecContextManager_Type);
+ if (self == NULL) {
+ return NULL;
+ }
+
+ self->local = context_copy(local, NULL);
+ if (self->local == NULL) {
+ self->global = NULL;
+ Py_DECREF(self);
+ return NULL;
+ }
+ self->global = global;
+ Py_INCREF(self->global);
+
+ return (PyObject *)self;
+}
+
+static void
+ctxmanager_dealloc(PyDecContextManagerObject *self)
+{
+ Py_XDECREF(self->local);
+ Py_XDECREF(self->global);
+ PyObject_Del(self);
+}
+
+static PyObject *
+ctxmanager_set_local(PyDecContextManagerObject *self, PyObject *args UNUSED)
+{
+ PyObject *ret;
+
+ ret = PyDec_SetCurrentContext(NULL, self->local);
+ if (ret == NULL) {
+ return NULL;
+ }
+ Py_DECREF(ret);
+
+ Py_INCREF(self->local);
+ return self->local;
+}
+
+static PyObject *
+ctxmanager_restore_global(PyDecContextManagerObject *self,
+ PyObject *args UNUSED)
+{
+ PyObject *ret;
+
+ ret = PyDec_SetCurrentContext(NULL, self->global);
+ if (ret == NULL) {
+ return NULL;
+ }
+ Py_DECREF(ret);
+
+ Py_RETURN_NONE;
+}
+
+
+static PyMethodDef ctxmanager_methods[] = {
+ {"__enter__", (PyCFunction)ctxmanager_set_local, METH_NOARGS, NULL},
+ {"__exit__", (PyCFunction)ctxmanager_restore_global, METH_VARARGS, NULL},
+ {NULL, NULL}
+};
+
+static PyTypeObject PyDecContextManager_Type =
+{
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "decimal.ContextManager", /* tp_name */
+ sizeof(PyDecContextManagerObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor) ctxmanager_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) 0, /* tp_getattr */
+ (setattrfunc) 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc) 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ (getattrofunc) PyObject_GenericGetAttr, /* tp_getattro */
+ (setattrofunc) 0, /* tp_setattro */
+ (PyBufferProcs *) 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ ctxmanager_methods, /* tp_methods */
+};
+
+
+/******************************************************************************/
+/* New Decimal Object */
+/******************************************************************************/
+
+static PyObject *
+PyDecType_New(PyTypeObject *type)
+{
+ PyDecObject *dec;
+
+ if (type == &PyDec_Type) {
+ dec = PyObject_New(PyDecObject, &PyDec_Type);
+ }
+ else {
+ dec = (PyDecObject *)type->tp_alloc(type, 0);
+ }
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ dec->hash = -1;
+
+ MPD(dec)->flags = MPD_STATIC|MPD_STATIC_DATA;
+ MPD(dec)->exp = 0;
+ MPD(dec)->digits = 0;
+ MPD(dec)->len = 0;
+ MPD(dec)->alloc = _Py_DEC_MINALLOC;
+ MPD(dec)->data = dec->data;
+
+ return (PyObject *)dec;
+}
+#define dec_alloc() PyDecType_New(&PyDec_Type)
+
+static void
+dec_dealloc(PyObject *dec)
+{
+ mpd_del(MPD(dec));
+ Py_TYPE(dec)->tp_free(dec);
+}
+
+
+/******************************************************************************/
+/* Conversions to Decimal */
+/******************************************************************************/
+
+Py_LOCAL_INLINE(int)
+is_space(enum PyUnicode_Kind kind, void *data, Py_ssize_t pos)
+{
+ Py_UCS4 ch = PyUnicode_READ(kind, data, pos);
+ return Py_UNICODE_ISSPACE(ch);
+}
+
+/* Return the ASCII representation of a numeric Unicode string. The numeric
+ string may contain ascii characters in the range [1, 127], any Unicode
+ space and any unicode digit. If strip_ws is true, leading and trailing
+ whitespace is stripped.
+
+ Return NULL if malloc fails and an empty string if invalid characters
+ are found. */
+static char *
+numeric_as_ascii(const PyObject *u, int strip_ws)
+{
+ enum PyUnicode_Kind kind;
+ void *data;
+ Py_UCS4 ch;
+ char *res, *cp;
+ Py_ssize_t j, len;
+ int d;
+
+ if (PyUnicode_READY(u) == -1) {
+ return NULL;
+ }
+
+ kind = PyUnicode_KIND(u);
+ data = PyUnicode_DATA(u);
+ len = PyUnicode_GET_LENGTH(u);
+
+ cp = res = PyMem_Malloc(len+1);
+ if (res == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ j = 0;
+ if (strip_ws) {
+ while (len > 0 && is_space(kind, data, len-1)) {
+ len--;
+ }
+ while (j < len && is_space(kind, data, j)) {
+ j++;
+ }
+ }
+
+ for (; j < len; j++) {
+ ch = PyUnicode_READ(kind, data, j);
+ if (0 < ch && ch <= 127) {
+ *cp++ = ch;
+ continue;
+ }
+ if (Py_UNICODE_ISSPACE(ch)) {
+ *cp++ = ' ';
+ continue;
+ }
+ d = Py_UNICODE_TODECIMAL(ch);
+ if (d < 0) {
+ /* empty string triggers ConversionSyntax */
+ *res = '\0';
+ return res;
+ }
+ *cp++ = '0' + d;
+ }
+ *cp = '\0';
+ return res;
+}
+
+/* Return a new PyDecObject or a subtype from a C string. Use the context
+ during conversion. */
+static PyObject *
+PyDecType_FromCString(PyTypeObject *type, const char *s,
+ PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_qset_string(MPD(dec), s, CTX(context), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+ return dec;
+}
+
+/* Return a new PyDecObject or a subtype from a C string. Attempt exact
+ conversion. If the operand cannot be converted exactly, set
+ InvalidOperation. */
+static PyObject *
+PyDecType_FromCStringExact(PyTypeObject *type, const char *s,
+ PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_maxcontext(&maxctx);
+
+ mpd_qset_string(MPD(dec), s, &maxctx, &status);
+ if (status & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+ /* we want exact results */
+ mpd_seterror(MPD(dec), MPD_Invalid_operation, &status);
+ }
+ status &= MPD_Errors;
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ return dec;
+}
+
+/* Return a new PyDecObject or a subtype from a PyUnicodeObject. */
+static PyObject *
+PyDecType_FromUnicode(PyTypeObject *type, const PyObject *u,
+ PyObject *context)
+{
+ PyObject *dec;
+ char *s;
+
+ s = numeric_as_ascii(u, 0);
+ if (s == NULL) {
+ return NULL;
+ }
+
+ dec = PyDecType_FromCString(type, s, context);
+ PyMem_Free(s);
+ return dec;
+}
+
+/* Return a new PyDecObject or a subtype from a PyUnicodeObject. Attempt exact
+ * conversion. If the conversion is not exact, fail with InvalidOperation.
+ * Allow leading and trailing whitespace in the input operand. */
+static PyObject *
+PyDecType_FromUnicodeExactWS(PyTypeObject *type, const PyObject *u,
+ PyObject *context)
+{
+ PyObject *dec;
+ char *s;
+
+ s = numeric_as_ascii(u, 1);
+ if (s == NULL) {
+ return NULL;
+ }
+
+ dec = PyDecType_FromCStringExact(type, s, context);
+ PyMem_Free(s);
+ return dec;
+}
+
+/* Set PyDecObject from triple without any error checking. */
+Py_LOCAL_INLINE(void)
+_dec_settriple(PyObject *dec, uint8_t sign, uint32_t v, mpd_ssize_t exp)
+{
+
+#ifdef CONFIG_64
+ MPD(dec)->data[0] = v;
+ MPD(dec)->len = 1;
+#else
+ uint32_t q, r;
+ q = v / MPD_RADIX;
+ r = v - q * MPD_RADIX;
+ MPD(dec)->data[1] = q;
+ MPD(dec)->data[0] = r;
+ MPD(dec)->len = q ? 2 : 1;
+#endif
+ mpd_set_flags(MPD(dec), sign);
+ MPD(dec)->exp = exp;
+ mpd_setdigits(MPD(dec));
+}
+
+/* Return a new PyDecObject from an mpd_ssize_t. */
+static PyObject *
+PyDecType_FromSsize(PyTypeObject *type, mpd_ssize_t v, PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_qset_ssize(MPD(dec), v, CTX(context), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+ return dec;
+}
+
+/* Return a new PyDecObject from an mpd_ssize_t. Conversion is exact. */
+static PyObject *
+PyDecType_FromSsizeExact(PyTypeObject *type, mpd_ssize_t v, PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_maxcontext(&maxctx);
+
+ mpd_qset_ssize(MPD(dec), v, &maxctx, &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+ return dec;
+}
+
+/* Convert from a PyLongObject. The context is not modified; flags set
+ during conversion are accumulated in the status parameter. */
+static PyObject *
+dec_from_long(PyTypeObject *type, const PyObject *v,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ PyObject *dec;
+ PyLongObject *l = (PyLongObject *)v;
+ Py_ssize_t ob_size;
+ size_t len;
+ uint8_t sign;
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ ob_size = Py_SIZE(l);
+ if (ob_size == 0) {
+ _dec_settriple(dec, MPD_POS, 0, 0);
+ return dec;
+ }
+
+ if (ob_size < 0) {
+ len = -ob_size;
+ sign = MPD_NEG;
+ }
+ else {
+ len = ob_size;
+ sign = MPD_POS;
+ }
+
+ if (len == 1) {
+ _dec_settriple(dec, sign, *l->ob_digit, 0);
+ mpd_qfinalize(MPD(dec), ctx, status);
+ return dec;
+ }
+
+#if PYLONG_BITS_IN_DIGIT == 30
+ mpd_qimport_u32(MPD(dec), l->ob_digit, len, sign, PyLong_BASE,
+ ctx, status);
+#elif PYLONG_BITS_IN_DIGIT == 15
+ mpd_qimport_u16(MPD(dec), l->ob_digit, len, sign, PyLong_BASE,
+ ctx, status);
+#else
+ #error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
+#endif
+
+ return dec;
+}
+
+/* Return a new PyDecObject from a PyLongObject. Use the context for
+ conversion. */
+static PyObject *
+PyDecType_FromLong(PyTypeObject *type, const PyObject *pylong,
+ PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+
+ dec = dec_from_long(type, pylong, CTX(context), &status);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ return dec;
+}
+
+/* Return a new PyDecObject from a PyLongObject. Use a maximum context
+ for conversion. If the conversion is not exact, set InvalidOperation. */
+static PyObject *
+PyDecType_FromLongExact(PyTypeObject *type, const PyObject *pylong,
+ PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+
+ mpd_maxcontext(&maxctx);
+ dec = dec_from_long(type, pylong, &maxctx, &status);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ if (status & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+ /* we want exact results */
+ mpd_seterror(MPD(dec), MPD_Invalid_operation, &status);
+ }
+ status &= MPD_Errors;
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ return dec;
+}
+
+/* Return a PyDecObject or a subtype from a PyFloatObject.
+ Conversion is exact. */
+static PyObject *
+PyDecType_FromFloatExact(PyTypeObject *type, PyObject *v,
+ PyObject *context)
+{
+ PyObject *dec, *tmp;
+ PyObject *n, *d, *n_d;
+ mpd_ssize_t k;
+ double x;
+ int sign;
+ mpd_t *d1, *d2;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+
+
+ assert(PyType_IsSubtype(type, &PyDec_Type));
+
+ if (PyLong_Check(v)) {
+ return PyDecType_FromLongExact(type, v, context);
+ }
+ if (!PyFloat_Check(v)) {
+ PyErr_SetString(PyExc_TypeError,
+ "argument must be int of float");
+ return NULL;
+ }
+
+ x = PyFloat_AsDouble(v);
+ if (x == -1.0 && PyErr_Occurred()) {
+ return NULL;
+ }
+ sign = (copysign(1.0, x) == 1.0) ? 0 : 1;
+
+ if (Py_IS_NAN(x) || Py_IS_INFINITY(x)) {
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+ if (Py_IS_NAN(x)) {
+ /* decimal.py calls repr(float(+-nan)),
+ * which always gives a positive result. */
+ mpd_setspecial(MPD(dec), MPD_POS, MPD_NAN);
+ }
+ else {
+ mpd_setspecial(MPD(dec), sign, MPD_INF);
+ }
+ return dec;
+ }
+
+ /* absolute value of the float */
+ tmp = PyObject_CallMethod(v, "__abs__", NULL);
+ if (tmp == NULL) {
+ return NULL;
+ }
+
+ /* float as integer ratio: numerator/denominator */
+ n_d = PyObject_CallMethod(tmp, "as_integer_ratio", NULL);
+ Py_DECREF(tmp);
+ if (n_d == NULL) {
+ return NULL;
+ }
+ n = PyTuple_GET_ITEM(n_d, 0);
+ d = PyTuple_GET_ITEM(n_d, 1);
+
+ tmp = PyObject_CallMethod(d, "bit_length", NULL);
+ if (tmp == NULL) {
+ Py_DECREF(n_d);
+ return NULL;
+ }
+ k = PyLong_AsSsize_t(tmp);
+ Py_DECREF(tmp);
+ if (k == -1 && PyErr_Occurred()) {
+ Py_DECREF(n_d);
+ return NULL;
+ }
+ k--;
+
+ dec = PyDecType_FromLongExact(type, n, context);
+ Py_DECREF(n_d);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ d1 = mpd_qnew();
+ if (d1 == NULL) {
+ Py_DECREF(dec);
+ PyErr_NoMemory();
+ return NULL;
+ }
+ d2 = mpd_qnew();
+ if (d2 == NULL) {
+ mpd_del(d1);
+ Py_DECREF(dec);
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ mpd_maxcontext(&maxctx);
+ mpd_qset_uint(d1, 5, &maxctx, &status);
+ mpd_qset_ssize(d2, k, &maxctx, &status);
+ mpd_qpow(d1, d1, d2, &maxctx, &status);
+ if (dec_addstatus(context, status)) {
+ mpd_del(d1);
+ mpd_del(d2);
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ /* result = n * 5**k */
+ mpd_qmul(MPD(dec), MPD(dec), d1, &maxctx, &status);
+ mpd_del(d1);
+ mpd_del(d2);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+ /* result = +- n * 5**k * 10**-k */
+ mpd_set_sign(MPD(dec), sign);
+ MPD(dec)->exp = -k;
+
+ return dec;
+}
+
+static PyObject *
+PyDecType_FromFloat(PyTypeObject *type, PyObject *v,
+ PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+
+ dec = PyDecType_FromFloatExact(type, v, context);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_qfinalize(MPD(dec), CTX(context), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ return dec;
+}
+
+/* Return a new PyDecObject or a subtype from a Decimal. */
+static PyObject *
+PyDecType_FromDecimalExact(PyTypeObject *type, PyObject *v, PyObject *context)
+{
+ PyObject *dec;
+ uint32_t status = 0;
+
+ if (type == &PyDec_Type && PyDec_CheckExact(v)) {
+ Py_INCREF(v);
+ return v;
+ }
+
+ dec = PyDecType_New(type);
+ if (dec == NULL) {
+ return NULL;
+ }
+
+ mpd_qcopy(MPD(dec), MPD(v), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(dec);
+ return NULL;
+ }
+
+ return dec;
+}
+
+static PyObject *
+sequence_as_tuple(PyObject *v, PyObject *ex, const char *mesg)
+{
+ if (PyTuple_Check(v)) {
+ Py_INCREF(v);
+ return v;
+ }
+ if (PyList_Check(v)) {
+ return PyList_AsTuple(v);
+ }
+
+ PyErr_SetString(ex, mesg);
+ return NULL;
+}
+
+/* Return a new C string representation of a DecimalTuple. */
+static char *
+dectuple_as_str(PyObject *dectuple)
+{
+ PyObject *digits = NULL, *tmp;
+ char *decstring = NULL;
+ char sign_special[6];
+ char *cp;
+ long sign, l;
+ mpd_ssize_t exp = 0;
+ Py_ssize_t i, mem, tsize;
+ int is_infinite = 0;
+ int n;
+
+ assert(PyTuple_Check(dectuple));
+
+ if (PyTuple_Size(dectuple) != 3) {
+ PyErr_SetString(PyExc_ValueError,
+ "argument must be a sequence of length 3");
+ goto error;
+ }
+
+ /* sign */
+ tmp = PyTuple_GET_ITEM(dectuple, 0);
+ if (!PyLong_Check(tmp)) {
+ PyErr_SetString(PyExc_ValueError,
+ "sign must be an integer with the value 0 or 1");
+ goto error;
+ }
+ sign = PyLong_AsLong(tmp);
+ if (sign == -1 && PyErr_Occurred()) {
+ goto error;
+ }
+ if (sign != 0 && sign != 1) {
+ PyErr_SetString(PyExc_ValueError,
+ "sign must be an integer with the value 0 or 1");
+ goto error;
+ }
+ sign_special[0] = sign ? '-' : '+';
+ sign_special[1] = '\0';
+
+ /* exponent or encoding for a special number */
+ tmp = PyTuple_GET_ITEM(dectuple, 2);
+ if (PyUnicode_Check(tmp)) {
+ /* special */
+ if (PyUnicode_CompareWithASCIIString(tmp, "F") == 0) {
+ strcat(sign_special, "Inf");
+ is_infinite = 1;
+ }
+ else if (PyUnicode_CompareWithASCIIString(tmp, "n") == 0) {
+ strcat(sign_special, "NaN");
+ }
+ else if (PyUnicode_CompareWithASCIIString(tmp, "N") == 0) {
+ strcat(sign_special, "sNaN");
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError,
+ "string argument in the third position "
+ "must be 'F', 'n' or 'N'");
+ goto error;
+ }
+ }
+ else {
+ /* exponent */
+ if (!PyLong_Check(tmp)) {
+ PyErr_SetString(PyExc_ValueError,
+ "exponent must be an integer");
+ goto error;
+ }
+ exp = PyLong_AsSsize_t(tmp);
+ if (exp == -1 && PyErr_Occurred()) {
+ goto error;
+ }
+ }
+
+ /* coefficient */
+ digits = sequence_as_tuple(PyTuple_GET_ITEM(dectuple, 1), PyExc_ValueError,
+ "coefficient must be a tuple of digits");
+ if (digits == NULL) {
+ goto error;
+ }
+
+ tsize = PyTuple_Size(digits);
+ /* [sign][coeffdigits+1][E][-][expdigits+1]['\0'] */
+ mem = 1 + tsize + 3 + MPD_EXPDIGITS + 2;
+ cp = decstring = PyMem_Malloc(mem);
+ if (decstring == NULL) {
+ PyErr_NoMemory();
+ goto error;
+ }
+
+ n = snprintf(cp, mem, "%s", sign_special);
+ if (n < 0 || n >= mem) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "internal error in dec_sequence_as_str");
+ goto error;
+ }
+ cp += n;
+
+ if (tsize == 0 && sign_special[1] == '\0') {
+ /* empty tuple: zero coefficient, except for special numbers */
+ *cp++ = '0';
+ }
+ for (i = 0; i < tsize; i++) {
+ tmp = PyTuple_GET_ITEM(digits, i);
+ if (!PyLong_Check(tmp)) {
+ PyErr_SetString(PyExc_ValueError,
+ "coefficient must be a tuple of digits");
+ goto error;
+ }
+ l = PyLong_AsLong(tmp);
+ if (l == -1 && PyErr_Occurred()) {
+ goto error;
+ }
+ if (l < 0 || l > 9) {
+ PyErr_SetString(PyExc_ValueError,
+ "coefficient must be a tuple of digits");
+ goto error;
+ }
+ if (is_infinite) {
+ /* accept but ignore any well-formed coefficient for compatibility
+ with decimal.py */
+ continue;
+ }
+ *cp++ = (char)l + '0';
+ }
+ *cp = '\0';
+
+ if (sign_special[1] == '\0') {
+ /* not a special number */
+ *cp++ = 'E';
+ n = snprintf(cp, MPD_EXPDIGITS+2, "%" PRI_mpd_ssize_t, exp);
+ if (n < 0 || n >= MPD_EXPDIGITS+2) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "internal error in dec_sequence_as_str");
+ goto error;
+ }
+ }
+
+ Py_XDECREF(digits);
+ return decstring;
+
+
+error:
+ Py_XDECREF(digits);
+ if (decstring) PyMem_Free(decstring);
+ return NULL;
+}
+
+/* Currently accepts tuples and lists. */
+static PyObject *
+PyDecType_FromSequence(PyTypeObject *type, PyObject *v,
+ PyObject *context)
+{
+ PyObject *dectuple;
+ PyObject *dec;
+ char *s;
+
+ dectuple = sequence_as_tuple(v, PyExc_TypeError,
+ "argument must be a tuple or list");
+ if (dectuple == NULL) {
+ return NULL;
+ }
+
+ s = dectuple_as_str(dectuple);
+ Py_DECREF(dectuple);
+ if (s == NULL) {
+ return NULL;
+ }
+
+ dec = PyDecType_FromCString(type, s, context);
+
+ PyMem_Free(s);
+ return dec;
+}
+
+/* Currently accepts tuples and lists. */
+static PyObject *
+PyDecType_FromSequenceExact(PyTypeObject *type, PyObject *v,
+ PyObject *context)
+{
+ PyObject *dectuple;
+ PyObject *dec;
+ char *s;
+
+ dectuple = sequence_as_tuple(v, PyExc_TypeError,
+ "argument must be a tuple or list");
+ if (dectuple == NULL) {
+ return NULL;
+ }
+
+ s = dectuple_as_str(dectuple);
+ Py_DECREF(dectuple);
+ if (s == NULL) {
+ return NULL;
+ }
+
+ dec = PyDecType_FromCStringExact(type, s, context);
+
+ PyMem_Free(s);
+ return dec;
+}
+
+#define PyDec_FromCString(str, context) \
+ PyDecType_FromCString(&PyDec_Type, str, context)
+#define PyDec_FromCStringExact(str, context) \
+ PyDecType_FromCStringExact(&PyDec_Type, str, context)
+
+#define PyDec_FromUnicode(unicode, context) \
+ PyDecType_FromUnicode(&PyDec_Type, unicode, context)
+#define PyDec_FromUnicodeExact(unicode, context) \
+ PyDecType_FromUnicodeExact(&PyDec_Type, unicode, context)
+#define PyDec_FromUnicodeExactWS(unicode, context) \
+ PyDecType_FromUnicodeExactWS(&PyDec_Type, unicode, context)
+
+#define PyDec_FromSsize(v, context) \
+ PyDecType_FromSsize(&PyDec_Type, v, context)
+#define PyDec_FromSsizeExact(v, context) \
+ PyDecType_FromSsizeExact(&PyDec_Type, v, context)
+
+#define PyDec_FromLong(pylong, context) \
+ PyDecType_FromLong(&PyDec_Type, pylong, context)
+#define PyDec_FromLongExact(pylong, context) \
+ PyDecType_FromLongExact(&PyDec_Type, pylong, context)
+
+#define PyDec_FromFloat(pyfloat, context) \
+ PyDecType_FromFloat(&PyDec_Type, pyfloat, context)
+#define PyDec_FromFloatExact(pyfloat, context) \
+ PyDecType_FromFloatExact(&PyDec_Type, pyfloat, context)
+
+#define PyDec_FromSequence(sequence, context) \
+ PyDecType_FromSequence(&PyDec_Type, sequence, context)
+#define PyDec_FromSequenceExact(sequence, context) \
+ PyDecType_FromSequenceExact(&PyDec_Type, sequence, context)
+
+/* class method */
+static PyObject *
+dec_from_float(PyObject *dec, PyObject *pyfloat)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+ return PyDecType_FromFloatExact((PyTypeObject *)dec, pyfloat, context);
+}
+
+/* create_decimal_from_float */
+static PyObject *
+ctx_from_float(PyObject *context, PyObject *v)
+{
+ return PyDec_FromFloat(v, context);
+}
+
+/* Apply the context to the input operand. Return a new PyDecObject. */
+static PyObject *
+dec_apply(PyObject *v, PyObject *context)
+{
+ PyObject *result;
+ uint32_t status = 0;
+
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ mpd_qcopy(MPD(result), MPD(v), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ mpd_qfinalize(MPD(result), CTX(context), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+/* 'v' can have any type accepted by the Decimal constructor. Attempt
+ an exact conversion. If the result does not meet the restrictions
+ for an mpd_t, fail with InvalidOperation. */
+static PyObject *
+PyDecType_FromObjectExact(PyTypeObject *type, PyObject *v, PyObject *context)
+{
+ if (v == NULL) {
+ return PyDecType_FromSsizeExact(type, 0, context);
+ }
+ else if (PyDec_Check(v)) {
+ return PyDecType_FromDecimalExact(type, v, context);
+ }
+ else if (PyUnicode_Check(v)) {
+ return PyDecType_FromUnicodeExactWS(type, v, context);
+ }
+ else if (PyLong_Check(v)) {
+ return PyDecType_FromLongExact(type, v, context);
+ }
+ else if (PyTuple_Check(v) || PyList_Check(v)) {
+ return PyDecType_FromSequenceExact(type, v, context);
+ }
+ else if (PyFloat_Check(v)) {
+ if (dec_addstatus(context, MPD_Float_operation)) {
+ return NULL;
+ }
+ return PyDecType_FromFloatExact(type, v, context);
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "conversion from %s to Decimal is not supported",
+ v->ob_type->tp_name);
+ return NULL;
+ }
+}
+
+/* The context is used during conversion. This function is the
+ equivalent of context.create_decimal(). */
+static PyObject *
+PyDec_FromObject(PyObject *v, PyObject *context)
+{
+ if (v == NULL) {
+ return PyDec_FromSsize(0, context);
+ }
+ else if (PyDec_Check(v)) {
+ mpd_context_t *ctx = CTX(context);
+ if (mpd_isnan(MPD(v)) &&
+ MPD(v)->digits > ctx->prec - ctx->clamp) {
+ /* Special case: too many NaN payload digits */
+ PyObject *result;
+ if (dec_addstatus(context, MPD_Conversion_syntax)) {
+ return NULL;
+ }
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+ mpd_setspecial(MPD(result), MPD_POS, MPD_NAN);
+ return result;
+ }
+ return dec_apply(v, context);
+ }
+ else if (PyUnicode_Check(v)) {
+ return PyDec_FromUnicode(v, context);
+ }
+ else if (PyLong_Check(v)) {
+ return PyDec_FromLong(v, context);
+ }
+ else if (PyTuple_Check(v) || PyList_Check(v)) {
+ return PyDec_FromSequence(v, context);
+ }
+ else if (PyFloat_Check(v)) {
+ if (dec_addstatus(context, MPD_Float_operation)) {
+ return NULL;
+ }
+ return PyDec_FromFloat(v, context);
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "conversion from %s to Decimal is not supported",
+ v->ob_type->tp_name);
+ return NULL;
+ }
+}
+
+static PyObject *
+dec_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"value", "context", NULL};
+ PyObject *v = NULL;
+ PyObject *context = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist,
+ &v, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ return PyDecType_FromObjectExact(type, v, context);
+}
+
+static PyObject *
+ctx_create_decimal(PyObject *context, PyObject *args)
+{
+ PyObject *v = NULL;
+
+ if (!PyArg_ParseTuple(args, "|O", &v)) {
+ return NULL;
+ }
+
+ return PyDec_FromObject(v, context);
+}
+
+
+/******************************************************************************/
+/* Implicit conversions to Decimal */
+/******************************************************************************/
+
+/* Try to convert PyObject v to a new PyDecObject conv. If the conversion
+ fails, set conv to NULL (exception is set). If the conversion is not
+ implemented, set conv to Py_NotImplemented. */
+#define NOT_IMPL 0
+#define TYPE_ERR 1
+Py_LOCAL_INLINE(int)
+convert_op(int type_err, PyObject **conv, PyObject *v, PyObject *context)
+{
+
+ if (PyDec_Check(v)) {
+ *conv = v;
+ Py_INCREF(v);
+ return 1;
+ }
+ if (PyLong_Check(v)) {
+ *conv = PyDec_FromLongExact(v, context);
+ if (*conv == NULL) {
+ return 0;
+ }
+ return 1;
+ }
+
+ if (type_err) {
+ PyErr_Format(PyExc_TypeError,
+ "conversion from %s to Decimal is not supported",
+ v->ob_type->tp_name);
+ }
+ else {
+ Py_INCREF(Py_NotImplemented);
+ *conv = Py_NotImplemented;
+ }
+ return 0;
+}
+
+/* Return NotImplemented for unsupported types. */
+#define CONVERT_OP(a, v, context) \
+ if (!convert_op(NOT_IMPL, a, v, context)) { \
+ return *(a); \
+ }
+
+#define CONVERT_BINOP(a, b, v, w, context) \
+ if (!convert_op(NOT_IMPL, a, v, context)) { \
+ return *(a); \
+ } \
+ if (!convert_op(NOT_IMPL, b, w, context)) { \
+ Py_DECREF(*(a)); \
+ return *(b); \
+ }
+
+#define CONVERT_TERNOP(a, b, c, v, w, x, context) \
+ if (!convert_op(NOT_IMPL, a, v, context)) { \
+ return *(a); \
+ } \
+ if (!convert_op(NOT_IMPL, b, w, context)) { \
+ Py_DECREF(*(a)); \
+ return *(b); \
+ } \
+ if (!convert_op(NOT_IMPL, c, x, context)) { \
+ Py_DECREF(*(a)); \
+ Py_DECREF(*(b)); \
+ return *(c); \
+ }
+
+/* Raise TypeError for unsupported types. */
+#define CONVERT_OP_RAISE(a, v, context) \
+ if (!convert_op(TYPE_ERR, a, v, context)) { \
+ return NULL; \
+ }
+
+#define CONVERT_BINOP_RAISE(a, b, v, w, context) \
+ if (!convert_op(TYPE_ERR, a, v, context)) { \
+ return NULL; \
+ } \
+ if (!convert_op(TYPE_ERR, b, w, context)) { \
+ Py_DECREF(*(a)); \
+ return NULL; \
+ }
+
+#define CONVERT_TERNOP_RAISE(a, b, c, v, w, x, context) \
+ if (!convert_op(TYPE_ERR, a, v, context)) { \
+ return NULL; \
+ } \
+ if (!convert_op(TYPE_ERR, b, w, context)) { \
+ Py_DECREF(*(a)); \
+ return NULL; \
+ } \
+ if (!convert_op(TYPE_ERR, c, x, context)) { \
+ Py_DECREF(*(a)); \
+ Py_DECREF(*(b)); \
+ return NULL; \
+ }
+
+
+/******************************************************************************/
+/* Implicit conversions to Decimal for comparison */
+/******************************************************************************/
+
+/* Convert rationals for comparison */
+static PyObject *Rational = NULL;
+static PyObject *
+multiply_by_denominator(PyObject *v, PyObject *r, PyObject *context)
+{
+ PyObject *result;
+ PyObject *tmp = NULL;
+ PyObject *denom = NULL;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+ mpd_ssize_t exp;
+ mpd_t *vv;
+
+ /* v is not special, r is a rational */
+ tmp = PyObject_GetAttrString(r, "denominator");
+ if (tmp == NULL) {
+ return NULL;
+ }
+ denom = PyDec_FromLongExact(tmp, context);
+ Py_DECREF(tmp);
+ if (denom == NULL) {
+ return NULL;
+ }
+
+ vv = mpd_qncopy(MPD(v));
+ if (vv == NULL) {
+ Py_DECREF(denom);
+ PyErr_NoMemory();
+ return NULL;
+ }
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(denom);
+ mpd_del(vv);
+ return NULL;
+ }
+
+ mpd_maxcontext(&maxctx);
+ /* Prevent Overflow in the following multiplication. The result of
+ the multiplication is only used in mpd_qcmp, which can handle
+ values that are technically out of bounds, like (for 32-bit)
+ 99999999999999999999...99999999e+425000000. */
+ exp = vv->exp;
+ vv->exp = 0;
+ mpd_qmul(MPD(result), vv, MPD(denom), &maxctx, &status);
+ MPD(result)->exp = exp;
+
+ Py_DECREF(denom);
+ mpd_del(vv);
+ /* If any status has been accumulated during the multiplication,
+ the result is invalid. This is very unlikely, since even the
+ 32-bit version supports 425000000 digits. */
+ if (status) {
+ PyErr_SetString(PyExc_ValueError,
+ "exact conversion for comparison failed");
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+numerator_as_decimal(PyObject *r, PyObject *context)
+{
+ PyObject *tmp, *num;
+
+ tmp = PyObject_GetAttrString(r, "numerator");
+ if (tmp == NULL) {
+ return NULL;
+ }
+
+ num = PyDec_FromLongExact(tmp, context);
+ Py_DECREF(tmp);
+ return num;
+}
+
+/* Convert v and w for comparison. v is a Decimal. If w is a Rational, both
+ v and w have to be transformed. Return 1 for success, with new references
+ to the converted objects in vcmp and wcmp. Return 0 for failure. In that
+ case wcmp is either NULL or Py_NotImplemented (new reference) and vcmp
+ is undefined. */
+static int
+convert_op_cmp(PyObject **vcmp, PyObject **wcmp, PyObject *v, PyObject *w,
+ int op, PyObject *context)
+{
+ mpd_context_t *ctx = CTX(context);
+
+ *vcmp = v;
+
+ if (PyDec_Check(w)) {
+ Py_INCREF(w);
+ *wcmp = w;
+ }
+ else if (PyLong_Check(w)) {
+ *wcmp = PyDec_FromLongExact(w, context);
+ }
+ else if (PyFloat_Check(w)) {
+ if (op != Py_EQ && op != Py_NE &&
+ dec_addstatus(context, MPD_Float_operation)) {
+ *wcmp = NULL;
+ }
+ else {
+ ctx->status |= MPD_Float_operation;
+ *wcmp = PyDec_FromFloatExact(w, context);
+ }
+ }
+ else if (PyComplex_Check(w) && (op == Py_EQ || op == Py_NE)) {
+ Py_complex c = PyComplex_AsCComplex(w);
+ if (c.real == -1.0 && PyErr_Occurred()) {
+ *wcmp = NULL;
+ }
+ else if (c.imag == 0.0) {
+ PyObject *tmp = PyFloat_FromDouble(c.real);
+ if (tmp == NULL) {
+ *wcmp = NULL;
+ }
+ else {
+ ctx->status |= MPD_Float_operation;
+ *wcmp = PyDec_FromFloatExact(tmp, context);
+ Py_DECREF(tmp);
+ }
+ }
+ else {
+ Py_INCREF(Py_NotImplemented);
+ *wcmp = Py_NotImplemented;
+ }
+ }
+ else {
+ int is_rational = PyObject_IsInstance(w, Rational);
+ if (is_rational < 0) {
+ *wcmp = NULL;
+ }
+ else if (is_rational > 0) {
+ *wcmp = numerator_as_decimal(w, context);
+ if (*wcmp && !mpd_isspecial(MPD(v))) {
+ *vcmp = multiply_by_denominator(v, w, context);
+ if (*vcmp == NULL) {
+ Py_CLEAR(*wcmp);
+ }
+ }
+ }
+ else {
+ Py_INCREF(Py_NotImplemented);
+ *wcmp = Py_NotImplemented;
+ }
+ }
+
+ if (*wcmp == NULL || *wcmp == Py_NotImplemented) {
+ return 0;
+ }
+ if (*vcmp == v) {
+ Py_INCREF(v);
+ }
+ return 1;
+}
+
+#define CONVERT_BINOP_CMP(vcmp, wcmp, v, w, op, ctx) \
+ if (!convert_op_cmp(vcmp, wcmp, v, w, op, ctx)) { \
+ return *(wcmp); \
+ } \
+
+
+/******************************************************************************/
+/* Conversions from decimal */
+/******************************************************************************/
+
+static PyObject *
+unicode_fromascii(const char *s, Py_ssize_t size)
+{
+ PyObject *res;
+
+ res = PyUnicode_New(size, 127);
+ if (res == NULL) {
+ return NULL;
+ }
+
+ memcpy(PyUnicode_1BYTE_DATA(res), s, size);
+ return res;
+}
+
+/* PyDecObject as a string. The default module context is only used for
+ the value of 'capitals'. */
+static PyObject *
+dec_str(PyObject *dec)
+{
+ PyObject *res, *context;
+ mpd_ssize_t size;
+ char *cp;
+
+ CURRENT_CONTEXT(context);
+ size = mpd_to_sci_size(&cp, MPD(dec), CtxCaps(context));
+ if (size < 0) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ res = unicode_fromascii(cp, size);
+ mpd_free(cp);
+ return res;
+}
+
+/* Representation of a PyDecObject. */
+static PyObject *
+dec_repr(PyObject *dec)
+{
+ PyObject *res, *context;
+ char *cp;
+
+ CURRENT_CONTEXT(context);
+ cp = mpd_to_sci(MPD(dec), CtxCaps(context));
+ if (cp == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ res = PyUnicode_FromFormat("Decimal('%s')", cp);
+ mpd_free(cp);
+ return res;
+}
+
+/* Return a duplicate of src, copy embedded null characters. */
+static char *
+dec_strdup(const char *src, Py_ssize_t size)
+{
+ char *dest = PyMem_Malloc(size+1);
+ if (dest == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ memcpy(dest, src, size);
+ dest[size] = '\0';
+ return dest;
+}
+
+static void
+dec_replace_fillchar(char *dest)
+{
+ while (*dest != '\0') {
+ if (*dest == '\xff') *dest = '\0';
+ dest++;
+ }
+}
+
+/* Convert decimal_point or thousands_sep, which may be multibyte or in
+ the range [128, 255], to a UTF8 string. */
+static PyObject *
+dotsep_as_utf8(const char *s)
+{
+ PyObject *utf8;
+ PyObject *tmp;
+ wchar_t buf[2];
+ size_t n;
+
+ n = mbstowcs(buf, s, 2);
+ if (n != 1) { /* Issue #7442 */
+ PyErr_SetString(PyExc_ValueError,
+ "invalid decimal point or unsupported "
+ "combination of LC_CTYPE and LC_NUMERIC");
+ return NULL;
+ }
+ tmp = PyUnicode_FromWideChar(buf, n);
+ if (tmp == NULL) {
+ return NULL;
+ }
+ utf8 = PyUnicode_AsUTF8String(tmp);
+ Py_DECREF(tmp);
+ return utf8;
+}
+
+/* Formatted representation of a PyDecObject. */
+static PyObject *
+dec_format(PyObject *dec, PyObject *args)
+{
+ PyObject *result = NULL;
+ PyObject *override = NULL;
+ PyObject *dot = NULL;
+ PyObject *sep = NULL;
+ PyObject *grouping = NULL;
+ PyObject *fmtarg;
+ PyObject *context;
+ mpd_spec_t spec;
+ char *fmt;
+ char *decstring = NULL;
+ uint32_t status = 0;
+ int replace_fillchar = 0;
+ Py_ssize_t size;
+
+
+ CURRENT_CONTEXT(context);
+ if (!PyArg_ParseTuple(args, "O|O", &fmtarg, &override)) {
+ return NULL;
+ }
+
+ if (PyUnicode_Check(fmtarg)) {
+ fmt = PyUnicode_AsUTF8AndSize(fmtarg, &size);
+ if (fmt == NULL) {
+ return NULL;
+ }
+ if (size > 0 && fmt[0] == '\0') {
+ /* NUL fill character: must be replaced with a valid UTF-8 char
+ before calling mpd_parse_fmt_str(). */
+ replace_fillchar = 1;
+ fmt = dec_strdup(fmt, size);
+ if (fmt == NULL) {
+ return NULL;
+ }
+ fmt[0] = '_';
+ }
+ }
+ else {
+ PyErr_SetString(PyExc_TypeError,
+ "format arg must be str");
+ return NULL;
+ }
+
+ if (!mpd_parse_fmt_str(&spec, fmt, CtxCaps(context))) {
+ PyErr_SetString(PyExc_ValueError,
+ "invalid format string");
+ goto finish;
+ }
+ if (replace_fillchar) {
+ /* In order to avoid clobbering parts of UTF-8 thousands separators or
+ decimal points when the substitution is reversed later, the actual
+ placeholder must be an invalid UTF-8 byte. */
+ spec.fill[0] = '\xff';
+ spec.fill[1] = '\0';
+ }
+
+ if (override) {
+ /* Values for decimal_point, thousands_sep and grouping can
+ be explicitly specified in the override dict. These values
+ take precedence over the values obtained from localeconv()
+ in mpd_parse_fmt_str(). The feature is not documented and
+ is only used in test_decimal. */
+ if (!PyDict_Check(override)) {
+ PyErr_SetString(PyExc_TypeError,
+ "optional argument must be a dict");
+ goto finish;
+ }
+ if ((dot = PyDict_GetItemString(override, "decimal_point"))) {
+ if ((dot = PyUnicode_AsUTF8String(dot)) == NULL) {
+ goto finish;
+ }
+ spec.dot = PyBytes_AS_STRING(dot);
+ }
+ if ((sep = PyDict_GetItemString(override, "thousands_sep"))) {
+ if ((sep = PyUnicode_AsUTF8String(sep)) == NULL) {
+ goto finish;
+ }
+ spec.sep = PyBytes_AS_STRING(sep);
+ }
+ if ((grouping = PyDict_GetItemString(override, "grouping"))) {
+ if ((grouping = PyUnicode_AsUTF8String(grouping)) == NULL) {
+ goto finish;
+ }
+ spec.grouping = PyBytes_AS_STRING(grouping);
+ }
+ if (mpd_validate_lconv(&spec) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "invalid override dict");
+ goto finish;
+ }
+ }
+ else {
+ size_t n = strlen(spec.dot);
+ if (n > 1 || (n == 1 && !isascii((uchar)spec.dot[0]))) {
+ /* fix locale dependent non-ascii characters */
+ dot = dotsep_as_utf8(spec.dot);
+ if (dot == NULL) {
+ goto finish;
+ }
+ spec.dot = PyBytes_AS_STRING(dot);
+ }
+ n = strlen(spec.sep);
+ if (n > 1 || (n == 1 && !isascii((uchar)spec.sep[0]))) {
+ /* fix locale dependent non-ascii characters */
+ sep = dotsep_as_utf8(spec.sep);
+ if (sep == NULL) {
+ goto finish;
+ }
+ spec.sep = PyBytes_AS_STRING(sep);
+ }
+ }
+
+
+ decstring = mpd_qformat_spec(MPD(dec), &spec, CTX(context), &status);
+ if (decstring == NULL) {
+ if (status & MPD_Malloc_error) {
+ PyErr_NoMemory();
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError,
+ "format specification exceeds internal limits of _decimal");
+ }
+ goto finish;
+ }
+ size = strlen(decstring);
+ if (replace_fillchar) {
+ dec_replace_fillchar(decstring);
+ }
+
+ result = PyUnicode_DecodeUTF8(decstring, size, NULL);
+
+
+finish:
+ Py_XDECREF(grouping);
+ Py_XDECREF(sep);
+ Py_XDECREF(dot);
+ if (replace_fillchar) PyMem_Free(fmt);
+ if (decstring) mpd_free(decstring);
+ return result;
+}
+
+/* Return a PyLongObject from a PyDecObject, using the specified rounding
+ * mode. The context precision is not observed. */
+static PyObject *
+dec_as_long(PyObject *dec, PyObject *context, int round)
+{
+ PyLongObject *pylong;
+ digit *ob_digit;
+ size_t n;
+ Py_ssize_t i;
+ mpd_t *x;
+ mpd_context_t workctx;
+ uint32_t status = 0;
+
+ if (mpd_isspecial(MPD(dec))) {
+ if (mpd_isnan(MPD(dec))) {
+ PyErr_SetString(PyExc_ValueError,
+ "cannot convert NaN to integer");
+ }
+ else {
+ PyErr_SetString(PyExc_OverflowError,
+ "cannot convert Infinity to integer");
+ }
+ return NULL;
+ }
+
+ x = mpd_qnew();
+ if (x == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+ workctx = *CTX(context);
+ workctx.round = round;
+ mpd_qround_to_int(x, MPD(dec), &workctx, &status);
+ if (dec_addstatus(context, status)) {
+ mpd_del(x);
+ return NULL;
+ }
+
+ status = 0;
+ ob_digit = NULL;
+#if PYLONG_BITS_IN_DIGIT == 30
+ n = mpd_qexport_u32(&ob_digit, 0, PyLong_BASE, x, &status);
+#elif PYLONG_BITS_IN_DIGIT == 15
+ n = mpd_qexport_u16(&ob_digit, 0, PyLong_BASE, x, &status);
+#else
+ #error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
+#endif
+
+ if (n == SIZE_MAX) {
+ PyErr_NoMemory();
+ mpd_del(x);
+ return NULL;
+ }
+
+ assert(n > 0);
+ pylong = _PyLong_New(n);
+ if (pylong == NULL) {
+ mpd_free(ob_digit);
+ mpd_del(x);
+ return NULL;
+ }
+
+ memcpy(pylong->ob_digit, ob_digit, n * sizeof(digit));
+ mpd_free(ob_digit);
+
+ i = n;
+ while ((i > 0) && (pylong->ob_digit[i-1] == 0)) {
+ i--;
+ }
+
+ Py_SIZE(pylong) = i;
+ if (mpd_isnegative(x) && !mpd_iszero(x)) {
+ Py_SIZE(pylong) = -i;
+ }
+
+ mpd_del(x);
+ return (PyObject *) pylong;
+}
+
+static PyObject *
+PyDec_ToIntegralValue(PyObject *dec, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"rounding", "context", NULL};
+ PyObject *result;
+ PyObject *rounding = Py_None;
+ PyObject *context = Py_None;
+ uint32_t status = 0;
+ mpd_context_t workctx;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist,
+ &rounding, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ workctx = *CTX(context);
+ if (rounding != Py_None) {
+ int round = getround(rounding);
+ if (round < 0) {
+ return NULL;
+ }
+ if (!mpd_qsetround(&workctx, round)) {
+ INTERNAL_ERROR_PTR("PyDec_ToIntegralValue"); /* GCOV_NOT_REACHED */
+ }
+ }
+
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ mpd_qround_to_int(MPD(result), MPD(dec), &workctx, &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+PyDec_ToIntegralExact(PyObject *dec, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"rounding", "context", NULL};
+ PyObject *result;
+ PyObject *rounding = Py_None;
+ PyObject *context = Py_None;
+ uint32_t status = 0;
+ mpd_context_t workctx;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist,
+ &rounding, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ workctx = *CTX(context);
+ if (rounding != Py_None) {
+ int round = getround(rounding);
+ if (round < 0) {
+ return NULL;
+ }
+ if (!mpd_qsetround(&workctx, round)) {
+ INTERNAL_ERROR_PTR("PyDec_ToIntegralExact"); /* GCOV_NOT_REACHED */
+ }
+ }
+
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ mpd_qround_to_intx(MPD(result), MPD(dec), &workctx, &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+PyDec_AsFloat(PyObject *dec)
+{
+ PyObject *f, *s;
+
+ if (mpd_isnan(MPD(dec))) {
+ if (mpd_issnan(MPD(dec))) {
+ PyErr_SetString(PyExc_ValueError,
+ "cannot convert signaling NaN to float");
+ return NULL;
+ }
+ if (mpd_isnegative(MPD(dec))) {
+ s = PyUnicode_FromString("-nan");
+ }
+ else {
+ s = PyUnicode_FromString("nan");
+ }
+ }
+ else {
+ s = dec_str(dec);
+ }
+
+ if (s == NULL) {
+ return NULL;
+ }
+
+ f = PyFloat_FromString(s);
+ Py_DECREF(s);
+
+ return f;
+}
+
+static PyObject *
+PyDec_Round(PyObject *dec, PyObject *args)
+{
+ PyObject *result;
+ PyObject *x = NULL;
+ uint32_t status = 0;
+ PyObject *context;
+
+
+ CURRENT_CONTEXT(context);
+ if (!PyArg_ParseTuple(args, "|O", &x)) {
+ return NULL;
+ }
+
+ if (x) {
+ mpd_uint_t dq[1] = {1};
+ mpd_t q = {MPD_STATIC|MPD_CONST_DATA,0,1,1,1,dq};
+ mpd_ssize_t y;
+
+ if (!PyLong_Check(x)) {
+ PyErr_SetString(PyExc_TypeError,
+ "optional arg must be an integer");
+ return NULL;
+ }
+
+ y = PyLong_AsSsize_t(x);
+ if (y == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ q.exp = (y == MPD_SSIZE_MIN) ? MPD_SSIZE_MAX : -y;
+ mpd_qquantize(MPD(result), MPD(dec), &q, CTX(context), &status);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+ }
+ else {
+ return dec_as_long(dec, context, MPD_ROUND_HALF_EVEN);
+ }
+}
+
+static PyObject *DecimalTuple = NULL;
+/* Return the DecimalTuple representation of a PyDecObject. */
+static PyObject *
+PyDec_AsTuple(PyObject *dec, PyObject *dummy UNUSED)
+{
+ PyObject *result = NULL;
+ PyObject *sign = NULL;
+ PyObject *coeff = NULL;
+ PyObject *expt = NULL;
+ PyObject *tmp = NULL;
+ mpd_t *x = NULL;
+ char *intstring = NULL;
+ Py_ssize_t intlen, i;
+
+
+ x = mpd_qncopy(MPD(dec));
+ if (x == NULL) {
+ PyErr_NoMemory();
+ goto out;
+ }
+
+ sign = PyLong_FromUnsignedLong(mpd_sign(MPD(dec)));
+ if (sign == NULL) {
+ goto out;
+ }
+
+ if (mpd_isinfinite(x)) {
+ expt = PyUnicode_FromString("F");
+ if (expt == NULL) {
+ goto out;
+ }
+ /* decimal.py has non-compliant infinity payloads. */
+ coeff = Py_BuildValue("(i)", 0);
+ if (coeff == NULL) {
+ goto out;
+ }
+ }
+ else {
+ if (mpd_isnan(x)) {
+ expt = PyUnicode_FromString(mpd_isqnan(x)?"n":"N");
+ }
+ else {
+ expt = PyLong_FromSsize_t(MPD(dec)->exp);
+ }
+ if (expt == NULL) {
+ goto out;
+ }
+
+ /* coefficient is defined */
+ if (x->len > 0) {
+
+ /* make an integer */
+ x->exp = 0;
+ /* clear NaN and sign */
+ mpd_clear_flags(x);
+ intstring = mpd_to_sci(x, 1);
+ if (intstring == NULL) {
+ PyErr_NoMemory();
+ goto out;
+ }
+
+ intlen = strlen(intstring);
+ coeff = PyTuple_New(intlen);
+ if (coeff == NULL) {
+ goto out;
+ }
+
+ for (i = 0; i < intlen; i++) {
+ tmp = PyLong_FromLong(intstring[i]-'0');
+ if (tmp == NULL) {
+ goto out;
+ }
+ PyTuple_SET_ITEM(coeff, i, tmp);
+ }
+ }
+ else {
+ coeff = PyTuple_New(0);
+ if (coeff == NULL) {
+ goto out;
+ }
+ }
+ }
+
+ result = PyObject_CallFunctionObjArgs(DecimalTuple,
+ sign, coeff, expt, NULL);
+
+out:
+ if (x) mpd_del(x);
+ if (intstring) mpd_free(intstring);
+ Py_XDECREF(sign);
+ Py_XDECREF(coeff);
+ Py_XDECREF(expt);
+ return result;
+}
+
+
+/******************************************************************************/
+/* Macros for converting mpdecimal functions to Decimal methods */
+/******************************************************************************/
+
+/* Unary number method that uses the default module context. */
+#define Dec_UnaryNumberMethod(MPDFUNC) \
+static PyObject * \
+nm_##MPDFUNC(PyObject *self) \
+{ \
+ PyObject *result; \
+ PyObject *context; \
+ uint32_t status = 0; \
+ \
+ CURRENT_CONTEXT(context); \
+ if ((result = dec_alloc()) == NULL) { \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(self), CTX(context), &status); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/* Binary number method that uses default module context. */
+#define Dec_BinaryNumberMethod(MPDFUNC) \
+static PyObject * \
+nm_##MPDFUNC(PyObject *self, PyObject *other) \
+{ \
+ PyObject *a, *b; \
+ PyObject *result; \
+ PyObject *context; \
+ uint32_t status = 0; \
+ \
+ CURRENT_CONTEXT(context) ; \
+ CONVERT_BINOP(&a, &b, self, other, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b), CTX(context), &status); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/* Boolean function without a context arg. */
+#define Dec_BoolFunc(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *dummy UNUSED) \
+{ \
+ return MPDFUNC(MPD(self)) ? incr_true() : incr_false(); \
+}
+
+/* Boolean function with an optional context arg. */
+#define Dec_BoolFuncVA(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *args, PyObject *kwds) \
+{ \
+ static char *kwlist[] = {"context", NULL}; \
+ PyObject *context = Py_None; \
+ \
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, \
+ &context)) { \
+ return NULL; \
+ } \
+ CONTEXT_CHECK_VA(context); \
+ \
+ return MPDFUNC(MPD(self), CTX(context)) ? incr_true() : incr_false(); \
+}
+
+/* Unary function with an optional context arg. */
+#define Dec_UnaryFuncVA(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *args, PyObject *kwds) \
+{ \
+ static char *kwlist[] = {"context", NULL}; \
+ PyObject *result; \
+ PyObject *context = Py_None; \
+ uint32_t status = 0; \
+ \
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, \
+ &context)) { \
+ return NULL; \
+ } \
+ CONTEXT_CHECK_VA(context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(self), CTX(context), &status); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/* Binary function with an optional context arg. */
+#define Dec_BinaryFuncVA(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *args, PyObject *kwds) \
+{ \
+ static char *kwlist[] = {"other", "context", NULL}; \
+ PyObject *other; \
+ PyObject *a, *b; \
+ PyObject *result; \
+ PyObject *context = Py_None; \
+ uint32_t status = 0; \
+ \
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist, \
+ &other, &context)) { \
+ return NULL; \
+ } \
+ CONTEXT_CHECK_VA(context); \
+ CONVERT_BINOP_RAISE(&a, &b, self, other, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b), CTX(context), &status); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/* Binary function with an optional context arg. Actual MPDFUNC does
+ NOT take a context. The context is used to record InvalidOperation
+ if the second operand cannot be converted exactly. */
+#define Dec_BinaryFuncVA_NO_CTX(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *args, PyObject *kwds) \
+{ \
+ static char *kwlist[] = {"other", "context", NULL}; \
+ PyObject *context = Py_None; \
+ PyObject *other; \
+ PyObject *a, *b; \
+ PyObject *result; \
+ \
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist, \
+ &other, &context)) { \
+ return NULL; \
+ } \
+ CONTEXT_CHECK_VA(context); \
+ CONVERT_BINOP_RAISE(&a, &b, self, other, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b)); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ \
+ return result; \
+}
+
+/* Ternary function with an optional context arg. */
+#define Dec_TernaryFuncVA(MPDFUNC) \
+static PyObject * \
+dec_##MPDFUNC(PyObject *self, PyObject *args, PyObject *kwds) \
+{ \
+ static char *kwlist[] = {"other", "third", "context", NULL}; \
+ PyObject *other, *third; \
+ PyObject *a, *b, *c; \
+ PyObject *result; \
+ PyObject *context = Py_None; \
+ uint32_t status = 0; \
+ \
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|O", kwlist, \
+ &other, &third, &context)) { \
+ return NULL; \
+ } \
+ CONTEXT_CHECK_VA(context); \
+ CONVERT_TERNOP_RAISE(&a, &b, &c, self, other, third, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ Py_DECREF(c); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b), MPD(c), CTX(context), &status); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ Py_DECREF(c); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+
+/**********************************************/
+/* Number methods */
+/**********************************************/
+
+Dec_UnaryNumberMethod(mpd_qminus)
+Dec_UnaryNumberMethod(mpd_qplus)
+Dec_UnaryNumberMethod(mpd_qabs)
+
+Dec_BinaryNumberMethod(mpd_qadd)
+Dec_BinaryNumberMethod(mpd_qsub)
+Dec_BinaryNumberMethod(mpd_qmul)
+Dec_BinaryNumberMethod(mpd_qdiv)
+Dec_BinaryNumberMethod(mpd_qrem)
+Dec_BinaryNumberMethod(mpd_qdivint)
+
+static PyObject *
+nm_dec_as_long(PyObject *dec)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+ return dec_as_long(dec, context, MPD_ROUND_DOWN);
+}
+
+static int
+nm_nonzero(PyObject *v)
+{
+ return !mpd_iszero(MPD(v));
+}
+
+static PyObject *
+nm_mpd_qdivmod(PyObject *v, PyObject *w)
+{
+ PyObject *a, *b;
+ PyObject *q, *r;
+ PyObject *context;
+ uint32_t status = 0;
+ PyObject *ret;
+
+ CURRENT_CONTEXT(context);
+ CONVERT_BINOP(&a, &b, v, w, context);
+
+ q = dec_alloc();
+ if (q == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return NULL;
+ }
+ r = dec_alloc();
+ if (r == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ Py_DECREF(q);
+ return NULL;
+ }
+
+ mpd_qdivmod(MPD(q), MPD(r), MPD(a), MPD(b), CTX(context), &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(r);
+ Py_DECREF(q);
+ return NULL;
+ }
+
+ ret = Py_BuildValue("(OO)", q, r);
+ Py_DECREF(r);
+ Py_DECREF(q);
+ return ret;
+}
+
+static PyObject *
+nm_mpd_qpow(PyObject *base, PyObject *exp, PyObject *mod)
+{
+ PyObject *a, *b, *c = NULL;
+ PyObject *result;
+ PyObject *context;
+ uint32_t status = 0;
+
+ CURRENT_CONTEXT(context);
+ CONVERT_BINOP(&a, &b, base, exp, context);
+
+ if (mod != Py_None) {
+ if (!convert_op(NOT_IMPL, &c, mod, context)) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return c;
+ }
+ }
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ Py_XDECREF(c);
+ return NULL;
+ }
+
+ if (c == NULL) {
+ mpd_qpow(MPD(result), MPD(a), MPD(b),
+ CTX(context), &status);
+ }
+ else {
+ mpd_qpowmod(MPD(result), MPD(a), MPD(b), MPD(c),
+ CTX(context), &status);
+ Py_DECREF(c);
+ }
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+
+/******************************************************************************/
+/* Decimal Methods */
+/******************************************************************************/
+
+/* Unary arithmetic functions, optional context arg */
+Dec_UnaryFuncVA(mpd_qexp)
+Dec_UnaryFuncVA(mpd_qln)
+Dec_UnaryFuncVA(mpd_qlog10)
+Dec_UnaryFuncVA(mpd_qnext_minus)
+Dec_UnaryFuncVA(mpd_qnext_plus)
+Dec_UnaryFuncVA(mpd_qreduce)
+Dec_UnaryFuncVA(mpd_qsqrt)
+
+/* Binary arithmetic functions, optional context arg */
+Dec_BinaryFuncVA(mpd_qcompare)
+Dec_BinaryFuncVA(mpd_qcompare_signal)
+Dec_BinaryFuncVA(mpd_qmax)
+Dec_BinaryFuncVA(mpd_qmax_mag)
+Dec_BinaryFuncVA(mpd_qmin)
+Dec_BinaryFuncVA(mpd_qmin_mag)
+Dec_BinaryFuncVA(mpd_qnext_toward)
+Dec_BinaryFuncVA(mpd_qrem_near)
+
+/* Ternary arithmetic functions, optional context arg */
+Dec_TernaryFuncVA(mpd_qfma)
+
+/* Boolean functions, no context arg */
+Dec_BoolFunc(mpd_iscanonical)
+Dec_BoolFunc(mpd_isfinite)
+Dec_BoolFunc(mpd_isinfinite)
+Dec_BoolFunc(mpd_isnan)
+Dec_BoolFunc(mpd_isqnan)
+Dec_BoolFunc(mpd_issnan)
+Dec_BoolFunc(mpd_issigned)
+Dec_BoolFunc(mpd_iszero)
+
+/* Boolean functions, optional context arg */
+Dec_BoolFuncVA(mpd_isnormal)
+Dec_BoolFuncVA(mpd_issubnormal)
+
+/* Unary functions, no context arg */
+static PyObject *
+dec_mpd_adjexp(PyObject *self, PyObject *dummy UNUSED)
+{
+ mpd_ssize_t retval;
+
+ if (mpd_isspecial(MPD(self))) {
+ retval = 0;
+ }
+ else {
+ retval = mpd_adjexp(MPD(self));
+ }
+
+ return PyLong_FromSsize_t(retval);
+}
+
+static PyObject *
+dec_canonical(PyObject *self, PyObject *dummy UNUSED)
+{
+ Py_INCREF(self);
+ return self;
+}
+
+static PyObject *
+dec_conjugate(PyObject *self, PyObject *dummy UNUSED)
+{
+ Py_INCREF(self);
+ return self;
+}
+
+static PyObject *
+dec_mpd_radix(PyObject *self UNUSED, PyObject *dummy UNUSED)
+{
+ PyObject *result;
+
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ _dec_settriple(result, MPD_POS, 10, 0);
+ return result;
+}
+
+static PyObject *
+dec_mpd_qcopy_abs(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *result;
+ uint32_t status = 0;
+
+ if ((result = dec_alloc()) == NULL) {
+ return NULL;
+ }
+
+ mpd_qcopy_abs(MPD(result), MPD(self), &status);
+ if (status & MPD_Malloc_error) {
+ Py_DECREF(result);
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+dec_mpd_qcopy_negate(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *result;
+ uint32_t status = 0;
+
+ if ((result = dec_alloc()) == NULL) {
+ return NULL;
+ }
+
+ mpd_qcopy_negate(MPD(result), MPD(self), &status);
+ if (status & MPD_Malloc_error) {
+ Py_DECREF(result);
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ return result;
+}
+
+/* Unary functions, optional context arg */
+Dec_UnaryFuncVA(mpd_qinvert)
+Dec_UnaryFuncVA(mpd_qlogb)
+
+static PyObject *
+dec_mpd_class(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"context", NULL};
+ PyObject *context = Py_None;
+ const char *cp;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist,
+ &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ cp = mpd_class(MPD(self), CTX(context));
+ return PyUnicode_FromString(cp);
+}
+
+static PyObject *
+dec_mpd_to_eng(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"context", NULL};
+ PyObject *result;
+ PyObject *context = Py_None;
+ mpd_ssize_t size;
+ char *s;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist,
+ &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ size = mpd_to_eng_size(&s, MPD(self), CtxCaps(context));
+ if (size < 0) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ result = unicode_fromascii(s, size);
+ mpd_free(s);
+
+ return result;
+}
+
+/* Binary functions, optional context arg for conversion errors */
+Dec_BinaryFuncVA_NO_CTX(mpd_compare_total)
+Dec_BinaryFuncVA_NO_CTX(mpd_compare_total_mag)
+
+static PyObject *
+dec_mpd_qcopy_sign(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"other", "context", NULL};
+ PyObject *other;
+ PyObject *a, *b;
+ PyObject *result;
+ PyObject *context = Py_None;
+ uint32_t status = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist,
+ &other, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+ CONVERT_BINOP_RAISE(&a, &b, self, other, context);
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return NULL;
+ }
+
+ mpd_qcopy_sign(MPD(result), MPD(a), MPD(b), &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+dec_mpd_same_quantum(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"other", "context", NULL};
+ PyObject *other;
+ PyObject *a, *b;
+ PyObject *result;
+ PyObject *context = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist,
+ &other, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+ CONVERT_BINOP_RAISE(&a, &b, self, other, context);
+
+ result = mpd_same_quantum(MPD(a), MPD(b)) ? incr_true() : incr_false();
+ Py_DECREF(a);
+ Py_DECREF(b);
+
+ return result;
+}
+
+/* Binary functions, optional context arg */
+Dec_BinaryFuncVA(mpd_qand)
+Dec_BinaryFuncVA(mpd_qor)
+Dec_BinaryFuncVA(mpd_qxor)
+
+Dec_BinaryFuncVA(mpd_qrotate)
+Dec_BinaryFuncVA(mpd_qscaleb)
+Dec_BinaryFuncVA(mpd_qshift)
+
+static PyObject *
+dec_mpd_qquantize(PyObject *v, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"exp", "rounding", "context", NULL};
+ PyObject *rounding = Py_None;
+ PyObject *context = Py_None;
+ PyObject *w, *a, *b;
+ PyObject *result;
+ uint32_t status = 0;
+ mpd_context_t workctx;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO", kwlist,
+ &w, &rounding, &context)) {
+ return NULL;
+ }
+ CONTEXT_CHECK_VA(context);
+
+ workctx = *CTX(context);
+ if (rounding != Py_None) {
+ int round = getround(rounding);
+ if (round < 0) {
+ return NULL;
+ }
+ if (!mpd_qsetround(&workctx, round)) {
+ INTERNAL_ERROR_PTR("dec_mpd_qquantize"); /* GCOV_NOT_REACHED */
+ }
+ }
+
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context);
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return NULL;
+ }
+
+ mpd_qquantize(MPD(result), MPD(a), MPD(b), &workctx, &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+/* Special methods */
+static PyObject *
+dec_richcompare(PyObject *v, PyObject *w, int op)
+{
+ PyObject *a;
+ PyObject *b;
+ PyObject *context;
+ uint32_t status = 0;
+ int a_issnan, b_issnan;
+ int r;
+
+ assert(PyDec_Check(v));
+
+ CURRENT_CONTEXT(context);
+ CONVERT_BINOP_CMP(&a, &b, v, w, op, context);
+
+ a_issnan = mpd_issnan(MPD(a));
+ b_issnan = mpd_issnan(MPD(b));
+
+ r = mpd_qcmp(MPD(a), MPD(b), &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (r == INT_MAX) {
+ /* sNaNs or op={le,ge,lt,gt} always signal. */
+ if (a_issnan || b_issnan || (op != Py_EQ && op != Py_NE)) {
+ if (dec_addstatus(context, status)) {
+ return NULL;
+ }
+ }
+ /* qNaN comparison with op={eq,ne} or comparison
+ * with InvalidOperation disabled. */
+ return (op == Py_NE) ? incr_true() : incr_false();
+ }
+
+ switch (op) {
+ case Py_EQ:
+ r = (r == 0);
+ break;
+ case Py_NE:
+ r = (r != 0);
+ break;
+ case Py_LE:
+ r = (r <= 0);
+ break;
+ case Py_GE:
+ r = (r >= 0);
+ break;
+ case Py_LT:
+ r = (r == -1);
+ break;
+ case Py_GT:
+ r = (r == 1);
+ break;
+ }
+
+ return PyBool_FromLong(r);
+}
+
+/* __ceil__ */
+static PyObject *
+dec_ceil(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+ return dec_as_long(self, context, MPD_ROUND_CEILING);
+}
+
+/* __complex__ */
+static PyObject *
+dec_complex(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *f;
+ double x;
+
+ f = PyDec_AsFloat(self);
+ if (f == NULL) {
+ return NULL;
+ }
+
+ x = PyFloat_AsDouble(f);
+ Py_DECREF(f);
+ if (x == -1.0 && PyErr_Occurred()) {
+ return NULL;
+ }
+
+ return PyComplex_FromDoubles(x, 0);
+}
+
+/* __copy__ and __deepcopy__ */
+static PyObject *
+dec_copy(PyObject *self, PyObject *dummy UNUSED)
+{
+ Py_INCREF(self);
+ return self;
+}
+
+/* __floor__ */
+static PyObject *
+dec_floor(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+ return dec_as_long(self, context, MPD_ROUND_FLOOR);
+}
+
+/* Always uses the module context */
+static Py_hash_t
+_dec_hash(PyDecObject *v)
+{
+#if defined(CONFIG_64) && _PyHASH_BITS == 61
+ /* 2**61 - 1 */
+ mpd_uint_t p_data[1] = {2305843009213693951ULL};
+ mpd_t p = {MPD_POS|MPD_STATIC|MPD_CONST_DATA, 0, 19, 1, 1, p_data};
+ /* Inverse of 10 modulo p */
+ mpd_uint_t inv10_p_data[1] = {2075258708292324556ULL};
+ mpd_t inv10_p = {MPD_POS|MPD_STATIC|MPD_CONST_DATA,
+ 0, 19, 1, 1, inv10_p_data};
+#elif defined(CONFIG_32) && _PyHASH_BITS == 31
+ /* 2**31 - 1 */
+ mpd_uint_t p_data[2] = {147483647UL, 2};
+ mpd_t p = {MPD_POS|MPD_STATIC|MPD_CONST_DATA, 0, 10, 2, 2, p_data};
+ /* Inverse of 10 modulo p */
+ mpd_uint_t inv10_p_data[2] = {503238553UL, 1};
+ mpd_t inv10_p = {MPD_POS|MPD_STATIC|MPD_CONST_DATA,
+ 0, 10, 2, 2, inv10_p_data};
+#else
+ #error "No valid combination of CONFIG_64, CONFIG_32 and _PyHASH_BITS"
+#endif
+ const Py_hash_t py_hash_inf = 314159;
+ const Py_hash_t py_hash_nan = 0;
+ mpd_uint_t ten_data[1] = {10};
+ mpd_t ten = {MPD_POS|MPD_STATIC|MPD_CONST_DATA,
+ 0, 2, 1, 1, ten_data};
+ Py_hash_t result;
+ mpd_t *exp_hash = NULL;
+ mpd_t *tmp = NULL;
+ mpd_ssize_t exp;
+ uint32_t status = 0;
+ mpd_context_t maxctx;
+ PyObject *context;
+
+
+ context = current_context();
+ if (context == NULL) {
+ return -1;
+ }
+
+ if (mpd_isspecial(MPD(v))) {
+ if (mpd_issnan(MPD(v))) {
+ PyErr_SetString(PyExc_TypeError,
+ "Cannot hash a signaling NaN value");
+ return -1;
+ }
+ else if (mpd_isnan(MPD(v))) {
+ return py_hash_nan;
+ }
+ else {
+ return py_hash_inf * mpd_arith_sign(MPD(v));
+ }
+ }
+
+ mpd_maxcontext(&maxctx);
+ exp_hash = mpd_qnew();
+ if (exp_hash == NULL) {
+ goto malloc_error;
+ }
+ tmp = mpd_qnew();
+ if (tmp == NULL) {
+ goto malloc_error;
+ }
+
+ /*
+ * exp(v): exponent of v
+ * int(v): coefficient of v
+ */
+ exp = MPD(v)->exp;
+ if (exp >= 0) {
+ /* 10**exp(v) % p */
+ mpd_qsset_ssize(tmp, exp, &maxctx, &status);
+ mpd_qpowmod(exp_hash, &ten, tmp, &p, &maxctx, &status);
+ }
+ else {
+ /* inv10_p**(-exp(v)) % p */
+ mpd_qsset_ssize(tmp, -exp, &maxctx, &status);
+ mpd_qpowmod(exp_hash, &inv10_p, tmp, &p, &maxctx, &status);
+ }
+
+ /* hash = (int(v) * exp_hash) % p */
+ if (!mpd_qcopy(tmp, MPD(v), &status)) {
+ goto malloc_error;
+ }
+ tmp->exp = 0;
+ mpd_set_positive(tmp);
+
+ maxctx.prec = MPD_MAX_PREC + 21;
+ maxctx.emax = MPD_MAX_EMAX + 21;
+ maxctx.emin = MPD_MIN_EMIN - 21;
+
+ mpd_qmul(tmp, tmp, exp_hash, &maxctx, &status);
+ mpd_qrem(tmp, tmp, &p, &maxctx, &status);
+
+ result = mpd_qget_ssize(tmp, &status);
+ result = mpd_ispositive(MPD(v)) ? result : -result;
+ result = (result == -1) ? -2 : result;
+
+ if (status != 0) {
+ if (status & MPD_Malloc_error) {
+ goto malloc_error;
+ }
+ else {
+ PyErr_SetString(PyExc_RuntimeError, /* GCOV_NOT_REACHED */
+ "dec_hash: internal error: please report"); /* GCOV_NOT_REACHED */
+ }
+ result = -1; /* GCOV_NOT_REACHED */
+ }
+
+
+finish:
+ if (exp_hash) mpd_del(exp_hash);
+ if (tmp) mpd_del(tmp);
+ return result;
+
+malloc_error:
+ PyErr_NoMemory();
+ result = -1;
+ goto finish;
+}
+
+static Py_hash_t
+dec_hash(PyDecObject *self)
+{
+ if (self->hash == -1) {
+ self->hash = _dec_hash(self);
+ }
+
+ return self->hash;
+}
+
+/* __reduce__ */
+static PyObject *
+dec_reduce(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *result, *str;
+
+ str = dec_str(self);
+ if (str == NULL) {
+ return NULL;
+ }
+
+ result = Py_BuildValue("O(O)", Py_TYPE(self), str);
+ Py_DECREF(str);
+
+ return result;
+}
+
+/* __sizeof__ */
+static PyObject *
+dec_sizeof(PyObject *v, PyObject *dummy UNUSED)
+{
+ Py_ssize_t res;
+
+ res = sizeof(PyDecObject);
+ if (mpd_isdynamic_data(MPD(v))) {
+ res += MPD(v)->alloc * sizeof(mpd_uint_t);
+ }
+ return PyLong_FromSsize_t(res);
+}
+
+/* __trunc__ */
+static PyObject *
+dec_trunc(PyObject *self, PyObject *dummy UNUSED)
+{
+ PyObject *context;
+
+ CURRENT_CONTEXT(context);
+ return dec_as_long(self, context, MPD_ROUND_DOWN);
+}
+
+/* real and imag */
+static PyObject *
+dec_real(PyObject *self, void *closure UNUSED)
+{
+ Py_INCREF(self);
+ return self;
+}
+
+static PyObject *
+dec_imag(PyObject *self UNUSED, void *closure UNUSED)
+{
+ PyObject *result;
+
+ result = dec_alloc();
+ if (result == NULL) {
+ return NULL;
+ }
+
+ _dec_settriple(result, MPD_POS, 0, 0);
+ return result;
+}
+
+
+static PyGetSetDef dec_getsets [] =
+{
+ { "real", (getter)dec_real, NULL, NULL, NULL},
+ { "imag", (getter)dec_imag, NULL, NULL, NULL},
+ {NULL}
+};
+
+static PyNumberMethods dec_number_methods =
+{
+ (binaryfunc) nm_mpd_qadd,
+ (binaryfunc) nm_mpd_qsub,
+ (binaryfunc) nm_mpd_qmul,
+ (binaryfunc) nm_mpd_qrem,
+ (binaryfunc) nm_mpd_qdivmod,
+ (ternaryfunc) nm_mpd_qpow,
+ (unaryfunc) nm_mpd_qminus,
+ (unaryfunc) nm_mpd_qplus,
+ (unaryfunc) nm_mpd_qabs,
+ (inquiry) nm_nonzero,
+ (unaryfunc) 0, /* no bit-complement */
+ (binaryfunc) 0, /* no shiftl */
+ (binaryfunc) 0, /* no shiftr */
+ (binaryfunc) 0, /* no bit-and */
+ (binaryfunc) 0, /* no bit-xor */
+ (binaryfunc) 0, /* no bit-ior */
+ (unaryfunc) nm_dec_as_long,
+ 0, /* nb_reserved */
+ (unaryfunc) PyDec_AsFloat,
+ 0, /* binaryfunc nb_inplace_add; */
+ 0, /* binaryfunc nb_inplace_subtract; */
+ 0, /* binaryfunc nb_inplace_multiply; */
+ 0, /* binaryfunc nb_inplace_remainder; */
+ 0, /* ternaryfunc nb_inplace_power; */
+ 0, /* binaryfunc nb_inplace_lshift; */
+ 0, /* binaryfunc nb_inplace_rshift; */
+ 0, /* binaryfunc nb_inplace_and; */
+ 0, /* binaryfunc nb_inplace_xor; */
+ 0, /* binaryfunc nb_inplace_or; */
+ (binaryfunc) nm_mpd_qdivint, /* binaryfunc nb_floor_divide; */
+ (binaryfunc) nm_mpd_qdiv, /* binaryfunc nb_true_divide; */
+ 0, /* binaryfunc nb_inplace_floor_divide; */
+ 0, /* binaryfunc nb_inplace_true_divide; */
+};
+
+static PyMethodDef dec_methods [] =
+{
+ /* Unary arithmetic functions, optional context arg */
+ { "exp", (PyCFunction)dec_mpd_qexp, METH_VARARGS|METH_KEYWORDS, doc_exp },
+ { "ln", (PyCFunction)dec_mpd_qln, METH_VARARGS|METH_KEYWORDS, doc_ln },
+ { "log10", (PyCFunction)dec_mpd_qlog10, METH_VARARGS|METH_KEYWORDS, doc_log10 },
+ { "next_minus", (PyCFunction)dec_mpd_qnext_minus, METH_VARARGS|METH_KEYWORDS, doc_next_minus },
+ { "next_plus", (PyCFunction)dec_mpd_qnext_plus, METH_VARARGS|METH_KEYWORDS, doc_next_plus },
+ { "normalize", (PyCFunction)dec_mpd_qreduce, METH_VARARGS|METH_KEYWORDS, doc_normalize },
+ { "to_integral", (PyCFunction)PyDec_ToIntegralValue, METH_VARARGS|METH_KEYWORDS, doc_to_integral },
+ { "to_integral_exact", (PyCFunction)PyDec_ToIntegralExact, METH_VARARGS|METH_KEYWORDS, doc_to_integral_exact },
+ { "to_integral_value", (PyCFunction)PyDec_ToIntegralValue, METH_VARARGS|METH_KEYWORDS, doc_to_integral_value },
+ { "sqrt", (PyCFunction)dec_mpd_qsqrt, METH_VARARGS|METH_KEYWORDS, doc_sqrt },
+
+ /* Binary arithmetic functions, optional context arg */
+ { "compare", (PyCFunction)dec_mpd_qcompare, METH_VARARGS|METH_KEYWORDS, doc_compare },
+ { "compare_signal", (PyCFunction)dec_mpd_qcompare_signal, METH_VARARGS|METH_KEYWORDS, doc_compare_signal },
+ { "max", (PyCFunction)dec_mpd_qmax, METH_VARARGS|METH_KEYWORDS, doc_max },
+ { "max_mag", (PyCFunction)dec_mpd_qmax_mag, METH_VARARGS|METH_KEYWORDS, doc_max_mag },
+ { "min", (PyCFunction)dec_mpd_qmin, METH_VARARGS|METH_KEYWORDS, doc_min },
+ { "min_mag", (PyCFunction)dec_mpd_qmin_mag, METH_VARARGS|METH_KEYWORDS, doc_min_mag },
+ { "next_toward", (PyCFunction)dec_mpd_qnext_toward, METH_VARARGS|METH_KEYWORDS, doc_next_toward },
+ { "quantize", (PyCFunction)dec_mpd_qquantize, METH_VARARGS|METH_KEYWORDS, doc_quantize },
+ { "remainder_near", (PyCFunction)dec_mpd_qrem_near, METH_VARARGS|METH_KEYWORDS, doc_remainder_near },
+
+ /* Ternary arithmetic functions, optional context arg */
+ { "fma", (PyCFunction)dec_mpd_qfma, METH_VARARGS|METH_KEYWORDS, doc_fma },
+
+ /* Boolean functions, no context arg */
+ { "is_canonical", dec_mpd_iscanonical, METH_NOARGS, doc_is_canonical },
+ { "is_finite", dec_mpd_isfinite, METH_NOARGS, doc_is_finite },
+ { "is_infinite", dec_mpd_isinfinite, METH_NOARGS, doc_is_infinite },
+ { "is_nan", dec_mpd_isnan, METH_NOARGS, doc_is_nan },
+ { "is_qnan", dec_mpd_isqnan, METH_NOARGS, doc_is_qnan },
+ { "is_snan", dec_mpd_issnan, METH_NOARGS, doc_is_snan },
+ { "is_signed", dec_mpd_issigned, METH_NOARGS, doc_is_signed },
+ { "is_zero", dec_mpd_iszero, METH_NOARGS, doc_is_zero },
+
+ /* Boolean functions, optional context arg */
+ { "is_normal", (PyCFunction)dec_mpd_isnormal, METH_VARARGS|METH_KEYWORDS, doc_is_normal },
+ { "is_subnormal", (PyCFunction)dec_mpd_issubnormal, METH_VARARGS|METH_KEYWORDS, doc_is_subnormal },
+
+ /* Unary functions, no context arg */
+ { "adjusted", dec_mpd_adjexp, METH_NOARGS, doc_adjusted },
+ { "canonical", dec_canonical, METH_NOARGS, doc_canonical },
+ { "conjugate", dec_conjugate, METH_NOARGS, doc_conjugate },
+ { "radix", dec_mpd_radix, METH_NOARGS, doc_radix },
+
+ /* Unary functions, optional context arg for conversion errors */
+ { "copy_abs", dec_mpd_qcopy_abs, METH_NOARGS, doc_copy_abs },
+ { "copy_negate", dec_mpd_qcopy_negate, METH_NOARGS, doc_copy_negate },
+
+ /* Unary functions, optional context arg */
+ { "logb", (PyCFunction)dec_mpd_qlogb, METH_VARARGS|METH_KEYWORDS, doc_logb },
+ { "logical_invert", (PyCFunction)dec_mpd_qinvert, METH_VARARGS|METH_KEYWORDS, doc_logical_invert },
+ { "number_class", (PyCFunction)dec_mpd_class, METH_VARARGS|METH_KEYWORDS, doc_number_class },
+ { "to_eng_string", (PyCFunction)dec_mpd_to_eng, METH_VARARGS|METH_KEYWORDS, doc_to_eng_string },
+
+ /* Binary functions, optional context arg for conversion errors */
+ { "compare_total", (PyCFunction)dec_mpd_compare_total, METH_VARARGS|METH_KEYWORDS, doc_compare_total },
+ { "compare_total_mag", (PyCFunction)dec_mpd_compare_total_mag, METH_VARARGS|METH_KEYWORDS, doc_compare_total_mag },
+ { "copy_sign", (PyCFunction)dec_mpd_qcopy_sign, METH_VARARGS|METH_KEYWORDS, doc_copy_sign },
+ { "same_quantum", (PyCFunction)dec_mpd_same_quantum, METH_VARARGS|METH_KEYWORDS, doc_same_quantum },
+
+ /* Binary functions, optional context arg */
+ { "logical_and", (PyCFunction)dec_mpd_qand, METH_VARARGS|METH_KEYWORDS, doc_logical_and },
+ { "logical_or", (PyCFunction)dec_mpd_qor, METH_VARARGS|METH_KEYWORDS, doc_logical_or },
+ { "logical_xor", (PyCFunction)dec_mpd_qxor, METH_VARARGS|METH_KEYWORDS, doc_logical_xor },
+ { "rotate", (PyCFunction)dec_mpd_qrotate, METH_VARARGS|METH_KEYWORDS, doc_rotate },
+ { "scaleb", (PyCFunction)dec_mpd_qscaleb, METH_VARARGS|METH_KEYWORDS, doc_scaleb },
+ { "shift", (PyCFunction)dec_mpd_qshift, METH_VARARGS|METH_KEYWORDS, doc_shift },
+
+ /* Miscellaneous */
+ { "from_float", dec_from_float, METH_O|METH_CLASS, doc_from_float },
+ { "as_tuple", PyDec_AsTuple, METH_NOARGS, doc_as_tuple },
+
+ /* Special methods */
+ { "__copy__", dec_copy, METH_NOARGS, NULL },
+ { "__deepcopy__", dec_copy, METH_O, NULL },
+ { "__format__", dec_format, METH_VARARGS, NULL },
+ { "__reduce__", dec_reduce, METH_NOARGS, NULL },
+ { "__round__", PyDec_Round, METH_VARARGS, NULL },
+ { "__ceil__", dec_ceil, METH_NOARGS, NULL },
+ { "__floor__", dec_floor, METH_NOARGS, NULL },
+ { "__trunc__", dec_trunc, METH_NOARGS, NULL },
+ { "__complex__", dec_complex, METH_NOARGS, NULL },
+ { "__sizeof__", dec_sizeof, METH_NOARGS, NULL },
+
+ { NULL, NULL, 1 }
+};
+
+static PyTypeObject PyDec_Type =
+{
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "decimal.Decimal", /* tp_name */
+ sizeof(PyDecObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor) dec_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) 0, /* tp_getattr */
+ (setattrfunc) 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc) dec_repr, /* tp_repr */
+ &dec_number_methods, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc) dec_hash, /* tp_hash */
+ 0, /* tp_call */
+ (reprfunc) dec_str, /* tp_str */
+ (getattrofunc) PyObject_GenericGetAttr, /* tp_getattro */
+ (setattrofunc) 0, /* tp_setattro */
+ (PyBufferProcs *) 0, /* tp_as_buffer */
+ (Py_TPFLAGS_DEFAULT|
+ Py_TPFLAGS_BASETYPE), /* tp_flags */
+ doc_decimal, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ dec_richcompare, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ dec_methods, /* tp_methods */
+ 0, /* tp_members */
+ dec_getsets, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ dec_new, /* tp_new */
+ PyObject_Del, /* tp_free */
+};
+
+
+/******************************************************************************/
+/* Context Object, Part 2 */
+/******************************************************************************/
+
+
+/************************************************************************/
+/* Macros for converting mpdecimal functions to Context methods */
+/************************************************************************/
+
+/* Boolean context method. */
+#define DecCtx_BoolFunc(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *v) \
+{ \
+ PyObject *ret; \
+ PyObject *a; \
+ \
+ CONVERT_OP_RAISE(&a, v, context); \
+ \
+ ret = MPDFUNC(MPD(a), CTX(context)) ? incr_true() : incr_false(); \
+ Py_DECREF(a); \
+ return ret; \
+}
+
+/* Boolean context method. MPDFUNC does NOT use a context. */
+#define DecCtx_BoolFunc_NO_CTX(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *v) \
+{ \
+ PyObject *ret; \
+ PyObject *a; \
+ \
+ CONVERT_OP_RAISE(&a, v, context); \
+ \
+ ret = MPDFUNC(MPD(a)) ? incr_true() : incr_false(); \
+ Py_DECREF(a); \
+ return ret; \
+}
+
+/* Unary context method. */
+#define DecCtx_UnaryFunc(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *v) \
+{ \
+ PyObject *result, *a; \
+ uint32_t status = 0; \
+ \
+ CONVERT_OP_RAISE(&a, v, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), CTX(context), &status); \
+ Py_DECREF(a); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/* Binary context method. */
+#define DecCtx_BinaryFunc(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *args) \
+{ \
+ PyObject *v, *w; \
+ PyObject *a, *b; \
+ PyObject *result; \
+ uint32_t status = 0; \
+ \
+ if (!PyArg_ParseTuple(args, "OO", &v, &w)) { \
+ return NULL; \
+ } \
+ \
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b), CTX(context), &status); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+/*
+ * Binary context method. The context is only used for conversion.
+ * The actual MPDFUNC does NOT take a context arg.
+ */
+#define DecCtx_BinaryFunc_NO_CTX(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *args) \
+{ \
+ PyObject *v, *w; \
+ PyObject *a, *b; \
+ PyObject *result; \
+ \
+ if (!PyArg_ParseTuple(args, "OO", &v, &w)) { \
+ return NULL; \
+ } \
+ \
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b)); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ \
+ return result; \
+}
+
+/* Ternary context method. */
+#define DecCtx_TernaryFunc(MPDFUNC) \
+static PyObject * \
+ctx_##MPDFUNC(PyObject *context, PyObject *args) \
+{ \
+ PyObject *v, *w, *x; \
+ PyObject *a, *b, *c; \
+ PyObject *result; \
+ uint32_t status = 0; \
+ \
+ if (!PyArg_ParseTuple(args, "OOO", &v, &w, &x)) { \
+ return NULL; \
+ } \
+ \
+ CONVERT_TERNOP_RAISE(&a, &b, &c, v, w, x, context); \
+ \
+ if ((result = dec_alloc()) == NULL) { \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ Py_DECREF(c); \
+ return NULL; \
+ } \
+ \
+ MPDFUNC(MPD(result), MPD(a), MPD(b), MPD(c), CTX(context), &status); \
+ Py_DECREF(a); \
+ Py_DECREF(b); \
+ Py_DECREF(c); \
+ if (dec_addstatus(context, status)) { \
+ Py_DECREF(result); \
+ return NULL; \
+ } \
+ \
+ return result; \
+}
+
+
+/* Unary arithmetic functions */
+DecCtx_UnaryFunc(mpd_qabs)
+DecCtx_UnaryFunc(mpd_qexp)
+DecCtx_UnaryFunc(mpd_qln)
+DecCtx_UnaryFunc(mpd_qlog10)
+DecCtx_UnaryFunc(mpd_qminus)
+DecCtx_UnaryFunc(mpd_qnext_minus)
+DecCtx_UnaryFunc(mpd_qnext_plus)
+DecCtx_UnaryFunc(mpd_qplus)
+DecCtx_UnaryFunc(mpd_qreduce)
+DecCtx_UnaryFunc(mpd_qround_to_int)
+DecCtx_UnaryFunc(mpd_qround_to_intx)
+DecCtx_UnaryFunc(mpd_qsqrt)
+
+/* Binary arithmetic functions */
+DecCtx_BinaryFunc(mpd_qadd)
+DecCtx_BinaryFunc(mpd_qcompare)
+DecCtx_BinaryFunc(mpd_qcompare_signal)
+DecCtx_BinaryFunc(mpd_qdiv)
+DecCtx_BinaryFunc(mpd_qdivint)
+DecCtx_BinaryFunc(mpd_qmax)
+DecCtx_BinaryFunc(mpd_qmax_mag)
+DecCtx_BinaryFunc(mpd_qmin)
+DecCtx_BinaryFunc(mpd_qmin_mag)
+DecCtx_BinaryFunc(mpd_qmul)
+DecCtx_BinaryFunc(mpd_qnext_toward)
+DecCtx_BinaryFunc(mpd_qquantize)
+DecCtx_BinaryFunc(mpd_qrem)
+DecCtx_BinaryFunc(mpd_qrem_near)
+DecCtx_BinaryFunc(mpd_qsub)
+
+static PyObject *
+ctx_mpd_qdivmod(PyObject *context, PyObject *args)
+{
+ PyObject *v, *w;
+ PyObject *a, *b;
+ PyObject *q, *r;
+ uint32_t status = 0;
+ PyObject *ret;
+
+ if (!PyArg_ParseTuple(args, "OO", &v, &w)) {
+ return NULL;
+ }
+
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context);
+
+ q = dec_alloc();
+ if (q == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return NULL;
+ }
+ r = dec_alloc();
+ if (r == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ Py_DECREF(q);
+ return NULL;
+ }
+
+ mpd_qdivmod(MPD(q), MPD(r), MPD(a), MPD(b), CTX(context), &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(r);
+ Py_DECREF(q);
+ return NULL;
+ }
+
+ ret = Py_BuildValue("(OO)", q, r);
+ Py_DECREF(r);
+ Py_DECREF(q);
+ return ret;
+}
+
+/* Binary or ternary arithmetic functions */
+static PyObject *
+ctx_mpd_qpow(PyObject *context, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"a", "b", "modulo", NULL};
+ PyObject *base, *exp, *mod = Py_None;
+ PyObject *a, *b, *c = NULL;
+ PyObject *result;
+ uint32_t status = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|O", kwlist,
+ &base, &exp, &mod)) {
+ return NULL;
+ }
+
+ CONVERT_BINOP_RAISE(&a, &b, base, exp, context);
+
+ if (mod != Py_None) {
+ if (!convert_op(TYPE_ERR, &c, mod, context)) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return c;
+ }
+ }
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ Py_XDECREF(c);
+ return NULL;
+ }
+
+ if (c == NULL) {
+ mpd_qpow(MPD(result), MPD(a), MPD(b),
+ CTX(context), &status);
+ }
+ else {
+ mpd_qpowmod(MPD(result), MPD(a), MPD(b), MPD(c),
+ CTX(context), &status);
+ Py_DECREF(c);
+ }
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+/* Ternary arithmetic functions */
+DecCtx_TernaryFunc(mpd_qfma)
+
+/* No argument */
+static PyObject *
+ctx_mpd_radix(PyObject *context, PyObject *dummy)
+{
+ return dec_mpd_radix(context, dummy);
+}
+
+/* Boolean functions: single decimal argument */
+DecCtx_BoolFunc(mpd_isnormal)
+DecCtx_BoolFunc(mpd_issubnormal)
+DecCtx_BoolFunc_NO_CTX(mpd_isfinite)
+DecCtx_BoolFunc_NO_CTX(mpd_isinfinite)
+DecCtx_BoolFunc_NO_CTX(mpd_isnan)
+DecCtx_BoolFunc_NO_CTX(mpd_isqnan)
+DecCtx_BoolFunc_NO_CTX(mpd_issigned)
+DecCtx_BoolFunc_NO_CTX(mpd_issnan)
+DecCtx_BoolFunc_NO_CTX(mpd_iszero)
+
+static PyObject *
+ctx_iscanonical(PyObject *context UNUSED, PyObject *v)
+{
+ if (!PyDec_Check(v)) {
+ PyErr_SetString(PyExc_TypeError,
+ "argument must be a Decimal");
+ return NULL;
+ }
+
+ return mpd_iscanonical(MPD(v)) ? incr_true() : incr_false();
+}
+
+/* Functions with a single decimal argument */
+static PyObject *
+PyDecContext_Apply(PyObject *context, PyObject *v)
+{
+ PyObject *result, *a;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ result = dec_apply(a, context);
+ Py_DECREF(a);
+ return result;
+}
+
+static PyObject *
+ctx_canonical(PyObject *context UNUSED, PyObject *v)
+{
+ if (!PyDec_Check(v)) {
+ PyErr_SetString(PyExc_TypeError,
+ "argument must be a Decimal");
+ return NULL;
+ }
+
+ Py_INCREF(v);
+ return v;
+}
+
+static PyObject *
+ctx_mpd_qcopy_abs(PyObject *context, PyObject *v)
+{
+ PyObject *result, *a;
+ uint32_t status = 0;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ return NULL;
+ }
+
+ mpd_qcopy_abs(MPD(result), MPD(a), &status);
+ Py_DECREF(a);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+static PyObject *
+ctx_copy_decimal(PyObject *context, PyObject *v)
+{
+ PyObject *result;
+
+ CONVERT_OP_RAISE(&result, v, context);
+ return result;
+}
+
+static PyObject *
+ctx_mpd_qcopy_negate(PyObject *context, PyObject *v)
+{
+ PyObject *result, *a;
+ uint32_t status = 0;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ return NULL;
+ }
+
+ mpd_qcopy_negate(MPD(result), MPD(a), &status);
+ Py_DECREF(a);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+DecCtx_UnaryFunc(mpd_qlogb)
+DecCtx_UnaryFunc(mpd_qinvert)
+
+static PyObject *
+ctx_mpd_class(PyObject *context, PyObject *v)
+{
+ PyObject *a;
+ const char *cp;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ cp = mpd_class(MPD(a), CTX(context));
+ Py_DECREF(a);
+
+ return PyUnicode_FromString(cp);
+}
+
+static PyObject *
+ctx_mpd_to_sci(PyObject *context, PyObject *v)
+{
+ PyObject *result;
+ PyObject *a;
+ mpd_ssize_t size;
+ char *s;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ size = mpd_to_sci_size(&s, MPD(a), CtxCaps(context));
+ Py_DECREF(a);
+ if (size < 0) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ result = unicode_fromascii(s, size);
+ mpd_free(s);
+
+ return result;
+}
+
+static PyObject *
+ctx_mpd_to_eng(PyObject *context, PyObject *v)
+{
+ PyObject *result;
+ PyObject *a;
+ mpd_ssize_t size;
+ char *s;
+
+ CONVERT_OP_RAISE(&a, v, context);
+
+ size = mpd_to_eng_size(&s, MPD(a), CtxCaps(context));
+ Py_DECREF(a);
+ if (size < 0) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ result = unicode_fromascii(s, size);
+ mpd_free(s);
+
+ return result;
+}
+
+/* Functions with two decimal arguments */
+DecCtx_BinaryFunc_NO_CTX(mpd_compare_total)
+DecCtx_BinaryFunc_NO_CTX(mpd_compare_total_mag)
+
+static PyObject *
+ctx_mpd_qcopy_sign(PyObject *context, PyObject *args)
+{
+ PyObject *v, *w;
+ PyObject *a, *b;
+ PyObject *result;
+ uint32_t status = 0;
+
+ if (!PyArg_ParseTuple(args, "OO", &v, &w)) {
+ return NULL;
+ }
+
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context);
+
+ result = dec_alloc();
+ if (result == NULL) {
+ Py_DECREF(a);
+ Py_DECREF(b);
+ return NULL;
+ }
+
+ mpd_qcopy_sign(MPD(result), MPD(a), MPD(b), &status);
+ Py_DECREF(a);
+ Py_DECREF(b);
+ if (dec_addstatus(context, status)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
+DecCtx_BinaryFunc(mpd_qand)
+DecCtx_BinaryFunc(mpd_qor)
+DecCtx_BinaryFunc(mpd_qxor)
+
+DecCtx_BinaryFunc(mpd_qrotate)
+DecCtx_BinaryFunc(mpd_qscaleb)
+DecCtx_BinaryFunc(mpd_qshift)
+
+static PyObject *
+ctx_mpd_same_quantum(PyObject *context, PyObject *args)
+{
+ PyObject *v, *w;
+ PyObject *a, *b;
+ PyObject *result;
+
+ if (!PyArg_ParseTuple(args, "OO", &v, &w)) {
+ return NULL;
+ }
+
+ CONVERT_BINOP_RAISE(&a, &b, v, w, context);
+
+ result = mpd_same_quantum(MPD(a), MPD(b)) ? incr_true() : incr_false();
+ Py_DECREF(a);
+ Py_DECREF(b);
+
+ return result;
+}
+
+
+static PyMethodDef context_methods [] =
+{
+ /* Unary arithmetic functions */
+ { "abs", ctx_mpd_qabs, METH_O, doc_ctx_abs },
+ { "exp", ctx_mpd_qexp, METH_O, doc_ctx_exp },
+ { "ln", ctx_mpd_qln, METH_O, doc_ctx_ln },
+ { "log10", ctx_mpd_qlog10, METH_O, doc_ctx_log10 },
+ { "minus", ctx_mpd_qminus, METH_O, doc_ctx_minus },
+ { "next_minus", ctx_mpd_qnext_minus, METH_O, doc_ctx_next_minus },
+ { "next_plus", ctx_mpd_qnext_plus, METH_O, doc_ctx_next_plus },
+ { "normalize", ctx_mpd_qreduce, METH_O, doc_ctx_normalize },
+ { "plus", ctx_mpd_qplus, METH_O, doc_ctx_plus },
+ { "to_integral", ctx_mpd_qround_to_int, METH_O, doc_ctx_to_integral },
+ { "to_integral_exact", ctx_mpd_qround_to_intx, METH_O, doc_ctx_to_integral_exact },
+ { "to_integral_value", ctx_mpd_qround_to_int, METH_O, doc_ctx_to_integral_value },
+ { "sqrt", ctx_mpd_qsqrt, METH_O, doc_ctx_sqrt },
+
+ /* Binary arithmetic functions */
+ { "add", ctx_mpd_qadd, METH_VARARGS, doc_ctx_add },
+ { "compare", ctx_mpd_qcompare, METH_VARARGS, doc_ctx_compare },
+ { "compare_signal", ctx_mpd_qcompare_signal, METH_VARARGS, doc_ctx_compare_signal },
+ { "divide", ctx_mpd_qdiv, METH_VARARGS, doc_ctx_divide },
+ { "divide_int", ctx_mpd_qdivint, METH_VARARGS, doc_ctx_divide_int },
+ { "divmod", ctx_mpd_qdivmod, METH_VARARGS, doc_ctx_divmod },
+ { "max", ctx_mpd_qmax, METH_VARARGS, doc_ctx_max },
+ { "max_mag", ctx_mpd_qmax_mag, METH_VARARGS, doc_ctx_max_mag },
+ { "min", ctx_mpd_qmin, METH_VARARGS, doc_ctx_min },
+ { "min_mag", ctx_mpd_qmin_mag, METH_VARARGS, doc_ctx_min_mag },
+ { "multiply", ctx_mpd_qmul, METH_VARARGS, doc_ctx_multiply },
+ { "next_toward", ctx_mpd_qnext_toward, METH_VARARGS, doc_ctx_next_toward },
+ { "quantize", ctx_mpd_qquantize, METH_VARARGS, doc_ctx_quantize },
+ { "remainder", ctx_mpd_qrem, METH_VARARGS, doc_ctx_remainder },
+ { "remainder_near", ctx_mpd_qrem_near, METH_VARARGS, doc_ctx_remainder_near },
+ { "subtract", ctx_mpd_qsub, METH_VARARGS, doc_ctx_subtract },
+
+ /* Binary or ternary arithmetic functions */
+ { "power", (PyCFunction)ctx_mpd_qpow, METH_VARARGS|METH_KEYWORDS, doc_ctx_power },
+
+ /* Ternary arithmetic functions */
+ { "fma", ctx_mpd_qfma, METH_VARARGS, doc_ctx_fma },
+
+ /* No argument */
+ { "Etiny", context_getetiny, METH_NOARGS, doc_ctx_Etiny },
+ { "Etop", context_getetop, METH_NOARGS, doc_ctx_Etop },
+ { "radix", ctx_mpd_radix, METH_NOARGS, doc_ctx_radix },
+
+ /* Boolean functions */
+ { "is_canonical", ctx_iscanonical, METH_O, doc_ctx_is_canonical },
+ { "is_finite", ctx_mpd_isfinite, METH_O, doc_ctx_is_finite },
+ { "is_infinite", ctx_mpd_isinfinite, METH_O, doc_ctx_is_infinite },
+ { "is_nan", ctx_mpd_isnan, METH_O, doc_ctx_is_nan },
+ { "is_normal", ctx_mpd_isnormal, METH_O, doc_ctx_is_normal },
+ { "is_qnan", ctx_mpd_isqnan, METH_O, doc_ctx_is_qnan },
+ { "is_signed", ctx_mpd_issigned, METH_O, doc_ctx_is_signed },
+ { "is_snan", ctx_mpd_issnan, METH_O, doc_ctx_is_snan },
+ { "is_subnormal", ctx_mpd_issubnormal, METH_O, doc_ctx_is_subnormal },
+ { "is_zero", ctx_mpd_iszero, METH_O, doc_ctx_is_zero },
+
+ /* Functions with a single decimal argument */
+ { "_apply", PyDecContext_Apply, METH_O, NULL }, /* alias for apply */
+#ifdef EXTRA_FUNCTIONALITY
+ { "apply", PyDecContext_Apply, METH_O, doc_ctx_apply },
+#endif
+ { "canonical", ctx_canonical, METH_O, doc_ctx_canonical },
+ { "copy_abs", ctx_mpd_qcopy_abs, METH_O, doc_ctx_copy_abs },
+ { "copy_decimal", ctx_copy_decimal, METH_O, doc_ctx_copy_decimal },
+ { "copy_negate", ctx_mpd_qcopy_negate, METH_O, doc_ctx_copy_negate },
+ { "logb", ctx_mpd_qlogb, METH_O, doc_ctx_logb },
+ { "logical_invert", ctx_mpd_qinvert, METH_O, doc_ctx_logical_invert },
+ { "number_class", ctx_mpd_class, METH_O, doc_ctx_number_class },
+ { "to_sci_string", ctx_mpd_to_sci, METH_O, doc_ctx_to_sci_string },
+ { "to_eng_string", ctx_mpd_to_eng, METH_O, doc_ctx_to_eng_string },
+
+ /* Functions with two decimal arguments */
+ { "compare_total", ctx_mpd_compare_total, METH_VARARGS, doc_ctx_compare_total },
+ { "compare_total_mag", ctx_mpd_compare_total_mag, METH_VARARGS, doc_ctx_compare_total_mag },
+ { "copy_sign", ctx_mpd_qcopy_sign, METH_VARARGS, doc_ctx_copy_sign },
+ { "logical_and", ctx_mpd_qand, METH_VARARGS, doc_ctx_logical_and },
+ { "logical_or", ctx_mpd_qor, METH_VARARGS, doc_ctx_logical_or },
+ { "logical_xor", ctx_mpd_qxor, METH_VARARGS, doc_ctx_logical_xor },
+ { "rotate", ctx_mpd_qrotate, METH_VARARGS, doc_ctx_rotate },
+ { "same_quantum", ctx_mpd_same_quantum, METH_VARARGS, doc_ctx_same_quantum },
+ { "scaleb", ctx_mpd_qscaleb, METH_VARARGS, doc_ctx_scaleb },
+ { "shift", ctx_mpd_qshift, METH_VARARGS, doc_ctx_shift },
+
+ /* Set context values */
+ { "clear_flags", context_clear_flags, METH_NOARGS, doc_ctx_clear_flags },
+ { "clear_traps", context_clear_traps, METH_NOARGS, doc_ctx_clear_traps },
+
+#ifdef CONFIG_32
+ /* Unsafe set functions with relaxed range checks */
+ { "_unsafe_setprec", context_unsafe_setprec, METH_O, NULL },
+ { "_unsafe_setemin", context_unsafe_setemin, METH_O, NULL },
+ { "_unsafe_setemax", context_unsafe_setemax, METH_O, NULL },
+#endif
+
+ /* Miscellaneous */
+ { "__copy__", (PyCFunction)context_copy, METH_NOARGS, NULL },
+ { "__reduce__", context_reduce, METH_NOARGS, NULL },
+ { "copy", (PyCFunction)context_copy, METH_NOARGS, doc_ctx_copy },
+ { "create_decimal", ctx_create_decimal, METH_VARARGS, doc_ctx_create_decimal },
+ { "create_decimal_from_float", ctx_from_float, METH_O, doc_ctx_create_decimal_from_float },
+
+ { NULL, NULL, 1 }
+};
+
+static PyTypeObject PyDecContext_Type =
+{
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "decimal.Context", /* tp_name */
+ sizeof(PyDecContextObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor) context_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) 0, /* tp_getattr */
+ (setattrfunc) 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc) context_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc) 0, /* tp_hash */
+ 0, /* tp_call */
+ (reprfunc) context_repr, /* tp_str */
+ (getattrofunc) context_getattr, /* tp_getattro */
+ (setattrofunc) context_setattr, /* tp_setattro */
+ (PyBufferProcs *) 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ doc_context, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ context_methods, /* tp_methods */
+ 0, /* tp_members */
+ context_getsets, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ context_init, /* tp_init */
+ 0, /* tp_alloc */
+ context_new, /* tp_new */
+ PyObject_Del, /* tp_free */
+};
+
+
+static PyMethodDef _decimal_methods [] =
+{
+ { "getcontext", (PyCFunction)PyDec_GetCurrentContext, METH_NOARGS, doc_getcontext},
+ { "setcontext", (PyCFunction)PyDec_SetCurrentContext, METH_O, doc_setcontext},
+ { "localcontext", (PyCFunction)ctxmanager_new, METH_VARARGS|METH_KEYWORDS, doc_localcontext},
+#ifdef EXTRA_FUNCTIONALITY
+ { "IEEEContext", (PyCFunction)ieee_context, METH_O, doc_ieee_context},
+#endif
+ { NULL, NULL, 1, NULL }
+};
+
+static struct PyModuleDef _decimal_module = {
+ PyModuleDef_HEAD_INIT,
+ "decimal",
+ doc__decimal,
+ -1,
+ _decimal_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+struct ssize_constmap { const char *name; mpd_ssize_t val; };
+static struct ssize_constmap ssize_constants [] = {
+ {"MAX_PREC", MPD_MAX_PREC},
+ {"MAX_EMAX", MPD_MAX_EMAX},
+ {"MIN_EMIN", MPD_MIN_EMIN},
+ {"MIN_ETINY", MPD_MIN_ETINY},
+ {NULL}
+};
+
+struct int_constmap { const char *name; int val; };
+static struct int_constmap int_constants [] = {
+ /* int constants */
+#ifdef EXTRA_FUNCTIONALITY
+ {"DECIMAL32", MPD_DECIMAL32},
+ {"DECIMAL64", MPD_DECIMAL64},
+ {"DECIMAL128", MPD_DECIMAL128},
+ {"IEEE_CONTEXT_MAX_BITS", MPD_IEEE_CONTEXT_MAX_BITS},
+ /* int condition flags */
+ {"DecClamped", MPD_Clamped},
+ {"DecConversionSyntax", MPD_Conversion_syntax},
+ {"DecDivisionByZero", MPD_Division_by_zero},
+ {"DecDivisionImpossible", MPD_Division_impossible},
+ {"DecDivisionUndefined", MPD_Division_undefined},
+ {"DecFpuError", MPD_Fpu_error},
+ {"DecInexact", MPD_Inexact},
+ {"DecInvalidContext", MPD_Invalid_context},
+ {"DecInvalidOperation", MPD_Invalid_operation},
+ {"DecIEEEInvalidOperation", MPD_IEEE_Invalid_operation},
+ {"DecMallocError", MPD_Malloc_error},
+ {"DecFloatOperation", MPD_Float_operation},
+ {"DecOverflow", MPD_Overflow},
+ {"DecRounded", MPD_Rounded},
+ {"DecSubnormal", MPD_Subnormal},
+ {"DecUnderflow", MPD_Underflow},
+ {"DecErrors", MPD_Errors},
+ {"DecTraps", MPD_Traps},
+#endif
+ {NULL}
+};
+
+
+#define CHECK_INT(expr) \
+ do { if ((expr) < 0) goto error; } while (0)
+#define ASSIGN_PTR(result, expr) \
+ do { result = (expr); if (result == NULL) goto error; } while (0)
+#define CHECK_PTR(expr) \
+ do { if ((expr) == NULL) goto error; } while (0)
+
+PyMODINIT_FUNC
+PyInit__decimal(void)
+{
+ PyObject *m = NULL;
+ PyObject *numbers = NULL;
+ PyObject *Number = NULL;
+ PyObject *collections = NULL;
+ PyObject *MutableMapping = NULL;
+ PyObject *obj = NULL;
+ DecCondMap *cm;
+ struct ssize_constmap *ssize_cm;
+ struct int_constmap *int_cm;
+ int i;
+
+
+ /* Init libmpdec */
+ mpd_traphandler = dec_traphandler;
+ mpd_mallocfunc = PyMem_Malloc;
+ mpd_reallocfunc = PyMem_Realloc;
+ mpd_callocfunc = mpd_callocfunc_em;
+ mpd_free = PyMem_Free;
+ mpd_setminalloc(_Py_DEC_MINALLOC);
+
+
+ /* Init types */
+ PyDec_Type.tp_base = &PyBaseObject_Type;
+ PyDecContext_Type.tp_base = &PyBaseObject_Type;
+ PyDecContextManager_Type.tp_base = &PyBaseObject_Type;
+ PyDecSignalDictMixin_Type.tp_base = &PyBaseObject_Type;
+
+ CHECK_INT(PyType_Ready(&PyDec_Type));
+ CHECK_INT(PyType_Ready(&PyDecContext_Type));
+ CHECK_INT(PyType_Ready(&PyDecSignalDictMixin_Type));
+ CHECK_INT(PyType_Ready(&PyDecContextManager_Type));
+
+ ASSIGN_PTR(obj, PyUnicode_FromString("decimal"));
+ CHECK_INT(PyDict_SetItemString(PyDec_Type.tp_dict, "__module__", obj));
+ CHECK_INT(PyDict_SetItemString(PyDecContext_Type.tp_dict,
+ "__module__", obj));
+ Py_CLEAR(obj);
+
+
+ /* Numeric abstract base classes */
+ ASSIGN_PTR(numbers, PyImport_ImportModule("numbers"));
+ ASSIGN_PTR(Number, PyObject_GetAttrString(numbers, "Number"));
+ /* Register Decimal with the Number abstract base class */
+ ASSIGN_PTR(obj, PyObject_CallMethod(Number, "register", "(O)",
+ (PyObject *)&PyDec_Type));
+ Py_CLEAR(obj);
+ /* Rational is a global variable used for fraction comparisons. */
+ ASSIGN_PTR(Rational, PyObject_GetAttrString(numbers, "Rational"));
+ /* Done with numbers, Number */
+ Py_CLEAR(numbers);
+ Py_CLEAR(Number);
+
+ /* DecimalTuple */
+ ASSIGN_PTR(collections, PyImport_ImportModule("collections"));
+ ASSIGN_PTR(DecimalTuple, PyObject_CallMethod(collections,
+ "namedtuple", "(ss)", "DecimalTuple",
+ "sign digits exponent"));
+ /* MutableMapping */
+ ASSIGN_PTR(MutableMapping, PyObject_GetAttrString(collections,
+ "MutableMapping"));
+ /* Create SignalDict type */
+ ASSIGN_PTR(PyDecSignalDict_Type,
+ (PyTypeObject *)PyObject_CallFunction(
+ (PyObject *)&PyType_Type, "s(OO){}",
+ "SignalDict", &PyDecSignalDictMixin_Type,
+ MutableMapping));
+
+ /* Done with collections, MutableMapping */
+ Py_CLEAR(collections);
+ Py_CLEAR(MutableMapping);
+
+
+ /* Create the module */
+ ASSIGN_PTR(m, PyModule_Create(&_decimal_module));
+
+
+ /* Add types to the module */
+ Py_INCREF(&PyDec_Type);
+ CHECK_INT(PyModule_AddObject(m, "Decimal", (PyObject *)&PyDec_Type));
+ Py_INCREF(&PyDecContext_Type);
+ CHECK_INT(PyModule_AddObject(m, "Context",
+ (PyObject *)&PyDecContext_Type));
+ Py_INCREF(DecimalTuple);
+ CHECK_INT(PyModule_AddObject(m, "DecimalTuple", DecimalTuple));
+
+
+ /* Create top level exception */
+ ASSIGN_PTR(DecimalException, PyErr_NewException(
+ "decimal.DecimalException",
+ PyExc_ArithmeticError, NULL));
+ Py_INCREF(DecimalException);
+ CHECK_INT(PyModule_AddObject(m, "DecimalException", DecimalException));
+
+ /* Create signal tuple */
+ ASSIGN_PTR(SignalTuple, PyTuple_New(SIGNAL_MAP_LEN));
+
+ /* Add exceptions that correspond to IEEE signals */
+ for (i = SIGNAL_MAP_LEN-1; i >= 0; i--) {
+ PyObject *base;
+
+ cm = signal_map + i;
+
+ switch (cm->flag) {
+ case MPD_Float_operation:
+ base = PyTuple_Pack(2, DecimalException, PyExc_TypeError);
+ break;
+ case MPD_Division_by_zero:
+ base = PyTuple_Pack(2, DecimalException, PyExc_ZeroDivisionError);
+ break;
+ case MPD_Overflow:
+ base = PyTuple_Pack(2, signal_map[INEXACT].ex,
+ signal_map[ROUNDED].ex);
+ break;
+ case MPD_Underflow:
+ base = PyTuple_Pack(3, signal_map[INEXACT].ex,
+ signal_map[ROUNDED].ex,
+ signal_map[SUBNORMAL].ex);
+ break;
+ default:
+ base = PyTuple_Pack(1, DecimalException);
+ break;
+ }
+
+ if (base == NULL) {
+ goto error; /* GCOV_NOT_REACHED */
+ }
+
+ ASSIGN_PTR(cm->ex, PyErr_NewException((char *)cm->fqname, base, NULL));
+ Py_DECREF(base);
+
+ /* add to module */
+ Py_INCREF(cm->ex);
+ CHECK_INT(PyModule_AddObject(m, cm->name, cm->ex));
+
+ /* add to signal tuple */
+ Py_INCREF(cm->ex);
+ PyTuple_SET_ITEM(SignalTuple, i, cm->ex);
+ }
+
+ /*
+ * Unfortunately, InvalidOperation is a signal that comprises
+ * several conditions, including InvalidOperation! Naming the
+ * signal IEEEInvalidOperation would prevent the confusion.
+ */
+ cond_map[0].ex = signal_map[0].ex;
+
+ /* Add remaining exceptions, inherit from InvalidOperation */
+ for (cm = cond_map+1; cm->name != NULL; cm++) {
+ PyObject *base;
+ if (cm->flag == MPD_Division_undefined) {
+ base = PyTuple_Pack(2, signal_map[0].ex, PyExc_ZeroDivisionError);
+ }
+ else {
+ base = PyTuple_Pack(1, signal_map[0].ex);
+ }
+ if (base == NULL) {
+ goto error; /* GCOV_NOT_REACHED */
+ }
+
+ ASSIGN_PTR(cm->ex, PyErr_NewException((char *)cm->fqname, base, NULL));
+ Py_DECREF(base);
+
+ Py_INCREF(cm->ex);
+ CHECK_INT(PyModule_AddObject(m, cm->name, cm->ex));
+ }
+
+
+ /* Init default context template first */
+ ASSIGN_PTR(default_context_template,
+ PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL));
+ Py_INCREF(default_context_template);
+ CHECK_INT(PyModule_AddObject(m, "DefaultContext",
+ default_context_template));
+
+#ifdef WITHOUT_THREADS
+ /* Init module context */
+ ASSIGN_PTR(module_context,
+ PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL));
+ Py_INCREF(Py_False);
+ CHECK_INT(PyModule_AddObject(m, "HAVE_THREADS", Py_False));
+#else
+ ASSIGN_PTR(tls_context_key, PyUnicode_FromString("___DECIMAL_CTX__"));
+ Py_INCREF(Py_True);
+ CHECK_INT(PyModule_AddObject(m, "HAVE_THREADS", Py_True));
+#endif
+
+ /* Init basic context template */
+ ASSIGN_PTR(basic_context_template,
+ PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL));
+ init_basic_context(basic_context_template);
+ Py_INCREF(basic_context_template);
+ CHECK_INT(PyModule_AddObject(m, "BasicContext",
+ basic_context_template));
+
+ /* Init extended context template */
+ ASSIGN_PTR(extended_context_template,
+ PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL));
+ init_extended_context(extended_context_template);
+ Py_INCREF(extended_context_template);
+ CHECK_INT(PyModule_AddObject(m, "ExtendedContext",
+ extended_context_template));
+
+
+ /* Init mpd_ssize_t constants */
+ for (ssize_cm = ssize_constants; ssize_cm->name != NULL; ssize_cm++) {
+ ASSIGN_PTR(obj, PyLong_FromSsize_t(ssize_cm->val));
+ CHECK_INT(PyModule_AddObject(m, ssize_cm->name, obj));
+ obj = NULL;
+ }
+
+ /* Init int constants */
+ for (int_cm = int_constants; int_cm->name != NULL; int_cm++) {
+ CHECK_INT(PyModule_AddIntConstant(m, int_cm->name,
+ int_cm->val));
+ }
+
+ /* Init string constants */
+ for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) {
+ ASSIGN_PTR(round_map[i], PyUnicode_InternFromString(mpd_round_string[i]));
+ Py_INCREF(round_map[i]);
+ CHECK_INT(PyModule_AddObject(m, mpd_round_string[i], round_map[i]));
+ }
+
+ /* Add specification version number */
+ CHECK_INT(PyModule_AddStringConstant(m, "__version__", "1.70"));
+ CHECK_INT(PyModule_AddStringConstant(m, "__libmpdec_version__", mpd_version()));
+
+
+ return m;
+
+
+error:
+ Py_CLEAR(obj); /* GCOV_NOT_REACHED */
+ Py_CLEAR(numbers); /* GCOV_NOT_REACHED */
+ Py_CLEAR(Number); /* GCOV_NOT_REACHED */
+ Py_CLEAR(Rational); /* GCOV_NOT_REACHED */
+ Py_CLEAR(collections); /* GCOV_NOT_REACHED */
+ Py_CLEAR(MutableMapping); /* GCOV_NOT_REACHED */
+ Py_CLEAR(SignalTuple); /* GCOV_NOT_REACHED */
+ Py_CLEAR(DecimalTuple); /* GCOV_NOT_REACHED */
+#ifdef WITHOUT_THREADS
+ Py_CLEAR(module_context); /* GCOV_NOT_REACHED */
+#else
+ Py_CLEAR(default_context_template); /* GCOV_NOT_REACHED */
+ Py_CLEAR(tls_context_key); /* GCOV_NOT_REACHED */
+#endif
+ Py_CLEAR(basic_context_template); /* GCOV_NOT_REACHED */
+ Py_CLEAR(extended_context_template); /* GCOV_NOT_REACHED */
+ Py_CLEAR(m); /* GCOV_NOT_REACHED */
+
+ return NULL; /* GCOV_NOT_REACHED */
+}
+
+
diff --git a/Modules/_decimal/docstrings.h b/Modules/_decimal/docstrings.h
new file mode 100644
index 0000000000..a6490b982a
--- /dev/null
+++ b/Modules/_decimal/docstrings.h
@@ -0,0 +1,771 @@
+/*
+ * Copyright (c) 2001-2012 Python Software Foundation. All Rights Reserved.
+ * Modified and extended by Stefan Krah.
+ */
+
+
+#ifndef DOCSTRINGS_H
+#define DOCSTRINGS_H
+
+
+#include "pymacro.h"
+
+
+/******************************************************************************/
+/* Module */
+/******************************************************************************/
+
+
+PyDoc_STRVAR(doc__decimal,
+"C decimal arithmetic module");
+
+PyDoc_STRVAR(doc_getcontext,"\n\
+getcontext() - Get the current default context.\n\
+\n");
+
+PyDoc_STRVAR(doc_setcontext,"\n\
+setcontext(c) - Set a new default context.\n\
+\n");
+
+PyDoc_STRVAR(doc_localcontext,"\n\
+localcontext(ctx=None) - Return a context manager that will set the default\n\
+context to a copy of ctx on entry to the with-statement and restore the\n\
+previous default context when exiting the with-statement. If no context is\n\
+specified, a copy of the current default context is used.\n\
+\n");
+
+#ifdef EXTRA_FUNCTIONALITY
+PyDoc_STRVAR(doc_ieee_context,"\n\
+IEEEContext(bits) - Return a context object initialized to the proper values for\n\
+one of the IEEE interchange formats. The argument must be a multiple of 32 and\n\
+less than IEEE_CONTEXT_MAX_BITS. For the most common values, the constants\n\
+DECIMAL32, DECIMAL64 and DECIMAL128 are provided.\n\
+\n");
+#endif
+
+
+/******************************************************************************/
+/* Decimal Object and Methods */
+/******************************************************************************/
+
+PyDoc_STRVAR(doc_decimal,"\n\
+Decimal(value=\"0\", context=None): Construct a new Decimal object.\n\
+value can be an integer, string, tuple, or another Decimal object.\n\
+If no value is given, return Decimal('0'). The context does not affect\n\
+the conversion and is only passed to determine if the InvalidOperation\n\
+trap is active.\n\
+\n");
+
+PyDoc_STRVAR(doc_adjusted,"\n\
+adjusted() - Return the adjusted exponent of the number.\n\
+\n\
+Defined as exp + digits - 1.\n\
+\n");
+
+PyDoc_STRVAR(doc_as_tuple,"\n\
+as_tuple() - Return a tuple representation of the number.\n\
+\n");
+
+PyDoc_STRVAR(doc_canonical,"\n\
+canonical() - Return the canonical encoding of the argument. Currently,\n\
+the encoding of a Decimal instance is always canonical, so this operation\n\
+returns its argument unchanged.\n\
+\n");
+
+PyDoc_STRVAR(doc_compare,"\n\
+compare(other, context=None) - Compare self to other. Return a decimal value:\n\
+\n\
+ a or b is a NaN ==> Decimal('NaN')\n\
+ a < b ==> Decimal('-1')\n\
+ a == b ==> Decimal('0')\n\
+ a > b ==> Decimal('1')\n\
+\n");
+
+PyDoc_STRVAR(doc_compare_signal,"\n\
+compare_signal(other, context=None) - Identical to compare, except that\n\
+all NaNs signal.\n\
+\n");
+
+PyDoc_STRVAR(doc_compare_total,"\n\
+compare_total(other, context=None) - Compare two operands using their\n\
+abstract representation rather than their numerical value. Similar to the\n\
+compare() method, but the result gives a total ordering on Decimal instances.\n\
+Two Decimal instances with the same numeric value but different representations\n\
+compare unequal in this ordering:\n\
+\n\
+ >>> Decimal('12.0').compare_total(Decimal('12'))\n\
+ Decimal('-1')\n\
+\n\
+Quiet and signaling NaNs are also included in the total ordering. The result\n\
+of this function is Decimal('0') if both operands have the same representation,\n\
+Decimal('-1') if the first operand is lower in the total order than the second,\n\
+and Decimal('1') if the first operand is higher in the total order than the\n\
+second operand. See the specification for details of the total order.\n\
+\n\
+This operation is unaffected by context and is quiet: no flags are changed\n\
+and no rounding is performed. As an exception, the C version may raise\n\
+InvalidOperation if the second operand cannot be converted exactly.\n\
+\n");
+
+PyDoc_STRVAR(doc_compare_total_mag,"\n\
+compare_total_mag(other, context=None) - Compare two operands using their\n\
+abstract representation rather than their value as in compare_total(), but\n\
+ignoring the sign of each operand. x.compare_total_mag(y) is equivalent to\n\
+x.copy_abs().compare_total(y.copy_abs()).\n\
+\n\
+This operation is unaffected by context and is quiet: no flags are changed\n\
+and no rounding is performed. As an exception, the C version may raise\n\
+InvalidOperation if the second operand cannot be converted exactly.\n\
+\n");
+
+PyDoc_STRVAR(doc_conjugate,"\n\
+conjugate() - Return self.\n\
+\n");
+
+PyDoc_STRVAR(doc_copy_abs,"\n\
+copy_abs() - Return the absolute value of the argument. This operation\n\
+is unaffected by context and is quiet: no flags are changed and no rounding\n\
+is performed.\n\
+\n");
+
+PyDoc_STRVAR(doc_copy_negate,"\n\
+copy_negate() - Return the negation of the argument. This operation is\n\
+unaffected by context and is quiet: no flags are changed and no rounding\n\
+is performed.\n\
+\n");
+
+PyDoc_STRVAR(doc_copy_sign,"\n\
+copy_sign(other, context=None) - Return a copy of the first operand with\n\
+the sign set to be the same as the sign of the second operand. For example:\n\
+\n\
+ >>> Decimal('2.3').copy_sign(Decimal('-1.5'))\n\
+ Decimal('-2.3')\n\
+\n\
+This operation is unaffected by context and is quiet: no flags are changed\n\
+and no rounding is performed. As an exception, the C version may raise\n\
+InvalidOperation if the second operand cannot be converted exactly.\n\
+\n");
+
+PyDoc_STRVAR(doc_exp,"\n\
+exp(context=None) - Return the value of the (natural) exponential function\n\
+e**x at the given number. The function always uses the ROUND_HALF_EVEN mode\n\
+and the result is correctly rounded.\n\
+\n");
+
+PyDoc_STRVAR(doc_from_float,"\n\
+from_float(f) - Class method that converts a float to a decimal number, exactly.\n\
+Since 0.1 is not exactly representable in binary floating point,\n\
+Decimal.from_float(0.1) is not the same as Decimal('0.1').\n\
+\n\
+ >>> Decimal.from_float(0.1)\n\
+ Decimal('0.1000000000000000055511151231257827021181583404541015625')\n\
+ >>> Decimal.from_float(float('nan'))\n\
+ Decimal('NaN')\n\
+ >>> Decimal.from_float(float('inf'))\n\
+ Decimal('Infinity')\n\
+ >>> Decimal.from_float(float('-inf'))\n\
+ Decimal('-Infinity')\n\
+\n\
+\n");
+
+PyDoc_STRVAR(doc_fma,"\n\
+fma(other, third, context=None) - Fused multiply-add. Return self*other+third\n\
+with no rounding of the intermediate product self*other.\n\
+\n\
+ >>> Decimal(2).fma(3, 5)\n\
+ Decimal('11')\n\
+\n\
+\n");
+
+PyDoc_STRVAR(doc_is_canonical,"\n\
+is_canonical() - Return True if the argument is canonical and False otherwise.\n\
+Currently, a Decimal instance is always canonical, so this operation always\n\
+returns True.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_finite,"\n\
+is_finite() - Return True if the argument is a finite number, and False if the\n\
+argument is infinite or a NaN.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_infinite,"\n\
+is_infinite() - Return True if the argument is either positive or negative\n\
+infinity and False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_nan,"\n\
+is_nan() - Return True if the argument is a (quiet or signaling) NaN and\n\
+False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_normal,"\n\
+is_normal(context=None) - Return True if the argument is a normal finite\n\
+non-zero number with an adjusted exponent greater than or equal to Emin.\n\
+Return False if the argument is zero, subnormal, infinite or a NaN.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_qnan,"\n\
+is_qnan() - Return True if the argument is a quiet NaN, and False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_signed,"\n\
+is_signed() - Return True if the argument has a negative sign and\n\
+False otherwise. Note that both zeros and NaNs can carry signs.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_snan,"\n\
+is_snan() - Return True if the argument is a signaling NaN and False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_subnormal,"\n\
+is_subnormal(context=None) - Return True if the argument is subnormal, and\n\
+False otherwise. A number is subnormal if it is non-zero, finite, and has an\n\
+adjusted exponent less than Emin.\n\
+\n");
+
+PyDoc_STRVAR(doc_is_zero,"\n\
+is_zero() - Return True if the argument is a (positive or negative) zero and\n\
+False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ln,"\n\
+ln(context=None) - Return the natural (base e) logarithm of the operand.\n\
+The function always uses the ROUND_HALF_EVEN mode and the result is\n\
+correctly rounded.\n\
+\n");
+
+PyDoc_STRVAR(doc_log10,"\n\
+log10(context=None) - Return the base ten logarithm of the operand.\n\
+The function always uses the ROUND_HALF_EVEN mode and the result is\n\
+correctly rounded.\n\
+\n");
+
+PyDoc_STRVAR(doc_logb,"\n\
+logb(context=None) - For a non-zero number, return the adjusted exponent\n\
+of the operand as a Decimal instance. If the operand is a zero, then\n\
+Decimal('-Infinity') is returned and the DivisionByZero condition is\n\
+raised. If the operand is an infinity then Decimal('Infinity') is returned.\n\
+\n");
+
+PyDoc_STRVAR(doc_logical_and,"\n\
+logical_and(other, context=None) - Return the digit-wise and of the two\n\
+(logical) operands.\n\
+\n");
+
+PyDoc_STRVAR(doc_logical_invert,"\n\
+logical_invert(context=None) - Return the digit-wise inversion of the\n\
+(logical) operand.\n\
+\n");
+
+PyDoc_STRVAR(doc_logical_or,"\n\
+logical_or(other, context=None) - Return the digit-wise or of the two\n\
+(logical) operands.\n\
+\n");
+
+PyDoc_STRVAR(doc_logical_xor,"\n\
+logical_xor(other, context=None) - Return the digit-wise exclusive or of the\n\
+two (logical) operands.\n\
+\n");
+
+PyDoc_STRVAR(doc_max,"\n\
+max(other, context=None) - Maximum of self and other. If one operand is a\n\
+quiet NaN and the other is numeric, the numeric operand is returned.\n\
+\n");
+
+PyDoc_STRVAR(doc_max_mag,"\n\
+max_mag(other, context=None) - Similar to the max() method, but the\n\
+comparison is done using the absolute values of the operands.\n\
+\n");
+
+PyDoc_STRVAR(doc_min,"\n\
+min(other, context=None) - Minimum of self and other. If one operand is a\n\
+quiet NaN and the other is numeric, the numeric operand is returned.\n\
+\n");
+
+PyDoc_STRVAR(doc_min_mag,"\n\
+min_mag(other, context=None) - Similar to the min() method, but the\n\
+comparison is done using the absolute values of the operands.\n\
+\n");
+
+PyDoc_STRVAR(doc_next_minus,"\n\
+next_minus(context=None) - Return the largest number representable in the\n\
+given context (or in the current default context if no context is given) that\n\
+is smaller than the given operand.\n\
+\n");
+
+PyDoc_STRVAR(doc_next_plus,"\n\
+next_plus(context=None) - Return the smallest number representable in the\n\
+given context (or in the current default context if no context is given) that\n\
+is larger than the given operand.\n\
+\n");
+
+PyDoc_STRVAR(doc_next_toward,"\n\
+next_toward(other, context=None) - If the two operands are unequal, return\n\
+the number closest to the first operand in the direction of the second operand.\n\
+If both operands are numerically equal, return a copy of the first operand\n\
+with the sign set to be the same as the sign of the second operand.\n\
+\n");
+
+PyDoc_STRVAR(doc_normalize,"\n\
+normalize(context=None) - Normalize the number by stripping the rightmost\n\
+trailing zeros and converting any result equal to Decimal('0') to Decimal('0e0').\n\
+Used for producing canonical values for members of an equivalence class. For\n\
+example, Decimal('32.100') and Decimal('0.321000e+2') both normalize to the\n\
+equivalent value Decimal('32.1').\n\
+\n");
+
+PyDoc_STRVAR(doc_number_class,"\n\
+number_class(context=None) - Return a string describing the class of the\n\
+operand. The returned value is one of the following ten strings:\n\
+\n\
+ * '-Infinity', indicating that the operand is negative infinity.\n\
+ * '-Normal', indicating that the operand is a negative normal number.\n\
+ * '-Subnormal', indicating that the operand is negative and subnormal.\n\
+ * '-Zero', indicating that the operand is a negative zero.\n\
+ * '+Zero', indicating that the operand is a positive zero.\n\
+ * '+Subnormal', indicating that the operand is positive and subnormal.\n\
+ * '+Normal', indicating that the operand is a positive normal number.\n\
+ * '+Infinity', indicating that the operand is positive infinity.\n\
+ * 'NaN', indicating that the operand is a quiet NaN (Not a Number).\n\
+ * 'sNaN', indicating that the operand is a signaling NaN.\n\
+\n\
+\n");
+
+PyDoc_STRVAR(doc_quantize,"\n\
+quantize(exp, rounding=None, context=None) - Return a value equal to the\n\
+first operand after rounding and having the exponent of the second operand.\n\
+\n\
+ >>> Decimal('1.41421356').quantize(Decimal('1.000'))\n\
+ Decimal('1.414')\n\
+\n\
+Unlike other operations, if the length of the coefficient after the quantize\n\
+operation would be greater than precision, then an InvalidOperation is signaled.\n\
+This guarantees that, unless there is an error condition, the quantized exponent\n\
+is always equal to that of the right-hand operand.\n\
+\n\
+Also unlike other operations, quantize never signals Underflow, even if the\n\
+result is subnormal and inexact.\n\
+\n\
+If the exponent of the second operand is larger than that of the first, then\n\
+rounding may be necessary. In this case, the rounding mode is determined by the\n\
+rounding argument if given, else by the given context argument; if neither\n\
+argument is given, the rounding mode of the current thread's context is used.\n\
+\n");
+
+PyDoc_STRVAR(doc_radix,"\n\
+radix() - Return Decimal(10), the radix (base) in which the Decimal class does\n\
+all its arithmetic. Included for compatibility with the specification.\n\
+\n");
+
+PyDoc_STRVAR(doc_remainder_near,"\n\
+remainder_near(other, context=None) - Return the remainder from dividing\n\
+self by other. This differs from self % other in that the sign of the\n\
+remainder is chosen so as to minimize its absolute value. More precisely, the\n\
+return value is self - n * other where n is the integer nearest to the exact\n\
+value of self / other, and if two integers are equally near then the even one\n\
+is chosen.\n\
+\n\
+If the result is zero then its sign will be the sign of self.\n\
+\n");
+
+PyDoc_STRVAR(doc_rotate,"\n\
+rotate(other, context=None) - Return the result of rotating the digits of the\n\
+first operand by an amount specified by the second operand. The second operand\n\
+must be an integer in the range -precision through precision. The absolute\n\
+value of the second operand gives the number of places to rotate. If the second\n\
+operand is positive then rotation is to the left; otherwise rotation is to the\n\
+right. The coefficient of the first operand is padded on the left with zeros to\n\
+length precision if necessary. The sign and exponent of the first operand are\n\
+unchanged.\n\
+\n");
+
+PyDoc_STRVAR(doc_same_quantum,"\n\
+same_quantum(other, context=None) - Test whether self and other have the\n\
+same exponent or whether both are NaN.\n\
+\n\
+This operation is unaffected by context and is quiet: no flags are changed\n\
+and no rounding is performed. As an exception, the C version may raise\n\
+InvalidOperation if the second operand cannot be converted exactly.\n\
+\n");
+
+PyDoc_STRVAR(doc_scaleb,"\n\
+scaleb(other, context=None) - Return the first operand with the exponent\n\
+adjusted the second. Equivalently, return the first operand multiplied by\n\
+10**other. The second operand must be an integer.\n\
+\n");
+
+PyDoc_STRVAR(doc_shift,"\n\
+shift(other, context=None) - Return the result of shifting the digits of\n\
+the first operand by an amount specified by the second operand. The second\n\
+operand must be an integer in the range -precision through precision. The\n\
+absolute value of the second operand gives the number of places to shift.\n\
+If the second operand is positive, then the shift is to the left; otherwise\n\
+the shift is to the right. Digits shifted into the coefficient are zeros.\n\
+The sign and exponent of the first operand are unchanged.\n\
+\n");
+
+PyDoc_STRVAR(doc_sqrt,"\n\
+sqrt(context=None) - Return the square root of the argument to full precision.\n\
+The result is correctly rounded using the ROUND_HALF_EVEN rounding mode.\n\
+\n");
+
+PyDoc_STRVAR(doc_to_eng_string,"\n\
+to_eng_string(context=None) - Convert to an engineering-type string.\n\
+Engineering notation has an exponent which is a multiple of 3, so there\n\
+are up to 3 digits left of the decimal place. For example, Decimal('123E+1')\n\
+is converted to Decimal('1.23E+3').\n\
+\n\
+The value of context.capitals determines whether the exponent sign is lower\n\
+or upper case. Otherwise, the context does not affect the operation.\n\
+\n");
+
+PyDoc_STRVAR(doc_to_integral,"\n\
+to_integral(rounding=None, context=None) - Identical to the\n\
+to_integral_value() method. The to_integral() name has been kept\n\
+for compatibility with older versions.\n\
+\n");
+
+PyDoc_STRVAR(doc_to_integral_exact,"\n\
+to_integral_exact(rounding=None, context=None) - Round to the nearest\n\
+integer, signaling Inexact or Rounded as appropriate if rounding occurs.\n\
+The rounding mode is determined by the rounding parameter if given, else\n\
+by the given context. If neither parameter is given, then the rounding mode\n\
+of the current default context is used.\n\
+\n");
+
+PyDoc_STRVAR(doc_to_integral_value,"\n\
+to_integral_value(rounding=None, context=None) - Round to the nearest\n\
+integer without signaling Inexact or Rounded. The rounding mode is determined\n\
+by the rounding parameter if given, else by the given context. If neither\n\
+parameter is given, then the rounding mode of the current default context is\n\
+used.\n\
+\n");
+
+
+/******************************************************************************/
+/* Context Object and Methods */
+/******************************************************************************/
+
+PyDoc_STRVAR(doc_context,"\n\
+The context affects almost all operations and controls rounding,\n\
+Over/Underflow, raising of exceptions and much more. A new context\n\
+can be constructed as follows:\n\
+\n\
+ >>> c = Context(prec=28, Emin=-425000000, Emax=425000000,\n\
+ ... rounding=ROUND_HALF_EVEN, capitals=1, clamp=1,\n\
+ ... traps=[InvalidOperation, DivisionByZero, Overflow],\n\
+ ... flags=[])\n\
+ >>>\n\
+\n\
+\n");
+
+#ifdef EXTRA_FUNCTIONALITY
+PyDoc_STRVAR(doc_ctx_apply,"\n\
+apply(x) - Apply self to Decimal x.\n\
+\n");
+#endif
+
+PyDoc_STRVAR(doc_ctx_clear_flags,"\n\
+clear_flags() - Reset all flags to False.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_clear_traps,"\n\
+clear_traps() - Set all traps to False.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_copy,"\n\
+copy() - Return a duplicate of the context with all flags cleared.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_copy_decimal,"\n\
+copy_decimal(x) - Return a copy of Decimal x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_create_decimal,"\n\
+create_decimal(x) - Create a new Decimal instance from x, using self as the\n\
+context. Unlike the Decimal constructor, this function observes the context\n\
+limits.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_create_decimal_from_float,"\n\
+create_decimal_from_float(f) - Create a new Decimal instance from float f.\n\
+Unlike the Decimal.from_float() class method, this function observes the\n\
+context limits.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_Etiny,"\n\
+Etiny() - Return a value equal to Emin - prec + 1, which is the minimum\n\
+exponent value for subnormal results. When underflow occurs, the exponent\n\
+is set to Etiny.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_Etop,"\n\
+Etop() - Return a value equal to Emax - prec + 1. This is the maximum exponent\n\
+if the _clamp field of the context is set to 1 (IEEE clamp mode). Etop() must\n\
+not be negative.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_abs,"\n\
+abs(x) - Return the absolute value of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_add,"\n\
+add(x, y) - Return the sum of x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_canonical,"\n\
+canonical(x) - Return a new instance of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_compare,"\n\
+compare(x, y) - Compare x and y numerically.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_compare_signal,"\n\
+compare_signal(x, y) - Compare x and y numerically. All NaNs signal.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_compare_total,"\n\
+compare_total(x, y) - Compare x and y using their abstract representation.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_compare_total_mag,"\n\
+compare_total_mag(x, y) - Compare x and y using their abstract representation,\n\
+ignoring sign.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_copy_abs,"\n\
+copy_abs(x) - Return a copy of x with the sign set to 0.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_copy_negate,"\n\
+copy_negate(x) - Return a copy of x with the sign inverted.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_copy_sign,"\n\
+copy_sign(x, y) - Copy the sign from y to x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_divide,"\n\
+divide(x, y) - Return x divided by y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_divide_int,"\n\
+divide_int(x, y) - Return x divided by y, truncated to an integer.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_divmod,"\n\
+divmod(x, y) - Return quotient and remainder of the division x / y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_exp,"\n\
+exp(x) - Return e ** x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_fma,"\n\
+fma(x, y, z) - Return x multiplied by y, plus z.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_canonical,"\n\
+is_canonical(x) - Return True if x is canonical, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_finite,"\n\
+is_finite(x) - Return True if x is finite, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_infinite,"\n\
+is_infinite(x) - Return True if x is infinite, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_nan,"\n\
+is_nan(x) - Return True if x is a qNaN or sNaN, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_normal,"\n\
+is_normal(x) - Return True if x is a normal number, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_qnan,"\n\
+is_qnan(x) - Return True if x is a quiet NaN, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_signed,"\n\
+is_signed(x) - Return True if x is negative, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_snan,"\n\
+is_snan() - Return True if x is a signaling NaN, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_subnormal,"\n\
+is_subnormal(x) - Return True if x is subnormal, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_is_zero,"\n\
+is_zero(x) - Return True if x is a zero, False otherwise.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_ln,"\n\
+ln(x) - Return the natural (base e) logarithm of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_log10,"\n\
+log10(x) - Return the base 10 logarithm of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_logb,"\n\
+logb(x) - Return the exponent of the magnitude of the operand's MSD.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_logical_and,"\n\
+logical_and(x, y) - Digit-wise and of x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_logical_invert,"\n\
+logical_invert(x) - Invert all digits of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_logical_or,"\n\
+logical_or(x, y) - Digit-wise or of x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_logical_xor,"\n\
+logical_xor(x, y) - Digit-wise xor of x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_max,"\n\
+max(x, y) - Compare the values numerically and return the maximum.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_max_mag,"\n\
+max_mag(x, y) - Compare the values numerically with their sign ignored.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_min,"\n\
+min(x, y) - Compare the values numerically and return the minimum.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_min_mag,"\n\
+min_mag(x, y) - Compare the values numerically with their sign ignored.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_minus,"\n\
+minus(x) - Minus corresponds to the unary prefix minus operator in Python,\n\
+but applies the context to the result.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_multiply,"\n\
+multiply(x, y) - Return the product of x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_next_minus,"\n\
+next_minus(x) - Return the largest representable number smaller than x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_next_plus,"\n\
+next_plus(x) - Return the smallest representable number larger than x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_next_toward,"\n\
+next_toward(x) - Return the number closest to x, in the direction towards y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_normalize,"\n\
+normalize(x) - Reduce x to its simplest form. Alias for reduce(x).\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_number_class,"\n\
+number_class(x) - Return an indication of the class of x.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_plus,"\n\
+plus(x) - Plus corresponds to the unary prefix plus operator in Python,\n\
+but applies the context to the result.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_power,"\n\
+power(x, y) - Compute x**y. If x is negative, then y must be integral.\n\
+The result will be inexact unless y is integral and the result is finite\n\
+and can be expressed exactly in 'precision' digits. In the Python version\n\
+the result is always correctly rounded, in the C version the result is\n\
+almost always correctly rounded.\n\
+\n\
+power(x, y, m) - Compute (x**y) % m. The following restrictions hold:\n\
+\n\
+ * all three arguments must be integral\n\
+ * y must be nonnegative\n\
+ * at least one of x or y must be nonzero\n\
+ * m must be nonzero and less than 10**prec in absolute value\n\
+\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_quantize,"\n\
+quantize(x, y) - Return a value equal to x (rounded), having the exponent of y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_radix,"\n\
+radix() - Return 10.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_remainder,"\n\
+remainder(x, y) - Return the remainder from integer division. The sign of\n\
+the result, if non-zero, is the same as that of the original dividend.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_remainder_near,"\n\
+remainder_near(x, y) - Return x - y * n, where n is the integer nearest the\n\
+exact value of x / y (if the result is 0 then its sign will be the sign of x).\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_rotate,"\n\
+rotate(x, y) - Return a copy of x, rotated by y places.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_same_quantum,"\n\
+same_quantum(x, y) - Return True if the two operands have the same exponent.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_scaleb,"\n\
+scaleb(x, y) - Return the first operand after adding the second value\n\
+to its exp.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_shift,"\n\
+shift(x, y) - Return a copy of x, shifted by y places.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_sqrt,"\n\
+sqrt(x) - Square root of a non-negative number to context precision.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_subtract,"\n\
+subtract(x, y) - Return the difference between x and y.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_to_eng_string,"\n\
+to_eng_string(x) - Convert a number to a string, using engineering notation.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_to_integral,"\n\
+to_integral(x) - Identical to to_integral_value(x).\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_to_integral_exact,"\n\
+to_integral_exact(x) - Round to an integer. Signal if the result is\n\
+rounded or inexact.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_to_integral_value,"\n\
+to_integral_value(x) - Round to an integer.\n\
+\n");
+
+PyDoc_STRVAR(doc_ctx_to_sci_string,"\n\
+to_sci_string(x) - Convert a number to a string using scientific notation.\n\
+\n");
+
+
+#endif /* DOCSTRINGS_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/README.txt b/Modules/_decimal/libmpdec/README.txt
new file mode 100644
index 0000000000..96b72232d2
--- /dev/null
+++ b/Modules/_decimal/libmpdec/README.txt
@@ -0,0 +1,90 @@
+
+
+libmpdec
+========
+
+libmpdec is a fast C/C++ library for correctly-rounded arbitrary precision
+decimal floating point arithmetic. It is a complete implementation of
+Mike Cowlishaw/IBM's General Decimal Arithmetic Specification.
+
+
+Files required for the Python _decimal module
+=============================================
+
+ Core files for small and medium precision arithmetic
+ ----------------------------------------------------
+
+ basearith.{c,h} -> Core arithmetic in base 10**9 or 10**19.
+ bits.h -> Portable detection of least/most significant one-bit.
+ constants.{c,h} -> Constants that are used in multiple files.
+ context.c -> Context functions.
+ io.{c,h} -> Conversions between mpd_t and ASCII strings,
+ mpd_t formatting (allows UTF-8 fill character).
+ memory.{c,h} -> Allocation handlers with overflow detection
+ and functions for switching between static
+ and dynamic mpd_t.
+ mpdecimal.{c,h} -> All (quiet) functions of the specification.
+ typearith.h -> Fast primitives for double word multiplication,
+ division etc.
+
+ Visual Studio only:
+ ~~~~~~~~~~~~~~~~~~~
+ vccompat.h -> snprintf <==> sprintf_s and similar things.
+ vcstdint.h -> stdint.h (included in VS 2010 but not in VS 2008).
+ vcdiv64.asm -> Double word division used in typearith.h. VS 2008 does
+ not allow inline asm for x64. Also, it does not provide
+ an intrinsic for double word division.
+
+ Files for bignum arithmetic:
+ ----------------------------
+
+ The following files implement the Fast Number Theoretic Transform
+ used for multiplying coefficients with more than 1024 words (see
+ mpdecimal.c: _mpd_fntmul()).
+
+ umodarith.h -> Fast low level routines for unsigned modular arithmetic.
+ numbertheory.{c,h} -> Routines for setting up the Number Theoretic Transform.
+ difradix2.{c,h} -> Decimation in frequency transform, used as the
+ "base case" by the following three files:
+
+ fnt.{c,h} -> Transform arrays up to 4096 words.
+ sixstep.{c,h} -> Transform larger arrays of length 2**n.
+ fourstep.{c,h} -> Transform larger arrays of length 3 * 2**n.
+
+ convolute.{c,h} -> Fast convolution using one of the three transform
+ functions.
+ transpose.{c,h} -> Transpositions needed for the sixstep algorithm.
+ crt.{c,h} -> Chinese Remainder Theorem: use information from three
+ transforms modulo three different primes to get the
+ final result.
+
+
+Pointers to literature, proofs and more
+=======================================
+
+ literature/
+ -----------
+
+ REFERENCES.txt -> List of relevant papers.
+ bignum.txt -> Explanation of the Fast Number Theoretic Transform (FNT).
+ fnt.py -> Verify constants used in the FNT; Python demo for the
+ O(N**2) discrete transform.
+
+ matrix-transform.txt -> Proof for the Matrix Fourier Transform used in
+ fourstep.c.
+ six-step.txt -> Show that the algorithm used in sixstep.c is
+ a variant of the Matrix Fourier Transform.
+ mulmod-64.txt -> Proof for the mulmod64 algorithm from
+ umodarith.h.
+ mulmod-ppro.txt -> Proof for the x87 FPU modular multiplication
+ from umodarith.h.
+ umodarith.lisp -> ACL2 proofs for many functions from umodarith.h.
+
+
+Library Author
+==============
+
+ Stefan Krah <skrah@bytereef.org>
+
+
+
diff --git a/Modules/_decimal/libmpdec/basearith.c b/Modules/_decimal/libmpdec/basearith.c
new file mode 100644
index 0000000000..35de6b8284
--- /dev/null
+++ b/Modules/_decimal/libmpdec/basearith.c
@@ -0,0 +1,658 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "constants.h"
+#include "memory.h"
+#include "typearith.h"
+#include "basearith.h"
+
+
+/*********************************************************************/
+/* Calculations in base MPD_RADIX */
+/*********************************************************************/
+
+
+/*
+ * Knuth, TAOCP, Volume 2, 4.3.1:
+ * w := sum of u (len m) and v (len n)
+ * n > 0 and m >= n
+ * The calling function has to handle a possible final carry.
+ */
+mpd_uint_t
+_mpd_baseadd(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n)
+{
+ mpd_uint_t s;
+ mpd_uint_t carry = 0;
+ mpd_size_t i;
+
+ assert(n > 0 && m >= n);
+
+ /* add n members of u and v */
+ for (i = 0; i < n; i++) {
+ s = u[i] + (v[i] + carry);
+ carry = (s < u[i]) | (s >= MPD_RADIX);
+ w[i] = carry ? s-MPD_RADIX : s;
+ }
+ /* if there is a carry, propagate it */
+ for (; carry && i < m; i++) {
+ s = u[i] + carry;
+ carry = (s == MPD_RADIX);
+ w[i] = carry ? 0 : s;
+ }
+ /* copy the rest of u */
+ for (; i < m; i++) {
+ w[i] = u[i];
+ }
+
+ return carry;
+}
+
+/*
+ * Add the contents of u to w. Carries are propagated further. The caller
+ * has to make sure that w is big enough.
+ */
+void
+_mpd_baseaddto(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n)
+{
+ mpd_uint_t s;
+ mpd_uint_t carry = 0;
+ mpd_size_t i;
+
+ if (n == 0) return;
+
+ /* add n members of u to w */
+ for (i = 0; i < n; i++) {
+ s = w[i] + (u[i] + carry);
+ carry = (s < w[i]) | (s >= MPD_RADIX);
+ w[i] = carry ? s-MPD_RADIX : s;
+ }
+ /* if there is a carry, propagate it */
+ for (; carry; i++) {
+ s = w[i] + carry;
+ carry = (s == MPD_RADIX);
+ w[i] = carry ? 0 : s;
+ }
+}
+
+/*
+ * Add v to w (len m). The calling function has to handle a possible
+ * final carry. Assumption: m > 0.
+ */
+mpd_uint_t
+_mpd_shortadd(mpd_uint_t *w, mpd_size_t m, mpd_uint_t v)
+{
+ mpd_uint_t s;
+ mpd_uint_t carry;
+ mpd_size_t i;
+
+ assert(m > 0);
+
+ /* add v to w */
+ s = w[0] + v;
+ carry = (s < v) | (s >= MPD_RADIX);
+ w[0] = carry ? s-MPD_RADIX : s;
+
+ /* if there is a carry, propagate it */
+ for (i = 1; carry && i < m; i++) {
+ s = w[i] + carry;
+ carry = (s == MPD_RADIX);
+ w[i] = carry ? 0 : s;
+ }
+
+ return carry;
+}
+
+/* Increment u. The calling function has to handle a possible carry. */
+mpd_uint_t
+_mpd_baseincr(mpd_uint_t *u, mpd_size_t n)
+{
+ mpd_uint_t s;
+ mpd_uint_t carry = 1;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ /* if there is a carry, propagate it */
+ for (i = 0; carry && i < n; i++) {
+ s = u[i] + carry;
+ carry = (s == MPD_RADIX);
+ u[i] = carry ? 0 : s;
+ }
+
+ return carry;
+}
+
+/*
+ * Knuth, TAOCP, Volume 2, 4.3.1:
+ * w := difference of u (len m) and v (len n).
+ * number in u >= number in v;
+ */
+void
+_mpd_basesub(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n)
+{
+ mpd_uint_t d;
+ mpd_uint_t borrow = 0;
+ mpd_size_t i;
+
+ assert(m > 0 && n > 0);
+
+ /* subtract n members of v from u */
+ for (i = 0; i < n; i++) {
+ d = u[i] - (v[i] + borrow);
+ borrow = (u[i] < d);
+ w[i] = borrow ? d + MPD_RADIX : d;
+ }
+ /* if there is a borrow, propagate it */
+ for (; borrow && i < m; i++) {
+ d = u[i] - borrow;
+ borrow = (u[i] == 0);
+ w[i] = borrow ? MPD_RADIX-1 : d;
+ }
+ /* copy the rest of u */
+ for (; i < m; i++) {
+ w[i] = u[i];
+ }
+}
+
+/*
+ * Subtract the contents of u from w. w is larger than u. Borrows are
+ * propagated further, but eventually w can absorb the final borrow.
+ */
+void
+_mpd_basesubfrom(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n)
+{
+ mpd_uint_t d;
+ mpd_uint_t borrow = 0;
+ mpd_size_t i;
+
+ if (n == 0) return;
+
+ /* subtract n members of u from w */
+ for (i = 0; i < n; i++) {
+ d = w[i] - (u[i] + borrow);
+ borrow = (w[i] < d);
+ w[i] = borrow ? d + MPD_RADIX : d;
+ }
+ /* if there is a borrow, propagate it */
+ for (; borrow; i++) {
+ d = w[i] - borrow;
+ borrow = (w[i] == 0);
+ w[i] = borrow ? MPD_RADIX-1 : d;
+ }
+}
+
+/* w := product of u (len n) and v (single word) */
+void
+_mpd_shortmul(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n, mpd_uint_t v)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t carry = 0;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ for (i=0; i < n; i++) {
+
+ _mpd_mul_words(&hi, &lo, u[i], v);
+ lo = carry + lo;
+ if (lo < carry) hi++;
+
+ _mpd_div_words_r(&carry, &w[i], hi, lo);
+ }
+ w[i] = carry;
+}
+
+/*
+ * Knuth, TAOCP, Volume 2, 4.3.1:
+ * w := product of u (len m) and v (len n)
+ * w must be initialized to zero
+ */
+void
+_mpd_basemul(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t carry;
+ mpd_size_t i, j;
+
+ assert(m > 0 && n > 0);
+
+ for (j=0; j < n; j++) {
+ carry = 0;
+ for (i=0; i < m; i++) {
+
+ _mpd_mul_words(&hi, &lo, u[i], v[j]);
+ lo = w[i+j] + lo;
+ if (lo < w[i+j]) hi++;
+ lo = carry + lo;
+ if (lo < carry) hi++;
+
+ _mpd_div_words_r(&carry, &w[i+j], hi, lo);
+ }
+ w[j+m] = carry;
+ }
+}
+
+/*
+ * Knuth, TAOCP Volume 2, 4.3.1, exercise 16:
+ * w := quotient of u (len n) divided by a single word v
+ */
+mpd_uint_t
+_mpd_shortdiv(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n, mpd_uint_t v)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t rem = 0;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ for (i=n-1; i != MPD_SIZE_MAX; i--) {
+
+ _mpd_mul_words(&hi, &lo, rem, MPD_RADIX);
+ lo = u[i] + lo;
+ if (lo < u[i]) hi++;
+
+ _mpd_div_words(&w[i], &rem, hi, lo, v);
+ }
+
+ return rem;
+}
+
+/*
+ * Knuth, TAOCP Volume 2, 4.3.1:
+ * q, r := quotient and remainder of uconst (len nplusm)
+ * divided by vconst (len n)
+ * nplusm >= n
+ *
+ * If r is not NULL, r will contain the remainder. If r is NULL, the
+ * return value indicates if there is a remainder: 1 for true, 0 for
+ * false. A return value of -1 indicates an error.
+ */
+int
+_mpd_basedivmod(mpd_uint_t *q, mpd_uint_t *r,
+ const mpd_uint_t *uconst, const mpd_uint_t *vconst,
+ mpd_size_t nplusm, mpd_size_t n)
+{
+ mpd_uint_t ustatic[MPD_MINALLOC_MAX];
+ mpd_uint_t vstatic[MPD_MINALLOC_MAX];
+ mpd_uint_t *u = ustatic;
+ mpd_uint_t *v = vstatic;
+ mpd_uint_t d, qhat, rhat, w2[2];
+ mpd_uint_t hi, lo, x;
+ mpd_uint_t carry;
+ mpd_size_t i, j, m;
+ int retval = 0;
+
+ assert(n > 1 && nplusm >= n);
+ m = sub_size_t(nplusm, n);
+
+ /* D1: normalize */
+ d = MPD_RADIX / (vconst[n-1] + 1);
+
+ if (nplusm >= MPD_MINALLOC_MAX) {
+ if ((u = mpd_alloc(nplusm+1, sizeof *u)) == NULL) {
+ return -1;
+ }
+ }
+ if (n >= MPD_MINALLOC_MAX) {
+ if ((v = mpd_alloc(n+1, sizeof *v)) == NULL) {
+ mpd_free(u);
+ return -1;
+ }
+ }
+
+ _mpd_shortmul(u, uconst, nplusm, d);
+ _mpd_shortmul(v, vconst, n, d);
+
+ /* D2: loop */
+ for (j=m; j != MPD_SIZE_MAX; j--) {
+
+ /* D3: calculate qhat and rhat */
+ rhat = _mpd_shortdiv(w2, u+j+n-1, 2, v[n-1]);
+ qhat = w2[1] * MPD_RADIX + w2[0];
+
+ while (1) {
+ if (qhat < MPD_RADIX) {
+ _mpd_singlemul(w2, qhat, v[n-2]);
+ if (w2[1] <= rhat) {
+ if (w2[1] != rhat || w2[0] <= u[j+n-2]) {
+ break;
+ }
+ }
+ }
+ qhat -= 1;
+ rhat += v[n-1];
+ if (rhat < v[n-1] || rhat >= MPD_RADIX) {
+ break;
+ }
+ }
+ /* D4: multiply and subtract */
+ carry = 0;
+ for (i=0; i <= n; i++) {
+
+ _mpd_mul_words(&hi, &lo, qhat, v[i]);
+
+ lo = carry + lo;
+ if (lo < carry) hi++;
+
+ _mpd_div_words_r(&hi, &lo, hi, lo);
+
+ x = u[i+j] - lo;
+ carry = (u[i+j] < x);
+ u[i+j] = carry ? x+MPD_RADIX : x;
+ carry += hi;
+ }
+ q[j] = qhat;
+ /* D5: test remainder */
+ if (carry) {
+ q[j] -= 1;
+ /* D6: add back */
+ (void)_mpd_baseadd(u+j, u+j, v, n+1, n);
+ }
+ }
+
+ /* D8: unnormalize */
+ if (r != NULL) {
+ _mpd_shortdiv(r, u, n, d);
+ /* we are not interested in the return value here */
+ retval = 0;
+ }
+ else {
+ retval = !_mpd_isallzero(u, n);
+ }
+
+
+if (u != ustatic) mpd_free(u);
+if (v != vstatic) mpd_free(v);
+return retval;
+}
+
+/*
+ * Left shift of src by 'shift' digits; src may equal dest.
+ *
+ * dest := area of n mpd_uint_t with space for srcdigits+shift digits.
+ * src := coefficient with length m.
+ *
+ * The case splits in the function are non-obvious. The following
+ * equations might help:
+ *
+ * Let msdigits denote the number of digits in the most significant
+ * word of src. Then 1 <= msdigits <= rdigits.
+ *
+ * 1) shift = q * rdigits + r
+ * 2) srcdigits = qsrc * rdigits + msdigits
+ * 3) destdigits = shift + srcdigits
+ * = q * rdigits + r + qsrc * rdigits + msdigits
+ * = q * rdigits + (qsrc * rdigits + (r + msdigits))
+ *
+ * The result has q zero words, followed by the coefficient that
+ * is left-shifted by r. The case r == 0 is trivial. For r > 0, it
+ * is important to keep in mind that we always read m source words,
+ * but write m+1 destination words if r + msdigits > rdigits, m words
+ * otherwise.
+ */
+void
+_mpd_baseshiftl(mpd_uint_t *dest, mpd_uint_t *src, mpd_size_t n, mpd_size_t m,
+ mpd_size_t shift)
+{
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__)
+ /* spurious uninitialized warnings */
+ mpd_uint_t l=l, lprev=lprev, h=h;
+#else
+ mpd_uint_t l, lprev, h;
+#endif
+ mpd_uint_t q, r;
+ mpd_uint_t ph;
+
+ assert(m > 0 && n >= m);
+
+ _mpd_div_word(&q, &r, (mpd_uint_t)shift, MPD_RDIGITS);
+
+ if (r != 0) {
+
+ ph = mpd_pow10[r];
+
+ --m; --n;
+ _mpd_divmod_pow10(&h, &lprev, src[m--], MPD_RDIGITS-r);
+ if (h != 0) { /* r + msdigits > rdigits <==> h != 0 */
+ dest[n--] = h;
+ }
+ /* write m-1 shifted words */
+ for (; m != MPD_SIZE_MAX; m--,n--) {
+ _mpd_divmod_pow10(&h, &l, src[m], MPD_RDIGITS-r);
+ dest[n] = ph * lprev + h;
+ lprev = l;
+ }
+ /* write least significant word */
+ dest[q] = ph * lprev;
+ }
+ else {
+ while (--m != MPD_SIZE_MAX) {
+ dest[m+q] = src[m];
+ }
+ }
+
+ mpd_uint_zero(dest, q);
+}
+
+/*
+ * Right shift of src by 'shift' digits; src may equal dest.
+ * Assumption: srcdigits-shift > 0.
+ *
+ * dest := area with space for srcdigits-shift digits.
+ * src := coefficient with length 'slen'.
+ *
+ * The case splits in the function rely on the following equations:
+ *
+ * Let msdigits denote the number of digits in the most significant
+ * word of src. Then 1 <= msdigits <= rdigits.
+ *
+ * 1) shift = q * rdigits + r
+ * 2) srcdigits = qsrc * rdigits + msdigits
+ * 3) destdigits = srcdigits - shift
+ * = qsrc * rdigits + msdigits - (q * rdigits + r)
+ * = (qsrc - q) * rdigits + msdigits - r
+ *
+ * Since destdigits > 0 and 1 <= msdigits <= rdigits:
+ *
+ * 4) qsrc >= q
+ * 5) qsrc == q ==> msdigits > r
+ *
+ * The result has slen-q words if msdigits > r, slen-q-1 words otherwise.
+ */
+mpd_uint_t
+_mpd_baseshiftr(mpd_uint_t *dest, mpd_uint_t *src, mpd_size_t slen,
+ mpd_size_t shift)
+{
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__)
+ /* spurious uninitialized warnings */
+ mpd_uint_t l=l, h=h, hprev=hprev; /* low, high, previous high */
+#else
+ mpd_uint_t l, h, hprev; /* low, high, previous high */
+#endif
+ mpd_uint_t rnd, rest; /* rounding digit, rest */
+ mpd_uint_t q, r;
+ mpd_size_t i, j;
+ mpd_uint_t ph;
+
+ assert(slen > 0);
+
+ _mpd_div_word(&q, &r, (mpd_uint_t)shift, MPD_RDIGITS);
+
+ rnd = rest = 0;
+ if (r != 0) {
+
+ ph = mpd_pow10[MPD_RDIGITS-r];
+
+ _mpd_divmod_pow10(&hprev, &rest, src[q], r);
+ _mpd_divmod_pow10(&rnd, &rest, rest, r-1);
+
+ if (rest == 0 && q > 0) {
+ rest = !_mpd_isallzero(src, q);
+ }
+ /* write slen-q-1 words */
+ for (j=0,i=q+1; i<slen; i++,j++) {
+ _mpd_divmod_pow10(&h, &l, src[i], r);
+ dest[j] = ph * l + hprev;
+ hprev = h;
+ }
+ /* write most significant word */
+ if (hprev != 0) { /* always the case if slen==q-1 */
+ dest[j] = hprev;
+ }
+ }
+ else {
+ if (q > 0) {
+ _mpd_divmod_pow10(&rnd, &rest, src[q-1], MPD_RDIGITS-1);
+ /* is there any non-zero digit below rnd? */
+ if (rest == 0) rest = !_mpd_isallzero(src, q-1);
+ }
+ for (j = 0; j < slen-q; j++) {
+ dest[j] = src[q+j];
+ }
+ }
+
+ /* 0-4 ==> rnd+rest < 0.5 */
+ /* 5 ==> rnd+rest == 0.5 */
+ /* 6-9 ==> rnd+rest > 0.5 */
+ return (rnd == 0 || rnd == 5) ? rnd + !!rest : rnd;
+}
+
+
+/*********************************************************************/
+/* Calculations in base b */
+/*********************************************************************/
+
+/*
+ * Add v to w (len m). The calling function has to handle a possible
+ * final carry. Assumption: m > 0.
+ */
+mpd_uint_t
+_mpd_shortadd_b(mpd_uint_t *w, mpd_size_t m, mpd_uint_t v, mpd_uint_t b)
+{
+ mpd_uint_t s;
+ mpd_uint_t carry;
+ mpd_size_t i;
+
+ assert(m > 0);
+
+ /* add v to w */
+ s = w[0] + v;
+ carry = (s < v) | (s >= b);
+ w[0] = carry ? s-b : s;
+
+ /* if there is a carry, propagate it */
+ for (i = 1; carry && i < m; i++) {
+ s = w[i] + carry;
+ carry = (s == b);
+ w[i] = carry ? 0 : s;
+ }
+
+ return carry;
+}
+
+/* w := product of u (len n) and v (single word). Return carry. */
+mpd_uint_t
+_mpd_shortmul_c(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n, mpd_uint_t v)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t carry = 0;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ for (i=0; i < n; i++) {
+
+ _mpd_mul_words(&hi, &lo, u[i], v);
+ lo = carry + lo;
+ if (lo < carry) hi++;
+
+ _mpd_div_words_r(&carry, &w[i], hi, lo);
+ }
+
+ return carry;
+}
+
+/* w := product of u (len n) and v (single word) */
+mpd_uint_t
+_mpd_shortmul_b(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v, mpd_uint_t b)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t carry = 0;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ for (i=0; i < n; i++) {
+
+ _mpd_mul_words(&hi, &lo, u[i], v);
+ lo = carry + lo;
+ if (lo < carry) hi++;
+
+ _mpd_div_words(&carry, &w[i], hi, lo, b);
+ }
+
+ return carry;
+}
+
+/*
+ * Knuth, TAOCP Volume 2, 4.3.1, exercise 16:
+ * w := quotient of u (len n) divided by a single word v
+ */
+mpd_uint_t
+_mpd_shortdiv_b(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v, mpd_uint_t b)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t rem = 0;
+ mpd_size_t i;
+
+ assert(n > 0);
+
+ for (i=n-1; i != MPD_SIZE_MAX; i--) {
+
+ _mpd_mul_words(&hi, &lo, rem, b);
+ lo = u[i] + lo;
+ if (lo < u[i]) hi++;
+
+ _mpd_div_words(&w[i], &rem, hi, lo, v);
+ }
+
+ return rem;
+}
+
+
+
diff --git a/Modules/_decimal/libmpdec/basearith.h b/Modules/_decimal/libmpdec/basearith.h
new file mode 100644
index 0000000000..976358a110
--- /dev/null
+++ b/Modules/_decimal/libmpdec/basearith.h
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef BASEARITH_H
+#define BASEARITH_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include "typearith.h"
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+mpd_uint_t _mpd_baseadd(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n);
+void _mpd_baseaddto(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n);
+mpd_uint_t _mpd_shortadd(mpd_uint_t *w, mpd_size_t m, mpd_uint_t v);
+mpd_uint_t _mpd_shortadd_b(mpd_uint_t *w, mpd_size_t m, mpd_uint_t v,
+ mpd_uint_t b);
+mpd_uint_t _mpd_baseincr(mpd_uint_t *u, mpd_size_t n);
+void _mpd_basesub(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n);
+void _mpd_basesubfrom(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n);
+void _mpd_basemul(mpd_uint_t *w, const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t m, mpd_size_t n);
+void _mpd_shortmul(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v);
+mpd_uint_t _mpd_shortmul_c(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v);
+mpd_uint_t _mpd_shortmul_b(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v, mpd_uint_t b);
+mpd_uint_t _mpd_shortdiv(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v);
+mpd_uint_t _mpd_shortdiv_b(mpd_uint_t *w, const mpd_uint_t *u, mpd_size_t n,
+ mpd_uint_t v, mpd_uint_t b);
+int _mpd_basedivmod(mpd_uint_t *q, mpd_uint_t *r, const mpd_uint_t *uconst,
+ const mpd_uint_t *vconst, mpd_size_t nplusm, mpd_size_t n);
+void _mpd_baseshiftl(mpd_uint_t *dest, mpd_uint_t *src, mpd_size_t n,
+ mpd_size_t m, mpd_size_t shift);
+mpd_uint_t _mpd_baseshiftr(mpd_uint_t *dest, mpd_uint_t *src, mpd_size_t slen,
+ mpd_size_t shift);
+
+
+
+#ifdef CONFIG_64
+extern const mpd_uint_t mprime_rdx;
+
+/*
+ * Algorithm from: Division by Invariant Integers using Multiplication,
+ * T. Granlund and P. L. Montgomery, Proceedings of the SIGPLAN '94
+ * Conference on Programming Language Design and Implementation.
+ *
+ * http://gmplib.org/~tege/divcnst-pldi94.pdf
+ *
+ * Variables from the paper and their translations (See section 8):
+ *
+ * N := 64
+ * d := MPD_RADIX
+ * l := 64
+ * m' := floor((2**(64+64) - 1)/MPD_RADIX) - 2**64
+ *
+ * Since N-l == 0:
+ *
+ * dnorm := d
+ * n2 := hi
+ * n10 := lo
+ *
+ * ACL2 proof: mpd-div-words-r-correct
+ */
+static inline void
+_mpd_div_words_r(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo)
+{
+ mpd_uint_t n_adj, h, l, t;
+ mpd_uint_t n1_neg;
+
+ /* n1_neg = if lo >= 2**63 then MPD_UINT_MAX else 0 */
+ n1_neg = (lo & (1ULL<<63)) ? MPD_UINT_MAX : 0;
+ /* n_adj = if lo >= 2**63 then lo+MPD_RADIX else lo */
+ n_adj = lo + (n1_neg & MPD_RADIX);
+
+ /* (h, l) = if lo >= 2**63 then m'*(hi+1) else m'*hi */
+ _mpd_mul_words(&h, &l, mprime_rdx, hi-n1_neg);
+ l = l + n_adj;
+ if (l < n_adj) h++;
+ t = h + hi;
+ /* At this point t == qest, with q == qest or q == qest+1:
+ * 1) 0 <= 2**64*hi + lo - qest*MPD_RADIX < 2*MPD_RADIX
+ */
+
+ /* t = 2**64-1 - qest = 2**64 - (qest+1) */
+ t = MPD_UINT_MAX - t;
+
+ /* (h, l) = 2**64*MPD_RADIX - (qest+1)*MPD_RADIX */
+ _mpd_mul_words(&h, &l, t, MPD_RADIX);
+ l = l + lo;
+ if (l < lo) h++;
+ h += hi;
+ h -= MPD_RADIX;
+ /* (h, l) = 2**64*hi + lo - (qest+1)*MPD_RADIX (mod 2**128)
+ * Case q == qest+1:
+ * a) h == 0, l == r
+ * b) q := h - t == qest+1
+ * c) r := l
+ * Case q == qest:
+ * a) h == MPD_UINT_MAX, l == 2**64-(MPD_RADIX-r)
+ * b) q := h - t == qest
+ * c) r := l + MPD_RADIX = r
+ */
+
+ *q = (h - t);
+ *r = l + (MPD_RADIX & h);
+}
+#else
+static inline void
+_mpd_div_words_r(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo)
+{
+ _mpd_div_words(q, r, hi, lo, MPD_RADIX);
+}
+#endif
+
+
+/* Multiply two single base MPD_RADIX words, store result in array w[2]. */
+static inline void
+_mpd_singlemul(mpd_uint_t w[2], mpd_uint_t u, mpd_uint_t v)
+{
+ mpd_uint_t hi, lo;
+
+ _mpd_mul_words(&hi, &lo, u, v);
+ _mpd_div_words_r(&w[1], &w[0], hi, lo);
+}
+
+/* Multiply u (len 2) and v (len m, 1 <= m <= 2). */
+static inline void
+_mpd_mul_2_le2(mpd_uint_t w[4], mpd_uint_t u[2], mpd_uint_t v[2], mpd_ssize_t m)
+{
+ mpd_uint_t hi, lo;
+
+ _mpd_mul_words(&hi, &lo, u[0], v[0]);
+ _mpd_div_words_r(&w[1], &w[0], hi, lo);
+
+ _mpd_mul_words(&hi, &lo, u[1], v[0]);
+ lo = w[1] + lo;
+ if (lo < w[1]) hi++;
+ _mpd_div_words_r(&w[2], &w[1], hi, lo);
+ if (m == 1) return;
+
+ _mpd_mul_words(&hi, &lo, u[0], v[1]);
+ lo = w[1] + lo;
+ if (lo < w[1]) hi++;
+ _mpd_div_words_r(&w[3], &w[1], hi, lo);
+
+ _mpd_mul_words(&hi, &lo, u[1], v[1]);
+ lo = w[2] + lo;
+ if (lo < w[2]) hi++;
+ lo = w[3] + lo;
+ if (lo < w[3]) hi++;
+ _mpd_div_words_r(&w[3], &w[2], hi, lo);
+}
+
+
+/*
+ * Test if all words from data[len-1] to data[0] are zero. If len is 0, nothing
+ * is tested and the coefficient is regarded as "all zero".
+ */
+static inline int
+_mpd_isallzero(const mpd_uint_t *data, mpd_ssize_t len)
+{
+ while (--len >= 0) {
+ if (data[len] != 0) return 0;
+ }
+ return 1;
+}
+
+/*
+ * Test if all full words from data[len-1] to data[0] are MPD_RADIX-1
+ * (all nines). Return true if len == 0.
+ */
+static inline int
+_mpd_isallnine(const mpd_uint_t *data, mpd_ssize_t len)
+{
+ while (--len >= 0) {
+ if (data[len] != MPD_RADIX-1) return 0;
+ }
+ return 1;
+}
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif /* BASEARITH_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/bits.h b/Modules/_decimal/libmpdec/bits.h
new file mode 100644
index 0000000000..b5eaa24976
--- /dev/null
+++ b/Modules/_decimal/libmpdec/bits.h
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef BITS_H
+#define BITS_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Check if n is a power of 2. */
+static inline int
+ispower2(mpd_size_t n)
+{
+ return n != 0 && (n & (n-1)) == 0;
+}
+
+#if defined(ANSI)
+/*
+ * Return the most significant bit position of n from 0 to 31 (63).
+ * Assumptions: n != 0.
+ */
+static inline int
+mpd_bsr(mpd_size_t n)
+{
+ int pos = 0;
+ mpd_size_t tmp;
+
+#ifdef CONFIG_64
+ tmp = n >> 32;
+ if (tmp != 0) { n = tmp; pos += 32; }
+#endif
+ tmp = n >> 16;
+ if (tmp != 0) { n = tmp; pos += 16; }
+ tmp = n >> 8;
+ if (tmp != 0) { n = tmp; pos += 8; }
+ tmp = n >> 4;
+ if (tmp != 0) { n = tmp; pos += 4; }
+ tmp = n >> 2;
+ if (tmp != 0) { n = tmp; pos += 2; }
+ tmp = n >> 1;
+ if (tmp != 0) { n = tmp; pos += 1; }
+
+ return pos + (int)n - 1;
+}
+
+/*
+ * Return the least significant bit position of n from 0 to 31 (63).
+ * Assumptions: n != 0.
+ */
+static inline int
+mpd_bsf(mpd_size_t n)
+{
+ int pos;
+
+#ifdef CONFIG_64
+ pos = 63;
+ if (n & 0x00000000FFFFFFFFULL) { pos -= 32; } else { n >>= 32; }
+ if (n & 0x000000000000FFFFULL) { pos -= 16; } else { n >>= 16; }
+ if (n & 0x00000000000000FFULL) { pos -= 8; } else { n >>= 8; }
+ if (n & 0x000000000000000FULL) { pos -= 4; } else { n >>= 4; }
+ if (n & 0x0000000000000003ULL) { pos -= 2; } else { n >>= 2; }
+ if (n & 0x0000000000000001ULL) { pos -= 1; }
+#else
+ pos = 31;
+ if (n & 0x000000000000FFFFUL) { pos -= 16; } else { n >>= 16; }
+ if (n & 0x00000000000000FFUL) { pos -= 8; } else { n >>= 8; }
+ if (n & 0x000000000000000FUL) { pos -= 4; } else { n >>= 4; }
+ if (n & 0x0000000000000003UL) { pos -= 2; } else { n >>= 2; }
+ if (n & 0x0000000000000001UL) { pos -= 1; }
+#endif
+ return pos;
+}
+/* END ANSI */
+
+#elif defined(ASM)
+/*
+ * Bit scan reverse. Assumptions: a != 0.
+ */
+static inline int
+mpd_bsr(mpd_size_t a)
+{
+ mpd_size_t retval;
+
+ __asm__ (
+#ifdef CONFIG_64
+ "bsrq %1, %0\n\t"
+#else
+ "bsr %1, %0\n\t"
+#endif
+ :"=r" (retval)
+ :"r" (a)
+ :"cc"
+ );
+
+ return (int)retval;
+}
+
+/*
+ * Bit scan forward. Assumptions: a != 0.
+ */
+static inline int
+mpd_bsf(mpd_size_t a)
+{
+ mpd_size_t retval;
+
+ __asm__ (
+#ifdef CONFIG_64
+ "bsfq %1, %0\n\t"
+#else
+ "bsf %1, %0\n\t"
+#endif
+ :"=r" (retval)
+ :"r" (a)
+ :"cc"
+ );
+
+ return (int)retval;
+}
+/* END ASM */
+
+#elif defined(MASM)
+#include <intrin.h>
+/*
+ * Bit scan reverse. Assumptions: a != 0.
+ */
+static inline int __cdecl
+mpd_bsr(mpd_size_t a)
+{
+ unsigned long retval;
+
+#ifdef CONFIG_64
+ _BitScanReverse64(&retval, a);
+#else
+ _BitScanReverse(&retval, a);
+#endif
+
+ return (int)retval;
+}
+
+/*
+ * Bit scan forward. Assumptions: a != 0.
+ */
+static inline int __cdecl
+mpd_bsf(mpd_size_t a)
+{
+ unsigned long retval;
+
+#ifdef CONFIG_64
+ _BitScanForward64(&retval, a);
+#else
+ _BitScanForward(&retval, a);
+#endif
+
+ return (int)retval;
+}
+/* END MASM (_MSC_VER) */
+#else
+ #error "missing preprocessor definitions"
+#endif /* BSR/BSF */
+
+
+#endif /* BITS_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/constants.c b/Modules/_decimal/libmpdec/constants.c
new file mode 100644
index 0000000000..2c2d5ea481
--- /dev/null
+++ b/Modules/_decimal/libmpdec/constants.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include "constants.h"
+
+
+#if defined(CONFIG_64)
+
+ /* number-theory.c */
+ const mpd_uint_t mpd_moduli[3] = {
+ 18446744069414584321ULL, 18446744056529682433ULL, 18446742974197923841ULL
+ };
+ const mpd_uint_t mpd_roots[3] = {7ULL, 10ULL, 19ULL};
+
+ /* crt.c */
+ const mpd_uint_t INV_P1_MOD_P2 = 18446744055098026669ULL;
+ const mpd_uint_t INV_P1P2_MOD_P3 = 287064143708160ULL;
+ const mpd_uint_t LH_P1P2 = 18446744052234715137ULL; /* (P1*P2) % 2^64 */
+ const mpd_uint_t UH_P1P2 = 18446744052234715141ULL; /* (P1*P2) / 2^64 */
+
+ /* transpose.c */
+ const mpd_size_t mpd_bits[64] = {
+ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,
+ 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
+ 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824,
+ 2147483648ULL, 4294967296ULL, 8589934592ULL, 17179869184ULL, 34359738368ULL,
+ 68719476736ULL, 137438953472ULL, 274877906944ULL, 549755813888ULL,
+ 1099511627776ULL, 2199023255552ULL, 4398046511104, 8796093022208ULL,
+ 17592186044416ULL, 35184372088832ULL, 70368744177664ULL, 140737488355328ULL,
+ 281474976710656ULL, 562949953421312ULL, 1125899906842624ULL,
+ 2251799813685248ULL, 4503599627370496ULL, 9007199254740992ULL,
+ 18014398509481984ULL, 36028797018963968ULL, 72057594037927936ULL,
+ 144115188075855872ULL, 288230376151711744ULL, 576460752303423488ULL,
+ 1152921504606846976ULL, 2305843009213693952ULL, 4611686018427387904ULL,
+ 9223372036854775808ULL
+ };
+
+ /* mpdecimal.c */
+ const mpd_uint_t mpd_pow10[MPD_RDIGITS+1] = {
+ 1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,
+ 10000000000ULL,100000000000ULL,1000000000000ULL,10000000000000ULL,
+ 100000000000000ULL,1000000000000000ULL,10000000000000000ULL,
+ 100000000000000000ULL,1000000000000000000ULL,10000000000000000000ULL
+ };
+
+ /* magic number for constant division by MPD_RADIX */
+ const mpd_uint_t mprime_rdx = 15581492618384294730ULL;
+
+#elif defined(CONFIG_32)
+
+ /* number-theory.c */
+ const mpd_uint_t mpd_moduli[3] = {2113929217UL, 2013265921UL, 1811939329UL};
+ const mpd_uint_t mpd_roots[3] = {5UL, 31UL, 13UL};
+
+ /* PentiumPro modular multiplication: These constants have to be loaded as
+ * 80 bit long doubles, which are not supported by certain compilers. */
+ const uint32_t mpd_invmoduli[3][3] = {
+ {4293885170U, 2181570688U, 16352U}, /* ((long double) 1 / 2113929217UL) */
+ {1698898177U, 2290649223U, 16352U}, /* ((long double) 1 / 2013265921UL) */
+ {2716021846U, 2545165803U, 16352U} /* ((long double) 1 / 1811939329UL) */
+ };
+
+ const float MPD_TWO63 = 9223372036854775808.0; /* 2^63 */
+
+ /* crt.c */
+ const mpd_uint_t INV_P1_MOD_P2 = 2013265901UL;
+ const mpd_uint_t INV_P1P2_MOD_P3 = 54UL;
+ const mpd_uint_t LH_P1P2 = 4127195137UL; /* (P1*P2) % 2^32 */
+ const mpd_uint_t UH_P1P2 = 990904320UL; /* (P1*P2) / 2^32 */
+
+ /* transpose.c */
+ const mpd_size_t mpd_bits[32] = {
+ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,
+ 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
+ 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824,
+ 2147483648UL
+ };
+
+ /* mpdecimal.c */
+ const mpd_uint_t mpd_pow10[MPD_RDIGITS+1] = {
+ 1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000
+ };
+
+#else
+ #error "CONFIG_64 or CONFIG_32 must be defined."
+#endif
+
+const char *mpd_round_string[MPD_ROUND_GUARD] = {
+ "ROUND_UP", /* round away from 0 */
+ "ROUND_DOWN", /* round toward 0 (truncate) */
+ "ROUND_CEILING", /* round toward +infinity */
+ "ROUND_FLOOR", /* round toward -infinity */
+ "ROUND_HALF_UP", /* 0.5 is rounded up */
+ "ROUND_HALF_DOWN", /* 0.5 is rounded down */
+ "ROUND_HALF_EVEN", /* 0.5 is rounded to even */
+ "ROUND_05UP", /* round zero or five away from 0 */
+ "ROUND_TRUNC", /* truncate, but set infinity */
+};
+
+const char *mpd_clamp_string[MPD_CLAMP_GUARD] = {
+ "CLAMP_DEFAULT",
+ "CLAMP_IEEE_754"
+};
+
+
diff --git a/Modules/_decimal/libmpdec/constants.h b/Modules/_decimal/libmpdec/constants.h
new file mode 100644
index 0000000000..c0febfc877
--- /dev/null
+++ b/Modules/_decimal/libmpdec/constants.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+
+#include "mpdecimal.h"
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+/* choice of optimized functions */
+#if defined(CONFIG_64)
+/* x64 */
+ #define MULMOD(a, b) x64_mulmod(a, b, umod)
+ #define MULMOD2C(a0, a1, w) x64_mulmod2c(a0, a1, w, umod)
+ #define MULMOD2(a0, b0, a1, b1) x64_mulmod2(a0, b0, a1, b1, umod)
+ #define POWMOD(base, exp) x64_powmod(base, exp, umod)
+ #define SETMODULUS(modnum) std_setmodulus(modnum, &umod)
+ #define SIZE3_NTT(x0, x1, x2, w3table) std_size3_ntt(x0, x1, x2, w3table, umod)
+#elif defined(PPRO)
+/* PentiumPro (or later) gcc inline asm */
+ #define MULMOD(a, b) ppro_mulmod(a, b, &dmod, dinvmod)
+ #define MULMOD2C(a0, a1, w) ppro_mulmod2c(a0, a1, w, &dmod, dinvmod)
+ #define MULMOD2(a0, b0, a1, b1) ppro_mulmod2(a0, b0, a1, b1, &dmod, dinvmod)
+ #define POWMOD(base, exp) ppro_powmod(base, exp, &dmod, dinvmod)
+ #define SETMODULUS(modnum) ppro_setmodulus(modnum, &umod, &dmod, dinvmod)
+ #define SIZE3_NTT(x0, x1, x2, w3table) ppro_size3_ntt(x0, x1, x2, w3table, umod, &dmod, dinvmod)
+#else
+ /* ANSI C99 */
+ #define MULMOD(a, b) std_mulmod(a, b, umod)
+ #define MULMOD2C(a0, a1, w) std_mulmod2c(a0, a1, w, umod)
+ #define MULMOD2(a0, b0, a1, b1) std_mulmod2(a0, b0, a1, b1, umod)
+ #define POWMOD(base, exp) std_powmod(base, exp, umod)
+ #define SETMODULUS(modnum) std_setmodulus(modnum, &umod)
+ #define SIZE3_NTT(x0, x1, x2, w3table) std_size3_ntt(x0, x1, x2, w3table, umod)
+#endif
+
+/* PentiumPro (or later) gcc inline asm */
+extern const float MPD_TWO63;
+extern const uint32_t mpd_invmoduli[3][3];
+
+enum {P1, P2, P3};
+
+extern const mpd_uint_t mpd_moduli[];
+extern const mpd_uint_t mpd_roots[];
+extern const mpd_size_t mpd_bits[];
+extern const mpd_uint_t mpd_pow10[];
+
+extern const mpd_uint_t INV_P1_MOD_P2;
+extern const mpd_uint_t INV_P1P2_MOD_P3;
+extern const mpd_uint_t LH_P1P2;
+extern const mpd_uint_t UH_P1P2;
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif /* CONSTANTS_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/context.c b/Modules/_decimal/libmpdec/context.c
new file mode 100644
index 0000000000..24c7b890c1
--- /dev/null
+++ b/Modules/_decimal/libmpdec/context.c
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+
+
+void
+mpd_dflt_traphandler(mpd_context_t *ctx UNUSED)
+{
+ raise(SIGFPE);
+}
+
+void (* mpd_traphandler)(mpd_context_t *) = mpd_dflt_traphandler;
+
+
+/* Set guaranteed minimum number of coefficient words. The function may
+ be used once at program start. Setting MPD_MINALLOC to out-of-bounds
+ values is a catastrophic error, so in that case the function exits rather
+ than relying on the user to check a return value. */
+void
+mpd_setminalloc(mpd_ssize_t n)
+{
+ static int minalloc_is_set = 0;
+
+ if (minalloc_is_set) {
+ mpd_err_warn("mpd_setminalloc: ignoring request to set "
+ "MPD_MINALLOC a second time\n");
+ return;
+ }
+ if (n < MPD_MINALLOC_MIN || n > MPD_MINALLOC_MAX) {
+ mpd_err_fatal("illegal value for MPD_MINALLOC"); /* GCOV_NOT_REACHED */
+ }
+ MPD_MINALLOC = n;
+ minalloc_is_set = 1;
+}
+
+void
+mpd_init(mpd_context_t *ctx, mpd_ssize_t prec)
+{
+ mpd_ssize_t ideal_minalloc;
+
+ mpd_defaultcontext(ctx);
+
+ if (!mpd_qsetprec(ctx, prec)) {
+ mpd_addstatus_raise(ctx, MPD_Invalid_context);
+ return;
+ }
+
+ ideal_minalloc = 2 * ((prec+MPD_RDIGITS-1) / MPD_RDIGITS);
+ if (ideal_minalloc < MPD_MINALLOC_MIN) ideal_minalloc = MPD_MINALLOC_MIN;
+ if (ideal_minalloc > MPD_MINALLOC_MAX) ideal_minalloc = MPD_MINALLOC_MAX;
+
+ mpd_setminalloc(ideal_minalloc);
+}
+
+void
+mpd_maxcontext(mpd_context_t *ctx)
+{
+ ctx->prec=MPD_MAX_PREC;
+ ctx->emax=MPD_MAX_EMAX;
+ ctx->emin=MPD_MIN_EMIN;
+ ctx->round=MPD_ROUND_HALF_EVEN;
+ ctx->traps=MPD_Traps;
+ ctx->status=0;
+ ctx->newtrap=0;
+ ctx->clamp=0;
+ ctx->allcr=1;
+}
+
+void
+mpd_defaultcontext(mpd_context_t *ctx)
+{
+ ctx->prec=2*MPD_RDIGITS;
+ ctx->emax=MPD_MAX_EMAX;
+ ctx->emin=MPD_MIN_EMIN;
+ ctx->round=MPD_ROUND_HALF_UP;
+ ctx->traps=MPD_Traps;
+ ctx->status=0;
+ ctx->newtrap=0;
+ ctx->clamp=0;
+ ctx->allcr=1;
+}
+
+void
+mpd_basiccontext(mpd_context_t *ctx)
+{
+ ctx->prec=9;
+ ctx->emax=MPD_MAX_EMAX;
+ ctx->emin=MPD_MIN_EMIN;
+ ctx->round=MPD_ROUND_HALF_UP;
+ ctx->traps=MPD_Traps|MPD_Clamped;
+ ctx->status=0;
+ ctx->newtrap=0;
+ ctx->clamp=0;
+ ctx->allcr=1;
+}
+
+int
+mpd_ieee_context(mpd_context_t *ctx, int bits)
+{
+ if (bits <= 0 || bits > MPD_IEEE_CONTEXT_MAX_BITS || bits % 32) {
+ return -1;
+ }
+
+ ctx->prec = 9 * (bits/32) - 2;
+ ctx->emax = 3 * ((mpd_ssize_t)1<<(bits/16+3));
+ ctx->emin = 1 - ctx->emax;
+ ctx->round=MPD_ROUND_HALF_EVEN;
+ ctx->traps=0;
+ ctx->status=0;
+ ctx->newtrap=0;
+ ctx->clamp=1;
+ ctx->allcr=1;
+
+ return 0;
+}
+
+mpd_ssize_t
+mpd_getprec(const mpd_context_t *ctx)
+{
+ return ctx->prec;
+}
+
+mpd_ssize_t
+mpd_getemax(const mpd_context_t *ctx)
+{
+ return ctx->emax;
+}
+
+mpd_ssize_t
+mpd_getemin(const mpd_context_t *ctx)
+{
+ return ctx->emin;
+}
+
+int
+mpd_getround(const mpd_context_t *ctx)
+{
+ return ctx->round;
+}
+
+uint32_t
+mpd_gettraps(const mpd_context_t *ctx)
+{
+ return ctx->traps;
+}
+
+uint32_t
+mpd_getstatus(const mpd_context_t *ctx)
+{
+ return ctx->status;
+}
+
+int
+mpd_getclamp(const mpd_context_t *ctx)
+{
+ return ctx->clamp;
+}
+
+int
+mpd_getcr(const mpd_context_t *ctx)
+{
+ return ctx->allcr;
+}
+
+
+int
+mpd_qsetprec(mpd_context_t *ctx, mpd_ssize_t prec)
+{
+ if (prec <= 0 || prec > MPD_MAX_PREC) {
+ return 0;
+ }
+ ctx->prec = prec;
+ return 1;
+}
+
+int
+mpd_qsetemax(mpd_context_t *ctx, mpd_ssize_t emax)
+{
+ if (emax < 0 || emax > MPD_MAX_EMAX) {
+ return 0;
+ }
+ ctx->emax = emax;
+ return 1;
+}
+
+int
+mpd_qsetemin(mpd_context_t *ctx, mpd_ssize_t emin)
+{
+ if (emin > 0 || emin < MPD_MIN_EMIN) {
+ return 0;
+ }
+ ctx->emin = emin;
+ return 1;
+}
+
+int
+mpd_qsetround(mpd_context_t *ctx, int round)
+{
+ if (!(0 <= round && round < MPD_ROUND_GUARD)) {
+ return 0;
+ }
+ ctx->round = round;
+ return 1;
+}
+
+int
+mpd_qsettraps(mpd_context_t *ctx, uint32_t traps)
+{
+ if (traps > MPD_Max_status) {
+ return 0;
+ }
+ ctx->traps = traps;
+ return 1;
+}
+
+int
+mpd_qsetstatus(mpd_context_t *ctx, uint32_t flags)
+{
+ if (flags > MPD_Max_status) {
+ return 0;
+ }
+ ctx->status = flags;
+ return 1;
+}
+
+int
+mpd_qsetclamp(mpd_context_t *ctx, int c)
+{
+ if (c != 0 && c != 1) {
+ return 0;
+ }
+ ctx->clamp = c;
+ return 1;
+}
+
+int
+mpd_qsetcr(mpd_context_t *ctx, int c)
+{
+ if (c != 0 && c != 1) {
+ return 0;
+ }
+ ctx->allcr = c;
+ return 1;
+}
+
+
+void
+mpd_addstatus_raise(mpd_context_t *ctx, uint32_t flags)
+{
+ ctx->status |= flags;
+ if (flags&ctx->traps) {
+ ctx->newtrap = (flags&ctx->traps);
+ mpd_traphandler(ctx);
+ }
+}
+
+
diff --git a/Modules/_decimal/libmpdec/convolute.c b/Modules/_decimal/libmpdec/convolute.c
new file mode 100644
index 0000000000..4c62e8bd3a
--- /dev/null
+++ b/Modules/_decimal/libmpdec/convolute.c
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include "bits.h"
+#include "constants.h"
+#include "fnt.h"
+#include "fourstep.h"
+#include "numbertheory.h"
+#include "sixstep.h"
+#include "umodarith.h"
+#include "convolute.h"
+
+
+/* Bignum: Fast convolution using the Number Theoretic Transform. Used for
+ the multiplication of very large coefficients. */
+
+
+/* Convolute the data in c1 and c2. Result is in c1. */
+int
+fnt_convolute(mpd_uint_t *c1, mpd_uint_t *c2, mpd_size_t n, int modnum)
+{
+ int (*fnt)(mpd_uint_t *, mpd_size_t, int);
+ int (*inv_fnt)(mpd_uint_t *, mpd_size_t, int);
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t n_inv, umod;
+ mpd_size_t i;
+
+
+ SETMODULUS(modnum);
+ n_inv = POWMOD(n, (umod-2));
+
+ if (ispower2(n)) {
+ if (n > SIX_STEP_THRESHOLD) {
+ fnt = six_step_fnt;
+ inv_fnt = inv_six_step_fnt;
+ }
+ else {
+ fnt = std_fnt;
+ inv_fnt = std_inv_fnt;
+ }
+ }
+ else {
+ fnt = four_step_fnt;
+ inv_fnt = inv_four_step_fnt;
+ }
+
+ if (!fnt(c1, n, modnum)) {
+ return 0;
+ }
+ if (!fnt(c2, n, modnum)) {
+ return 0;
+ }
+ for (i = 0; i < n-1; i += 2) {
+ mpd_uint_t x0 = c1[i];
+ mpd_uint_t y0 = c2[i];
+ mpd_uint_t x1 = c1[i+1];
+ mpd_uint_t y1 = c2[i+1];
+ MULMOD2(&x0, y0, &x1, y1);
+ c1[i] = x0;
+ c1[i+1] = x1;
+ }
+
+ if (!inv_fnt(c1, n, modnum)) {
+ return 0;
+ }
+ for (i = 0; i < n-3; i += 4) {
+ mpd_uint_t x0 = c1[i];
+ mpd_uint_t x1 = c1[i+1];
+ mpd_uint_t x2 = c1[i+2];
+ mpd_uint_t x3 = c1[i+3];
+ MULMOD2C(&x0, &x1, n_inv);
+ MULMOD2C(&x2, &x3, n_inv);
+ c1[i] = x0;
+ c1[i+1] = x1;
+ c1[i+2] = x2;
+ c1[i+3] = x3;
+ }
+
+ return 1;
+}
+
+/* Autoconvolute the data in c1. Result is in c1. */
+int
+fnt_autoconvolute(mpd_uint_t *c1, mpd_size_t n, int modnum)
+{
+ int (*fnt)(mpd_uint_t *, mpd_size_t, int);
+ int (*inv_fnt)(mpd_uint_t *, mpd_size_t, int);
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t n_inv, umod;
+ mpd_size_t i;
+
+
+ SETMODULUS(modnum);
+ n_inv = POWMOD(n, (umod-2));
+
+ if (ispower2(n)) {
+ if (n > SIX_STEP_THRESHOLD) {
+ fnt = six_step_fnt;
+ inv_fnt = inv_six_step_fnt;
+ }
+ else {
+ fnt = std_fnt;
+ inv_fnt = std_inv_fnt;
+ }
+ }
+ else {
+ fnt = four_step_fnt;
+ inv_fnt = inv_four_step_fnt;
+ }
+
+ if (!fnt(c1, n, modnum)) {
+ return 0;
+ }
+ for (i = 0; i < n-1; i += 2) {
+ mpd_uint_t x0 = c1[i];
+ mpd_uint_t x1 = c1[i+1];
+ MULMOD2(&x0, x0, &x1, x1);
+ c1[i] = x0;
+ c1[i+1] = x1;
+ }
+
+ if (!inv_fnt(c1, n, modnum)) {
+ return 0;
+ }
+ for (i = 0; i < n-3; i += 4) {
+ mpd_uint_t x0 = c1[i];
+ mpd_uint_t x1 = c1[i+1];
+ mpd_uint_t x2 = c1[i+2];
+ mpd_uint_t x3 = c1[i+3];
+ MULMOD2C(&x0, &x1, n_inv);
+ MULMOD2C(&x2, &x3, n_inv);
+ c1[i] = x0;
+ c1[i+1] = x1;
+ c1[i+2] = x2;
+ c1[i+3] = x3;
+ }
+
+ return 1;
+}
+
+
diff --git a/Modules/_decimal/libmpdec/convolute.h b/Modules/_decimal/libmpdec/convolute.h
new file mode 100644
index 0000000000..f30a177a68
--- /dev/null
+++ b/Modules/_decimal/libmpdec/convolute.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef CONVOLUTE_H
+#define CONVOLUTE_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+#define SIX_STEP_THRESHOLD 4096
+
+int fnt_convolute(mpd_uint_t *c1, mpd_uint_t *c2, mpd_size_t n, int modnum);
+int fnt_autoconvolute(mpd_uint_t *c1, mpd_size_t n, int modnum);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/crt.c b/Modules/_decimal/libmpdec/crt.c
new file mode 100644
index 0000000000..4a1e80a232
--- /dev/null
+++ b/Modules/_decimal/libmpdec/crt.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <assert.h>
+#include "numbertheory.h"
+#include "umodarith.h"
+#include "crt.h"
+
+
+/* Bignum: Chinese Remainder Theorem, extends the maximum transform length. */
+
+
+/* Multiply P1P2 by v, store result in w. */
+static inline void
+_crt_mulP1P2_3(mpd_uint_t w[3], mpd_uint_t v)
+{
+ mpd_uint_t hi1, hi2, lo;
+
+ _mpd_mul_words(&hi1, &lo, LH_P1P2, v);
+ w[0] = lo;
+
+ _mpd_mul_words(&hi2, &lo, UH_P1P2, v);
+ lo = hi1 + lo;
+ if (lo < hi1) hi2++;
+
+ w[1] = lo;
+ w[2] = hi2;
+}
+
+/* Add 3 words from v to w. The result is known to fit in w. */
+static inline void
+_crt_add3(mpd_uint_t w[3], mpd_uint_t v[3])
+{
+ mpd_uint_t carry;
+ mpd_uint_t s;
+
+ s = w[0] + v[0];
+ carry = (s < w[0]);
+ w[0] = s;
+
+ s = w[1] + (v[1] + carry);
+ carry = (s < w[1]);
+ w[1] = s;
+
+ w[2] = w[2] + (v[2] + carry);
+}
+
+/* Divide 3 words in u by v, store result in w, return remainder. */
+static inline mpd_uint_t
+_crt_div3(mpd_uint_t *w, const mpd_uint_t *u, mpd_uint_t v)
+{
+ mpd_uint_t r1 = u[2];
+ mpd_uint_t r2;
+
+ if (r1 < v) {
+ w[2] = 0;
+ }
+ else {
+ _mpd_div_word(&w[2], &r1, u[2], v); /* GCOV_NOT_REACHED */
+ }
+
+ _mpd_div_words(&w[1], &r2, r1, u[1], v);
+ _mpd_div_words(&w[0], &r1, r2, u[0], v);
+
+ return r1;
+}
+
+
+/*
+ * Chinese Remainder Theorem:
+ * Algorithm from Joerg Arndt, "Matters Computational",
+ * Chapter 37.4.1 [http://www.jjj.de/fxt/]
+ *
+ * See also Knuth, TAOCP, Volume 2, 4.3.2, exercise 7.
+ */
+
+/*
+ * CRT with carry: x1, x2, x3 contain numbers modulo p1, p2, p3. For each
+ * triple of members of the arrays, find the unique z modulo p1*p2*p3, with
+ * zmax = p1*p2*p3 - 1.
+ *
+ * In each iteration of the loop, split z into result[i] = z % MPD_RADIX
+ * and carry = z / MPD_RADIX. Let N be the size of carry[] and cmax the
+ * maximum carry.
+ *
+ * Limits for the 32-bit build:
+ *
+ * N = 2**96
+ * cmax = 7711435591312380274
+ *
+ * Limits for the 64 bit build:
+ *
+ * N = 2**192
+ * cmax = 627710135393475385904124401220046371710
+ *
+ * The following statements hold for both versions:
+ *
+ * 1) cmax + zmax < N, so the addition does not overflow.
+ *
+ * 2) (cmax + zmax) / MPD_RADIX == cmax.
+ *
+ * 3) If c <= cmax, then c_next = (c + zmax) / MPD_RADIX <= cmax.
+ */
+void
+crt3(mpd_uint_t *x1, mpd_uint_t *x2, mpd_uint_t *x3, mpd_size_t rsize)
+{
+ mpd_uint_t p1 = mpd_moduli[P1];
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t a1, a2, a3;
+ mpd_uint_t s;
+ mpd_uint_t z[3], t[3];
+ mpd_uint_t carry[3] = {0,0,0};
+ mpd_uint_t hi, lo;
+ mpd_size_t i;
+
+ for (i = 0; i < rsize; i++) {
+
+ a1 = x1[i];
+ a2 = x2[i];
+ a3 = x3[i];
+
+ SETMODULUS(P2);
+ s = ext_submod(a2, a1, umod);
+ s = MULMOD(s, INV_P1_MOD_P2);
+
+ _mpd_mul_words(&hi, &lo, s, p1);
+ lo = lo + a1;
+ if (lo < a1) hi++;
+
+ SETMODULUS(P3);
+ s = dw_submod(a3, hi, lo, umod);
+ s = MULMOD(s, INV_P1P2_MOD_P3);
+
+ z[0] = lo;
+ z[1] = hi;
+ z[2] = 0;
+
+ _crt_mulP1P2_3(t, s);
+ _crt_add3(z, t);
+ _crt_add3(carry, z);
+
+ x1[i] = _crt_div3(carry, carry, MPD_RADIX);
+ }
+
+ assert(carry[0] == 0 && carry[1] == 0 && carry[2] == 0);
+}
+
+
diff --git a/Modules/_decimal/libmpdec/crt.h b/Modules/_decimal/libmpdec/crt.h
new file mode 100644
index 0000000000..f61e772936
--- /dev/null
+++ b/Modules/_decimal/libmpdec/crt.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef CRT_H
+#define CRT_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+void crt3(mpd_uint_t *x1, mpd_uint_t *x2, mpd_uint_t *x3, mpd_size_t nmemb);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/difradix2.c b/Modules/_decimal/libmpdec/difradix2.c
new file mode 100644
index 0000000000..06e5ab5e22
--- /dev/null
+++ b/Modules/_decimal/libmpdec/difradix2.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <assert.h>
+#include "bits.h"
+#include "numbertheory.h"
+#include "umodarith.h"
+#include "difradix2.h"
+
+
+/* Bignum: The actual transform routine (decimation in frequency). */
+
+
+/*
+ * Generate index pairs (x, bitreverse(x)) and carry out the permutation.
+ * n must be a power of two.
+ * Algorithm due to Brent/Lehmann, see Joerg Arndt, "Matters Computational",
+ * Chapter 1.14.4. [http://www.jjj.de/fxt/]
+ */
+static inline void
+bitreverse_permute(mpd_uint_t a[], mpd_size_t n)
+{
+ mpd_size_t x = 0;
+ mpd_size_t r = 0;
+ mpd_uint_t t;
+
+ do { /* Invariant: r = bitreverse(x) */
+ if (r > x) {
+ t = a[x];
+ a[x] = a[r];
+ a[r] = t;
+ }
+ /* Flip trailing consecutive 1 bits and the first zero bit
+ * that absorbs a possible carry. */
+ x += 1;
+ /* Mirror the operation on r: Flip n_trailing_zeros(x)+1
+ high bits of r. */
+ r ^= (n - (n >> (mpd_bsf(x)+1)));
+ /* The loop invariant is preserved. */
+ } while (x < n);
+}
+
+
+/* Fast Number Theoretic Transform, decimation in frequency. */
+void
+fnt_dif2(mpd_uint_t a[], mpd_size_t n, struct fnt_params *tparams)
+{
+ mpd_uint_t *wtable = tparams->wtable;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t u0, u1, v0, v1;
+ mpd_uint_t w, w0, w1, wstep;
+ mpd_size_t m, mhalf;
+ mpd_size_t j, r;
+
+
+ assert(ispower2(n));
+ assert(n >= 4);
+
+ SETMODULUS(tparams->modnum);
+
+ /* m == n */
+ mhalf = n / 2;
+ for (j = 0; j < mhalf; j += 2) {
+
+ w0 = wtable[j];
+ w1 = wtable[j+1];
+
+ u0 = a[j];
+ v0 = a[j+mhalf];
+
+ u1 = a[j+1];
+ v1 = a[j+1+mhalf];
+
+ a[j] = addmod(u0, v0, umod);
+ v0 = submod(u0, v0, umod);
+
+ a[j+1] = addmod(u1, v1, umod);
+ v1 = submod(u1, v1, umod);
+
+ MULMOD2(&v0, w0, &v1, w1);
+
+ a[j+mhalf] = v0;
+ a[j+1+mhalf] = v1;
+
+ }
+
+ wstep = 2;
+ for (m = n/2; m >= 2; m>>=1, wstep<<=1) {
+
+ mhalf = m / 2;
+
+ /* j == 0 */
+ for (r = 0; r < n; r += 2*m) {
+
+ u0 = a[r];
+ v0 = a[r+mhalf];
+
+ u1 = a[m+r];
+ v1 = a[m+r+mhalf];
+
+ a[r] = addmod(u0, v0, umod);
+ v0 = submod(u0, v0, umod);
+
+ a[m+r] = addmod(u1, v1, umod);
+ v1 = submod(u1, v1, umod);
+
+ a[r+mhalf] = v0;
+ a[m+r+mhalf] = v1;
+ }
+
+ for (j = 1; j < mhalf; j++) {
+
+ w = wtable[j*wstep];
+
+ for (r = 0; r < n; r += 2*m) {
+
+ u0 = a[r+j];
+ v0 = a[r+j+mhalf];
+
+ u1 = a[m+r+j];
+ v1 = a[m+r+j+mhalf];
+
+ a[r+j] = addmod(u0, v0, umod);
+ v0 = submod(u0, v0, umod);
+
+ a[m+r+j] = addmod(u1, v1, umod);
+ v1 = submod(u1, v1, umod);
+
+ MULMOD2C(&v0, &v1, w);
+
+ a[r+j+mhalf] = v0;
+ a[m+r+j+mhalf] = v1;
+ }
+
+ }
+
+ }
+
+ bitreverse_permute(a, n);
+}
+
+
diff --git a/Modules/_decimal/libmpdec/difradix2.h b/Modules/_decimal/libmpdec/difradix2.h
new file mode 100644
index 0000000000..5e22bcf324
--- /dev/null
+++ b/Modules/_decimal/libmpdec/difradix2.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef DIF_RADIX2_H
+#define DIF_RADIX2_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include "numbertheory.h"
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+void fnt_dif2(mpd_uint_t a[], mpd_size_t n, struct fnt_params *tparams);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/fnt.c b/Modules/_decimal/libmpdec/fnt.c
new file mode 100644
index 0000000000..7e924c8524
--- /dev/null
+++ b/Modules/_decimal/libmpdec/fnt.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "bits.h"
+#include "difradix2.h"
+#include "numbertheory.h"
+#include "fnt.h"
+
+
+/* Bignum: Fast transform for medium-sized coefficients. */
+
+
+/* forward transform, sign = -1 */
+int
+std_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ struct fnt_params *tparams;
+
+ assert(ispower2(n));
+ assert(n >= 4);
+ assert(n <= 3*MPD_MAXTRANSFORM_2N);
+
+ if ((tparams = _mpd_init_fnt_params(n, -1, modnum)) == NULL) {
+ return 0;
+ }
+ fnt_dif2(a, n, tparams);
+
+ mpd_free(tparams);
+ return 1;
+}
+
+/* reverse transform, sign = 1 */
+int
+std_inv_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ struct fnt_params *tparams;
+
+ assert(ispower2(n));
+ assert(n >= 4);
+ assert(n <= 3*MPD_MAXTRANSFORM_2N);
+
+ if ((tparams = _mpd_init_fnt_params(n, 1, modnum)) == NULL) {
+ return 0;
+ }
+ fnt_dif2(a, n, tparams);
+
+ mpd_free(tparams);
+ return 1;
+}
+
+
+
diff --git a/Modules/_decimal/libmpdec/fnt.h b/Modules/_decimal/libmpdec/fnt.h
new file mode 100644
index 0000000000..fa2154a798
--- /dev/null
+++ b/Modules/_decimal/libmpdec/fnt.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef FNT_H
+#define FNT_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+int std_fnt(mpd_uint_t a[], mpd_size_t n, int modnum);
+int std_inv_fnt(mpd_uint_t a[], mpd_size_t n, int modnum);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
+
diff --git a/Modules/_decimal/libmpdec/fourstep.c b/Modules/_decimal/libmpdec/fourstep.c
new file mode 100644
index 0000000000..21d3e7485d
--- /dev/null
+++ b/Modules/_decimal/libmpdec/fourstep.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <assert.h>
+#include "numbertheory.h"
+#include "sixstep.h"
+#include "transpose.h"
+#include "umodarith.h"
+#include "fourstep.h"
+
+
+/* Bignum: Cache efficient Matrix Fourier Transform for arrays of the
+ form 3 * 2**n (See literature/matrix-transform.txt). */
+
+
+#ifndef PPRO
+static inline void
+std_size3_ntt(mpd_uint_t *x1, mpd_uint_t *x2, mpd_uint_t *x3,
+ mpd_uint_t w3table[3], mpd_uint_t umod)
+{
+ mpd_uint_t r1, r2;
+ mpd_uint_t w;
+ mpd_uint_t s, tmp;
+
+
+ /* k = 0 -> w = 1 */
+ s = *x1;
+ s = addmod(s, *x2, umod);
+ s = addmod(s, *x3, umod);
+
+ r1 = s;
+
+ /* k = 1 */
+ s = *x1;
+
+ w = w3table[1];
+ tmp = MULMOD(*x2, w);
+ s = addmod(s, tmp, umod);
+
+ w = w3table[2];
+ tmp = MULMOD(*x3, w);
+ s = addmod(s, tmp, umod);
+
+ r2 = s;
+
+ /* k = 2 */
+ s = *x1;
+
+ w = w3table[2];
+ tmp = MULMOD(*x2, w);
+ s = addmod(s, tmp, umod);
+
+ w = w3table[1];
+ tmp = MULMOD(*x3, w);
+ s = addmod(s, tmp, umod);
+
+ *x3 = s;
+ *x2 = r2;
+ *x1 = r1;
+}
+#else /* PPRO */
+static inline void
+ppro_size3_ntt(mpd_uint_t *x1, mpd_uint_t *x2, mpd_uint_t *x3, mpd_uint_t w3table[3],
+ mpd_uint_t umod, double *dmod, uint32_t dinvmod[3])
+{
+ mpd_uint_t r1, r2;
+ mpd_uint_t w;
+ mpd_uint_t s, tmp;
+
+
+ /* k = 0 -> w = 1 */
+ s = *x1;
+ s = addmod(s, *x2, umod);
+ s = addmod(s, *x3, umod);
+
+ r1 = s;
+
+ /* k = 1 */
+ s = *x1;
+
+ w = w3table[1];
+ tmp = ppro_mulmod(*x2, w, dmod, dinvmod);
+ s = addmod(s, tmp, umod);
+
+ w = w3table[2];
+ tmp = ppro_mulmod(*x3, w, dmod, dinvmod);
+ s = addmod(s, tmp, umod);
+
+ r2 = s;
+
+ /* k = 2 */
+ s = *x1;
+
+ w = w3table[2];
+ tmp = ppro_mulmod(*x2, w, dmod, dinvmod);
+ s = addmod(s, tmp, umod);
+
+ w = w3table[1];
+ tmp = ppro_mulmod(*x3, w, dmod, dinvmod);
+ s = addmod(s, tmp, umod);
+
+ *x3 = s;
+ *x2 = r2;
+ *x1 = r1;
+}
+#endif
+
+
+/* forward transform, sign = -1; transform length = 3 * 2**n */
+int
+four_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ mpd_size_t R = 3; /* number of rows */
+ mpd_size_t C = n / 3; /* number of columns */
+ mpd_uint_t w3table[3];
+ mpd_uint_t kernel, w0, w1, wstep;
+ mpd_uint_t *s, *p0, *p1, *p2;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_size_t i, k;
+
+
+ assert(n >= 48);
+ assert(n <= 3*MPD_MAXTRANSFORM_2N);
+
+
+ /* Length R transform on the columns. */
+ SETMODULUS(modnum);
+ _mpd_init_w3table(w3table, -1, modnum);
+ for (p0=a, p1=p0+C, p2=p0+2*C; p0<a+C; p0++,p1++,p2++) {
+
+ SIZE3_NTT(p0, p1, p2, w3table);
+ }
+
+ /* Multiply each matrix element (addressed by i*C+k) by r**(i*k). */
+ kernel = _mpd_getkernel(n, -1, modnum);
+ for (i = 1; i < R; i++) {
+ w0 = 1; /* r**(i*0): initial value for k=0 */
+ w1 = POWMOD(kernel, i); /* r**(i*1): initial value for k=1 */
+ wstep = MULMOD(w1, w1); /* r**(2*i) */
+ for (k = 0; k < C-1; k += 2) {
+ mpd_uint_t x0 = a[i*C+k];
+ mpd_uint_t x1 = a[i*C+k+1];
+ MULMOD2(&x0, w0, &x1, w1);
+ MULMOD2C(&w0, &w1, wstep); /* r**(i*(k+2)) = r**(i*k) * r**(2*i) */
+ a[i*C+k] = x0;
+ a[i*C+k+1] = x1;
+ }
+ }
+
+ /* Length C transform on the rows. */
+ for (s = a; s < a+n; s += C) {
+ if (!six_step_fnt(s, C, modnum)) {
+ return 0;
+ }
+ }
+
+#if 0
+ /* An unordered transform is sufficient for convolution. */
+ /* Transpose the matrix. */
+ transpose_3xpow2(a, R, C);
+#endif
+
+ return 1;
+}
+
+/* backward transform, sign = 1; transform length = 3 * 2**n */
+int
+inv_four_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ mpd_size_t R = 3; /* number of rows */
+ mpd_size_t C = n / 3; /* number of columns */
+ mpd_uint_t w3table[3];
+ mpd_uint_t kernel, w0, w1, wstep;
+ mpd_uint_t *s, *p0, *p1, *p2;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_size_t i, k;
+
+
+ assert(n >= 48);
+ assert(n <= 3*MPD_MAXTRANSFORM_2N);
+
+
+#if 0
+ /* An unordered transform is sufficient for convolution. */
+ /* Transpose the matrix, producing an R*C matrix. */
+ transpose_3xpow2(a, C, R);
+#endif
+
+ /* Length C transform on the rows. */
+ for (s = a; s < a+n; s += C) {
+ if (!inv_six_step_fnt(s, C, modnum)) {
+ return 0;
+ }
+ }
+
+ /* Multiply each matrix element (addressed by i*C+k) by r**(i*k). */
+ SETMODULUS(modnum);
+ kernel = _mpd_getkernel(n, 1, modnum);
+ for (i = 1; i < R; i++) {
+ w0 = 1;
+ w1 = POWMOD(kernel, i);
+ wstep = MULMOD(w1, w1);
+ for (k = 0; k < C; k += 2) {
+ mpd_uint_t x0 = a[i*C+k];
+ mpd_uint_t x1 = a[i*C+k+1];
+ MULMOD2(&x0, w0, &x1, w1);
+ MULMOD2C(&w0, &w1, wstep);
+ a[i*C+k] = x0;
+ a[i*C+k+1] = x1;
+ }
+ }
+
+ /* Length R transform on the columns. */
+ _mpd_init_w3table(w3table, 1, modnum);
+ for (p0=a, p1=p0+C, p2=p0+2*C; p0<a+C; p0++,p1++,p2++) {
+
+ SIZE3_NTT(p0, p1, p2, w3table);
+ }
+
+ return 1;
+}
+
+
diff --git a/Modules/_decimal/libmpdec/fourstep.h b/Modules/_decimal/libmpdec/fourstep.h
new file mode 100644
index 0000000000..80dcd4be3d
--- /dev/null
+++ b/Modules/_decimal/libmpdec/fourstep.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef FOUR_STEP_H
+#define FOUR_STEP_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+int four_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum);
+int inv_four_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/io.c b/Modules/_decimal/libmpdec/io.c
new file mode 100644
index 0000000000..b67324da94
--- /dev/null
+++ b/Modules/_decimal/libmpdec/io.c
@@ -0,0 +1,1575 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <limits.h>
+#include <assert.h>
+#include <errno.h>
+#include <locale.h>
+#include "bits.h"
+#include "constants.h"
+#include "memory.h"
+#include "typearith.h"
+#include "io.h"
+
+
+/* This file contains functions for decimal <-> string conversions, including
+ PEP-3101 formatting for numeric types. */
+
+
+/*
+ * Work around the behavior of tolower() and strcasecmp() in certain
+ * locales. For example, in tr_TR.utf8:
+ *
+ * tolower((unsigned char)'I') == 'I'
+ *
+ * u is the exact uppercase version of l; n is strlen(l) or strlen(l)+1
+ */
+static inline int
+_mpd_strneq(const char *s, const char *l, const char *u, size_t n)
+{
+ while (--n != SIZE_MAX) {
+ if (*s != *l && *s != *u) {
+ return 0;
+ }
+ s++; u++; l++;
+ }
+
+ return 1;
+}
+
+static mpd_ssize_t
+strtoexp(const char *s)
+{
+ char *end;
+ mpd_ssize_t retval;
+
+ errno = 0;
+ retval = mpd_strtossize(s, &end, 10);
+ if (errno == 0 && !(*s != '\0' && *end == '\0'))
+ errno = EINVAL;
+
+ return retval;
+}
+
+/*
+ * Scan 'len' words. The most significant word contains 'r' digits,
+ * the remaining words are full words. Skip dpoint. The string 's' must
+ * consist of digits and an optional single decimal point at 'dpoint'.
+ */
+static void
+string_to_coeff(mpd_uint_t *data, const char *s, const char *dpoint, int r,
+ size_t len)
+{
+ int j;
+
+ if (r > 0) {
+ data[--len] = 0;
+ for (j = 0; j < r; j++, s++) {
+ if (s == dpoint) s++;
+ data[len] = 10 * data[len] + (*s - '0');
+ }
+ }
+
+ while (--len != SIZE_MAX) {
+ data[len] = 0;
+ for (j = 0; j < MPD_RDIGITS; j++, s++) {
+ if (s == dpoint) s++;
+ data[len] = 10 * data[len] + (*s - '0');
+ }
+ }
+}
+
+/*
+ * Partially verify a numeric string of the form:
+ *
+ * [cdigits][.][cdigits][eE][+-][edigits]
+ *
+ * If successful, return a pointer to the location of the first
+ * relevant coefficient digit. This digit is either non-zero or
+ * part of one of the following patterns:
+ *
+ * ["0\x00", "0.\x00", "0.E", "0.e", "0E", "0e"]
+ *
+ * The locations of a single optional dot or indicator are stored
+ * in 'dpoint' and 'exp'.
+ *
+ * The end of the string is stored in 'end'. If an indicator [eE]
+ * occurs without trailing [edigits], the condition is caught
+ * later by strtoexp().
+ */
+static const char *
+scan_dpoint_exp(const char *s, const char **dpoint, const char **exp,
+ const char **end)
+{
+ const char *coeff = NULL;
+
+ *dpoint = NULL;
+ *exp = NULL;
+ for (; *s != '\0'; s++) {
+ switch (*s) {
+ case '.':
+ if (*dpoint != NULL || *exp != NULL)
+ return NULL;
+ *dpoint = s;
+ break;
+ case 'E': case 'e':
+ if (*exp != NULL)
+ return NULL;
+ *exp = s;
+ if (*(s+1) == '+' || *(s+1) == '-')
+ s++;
+ break;
+ default:
+ if (!isdigit((uchar)*s))
+ return NULL;
+ if (coeff == NULL && *exp == NULL) {
+ if (*s == '0') {
+ if (!isdigit((uchar)*(s+1)))
+ if (!(*(s+1) == '.' &&
+ isdigit((uchar)*(s+2))))
+ coeff = s;
+ }
+ else {
+ coeff = s;
+ }
+ }
+ break;
+
+ }
+ }
+
+ *end = s;
+ return coeff;
+}
+
+/* scan the payload of a NaN */
+static const char *
+scan_payload(const char *s, const char **end)
+{
+ const char *coeff;
+
+ while (*s == '0')
+ s++;
+ coeff = s;
+
+ while (isdigit((uchar)*s))
+ s++;
+ *end = s;
+
+ return (*s == '\0') ? coeff : NULL;
+}
+
+/* convert a character string to a decimal */
+void
+mpd_qset_string(mpd_t *dec, const char *s, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_ssize_t q, r, len;
+ const char *coeff, *end;
+ const char *dpoint = NULL, *exp = NULL;
+ size_t digits;
+ uint8_t sign = MPD_POS;
+
+ mpd_set_flags(dec, 0);
+ dec->len = 0;
+ dec->exp = 0;
+
+ /* sign */
+ if (*s == '+') {
+ s++;
+ }
+ else if (*s == '-') {
+ mpd_set_negative(dec);
+ sign = MPD_NEG;
+ s++;
+ }
+
+ if (_mpd_strneq(s, "nan", "NAN", 3)) { /* NaN */
+ s += 3;
+ mpd_setspecial(dec, sign, MPD_NAN);
+ if (*s == '\0')
+ return;
+ /* validate payload: digits only */
+ if ((coeff = scan_payload(s, &end)) == NULL)
+ goto conversion_error;
+ /* payload consists entirely of zeros */
+ if (*coeff == '\0')
+ return;
+ digits = end - coeff;
+ /* prec >= 1, clamp is 0 or 1 */
+ if (digits > (size_t)(ctx->prec-ctx->clamp))
+ goto conversion_error;
+ } /* sNaN */
+ else if (_mpd_strneq(s, "snan", "SNAN", 4)) {
+ s += 4;
+ mpd_setspecial(dec, sign, MPD_SNAN);
+ if (*s == '\0')
+ return;
+ /* validate payload: digits only */
+ if ((coeff = scan_payload(s, &end)) == NULL)
+ goto conversion_error;
+ /* payload consists entirely of zeros */
+ if (*coeff == '\0')
+ return;
+ digits = end - coeff;
+ if (digits > (size_t)(ctx->prec-ctx->clamp))
+ goto conversion_error;
+ }
+ else if (_mpd_strneq(s, "inf", "INF", 3)) {
+ s += 3;
+ if (*s == '\0' || _mpd_strneq(s, "inity", "INITY", 6)) {
+ /* numeric-value: infinity */
+ mpd_setspecial(dec, sign, MPD_INF);
+ return;
+ }
+ goto conversion_error;
+ }
+ else {
+ /* scan for start of coefficient, decimal point, indicator, end */
+ if ((coeff = scan_dpoint_exp(s, &dpoint, &exp, &end)) == NULL)
+ goto conversion_error;
+
+ /* numeric-value: [exponent-part] */
+ if (exp) {
+ /* exponent-part */
+ end = exp; exp++;
+ dec->exp = strtoexp(exp);
+ if (errno) {
+ if (!(errno == ERANGE &&
+ (dec->exp == MPD_SSIZE_MAX ||
+ dec->exp == MPD_SSIZE_MIN)))
+ goto conversion_error;
+ }
+ }
+
+ digits = end - coeff;
+ if (dpoint) {
+ size_t fracdigits = end-dpoint-1;
+ if (dpoint > coeff) digits--;
+
+ if (fracdigits > MPD_MAX_PREC) {
+ goto conversion_error;
+ }
+ if (dec->exp < MPD_SSIZE_MIN+(mpd_ssize_t)fracdigits) {
+ dec->exp = MPD_SSIZE_MIN;
+ }
+ else {
+ dec->exp -= (mpd_ssize_t)fracdigits;
+ }
+ }
+ if (digits > MPD_MAX_PREC) {
+ goto conversion_error;
+ }
+ if (dec->exp > MPD_EXP_INF) {
+ dec->exp = MPD_EXP_INF;
+ }
+ if (dec->exp == MPD_SSIZE_MIN) {
+ dec->exp = MPD_SSIZE_MIN+1;
+ }
+ }
+
+ _mpd_idiv_word(&q, &r, (mpd_ssize_t)digits, MPD_RDIGITS);
+
+ len = (r == 0) ? q : q+1;
+ if (len == 0) {
+ goto conversion_error; /* GCOV_NOT_REACHED */
+ }
+ if (!mpd_qresize(dec, len, status)) {
+ mpd_seterror(dec, MPD_Malloc_error, status);
+ return;
+ }
+ dec->len = len;
+
+ string_to_coeff(dec->data, coeff, dpoint, (int)r, len);
+
+ mpd_setdigits(dec);
+ mpd_qfinalize(dec, ctx, status);
+ return;
+
+conversion_error:
+ /* standard wants a positive NaN */
+ mpd_seterror(dec, MPD_Conversion_syntax, status);
+}
+
+/* Print word x with n decimal digits to string s. dot is either NULL
+ or the location of a decimal point. */
+#define EXTRACT_DIGIT(s, x, d, dot) \
+ if (s == dot) *s++ = '.'; *s++ = '0' + (char)(x / d); x %= d
+static inline char *
+word_to_string(char *s, mpd_uint_t x, int n, char *dot)
+{
+ switch(n) {
+#ifdef CONFIG_64
+ case 20: EXTRACT_DIGIT(s, x, 10000000000000000000ULL, dot); /* GCOV_NOT_REACHED */
+ case 19: EXTRACT_DIGIT(s, x, 1000000000000000000ULL, dot);
+ case 18: EXTRACT_DIGIT(s, x, 100000000000000000ULL, dot);
+ case 17: EXTRACT_DIGIT(s, x, 10000000000000000ULL, dot);
+ case 16: EXTRACT_DIGIT(s, x, 1000000000000000ULL, dot);
+ case 15: EXTRACT_DIGIT(s, x, 100000000000000ULL, dot);
+ case 14: EXTRACT_DIGIT(s, x, 10000000000000ULL, dot);
+ case 13: EXTRACT_DIGIT(s, x, 1000000000000ULL, dot);
+ case 12: EXTRACT_DIGIT(s, x, 100000000000ULL, dot);
+ case 11: EXTRACT_DIGIT(s, x, 10000000000ULL, dot);
+#endif
+ case 10: EXTRACT_DIGIT(s, x, 1000000000UL, dot);
+ case 9: EXTRACT_DIGIT(s, x, 100000000UL, dot);
+ case 8: EXTRACT_DIGIT(s, x, 10000000UL, dot);
+ case 7: EXTRACT_DIGIT(s, x, 1000000UL, dot);
+ case 6: EXTRACT_DIGIT(s, x, 100000UL, dot);
+ case 5: EXTRACT_DIGIT(s, x, 10000UL, dot);
+ case 4: EXTRACT_DIGIT(s, x, 1000UL, dot);
+ case 3: EXTRACT_DIGIT(s, x, 100UL, dot);
+ case 2: EXTRACT_DIGIT(s, x, 10UL, dot);
+ default: if (s == dot) *s++ = '.'; *s++ = '0' + (char)x;
+ }
+
+ *s = '\0';
+ return s;
+}
+
+/* Print exponent x to string s. Undefined for MPD_SSIZE_MIN. */
+static inline char *
+exp_to_string(char *s, mpd_ssize_t x)
+{
+ char sign = '+';
+
+ if (x < 0) {
+ sign = '-';
+ x = -x;
+ }
+ *s++ = sign;
+
+ return word_to_string(s, x, mpd_word_digits(x), NULL);
+}
+
+/* Print the coefficient of dec to string s. len(dec) > 0. */
+static inline char *
+coeff_to_string(char *s, const mpd_t *dec)
+{
+ mpd_uint_t x;
+ mpd_ssize_t i;
+
+ /* most significant word */
+ x = mpd_msword(dec);
+ s = word_to_string(s, x, mpd_word_digits(x), NULL);
+
+ /* remaining full words */
+ for (i=dec->len-2; i >= 0; --i) {
+ x = dec->data[i];
+ s = word_to_string(s, x, MPD_RDIGITS, NULL);
+ }
+
+ return s;
+}
+
+/* Print the coefficient of dec to string s. len(dec) > 0. dot is either
+ NULL or a pointer to the location of a decimal point. */
+static inline char *
+coeff_to_string_dot(char *s, char *dot, const mpd_t *dec)
+{
+ mpd_uint_t x;
+ mpd_ssize_t i;
+
+ /* most significant word */
+ x = mpd_msword(dec);
+ s = word_to_string(s, x, mpd_word_digits(x), dot);
+
+ /* remaining full words */
+ for (i=dec->len-2; i >= 0; --i) {
+ x = dec->data[i];
+ s = word_to_string(s, x, MPD_RDIGITS, dot);
+ }
+
+ return s;
+}
+
+/* Format type */
+#define MPD_FMT_LOWER 0x00000000
+#define MPD_FMT_UPPER 0x00000001
+#define MPD_FMT_TOSCI 0x00000002
+#define MPD_FMT_TOENG 0x00000004
+#define MPD_FMT_EXP 0x00000008
+#define MPD_FMT_FIXED 0x00000010
+#define MPD_FMT_PERCENT 0x00000020
+#define MPD_FMT_SIGN_SPACE 0x00000040
+#define MPD_FMT_SIGN_PLUS 0x00000080
+
+/* Default place of the decimal point for MPD_FMT_TOSCI, MPD_FMT_EXP */
+#define MPD_DEFAULT_DOTPLACE 1
+
+/*
+ * Set *result to the string representation of a decimal. Return the length
+ * of *result, not including the terminating '\0' character.
+ *
+ * Formatting is done according to 'flags'. A return value of -1 with *result
+ * set to NULL indicates MPD_Malloc_error.
+ *
+ * 'dplace' is the default place of the decimal point. It is always set to
+ * MPD_DEFAULT_DOTPLACE except for zeros in combination with MPD_FMT_EXP.
+ */
+static mpd_ssize_t
+_mpd_to_string(char **result, const mpd_t *dec, int flags, mpd_ssize_t dplace)
+{
+ char *decstring = NULL, *cp = NULL;
+ mpd_ssize_t ldigits;
+ mpd_ssize_t mem = 0, k;
+
+ if (mpd_isspecial(dec)) {
+
+ mem = sizeof "-Infinity";
+ if (mpd_isnan(dec) && dec->len > 0) {
+ /* diagnostic code */
+ mem += dec->digits;
+ }
+ cp = decstring = mpd_alloc(mem, sizeof *decstring);
+ if (cp == NULL) {
+ *result = NULL;
+ return -1;
+ }
+
+ if (mpd_isnegative(dec)) {
+ *cp++ = '-';
+ }
+ else if (flags&MPD_FMT_SIGN_SPACE) {
+ *cp++ = ' ';
+ }
+ else if (flags&MPD_FMT_SIGN_PLUS) {
+ *cp++ = '+';
+ }
+
+ if (mpd_isnan(dec)) {
+ if (mpd_isqnan(dec)) {
+ strcpy(cp, "NaN");
+ cp += 3;
+ }
+ else {
+ strcpy(cp, "sNaN");
+ cp += 4;
+ }
+ if (dec->len > 0) { /* diagnostic code */
+ cp = coeff_to_string(cp, dec);
+ }
+ }
+ else if (mpd_isinfinite(dec)) {
+ strcpy(cp, "Infinity");
+ cp += 8;
+ }
+ else { /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+ }
+ else {
+ assert(dec->len > 0);
+
+ /*
+ * For easier manipulation of the decimal point's location
+ * and the exponent that is finally printed, the number is
+ * rescaled to a virtual representation with exp = 0. Here
+ * ldigits denotes the number of decimal digits to the left
+ * of the decimal point and remains constant once initialized.
+ *
+ * dplace is the location of the decimal point relative to
+ * the start of the coefficient. Note that 3) always holds
+ * when dplace is shifted.
+ *
+ * 1) ldigits := dec->digits - dec->exp
+ * 2) dplace := ldigits (initially)
+ * 3) exp := ldigits - dplace (initially exp = 0)
+ *
+ * 0.00000_.____._____000000.
+ * ^ ^ ^ ^
+ * | | | |
+ * | | | `- dplace >= digits
+ * | | `- dplace in the middle of the coefficient
+ * | ` dplace = 1 (after the first coefficient digit)
+ * `- dplace <= 0
+ */
+
+ ldigits = dec->digits + dec->exp;
+
+ if (flags&MPD_FMT_EXP) {
+ ;
+ }
+ else if (flags&MPD_FMT_FIXED || (dec->exp <= 0 && ldigits > -6)) {
+ /* MPD_FMT_FIXED: always use fixed point notation.
+ * MPD_FMT_TOSCI, MPD_FMT_TOENG: for a certain range,
+ * override exponent notation. */
+ dplace = ldigits;
+ }
+ else if (flags&MPD_FMT_TOENG) {
+ if (mpd_iszero(dec)) {
+ /* If the exponent is divisible by three,
+ * dplace = 1. Otherwise, move dplace one
+ * or two places to the left. */
+ dplace = -1 + mod_mpd_ssize_t(dec->exp+2, 3);
+ }
+ else { /* ldigits-1 is the adjusted exponent, which
+ * should be divisible by three. If not, move
+ * dplace one or two places to the right. */
+ dplace += mod_mpd_ssize_t(ldigits-1, 3);
+ }
+ }
+
+ /*
+ * Basic space requirements:
+ *
+ * [-][.][coeffdigits][E][-][expdigits+1][%]['\0']
+ *
+ * If the decimal point lies outside of the coefficient digits,
+ * space is adjusted accordingly.
+ */
+ if (dplace <= 0) {
+ mem = -dplace + dec->digits + 2;
+ }
+ else if (dplace >= dec->digits) {
+ mem = dplace;
+ }
+ else {
+ mem = dec->digits;
+ }
+ mem += (MPD_EXPDIGITS+1+6);
+
+ cp = decstring = mpd_alloc(mem, sizeof *decstring);
+ if (cp == NULL) {
+ *result = NULL;
+ return -1;
+ }
+
+
+ if (mpd_isnegative(dec)) {
+ *cp++ = '-';
+ }
+ else if (flags&MPD_FMT_SIGN_SPACE) {
+ *cp++ = ' ';
+ }
+ else if (flags&MPD_FMT_SIGN_PLUS) {
+ *cp++ = '+';
+ }
+
+ if (dplace <= 0) {
+ /* space: -dplace+dec->digits+2 */
+ *cp++ = '0';
+ *cp++ = '.';
+ for (k = 0; k < -dplace; k++) {
+ *cp++ = '0';
+ }
+ cp = coeff_to_string(cp, dec);
+ }
+ else if (dplace >= dec->digits) {
+ /* space: dplace */
+ cp = coeff_to_string(cp, dec);
+ for (k = 0; k < dplace-dec->digits; k++) {
+ *cp++ = '0';
+ }
+ }
+ else {
+ /* space: dec->digits+1 */
+ cp = coeff_to_string_dot(cp, cp+dplace, dec);
+ }
+
+ /*
+ * Conditions for printing an exponent:
+ *
+ * MPD_FMT_TOSCI, MPD_FMT_TOENG: only if ldigits != dplace
+ * MPD_FMT_FIXED: never (ldigits == dplace)
+ * MPD_FMT_EXP: always
+ */
+ if (ldigits != dplace || flags&MPD_FMT_EXP) {
+ /* space: expdigits+2 */
+ *cp++ = (flags&MPD_FMT_UPPER) ? 'E' : 'e';
+ cp = exp_to_string(cp, ldigits-dplace);
+ }
+
+ if (flags&MPD_FMT_PERCENT) {
+ *cp++ = '%';
+ }
+ }
+
+ assert(cp < decstring+mem);
+ assert(cp-decstring < MPD_SSIZE_MAX);
+
+ *cp = '\0';
+ *result = decstring;
+ return (mpd_ssize_t)(cp-decstring);
+}
+
+char *
+mpd_to_sci(const mpd_t *dec, int fmt)
+{
+ char *res;
+ int flags = MPD_FMT_TOSCI;
+
+ flags |= fmt ? MPD_FMT_UPPER : MPD_FMT_LOWER;
+ (void)_mpd_to_string(&res, dec, flags, MPD_DEFAULT_DOTPLACE);
+ return res;
+}
+
+char *
+mpd_to_eng(const mpd_t *dec, int fmt)
+{
+ char *res;
+ int flags = MPD_FMT_TOENG;
+
+ flags |= fmt ? MPD_FMT_UPPER : MPD_FMT_LOWER;
+ (void)_mpd_to_string(&res, dec, flags, MPD_DEFAULT_DOTPLACE);
+ return res;
+}
+
+mpd_ssize_t
+mpd_to_sci_size(char **res, const mpd_t *dec, int fmt)
+{
+ int flags = MPD_FMT_TOSCI;
+
+ flags |= fmt ? MPD_FMT_UPPER : MPD_FMT_LOWER;
+ return _mpd_to_string(res, dec, flags, MPD_DEFAULT_DOTPLACE);
+}
+
+mpd_ssize_t
+mpd_to_eng_size(char **res, const mpd_t *dec, int fmt)
+{
+ int flags = MPD_FMT_TOENG;
+
+ flags |= fmt ? MPD_FMT_UPPER : MPD_FMT_LOWER;
+ return _mpd_to_string(res, dec, flags, MPD_DEFAULT_DOTPLACE);
+}
+
+/* Copy a single UTF-8 char to dest. See: The Unicode Standard, version 5.2,
+ chapter 3.9: Well-formed UTF-8 byte sequences. */
+static int
+_mpd_copy_utf8(char dest[5], const char *s)
+{
+ const uchar *cp = (const uchar *)s;
+ uchar lb, ub;
+ int count, i;
+
+
+ if (*cp == 0) {
+ /* empty string */
+ dest[0] = '\0';
+ return 0;
+ }
+ else if (*cp <= 0x7f) {
+ /* ascii */
+ dest[0] = *cp;
+ dest[1] = '\0';
+ return 1;
+ }
+ else if (0xc2 <= *cp && *cp <= 0xdf) {
+ lb = 0x80; ub = 0xbf;
+ count = 2;
+ }
+ else if (*cp == 0xe0) {
+ lb = 0xa0; ub = 0xbf;
+ count = 3;
+ }
+ else if (*cp <= 0xec) {
+ lb = 0x80; ub = 0xbf;
+ count = 3;
+ }
+ else if (*cp == 0xed) {
+ lb = 0x80; ub = 0x9f;
+ count = 3;
+ }
+ else if (*cp <= 0xef) {
+ lb = 0x80; ub = 0xbf;
+ count = 3;
+ }
+ else if (*cp == 0xf0) {
+ lb = 0x90; ub = 0xbf;
+ count = 4;
+ }
+ else if (*cp <= 0xf3) {
+ lb = 0x80; ub = 0xbf;
+ count = 4;
+ }
+ else if (*cp == 0xf4) {
+ lb = 0x80; ub = 0x8f;
+ count = 4;
+ }
+ else {
+ /* invalid */
+ goto error;
+ }
+
+ dest[0] = *cp++;
+ if (*cp < lb || ub < *cp) {
+ goto error;
+ }
+ dest[1] = *cp++;
+ for (i = 2; i < count; i++) {
+ if (*cp < 0x80 || 0xbf < *cp) {
+ goto error;
+ }
+ dest[i] = *cp++;
+ }
+ dest[i] = '\0';
+
+ return count;
+
+error:
+ dest[0] = '\0';
+ return -1;
+}
+
+int
+mpd_validate_lconv(mpd_spec_t *spec)
+{
+ size_t n;
+#if CHAR_MAX == SCHAR_MAX
+ const char *cp = spec->grouping;
+ while (*cp != '\0') {
+ if (*cp++ < 0) {
+ return -1;
+ }
+ }
+#endif
+ n = strlen(spec->dot);
+ if (n == 0 || n > 4) {
+ return -1;
+ }
+ if (strlen(spec->sep) > 4) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+mpd_parse_fmt_str(mpd_spec_t *spec, const char *fmt, int caps)
+{
+ char *cp = (char *)fmt;
+ int have_align = 0, n;
+
+ /* defaults */
+ spec->min_width = 0;
+ spec->prec = -1;
+ spec->type = caps ? 'G' : 'g';
+ spec->align = '>';
+ spec->sign = '-';
+ spec->dot = "";
+ spec->sep = "";
+ spec->grouping = "";
+
+
+ /* presume that the first character is a UTF-8 fill character */
+ if ((n = _mpd_copy_utf8(spec->fill, cp)) < 0) {
+ return 0;
+ }
+
+ /* alignment directive, prefixed by a fill character */
+ if (*cp && (*(cp+n) == '<' || *(cp+n) == '>' ||
+ *(cp+n) == '=' || *(cp+n) == '^')) {
+ cp += n;
+ spec->align = *cp++;
+ have_align = 1;
+ } /* alignment directive */
+ else {
+ /* default fill character */
+ spec->fill[0] = ' ';
+ spec->fill[1] = '\0';
+ if (*cp == '<' || *cp == '>' ||
+ *cp == '=' || *cp == '^') {
+ spec->align = *cp++;
+ have_align = 1;
+ }
+ }
+
+ /* sign formatting */
+ if (*cp == '+' || *cp == '-' || *cp == ' ') {
+ spec->sign = *cp++;
+ }
+
+ /* zero padding */
+ if (*cp == '0') {
+ /* zero padding implies alignment, which should not be
+ * specified twice. */
+ if (have_align) {
+ return 0;
+ }
+ spec->align = 'z';
+ spec->fill[0] = *cp++;
+ spec->fill[1] = '\0';
+ }
+
+ /* minimum width */
+ if (isdigit((uchar)*cp)) {
+ if (*cp == '0') {
+ return 0;
+ }
+ errno = 0;
+ spec->min_width = mpd_strtossize(cp, &cp, 10);
+ if (errno == ERANGE || errno == EINVAL) {
+ return 0;
+ }
+ }
+
+ /* thousands separator */
+ if (*cp == ',') {
+ spec->dot = ".";
+ spec->sep = ",";
+ spec->grouping = "\003\003";
+ cp++;
+ }
+
+ /* fraction digits or significant digits */
+ if (*cp == '.') {
+ cp++;
+ if (!isdigit((uchar)*cp)) {
+ return 0;
+ }
+ errno = 0;
+ spec->prec = mpd_strtossize(cp, &cp, 10);
+ if (errno == ERANGE || errno == EINVAL) {
+ return 0;
+ }
+ }
+
+ /* type */
+ if (*cp == 'E' || *cp == 'e' || *cp == 'F' || *cp == 'f' ||
+ *cp == 'G' || *cp == 'g' || *cp == '%') {
+ spec->type = *cp++;
+ }
+ else if (*cp == 'N' || *cp == 'n') {
+ /* locale specific conversion */
+ struct lconv *lc;
+ /* separator has already been specified */
+ if (*spec->sep) {
+ return 0;
+ }
+ spec->type = *cp++;
+ spec->type = (spec->type == 'N') ? 'G' : 'g';
+ lc = localeconv();
+ spec->dot = lc->decimal_point;
+ spec->sep = lc->thousands_sep;
+ spec->grouping = lc->grouping;
+ if (mpd_validate_lconv(spec) < 0) {
+ return 0; /* GCOV_NOT_REACHED */
+ }
+ }
+
+ /* check correctness */
+ if (*cp != '\0') {
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+ * The following functions assume that spec->min_width <= MPD_MAX_PREC, which
+ * is made sure in mpd_qformat_spec. Then, even with a spec that inserts a
+ * four-byte separator after each digit, nbytes in the following struct
+ * cannot overflow.
+ */
+
+/* Multibyte string */
+typedef struct {
+ mpd_ssize_t nbytes; /* length in bytes */
+ mpd_ssize_t nchars; /* length in chars */
+ mpd_ssize_t cur; /* current write index */
+ char *data;
+} mpd_mbstr_t;
+
+static inline void
+_mpd_bcopy(char *dest, const char *src, mpd_ssize_t n)
+{
+ while (--n >= 0) {
+ dest[n] = src[n];
+ }
+}
+
+static inline void
+_mbstr_copy_char(mpd_mbstr_t *dest, const char *src, mpd_ssize_t n)
+{
+ dest->nbytes += n;
+ dest->nchars += (n > 0 ? 1 : 0);
+ dest->cur -= n;
+
+ if (dest->data != NULL) {
+ _mpd_bcopy(dest->data+dest->cur, src, n);
+ }
+}
+
+static inline void
+_mbstr_copy_ascii(mpd_mbstr_t *dest, const char *src, mpd_ssize_t n)
+{
+ dest->nbytes += n;
+ dest->nchars += n;
+ dest->cur -= n;
+
+ if (dest->data != NULL) {
+ _mpd_bcopy(dest->data+dest->cur, src, n);
+ }
+}
+
+static inline void
+_mbstr_copy_pad(mpd_mbstr_t *dest, mpd_ssize_t n)
+{
+ dest->nbytes += n;
+ dest->nchars += n;
+ dest->cur -= n;
+
+ if (dest->data != NULL) {
+ char *cp = dest->data + dest->cur;
+ while (--n >= 0) {
+ cp[n] = '0';
+ }
+ }
+}
+
+/*
+ * Copy a numeric string to dest->data, adding separators in the integer
+ * part according to spec->grouping. If leading zero padding is enabled
+ * and the result is smaller than spec->min_width, continue adding zeros
+ * and separators until the minimum width is reached.
+ *
+ * The final length of dest->data is stored in dest->nbytes. The number
+ * of UTF-8 characters is stored in dest->nchars.
+ *
+ * First run (dest->data == NULL): determine the length of the result
+ * string and store it in dest->nbytes.
+ *
+ * Second run (write to dest->data): data is written in chunks and in
+ * reverse order, starting with the rest of the numeric string.
+ */
+static void
+_mpd_add_sep_dot(mpd_mbstr_t *dest,
+ const char *sign, /* location of optional sign */
+ const char *src, mpd_ssize_t n_src, /* integer part and length */
+ const char *dot, /* location of optional decimal point */
+ const char *rest, mpd_ssize_t n_rest, /* remaining part and length */
+ const mpd_spec_t *spec)
+{
+ mpd_ssize_t n_sep, n_sign, consume;
+ const char *g;
+ int pad = 0;
+
+ n_sign = sign ? 1 : 0;
+ n_sep = (mpd_ssize_t)strlen(spec->sep);
+ /* Initial write index: set to location of '\0' in the output string.
+ * Irrelevant for the first run. */
+ dest->cur = dest->nbytes;
+ dest->nbytes = dest->nchars = 0;
+
+ _mbstr_copy_ascii(dest, rest, n_rest);
+
+ if (dot) {
+ _mbstr_copy_char(dest, dot, (mpd_ssize_t)strlen(dot));
+ }
+
+ g = spec->grouping;
+ consume = *g;
+ while (1) {
+ /* If the group length is 0 or CHAR_MAX or greater than the
+ * number of source bytes, consume all remaining bytes. */
+ if (*g == 0 || *g == CHAR_MAX || consume > n_src) {
+ consume = n_src;
+ }
+ n_src -= consume;
+ if (pad) {
+ _mbstr_copy_pad(dest, consume);
+ }
+ else {
+ _mbstr_copy_ascii(dest, src+n_src, consume);
+ }
+
+ if (n_src == 0) {
+ /* Either the real source of intpart digits or the virtual
+ * source of padding zeros is exhausted. */
+ if (spec->align == 'z' &&
+ dest->nchars + n_sign < spec->min_width) {
+ /* Zero padding is set and length < min_width:
+ * Generate n_src additional characters. */
+ n_src = spec->min_width - (dest->nchars + n_sign);
+ /* Next iteration:
+ * case *g == 0 || *g == CHAR_MAX:
+ * consume all padding characters
+ * case consume < g*:
+ * fill remainder of current group
+ * case consume == g*
+ * copying is a no-op */
+ consume = *g - consume;
+ /* Switch on virtual source of zeros. */
+ pad = 1;
+ continue;
+ }
+ break;
+ }
+
+ if (n_sep > 0) {
+ /* If padding is switched on, separators are counted
+ * as padding characters. This rule does not apply if
+ * the separator would be the first character of the
+ * result string. */
+ if (pad && n_src > 1) n_src -= 1;
+ _mbstr_copy_char(dest, spec->sep, n_sep);
+ }
+
+ /* If non-NUL, use the next value for grouping. */
+ if (*g && *(g+1)) g++;
+ consume = *g;
+ }
+
+ if (sign) {
+ _mbstr_copy_ascii(dest, sign, 1);
+ }
+
+ if (dest->data) {
+ dest->data[dest->nbytes] = '\0';
+ }
+}
+
+/*
+ * Convert a numeric-string to its locale-specific appearance.
+ * The string must have one of these forms:
+ *
+ * 1) [sign] digits [exponent-part]
+ * 2) [sign] digits '.' [digits] [exponent-part]
+ *
+ * Not allowed, since _mpd_to_string() never returns this form:
+ *
+ * 3) [sign] '.' digits [exponent-part]
+ *
+ * Input: result->data := original numeric string (ASCII)
+ * result->bytes := strlen(result->data)
+ * result->nchars := strlen(result->data)
+ *
+ * Output: result->data := modified or original string
+ * result->bytes := strlen(result->data)
+ * result->nchars := number of characters (possibly UTF-8)
+ */
+static int
+_mpd_apply_lconv(mpd_mbstr_t *result, const mpd_spec_t *spec, uint32_t *status)
+{
+ const char *sign = NULL, *intpart = NULL, *dot = NULL;
+ const char *rest, *dp;
+ char *decstring;
+ mpd_ssize_t n_int, n_rest;
+
+ /* original numeric string */
+ dp = result->data;
+
+ /* sign */
+ if (*dp == '+' || *dp == '-' || *dp == ' ') {
+ sign = dp++;
+ }
+ /* integer part */
+ assert(isdigit((uchar)*dp));
+ intpart = dp++;
+ while (isdigit((uchar)*dp)) {
+ dp++;
+ }
+ n_int = (mpd_ssize_t)(dp-intpart);
+ /* decimal point */
+ if (*dp == '.') {
+ dp++; dot = spec->dot;
+ }
+ /* rest */
+ rest = dp;
+ n_rest = result->nbytes - (mpd_ssize_t)(dp-result->data);
+
+ if (dot == NULL && (*spec->sep == '\0' || *spec->grouping == '\0')) {
+ /* _mpd_add_sep_dot() would not change anything */
+ return 1;
+ }
+
+ /* Determine the size of the new decimal string after inserting the
+ * decimal point, optional separators and optional padding. */
+ decstring = result->data;
+ result->data = NULL;
+ _mpd_add_sep_dot(result, sign, intpart, n_int, dot,
+ rest, n_rest, spec);
+
+ result->data = mpd_alloc(result->nbytes+1, 1);
+ if (result->data == NULL) {
+ *status |= MPD_Malloc_error;
+ mpd_free(decstring);
+ return 0;
+ }
+
+ /* Perform actual writes. */
+ _mpd_add_sep_dot(result, sign, intpart, n_int, dot,
+ rest, n_rest, spec);
+
+ mpd_free(decstring);
+ return 1;
+}
+
+/* Add padding to the formatted string if necessary. */
+static int
+_mpd_add_pad(mpd_mbstr_t *result, const mpd_spec_t *spec, uint32_t *status)
+{
+ if (result->nchars < spec->min_width) {
+ mpd_ssize_t add_chars, add_bytes;
+ size_t lpad = 0, rpad = 0;
+ size_t n_fill, len, i, j;
+ char align = spec->align;
+ uint8_t err = 0;
+ char *cp;
+
+ n_fill = strlen(spec->fill);
+ add_chars = (spec->min_width - result->nchars);
+ /* max value: MPD_MAX_PREC * 4 */
+ add_bytes = add_chars * (mpd_ssize_t)n_fill;
+
+ cp = result->data = mpd_realloc(result->data,
+ result->nbytes+add_bytes+1,
+ sizeof *result->data, &err);
+ if (err) {
+ *status |= MPD_Malloc_error;
+ mpd_free(result->data);
+ return 0;
+ }
+
+ if (align == 'z') {
+ align = '=';
+ }
+
+ if (align == '<') {
+ rpad = add_chars;
+ }
+ else if (align == '>' || align == '=') {
+ lpad = add_chars;
+ }
+ else { /* align == '^' */
+ lpad = add_chars/2;
+ rpad = add_chars-lpad;
+ }
+
+ len = result->nbytes;
+ if (align == '=' && (*cp == '-' || *cp == '+' || *cp == ' ')) {
+ /* leave sign in the leading position */
+ cp++; len--;
+ }
+
+ memmove(cp+n_fill*lpad, cp, len);
+ for (i = 0; i < lpad; i++) {
+ for (j = 0; j < n_fill; j++) {
+ cp[i*n_fill+j] = spec->fill[j];
+ }
+ }
+ cp += (n_fill*lpad + len);
+ for (i = 0; i < rpad; i++) {
+ for (j = 0; j < n_fill; j++) {
+ cp[i*n_fill+j] = spec->fill[j];
+ }
+ }
+
+ result->nbytes += add_bytes;
+ result->nchars += add_chars;
+ result->data[result->nbytes] = '\0';
+ }
+
+ return 1;
+}
+
+/* Round a number to prec digits. The adjusted exponent stays the same
+ or increases by one if rounding up crosses a power of ten boundary.
+ If result->digits would exceed MPD_MAX_PREC+1, MPD_Invalid_operation
+ is set and the result is NaN. */
+static inline void
+_mpd_round(mpd_t *result, const mpd_t *a, mpd_ssize_t prec,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t exp = a->exp + a->digits - prec;
+
+ if (prec <= 0) {
+ mpd_seterror(result, MPD_Invalid_operation, status); /* GCOV_NOT_REACHED */
+ return; /* GCOV_NOT_REACHED */
+ }
+ if (mpd_isspecial(a) || mpd_iszero(a)) {
+ mpd_qcopy(result, a, status); /* GCOV_NOT_REACHED */
+ return; /* GCOV_NOT_REACHED */
+ }
+
+ mpd_qrescale_fmt(result, a, exp, ctx, status);
+ if (result->digits > prec) {
+ mpd_qrescale_fmt(result, result, exp+1, ctx, status);
+ }
+}
+
+/*
+ * Return the string representation of an mpd_t, formatted according to 'spec'.
+ * The format specification is assumed to be valid. Memory errors are indicated
+ * as usual. This function is quiet.
+ */
+char *
+mpd_qformat_spec(const mpd_t *dec, const mpd_spec_t *spec,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_uint_t dt[MPD_MINALLOC_MAX];
+ mpd_t tmp = {MPD_STATIC|MPD_STATIC_DATA,0,0,0,MPD_MINALLOC_MAX,dt};
+ mpd_ssize_t dplace = MPD_DEFAULT_DOTPLACE;
+ mpd_mbstr_t result;
+ mpd_spec_t stackspec;
+ char type = spec->type;
+ int flags = 0;
+
+
+ if (spec->min_width > MPD_MAX_PREC) {
+ *status |= MPD_Invalid_operation;
+ return NULL;
+ }
+
+ if (isupper((uchar)type)) {
+ type = tolower((uchar)type);
+ flags |= MPD_FMT_UPPER;
+ }
+ if (spec->sign == ' ') {
+ flags |= MPD_FMT_SIGN_SPACE;
+ }
+ else if (spec->sign == '+') {
+ flags |= MPD_FMT_SIGN_PLUS;
+ }
+
+ if (mpd_isspecial(dec)) {
+ if (spec->align == 'z') {
+ stackspec = *spec;
+ stackspec.fill[0] = ' ';
+ stackspec.fill[1] = '\0';
+ stackspec.align = '>';
+ spec = &stackspec;
+ }
+ }
+ else {
+ uint32_t workstatus = 0;
+ mpd_ssize_t prec;
+
+ switch (type) {
+ case 'g': flags |= MPD_FMT_TOSCI; break;
+ case 'e': flags |= MPD_FMT_EXP; break;
+ case '%': flags |= MPD_FMT_PERCENT;
+ if (!mpd_qcopy(&tmp, dec, status)) {
+ return NULL;
+ }
+ tmp.exp += 2;
+ dec = &tmp;
+ type = 'f'; /* fall through */
+ case 'f': flags |= MPD_FMT_FIXED; break;
+ default: abort(); /* debug: GCOV_NOT_REACHED */
+ }
+
+ if (spec->prec >= 0) {
+ if (spec->prec > MPD_MAX_PREC) {
+ *status |= MPD_Invalid_operation;
+ goto error;
+ }
+
+ switch (type) {
+ case 'g':
+ prec = (spec->prec == 0) ? 1 : spec->prec;
+ if (dec->digits > prec) {
+ _mpd_round(&tmp, dec, prec, ctx,
+ &workstatus);
+ dec = &tmp;
+ }
+ break;
+ case 'e':
+ if (mpd_iszero(dec)) {
+ dplace = 1-spec->prec;
+ }
+ else {
+ _mpd_round(&tmp, dec, spec->prec+1, ctx,
+ &workstatus);
+ dec = &tmp;
+ }
+ break;
+ case 'f':
+ mpd_qrescale(&tmp, dec, -spec->prec, ctx,
+ &workstatus);
+ dec = &tmp;
+ break;
+ }
+ }
+
+ if (type == 'f') {
+ if (mpd_iszero(dec) && dec->exp > 0) {
+ mpd_qrescale(&tmp, dec, 0, ctx, &workstatus);
+ dec = &tmp;
+ }
+ }
+
+ if (workstatus&MPD_Errors) {
+ *status |= (workstatus&MPD_Errors);
+ goto error;
+ }
+ }
+
+ /*
+ * At this point, for all scaled or non-scaled decimals:
+ * 1) 1 <= digits <= MAX_PREC+1
+ * 2) adjexp(scaled) = adjexp(orig) [+1]
+ * 3) case 'g': MIN_ETINY <= exp <= MAX_EMAX+1
+ * case 'e': MIN_ETINY-MAX_PREC <= exp <= MAX_EMAX+1
+ * case 'f': MIN_ETINY <= exp <= MAX_EMAX+1
+ * 4) max memory alloc in _mpd_to_string:
+ * case 'g': MAX_PREC+36
+ * case 'e': MAX_PREC+36
+ * case 'f': 2*MPD_MAX_PREC+30
+ */
+ result.nbytes = _mpd_to_string(&result.data, dec, flags, dplace);
+ result.nchars = result.nbytes;
+ if (result.nbytes < 0) {
+ *status |= MPD_Malloc_error;
+ goto error;
+ }
+
+ if (*spec->dot != '\0' && !mpd_isspecial(dec)) {
+ if (result.nchars > MPD_MAX_PREC+36) {
+ /* Since a group length of one is not explicitly
+ * disallowed, ensure that it is always possible to
+ * insert a four byte separator after each digit. */
+ *status |= MPD_Invalid_operation;
+ mpd_free(result.data);
+ goto error;
+ }
+ if (!_mpd_apply_lconv(&result, spec, status)) {
+ goto error;
+ }
+ }
+
+ if (spec->min_width) {
+ if (!_mpd_add_pad(&result, spec, status)) {
+ goto error;
+ }
+ }
+
+ mpd_del(&tmp);
+ return result.data;
+
+error:
+ mpd_del(&tmp);
+ return NULL;
+}
+
+char *
+mpd_qformat(const mpd_t *dec, const char *fmt, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_spec_t spec;
+
+ if (!mpd_parse_fmt_str(&spec, fmt, 1)) {
+ *status |= MPD_Invalid_operation;
+ return NULL;
+ }
+
+ return mpd_qformat_spec(dec, &spec, ctx, status);
+}
+
+/*
+ * The specification has a *condition* called Invalid_operation and an
+ * IEEE *signal* called Invalid_operation. The former corresponds to
+ * MPD_Invalid_operation, the latter to MPD_IEEE_Invalid_operation.
+ * MPD_IEEE_Invalid_operation comprises the following conditions:
+ *
+ * [MPD_Conversion_syntax, MPD_Division_impossible, MPD_Division_undefined,
+ * MPD_Fpu_error, MPD_Invalid_context, MPD_Invalid_operation,
+ * MPD_Malloc_error]
+ *
+ * In the following functions, 'flag' denotes the condition, 'signal'
+ * denotes the IEEE signal.
+ */
+
+static const char *mpd_flag_string[MPD_NUM_FLAGS] = {
+ "Clamped",
+ "Conversion_syntax",
+ "Division_by_zero",
+ "Division_impossible",
+ "Division_undefined",
+ "Fpu_error",
+ "Inexact",
+ "Invalid_context",
+ "Invalid_operation",
+ "Malloc_error",
+ "Not_implemented",
+ "Overflow",
+ "Rounded",
+ "Subnormal",
+ "Underflow",
+};
+
+static const char *mpd_signal_string[MPD_NUM_FLAGS] = {
+ "Clamped",
+ "IEEE_Invalid_operation",
+ "Division_by_zero",
+ "IEEE_Invalid_operation",
+ "IEEE_Invalid_operation",
+ "IEEE_Invalid_operation",
+ "Inexact",
+ "IEEE_Invalid_operation",
+ "IEEE_Invalid_operation",
+ "IEEE_Invalid_operation",
+ "Not_implemented",
+ "Overflow",
+ "Rounded",
+ "Subnormal",
+ "Underflow",
+};
+
+/* print conditions to buffer, separated by spaces */
+int
+mpd_snprint_flags(char *dest, int nmemb, uint32_t flags)
+{
+ char *cp;
+ int n, j;
+
+ assert(nmemb >= MPD_MAX_FLAG_STRING);
+
+ *dest = '\0'; cp = dest;
+ for (j = 0; j < MPD_NUM_FLAGS; j++) {
+ if (flags & (1U<<j)) {
+ n = snprintf(cp, nmemb, "%s ", mpd_flag_string[j]);
+ if (n < 0 || n >= nmemb) return -1;
+ cp += n; nmemb -= n;
+ }
+ }
+
+ if (cp != dest) {
+ *(--cp) = '\0';
+ }
+
+ return (int)(cp-dest);
+}
+
+/* print conditions to buffer, in list form */
+int
+mpd_lsnprint_flags(char *dest, int nmemb, uint32_t flags, const char *flag_string[])
+{
+ char *cp;
+ int n, j;
+
+ assert(nmemb >= MPD_MAX_FLAG_LIST);
+ if (flag_string == NULL) {
+ flag_string = mpd_flag_string;
+ }
+
+ *dest = '[';
+ *(dest+1) = '\0';
+ cp = dest+1;
+ --nmemb;
+
+ for (j = 0; j < MPD_NUM_FLAGS; j++) {
+ if (flags & (1U<<j)) {
+ n = snprintf(cp, nmemb, "%s, ", flag_string[j]);
+ if (n < 0 || n >= nmemb) return -1;
+ cp += n; nmemb -= n;
+ }
+ }
+
+ /* erase the last ", " */
+ if (cp != dest+1) {
+ cp -= 2;
+ }
+
+ *cp++ = ']';
+ *cp = '\0';
+
+ return (int)(cp-dest); /* strlen, without NUL terminator */
+}
+
+/* print signals to buffer, in list form */
+int
+mpd_lsnprint_signals(char *dest, int nmemb, uint32_t flags, const char *signal_string[])
+{
+ char *cp;
+ int n, j;
+ int ieee_invalid_done = 0;
+
+ assert(nmemb >= MPD_MAX_SIGNAL_LIST);
+ if (signal_string == NULL) {
+ signal_string = mpd_signal_string;
+ }
+
+ *dest = '[';
+ *(dest+1) = '\0';
+ cp = dest+1;
+ --nmemb;
+
+ for (j = 0; j < MPD_NUM_FLAGS; j++) {
+ uint32_t f = flags & (1U<<j);
+ if (f) {
+ if (f&MPD_IEEE_Invalid_operation) {
+ if (ieee_invalid_done) {
+ continue;
+ }
+ ieee_invalid_done = 1;
+ }
+ n = snprintf(cp, nmemb, "%s, ", signal_string[j]);
+ if (n < 0 || n >= nmemb) return -1;
+ cp += n; nmemb -= n;
+ }
+ }
+
+ /* erase the last ", " */
+ if (cp != dest+1) {
+ cp -= 2;
+ }
+
+ *cp++ = ']';
+ *cp = '\0';
+
+ return (int)(cp-dest); /* strlen, without NUL terminator */
+}
+
+/* The following two functions are mainly intended for debugging. */
+void
+mpd_fprint(FILE *file, const mpd_t *dec)
+{
+ char *decstring;
+
+ decstring = mpd_to_sci(dec, 1);
+ if (decstring != NULL) {
+ fprintf(file, "%s\n", decstring);
+ mpd_free(decstring);
+ }
+ else {
+ fputs("mpd_fprint: output error\n", file); /* GCOV_NOT_REACHED */
+ }
+}
+
+void
+mpd_print(const mpd_t *dec)
+{
+ char *decstring;
+
+ decstring = mpd_to_sci(dec, 1);
+ if (decstring != NULL) {
+ printf("%s\n", decstring);
+ mpd_free(decstring);
+ }
+ else {
+ fputs("mpd_fprint: output error\n", stderr); /* GCOV_NOT_REACHED */
+ }
+}
+
+
diff --git a/Modules/_decimal/libmpdec/io.h b/Modules/_decimal/libmpdec/io.h
new file mode 100644
index 0000000000..de5486a00c
--- /dev/null
+++ b/Modules/_decimal/libmpdec/io.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef IO_H
+#define IO_H
+
+
+#include <errno.h>
+#include "mpdecimal.h"
+
+
+#if SIZE_MAX == MPD_SIZE_MAX
+ #define mpd_strtossize _mpd_strtossize
+#else
+static inline mpd_ssize_t
+mpd_strtossize(const char *s, char **end, int base)
+{
+ int64_t retval;
+
+ errno = 0;
+ retval = _mpd_strtossize(s, end, base);
+ if (errno == 0 && (retval > MPD_SSIZE_MAX || retval < MPD_SSIZE_MIN)) {
+ errno = ERANGE;
+ }
+ if (errno == ERANGE) {
+ return (retval < 0) ? MPD_SSIZE_MIN : MPD_SSIZE_MAX;
+ }
+
+ return (mpd_ssize_t)retval;
+}
+#endif
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/literature/REFERENCES.txt b/Modules/_decimal/libmpdec/literature/REFERENCES.txt
new file mode 100644
index 0000000000..9ed5782656
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/REFERENCES.txt
@@ -0,0 +1,51 @@
+
+
+This document contains links to the literature used in the process of
+creating the library. The list is probably not complete.
+
+
+Mike Cowlishaw: General Decimal Arithmetic Specification
+http://speleotrove.com/decimal/decarith.html
+
+
+Jean-Michel Muller: On the definition of ulp (x)
+lara.inist.fr/bitstream/2332/518/1/LIP-RR2005-09.pdf
+
+
+T. E. Hull, A. Abrham: Properly rounded variable precision square root
+http://portal.acm.org/citation.cfm?id=214413
+
+
+T. E. Hull, A. Abrham: Variable precision exponential function
+http://portal.acm.org/citation.cfm?id=6498
+
+
+Roman E. Maeder: Storage allocation for the Karatsuba integer multiplication
+algorithm. http://www.springerlink.com/content/w15058mj6v59t565/
+
+
+J. M. Pollard: The fast Fourier transform in a finite field
+http://www.ams.org/journals/mcom/1971-25-114/S0025-5718-1971-0301966-0/home.html
+
+
+David H. Bailey: FFTs in External or Hierarchical Memory
+http://crd.lbl.gov/~dhbailey/dhbpapers/
+
+
+W. Morven Gentleman: Matrix Multiplication and Fast Fourier Transforms
+http://www.alcatel-lucent.com/bstj/vol47-1968/articles/bstj47-6-1099.pdf
+
+
+Mikko Tommila: Apfloat documentation
+http://www.apfloat.org/apfloat/2.41/apfloat.pdf
+
+
+Joerg Arndt: "Matters Computational"
+http://www.jjj.de/fxt/
+
+
+Karl Hasselstrom: Fast Division of Large Integers
+www.treskal.com/kalle/exjobb/original-report.pdf
+
+
+
diff --git a/Modules/_decimal/libmpdec/literature/bignum.txt b/Modules/_decimal/libmpdec/literature/bignum.txt
new file mode 100644
index 0000000000..f34ff67c61
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/bignum.txt
@@ -0,0 +1,83 @@
+
+
+Bignum support (Fast Number Theoretic Transform or FNT):
+========================================================
+
+Bignum arithmetic in libmpdec uses the scheme for fast convolution
+of integer sequences from:
+
+J. M. Pollard: The fast Fourier transform in a finite field
+http://www.ams.org/journals/mcom/1971-25-114/S0025-5718-1971-0301966-0/home.html
+
+
+The transform in a finite field can be used for convolution in the same
+way as the Fourier Transform. The main advantages of the Number Theoretic
+Transform are that it is both exact and very memory efficient.
+
+
+Convolution in pseudo-code:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ fnt_convolute(a, b):
+ x = fnt(a) # forward transform of a
+ y = fnt(b) # forward transform of b
+ z = pairwise multiply x[i] and y[i]
+ result = inv_fnt(z) # backward transform of z.
+
+
+Extending the maximum transform length (Chinese Remainder Theorem):
+-------------------------------------------------------------------
+
+The maximum transform length is quite limited when using a single
+prime field. However, it is possible to use multiple primes and
+recover the result using the Chinese Remainder Theorem.
+
+
+Multiplication in pseudo-code:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ _mpd_fntmul(u, v):
+ c1 = fnt_convolute(u, v, P1) # convolute modulo prime1
+ c2 = fnt_convolute(u, v, P2) # convolute modulo prime2
+ c3 = fnt_convolute(u, v, P3) # convolute modulo prime3
+ result = crt3(c1, c2, c3) # Chinese Remainder Theorem
+
+
+Optimized transform functions:
+------------------------------
+
+There are three different fnt() functions:
+
+ std_fnt: "standard" decimation in frequency transform for array lengths
+ of 2**n. Performs well up to 1024 words.
+
+ sixstep: Cache-friendly algorithm for array lengths of 2**n. Outperforms
+ std_fnt for large arrays.
+
+ fourstep: Algorithm for array lengths of 3 * 2**n. Also cache friendly
+ in large parts.
+
+
+List of bignum-only files:
+--------------------------
+
+Functions from these files are only used in _mpd_fntmul().
+
+ umodarith.h -> fast low level routines for unsigned modular arithmetic
+ numbertheory.c -> routines for setting up the FNT
+ difradix2.c -> decimation in frequency transform, used as the
+ "base case" by the following three files:
+
+ fnt.c -> standard transform for smaller arrays
+ sixstep.c -> transform large arrays of length 2**n
+ fourstep.c -> transform arrays of length 3 * 2**n
+
+ convolute.c -> do the actual fast convolution, using one of
+ the three transform functions.
+ transpose.c -> transpositions needed for the sixstep algorithm.
+ crt.c -> Chinese Remainder Theorem: use information from three
+ transforms modulo three different primes to get the
+ final result.
+
+
+
diff --git a/Modules/_decimal/libmpdec/literature/fnt.py b/Modules/_decimal/libmpdec/literature/fnt.py
new file mode 100644
index 0000000000..6363536da6
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/fnt.py
@@ -0,0 +1,208 @@
+#
+# Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+
+######################################################################
+# This file lists and checks some of the constants and limits used #
+# in libmpdec's Number Theoretic Transform. At the end of the file #
+# there is an example function for the plain DFT transform. #
+######################################################################
+
+
+#
+# Number theoretic transforms are done in subfields of F(p). P[i]
+# are the primes, D[i] = P[i] - 1 are highly composite and w[i]
+# are the respective primitive roots of F(p).
+#
+# The strategy is to convolute two coefficients modulo all three
+# primes, then use the Chinese Remainder Theorem on the three
+# result arrays to recover the result in the usual base RADIX
+# form.
+#
+
+# ======================================================================
+# Primitive roots
+# ======================================================================
+
+#
+# Verify primitive roots:
+#
+# For a prime field, r is a primitive root if and only if for all prime
+# factors f of p-1, r**((p-1)/f) =/= 1 (mod p).
+#
+def prod(F, E):
+ """Check that the factorization of P-1 is correct. F is the list of
+ factors of P-1, E lists the number of occurrences of each factor."""
+ x = 1
+ for y, z in zip(F, E):
+ x *= y**z
+ return x
+
+def is_primitive_root(r, p, factors, exponents):
+ """Check if r is a primitive root of F(p)."""
+ if p != prod(factors, exponents) + 1:
+ return False
+ for f in factors:
+ q, control = divmod(p-1, f)
+ if control != 0:
+ return False
+ if pow(r, q, p) == 1:
+ return False
+ return True
+
+
+# =================================================================
+# Constants and limits for the 64-bit version
+# =================================================================
+
+RADIX = 10**19
+
+# Primes P1, P2 and P3:
+P = [2**64-2**32+1, 2**64-2**34+1, 2**64-2**40+1]
+
+# P-1, highly composite. The transform length d is variable and
+# must divide D = P-1. Since all D are divisible by 3 * 2**32,
+# transform lengths can be 2**n or 3 * 2**n (where n <= 32).
+D = [2**32 * 3 * (5 * 17 * 257 * 65537),
+ 2**34 * 3**2 * (7 * 11 * 31 * 151 * 331),
+ 2**40 * 3**2 * (5 * 7 * 13 * 17 * 241)]
+
+# Prime factors of P-1 and their exponents:
+F = [(2,3,5,17,257,65537), (2,3,7,11,31,151,331), (2,3,5,7,13,17,241)]
+E = [(32,1,1,1,1,1), (34,2,1,1,1,1,1), (40,2,1,1,1,1,1)]
+
+# Maximum transform length for 2**n. Above that only 3 * 2**31
+# or 3 * 2**32 are possible.
+MPD_MAXTRANSFORM_2N = 2**32
+
+
+# Limits in the terminology of Pollard's paper:
+m2 = (MPD_MAXTRANSFORM_2N * 3) // 2 # Maximum length of the smaller array.
+M1 = M2 = RADIX-1 # Maximum value per single word.
+L = m2 * M1 * M2
+P[0] * P[1] * P[2] > 2 * L
+
+
+# Primitive roots of F(P1), F(P2) and F(P3):
+w = [7, 10, 19]
+
+# The primitive roots are correct:
+for i in range(3):
+ if not is_primitive_root(w[i], P[i], F[i], E[i]):
+ print("FAIL")
+
+
+# =================================================================
+# Constants and limits for the 32-bit version
+# =================================================================
+
+RADIX = 10**9
+
+# Primes P1, P2 and P3:
+P = [2113929217, 2013265921, 1811939329]
+
+# P-1, highly composite. All D = P-1 are divisible by 3 * 2**25,
+# allowing for transform lengths up to 3 * 2**25 words.
+D = [2**25 * 3**2 * 7,
+ 2**27 * 3 * 5,
+ 2**26 * 3**3]
+
+# Prime factors of P-1 and their exponents:
+F = [(2,3,7), (2,3,5), (2,3)]
+E = [(25,2,1), (27,1,1), (26,3)]
+
+# Maximum transform length for 2**n. Above that only 3 * 2**24 or
+# 3 * 2**25 are possible.
+MPD_MAXTRANSFORM_2N = 2**25
+
+
+# Limits in the terminology of Pollard's paper:
+m2 = (MPD_MAXTRANSFORM_2N * 3) // 2 # Maximum length of the smaller array.
+M1 = M2 = RADIX-1 # Maximum value per single word.
+L = m2 * M1 * M2
+P[0] * P[1] * P[2] > 2 * L
+
+
+# Primitive roots of F(P1), F(P2) and F(P3):
+w = [5, 31, 13]
+
+# The primitive roots are correct:
+for i in range(3):
+ if not is_primitive_root(w[i], P[i], F[i], E[i]):
+ print("FAIL")
+
+
+# ======================================================================
+# Example transform using a single prime
+# ======================================================================
+
+def ntt(lst, dir):
+ """Perform a transform on the elements of lst. len(lst) must
+ be 2**n or 3 * 2**n, where n <= 25. This is the slow DFT."""
+ p = 2113929217 # prime
+ d = len(lst) # transform length
+ d_prime = pow(d, (p-2), p) # inverse of d
+ xi = (p-1)//d
+ w = 5 # primitive root of F(p)
+ r = pow(w, xi, p) # primitive root of the subfield
+ r_prime = pow(w, (p-1-xi), p) # inverse of r
+ if dir == 1: # forward transform
+ a = lst # input array
+ A = [0] * d # transformed values
+ for i in range(d):
+ s = 0
+ for j in range(d):
+ s += a[j] * pow(r, i*j, p)
+ A[i] = s % p
+ return A
+ elif dir == -1: # backward transform
+ A = lst # input array
+ a = [0] * d # transformed values
+ for j in range(d):
+ s = 0
+ for i in range(d):
+ s += A[i] * pow(r_prime, i*j, p)
+ a[j] = (d_prime * s) % p
+ return a
+
+def ntt_convolute(a, b):
+ """convolute arrays a and b."""
+ assert(len(a) == len(b))
+ x = ntt(a, 1)
+ y = ntt(b, 1)
+ for i in range(len(a)):
+ y[i] = y[i] * x[i]
+ r = ntt(y, -1)
+ return r
+
+
+# Example: Two arrays representing 21 and 81 in little-endian:
+a = [1, 2, 0, 0]
+b = [1, 8, 0, 0]
+
+assert(ntt_convolute(a, b) == [1, 10, 16, 0])
+assert(21 * 81 == (1*10**0 + 10*10**1 + 16*10**2 + 0*10**3))
diff --git a/Modules/_decimal/libmpdec/literature/matrix-transform.txt b/Modules/_decimal/libmpdec/literature/matrix-transform.txt
new file mode 100644
index 0000000000..701d85d6b4
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/matrix-transform.txt
@@ -0,0 +1,256 @@
+
+
+(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+
+
+The Matrix Fourier Transform:
+=============================
+
+In libmpdec, the Matrix Fourier Transform [1] is called four-step transform
+after a variant that appears in [2]. The algorithm requires that the input
+array can be viewed as an R*C matrix.
+
+All operations are done modulo p. For readability, the proofs drop all
+instances of (mod p).
+
+
+Algorithm four-step (forward transform):
+----------------------------------------
+
+ a := input array
+ d := len(a) = R * C
+ p := prime
+ w := primitive root of unity of the prime field
+ r := w**((p-1)/d)
+ A := output array
+
+ 1) Apply a length R FNT to each column.
+
+ 2) Multiply each matrix element (addressed by j*C+m) by r**(j*m).
+
+ 3) Apply a length C FNT to each row.
+
+ 4) Transpose the matrix.
+
+
+Proof (forward transform):
+--------------------------
+
+ The algorithm can be derived starting from the regular definition of
+ the finite-field transform of length d:
+
+ d-1
+ ,----
+ \
+ A[k] = | a[l] * r**(k * l)
+ /
+ `----
+ l = 0
+
+
+ The sum can be rearranged into the sum of the sums of columns:
+
+ C-1 R-1
+ ,---- ,----
+ \ \
+ = | | a[i * C + j] * r**(k * (i * C + j))
+ / /
+ `---- `----
+ j = 0 i = 0
+
+
+ Extracting a constant from the inner sum:
+
+ C-1 R-1
+ ,---- ,----
+ \ \
+ = | r**k*j * | a[i * C + j] * r**(k * i * C)
+ / /
+ `---- `----
+ j = 0 i = 0
+
+
+ Without any loss of generality, let k = n * R + m,
+ where n < C and m < R:
+
+ C-1 R-1
+ ,---- ,----
+ \ \
+ A[n*R+m] = | r**(R*n*j) * r**(m*j) * | a[i*C+j] * r**(R*C*n*i) * r**(C*m*i)
+ / /
+ `---- `----
+ j = 0 i = 0
+
+
+ Since r = w ** ((p-1) / (R*C)):
+
+ a) r**(R*C*n*i) = w**((p-1)*n*i) = 1
+
+ b) r**(C*m*i) = w**((p-1) / R) ** (m*i) = r_R ** (m*i)
+
+ c) r**(R*n*j) = w**((p-1) / C) ** (n*j) = r_C ** (n*j)
+
+ r_R := root of the subfield of length R.
+ r_C := root of the subfield of length C.
+
+
+ C-1 R-1
+ ,---- ,----
+ \ \
+ A[n*R+m] = | r_C**(n*j) * [ r**(m*j) * | a[i*C+j] * r_R**(m*i) ]
+ / ^ /
+ `---- | `---- 1) transform the columns
+ j = 0 | i = 0
+ ^ |
+ | `-- 2) multiply
+ |
+ `-- 3) transform the rows
+
+
+ Note that the entire RHS is a function of n and m and that the results
+ for each pair (n, m) are stored in Fortran order.
+
+ Let the term in square brackets be f(m, j). Step 1) and 2) precalculate
+ the term for all (m, j). After that, the original matrix is now a lookup
+ table with the mth element in the jth column at location m * C + j.
+
+ Let the complete RHS be g(m, n). Step 3) does an in-place transform of
+ length n on all rows. After that, the original matrix is now a lookup
+ table with the mth element in the nth column at location m * C + n.
+
+ But each (m, n) pair should be written to location n * R + m. Therefore,
+ step 4) transposes the result of step 3).
+
+
+
+Algorithm four-step (inverse transform):
+----------------------------------------
+
+ A := input array
+ d := len(A) = R * C
+ p := prime
+ d' := d**(p-2) # inverse of d
+ w := primitive root of unity of the prime field
+ r := w**((p-1)/d) # root of the subfield
+ r' := w**((p-1) - (p-1)/d) # inverse of r
+ a := output array
+
+ 0) View the matrix as a C*R matrix.
+
+ 1) Transpose the matrix, producing an R*C matrix.
+
+ 2) Apply a length C FNT to each row.
+
+ 3) Multiply each matrix element (addressed by i*C+n) by r**(i*n).
+
+ 4) Apply a length R FNT to each column.
+
+
+Proof (inverse transform):
+--------------------------
+
+ The algorithm can be derived starting from the regular definition of
+ the finite-field inverse transform of length d:
+
+ d-1
+ ,----
+ \
+ a[k] = d' * | A[l] * r' ** (k * l)
+ /
+ `----
+ l = 0
+
+
+ The sum can be rearranged into the sum of the sums of columns. Note
+ that at this stage we still have a C*R matrix, so C denotes the number
+ of rows:
+
+ R-1 C-1
+ ,---- ,----
+ \ \
+ = d' * | | a[j * R + i] * r' ** (k * (j * R + i))
+ / /
+ `---- `----
+ i = 0 j = 0
+
+
+ Extracting a constant from the inner sum:
+
+ R-1 C-1
+ ,---- ,----
+ \ \
+ = d' * | r' ** (k*i) * | a[j * R + i] * r' ** (k * j * R)
+ / /
+ `---- `----
+ i = 0 j = 0
+
+
+ Without any loss of generality, let k = m * C + n,
+ where m < R and n < C:
+
+ R-1 C-1
+ ,---- ,----
+ \ \
+ A[m*C+n] = d' * | r' ** (C*m*i) * r' ** (n*i) * | a[j*R+i] * r' ** (R*C*m*j) * r' ** (R*n*j)
+ / /
+ `---- `----
+ i = 0 j = 0
+
+
+ Since r' = w**((p-1) - (p-1)/d) and d = R*C:
+
+ a) r' ** (R*C*m*j) = w**((p-1)*R*C*m*j - (p-1)*m*j) = 1
+
+ b) r' ** (C*m*i) = w**((p-1)*C - (p-1)/R) ** (m*i) = r_R' ** (m*i)
+
+ c) r' ** (R*n*j) = r_C' ** (n*j)
+
+ d) d' = d**(p-2) = (R*C) ** (p-2) = R**(p-2) * C**(p-2) = R' * C'
+
+ r_R' := inverse of the root of the subfield of length R.
+ r_C' := inverse of the root of the subfield of length C.
+ R' := inverse of R
+ C' := inverse of C
+
+
+ R-1 C-1
+ ,---- ,---- 2) transform the rows of a^T
+ \ \
+ A[m*C+n] = R' * | r_R' ** (m*i) * [ r' ** (n*i) * C' * | a[j*R+i] * r_C' ** (n*j) ]
+ / ^ / ^
+ `---- | `---- |
+ i = 0 | j = 0 |
+ ^ | `-- 1) Transpose input matrix
+ | `-- 3) multiply to address elements by
+ | i * C + j
+ `-- 3) transform the columns
+
+
+
+ Note that the entire RHS is a function of m and n and that the results
+ for each pair (m, n) are stored in C order.
+
+ Let the term in square brackets be f(n, i). Without step 1), the sum
+ would perform a length C transform on the columns of the input matrix.
+ This is a) inefficient and b) the results are needed in C order, so
+ step 1) exchanges rows and columns.
+
+ Step 2) and 3) precalculate f(n, i) for all (n, i). After that, the
+ original matrix is now a lookup table with the ith element in the nth
+ column at location i * C + n.
+
+ Let the complete RHS be g(m, n). Step 4) does an in-place transform of
+ length m on all columns. After that, the original matrix is now a lookup
+ table with the mth element in the nth column at location m * C + n,
+ which means that all A[k] = A[m * C + n] are in the correct order.
+
+
+--
+
+ [1] Joerg Arndt: "Matters Computational"
+ http://www.jjj.de/fxt/
+ [2] David H. Bailey: FFTs in External or Hierarchical Memory
+ http://crd.lbl.gov/~dhbailey/dhbpapers/
+
+
+
diff --git a/Modules/_decimal/libmpdec/literature/mulmod-64.txt b/Modules/_decimal/libmpdec/literature/mulmod-64.txt
new file mode 100644
index 0000000000..029b8de3d7
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/mulmod-64.txt
@@ -0,0 +1,127 @@
+
+
+(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+
+
+==========================================================================
+ Calculate (a * b) % p using special primes
+==========================================================================
+
+A description of the algorithm can be found in the apfloat manual by
+Tommila [1].
+
+
+Definitions:
+------------
+
+In the whole document, "==" stands for "is congruent with".
+
+Result of a * b in terms of high/low words:
+
+ (1) hi * 2**64 + lo = a * b
+
+Special primes:
+
+ (2) p = 2**64 - z + 1, where z = 2**n
+
+Single step modular reduction:
+
+ (3) R(hi, lo) = hi * z - hi + lo
+
+
+Strategy:
+---------
+
+ a) Set (hi, lo) to the result of a * b.
+
+ b) Set (hi', lo') to the result of R(hi, lo).
+
+ c) Repeat step b) until 0 <= hi' * 2**64 + lo' < 2*p.
+
+ d) If the result is less than p, return lo'. Otherwise return lo' - p.
+
+
+The reduction step b) preserves congruence:
+-------------------------------------------
+
+ hi * 2**64 + lo == hi * z - hi + lo (mod p)
+
+ Proof:
+ ~~~~~~
+
+ hi * 2**64 + lo = (2**64 - z + 1) * hi + z * hi - hi + lo
+
+ = p * hi + z * hi - hi + lo
+
+ == z * hi - hi + lo (mod p)
+
+
+Maximum numbers of step b):
+---------------------------
+
+# To avoid unnecessary formalism, define:
+
+def R(hi, lo, z):
+ return divmod(hi * z - hi + lo, 2**64)
+
+# For simplicity, assume hi=2**64-1, lo=2**64-1 after the
+# initial multiplication a * b. This is of course impossible
+# but certainly covers all cases.
+
+# Then, for p1:
+hi=2**64-1; lo=2**64-1; z=2**32
+p1 = 2**64 - z + 1
+
+hi, lo = R(hi, lo, z) # First reduction
+hi, lo = R(hi, lo, z) # Second reduction
+hi * 2**64 + lo < 2 * p1 # True
+
+# For p2:
+hi=2**64-1; lo=2**64-1; z=2**34
+p2 = 2**64 - z + 1
+
+hi, lo = R(hi, lo, z) # First reduction
+hi, lo = R(hi, lo, z) # Second reduction
+hi, lo = R(hi, lo, z) # Third reduction
+hi * 2**64 + lo < 2 * p2 # True
+
+# For p3:
+hi=2**64-1; lo=2**64-1; z=2**40
+p3 = 2**64 - z + 1
+
+hi, lo = R(hi, lo, z) # First reduction
+hi, lo = R(hi, lo, z) # Second reduction
+hi, lo = R(hi, lo, z) # Third reduction
+hi * 2**64 + lo < 2 * p3 # True
+
+
+Step d) preserves congruence and yields a result < p:
+-----------------------------------------------------
+
+ Case hi = 0:
+
+ Case lo < p: trivial.
+
+ Case lo >= p:
+
+ lo == lo - p (mod p) # result is congruent
+
+ p <= lo < 2*p -> 0 <= lo - p < p # result is in the correct range
+
+ Case hi = 1:
+
+ p < 2**64 /\ 2**64 + lo < 2*p -> lo < p # lo is always less than p
+
+ 2**64 + lo == 2**64 + (lo - p) (mod p) # result is congruent
+
+ = lo - p # exactly the same value as the previous RHS
+ # in uint64_t arithmetic.
+
+ p < 2**64 + lo < 2*p -> 0 < 2**64 + (lo - p) < p # correct range
+
+
+
+[1] http://www.apfloat.org/apfloat/2.40/apfloat.pdf
+
+
+
diff --git a/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt b/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt
new file mode 100644
index 0000000000..4d17a928e6
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt
@@ -0,0 +1,269 @@
+
+
+(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+
+
+========================================================================
+ Calculate (a * b) % p using the 80-bit x87 FPU
+========================================================================
+
+A description of the algorithm can be found in the apfloat manual by
+Tommila [1].
+
+The proof follows an argument made by Granlund/Montgomery in [2].
+
+
+Definitions and assumptions:
+----------------------------
+
+The 80-bit extended precision format uses 64 bits for the significand:
+
+ (1) F = 64
+
+The modulus is prime and less than 2**31:
+
+ (2) 2 <= p < 2**31
+
+The factors are less than p:
+
+ (3) 0 <= a < p
+ (4) 0 <= b < p
+
+The product a * b is less than 2**62 and is thus exact in 64 bits:
+
+ (5) n = a * b
+
+The product can be represented in terms of quotient and remainder:
+
+ (6) n = q * p + r
+
+Using (3), (4) and the fact that p is prime, the remainder is always
+greater than zero:
+
+ (7) 0 <= q < p /\ 1 <= r < p
+
+
+Strategy:
+---------
+
+Precalculate the 80-bit long double inverse of p, with a maximum
+relative error of 2**(1-F):
+
+ (8) pinv = (long double)1.0 / p
+
+Calculate an estimate for q = floor(n/p). The multiplication has another
+maximum relative error of 2**(1-F):
+
+ (9) qest = n * pinv
+
+If we can show that q < qest < q+1, then trunc(qest) = q. It is then
+easy to recover the remainder r. The complete algorithm is:
+
+ a) Set the control word to 64-bit precision and truncation mode.
+
+ b) n = a * b # Calculate exact product.
+
+ c) qest = n * pinv # Calculate estimate for the quotient.
+
+ d) q = (qest+2**63)-2**63 # Truncate qest to the exact quotient.
+
+ f) r = n - q * p # Calculate remainder.
+
+
+Proof for q < qest < q+1:
+-------------------------
+
+Using the cumulative error, the error bounds for qest are:
+
+ n n * (1 + 2**(1-F))**2
+ (9) --------------------- <= qest <= ---------------------
+ p * (1 + 2**(1-F))**2 p
+
+
+ Lemma 1:
+ --------
+ n q * p + r
+ (10) q < --------------------- = ---------------------
+ p * (1 + 2**(1-F))**2 p * (1 + 2**(1-F))**2
+
+
+ Proof:
+ ~~~~~~
+
+ (I) q * p * (1 + 2**(1-F))**2 < q * p + r
+
+ (II) q * p * 2**(2-F) + q * p * 2**(2-2*F) < r
+
+ Using (1) and (7), it is sufficient to show that:
+
+ (III) q * p * 2**(-62) + q * p * 2**(-126) < 1 <= r
+
+ (III) can easily be verified by substituting the largest possible
+ values p = 2**31-1 and q = 2**31-2.
+
+ The critical cases occur when r = 1, n = m * p + 1. These cases
+ can be exhaustively verified with a test program.
+
+
+ Lemma 2:
+ --------
+
+ n * (1 + 2**(1-F))**2 (q * p + r) * (1 + 2**(1-F))**2
+ (11) --------------------- = ------------------------------- < q + 1
+ p p
+
+ Proof:
+ ~~~~~~
+
+ (I) (q * p + r) + (q * p + r) * 2**(2-F) + (q * p + r) * 2**(2-2*F) < q * p + p
+
+ (II) (q * p + r) * 2**(2-F) + (q * p + r) * 2**(2-2*F) < p - r
+
+ Using (1) and (7), it is sufficient to show that:
+
+ (III) (q * p + r) * 2**(-62) + (q * p + r) * 2**(-126) < 1 <= p - r
+
+ (III) can easily be verified by substituting the largest possible
+ values p = 2**31-1, q = 2**31-2 and r = 2**31-2.
+
+ The critical cases occur when r = (p - 1), n = m * p - 1. These cases
+ can be exhaustively verified with a test program.
+
+
+[1] http://www.apfloat.org/apfloat/2.40/apfloat.pdf
+[2] http://gmplib.org/~tege/divcnst-pldi94.pdf
+ [Section 7: "Use of floating point"]
+
+
+
+(* Coq proof for (10) and (11) *)
+
+Require Import ZArith.
+Require Import QArith.
+Require Import Qpower.
+Require Import Qabs.
+Require Import Psatz.
+
+Open Scope Q_scope.
+
+
+Ltac qreduce T :=
+ rewrite <- (Qred_correct (T)); simpl (Qred (T)).
+
+Theorem Qlt_move_right :
+ forall x y z:Q, x + z < y <-> x < y - z.
+Proof.
+ intros.
+ split.
+ intros.
+ psatzl Q.
+ intros.
+ psatzl Q.
+Qed.
+
+Theorem Qlt_mult_by_z :
+ forall x y z:Q, 0 < z -> (x < y <-> x * z < y * z).
+Proof.
+ intros.
+ split.
+ intros.
+ apply Qmult_lt_compat_r. trivial. trivial.
+ intros.
+ rewrite <- (Qdiv_mult_l x z). rewrite <- (Qdiv_mult_l y z).
+ apply Qmult_lt_compat_r.
+ apply Qlt_shift_inv_l.
+ trivial. psatzl Q. trivial. psatzl Q. psatzl Q.
+Qed.
+
+Theorem Qle_mult_quad :
+ forall (a b c d:Q),
+ 0 <= a -> a <= c ->
+ 0 <= b -> b <= d ->
+ a * b <= c * d.
+ intros.
+ psatz Q.
+Qed.
+
+
+Theorem q_lt_qest:
+ forall (p q r:Q),
+ (0 < p) -> (p <= (2#1)^31 - 1) ->
+ (0 <= q) -> (q <= p - 1) ->
+ (1 <= r) -> (r <= p - 1) ->
+ q < (q * p + r) / (p * (1 + (2#1)^(-63))^2).
+Proof.
+ intros.
+ rewrite Qlt_mult_by_z with (z := (p * (1 + (2#1)^(-63))^2)).
+
+ unfold Qdiv.
+ rewrite <- Qmult_assoc.
+ rewrite (Qmult_comm (/ (p * (1 + (2 # 1) ^ (-63)) ^ 2)) (p * (1 + (2 # 1) ^ (-63)) ^ 2)).
+ rewrite Qmult_inv_r.
+ rewrite Qmult_1_r.
+
+ assert (q * (p * (1 + (2 # 1) ^ (-63)) ^ 2) == q * p + (q * p) * ((2 # 1) ^ (-62) + (2 # 1) ^ (-126))).
+ qreduce ((1 + (2 # 1) ^ (-63)) ^ 2).
+ qreduce ((2 # 1) ^ (-62) + (2 # 1) ^ (-126)).
+ ring_simplify.
+ reflexivity.
+ rewrite H5.
+
+ rewrite Qplus_comm.
+ rewrite Qlt_move_right.
+ ring_simplify (q * p + r - q * p).
+ qreduce ((2 # 1) ^ (-62) + (2 # 1) ^ (-126)).
+
+ apply Qlt_le_trans with (y := 1).
+ rewrite Qlt_mult_by_z with (z := 85070591730234615865843651857942052864 # 18446744073709551617).
+ ring_simplify.
+
+ apply Qle_lt_trans with (y := ((2 # 1) ^ 31 - (2#1)) * ((2 # 1) ^ 31 - 1)).
+ apply Qle_mult_quad.
+ assumption. psatzl Q. psatzl Q. psatzl Q. psatzl Q. psatzl Q. assumption. psatzl Q. psatzl Q.
+Qed.
+
+Theorem qest_lt_qplus1:
+ forall (p q r:Q),
+ (0 < p) -> (p <= (2#1)^31 - 1) ->
+ (0 <= q) -> (q <= p - 1) ->
+ (1 <= r) -> (r <= p - 1) ->
+ ((q * p + r) * (1 + (2#1)^(-63))^2) / p < q + 1.
+Proof.
+ intros.
+ rewrite Qlt_mult_by_z with (z := p).
+
+ unfold Qdiv.
+ rewrite <- Qmult_assoc.
+ rewrite (Qmult_comm (/ p) p).
+ rewrite Qmult_inv_r.
+ rewrite Qmult_1_r.
+
+ assert ((q * p + r) * (1 + (2 # 1) ^ (-63)) ^ 2 == q * p + r + (q * p + r) * ((2 # 1) ^ (-62) + (2 # 1) ^ (-126))).
+ qreduce ((1 + (2 # 1) ^ (-63)) ^ 2).
+ qreduce ((2 # 1) ^ (-62) + (2 # 1) ^ (-126)).
+ ring_simplify. reflexivity.
+ rewrite H5.
+
+ rewrite <- Qplus_assoc. rewrite <- Qplus_comm. rewrite Qlt_move_right.
+ ring_simplify ((q + 1) * p - q * p).
+
+ rewrite <- Qplus_comm. rewrite Qlt_move_right.
+
+ apply Qlt_le_trans with (y := 1).
+ qreduce ((2 # 1) ^ (-62) + (2 # 1) ^ (-126)).
+
+ rewrite Qlt_mult_by_z with (z := 85070591730234615865843651857942052864 # 18446744073709551617).
+ ring_simplify.
+
+ ring_simplify in H0.
+ apply Qle_lt_trans with (y := (2147483646 # 1) * (2147483647 # 1) + (2147483646 # 1)).
+
+ apply Qplus_le_compat.
+ apply Qle_mult_quad.
+ assumption. psatzl Q. auto with qarith. assumption. psatzl Q.
+ auto with qarith. auto with qarith.
+ psatzl Q. psatzl Q. assumption.
+Qed.
+
+
+
diff --git a/Modules/_decimal/libmpdec/literature/six-step.txt b/Modules/_decimal/libmpdec/literature/six-step.txt
new file mode 100644
index 0000000000..8e45f48758
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/six-step.txt
@@ -0,0 +1,63 @@
+
+
+(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+
+
+The Six Step Transform:
+=======================
+
+In libmpdec, the six-step transform is the Matrix Fourier Transform (See
+matrix-transform.txt) in disguise. It is called six-step transform after
+a variant that appears in [1]. The algorithm requires that the input
+array can be viewed as an R*C matrix.
+
+
+Algorithm six-step (forward transform):
+---------------------------------------
+
+ 1a) Transpose the matrix.
+
+ 1b) Apply a length R FNT to each row.
+
+ 1c) Transpose the matrix.
+
+ 2) Multiply each matrix element (addressed by j*C+m) by r**(j*m).
+
+ 3) Apply a length C FNT to each row.
+
+ 4) Transpose the matrix.
+
+Note that steps 1a) - 1c) are exactly equivalent to step 1) of the Matrix
+Fourier Transform. For large R, it is faster to transpose twice and do
+a transform on the rows than to perform a column transpose directly.
+
+
+
+Algorithm six-step (inverse transform):
+---------------------------------------
+
+ 0) View the matrix as a C*R matrix.
+
+ 1) Transpose the matrix, producing an R*C matrix.
+
+ 2) Apply a length C FNT to each row.
+
+ 3) Multiply each matrix element (addressed by i*C+n) by r**(i*n).
+
+ 4a) Transpose the matrix.
+
+ 4b) Apply a length R FNT to each row.
+
+ 4c) Transpose the matrix.
+
+Again, steps 4a) - 4c) are equivalent to step 4) of the Matrix Fourier
+Transform.
+
+
+
+--
+
+ [1] David H. Bailey: FFTs in External or Hierarchical Memory
+ http://crd.lbl.gov/~dhbailey/dhbpapers/
+
+
diff --git a/Modules/_decimal/libmpdec/literature/umodarith.lisp b/Modules/_decimal/libmpdec/literature/umodarith.lisp
new file mode 100644
index 0000000000..99d71c373d
--- /dev/null
+++ b/Modules/_decimal/libmpdec/literature/umodarith.lisp
@@ -0,0 +1,692 @@
+;
+; Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions
+; are met:
+;
+; 1. Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+;
+; 2. Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution.
+;
+; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+; SUCH DAMAGE.
+;
+
+
+(in-package "ACL2")
+
+(include-book "arithmetic/top-with-meta" :dir :system)
+(include-book "arithmetic-2/floor-mod/floor-mod" :dir :system)
+
+
+;; =====================================================================
+;; Proofs for several functions in umodarith.h
+;; =====================================================================
+
+
+
+;; =====================================================================
+;; Helper theorems
+;; =====================================================================
+
+(defthm elim-mod-m<x<2*m
+ (implies (and (<= m x)
+ (< x (* 2 m))
+ (rationalp x) (rationalp m))
+ (equal (mod x m)
+ (+ x (- m)))))
+
+(defthm modaux-1a
+ (implies (and (< x m) (< 0 x) (< 0 m)
+ (rationalp x) (rationalp m))
+ (equal (mod (- x) m)
+ (+ (- x) m))))
+
+(defthm modaux-1b
+ (implies (and (< (- x) m) (< x 0) (< 0 m)
+ (rationalp x) (rationalp m))
+ (equal (mod x m)
+ (+ x m)))
+ :hints (("Goal" :use ((:instance modaux-1a
+ (x (- x)))))))
+
+(defthm modaux-1c
+ (implies (and (< x m) (< 0 x) (< 0 m)
+ (rationalp x) (rationalp m))
+ (equal (mod x m)
+ x)))
+
+(defthm modaux-2a
+ (implies (and (< 0 b) (< b m)
+ (natp x) (natp b) (natp m)
+ (< (mod (+ b x) m) b))
+ (equal (mod (+ (- m) b x) m)
+ (+ (- m) b (mod x m)))))
+
+(defthm modaux-2b
+ (implies (and (< 0 b) (< b m)
+ (natp x) (natp b) (natp m)
+ (< (mod (+ b x) m) b))
+ (equal (mod (+ b x) m)
+ (+ (- m) b (mod x m))))
+ :hints (("Goal" :use (modaux-2a))))
+
+(defthm linear-mod-1
+ (implies (and (< x m) (< b m)
+ (natp x) (natp b)
+ (rationalp m))
+ (equal (< x (mod (+ (- b) x) m))
+ (< x b)))
+ :hints (("Goal" :use ((:instance modaux-1a
+ (x (+ b (- x))))))))
+
+(defthm linear-mod-2
+ (implies (and (< 0 b) (< b m)
+ (natp x) (natp b)
+ (natp m))
+ (equal (< (mod x m)
+ (mod (+ (- b) x) m))
+ (< (mod x m) b))))
+
+(defthm linear-mod-3
+ (implies (and (< x m) (< b m)
+ (natp x) (natp b)
+ (rationalp m))
+ (equal (<= b (mod (+ b x) m))
+ (< (+ b x) m)))
+ :hints (("Goal" :use ((:instance elim-mod-m<x<2*m
+ (x (+ b x)))))))
+
+(defthm modaux-2c
+ (implies (and (< 0 b) (< b m)
+ (natp x) (natp b) (natp m)
+ (<= b (mod (+ b x) m)))
+ (equal (mod (+ b x) m)
+ (+ b (mod x m))))
+ :hints (("Subgoal *1/8''" :use (linear-mod-3))))
+
+(defthmd modaux-2d
+ (implies (and (< x m) (< 0 x) (< 0 m)
+ (< (- m) b) (< b 0) (rationalp m)
+ (<= x (mod (+ b x) m))
+ (rationalp x) (rationalp b))
+ (equal (+ (- m) (mod (+ b x) m))
+ (+ b x)))
+ :hints (("Goal" :cases ((<= 0 (+ b x))))
+ ("Subgoal 2'" :use ((:instance modaux-1b
+ (x (+ b x)))))))
+
+(defthm mod-m-b
+ (implies (and (< 0 x) (< 0 b) (< 0 m)
+ (< x b) (< b m)
+ (natp x) (natp b) (natp m))
+ (equal (mod (+ (mod (- x) m) b) m)
+ (mod (- x) b))))
+
+
+;; =====================================================================
+;; addmod, submod
+;; =====================================================================
+
+(defun addmod (a b m base)
+ (let* ((s (mod (+ a b) base))
+ (s (if (< s a) (mod (- s m) base) s))
+ (s (if (>= s m) (mod (- s m) base) s)))
+ s))
+
+(defthmd addmod-correct
+ (implies (and (< 0 m) (< m base)
+ (< a m) (<= b m)
+ (natp m) (natp base)
+ (natp a) (natp b))
+ (equal (addmod a b m base)
+ (mod (+ a b) m)))
+ :hints (("Goal" :cases ((<= base (+ a b))))
+ ("Subgoal 2.1'" :use ((:instance elim-mod-m<x<2*m
+ (x (+ a b)))))))
+
+(defun submod (a b m base)
+ (let* ((d (mod (- a b) base))
+ (d (if (< a d) (mod (+ d m) base) d)))
+ d))
+
+(defthmd submod-aux1
+ (implies (and (< a (mod (+ a (- b)) base))
+ (< 0 base) (< a base) (<= b base)
+ (natp base) (natp a) (natp b))
+ (< a b))
+ :rule-classes :forward-chaining)
+
+(defthmd submod-aux2
+ (implies (and (<= (mod (+ a (- b)) base) a)
+ (< 0 base) (< a base) (< b base)
+ (natp base) (natp a) (natp b))
+ (<= b a))
+ :rule-classes :forward-chaining)
+
+(defthmd submod-correct
+ (implies (and (< 0 m) (< m base)
+ (< a m) (<= b m)
+ (natp m) (natp base)
+ (natp a) (natp b))
+ (equal (submod a b m base)
+ (mod (- a b) m)))
+ :hints (("Goal" :cases ((<= base (+ a b))))
+ ("Subgoal 2.2" :use ((:instance submod-aux1)))
+ ("Subgoal 2.2'''" :cases ((and (< 0 (+ a (- b) m))
+ (< (+ a (- b) m) m))))
+ ("Subgoal 2.1" :use ((:instance submod-aux2)))
+ ("Subgoal 1.2" :use ((:instance submod-aux1)))
+ ("Subgoal 1.1" :use ((:instance submod-aux2)))))
+
+
+(defun submod-2 (a b m base)
+ (let* ((d (mod (- a b) base))
+ (d (if (< a b) (mod (+ d m) base) d)))
+ d))
+
+(defthm submod-2-correct
+ (implies (and (< 0 m) (< m base)
+ (< a m) (<= b m)
+ (natp m) (natp base)
+ (natp a) (natp b))
+ (equal (submod-2 a b m base)
+ (mod (- a b) m)))
+ :hints (("Subgoal 2'" :cases ((and (< 0 (+ a (- b) m))
+ (< (+ a (- b) m) m))))))
+
+
+;; =========================================================================
+;; ext-submod is correct
+;; =========================================================================
+
+; a < 2*m, b < 2*m
+(defun ext-submod (a b m base)
+ (let* ((a (if (>= a m) (- a m) a))
+ (b (if (>= b m) (- b m) b))
+ (d (mod (- a b) base))
+ (d (if (< a b) (mod (+ d m) base) d)))
+ d))
+
+; a < 2*m, b < 2*m
+(defun ext-submod-2 (a b m base)
+ (let* ((a (mod a m))
+ (b (mod b m))
+ (d (mod (- a b) base))
+ (d (if (< a b) (mod (+ d m) base) d)))
+ d))
+
+(defthmd ext-submod-ext-submod-2-equal
+ (implies (and (< 0 m) (< m base)
+ (< a (* 2 m)) (< b (* 2 m))
+ (natp m) (natp base)
+ (natp a) (natp b))
+ (equal (ext-submod a b m base)
+ (ext-submod-2 a b m base))))
+
+(defthmd ext-submod-2-correct
+ (implies (and (< 0 m) (< m base)
+ (< a (* 2 m)) (< b (* 2 m))
+ (natp m) (natp base)
+ (natp a) (natp b))
+ (equal (ext-submod-2 a b m base)
+ (mod (- a b) m))))
+
+
+;; =========================================================================
+;; dw-reduce is correct
+;; =========================================================================
+
+(defun dw-reduce (hi lo m base)
+ (let* ((r1 (mod hi m))
+ (r2 (mod (+ (* r1 base) lo) m)))
+ r2))
+
+(defthmd dw-reduce-correct
+ (implies (and (< 0 m) (< m base)
+ (< hi base) (< lo base)
+ (natp m) (natp base)
+ (natp hi) (natp lo))
+ (equal (dw-reduce hi lo m base)
+ (mod (+ (* hi base) lo) m))))
+
+(defthmd <=-multiply-both-sides-by-z
+ (implies (and (rationalp x) (rationalp y)
+ (< 0 z) (rationalp z))
+ (equal (<= x y)
+ (<= (* z x) (* z y)))))
+
+(defthmd dw-reduce-aux1
+ (implies (and (< 0 m) (< m base)
+ (natp m) (natp base)
+ (< lo base) (natp lo)
+ (< x m) (natp x))
+ (< (+ lo (* base x)) (* base m)))
+ :hints (("Goal" :cases ((<= (+ x 1) m)))
+ ("Subgoal 1''" :cases ((<= (* base (+ x 1)) (* base m))))
+ ("subgoal 1.2" :use ((:instance <=-multiply-both-sides-by-z
+ (x (+ 1 x))
+ (y m)
+ (z base))))))
+
+(defthm dw-reduce-aux2
+ (implies (and (< x (* base m))
+ (< 0 m) (< m base)
+ (natp m) (natp base) (natp x))
+ (< (floor x m) base)))
+
+;; This is the necessary condition for using _mpd_div_words().
+(defthmd dw-reduce-second-quotient-fits-in-single-word
+ (implies (and (< 0 m) (< m base)
+ (< hi base) (< lo base)
+ (natp m) (natp base)
+ (natp hi) (natp lo)
+ (equal r1 (mod hi m)))
+ (< (floor (+ (* r1 base) lo) m)
+ base))
+ :hints (("Goal" :cases ((< r1 m)))
+ ("Subgoal 1''" :cases ((< (+ lo (* base (mod hi m))) (* base m))))
+ ("Subgoal 1.2" :use ((:instance dw-reduce-aux1
+ (x (mod hi m)))))))
+
+
+;; =========================================================================
+;; dw-submod is correct
+;; =========================================================================
+
+(defun dw-submod (a hi lo m base)
+ (let* ((r (dw-reduce hi lo m base))
+ (d (mod (- a r) base))
+ (d (if (< a r) (mod (+ d m) base) d)))
+ d))
+
+(defthmd dw-submod-aux1
+ (implies (and (natp a) (< 0 m) (natp m)
+ (natp x) (equal r (mod x m)))
+ (equal (mod (- a x) m)
+ (mod (- a r) m))))
+
+(defthmd dw-submod-correct
+ (implies (and (< 0 m) (< m base)
+ (natp a) (< a m)
+ (< hi base) (< lo base)
+ (natp m) (natp base)
+ (natp hi) (natp lo))
+ (equal (dw-submod a hi lo m base)
+ (mod (- a (+ (* base hi) lo)) m)))
+ :hints (("Goal" :in-theory (disable dw-reduce)
+ :use ((:instance dw-submod-aux1
+ (x (+ lo (* base hi)))
+ (r (dw-reduce hi lo m base)))
+ (:instance dw-reduce-correct)))))
+
+
+;; =========================================================================
+;; ANSI C arithmetic for uint64_t
+;; =========================================================================
+
+(defun add (a b)
+ (mod (+ a b)
+ (expt 2 64)))
+
+(defun sub (a b)
+ (mod (- a b)
+ (expt 2 64)))
+
+(defun << (w n)
+ (mod (* w (expt 2 n))
+ (expt 2 64)))
+
+(defun >> (w n)
+ (floor w (expt 2 n)))
+
+;; join upper and lower half of a double word, yielding a 128 bit number
+(defun join (hi lo)
+ (+ (* (expt 2 64) hi) lo))
+
+
+;; =============================================================================
+;; Fast modular reduction
+;; =============================================================================
+
+;; These are the three primes used in the Number Theoretic Transform.
+;; A fast modular reduction scheme exists for all of them.
+(defmacro p1 ()
+ (+ (expt 2 64) (- (expt 2 32)) 1))
+
+(defmacro p2 ()
+ (+ (expt 2 64) (- (expt 2 34)) 1))
+
+(defmacro p3 ()
+ (+ (expt 2 64) (- (expt 2 40)) 1))
+
+
+;; reduce the double word number hi*2**64 + lo (mod p1)
+(defun simple-mod-reduce-p1 (hi lo)
+ (+ (* (expt 2 32) hi) (- hi) lo))
+
+;; reduce the double word number hi*2**64 + lo (mod p2)
+(defun simple-mod-reduce-p2 (hi lo)
+ (+ (* (expt 2 34) hi) (- hi) lo))
+
+;; reduce the double word number hi*2**64 + lo (mod p3)
+(defun simple-mod-reduce-p3 (hi lo)
+ (+ (* (expt 2 40) hi) (- hi) lo))
+
+
+; ----------------------------------------------------------
+; The modular reductions given above are correct
+; ----------------------------------------------------------
+
+(defthmd congruence-p1-aux
+ (equal (* (expt 2 64) hi)
+ (+ (* (p1) hi)
+ (* (expt 2 32) hi)
+ (- hi))))
+
+(defthmd congruence-p2-aux
+ (equal (* (expt 2 64) hi)
+ (+ (* (p2) hi)
+ (* (expt 2 34) hi)
+ (- hi))))
+
+(defthmd congruence-p3-aux
+ (equal (* (expt 2 64) hi)
+ (+ (* (p3) hi)
+ (* (expt 2 40) hi)
+ (- hi))))
+
+(defthmd mod-augment
+ (implies (and (rationalp x)
+ (rationalp y)
+ (rationalp m))
+ (equal (mod (+ x y) m)
+ (mod (+ x (mod y m)) m))))
+
+(defthmd simple-mod-reduce-p1-congruent
+ (implies (and (integerp hi)
+ (integerp lo))
+ (equal (mod (simple-mod-reduce-p1 hi lo) (p1))
+ (mod (join hi lo) (p1))))
+ :hints (("Goal''" :use ((:instance congruence-p1-aux)
+ (:instance mod-augment
+ (m (p1))
+ (x (+ (- hi) lo (* (expt 2 32) hi)))
+ (y (* (p1) hi)))))))
+
+(defthmd simple-mod-reduce-p2-congruent
+ (implies (and (integerp hi)
+ (integerp lo))
+ (equal (mod (simple-mod-reduce-p2 hi lo) (p2))
+ (mod (join hi lo) (p2))))
+ :hints (("Goal''" :use ((:instance congruence-p2-aux)
+ (:instance mod-augment
+ (m (p2))
+ (x (+ (- hi) lo (* (expt 2 34) hi)))
+ (y (* (p2) hi)))))))
+
+(defthmd simple-mod-reduce-p3-congruent
+ (implies (and (integerp hi)
+ (integerp lo))
+ (equal (mod (simple-mod-reduce-p3 hi lo) (p3))
+ (mod (join hi lo) (p3))))
+ :hints (("Goal''" :use ((:instance congruence-p3-aux)
+ (:instance mod-augment
+ (m (p3))
+ (x (+ (- hi) lo (* (expt 2 40) hi)))
+ (y (* (p3) hi)))))))
+
+
+; ---------------------------------------------------------------------
+; We need a number less than 2*p, so that we can use the trick from
+; elim-mod-m<x<2*m for the final reduction.
+; For p1, two modular reductions are sufficient, for p2 and p3 three.
+; ---------------------------------------------------------------------
+
+;; p1: the first reduction is less than 2**96
+(defthmd simple-mod-reduce-p1-<-2**96
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p1 hi lo)
+ (expt 2 96))))
+
+;; p1: the second reduction is less than 2*p1
+(defthmd simple-mod-reduce-p1-<-2*p1
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (< (join hi lo) (expt 2 96))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p1 hi lo)
+ (* 2 (p1)))))
+
+
+;; p2: the first reduction is less than 2**98
+(defthmd simple-mod-reduce-p2-<-2**98
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p2 hi lo)
+ (expt 2 98))))
+
+;; p2: the second reduction is less than 2**69
+(defthmd simple-mod-reduce-p2-<-2*69
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (< (join hi lo) (expt 2 98))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p2 hi lo)
+ (expt 2 69))))
+
+;; p3: the third reduction is less than 2*p2
+(defthmd simple-mod-reduce-p2-<-2*p2
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (< (join hi lo) (expt 2 69))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p2 hi lo)
+ (* 2 (p2)))))
+
+
+;; p3: the first reduction is less than 2**104
+(defthmd simple-mod-reduce-p3-<-2**104
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p3 hi lo)
+ (expt 2 104))))
+
+;; p3: the second reduction is less than 2**81
+(defthmd simple-mod-reduce-p3-<-2**81
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (< (join hi lo) (expt 2 104))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p3 hi lo)
+ (expt 2 81))))
+
+;; p3: the third reduction is less than 2*p3
+(defthmd simple-mod-reduce-p3-<-2*p3
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (< (join hi lo) (expt 2 81))
+ (natp hi) (natp lo))
+ (< (simple-mod-reduce-p3 hi lo)
+ (* 2 (p3)))))
+
+
+; -------------------------------------------------------------------------
+; The simple modular reductions, adapted for compiler friendly C
+; -------------------------------------------------------------------------
+
+(defun mod-reduce-p1 (hi lo)
+ (let* ((y hi)
+ (x y)
+ (hi (>> hi 32))
+ (x (sub lo x))
+ (hi (if (> x lo) (+ hi -1) hi))
+ (y (<< y 32))
+ (lo (add y x))
+ (hi (if (< lo y) (+ hi 1) hi)))
+ (+ (* hi (expt 2 64)) lo)))
+
+(defun mod-reduce-p2 (hi lo)
+ (let* ((y hi)
+ (x y)
+ (hi (>> hi 30))
+ (x (sub lo x))
+ (hi (if (> x lo) (+ hi -1) hi))
+ (y (<< y 34))
+ (lo (add y x))
+ (hi (if (< lo y) (+ hi 1) hi)))
+ (+ (* hi (expt 2 64)) lo)))
+
+(defun mod-reduce-p3 (hi lo)
+ (let* ((y hi)
+ (x y)
+ (hi (>> hi 24))
+ (x (sub lo x))
+ (hi (if (> x lo) (+ hi -1) hi))
+ (y (<< y 40))
+ (lo (add y x))
+ (hi (if (< lo y) (+ hi 1) hi)))
+ (+ (* hi (expt 2 64)) lo)))
+
+
+; -------------------------------------------------------------------------
+; The compiler friendly versions are equal to the simple versions
+; -------------------------------------------------------------------------
+
+(defthm mod-reduce-aux1
+ (implies (and (<= 0 a) (natp a) (natp m)
+ (< (- m) b) (<= b 0)
+ (integerp b)
+ (< (mod (+ b a) m)
+ (mod a m)))
+ (equal (mod (+ b a) m)
+ (+ b (mod a m))))
+ :hints (("Subgoal 2" :use ((:instance modaux-1b
+ (x (+ a b)))))))
+
+(defthm mod-reduce-aux2
+ (implies (and (<= 0 a) (natp a) (natp m)
+ (< b m) (natp b)
+ (< (mod (+ b a) m)
+ (mod a m)))
+ (equal (+ m (mod (+ b a) m))
+ (+ b (mod a m)))))
+
+
+(defthm mod-reduce-aux3
+ (implies (and (< 0 a) (natp a) (natp m)
+ (< (- m) b) (< b 0)
+ (integerp b)
+ (<= (mod a m)
+ (mod (+ b a) m)))
+ (equal (+ (- m) (mod (+ b a) m))
+ (+ b (mod a m))))
+ :hints (("Subgoal 1.2'" :use ((:instance modaux-1b
+ (x b))))
+ ("Subgoal 1''" :use ((:instance modaux-2d
+ (x I))))))
+
+
+(defthm mod-reduce-aux4
+ (implies (and (< 0 a) (natp a) (natp m)
+ (< b m) (natp b)
+ (<= (mod a m)
+ (mod (+ b a) m)))
+ (equal (mod (+ b a) m)
+ (+ b (mod a m)))))
+
+
+(defthm mod-reduce-p1==simple-mod-reduce-p1
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (equal (mod-reduce-p1 hi lo)
+ (simple-mod-reduce-p1 hi lo)))
+ :hints (("Goal" :in-theory (disable expt)
+ :cases ((< 0 hi)))
+ ("Subgoal 1.2.2'" :use ((:instance mod-reduce-aux1
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 32) hi)))))
+ ("Subgoal 1.2.1'" :use ((:instance mod-reduce-aux3
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 32) hi)))))
+ ("Subgoal 1.1.2'" :use ((:instance mod-reduce-aux2
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 32) hi)))))
+ ("Subgoal 1.1.1'" :use ((:instance mod-reduce-aux4
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 32) hi)))))))
+
+
+(defthm mod-reduce-p2==simple-mod-reduce-p2
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (equal (mod-reduce-p2 hi lo)
+ (simple-mod-reduce-p2 hi lo)))
+ :hints (("Goal" :cases ((< 0 hi)))
+ ("Subgoal 1.2.2'" :use ((:instance mod-reduce-aux1
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 34) hi)))))
+ ("Subgoal 1.2.1'" :use ((:instance mod-reduce-aux3
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 34) hi)))))
+ ("Subgoal 1.1.2'" :use ((:instance mod-reduce-aux2
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 34) hi)))))
+ ("Subgoal 1.1.1'" :use ((:instance mod-reduce-aux4
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 34) hi)))))))
+
+
+(defthm mod-reduce-p3==simple-mod-reduce-p3
+ (implies (and (< hi (expt 2 64))
+ (< lo (expt 2 64))
+ (natp hi) (natp lo))
+ (equal (mod-reduce-p3 hi lo)
+ (simple-mod-reduce-p3 hi lo)))
+ :hints (("Goal" :cases ((< 0 hi)))
+ ("Subgoal 1.2.2'" :use ((:instance mod-reduce-aux1
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 40) hi)))))
+ ("Subgoal 1.2.1'" :use ((:instance mod-reduce-aux3
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 40) hi)))))
+ ("Subgoal 1.1.2'" :use ((:instance mod-reduce-aux2
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 40) hi)))))
+ ("Subgoal 1.1.1'" :use ((:instance mod-reduce-aux4
+ (m (expt 2 64))
+ (b (+ (- HI) LO))
+ (a (* (expt 2 40) hi)))))))
+
+
+
diff --git a/Modules/_decimal/libmpdec/memory.c b/Modules/_decimal/libmpdec/memory.c
new file mode 100644
index 0000000000..0f41fe5064
--- /dev/null
+++ b/Modules/_decimal/libmpdec/memory.c
@@ -0,0 +1,292 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "typearith.h"
+#include "memory.h"
+
+
+/* Guaranteed minimum allocation for a coefficient. May be changed once
+ at program start using mpd_setminalloc(). */
+mpd_ssize_t MPD_MINALLOC = MPD_MINALLOC_MIN;
+
+/* Custom allocation and free functions */
+void *(* mpd_mallocfunc)(size_t size) = malloc;
+void *(* mpd_reallocfunc)(void *ptr, size_t size) = realloc;
+void *(* mpd_callocfunc)(size_t nmemb, size_t size) = calloc;
+void (* mpd_free)(void *ptr) = free;
+
+
+/* emulate calloc if it is not available */
+void *
+mpd_callocfunc_em(size_t nmemb, size_t size)
+{
+ void *ptr;
+ size_t req;
+ mpd_size_t overflow;
+
+#if MPD_SIZE_MAX < SIZE_MAX
+ /* full_coverage test only */
+ if (nmemb > MPD_SIZE_MAX || size > MPD_SIZE_MAX) {
+ return NULL;
+ }
+#endif
+
+ req = mul_size_t_overflow((mpd_size_t)nmemb, (mpd_size_t)size,
+ &overflow);
+ if (overflow) {
+ return NULL;
+ }
+
+ ptr = mpd_mallocfunc(req);
+ if (ptr == NULL) {
+ return NULL;
+ }
+ /* used on uint32_t or uint64_t */
+ memset(ptr, 0, req);
+
+ return ptr;
+}
+
+
+/* malloc with overflow checking */
+void *
+mpd_alloc(mpd_size_t nmemb, mpd_size_t size)
+{
+ mpd_size_t req, overflow;
+
+ req = mul_size_t_overflow(nmemb, size, &overflow);
+ if (overflow) {
+ return NULL;
+ }
+
+ return mpd_mallocfunc(req);
+}
+
+/* calloc with overflow checking */
+void *
+mpd_calloc(mpd_size_t nmemb, mpd_size_t size)
+{
+ mpd_size_t overflow;
+
+ (void)mul_size_t_overflow(nmemb, size, &overflow);
+ if (overflow) {
+ return NULL;
+ }
+
+ return mpd_callocfunc(nmemb, size);
+}
+
+/* realloc with overflow checking */
+void *
+mpd_realloc(void *ptr, mpd_size_t nmemb, mpd_size_t size, uint8_t *err)
+{
+ void *new;
+ mpd_size_t req, overflow;
+
+ req = mul_size_t_overflow(nmemb, size, &overflow);
+ if (overflow) {
+ *err = 1;
+ return ptr;
+ }
+
+ new = mpd_reallocfunc(ptr, req);
+ if (new == NULL) {
+ *err = 1;
+ return ptr;
+ }
+
+ return new;
+}
+
+/* struct hack malloc with overflow checking */
+void *
+mpd_sh_alloc(mpd_size_t struct_size, mpd_size_t nmemb, mpd_size_t size)
+{
+ mpd_size_t req, overflow;
+
+ req = mul_size_t_overflow(nmemb, size, &overflow);
+ if (overflow) {
+ return NULL;
+ }
+
+ req = add_size_t_overflow(req, struct_size, &overflow);
+ if (overflow) {
+ return NULL;
+ }
+
+ return mpd_mallocfunc(req);
+}
+
+
+/* Allocate a new decimal with a coefficient of length 'nwords'. In case
+ of an error the return value is NULL. */
+mpd_t *
+mpd_qnew_size(mpd_ssize_t nwords)
+{
+ mpd_t *result;
+
+ nwords = (nwords < MPD_MINALLOC) ? MPD_MINALLOC : nwords;
+
+ result = mpd_alloc(1, sizeof *result);
+ if (result == NULL) {
+ return NULL;
+ }
+
+ result->data = mpd_alloc(nwords, sizeof *result->data);
+ if (result->data == NULL) {
+ mpd_free(result);
+ return NULL;
+ }
+
+ result->flags = 0;
+ result->exp = 0;
+ result->digits = 0;
+ result->len = 0;
+ result->alloc = nwords;
+
+ return result;
+}
+
+/* Allocate a new decimal with a coefficient of length MPD_MINALLOC.
+ In case of an error the return value is NULL. */
+mpd_t *
+mpd_qnew(void)
+{
+ return mpd_qnew_size(MPD_MINALLOC);
+}
+
+/* Allocate new decimal. Caller can check for NULL or MPD_Malloc_error.
+ Raises on error. */
+mpd_t *
+mpd_new(mpd_context_t *ctx)
+{
+ mpd_t *result;
+
+ result = mpd_qnew();
+ if (result == NULL) {
+ mpd_addstatus_raise(ctx, MPD_Malloc_error);
+ }
+ return result;
+}
+
+/*
+ * Input: 'result' is a static mpd_t with a static coefficient.
+ * Assumption: 'nwords' >= result->alloc.
+ *
+ * Resize the static coefficient to a larger dynamic one and copy the
+ * existing data. If successful, the value of 'result' is unchanged.
+ * Otherwise, set 'result' to NaN and update 'status' with MPD_Malloc_error.
+ */
+int
+mpd_switch_to_dyn(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
+{
+ mpd_uint_t *p = result->data;
+
+ assert(nwords >= result->alloc);
+
+ result->data = mpd_alloc(nwords, sizeof *result->data);
+ if (result->data == NULL) {
+ result->data = p;
+ mpd_set_qnan(result);
+ mpd_set_positive(result);
+ result->exp = result->digits = result->len = 0;
+ *status |= MPD_Malloc_error;
+ return 0;
+ }
+
+ memcpy(result->data, p, result->alloc * (sizeof *result->data));
+ result->alloc = nwords;
+ mpd_set_dynamic_data(result);
+ return 1;
+}
+
+/*
+ * Input: 'result' is a static mpd_t with a static coefficient.
+ *
+ * Convert the coefficient to a dynamic one that is initialized to zero. If
+ * malloc fails, set 'result' to NaN and update 'status' with MPD_Malloc_error.
+ */
+int
+mpd_switch_to_dyn_zero(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
+{
+ mpd_uint_t *p = result->data;
+
+ result->data = mpd_calloc(nwords, sizeof *result->data);
+ if (result->data == NULL) {
+ result->data = p;
+ mpd_set_qnan(result);
+ mpd_set_positive(result);
+ result->exp = result->digits = result->len = 0;
+ *status |= MPD_Malloc_error;
+ return 0;
+ }
+
+ result->alloc = nwords;
+ mpd_set_dynamic_data(result);
+
+ return 1;
+}
+
+/*
+ * Input: 'result' is a static or a dynamic mpd_t with a dynamic coefficient.
+ * Resize the coefficient to length 'nwords':
+ * Case nwords > result->alloc:
+ * If realloc is successful:
+ * 'result' has a larger coefficient but the same value. Return 1.
+ * Otherwise:
+ * Set 'result' to NaN, update status with MPD_Malloc_error and return 0.
+ * Case nwords < result->alloc:
+ * If realloc is successful:
+ * 'result' has a smaller coefficient. result->len is undefined. Return 1.
+ * Otherwise (unlikely):
+ * 'result' is unchanged. Reuse the now oversized coefficient. Return 1.
+ */
+int
+mpd_realloc_dyn(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
+{
+ uint8_t err = 0;
+
+ result->data = mpd_realloc(result->data, nwords, sizeof *result->data, &err);
+ if (!err) {
+ result->alloc = nwords;
+ }
+ else if (nwords > result->alloc) {
+ mpd_set_qnan(result);
+ mpd_set_positive(result);
+ result->exp = result->digits = result->len = 0;
+ *status |= MPD_Malloc_error;
+ return 0;
+ }
+
+ return 1;
+}
+
+
diff --git a/Modules/_decimal/libmpdec/memory.h b/Modules/_decimal/libmpdec/memory.h
new file mode 100644
index 0000000000..9c98d1a400
--- /dev/null
+++ b/Modules/_decimal/libmpdec/memory.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef MEMORY_H
+#define MEMORY_H
+
+
+#include "mpdecimal.h"
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+int mpd_switch_to_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status);
+int mpd_switch_to_dyn_zero(mpd_t *result, mpd_ssize_t size, uint32_t *status);
+int mpd_realloc_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
+
+
+
diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c
new file mode 100644
index 0000000000..21d222277c
--- /dev/null
+++ b/Modules/_decimal/libmpdec/mpdecimal.c
@@ -0,0 +1,8410 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <math.h>
+#include "basearith.h"
+#include "bits.h"
+#include "convolute.h"
+#include "crt.h"
+#include "memory.h"
+#include "typearith.h"
+#include "umodarith.h"
+
+#ifdef PPRO
+ #if defined(_MSC_VER)
+ #include <float.h>
+ #pragma fenv_access(on)
+ #elif !defined(__OpenBSD__) && !defined(__NetBSD__)
+ /* C99 */
+ #include <fenv.h>
+ #pragma STDC FENV_ACCESS ON
+ #endif
+#endif
+
+
+#if defined(_MSC_VER)
+ #define ALWAYS_INLINE __forceinline
+#elif defined(LEGACY_COMPILER)
+ #define ALWAYS_INLINE
+ #undef inline
+ #define inline
+#else
+ #ifdef TEST_COVERAGE
+ #define ALWAYS_INLINE
+ #else
+ #define ALWAYS_INLINE inline __attribute__ ((always_inline))
+ #endif
+#endif
+
+
+#define MPD_NEWTONDIV_CUTOFF 1024L
+
+#define MPD_NEW_STATIC(name, flags, exp, digits, len) \
+ mpd_uint_t name##_data[MPD_MINALLOC_MAX]; \
+ mpd_t name = {flags|MPD_STATIC|MPD_STATIC_DATA, exp, digits, \
+ len, MPD_MINALLOC_MAX, name##_data}
+
+#define MPD_NEW_CONST(name, flags, exp, digits, len, alloc, initval) \
+ mpd_uint_t name##_data[alloc] = {initval}; \
+ mpd_t name = {flags|MPD_STATIC|MPD_CONST_DATA, exp, digits, \
+ len, alloc, name##_data}
+
+#define MPD_NEW_SHARED(name, a) \
+ mpd_t name = {(a->flags&~MPD_DATAFLAGS)|MPD_STATIC|MPD_SHARED_DATA, \
+ a->exp, a->digits, a->len, a->alloc, a->data}
+
+
+static mpd_uint_t data_one[1] = {1};
+static mpd_uint_t data_zero[1] = {0};
+static const mpd_t one = {MPD_STATIC|MPD_CONST_DATA, 0, 1, 1, 1, data_one};
+static const mpd_t minus_one = {MPD_NEG|MPD_STATIC|MPD_CONST_DATA, 0, 1, 1, 1,
+ data_one};
+static const mpd_t zero = {MPD_STATIC|MPD_CONST_DATA, 0, 1, 1, 1, data_zero};
+
+static inline void _mpd_check_exp(mpd_t *dec, const mpd_context_t *ctx,
+ uint32_t *status);
+static void _settriple(mpd_t *result, uint8_t sign, mpd_uint_t a,
+ mpd_ssize_t exp);
+static inline mpd_ssize_t _mpd_real_size(mpd_uint_t *data, mpd_ssize_t size);
+
+static int _mpd_cmp_abs(const mpd_t *a, const mpd_t *b);
+
+static void _mpd_qadd(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status);
+static inline void _mpd_qmul(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status);
+static void _mpd_base_ndivmod(mpd_t *q, mpd_t *r, const mpd_t *a,
+ const mpd_t *b, uint32_t *status);
+static inline void _mpd_qpow_uint(mpd_t *result, const mpd_t *base,
+ mpd_uint_t exp, uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status);
+
+static mpd_uint_t mpd_qsshiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n);
+
+
+/******************************************************************************/
+/* Version */
+/******************************************************************************/
+
+const char *
+mpd_version(void)
+{
+ return MPD_VERSION;
+}
+
+
+/******************************************************************************/
+/* Performance critical inline functions */
+/******************************************************************************/
+
+#ifdef CONFIG_64
+/* Digits in a word, primarily useful for the most significant word. */
+ALWAYS_INLINE int
+mpd_word_digits(mpd_uint_t word)
+{
+ if (word < mpd_pow10[9]) {
+ if (word < mpd_pow10[4]) {
+ if (word < mpd_pow10[2]) {
+ return (word < mpd_pow10[1]) ? 1 : 2;
+ }
+ return (word < mpd_pow10[3]) ? 3 : 4;
+ }
+ if (word < mpd_pow10[6]) {
+ return (word < mpd_pow10[5]) ? 5 : 6;
+ }
+ if (word < mpd_pow10[8]) {
+ return (word < mpd_pow10[7]) ? 7 : 8;
+ }
+ return 9;
+ }
+ if (word < mpd_pow10[14]) {
+ if (word < mpd_pow10[11]) {
+ return (word < mpd_pow10[10]) ? 10 : 11;
+ }
+ if (word < mpd_pow10[13]) {
+ return (word < mpd_pow10[12]) ? 12 : 13;
+ }
+ return 14;
+ }
+ if (word < mpd_pow10[18]) {
+ if (word < mpd_pow10[16]) {
+ return (word < mpd_pow10[15]) ? 15 : 16;
+ }
+ return (word < mpd_pow10[17]) ? 17 : 18;
+ }
+
+ return (word < mpd_pow10[19]) ? 19 : 20;
+}
+#else
+ALWAYS_INLINE int
+mpd_word_digits(mpd_uint_t word)
+{
+ if (word < mpd_pow10[4]) {
+ if (word < mpd_pow10[2]) {
+ return (word < mpd_pow10[1]) ? 1 : 2;
+ }
+ return (word < mpd_pow10[3]) ? 3 : 4;
+ }
+ if (word < mpd_pow10[6]) {
+ return (word < mpd_pow10[5]) ? 5 : 6;
+ }
+ if (word < mpd_pow10[8]) {
+ return (word < mpd_pow10[7]) ? 7 : 8;
+ }
+
+ return (word < mpd_pow10[9]) ? 9 : 10;
+}
+#endif
+
+
+/* Adjusted exponent */
+ALWAYS_INLINE mpd_ssize_t
+mpd_adjexp(const mpd_t *dec)
+{
+ return (dec->exp + dec->digits) - 1;
+}
+
+/* Etiny */
+ALWAYS_INLINE mpd_ssize_t
+mpd_etiny(const mpd_context_t *ctx)
+{
+ return ctx->emin - (ctx->prec - 1);
+}
+
+/* Etop: used for folding down in IEEE clamping */
+ALWAYS_INLINE mpd_ssize_t
+mpd_etop(const mpd_context_t *ctx)
+{
+ return ctx->emax - (ctx->prec - 1);
+}
+
+/* Most significant word */
+ALWAYS_INLINE mpd_uint_t
+mpd_msword(const mpd_t *dec)
+{
+ assert(dec->len > 0);
+ return dec->data[dec->len-1];
+}
+
+/* Most significant digit of a word */
+inline mpd_uint_t
+mpd_msd(mpd_uint_t word)
+{
+ int n;
+
+ n = mpd_word_digits(word);
+ return word / mpd_pow10[n-1];
+}
+
+/* Least significant digit of a word */
+ALWAYS_INLINE mpd_uint_t
+mpd_lsd(mpd_uint_t word)
+{
+ return word % 10;
+}
+
+/* Coefficient size needed to store 'digits' */
+ALWAYS_INLINE mpd_ssize_t
+mpd_digits_to_size(mpd_ssize_t digits)
+{
+ mpd_ssize_t q, r;
+
+ _mpd_idiv_word(&q, &r, digits, MPD_RDIGITS);
+ return (r == 0) ? q : q+1;
+}
+
+/* Number of digits in the exponent. Not defined for MPD_SSIZE_MIN. */
+inline int
+mpd_exp_digits(mpd_ssize_t exp)
+{
+ exp = (exp < 0) ? -exp : exp;
+ return mpd_word_digits(exp);
+}
+
+/* Canonical */
+ALWAYS_INLINE int
+mpd_iscanonical(const mpd_t *dec UNUSED)
+{
+ return 1;
+}
+
+/* Finite */
+ALWAYS_INLINE int
+mpd_isfinite(const mpd_t *dec)
+{
+ return !(dec->flags & MPD_SPECIAL);
+}
+
+/* Infinite */
+ALWAYS_INLINE int
+mpd_isinfinite(const mpd_t *dec)
+{
+ return dec->flags & MPD_INF;
+}
+
+/* NaN */
+ALWAYS_INLINE int
+mpd_isnan(const mpd_t *dec)
+{
+ return dec->flags & (MPD_NAN|MPD_SNAN);
+}
+
+/* Negative */
+ALWAYS_INLINE int
+mpd_isnegative(const mpd_t *dec)
+{
+ return dec->flags & MPD_NEG;
+}
+
+/* Positive */
+ALWAYS_INLINE int
+mpd_ispositive(const mpd_t *dec)
+{
+ return !(dec->flags & MPD_NEG);
+}
+
+/* qNaN */
+ALWAYS_INLINE int
+mpd_isqnan(const mpd_t *dec)
+{
+ return dec->flags & MPD_NAN;
+}
+
+/* Signed */
+ALWAYS_INLINE int
+mpd_issigned(const mpd_t *dec)
+{
+ return dec->flags & MPD_NEG;
+}
+
+/* sNaN */
+ALWAYS_INLINE int
+mpd_issnan(const mpd_t *dec)
+{
+ return dec->flags & MPD_SNAN;
+}
+
+/* Special */
+ALWAYS_INLINE int
+mpd_isspecial(const mpd_t *dec)
+{
+ return dec->flags & MPD_SPECIAL;
+}
+
+/* Zero */
+ALWAYS_INLINE int
+mpd_iszero(const mpd_t *dec)
+{
+ return !mpd_isspecial(dec) && mpd_msword(dec) == 0;
+}
+
+/* Test for zero when specials have been ruled out already */
+ALWAYS_INLINE int
+mpd_iszerocoeff(const mpd_t *dec)
+{
+ return mpd_msword(dec) == 0;
+}
+
+/* Normal */
+inline int
+mpd_isnormal(const mpd_t *dec, const mpd_context_t *ctx)
+{
+ if (mpd_isspecial(dec)) return 0;
+ if (mpd_iszerocoeff(dec)) return 0;
+
+ return mpd_adjexp(dec) >= ctx->emin;
+}
+
+/* Subnormal */
+inline int
+mpd_issubnormal(const mpd_t *dec, const mpd_context_t *ctx)
+{
+ if (mpd_isspecial(dec)) return 0;
+ if (mpd_iszerocoeff(dec)) return 0;
+
+ return mpd_adjexp(dec) < ctx->emin;
+}
+
+/* Odd word */
+ALWAYS_INLINE int
+mpd_isoddword(mpd_uint_t word)
+{
+ return word & 1;
+}
+
+/* Odd coefficient */
+ALWAYS_INLINE int
+mpd_isoddcoeff(const mpd_t *dec)
+{
+ return mpd_isoddword(dec->data[0]);
+}
+
+/* 0 if dec is positive, 1 if dec is negative */
+ALWAYS_INLINE uint8_t
+mpd_sign(const mpd_t *dec)
+{
+ return dec->flags & MPD_NEG;
+}
+
+/* 1 if dec is positive, -1 if dec is negative */
+ALWAYS_INLINE int
+mpd_arith_sign(const mpd_t *dec)
+{
+ return 1 - 2 * mpd_isnegative(dec);
+}
+
+/* Radix */
+ALWAYS_INLINE long
+mpd_radix(void)
+{
+ return 10;
+}
+
+/* Dynamic decimal */
+ALWAYS_INLINE int
+mpd_isdynamic(const mpd_t *dec)
+{
+ return !(dec->flags & MPD_STATIC);
+}
+
+/* Static decimal */
+ALWAYS_INLINE int
+mpd_isstatic(const mpd_t *dec)
+{
+ return dec->flags & MPD_STATIC;
+}
+
+/* Data of decimal is dynamic */
+ALWAYS_INLINE int
+mpd_isdynamic_data(const mpd_t *dec)
+{
+ return !(dec->flags & MPD_DATAFLAGS);
+}
+
+/* Data of decimal is static */
+ALWAYS_INLINE int
+mpd_isstatic_data(const mpd_t *dec)
+{
+ return dec->flags & MPD_STATIC_DATA;
+}
+
+/* Data of decimal is shared */
+ALWAYS_INLINE int
+mpd_isshared_data(const mpd_t *dec)
+{
+ return dec->flags & MPD_SHARED_DATA;
+}
+
+/* Data of decimal is const */
+ALWAYS_INLINE int
+mpd_isconst_data(const mpd_t *dec)
+{
+ return dec->flags & MPD_CONST_DATA;
+}
+
+
+/******************************************************************************/
+/* Inline memory handling */
+/******************************************************************************/
+
+/* Fill destination with zeros */
+ALWAYS_INLINE void
+mpd_uint_zero(mpd_uint_t *dest, mpd_size_t len)
+{
+ mpd_size_t i;
+
+ for (i = 0; i < len; i++) {
+ dest[i] = 0;
+ }
+}
+
+/* Free a decimal */
+ALWAYS_INLINE void
+mpd_del(mpd_t *dec)
+{
+ if (mpd_isdynamic_data(dec)) {
+ mpd_free(dec->data);
+ }
+ if (mpd_isdynamic(dec)) {
+ mpd_free(dec);
+ }
+}
+
+/*
+ * Resize the coefficient. Existing data up to 'nwords' is left untouched.
+ * Return 1 on success, 0 otherwise.
+ *
+ * Input invariant: MPD_MINALLOC <= result->alloc.
+ *
+ * Case nwords == result->alloc:
+ * 'result' is unchanged. Return 1.
+ *
+ * Case nwords > result->alloc:
+ * Case realloc success:
+ * The value of 'result' does not change. Return 1.
+ * Case realloc failure:
+ * 'result' is NaN, status is updated with MPD_Malloc_error. Return 0.
+ *
+ * Case nwords < result->alloc:
+ * Case is_static_data or realloc failure [1]:
+ * 'result' is unchanged. Return 1.
+ * Case realloc success:
+ * The value of result is undefined (expected). Return 1.
+ *
+ *
+ * [1] In that case the old (now oversized) area is still valid.
+ */
+ALWAYS_INLINE int
+mpd_qresize(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
+{
+ assert(!mpd_isconst_data(result)); /* illegal operation for a const */
+ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
+ assert(MPD_MINALLOC <= result->alloc);
+
+ nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
+ if (nwords == result->alloc) {
+ return 1;
+ }
+ if (mpd_isstatic_data(result)) {
+ if (nwords > result->alloc) {
+ return mpd_switch_to_dyn(result, nwords, status);
+ }
+ return 1;
+ }
+
+ return mpd_realloc_dyn(result, nwords, status);
+}
+
+/* Same as mpd_qresize, but the complete coefficient (including the old
+ * memory area!) is initialized to zero. */
+ALWAYS_INLINE int
+mpd_qresize_zero(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
+{
+ assert(!mpd_isconst_data(result)); /* illegal operation for a const */
+ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
+ assert(MPD_MINALLOC <= result->alloc);
+
+ nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
+ if (nwords != result->alloc) {
+ if (mpd_isstatic_data(result)) {
+ if (nwords > result->alloc) {
+ return mpd_switch_to_dyn_zero(result, nwords, status);
+ }
+ }
+ else if (!mpd_realloc_dyn(result, nwords, status)) {
+ return 0;
+ }
+ }
+
+ mpd_uint_zero(result->data, nwords);
+ return 1;
+}
+
+/*
+ * Reduce memory size for the coefficient to MPD_MINALLOC. In theory,
+ * realloc may fail even when reducing the memory size. But in that case
+ * the old memory area is always big enough, so checking for MPD_Malloc_error
+ * is not imperative.
+ */
+ALWAYS_INLINE void
+mpd_minalloc(mpd_t *result)
+{
+ assert(!mpd_isconst_data(result)); /* illegal operation for a const */
+ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
+
+ if (!mpd_isstatic_data(result) && result->alloc > MPD_MINALLOC) {
+ uint8_t err = 0;
+ result->data = mpd_realloc(result->data, MPD_MINALLOC,
+ sizeof *result->data, &err);
+ if (!err) {
+ result->alloc = MPD_MINALLOC;
+ }
+ }
+}
+
+int
+mpd_resize(mpd_t *result, mpd_ssize_t nwords, mpd_context_t *ctx)
+{
+ uint32_t status = 0;
+ if (!mpd_qresize(result, nwords, &status)) {
+ mpd_addstatus_raise(ctx, status);
+ return 0;
+ }
+ return 1;
+}
+
+int
+mpd_resize_zero(mpd_t *result, mpd_ssize_t nwords, mpd_context_t *ctx)
+{
+ uint32_t status = 0;
+ if (!mpd_qresize_zero(result, nwords, &status)) {
+ mpd_addstatus_raise(ctx, status);
+ return 0;
+ }
+ return 1;
+}
+
+
+/******************************************************************************/
+/* Set attributes of a decimal */
+/******************************************************************************/
+
+/* Set digits. Assumption: result->len is initialized and > 0. */
+inline void
+mpd_setdigits(mpd_t *result)
+{
+ mpd_ssize_t wdigits = mpd_word_digits(mpd_msword(result));
+ result->digits = wdigits + (result->len-1) * MPD_RDIGITS;
+}
+
+/* Set sign */
+ALWAYS_INLINE void
+mpd_set_sign(mpd_t *result, uint8_t sign)
+{
+ result->flags &= ~MPD_NEG;
+ result->flags |= sign;
+}
+
+/* Copy sign from another decimal */
+ALWAYS_INLINE void
+mpd_signcpy(mpd_t *result, const mpd_t *a)
+{
+ uint8_t sign = a->flags&MPD_NEG;
+
+ result->flags &= ~MPD_NEG;
+ result->flags |= sign;
+}
+
+/* Set infinity */
+ALWAYS_INLINE void
+mpd_set_infinity(mpd_t *result)
+{
+ result->flags &= ~MPD_SPECIAL;
+ result->flags |= MPD_INF;
+}
+
+/* Set qNaN */
+ALWAYS_INLINE void
+mpd_set_qnan(mpd_t *result)
+{
+ result->flags &= ~MPD_SPECIAL;
+ result->flags |= MPD_NAN;
+}
+
+/* Set sNaN */
+ALWAYS_INLINE void
+mpd_set_snan(mpd_t *result)
+{
+ result->flags &= ~MPD_SPECIAL;
+ result->flags |= MPD_SNAN;
+}
+
+/* Set to negative */
+ALWAYS_INLINE void
+mpd_set_negative(mpd_t *result)
+{
+ result->flags |= MPD_NEG;
+}
+
+/* Set to positive */
+ALWAYS_INLINE void
+mpd_set_positive(mpd_t *result)
+{
+ result->flags &= ~MPD_NEG;
+}
+
+/* Set to dynamic */
+ALWAYS_INLINE void
+mpd_set_dynamic(mpd_t *result)
+{
+ result->flags &= ~MPD_STATIC;
+}
+
+/* Set to static */
+ALWAYS_INLINE void
+mpd_set_static(mpd_t *result)
+{
+ result->flags |= MPD_STATIC;
+}
+
+/* Set data to dynamic */
+ALWAYS_INLINE void
+mpd_set_dynamic_data(mpd_t *result)
+{
+ result->flags &= ~MPD_DATAFLAGS;
+}
+
+/* Set data to static */
+ALWAYS_INLINE void
+mpd_set_static_data(mpd_t *result)
+{
+ result->flags &= ~MPD_DATAFLAGS;
+ result->flags |= MPD_STATIC_DATA;
+}
+
+/* Set data to shared */
+ALWAYS_INLINE void
+mpd_set_shared_data(mpd_t *result)
+{
+ result->flags &= ~MPD_DATAFLAGS;
+ result->flags |= MPD_SHARED_DATA;
+}
+
+/* Set data to const */
+ALWAYS_INLINE void
+mpd_set_const_data(mpd_t *result)
+{
+ result->flags &= ~MPD_DATAFLAGS;
+ result->flags |= MPD_CONST_DATA;
+}
+
+/* Clear flags, preserving memory attributes. */
+ALWAYS_INLINE void
+mpd_clear_flags(mpd_t *result)
+{
+ result->flags &= (MPD_STATIC|MPD_DATAFLAGS);
+}
+
+/* Set flags, preserving memory attributes. */
+ALWAYS_INLINE void
+mpd_set_flags(mpd_t *result, uint8_t flags)
+{
+ result->flags &= (MPD_STATIC|MPD_DATAFLAGS);
+ result->flags |= flags;
+}
+
+/* Copy flags, preserving memory attributes of result. */
+ALWAYS_INLINE void
+mpd_copy_flags(mpd_t *result, const mpd_t *a)
+{
+ uint8_t aflags = a->flags;
+ result->flags &= (MPD_STATIC|MPD_DATAFLAGS);
+ result->flags |= (aflags & ~(MPD_STATIC|MPD_DATAFLAGS));
+}
+
+/* Initialize a workcontext from ctx. Set traps, flags and newtrap to 0. */
+static inline void
+mpd_workcontext(mpd_context_t *workctx, const mpd_context_t *ctx)
+{
+ workctx->prec = ctx->prec;
+ workctx->emax = ctx->emax;
+ workctx->emin = ctx->emin;
+ workctx->round = ctx->round;
+ workctx->traps = 0;
+ workctx->status = 0;
+ workctx->newtrap = 0;
+ workctx->clamp = ctx->clamp;
+ workctx->allcr = ctx->allcr;
+}
+
+
+/******************************************************************************/
+/* Getting and setting parts of decimals */
+/******************************************************************************/
+
+/* Flip the sign of a decimal */
+static inline void
+_mpd_negate(mpd_t *dec)
+{
+ dec->flags ^= MPD_NEG;
+}
+
+/* Set coefficient to zero */
+void
+mpd_zerocoeff(mpd_t *result)
+{
+ mpd_minalloc(result);
+ result->digits = 1;
+ result->len = 1;
+ result->data[0] = 0;
+}
+
+/* Set the coefficient to all nines. */
+void
+mpd_qmaxcoeff(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t len, r;
+
+ _mpd_idiv_word(&len, &r, ctx->prec, MPD_RDIGITS);
+ len = (r == 0) ? len : len+1;
+
+ if (!mpd_qresize(result, len, status)) {
+ return;
+ }
+
+ result->len = len;
+ result->digits = ctx->prec;
+
+ --len;
+ if (r > 0) {
+ result->data[len--] = mpd_pow10[r]-1;
+ }
+ for (; len >= 0; --len) {
+ result->data[len] = MPD_RADIX-1;
+ }
+}
+
+/*
+ * Cut off the most significant digits so that the rest fits in ctx->prec.
+ * Cannot fail.
+ */
+static void
+_mpd_cap(mpd_t *result, const mpd_context_t *ctx)
+{
+ uint32_t dummy;
+ mpd_ssize_t len, r;
+
+ if (result->len > 0 && result->digits > ctx->prec) {
+ _mpd_idiv_word(&len, &r, ctx->prec, MPD_RDIGITS);
+ len = (r == 0) ? len : len+1;
+
+ if (r != 0) {
+ result->data[len-1] %= mpd_pow10[r];
+ }
+
+ len = _mpd_real_size(result->data, len);
+ /* resize to fewer words cannot fail */
+ mpd_qresize(result, len, &dummy);
+ result->len = len;
+ mpd_setdigits(result);
+ }
+ if (mpd_iszero(result)) {
+ _settriple(result, mpd_sign(result), 0, result->exp);
+ }
+}
+
+/*
+ * Cut off the most significant digits of a NaN payload so that the rest
+ * fits in ctx->prec - ctx->clamp. Cannot fail.
+ */
+static void
+_mpd_fix_nan(mpd_t *result, const mpd_context_t *ctx)
+{
+ uint32_t dummy;
+ mpd_ssize_t prec;
+ mpd_ssize_t len, r;
+
+ prec = ctx->prec - ctx->clamp;
+ if (result->len > 0 && result->digits > prec) {
+ if (prec == 0) {
+ mpd_minalloc(result);
+ result->len = result->digits = 0;
+ }
+ else {
+ _mpd_idiv_word(&len, &r, prec, MPD_RDIGITS);
+ len = (r == 0) ? len : len+1;
+
+ if (r != 0) {
+ result->data[len-1] %= mpd_pow10[r];
+ }
+
+ len = _mpd_real_size(result->data, len);
+ /* resize to fewer words cannot fail */
+ mpd_qresize(result, len, &dummy);
+ result->len = len;
+ mpd_setdigits(result);
+ if (mpd_iszerocoeff(result)) {
+ /* NaN0 is not a valid representation */
+ result->len = result->digits = 0;
+ }
+ }
+ }
+}
+
+/*
+ * Get n most significant digits from a decimal, where 0 < n <= MPD_UINT_DIGITS.
+ * Assumes MPD_UINT_DIGITS == MPD_RDIGITS+1, which is true for 32 and 64 bit
+ * machines.
+ *
+ * The result of the operation will be in lo. If the operation is impossible,
+ * hi will be nonzero. This is used to indicate an error.
+ */
+static inline void
+_mpd_get_msdigits(mpd_uint_t *hi, mpd_uint_t *lo, const mpd_t *dec,
+ unsigned int n)
+{
+ mpd_uint_t r, tmp;
+
+ assert(0 < n && n <= MPD_RDIGITS+1);
+
+ _mpd_div_word(&tmp, &r, dec->digits, MPD_RDIGITS);
+ r = (r == 0) ? MPD_RDIGITS : r; /* digits in the most significant word */
+
+ *hi = 0;
+ *lo = dec->data[dec->len-1];
+ if (n <= r) {
+ *lo /= mpd_pow10[r-n];
+ }
+ else if (dec->len > 1) {
+ /* at this point 1 <= r < n <= MPD_RDIGITS+1 */
+ _mpd_mul_words(hi, lo, *lo, mpd_pow10[n-r]);
+ tmp = dec->data[dec->len-2] / mpd_pow10[MPD_RDIGITS-(n-r)];
+ *lo = *lo + tmp;
+ if (*lo < tmp) (*hi)++;
+ }
+}
+
+
+/******************************************************************************/
+/* Gathering information about a decimal */
+/******************************************************************************/
+
+/* The real size of the coefficient without leading zero words. */
+static inline mpd_ssize_t
+_mpd_real_size(mpd_uint_t *data, mpd_ssize_t size)
+{
+ while (size > 1 && data[size-1] == 0) {
+ size--;
+ }
+
+ return size;
+}
+
+/* Return number of trailing zeros. No errors are possible. */
+mpd_ssize_t
+mpd_trail_zeros(const mpd_t *dec)
+{
+ mpd_uint_t word;
+ mpd_ssize_t i, tz = 0;
+
+ for (i=0; i < dec->len; ++i) {
+ if (dec->data[i] != 0) {
+ word = dec->data[i];
+ tz = i * MPD_RDIGITS;
+ while (word % 10 == 0) {
+ word /= 10;
+ tz++;
+ }
+ break;
+ }
+ }
+
+ return tz;
+}
+
+/* Integer: Undefined for specials */
+static int
+_mpd_isint(const mpd_t *dec)
+{
+ mpd_ssize_t tz;
+
+ if (mpd_iszerocoeff(dec)) {
+ return 1;
+ }
+
+ tz = mpd_trail_zeros(dec);
+ return (dec->exp + tz >= 0);
+}
+
+/* Integer */
+int
+mpd_isinteger(const mpd_t *dec)
+{
+ if (mpd_isspecial(dec)) {
+ return 0;
+ }
+ return _mpd_isint(dec);
+}
+
+/* Word is a power of 10 */
+static int
+mpd_word_ispow10(mpd_uint_t word)
+{
+ int n;
+
+ n = mpd_word_digits(word);
+ if (word == mpd_pow10[n-1]) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Coefficient is a power of 10 */
+static int
+mpd_coeff_ispow10(const mpd_t *dec)
+{
+ if (mpd_word_ispow10(mpd_msword(dec))) {
+ if (_mpd_isallzero(dec->data, dec->len-1)) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/* All digits of a word are nines */
+static int
+mpd_word_isallnine(mpd_uint_t word)
+{
+ int n;
+
+ n = mpd_word_digits(word);
+ if (word == mpd_pow10[n]-1) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* All digits of the coefficient are nines */
+static int
+mpd_coeff_isallnine(const mpd_t *dec)
+{
+ if (mpd_word_isallnine(mpd_msword(dec))) {
+ if (_mpd_isallnine(dec->data, dec->len-1)) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/* Odd decimal: Undefined for non-integers! */
+int
+mpd_isodd(const mpd_t *dec)
+{
+ mpd_uint_t q, r;
+ assert(mpd_isinteger(dec));
+ if (mpd_iszerocoeff(dec)) return 0;
+ if (dec->exp < 0) {
+ _mpd_div_word(&q, &r, -dec->exp, MPD_RDIGITS);
+ q = dec->data[q] / mpd_pow10[r];
+ return mpd_isoddword(q);
+ }
+ return dec->exp == 0 && mpd_isoddword(dec->data[0]);
+}
+
+/* Even: Undefined for non-integers! */
+int
+mpd_iseven(const mpd_t *dec)
+{
+ return !mpd_isodd(dec);
+}
+
+/******************************************************************************/
+/* Getting and setting decimals */
+/******************************************************************************/
+
+/* Internal function: Set a static decimal from a triple, no error checking. */
+static void
+_ssettriple(mpd_t *result, uint8_t sign, mpd_uint_t a, mpd_ssize_t exp)
+{
+ mpd_set_flags(result, sign);
+ result->exp = exp;
+ _mpd_div_word(&result->data[1], &result->data[0], a, MPD_RADIX);
+ result->len = (result->data[1] == 0) ? 1 : 2;
+ mpd_setdigits(result);
+}
+
+/* Internal function: Set a decimal from a triple, no error checking. */
+static void
+_settriple(mpd_t *result, uint8_t sign, mpd_uint_t a, mpd_ssize_t exp)
+{
+ mpd_minalloc(result);
+ mpd_set_flags(result, sign);
+ result->exp = exp;
+ _mpd_div_word(&result->data[1], &result->data[0], a, MPD_RADIX);
+ result->len = (result->data[1] == 0) ? 1 : 2;
+ mpd_setdigits(result);
+}
+
+/* Set a special number from a triple */
+void
+mpd_setspecial(mpd_t *result, uint8_t sign, uint8_t type)
+{
+ mpd_minalloc(result);
+ result->flags &= ~(MPD_NEG|MPD_SPECIAL);
+ result->flags |= (sign|type);
+ result->exp = result->digits = result->len = 0;
+}
+
+/* Set result of NaN with an error status */
+void
+mpd_seterror(mpd_t *result, uint32_t flags, uint32_t *status)
+{
+ mpd_minalloc(result);
+ mpd_set_qnan(result);
+ mpd_set_positive(result);
+ result->exp = result->digits = result->len = 0;
+ *status |= flags;
+}
+
+/* quietly set a static decimal from an mpd_ssize_t */
+void
+mpd_qsset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_uint_t u;
+ uint8_t sign = MPD_POS;
+
+ if (a < 0) {
+ if (a == MPD_SSIZE_MIN) {
+ u = (mpd_uint_t)MPD_SSIZE_MAX +
+ (-(MPD_SSIZE_MIN+MPD_SSIZE_MAX));
+ }
+ else {
+ u = -a;
+ }
+ sign = MPD_NEG;
+ }
+ else {
+ u = a;
+ }
+ _ssettriple(result, sign, u, 0);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* quietly set a static decimal from an mpd_uint_t */
+void
+mpd_qsset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ _ssettriple(result, MPD_POS, a, 0);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* quietly set a static decimal from an int32_t */
+void
+mpd_qsset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qsset_ssize(result, a, ctx, status);
+}
+
+/* quietly set a static decimal from a uint32_t */
+void
+mpd_qsset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qsset_uint(result, a, ctx, status);
+}
+
+#ifdef CONFIG_64
+/* quietly set a static decimal from an int64_t */
+void
+mpd_qsset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qsset_ssize(result, a, ctx, status);
+}
+
+/* quietly set a static decimal from a uint64_t */
+void
+mpd_qsset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qsset_uint(result, a, ctx, status);
+}
+#endif
+
+/* quietly set a decimal from an mpd_ssize_t */
+void
+mpd_qset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_minalloc(result);
+ mpd_qsset_ssize(result, a, ctx, status);
+}
+
+/* quietly set a decimal from an mpd_uint_t */
+void
+mpd_qset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ _settriple(result, MPD_POS, a, 0);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* quietly set a decimal from an int32_t */
+void
+mpd_qset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qset_ssize(result, a, ctx, status);
+}
+
+/* quietly set a decimal from a uint32_t */
+void
+mpd_qset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_qset_uint(result, a, ctx, status);
+}
+
+#if defined(CONFIG_32) && !defined(LEGACY_COMPILER)
+/* set a decimal from a uint64_t */
+static void
+_c32setu64(mpd_t *result, uint64_t u, uint8_t sign, uint32_t *status)
+{
+ mpd_uint_t w[3];
+ uint64_t q;
+ int i, len;
+
+ len = 0;
+ do {
+ q = u / MPD_RADIX;
+ w[len] = (mpd_uint_t)(u - q * MPD_RADIX);
+ u = q; len++;
+ } while (u != 0);
+
+ if (!mpd_qresize(result, len, status)) {
+ return;
+ }
+ for (i = 0; i < len; i++) {
+ result->data[i] = w[i];
+ }
+
+ mpd_set_sign(result, sign);
+ result->exp = 0;
+ result->len = len;
+ mpd_setdigits(result);
+}
+
+static void
+_c32_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ _c32setu64(result, a, MPD_POS, status);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* set a decimal from an int64_t */
+static void
+_c32_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ uint64_t u;
+ uint8_t sign = MPD_POS;
+
+ if (a < 0) {
+ if (a == INT64_MIN) {
+ u = (uint64_t)INT64_MAX + (-(INT64_MIN+INT64_MAX));
+ }
+ else {
+ u = -a;
+ }
+ sign = MPD_NEG;
+ }
+ else {
+ u = a;
+ }
+ _c32setu64(result, u, sign, status);
+ mpd_qfinalize(result, ctx, status);
+}
+#endif /* CONFIG_32 && !LEGACY_COMPILER */
+
+#ifndef LEGACY_COMPILER
+/* quietly set a decimal from an int64_t */
+void
+mpd_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+#ifdef CONFIG_64
+ mpd_qset_ssize(result, a, ctx, status);
+#else
+ _c32_qset_i64(result, a, ctx, status);
+#endif
+}
+
+/* quietly set a decimal from a uint64_t */
+void
+mpd_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+#ifdef CONFIG_64
+ mpd_qset_uint(result, a, ctx, status);
+#else
+ _c32_qset_u64(result, a, ctx, status);
+#endif
+}
+#endif /* !LEGACY_COMPILER */
+
+
+/*
+ * Quietly get an mpd_uint_t from a decimal. Assumes
+ * MPD_UINT_DIGITS == MPD_RDIGITS+1, which is true for
+ * 32 and 64 bit machines.
+ *
+ * If the operation is impossible, MPD_Invalid_operation is set.
+ */
+static mpd_uint_t
+_mpd_qget_uint(int use_sign, const mpd_t *a, uint32_t *status)
+{
+ mpd_t tmp;
+ mpd_uint_t tmp_data[2];
+ mpd_uint_t lo, hi;
+
+ if (mpd_isspecial(a)) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+ if (mpd_iszero(a)) {
+ return 0;
+ }
+ if (use_sign && mpd_isnegative(a)) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+
+ if (a->digits+a->exp > MPD_RDIGITS+1) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+
+ if (a->exp < 0) {
+ if (!_mpd_isint(a)) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+ /* At this point a->digits+a->exp <= MPD_RDIGITS+1,
+ * so the shift fits. */
+ tmp.data = tmp_data;
+ tmp.flags = MPD_STATIC|MPD_STATIC_DATA;
+ tmp.alloc = 2;
+ mpd_qsshiftr(&tmp, a, -a->exp);
+ tmp.exp = 0;
+ a = &tmp;
+ }
+
+ _mpd_get_msdigits(&hi, &lo, a, MPD_RDIGITS+1);
+ if (hi) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+
+ if (a->exp > 0) {
+ _mpd_mul_words(&hi, &lo, lo, mpd_pow10[a->exp]);
+ if (hi) {
+ *status |= MPD_Invalid_operation;
+ return MPD_UINT_MAX;
+ }
+ }
+
+ return lo;
+}
+
+/*
+ * Sets Invalid_operation for:
+ * - specials
+ * - negative numbers (except negative zero)
+ * - non-integers
+ * - overflow
+ */
+mpd_uint_t
+mpd_qget_uint(const mpd_t *a, uint32_t *status)
+{
+ return _mpd_qget_uint(1, a, status);
+}
+
+/* Same as above, but gets the absolute value, i.e. the sign is ignored. */
+mpd_uint_t
+mpd_qabs_uint(const mpd_t *a, uint32_t *status)
+{
+ return _mpd_qget_uint(0, a, status);
+}
+
+/* quietly get an mpd_ssize_t from a decimal */
+mpd_ssize_t
+mpd_qget_ssize(const mpd_t *a, uint32_t *status)
+{
+ mpd_uint_t u;
+ int isneg;
+
+ u = mpd_qabs_uint(a, status);
+ if (*status&MPD_Invalid_operation) {
+ return MPD_SSIZE_MAX;
+ }
+
+ isneg = mpd_isnegative(a);
+ if (u <= MPD_SSIZE_MAX) {
+ return isneg ? -((mpd_ssize_t)u) : (mpd_ssize_t)u;
+ }
+ else if (isneg && u+(MPD_SSIZE_MIN+MPD_SSIZE_MAX) == MPD_SSIZE_MAX) {
+ return MPD_SSIZE_MIN;
+ }
+
+ *status |= MPD_Invalid_operation;
+ return MPD_SSIZE_MAX;
+}
+
+#if defined(CONFIG_32) && !defined(LEGACY_COMPILER)
+/*
+ * Quietly get a uint64_t from a decimal. If the operation is impossible,
+ * MPD_Invalid_operation is set.
+ */
+static uint64_t
+_c32_qget_u64(int use_sign, const mpd_t *a, uint32_t *status)
+{
+ MPD_NEW_STATIC(tmp,0,0,20,3);
+ mpd_context_t maxcontext;
+ uint64_t ret;
+
+ tmp_data[0] = 709551615;
+ tmp_data[1] = 446744073;
+ tmp_data[2] = 18;
+
+ if (mpd_isspecial(a)) {
+ *status |= MPD_Invalid_operation;
+ return UINT64_MAX;
+ }
+ if (mpd_iszero(a)) {
+ return 0;
+ }
+ if (use_sign && mpd_isnegative(a)) {
+ *status |= MPD_Invalid_operation;
+ return UINT64_MAX;
+ }
+ if (!_mpd_isint(a)) {
+ *status |= MPD_Invalid_operation;
+ return UINT64_MAX;
+ }
+
+ if (_mpd_cmp_abs(a, &tmp) > 0) {
+ *status |= MPD_Invalid_operation;
+ return UINT64_MAX;
+ }
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qrescale(&tmp, a, 0, &maxcontext, &maxcontext.status);
+ maxcontext.status &= ~MPD_Rounded;
+ if (maxcontext.status != 0) {
+ *status |= (maxcontext.status|MPD_Invalid_operation); /* GCOV_NOT_REACHED */
+ return UINT64_MAX; /* GCOV_NOT_REACHED */
+ }
+
+ ret = 0;
+ switch (tmp.len) {
+ case 3:
+ ret += (uint64_t)tmp_data[2] * 1000000000000000000ULL;
+ case 2:
+ ret += (uint64_t)tmp_data[1] * 1000000000ULL;
+ case 1:
+ ret += tmp_data[0];
+ break;
+ default:
+ abort(); /* GCOV_NOT_REACHED */
+ }
+
+ return ret;
+}
+
+static int64_t
+_c32_qget_i64(const mpd_t *a, uint32_t *status)
+{
+ uint64_t u;
+ int isneg;
+
+ u = _c32_qget_u64(0, a, status);
+ if (*status&MPD_Invalid_operation) {
+ return INT64_MAX;
+ }
+
+ isneg = mpd_isnegative(a);
+ if (u <= INT64_MAX) {
+ return isneg ? -((int64_t)u) : (int64_t)u;
+ }
+ else if (isneg && u+(INT64_MIN+INT64_MAX) == INT64_MAX) {
+ return INT64_MIN;
+ }
+
+ *status |= MPD_Invalid_operation;
+ return INT64_MAX;
+}
+#endif /* CONFIG_32 && !LEGACY_COMPILER */
+
+#ifdef CONFIG_64
+/* quietly get a uint64_t from a decimal */
+uint64_t
+mpd_qget_u64(const mpd_t *a, uint32_t *status)
+{
+ return mpd_qget_uint(a, status);
+}
+
+/* quietly get an int64_t from a decimal */
+int64_t
+mpd_qget_i64(const mpd_t *a, uint32_t *status)
+{
+ return mpd_qget_ssize(a, status);
+}
+
+/* quietly get a uint32_t from a decimal */
+uint32_t
+mpd_qget_u32(const mpd_t *a, uint32_t *status)
+{
+ uint64_t x = mpd_qget_uint(a, status);
+
+ if (*status&MPD_Invalid_operation) {
+ return UINT32_MAX;
+ }
+ if (x > UINT32_MAX) {
+ *status |= MPD_Invalid_operation;
+ return UINT32_MAX;
+ }
+
+ return (uint32_t)x;
+}
+
+/* quietly get an int32_t from a decimal */
+int32_t
+mpd_qget_i32(const mpd_t *a, uint32_t *status)
+{
+ int64_t x = mpd_qget_ssize(a, status);
+
+ if (*status&MPD_Invalid_operation) {
+ return INT32_MAX;
+ }
+ if (x < INT32_MIN || x > INT32_MAX) {
+ *status |= MPD_Invalid_operation;
+ return INT32_MAX;
+ }
+
+ return (int32_t)x;
+}
+#else
+#ifndef LEGACY_COMPILER
+/* quietly get a uint64_t from a decimal */
+uint64_t
+mpd_qget_u64(const mpd_t *a, uint32_t *status)
+{
+ return _c32_qget_u64(1, a, status);
+}
+
+/* quietly get an int64_t from a decimal */
+int64_t
+mpd_qget_i64(const mpd_t *a, uint32_t *status)
+{
+ return _c32_qget_i64(a, status);
+}
+#endif
+
+/* quietly get a uint32_t from a decimal */
+uint32_t
+mpd_qget_u32(const mpd_t *a, uint32_t *status)
+{
+ return mpd_qget_uint(a, status);
+}
+
+/* quietly get an int32_t from a decimal */
+int32_t
+mpd_qget_i32(const mpd_t *a, uint32_t *status)
+{
+ return mpd_qget_ssize(a, status);
+}
+#endif
+
+
+/******************************************************************************/
+/* Filtering input of functions, finalizing output of functions */
+/******************************************************************************/
+
+/*
+ * Check if the operand is NaN, copy to result and return 1 if this is
+ * the case. Copying can fail since NaNs are allowed to have a payload that
+ * does not fit in MPD_MINALLOC.
+ */
+int
+mpd_qcheck_nan(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isnan(a)) {
+ *status |= mpd_issnan(a) ? MPD_Invalid_operation : 0;
+ mpd_qcopy(result, a, status);
+ mpd_set_qnan(result);
+ _mpd_fix_nan(result, ctx);
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Check if either operand is NaN, copy to result and return 1 if this
+ * is the case. Copying can fail since NaNs are allowed to have a payload
+ * that does not fit in MPD_MINALLOC.
+ */
+int
+mpd_qcheck_nans(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if ((a->flags|b->flags)&(MPD_NAN|MPD_SNAN)) {
+ const mpd_t *choice = b;
+ if (mpd_issnan(a)) {
+ choice = a;
+ *status |= MPD_Invalid_operation;
+ }
+ else if (mpd_issnan(b)) {
+ *status |= MPD_Invalid_operation;
+ }
+ else if (mpd_isqnan(a)) {
+ choice = a;
+ }
+ mpd_qcopy(result, choice, status);
+ mpd_set_qnan(result);
+ _mpd_fix_nan(result, ctx);
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Check if one of the operands is NaN, copy to result and return 1 if this
+ * is the case. Copying can fail since NaNs are allowed to have a payload
+ * that does not fit in MPD_MINALLOC.
+ */
+static int
+mpd_qcheck_3nans(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_t *c,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if ((a->flags|b->flags|c->flags)&(MPD_NAN|MPD_SNAN)) {
+ const mpd_t *choice = c;
+ if (mpd_issnan(a)) {
+ choice = a;
+ *status |= MPD_Invalid_operation;
+ }
+ else if (mpd_issnan(b)) {
+ choice = b;
+ *status |= MPD_Invalid_operation;
+ }
+ else if (mpd_issnan(c)) {
+ *status |= MPD_Invalid_operation;
+ }
+ else if (mpd_isqnan(a)) {
+ choice = a;
+ }
+ else if (mpd_isqnan(b)) {
+ choice = b;
+ }
+ mpd_qcopy(result, choice, status);
+ mpd_set_qnan(result);
+ _mpd_fix_nan(result, ctx);
+ return 1;
+ }
+ return 0;
+}
+
+/* Check if rounding digit 'rnd' leads to an increment. */
+static inline int
+_mpd_rnd_incr(const mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx)
+{
+ int ld;
+
+ switch (ctx->round) {
+ case MPD_ROUND_DOWN: case MPD_ROUND_TRUNC:
+ return 0;
+ case MPD_ROUND_HALF_UP:
+ return (rnd >= 5);
+ case MPD_ROUND_HALF_EVEN:
+ return (rnd > 5) || ((rnd == 5) && mpd_isoddcoeff(dec));
+ case MPD_ROUND_CEILING:
+ return !(rnd == 0 || mpd_isnegative(dec));
+ case MPD_ROUND_FLOOR:
+ return !(rnd == 0 || mpd_ispositive(dec));
+ case MPD_ROUND_HALF_DOWN:
+ return (rnd > 5);
+ case MPD_ROUND_UP:
+ return !(rnd == 0);
+ case MPD_ROUND_05UP:
+ ld = (int)mpd_lsd(dec->data[0]);
+ return (!(rnd == 0) && (ld == 0 || ld == 5));
+ default:
+ /* Without a valid context, further results will be undefined. */
+ return 0; /* GCOV_NOT_REACHED */
+ }
+}
+
+/*
+ * Apply rounding to a decimal that has been right-shifted into a full
+ * precision decimal. If an increment leads to an overflow of the precision,
+ * adjust the coefficient and the exponent and check the new exponent for
+ * overflow.
+ */
+static inline void
+_mpd_apply_round(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (_mpd_rnd_incr(dec, rnd, ctx)) {
+ /* We have a number with exactly ctx->prec digits. The increment
+ * can only lead to an overflow if the decimal is all nines. In
+ * that case, the result is a power of ten with prec+1 digits.
+ *
+ * If the precision is a multiple of MPD_RDIGITS, this situation is
+ * detected by _mpd_baseincr returning a carry.
+ * If the precision is not a multiple of MPD_RDIGITS, we have to
+ * check if the result has one digit too many.
+ */
+ mpd_uint_t carry = _mpd_baseincr(dec->data, dec->len);
+ if (carry) {
+ dec->data[dec->len-1] = mpd_pow10[MPD_RDIGITS-1];
+ dec->exp += 1;
+ _mpd_check_exp(dec, ctx, status);
+ return;
+ }
+ mpd_setdigits(dec);
+ if (dec->digits > ctx->prec) {
+ mpd_qshiftr_inplace(dec, 1);
+ dec->exp += 1;
+ dec->digits = ctx->prec;
+ _mpd_check_exp(dec, ctx, status);
+ }
+ }
+}
+
+/*
+ * Apply rounding to a decimal. Allow overflow of the precision.
+ */
+static inline void
+_mpd_apply_round_excess(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (_mpd_rnd_incr(dec, rnd, ctx)) {
+ mpd_uint_t carry = _mpd_baseincr(dec->data, dec->len);
+ if (carry) {
+ if (!mpd_qresize(dec, dec->len+1, status)) {
+ return;
+ }
+ dec->data[dec->len] = 1;
+ dec->len += 1;
+ }
+ mpd_setdigits(dec);
+ }
+}
+
+/*
+ * Apply rounding to a decimal that has been right-shifted into a decimal
+ * with full precision or less. Return failure if an increment would
+ * overflow the precision.
+ */
+static inline int
+_mpd_apply_round_fit(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (_mpd_rnd_incr(dec, rnd, ctx)) {
+ mpd_uint_t carry = _mpd_baseincr(dec->data, dec->len);
+ if (carry) {
+ if (!mpd_qresize(dec, dec->len+1, status)) {
+ return 0;
+ }
+ dec->data[dec->len] = 1;
+ dec->len += 1;
+ }
+ mpd_setdigits(dec);
+ if (dec->digits > ctx->prec) {
+ mpd_seterror(dec, MPD_Invalid_operation, status);
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/* Check a normal number for overflow, underflow, clamping. If the operand
+ is modified, it will be zero, special or (sub)normal with a coefficient
+ that fits into the current context precision. */
+static inline void
+_mpd_check_exp(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t adjexp, etiny, shift;
+ int rnd;
+
+ adjexp = mpd_adjexp(dec);
+ if (adjexp > ctx->emax) {
+
+ if (mpd_iszerocoeff(dec)) {
+ dec->exp = ctx->emax;
+ if (ctx->clamp) {
+ dec->exp -= (ctx->prec-1);
+ }
+ mpd_zerocoeff(dec);
+ *status |= MPD_Clamped;
+ return;
+ }
+
+ switch (ctx->round) {
+ case MPD_ROUND_HALF_UP: case MPD_ROUND_HALF_EVEN:
+ case MPD_ROUND_HALF_DOWN: case MPD_ROUND_UP:
+ case MPD_ROUND_TRUNC:
+ mpd_setspecial(dec, mpd_sign(dec), MPD_INF);
+ break;
+ case MPD_ROUND_DOWN: case MPD_ROUND_05UP:
+ mpd_qmaxcoeff(dec, ctx, status);
+ dec->exp = ctx->emax - ctx->prec + 1;
+ break;
+ case MPD_ROUND_CEILING:
+ if (mpd_isnegative(dec)) {
+ mpd_qmaxcoeff(dec, ctx, status);
+ dec->exp = ctx->emax - ctx->prec + 1;
+ }
+ else {
+ mpd_setspecial(dec, MPD_POS, MPD_INF);
+ }
+ break;
+ case MPD_ROUND_FLOOR:
+ if (mpd_ispositive(dec)) {
+ mpd_qmaxcoeff(dec, ctx, status);
+ dec->exp = ctx->emax - ctx->prec + 1;
+ }
+ else {
+ mpd_setspecial(dec, MPD_NEG, MPD_INF);
+ }
+ break;
+ default: /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+
+ *status |= MPD_Overflow|MPD_Inexact|MPD_Rounded;
+
+ } /* fold down */
+ else if (ctx->clamp && dec->exp > mpd_etop(ctx)) {
+ /* At this point adjexp=exp+digits-1 <= emax and exp > etop=emax-prec+1:
+ * (1) shift = exp -emax+prec-1 > 0
+ * (2) digits+shift = exp+digits-1 - emax + prec <= prec */
+ shift = dec->exp - mpd_etop(ctx);
+ if (!mpd_qshiftl(dec, dec, shift, status)) {
+ return;
+ }
+ dec->exp -= shift;
+ *status |= MPD_Clamped;
+ if (!mpd_iszerocoeff(dec) && adjexp < ctx->emin) {
+ /* Underflow is impossible, since exp < etiny=emin-prec+1
+ * and exp > etop=emax-prec+1 would imply emax < emin. */
+ *status |= MPD_Subnormal;
+ }
+ }
+ else if (adjexp < ctx->emin) {
+
+ etiny = mpd_etiny(ctx);
+
+ if (mpd_iszerocoeff(dec)) {
+ if (dec->exp < etiny) {
+ dec->exp = etiny;
+ mpd_zerocoeff(dec);
+ *status |= MPD_Clamped;
+ }
+ return;
+ }
+
+ *status |= MPD_Subnormal;
+ if (dec->exp < etiny) {
+ /* At this point adjexp=exp+digits-1 < emin and exp < etiny=emin-prec+1:
+ * (1) shift = emin-prec+1 - exp > 0
+ * (2) digits-shift = exp+digits-1 - emin + prec < prec */
+ shift = etiny - dec->exp;
+ rnd = (int)mpd_qshiftr_inplace(dec, shift);
+ dec->exp = etiny;
+ /* We always have a spare digit in case of an increment. */
+ _mpd_apply_round_excess(dec, rnd, ctx, status);
+ *status |= MPD_Rounded;
+ if (rnd) {
+ *status |= (MPD_Inexact|MPD_Underflow);
+ if (mpd_iszerocoeff(dec)) {
+ mpd_zerocoeff(dec);
+ *status |= MPD_Clamped;
+ }
+ }
+ }
+ /* Case exp >= etiny=emin-prec+1:
+ * (1) adjexp=exp+digits-1 < emin
+ * (2) digits < emin-exp+1 <= prec */
+ }
+}
+
+/* Transcendental functions do not always set Underflow reliably,
+ * since they only use as much precision as is necessary for correct
+ * rounding. If a result like 1.0000000000e-101 is finalized, there
+ * is no rounding digit that would trigger Underflow. But we can
+ * assume Inexact, so a short check suffices. */
+static inline void
+mpd_check_underflow(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
+{
+ if (mpd_adjexp(dec) < ctx->emin && !mpd_iszero(dec) &&
+ dec->exp < mpd_etiny(ctx)) {
+ *status |= MPD_Underflow;
+ }
+}
+
+/* Check if a normal number must be rounded after the exponent has been checked. */
+static inline void
+_mpd_check_round(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_uint_t rnd;
+ mpd_ssize_t shift;
+
+ /* must handle specials: _mpd_check_exp() can produce infinities or NaNs */
+ if (mpd_isspecial(dec)) {
+ return;
+ }
+
+ if (dec->digits > ctx->prec) {
+ shift = dec->digits - ctx->prec;
+ rnd = mpd_qshiftr_inplace(dec, shift);
+ dec->exp += shift;
+ _mpd_apply_round(dec, rnd, ctx, status);
+ *status |= MPD_Rounded;
+ if (rnd) {
+ *status |= MPD_Inexact;
+ }
+ }
+}
+
+/* Finalize all operations. */
+void
+mpd_qfinalize(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
+{
+ if (mpd_isspecial(result)) {
+ if (mpd_isnan(result)) {
+ _mpd_fix_nan(result, ctx);
+ }
+ return;
+ }
+
+ _mpd_check_exp(result, ctx, status);
+ _mpd_check_round(result, ctx, status);
+}
+
+
+/******************************************************************************/
+/* Copying */
+/******************************************************************************/
+
+/* Internal function: Copy a decimal, share data with src: USE WITH CARE! */
+static inline void
+_mpd_copy_shared(mpd_t *dest, const mpd_t *src)
+{
+ dest->flags = src->flags;
+ dest->exp = src->exp;
+ dest->digits = src->digits;
+ dest->len = src->len;
+ dest->alloc = src->alloc;
+ dest->data = src->data;
+
+ mpd_set_shared_data(dest);
+}
+
+/*
+ * Copy a decimal. In case of an error, status is set to MPD_Malloc_error.
+ */
+int
+mpd_qcopy(mpd_t *result, const mpd_t *a, uint32_t *status)
+{
+ if (result == a) return 1;
+
+ if (!mpd_qresize(result, a->len, status)) {
+ return 0;
+ }
+
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+ result->digits = a->digits;
+ result->len = a->len;
+ memcpy(result->data, a->data, a->len * (sizeof *result->data));
+
+ return 1;
+}
+
+/*
+ * Copy to a decimal with a static buffer. The caller has to make sure that
+ * the buffer is big enough. Cannot fail.
+ */
+static void
+mpd_qcopy_static(mpd_t *result, const mpd_t *a)
+{
+ if (result == a) return;
+
+ memcpy(result->data, a->data, a->len * (sizeof *result->data));
+
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+ result->digits = a->digits;
+ result->len = a->len;
+}
+
+/*
+ * Return a newly allocated copy of the operand. In case of an error,
+ * status is set to MPD_Malloc_error and the return value is NULL.
+ */
+mpd_t *
+mpd_qncopy(const mpd_t *a)
+{
+ mpd_t *result;
+
+ if ((result = mpd_qnew_size(a->len)) == NULL) {
+ return NULL;
+ }
+ memcpy(result->data, a->data, a->len * (sizeof *result->data));
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+ result->digits = a->digits;
+ result->len = a->len;
+
+ return result;
+}
+
+/*
+ * Copy a decimal and set the sign to positive. In case of an error, the
+ * status is set to MPD_Malloc_error.
+ */
+int
+mpd_qcopy_abs(mpd_t *result, const mpd_t *a, uint32_t *status)
+{
+ if (!mpd_qcopy(result, a, status)) {
+ return 0;
+ }
+ mpd_set_positive(result);
+ return 1;
+}
+
+/*
+ * Copy a decimal and negate the sign. In case of an error, the
+ * status is set to MPD_Malloc_error.
+ */
+int
+mpd_qcopy_negate(mpd_t *result, const mpd_t *a, uint32_t *status)
+{
+ if (!mpd_qcopy(result, a, status)) {
+ return 0;
+ }
+ _mpd_negate(result);
+ return 1;
+}
+
+/*
+ * Copy a decimal, setting the sign of the first operand to the sign of the
+ * second operand. In case of an error, the status is set to MPD_Malloc_error.
+ */
+int
+mpd_qcopy_sign(mpd_t *result, const mpd_t *a, const mpd_t *b, uint32_t *status)
+{
+ uint8_t sign_b = mpd_sign(b); /* result may equal b! */
+
+ if (!mpd_qcopy(result, a, status)) {
+ return 0;
+ }
+ mpd_set_sign(result, sign_b);
+ return 1;
+}
+
+
+/******************************************************************************/
+/* Comparisons */
+/******************************************************************************/
+
+/*
+ * For all functions that compare two operands and return an int the usual
+ * convention applies to the return value:
+ *
+ * -1 if op1 < op2
+ * 0 if op1 == op2
+ * 1 if op1 > op2
+ *
+ * INT_MAX for error
+ */
+
+
+/* Convenience macro. If a and b are not equal, return from the calling
+ * function with the correct comparison value. */
+#define CMP_EQUAL_OR_RETURN(a, b) \
+ if (a != b) { \
+ if (a < b) { \
+ return -1; \
+ } \
+ return 1; \
+ }
+
+/*
+ * Compare the data of big and small. This function does the equivalent
+ * of first shifting small to the left and then comparing the data of
+ * big and small, except that no allocation for the left shift is needed.
+ */
+static int
+_mpd_basecmp(mpd_uint_t *big, mpd_uint_t *small, mpd_size_t n, mpd_size_t m,
+ mpd_size_t shift)
+{
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__)
+ /* spurious uninitialized warnings */
+ mpd_uint_t l=l, lprev=lprev, h=h;
+#else
+ mpd_uint_t l, lprev, h;
+#endif
+ mpd_uint_t q, r;
+ mpd_uint_t ph, x;
+
+ assert(m > 0 && n >= m && shift > 0);
+
+ _mpd_div_word(&q, &r, (mpd_uint_t)shift, MPD_RDIGITS);
+
+ if (r != 0) {
+
+ ph = mpd_pow10[r];
+
+ --m; --n;
+ _mpd_divmod_pow10(&h, &lprev, small[m--], MPD_RDIGITS-r);
+ if (h != 0) {
+ CMP_EQUAL_OR_RETURN(big[n], h)
+ --n;
+ }
+ for (; m != MPD_SIZE_MAX; m--,n--) {
+ _mpd_divmod_pow10(&h, &l, small[m], MPD_RDIGITS-r);
+ x = ph * lprev + h;
+ CMP_EQUAL_OR_RETURN(big[n], x)
+ lprev = l;
+ }
+ x = ph * lprev;
+ CMP_EQUAL_OR_RETURN(big[q], x)
+ }
+ else {
+ while (--m != MPD_SIZE_MAX) {
+ CMP_EQUAL_OR_RETURN(big[m+q], small[m])
+ }
+ }
+
+ return !_mpd_isallzero(big, q);
+}
+
+/* Compare two decimals with the same adjusted exponent. */
+static int
+_mpd_cmp_same_adjexp(const mpd_t *a, const mpd_t *b)
+{
+ mpd_ssize_t shift, i;
+
+ if (a->exp != b->exp) {
+ /* Cannot wrap: a->exp + a->digits = b->exp + b->digits, so
+ * a->exp - b->exp = b->digits - a->digits. */
+ shift = a->exp - b->exp;
+ if (shift > 0) {
+ return -1 * _mpd_basecmp(b->data, a->data, b->len, a->len, shift);
+ }
+ else {
+ return _mpd_basecmp(a->data, b->data, a->len, b->len, -shift);
+ }
+ }
+
+ /*
+ * At this point adjexp(a) == adjexp(b) and a->exp == b->exp,
+ * so a->digits == b->digits, therefore a->len == b->len.
+ */
+ for (i = a->len-1; i >= 0; --i) {
+ CMP_EQUAL_OR_RETURN(a->data[i], b->data[i])
+ }
+
+ return 0;
+}
+
+/* Compare two numerical values. */
+static int
+_mpd_cmp(const mpd_t *a, const mpd_t *b)
+{
+ mpd_ssize_t adjexp_a, adjexp_b;
+
+ /* equal pointers */
+ if (a == b) {
+ return 0;
+ }
+
+ /* infinities */
+ if (mpd_isinfinite(a)) {
+ if (mpd_isinfinite(b)) {
+ return mpd_isnegative(b) - mpd_isnegative(a);
+ }
+ return mpd_arith_sign(a);
+ }
+ if (mpd_isinfinite(b)) {
+ return -mpd_arith_sign(b);
+ }
+
+ /* zeros */
+ if (mpd_iszerocoeff(a)) {
+ if (mpd_iszerocoeff(b)) {
+ return 0;
+ }
+ return -mpd_arith_sign(b);
+ }
+ if (mpd_iszerocoeff(b)) {
+ return mpd_arith_sign(a);
+ }
+
+ /* different signs */
+ if (mpd_sign(a) != mpd_sign(b)) {
+ return mpd_sign(b) - mpd_sign(a);
+ }
+
+ /* different adjusted exponents */
+ adjexp_a = mpd_adjexp(a);
+ adjexp_b = mpd_adjexp(b);
+ if (adjexp_a != adjexp_b) {
+ if (adjexp_a < adjexp_b) {
+ return -1 * mpd_arith_sign(a);
+ }
+ return mpd_arith_sign(a);
+ }
+
+ /* same adjusted exponents */
+ return _mpd_cmp_same_adjexp(a, b) * mpd_arith_sign(a);
+}
+
+/* Compare the absolutes of two numerical values. */
+static int
+_mpd_cmp_abs(const mpd_t *a, const mpd_t *b)
+{
+ mpd_ssize_t adjexp_a, adjexp_b;
+
+ /* equal pointers */
+ if (a == b) {
+ return 0;
+ }
+
+ /* infinities */
+ if (mpd_isinfinite(a)) {
+ if (mpd_isinfinite(b)) {
+ return 0;
+ }
+ return 1;
+ }
+ if (mpd_isinfinite(b)) {
+ return -1;
+ }
+
+ /* zeros */
+ if (mpd_iszerocoeff(a)) {
+ if (mpd_iszerocoeff(b)) {
+ return 0;
+ }
+ return -1;
+ }
+ if (mpd_iszerocoeff(b)) {
+ return 1;
+ }
+
+ /* different adjusted exponents */
+ adjexp_a = mpd_adjexp(a);
+ adjexp_b = mpd_adjexp(b);
+ if (adjexp_a != adjexp_b) {
+ if (adjexp_a < adjexp_b) {
+ return -1;
+ }
+ return 1;
+ }
+
+ /* same adjusted exponents */
+ return _mpd_cmp_same_adjexp(a, b);
+}
+
+/* Compare two values and return an integer result. */
+int
+mpd_qcmp(const mpd_t *a, const mpd_t *b, uint32_t *status)
+{
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_isnan(a) || mpd_isnan(b)) {
+ *status |= MPD_Invalid_operation;
+ return INT_MAX;
+ }
+ }
+
+ return _mpd_cmp(a, b);
+}
+
+/*
+ * Compare a and b, convert the usual integer result to a decimal and
+ * store it in 'result'. For convenience, the integer result of the comparison
+ * is returned. Comparisons involving NaNs return NaN/INT_MAX.
+ */
+int
+mpd_qcompare(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return INT_MAX;
+ }
+ }
+
+ c = _mpd_cmp(a, b);
+ _settriple(result, (c < 0), (c != 0), 0);
+ return c;
+}
+
+/* Same as mpd_compare(), but signal for all NaNs, i.e. also for quiet NaNs. */
+int
+mpd_qcompare_signal(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ *status |= MPD_Invalid_operation;
+ return INT_MAX;
+ }
+ }
+
+ c = _mpd_cmp(a, b);
+ _settriple(result, (c < 0), (c != 0), 0);
+ return c;
+}
+
+/* Compare the operands using a total order. */
+int
+mpd_cmp_total(const mpd_t *a, const mpd_t *b)
+{
+ mpd_t aa, bb;
+ int nan_a, nan_b;
+ int c;
+
+ if (mpd_sign(a) != mpd_sign(b)) {
+ return mpd_sign(b) - mpd_sign(a);
+ }
+
+
+ if (mpd_isnan(a)) {
+ c = 1;
+ if (mpd_isnan(b)) {
+ nan_a = (mpd_isqnan(a)) ? 1 : 0;
+ nan_b = (mpd_isqnan(b)) ? 1 : 0;
+ if (nan_b == nan_a) {
+ if (a->len > 0 && b->len > 0) {
+ _mpd_copy_shared(&aa, a);
+ _mpd_copy_shared(&bb, b);
+ aa.exp = bb.exp = 0;
+ /* compare payload */
+ c = _mpd_cmp_abs(&aa, &bb);
+ }
+ else {
+ c = (a->len > 0) - (b->len > 0);
+ }
+ }
+ else {
+ c = nan_a - nan_b;
+ }
+ }
+ }
+ else if (mpd_isnan(b)) {
+ c = -1;
+ }
+ else {
+ c = _mpd_cmp_abs(a, b);
+ if (c == 0 && a->exp != b->exp) {
+ c = (a->exp < b->exp) ? -1 : 1;
+ }
+ }
+
+ return c * mpd_arith_sign(a);
+}
+
+/*
+ * Compare a and b according to a total order, convert the usual integer result
+ * to a decimal and store it in 'result'. For convenience, the integer result
+ * of the comparison is returned.
+ */
+int
+mpd_compare_total(mpd_t *result, const mpd_t *a, const mpd_t *b)
+{
+ int c;
+
+ c = mpd_cmp_total(a, b);
+ _settriple(result, (c < 0), (c != 0), 0);
+ return c;
+}
+
+/* Compare the magnitude of the operands using a total order. */
+int
+mpd_cmp_total_mag(const mpd_t *a, const mpd_t *b)
+{
+ mpd_t aa, bb;
+
+ _mpd_copy_shared(&aa, a);
+ _mpd_copy_shared(&bb, b);
+
+ mpd_set_positive(&aa);
+ mpd_set_positive(&bb);
+
+ return mpd_cmp_total(&aa, &bb);
+}
+
+/*
+ * Compare the magnitude of a and b according to a total order, convert the
+ * the usual integer result to a decimal and store it in 'result'.
+ * For convenience, the integer result of the comparison is returned.
+ */
+int
+mpd_compare_total_mag(mpd_t *result, const mpd_t *a, const mpd_t *b)
+{
+ int c;
+
+ c = mpd_cmp_total_mag(a, b);
+ _settriple(result, (c < 0), (c != 0), 0);
+ return c;
+}
+
+/* Determine an ordering for operands that are numerically equal. */
+static inline int
+_mpd_cmp_numequal(const mpd_t *a, const mpd_t *b)
+{
+ int sign_a, sign_b;
+ int c;
+
+ sign_a = mpd_sign(a);
+ sign_b = mpd_sign(b);
+ if (sign_a != sign_b) {
+ c = sign_b - sign_a;
+ }
+ else {
+ c = (a->exp < b->exp) ? -1 : 1;
+ c *= mpd_arith_sign(a);
+ }
+
+ return c;
+}
+
+
+/******************************************************************************/
+/* Shifting the coefficient */
+/******************************************************************************/
+
+/*
+ * Shift the coefficient of the operand to the left, no check for specials.
+ * Both operands may be the same pointer. If the result length has to be
+ * increased, mpd_qresize() might fail with MPD_Malloc_error.
+ */
+int
+mpd_qshiftl(mpd_t *result, const mpd_t *a, mpd_ssize_t n, uint32_t *status)
+{
+ mpd_ssize_t size;
+
+ assert(!mpd_isspecial(a));
+ assert(n >= 0);
+
+ if (mpd_iszerocoeff(a) || n == 0) {
+ return mpd_qcopy(result, a, status);
+ }
+
+ size = mpd_digits_to_size(a->digits+n);
+ if (!mpd_qresize(result, size, status)) {
+ return 0; /* result is NaN */
+ }
+
+ _mpd_baseshiftl(result->data, a->data, size, a->len, n);
+
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+ result->digits = a->digits+n;
+ result->len = size;
+
+ return 1;
+}
+
+/* Determine the rounding indicator if all digits of the coefficient are shifted
+ * out of the picture. */
+static mpd_uint_t
+_mpd_get_rnd(const mpd_uint_t *data, mpd_ssize_t len, int use_msd)
+{
+ mpd_uint_t rnd = 0, rest = 0, word;
+
+ word = data[len-1];
+ /* special treatment for the most significant digit if shift == digits */
+ if (use_msd) {
+ _mpd_divmod_pow10(&rnd, &rest, word, mpd_word_digits(word)-1);
+ if (len > 1 && rest == 0) {
+ rest = !_mpd_isallzero(data, len-1);
+ }
+ }
+ else {
+ rest = !_mpd_isallzero(data, len);
+ }
+
+ return (rnd == 0 || rnd == 5) ? rnd + !!rest : rnd;
+}
+
+/*
+ * Same as mpd_qshiftr(), but 'result' is an mpd_t with a static coefficient.
+ * It is the caller's responsibility to ensure that the coefficient is big
+ * enough. The function cannot fail.
+ */
+static mpd_uint_t
+mpd_qsshiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n)
+{
+ mpd_uint_t rnd;
+ mpd_ssize_t size;
+
+ assert(!mpd_isspecial(a));
+ assert(n >= 0);
+
+ if (mpd_iszerocoeff(a) || n == 0) {
+ mpd_qcopy_static(result, a);
+ return 0;
+ }
+
+ if (n >= a->digits) {
+ rnd = _mpd_get_rnd(a->data, a->len, (n==a->digits));
+ mpd_zerocoeff(result);
+ }
+ else {
+ result->digits = a->digits-n;
+ size = mpd_digits_to_size(result->digits);
+ rnd = _mpd_baseshiftr(result->data, a->data, a->len, n);
+ result->len = size;
+ }
+
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+
+ return rnd;
+}
+
+/*
+ * Inplace shift of the coefficient to the right, no check for specials.
+ * Returns the rounding indicator for mpd_rnd_incr().
+ * The function cannot fail.
+ */
+mpd_uint_t
+mpd_qshiftr_inplace(mpd_t *result, mpd_ssize_t n)
+{
+ uint32_t dummy;
+ mpd_uint_t rnd;
+ mpd_ssize_t size;
+
+ assert(!mpd_isspecial(result));
+ assert(n >= 0);
+
+ if (mpd_iszerocoeff(result) || n == 0) {
+ return 0;
+ }
+
+ if (n >= result->digits) {
+ rnd = _mpd_get_rnd(result->data, result->len, (n==result->digits));
+ mpd_zerocoeff(result);
+ }
+ else {
+ rnd = _mpd_baseshiftr(result->data, result->data, result->len, n);
+ result->digits -= n;
+ size = mpd_digits_to_size(result->digits);
+ /* reducing the size cannot fail */
+ mpd_qresize(result, size, &dummy);
+ result->len = size;
+ }
+
+ return rnd;
+}
+
+/*
+ * Shift the coefficient of the operand to the right, no check for specials.
+ * Both operands may be the same pointer. Returns the rounding indicator to
+ * be used by mpd_rnd_incr(). If the result length has to be increased,
+ * mpd_qcopy() or mpd_qresize() might fail with MPD_Malloc_error. In those
+ * cases, MPD_UINT_MAX is returned.
+ */
+mpd_uint_t
+mpd_qshiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n, uint32_t *status)
+{
+ mpd_uint_t rnd;
+ mpd_ssize_t size;
+
+ assert(!mpd_isspecial(a));
+ assert(n >= 0);
+
+ if (mpd_iszerocoeff(a) || n == 0) {
+ if (!mpd_qcopy(result, a, status)) {
+ return MPD_UINT_MAX;
+ }
+ return 0;
+ }
+
+ if (n >= a->digits) {
+ rnd = _mpd_get_rnd(a->data, a->len, (n==a->digits));
+ mpd_zerocoeff(result);
+ }
+ else {
+ result->digits = a->digits-n;
+ size = mpd_digits_to_size(result->digits);
+ if (result == a) {
+ rnd = _mpd_baseshiftr(result->data, a->data, a->len, n);
+ /* reducing the size cannot fail */
+ mpd_qresize(result, size, status);
+ }
+ else {
+ if (!mpd_qresize(result, size, status)) {
+ return MPD_UINT_MAX;
+ }
+ rnd = _mpd_baseshiftr(result->data, a->data, a->len, n);
+ }
+ result->len = size;
+ }
+
+ mpd_copy_flags(result, a);
+ result->exp = a->exp;
+
+ return rnd;
+}
+
+
+/******************************************************************************/
+/* Miscellaneous operations */
+/******************************************************************************/
+
+/* Logical And */
+void
+mpd_qand(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ const mpd_t *big = a, *small = b;
+ mpd_uint_t x, y, z, xbit, ybit;
+ int k, mswdigits;
+ mpd_ssize_t i;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b) ||
+ mpd_isnegative(a) || mpd_isnegative(b) ||
+ a->exp != 0 || b->exp != 0) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (b->digits > a->digits) {
+ big = b;
+ small = a;
+ }
+ if (!mpd_qresize(result, big->len, status)) {
+ return;
+ }
+
+
+ /* full words */
+ for (i = 0; i < small->len-1; i++) {
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit&ybit) ? mpd_pow10[k] : 0;
+ }
+ result->data[i] = z;
+ }
+ /* most significant word of small */
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ mswdigits = mpd_word_digits(x);
+ for (k = 0; k < mswdigits; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit&ybit) ? mpd_pow10[k] : 0;
+ }
+ result->data[i++] = z;
+
+ /* scan the rest of y for digits > 1 */
+ for (; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ }
+ /* scan the rest of big for digits > 1 */
+ for (; i < big->len; i++) {
+ y = big->data[i];
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ }
+ }
+
+ mpd_clear_flags(result);
+ result->exp = 0;
+ result->len = _mpd_real_size(result->data, small->len);
+ mpd_qresize(result, result->len, status);
+ mpd_setdigits(result);
+ _mpd_cap(result, ctx);
+ return;
+
+invalid_operation:
+ mpd_seterror(result, MPD_Invalid_operation, status);
+}
+
+/* Class of an operand. Returns a pointer to the constant name. */
+const char *
+mpd_class(const mpd_t *a, const mpd_context_t *ctx)
+{
+ if (mpd_isnan(a)) {
+ if (mpd_isqnan(a))
+ return "NaN";
+ else
+ return "sNaN";
+ }
+ else if (mpd_ispositive(a)) {
+ if (mpd_isinfinite(a))
+ return "+Infinity";
+ else if (mpd_iszero(a))
+ return "+Zero";
+ else if (mpd_isnormal(a, ctx))
+ return "+Normal";
+ else
+ return "+Subnormal";
+ }
+ else {
+ if (mpd_isinfinite(a))
+ return "-Infinity";
+ else if (mpd_iszero(a))
+ return "-Zero";
+ else if (mpd_isnormal(a, ctx))
+ return "-Normal";
+ else
+ return "-Subnormal";
+ }
+}
+
+/* Logical Xor */
+void
+mpd_qinvert(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_uint_t x, z, xbit;
+ mpd_ssize_t i, digits, len;
+ mpd_ssize_t q, r;
+ int k;
+
+ if (mpd_isspecial(a) || mpd_isnegative(a) || a->exp != 0) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ digits = (a->digits < ctx->prec) ? ctx->prec : a->digits;
+ _mpd_idiv_word(&q, &r, digits, MPD_RDIGITS);
+ len = (r == 0) ? q : q+1;
+ if (!mpd_qresize(result, len, status)) {
+ return;
+ }
+
+ for (i = 0; i < len; i++) {
+ x = (i < a->len) ? a->data[i] : 0;
+ z = 0;
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ xbit = x % 10;
+ x /= 10;
+ if (xbit > 1) {
+ goto invalid_operation;
+ }
+ z += !xbit ? mpd_pow10[k] : 0;
+ }
+ result->data[i] = z;
+ }
+
+ mpd_clear_flags(result);
+ result->exp = 0;
+ result->len = _mpd_real_size(result->data, len);
+ mpd_qresize(result, result->len, status);
+ mpd_setdigits(result);
+ _mpd_cap(result, ctx);
+ return;
+
+invalid_operation:
+ mpd_seterror(result, MPD_Invalid_operation, status);
+}
+
+/* Exponent of the magnitude of the most significant digit of the operand. */
+void
+mpd_qlogb(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ }
+ else if (mpd_iszerocoeff(a)) {
+ mpd_setspecial(result, MPD_NEG, MPD_INF);
+ *status |= MPD_Division_by_zero;
+ }
+ else {
+ mpd_qset_ssize(result, mpd_adjexp(a), ctx, status);
+ }
+}
+
+/* Logical Or */
+void
+mpd_qor(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ const mpd_t *big = a, *small = b;
+ mpd_uint_t x, y, z, xbit, ybit;
+ int k, mswdigits;
+ mpd_ssize_t i;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b) ||
+ mpd_isnegative(a) || mpd_isnegative(b) ||
+ a->exp != 0 || b->exp != 0) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (b->digits > a->digits) {
+ big = b;
+ small = a;
+ }
+ if (!mpd_qresize(result, big->len, status)) {
+ return;
+ }
+
+
+ /* full words */
+ for (i = 0; i < small->len-1; i++) {
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit|ybit) ? mpd_pow10[k] : 0;
+ }
+ result->data[i] = z;
+ }
+ /* most significant word of small */
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ mswdigits = mpd_word_digits(x);
+ for (k = 0; k < mswdigits; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit|ybit) ? mpd_pow10[k] : 0;
+ }
+
+ /* scan for digits > 1 and copy the rest of y */
+ for (; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ z += ybit*mpd_pow10[k];
+ }
+ result->data[i++] = z;
+ /* scan for digits > 1 and copy the rest of big */
+ for (; i < big->len; i++) {
+ y = big->data[i];
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ }
+ result->data[i] = big->data[i];
+ }
+
+ mpd_clear_flags(result);
+ result->exp = 0;
+ result->len = _mpd_real_size(result->data, big->len);
+ mpd_qresize(result, result->len, status);
+ mpd_setdigits(result);
+ _mpd_cap(result, ctx);
+ return;
+
+invalid_operation:
+ mpd_seterror(result, MPD_Invalid_operation, status);
+}
+
+/*
+ * Rotate the coefficient of 'a' by 'b' digits. 'b' must be an integer with
+ * exponent 0.
+ */
+void
+mpd_qrotate(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ MPD_NEW_STATIC(tmp,0,0,0,0);
+ MPD_NEW_STATIC(big,0,0,0,0);
+ MPD_NEW_STATIC(small,0,0,0,0);
+ mpd_ssize_t n, lshift, rshift;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ }
+ if (b->exp != 0 || mpd_isinfinite(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ n = mpd_qget_ssize(b, &workstatus);
+ if (workstatus&MPD_Invalid_operation) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (n > ctx->prec || n < -ctx->prec) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+ if (n >= 0) {
+ lshift = n;
+ rshift = ctx->prec-n;
+ }
+ else {
+ lshift = ctx->prec+n;
+ rshift = -n;
+ }
+
+ if (a->digits > ctx->prec) {
+ if (!mpd_qcopy(&tmp, a, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+ _mpd_cap(&tmp, ctx);
+ a = &tmp;
+ }
+
+ if (!mpd_qshiftl(&big, a, lshift, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+ _mpd_cap(&big, ctx);
+
+ if (mpd_qshiftr(&small, a, rshift, status) == MPD_UINT_MAX) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+ _mpd_qadd(result, &big, &small, ctx, status);
+
+
+finish:
+ mpd_del(&tmp);
+ mpd_del(&big);
+ mpd_del(&small);
+}
+
+/*
+ * b must be an integer with exponent 0 and in the range +-2*(emax + prec).
+ * XXX: In my opinion +-(2*emax + prec) would be more sensible.
+ * The result is a with the value of b added to its exponent.
+ */
+void
+mpd_qscaleb(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_uint_t n, maxjump;
+#ifndef LEGACY_COMPILER
+ int64_t exp;
+#else
+ mpd_uint_t x;
+ int x_sign, n_sign;
+ mpd_ssize_t exp;
+#endif
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ }
+ if (b->exp != 0 || mpd_isinfinite(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ n = mpd_qabs_uint(b, &workstatus);
+ /* the spec demands this */
+ maxjump = 2 * (mpd_uint_t)(ctx->emax + ctx->prec);
+
+ if (n > maxjump || workstatus&MPD_Invalid_operation) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+#ifndef LEGACY_COMPILER
+ exp = a->exp + (int64_t)n * mpd_arith_sign(b);
+ exp = (exp > MPD_EXP_INF) ? MPD_EXP_INF : exp;
+ exp = (exp < MPD_EXP_CLAMP) ? MPD_EXP_CLAMP : exp;
+#else
+ x = (a->exp < 0) ? -a->exp : a->exp;
+ x_sign = (a->exp < 0) ? 1 : 0;
+ n_sign = mpd_isnegative(b) ? 1 : 0;
+
+ if (x_sign == n_sign) {
+ x = x + n;
+ if (x < n) x = MPD_UINT_MAX;
+ }
+ else {
+ x_sign = (x >= n) ? x_sign : n_sign;
+ x = (x >= n) ? x - n : n - x;
+ }
+ if (!x_sign && x > MPD_EXP_INF) x = MPD_EXP_INF;
+ if (x_sign && x > -MPD_EXP_CLAMP) x = -MPD_EXP_CLAMP;
+ exp = x_sign ? -((mpd_ssize_t)x) : (mpd_ssize_t)x;
+#endif
+
+ mpd_qcopy(result, a, status);
+ result->exp = (mpd_ssize_t)exp;
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/*
+ * Shift the coefficient by n digits, positive n is a left shift. In the case
+ * of a left shift, the result is decapitated to fit the context precision. If
+ * you don't want that, use mpd_shiftl().
+ */
+void
+mpd_qshiftn(mpd_t *result, const mpd_t *a, mpd_ssize_t n, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+ if (n >= 0 && n <= ctx->prec) {
+ mpd_qshiftl(result, a, n, status);
+ _mpd_cap(result, ctx);
+ }
+ else if (n < 0 && n >= -ctx->prec) {
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+ _mpd_cap(result, ctx);
+ mpd_qshiftr_inplace(result, -n);
+ }
+ else {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+}
+
+/*
+ * Same as mpd_shiftn(), but the shift is specified by the decimal b, which
+ * must be an integer with a zero exponent. Infinities remain infinities.
+ */
+void
+mpd_qshift(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_ssize_t n;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ }
+ if (b->exp != 0 || mpd_isinfinite(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ n = mpd_qget_ssize(b, &workstatus);
+ if (workstatus&MPD_Invalid_operation) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (n > ctx->prec || n < -ctx->prec) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+ if (n >= 0) {
+ mpd_qshiftl(result, a, n, status);
+ _mpd_cap(result, ctx);
+ }
+ else {
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+ _mpd_cap(result, ctx);
+ mpd_qshiftr_inplace(result, -n);
+ }
+}
+
+/* Logical Xor */
+void
+mpd_qxor(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ const mpd_t *big = a, *small = b;
+ mpd_uint_t x, y, z, xbit, ybit;
+ int k, mswdigits;
+ mpd_ssize_t i;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b) ||
+ mpd_isnegative(a) || mpd_isnegative(b) ||
+ a->exp != 0 || b->exp != 0) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (b->digits > a->digits) {
+ big = b;
+ small = a;
+ }
+ if (!mpd_qresize(result, big->len, status)) {
+ return;
+ }
+
+
+ /* full words */
+ for (i = 0; i < small->len-1; i++) {
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit^ybit) ? mpd_pow10[k] : 0;
+ }
+ result->data[i] = z;
+ }
+ /* most significant word of small */
+ x = small->data[i];
+ y = big->data[i];
+ z = 0;
+ mswdigits = mpd_word_digits(x);
+ for (k = 0; k < mswdigits; k++) {
+ xbit = x % 10;
+ x /= 10;
+ ybit = y % 10;
+ y /= 10;
+ if (xbit > 1 || ybit > 1) {
+ goto invalid_operation;
+ }
+ z += (xbit^ybit) ? mpd_pow10[k] : 0;
+ }
+
+ /* scan for digits > 1 and copy the rest of y */
+ for (; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ z += ybit*mpd_pow10[k];
+ }
+ result->data[i++] = z;
+ /* scan for digits > 1 and copy the rest of big */
+ for (; i < big->len; i++) {
+ y = big->data[i];
+ for (k = 0; k < MPD_RDIGITS; k++) {
+ ybit = y % 10;
+ y /= 10;
+ if (ybit > 1) {
+ goto invalid_operation;
+ }
+ }
+ result->data[i] = big->data[i];
+ }
+
+ mpd_clear_flags(result);
+ result->exp = 0;
+ result->len = _mpd_real_size(result->data, big->len);
+ mpd_qresize(result, result->len, status);
+ mpd_setdigits(result);
+ _mpd_cap(result, ctx);
+ return;
+
+invalid_operation:
+ mpd_seterror(result, MPD_Invalid_operation, status);
+}
+
+
+/******************************************************************************/
+/* Arithmetic operations */
+/******************************************************************************/
+
+/*
+ * The absolute value of a. If a is negative, the result is the same
+ * as the result of the minus operation. Otherwise, the result is the
+ * result of the plus operation.
+ */
+void
+mpd_qabs(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ }
+
+ if (mpd_isnegative(a)) {
+ mpd_qminus(result, a, ctx, status);
+ }
+ else {
+ mpd_qplus(result, a, ctx, status);
+ }
+}
+
+static inline void
+_mpd_ptrswap(const mpd_t **a, const mpd_t **b)
+{
+ const mpd_t *t = *a;
+ *a = *b;
+ *b = t;
+}
+
+/* Add or subtract infinities. */
+static void
+_mpd_qaddsub_inf(mpd_t *result, const mpd_t *a, const mpd_t *b, uint8_t sign_b,
+ uint32_t *status)
+{
+ if (mpd_isinfinite(a)) {
+ if (mpd_sign(a) != sign_b && mpd_isinfinite(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+ else {
+ mpd_setspecial(result, mpd_sign(a), MPD_INF);
+ }
+ return;
+ }
+ assert(mpd_isinfinite(b));
+ mpd_setspecial(result, sign_b, MPD_INF);
+}
+
+/* Add or subtract non-special numbers. */
+static void
+_mpd_qaddsub(mpd_t *result, const mpd_t *a, const mpd_t *b, uint8_t sign_b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ const mpd_t *big, *small;
+ MPD_NEW_STATIC(big_aligned,0,0,0,0);
+ MPD_NEW_CONST(tiny,0,0,1,1,1,1);
+ mpd_uint_t carry;
+ mpd_ssize_t newsize, shift;
+ mpd_ssize_t exp, i;
+ int swap = 0;
+
+
+ /* compare exponents */
+ big = a; small = b;
+ if (big->exp != small->exp) {
+ if (small->exp > big->exp) {
+ _mpd_ptrswap(&big, &small);
+ swap++;
+ }
+ /* align the coefficients */
+ if (!mpd_iszerocoeff(big)) {
+ exp = big->exp - 1;
+ exp += (big->digits > ctx->prec) ? 0 : big->digits-ctx->prec-1;
+ if (mpd_adjexp(small) < exp) {
+ /*
+ * Avoid huge shifts by substituting a value for small that is
+ * guaranteed to produce the same results.
+ *
+ * adjexp(small) < exp if and only if:
+ *
+ * bdigits <= prec AND
+ * bdigits+shift >= prec+2+sdigits AND
+ * exp = bexp+bdigits-prec-2
+ *
+ * 1234567000000000 -> bdigits + shift
+ * ----------XX1234 -> sdigits
+ * ----------X1 -> tiny-digits
+ * |- prec -|
+ *
+ * OR
+ *
+ * bdigits > prec AND
+ * shift > sdigits AND
+ * exp = bexp-1
+ *
+ * 1234567892100000 -> bdigits + shift
+ * ----------XX1234 -> sdigits
+ * ----------X1 -> tiny-digits
+ * |- prec -|
+ *
+ * If tiny is zero, adding or subtracting is a no-op.
+ * Otherwise, adding tiny generates a non-zero digit either
+ * below the rounding digit or the least significant digit
+ * of big. When subtracting, tiny is in the same position as
+ * the carry that would be generated by subtracting sdigits.
+ */
+ mpd_copy_flags(&tiny, small);
+ tiny.exp = exp;
+ tiny.digits = 1;
+ tiny.len = 1;
+ tiny.data[0] = mpd_iszerocoeff(small) ? 0 : 1;
+ small = &tiny;
+ }
+ /* This cannot wrap: the difference is positive and <= maxprec */
+ shift = big->exp - small->exp;
+ if (!mpd_qshiftl(&big_aligned, big, shift, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+ big = &big_aligned;
+ }
+ }
+ result->exp = small->exp;
+
+
+ /* compare length of coefficients */
+ if (big->len < small->len) {
+ _mpd_ptrswap(&big, &small);
+ swap++;
+ }
+
+ newsize = big->len;
+ if (!mpd_qresize(result, newsize, status)) {
+ goto finish;
+ }
+
+ if (mpd_sign(a) == sign_b) {
+
+ carry = _mpd_baseadd(result->data, big->data, small->data,
+ big->len, small->len);
+
+ if (carry) {
+ newsize = big->len + 1;
+ if (!mpd_qresize(result, newsize, status)) {
+ goto finish;
+ }
+ result->data[newsize-1] = carry;
+ }
+
+ result->len = newsize;
+ mpd_set_flags(result, sign_b);
+ }
+ else {
+ if (big->len == small->len) {
+ for (i=big->len-1; i >= 0; --i) {
+ if (big->data[i] != small->data[i]) {
+ if (big->data[i] < small->data[i]) {
+ _mpd_ptrswap(&big, &small);
+ swap++;
+ }
+ break;
+ }
+ }
+ }
+
+ _mpd_basesub(result->data, big->data, small->data,
+ big->len, small->len);
+ newsize = _mpd_real_size(result->data, big->len);
+ /* resize to smaller cannot fail */
+ (void)mpd_qresize(result, newsize, status);
+
+ result->len = newsize;
+ sign_b = (swap & 1) ? sign_b : mpd_sign(a);
+ mpd_set_flags(result, sign_b);
+
+ if (mpd_iszerocoeff(result)) {
+ mpd_set_positive(result);
+ if (ctx->round == MPD_ROUND_FLOOR) {
+ mpd_set_negative(result);
+ }
+ }
+ }
+
+ mpd_setdigits(result);
+
+finish:
+ mpd_del(&big_aligned);
+}
+
+/* Add a and b. No specials, no finalizing. */
+static void
+_mpd_qadd(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ _mpd_qaddsub(result, a, b, mpd_sign(b), ctx, status);
+}
+
+/* Subtract b from a. No specials, no finalizing. */
+static void
+_mpd_qsub(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ _mpd_qaddsub(result, a, b, !mpd_sign(b), ctx, status);
+}
+
+/* Add a and b. */
+void
+mpd_qadd(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ _mpd_qaddsub_inf(result, a, b, mpd_sign(b), status);
+ return;
+ }
+
+ _mpd_qaddsub(result, a, b, mpd_sign(b), ctx, status);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* Add a and b. Set NaN/Invalid_operation if the result is inexact. */
+static void
+_mpd_qadd_exact(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+
+ mpd_qadd(result, a, b, ctx, &workstatus);
+ *status |= workstatus;
+ if (workstatus & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+}
+
+/* Subtract b from a. */
+void
+mpd_qsub(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ _mpd_qaddsub_inf(result, a, b, !mpd_sign(b), status);
+ return;
+ }
+
+ _mpd_qaddsub(result, a, b, !mpd_sign(b), ctx, status);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* Subtract b from a. Set NaN/Invalid_operation if the result is inexact. */
+static void
+_mpd_qsub_exact(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+
+ mpd_qsub(result, a, b, ctx, &workstatus);
+ *status |= workstatus;
+ if (workstatus & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+}
+
+/* Add decimal and mpd_ssize_t. */
+void
+mpd_qadd_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_ssize(&bb, b, &maxcontext, status);
+ mpd_qadd(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Add decimal and mpd_uint_t. */
+void
+mpd_qadd_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_uint(&bb, b, &maxcontext, status);
+ mpd_qadd(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Subtract mpd_ssize_t from decimal. */
+void
+mpd_qsub_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_ssize(&bb, b, &maxcontext, status);
+ mpd_qsub(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Subtract mpd_uint_t from decimal. */
+void
+mpd_qsub_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_uint(&bb, b, &maxcontext, status);
+ mpd_qsub(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Add decimal and int32_t. */
+void
+mpd_qadd_i32(mpd_t *result, const mpd_t *a, int32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qadd_ssize(result, a, b, ctx, status);
+}
+
+/* Add decimal and uint32_t. */
+void
+mpd_qadd_u32(mpd_t *result, const mpd_t *a, uint32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qadd_uint(result, a, b, ctx, status);
+}
+
+#ifdef CONFIG_64
+/* Add decimal and int64_t. */
+void
+mpd_qadd_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qadd_ssize(result, a, b, ctx, status);
+}
+
+/* Add decimal and uint64_t. */
+void
+mpd_qadd_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qadd_uint(result, a, b, ctx, status);
+}
+#elif !defined(LEGACY_COMPILER)
+/* Add decimal and int64_t. */
+void
+mpd_qadd_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_i64(&bb, b, &maxcontext, status);
+ mpd_qadd(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Add decimal and uint64_t. */
+void
+mpd_qadd_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_u64(&bb, b, &maxcontext, status);
+ mpd_qadd(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+#endif
+
+/* Subtract int32_t from decimal. */
+void
+mpd_qsub_i32(mpd_t *result, const mpd_t *a, int32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qsub_ssize(result, a, b, ctx, status);
+}
+
+/* Subtract uint32_t from decimal. */
+void
+mpd_qsub_u32(mpd_t *result, const mpd_t *a, uint32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qsub_uint(result, a, b, ctx, status);
+}
+
+#ifdef CONFIG_64
+/* Subtract int64_t from decimal. */
+void
+mpd_qsub_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qsub_ssize(result, a, b, ctx, status);
+}
+
+/* Subtract uint64_t from decimal. */
+void
+mpd_qsub_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qsub_uint(result, a, b, ctx, status);
+}
+#elif !defined(LEGACY_COMPILER)
+/* Subtract int64_t from decimal. */
+void
+mpd_qsub_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_i64(&bb, b, &maxcontext, status);
+ mpd_qsub(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Subtract uint64_t from decimal. */
+void
+mpd_qsub_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_u64(&bb, b, &maxcontext, status);
+ mpd_qsub(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+#endif
+
+
+/* Divide infinities. */
+static void
+_mpd_qdiv_inf(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if (mpd_isinfinite(a)) {
+ if (mpd_isinfinite(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ mpd_setspecial(result, mpd_sign(a)^mpd_sign(b), MPD_INF);
+ return;
+ }
+ assert(mpd_isinfinite(b));
+ _settriple(result, mpd_sign(a)^mpd_sign(b), 0, mpd_etiny(ctx));
+ *status |= MPD_Clamped;
+}
+
+enum {NO_IDEAL_EXP, SET_IDEAL_EXP};
+/* Divide a by b. */
+static void
+_mpd_qdiv(int action, mpd_t *q, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ MPD_NEW_STATIC(aligned,0,0,0,0);
+ mpd_uint_t ld;
+ mpd_ssize_t shift, exp, tz;
+ mpd_ssize_t newsize;
+ mpd_ssize_t ideal_exp;
+ mpd_uint_t rem;
+ uint8_t sign_a = mpd_sign(a);
+ uint8_t sign_b = mpd_sign(b);
+
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(q, a, b, ctx, status)) {
+ return;
+ }
+ _mpd_qdiv_inf(q, a, b, ctx, status);
+ return;
+ }
+ if (mpd_iszerocoeff(b)) {
+ if (mpd_iszerocoeff(a)) {
+ mpd_seterror(q, MPD_Division_undefined, status);
+ }
+ else {
+ mpd_setspecial(q, sign_a^sign_b, MPD_INF);
+ *status |= MPD_Division_by_zero;
+ }
+ return;
+ }
+ if (mpd_iszerocoeff(a)) {
+ exp = a->exp - b->exp;
+ _settriple(q, sign_a^sign_b, 0, exp);
+ mpd_qfinalize(q, ctx, status);
+ return;
+ }
+
+ shift = (b->digits - a->digits) + ctx->prec + 1;
+ ideal_exp = a->exp - b->exp;
+ exp = ideal_exp - shift;
+ if (shift > 0) {
+ if (!mpd_qshiftl(&aligned, a, shift, status)) {
+ mpd_seterror(q, MPD_Malloc_error, status);
+ goto finish;
+ }
+ a = &aligned;
+ }
+ else if (shift < 0) {
+ shift = -shift;
+ if (!mpd_qshiftl(&aligned, b, shift, status)) {
+ mpd_seterror(q, MPD_Malloc_error, status);
+ goto finish;
+ }
+ b = &aligned;
+ }
+
+
+ newsize = a->len - b->len + 1;
+ if ((q != b && q != a) || (q == b && newsize > b->len)) {
+ if (!mpd_qresize(q, newsize, status)) {
+ mpd_seterror(q, MPD_Malloc_error, status);
+ goto finish;
+ }
+ }
+
+
+ if (b->len == 1) {
+ rem = _mpd_shortdiv(q->data, a->data, a->len, b->data[0]);
+ }
+ else if (b->len <= MPD_NEWTONDIV_CUTOFF) {
+ int ret = _mpd_basedivmod(q->data, NULL, a->data, b->data,
+ a->len, b->len);
+ if (ret < 0) {
+ mpd_seterror(q, MPD_Malloc_error, status);
+ goto finish;
+ }
+ rem = ret;
+ }
+ else {
+ MPD_NEW_STATIC(r,0,0,0,0);
+ _mpd_base_ndivmod(q, &r, a, b, status);
+ if (mpd_isspecial(q) || mpd_isspecial(&r)) {
+ mpd_setspecial(q, MPD_POS, MPD_NAN);
+ mpd_del(&r);
+ goto finish;
+ }
+ rem = !mpd_iszerocoeff(&r);
+ mpd_del(&r);
+ newsize = q->len;
+ }
+
+ newsize = _mpd_real_size(q->data, newsize);
+ /* resize to smaller cannot fail */
+ mpd_qresize(q, newsize, status);
+ mpd_set_flags(q, sign_a^sign_b);
+ q->len = newsize;
+ mpd_setdigits(q);
+
+ shift = ideal_exp - exp;
+ if (rem) {
+ ld = mpd_lsd(q->data[0]);
+ if (ld == 0 || ld == 5) {
+ q->data[0] += 1;
+ }
+ }
+ else if (action == SET_IDEAL_EXP && shift > 0) {
+ tz = mpd_trail_zeros(q);
+ shift = (tz > shift) ? shift : tz;
+ mpd_qshiftr_inplace(q, shift);
+ exp += shift;
+ }
+
+ q->exp = exp;
+
+
+finish:
+ mpd_del(&aligned);
+ mpd_qfinalize(q, ctx, status);
+}
+
+/* Divide a by b. */
+void
+mpd_qdiv(mpd_t *q, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ _mpd_qdiv(SET_IDEAL_EXP, q, a, b, ctx, status);
+}
+
+/* Internal function. */
+static void
+_mpd_qdivmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ MPD_NEW_STATIC(aligned,0,0,0,0);
+ mpd_ssize_t qsize, rsize;
+ mpd_ssize_t ideal_exp, expdiff, shift;
+ uint8_t sign_a = mpd_sign(a);
+ uint8_t sign_ab = mpd_sign(a)^mpd_sign(b);
+
+
+ ideal_exp = (a->exp > b->exp) ? b->exp : a->exp;
+ if (mpd_iszerocoeff(a)) {
+ if (!mpd_qcopy(r, a, status)) {
+ goto nanresult; /* GCOV_NOT_REACHED */
+ }
+ r->exp = ideal_exp;
+ _settriple(q, sign_ab, 0, 0);
+ return;
+ }
+
+ expdiff = mpd_adjexp(a) - mpd_adjexp(b);
+ if (expdiff < 0) {
+ if (a->exp > b->exp) {
+ /* positive and less than b->digits - a->digits */
+ shift = a->exp - b->exp;
+ if (!mpd_qshiftl(r, a, shift, status)) {
+ goto nanresult;
+ }
+ r->exp = ideal_exp;
+ }
+ else {
+ if (!mpd_qcopy(r, a, status)) {
+ goto nanresult;
+ }
+ }
+ _settriple(q, sign_ab, 0, 0);
+ return;
+ }
+ if (expdiff > ctx->prec) {
+ *status |= MPD_Division_impossible;
+ goto nanresult;
+ }
+
+
+ /*
+ * At this point we have:
+ * (1) 0 <= a->exp + a->digits - b->exp - b->digits <= prec
+ * (2) a->exp - b->exp >= b->digits - a->digits
+ * (3) a->exp - b->exp <= prec + b->digits - a->digits
+ */
+ if (a->exp != b->exp) {
+ shift = a->exp - b->exp;
+ if (shift > 0) {
+ /* by (3), after the shift a->digits <= prec + b->digits */
+ if (!mpd_qshiftl(&aligned, a, shift, status)) {
+ goto nanresult;
+ }
+ a = &aligned;
+ }
+ else {
+ shift = -shift;
+ /* by (2), after the shift b->digits <= a->digits */
+ if (!mpd_qshiftl(&aligned, b, shift, status)) {
+ goto nanresult;
+ }
+ b = &aligned;
+ }
+ }
+
+
+ qsize = a->len - b->len + 1;
+ if (!(q == a && qsize < a->len) && !(q == b && qsize < b->len)) {
+ if (!mpd_qresize(q, qsize, status)) {
+ goto nanresult;
+ }
+ }
+
+ rsize = b->len;
+ if (!(r == a && rsize < a->len)) {
+ if (!mpd_qresize(r, rsize, status)) {
+ goto nanresult;
+ }
+ }
+
+ if (b->len == 1) {
+ if (a->len == 1) {
+ _mpd_div_word(&q->data[0], &r->data[0], a->data[0], b->data[0]);
+ }
+ else {
+ r->data[0] = _mpd_shortdiv(q->data, a->data, a->len, b->data[0]);
+ }
+ }
+ else if (b->len <= MPD_NEWTONDIV_CUTOFF) {
+ int ret;
+ ret = _mpd_basedivmod(q->data, r->data, a->data, b->data,
+ a->len, b->len);
+ if (ret == -1) {
+ *status |= MPD_Malloc_error;
+ goto nanresult;
+ }
+ }
+ else {
+ _mpd_base_ndivmod(q, r, a, b, status);
+ if (mpd_isspecial(q) || mpd_isspecial(r)) {
+ goto nanresult;
+ }
+ qsize = q->len;
+ rsize = r->len;
+ }
+
+ qsize = _mpd_real_size(q->data, qsize);
+ /* resize to smaller cannot fail */
+ mpd_qresize(q, qsize, status);
+ q->len = qsize;
+ mpd_setdigits(q);
+ mpd_set_flags(q, sign_ab);
+ q->exp = 0;
+ if (q->digits > ctx->prec) {
+ *status |= MPD_Division_impossible;
+ goto nanresult;
+ }
+
+ rsize = _mpd_real_size(r->data, rsize);
+ /* resize to smaller cannot fail */
+ mpd_qresize(r, rsize, status);
+ r->len = rsize;
+ mpd_setdigits(r);
+ mpd_set_flags(r, sign_a);
+ r->exp = ideal_exp;
+
+out:
+ mpd_del(&aligned);
+ return;
+
+nanresult:
+ mpd_setspecial(q, MPD_POS, MPD_NAN);
+ mpd_setspecial(r, MPD_POS, MPD_NAN);
+ goto out;
+}
+
+/* Integer division with remainder. */
+void
+mpd_qdivmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint8_t sign = mpd_sign(a)^mpd_sign(b);
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(q, a, b, ctx, status)) {
+ mpd_qcopy(r, q, status);
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ if (mpd_isinfinite(b)) {
+ mpd_setspecial(q, MPD_POS, MPD_NAN);
+ }
+ else {
+ mpd_setspecial(q, sign, MPD_INF);
+ }
+ mpd_setspecial(r, MPD_POS, MPD_NAN);
+ *status |= MPD_Invalid_operation;
+ return;
+ }
+ if (mpd_isinfinite(b)) {
+ if (!mpd_qcopy(r, a, status)) {
+ mpd_seterror(q, MPD_Malloc_error, status);
+ return;
+ }
+ mpd_qfinalize(r, ctx, status);
+ _settriple(q, sign, 0, 0);
+ return;
+ }
+ /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+ if (mpd_iszerocoeff(b)) {
+ if (mpd_iszerocoeff(a)) {
+ mpd_setspecial(q, MPD_POS, MPD_NAN);
+ mpd_setspecial(r, MPD_POS, MPD_NAN);
+ *status |= MPD_Division_undefined;
+ }
+ else {
+ mpd_setspecial(q, sign, MPD_INF);
+ mpd_setspecial(r, MPD_POS, MPD_NAN);
+ *status |= (MPD_Division_by_zero|MPD_Invalid_operation);
+ }
+ return;
+ }
+
+ _mpd_qdivmod(q, r, a, b, ctx, status);
+ mpd_qfinalize(q, ctx, status);
+ mpd_qfinalize(r, ctx, status);
+}
+
+void
+mpd_qdivint(mpd_t *q, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ MPD_NEW_STATIC(r,0,0,0,0);
+ uint8_t sign = mpd_sign(a)^mpd_sign(b);
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(q, a, b, ctx, status)) {
+ return;
+ }
+ if (mpd_isinfinite(a) && mpd_isinfinite(b)) {
+ mpd_seterror(q, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_setspecial(q, sign, MPD_INF);
+ return;
+ }
+ if (mpd_isinfinite(b)) {
+ _settriple(q, sign, 0, 0);
+ return;
+ }
+ /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+ if (mpd_iszerocoeff(b)) {
+ if (mpd_iszerocoeff(a)) {
+ mpd_seterror(q, MPD_Division_undefined, status);
+ }
+ else {
+ mpd_setspecial(q, sign, MPD_INF);
+ *status |= MPD_Division_by_zero;
+ }
+ return;
+ }
+
+
+ _mpd_qdivmod(q, &r, a, b, ctx, status);
+ mpd_del(&r);
+ mpd_qfinalize(q, ctx, status);
+}
+
+/* Divide decimal by mpd_ssize_t. */
+void
+mpd_qdiv_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_ssize(&bb, b, &maxcontext, status);
+ mpd_qdiv(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Divide decimal by mpd_uint_t. */
+void
+mpd_qdiv_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_uint(&bb, b, &maxcontext, status);
+ mpd_qdiv(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Divide decimal by int32_t. */
+void
+mpd_qdiv_i32(mpd_t *result, const mpd_t *a, int32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qdiv_ssize(result, a, b, ctx, status);
+}
+
+/* Divide decimal by uint32_t. */
+void
+mpd_qdiv_u32(mpd_t *result, const mpd_t *a, uint32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qdiv_uint(result, a, b, ctx, status);
+}
+
+#ifdef CONFIG_64
+/* Divide decimal by int64_t. */
+void
+mpd_qdiv_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qdiv_ssize(result, a, b, ctx, status);
+}
+
+/* Divide decimal by uint64_t. */
+void
+mpd_qdiv_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qdiv_uint(result, a, b, ctx, status);
+}
+#elif !defined(LEGACY_COMPILER)
+/* Divide decimal by int64_t. */
+void
+mpd_qdiv_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_i64(&bb, b, &maxcontext, status);
+ mpd_qdiv(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Divide decimal by uint64_t. */
+void
+mpd_qdiv_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_u64(&bb, b, &maxcontext, status);
+ mpd_qdiv(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+#endif
+
+/* Pad the result with trailing zeros if it has fewer digits than prec. */
+static void
+_mpd_zeropad(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
+{
+ if (!mpd_isspecial(result) && !mpd_iszero(result) &&
+ result->digits < ctx->prec) {
+ mpd_ssize_t shift = ctx->prec - result->digits;
+ mpd_qshiftl(result, result, shift, status);
+ result->exp -= shift;
+ }
+}
+
+/* Check if the result is guaranteed to be one. */
+static int
+_mpd_qexp_check_one(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ MPD_NEW_CONST(lim,0,-(ctx->prec+1),1,1,1,9);
+ MPD_NEW_SHARED(aa, a);
+
+ mpd_set_positive(&aa);
+
+ /* abs(a) <= 9 * 10**(-prec-1) */
+ if (_mpd_cmp(&aa, &lim) <= 0) {
+ _settriple(result, 0, 1, 0);
+ *status |= MPD_Rounded|MPD_Inexact;
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Get the number of iterations for the Horner scheme in _mpd_qexp().
+ */
+static inline mpd_ssize_t
+_mpd_get_exp_iterations(const mpd_t *r, mpd_ssize_t p)
+{
+ mpd_ssize_t log10pbyr; /* lower bound for log10(p / abs(r)) */
+ mpd_ssize_t n;
+
+ assert(p >= 10);
+ assert(!mpd_iszero(r));
+ assert(-p < mpd_adjexp(r) && mpd_adjexp(r) <= -1);
+
+#ifdef CONFIG_64
+ if (p > (mpd_ssize_t)(1ULL<<52)) {
+ return MPD_SSIZE_MAX;
+ }
+#endif
+
+ /*
+ * Lower bound for log10(p / abs(r)): adjexp(p) - (adjexp(r) + 1)
+ * At this point (for CONFIG_64, CONFIG_32 is not problematic):
+ * 1) 10 <= p <= 2**52
+ * 2) -p < adjexp(r) <= -1
+ * 3) 1 <= log10pbyr <= 2**52 + 14
+ */
+ log10pbyr = (mpd_word_digits(p)-1) - (mpd_adjexp(r)+1);
+
+ /*
+ * The numerator in the paper is 1.435 * p - 1.182, calculated
+ * exactly. We compensate for rounding errors by using 1.43503.
+ * ACL2 proofs:
+ * 1) exp-iter-approx-lower-bound: The term below evaluated
+ * in 53-bit floating point arithmetic is greater than or
+ * equal to the exact term used in the paper.
+ * 2) exp-iter-approx-upper-bound: The term below is less than
+ * or equal to 3/2 * p <= 3/2 * 2**52.
+ */
+ n = (mpd_ssize_t)ceil((1.43503*(double)p - 1.182) / (double)log10pbyr);
+ return n >= 3 ? n : 3;
+}
+
+/*
+ * Internal function, specials have been dealt with. Apart from Overflow
+ * and Underflow, two cases must be considered for the error of the result:
+ *
+ * 1) abs(a) <= 9 * 10**(-prec-1) ==> result == 1
+ *
+ * Absolute error: abs(1 - e**x) < 10**(-prec)
+ * -------------------------------------------
+ *
+ * 2) abs(a) > 9 * 10**(-prec-1)
+ *
+ * Relative error: abs(result - e**x) < 0.5 * 10**(-prec) * e**x
+ * -------------------------------------------------------------
+ *
+ * The algorithm is from Hull&Abrham, Variable Precision Exponential Function,
+ * ACM Transactions on Mathematical Software, Vol. 12, No. 2, June 1986.
+ *
+ * Main differences:
+ *
+ * - The number of iterations for the Horner scheme is calculated using
+ * 53-bit floating point arithmetic.
+ *
+ * - In the error analysis for ER (relative error accumulated in the
+ * evaluation of the truncated series) the reduced operand r may
+ * have any number of digits.
+ * ACL2 proof: exponent-relative-error
+ *
+ * - The analysis for early abortion has been adapted for the mpd_t
+ * ranges.
+ */
+static void
+_mpd_qexp(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_STATIC(tmp,0,0,0,0);
+ MPD_NEW_STATIC(sum,0,0,0,0);
+ MPD_NEW_CONST(word,0,0,1,1,1,1);
+ mpd_ssize_t j, n, t;
+
+ assert(!mpd_isspecial(a));
+
+ if (mpd_iszerocoeff(a)) {
+ _settriple(result, MPD_POS, 1, 0);
+ return;
+ }
+
+ /*
+ * We are calculating e^x = e^(r*10^t) = (e^r)^(10^t), where abs(r) < 1 and t >= 0.
+ *
+ * If t > 0, we have:
+ *
+ * (1) 0.1 <= r < 1, so e^0.1 <= e^r. If t > MAX_T, overflow occurs:
+ *
+ * MAX-EMAX+1 < log10(e^(0.1*10*t)) <= log10(e^(r*10^t)) < adjexp(e^(r*10^t))+1
+ *
+ * (2) -1 < r <= -0.1, so e^r <= e^-0.1. If t > MAX_T, underflow occurs:
+ *
+ * adjexp(e^(r*10^t)) <= log10(e^(r*10^t)) <= log10(e^(-0.1*10^t)) < MIN-ETINY
+ */
+#if defined(CONFIG_64)
+ #define MPD_EXP_MAX_T 19
+#elif defined(CONFIG_32)
+ #define MPD_EXP_MAX_T 10
+#endif
+ t = a->digits + a->exp;
+ t = (t > 0) ? t : 0;
+ if (t > MPD_EXP_MAX_T) {
+ if (mpd_ispositive(a)) {
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ *status |= MPD_Overflow|MPD_Inexact|MPD_Rounded;
+ }
+ else {
+ _settriple(result, MPD_POS, 0, mpd_etiny(ctx));
+ *status |= (MPD_Inexact|MPD_Rounded|MPD_Subnormal|
+ MPD_Underflow|MPD_Clamped);
+ }
+ return;
+ }
+
+ /* abs(a) <= 9 * 10**(-prec-1) */
+ if (_mpd_qexp_check_one(result, a, ctx, status)) {
+ return;
+ }
+
+ mpd_maxcontext(&workctx);
+ workctx.prec = ctx->prec + t + 2;
+ workctx.prec = (workctx.prec < 10) ? 10 : workctx.prec;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+ result->exp -= t;
+
+ /*
+ * At this point:
+ * 1) 9 * 10**(-prec-1) < abs(a)
+ * 2) 9 * 10**(-prec-t-1) < abs(r)
+ * 3) log10(9) - prec - t - 1 < log10(abs(r)) < adjexp(abs(r)) + 1
+ * 4) - prec - t - 2 < adjexp(abs(r)) <= -1
+ */
+ n = _mpd_get_exp_iterations(result, workctx.prec);
+ if (n == MPD_SSIZE_MAX) {
+ mpd_seterror(result, MPD_Invalid_operation, status); /* GCOV_UNLIKELY */
+ return; /* GCOV_UNLIKELY */
+ }
+
+ _settriple(&sum, MPD_POS, 1, 0);
+
+ for (j = n-1; j >= 1; j--) {
+ word.data[0] = j;
+ mpd_setdigits(&word);
+ mpd_qdiv(&tmp, result, &word, &workctx, &workctx.status);
+ mpd_qfma(&sum, &sum, &tmp, &one, &workctx, &workctx.status);
+ }
+
+#ifdef CONFIG_64
+ _mpd_qpow_uint(result, &sum, mpd_pow10[t], MPD_POS, &workctx, status);
+#else
+ if (t <= MPD_MAX_POW10) {
+ _mpd_qpow_uint(result, &sum, mpd_pow10[t], MPD_POS, &workctx, status);
+ }
+ else {
+ t -= MPD_MAX_POW10;
+ _mpd_qpow_uint(&tmp, &sum, mpd_pow10[MPD_MAX_POW10], MPD_POS,
+ &workctx, status);
+ _mpd_qpow_uint(result, &tmp, mpd_pow10[t], MPD_POS, &workctx, status);
+ }
+#endif
+
+ mpd_del(&tmp);
+ mpd_del(&sum);
+ *status |= (workctx.status&MPD_Errors);
+ *status |= (MPD_Inexact|MPD_Rounded);
+}
+
+/* exp(a) */
+void
+mpd_qexp(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ _settriple(result, MPD_POS, 0, 0);
+ }
+ else {
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ }
+ return;
+ }
+ if (mpd_iszerocoeff(a)) {
+ _settriple(result, MPD_POS, 1, 0);
+ return;
+ }
+
+ workctx = *ctx;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+
+ if (ctx->allcr) {
+ MPD_NEW_STATIC(t1, 0,0,0,0);
+ MPD_NEW_STATIC(t2, 0,0,0,0);
+ MPD_NEW_STATIC(ulp, 0,0,0,0);
+ MPD_NEW_STATIC(aa, 0,0,0,0);
+ mpd_ssize_t prec;
+ mpd_ssize_t ulpexp;
+ uint32_t workstatus;
+
+ if (result == a) {
+ if (!mpd_qcopy(&aa, a, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ a = &aa;
+ }
+
+ workctx.clamp = 0;
+ prec = ctx->prec + 3;
+ while (1) {
+ workctx.prec = prec;
+ workstatus = 0;
+
+ _mpd_qexp(result, a, &workctx, &workstatus);
+ *status |= workstatus;
+
+ ulpexp = result->exp + result->digits - workctx.prec;
+ if (workstatus & MPD_Underflow) {
+ /* The effective work precision is result->digits. */
+ ulpexp = result->exp;
+ }
+ _ssettriple(&ulp, MPD_POS, 1, ulpexp);
+
+ /*
+ * At this point [1]:
+ * 1) abs(result - e**x) < 0.5 * 10**(-prec) * e**x
+ * 2) result - ulp < e**x < result + ulp
+ * 3) result - ulp < result < result + ulp
+ *
+ * If round(result-ulp)==round(result+ulp), then
+ * round(result)==round(e**x). Therefore the result
+ * is correctly rounded.
+ *
+ * [1] If abs(a) <= 9 * 10**(-prec-1), use the absolute
+ * error for a similar argument.
+ */
+ workctx.prec = ctx->prec;
+ mpd_qadd(&t1, result, &ulp, &workctx, &workctx.status);
+ mpd_qsub(&t2, result, &ulp, &workctx, &workctx.status);
+ if (mpd_isspecial(result) || mpd_iszerocoeff(result) ||
+ mpd_qcmp(&t1, &t2, status) == 0) {
+ workctx.clamp = ctx->clamp;
+ _mpd_zeropad(result, &workctx, status);
+ mpd_check_underflow(result, &workctx, status);
+ mpd_qfinalize(result, &workctx, status);
+ break;
+ }
+ prec += MPD_RDIGITS;
+ }
+ mpd_del(&t1);
+ mpd_del(&t2);
+ mpd_del(&ulp);
+ mpd_del(&aa);
+ }
+ else {
+ _mpd_qexp(result, a, &workctx, status);
+ _mpd_zeropad(result, &workctx, status);
+ mpd_check_underflow(result, &workctx, status);
+ mpd_qfinalize(result, &workctx, status);
+ }
+}
+
+/* Fused multiply-add: (a * b) + c, with a single final rounding. */
+void
+mpd_qfma(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_t *c,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_t *cc = NULL;
+
+ if (result == c) {
+ if ((cc = mpd_qncopy(c)) == NULL) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ c = cc;
+ }
+
+ _mpd_qmul(result, a, b, ctx, &workstatus);
+ if (!(workstatus&MPD_Invalid_operation)) {
+ mpd_qadd(result, result, c, ctx, &workstatus);
+ }
+
+ if (cc) mpd_del(cc);
+ *status |= workstatus;
+}
+
+/*
+ * Schedule the optimal precision increase for the Newton iteration.
+ * v := input operand
+ * z_0 := initial approximation
+ * initprec := natural number such that abs(log(v) - z_0) < 10**-initprec
+ * maxprec := target precision
+ *
+ * For convenience the output klist contains the elements in reverse order:
+ * klist := [k_n-1, ..., k_0], where
+ * 1) k_0 <= initprec and
+ * 2) abs(log(v) - result) < 10**(-2*k_n-1 + 1) <= 10**-maxprec.
+ */
+static inline int
+ln_schedule_prec(mpd_ssize_t klist[MPD_MAX_PREC_LOG2], mpd_ssize_t maxprec,
+ mpd_ssize_t initprec)
+{
+ mpd_ssize_t k;
+ int i;
+
+ assert(maxprec >= 2 && initprec >= 2);
+ if (maxprec <= initprec) return -1;
+
+ i = 0; k = maxprec;
+ do {
+ k = (k+2) / 2;
+ klist[i++] = k;
+ } while (k > initprec);
+
+ return i-1;
+}
+
+/* The constants have been verified with both decimal.py and mpfr. */
+#ifdef CONFIG_64
+#if MPD_RDIGITS != 19
+ #error "mpdecimal.c: MPD_RDIGITS must be 19."
+#endif
+static const mpd_uint_t mpd_ln10_data[MPD_MINALLOC_MAX] = {
+ 6983716328982174407ULL, 9089704281976336583ULL, 1515961135648465461ULL,
+ 4416816335727555703ULL, 2900988039194170265ULL, 2307925037472986509ULL,
+ 107598438319191292ULL, 3466624107184669231ULL, 4450099781311469159ULL,
+ 9807828059751193854ULL, 7713456862091670584ULL, 1492198849978748873ULL,
+ 6528728696511086257ULL, 2385392051446341972ULL, 8692180205189339507ULL,
+ 6518769751037497088ULL, 2375253577097505395ULL, 9095610299291824318ULL,
+ 982748238504564801ULL, 5438635917781170543ULL, 7547331541421808427ULL,
+ 752371033310119785ULL, 3171643095059950878ULL, 9785265383207606726ULL,
+ 2932258279850258550ULL, 5497347726624257094ULL, 2976979522110718264ULL,
+ 9221477656763693866ULL, 1979650047149510504ULL, 6674183485704422507ULL,
+ 9702766860595249671ULL, 9278096762712757753ULL, 9314848524948644871ULL,
+ 6826928280848118428ULL, 754403708474699401ULL, 230105703089634572ULL,
+ 1929203337658714166ULL, 7589402567763113569ULL, 4208241314695689016ULL,
+ 2922455440575892572ULL, 9356734206705811364ULL, 2684916746550586856ULL,
+ 644507064800027750ULL, 9476834636167921018ULL, 5659121373450747856ULL,
+ 2835522011480466371ULL, 6470806855677432162ULL, 7141748003688084012ULL,
+ 9619404400222105101ULL, 5504893431493939147ULL, 6674744042432743651ULL,
+ 2287698219886746543ULL, 7773262884616336622ULL, 1985283935053089653ULL,
+ 4680843799894826233ULL, 8168948290720832555ULL, 8067566662873690987ULL,
+ 6248633409525465082ULL, 9829834196778404228ULL, 3524802359972050895ULL,
+ 3327900967572609677ULL, 110148862877297603ULL, 179914546843642076ULL,
+ 2302585092994045684ULL
+};
+#else
+#if MPD_RDIGITS != 9
+ #error "mpdecimal.c: MPD_RDIGITS must be 9."
+#endif
+static const mpd_uint_t mpd_ln10_data[MPD_MINALLOC_MAX] = {
+ 401682692UL, 708474699UL, 720754403UL, 30896345UL, 602301057UL, 765871416UL,
+ 192920333UL, 763113569UL, 589402567UL, 956890167UL, 82413146UL, 589257242UL,
+ 245544057UL, 811364292UL, 734206705UL, 868569356UL, 167465505UL, 775026849UL,
+ 706480002UL, 18064450UL, 636167921UL, 569476834UL, 734507478UL, 156591213UL,
+ 148046637UL, 283552201UL, 677432162UL, 470806855UL, 880840126UL, 417480036UL,
+ 210510171UL, 940440022UL, 939147961UL, 893431493UL, 436515504UL, 440424327UL,
+ 654366747UL, 821988674UL, 622228769UL, 884616336UL, 537773262UL, 350530896UL,
+ 319852839UL, 989482623UL, 468084379UL, 720832555UL, 168948290UL, 736909878UL,
+ 675666628UL, 546508280UL, 863340952UL, 404228624UL, 834196778UL, 508959829UL,
+ 23599720UL, 967735248UL, 96757260UL, 603332790UL, 862877297UL, 760110148UL,
+ 468436420UL, 401799145UL, 299404568UL, 230258509UL
+};
+#endif
+/* _mpd_ln10 is used directly for precisions smaller than MINALLOC_MAX*RDIGITS.
+ Otherwise, it serves as the initial approximation for calculating ln(10). */
+static const mpd_t _mpd_ln10 = {
+ MPD_STATIC|MPD_CONST_DATA, -(MPD_MINALLOC_MAX*MPD_RDIGITS-1),
+ MPD_MINALLOC_MAX*MPD_RDIGITS, MPD_MINALLOC_MAX, MPD_MINALLOC_MAX,
+ (mpd_uint_t *)mpd_ln10_data
+};
+
+/*
+ * Set 'result' to log(10).
+ * Ulp error: abs(result - log(10)) < ulp(log(10))
+ * Relative error: abs(result - log(10)) < 5 * 10**-prec * log(10)
+ *
+ * NOTE: The relative error is not derived from the ulp error, but
+ * calculated separately using the fact that 23/10 < log(10) < 24/10.
+ */
+void
+mpd_qln10(mpd_t *result, mpd_ssize_t prec, uint32_t *status)
+{
+ mpd_context_t varcontext, maxcontext;
+ MPD_NEW_STATIC(tmp, 0,0,0,0);
+ MPD_NEW_CONST(static10, 0,0,2,1,1,10);
+ mpd_ssize_t klist[MPD_MAX_PREC_LOG2];
+ mpd_uint_t rnd;
+ mpd_ssize_t shift;
+ int i;
+
+ assert(prec >= 1);
+
+ shift = MPD_MINALLOC_MAX*MPD_RDIGITS-prec;
+ shift = shift < 0 ? 0 : shift;
+
+ rnd = mpd_qshiftr(result, &_mpd_ln10, shift, status);
+ if (rnd == MPD_UINT_MAX) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ result->exp = -(result->digits-1);
+
+ mpd_maxcontext(&maxcontext);
+ if (prec < MPD_MINALLOC_MAX*MPD_RDIGITS) {
+ maxcontext.prec = prec;
+ _mpd_apply_round_excess(result, rnd, &maxcontext, status);
+ *status |= (MPD_Inexact|MPD_Rounded);
+ return;
+ }
+
+ mpd_maxcontext(&varcontext);
+ varcontext.round = MPD_ROUND_TRUNC;
+
+ i = ln_schedule_prec(klist, prec+2, -result->exp);
+ for (; i >= 0; i--) {
+ varcontext.prec = 2*klist[i]+3;
+ result->flags ^= MPD_NEG;
+ _mpd_qexp(&tmp, result, &varcontext, status);
+ result->flags ^= MPD_NEG;
+ mpd_qmul(&tmp, &static10, &tmp, &varcontext, status);
+ mpd_qsub(&tmp, &tmp, &one, &maxcontext, status);
+ mpd_qadd(result, result, &tmp, &maxcontext, status);
+ if (mpd_isspecial(result)) {
+ break;
+ }
+ }
+
+ mpd_del(&tmp);
+ maxcontext.prec = prec;
+ mpd_qfinalize(result, &maxcontext, status);
+}
+
+/*
+ * Initial approximations for the ln() iteration. The values have the
+ * following properties (established with both decimal.py and mpfr):
+ *
+ * Index 0 - 400, logarithms of x in [1.00, 5.00]:
+ * abs(lnapprox[i] * 10**-3 - log((i+100)/100)) < 10**-2
+ * abs(lnapprox[i] * 10**-3 - log((i+1+100)/100)) < 10**-2
+ *
+ * Index 401 - 899, logarithms of x in (0.500, 0.999]:
+ * abs(-lnapprox[i] * 10**-3 - log((i+100)/1000)) < 10**-2
+ * abs(-lnapprox[i] * 10**-3 - log((i+1+100)/1000)) < 10**-2
+ */
+static const uint16_t lnapprox[900] = {
+ /* index 0 - 400: log((i+100)/100) * 1000 */
+ 0, 10, 20, 30, 39, 49, 58, 68, 77, 86, 95, 104, 113, 122, 131, 140, 148, 157,
+ 166, 174, 182, 191, 199, 207, 215, 223, 231, 239, 247, 255, 262, 270, 278,
+ 285, 293, 300, 308, 315, 322, 329, 336, 344, 351, 358, 365, 372, 378, 385,
+ 392, 399, 406, 412, 419, 425, 432, 438, 445, 451, 457, 464, 470, 476, 482,
+ 489, 495, 501, 507, 513, 519, 525, 531, 536, 542, 548, 554, 560, 565, 571,
+ 577, 582, 588, 593, 599, 604, 610, 615, 621, 626, 631, 637, 642, 647, 652,
+ 658, 663, 668, 673, 678, 683, 688, 693, 698, 703, 708, 713, 718, 723, 728,
+ 732, 737, 742, 747, 751, 756, 761, 766, 770, 775, 779, 784, 788, 793, 798,
+ 802, 806, 811, 815, 820, 824, 829, 833, 837, 842, 846, 850, 854, 859, 863,
+ 867, 871, 876, 880, 884, 888, 892, 896, 900, 904, 908, 912, 916, 920, 924,
+ 928, 932, 936, 940, 944, 948, 952, 956, 959, 963, 967, 971, 975, 978, 982,
+ 986, 990, 993, 997, 1001, 1004, 1008, 1012, 1015, 1019, 1022, 1026, 1030,
+ 1033, 1037, 1040, 1044, 1047, 1051, 1054, 1058, 1061, 1065, 1068, 1072, 1075,
+ 1078, 1082, 1085, 1089, 1092, 1095, 1099, 1102, 1105, 1109, 1112, 1115, 1118,
+ 1122, 1125, 1128, 1131, 1135, 1138, 1141, 1144, 1147, 1151, 1154, 1157, 1160,
+ 1163, 1166, 1169, 1172, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200,
+ 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1235, 1238,
+ 1241, 1244, 1247, 1250, 1253, 1256, 1258, 1261, 1264, 1267, 1270, 1273, 1275,
+ 1278, 1281, 1284, 1286, 1289, 1292, 1295, 1297, 1300, 1303, 1306, 1308, 1311,
+ 1314, 1316, 1319, 1322, 1324, 1327, 1330, 1332, 1335, 1338, 1340, 1343, 1345,
+ 1348, 1351, 1353, 1356, 1358, 1361, 1364, 1366, 1369, 1371, 1374, 1376, 1379,
+ 1381, 1384, 1386, 1389, 1391, 1394, 1396, 1399, 1401, 1404, 1406, 1409, 1411,
+ 1413, 1416, 1418, 1421, 1423, 1426, 1428, 1430, 1433, 1435, 1437, 1440, 1442,
+ 1445, 1447, 1449, 1452, 1454, 1456, 1459, 1461, 1463, 1466, 1468, 1470, 1472,
+ 1475, 1477, 1479, 1482, 1484, 1486, 1488, 1491, 1493, 1495, 1497, 1500, 1502,
+ 1504, 1506, 1509, 1511, 1513, 1515, 1517, 1520, 1522, 1524, 1526, 1528, 1530,
+ 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1548, 1550, 1552, 1554, 1556, 1558,
+ 1560, 1562, 1564, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585,
+ 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609,
+ /* index 401 - 899: -log((i+100)/1000) * 1000 */
+ 691, 689, 687, 685, 683, 681, 679, 677, 675, 673, 671, 669, 668, 666, 664,
+ 662, 660, 658, 656, 654, 652, 650, 648, 646, 644, 642, 641, 639, 637, 635,
+ 633, 631, 629, 627, 626, 624, 622, 620, 618, 616, 614, 612, 611, 609, 607,
+ 605, 603, 602, 600, 598, 596, 594, 592, 591, 589, 587, 585, 583, 582, 580,
+ 578, 576, 574, 573, 571, 569, 567, 566, 564, 562, 560, 559, 557, 555, 553,
+ 552, 550, 548, 546, 545, 543, 541, 540, 538, 536, 534, 533, 531, 529, 528,
+ 526, 524, 523, 521, 519, 518, 516, 514, 512, 511, 509, 508, 506, 504, 502,
+ 501, 499, 498, 496, 494, 493, 491, 489, 488, 486, 484, 483, 481, 480, 478,
+ 476, 475, 473, 472, 470, 468, 467, 465, 464, 462, 460, 459, 457, 456, 454,
+ 453, 451, 449, 448, 446, 445, 443, 442, 440, 438, 437, 435, 434, 432, 431,
+ 429, 428, 426, 425, 423, 422, 420, 419, 417, 416, 414, 412, 411, 410, 408,
+ 406, 405, 404, 402, 400, 399, 398, 396, 394, 393, 392, 390, 389, 387, 386,
+ 384, 383, 381, 380, 378, 377, 375, 374, 372, 371, 370, 368, 367, 365, 364,
+ 362, 361, 360, 358, 357, 355, 354, 352, 351, 350, 348, 347, 345, 344, 342,
+ 341, 340, 338, 337, 336, 334, 333, 331, 330, 328, 327, 326, 324, 323, 322,
+ 320, 319, 318, 316, 315, 313, 312, 311, 309, 308, 306, 305, 304, 302, 301,
+ 300, 298, 297, 296, 294, 293, 292, 290, 289, 288, 286, 285, 284, 282, 281,
+ 280, 278, 277, 276, 274, 273, 272, 270, 269, 268, 267, 265, 264, 263, 261,
+ 260, 259, 258, 256, 255, 254, 252, 251, 250, 248, 247, 246, 245, 243, 242,
+ 241, 240, 238, 237, 236, 234, 233, 232, 231, 229, 228, 227, 226, 224, 223,
+ 222, 221, 219, 218, 217, 216, 214, 213, 212, 211, 210, 208, 207, 206, 205,
+ 203, 202, 201, 200, 198, 197, 196, 195, 194, 192, 191, 190, 189, 188, 186,
+ 185, 184, 183, 182, 180, 179, 178, 177, 176, 174, 173, 172, 171, 170, 168,
+ 167, 166, 165, 164, 162, 161, 160, 159, 158, 157, 156, 154, 153, 152, 151,
+ 150, 148, 147, 146, 145, 144, 143, 142, 140, 139, 138, 137, 136, 135, 134,
+ 132, 131, 130, 129, 128, 127, 126, 124, 123, 122, 121, 120, 119, 118, 116,
+ 115, 114, 113, 112, 111, 110, 109, 108, 106, 105, 104, 103, 102, 101, 100,
+ 99, 98, 97, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 84, 83, 82, 81, 80, 79,
+ 78, 77, 76, 75, 74, 73, 72, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59,
+ 58, 57, 56, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39,
+ 38, 37, 36, 35, 34, 33, 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
+};
+
+/*
+ * Internal ln() function that does not check for specials, zero or one.
+ * Relative error: abs(result - log(a)) < 0.1 * 10**-prec * abs(log(a))
+ */
+static void
+_mpd_qln(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t varcontext, maxcontext;
+ mpd_t *z = (mpd_t *) result;
+ MPD_NEW_STATIC(v,0,0,0,0);
+ MPD_NEW_STATIC(vtmp,0,0,0,0);
+ MPD_NEW_STATIC(tmp,0,0,0,0);
+ mpd_ssize_t klist[MPD_MAX_PREC_LOG2];
+ mpd_ssize_t maxprec, shift, t;
+ mpd_ssize_t a_digits, a_exp;
+ mpd_uint_t dummy, x;
+ int i;
+
+ assert(!mpd_isspecial(a) && !mpd_iszerocoeff(a));
+
+ /*
+ * We are calculating ln(a) = ln(v * 10^t) = ln(v) + t*ln(10),
+ * where 0.5 < v <= 5.
+ */
+ if (!mpd_qcopy(&v, a, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+
+ /* Initial approximation: we have at least one non-zero digit */
+ _mpd_get_msdigits(&dummy, &x, &v, 3);
+ if (x < 10) x *= 10;
+ if (x < 100) x *= 10;
+ x -= 100;
+
+ /* a may equal z */
+ a_digits = a->digits;
+ a_exp = a->exp;
+
+ mpd_minalloc(z);
+ mpd_clear_flags(z);
+ z->data[0] = lnapprox[x];
+ z->len = 1;
+ z->exp = -3;
+ mpd_setdigits(z);
+
+ if (x <= 400) {
+ /* Reduce the input operand to 1.00 <= v <= 5.00. Let y = x + 100,
+ * so 100 <= y <= 500. Since y contains the most significant digits
+ * of v, y/100 <= v < (y+1)/100 and abs(z - log(v)) < 10**-2. */
+ v.exp = -(a_digits - 1);
+ t = a_exp + a_digits - 1;
+ }
+ else {
+ /* Reduce the input operand to 0.500 < v <= 0.999. Let y = x + 100,
+ * so 500 < y <= 999. Since y contains the most significant digits
+ * of v, y/1000 <= v < (y+1)/1000 and abs(z - log(v)) < 10**-2. */
+ v.exp = -a_digits;
+ t = a_exp + a_digits;
+ mpd_set_negative(z);
+ }
+
+ mpd_maxcontext(&maxcontext);
+ mpd_maxcontext(&varcontext);
+ varcontext.round = MPD_ROUND_TRUNC;
+
+ maxprec = ctx->prec + 2;
+ if (t == 0 && (x <= 15 || x >= 800)) {
+ /* 0.900 <= v <= 1.15: Estimate the magnitude of the logarithm.
+ * If ln(v) will underflow, skip the loop. Otherwise, adjust the
+ * precision upwards in order to obtain a sufficient number of
+ * significant digits.
+ *
+ * Case v > 1:
+ * abs((v-1)/10) < abs((v-1)/v) < abs(ln(v)) < abs(v-1)
+ * Case v < 1:
+ * abs(v-1) < abs(ln(v)) < abs((v-1)/v) < abs((v-1)*10)
+ */
+ int cmp = _mpd_cmp(&v, &one);
+
+ /* Upper bound (assume v > 1): abs(v-1), unrounded */
+ _mpd_qsub(&tmp, &v, &one, &maxcontext, &maxcontext.status);
+ if (maxcontext.status & MPD_Errors) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto finish;
+ }
+
+ if (cmp < 0) {
+ /* v < 1: abs((v-1)*10) */
+ tmp.exp += 1;
+ }
+ if (mpd_adjexp(&tmp) < mpd_etiny(ctx)) {
+ /* The upper bound is less than etiny: Underflow to zero */
+ _settriple(result, (cmp<0), 1, mpd_etiny(ctx)-1);
+ goto finish;
+ }
+ /* Lower bound: abs((v-1)/10) or abs(v-1) */
+ tmp.exp -= 1;
+ if (mpd_adjexp(&tmp) < 0) {
+ /* Absolute error of the loop: abs(z - log(v)) < 10**-p. If
+ * p = ctx->prec+2-adjexp(lower), then the relative error of
+ * the result is (using 10**adjexp(x) <= abs(x)):
+ *
+ * abs(z - log(v)) / abs(log(v)) < 10**-p / abs(log(v))
+ * <= 10**(-ctx->prec-2)
+ */
+ maxprec = maxprec - mpd_adjexp(&tmp);
+ }
+ }
+
+ i = ln_schedule_prec(klist, maxprec, 2);
+ for (; i >= 0; i--) {
+ varcontext.prec = 2*klist[i]+3;
+ z->flags ^= MPD_NEG;
+ _mpd_qexp(&tmp, z, &varcontext, status);
+ z->flags ^= MPD_NEG;
+
+ if (v.digits > varcontext.prec) {
+ shift = v.digits - varcontext.prec;
+ mpd_qshiftr(&vtmp, &v, shift, status);
+ vtmp.exp += shift;
+ mpd_qmul(&tmp, &vtmp, &tmp, &varcontext, status);
+ }
+ else {
+ mpd_qmul(&tmp, &v, &tmp, &varcontext, status);
+ }
+
+ mpd_qsub(&tmp, &tmp, &one, &maxcontext, status);
+ mpd_qadd(z, z, &tmp, &maxcontext, status);
+ if (mpd_isspecial(z)) {
+ break;
+ }
+ }
+
+ /*
+ * Case t == 0:
+ * t * log(10) == 0, the result does not change and the analysis
+ * above applies. If v < 0.900 or v > 1.15, the relative error is
+ * less than 10**(-ctx.prec-1).
+ * Case t != 0:
+ * z := approx(log(v))
+ * y := approx(log(10))
+ * p := maxprec = ctx->prec + 2
+ * Absolute errors:
+ * 1) abs(z - log(v)) < 10**-p
+ * 2) abs(y - log(10)) < 10**-p
+ * The multiplication is exact, so:
+ * 3) abs(t*y - t*log(10)) < t*10**-p
+ * The sum is exact, so:
+ * 4) abs((z + t*y) - (log(v) + t*log(10))) < (abs(t) + 1) * 10**-p
+ * Bounds for log(v) and log(10):
+ * 5) -7/10 < log(v) < 17/10
+ * 6) 23/10 < log(10) < 24/10
+ * Using 4), 5), 6) and t != 0, the relative error is:
+ *
+ * 7) relerr < ((abs(t) + 1)*10**-p) / abs(log(v) + t*log(10))
+ * < 0.5 * 10**(-p + 1) = 0.5 * 10**(-ctx->prec-1)
+ */
+ mpd_qln10(&v, maxprec+1, status);
+ mpd_qmul_ssize(&tmp, &v, t, &maxcontext, status);
+ mpd_qadd(result, &tmp, z, &maxcontext, status);
+
+
+finish:
+ *status |= (MPD_Inexact|MPD_Rounded);
+ mpd_del(&v);
+ mpd_del(&vtmp);
+ mpd_del(&tmp);
+}
+
+/* ln(a) */
+void
+mpd_qln(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ mpd_ssize_t adjexp, t;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ return;
+ }
+ if (mpd_iszerocoeff(a)) {
+ mpd_setspecial(result, MPD_NEG, MPD_INF);
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (_mpd_cmp(a, &one) == 0) {
+ _settriple(result, MPD_POS, 0, 0);
+ return;
+ }
+ /*
+ * Check if the result will overflow (0 < x, x != 1):
+ * 1) log10(x) < 0 iff adjexp(x) < 0
+ * 2) 0 < x /\ x <= y ==> adjexp(x) <= adjexp(y)
+ * 3) 0 < x /\ x != 1 ==> 2 * abs(log10(x)) < abs(log(x))
+ * 4) adjexp(x) <= log10(x) < adjexp(x) + 1
+ *
+ * Case adjexp(x) >= 0:
+ * 5) 2 * adjexp(x) < abs(log(x))
+ * Case adjexp(x) > 0:
+ * 6) adjexp(2 * adjexp(x)) <= adjexp(abs(log(x)))
+ * Case adjexp(x) == 0:
+ * mpd_exp_digits(t)-1 == 0 <= emax (the shortcut is not triggered)
+ *
+ * Case adjexp(x) < 0:
+ * 7) 2 * (-adjexp(x) - 1) < abs(log(x))
+ * Case adjexp(x) < -1:
+ * 8) adjexp(2 * (-adjexp(x) - 1)) <= adjexp(abs(log(x)))
+ * Case adjexp(x) == -1:
+ * mpd_exp_digits(t)-1 == 0 <= emax (the shortcut is not triggered)
+ */
+ adjexp = mpd_adjexp(a);
+ t = (adjexp < 0) ? -adjexp-1 : adjexp;
+ t *= 2;
+ if (mpd_exp_digits(t)-1 > ctx->emax) {
+ *status |= MPD_Overflow|MPD_Inexact|MPD_Rounded;
+ mpd_setspecial(result, (adjexp<0), MPD_INF);
+ return;
+ }
+
+ workctx = *ctx;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+
+ if (ctx->allcr) {
+ MPD_NEW_STATIC(t1, 0,0,0,0);
+ MPD_NEW_STATIC(t2, 0,0,0,0);
+ MPD_NEW_STATIC(ulp, 0,0,0,0);
+ MPD_NEW_STATIC(aa, 0,0,0,0);
+ mpd_ssize_t prec;
+
+ if (result == a) {
+ if (!mpd_qcopy(&aa, a, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ a = &aa;
+ }
+
+ workctx.clamp = 0;
+ prec = ctx->prec + 3;
+ while (1) {
+ workctx.prec = prec;
+ _mpd_qln(result, a, &workctx, status);
+ _ssettriple(&ulp, MPD_POS, 1,
+ result->exp + result->digits-workctx.prec);
+
+ workctx.prec = ctx->prec;
+ mpd_qadd(&t1, result, &ulp, &workctx, &workctx.status);
+ mpd_qsub(&t2, result, &ulp, &workctx, &workctx.status);
+ if (mpd_isspecial(result) || mpd_iszerocoeff(result) ||
+ mpd_qcmp(&t1, &t2, status) == 0) {
+ workctx.clamp = ctx->clamp;
+ mpd_check_underflow(result, &workctx, status);
+ mpd_qfinalize(result, &workctx, status);
+ break;
+ }
+ prec += MPD_RDIGITS;
+ }
+ mpd_del(&t1);
+ mpd_del(&t2);
+ mpd_del(&ulp);
+ mpd_del(&aa);
+ }
+ else {
+ _mpd_qln(result, a, &workctx, status);
+ mpd_check_underflow(result, &workctx, status);
+ mpd_qfinalize(result, &workctx, status);
+ }
+}
+
+/*
+ * Internal log10() function that does not check for specials, zero or one.
+ * Case SKIP_FINALIZE:
+ * Relative error: abs(result - log10(a)) < 0.1 * 10**-prec * abs(log10(a))
+ * Case DO_FINALIZE:
+ * Ulp error: abs(result - log10(a)) < ulp(log10(a))
+ */
+enum {SKIP_FINALIZE, DO_FINALIZE};
+static void
+_mpd_qlog10(int action, mpd_t *result, const mpd_t *a,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_STATIC(ln10,0,0,0,0);
+
+ mpd_maxcontext(&workctx);
+ workctx.prec = ctx->prec + 3;
+ /* relative error: 0.1 * 10**(-p-3). The specific underflow shortcut
+ * in _mpd_qln() does not change the final result. */
+ _mpd_qln(result, a, &workctx, status);
+ /* relative error: 5 * 10**(-p-3) */
+ mpd_qln10(&ln10, workctx.prec, status);
+
+ if (action == DO_FINALIZE) {
+ workctx = *ctx;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+ }
+ /* SKIP_FINALIZE: relative error: 5 * 10**(-p-3) */
+ _mpd_qdiv(NO_IDEAL_EXP, result, result, &ln10, &workctx, status);
+
+ mpd_del(&ln10);
+}
+
+/* log10(a) */
+void
+mpd_qlog10(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ mpd_ssize_t adjexp, t;
+
+ workctx = *ctx;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ return;
+ }
+ if (mpd_iszerocoeff(a)) {
+ mpd_setspecial(result, MPD_NEG, MPD_INF);
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_coeff_ispow10(a)) {
+ uint8_t sign = 0;
+ adjexp = mpd_adjexp(a);
+ if (adjexp < 0) {
+ sign = 1;
+ adjexp = -adjexp;
+ }
+ _settriple(result, sign, adjexp, 0);
+ mpd_qfinalize(result, &workctx, status);
+ return;
+ }
+ /*
+ * Check if the result will overflow (0 < x, x != 1):
+ * 1) log10(x) < 0 iff adjexp(x) < 0
+ * 2) 0 < x /\ x <= y ==> adjexp(x) <= adjexp(y)
+ * 3) adjexp(x) <= log10(x) < adjexp(x) + 1
+ *
+ * Case adjexp(x) >= 0:
+ * 4) adjexp(x) <= abs(log10(x))
+ * Case adjexp(x) > 0:
+ * 5) adjexp(adjexp(x)) <= adjexp(abs(log10(x)))
+ * Case adjexp(x) == 0:
+ * mpd_exp_digits(t)-1 == 0 <= emax (the shortcut is not triggered)
+ *
+ * Case adjexp(x) < 0:
+ * 6) -adjexp(x) - 1 < abs(log10(x))
+ * Case adjexp(x) < -1:
+ * 7) adjexp(-adjexp(x) - 1) <= adjexp(abs(log(x)))
+ * Case adjexp(x) == -1:
+ * mpd_exp_digits(t)-1 == 0 <= emax (the shortcut is not triggered)
+ */
+ adjexp = mpd_adjexp(a);
+ t = (adjexp < 0) ? -adjexp-1 : adjexp;
+ if (mpd_exp_digits(t)-1 > ctx->emax) {
+ *status |= MPD_Overflow|MPD_Inexact|MPD_Rounded;
+ mpd_setspecial(result, (adjexp<0), MPD_INF);
+ return;
+ }
+
+ if (ctx->allcr) {
+ MPD_NEW_STATIC(t1, 0,0,0,0);
+ MPD_NEW_STATIC(t2, 0,0,0,0);
+ MPD_NEW_STATIC(ulp, 0,0,0,0);
+ MPD_NEW_STATIC(aa, 0,0,0,0);
+ mpd_ssize_t prec;
+
+ if (result == a) {
+ if (!mpd_qcopy(&aa, a, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ a = &aa;
+ }
+
+ workctx.clamp = 0;
+ prec = ctx->prec + 3;
+ while (1) {
+ workctx.prec = prec;
+ _mpd_qlog10(SKIP_FINALIZE, result, a, &workctx, status);
+ _ssettriple(&ulp, MPD_POS, 1,
+ result->exp + result->digits-workctx.prec);
+
+ workctx.prec = ctx->prec;
+ mpd_qadd(&t1, result, &ulp, &workctx, &workctx.status);
+ mpd_qsub(&t2, result, &ulp, &workctx, &workctx.status);
+ if (mpd_isspecial(result) || mpd_iszerocoeff(result) ||
+ mpd_qcmp(&t1, &t2, status) == 0) {
+ workctx.clamp = ctx->clamp;
+ mpd_check_underflow(result, &workctx, status);
+ mpd_qfinalize(result, &workctx, status);
+ break;
+ }
+ prec += MPD_RDIGITS;
+ }
+ mpd_del(&t1);
+ mpd_del(&t2);
+ mpd_del(&ulp);
+ mpd_del(&aa);
+ }
+ else {
+ _mpd_qlog10(DO_FINALIZE, result, a, &workctx, status);
+ mpd_check_underflow(result, &workctx, status);
+ }
+}
+
+/*
+ * Maximum of the two operands. Attention: If one operand is a quiet NaN and the
+ * other is numeric, the numeric operand is returned. This may not be what one
+ * expects.
+ */
+void
+mpd_qmax(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isqnan(a) && !mpd_isnan(b)) {
+ mpd_qcopy(result, b, status);
+ }
+ else if (mpd_isqnan(b) && !mpd_isnan(a)) {
+ mpd_qcopy(result, a, status);
+ }
+ else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ else {
+ c = _mpd_cmp(a, b);
+ if (c == 0) {
+ c = _mpd_cmp_numequal(a, b);
+ }
+
+ if (c < 0) {
+ mpd_qcopy(result, b, status);
+ }
+ else {
+ mpd_qcopy(result, a, status);
+ }
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/*
+ * Maximum magnitude: Same as mpd_max(), but compares the operands with their
+ * sign ignored.
+ */
+void
+mpd_qmax_mag(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isqnan(a) && !mpd_isnan(b)) {
+ mpd_qcopy(result, b, status);
+ }
+ else if (mpd_isqnan(b) && !mpd_isnan(a)) {
+ mpd_qcopy(result, a, status);
+ }
+ else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ else {
+ c = _mpd_cmp_abs(a, b);
+ if (c == 0) {
+ c = _mpd_cmp_numequal(a, b);
+ }
+
+ if (c < 0) {
+ mpd_qcopy(result, b, status);
+ }
+ else {
+ mpd_qcopy(result, a, status);
+ }
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/*
+ * Minimum of the two operands. Attention: If one operand is a quiet NaN and the
+ * other is numeric, the numeric operand is returned. This may not be what one
+ * expects.
+ */
+void
+mpd_qmin(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isqnan(a) && !mpd_isnan(b)) {
+ mpd_qcopy(result, b, status);
+ }
+ else if (mpd_isqnan(b) && !mpd_isnan(a)) {
+ mpd_qcopy(result, a, status);
+ }
+ else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ else {
+ c = _mpd_cmp(a, b);
+ if (c == 0) {
+ c = _mpd_cmp_numequal(a, b);
+ }
+
+ if (c < 0) {
+ mpd_qcopy(result, a, status);
+ }
+ else {
+ mpd_qcopy(result, b, status);
+ }
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/*
+ * Minimum magnitude: Same as mpd_min(), but compares the operands with their
+ * sign ignored.
+ */
+void
+mpd_qmin_mag(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_isqnan(a) && !mpd_isnan(b)) {
+ mpd_qcopy(result, b, status);
+ }
+ else if (mpd_isqnan(b) && !mpd_isnan(a)) {
+ mpd_qcopy(result, a, status);
+ }
+ else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ else {
+ c = _mpd_cmp_abs(a, b);
+ if (c == 0) {
+ c = _mpd_cmp_numequal(a, b);
+ }
+
+ if (c < 0) {
+ mpd_qcopy(result, a, status);
+ }
+ else {
+ mpd_qcopy(result, b, status);
+ }
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* Minimum space needed for the result array in _karatsuba_rec(). */
+static inline mpd_size_t
+_kmul_resultsize(mpd_size_t la, mpd_size_t lb)
+{
+ mpd_size_t n, m;
+
+ n = add_size_t(la, lb);
+ n = add_size_t(n, 1);
+
+ m = (la+1)/2 + 1;
+ m = mul_size_t(m, 3);
+
+ return (m > n) ? m : n;
+}
+
+/* Work space needed in _karatsuba_rec(). lim >= 4 */
+static inline mpd_size_t
+_kmul_worksize(mpd_size_t n, mpd_size_t lim)
+{
+ mpd_size_t m;
+
+ if (n <= lim) {
+ return 0;
+ }
+
+ m = (n+1)/2 + 1;
+
+ return add_size_t(mul_size_t(m, 2), _kmul_worksize(m, lim));
+}
+
+
+#define MPD_KARATSUBA_BASECASE 16 /* must be >= 4 */
+
+/*
+ * Add the product of a and b to c.
+ * c must be _kmul_resultsize(la, lb) in size.
+ * w is used as a work array and must be _kmul_worksize(a, lim) in size.
+ * Roman E. Maeder, Storage Allocation for the Karatsuba Integer Multiplication
+ * Algorithm. In "Design and implementation of symbolic computation systems",
+ * Springer, 1993, ISBN 354057235X, 9783540572350.
+ */
+static void
+_karatsuba_rec(mpd_uint_t *c, const mpd_uint_t *a, const mpd_uint_t *b,
+ mpd_uint_t *w, mpd_size_t la, mpd_size_t lb)
+{
+ mpd_size_t m, lt;
+
+ assert(la >= lb && lb > 0);
+ assert(la <= MPD_KARATSUBA_BASECASE || w != NULL);
+
+ if (la <= MPD_KARATSUBA_BASECASE) {
+ _mpd_basemul(c, a, b, la, lb);
+ return;
+ }
+
+ m = (la+1)/2; /* ceil(la/2) */
+
+ /* lb <= m < la */
+ if (lb <= m) {
+
+ /* lb can now be larger than la-m */
+ if (lb > la-m) {
+ lt = lb + lb + 1; /* space needed for result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ _karatsuba_rec(w, b, a+m, w+lt, lb, la-m); /* b*ah */
+ }
+ else {
+ lt = (la-m) + (la-m) + 1; /* space needed for result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ _karatsuba_rec(w, a+m, b, w+lt, la-m, lb); /* ah*b */
+ }
+ _mpd_baseaddto(c+m, w, (la-m)+lb); /* add ah*b*B**m */
+
+ lt = m + m + 1; /* space needed for the result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ _karatsuba_rec(w, a, b, w+lt, m, lb); /* al*b */
+ _mpd_baseaddto(c, w, m+lb); /* add al*b */
+
+ return;
+ }
+
+ /* la >= lb > m */
+ memcpy(w, a, m * sizeof *w);
+ w[m] = 0;
+ _mpd_baseaddto(w, a+m, la-m);
+
+ memcpy(w+(m+1), b, m * sizeof *w);
+ w[m+1+m] = 0;
+ _mpd_baseaddto(w+(m+1), b+m, lb-m);
+
+ _karatsuba_rec(c+m, w, w+(m+1), w+2*(m+1), m+1, m+1);
+
+ lt = (la-m) + (la-m) + 1;
+ mpd_uint_zero(w, lt);
+
+ _karatsuba_rec(w, a+m, b+m, w+lt, la-m, lb-m);
+
+ _mpd_baseaddto(c+2*m, w, (la-m) + (lb-m));
+ _mpd_basesubfrom(c+m, w, (la-m) + (lb-m));
+
+ lt = m + m + 1;
+ mpd_uint_zero(w, lt);
+
+ _karatsuba_rec(w, a, b, w+lt, m, m);
+ _mpd_baseaddto(c, w, m+m);
+ _mpd_basesubfrom(c+m, w, m+m);
+
+ return;
+}
+
+/*
+ * Multiply u and v, using Karatsuba multiplication. Returns a pointer
+ * to the result or NULL in case of failure (malloc error).
+ * Conditions: ulen >= vlen, ulen >= 4
+ */
+static mpd_uint_t *
+_mpd_kmul(const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t ulen, mpd_size_t vlen,
+ mpd_size_t *rsize)
+{
+ mpd_uint_t *result = NULL, *w = NULL;
+ mpd_size_t m;
+
+ assert(ulen >= 4);
+ assert(ulen >= vlen);
+
+ *rsize = _kmul_resultsize(ulen, vlen);
+ if ((result = mpd_calloc(*rsize, sizeof *result)) == NULL) {
+ return NULL;
+ }
+
+ m = _kmul_worksize(ulen, MPD_KARATSUBA_BASECASE);
+ if (m && ((w = mpd_calloc(m, sizeof *w)) == NULL)) {
+ mpd_free(result);
+ return NULL;
+ }
+
+ _karatsuba_rec(result, u, v, w, ulen, vlen);
+
+
+ if (w) mpd_free(w);
+ return result;
+}
+
+
+/*
+ * Determine the minimum length for the number theoretic transform. Valid
+ * transform lengths are 2**n or 3*2**n, where 2**n <= MPD_MAXTRANSFORM_2N.
+ * The function finds the shortest length m such that rsize <= m.
+ */
+static inline mpd_size_t
+_mpd_get_transform_len(mpd_size_t rsize)
+{
+ mpd_size_t log2rsize;
+ mpd_size_t x, step;
+
+ assert(rsize >= 4);
+ log2rsize = mpd_bsr(rsize);
+
+ if (rsize <= 1024) {
+ /* 2**n is faster in this range. */
+ x = ((mpd_size_t)1)<<log2rsize;
+ return (rsize == x) ? x : x<<1;
+ }
+ else if (rsize <= MPD_MAXTRANSFORM_2N) {
+ x = ((mpd_size_t)1)<<log2rsize;
+ if (rsize == x) return x;
+ step = x>>1;
+ x += step;
+ return (rsize <= x) ? x : x + step;
+ }
+ else if (rsize <= MPD_MAXTRANSFORM_2N+MPD_MAXTRANSFORM_2N/2) {
+ return MPD_MAXTRANSFORM_2N+MPD_MAXTRANSFORM_2N/2;
+ }
+ else if (rsize <= 3*MPD_MAXTRANSFORM_2N) {
+ return 3*MPD_MAXTRANSFORM_2N;
+ }
+ else {
+ return MPD_SIZE_MAX;
+ }
+}
+
+#ifdef PPRO
+#ifndef _MSC_VER
+static inline unsigned short
+_mpd_get_control87(void)
+{
+ unsigned short cw;
+
+ __asm__ __volatile__ ("fnstcw %0" : "=m" (cw));
+ return cw;
+}
+
+static inline void
+_mpd_set_control87(unsigned short cw)
+{
+ __asm__ __volatile__ ("fldcw %0" : : "m" (cw));
+}
+#endif
+
+static unsigned int
+mpd_set_fenv(void)
+{
+ unsigned int cw;
+#ifdef _MSC_VER
+ unsigned int flags =
+ _EM_INVALID|_EM_DENORMAL|_EM_ZERODIVIDE|_EM_OVERFLOW|
+ _EM_UNDERFLOW|_EM_INEXACT|_RC_CHOP|_PC_64;
+ unsigned int mask = _MCW_EM|_MCW_RC|_MCW_PC;
+ unsigned int dummy;
+
+ __control87_2(0, 0, &cw, NULL);
+ __control87_2(flags, mask, &dummy, NULL);
+#else
+ cw = _mpd_get_control87();
+ _mpd_set_control87(cw|0xF3F);
+#endif
+ return cw;
+}
+
+static void
+mpd_restore_fenv(unsigned int cw)
+{
+#ifdef _MSC_VER
+ unsigned int mask = _MCW_EM|_MCW_RC|_MCW_PC;
+ unsigned int dummy;
+
+ __control87_2(cw, mask, &dummy, NULL);
+#else
+ _mpd_set_control87((unsigned short)cw);
+#endif
+}
+#endif /* PPRO */
+
+/*
+ * Multiply u and v, using the fast number theoretic transform. Returns
+ * a pointer to the result or NULL in case of failure (malloc error).
+ */
+static mpd_uint_t *
+_mpd_fntmul(const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t ulen, mpd_size_t vlen,
+ mpd_size_t *rsize)
+{
+ mpd_uint_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *vtmp = NULL;
+ mpd_size_t n;
+
+#ifdef PPRO
+ unsigned int cw;
+ cw = mpd_set_fenv();
+#endif
+
+ *rsize = add_size_t(ulen, vlen);
+ if ((n = _mpd_get_transform_len(*rsize)) == MPD_SIZE_MAX) {
+ goto malloc_error;
+ }
+
+ if ((c1 = mpd_calloc(n, sizeof *c1)) == NULL) {
+ goto malloc_error;
+ }
+ if ((c2 = mpd_calloc(n, sizeof *c2)) == NULL) {
+ goto malloc_error;
+ }
+ if ((c3 = mpd_calloc(n, sizeof *c3)) == NULL) {
+ goto malloc_error;
+ }
+
+ memcpy(c1, u, ulen * (sizeof *c1));
+ memcpy(c2, u, ulen * (sizeof *c2));
+ memcpy(c3, u, ulen * (sizeof *c3));
+
+ if (u == v) {
+ if (!fnt_autoconvolute(c1, n, P1) ||
+ !fnt_autoconvolute(c2, n, P2) ||
+ !fnt_autoconvolute(c3, n, P3)) {
+ goto malloc_error;
+ }
+ }
+ else {
+ if ((vtmp = mpd_calloc(n, sizeof *vtmp)) == NULL) {
+ goto malloc_error;
+ }
+
+ memcpy(vtmp, v, vlen * (sizeof *vtmp));
+ if (!fnt_convolute(c1, vtmp, n, P1)) {
+ mpd_free(vtmp);
+ goto malloc_error;
+ }
+
+ memcpy(vtmp, v, vlen * (sizeof *vtmp));
+ mpd_uint_zero(vtmp+vlen, n-vlen);
+ if (!fnt_convolute(c2, vtmp, n, P2)) {
+ mpd_free(vtmp);
+ goto malloc_error;
+ }
+
+ memcpy(vtmp, v, vlen * (sizeof *vtmp));
+ mpd_uint_zero(vtmp+vlen, n-vlen);
+ if (!fnt_convolute(c3, vtmp, n, P3)) {
+ mpd_free(vtmp);
+ goto malloc_error;
+ }
+
+ mpd_free(vtmp);
+ }
+
+ crt3(c1, c2, c3, *rsize);
+
+out:
+#ifdef PPRO
+ mpd_restore_fenv(cw);
+#endif
+ if (c2) mpd_free(c2);
+ if (c3) mpd_free(c3);
+ return c1;
+
+malloc_error:
+ if (c1) mpd_free(c1);
+ c1 = NULL;
+ goto out;
+}
+
+
+/*
+ * Karatsuba multiplication with FNT/basemul as the base case.
+ */
+static int
+_karatsuba_rec_fnt(mpd_uint_t *c, const mpd_uint_t *a, const mpd_uint_t *b,
+ mpd_uint_t *w, mpd_size_t la, mpd_size_t lb)
+{
+ mpd_size_t m, lt;
+
+ assert(la >= lb && lb > 0);
+ assert(la <= 3*(MPD_MAXTRANSFORM_2N/2) || w != NULL);
+
+ if (la <= 3*(MPD_MAXTRANSFORM_2N/2)) {
+
+ if (lb <= 192) {
+ _mpd_basemul(c, b, a, lb, la);
+ }
+ else {
+ mpd_uint_t *result;
+ mpd_size_t dummy;
+
+ if ((result = _mpd_fntmul(a, b, la, lb, &dummy)) == NULL) {
+ return 0;
+ }
+ memcpy(c, result, (la+lb) * (sizeof *result));
+ mpd_free(result);
+ }
+ return 1;
+ }
+
+ m = (la+1)/2; /* ceil(la/2) */
+
+ /* lb <= m < la */
+ if (lb <= m) {
+
+ /* lb can now be larger than la-m */
+ if (lb > la-m) {
+ lt = lb + lb + 1; /* space needed for result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ if (!_karatsuba_rec_fnt(w, b, a+m, w+lt, lb, la-m)) { /* b*ah */
+ return 0; /* GCOV_UNLIKELY */
+ }
+ }
+ else {
+ lt = (la-m) + (la-m) + 1; /* space needed for result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ if (!_karatsuba_rec_fnt(w, a+m, b, w+lt, la-m, lb)) { /* ah*b */
+ return 0; /* GCOV_UNLIKELY */
+ }
+ }
+ _mpd_baseaddto(c+m, w, (la-m)+lb); /* add ah*b*B**m */
+
+ lt = m + m + 1; /* space needed for the result array */
+ mpd_uint_zero(w, lt); /* clear result array */
+ if (!_karatsuba_rec_fnt(w, a, b, w+lt, m, lb)) { /* al*b */
+ return 0; /* GCOV_UNLIKELY */
+ }
+ _mpd_baseaddto(c, w, m+lb); /* add al*b */
+
+ return 1;
+ }
+
+ /* la >= lb > m */
+ memcpy(w, a, m * sizeof *w);
+ w[m] = 0;
+ _mpd_baseaddto(w, a+m, la-m);
+
+ memcpy(w+(m+1), b, m * sizeof *w);
+ w[m+1+m] = 0;
+ _mpd_baseaddto(w+(m+1), b+m, lb-m);
+
+ if (!_karatsuba_rec_fnt(c+m, w, w+(m+1), w+2*(m+1), m+1, m+1)) {
+ return 0; /* GCOV_UNLIKELY */
+ }
+
+ lt = (la-m) + (la-m) + 1;
+ mpd_uint_zero(w, lt);
+
+ if (!_karatsuba_rec_fnt(w, a+m, b+m, w+lt, la-m, lb-m)) {
+ return 0; /* GCOV_UNLIKELY */
+ }
+
+ _mpd_baseaddto(c+2*m, w, (la-m) + (lb-m));
+ _mpd_basesubfrom(c+m, w, (la-m) + (lb-m));
+
+ lt = m + m + 1;
+ mpd_uint_zero(w, lt);
+
+ if (!_karatsuba_rec_fnt(w, a, b, w+lt, m, m)) {
+ return 0; /* GCOV_UNLIKELY */
+ }
+ _mpd_baseaddto(c, w, m+m);
+ _mpd_basesubfrom(c+m, w, m+m);
+
+ return 1;
+}
+
+/*
+ * Multiply u and v, using Karatsuba multiplication with the FNT as the
+ * base case. Returns a pointer to the result or NULL in case of failure
+ * (malloc error). Conditions: ulen >= vlen, ulen >= 4.
+ */
+static mpd_uint_t *
+_mpd_kmul_fnt(const mpd_uint_t *u, const mpd_uint_t *v,
+ mpd_size_t ulen, mpd_size_t vlen,
+ mpd_size_t *rsize)
+{
+ mpd_uint_t *result = NULL, *w = NULL;
+ mpd_size_t m;
+
+ assert(ulen >= 4);
+ assert(ulen >= vlen);
+
+ *rsize = _kmul_resultsize(ulen, vlen);
+ if ((result = mpd_calloc(*rsize, sizeof *result)) == NULL) {
+ return NULL;
+ }
+
+ m = _kmul_worksize(ulen, 3*(MPD_MAXTRANSFORM_2N/2));
+ if (m && ((w = mpd_calloc(m, sizeof *w)) == NULL)) {
+ mpd_free(result); /* GCOV_UNLIKELY */
+ return NULL; /* GCOV_UNLIKELY */
+ }
+
+ if (!_karatsuba_rec_fnt(result, u, v, w, ulen, vlen)) {
+ mpd_free(result);
+ result = NULL;
+ }
+
+
+ if (w) mpd_free(w);
+ return result;
+}
+
+
+/* Deal with the special cases of multiplying infinities. */
+static void
+_mpd_qmul_inf(mpd_t *result, const mpd_t *a, const mpd_t *b, uint32_t *status)
+{
+ if (mpd_isinfinite(a)) {
+ if (mpd_iszero(b)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+ else {
+ mpd_setspecial(result, mpd_sign(a)^mpd_sign(b), MPD_INF);
+ }
+ return;
+ }
+ assert(mpd_isinfinite(b));
+ if (mpd_iszero(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+ else {
+ mpd_setspecial(result, mpd_sign(a)^mpd_sign(b), MPD_INF);
+ }
+}
+
+/*
+ * Internal function: Multiply a and b. _mpd_qmul deals with specials but
+ * does NOT finalize the result. This is for use in mpd_fma().
+ */
+static inline void
+_mpd_qmul(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ const mpd_t *big = a, *small = b;
+ mpd_uint_t *rdata = NULL;
+ mpd_uint_t rbuf[MPD_MINALLOC_MAX];
+ mpd_size_t rsize, i;
+
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ _mpd_qmul_inf(result, a, b, status);
+ return;
+ }
+
+ if (small->len > big->len) {
+ _mpd_ptrswap(&big, &small);
+ }
+
+ rsize = big->len + small->len;
+
+ if (big->len == 1) {
+ _mpd_singlemul(result->data, big->data[0], small->data[0]);
+ goto finish;
+ }
+ if (rsize <= (mpd_size_t)MPD_MINALLOC_MAX) {
+ if (big->len == 2) {
+ _mpd_mul_2_le2(rbuf, big->data, small->data, small->len);
+ }
+ else {
+ mpd_uint_zero(rbuf, rsize);
+ if (small->len == 1) {
+ _mpd_shortmul(rbuf, big->data, big->len, small->data[0]);
+ }
+ else {
+ _mpd_basemul(rbuf, small->data, big->data, small->len, big->len);
+ }
+ }
+ if (!mpd_qresize(result, rsize, status)) {
+ return;
+ }
+ for(i = 0; i < rsize; i++) {
+ result->data[i] = rbuf[i];
+ }
+ goto finish;
+ }
+
+
+ if (small->len <= 256) {
+ rdata = mpd_calloc(rsize, sizeof *rdata);
+ if (rdata != NULL) {
+ if (small->len == 1) {
+ _mpd_shortmul(rdata, big->data, big->len, small->data[0]);
+ }
+ else {
+ _mpd_basemul(rdata, small->data, big->data, small->len, big->len);
+ }
+ }
+ }
+ else if (rsize <= 1024) {
+ rdata = _mpd_kmul(big->data, small->data, big->len, small->len, &rsize);
+ }
+ else if (rsize <= 3*MPD_MAXTRANSFORM_2N) {
+ rdata = _mpd_fntmul(big->data, small->data, big->len, small->len, &rsize);
+ }
+ else {
+ rdata = _mpd_kmul_fnt(big->data, small->data, big->len, small->len, &rsize);
+ }
+
+ if (rdata == NULL) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+
+ if (mpd_isdynamic_data(result)) {
+ mpd_free(result->data);
+ }
+ result->data = rdata;
+ result->alloc = rsize;
+ mpd_set_dynamic_data(result);
+
+
+finish:
+ mpd_set_flags(result, mpd_sign(a)^mpd_sign(b));
+ result->exp = big->exp + small->exp;
+ result->len = _mpd_real_size(result->data, rsize);
+ /* resize to smaller cannot fail */
+ mpd_qresize(result, result->len, status);
+ mpd_setdigits(result);
+}
+
+/* Multiply a and b. */
+void
+mpd_qmul(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ _mpd_qmul(result, a, b, ctx, status);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* Multiply a and b. Set NaN/Invalid_operation if the result is inexact. */
+static void
+_mpd_qmul_exact(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+
+ mpd_qmul(result, a, b, ctx, &workstatus);
+ *status |= workstatus;
+ if (workstatus & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+}
+
+/* Multiply decimal and mpd_ssize_t. */
+void
+mpd_qmul_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_ssize(&bb, b, &maxcontext, status);
+ mpd_qmul(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Multiply decimal and mpd_uint_t. */
+void
+mpd_qmul_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qsset_uint(&bb, b, &maxcontext, status);
+ mpd_qmul(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+void
+mpd_qmul_i32(mpd_t *result, const mpd_t *a, int32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qmul_ssize(result, a, b, ctx, status);
+}
+
+void
+mpd_qmul_u32(mpd_t *result, const mpd_t *a, uint32_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qmul_uint(result, a, b, ctx, status);
+}
+
+#ifdef CONFIG_64
+void
+mpd_qmul_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qmul_ssize(result, a, b, ctx, status);
+}
+
+void
+mpd_qmul_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_qmul_uint(result, a, b, ctx, status);
+}
+#elif !defined(LEGACY_COMPILER)
+/* Multiply decimal and int64_t. */
+void
+mpd_qmul_i64(mpd_t *result, const mpd_t *a, int64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_i64(&bb, b, &maxcontext, status);
+ mpd_qmul(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+
+/* Multiply decimal and uint64_t. */
+void
+mpd_qmul_u64(mpd_t *result, const mpd_t *a, uint64_t b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(bb,0,0,0,0);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_qset_u64(&bb, b, &maxcontext, status);
+ mpd_qmul(result, a, &bb, ctx, status);
+ mpd_del(&bb);
+}
+#endif
+
+/* Like the minus operator. */
+void
+mpd_qminus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ }
+
+ if (mpd_iszero(a) && ctx->round != MPD_ROUND_FLOOR) {
+ mpd_qcopy_abs(result, a, status);
+ }
+ else {
+ mpd_qcopy_negate(result, a, status);
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* Like the plus operator. */
+void
+mpd_qplus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ }
+
+ if (mpd_iszero(a) && ctx->round != MPD_ROUND_FLOOR) {
+ mpd_qcopy_abs(result, a, status);
+ }
+ else {
+ mpd_qcopy(result, a, status);
+ }
+
+ mpd_qfinalize(result, ctx, status);
+}
+
+/* The largest representable number that is smaller than the operand. */
+void
+mpd_qnext_minus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_CONST(tiny,MPD_POS,mpd_etiny(ctx)-1,1,1,1,1);
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+
+ assert(mpd_isinfinite(a));
+ if (mpd_isnegative(a)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+ else {
+ mpd_clear_flags(result);
+ mpd_qmaxcoeff(result, ctx, status);
+ if (mpd_isnan(result)) {
+ return;
+ }
+ result->exp = mpd_etop(ctx);
+ return;
+ }
+ }
+
+ mpd_workcontext(&workctx, ctx);
+ workctx.round = MPD_ROUND_FLOOR;
+
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+
+ mpd_qfinalize(result, &workctx, &workctx.status);
+ if (workctx.status&(MPD_Inexact|MPD_Errors)) {
+ *status |= (workctx.status&MPD_Errors);
+ return;
+ }
+
+ workctx.status = 0;
+ mpd_qsub(result, a, &tiny, &workctx, &workctx.status);
+ *status |= (workctx.status&MPD_Errors);
+}
+
+/* The smallest representable number that is larger than the operand. */
+void
+mpd_qnext_plus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_CONST(tiny,MPD_POS,mpd_etiny(ctx)-1,1,1,1,1);
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+
+ assert(mpd_isinfinite(a));
+ if (mpd_ispositive(a)) {
+ mpd_qcopy(result, a, status);
+ }
+ else {
+ mpd_clear_flags(result);
+ mpd_qmaxcoeff(result, ctx, status);
+ if (mpd_isnan(result)) {
+ return;
+ }
+ mpd_set_flags(result, MPD_NEG);
+ result->exp = mpd_etop(ctx);
+ }
+ return;
+ }
+
+ mpd_workcontext(&workctx, ctx);
+ workctx.round = MPD_ROUND_CEILING;
+
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+
+ mpd_qfinalize(result, &workctx, &workctx.status);
+ if (workctx.status & (MPD_Inexact|MPD_Errors)) {
+ *status |= (workctx.status&MPD_Errors);
+ return;
+ }
+
+ workctx.status = 0;
+ mpd_qadd(result, a, &tiny, &workctx, &workctx.status);
+ *status |= (workctx.status&MPD_Errors);
+}
+
+/*
+ * The number closest to the first operand that is in the direction towards
+ * the second operand.
+ */
+void
+mpd_qnext_toward(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ int c;
+
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+
+ c = _mpd_cmp(a, b);
+ if (c == 0) {
+ mpd_qcopy_sign(result, a, b, status);
+ return;
+ }
+
+ if (c < 0) {
+ mpd_qnext_plus(result, a, ctx, status);
+ }
+ else {
+ mpd_qnext_minus(result, a, ctx, status);
+ }
+
+ if (mpd_isinfinite(result)) {
+ *status |= (MPD_Overflow|MPD_Rounded|MPD_Inexact);
+ }
+ else if (mpd_adjexp(result) < ctx->emin) {
+ *status |= (MPD_Underflow|MPD_Subnormal|MPD_Rounded|MPD_Inexact);
+ if (mpd_iszero(result)) {
+ *status |= MPD_Clamped;
+ }
+ }
+}
+
+/*
+ * Internal function: Integer power with mpd_uint_t exponent. The function
+ * can fail with MPD_Malloc_error.
+ *
+ * The error is equal to the error incurred in k-1 multiplications. Assuming
+ * the upper bound for the relative error in each operation:
+ *
+ * abs(err) = 5 * 10**-prec
+ * result = x**k * (1 + err)**(k-1)
+ */
+static inline void
+_mpd_qpow_uint(mpd_t *result, const mpd_t *base, mpd_uint_t exp,
+ uint8_t resultsign, const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_uint_t n;
+
+ if (exp == 0) {
+ _settriple(result, resultsign, 1, 0); /* GCOV_NOT_REACHED */
+ return; /* GCOV_NOT_REACHED */
+ }
+
+ if (!mpd_qcopy(result, base, status)) {
+ return;
+ }
+
+ n = mpd_bits[mpd_bsr(exp)];
+ while (n >>= 1) {
+ mpd_qmul(result, result, result, ctx, &workstatus);
+ if (exp & n) {
+ mpd_qmul(result, result, base, ctx, &workstatus);
+ }
+ if (mpd_isspecial(result) ||
+ (mpd_iszerocoeff(result) && (workstatus & MPD_Clamped))) {
+ break;
+ }
+ }
+
+ *status |= workstatus;
+ mpd_set_sign(result, resultsign);
+}
+
+/*
+ * Internal function: Integer power with mpd_t exponent, tbase and texp
+ * are modified!! Function can fail with MPD_Malloc_error.
+ *
+ * The error is equal to the error incurred in k multiplications. Assuming
+ * the upper bound for the relative error in each operation:
+ *
+ * abs(err) = 5 * 10**-prec
+ * result = x**k * (1 + err)**k
+ */
+static inline void
+_mpd_qpow_mpd(mpd_t *result, mpd_t *tbase, mpd_t *texp, uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_context_t maxctx;
+ MPD_NEW_CONST(two,0,0,1,1,1,2);
+
+
+ mpd_maxcontext(&maxctx);
+
+ /* resize to smaller cannot fail */
+ mpd_qcopy(result, &one, status);
+
+ while (!mpd_iszero(texp)) {
+ if (mpd_isodd(texp)) {
+ mpd_qmul(result, result, tbase, ctx, &workstatus);
+ *status |= workstatus;
+ if (mpd_isspecial(result) ||
+ (mpd_iszerocoeff(result) && (workstatus & MPD_Clamped))) {
+ break;
+ }
+ }
+ mpd_qmul(tbase, tbase, tbase, ctx, &workstatus);
+ mpd_qdivint(texp, texp, &two, &maxctx, &workstatus);
+ if (mpd_isnan(tbase) || mpd_isnan(texp)) {
+ mpd_seterror(result, workstatus&MPD_Errors, status);
+ return;
+ }
+ }
+ mpd_set_sign(result, resultsign);
+}
+
+/*
+ * The power function for integer exponents. Relative error _before_ the
+ * final rounding to prec:
+ * abs(result - base**exp) < 0.1 * 10**-prec * abs(base**exp)
+ */
+static void
+_mpd_qpow_int(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_STATIC(tbase,0,0,0,0);
+ MPD_NEW_STATIC(texp,0,0,0,0);
+ mpd_ssize_t n;
+
+
+ mpd_workcontext(&workctx, ctx);
+ workctx.prec += (exp->digits + exp->exp + 2);
+ workctx.round = MPD_ROUND_HALF_EVEN;
+ workctx.clamp = 0;
+ if (mpd_isnegative(exp)) {
+ workctx.prec += 1;
+ mpd_qdiv(&tbase, &one, base, &workctx, status);
+ if (*status&MPD_Errors) {
+ mpd_setspecial(result, MPD_POS, MPD_NAN);
+ goto finish;
+ }
+ }
+ else {
+ if (!mpd_qcopy(&tbase, base, status)) {
+ mpd_setspecial(result, MPD_POS, MPD_NAN);
+ goto finish;
+ }
+ }
+
+ n = mpd_qabs_uint(exp, &workctx.status);
+ if (workctx.status&MPD_Invalid_operation) {
+ if (!mpd_qcopy(&texp, exp, status)) {
+ mpd_setspecial(result, MPD_POS, MPD_NAN); /* GCOV_UNLIKELY */
+ goto finish; /* GCOV_UNLIKELY */
+ }
+ _mpd_qpow_mpd(result, &tbase, &texp, resultsign, &workctx, status);
+ }
+ else {
+ _mpd_qpow_uint(result, &tbase, n, resultsign, &workctx, status);
+ }
+
+ if (mpd_isinfinite(result)) {
+ /* for ROUND_DOWN, ROUND_FLOOR, etc. */
+ _settriple(result, resultsign, 1, MPD_EXP_INF);
+ }
+
+finish:
+ mpd_del(&tbase);
+ mpd_del(&texp);
+ mpd_qfinalize(result, ctx, status);
+}
+
+/*
+ * If the exponent is infinite and base equals one, the result is one
+ * with a coefficient of length prec. Otherwise, result is undefined.
+ * Return the value of the comparison against one.
+ */
+static int
+_qcheck_pow_one_inf(mpd_t *result, const mpd_t *base, uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t shift;
+ int cmp;
+
+ if ((cmp = _mpd_cmp(base, &one)) == 0) {
+ shift = ctx->prec-1;
+ mpd_qshiftl(result, &one, shift, status);
+ result->exp = -shift;
+ mpd_set_flags(result, resultsign);
+ *status |= (MPD_Inexact|MPD_Rounded);
+ }
+
+ return cmp;
+}
+
+/*
+ * If abs(base) equals one, calculate the correct power of one result.
+ * Otherwise, result is undefined. Return the value of the comparison
+ * against 1.
+ *
+ * This is an internal function that does not check for specials.
+ */
+static int
+_qcheck_pow_one(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_ssize_t shift;
+ int cmp;
+
+ if ((cmp = _mpd_cmp_abs(base, &one)) == 0) {
+ if (_mpd_isint(exp)) {
+ if (mpd_isnegative(exp)) {
+ _settriple(result, resultsign, 1, 0);
+ return 0;
+ }
+ /* 1.000**3 = 1.000000000 */
+ mpd_qmul_ssize(result, exp, -base->exp, ctx, &workstatus);
+ if (workstatus&MPD_Errors) {
+ *status |= (workstatus&MPD_Errors);
+ return 0;
+ }
+ /* digits-1 after exponentiation */
+ shift = mpd_qget_ssize(result, &workstatus);
+ /* shift is MPD_SSIZE_MAX if result is too large */
+ if (shift > ctx->prec-1) {
+ shift = ctx->prec-1;
+ *status |= MPD_Rounded;
+ }
+ }
+ else if (mpd_ispositive(base)) {
+ shift = ctx->prec-1;
+ *status |= (MPD_Inexact|MPD_Rounded);
+ }
+ else {
+ return -2; /* GCOV_NOT_REACHED */
+ }
+ if (!mpd_qshiftl(result, &one, shift, status)) {
+ return 0;
+ }
+ result->exp = -shift;
+ mpd_set_flags(result, resultsign);
+ }
+
+ return cmp;
+}
+
+/*
+ * Detect certain over/underflow of x**y.
+ * ACL2 proof: pow-bounds.lisp.
+ *
+ * Symbols:
+ *
+ * e: EXP_INF or EXP_CLAMP
+ * x: base
+ * y: exponent
+ *
+ * omega(e) = log10(abs(e))
+ * zeta(x) = log10(abs(log10(x)))
+ * theta(y) = log10(abs(y))
+ *
+ * Upper and lower bounds:
+ *
+ * ub_omega(e) = ceil(log10(abs(e)))
+ * lb_theta(y) = floor(log10(abs(y)))
+ *
+ * | floor(log10(floor(abs(log10(x))))) if x < 1/10 or x >= 10
+ * lb_zeta(x) = | floor(log10(abs(x-1)/10)) if 1/10 <= x < 1
+ * | floor(log10(abs((x-1)/100))) if 1 < x < 10
+ *
+ * ub_omega(e) and lb_theta(y) are obviously upper and lower bounds
+ * for omega(e) and theta(y).
+ *
+ * lb_zeta is a lower bound for zeta(x):
+ *
+ * x < 1/10 or x >= 10:
+ *
+ * abs(log10(x)) >= 1, so the outer log10 is well defined. Since log10
+ * is strictly increasing, the end result is a lower bound.
+ *
+ * 1/10 <= x < 1:
+ *
+ * We use: log10(x) <= (x-1)/log(10)
+ * abs(log10(x)) >= abs(x-1)/log(10)
+ * abs(log10(x)) >= abs(x-1)/10
+ *
+ * 1 < x < 10:
+ *
+ * We use: (x-1)/(x*log(10)) < log10(x)
+ * abs((x-1)/100) < abs(log10(x))
+ *
+ * XXX: abs((x-1)/10) would work, need ACL2 proof.
+ *
+ *
+ * Let (0 < x < 1 and y < 0) or (x > 1 and y > 0). (H1)
+ * Let ub_omega(exp_inf) < lb_zeta(x) + lb_theta(y) (H2)
+ *
+ * Then:
+ * log10(abs(exp_inf)) < log10(abs(log10(x))) + log10(abs(y)). (1)
+ * exp_inf < log10(x) * y (2)
+ * 10**exp_inf < x**y (3)
+ *
+ * Let (0 < x < 1 and y > 0) or (x > 1 and y < 0). (H3)
+ * Let ub_omega(exp_clamp) < lb_zeta(x) + lb_theta(y) (H4)
+ *
+ * Then:
+ * log10(abs(exp_clamp)) < log10(abs(log10(x))) + log10(abs(y)). (4)
+ * log10(x) * y < exp_clamp (5)
+ * x**y < 10**exp_clamp (6)
+ *
+ */
+static mpd_ssize_t
+_lower_bound_zeta(const mpd_t *x, uint32_t *status)
+{
+ mpd_context_t maxctx;
+ MPD_NEW_STATIC(scratch,0,0,0,0);
+ mpd_ssize_t t, u;
+
+ t = mpd_adjexp(x);
+ if (t > 0) {
+ /* x >= 10 -> floor(log10(floor(abs(log10(x))))) */
+ return mpd_exp_digits(t) - 1;
+ }
+ else if (t < -1) {
+ /* x < 1/10 -> floor(log10(floor(abs(log10(x))))) */
+ return mpd_exp_digits(t+1) - 1;
+ }
+ else {
+ mpd_maxcontext(&maxctx);
+ mpd_qsub(&scratch, x, &one, &maxctx, status);
+ if (mpd_isspecial(&scratch)) {
+ mpd_del(&scratch);
+ return MPD_SSIZE_MAX;
+ }
+ u = mpd_adjexp(&scratch);
+ mpd_del(&scratch);
+
+ /* t == -1, 1/10 <= x < 1 -> floor(log10(abs(x-1)/10))
+ * t == 0, 1 < x < 10 -> floor(log10(abs(x-1)/100)) */
+ return (t == 0) ? u-2 : u-1;
+ }
+}
+
+/*
+ * Detect cases of certain overflow/underflow in the power function.
+ * Assumptions: x != 1, y != 0. The proof above is for positive x.
+ * If x is negative and y is an odd integer, x**y == -(abs(x)**y),
+ * so the analysis does not change.
+ */
+static int
+_qcheck_pow_bounds(mpd_t *result, const mpd_t *x, const mpd_t *y,
+ uint8_t resultsign,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ MPD_NEW_SHARED(abs_x, x);
+ mpd_ssize_t ub_omega, lb_zeta, lb_theta;
+ uint8_t sign;
+
+ mpd_set_positive(&abs_x);
+
+ lb_theta = mpd_adjexp(y);
+ lb_zeta = _lower_bound_zeta(&abs_x, status);
+ if (lb_zeta == MPD_SSIZE_MAX) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return 1;
+ }
+
+ sign = (mpd_adjexp(&abs_x) < 0) ^ mpd_sign(y);
+ if (sign == 0) {
+ /* (0 < |x| < 1 and y < 0) or (|x| > 1 and y > 0) */
+ ub_omega = mpd_exp_digits(ctx->emax);
+ if (ub_omega < lb_zeta + lb_theta) {
+ _settriple(result, resultsign, 1, MPD_EXP_INF);
+ mpd_qfinalize(result, ctx, status);
+ return 1;
+ }
+ }
+ else {
+ /* (0 < |x| < 1 and y > 0) or (|x| > 1 and y < 0). */
+ ub_omega = mpd_exp_digits(mpd_etiny(ctx));
+ if (ub_omega < lb_zeta + lb_theta) {
+ _settriple(result, resultsign, 1, mpd_etiny(ctx)-1);
+ mpd_qfinalize(result, ctx, status);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * TODO: Implement algorithm for computing exact powers from decimal.py.
+ * In order to prevent infinite loops, this has to be called before
+ * using Ziv's strategy for correct rounding.
+ */
+/*
+static int
+_mpd_qpow_exact(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ return 0;
+}
+*/
+
+/*
+ * The power function for real exponents.
+ * Relative error: abs(result - e**y) < e**y * 1/5 * 10**(-prec - 1)
+ */
+static void
+_mpd_qpow_real(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_STATIC(texp,0,0,0,0);
+
+ if (!mpd_qcopy(&texp, exp, status)) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+
+ mpd_maxcontext(&workctx);
+ workctx.prec = (base->digits > ctx->prec) ? base->digits : ctx->prec;
+ workctx.prec += (4 + MPD_EXPDIGITS);
+ workctx.round = MPD_ROUND_HALF_EVEN;
+ workctx.allcr = ctx->allcr;
+
+ /*
+ * extra := MPD_EXPDIGITS = MPD_EXP_MAX_T
+ * wp := prec + 4 + extra
+ * abs(err) < 5 * 10**-wp
+ * y := log(base) * exp
+ * Calculate:
+ * 1) e**(y * (1 + err)**2) * (1 + err)
+ * = e**y * e**(y * (2*err + err**2)) * (1 + err)
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * Relative error of the underlined term:
+ * 2) abs(e**(y * (2*err + err**2)) - 1)
+ * Case abs(y) >= 10**extra:
+ * 3) adjexp(y)+1 > log10(abs(y)) >= extra
+ * This triggers the Overflow/Underflow shortcut in _mpd_qexp(),
+ * so no further analysis is necessary.
+ * Case abs(y) < 10**extra:
+ * 4) abs(y * (2*err + err**2)) < 1/5 * 10**(-prec - 2)
+ * Use (see _mpd_qexp):
+ * 5) abs(x) <= 9/10 * 10**-p ==> abs(e**x - 1) < 10**-p
+ * With 2), 4) and 5):
+ * 6) abs(e**(y * (2*err + err**2)) - 1) < 10**(-prec - 2)
+ * The complete relative error of 1) is:
+ * 7) abs(result - e**y) < e**y * 1/5 * 10**(-prec - 1)
+ */
+ mpd_qln(result, base, &workctx, &workctx.status);
+ mpd_qmul(result, result, &texp, &workctx, &workctx.status);
+ mpd_qexp(result, result, &workctx, status);
+
+ mpd_del(&texp);
+ *status |= (workctx.status&MPD_Errors);
+ *status |= (MPD_Inexact|MPD_Rounded);
+}
+
+/* The power function: base**exp */
+void
+mpd_qpow(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint8_t resultsign = 0;
+ int intexp = 0;
+ int cmp;
+
+ if (mpd_isspecial(base) || mpd_isspecial(exp)) {
+ if (mpd_qcheck_nans(result, base, exp, ctx, status)) {
+ return;
+ }
+ }
+ if (mpd_isinteger(exp)) {
+ intexp = 1;
+ resultsign = mpd_isnegative(base) && mpd_isodd(exp);
+ }
+
+ if (mpd_iszero(base)) {
+ if (mpd_iszero(exp)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ }
+ else if (mpd_isnegative(exp)) {
+ mpd_setspecial(result, resultsign, MPD_INF);
+ }
+ else {
+ _settriple(result, resultsign, 0, 0);
+ }
+ return;
+ }
+ if (mpd_isnegative(base)) {
+ if (!intexp || mpd_isinfinite(exp)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ }
+ if (mpd_isinfinite(exp)) {
+ /* power of one */
+ cmp = _qcheck_pow_one_inf(result, base, resultsign, ctx, status);
+ if (cmp == 0) {
+ return;
+ }
+ else {
+ cmp *= mpd_arith_sign(exp);
+ if (cmp < 0) {
+ _settriple(result, resultsign, 0, 0);
+ }
+ else {
+ mpd_setspecial(result, resultsign, MPD_INF);
+ }
+ }
+ return;
+ }
+ if (mpd_isinfinite(base)) {
+ if (mpd_iszero(exp)) {
+ _settriple(result, resultsign, 1, 0);
+ }
+ else if (mpd_isnegative(exp)) {
+ _settriple(result, resultsign, 0, 0);
+ }
+ else {
+ mpd_setspecial(result, resultsign, MPD_INF);
+ }
+ return;
+ }
+ if (mpd_iszero(exp)) {
+ _settriple(result, resultsign, 1, 0);
+ return;
+ }
+ if (_qcheck_pow_one(result, base, exp, resultsign, ctx, status) == 0) {
+ return;
+ }
+ if (_qcheck_pow_bounds(result, base, exp, resultsign, ctx, status)) {
+ return;
+ }
+
+ if (intexp) {
+ _mpd_qpow_int(result, base, exp, resultsign, ctx, status);
+ }
+ else {
+ _mpd_qpow_real(result, base, exp, ctx, status);
+ if (!mpd_isspecial(result) && _mpd_cmp(result, &one) == 0) {
+ mpd_ssize_t shift = ctx->prec-1;
+ mpd_qshiftl(result, &one, shift, status);
+ result->exp = -shift;
+ }
+ if (mpd_isinfinite(result)) {
+ /* for ROUND_DOWN, ROUND_FLOOR, etc. */
+ _settriple(result, MPD_POS, 1, MPD_EXP_INF);
+ }
+ mpd_qfinalize(result, ctx, status);
+ }
+}
+
+/*
+ * Internal function: Integer powmod with mpd_uint_t exponent, base is modified!
+ * Function can fail with MPD_Malloc_error.
+ */
+static inline void
+_mpd_qpowmod_uint(mpd_t *result, mpd_t *base, mpd_uint_t exp,
+ const mpd_t *mod, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+
+ mpd_maxcontext(&maxcontext);
+
+ /* resize to smaller cannot fail */
+ mpd_qcopy(result, &one, status);
+
+ while (exp > 0) {
+ if (exp & 1) {
+ _mpd_qmul_exact(result, result, base, &maxcontext, status);
+ mpd_qrem(result, result, mod, &maxcontext, status);
+ }
+ _mpd_qmul_exact(base, base, base, &maxcontext, status);
+ mpd_qrem(base, base, mod, &maxcontext, status);
+ exp >>= 1;
+ }
+}
+
+/* The powmod function: (base**exp) % mod */
+void
+mpd_qpowmod(mpd_t *result, const mpd_t *base, const mpd_t *exp,
+ const mpd_t *mod,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(tbase,0,0,0,0);
+ MPD_NEW_STATIC(texp,0,0,0,0);
+ MPD_NEW_STATIC(tmod,0,0,0,0);
+ MPD_NEW_STATIC(tmp,0,0,0,0);
+ MPD_NEW_CONST(two,0,0,1,1,1,2);
+ mpd_ssize_t tbase_exp, texp_exp;
+ mpd_ssize_t i;
+ mpd_t t;
+ mpd_uint_t r;
+ uint8_t sign;
+
+
+ if (mpd_isspecial(base) || mpd_isspecial(exp) || mpd_isspecial(mod)) {
+ if (mpd_qcheck_3nans(result, base, exp, mod, ctx, status)) {
+ return;
+ }
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+
+ if (!_mpd_isint(base) || !_mpd_isint(exp) || !_mpd_isint(mod)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_iszerocoeff(mod)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mod->digits+mod->exp > ctx->prec) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ sign = (mpd_isnegative(base)) && (mpd_isodd(exp));
+ if (mpd_iszerocoeff(exp)) {
+ if (mpd_iszerocoeff(base)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ r = (_mpd_cmp_abs(mod, &one)==0) ? 0 : 1;
+ _settriple(result, sign, r, 0);
+ return;
+ }
+ if (mpd_isnegative(exp)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_iszerocoeff(base)) {
+ _settriple(result, sign, 0, 0);
+ return;
+ }
+
+ mpd_maxcontext(&maxcontext);
+
+ mpd_qrescale(&tmod, mod, 0, &maxcontext, &maxcontext.status);
+ if (maxcontext.status&MPD_Errors) {
+ mpd_seterror(result, maxcontext.status&MPD_Errors, status);
+ goto out;
+ }
+ maxcontext.status = 0;
+ mpd_set_positive(&tmod);
+
+ mpd_qround_to_int(&tbase, base, &maxcontext, status);
+ mpd_set_positive(&tbase);
+ tbase_exp = tbase.exp;
+ tbase.exp = 0;
+
+ mpd_qround_to_int(&texp, exp, &maxcontext, status);
+ texp_exp = texp.exp;
+ texp.exp = 0;
+
+ /* base = (base.int % modulo * pow(10, base.exp, modulo)) % modulo */
+ mpd_qrem(&tbase, &tbase, &tmod, &maxcontext, status);
+ mpd_qshiftl(result, &one, tbase_exp, status);
+ mpd_qrem(result, result, &tmod, &maxcontext, status);
+ _mpd_qmul_exact(&tbase, &tbase, result, &maxcontext, status);
+ mpd_qrem(&tbase, &tbase, &tmod, &maxcontext, status);
+ if (mpd_isspecial(&tbase) ||
+ mpd_isspecial(&texp) ||
+ mpd_isspecial(&tmod)) {
+ goto mpd_errors;
+ }
+
+ for (i = 0; i < texp_exp; i++) {
+ _mpd_qpowmod_uint(&tmp, &tbase, 10, &tmod, status);
+ t = tmp;
+ tmp = tbase;
+ tbase = t;
+ }
+ if (mpd_isspecial(&tbase)) {
+ goto mpd_errors; /* GCOV_UNLIKELY */
+ }
+
+ /* resize to smaller cannot fail */
+ mpd_qcopy(result, &one, status);
+ while (mpd_isfinite(&texp) && !mpd_iszero(&texp)) {
+ if (mpd_isodd(&texp)) {
+ _mpd_qmul_exact(result, result, &tbase, &maxcontext, status);
+ mpd_qrem(result, result, &tmod, &maxcontext, status);
+ }
+ _mpd_qmul_exact(&tbase, &tbase, &tbase, &maxcontext, status);
+ mpd_qrem(&tbase, &tbase, &tmod, &maxcontext, status);
+ mpd_qdivint(&texp, &texp, &two, &maxcontext, status);
+ }
+ if (mpd_isspecial(&texp) || mpd_isspecial(&tbase) ||
+ mpd_isspecial(&tmod) || mpd_isspecial(result)) {
+ /* MPD_Malloc_error */
+ goto mpd_errors;
+ }
+ else {
+ mpd_set_sign(result, sign);
+ }
+
+out:
+ mpd_del(&tbase);
+ mpd_del(&texp);
+ mpd_del(&tmod);
+ mpd_del(&tmp);
+ return;
+
+mpd_errors:
+ mpd_setspecial(result, MPD_POS, MPD_NAN);
+ goto out;
+}
+
+void
+mpd_qquantize(mpd_t *result, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_ssize_t b_exp = b->exp;
+ mpd_ssize_t expdiff, shift;
+ mpd_uint_t rnd;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(result, a, b, ctx, status)) {
+ return;
+ }
+ if (mpd_isinfinite(a) && mpd_isinfinite(b)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ if (b->exp > ctx->emax || b->exp < mpd_etiny(ctx)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ if (mpd_iszero(a)) {
+ _settriple(result, mpd_sign(a), 0, b->exp);
+ mpd_qfinalize(result, ctx, status);
+ return;
+ }
+
+
+ expdiff = a->exp - b->exp;
+ if (a->digits + expdiff > ctx->prec) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ if (expdiff >= 0) {
+ shift = expdiff;
+ if (!mpd_qshiftl(result, a, shift, status)) {
+ return;
+ }
+ result->exp = b_exp;
+ }
+ else {
+ /* At this point expdiff < 0 and a->digits+expdiff <= prec,
+ * so the shift before an increment will fit in prec. */
+ shift = -expdiff;
+ rnd = mpd_qshiftr(result, a, shift, status);
+ if (rnd == MPD_UINT_MAX) {
+ return;
+ }
+ result->exp = b_exp;
+ if (!_mpd_apply_round_fit(result, rnd, ctx, status)) {
+ return;
+ }
+ workstatus |= MPD_Rounded;
+ if (rnd) {
+ workstatus |= MPD_Inexact;
+ }
+ }
+
+ if (mpd_adjexp(result) > ctx->emax ||
+ mpd_adjexp(result) < mpd_etiny(ctx)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ *status |= workstatus;
+ mpd_qfinalize(result, ctx, status);
+}
+
+void
+mpd_qreduce(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_ssize_t shift, maxexp, maxshift;
+ uint8_t sign_a = mpd_sign(a);
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+ if (!mpd_qcopy(result, a, status)) {
+ return;
+ }
+ mpd_qfinalize(result, ctx, status);
+ if (mpd_isspecial(result)) {
+ return;
+ }
+ if (mpd_iszero(result)) {
+ _settriple(result, sign_a, 0, 0);
+ return;
+ }
+
+ shift = mpd_trail_zeros(result);
+ maxexp = (ctx->clamp) ? mpd_etop(ctx) : ctx->emax;
+ /* After the finalizing above result->exp <= maxexp. */
+ maxshift = maxexp - result->exp;
+ shift = (shift > maxshift) ? maxshift : shift;
+
+ mpd_qshiftr_inplace(result, shift);
+ result->exp += shift;
+}
+
+void
+mpd_qrem(mpd_t *r, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ MPD_NEW_STATIC(q,0,0,0,0);
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(r, a, b, ctx, status)) {
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_seterror(r, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(b)) {
+ mpd_qcopy(r, a, status);
+ mpd_qfinalize(r, ctx, status);
+ return;
+ }
+ /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+ if (mpd_iszerocoeff(b)) {
+ if (mpd_iszerocoeff(a)) {
+ mpd_seterror(r, MPD_Division_undefined, status);
+ }
+ else {
+ mpd_seterror(r, MPD_Invalid_operation, status);
+ }
+ return;
+ }
+
+ _mpd_qdivmod(&q, r, a, b, ctx, status);
+ mpd_del(&q);
+ mpd_qfinalize(r, ctx, status);
+}
+
+void
+mpd_qrem_near(mpd_t *r, const mpd_t *a, const mpd_t *b,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_context_t workctx;
+ MPD_NEW_STATIC(btmp,0,0,0,0);
+ MPD_NEW_STATIC(q,0,0,0,0);
+ mpd_ssize_t expdiff, qdigits;
+ int cmp, isodd, allnine;
+
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ if (mpd_qcheck_nans(r, a, b, ctx, status)) {
+ return;
+ }
+ if (mpd_isinfinite(a)) {
+ mpd_seterror(r, MPD_Invalid_operation, status);
+ return;
+ }
+ if (mpd_isinfinite(b)) {
+ mpd_qcopy(r, a, status);
+ mpd_qfinalize(r, ctx, status);
+ return;
+ }
+ /* debug */
+ abort(); /* GCOV_NOT_REACHED */
+ }
+ if (mpd_iszerocoeff(b)) {
+ if (mpd_iszerocoeff(a)) {
+ mpd_seterror(r, MPD_Division_undefined, status);
+ }
+ else {
+ mpd_seterror(r, MPD_Invalid_operation, status);
+ }
+ return;
+ }
+
+ if (r == b) {
+ if (!mpd_qcopy(&btmp, b, status)) {
+ mpd_seterror(r, MPD_Malloc_error, status);
+ return;
+ }
+ b = &btmp;
+ }
+
+ _mpd_qdivmod(&q, r, a, b, ctx, status);
+ if (mpd_isnan(&q) || mpd_isnan(r)) {
+ goto finish;
+ }
+ if (mpd_iszerocoeff(r)) {
+ goto finish;
+ }
+
+ expdiff = mpd_adjexp(b) - mpd_adjexp(r);
+ if (-1 <= expdiff && expdiff <= 1) {
+
+ allnine = mpd_coeff_isallnine(&q);
+ qdigits = q.digits;
+ isodd = mpd_isodd(&q);
+
+ mpd_maxcontext(&workctx);
+ if (mpd_sign(a) == mpd_sign(b)) {
+ /* sign(r) == sign(b) */
+ _mpd_qsub(&q, r, b, &workctx, &workctx.status);
+ }
+ else {
+ /* sign(r) != sign(b) */
+ _mpd_qadd(&q, r, b, &workctx, &workctx.status);
+ }
+
+ if (workctx.status&MPD_Errors) {
+ mpd_seterror(r, workctx.status&MPD_Errors, status);
+ goto finish;
+ }
+
+ cmp = _mpd_cmp_abs(&q, r);
+ if (cmp < 0 || (cmp == 0 && isodd)) {
+ /* abs(r) > abs(b)/2 or abs(r) == abs(b)/2 and isodd(quotient) */
+ if (allnine && qdigits == ctx->prec) {
+ /* abs(quotient) + 1 == 10**prec */
+ mpd_seterror(r, MPD_Division_impossible, status);
+ goto finish;
+ }
+ mpd_qcopy(r, &q, status);
+ }
+ }
+
+
+finish:
+ mpd_del(&btmp);
+ mpd_del(&q);
+ mpd_qfinalize(r, ctx, status);
+}
+
+static void
+_mpd_qrescale(mpd_t *result, const mpd_t *a, mpd_ssize_t exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t expdiff, shift;
+ mpd_uint_t rnd;
+
+ if (mpd_isspecial(a)) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+
+ if (mpd_iszero(a)) {
+ _settriple(result, mpd_sign(a), 0, exp);
+ return;
+ }
+
+ expdiff = a->exp - exp;
+ if (expdiff >= 0) {
+ shift = expdiff;
+ if (a->digits + shift > MPD_MAX_PREC+1) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ if (!mpd_qshiftl(result, a, shift, status)) {
+ return;
+ }
+ result->exp = exp;
+ }
+ else {
+ shift = -expdiff;
+ rnd = mpd_qshiftr(result, a, shift, status);
+ if (rnd == MPD_UINT_MAX) {
+ return;
+ }
+ result->exp = exp;
+ _mpd_apply_round_excess(result, rnd, ctx, status);
+ *status |= MPD_Rounded;
+ if (rnd) {
+ *status |= MPD_Inexact;
+ }
+ }
+
+ if (mpd_issubnormal(result, ctx)) {
+ *status |= MPD_Subnormal;
+ }
+}
+
+/*
+ * Rescale a number so that it has exponent 'exp'. Does not regard context
+ * precision, emax, emin, but uses the rounding mode. Special numbers are
+ * quietly copied. Restrictions:
+ *
+ * MPD_MIN_ETINY <= exp <= MPD_MAX_EMAX+1
+ * result->digits <= MPD_MAX_PREC+1
+ */
+void
+mpd_qrescale(mpd_t *result, const mpd_t *a, mpd_ssize_t exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if (exp > MPD_MAX_EMAX+1 || exp < MPD_MIN_ETINY) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ _mpd_qrescale(result, a, exp, ctx, status);
+}
+
+/*
+ * Same as mpd_qrescale, but with relaxed restrictions. The result of this
+ * function should only be used for formatting a number and never as input
+ * for other operations.
+ *
+ * MPD_MIN_ETINY-MPD_MAX_PREC <= exp <= MPD_MAX_EMAX+1
+ * result->digits <= MPD_MAX_PREC+1
+ */
+void
+mpd_qrescale_fmt(mpd_t *result, const mpd_t *a, mpd_ssize_t exp,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ if (exp > MPD_MAX_EMAX+1 || exp < MPD_MIN_ETINY-MPD_MAX_PREC) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ _mpd_qrescale(result, a, exp, ctx, status);
+}
+
+/* Round to an integer according to 'action' and ctx->round. */
+enum {TO_INT_EXACT, TO_INT_SILENT, TO_INT_TRUNC};
+static void
+_mpd_qround_to_integral(int action, mpd_t *result, const mpd_t *a,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_uint_t rnd;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ mpd_qcopy(result, a, status);
+ return;
+ }
+ if (a->exp >= 0) {
+ mpd_qcopy(result, a, status);
+ return;
+ }
+ if (mpd_iszerocoeff(a)) {
+ _settriple(result, mpd_sign(a), 0, 0);
+ return;
+ }
+
+ rnd = mpd_qshiftr(result, a, -a->exp, status);
+ if (rnd == MPD_UINT_MAX) {
+ return;
+ }
+ result->exp = 0;
+
+ if (action == TO_INT_EXACT || action == TO_INT_SILENT) {
+ _mpd_apply_round_excess(result, rnd, ctx, status);
+ if (action == TO_INT_EXACT) {
+ *status |= MPD_Rounded;
+ if (rnd) {
+ *status |= MPD_Inexact;
+ }
+ }
+ }
+}
+
+void
+mpd_qround_to_intx(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ (void)_mpd_qround_to_integral(TO_INT_EXACT, result, a, ctx, status);
+}
+
+void
+mpd_qround_to_int(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a, ctx, status);
+}
+
+void
+mpd_qtrunc(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ (void)_mpd_qround_to_integral(TO_INT_TRUNC, result, a, ctx, status);
+}
+
+void
+mpd_qfloor(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx = *ctx;
+ workctx.round = MPD_ROUND_FLOOR;
+ (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a,
+ &workctx, status);
+}
+
+void
+mpd_qceil(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx = *ctx;
+ workctx.round = MPD_ROUND_CEILING;
+ (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a,
+ &workctx, status);
+}
+
+int
+mpd_same_quantum(const mpd_t *a, const mpd_t *b)
+{
+ if (mpd_isspecial(a) || mpd_isspecial(b)) {
+ return ((mpd_isnan(a) && mpd_isnan(b)) ||
+ (mpd_isinfinite(a) && mpd_isinfinite(b)));
+ }
+
+ return a->exp == b->exp;
+}
+
+/* Schedule the increase in precision for the Newton iteration. */
+static inline int
+recpr_schedule_prec(mpd_ssize_t klist[MPD_MAX_PREC_LOG2],
+ mpd_ssize_t maxprec, mpd_ssize_t initprec)
+{
+ mpd_ssize_t k;
+ int i;
+
+ assert(maxprec > 0 && initprec > 0);
+ if (maxprec <= initprec) return -1;
+
+ i = 0; k = maxprec;
+ do {
+ k = (k+1) / 2;
+ klist[i++] = k;
+ } while (k > initprec);
+
+ return i-1;
+}
+
+/*
+ * Initial approximation for the reciprocal:
+ * k_0 := MPD_RDIGITS-2
+ * z_0 := 10**(-k_0) * floor(10**(2*k_0 + 2) / floor(v * 10**(k_0 + 2)))
+ * Absolute error:
+ * |1/v - z_0| < 10**(-k_0)
+ * ACL2 proof: maxerror-inverse-approx
+ */
+static void
+_mpd_qreciprocal_approx(mpd_t *z, const mpd_t *v, uint32_t *status)
+{
+ mpd_uint_t p10data[2] = {0, mpd_pow10[MPD_RDIGITS-2]};
+ mpd_uint_t dummy, word;
+ int n;
+
+ assert(v->exp == -v->digits);
+
+ _mpd_get_msdigits(&dummy, &word, v, MPD_RDIGITS);
+ n = mpd_word_digits(word);
+ word *= mpd_pow10[MPD_RDIGITS-n];
+
+ mpd_qresize(z, 2, status);
+ (void)_mpd_shortdiv(z->data, p10data, 2, word);
+
+ mpd_clear_flags(z);
+ z->exp = -(MPD_RDIGITS-2);
+ z->len = (z->data[1] == 0) ? 1 : 2;
+ mpd_setdigits(z);
+}
+
+/*
+ * Reciprocal, calculated with Newton's Method. Assumption: result != a.
+ * NOTE: The comments in the function show that certain operations are
+ * exact. The proof for the maximum error is too long to fit in here.
+ * ACL2 proof: maxerror-inverse-complete
+ */
+static void
+_mpd_qreciprocal(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t varcontext, maxcontext;
+ mpd_t *z = result; /* current approximation */
+ mpd_t *v; /* a, normalized to a number between 0.1 and 1 */
+ MPD_NEW_SHARED(vtmp, a); /* v shares data with a */
+ MPD_NEW_STATIC(s,0,0,0,0); /* temporary variable */
+ MPD_NEW_STATIC(t,0,0,0,0); /* temporary variable */
+ MPD_NEW_CONST(two,0,0,1,1,1,2); /* const 2 */
+ mpd_ssize_t klist[MPD_MAX_PREC_LOG2];
+ mpd_ssize_t adj, maxprec, initprec;
+ uint8_t sign = mpd_sign(a);
+ int i;
+
+ assert(result != a);
+
+ v = &vtmp;
+ mpd_clear_flags(v);
+ adj = v->digits + v->exp;
+ v->exp = -v->digits;
+
+ /* Initial approximation */
+ _mpd_qreciprocal_approx(z, v, status);
+
+ mpd_maxcontext(&varcontext);
+ mpd_maxcontext(&maxcontext);
+ varcontext.round = maxcontext.round = MPD_ROUND_TRUNC;
+ varcontext.emax = maxcontext.emax = MPD_MAX_EMAX + 100;
+ varcontext.emin = maxcontext.emin = MPD_MIN_EMIN - 100;
+ maxcontext.prec = MPD_MAX_PREC + 100;
+
+ maxprec = ctx->prec;
+ maxprec += 2;
+ initprec = MPD_RDIGITS-3;
+
+ i = recpr_schedule_prec(klist, maxprec, initprec);
+ for (; i >= 0; i--) {
+ /* Loop invariant: z->digits <= klist[i]+7 */
+ /* Let s := z**2, exact result */
+ _mpd_qmul_exact(&s, z, z, &maxcontext, status);
+ varcontext.prec = 2*klist[i] + 5;
+ if (v->digits > varcontext.prec) {
+ /* Let t := v, truncated to n >= 2*k+5 fraction digits */
+ mpd_qshiftr(&t, v, v->digits-varcontext.prec, status);
+ t.exp = -varcontext.prec;
+ /* Let t := trunc(v)*s, truncated to n >= 2*k+1 fraction digits */
+ mpd_qmul(&t, &t, &s, &varcontext, status);
+ }
+ else { /* v->digits <= 2*k+5 */
+ /* Let t := v*s, truncated to n >= 2*k+1 fraction digits */
+ mpd_qmul(&t, v, &s, &varcontext, status);
+ }
+ /* Let s := 2*z, exact result */
+ _mpd_qmul_exact(&s, z, &two, &maxcontext, status);
+ /* s.digits < t.digits <= 2*k+5, |adjexp(s)-adjexp(t)| <= 1,
+ * so the subtraction generates at most 2*k+6 <= klist[i+1]+7
+ * digits. The loop invariant is preserved. */
+ _mpd_qsub_exact(z, &s, &t, &maxcontext, status);
+ }
+
+ if (!mpd_isspecial(z)) {
+ z->exp -= adj;
+ mpd_set_flags(z, sign);
+ }
+
+ mpd_del(&s);
+ mpd_del(&t);
+ mpd_qfinalize(z, ctx, status);
+}
+
+/*
+ * Internal function for large numbers:
+ *
+ * q, r = divmod(coeff(a), coeff(b))
+ *
+ * Strategy: Multiply the dividend by the reciprocal of the divisor. The
+ * inexact result is fixed by a small loop, using at most one iteration.
+ *
+ * ACL2 proofs:
+ * ------------
+ * 1) q is a natural number. (ndivmod-quotient-natp)
+ * 2) r is a natural number. (ndivmod-remainder-natp)
+ * 3) a = q * b + r (ndivmod-q*b+r==a)
+ * 4) r < b (ndivmod-remainder-<-b)
+ */
+static void
+_mpd_base_ndivmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+ mpd_t *qq = q, *rr = r;
+ mpd_t aa, bb;
+ int k;
+
+ _mpd_copy_shared(&aa, a);
+ _mpd_copy_shared(&bb, b);
+
+ mpd_set_positive(&aa);
+ mpd_set_positive(&bb);
+ aa.exp = 0;
+ bb.exp = 0;
+
+ if (q == a || q == b) {
+ if ((qq = mpd_qnew()) == NULL) {
+ *status |= MPD_Malloc_error;
+ goto nanresult;
+ }
+ }
+ if (r == a || r == b) {
+ if ((rr = mpd_qnew()) == NULL) {
+ *status |= MPD_Malloc_error;
+ goto nanresult;
+ }
+ }
+
+ mpd_maxcontext(&workctx);
+
+ /* Let prec := adigits - bdigits + 4 */
+ workctx.prec = a->digits - b->digits + 1 + 3;
+ if (a->digits > MPD_MAX_PREC || workctx.prec > MPD_MAX_PREC) {
+ *status |= MPD_Division_impossible;
+ goto nanresult;
+ }
+
+ /* Let x := _mpd_qreciprocal(b, prec)
+ * Then x is bounded by:
+ * 1) 1/b - 10**(-prec - bdigits) < x < 1/b + 10**(-prec - bdigits)
+ * 2) 1/b - 10**(-adigits - 4) < x < 1/b + 10**(-adigits - 4)
+ */
+ _mpd_qreciprocal(rr, &bb, &workctx, &workctx.status);
+
+ /* Get an estimate for the quotient. Let q := a * x
+ * Then q is bounded by:
+ * 3) a/b - 10**-4 < q < a/b + 10**-4
+ */
+ _mpd_qmul(qq, &aa, rr, &workctx, &workctx.status);
+ /* Truncate q to an integer:
+ * 4) a/b - 2 < trunc(q) < a/b + 1
+ */
+ mpd_qtrunc(qq, qq, &workctx, &workctx.status);
+
+ workctx.prec = aa.digits + 3;
+ workctx.emax = MPD_MAX_EMAX + 3;
+ workctx.emin = MPD_MIN_EMIN - 3;
+ /* Multiply the estimate for q by b:
+ * 5) a - 2 * b < trunc(q) * b < a + b
+ */
+ _mpd_qmul(rr, &bb, qq, &workctx, &workctx.status);
+ /* Get the estimate for r such that a = q * b + r. */
+ _mpd_qsub_exact(rr, &aa, rr, &workctx, &workctx.status);
+
+ /* Fix the result. At this point -b < r < 2*b, so the correction loop
+ takes at most one iteration. */
+ for (k = 0;; k++) {
+ if (mpd_isspecial(qq) || mpd_isspecial(rr)) {
+ *status |= (workctx.status&MPD_Errors);
+ goto nanresult;
+ }
+ if (k > 2) { /* Allow two iterations despite the proof. */
+ mpd_err_warn("libmpdec: internal error in " /* GCOV_NOT_REACHED */
+ "_mpd_base_ndivmod: please report"); /* GCOV_NOT_REACHED */
+ *status |= MPD_Invalid_operation; /* GCOV_NOT_REACHED */
+ goto nanresult; /* GCOV_NOT_REACHED */
+ }
+ /* r < 0 */
+ else if (_mpd_cmp(&zero, rr) == 1) {
+ _mpd_qadd_exact(rr, rr, &bb, &workctx, &workctx.status);
+ _mpd_qadd_exact(qq, qq, &minus_one, &workctx, &workctx.status);
+ }
+ /* 0 <= r < b */
+ else if (_mpd_cmp(rr, &bb) == -1) {
+ break;
+ }
+ /* r >= b */
+ else {
+ _mpd_qsub_exact(rr, rr, &bb, &workctx, &workctx.status);
+ _mpd_qadd_exact(qq, qq, &one, &workctx, &workctx.status);
+ }
+ }
+
+ if (qq != q) {
+ if (!mpd_qcopy(q, qq, status)) {
+ goto nanresult; /* GCOV_UNLIKELY */
+ }
+ mpd_del(qq);
+ }
+ if (rr != r) {
+ if (!mpd_qcopy(r, rr, status)) {
+ goto nanresult; /* GCOV_UNLIKELY */
+ }
+ mpd_del(rr);
+ }
+
+ *status |= (workctx.status&MPD_Errors);
+ return;
+
+
+nanresult:
+ if (qq && qq != q) mpd_del(qq);
+ if (rr && rr != r) mpd_del(rr);
+ mpd_setspecial(q, MPD_POS, MPD_NAN);
+ mpd_setspecial(r, MPD_POS, MPD_NAN);
+}
+
+/* LIBMPDEC_ONLY */
+/*
+ * Schedule the optimal precision increase for the Newton iteration.
+ * v := input operand
+ * z_0 := initial approximation
+ * initprec := natural number such that abs(sqrt(v) - z_0) < 10**-initprec
+ * maxprec := target precision
+ *
+ * For convenience the output klist contains the elements in reverse order:
+ * klist := [k_n-1, ..., k_0], where
+ * 1) k_0 <= initprec and
+ * 2) abs(sqrt(v) - result) < 10**(-2*k_n-1 + 2) <= 10**-maxprec.
+ */
+static inline int
+invroot_schedule_prec(mpd_ssize_t klist[MPD_MAX_PREC_LOG2],
+ mpd_ssize_t maxprec, mpd_ssize_t initprec)
+{
+ mpd_ssize_t k;
+ int i;
+
+ assert(maxprec >= 3 && initprec >= 3);
+ if (maxprec <= initprec) return -1;
+
+ i = 0; k = maxprec;
+ do {
+ k = (k+3) / 2;
+ klist[i++] = k;
+ } while (k > initprec);
+
+ return i-1;
+}
+
+/*
+ * Initial approximation for the inverse square root function.
+ * Input:
+ * v := rational number, with 1 <= v < 100
+ * vhat := floor(v * 10**6)
+ * Output:
+ * z := approximation to 1/sqrt(v), such that abs(z - 1/sqrt(v)) < 10**-3.
+ */
+static inline void
+_invroot_init_approx(mpd_t *z, mpd_uint_t vhat)
+{
+ mpd_uint_t lo = 1000;
+ mpd_uint_t hi = 10000;
+ mpd_uint_t a, sq;
+
+ assert(lo*lo <= vhat && vhat < (hi+1)*(hi+1));
+
+ for(;;) {
+ a = (lo + hi) / 2;
+ sq = a * a;
+ if (vhat >= sq) {
+ if (vhat < sq + 2*a + 1) {
+ break;
+ }
+ lo = a + 1;
+ }
+ else {
+ hi = a - 1;
+ }
+ }
+
+ /*
+ * After the binary search we have:
+ * 1) a**2 <= floor(v * 10**6) < (a + 1)**2
+ * This implies:
+ * 2) a**2 <= v * 10**6 < (a + 1)**2
+ * 3) a <= sqrt(v) * 10**3 < a + 1
+ * Since 10**3 <= a:
+ * 4) 0 <= 10**prec/a - 1/sqrt(v) < 10**-prec
+ * We have:
+ * 5) 10**3/a - 10**-3 < floor(10**9/a) * 10**-6 <= 10**3/a
+ * Merging 4) and 5):
+ * 6) abs(floor(10**9/a) * 10**-6 - 1/sqrt(v)) < 10**-3
+ */
+ mpd_minalloc(z);
+ mpd_clear_flags(z);
+ z->data[0] = 1000000000UL / a;
+ z->len = 1;
+ z->exp = -6;
+ mpd_setdigits(z);
+}
+
+/*
+ * Set 'result' to 1/sqrt(a).
+ * Relative error: abs(result - 1/sqrt(a)) < 10**-prec * 1/sqrt(a)
+ */
+static void
+_mpd_qinvroot(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ uint32_t workstatus = 0;
+ mpd_context_t varcontext, maxcontext;
+ mpd_t *z = result; /* current approximation */
+ mpd_t *v; /* a, normalized to a number between 1 and 100 */
+ MPD_NEW_SHARED(vtmp, a); /* by default v will share data with a */
+ MPD_NEW_STATIC(s,0,0,0,0); /* temporary variable */
+ MPD_NEW_STATIC(t,0,0,0,0); /* temporary variable */
+ MPD_NEW_CONST(one_half,0,-1,1,1,1,5);
+ MPD_NEW_CONST(three,0,0,1,1,1,3);
+ mpd_ssize_t klist[MPD_MAX_PREC_LOG2];
+ mpd_ssize_t ideal_exp, shift;
+ mpd_ssize_t adj, tz;
+ mpd_ssize_t maxprec, fracdigits;
+ mpd_uint_t vhat, dummy;
+ int i, n;
+
+
+ ideal_exp = -(a->exp - (a->exp & 1)) / 2;
+
+ v = &vtmp;
+ if (result == a) {
+ if ((v = mpd_qncopy(a)) == NULL) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ }
+
+ /* normalize a to 1 <= v < 100 */
+ if ((v->digits+v->exp) & 1) {
+ fracdigits = v->digits - 1;
+ v->exp = -fracdigits;
+ n = (v->digits > 7) ? 7 : (int)v->digits;
+ /* Let vhat := floor(v * 10**(2*initprec)) */
+ _mpd_get_msdigits(&dummy, &vhat, v, n);
+ if (n < 7) {
+ vhat *= mpd_pow10[7-n];
+ }
+ }
+ else {
+ fracdigits = v->digits - 2;
+ v->exp = -fracdigits;
+ n = (v->digits > 8) ? 8 : (int)v->digits;
+ /* Let vhat := floor(v * 10**(2*initprec)) */
+ _mpd_get_msdigits(&dummy, &vhat, v, n);
+ if (n < 8) {
+ vhat *= mpd_pow10[8-n];
+ }
+ }
+ adj = (a->exp-v->exp) / 2;
+
+ /* initial approximation */
+ _invroot_init_approx(z, vhat);
+
+ mpd_maxcontext(&maxcontext);
+ mpd_maxcontext(&varcontext);
+ varcontext.round = MPD_ROUND_TRUNC;
+ maxprec = ctx->prec + 1;
+
+ /* initprec == 3 */
+ i = invroot_schedule_prec(klist, maxprec, 3);
+ for (; i >= 0; i--) {
+ varcontext.prec = 2*klist[i]+2;
+ mpd_qmul(&s, z, z, &maxcontext, &workstatus);
+ if (v->digits > varcontext.prec) {
+ shift = v->digits - varcontext.prec;
+ mpd_qshiftr(&t, v, shift, &workstatus);
+ t.exp += shift;
+ mpd_qmul(&t, &t, &s, &varcontext, &workstatus);
+ }
+ else {
+ mpd_qmul(&t, v, &s, &varcontext, &workstatus);
+ }
+ mpd_qsub(&t, &three, &t, &maxcontext, &workstatus);
+ mpd_qmul(z, z, &t, &varcontext, &workstatus);
+ mpd_qmul(z, z, &one_half, &maxcontext, &workstatus);
+ }
+
+ z->exp -= adj;
+
+ tz = mpd_trail_zeros(result);
+ shift = ideal_exp - result->exp;
+ shift = (tz > shift) ? shift : tz;
+ if (shift > 0) {
+ mpd_qshiftr_inplace(result, shift);
+ result->exp += shift;
+ }
+
+
+ mpd_del(&s);
+ mpd_del(&t);
+ if (v != &vtmp) mpd_del(v);
+ *status |= (workstatus&MPD_Errors);
+ *status |= (MPD_Rounded|MPD_Inexact);
+}
+
+void
+mpd_qinvroot(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t workctx;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ /* positive infinity */
+ _settriple(result, MPD_POS, 0, mpd_etiny(ctx));
+ *status |= MPD_Clamped;
+ return;
+ }
+ if (mpd_iszero(a)) {
+ mpd_setspecial(result, mpd_sign(a), MPD_INF);
+ *status |= MPD_Division_by_zero;
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ workctx = *ctx;
+ workctx.prec += 2;
+ workctx.round = MPD_ROUND_HALF_EVEN;
+ _mpd_qinvroot(result, a, &workctx, status);
+ mpd_qfinalize(result, ctx, status);
+}
+/* END LIBMPDEC_ONLY */
+
+/* Algorithm from decimal.py */
+void
+mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+ uint32_t *status)
+{
+ mpd_context_t maxcontext;
+ MPD_NEW_STATIC(c,0,0,0,0);
+ MPD_NEW_STATIC(q,0,0,0,0);
+ MPD_NEW_STATIC(r,0,0,0,0);
+ MPD_NEW_CONST(two,0,0,1,1,1,2);
+ mpd_ssize_t prec, ideal_exp;
+ mpd_ssize_t l, shift;
+ int exact = 0;
+
+
+ ideal_exp = (a->exp - (a->exp & 1)) / 2;
+
+ if (mpd_isspecial(a)) {
+ if (mpd_qcheck_nan(result, a, ctx, status)) {
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+ mpd_setspecial(result, MPD_POS, MPD_INF);
+ return;
+ }
+ if (mpd_iszero(a)) {
+ _settriple(result, mpd_sign(a), 0, ideal_exp);
+ mpd_qfinalize(result, ctx, status);
+ return;
+ }
+ if (mpd_isnegative(a)) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ mpd_maxcontext(&maxcontext);
+ prec = ctx->prec + 1;
+
+ if (!mpd_qcopy(&c, a, status)) {
+ goto malloc_error;
+ }
+ c.exp = 0;
+
+ if (a->exp & 1) {
+ if (!mpd_qshiftl(&c, &c, 1, status)) {
+ goto malloc_error;
+ }
+ l = (a->digits >> 1) + 1;
+ }
+ else {
+ l = (a->digits + 1) >> 1;
+ }
+
+ shift = prec - l;
+ if (shift >= 0) {
+ if (!mpd_qshiftl(&c, &c, 2*shift, status)) {
+ goto malloc_error;
+ }
+ exact = 1;
+ }
+ else {
+ exact = !mpd_qshiftr_inplace(&c, -2*shift);
+ }
+
+ ideal_exp -= shift;
+
+ /* find result = floor(sqrt(c)) using Newton's method */
+ if (!mpd_qshiftl(result, &one, prec, status)) {
+ goto malloc_error;
+ }
+
+ while (1) {
+ _mpd_qdivmod(&q, &r, &c, result, &maxcontext, &maxcontext.status);
+ if (mpd_isspecial(result) || mpd_isspecial(&q)) {
+ mpd_seterror(result, maxcontext.status&MPD_Errors, status);
+ goto out;
+ }
+ if (_mpd_cmp(result, &q) <= 0) {
+ break;
+ }
+ _mpd_qadd_exact(result, result, &q, &maxcontext, &maxcontext.status);
+ if (mpd_isspecial(result)) {
+ mpd_seterror(result, maxcontext.status&MPD_Errors, status);
+ goto out;
+ }
+ _mpd_qdivmod(result, &r, result, &two, &maxcontext, &maxcontext.status);
+ }
+
+ if (exact) {
+ _mpd_qmul_exact(&r, result, result, &maxcontext, &maxcontext.status);
+ if (mpd_isspecial(&r)) {
+ mpd_seterror(result, maxcontext.status&MPD_Errors, status);
+ goto out;
+ }
+ exact = (_mpd_cmp(&r, &c) == 0);
+ }
+
+ if (exact) {
+ if (shift >= 0) {
+ mpd_qshiftr_inplace(result, shift);
+ }
+ else {
+ if (!mpd_qshiftl(result, result, -shift, status)) {
+ goto malloc_error;
+ }
+ }
+ ideal_exp += shift;
+ }
+ else {
+ int lsd = (int)mpd_lsd(result->data[0]);
+ if (lsd == 0 || lsd == 5) {
+ result->data[0] += 1;
+ }
+ }
+
+ result->exp = ideal_exp;
+
+
+out:
+ mpd_del(&c);
+ mpd_del(&q);
+ mpd_del(&r);
+ maxcontext = *ctx;
+ maxcontext.round = MPD_ROUND_HALF_EVEN;
+ mpd_qfinalize(result, &maxcontext, status);
+ return;
+
+malloc_error:
+ mpd_seterror(result, MPD_Malloc_error, status);
+ goto out;
+}
+
+
+/******************************************************************************/
+/* Base conversions */
+/******************************************************************************/
+
+/* Space needed to represent an integer mpd_t in base 'base'. */
+size_t
+mpd_sizeinbase(const mpd_t *a, uint32_t base)
+{
+ double x;
+ size_t digits;
+
+ assert(mpd_isinteger(a));
+ assert(base >= 2);
+
+ if (mpd_iszero(a)) {
+ return 1;
+ }
+
+ digits = a->digits+a->exp;
+ assert(digits > 0);
+
+#ifdef CONFIG_64
+ /* ceil(2711437152599294 / log10(2)) + 4 == 2**53 */
+ if (digits > 2711437152599294ULL) {
+ return SIZE_MAX;
+ }
+#endif
+
+ x = (double)digits / log10(base);
+ return (x > SIZE_MAX-1) ? SIZE_MAX : (size_t)x + 1;
+}
+
+/* Space needed to import a base 'base' integer of length 'srclen'. */
+static mpd_ssize_t
+_mpd_importsize(size_t srclen, uint32_t base)
+{
+ double x;
+
+ assert(srclen > 0);
+ assert(base >= 2);
+
+#if SIZE_MAX == UINT64_MAX
+ if (srclen > (1ULL<<53)) {
+ return MPD_SSIZE_MAX;
+ }
+#endif
+
+ x = (double)srclen * (log10(base)/MPD_RDIGITS);
+ return (x >= MPD_MAXIMPORT) ? MPD_SSIZE_MAX : (mpd_ssize_t)x + 1;
+}
+
+static uint8_t
+mpd_resize_u16(uint16_t **w, size_t nmemb)
+{
+ uint8_t err = 0;
+ *w = mpd_realloc(*w, nmemb, sizeof **w, &err);
+ return !err;
+}
+
+static uint8_t
+mpd_resize_u32(uint32_t **w, size_t nmemb)
+{
+ uint8_t err = 0;
+ *w = mpd_realloc(*w, nmemb, sizeof **w, &err);
+ return !err;
+}
+
+static size_t
+_baseconv_to_u16(uint16_t **w, size_t wlen, mpd_uint_t wbase,
+ mpd_uint_t *u, mpd_ssize_t ulen)
+{
+ size_t n = 0;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(wbase <= (1U<<16));
+
+ do {
+ if (n >= wlen) {
+ if (!mpd_resize_u16(w, n+1)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ (*w)[n++] = (uint16_t)_mpd_shortdiv(u, u, ulen, wbase);
+ /* ulen is at least 1. u[ulen-1] can only be zero if ulen == 1. */
+ ulen = _mpd_real_size(u, ulen);
+
+ } while (u[ulen-1] != 0);
+
+ return n;
+}
+
+static size_t
+_coeff_from_u16(mpd_t *w, mpd_ssize_t wlen,
+ const mpd_uint_t *u, size_t ulen, uint32_t ubase,
+ uint32_t *status)
+{
+ mpd_ssize_t n = 0;
+ mpd_uint_t carry;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(ubase <= (1U<<16));
+
+ w->data[n++] = u[--ulen];
+ while (--ulen != SIZE_MAX) {
+ carry = _mpd_shortmul_c(w->data, w->data, n, ubase);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_qresize(w, n+1, status)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ w->data[n++] = carry;
+ }
+ carry = _mpd_shortadd(w->data, n, u[ulen]);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_qresize(w, n+1, status)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ w->data[n++] = carry;
+ }
+ }
+
+ return n;
+}
+
+/* target base wbase < source base ubase */
+static size_t
+_baseconv_to_smaller(uint32_t **w, size_t wlen, uint32_t wbase,
+ mpd_uint_t *u, mpd_ssize_t ulen, mpd_uint_t ubase)
+{
+ size_t n = 0;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(wbase < ubase);
+
+ do {
+ if (n >= wlen) {
+ if (!mpd_resize_u32(w, n+1)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ (*w)[n++] = (uint32_t)_mpd_shortdiv_b(u, u, ulen, wbase, ubase);
+ /* ulen is at least 1. u[ulen-1] can only be zero if ulen == 1. */
+ ulen = _mpd_real_size(u, ulen);
+
+ } while (u[ulen-1] != 0);
+
+ return n;
+}
+
+#ifdef CONFIG_32
+/* target base 'wbase' == source base 'ubase' */
+static size_t
+_copy_equal_base(uint32_t **w, size_t wlen,
+ const uint32_t *u, size_t ulen)
+{
+ if (wlen < ulen) {
+ if (!mpd_resize_u32(w, ulen)) {
+ return SIZE_MAX;
+ }
+ }
+
+ memcpy(*w, u, ulen * (sizeof **w));
+ return ulen;
+}
+
+/* target base 'wbase' > source base 'ubase' */
+static size_t
+_baseconv_to_larger(uint32_t **w, size_t wlen, mpd_uint_t wbase,
+ const mpd_uint_t *u, size_t ulen, mpd_uint_t ubase)
+{
+ size_t n = 0;
+ mpd_uint_t carry;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(ubase < wbase);
+
+ (*w)[n++] = u[--ulen];
+ while (--ulen != SIZE_MAX) {
+ carry = _mpd_shortmul_b(*w, *w, n, ubase, wbase);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_resize_u32(w, n+1)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ (*w)[n++] = carry;
+ }
+ carry = _mpd_shortadd_b(*w, n, u[ulen], wbase);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_resize_u32(w, n+1)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ (*w)[n++] = carry;
+ }
+ }
+
+ return n;
+}
+
+/* target base wbase < source base ubase */
+static size_t
+_coeff_from_larger_base(mpd_t *w, size_t wlen, mpd_uint_t wbase,
+ mpd_uint_t *u, mpd_ssize_t ulen, mpd_uint_t ubase,
+ uint32_t *status)
+{
+ size_t n = 0;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(wbase < ubase);
+
+ do {
+ if (n >= wlen) {
+ if (!mpd_qresize(w, n+1, status)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ w->data[n++] = (uint32_t)_mpd_shortdiv_b(u, u, ulen, wbase, ubase);
+ /* ulen is at least 1. u[ulen-1] can only be zero if ulen == 1. */
+ ulen = _mpd_real_size(u, ulen);
+
+ } while (u[ulen-1] != 0);
+
+ return n;
+}
+#endif
+
+/* target base 'wbase' > source base 'ubase' */
+static size_t
+_coeff_from_smaller_base(mpd_t *w, mpd_ssize_t wlen, mpd_uint_t wbase,
+ const uint32_t *u, size_t ulen, mpd_uint_t ubase,
+ uint32_t *status)
+{
+ mpd_ssize_t n = 0;
+ mpd_uint_t carry;
+
+ assert(wlen > 0 && ulen > 0);
+ assert(wbase > ubase);
+
+ w->data[n++] = u[--ulen];
+ while (--ulen != SIZE_MAX) {
+ carry = _mpd_shortmul_b(w->data, w->data, n, ubase, wbase);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_qresize(w, n+1, status)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ w->data[n++] = carry;
+ }
+ carry = _mpd_shortadd_b(w->data, n, u[ulen], wbase);
+ if (carry) {
+ if (n >= wlen) {
+ if (!mpd_qresize(w, n+1, status)) {
+ return SIZE_MAX;
+ }
+ wlen = n+1;
+ }
+ w->data[n++] = carry;
+ }
+ }
+
+ return n;
+}
+
+/*
+ * Convert an integer mpd_t to a multiprecision integer with base <= 2**16.
+ * The least significant word of the result is (*rdata)[0].
+ *
+ * If rdata is NULL, space is allocated by the function and rlen is irrelevant.
+ * In case of an error any allocated storage is freed and rdata is set back to
+ * NULL.
+ *
+ * If rdata is non-NULL, it MUST be allocated by one of libmpdec's allocation
+ * functions and rlen MUST be correct. If necessary, the function will resize
+ * rdata. In case of an error the caller must free rdata.
+ *
+ * Return value: In case of success, the exact length of rdata, SIZE_MAX
+ * otherwise.
+ */
+size_t
+mpd_qexport_u16(uint16_t **rdata, size_t rlen, uint32_t rbase,
+ const mpd_t *src, uint32_t *status)
+{
+ MPD_NEW_STATIC(tsrc,0,0,0,0);
+ int alloc = 0; /* rdata == NULL */
+ size_t n;
+
+ assert(rbase <= (1U<<16));
+
+ if (mpd_isspecial(src) || !_mpd_isint(src)) {
+ *status |= MPD_Invalid_operation;
+ return SIZE_MAX;
+ }
+
+ if (*rdata == NULL) {
+ rlen = mpd_sizeinbase(src, rbase);
+ if (rlen == SIZE_MAX) {
+ *status |= MPD_Invalid_operation;
+ return SIZE_MAX;
+ }
+ *rdata = mpd_alloc(rlen, sizeof **rdata);
+ if (*rdata == NULL) {
+ goto malloc_error;
+ }
+ alloc = 1;
+ }
+
+ if (mpd_iszero(src)) {
+ **rdata = 0;
+ return 1;
+ }
+
+ if (src->exp >= 0) {
+ if (!mpd_qshiftl(&tsrc, src, src->exp, status)) {
+ goto malloc_error;
+ }
+ }
+ else {
+ if (mpd_qshiftr(&tsrc, src, -src->exp, status) == MPD_UINT_MAX) {
+ goto malloc_error;
+ }
+ }
+
+ n = _baseconv_to_u16(rdata, rlen, rbase, tsrc.data, tsrc.len);
+ if (n == SIZE_MAX) {
+ goto malloc_error;
+ }
+
+
+out:
+ mpd_del(&tsrc);
+ return n;
+
+malloc_error:
+ if (alloc) {
+ mpd_free(*rdata);
+ *rdata = NULL;
+ }
+ n = SIZE_MAX;
+ *status |= MPD_Malloc_error;
+ goto out;
+}
+
+/*
+ * Convert an integer mpd_t to a multiprecision integer with base<=UINT32_MAX.
+ * The least significant word of the result is (*rdata)[0].
+ *
+ * If rdata is NULL, space is allocated by the function and rlen is irrelevant.
+ * In case of an error any allocated storage is freed and rdata is set back to
+ * NULL.
+ *
+ * If rdata is non-NULL, it MUST be allocated by one of libmpdec's allocation
+ * functions and rlen MUST be correct. If necessary, the function will resize
+ * rdata. In case of an error the caller must free rdata.
+ *
+ * Return value: In case of success, the exact length of rdata, SIZE_MAX
+ * otherwise.
+ */
+size_t
+mpd_qexport_u32(uint32_t **rdata, size_t rlen, uint32_t rbase,
+ const mpd_t *src, uint32_t *status)
+{
+ MPD_NEW_STATIC(tsrc,0,0,0,0);
+ int alloc = 0; /* rdata == NULL */
+ size_t n;
+
+ if (mpd_isspecial(src) || !_mpd_isint(src)) {
+ *status |= MPD_Invalid_operation;
+ return SIZE_MAX;
+ }
+
+ if (*rdata == NULL) {
+ rlen = mpd_sizeinbase(src, rbase);
+ if (rlen == SIZE_MAX) {
+ *status |= MPD_Invalid_operation;
+ return SIZE_MAX;
+ }
+ *rdata = mpd_alloc(rlen, sizeof **rdata);
+ if (*rdata == NULL) {
+ goto malloc_error;
+ }
+ alloc = 1;
+ }
+
+ if (mpd_iszero(src)) {
+ **rdata = 0;
+ return 1;
+ }
+
+ if (src->exp >= 0) {
+ if (!mpd_qshiftl(&tsrc, src, src->exp, status)) {
+ goto malloc_error;
+ }
+ }
+ else {
+ if (mpd_qshiftr(&tsrc, src, -src->exp, status) == MPD_UINT_MAX) {
+ goto malloc_error;
+ }
+ }
+
+#ifdef CONFIG_64
+ n = _baseconv_to_smaller(rdata, rlen, rbase,
+ tsrc.data, tsrc.len, MPD_RADIX);
+#else
+ if (rbase == MPD_RADIX) {
+ n = _copy_equal_base(rdata, rlen, tsrc.data, tsrc.len);
+ }
+ else if (rbase < MPD_RADIX) {
+ n = _baseconv_to_smaller(rdata, rlen, rbase,
+ tsrc.data, tsrc.len, MPD_RADIX);
+ }
+ else {
+ n = _baseconv_to_larger(rdata, rlen, rbase,
+ tsrc.data, tsrc.len, MPD_RADIX);
+ }
+#endif
+
+ if (n == SIZE_MAX) {
+ goto malloc_error;
+ }
+
+
+out:
+ mpd_del(&tsrc);
+ return n;
+
+malloc_error:
+ if (alloc) {
+ mpd_free(*rdata);
+ *rdata = NULL;
+ }
+ n = SIZE_MAX;
+ *status |= MPD_Malloc_error;
+ goto out;
+}
+
+
+/*
+ * Converts a multiprecision integer with base <= UINT16_MAX+1 to an mpd_t.
+ * The least significant word of the source is srcdata[0].
+ */
+void
+mpd_qimport_u16(mpd_t *result,
+ const uint16_t *srcdata, size_t srclen,
+ uint8_t srcsign, uint32_t srcbase,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_uint_t *usrc; /* uint16_t src copied to an mpd_uint_t array */
+ mpd_ssize_t rlen; /* length of the result */
+ size_t n;
+
+ assert(srclen > 0);
+ assert(srcbase <= (1U<<16));
+
+ rlen = _mpd_importsize(srclen, srcbase);
+ if (rlen == MPD_SSIZE_MAX) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ usrc = mpd_alloc((mpd_size_t)srclen, sizeof *usrc);
+ if (usrc == NULL) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ for (n = 0; n < srclen; n++) {
+ usrc[n] = srcdata[n];
+ }
+
+ if (!mpd_qresize(result, rlen, status)) {
+ goto finish;
+ }
+
+ n = _coeff_from_u16(result, rlen, usrc, srclen, srcbase, status);
+ if (n == SIZE_MAX) {
+ goto finish;
+ }
+
+ mpd_set_flags(result, srcsign);
+ result->exp = 0;
+ result->len = n;
+ mpd_setdigits(result);
+
+ mpd_qresize(result, result->len, status);
+ mpd_qfinalize(result, ctx, status);
+
+
+finish:
+ mpd_free(usrc);
+}
+
+/*
+ * Converts a multiprecision integer with base <= UINT32_MAX to an mpd_t.
+ * The least significant word of the source is srcdata[0].
+ */
+void
+mpd_qimport_u32(mpd_t *result,
+ const uint32_t *srcdata, size_t srclen,
+ uint8_t srcsign, uint32_t srcbase,
+ const mpd_context_t *ctx, uint32_t *status)
+{
+ mpd_ssize_t rlen; /* length of the result */
+ size_t n;
+
+ assert(srclen > 0);
+
+ rlen = _mpd_importsize(srclen, srcbase);
+ if (rlen == MPD_SSIZE_MAX) {
+ mpd_seterror(result, MPD_Invalid_operation, status);
+ return;
+ }
+
+ if (!mpd_qresize(result, rlen, status)) {
+ return;
+ }
+
+#ifdef CONFIG_64
+ n = _coeff_from_smaller_base(result, rlen, MPD_RADIX,
+ srcdata, srclen, srcbase,
+ status);
+#else
+ if (srcbase == MPD_RADIX) {
+ if (!mpd_qresize(result, srclen, status)) {
+ return;
+ }
+ memcpy(result->data, srcdata, srclen * (sizeof *srcdata));
+ n = srclen;
+ }
+ else if (srcbase < MPD_RADIX) {
+ n = _coeff_from_smaller_base(result, rlen, MPD_RADIX,
+ srcdata, srclen, srcbase,
+ status);
+ }
+ else {
+ mpd_uint_t *usrc = mpd_alloc((mpd_size_t)srclen, sizeof *usrc);
+ if (usrc == NULL) {
+ mpd_seterror(result, MPD_Malloc_error, status);
+ return;
+ }
+ for (n = 0; n < srclen; n++) {
+ usrc[n] = srcdata[n];
+ }
+
+ n = _coeff_from_larger_base(result, rlen, MPD_RADIX,
+ usrc, (mpd_ssize_t)srclen, srcbase,
+ status);
+ mpd_free(usrc);
+ }
+#endif
+
+ if (n == SIZE_MAX) {
+ return;
+ }
+
+ mpd_set_flags(result, srcsign);
+ result->exp = 0;
+ result->len = n;
+ mpd_setdigits(result);
+
+ mpd_qresize(result, result->len, status);
+ mpd_qfinalize(result, ctx, status);
+}
+
+
+
diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h
new file mode 100644
index 0000000000..b43231c4b8
--- /dev/null
+++ b/Modules/_decimal/libmpdec/mpdecimal.h
@@ -0,0 +1,847 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef MPDECIMAL_H
+#define MPDECIMAL_H
+
+
+#ifdef __cplusplus
+extern "C" {
+ #ifndef __STDC_LIMIT_MACROS
+ #define __STDC_LIMIT_MACROS
+ #define MPD_CLEAR_STDC_LIMIT_MACROS
+ #endif
+#endif
+
+
+#ifndef _MSC_VER
+ #include "pyconfig.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <assert.h>
+
+#ifdef _MSC_VER
+ #include "vccompat.h"
+ #ifndef UNUSED
+ #define UNUSED
+ #endif
+ #define MPD_PRAGMA(x)
+ #define MPD_HIDE_SYMBOLS_START
+ #define MPD_HIDE_SYMBOLS_END
+ #define EXTINLINE extern inline
+#else
+ #ifdef HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+ #ifdef HAVE_INTTYPES_H
+ #include <inttypes.h>
+ #endif
+ #ifndef __GNUC_STDC_INLINE__
+ #define __GNUC_STDC_INLINE__ 1
+ #endif
+ #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
+ #define UNUSED __attribute__((unused))
+ #else
+ #define UNUSED
+ #endif
+ #if (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) && \
+ defined(__GNUC__) && __GNUC__ >= 4 && !defined(__INTEL_COMPILER)
+ #define MPD_PRAGMA(x) _Pragma(x)
+ #define MPD_HIDE_SYMBOLS_START "GCC visibility push(hidden)"
+ #define MPD_HIDE_SYMBOLS_END "GCC visibility pop"
+ #else
+ #define MPD_PRAGMA(x)
+ #define MPD_HIDE_SYMBOLS_START
+ #define MPD_HIDE_SYMBOLS_END
+ #endif
+ #define EXTINLINE
+#endif
+
+
+/* This header file is internal for the purpose of building _decimal.so.
+ * All symbols should have local scope in the DSO. */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+#if !defined(LEGACY_COMPILER)
+ #if !defined(UINT64_MAX)
+ /* The following #error is just a warning. If the compiler indeed does
+ * not have uint64_t, it is perfectly safe to comment out the #error. */
+ #error "Warning: Compiler without uint64_t. Comment out this line."
+ #define LEGACY_COMPILER
+ #endif
+#endif
+
+
+/******************************************************************************/
+/* Version */
+/******************************************************************************/
+
+#define MPD_MAJOR_VERSION 2
+#define MPD_MINOR_VERSION 4
+#define MPD_MICRO_VERSION 0
+
+#define MPD_VERSION "2.4.0"
+
+const char *mpd_version(void);
+
+
+/******************************************************************************/
+/* Configuration */
+/******************************************************************************/
+
+#if defined(UNIVERSAL)
+ #if defined(CONFIG_64) || defined(CONFIG_32)
+ #error "cannot use CONFIG_64 or CONFIG_32 with UNIVERSAL."
+ #endif
+ #if defined(__ppc__)
+ #define CONFIG_32
+ #define ANSI
+ #elif defined(__ppc64__)
+ #define CONFIG_64
+ #define ANSI
+ #elif defined(__i386__)
+ #define CONFIG_32
+ #define ANSI
+ #elif defined(__x86_64__)
+ #define CONFIG_64
+ #define ASM
+ #else
+ #error "unknown architecture for universal build."
+ #endif
+#endif
+
+
+/* BEGIN CONFIG_64 */
+#if defined(CONFIG_64)
+/* types for modular and base arithmetic */
+#define MPD_UINT_MAX UINT64_MAX
+#define MPD_BITS_PER_UINT 64
+typedef uint64_t mpd_uint_t; /* unsigned mod type */
+
+#define MPD_SIZE_MAX SIZE_MAX
+typedef size_t mpd_size_t; /* unsigned size type */
+
+/* type for exp, digits, len, prec */
+#define MPD_SSIZE_MAX INT64_MAX
+#define MPD_SSIZE_MIN INT64_MIN
+typedef int64_t mpd_ssize_t;
+#define _mpd_strtossize strtoll
+
+/* decimal arithmetic */
+#define MPD_RADIX 10000000000000000000ULL /* 10**19 */
+#define MPD_RDIGITS 19
+#define MPD_MAX_POW10 19
+#define MPD_EXPDIGITS 19 /* MPD_EXPDIGITS <= MPD_RDIGITS+1 */
+
+#define MPD_MAXTRANSFORM_2N 4294967296ULL /* 2**32 */
+#define MPD_MAX_PREC 999999999999999999LL
+#define MPD_MAX_PREC_LOG2 64
+#define MPD_ELIMIT 1000000000000000000LL
+#define MPD_MAX_EMAX 999999999999999999LL /* ELIMIT-1 */
+#define MPD_MIN_EMIN (-999999999999999999LL) /* -EMAX */
+#define MPD_MIN_ETINY (MPD_MIN_EMIN-(MPD_MAX_PREC-1))
+#define MPD_EXP_INF 2000000000000000001LL
+#define MPD_EXP_CLAMP (-4000000000000000001LL)
+#define MPD_MAXIMPORT 105263157894736842L /* ceil((2*MPD_MAX_PREC)/MPD_RDIGITS) */
+
+/* conversion specifiers */
+#define PRI_mpd_uint_t PRIu64
+#define PRI_mpd_ssize_t PRIi64
+/* END CONFIG_64 */
+
+
+/* BEGIN CONFIG_32 */
+#elif defined(CONFIG_32)
+/* types for modular and base arithmetic */
+#define MPD_UINT_MAX UINT32_MAX
+#define MPD_BITS_PER_UINT 32
+typedef uint32_t mpd_uint_t; /* unsigned mod type */
+
+#ifndef LEGACY_COMPILER
+#define MPD_UUINT_MAX UINT64_MAX
+typedef uint64_t mpd_uuint_t; /* double width unsigned mod type */
+#endif
+
+#define MPD_SIZE_MAX SIZE_MAX
+typedef size_t mpd_size_t; /* unsigned size type */
+
+/* type for dec->len, dec->exp, ctx->prec */
+#define MPD_SSIZE_MAX INT32_MAX
+#define MPD_SSIZE_MIN INT32_MIN
+typedef int32_t mpd_ssize_t;
+#define _mpd_strtossize strtol
+
+/* decimal arithmetic */
+#define MPD_RADIX 1000000000UL /* 10**9 */
+#define MPD_RDIGITS 9
+#define MPD_MAX_POW10 9
+#define MPD_EXPDIGITS 10 /* MPD_EXPDIGITS <= MPD_RDIGITS+1 */
+
+#define MPD_MAXTRANSFORM_2N 33554432UL /* 2**25 */
+#define MPD_MAX_PREC 425000000L
+#define MPD_MAX_PREC_LOG2 32
+#define MPD_ELIMIT 425000001L
+#define MPD_MAX_EMAX 425000000L /* ELIMIT-1 */
+#define MPD_MIN_EMIN (-425000000L) /* -EMAX */
+#define MPD_MIN_ETINY (MPD_MIN_EMIN-(MPD_MAX_PREC-1))
+#define MPD_EXP_INF 1000000001L /* allows for emax=999999999 in the tests */
+#define MPD_EXP_CLAMP (-2000000001L) /* allows for emin=-999999999 in the tests */
+#define MPD_MAXIMPORT 94444445L /* ceil((2*MPD_MAX_PREC)/MPD_RDIGITS) */
+
+/* conversion specifiers */
+#define PRI_mpd_uint_t PRIu32
+#define PRI_mpd_ssize_t PRIi32
+/* END CONFIG_32 */
+
+#else
+ #error "define CONFIG_64 or CONFIG_32"
+#endif
+/* END CONFIG */
+
+
+#if MPD_SIZE_MAX != MPD_UINT_MAX
+ #error "unsupported platform: need mpd_size_t == mpd_uint_t"
+#endif
+
+
+/******************************************************************************/
+/* Context */
+/******************************************************************************/
+
+enum {
+ MPD_ROUND_UP, /* round away from 0 */
+ MPD_ROUND_DOWN, /* round toward 0 (truncate) */
+ MPD_ROUND_CEILING, /* round toward +infinity */
+ MPD_ROUND_FLOOR, /* round toward -infinity */
+ MPD_ROUND_HALF_UP, /* 0.5 is rounded up */
+ MPD_ROUND_HALF_DOWN, /* 0.5 is rounded down */
+ MPD_ROUND_HALF_EVEN, /* 0.5 is rounded to even */
+ MPD_ROUND_05UP, /* round zero or five away from 0 */
+ MPD_ROUND_TRUNC, /* truncate, but set infinity */
+ MPD_ROUND_GUARD
+};
+
+enum { MPD_CLAMP_DEFAULT, MPD_CLAMP_IEEE_754, MPD_CLAMP_GUARD };
+
+extern const char *mpd_round_string[MPD_ROUND_GUARD];
+extern const char *mpd_clamp_string[MPD_CLAMP_GUARD];
+
+
+typedef struct mpd_context_t {
+ mpd_ssize_t prec; /* precision */
+ mpd_ssize_t emax; /* max positive exp */
+ mpd_ssize_t emin; /* min negative exp */
+ uint32_t traps; /* status events that should be trapped */
+ uint32_t status; /* status flags */
+ uint32_t newtrap; /* set by mpd_addstatus_raise() */
+ int round; /* rounding mode */
+ int clamp; /* clamp mode */
+ int allcr; /* all functions correctly rounded */
+} mpd_context_t;
+
+
+/* Status flags */
+#define MPD_Clamped 0x00000001U
+#define MPD_Conversion_syntax 0x00000002U
+#define MPD_Division_by_zero 0x00000004U
+#define MPD_Division_impossible 0x00000008U
+#define MPD_Division_undefined 0x00000010U
+#define MPD_Fpu_error 0x00000020U
+#define MPD_Inexact 0x00000040U
+#define MPD_Invalid_context 0x00000080U
+#define MPD_Invalid_operation 0x00000100U
+#define MPD_Malloc_error 0x00000200U
+#define MPD_Not_implemented 0x00000400U
+#define MPD_Overflow 0x00000800U
+#define MPD_Rounded 0x00001000U
+#define MPD_Subnormal 0x00002000U
+#define MPD_Underflow 0x00004000U
+#define MPD_Max_status (0x00008000U-1U)
+
+/* Conditions that result in an IEEE 754 exception */
+#define MPD_IEEE_Invalid_operation (MPD_Conversion_syntax | \
+ MPD_Division_impossible | \
+ MPD_Division_undefined | \
+ MPD_Fpu_error | \
+ MPD_Invalid_context | \
+ MPD_Invalid_operation | \
+ MPD_Malloc_error) \
+
+/* Errors that require the result of an operation to be set to NaN */
+#define MPD_Errors (MPD_IEEE_Invalid_operation | \
+ MPD_Division_by_zero)
+
+/* Default traps */
+#define MPD_Traps (MPD_IEEE_Invalid_operation | \
+ MPD_Division_by_zero | \
+ MPD_Overflow | \
+ MPD_Underflow)
+
+/* Official name */
+#define MPD_Insufficient_storage MPD_Malloc_error
+
+/* IEEE 754 interchange format contexts */
+#define MPD_IEEE_CONTEXT_MAX_BITS 512 /* 16*(log2(MPD_MAX_EMAX / 3)-3) */
+#define MPD_DECIMAL32 32
+#define MPD_DECIMAL64 64
+#define MPD_DECIMAL128 128
+
+
+#define MPD_MINALLOC_MIN 2
+#define MPD_MINALLOC_MAX 64
+extern mpd_ssize_t MPD_MINALLOC;
+extern void (* mpd_traphandler)(mpd_context_t *);
+void mpd_dflt_traphandler(mpd_context_t *);
+
+void mpd_setminalloc(mpd_ssize_t n);
+void mpd_init(mpd_context_t *ctx, mpd_ssize_t prec);
+
+void mpd_maxcontext(mpd_context_t *ctx);
+void mpd_defaultcontext(mpd_context_t *ctx);
+void mpd_basiccontext(mpd_context_t *ctx);
+int mpd_ieee_context(mpd_context_t *ctx, int bits);
+
+mpd_ssize_t mpd_getprec(const mpd_context_t *ctx);
+mpd_ssize_t mpd_getemax(const mpd_context_t *ctx);
+mpd_ssize_t mpd_getemin(const mpd_context_t *ctx);
+int mpd_getround(const mpd_context_t *ctx);
+uint32_t mpd_gettraps(const mpd_context_t *ctx);
+uint32_t mpd_getstatus(const mpd_context_t *ctx);
+int mpd_getclamp(const mpd_context_t *ctx);
+int mpd_getcr(const mpd_context_t *ctx);
+
+int mpd_qsetprec(mpd_context_t *ctx, mpd_ssize_t prec);
+int mpd_qsetemax(mpd_context_t *ctx, mpd_ssize_t emax);
+int mpd_qsetemin(mpd_context_t *ctx, mpd_ssize_t emin);
+int mpd_qsetround(mpd_context_t *ctx, int newround);
+int mpd_qsettraps(mpd_context_t *ctx, uint32_t flags);
+int mpd_qsetstatus(mpd_context_t *ctx, uint32_t flags);
+int mpd_qsetclamp(mpd_context_t *ctx, int c);
+int mpd_qsetcr(mpd_context_t *ctx, int c);
+void mpd_addstatus_raise(mpd_context_t *ctx, uint32_t flags);
+
+
+/******************************************************************************/
+/* Decimal Arithmetic */
+/******************************************************************************/
+
+/* mpd_t flags */
+#define MPD_POS ((uint8_t)0)
+#define MPD_NEG ((uint8_t)1)
+#define MPD_INF ((uint8_t)2)
+#define MPD_NAN ((uint8_t)4)
+#define MPD_SNAN ((uint8_t)8)
+#define MPD_SPECIAL (MPD_INF|MPD_NAN|MPD_SNAN)
+#define MPD_STATIC ((uint8_t)16)
+#define MPD_STATIC_DATA ((uint8_t)32)
+#define MPD_SHARED_DATA ((uint8_t)64)
+#define MPD_CONST_DATA ((uint8_t)128)
+#define MPD_DATAFLAGS (MPD_STATIC_DATA|MPD_SHARED_DATA|MPD_CONST_DATA)
+
+/* mpd_t */
+typedef struct mpd_t {
+ uint8_t flags;
+ mpd_ssize_t exp;
+ mpd_ssize_t digits;
+ mpd_ssize_t len;
+ mpd_ssize_t alloc;
+ mpd_uint_t *data;
+} mpd_t;
+
+
+typedef unsigned char uchar;
+
+
+/******************************************************************************/
+/* Quiet, thread-safe functions */
+/******************************************************************************/
+
+/* format specification */
+typedef struct mpd_spec_t {
+ mpd_ssize_t min_width; /* minimum field width */
+ mpd_ssize_t prec; /* fraction digits or significant digits */
+ char type; /* conversion specifier */
+ char align; /* alignment */
+ char sign; /* sign printing/alignment */
+ char fill[5]; /* fill character */
+ const char *dot; /* decimal point */
+ const char *sep; /* thousands separator */
+ const char *grouping; /* grouping of digits */
+} mpd_spec_t;
+
+/* output to a string */
+char *mpd_to_sci(const mpd_t *dec, int fmt);
+char *mpd_to_eng(const mpd_t *dec, int fmt);
+mpd_ssize_t mpd_to_sci_size(char **res, const mpd_t *dec, int fmt);
+mpd_ssize_t mpd_to_eng_size(char **res, const mpd_t *dec, int fmt);
+int mpd_validate_lconv(mpd_spec_t *spec);
+int mpd_parse_fmt_str(mpd_spec_t *spec, const char *fmt, int caps);
+char *mpd_qformat_spec(const mpd_t *dec, const mpd_spec_t *spec, const mpd_context_t *ctx, uint32_t *status);
+char *mpd_qformat(const mpd_t *dec, const char *fmt, const mpd_context_t *ctx, uint32_t *status);
+
+#define MPD_NUM_FLAGS 15
+#define MPD_MAX_FLAG_STRING 208
+#define MPD_MAX_FLAG_LIST (MPD_MAX_FLAG_STRING+18)
+#define MPD_MAX_SIGNAL_LIST 121
+int mpd_snprint_flags(char *dest, int nmemb, uint32_t flags);
+int mpd_lsnprint_flags(char *dest, int nmemb, uint32_t flags, const char *flag_string[]);
+int mpd_lsnprint_signals(char *dest, int nmemb, uint32_t flags, const char *signal_string[]);
+
+/* output to a file */
+void mpd_fprint(FILE *file, const mpd_t *dec);
+void mpd_print(const mpd_t *dec);
+
+/* assignment from a string */
+void mpd_qset_string(mpd_t *dec, const char *s, const mpd_context_t *ctx, uint32_t *status);
+
+/* set to NaN with error flags */
+void mpd_seterror(mpd_t *result, uint32_t flags, uint32_t *status);
+/* set a special with sign and type */
+void mpd_setspecial(mpd_t *dec, uint8_t sign, uint8_t type);
+/* set coefficient to zero or all nines */
+void mpd_zerocoeff(mpd_t *result);
+void mpd_qmaxcoeff(mpd_t *result, const mpd_context_t *ctx, uint32_t *status);
+
+/* quietly assign a C integer type to an mpd_t */
+void mpd_qset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx, uint32_t *status);
+#ifndef LEGACY_COMPILER
+void mpd_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx, uint32_t *status);
+#endif
+
+/* quietly assign a C integer type to an mpd_t with a static coefficient */
+void mpd_qsset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx, uint32_t *status);
+
+/* quietly get a C integer type from an mpd_t */
+mpd_ssize_t mpd_qget_ssize(const mpd_t *dec, uint32_t *status);
+mpd_uint_t mpd_qget_uint(const mpd_t *dec, uint32_t *status);
+mpd_uint_t mpd_qabs_uint(const mpd_t *dec, uint32_t *status);
+
+int32_t mpd_qget_i32(const mpd_t *dec, uint32_t *status);
+uint32_t mpd_qget_u32(const mpd_t *dec, uint32_t *status);
+#ifndef LEGACY_COMPILER
+int64_t mpd_qget_i64(const mpd_t *dec, uint32_t *status);
+uint64_t mpd_qget_u64(const mpd_t *dec, uint32_t *status);
+#endif
+
+/* quiet functions */
+int mpd_qcheck_nan(mpd_t *nanresult, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+int mpd_qcheck_nans(mpd_t *nanresult, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qfinalize(mpd_t *result, const mpd_context_t *ctx, uint32_t *status);
+
+const char *mpd_class(const mpd_t *a, const mpd_context_t *ctx);
+
+int mpd_qcopy(mpd_t *result, const mpd_t *a, uint32_t *status);
+mpd_t *mpd_qncopy(const mpd_t *a);
+int mpd_qcopy_abs(mpd_t *result, const mpd_t *a, uint32_t *status);
+int mpd_qcopy_negate(mpd_t *result, const mpd_t *a, uint32_t *status);
+int mpd_qcopy_sign(mpd_t *result, const mpd_t *a, const mpd_t *b, uint32_t *status);
+
+void mpd_qand(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qinvert(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qlogb(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qor(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qscaleb(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qxor(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+int mpd_same_quantum(const mpd_t *a, const mpd_t *b);
+
+void mpd_qrotate(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+int mpd_qshiftl(mpd_t *result, const mpd_t *a, mpd_ssize_t n, uint32_t *status);
+mpd_uint_t mpd_qshiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n, uint32_t *status);
+mpd_uint_t mpd_qshiftr_inplace(mpd_t *result, mpd_ssize_t n);
+void mpd_qshift(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qshiftn(mpd_t *result, const mpd_t *a, mpd_ssize_t n, const mpd_context_t *ctx, uint32_t *status);
+
+int mpd_qcmp(const mpd_t *a, const mpd_t *b, uint32_t *status);
+int mpd_qcompare(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+int mpd_qcompare_signal(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+int mpd_cmp_total(const mpd_t *a, const mpd_t *b);
+int mpd_cmp_total_mag(const mpd_t *a, const mpd_t *b);
+int mpd_compare_total(mpd_t *result, const mpd_t *a, const mpd_t *b);
+int mpd_compare_total_mag(mpd_t *result, const mpd_t *a, const mpd_t *b);
+
+void mpd_qround_to_intx(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qround_to_int(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qtrunc(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qfloor(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qceil(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+
+void mpd_qabs(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmax(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmax_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmin(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmin_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qminus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qplus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qnext_minus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qnext_plus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qnext_toward(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qquantize(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qrescale(mpd_t *result, const mpd_t *a, mpd_ssize_t exp, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qrescale_fmt(mpd_t *result, const mpd_t *a, mpd_ssize_t exp, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qreduce(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd_i32(mpd_t *result, const mpd_t *a, int32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd_u32(mpd_t *result, const mpd_t *a, uint32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_i32(mpd_t *result, const mpd_t *a, int32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_u32(mpd_t *result, const mpd_t *a, uint32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_i32(mpd_t *result, const mpd_t *a, int32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_u32(mpd_t *result, const mpd_t *a, uint32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qfma(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_t *c, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv(mpd_t *q, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_i32(mpd_t *result, const mpd_t *a, int32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_u32(mpd_t *result, const mpd_t *a, uint32_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdivint(mpd_t *q, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qrem(mpd_t *r, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qrem_near(mpd_t *r, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdivmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qpow(mpd_t *result, const mpd_t *base, const mpd_t *exp, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qpowmod(mpd_t *result, const mpd_t *base, const mpd_t *exp, const mpd_t *mod, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qexp(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qln10(mpd_t *result, mpd_ssize_t prec, uint32_t *status);
+void mpd_qln(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qlog10(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qinvroot(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx, uint32_t *status);
+
+#ifndef LEGACY_COMPILER
+void mpd_qadd_i64(mpd_t *result, const mpd_t *a, int64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qadd_u64(mpd_t *result, const mpd_t *a, uint64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_i64(mpd_t *result, const mpd_t *a, int64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsub_u64(mpd_t *result, const mpd_t *a, uint64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_i64(mpd_t *result, const mpd_t *a, int64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qmul_u64(mpd_t *result, const mpd_t *a, uint64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_i64(mpd_t *result, const mpd_t *a, int64_t b, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qdiv_u64(mpd_t *result, const mpd_t *a, uint64_t b, const mpd_context_t *ctx, uint32_t *status);
+#endif
+
+
+size_t mpd_sizeinbase(const mpd_t *a, uint32_t base);
+void mpd_qimport_u16(mpd_t *result, const uint16_t *srcdata, size_t srclen,
+ uint8_t srcsign, uint32_t srcbase,
+ const mpd_context_t *ctx, uint32_t *status);
+void mpd_qimport_u32(mpd_t *result, const uint32_t *srcdata, size_t srclen,
+ uint8_t srcsign, uint32_t srcbase,
+ const mpd_context_t *ctx, uint32_t *status);
+size_t mpd_qexport_u16(uint16_t **rdata, size_t rlen, uint32_t base,
+ const mpd_t *src, uint32_t *status);
+size_t mpd_qexport_u32(uint32_t **rdata, size_t rlen, uint32_t base,
+ const mpd_t *src, uint32_t *status);
+
+
+/******************************************************************************/
+/* Signalling functions */
+/******************************************************************************/
+
+char *mpd_format(const mpd_t *dec, const char *fmt, mpd_context_t *ctx);
+void mpd_import_u16(mpd_t *result, const uint16_t *srcdata, size_t srclen, uint8_t srcsign, uint32_t base, mpd_context_t *ctx);
+void mpd_import_u32(mpd_t *result, const uint32_t *srcdata, size_t srclen, uint8_t srcsign, uint32_t base, mpd_context_t *ctx);
+size_t mpd_export_u16(uint16_t **rdata, size_t rlen, uint32_t base, const mpd_t *src, mpd_context_t *ctx);
+size_t mpd_export_u32(uint32_t **rdata, size_t rlen, uint32_t base, const mpd_t *src, mpd_context_t *ctx);
+void mpd_finalize(mpd_t *result, mpd_context_t *ctx);
+int mpd_check_nan(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+int mpd_check_nans(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_set_string(mpd_t *result, const char *s, mpd_context_t *ctx);
+void mpd_maxcoeff(mpd_t *result, mpd_context_t *ctx);
+void mpd_sset_ssize(mpd_t *result, mpd_ssize_t a, mpd_context_t *ctx);
+void mpd_sset_i32(mpd_t *result, int32_t a, mpd_context_t *ctx);
+void mpd_sset_uint(mpd_t *result, mpd_uint_t a, mpd_context_t *ctx);
+void mpd_sset_u32(mpd_t *result, uint32_t a, mpd_context_t *ctx);
+void mpd_set_ssize(mpd_t *result, mpd_ssize_t a, mpd_context_t *ctx);
+void mpd_set_i32(mpd_t *result, int32_t a, mpd_context_t *ctx);
+void mpd_set_uint(mpd_t *result, mpd_uint_t a, mpd_context_t *ctx);
+void mpd_set_u32(mpd_t *result, uint32_t a, mpd_context_t *ctx);
+#ifndef LEGACY_COMPILER
+void mpd_set_i64(mpd_t *result, int64_t a, mpd_context_t *ctx);
+void mpd_set_u64(mpd_t *result, uint64_t a, mpd_context_t *ctx);
+#endif
+mpd_ssize_t mpd_get_ssize(const mpd_t *a, mpd_context_t *ctx);
+mpd_uint_t mpd_get_uint(const mpd_t *a, mpd_context_t *ctx);
+mpd_uint_t mpd_abs_uint(const mpd_t *a, mpd_context_t *ctx);
+int32_t mpd_get_i32(const mpd_t *a, mpd_context_t *ctx);
+uint32_t mpd_get_u32(const mpd_t *a, mpd_context_t *ctx);
+#ifndef LEGACY_COMPILER
+int64_t mpd_get_i64(const mpd_t *a, mpd_context_t *ctx);
+uint64_t mpd_get_u64(const mpd_t *a, mpd_context_t *ctx);
+#endif
+void mpd_and(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_copy(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_canonical(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_copy_abs(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_copy_negate(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_copy_sign(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_invert(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_logb(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_or(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_rotate(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_scaleb(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_shiftl(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx);
+mpd_uint_t mpd_shiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx);
+void mpd_shiftn(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx);
+void mpd_shift(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_xor(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_abs(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+int mpd_cmp(const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+int mpd_compare(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+int mpd_compare_signal(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_add(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_add_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx);
+void mpd_add_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx);
+void mpd_add_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx);
+void mpd_add_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx);
+void mpd_sub(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_sub_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx);
+void mpd_sub_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx);
+void mpd_sub_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx);
+void mpd_sub_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx);
+void mpd_div(mpd_t *q, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_div_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx);
+void mpd_div_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx);
+void mpd_div_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx);
+void mpd_div_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx);
+void mpd_divmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_divint(mpd_t *q, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_exp(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_fma(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_t *c, mpd_context_t *ctx);
+void mpd_ln(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_log10(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_max(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_max_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_min(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_min_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_minus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_mul(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_mul_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx);
+void mpd_mul_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx);
+void mpd_mul_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx);
+void mpd_mul_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx);
+void mpd_next_minus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_next_plus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_next_toward(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_plus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_pow(mpd_t *result, const mpd_t *base, const mpd_t *exp, mpd_context_t *ctx);
+void mpd_powmod(mpd_t *result, const mpd_t *base, const mpd_t *exp, const mpd_t *mod, mpd_context_t *ctx);
+void mpd_quantize(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_rescale(mpd_t *result, const mpd_t *a, mpd_ssize_t exp, mpd_context_t *ctx);
+void mpd_reduce(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_rem(mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_rem_near(mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx);
+void mpd_round_to_intx(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_round_to_int(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_trunc(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_floor(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_ceil(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_sqrt(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+void mpd_invroot(mpd_t *result, const mpd_t *a, mpd_context_t *ctx);
+
+#ifndef LEGACY_COMPILER
+void mpd_add_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx);
+void mpd_add_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx);
+void mpd_sub_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx);
+void mpd_sub_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx);
+void mpd_div_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx);
+void mpd_div_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx);
+void mpd_mul_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx);
+void mpd_mul_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx);
+#endif
+
+
+/******************************************************************************/
+/* Configuration specific */
+/******************************************************************************/
+
+#ifdef CONFIG_64
+void mpd_qsset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qsset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_sset_i64(mpd_t *result, int64_t a, mpd_context_t *ctx);
+void mpd_sset_u64(mpd_t *result, uint64_t a, mpd_context_t *ctx);
+#endif
+
+
+/******************************************************************************/
+/* Get attributes of a decimal */
+/******************************************************************************/
+
+EXTINLINE mpd_ssize_t mpd_adjexp(const mpd_t *dec);
+EXTINLINE mpd_ssize_t mpd_etiny(const mpd_context_t *ctx);
+EXTINLINE mpd_ssize_t mpd_etop(const mpd_context_t *ctx);
+EXTINLINE mpd_uint_t mpd_msword(const mpd_t *dec);
+EXTINLINE int mpd_word_digits(mpd_uint_t word);
+/* most significant digit of a word */
+EXTINLINE mpd_uint_t mpd_msd(mpd_uint_t word);
+/* least significant digit of a word */
+EXTINLINE mpd_uint_t mpd_lsd(mpd_uint_t word);
+/* coefficient size needed to store 'digits' */
+EXTINLINE mpd_ssize_t mpd_digits_to_size(mpd_ssize_t digits);
+/* number of digits in the exponent, undefined for MPD_SSIZE_MIN */
+EXTINLINE int mpd_exp_digits(mpd_ssize_t exp);
+EXTINLINE int mpd_iscanonical(const mpd_t *dec UNUSED);
+EXTINLINE int mpd_isfinite(const mpd_t *dec);
+EXTINLINE int mpd_isinfinite(const mpd_t *dec);
+EXTINLINE int mpd_isinteger(const mpd_t *dec);
+EXTINLINE int mpd_isnan(const mpd_t *dec);
+EXTINLINE int mpd_isnegative(const mpd_t *dec);
+EXTINLINE int mpd_ispositive(const mpd_t *dec);
+EXTINLINE int mpd_isqnan(const mpd_t *dec);
+EXTINLINE int mpd_issigned(const mpd_t *dec);
+EXTINLINE int mpd_issnan(const mpd_t *dec);
+EXTINLINE int mpd_isspecial(const mpd_t *dec);
+EXTINLINE int mpd_iszero(const mpd_t *dec);
+/* undefined for special numbers */
+EXTINLINE int mpd_iszerocoeff(const mpd_t *dec);
+EXTINLINE int mpd_isnormal(const mpd_t *dec, const mpd_context_t *ctx);
+EXTINLINE int mpd_issubnormal(const mpd_t *dec, const mpd_context_t *ctx);
+/* odd word */
+EXTINLINE int mpd_isoddword(mpd_uint_t word);
+/* odd coefficient */
+EXTINLINE int mpd_isoddcoeff(const mpd_t *dec);
+/* odd decimal, only defined for integers */
+int mpd_isodd(const mpd_t *dec);
+/* even decimal, only defined for integers */
+int mpd_iseven(const mpd_t *dec);
+/* 0 if dec is positive, 1 if dec is negative */
+EXTINLINE uint8_t mpd_sign(const mpd_t *dec);
+/* 1 if dec is positive, -1 if dec is negative */
+EXTINLINE int mpd_arith_sign(const mpd_t *dec);
+EXTINLINE long mpd_radix(void);
+EXTINLINE int mpd_isdynamic(const mpd_t *dec);
+EXTINLINE int mpd_isstatic(const mpd_t *dec);
+EXTINLINE int mpd_isdynamic_data(const mpd_t *dec);
+EXTINLINE int mpd_isstatic_data(const mpd_t *dec);
+EXTINLINE int mpd_isshared_data(const mpd_t *dec);
+EXTINLINE int mpd_isconst_data(const mpd_t *dec);
+EXTINLINE mpd_ssize_t mpd_trail_zeros(const mpd_t *dec);
+
+
+/******************************************************************************/
+/* Set attributes of a decimal */
+/******************************************************************************/
+
+/* set number of decimal digits in the coefficient */
+EXTINLINE void mpd_setdigits(mpd_t *result);
+EXTINLINE void mpd_set_sign(mpd_t *result, uint8_t sign);
+/* copy sign from another decimal */
+EXTINLINE void mpd_signcpy(mpd_t *result, const mpd_t *a);
+EXTINLINE void mpd_set_infinity(mpd_t *result);
+EXTINLINE void mpd_set_qnan(mpd_t *result);
+EXTINLINE void mpd_set_snan(mpd_t *result);
+EXTINLINE void mpd_set_negative(mpd_t *result);
+EXTINLINE void mpd_set_positive(mpd_t *result);
+EXTINLINE void mpd_set_dynamic(mpd_t *result);
+EXTINLINE void mpd_set_static(mpd_t *result);
+EXTINLINE void mpd_set_dynamic_data(mpd_t *result);
+EXTINLINE void mpd_set_static_data(mpd_t *result);
+EXTINLINE void mpd_set_shared_data(mpd_t *result);
+EXTINLINE void mpd_set_const_data(mpd_t *result);
+EXTINLINE void mpd_clear_flags(mpd_t *result);
+EXTINLINE void mpd_set_flags(mpd_t *result, uint8_t flags);
+EXTINLINE void mpd_copy_flags(mpd_t *result, const mpd_t *a);
+
+
+/******************************************************************************/
+/* Error Macros */
+/******************************************************************************/
+
+#define mpd_err_fatal(...) \
+ do {fprintf(stderr, "%s:%d: error: ", __FILE__, __LINE__); \
+ fprintf(stderr, __VA_ARGS__); fputc('\n', stderr); \
+ abort(); \
+ } while (0)
+#define mpd_err_warn(...) \
+ do {fprintf(stderr, "%s:%d: warning: ", __FILE__, __LINE__); \
+ fprintf(stderr, __VA_ARGS__); fputc('\n', stderr); \
+ } while (0)
+
+
+/******************************************************************************/
+/* Memory handling */
+/******************************************************************************/
+
+extern void *(* mpd_mallocfunc)(size_t size);
+extern void *(* mpd_callocfunc)(size_t nmemb, size_t size);
+extern void *(* mpd_reallocfunc)(void *ptr, size_t size);
+extern void (* mpd_free)(void *ptr);
+
+void *mpd_callocfunc_em(size_t nmemb, size_t size);
+
+void *mpd_alloc(mpd_size_t nmemb, mpd_size_t size);
+void *mpd_calloc(mpd_size_t nmemb, mpd_size_t size);
+void *mpd_realloc(void *ptr, mpd_size_t nmemb, mpd_size_t size, uint8_t *err);
+void *mpd_sh_alloc(mpd_size_t struct_size, mpd_size_t nmemb, mpd_size_t size);
+
+mpd_t *mpd_qnew(void);
+mpd_t *mpd_new(mpd_context_t *ctx);
+mpd_t *mpd_qnew_size(mpd_ssize_t size);
+void mpd_del(mpd_t *dec);
+
+void mpd_uint_zero(mpd_uint_t *dest, mpd_size_t len);
+int mpd_qresize(mpd_t *result, mpd_ssize_t size, uint32_t *status);
+int mpd_qresize_zero(mpd_t *result, mpd_ssize_t size, uint32_t *status);
+void mpd_minalloc(mpd_t *result);
+
+int mpd_resize(mpd_t *result, mpd_ssize_t size, mpd_context_t *ctx);
+int mpd_resize_zero(mpd_t *result, mpd_ssize_t size, mpd_context_t *ctx);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#ifdef __cplusplus
+ #ifdef MPD_CLEAR_STDC_LIMIT_MACROS
+ #undef MPD_CLEAR_STDC_LIMIT_MACROS
+ #undef __STDC_LIMIT_MACROS
+ #endif
+} /* END extern "C" */
+#endif
+
+
+#endif /* MPDECIMAL_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/numbertheory.c b/Modules/_decimal/libmpdec/numbertheory.c
new file mode 100644
index 0000000000..4e035477e2
--- /dev/null
+++ b/Modules/_decimal/libmpdec/numbertheory.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdlib.h>
+#include <assert.h>
+#include "bits.h"
+#include "umodarith.h"
+#include "numbertheory.h"
+
+
+/* Bignum: Initialize the Number Theoretic Transform. */
+
+
+/*
+ * Return the nth root of unity in F(p). This corresponds to e**((2*pi*i)/n)
+ * in the Fourier transform. We have w**n == 1 (mod p).
+ * n := transform length.
+ * sign := -1 for forward transform, 1 for backward transform.
+ * modnum := one of {P1, P2, P3}.
+ */
+mpd_uint_t
+_mpd_getkernel(mpd_uint_t n, int sign, int modnum)
+{
+ mpd_uint_t umod, p, r, xi;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+
+ SETMODULUS(modnum);
+ r = mpd_roots[modnum]; /* primitive root of F(p) */
+ p = umod;
+ xi = (p-1) / n;
+
+ if (sign == -1)
+ return POWMOD(r, (p-1-xi));
+ else
+ return POWMOD(r, xi);
+}
+
+/*
+ * Initialize and return transform parameters.
+ * n := transform length.
+ * sign := -1 for forward transform, 1 for backward transform.
+ * modnum := one of {P1, P2, P3}.
+ */
+struct fnt_params *
+_mpd_init_fnt_params(mpd_size_t n, int sign, int modnum)
+{
+ struct fnt_params *tparams;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t kernel, w;
+ mpd_uint_t i;
+ mpd_size_t nhalf;
+
+ assert(ispower2(n));
+ assert(sign == -1 || sign == 1);
+ assert(P1 <= modnum && modnum <= P3);
+
+ nhalf = n/2;
+ tparams = mpd_sh_alloc(sizeof *tparams, nhalf, sizeof (mpd_uint_t));
+ if (tparams == NULL) {
+ return NULL;
+ }
+
+ SETMODULUS(modnum);
+ kernel = _mpd_getkernel(n, sign, modnum);
+
+ tparams->modnum = modnum;
+ tparams->modulus = umod;
+ tparams->kernel = kernel;
+
+ /* wtable[] := w**0, w**1, ..., w**(nhalf-1) */
+ w = 1;
+ for (i = 0; i < nhalf; i++) {
+ tparams->wtable[i] = w;
+ w = MULMOD(w, kernel);
+ }
+
+ return tparams;
+}
+
+/* Initialize wtable of size three. */
+void
+_mpd_init_w3table(mpd_uint_t w3table[3], int sign, int modnum)
+{
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t kernel;
+
+ SETMODULUS(modnum);
+ kernel = _mpd_getkernel(3, sign, modnum);
+
+ w3table[0] = 1;
+ w3table[1] = kernel;
+ w3table[2] = POWMOD(kernel, 2);
+}
+
+
diff --git a/Modules/_decimal/libmpdec/numbertheory.h b/Modules/_decimal/libmpdec/numbertheory.h
new file mode 100644
index 0000000000..e94c157910
--- /dev/null
+++ b/Modules/_decimal/libmpdec/numbertheory.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef NUMBER_THEORY_H
+#define NUMBER_THEORY_H
+
+
+#include "constants.h"
+#include "mpdecimal.h"
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+/* transform parameters */
+struct fnt_params {
+ int modnum;
+ mpd_uint_t modulus;
+ mpd_uint_t kernel;
+ mpd_uint_t wtable[];
+};
+
+
+mpd_uint_t _mpd_getkernel(mpd_uint_t n, int sign, int modnum);
+struct fnt_params *_mpd_init_fnt_params(mpd_size_t n, int sign, int modnum);
+void _mpd_init_w3table(mpd_uint_t w3table[3], int sign, int modnum);
+
+
+#ifdef PPRO
+static inline void
+ppro_setmodulus(int modnum, mpd_uint_t *umod, double *dmod, uint32_t dinvmod[3])
+{
+ *dmod = *umod = mpd_moduli[modnum];
+ dinvmod[0] = mpd_invmoduli[modnum][0];
+ dinvmod[1] = mpd_invmoduli[modnum][1];
+ dinvmod[2] = mpd_invmoduli[modnum][2];
+}
+#else
+static inline void
+std_setmodulus(int modnum, mpd_uint_t *umod)
+{
+ *umod = mpd_moduli[modnum];
+}
+#endif
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
+
+
diff --git a/Modules/_decimal/libmpdec/sixstep.c b/Modules/_decimal/libmpdec/sixstep.c
new file mode 100644
index 0000000000..92d513ebe1
--- /dev/null
+++ b/Modules/_decimal/libmpdec/sixstep.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "bits.h"
+#include "difradix2.h"
+#include "numbertheory.h"
+#include "transpose.h"
+#include "umodarith.h"
+#include "sixstep.h"
+
+
+/* Bignum: Cache efficient Matrix Fourier Transform for arrays of the
+ form 2**n (See literature/six-step.txt). */
+
+
+/* forward transform with sign = -1 */
+int
+six_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ struct fnt_params *tparams;
+ mpd_size_t log2n, C, R;
+ mpd_uint_t kernel;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t *x, w0, w1, wstep;
+ mpd_size_t i, k;
+
+
+ assert(ispower2(n));
+ assert(n >= 16);
+ assert(n <= MPD_MAXTRANSFORM_2N);
+
+ log2n = mpd_bsr(n);
+ C = ((mpd_size_t)1) << (log2n / 2); /* number of columns */
+ R = ((mpd_size_t)1) << (log2n - (log2n / 2)); /* number of rows */
+
+
+ /* Transpose the matrix. */
+ if (!transpose_pow2(a, R, C)) {
+ return 0;
+ }
+
+ /* Length R transform on the rows. */
+ if ((tparams = _mpd_init_fnt_params(R, -1, modnum)) == NULL) {
+ return 0;
+ }
+ for (x = a; x < a+n; x += R) {
+ fnt_dif2(x, R, tparams);
+ }
+
+ /* Transpose the matrix. */
+ if (!transpose_pow2(a, C, R)) {
+ mpd_free(tparams);
+ return 0;
+ }
+
+ /* Multiply each matrix element (addressed by i*C+k) by r**(i*k). */
+ SETMODULUS(modnum);
+ kernel = _mpd_getkernel(n, -1, modnum);
+ for (i = 1; i < R; i++) {
+ w0 = 1; /* r**(i*0): initial value for k=0 */
+ w1 = POWMOD(kernel, i); /* r**(i*1): initial value for k=1 */
+ wstep = MULMOD(w1, w1); /* r**(2*i) */
+ for (k = 0; k < C; k += 2) {
+ mpd_uint_t x0 = a[i*C+k];
+ mpd_uint_t x1 = a[i*C+k+1];
+ MULMOD2(&x0, w0, &x1, w1);
+ MULMOD2C(&w0, &w1, wstep); /* r**(i*(k+2)) = r**(i*k) * r**(2*i) */
+ a[i*C+k] = x0;
+ a[i*C+k+1] = x1;
+ }
+ }
+
+ /* Length C transform on the rows. */
+ if (C != R) {
+ mpd_free(tparams);
+ if ((tparams = _mpd_init_fnt_params(C, -1, modnum)) == NULL) {
+ return 0;
+ }
+ }
+ for (x = a; x < a+n; x += C) {
+ fnt_dif2(x, C, tparams);
+ }
+ mpd_free(tparams);
+
+#if 0
+ /* An unordered transform is sufficient for convolution. */
+ /* Transpose the matrix. */
+ if (!transpose_pow2(a, R, C)) {
+ return 0;
+ }
+#endif
+
+ return 1;
+}
+
+
+/* reverse transform, sign = 1 */
+int
+inv_six_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum)
+{
+ struct fnt_params *tparams;
+ mpd_size_t log2n, C, R;
+ mpd_uint_t kernel;
+ mpd_uint_t umod;
+#ifdef PPRO
+ double dmod;
+ uint32_t dinvmod[3];
+#endif
+ mpd_uint_t *x, w0, w1, wstep;
+ mpd_size_t i, k;
+
+
+ assert(ispower2(n));
+ assert(n >= 16);
+ assert(n <= MPD_MAXTRANSFORM_2N);
+
+ log2n = mpd_bsr(n);
+ C = ((mpd_size_t)1) << (log2n / 2); /* number of columns */
+ R = ((mpd_size_t)1) << (log2n - (log2n / 2)); /* number of rows */
+
+
+#if 0
+ /* An unordered transform is sufficient for convolution. */
+ /* Transpose the matrix, producing an R*C matrix. */
+ if (!transpose_pow2(a, C, R)) {
+ return 0;
+ }
+#endif
+
+ /* Length C transform on the rows. */
+ if ((tparams = _mpd_init_fnt_params(C, 1, modnum)) == NULL) {
+ return 0;
+ }
+ for (x = a; x < a+n; x += C) {
+ fnt_dif2(x, C, tparams);
+ }
+
+ /* Multiply each matrix element (addressed by i*C+k) by r**(i*k). */
+ SETMODULUS(modnum);
+ kernel = _mpd_getkernel(n, 1, modnum);
+ for (i = 1; i < R; i++) {
+ w0 = 1;
+ w1 = POWMOD(kernel, i);
+ wstep = MULMOD(w1, w1);
+ for (k = 0; k < C; k += 2) {
+ mpd_uint_t x0 = a[i*C+k];
+ mpd_uint_t x1 = a[i*C+k+1];
+ MULMOD2(&x0, w0, &x1, w1);
+ MULMOD2C(&w0, &w1, wstep);
+ a[i*C+k] = x0;
+ a[i*C+k+1] = x1;
+ }
+ }
+
+ /* Transpose the matrix. */
+ if (!transpose_pow2(a, R, C)) {
+ mpd_free(tparams);
+ return 0;
+ }
+
+ /* Length R transform on the rows. */
+ if (R != C) {
+ mpd_free(tparams);
+ if ((tparams = _mpd_init_fnt_params(R, 1, modnum)) == NULL) {
+ return 0;
+ }
+ }
+ for (x = a; x < a+n; x += R) {
+ fnt_dif2(x, R, tparams);
+ }
+ mpd_free(tparams);
+
+ /* Transpose the matrix. */
+ if (!transpose_pow2(a, C, R)) {
+ return 0;
+ }
+
+ return 1;
+}
+
+
diff --git a/Modules/_decimal/libmpdec/sixstep.h b/Modules/_decimal/libmpdec/sixstep.h
new file mode 100644
index 0000000000..4a8b015e3a
--- /dev/null
+++ b/Modules/_decimal/libmpdec/sixstep.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef SIX_STEP_H
+#define SIX_STEP_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+int six_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum);
+int inv_six_step_fnt(mpd_uint_t *a, mpd_size_t n, int modnum);
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/transpose.c b/Modules/_decimal/libmpdec/transpose.c
new file mode 100644
index 0000000000..55d6d89922
--- /dev/null
+++ b/Modules/_decimal/libmpdec/transpose.c
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <assert.h>
+#include "bits.h"
+#include "constants.h"
+#include "typearith.h"
+#include "transpose.h"
+
+
+#define BUFSIZE 4096
+#define SIDE 128
+
+
+/* Bignum: The transpose functions are used for very large transforms
+ in sixstep.c and fourstep.c. */
+
+
+/* Definition of the matrix transpose */
+void
+std_trans(mpd_uint_t dest[], mpd_uint_t src[], mpd_size_t rows, mpd_size_t cols)
+{
+ mpd_size_t idest, isrc;
+ mpd_size_t r, c;
+
+ for (r = 0; r < rows; r++) {
+ isrc = r * cols;
+ idest = r;
+ for (c = 0; c < cols; c++) {
+ dest[idest] = src[isrc];
+ isrc += 1;
+ idest += rows;
+ }
+ }
+}
+
+/*
+ * Swap half-rows of 2^n * (2*2^n) matrix.
+ * FORWARD_CYCLE: even/odd permutation of the halfrows.
+ * BACKWARD_CYCLE: reverse the even/odd permutation.
+ */
+static int
+swap_halfrows_pow2(mpd_uint_t *matrix, mpd_size_t rows, mpd_size_t cols, int dir)
+{
+ mpd_uint_t buf1[BUFSIZE];
+ mpd_uint_t buf2[BUFSIZE];
+ mpd_uint_t *readbuf, *writebuf, *hp;
+ mpd_size_t *done, dbits;
+ mpd_size_t b = BUFSIZE, stride;
+ mpd_size_t hn, hmax; /* halfrow number */
+ mpd_size_t m, r=0;
+ mpd_size_t offset;
+ mpd_size_t next;
+
+
+ assert(cols == mul_size_t(2, rows));
+
+ if (dir == FORWARD_CYCLE) {
+ r = rows;
+ }
+ else if (dir == BACKWARD_CYCLE) {
+ r = 2;
+ }
+ else {
+ abort(); /* GCOV_NOT_REACHED */
+ }
+
+ m = cols - 1;
+ hmax = rows; /* cycles start at odd halfrows */
+ dbits = 8 * sizeof *done;
+ if ((done = mpd_calloc(hmax/(sizeof *done) + 1, sizeof *done)) == NULL) {
+ return 0;
+ }
+
+ for (hn = 1; hn <= hmax; hn += 2) {
+
+ if (done[hn/dbits] & mpd_bits[hn%dbits]) {
+ continue;
+ }
+
+ readbuf = buf1; writebuf = buf2;
+
+ for (offset = 0; offset < cols/2; offset += b) {
+
+ stride = (offset + b < cols/2) ? b : cols/2-offset;
+
+ hp = matrix + hn*cols/2;
+ memcpy(readbuf, hp+offset, stride*(sizeof *readbuf));
+ pointerswap(&readbuf, &writebuf);
+
+ next = mulmod_size_t(hn, r, m);
+ hp = matrix + next*cols/2;
+
+ while (next != hn) {
+
+ memcpy(readbuf, hp+offset, stride*(sizeof *readbuf));
+ memcpy(hp+offset, writebuf, stride*(sizeof *writebuf));
+ pointerswap(&readbuf, &writebuf);
+
+ done[next/dbits] |= mpd_bits[next%dbits];
+
+ next = mulmod_size_t(next, r, m);
+ hp = matrix + next*cols/2;
+
+ }
+
+ memcpy(hp+offset, writebuf, stride*(sizeof *writebuf));
+
+ done[hn/dbits] |= mpd_bits[hn%dbits];
+ }
+ }
+
+ mpd_free(done);
+ return 1;
+}
+
+/* In-place transpose of a square matrix */
+static inline void
+squaretrans(mpd_uint_t *buf, mpd_size_t cols)
+{
+ mpd_uint_t tmp;
+ mpd_size_t idest, isrc;
+ mpd_size_t r, c;
+
+ for (r = 0; r < cols; r++) {
+ c = r+1;
+ isrc = r*cols + c;
+ idest = c*cols + r;
+ for (c = r+1; c < cols; c++) {
+ tmp = buf[isrc];
+ buf[isrc] = buf[idest];
+ buf[idest] = tmp;
+ isrc += 1;
+ idest += cols;
+ }
+ }
+}
+
+/*
+ * Transpose 2^n * 2^n matrix. For cache efficiency, the matrix is split into
+ * square blocks with side length 'SIDE'. First, the blocks are transposed,
+ * then a square transposition is done on each individual block.
+ */
+static void
+squaretrans_pow2(mpd_uint_t *matrix, mpd_size_t size)
+{
+ mpd_uint_t buf1[SIDE*SIDE];
+ mpd_uint_t buf2[SIDE*SIDE];
+ mpd_uint_t *to, *from;
+ mpd_size_t b = size;
+ mpd_size_t r, c;
+ mpd_size_t i;
+
+ while (b > SIDE) b >>= 1;
+
+ for (r = 0; r < size; r += b) {
+
+ for (c = r; c < size; c += b) {
+
+ from = matrix + r*size + c;
+ to = buf1;
+ for (i = 0; i < b; i++) {
+ memcpy(to, from, b*(sizeof *to));
+ from += size;
+ to += b;
+ }
+ squaretrans(buf1, b);
+
+ if (r == c) {
+ to = matrix + r*size + c;
+ from = buf1;
+ for (i = 0; i < b; i++) {
+ memcpy(to, from, b*(sizeof *to));
+ from += b;
+ to += size;
+ }
+ continue;
+ }
+ else {
+ from = matrix + c*size + r;
+ to = buf2;
+ for (i = 0; i < b; i++) {
+ memcpy(to, from, b*(sizeof *to));
+ from += size;
+ to += b;
+ }
+ squaretrans(buf2, b);
+
+ to = matrix + c*size + r;
+ from = buf1;
+ for (i = 0; i < b; i++) {
+ memcpy(to, from, b*(sizeof *to));
+ from += b;
+ to += size;
+ }
+
+ to = matrix + r*size + c;
+ from = buf2;
+ for (i = 0; i < b; i++) {
+ memcpy(to, from, b*(sizeof *to));
+ from += b;
+ to += size;
+ }
+ }
+ }
+ }
+
+}
+
+/*
+ * In-place transposition of a 2^n x 2^n or a 2^n x (2*2^n)
+ * or a (2*2^n) x 2^n matrix.
+ */
+int
+transpose_pow2(mpd_uint_t *matrix, mpd_size_t rows, mpd_size_t cols)
+{
+ mpd_size_t size = mul_size_t(rows, cols);
+
+ assert(ispower2(rows));
+ assert(ispower2(cols));
+
+ if (cols == rows) {
+ squaretrans_pow2(matrix, rows);
+ }
+ else if (cols == mul_size_t(2, rows)) {
+ if (!swap_halfrows_pow2(matrix, rows, cols, FORWARD_CYCLE)) {
+ return 0;
+ }
+ squaretrans_pow2(matrix, rows);
+ squaretrans_pow2(matrix+(size/2), rows);
+ }
+ else if (rows == mul_size_t(2, cols)) {
+ squaretrans_pow2(matrix, cols);
+ squaretrans_pow2(matrix+(size/2), cols);
+ if (!swap_halfrows_pow2(matrix, cols, rows, BACKWARD_CYCLE)) {
+ return 0;
+ }
+ }
+ else {
+ abort(); /* GCOV_NOT_REACHED */
+ }
+
+ return 1;
+}
+
+
diff --git a/Modules/_decimal/libmpdec/transpose.h b/Modules/_decimal/libmpdec/transpose.h
new file mode 100644
index 0000000000..e1cd1fa17d
--- /dev/null
+++ b/Modules/_decimal/libmpdec/transpose.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef TRANSPOSE_H
+#define TRANSPOSE_H
+
+
+#include "mpdecimal.h"
+#include <stdio.h>
+
+
+/* Internal header file: all symbols have local scope in the DSO */
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
+
+
+enum {FORWARD_CYCLE, BACKWARD_CYCLE};
+
+
+void std_trans(mpd_uint_t dest[], mpd_uint_t src[], mpd_size_t rows, mpd_size_t cols);
+int transpose_pow2(mpd_uint_t *matrix, mpd_size_t rows, mpd_size_t cols);
+void transpose_3xpow2(mpd_uint_t *matrix, mpd_size_t rows, mpd_size_t cols);
+
+
+static inline void pointerswap(mpd_uint_t **a, mpd_uint_t **b)
+{
+ mpd_uint_t *tmp;
+
+ tmp = *b;
+ *b = *a;
+ *a = tmp;
+}
+
+
+MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
+
+
+#endif
diff --git a/Modules/_decimal/libmpdec/typearith.h b/Modules/_decimal/libmpdec/typearith.h
new file mode 100644
index 0000000000..405237dac5
--- /dev/null
+++ b/Modules/_decimal/libmpdec/typearith.h
@@ -0,0 +1,669 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef TYPEARITH_H
+#define TYPEARITH_H
+
+
+#include "mpdecimal.h"
+
+
+/*****************************************************************************/
+/* Low level native arithmetic on basic types */
+/*****************************************************************************/
+
+
+/** ------------------------------------------------------------
+ ** Double width multiplication and division
+ ** ------------------------------------------------------------
+ */
+
+#if defined(CONFIG_64)
+#if defined(ANSI)
+#if defined(HAVE_UINT128_T)
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ __uint128_t hl;
+
+ hl = (__uint128_t)a * b;
+
+ *hi = hl >> 64;
+ *lo = (mpd_uint_t)hl;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d)
+{
+ __uint128_t hl;
+
+ hl = ((__uint128_t)hi<<64) + lo;
+ *q = (mpd_uint_t)(hl / d); /* quotient is known to fit */
+ *r = (mpd_uint_t)(hl - (__uint128_t)(*q) * d);
+}
+#else
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ uint32_t w[4], carry;
+ uint32_t ah, al, bh, bl;
+ uint64_t hl;
+
+ ah = (uint32_t)(a>>32); al = (uint32_t)a;
+ bh = (uint32_t)(b>>32); bl = (uint32_t)b;
+
+ hl = (uint64_t)al * bl;
+ w[0] = (uint32_t)hl;
+ carry = (uint32_t)(hl>>32);
+
+ hl = (uint64_t)ah * bl + carry;
+ w[1] = (uint32_t)hl;
+ w[2] = (uint32_t)(hl>>32);
+
+ hl = (uint64_t)al * bh + w[1];
+ w[1] = (uint32_t)hl;
+ carry = (uint32_t)(hl>>32);
+
+ hl = ((uint64_t)ah * bh + w[2]) + carry;
+ w[2] = (uint32_t)hl;
+ w[3] = (uint32_t)(hl>>32);
+
+ *hi = ((uint64_t)w[3]<<32) + w[2];
+ *lo = ((uint64_t)w[1]<<32) + w[0];
+}
+
+/*
+ * By Henry S. Warren: http://www.hackersdelight.org/HDcode/divlu.c.txt
+ * http://www.hackersdelight.org/permissions.htm:
+ * "You are free to use, copy, and distribute any of the code on this web
+ * site, whether modified by you or not. You need not give attribution."
+ *
+ * Slightly modified, comments are mine.
+ */
+static inline int
+nlz(uint64_t x)
+{
+ int n;
+
+ if (x == 0) return(64);
+
+ n = 0;
+ if (x <= 0x00000000FFFFFFFF) {n = n +32; x = x <<32;}
+ if (x <= 0x0000FFFFFFFFFFFF) {n = n +16; x = x <<16;}
+ if (x <= 0x00FFFFFFFFFFFFFF) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFFFFFFFFFF) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFFFFFFFFFF) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFFFFFFFFFF) {n = n + 1;}
+
+ return n;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t u1, mpd_uint_t u0,
+ mpd_uint_t v)
+{
+ const mpd_uint_t b = 4294967296;
+ mpd_uint_t un1, un0,
+ vn1, vn0,
+ q1, q0,
+ un32, un21, un10,
+ rhat, t;
+ int s;
+
+ assert(u1 < v);
+
+ s = nlz(v);
+ v = v << s;
+ vn1 = v >> 32;
+ vn0 = v & 0xFFFFFFFF;
+
+ t = (s == 0) ? 0 : u0 >> (64 - s);
+ un32 = (u1 << s) | t;
+ un10 = u0 << s;
+
+ un1 = un10 >> 32;
+ un0 = un10 & 0xFFFFFFFF;
+
+ q1 = un32 / vn1;
+ rhat = un32 - q1*vn1;
+again1:
+ if (q1 >= b || q1*vn0 > b*rhat + un1) {
+ q1 = q1 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again1;
+ }
+
+ /*
+ * Before again1 we had:
+ * (1) q1*vn1 + rhat = un32
+ * (2) q1*vn1*b + rhat*b + un1 = un32*b + un1
+ *
+ * The statements inside the if-clause do not change the value
+ * of the left-hand side of (2), and the loop is only exited
+ * if q1*vn0 <= rhat*b + un1, so:
+ *
+ * (3) q1*vn1*b + q1*vn0 <= un32*b + un1
+ * (4) q1*v <= un32*b + un1
+ * (5) 0 <= un32*b + un1 - q1*v
+ *
+ * By (5) we are certain that the possible add-back step from
+ * Knuth's algorithm D is never required.
+ *
+ * Since the final quotient is less than 2**64, the following
+ * must be true:
+ *
+ * (6) un32*b + un1 - q1*v <= UINT64_MAX
+ *
+ * This means that in the following line, the high words
+ * of un32*b and q1*v can be discarded without any effect
+ * on the result.
+ */
+ un21 = un32*b + un1 - q1*v;
+
+ q0 = un21 / vn1;
+ rhat = un21 - q0*vn1;
+again2:
+ if (q0 >= b || q0*vn0 > b*rhat + un0) {
+ q0 = q0 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again2;
+ }
+
+ *q = q1*b + q0;
+ *r = (un21*b + un0 - q0*v) >> s;
+}
+#endif
+
+/* END ANSI */
+#elif defined(ASM)
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ mpd_uint_t h, l;
+
+ __asm__ ( "mulq %3\n\t"
+ : "=d" (h), "=a" (l)
+ : "%a" (a), "rm" (b)
+ : "cc"
+ );
+
+ *hi = h;
+ *lo = l;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d)
+{
+ mpd_uint_t qq, rr;
+
+ __asm__ ( "divq %4\n\t"
+ : "=a" (qq), "=d" (rr)
+ : "a" (lo), "d" (hi), "rm" (d)
+ : "cc"
+ );
+
+ *q = qq;
+ *r = rr;
+}
+/* END GCC ASM */
+#elif defined(MASM)
+#include <intrin.h>
+#pragma intrinsic(_umul128)
+
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ *lo = _umul128(a, b, hi);
+}
+
+void _mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d);
+
+/* END MASM (_MSC_VER) */
+#else
+ #error "need platform specific 128 bit multiplication and division"
+#endif
+
+#define DIVMOD(q, r, v, d) *q = v / d; *r = v - *q * d
+static inline void
+_mpd_divmod_pow10(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t v, mpd_uint_t exp)
+{
+ assert(exp <= 19);
+
+ if (exp <= 9) {
+ if (exp <= 4) {
+ switch (exp) {
+ case 0: *q = v; *r = 0; break;
+ case 1: DIVMOD(q, r, v, 10UL); break;
+ case 2: DIVMOD(q, r, v, 100UL); break;
+ case 3: DIVMOD(q, r, v, 1000UL); break;
+ case 4: DIVMOD(q, r, v, 10000UL); break;
+ }
+ }
+ else {
+ switch (exp) {
+ case 5: DIVMOD(q, r, v, 100000UL); break;
+ case 6: DIVMOD(q, r, v, 1000000UL); break;
+ case 7: DIVMOD(q, r, v, 10000000UL); break;
+ case 8: DIVMOD(q, r, v, 100000000UL); break;
+ case 9: DIVMOD(q, r, v, 1000000000UL); break;
+ }
+ }
+ }
+ else {
+ if (exp <= 14) {
+ switch (exp) {
+ case 10: DIVMOD(q, r, v, 10000000000ULL); break;
+ case 11: DIVMOD(q, r, v, 100000000000ULL); break;
+ case 12: DIVMOD(q, r, v, 1000000000000ULL); break;
+ case 13: DIVMOD(q, r, v, 10000000000000ULL); break;
+ case 14: DIVMOD(q, r, v, 100000000000000ULL); break;
+ }
+ }
+ else {
+ switch (exp) {
+ case 15: DIVMOD(q, r, v, 1000000000000000ULL); break;
+ case 16: DIVMOD(q, r, v, 10000000000000000ULL); break;
+ case 17: DIVMOD(q, r, v, 100000000000000000ULL); break;
+ case 18: DIVMOD(q, r, v, 1000000000000000000ULL); break;
+ case 19: DIVMOD(q, r, v, 10000000000000000000ULL); break; /* GCOV_NOT_REACHED */
+ }
+ }
+ }
+}
+
+/* END CONFIG_64 */
+#elif defined(CONFIG_32)
+#if defined(ANSI)
+#if !defined(LEGACY_COMPILER)
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ mpd_uuint_t hl;
+
+ hl = (mpd_uuint_t)a * b;
+
+ *hi = hl >> 32;
+ *lo = (mpd_uint_t)hl;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d)
+{
+ mpd_uuint_t hl;
+
+ hl = ((mpd_uuint_t)hi<<32) + lo;
+ *q = (mpd_uint_t)(hl / d); /* quotient is known to fit */
+ *r = (mpd_uint_t)(hl - (mpd_uuint_t)(*q) * d);
+}
+/* END ANSI + uint64_t */
+#else
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ uint16_t w[4], carry;
+ uint16_t ah, al, bh, bl;
+ uint32_t hl;
+
+ ah = (uint16_t)(a>>16); al = (uint16_t)a;
+ bh = (uint16_t)(b>>16); bl = (uint16_t)b;
+
+ hl = (uint32_t)al * bl;
+ w[0] = (uint16_t)hl;
+ carry = (uint16_t)(hl>>16);
+
+ hl = (uint32_t)ah * bl + carry;
+ w[1] = (uint16_t)hl;
+ w[2] = (uint16_t)(hl>>16);
+
+ hl = (uint32_t)al * bh + w[1];
+ w[1] = (uint16_t)hl;
+ carry = (uint16_t)(hl>>16);
+
+ hl = ((uint32_t)ah * bh + w[2]) + carry;
+ w[2] = (uint16_t)hl;
+ w[3] = (uint16_t)(hl>>16);
+
+ *hi = ((uint32_t)w[3]<<16) + w[2];
+ *lo = ((uint32_t)w[1]<<16) + w[0];
+}
+
+/*
+ * By Henry S. Warren: http://www.hackersdelight.org/HDcode/divlu.c.txt
+ * http://www.hackersdelight.org/permissions.htm:
+ * "You are free to use, copy, and distribute any of the code on this web
+ * site, whether modified by you or not. You need not give attribution."
+ *
+ * Slightly modified, comments are mine.
+ */
+static inline int
+nlz(uint32_t x)
+{
+ int n;
+
+ if (x == 0) return(32);
+
+ n = 0;
+ if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}
+ if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFF) {n = n + 1;}
+
+ return n;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t u1, mpd_uint_t u0,
+ mpd_uint_t v)
+{
+ const mpd_uint_t b = 65536;
+ mpd_uint_t un1, un0,
+ vn1, vn0,
+ q1, q0,
+ un32, un21, un10,
+ rhat, t;
+ int s;
+
+ assert(u1 < v);
+
+ s = nlz(v);
+ v = v << s;
+ vn1 = v >> 16;
+ vn0 = v & 0xFFFF;
+
+ t = (s == 0) ? 0 : u0 >> (32 - s);
+ un32 = (u1 << s) | t;
+ un10 = u0 << s;
+
+ un1 = un10 >> 16;
+ un0 = un10 & 0xFFFF;
+
+ q1 = un32 / vn1;
+ rhat = un32 - q1*vn1;
+again1:
+ if (q1 >= b || q1*vn0 > b*rhat + un1) {
+ q1 = q1 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again1;
+ }
+
+ /*
+ * Before again1 we had:
+ * (1) q1*vn1 + rhat = un32
+ * (2) q1*vn1*b + rhat*b + un1 = un32*b + un1
+ *
+ * The statements inside the if-clause do not change the value
+ * of the left-hand side of (2), and the loop is only exited
+ * if q1*vn0 <= rhat*b + un1, so:
+ *
+ * (3) q1*vn1*b + q1*vn0 <= un32*b + un1
+ * (4) q1*v <= un32*b + un1
+ * (5) 0 <= un32*b + un1 - q1*v
+ *
+ * By (5) we are certain that the possible add-back step from
+ * Knuth's algorithm D is never required.
+ *
+ * Since the final quotient is less than 2**32, the following
+ * must be true:
+ *
+ * (6) un32*b + un1 - q1*v <= UINT32_MAX
+ *
+ * This means that in the following line, the high words
+ * of un32*b and q1*v can be discarded without any effect
+ * on the result.
+ */
+ un21 = un32*b + un1 - q1*v;
+
+ q0 = un21 / vn1;
+ rhat = un21 - q0*vn1;
+again2:
+ if (q0 >= b || q0*vn0 > b*rhat + un0) {
+ q0 = q0 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again2;
+ }
+
+ *q = q1*b + q0;
+ *r = (un21*b + un0 - q0*v) >> s;
+}
+#endif /* END ANSI + LEGACY_COMPILER */
+
+/* END ANSI */
+#elif defined(ASM)
+static inline void
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ mpd_uint_t h, l;
+
+ __asm__ ( "mull %3\n\t"
+ : "=d" (h), "=a" (l)
+ : "%a" (a), "rm" (b)
+ : "cc"
+ );
+
+ *hi = h;
+ *lo = l;
+}
+
+static inline void
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d)
+{
+ mpd_uint_t qq, rr;
+
+ __asm__ ( "divl %4\n\t"
+ : "=a" (qq), "=d" (rr)
+ : "a" (lo), "d" (hi), "rm" (d)
+ : "cc"
+ );
+
+ *q = qq;
+ *r = rr;
+}
+/* END GCC ASM */
+#elif defined(MASM)
+static inline void __cdecl
+_mpd_mul_words(mpd_uint_t *hi, mpd_uint_t *lo, mpd_uint_t a, mpd_uint_t b)
+{
+ mpd_uint_t h, l;
+
+ __asm {
+ mov eax, a
+ mul b
+ mov h, edx
+ mov l, eax
+ }
+
+ *hi = h;
+ *lo = l;
+}
+
+static inline void __cdecl
+_mpd_div_words(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t hi, mpd_uint_t lo,
+ mpd_uint_t d)
+{
+ mpd_uint_t qq, rr;
+
+ __asm {
+ mov eax, lo
+ mov edx, hi
+ div d
+ mov qq, eax
+ mov rr, edx
+ }
+
+ *q = qq;
+ *r = rr;
+}
+/* END MASM (_MSC_VER) */
+#else
+ #error "need platform specific 64 bit multiplication and division"
+#endif
+
+#define DIVMOD(q, r, v, d) *q = v / d; *r = v - *q * d
+static inline void
+_mpd_divmod_pow10(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t v, mpd_uint_t exp)
+{
+ assert(exp <= 9);
+
+ if (exp <= 4) {
+ switch (exp) {
+ case 0: *q = v; *r = 0; break;
+ case 1: DIVMOD(q, r, v, 10UL); break;
+ case 2: DIVMOD(q, r, v, 100UL); break;
+ case 3: DIVMOD(q, r, v, 1000UL); break;
+ case 4: DIVMOD(q, r, v, 10000UL); break;
+ }
+ }
+ else {
+ switch (exp) {
+ case 5: DIVMOD(q, r, v, 100000UL); break;
+ case 6: DIVMOD(q, r, v, 1000000UL); break;
+ case 7: DIVMOD(q, r, v, 10000000UL); break;
+ case 8: DIVMOD(q, r, v, 100000000UL); break;
+ case 9: DIVMOD(q, r, v, 1000000000UL); break; /* GCOV_NOT_REACHED */
+ }
+ }
+}
+/* END CONFIG_32 */
+
+/* NO CONFIG */
+#else
+ #error "define CONFIG_64 or CONFIG_32"
+#endif /* CONFIG */
+
+
+static inline void
+_mpd_div_word(mpd_uint_t *q, mpd_uint_t *r, mpd_uint_t v, mpd_uint_t d)
+{
+ *q = v / d;
+ *r = v - *q * d;
+}
+
+static inline void
+_mpd_idiv_word(mpd_ssize_t *q, mpd_ssize_t *r, mpd_ssize_t v, mpd_ssize_t d)
+{
+ *q = v / d;
+ *r = v - *q * d;
+}
+
+
+/** ------------------------------------------------------------
+ ** Arithmetic with overflow checking
+ ** ------------------------------------------------------------
+ */
+
+/* The following macros do call exit() in case of an overflow.
+ If the library is used correctly (i.e. with valid context
+ parameters), such overflows cannot occur. The macros are used
+ as sanity checks in a couple of strategic places and should
+ be viewed as a handwritten version of gcc's -ftrapv option. */
+
+static inline mpd_size_t
+add_size_t(mpd_size_t a, mpd_size_t b)
+{
+ if (a > MPD_SIZE_MAX - b) {
+ mpd_err_fatal("add_size_t(): overflow: check the context"); /* GCOV_NOT_REACHED */
+ }
+ return a + b;
+}
+
+static inline mpd_size_t
+sub_size_t(mpd_size_t a, mpd_size_t b)
+{
+ if (b > a) {
+ mpd_err_fatal("sub_size_t(): overflow: check the context"); /* GCOV_NOT_REACHED */
+ }
+ return a - b;
+}
+
+#if MPD_SIZE_MAX != MPD_UINT_MAX
+ #error "adapt mul_size_t() and mulmod_size_t()"
+#endif
+
+static inline mpd_size_t
+mul_size_t(mpd_size_t a, mpd_size_t b)
+{
+ mpd_uint_t hi, lo;
+
+ _mpd_mul_words(&hi, &lo, (mpd_uint_t)a, (mpd_uint_t)b);
+ if (hi) {
+ mpd_err_fatal("mul_size_t(): overflow: check the context"); /* GCOV_NOT_REACHED */
+ }
+ return lo;
+}
+
+static inline mpd_size_t
+add_size_t_overflow(mpd_size_t a, mpd_size_t b, mpd_size_t *overflow)
+{
+ mpd_size_t ret;
+
+ *overflow = 0;
+ ret = a + b;
+ if (ret < a) *overflow = 1;
+ return ret;
+}
+
+static inline mpd_size_t
+mul_size_t_overflow(mpd_size_t a, mpd_size_t b, mpd_size_t *overflow)
+{
+ mpd_uint_t lo;
+
+ _mpd_mul_words((mpd_uint_t *)overflow, &lo, (mpd_uint_t)a,
+ (mpd_uint_t)b);
+ return lo;
+}
+
+static inline mpd_ssize_t
+mod_mpd_ssize_t(mpd_ssize_t a, mpd_ssize_t m)
+{
+ mpd_ssize_t r = a % m;
+ return (r < 0) ? r + m : r;
+}
+
+static inline mpd_size_t
+mulmod_size_t(mpd_size_t a, mpd_size_t b, mpd_size_t m)
+{
+ mpd_uint_t hi, lo;
+ mpd_uint_t q, r;
+
+ _mpd_mul_words(&hi, &lo, (mpd_uint_t)a, (mpd_uint_t)b);
+ _mpd_div_words(&q, &r, hi, lo, (mpd_uint_t)m);
+
+ return r;
+}
+
+
+#endif /* TYPEARITH_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/umodarith.h b/Modules/_decimal/libmpdec/umodarith.h
new file mode 100644
index 0000000000..68d15188cb
--- /dev/null
+++ b/Modules/_decimal/libmpdec/umodarith.h
@@ -0,0 +1,650 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef UMODARITH_H
+#define UMODARITH_H
+
+
+#include "constants.h"
+#include "mpdecimal.h"
+#include "typearith.h"
+
+
+/* Bignum: Low level routines for unsigned modular arithmetic. These are
+ used in the fast convolution functions for very large coefficients. */
+
+
+/**************************************************************************/
+/* ANSI modular arithmetic */
+/**************************************************************************/
+
+
+/*
+ * Restrictions: a < m and b < m
+ * ACL2 proof: umodarith.lisp: addmod-correct
+ */
+static inline mpd_uint_t
+addmod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ mpd_uint_t s;
+
+ s = a + b;
+ s = (s < a) ? s - m : s;
+ s = (s >= m) ? s - m : s;
+
+ return s;
+}
+
+/*
+ * Restrictions: a < m and b < m
+ * ACL2 proof: umodarith.lisp: submod-2-correct
+ */
+static inline mpd_uint_t
+submod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ mpd_uint_t d;
+
+ d = a - b;
+ d = (a < b) ? d + m : d;
+
+ return d;
+}
+
+/*
+ * Restrictions: a < 2m and b < 2m
+ * ACL2 proof: umodarith.lisp: section ext-submod
+ */
+static inline mpd_uint_t
+ext_submod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ mpd_uint_t d;
+
+ a = (a >= m) ? a - m : a;
+ b = (b >= m) ? b - m : b;
+
+ d = a - b;
+ d = (a < b) ? d + m : d;
+
+ return d;
+}
+
+/*
+ * Reduce double word modulo m.
+ * Restrictions: m != 0
+ * ACL2 proof: umodarith.lisp: section dw-reduce
+ */
+static inline mpd_uint_t
+dw_reduce(mpd_uint_t hi, mpd_uint_t lo, mpd_uint_t m)
+{
+ mpd_uint_t r1, r2, w;
+
+ _mpd_div_word(&w, &r1, hi, m);
+ _mpd_div_words(&w, &r2, r1, lo, m);
+
+ return r2;
+}
+
+/*
+ * Subtract double word from a.
+ * Restrictions: a < m
+ * ACL2 proof: umodarith.lisp: section dw-submod
+ */
+static inline mpd_uint_t
+dw_submod(mpd_uint_t a, mpd_uint_t hi, mpd_uint_t lo, mpd_uint_t m)
+{
+ mpd_uint_t d, r;
+
+ r = dw_reduce(hi, lo, m);
+ d = a - r;
+ d = (a < r) ? d + m : d;
+
+ return d;
+}
+
+#ifdef CONFIG_64
+
+/**************************************************************************/
+/* 64-bit modular arithmetic */
+/**************************************************************************/
+
+/*
+ * A proof of the algorithm is in literature/mulmod-64.txt. An ACL2
+ * proof is in umodarith.lisp: section "Fast modular reduction".
+ *
+ * Algorithm: calculate (a * b) % p:
+ *
+ * a) hi, lo <- a * b # Calculate a * b.
+ *
+ * b) hi, lo <- R(hi, lo) # Reduce modulo p.
+ *
+ * c) Repeat step b) until 0 <= hi * 2**64 + lo < 2*p.
+ *
+ * d) If the result is less than p, return lo. Otherwise return lo - p.
+ */
+
+static inline mpd_uint_t
+x64_mulmod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ mpd_uint_t hi, lo, x, y;
+
+
+ _mpd_mul_words(&hi, &lo, a, b);
+
+ if (m & (1ULL<<32)) { /* P1 */
+
+ /* first reduction */
+ x = y = hi;
+ hi >>= 32;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 32;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ /* second reduction */
+ x = y = hi;
+ hi >>= 32;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 32;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ return (hi || lo >= m ? lo - m : lo);
+ }
+ else if (m & (1ULL<<34)) { /* P2 */
+
+ /* first reduction */
+ x = y = hi;
+ hi >>= 30;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 34;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ /* second reduction */
+ x = y = hi;
+ hi >>= 30;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 34;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ /* third reduction */
+ x = y = hi;
+ hi >>= 30;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 34;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ return (hi || lo >= m ? lo - m : lo);
+ }
+ else { /* P3 */
+
+ /* first reduction */
+ x = y = hi;
+ hi >>= 24;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 40;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ /* second reduction */
+ x = y = hi;
+ hi >>= 24;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 40;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ /* third reduction */
+ x = y = hi;
+ hi >>= 24;
+
+ x = lo - x;
+ if (x > lo) hi--;
+
+ y <<= 40;
+ lo = y + x;
+ if (lo < y) hi++;
+
+ return (hi || lo >= m ? lo - m : lo);
+ }
+}
+
+static inline void
+x64_mulmod2c(mpd_uint_t *a, mpd_uint_t *b, mpd_uint_t w, mpd_uint_t m)
+{
+ *a = x64_mulmod(*a, w, m);
+ *b = x64_mulmod(*b, w, m);
+}
+
+static inline void
+x64_mulmod2(mpd_uint_t *a0, mpd_uint_t b0, mpd_uint_t *a1, mpd_uint_t b1,
+ mpd_uint_t m)
+{
+ *a0 = x64_mulmod(*a0, b0, m);
+ *a1 = x64_mulmod(*a1, b1, m);
+}
+
+static inline mpd_uint_t
+x64_powmod(mpd_uint_t base, mpd_uint_t exp, mpd_uint_t umod)
+{
+ mpd_uint_t r = 1;
+
+ while (exp > 0) {
+ if (exp & 1)
+ r = x64_mulmod(r, base, umod);
+ base = x64_mulmod(base, base, umod);
+ exp >>= 1;
+ }
+
+ return r;
+}
+
+/* END CONFIG_64 */
+#else /* CONFIG_32 */
+
+
+/**************************************************************************/
+/* 32-bit modular arithmetic */
+/**************************************************************************/
+
+#if defined(ANSI)
+#if !defined(LEGACY_COMPILER)
+/* HAVE_UINT64_T */
+static inline mpd_uint_t
+std_mulmod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ return ((mpd_uuint_t) a * b) % m;
+}
+
+static inline void
+std_mulmod2c(mpd_uint_t *a, mpd_uint_t *b, mpd_uint_t w, mpd_uint_t m)
+{
+ *a = ((mpd_uuint_t) *a * w) % m;
+ *b = ((mpd_uuint_t) *b * w) % m;
+}
+
+static inline void
+std_mulmod2(mpd_uint_t *a0, mpd_uint_t b0, mpd_uint_t *a1, mpd_uint_t b1,
+ mpd_uint_t m)
+{
+ *a0 = ((mpd_uuint_t) *a0 * b0) % m;
+ *a1 = ((mpd_uuint_t) *a1 * b1) % m;
+}
+/* END HAVE_UINT64_T */
+#else
+/* LEGACY_COMPILER */
+static inline mpd_uint_t
+std_mulmod(mpd_uint_t a, mpd_uint_t b, mpd_uint_t m)
+{
+ mpd_uint_t hi, lo, q, r;
+ _mpd_mul_words(&hi, &lo, a, b);
+ _mpd_div_words(&q, &r, hi, lo, m);
+ return r;
+}
+
+static inline void
+std_mulmod2c(mpd_uint_t *a, mpd_uint_t *b, mpd_uint_t w, mpd_uint_t m)
+{
+ *a = std_mulmod(*a, w, m);
+ *b = std_mulmod(*b, w, m);
+}
+
+static inline void
+std_mulmod2(mpd_uint_t *a0, mpd_uint_t b0, mpd_uint_t *a1, mpd_uint_t b1,
+ mpd_uint_t m)
+{
+ *a0 = std_mulmod(*a0, b0, m);
+ *a1 = std_mulmod(*a1, b1, m);
+}
+/* END LEGACY_COMPILER */
+#endif
+
+static inline mpd_uint_t
+std_powmod(mpd_uint_t base, mpd_uint_t exp, mpd_uint_t umod)
+{
+ mpd_uint_t r = 1;
+
+ while (exp > 0) {
+ if (exp & 1)
+ r = std_mulmod(r, base, umod);
+ base = std_mulmod(base, base, umod);
+ exp >>= 1;
+ }
+
+ return r;
+}
+#endif /* ANSI CONFIG_32 */
+
+
+/**************************************************************************/
+/* Pentium Pro modular arithmetic */
+/**************************************************************************/
+
+/*
+ * A proof of the algorithm is in literature/mulmod-ppro.txt. The FPU
+ * control word must be set to 64-bit precision and truncation mode
+ * prior to using these functions.
+ *
+ * Algorithm: calculate (a * b) % p:
+ *
+ * p := prime < 2**31
+ * pinv := (long double)1.0 / p (precalculated)
+ *
+ * a) n = a * b # Calculate exact product.
+ * b) qest = n * pinv # Calculate estimate for q = n / p.
+ * c) q = (qest+2**63)-2**63 # Truncate qest to the exact quotient.
+ * d) r = n - q * p # Calculate remainder.
+ *
+ * Remarks:
+ *
+ * - p = dmod and pinv = dinvmod.
+ * - dinvmod points to an array of three uint32_t, which is interpreted
+ * as an 80 bit long double by fldt.
+ * - Intel compilers prior to version 11 do not seem to handle the
+ * __GNUC__ inline assembly correctly.
+ * - random tests are provided in tests/extended/ppro_mulmod.c
+ */
+
+#if defined(PPRO)
+#if defined(ASM)
+
+/* Return (a * b) % dmod */
+static inline mpd_uint_t
+ppro_mulmod(mpd_uint_t a, mpd_uint_t b, double *dmod, uint32_t *dinvmod)
+{
+ mpd_uint_t retval;
+
+ __asm__ (
+ "fildl %2\n\t"
+ "fildl %1\n\t"
+ "fmulp %%st, %%st(1)\n\t"
+ "fldt (%4)\n\t"
+ "fmul %%st(1), %%st\n\t"
+ "flds %5\n\t"
+ "fadd %%st, %%st(1)\n\t"
+ "fsubrp %%st, %%st(1)\n\t"
+ "fldl (%3)\n\t"
+ "fmulp %%st, %%st(1)\n\t"
+ "fsubrp %%st, %%st(1)\n\t"
+ "fistpl %0\n\t"
+ : "=m" (retval)
+ : "m" (a), "m" (b), "r" (dmod), "r" (dinvmod), "m" (MPD_TWO63)
+ : "st", "memory"
+ );
+
+ return retval;
+}
+
+/*
+ * Two modular multiplications in parallel:
+ * *a0 = (*a0 * w) % dmod
+ * *a1 = (*a1 * w) % dmod
+ */
+static inline void
+ppro_mulmod2c(mpd_uint_t *a0, mpd_uint_t *a1, mpd_uint_t w,
+ double *dmod, uint32_t *dinvmod)
+{
+ __asm__ (
+ "fildl %2\n\t"
+ "fildl (%1)\n\t"
+ "fmul %%st(1), %%st\n\t"
+ "fxch %%st(1)\n\t"
+ "fildl (%0)\n\t"
+ "fmulp %%st, %%st(1) \n\t"
+ "fldt (%4)\n\t"
+ "flds %5\n\t"
+ "fld %%st(2)\n\t"
+ "fmul %%st(2)\n\t"
+ "fadd %%st(1)\n\t"
+ "fsub %%st(1)\n\t"
+ "fmull (%3)\n\t"
+ "fsubrp %%st, %%st(3)\n\t"
+ "fxch %%st(2)\n\t"
+ "fistpl (%0)\n\t"
+ "fmul %%st(2)\n\t"
+ "fadd %%st(1)\n\t"
+ "fsubp %%st, %%st(1)\n\t"
+ "fmull (%3)\n\t"
+ "fsubrp %%st, %%st(1)\n\t"
+ "fistpl (%1)\n\t"
+ : : "r" (a0), "r" (a1), "m" (w),
+ "r" (dmod), "r" (dinvmod),
+ "m" (MPD_TWO63)
+ : "st", "memory"
+ );
+}
+
+/*
+ * Two modular multiplications in parallel:
+ * *a0 = (*a0 * b0) % dmod
+ * *a1 = (*a1 * b1) % dmod
+ */
+static inline void
+ppro_mulmod2(mpd_uint_t *a0, mpd_uint_t b0, mpd_uint_t *a1, mpd_uint_t b1,
+ double *dmod, uint32_t *dinvmod)
+{
+ __asm__ (
+ "fildl %3\n\t"
+ "fildl (%2)\n\t"
+ "fmulp %%st, %%st(1)\n\t"
+ "fildl %1\n\t"
+ "fildl (%0)\n\t"
+ "fmulp %%st, %%st(1)\n\t"
+ "fldt (%5)\n\t"
+ "fld %%st(2)\n\t"
+ "fmul %%st(1), %%st\n\t"
+ "fxch %%st(1)\n\t"
+ "fmul %%st(2), %%st\n\t"
+ "flds %6\n\t"
+ "fldl (%4)\n\t"
+ "fxch %%st(3)\n\t"
+ "fadd %%st(1), %%st\n\t"
+ "fxch %%st(2)\n\t"
+ "fadd %%st(1), %%st\n\t"
+ "fxch %%st(2)\n\t"
+ "fsub %%st(1), %%st\n\t"
+ "fxch %%st(2)\n\t"
+ "fsubp %%st, %%st(1)\n\t"
+ "fxch %%st(1)\n\t"
+ "fmul %%st(2), %%st\n\t"
+ "fxch %%st(1)\n\t"
+ "fmulp %%st, %%st(2)\n\t"
+ "fsubrp %%st, %%st(3)\n\t"
+ "fsubrp %%st, %%st(1)\n\t"
+ "fxch %%st(1)\n\t"
+ "fistpl (%2)\n\t"
+ "fistpl (%0)\n\t"
+ : : "r" (a0), "m" (b0), "r" (a1), "m" (b1),
+ "r" (dmod), "r" (dinvmod),
+ "m" (MPD_TWO63)
+ : "st", "memory"
+ );
+}
+/* END PPRO GCC ASM */
+#elif defined(MASM)
+
+/* Return (a * b) % dmod */
+static inline mpd_uint_t __cdecl
+ppro_mulmod(mpd_uint_t a, mpd_uint_t b, double *dmod, uint32_t *dinvmod)
+{
+ mpd_uint_t retval;
+
+ __asm {
+ mov eax, dinvmod
+ mov edx, dmod
+ fild b
+ fild a
+ fmulp st(1), st
+ fld TBYTE PTR [eax]
+ fmul st, st(1)
+ fld MPD_TWO63
+ fadd st(1), st
+ fsubp st(1), st
+ fld QWORD PTR [edx]
+ fmulp st(1), st
+ fsubp st(1), st
+ fistp retval
+ }
+
+ return retval;
+}
+
+/*
+ * Two modular multiplications in parallel:
+ * *a0 = (*a0 * w) % dmod
+ * *a1 = (*a1 * w) % dmod
+ */
+static inline mpd_uint_t __cdecl
+ppro_mulmod2c(mpd_uint_t *a0, mpd_uint_t *a1, mpd_uint_t w,
+ double *dmod, uint32_t *dinvmod)
+{
+ __asm {
+ mov ecx, dmod
+ mov edx, a1
+ mov ebx, dinvmod
+ mov eax, a0
+ fild w
+ fild DWORD PTR [edx]
+ fmul st, st(1)
+ fxch st(1)
+ fild DWORD PTR [eax]
+ fmulp st(1), st
+ fld TBYTE PTR [ebx]
+ fld MPD_TWO63
+ fld st(2)
+ fmul st, st(2)
+ fadd st, st(1)
+ fsub st, st(1)
+ fmul QWORD PTR [ecx]
+ fsubp st(3), st
+ fxch st(2)
+ fistp DWORD PTR [eax]
+ fmul st, st(2)
+ fadd st, st(1)
+ fsubrp st(1), st
+ fmul QWORD PTR [ecx]
+ fsubp st(1), st
+ fistp DWORD PTR [edx]
+ }
+}
+
+/*
+ * Two modular multiplications in parallel:
+ * *a0 = (*a0 * b0) % dmod
+ * *a1 = (*a1 * b1) % dmod
+ */
+static inline void __cdecl
+ppro_mulmod2(mpd_uint_t *a0, mpd_uint_t b0, mpd_uint_t *a1, mpd_uint_t b1,
+ double *dmod, uint32_t *dinvmod)
+{
+ __asm {
+ mov ecx, dmod
+ mov edx, a1
+ mov ebx, dinvmod
+ mov eax, a0
+ fild b1
+ fild DWORD PTR [edx]
+ fmulp st(1), st
+ fild b0
+ fild DWORD PTR [eax]
+ fmulp st(1), st
+ fld TBYTE PTR [ebx]
+ fld st(2)
+ fmul st, st(1)
+ fxch st(1)
+ fmul st, st(2)
+ fld DWORD PTR MPD_TWO63
+ fld QWORD PTR [ecx]
+ fxch st(3)
+ fadd st, st(1)
+ fxch st(2)
+ fadd st, st(1)
+ fxch st(2)
+ fsub st, st(1)
+ fxch st(2)
+ fsubrp st(1), st
+ fxch st(1)
+ fmul st, st(2)
+ fxch st(1)
+ fmulp st(2), st
+ fsubp st(3), st
+ fsubp st(1), st
+ fxch st(1)
+ fistp DWORD PTR [edx]
+ fistp DWORD PTR [eax]
+ }
+}
+#endif /* PPRO MASM (_MSC_VER) */
+
+
+/* Return (base ** exp) % dmod */
+static inline mpd_uint_t
+ppro_powmod(mpd_uint_t base, mpd_uint_t exp, double *dmod, uint32_t *dinvmod)
+{
+ mpd_uint_t r = 1;
+
+ while (exp > 0) {
+ if (exp & 1)
+ r = ppro_mulmod(r, base, dmod, dinvmod);
+ base = ppro_mulmod(base, base, dmod, dinvmod);
+ exp >>= 1;
+ }
+
+ return r;
+}
+#endif /* PPRO */
+#endif /* CONFIG_32 */
+
+
+#endif /* UMODARITH_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/vccompat.h b/Modules/_decimal/libmpdec/vccompat.h
new file mode 100644
index 0000000000..f58e023c62
--- /dev/null
+++ b/Modules/_decimal/libmpdec/vccompat.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#ifndef VCCOMPAT_H
+#define VCCOMPAT_H
+
+
+/* Visual C fixes: no stdint.h, no snprintf ... */
+#ifdef _MSC_VER
+ #include "vcstdint.h"
+ #undef inline
+ #define inline __inline
+ #undef random
+ #define random rand
+ #undef srandom
+ #define srandom srand
+ #undef snprintf
+ #define snprintf sprintf_s
+ #define HAVE_SNPRINTF
+ #undef strncasecmp
+ #define strncasecmp _strnicmp
+ #undef strcasecmp
+ #define strcasecmp _stricmp
+ #undef strtoll
+ #define strtoll _strtoi64
+ #define strdup _strdup
+ #define PRIi64 "I64i"
+ #define PRIu64 "I64u"
+ #define PRIi32 "I32i"
+ #define PRIu32 "I32u"
+#endif
+
+
+#endif /* VCCOMPAT_H */
+
+
+
diff --git a/Modules/_decimal/libmpdec/vcdiv64.asm b/Modules/_decimal/libmpdec/vcdiv64.asm
new file mode 100644
index 0000000000..6b6645673a
--- /dev/null
+++ b/Modules/_decimal/libmpdec/vcdiv64.asm
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions
+; are met:
+;
+; 1. Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+;
+; 2. Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution.
+;
+; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+; SUCH DAMAGE.
+;
+
+
+PUBLIC _mpd_div_words
+_TEXT SEGMENT
+q$ = 8
+r$ = 16
+hi$ = 24
+lo$ = 32
+d$ = 40
+_mpd_div_words PROC
+ mov r10, rdx
+ mov rdx, r8
+ mov rax, r9
+ div QWORD PTR d$[rsp]
+ mov QWORD PTR [r10], rdx
+ mov QWORD PTR [rcx], rax
+ ret 0
+_mpd_div_words ENDP
+_TEXT ENDS
+END
+
+
diff --git a/Modules/_decimal/libmpdec/vcstdint.h b/Modules/_decimal/libmpdec/vcstdint.h
new file mode 100644
index 0000000000..17dcad4541
--- /dev/null
+++ b/Modules/_decimal/libmpdec/vcstdint.h
@@ -0,0 +1,232 @@
+// ISO C9x compliant stdint.h for Microsoft Visual Studio
+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
+//
+// Copyright (c) 2006-2008 Alexander Chemeris
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// 3. The name of the author may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_STDINT_H_ // [
+#define _MSC_STDINT_H_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+#include <limits.h>
+
+// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
+// or compiler give many errors like this:
+// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
+#if (_MSC_VER < 1300) && defined(__cplusplus)
+ extern "C++" {
+#endif
+# include <wchar.h>
+#if (_MSC_VER < 1300) && defined(__cplusplus)
+ }
+#endif
+
+// Define _W64 macros to mark types changing their size, like intptr_t.
+#ifndef _W64
+# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
+# define _W64 __w64
+# else
+# define _W64
+# endif
+#endif
+
+
+// 7.18.1 Integer types
+
+// 7.18.1.1 Exact-width integer types
+typedef __int8 int8_t;
+typedef __int16 int16_t;
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+
+// 7.18.1.2 Minimum-width integer types
+typedef int8_t int_least8_t;
+typedef int16_t int_least16_t;
+typedef int32_t int_least32_t;
+typedef int64_t int_least64_t;
+typedef uint8_t uint_least8_t;
+typedef uint16_t uint_least16_t;
+typedef uint32_t uint_least32_t;
+typedef uint64_t uint_least64_t;
+
+// 7.18.1.3 Fastest minimum-width integer types
+typedef int8_t int_fast8_t;
+typedef int16_t int_fast16_t;
+typedef int32_t int_fast32_t;
+typedef int64_t int_fast64_t;
+typedef uint8_t uint_fast8_t;
+typedef uint16_t uint_fast16_t;
+typedef uint32_t uint_fast32_t;
+typedef uint64_t uint_fast64_t;
+
+// 7.18.1.4 Integer types capable of holding object pointers
+#ifdef _WIN64 // [
+ typedef __int64 intptr_t;
+ typedef unsigned __int64 uintptr_t;
+#else // _WIN64 ][
+ typedef _W64 int intptr_t;
+ typedef _W64 unsigned int uintptr_t;
+#endif // _WIN64 ]
+
+// 7.18.1.5 Greatest-width integer types
+typedef int64_t intmax_t;
+typedef uint64_t uintmax_t;
+
+
+// 7.18.2 Limits of specified-width integer types
+
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
+
+// 7.18.2.1 Limits of exact-width integer types
+#define INT8_MIN ((int8_t)_I8_MIN)
+#define INT8_MAX _I8_MAX
+#define INT16_MIN ((int16_t)_I16_MIN)
+#define INT16_MAX _I16_MAX
+#define INT32_MIN ((int32_t)_I32_MIN)
+#define INT32_MAX _I32_MAX
+#define INT64_MIN ((int64_t)_I64_MIN)
+#define INT64_MAX _I64_MAX
+#define UINT8_MAX _UI8_MAX
+#define UINT16_MAX _UI16_MAX
+#define UINT32_MAX _UI32_MAX
+#define UINT64_MAX _UI64_MAX
+
+// 7.18.2.2 Limits of minimum-width integer types
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST8_MAX INT8_MAX
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST16_MAX INT16_MAX
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST32_MAX INT32_MAX
+#define INT_LEAST64_MIN INT64_MIN
+#define INT_LEAST64_MAX INT64_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+// 7.18.2.3 Limits of fastest minimum-width integer types
+#define INT_FAST8_MIN INT8_MIN
+#define INT_FAST8_MAX INT8_MAX
+#define INT_FAST16_MIN INT16_MIN
+#define INT_FAST16_MAX INT16_MAX
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST32_MAX INT32_MAX
+#define INT_FAST64_MIN INT64_MIN
+#define INT_FAST64_MAX INT64_MAX
+#define UINT_FAST8_MAX UINT8_MAX
+#define UINT_FAST16_MAX UINT16_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+// 7.18.2.4 Limits of integer types capable of holding object pointers
+#ifdef _WIN64 // [
+# define INTPTR_MIN INT64_MIN
+# define INTPTR_MAX INT64_MAX
+# define UINTPTR_MAX UINT64_MAX
+#else // _WIN64 ][
+# define INTPTR_MIN INT32_MIN
+# define INTPTR_MAX INT32_MAX
+# define UINTPTR_MAX UINT32_MAX
+#endif // _WIN64 ]
+
+// 7.18.2.5 Limits of greatest-width integer types
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+// 7.18.3 Limits of other integer types
+
+#ifdef _WIN64 // [
+# define PTRDIFF_MIN _I64_MIN
+# define PTRDIFF_MAX _I64_MAX
+#else // _WIN64 ][
+# define PTRDIFF_MIN _I32_MIN
+# define PTRDIFF_MAX _I32_MAX
+#endif // _WIN64 ]
+
+#define SIG_ATOMIC_MIN INT_MIN
+#define SIG_ATOMIC_MAX INT_MAX
+
+#ifndef SIZE_MAX // [
+# ifdef _WIN64 // [
+# define SIZE_MAX _UI64_MAX
+# else // _WIN64 ][
+# define SIZE_MAX _UI32_MAX
+# endif // _WIN64 ]
+#endif // SIZE_MAX ]
+
+// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
+#ifndef WCHAR_MIN // [
+# define WCHAR_MIN 0
+#endif // WCHAR_MIN ]
+#ifndef WCHAR_MAX // [
+# define WCHAR_MAX _UI16_MAX
+#endif // WCHAR_MAX ]
+
+#define WINT_MIN 0
+#define WINT_MAX _UI16_MAX
+
+#endif // __STDC_LIMIT_MACROS ]
+
+
+// 7.18.4 Limits of other integer types
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
+
+// 7.18.4.1 Macros for minimum-width integer constants
+
+#define INT8_C(val) val##i8
+#define INT16_C(val) val##i16
+#define INT32_C(val) val##i32
+#define INT64_C(val) val##i64
+
+#define UINT8_C(val) val##ui8
+#define UINT16_C(val) val##ui16
+#define UINT32_C(val) val##ui32
+#define UINT64_C(val) val##ui64
+
+// 7.18.4.2 Macros for greatest-width integer constants
+#define INTMAX_C INT64_C
+#define UINTMAX_C UINT64_C
+
+#endif // __STDC_CONSTANT_MACROS ]
+
+
+#endif // _MSC_STDINT_H_ ]
diff --git a/Modules/_decimal/tests/README.txt b/Modules/_decimal/tests/README.txt
new file mode 100644
index 0000000000..97b6ff68a5
--- /dev/null
+++ b/Modules/_decimal/tests/README.txt
@@ -0,0 +1,15 @@
+
+
+This directory contains extended tests and a benchmark against decimal.py:
+
+ bench.py -> Benchmark for small and large precisions.
+ Usage: ../../../python bench.py
+
+ formathelper.py ->
+ randdec.py -> Generate test cases for deccheck.py.
+ randfloat.py ->
+
+ deccheck.py -> Run extended tests.
+ Usage: ../../../python deccheck.py [--short|--medium|--long|--all]
+
+
diff --git a/Modules/_decimal/tests/bench.py b/Modules/_decimal/tests/bench.py
new file mode 100644
index 0000000000..56566cc339
--- /dev/null
+++ b/Modules/_decimal/tests/bench.py
@@ -0,0 +1,133 @@
+#
+# Copyright (C) 2001-2012 Python Software Foundation. All Rights Reserved.
+# Modified and extended by Stefan Krah.
+#
+
+# Usage: ../../../python bench.py
+
+
+import time
+from math import log, ceil
+try:
+ from test.support import import_fresh_module
+except ImportError:
+ from test.test_support import import_fresh_module
+
+C = import_fresh_module('decimal', fresh=['_decimal'])
+P = import_fresh_module('decimal', blocked=['_decimal'])
+
+#
+# NOTE: This is the pi function from the decimal documentation, modified
+# for benchmarking purposes. Since floats do not have a context, the higher
+# intermediate precision from the original is NOT used, so the modified
+# algorithm only gives an approximation to the correctly rounded result.
+# For serious use, refer to the documentation or the appropriate literature.
+#
+def pi_float():
+ """native float"""
+ lasts, t, s, n, na, d, da = 0, 3.0, 3, 1, 0, 0, 24
+ while s != lasts:
+ lasts = s
+ n, na = n+na, na+8
+ d, da = d+da, da+32
+ t = (t * n) / d
+ s += t
+ return s
+
+def pi_cdecimal():
+ """cdecimal"""
+ D = C.Decimal
+ lasts, t, s, n, na, d, da = D(0), D(3), D(3), D(1), D(0), D(0), D(24)
+ while s != lasts:
+ lasts = s
+ n, na = n+na, na+8
+ d, da = d+da, da+32
+ t = (t * n) / d
+ s += t
+ return s
+
+def pi_decimal():
+ """decimal"""
+ D = P.Decimal
+ lasts, t, s, n, na, d, da = D(0), D(3), D(3), D(1), D(0), D(0), D(24)
+ while s != lasts:
+ lasts = s
+ n, na = n+na, na+8
+ d, da = d+da, da+32
+ t = (t * n) / d
+ s += t
+ return s
+
+def factorial(n, m):
+ if (n > m):
+ return factorial(m, n)
+ elif m == 0:
+ return 1
+ elif n == m:
+ return n
+ else:
+ return factorial(n, (n+m)//2) * factorial((n+m)//2 + 1, m)
+
+
+print("\n# ======================================================================")
+print("# Calculating pi, 10000 iterations")
+print("# ======================================================================\n")
+
+to_benchmark = [pi_float, pi_decimal]
+if C is not None:
+ to_benchmark.insert(1, pi_cdecimal)
+
+for prec in [9, 19]:
+ print("\nPrecision: %d decimal digits\n" % prec)
+ for func in to_benchmark:
+ start = time.time()
+ if C is not None:
+ C.getcontext().prec = prec
+ P.getcontext().prec = prec
+ for i in range(10000):
+ x = func()
+ print("%s:" % func.__name__.replace("pi_", ""))
+ print("result: %s" % str(x))
+ print("time: %fs\n" % (time.time()-start))
+
+
+print("\n# ======================================================================")
+print("# Factorial")
+print("# ======================================================================\n")
+
+if C is not None:
+ c = C.getcontext()
+ c.prec = C.MAX_PREC
+ c.Emax = C.MAX_EMAX
+ c.Emin = C.MIN_EMIN
+
+for n in [100000, 1000000]:
+
+ print("n = %d\n" % n)
+
+ if C is not None:
+ # C version of decimal
+ start_calc = time.time()
+ x = factorial(C.Decimal(n), 0)
+ end_calc = time.time()
+ start_conv = time.time()
+ sx = str(x)
+ end_conv = time.time()
+ print("cdecimal:")
+ print("calculation time: %fs" % (end_calc-start_calc))
+ print("conversion time: %fs\n" % (end_conv-start_conv))
+
+ # Python integers
+ start_calc = time.time()
+ y = factorial(n, 0)
+ end_calc = time.time()
+ start_conv = time.time()
+ sy = str(y)
+ end_conv = time.time()
+
+ print("int:")
+ print("calculation time: %fs" % (end_calc-start_calc))
+ print("conversion time: %fs\n\n" % (end_conv-start_conv))
+
+ if C is not None:
+ assert(sx == sy)
diff --git a/Modules/_decimal/tests/bignum.py b/Modules/_decimal/tests/bignum.py
new file mode 100644
index 0000000000..a67e161ddf
--- /dev/null
+++ b/Modules/_decimal/tests/bignum.py
@@ -0,0 +1,42 @@
+#
+# These tests require gmpy and test the limits of the 32-bit build. The
+# limits of the 64-bit build are so large that they cannot be tested
+# on accessible hardware.
+#
+
+import sys
+from decimal import *
+from gmpy import mpz
+
+
+_PyHASH_MODULUS = sys.hash_info.modulus
+# hash values to use for positive and negative infinities, and nans
+_PyHASH_INF = sys.hash_info.inf
+_PyHASH_NAN = sys.hash_info.nan
+
+# _PyHASH_10INV is the inverse of 10 modulo the prime _PyHASH_MODULUS
+_PyHASH_10INV = pow(10, _PyHASH_MODULUS - 2, _PyHASH_MODULUS)
+
+def xhash(coeff, exp):
+ sign = 1
+ if coeff < 0:
+ sign = -1
+ coeff = -coeff
+ if exp >= 0:
+ exp_hash = pow(10, exp, _PyHASH_MODULUS)
+ else:
+ exp_hash = pow(_PyHASH_10INV, -exp, _PyHASH_MODULUS)
+ hash_ = coeff * exp_hash % _PyHASH_MODULUS
+ ans = hash_ if sign == 1 else -hash_
+ return -2 if ans == -1 else ans
+
+
+x = mpz(10) ** 425000000 - 1
+coeff = int(x)
+
+d = Decimal('9' * 425000000 + 'e-849999999')
+
+h1 = xhash(coeff, -849999999)
+h2 = hash(d)
+
+assert h2 == h1
diff --git a/Modules/_decimal/tests/deccheck.py b/Modules/_decimal/tests/deccheck.py
new file mode 100644
index 0000000000..c4c5a4461d
--- /dev/null
+++ b/Modules/_decimal/tests/deccheck.py
@@ -0,0 +1,1099 @@
+#
+# Copyright (c) 2008-2012 Stefan Krah. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+#
+# Usage: python deccheck.py [--short|--medium|--long|--all]
+#
+
+import sys, random
+from copy import copy
+from collections import defaultdict
+from test.support import import_fresh_module
+from randdec import randfloat, all_unary, all_binary, all_ternary
+from randdec import unary_optarg, binary_optarg, ternary_optarg
+from formathelper import rand_format, rand_locale
+
+C = import_fresh_module('decimal', fresh=['_decimal'])
+P = import_fresh_module('decimal', blocked=['_decimal'])
+EXIT_STATUS = 0
+
+
+# Contains all categories of Decimal methods.
+Functions = {
+ # Plain unary:
+ 'unary': (
+ '__abs__', '__bool__', '__ceil__', '__complex__', '__copy__',
+ '__floor__', '__float__', '__hash__', '__int__', '__neg__',
+ '__pos__', '__reduce__', '__repr__', '__str__', '__trunc__',
+ 'adjusted', 'as_tuple', 'canonical', 'conjugate', 'copy_abs',
+ 'copy_negate', 'is_canonical', 'is_finite', 'is_infinite',
+ 'is_nan', 'is_qnan', 'is_signed', 'is_snan', 'is_zero', 'radix'
+ ),
+ # Unary with optional context:
+ 'unary_ctx': (
+ 'exp', 'is_normal', 'is_subnormal', 'ln', 'log10', 'logb',
+ 'logical_invert', 'next_minus', 'next_plus', 'normalize',
+ 'number_class', 'sqrt', 'to_eng_string'
+ ),
+ # Unary with optional rounding mode and context:
+ 'unary_rnd_ctx': ('to_integral', 'to_integral_exact', 'to_integral_value'),
+ # Plain binary:
+ 'binary': (
+ '__add__', '__divmod__', '__eq__', '__floordiv__', '__ge__', '__gt__',
+ '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__pow__',
+ '__radd__', '__rdivmod__', '__rfloordiv__', '__rmod__', '__rmul__',
+ '__rpow__', '__rsub__', '__rtruediv__', '__sub__', '__truediv__',
+ 'compare_total', 'compare_total_mag', 'copy_sign', 'quantize',
+ 'same_quantum'
+ ),
+ # Binary with optional context:
+ 'binary_ctx': (
+ 'compare', 'compare_signal', 'logical_and', 'logical_or', 'logical_xor',
+ 'max', 'max_mag', 'min', 'min_mag', 'next_toward', 'remainder_near',
+ 'rotate', 'scaleb', 'shift'
+ ),
+ # Plain ternary:
+ 'ternary': ('__pow__',),
+ # Ternary with optional context:
+ 'ternary_ctx': ('fma',),
+ # Special:
+ 'special': ('__format__', '__reduce_ex__', '__round__', 'from_float',
+ 'quantize'),
+ # Properties:
+ 'property': ('real', 'imag')
+}
+
+# Contains all categories of Context methods. The n-ary classification
+# applies to the number of Decimal arguments.
+ContextFunctions = {
+ # Plain nullary:
+ 'nullary': ('context.__hash__', 'context.__reduce__', 'context.radix'),
+ # Plain unary:
+ 'unary': ('context.abs', 'context.canonical', 'context.copy_abs',
+ 'context.copy_decimal', 'context.copy_negate',
+ 'context.create_decimal', 'context.exp', 'context.is_canonical',
+ 'context.is_finite', 'context.is_infinite', 'context.is_nan',
+ 'context.is_normal', 'context.is_qnan', 'context.is_signed',
+ 'context.is_snan', 'context.is_subnormal', 'context.is_zero',
+ 'context.ln', 'context.log10', 'context.logb',
+ 'context.logical_invert', 'context.minus', 'context.next_minus',
+ 'context.next_plus', 'context.normalize', 'context.number_class',
+ 'context.plus', 'context.sqrt', 'context.to_eng_string',
+ 'context.to_integral', 'context.to_integral_exact',
+ 'context.to_integral_value', 'context.to_sci_string'
+ ),
+ # Plain binary:
+ 'binary': ('context.add', 'context.compare', 'context.compare_signal',
+ 'context.compare_total', 'context.compare_total_mag',
+ 'context.copy_sign', 'context.divide', 'context.divide_int',
+ 'context.divmod', 'context.logical_and', 'context.logical_or',
+ 'context.logical_xor', 'context.max', 'context.max_mag',
+ 'context.min', 'context.min_mag', 'context.multiply',
+ 'context.next_toward', 'context.power', 'context.quantize',
+ 'context.remainder', 'context.remainder_near', 'context.rotate',
+ 'context.same_quantum', 'context.scaleb', 'context.shift',
+ 'context.subtract'
+ ),
+ # Plain ternary:
+ 'ternary': ('context.fma', 'context.power'),
+ # Special:
+ 'special': ('context.__reduce_ex__', 'context.create_decimal_from_float')
+}
+
+# Functions that require a restricted exponent range for reasonable runtimes.
+UnaryRestricted = [
+ '__ceil__', '__floor__', '__int__', '__long__', '__trunc__',
+ 'to_integral', 'to_integral_value'
+]
+
+BinaryRestricted = ['__round__']
+
+TernaryRestricted = ['__pow__', 'context.power']
+
+
+# ======================================================================
+# Unified Context
+# ======================================================================
+
+# Translate symbols.
+CondMap = {
+ C.Clamped: P.Clamped,
+ C.ConversionSyntax: P.ConversionSyntax,
+ C.DivisionByZero: P.DivisionByZero,
+ C.DivisionImpossible: P.InvalidOperation,
+ C.DivisionUndefined: P.DivisionUndefined,
+ C.Inexact: P.Inexact,
+ C.InvalidContext: P.InvalidContext,
+ C.InvalidOperation: P.InvalidOperation,
+ C.Overflow: P.Overflow,
+ C.Rounded: P.Rounded,
+ C.Subnormal: P.Subnormal,
+ C.Underflow: P.Underflow,
+ C.FloatOperation: P.FloatOperation,
+}
+
+RoundModes = [C.ROUND_UP, C.ROUND_DOWN, C.ROUND_CEILING, C.ROUND_FLOOR,
+ C.ROUND_HALF_UP, C.ROUND_HALF_DOWN, C.ROUND_HALF_EVEN,
+ C.ROUND_05UP]
+
+
+class Context(object):
+ """Provides a convenient way of syncing the C and P contexts"""
+
+ __slots__ = ['c', 'p']
+
+ def __init__(self, c_ctx=None, p_ctx=None):
+ """Initialization is from the C context"""
+ self.c = C.getcontext() if c_ctx is None else c_ctx
+ self.p = P.getcontext() if p_ctx is None else p_ctx
+ self.p.prec = self.c.prec
+ self.p.Emin = self.c.Emin
+ self.p.Emax = self.c.Emax
+ self.p.rounding = self.c.rounding
+ self.p.capitals = self.c.capitals
+ self.settraps([sig for sig in self.c.traps if self.c.traps[sig]])
+ self.setstatus([sig for sig in self.c.flags if self.c.flags[sig]])
+ self.p.clamp = self.c.clamp
+
+ def __str__(self):
+ return str(self.c) + '\n' + str(self.p)
+
+ def getprec(self):
+ assert(self.c.prec == self.p.prec)
+ return self.c.prec
+
+ def setprec(self, val):
+ self.c.prec = val
+ self.p.prec = val
+
+ def getemin(self):
+ assert(self.c.Emin == self.p.Emin)
+ return self.c.Emin
+
+ def setemin(self, val):
+ self.c.Emin = val
+ self.p.Emin = val
+
+ def getemax(self):
+ assert(self.c.Emax == self.p.Emax)
+ return self.c.Emax
+
+ def setemax(self, val):
+ self.c.Emax = val
+ self.p.Emax = val
+
+ def getround(self):
+ assert(self.c.rounding == self.p.rounding)
+ return self.c.rounding
+
+ def setround(self, val):
+ self.c.rounding = val
+ self.p.rounding = val
+
+ def getcapitals(self):
+ assert(self.c.capitals == self.p.capitals)
+ return self.c.capitals
+
+ def setcapitals(self, val):
+ self.c.capitals = val
+ self.p.capitals = val
+
+ def getclamp(self):
+ assert(self.c.clamp == self.p.clamp)
+ return self.c.clamp
+
+ def setclamp(self, val):
+ self.c.clamp = val
+ self.p.clamp = val
+
+ prec = property(getprec, setprec)
+ Emin = property(getemin, setemin)
+ Emax = property(getemax, setemax)
+ rounding = property(getround, setround)
+ clamp = property(getclamp, setclamp)
+ capitals = property(getcapitals, setcapitals)
+
+ def clear_traps(self):
+ self.c.clear_traps()
+ for trap in self.p.traps:
+ self.p.traps[trap] = False
+
+ def clear_status(self):
+ self.c.clear_flags()
+ self.p.clear_flags()
+
+ def settraps(self, lst):
+ """lst: C signal list"""
+ self.clear_traps()
+ for signal in lst:
+ self.c.traps[signal] = True
+ self.p.traps[CondMap[signal]] = True
+
+ def setstatus(self, lst):
+ """lst: C signal list"""
+ self.clear_status()
+ for signal in lst:
+ self.c.flags[signal] = True
+ self.p.flags[CondMap[signal]] = True
+
+ def assert_eq_status(self):
+ """assert equality of C and P status"""
+ for signal in self.c.flags:
+ if self.c.flags[signal] == (not self.p.flags[CondMap[signal]]):
+ return False
+ return True
+
+
+# We don't want exceptions so that we can compare the status flags.
+context = Context()
+context.Emin = C.MIN_EMIN
+context.Emax = C.MAX_EMAX
+context.clear_traps()
+
+# When creating decimals, _decimal is ultimately limited by the maximum
+# context values. We emulate this restriction for decimal.py.
+maxcontext = P.Context(
+ prec=C.MAX_PREC,
+ Emin=C.MIN_EMIN,
+ Emax=C.MAX_EMAX,
+ rounding=P.ROUND_HALF_UP,
+ capitals=1
+)
+maxcontext.clamp = 0
+
+def RestrictedDecimal(value):
+ maxcontext.traps = copy(context.p.traps)
+ maxcontext.clear_flags()
+ if isinstance(value, str):
+ value = value.strip()
+ dec = maxcontext.create_decimal(value)
+ if maxcontext.flags[P.Inexact] or \
+ maxcontext.flags[P.Rounded] or \
+ maxcontext.flags[P.Clamped] or \
+ maxcontext.flags[P.InvalidOperation]:
+ return context.p._raise_error(P.InvalidOperation)
+ if maxcontext.flags[P.FloatOperation]:
+ context.p.flags[P.FloatOperation] = True
+ return dec
+
+
+# ======================================================================
+# TestSet: Organize data and events during a single test case
+# ======================================================================
+
+class RestrictedList(list):
+ """List that can only be modified by appending items."""
+ def __getattribute__(self, name):
+ if name != 'append':
+ raise AttributeError("unsupported operation")
+ return list.__getattribute__(self, name)
+ def unsupported(self, *_):
+ raise AttributeError("unsupported operation")
+ __add__ = __delattr__ = __delitem__ = __iadd__ = __imul__ = unsupported
+ __mul__ = __reversed__ = __rmul__ = __setattr__ = __setitem__ = unsupported
+
+class TestSet(object):
+ """A TestSet contains the original input operands, converted operands,
+ Python exceptions that occurred either during conversion or during
+ execution of the actual function, and the final results.
+
+ For safety, most attributes are lists that only support the append
+ operation.
+
+ If a function name is prefixed with 'context.', the corresponding
+ context method is called.
+ """
+ def __init__(self, funcname, operands):
+ if funcname.startswith("context."):
+ self.funcname = funcname.replace("context.", "")
+ self.contextfunc = True
+ else:
+ self.funcname = funcname
+ self.contextfunc = False
+ self.op = operands # raw operand tuple
+ self.context = context # context used for the operation
+ self.cop = RestrictedList() # converted C.Decimal operands
+ self.cex = RestrictedList() # Python exceptions for C.Decimal
+ self.cresults = RestrictedList() # C.Decimal results
+ self.pop = RestrictedList() # converted P.Decimal operands
+ self.pex = RestrictedList() # Python exceptions for P.Decimal
+ self.presults = RestrictedList() # P.Decimal results
+
+
+# ======================================================================
+# SkipHandler: skip known discrepancies
+# ======================================================================
+
+class SkipHandler:
+ """Handle known discrepancies between decimal.py and _decimal.so.
+ These are either ULP differences in the power function or
+ extremely minor issues."""
+
+ def __init__(self):
+ self.ulpdiff = 0
+ self.powmod_zeros = 0
+ self.maxctx = P.Context(Emax=10**18, Emin=-10**18)
+
+ def default(self, t):
+ return False
+ __ge__ = __gt__ = __le__ = __lt__ = __ne__ = __eq__ = default
+ __reduce__ = __format__ = __repr__ = __str__ = default
+
+ def harrison_ulp(self, dec):
+ """ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-5504.pdf"""
+ a = dec.next_plus()
+ b = dec.next_minus()
+ return abs(a - b)
+
+ def standard_ulp(self, dec, prec):
+ return P._dec_from_triple(0, '1', dec._exp+len(dec._int)-prec)
+
+ def rounding_direction(self, x, mode):
+ """Determine the effective direction of the rounding when
+ the exact result x is rounded according to mode.
+ Return -1 for downwards, 0 for undirected, 1 for upwards,
+ 2 for ROUND_05UP."""
+ cmp = 1 if x.compare_total(P.Decimal("+0")) >= 0 else -1
+
+ if mode in (P.ROUND_HALF_EVEN, P.ROUND_HALF_UP, P.ROUND_HALF_DOWN):
+ return 0
+ elif mode == P.ROUND_CEILING:
+ return 1
+ elif mode == P.ROUND_FLOOR:
+ return -1
+ elif mode == P.ROUND_UP:
+ return cmp
+ elif mode == P.ROUND_DOWN:
+ return -cmp
+ elif mode == P.ROUND_05UP:
+ return 2
+ else:
+ raise ValueError("Unexpected rounding mode: %s" % mode)
+
+ def check_ulpdiff(self, exact, rounded):
+ # current precision
+ p = context.p.prec
+
+ # Convert infinities to the largest representable number + 1.
+ x = exact
+ if exact.is_infinite():
+ x = P._dec_from_triple(exact._sign, '10', context.p.Emax)
+ y = rounded
+ if rounded.is_infinite():
+ y = P._dec_from_triple(rounded._sign, '10', context.p.Emax)
+
+ # err = (rounded - exact) / ulp(rounded)
+ self.maxctx.prec = p * 2
+ t = self.maxctx.subtract(y, x)
+ if context.c.flags[C.Clamped] or \
+ context.c.flags[C.Underflow]:
+ # The standard ulp does not work in Underflow territory.
+ ulp = self.harrison_ulp(y)
+ else:
+ ulp = self.standard_ulp(y, p)
+ # Error in ulps.
+ err = self.maxctx.divide(t, ulp)
+
+ dir = self.rounding_direction(x, context.p.rounding)
+ if dir == 0:
+ if P.Decimal("-0.6") < err < P.Decimal("0.6"):
+ return True
+ elif dir == 1: # directed, upwards
+ if P.Decimal("-0.1") < err < P.Decimal("1.1"):
+ return True
+ elif dir == -1: # directed, downwards
+ if P.Decimal("-1.1") < err < P.Decimal("0.1"):
+ return True
+ else: # ROUND_05UP
+ if P.Decimal("-1.1") < err < P.Decimal("1.1"):
+ return True
+
+ print("ulp: %s error: %s exact: %s c_rounded: %s"
+ % (ulp, err, exact, rounded))
+ return False
+
+ def bin_resolve_ulp(self, t):
+ """Check if results of _decimal's power function are within the
+ allowed ulp ranges."""
+ # NaNs are beyond repair.
+ if t.rc.is_nan() or t.rp.is_nan():
+ return False
+
+ # "exact" result, double precision, half_even
+ self.maxctx.prec = context.p.prec * 2
+
+ op1, op2 = t.pop[0], t.pop[1]
+ if t.contextfunc:
+ exact = getattr(self.maxctx, t.funcname)(op1, op2)
+ else:
+ exact = getattr(op1, t.funcname)(op2, context=self.maxctx)
+
+ # _decimal's rounded result
+ rounded = P.Decimal(t.cresults[0])
+
+ self.ulpdiff += 1
+ return self.check_ulpdiff(exact, rounded)
+
+ ############################ Correct rounding #############################
+ def resolve_underflow(self, t):
+ """In extremely rare cases where the infinite precision result is just
+ below etiny, cdecimal does not set Subnormal/Underflow. Example:
+
+ setcontext(Context(prec=21, rounding=ROUND_UP, Emin=-55, Emax=85))
+ Decimal("1.00000000000000000000000000000000000000000000000"
+ "0000000100000000000000000000000000000000000000000"
+ "0000000000000025").ln()
+ """
+ if t.cresults != t.presults:
+ return False # Results must be identical.
+ if context.c.flags[C.Rounded] and \
+ context.c.flags[C.Inexact] and \
+ context.p.flags[P.Rounded] and \
+ context.p.flags[P.Inexact]:
+ return True # Subnormal/Underflow may be missing.
+ return False
+
+ def exp(self, t):
+ """Resolve Underflow or ULP difference."""
+ return self.resolve_underflow(t)
+
+ def log10(self, t):
+ """Resolve Underflow or ULP difference."""
+ return self.resolve_underflow(t)
+
+ def ln(self, t):
+ """Resolve Underflow or ULP difference."""
+ return self.resolve_underflow(t)
+
+ def __pow__(self, t):
+ """Always calls the resolve function. C.Decimal does not have correct
+ rounding for the power function."""
+ if context.c.flags[C.Rounded] and \
+ context.c.flags[C.Inexact] and \
+ context.p.flags[P.Rounded] and \
+ context.p.flags[P.Inexact]:
+ return self.bin_resolve_ulp(t)
+ else:
+ return False
+ power = __rpow__ = __pow__
+
+ ############################## Technicalities #############################
+ def __float__(self, t):
+ """NaN comparison in the verify() function obviously gives an
+ incorrect answer: nan == nan -> False"""
+ if t.cop[0].is_nan() and t.pop[0].is_nan():
+ return True
+ return False
+ __complex__ = __float__
+
+ def __radd__(self, t):
+ """decimal.py gives precedence to the first NaN; this is
+ not important, as __radd__ will not be called for
+ two decimal arguments."""
+ if t.rc.is_nan() and t.rp.is_nan():
+ return True
+ return False
+ __rmul__ = __radd__
+
+ ################################ Various ##################################
+ def __round__(self, t):
+ """Exception: Decimal('1').__round__(-100000000000000000000000000)
+ Should it really be InvalidOperation?"""
+ if t.rc is None and t.rp.is_nan():
+ return True
+ return False
+
+shandler = SkipHandler()
+def skip_error(t):
+ return getattr(shandler, t.funcname, shandler.default)(t)
+
+
+# ======================================================================
+# Handling verification errors
+# ======================================================================
+
+class VerifyError(Exception):
+ """Verification failed."""
+ pass
+
+def function_as_string(t):
+ if t.contextfunc:
+ cargs = t.cop
+ pargs = t.pop
+ cfunc = "c_func: %s(" % t.funcname
+ pfunc = "p_func: %s(" % t.funcname
+ else:
+ cself, cargs = t.cop[0], t.cop[1:]
+ pself, pargs = t.pop[0], t.pop[1:]
+ cfunc = "c_func: %s.%s(" % (repr(cself), t.funcname)
+ pfunc = "p_func: %s.%s(" % (repr(pself), t.funcname)
+
+ err = cfunc
+ for arg in cargs:
+ err += "%s, " % repr(arg)
+ err = err.rstrip(", ")
+ err += ")\n"
+
+ err += pfunc
+ for arg in pargs:
+ err += "%s, " % repr(arg)
+ err = err.rstrip(", ")
+ err += ")"
+
+ return err
+
+def raise_error(t):
+ global EXIT_STATUS
+
+ if skip_error(t):
+ return
+ EXIT_STATUS = 1
+
+ err = "Error in %s:\n\n" % t.funcname
+ err += "input operands: %s\n\n" % (t.op,)
+ err += function_as_string(t)
+ err += "\n\nc_result: %s\np_result: %s\n\n" % (t.cresults, t.presults)
+ err += "c_exceptions: %s\np_exceptions: %s\n\n" % (t.cex, t.pex)
+ err += "%s\n\n" % str(t.context)
+
+ raise VerifyError(err)
+
+
+# ======================================================================
+# Main testing functions
+#
+# The procedure is always (t is the TestSet):
+#
+# convert(t) -> Initialize the TestSet as necessary.
+#
+# Return 0 for early abortion (e.g. if a TypeError
+# occurs during conversion, there is nothing to test).
+#
+# Return 1 for continuing with the test case.
+#
+# callfuncs(t) -> Call the relevant function for each implementation
+# and record the results in the TestSet.
+#
+# verify(t) -> Verify the results. If verification fails, details
+# are printed to stdout.
+# ======================================================================
+
+def convert(t, convstr=True):
+ """ t is the testset. At this stage the testset contains a tuple of
+ operands t.op of various types. For decimal methods the first
+ operand (self) is always converted to Decimal. If 'convstr' is
+ true, string operands are converted as well.
+
+ Context operands are of type deccheck.Context, rounding mode
+ operands are given as a tuple (C.rounding, P.rounding).
+
+ Other types (float, int, etc.) are left unchanged.
+ """
+ for i, op in enumerate(t.op):
+
+ context.clear_status()
+
+ if op in RoundModes:
+ t.cop.append(op)
+ t.pop.append(op)
+
+ elif not t.contextfunc and i == 0 or \
+ convstr and isinstance(op, str):
+ try:
+ c = C.Decimal(op)
+ cex = None
+ except (TypeError, ValueError, OverflowError) as e:
+ c = None
+ cex = e.__class__
+
+ try:
+ p = RestrictedDecimal(op)
+ pex = None
+ except (TypeError, ValueError, OverflowError) as e:
+ p = None
+ pex = e.__class__
+
+ t.cop.append(c)
+ t.cex.append(cex)
+ t.pop.append(p)
+ t.pex.append(pex)
+
+ if cex is pex:
+ if str(c) != str(p) or not context.assert_eq_status():
+ raise_error(t)
+ if cex and pex:
+ # nothing to test
+ return 0
+ else:
+ raise_error(t)
+
+ elif isinstance(op, Context):
+ t.context = op
+ t.cop.append(op.c)
+ t.pop.append(op.p)
+
+ else:
+ t.cop.append(op)
+ t.pop.append(op)
+
+ return 1
+
+def callfuncs(t):
+ """ t is the testset. At this stage the testset contains operand lists
+ t.cop and t.pop for the C and Python versions of decimal.
+ For Decimal methods, the first operands are of type C.Decimal and
+ P.Decimal respectively. The remaining operands can have various types.
+ For Context methods, all operands can have any type.
+
+ t.rc and t.rp are the results of the operation.
+ """
+ context.clear_status()
+
+ try:
+ if t.contextfunc:
+ cargs = t.cop
+ t.rc = getattr(context.c, t.funcname)(*cargs)
+ else:
+ cself = t.cop[0]
+ cargs = t.cop[1:]
+ t.rc = getattr(cself, t.funcname)(*cargs)
+ t.cex.append(None)
+ except (TypeError, ValueError, OverflowError, MemoryError) as e:
+ t.rc = None
+ t.cex.append(e.__class__)
+
+ try:
+ if t.contextfunc:
+ pargs = t.pop
+ t.rp = getattr(context.p, t.funcname)(*pargs)
+ else:
+ pself = t.pop[0]
+ pargs = t.pop[1:]
+ t.rp = getattr(pself, t.funcname)(*pargs)
+ t.pex.append(None)
+ except (TypeError, ValueError, OverflowError, MemoryError) as e:
+ t.rp = None
+ t.pex.append(e.__class__)
+
+def verify(t, stat):
+ """ t is the testset. At this stage the testset contains the following
+ tuples:
+
+ t.op: original operands
+ t.cop: C.Decimal operands (see convert for details)
+ t.pop: P.Decimal operands (see convert for details)
+ t.rc: C result
+ t.rp: Python result
+
+ t.rc and t.rp can have various types.
+ """
+ t.cresults.append(str(t.rc))
+ t.presults.append(str(t.rp))
+ if isinstance(t.rc, C.Decimal) and isinstance(t.rp, P.Decimal):
+ # General case: both results are Decimals.
+ t.cresults.append(t.rc.to_eng_string())
+ t.cresults.append(t.rc.as_tuple())
+ t.cresults.append(str(t.rc.imag))
+ t.cresults.append(str(t.rc.real))
+ t.presults.append(t.rp.to_eng_string())
+ t.presults.append(t.rp.as_tuple())
+ t.presults.append(str(t.rp.imag))
+ t.presults.append(str(t.rp.real))
+
+ nc = t.rc.number_class().lstrip('+-s')
+ stat[nc] += 1
+ else:
+ # Results from e.g. __divmod__ can only be compared as strings.
+ if not isinstance(t.rc, tuple) and not isinstance(t.rp, tuple):
+ if t.rc != t.rp:
+ raise_error(t)
+ stat[type(t.rc).__name__] += 1
+
+ # The return value lists must be equal.
+ if t.cresults != t.presults:
+ raise_error(t)
+ # The Python exception lists (TypeError, etc.) must be equal.
+ if t.cex != t.pex:
+ raise_error(t)
+ # The context flags must be equal.
+ if not t.context.assert_eq_status():
+ raise_error(t)
+
+
+# ======================================================================
+# Main test loops
+#
+# test_method(method, testspecs, testfunc) ->
+#
+# Loop through various context settings. The degree of
+# thoroughness is determined by 'testspec'. For each
+# setting, call 'testfunc'. Generally, 'testfunc' itself
+# a loop, iterating through many test cases generated
+# by the functions in randdec.py.
+#
+# test_n-ary(method, prec, exp_range, restricted_range, itr, stat) ->
+#
+# 'test_unary', 'test_binary' and 'test_ternary' are the
+# main test functions passed to 'test_method'. They deal
+# with the regular cases. The thoroughness of testing is
+# determined by 'itr'.
+#
+# 'prec', 'exp_range' and 'restricted_range' are passed
+# to the test-generating functions and limit the generated
+# values. In some cases, for reasonable run times a
+# maximum exponent of 9999 is required.
+#
+# The 'stat' parameter is passed down to the 'verify'
+# function, which records statistics for the result values.
+# ======================================================================
+
+def log(fmt, args=None):
+ if args:
+ sys.stdout.write(''.join((fmt, '\n')) % args)
+ else:
+ sys.stdout.write(''.join((str(fmt), '\n')))
+ sys.stdout.flush()
+
+def test_method(method, testspecs, testfunc):
+ """Iterate a test function through many context settings."""
+ log("testing %s ...", method)
+ stat = defaultdict(int)
+ for spec in testspecs:
+ if 'samples' in spec:
+ spec['prec'] = sorted(random.sample(range(1, 101),
+ spec['samples']))
+ for prec in spec['prec']:
+ context.prec = prec
+ for expts in spec['expts']:
+ emin, emax = expts
+ if emin == 'rand':
+ context.Emin = random.randrange(-1000, 0)
+ context.Emax = random.randrange(prec, 1000)
+ else:
+ context.Emin, context.Emax = emin, emax
+ if prec > context.Emax: continue
+ log(" prec: %d emin: %d emax: %d",
+ (context.prec, context.Emin, context.Emax))
+ restr_range = 9999 if context.Emax > 9999 else context.Emax+99
+ for rounding in RoundModes:
+ context.rounding = rounding
+ context.capitals = random.randrange(2)
+ if spec['clamp'] == 'rand':
+ context.clamp = random.randrange(2)
+ else:
+ context.clamp = spec['clamp']
+ exprange = context.c.Emax
+ testfunc(method, prec, exprange, restr_range,
+ spec['iter'], stat)
+ log(" result types: %s" % sorted([t for t in stat.items()]))
+
+def test_unary(method, prec, exp_range, restricted_range, itr, stat):
+ """Iterate a unary function through many test cases."""
+ if method in UnaryRestricted:
+ exp_range = restricted_range
+ for op in all_unary(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+ if not method.startswith('__'):
+ for op in unary_optarg(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def test_binary(method, prec, exp_range, restricted_range, itr, stat):
+ """Iterate a binary function through many test cases."""
+ if method in BinaryRestricted:
+ exp_range = restricted_range
+ for op in all_binary(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+ if not method.startswith('__'):
+ for op in binary_optarg(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def test_ternary(method, prec, exp_range, restricted_range, itr, stat):
+ """Iterate a ternary function through many test cases."""
+ if method in TernaryRestricted:
+ exp_range = restricted_range
+ for op in all_ternary(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+ if not method.startswith('__'):
+ for op in ternary_optarg(prec, exp_range, itr):
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def test_format(method, prec, exp_range, restricted_range, itr, stat):
+ """Iterate the __format__ method through many test cases."""
+ for op in all_unary(prec, exp_range, itr):
+ fmt1 = rand_format(chr(random.randrange(0, 128)), 'EeGgn')
+ fmt2 = rand_locale()
+ for fmt in (fmt1, fmt2):
+ fmtop = (op[0], fmt)
+ t = TestSet(method, fmtop)
+ try:
+ if not convert(t, convstr=False):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+ for op in all_unary(prec, 9999, itr):
+ fmt1 = rand_format(chr(random.randrange(0, 128)), 'Ff%')
+ fmt2 = rand_locale()
+ for fmt in (fmt1, fmt2):
+ fmtop = (op[0], fmt)
+ t = TestSet(method, fmtop)
+ try:
+ if not convert(t, convstr=False):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def test_round(method, prec, exprange, restricted_range, itr, stat):
+ """Iterate the __round__ method through many test cases."""
+ for op in all_unary(prec, 9999, itr):
+ n = random.randrange(10)
+ roundop = (op[0], n)
+ t = TestSet(method, roundop)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def test_from_float(method, prec, exprange, restricted_range, itr, stat):
+ """Iterate the __float__ method through many test cases."""
+ for rounding in RoundModes:
+ context.rounding = rounding
+ for i in range(1000):
+ f = randfloat()
+ op = (f,) if method.startswith("context.") else ("sNaN", f)
+ t = TestSet(method, op)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+def randcontext(exprange):
+ c = Context(C.Context(), P.Context())
+ c.Emax = random.randrange(1, exprange+1)
+ c.Emin = random.randrange(-exprange, 0)
+ maxprec = 100 if c.Emax >= 100 else c.Emax
+ c.prec = random.randrange(1, maxprec+1)
+ c.clamp = random.randrange(2)
+ c.clear_traps()
+ return c
+
+def test_quantize_api(method, prec, exprange, restricted_range, itr, stat):
+ """Iterate the 'quantize' method through many test cases, using
+ the optional arguments."""
+ for op in all_binary(prec, restricted_range, itr):
+ for rounding in RoundModes:
+ c = randcontext(exprange)
+ quantizeop = (op[0], op[1], rounding, c)
+ t = TestSet(method, quantizeop)
+ try:
+ if not convert(t):
+ continue
+ callfuncs(t)
+ verify(t, stat)
+ except VerifyError as err:
+ log(err)
+
+
+def check_untested(funcdict, c_cls, p_cls):
+ """Determine untested, C-only and Python-only attributes.
+ Uncomment print lines for debugging."""
+ c_attr = set(dir(c_cls))
+ p_attr = set(dir(p_cls))
+ intersect = c_attr & p_attr
+
+ funcdict['c_only'] = tuple(sorted(c_attr-intersect))
+ funcdict['p_only'] = tuple(sorted(p_attr-intersect))
+
+ tested = set()
+ for lst in funcdict.values():
+ for v in lst:
+ v = v.replace("context.", "") if c_cls == C.Context else v
+ tested.add(v)
+
+ funcdict['untested'] = tuple(sorted(intersect-tested))
+
+ #for key in ('untested', 'c_only', 'p_only'):
+ # s = 'Context' if c_cls == C.Context else 'Decimal'
+ # print("\n%s %s:\n%s" % (s, key, funcdict[key]))
+
+
+if __name__ == '__main__':
+
+ import time
+
+ randseed = int(time.time())
+ random.seed(randseed)
+
+ # Set up the testspecs list. A testspec is simply a dictionary
+ # that determines the amount of different contexts that 'test_method'
+ # will generate.
+ base_expts = [(C.MIN_EMIN, C.MAX_EMAX)]
+ if C.MAX_EMAX == 999999999999999999:
+ base_expts.append((-999999999, 999999999))
+
+ # Basic contexts.
+ base = {
+ 'expts': base_expts,
+ 'prec': [],
+ 'clamp': 'rand',
+ 'iter': None,
+ 'samples': None,
+ }
+ # Contexts with small values for prec, emin, emax.
+ small = {
+ 'prec': [1, 2, 3, 4, 5],
+ 'expts': [(-1, 1), (-2, 2), (-3, 3), (-4, 4), (-5, 5)],
+ 'clamp': 'rand',
+ 'iter': None
+ }
+ # IEEE interchange format.
+ ieee = [
+ # DECIMAL32
+ {'prec': [7], 'expts': [(-95, 96)], 'clamp': 1, 'iter': None},
+ # DECIMAL64
+ {'prec': [16], 'expts': [(-383, 384)], 'clamp': 1, 'iter': None},
+ # DECIMAL128
+ {'prec': [34], 'expts': [(-6143, 6144)], 'clamp': 1, 'iter': None}
+ ]
+
+ if '--medium' in sys.argv:
+ base['expts'].append(('rand', 'rand'))
+ # 5 random precisions
+ base['samples'] = 5
+ testspecs = [small] + ieee + [base]
+ if '--long' in sys.argv:
+ base['expts'].append(('rand', 'rand'))
+ # 10 random precisions
+ base['samples'] = 10
+ testspecs = [small] + ieee + [base]
+ elif '--all' in sys.argv:
+ base['expts'].append(('rand', 'rand'))
+ # All precisions in [1, 100]
+ base['samples'] = 100
+ testspecs = [small] + ieee + [base]
+ else: # --short
+ rand_ieee = random.choice(ieee)
+ base['iter'] = small['iter'] = rand_ieee['iter'] = 1
+ # 1 random precision and exponent pair
+ base['samples'] = 1
+ base['expts'] = [random.choice(base_expts)]
+ # 1 random precision and exponent pair
+ prec = random.randrange(1, 6)
+ small['prec'] = [prec]
+ small['expts'] = [(-prec, prec)]
+ testspecs = [small, rand_ieee, base]
+
+ check_untested(Functions, C.Decimal, P.Decimal)
+ check_untested(ContextFunctions, C.Context, P.Context)
+
+
+ log("\n\nRandom seed: %d\n\n", randseed)
+
+ # Decimal methods:
+ for method in Functions['unary'] + Functions['unary_ctx'] + \
+ Functions['unary_rnd_ctx']:
+ test_method(method, testspecs, test_unary)
+
+ for method in Functions['binary'] + Functions['binary_ctx']:
+ test_method(method, testspecs, test_binary)
+
+ for method in Functions['ternary'] + Functions['ternary_ctx']:
+ test_method(method, testspecs, test_ternary)
+
+ test_method('__format__', testspecs, test_format)
+ test_method('__round__', testspecs, test_round)
+ test_method('from_float', testspecs, test_from_float)
+ test_method('quantize', testspecs, test_quantize_api)
+
+ # Context methods:
+ for method in ContextFunctions['unary']:
+ test_method(method, testspecs, test_unary)
+
+ for method in ContextFunctions['binary']:
+ test_method(method, testspecs, test_binary)
+
+ for method in ContextFunctions['ternary']:
+ test_method(method, testspecs, test_ternary)
+
+ test_method('context.create_decimal_from_float', testspecs, test_from_float)
+
+
+ sys.exit(EXIT_STATUS)
diff --git a/Modules/_decimal/tests/formathelper.py b/Modules/_decimal/tests/formathelper.py
new file mode 100644
index 0000000000..19b2aad4a5
--- /dev/null
+++ b/Modules/_decimal/tests/formathelper.py
@@ -0,0 +1,342 @@
+#
+# Copyright (c) 2008-2012 Stefan Krah. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+
+# Generate PEP-3101 format strings.
+
+
+import os, sys, locale, random
+import platform, subprocess
+from test.support import import_fresh_module
+from distutils.spawn import find_executable
+
+C = import_fresh_module('decimal', fresh=['_decimal'])
+P = import_fresh_module('decimal', blocked=['_decimal'])
+
+
+windows_lang_strings = [
+ "chinese", "chinese-simplified", "chinese-traditional", "czech", "danish",
+ "dutch", "belgian", "english", "australian", "canadian", "english-nz",
+ "english-uk", "english-us", "finnish", "french", "french-belgian",
+ "french-canadian", "french-swiss", "german", "german-austrian",
+ "german-swiss", "greek", "hungarian", "icelandic", "italian", "italian-swiss",
+ "japanese", "korean", "norwegian", "norwegian-bokmal", "norwegian-nynorsk",
+ "polish", "portuguese", "portuguese-brazil", "russian", "slovak", "spanish",
+ "spanish-mexican", "spanish-modern", "swedish", "turkish",
+]
+
+preferred_encoding = {
+ 'cs_CZ': 'ISO8859-2',
+ 'cs_CZ.iso88592': 'ISO8859-2',
+ 'czech': 'ISO8859-2',
+ 'eesti': 'ISO8859-1',
+ 'estonian': 'ISO8859-1',
+ 'et_EE': 'ISO8859-15',
+ 'et_EE.ISO-8859-15': 'ISO8859-15',
+ 'et_EE.iso885915': 'ISO8859-15',
+ 'et_EE.iso88591': 'ISO8859-1',
+ 'fi_FI.iso88591': 'ISO8859-1',
+ 'fi_FI': 'ISO8859-15',
+ 'fi_FI@euro': 'ISO8859-15',
+ 'fi_FI.iso885915@euro': 'ISO8859-15',
+ 'finnish': 'ISO8859-1',
+ 'lv_LV': 'ISO8859-13',
+ 'lv_LV.iso885913': 'ISO8859-13',
+ 'nb_NO': 'ISO8859-1',
+ 'nb_NO.iso88591': 'ISO8859-1',
+ 'bokmal': 'ISO8859-1',
+ 'nn_NO': 'ISO8859-1',
+ 'nn_NO.iso88591': 'ISO8859-1',
+ 'no_NO': 'ISO8859-1',
+ 'norwegian': 'ISO8859-1',
+ 'nynorsk': 'ISO8859-1',
+ 'ru_RU': 'ISO8859-5',
+ 'ru_RU.iso88595': 'ISO8859-5',
+ 'russian': 'ISO8859-5',
+ 'ru_RU.KOI8-R': 'KOI8-R',
+ 'ru_RU.koi8r': 'KOI8-R',
+ 'ru_RU.CP1251': 'CP1251',
+ 'ru_RU.cp1251': 'CP1251',
+ 'sk_SK': 'ISO8859-2',
+ 'sk_SK.iso88592': 'ISO8859-2',
+ 'slovak': 'ISO8859-2',
+ 'sv_FI': 'ISO8859-1',
+ 'sv_FI.iso88591': 'ISO8859-1',
+ 'sv_FI@euro': 'ISO8859-15',
+ 'sv_FI.iso885915@euro': 'ISO8859-15',
+ 'uk_UA': 'KOI8-U',
+ 'uk_UA.koi8u': 'KOI8-U'
+}
+
+integers = [
+ "",
+ "1",
+ "12",
+ "123",
+ "1234",
+ "12345",
+ "123456",
+ "1234567",
+ "12345678",
+ "123456789",
+ "1234567890",
+ "12345678901",
+ "123456789012",
+ "1234567890123",
+ "12345678901234",
+ "123456789012345",
+ "1234567890123456",
+ "12345678901234567",
+ "123456789012345678",
+ "1234567890123456789",
+ "12345678901234567890",
+ "123456789012345678901",
+ "1234567890123456789012",
+]
+
+numbers = [
+ "0", "-0", "+0",
+ "0.0", "-0.0", "+0.0",
+ "0e0", "-0e0", "+0e0",
+ ".0", "-.0",
+ ".1", "-.1",
+ "1.1", "-1.1",
+ "1e1", "-1e1"
+]
+
+# Get the list of available locales.
+if platform.system() == 'Windows':
+ locale_list = windows_lang_strings
+else:
+ locale_list = ['C']
+ if os.path.isfile("/var/lib/locales/supported.d/local"):
+ # On Ubuntu, `locale -a` gives the wrong case for some locales,
+ # so we get the correct names directly:
+ with open("/var/lib/locales/supported.d/local") as f:
+ locale_list = [loc.split()[0] for loc in f.readlines() \
+ if not loc.startswith('#')]
+ elif find_executable('locale'):
+ locale_list = subprocess.Popen(["locale", "-a"],
+ stdout=subprocess.PIPE).communicate()[0]
+ try:
+ locale_list = locale_list.decode()
+ except UnicodeDecodeError:
+ # Some distributions insist on using latin-1 characters
+ # in their locale names.
+ locale_list = locale_list.decode('latin-1')
+ locale_list = locale_list.split('\n')
+try:
+ locale_list.remove('')
+except ValueError:
+ pass
+
+# Debian
+if os.path.isfile("/etc/locale.alias"):
+ with open("/etc/locale.alias") as f:
+ while 1:
+ try:
+ line = f.readline()
+ except UnicodeDecodeError:
+ continue
+ if line == "":
+ break
+ if line.startswith('#'):
+ continue
+ x = line.split()
+ if len(x) == 2:
+ if x[0] in locale_list:
+ locale_list.remove(x[0])
+
+# FreeBSD
+if platform.system() == 'FreeBSD':
+ # http://www.freebsd.org/cgi/query-pr.cgi?pr=142173
+ # en_GB.US-ASCII has 163 as the currency symbol.
+ for loc in ['it_CH.ISO8859-1', 'it_CH.ISO8859-15', 'it_CH.UTF-8',
+ 'it_IT.ISO8859-1', 'it_IT.ISO8859-15', 'it_IT.UTF-8',
+ 'sl_SI.ISO8859-2', 'sl_SI.UTF-8',
+ 'en_GB.US-ASCII']:
+ try:
+ locale_list.remove(loc)
+ except ValueError:
+ pass
+
+# Print a testcase in the format of the IBM tests (for runtest.c):
+def get_preferred_encoding():
+ loc = locale.setlocale(locale.LC_CTYPE)
+ if loc in preferred_encoding:
+ return preferred_encoding[loc]
+ else:
+ return locale.getpreferredencoding()
+
+def printit(testno, s, fmt, encoding=None):
+ if not encoding:
+ encoding = get_preferred_encoding()
+ try:
+ result = format(P.Decimal(s), fmt)
+ fmt = str(fmt.encode(encoding))[2:-1]
+ result = str(result.encode(encoding))[2:-1]
+ if "'" in result:
+ sys.stdout.write("xfmt%d format %s '%s' -> \"%s\"\n"
+ % (testno, s, fmt, result))
+ else:
+ sys.stdout.write("xfmt%d format %s '%s' -> '%s'\n"
+ % (testno, s, fmt, result))
+ except Exception as err:
+ sys.stderr.write("%s %s %s\n" % (err, s, fmt))
+
+
+# Check if an integer can be converted to a valid fill character.
+def check_fillchar(i):
+ try:
+ c = chr(i)
+ c.encode('utf-8').decode()
+ format(P.Decimal(0), c + '<19g')
+ return c
+ except:
+ return None
+
+# Generate all unicode characters that are accepted as
+# fill characters by decimal.py.
+def all_fillchars():
+ for i in range(0, 0x110002):
+ c = check_fillchar(i)
+ if c: yield c
+
+# Return random fill character.
+def rand_fillchar():
+ while 1:
+ i = random.randrange(0, 0x110002)
+ c = check_fillchar(i)
+ if c: return c
+
+# Generate random format strings
+# [[fill]align][sign][#][0][width][.precision][type]
+def rand_format(fill, typespec='EeGgFfn%'):
+ active = sorted(random.sample(range(7), random.randrange(8)))
+ have_align = 0
+ s = ''
+ for elem in active:
+ if elem == 0: # fill+align
+ s += fill
+ s += random.choice('<>=^')
+ have_align = 1
+ elif elem == 1: # sign
+ s += random.choice('+- ')
+ elif elem == 2 and not have_align: # zeropad
+ s += '0'
+ elif elem == 3: # width
+ s += str(random.randrange(1, 100))
+ elif elem == 4: # thousands separator
+ s += ','
+ elif elem == 5: # prec
+ s += '.'
+ s += str(random.randrange(100))
+ elif elem == 6:
+ if 4 in active: c = typespec.replace('n', '')
+ else: c = typespec
+ s += random.choice(c)
+ return s
+
+# Partially brute force all possible format strings containing a thousands
+# separator. Fall back to random where the runtime would become excessive.
+# [[fill]align][sign][#][0][width][,][.precision][type]
+def all_format_sep():
+ for align in ('', '<', '>', '=', '^'):
+ for fill in ('', 'x'):
+ if align == '': fill = ''
+ for sign in ('', '+', '-', ' '):
+ for zeropad in ('', '0'):
+ if align != '': zeropad = ''
+ for width in ['']+[str(y) for y in range(1, 15)]+['101']:
+ for prec in ['']+['.'+str(y) for y in range(15)]:
+ # for type in ('', 'E', 'e', 'G', 'g', 'F', 'f', '%'):
+ type = random.choice(('', 'E', 'e', 'G', 'g', 'F', 'f', '%'))
+ yield ''.join((fill, align, sign, zeropad, width, ',', prec, type))
+
+# Partially brute force all possible format strings with an 'n' specifier.
+# [[fill]align][sign][#][0][width][,][.precision][type]
+def all_format_loc():
+ for align in ('', '<', '>', '=', '^'):
+ for fill in ('', 'x'):
+ if align == '': fill = ''
+ for sign in ('', '+', '-', ' '):
+ for zeropad in ('', '0'):
+ if align != '': zeropad = ''
+ for width in ['']+[str(y) for y in range(1, 20)]+['101']:
+ for prec in ['']+['.'+str(y) for y in range(1, 20)]:
+ yield ''.join((fill, align, sign, zeropad, width, prec, 'n'))
+
+# Generate random format strings with a unicode fill character
+# [[fill]align][sign][#][0][width][,][.precision][type]
+def randfill(fill):
+ active = sorted(random.sample(range(5), random.randrange(6)))
+ s = ''
+ s += str(fill)
+ s += random.choice('<>=^')
+ for elem in active:
+ if elem == 0: # sign
+ s += random.choice('+- ')
+ elif elem == 1: # width
+ s += str(random.randrange(1, 100))
+ elif elem == 2: # thousands separator
+ s += ','
+ elif elem == 3: # prec
+ s += '.'
+ s += str(random.randrange(100))
+ elif elem == 4:
+ if 2 in active: c = 'EeGgFf%'
+ else: c = 'EeGgFfn%'
+ s += random.choice(c)
+ return s
+
+# Generate random format strings with random locale setting
+# [[fill]align][sign][#][0][width][,][.precision][type]
+def rand_locale():
+ try:
+ loc = random.choice(locale_list)
+ locale.setlocale(locale.LC_ALL, loc)
+ except locale.Error as err:
+ pass
+ active = sorted(random.sample(range(5), random.randrange(6)))
+ s = ''
+ have_align = 0
+ for elem in active:
+ if elem == 0: # fill+align
+ s += chr(random.randrange(32, 128))
+ s += random.choice('<>=^')
+ have_align = 1
+ elif elem == 1: # sign
+ s += random.choice('+- ')
+ elif elem == 2 and not have_align: # zeropad
+ s += '0'
+ elif elem == 3: # width
+ s += str(random.randrange(1, 100))
+ elif elem == 4: # prec
+ s += '.'
+ s += str(random.randrange(100))
+ s += 'n'
+ return s
diff --git a/Modules/_decimal/tests/randdec.py b/Modules/_decimal/tests/randdec.py
new file mode 100644
index 0000000000..d667f79f2c
--- /dev/null
+++ b/Modules/_decimal/tests/randdec.py
@@ -0,0 +1,575 @@
+#
+# Copyright (c) 2008-2012 Stefan Krah. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+
+# Generate test cases for deccheck.py.
+
+
+#
+# Grammar from http://speleotrove.com/decimal/daconvs.html
+#
+# sign ::= '+' | '-'
+# digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' |
+# '8' | '9'
+# indicator ::= 'e' | 'E'
+# digits ::= digit [digit]...
+# decimal-part ::= digits '.' [digits] | ['.'] digits
+# exponent-part ::= indicator [sign] digits
+# infinity ::= 'Infinity' | 'Inf'
+# nan ::= 'NaN' [digits] | 'sNaN' [digits]
+# numeric-value ::= decimal-part [exponent-part] | infinity
+# numeric-string ::= [sign] numeric-value | [sign] nan
+#
+
+
+from random import randrange, sample
+from fractions import Fraction
+from randfloat import un_randfloat, bin_randfloat, tern_randfloat
+
+
+def sign():
+ if randrange(2):
+ if randrange(2): return '+'
+ return ''
+ return '-'
+
+def indicator():
+ return "eE"[randrange(2)]
+
+def digits(maxprec):
+ if maxprec == 0: return ''
+ return str(randrange(10**maxprec))
+
+def dot():
+ if randrange(2): return '.'
+ return ''
+
+def decimal_part(maxprec):
+ if randrange(100) > 60: # integers
+ return digits(maxprec)
+ if randrange(2):
+ intlen = randrange(1, maxprec+1)
+ fraclen = maxprec-intlen
+ intpart = digits(intlen)
+ fracpart = digits(fraclen)
+ return ''.join((intpart, '.', fracpart))
+ else:
+ return ''.join((dot(), digits(maxprec)))
+
+def expdigits(maxexp):
+ return str(randrange(maxexp))
+
+def exponent_part(maxexp):
+ return ''.join((indicator(), sign(), expdigits(maxexp)))
+
+def infinity():
+ if randrange(2): return 'Infinity'
+ return 'Inf'
+
+def nan():
+ d = ''
+ if randrange(2):
+ d = digits(randrange(99))
+ if randrange(2):
+ return ''.join(('NaN', d))
+ else:
+ return ''.join(('sNaN', d))
+
+def numeric_value(maxprec, maxexp):
+ if randrange(100) > 90:
+ return infinity()
+ exp_part = ''
+ if randrange(100) > 60:
+ exp_part = exponent_part(maxexp)
+ return ''.join((decimal_part(maxprec), exp_part))
+
+def numeric_string(maxprec, maxexp):
+ if randrange(100) > 95:
+ return ''.join((sign(), nan()))
+ else:
+ return ''.join((sign(), numeric_value(maxprec, maxexp)))
+
+def randdec(maxprec, maxexp):
+ return numeric_string(maxprec, maxexp)
+
+def rand_adjexp(maxprec, maxadjexp):
+ d = digits(maxprec)
+ maxexp = maxadjexp-len(d)+1
+ if maxexp == 0: maxexp = 1
+ exp = str(randrange(maxexp-2*(abs(maxexp)), maxexp))
+ return ''.join((sign(), d, 'E', exp))
+
+
+def ndigits(n):
+ if n < 1: return 0
+ return randrange(10**(n-1), 10**n)
+
+def randtuple(maxprec, maxexp):
+ n = randrange(100)
+ sign = randrange(2)
+ coeff = ndigits(maxprec)
+ if n >= 95:
+ coeff = ()
+ exp = 'F'
+ elif n >= 85:
+ coeff = tuple(map(int, str(ndigits(maxprec))))
+ exp = "nN"[randrange(2)]
+ else:
+ coeff = tuple(map(int, str(ndigits(maxprec))))
+ exp = randrange(-maxexp, maxexp)
+ return (sign, coeff, exp)
+
+def from_triple(sign, coeff, exp):
+ return ''.join((str(sign*coeff), indicator(), str(exp)))
+
+
+# Close to 10**n
+def un_close_to_pow10(prec, maxexp, itr=None):
+ if itr is None:
+ lst = range(prec+30)
+ else:
+ lst = sample(range(prec+30), itr)
+ nines = [10**n - 1 for n in lst]
+ pow10 = [10**n for n in lst]
+ for coeff in nines:
+ yield coeff
+ yield -coeff
+ yield from_triple(1, coeff, randrange(2*maxexp))
+ yield from_triple(-1, coeff, randrange(2*maxexp))
+ for coeff in pow10:
+ yield coeff
+ yield -coeff
+
+# Close to 10**n
+def bin_close_to_pow10(prec, maxexp, itr=None):
+ if itr is None:
+ lst = range(prec+30)
+ else:
+ lst = sample(range(prec+30), itr)
+ nines = [10**n - 1 for n in lst]
+ pow10 = [10**n for n in lst]
+ for coeff in nines:
+ yield coeff, 1
+ yield -coeff, -1
+ yield 1, coeff
+ yield -1, -coeff
+ yield from_triple(1, coeff, randrange(2*maxexp)), 1
+ yield from_triple(-1, coeff, randrange(2*maxexp)), -1
+ yield 1, from_triple(1, coeff, -randrange(2*maxexp))
+ yield -1, from_triple(-1, coeff, -randrange(2*maxexp))
+ for coeff in pow10:
+ yield coeff, -1
+ yield -coeff, 1
+ yield 1, -coeff
+ yield -coeff, 1
+
+# Close to 1:
+def close_to_one_greater(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("1.", '0'*randrange(prec),
+ str(randrange(rprec))))
+
+def close_to_one_less(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("0.9", '9'*randrange(prec),
+ str(randrange(rprec))))
+
+# Close to 0:
+def close_to_zero_greater(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("0.", '0'*randrange(prec),
+ str(randrange(rprec))))
+
+def close_to_zero_less(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("-0.", '0'*randrange(prec),
+ str(randrange(rprec))))
+
+# Close to emax:
+def close_to_emax_less(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("9.", '9'*randrange(prec),
+ str(randrange(rprec)), "E", str(emax)))
+
+def close_to_emax_greater(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("1.", '0'*randrange(prec),
+ str(randrange(rprec)), "E", str(emax+1)))
+
+# Close to emin:
+def close_to_emin_greater(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("1.", '0'*randrange(prec),
+ str(randrange(rprec)), "E", str(emin)))
+
+def close_to_emin_less(prec, emax, emin):
+ rprec = 10**prec
+ return ''.join(("9.", '9'*randrange(prec),
+ str(randrange(rprec)), "E", str(emin-1)))
+
+# Close to etiny:
+def close_to_etiny_greater(prec, emax, emin):
+ rprec = 10**prec
+ etiny = emin - (prec - 1)
+ return ''.join(("1.", '0'*randrange(prec),
+ str(randrange(rprec)), "E", str(etiny)))
+
+def close_to_etiny_less(prec, emax, emin):
+ rprec = 10**prec
+ etiny = emin - (prec - 1)
+ return ''.join(("9.", '9'*randrange(prec),
+ str(randrange(rprec)), "E", str(etiny-1)))
+
+
+def close_to_min_etiny_greater(prec, max_prec, min_emin):
+ rprec = 10**prec
+ etiny = min_emin - (max_prec - 1)
+ return ''.join(("1.", '0'*randrange(prec),
+ str(randrange(rprec)), "E", str(etiny)))
+
+def close_to_min_etiny_less(prec, max_prec, min_emin):
+ rprec = 10**prec
+ etiny = min_emin - (max_prec - 1)
+ return ''.join(("9.", '9'*randrange(prec),
+ str(randrange(rprec)), "E", str(etiny-1)))
+
+
+close_funcs = [
+ close_to_one_greater, close_to_one_less, close_to_zero_greater,
+ close_to_zero_less, close_to_emax_less, close_to_emax_greater,
+ close_to_emin_greater, close_to_emin_less, close_to_etiny_greater,
+ close_to_etiny_less, close_to_min_etiny_greater, close_to_min_etiny_less
+]
+
+
+def un_close_numbers(prec, emax, emin, itr=None):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func in close_funcs:
+ yield func(prec, emax, emin)
+
+def bin_close_numbers(prec, emax, emin, itr=None):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func1 in close_funcs:
+ for func2 in close_funcs:
+ yield func1(prec, emax, emin), func2(prec, emax, emin)
+ for func in close_funcs:
+ yield randdec(prec, emax), func(prec, emax, emin)
+ yield func(prec, emax, emin), randdec(prec, emax)
+
+def tern_close_numbers(prec, emax, emin, itr):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func1 in close_funcs:
+ for func2 in close_funcs:
+ for func3 in close_funcs:
+ yield (func1(prec, emax, emin), func2(prec, emax, emin),
+ func3(prec, emax, emin))
+ for func in close_funcs:
+ yield (randdec(prec, emax), func(prec, emax, emin),
+ func(prec, emax, emin))
+ yield (func(prec, emax, emin), randdec(prec, emax),
+ func(prec, emax, emin))
+ yield (func(prec, emax, emin), func(prec, emax, emin),
+ randdec(prec, emax))
+ for func in close_funcs:
+ yield (randdec(prec, emax), randdec(prec, emax),
+ func(prec, emax, emin))
+ yield (randdec(prec, emax), func(prec, emax, emin),
+ randdec(prec, emax))
+ yield (func(prec, emax, emin), randdec(prec, emax),
+ randdec(prec, emax))
+
+
+# If itr == None, test all digit lengths up to prec + 30
+def un_incr_digits(prec, maxexp, itr):
+ if itr is None:
+ lst = range(prec+30)
+ else:
+ lst = sample(range(prec+30), itr)
+ for m in lst:
+ yield from_triple(1, ndigits(m), 0)
+ yield from_triple(-1, ndigits(m), 0)
+ yield from_triple(1, ndigits(m), randrange(maxexp))
+ yield from_triple(-1, ndigits(m), randrange(maxexp))
+
+# If itr == None, test all digit lengths up to prec + 30
+# Also output decimals im tuple form.
+def un_incr_digits_tuple(prec, maxexp, itr):
+ if itr is None:
+ lst = range(prec+30)
+ else:
+ lst = sample(range(prec+30), itr)
+ for m in lst:
+ yield from_triple(1, ndigits(m), 0)
+ yield from_triple(-1, ndigits(m), 0)
+ yield from_triple(1, ndigits(m), randrange(maxexp))
+ yield from_triple(-1, ndigits(m), randrange(maxexp))
+ # test from tuple
+ yield (0, tuple(map(int, str(ndigits(m)))), 0)
+ yield (1, tuple(map(int, str(ndigits(m)))), 0)
+ yield (0, tuple(map(int, str(ndigits(m)))), randrange(maxexp))
+ yield (1, tuple(map(int, str(ndigits(m)))), randrange(maxexp))
+
+# If itr == None, test all combinations of digit lengths up to prec + 30
+def bin_incr_digits(prec, maxexp, itr):
+ if itr is None:
+ lst1 = range(prec+30)
+ lst2 = range(prec+30)
+ else:
+ lst1 = sample(range(prec+30), itr)
+ lst2 = sample(range(prec+30), itr)
+ for m in lst1:
+ x = from_triple(1, ndigits(m), 0)
+ yield x, x
+ x = from_triple(-1, ndigits(m), 0)
+ yield x, x
+ x = from_triple(1, ndigits(m), randrange(maxexp))
+ yield x, x
+ x = from_triple(-1, ndigits(m), randrange(maxexp))
+ yield x, x
+ for m in lst1:
+ for n in lst2:
+ x = from_triple(1, ndigits(m), 0)
+ y = from_triple(1, ndigits(n), 0)
+ yield x, y
+ x = from_triple(-1, ndigits(m), 0)
+ y = from_triple(1, ndigits(n), 0)
+ yield x, y
+ x = from_triple(1, ndigits(m), 0)
+ y = from_triple(-1, ndigits(n), 0)
+ yield x, y
+ x = from_triple(-1, ndigits(m), 0)
+ y = from_triple(-1, ndigits(n), 0)
+ yield x, y
+ x = from_triple(1, ndigits(m), randrange(maxexp))
+ y = from_triple(1, ndigits(n), randrange(maxexp))
+ yield x, y
+ x = from_triple(-1, ndigits(m), randrange(maxexp))
+ y = from_triple(1, ndigits(n), randrange(maxexp))
+ yield x, y
+ x = from_triple(1, ndigits(m), randrange(maxexp))
+ y = from_triple(-1, ndigits(n), randrange(maxexp))
+ yield x, y
+ x = from_triple(-1, ndigits(m), randrange(maxexp))
+ y = from_triple(-1, ndigits(n), randrange(maxexp))
+ yield x, y
+
+
+def randsign():
+ return (1, -1)[randrange(2)]
+
+# If itr == None, test all combinations of digit lengths up to prec + 30
+def tern_incr_digits(prec, maxexp, itr):
+ if itr is None:
+ lst1 = range(prec+30)
+ lst2 = range(prec+30)
+ lst3 = range(prec+30)
+ else:
+ lst1 = sample(range(prec+30), itr)
+ lst2 = sample(range(prec+30), itr)
+ lst3 = sample(range(prec+30), itr)
+ for m in lst1:
+ for n in lst2:
+ for p in lst3:
+ x = from_triple(randsign(), ndigits(m), 0)
+ y = from_triple(randsign(), ndigits(n), 0)
+ z = from_triple(randsign(), ndigits(p), 0)
+ yield x, y, z
+
+
+# Tests for the 'logical' functions
+def bindigits(prec):
+ z = 0
+ for i in range(prec):
+ z += randrange(2) * 10**i
+ return z
+
+def logical_un_incr_digits(prec, itr):
+ if itr is None:
+ lst = range(prec+30)
+ else:
+ lst = sample(range(prec+30), itr)
+ for m in lst:
+ yield from_triple(1, bindigits(m), 0)
+
+def logical_bin_incr_digits(prec, itr):
+ if itr is None:
+ lst1 = range(prec+30)
+ lst2 = range(prec+30)
+ else:
+ lst1 = sample(range(prec+30), itr)
+ lst2 = sample(range(prec+30), itr)
+ for m in lst1:
+ x = from_triple(1, bindigits(m), 0)
+ yield x, x
+ for m in lst1:
+ for n in lst2:
+ x = from_triple(1, bindigits(m), 0)
+ y = from_triple(1, bindigits(n), 0)
+ yield x, y
+
+
+def randint():
+ p = randrange(1, 100)
+ return ndigits(p) * (1,-1)[randrange(2)]
+
+def randfloat():
+ p = randrange(1, 100)
+ s = numeric_value(p, 383)
+ try:
+ f = float(numeric_value(p, 383))
+ except ValueError:
+ f = 0.0
+ return f
+
+def randcomplex():
+ real = randfloat()
+ if randrange(100) > 30:
+ imag = 0.0
+ else:
+ imag = randfloat()
+ return complex(real, imag)
+
+def randfraction():
+ num = randint()
+ denom = randint()
+ if denom == 0:
+ denom = 1
+ return Fraction(num, denom)
+
+number_funcs = [randint, randfloat, randcomplex, randfraction]
+
+def un_random_mixed_op(itr=None):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func in number_funcs:
+ yield func()
+ # Test garbage input
+ for x in (['x'], ('y',), {'z'}, {1:'z'}):
+ yield x
+
+def bin_random_mixed_op(prec, emax, emin, itr=None):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func in number_funcs:
+ yield randdec(prec, emax), func()
+ yield func(), randdec(prec, emax)
+ for number in number_funcs:
+ for dec in close_funcs:
+ yield dec(prec, emax, emin), number()
+ # Test garbage input
+ for x in (['x'], ('y',), {'z'}, {1:'z'}):
+ for y in (['x'], ('y',), {'z'}, {1:'z'}):
+ yield x, y
+
+def tern_random_mixed_op(prec, emax, emin, itr):
+ if itr is None:
+ itr = 1000
+ for _ in range(itr):
+ for func in number_funcs:
+ yield randdec(prec, emax), randdec(prec, emax), func()
+ yield randdec(prec, emax), func(), func()
+ yield func(), func(), func()
+ # Test garbage input
+ for x in (['x'], ('y',), {'z'}, {1:'z'}):
+ for y in (['x'], ('y',), {'z'}, {1:'z'}):
+ for z in (['x'], ('y',), {'z'}, {1:'z'}):
+ yield x, y, z
+
+def all_unary(prec, exp_range, itr):
+ for a in un_close_to_pow10(prec, exp_range, itr):
+ yield (a,)
+ for a in un_close_numbers(prec, exp_range, -exp_range, itr):
+ yield (a,)
+ for a in un_incr_digits_tuple(prec, exp_range, itr):
+ yield (a,)
+ for a in un_randfloat():
+ yield (a,)
+ for a in un_random_mixed_op(itr):
+ yield (a,)
+ for a in logical_un_incr_digits(prec, itr):
+ yield (a,)
+ for _ in range(100):
+ yield (randdec(prec, exp_range),)
+ for _ in range(100):
+ yield (randtuple(prec, exp_range),)
+
+def unary_optarg(prec, exp_range, itr):
+ for _ in range(100):
+ yield randdec(prec, exp_range), None
+ yield randdec(prec, exp_range), None, None
+
+def all_binary(prec, exp_range, itr):
+ for a, b in bin_close_to_pow10(prec, exp_range, itr):
+ yield a, b
+ for a, b in bin_close_numbers(prec, exp_range, -exp_range, itr):
+ yield a, b
+ for a, b in bin_incr_digits(prec, exp_range, itr):
+ yield a, b
+ for a, b in bin_randfloat():
+ yield a, b
+ for a, b in bin_random_mixed_op(prec, exp_range, -exp_range, itr):
+ yield a, b
+ for a, b in logical_bin_incr_digits(prec, itr):
+ yield a, b
+ for _ in range(100):
+ yield randdec(prec, exp_range), randdec(prec, exp_range)
+
+def binary_optarg(prec, exp_range, itr):
+ for _ in range(100):
+ yield randdec(prec, exp_range), randdec(prec, exp_range), None
+ yield randdec(prec, exp_range), randdec(prec, exp_range), None, None
+
+def all_ternary(prec, exp_range, itr):
+ for a, b, c in tern_close_numbers(prec, exp_range, -exp_range, itr):
+ yield a, b, c
+ for a, b, c in tern_incr_digits(prec, exp_range, itr):
+ yield a, b, c
+ for a, b, c in tern_randfloat():
+ yield a, b, c
+ for a, b, c in tern_random_mixed_op(prec, exp_range, -exp_range, itr):
+ yield a, b, c
+ for _ in range(100):
+ a = randdec(prec, 2*exp_range)
+ b = randdec(prec, 2*exp_range)
+ c = randdec(prec, 2*exp_range)
+ yield a, b, c
+
+def ternary_optarg(prec, exp_range, itr):
+ for _ in range(100):
+ a = randdec(prec, 2*exp_range)
+ b = randdec(prec, 2*exp_range)
+ c = randdec(prec, 2*exp_range)
+ yield a, b, c, None
+ yield a, b, c, None, None
diff --git a/Modules/_decimal/tests/randfloat.py b/Modules/_decimal/tests/randfloat.py
new file mode 100644
index 0000000000..1687303568
--- /dev/null
+++ b/Modules/_decimal/tests/randfloat.py
@@ -0,0 +1,250 @@
+# Copyright (c) 2010 Python Software Foundation. All Rights Reserved.
+# Adapted from Python's Lib/test/test_strtod.py (by Mark Dickinson)
+
+# More test cases for deccheck.py.
+
+import random
+
+TEST_SIZE = 2
+
+
+def test_short_halfway_cases():
+ # exact halfway cases with a small number of significant digits
+ for k in 0, 5, 10, 15, 20:
+ # upper = smallest integer >= 2**54/5**k
+ upper = -(-2**54//5**k)
+ # lower = smallest odd number >= 2**53/5**k
+ lower = -(-2**53//5**k)
+ if lower % 2 == 0:
+ lower += 1
+ for i in range(10 * TEST_SIZE):
+ # Select a random odd n in [2**53/5**k,
+ # 2**54/5**k). Then n * 10**k gives a halfway case
+ # with small number of significant digits.
+ n, e = random.randrange(lower, upper, 2), k
+
+ # Remove any additional powers of 5.
+ while n % 5 == 0:
+ n, e = n // 5, e + 1
+ assert n % 10 in (1, 3, 7, 9)
+
+ # Try numbers of the form n * 2**p2 * 10**e, p2 >= 0,
+ # until n * 2**p2 has more than 20 significant digits.
+ digits, exponent = n, e
+ while digits < 10**20:
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+ # Same again, but with extra trailing zeros.
+ s = '{}e{}'.format(digits * 10**40, exponent - 40)
+ yield s
+ digits *= 2
+
+ # Try numbers of the form n * 5**p2 * 10**(e - p5), p5
+ # >= 0, with n * 5**p5 < 10**20.
+ digits, exponent = n, e
+ while digits < 10**20:
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+ # Same again, but with extra trailing zeros.
+ s = '{}e{}'.format(digits * 10**40, exponent - 40)
+ yield s
+ digits *= 5
+ exponent -= 1
+
+def test_halfway_cases():
+ # test halfway cases for the round-half-to-even rule
+ for i in range(1000):
+ for j in range(TEST_SIZE):
+ # bit pattern for a random finite positive (or +0.0) float
+ bits = random.randrange(2047*2**52)
+
+ # convert bit pattern to a number of the form m * 2**e
+ e, m = divmod(bits, 2**52)
+ if e:
+ m, e = m + 2**52, e - 1
+ e -= 1074
+
+ # add 0.5 ulps
+ m, e = 2*m + 1, e - 1
+
+ # convert to a decimal string
+ if e >= 0:
+ digits = m << e
+ exponent = 0
+ else:
+ # m * 2**e = (m * 5**-e) * 10**e
+ digits = m * 5**-e
+ exponent = e
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+
+def test_boundaries():
+ # boundaries expressed as triples (n, e, u), where
+ # n*10**e is an approximation to the boundary value and
+ # u*10**e is 1ulp
+ boundaries = [
+ (10000000000000000000, -19, 1110), # a power of 2 boundary (1.0)
+ (17976931348623159077, 289, 1995), # overflow boundary (2.**1024)
+ (22250738585072013831, -327, 4941), # normal/subnormal (2.**-1022)
+ (0, -327, 4941), # zero
+ ]
+ for n, e, u in boundaries:
+ for j in range(1000):
+ for i in range(TEST_SIZE):
+ digits = n + random.randrange(-3*u, 3*u)
+ exponent = e
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+ n *= 10
+ u *= 10
+ e -= 1
+
+def test_underflow_boundary():
+ # test values close to 2**-1075, the underflow boundary; similar
+ # to boundary_tests, except that the random error doesn't scale
+ # with n
+ for exponent in range(-400, -320):
+ base = 10**-exponent // 2**1075
+ for j in range(TEST_SIZE):
+ digits = base + random.randrange(-1000, 1000)
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+
+def test_bigcomp():
+ for ndigs in 5, 10, 14, 15, 16, 17, 18, 19, 20, 40, 41, 50:
+ dig10 = 10**ndigs
+ for i in range(100 * TEST_SIZE):
+ digits = random.randrange(dig10)
+ exponent = random.randrange(-400, 400)
+ s = '{}e{}'.format(digits, exponent)
+ yield s
+
+def test_parsing():
+ # make '0' more likely to be chosen than other digits
+ digits = '000000123456789'
+ signs = ('+', '-', '')
+
+ # put together random short valid strings
+ # \d*[.\d*]?e
+ for i in range(1000):
+ for j in range(TEST_SIZE):
+ s = random.choice(signs)
+ intpart_len = random.randrange(5)
+ s += ''.join(random.choice(digits) for _ in range(intpart_len))
+ if random.choice([True, False]):
+ s += '.'
+ fracpart_len = random.randrange(5)
+ s += ''.join(random.choice(digits)
+ for _ in range(fracpart_len))
+ else:
+ fracpart_len = 0
+ if random.choice([True, False]):
+ s += random.choice(['e', 'E'])
+ s += random.choice(signs)
+ exponent_len = random.randrange(1, 4)
+ s += ''.join(random.choice(digits)
+ for _ in range(exponent_len))
+
+ if intpart_len + fracpart_len:
+ yield s
+
+test_particular = [
+ # squares
+ '1.00000000100000000025',
+ '1.0000000000000000000000000100000000000000000000000' #...
+ '00025',
+ '1.0000000000000000000000000000000000000000000010000' #...
+ '0000000000000000000000000000000000000000025',
+ '1.0000000000000000000000000000000000000000000000000' #...
+ '000001000000000000000000000000000000000000000000000' #...
+ '000000000025',
+ '0.99999999900000000025',
+ '0.9999999999999999999999999999999999999999999999999' #...
+ '999000000000000000000000000000000000000000000000000' #...
+ '000025',
+ '0.9999999999999999999999999999999999999999999999999' #...
+ '999999999999999999999999999999999999999999999999999' #...
+ '999999999999999999999999999999999999999990000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '0000000000000000000000000000025',
+
+ '1.0000000000000000000000000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '100000000000000000000000000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000001',
+ '1.0000000000000000000000000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '500000000000000000000000000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000005',
+ '1.0000000000000000000000000000000000000000000000000' #...
+ '000000000100000000000000000000000000000000000000000' #...
+ '000000000000000000250000000000000002000000000000000' #...
+ '000000000000000000000000000000000000000000010000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '0000000000000000001',
+ '1.0000000000000000000000000000000000000000000000000' #...
+ '000000000100000000000000000000000000000000000000000' #...
+ '000000000000000000249999999999999999999999999999999' #...
+ '999999999999979999999999999999999999999999999999999' #...
+ '999999999999999999999900000000000000000000000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '00000000000000000000000001',
+
+ '0.9999999999999999999999999999999999999999999999999' #...
+ '999999999900000000000000000000000000000000000000000' #...
+ '000000000000000000249999999999999998000000000000000' #...
+ '000000000000000000000000000000000000000000010000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '0000000000000000001',
+ '0.9999999999999999999999999999999999999999999999999' #...
+ '999999999900000000000000000000000000000000000000000' #...
+ '000000000000000000250000001999999999999999999999999' #...
+ '999999999999999999999999999999999990000000000000000' #...
+ '000000000000000000000000000000000000000000000000000' #...
+ '1',
+
+ # tough cases for ln etc.
+ '1.000000000000000000000000000000000000000000000000' #...
+ '00000000000000000000000000000000000000000000000000' #...
+ '00100000000000000000000000000000000000000000000000' #...
+ '00000000000000000000000000000000000000000000000000' #...
+ '0001',
+ '0.999999999999999999999999999999999999999999999999' #...
+ '99999999999999999999999999999999999999999999999999' #...
+ '99899999999999999999999999999999999999999999999999' #...
+ '99999999999999999999999999999999999999999999999999' #...
+ '99999999999999999999999999999999999999999999999999' #...
+ '9999'
+ ]
+
+
+TESTCASES = [
+ [x for x in test_short_halfway_cases()],
+ [x for x in test_halfway_cases()],
+ [x for x in test_boundaries()],
+ [x for x in test_underflow_boundary()],
+ [x for x in test_bigcomp()],
+ [x for x in test_parsing()],
+ test_particular
+]
+
+def un_randfloat():
+ for i in range(1000):
+ l = random.choice(TESTCASES[:6])
+ yield random.choice(l)
+ for v in test_particular:
+ yield v
+
+def bin_randfloat():
+ for i in range(1000):
+ l1 = random.choice(TESTCASES)
+ l2 = random.choice(TESTCASES)
+ yield random.choice(l1), random.choice(l2)
+
+def tern_randfloat():
+ for i in range(1000):
+ l1 = random.choice(TESTCASES)
+ l2 = random.choice(TESTCASES)
+ l3 = random.choice(TESTCASES)
+ yield random.choice(l1), random.choice(l2), random.choice(l3)
diff --git a/Modules/_decimal/tests/runall-memorydebugger.sh b/Modules/_decimal/tests/runall-memorydebugger.sh
new file mode 100755
index 0000000000..a446fc8b97
--- /dev/null
+++ b/Modules/_decimal/tests/runall-memorydebugger.sh
@@ -0,0 +1,176 @@
+#!/bin/sh
+
+#
+# Purpose: test with and without threads, all machine configurations, pydebug,
+# refleaks, release build and release build with valgrind.
+#
+# Synopsis: ./runall-memorydebugger.sh [--all-configs64 | --all-configs32]
+#
+# Requirements: valgrind
+#
+
+# Set additional CFLAGS and LDFLAGS for ./configure
+ADD_CFLAGS=
+ADD_LDFLAGS=
+
+
+CONFIGS_64="x64 uint128 ansi64 universal"
+CONFIGS_32="ppro ansi32 ansi-legacy universal"
+
+VALGRIND="valgrind --tool=memcheck --leak-resolution=high \
+ --db-attach=yes --suppressions=Misc/valgrind-python.supp"
+
+# Get args
+case $@ in
+ *--all-configs64*)
+ CONFIGS=$CONFIGS_64
+ ;;
+ *--all-configs32*)
+ CONFIGS=$CONFIGS_32
+ ;;
+ *)
+ CONFIGS="auto"
+ ;;
+esac
+
+# gmake required
+GMAKE=`which gmake`
+if [ X"$GMAKE" = X"" ]; then
+ GMAKE=make
+fi
+
+# Pretty print configurations
+print_config ()
+{
+ len=`echo $@ | wc -c`
+ margin="#%"`expr \( 74 - $len \) / 2`"s"
+
+ echo ""
+ echo "# ========================================================================"
+ printf $margin ""
+ echo $@
+ echo "# ========================================================================"
+ echo ""
+}
+
+
+cd ..
+
+# test_decimal: refleak, regular and Valgrind tests
+for args in "--without-threads" ""; do
+ for config in $CONFIGS; do
+
+ unset PYTHON_DECIMAL_WITH_MACHINE
+ libmpdec_config=$config
+ if [ X"$config" != X"auto" ]; then
+ PYTHON_DECIMAL_WITH_MACHINE=$config
+ export PYTHON_DECIMAL_WITH_MACHINE
+ else
+ libmpdec_config=""
+ fi
+
+ ############ refleak tests ###########
+ print_config "refleak tests: config=$config" $args
+ printf "\nbuilding python ...\n\n"
+
+ cd ../../
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ======================== refleak tests ===========================\n\n"
+ ./python -m test -uall -R 2:2 test_decimal
+
+
+ ############ regular tests ###########
+ print_config "regular tests: config=$config" $args
+ printf "\nbuilding python ...\n\n"
+
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ======================== regular tests ===========================\n\n"
+ ./python -m test -uall test_decimal
+
+
+ ########### valgrind tests ###########
+ valgrind=$VALGRIND
+ case "$config" in
+ # Valgrind has no support for 80 bit long double arithmetic.
+ ppro) valgrind= ;;
+ auto) case `uname -m` in
+ i386|i486|i586|i686) valgrind= ;;
+ esac
+ esac
+
+ print_config "valgrind tests: config=$config" $args
+ printf "\nbuilding python ...\n\n"
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ======================== valgrind tests ===========================\n\n"
+ $valgrind ./python -m test -uall test_decimal
+
+ cd Modules/_decimal
+ done
+done
+
+# deccheck
+cd ../../
+for config in $CONFIGS; do
+ for args in "--without-threads" ""; do
+
+ unset PYTHON_DECIMAL_WITH_MACHINE
+ if [ X"$config" != X"auto" ]; then
+ PYTHON_DECIMAL_WITH_MACHINE=$config
+ export PYTHON_DECIMAL_WITH_MACHINE
+ fi
+
+ ############ debug ############
+ print_config "deccheck: config=$config --with-pydebug" $args
+ printf "\nbuilding python ...\n\n"
+
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ========================== debug ===========================\n\n"
+ ./python Modules/_decimal/tests/deccheck.py
+
+ ########### regular ###########
+ print_config "deccheck: config=$config " $args
+ printf "\nbuilding python ...\n\n"
+
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ======================== regular ===========================\n\n"
+ ./python Modules/_decimal/tests/deccheck.py
+
+ ########### valgrind ###########
+ valgrind=$VALGRIND
+ case "$config" in
+ # Valgrind has no support for 80 bit long double arithmetic.
+ ppro) valgrind= ;;
+ auto) case `uname -m` in
+ i386|i486|i586|i686) valgrind= ;;
+ esac
+ esac
+
+ print_config "valgrind deccheck: config=$config " $args
+ printf "\nbuilding python ...\n\n"
+
+ $GMAKE distclean > /dev/null 2>&1
+ ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1
+ $GMAKE | grep _decimal
+
+ printf "\n\n# ======================== valgrind ==========================\n\n"
+ $valgrind ./python Modules/_decimal/tests/deccheck.py
+ done
+done
+
+
+
diff --git a/Modules/_decimal/tests/runall.bat b/Modules/_decimal/tests/runall.bat
new file mode 100755
index 0000000000..5bc872a63f
--- /dev/null
+++ b/Modules/_decimal/tests/runall.bat
@@ -0,0 +1,111 @@
+@ECHO OFF
+
+rem Test all machine configurations, pydebug, refleaks, release build.
+
+cd ..\..\..\
+
+
+echo.
+echo # ======================================================================
+echo # Building Python
+echo # ======================================================================
+echo.
+
+call "%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" x64
+msbuild /noconsolelogger /target:clean PCbuild\pcbuild.sln /p:Configuration=Release /p:PlatformTarget=x64
+msbuild /noconsolelogger /target:clean PCbuild\pcbuild.sln /p:Configuration=Debug /p:PlatformTarget=x64
+msbuild /noconsolelogger PCbuild\pcbuild.sln /p:Configuration=Release /p:Platform=x64
+msbuild /noconsolelogger PCbuild\pcbuild.sln /p:Configuration=Debug /p:Platform=x64
+
+call "%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" x86
+msbuild /noconsolelogger PCbuild\pcbuild.sln /p:Configuration=Release /p:Platform=Win32
+msbuild /noconsolelogger PCbuild\pcbuild.sln /p:Configuration=Debug /p:Platform=Win32
+echo.
+echo.
+
+echo.
+echo # ======================================================================
+echo # test_decimal: platform=x64
+echo # ======================================================================
+echo.
+
+cd PCbuild\amd64
+
+echo # ==================== refleak tests =======================
+echo.
+python_d.exe -m test -uall -R 2:2 test_decimal
+echo.
+echo.
+
+echo # ==================== regular tests =======================
+echo.
+python.exe -m test -uall test_decimal
+echo.
+echo.
+
+cd ..
+
+echo.
+echo # ======================================================================
+echo # test_decimal: platform=x86
+echo # ======================================================================
+echo.
+
+echo # ==================== refleak tests =======================
+echo.
+python_d.exe -m test -uall -R 2:2 test_decimal
+echo.
+echo.
+
+echo # ==================== regular tests =======================
+echo.
+python.exe -m test -uall test_decimal
+echo.
+echo.
+
+cd amd64
+
+echo.
+echo # ======================================================================
+echo # deccheck: platform=x64
+echo # ======================================================================
+echo.
+
+echo # ==================== debug build =======================
+echo.
+python_d.exe ..\..\Modules\_decimal\tests\deccheck.py
+echo.
+echo.
+
+echo # =================== release build ======================
+echo.
+python.exe ..\..\Modules\_decimal\tests\deccheck.py
+echo.
+echo.
+
+cd ..
+
+echo.
+echo # ======================================================================
+echo # deccheck: platform=x86
+echo # ======================================================================
+echo.
+echo.
+
+echo # ==================== debug build =======================
+echo.
+python_d.exe ..\Modules\_decimal\tests\deccheck.py
+echo.
+echo.
+
+echo # =================== release build ======================
+echo.
+python.exe ..\Modules\_decimal\tests\deccheck.py
+echo.
+echo.
+
+
+cd ..\Modules\_decimal\tests
+
+
+
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 17d5d09962..f45893f15d 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -48,6 +48,7 @@
/* See http://www.python.org/psf/license for licensing details. */
#include "Python.h"
+#include "structmember.h"
#define VERSION "1.0.6"
@@ -57,9 +58,6 @@
/* Leave defined to include the expat-based XMLParser type */
#define USE_EXPAT
-/* Define to do all expat calls via pyexpat's embedded expat library */
-/* #define USE_PYEXPAT_CAPI */
-
/* An element can hold this many children without extra memory
allocations. */
#define STATIC_CHILDREN 4
@@ -70,7 +68,7 @@
helps if you have lots of leaf nodes with attributes). */
/* Also note that pymalloc always allocates blocks in multiples of
- eight bytes. For the current version of cElementTree, this means
+ eight bytes. For the current C version of ElementTree, this means
that the number of children should be an even number, at least on
32-bit platforms. */
@@ -94,39 +92,36 @@ do { memory -= size; printf("%8d - %s\n", memory, comment); } while (0)
#define LOCAL(type) static type
#endif
-/* compatibility macros */
-#if (PY_VERSION_HEX < 0x02060000)
-#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
-#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
-#endif
-
-#if (PY_VERSION_HEX < 0x02050000)
-typedef int Py_ssize_t;
-#define lenfunc inquiry
-#endif
-
-#if (PY_VERSION_HEX < 0x02040000)
-#define PyDict_CheckExact PyDict_Check
-
-#if !defined(Py_RETURN_NONE)
-#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
-#endif
-#endif
-
/* macros used to store 'join' flags in string object pointers. note
that all use of text and tail as object pointers must be wrapped in
JOIN_OBJ. see comments in the ElementObject definition for more
info. */
#define JOIN_GET(p) ((Py_uintptr_t) (p) & 1)
#define JOIN_SET(p, flag) ((void*) ((Py_uintptr_t) (JOIN_OBJ(p)) | (flag)))
-#define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1))
+#define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~(Py_uintptr_t)1))
+
+/* Py_CLEAR for a PyObject* that uses a join flag. Pass the pointer by
+ * reference since this function sets it to NULL.
+*/
+static void _clear_joined_ptr(PyObject **p)
+{
+ if (*p) {
+ PyObject *tmp = JOIN_OBJ(*p);
+ *p = NULL;
+ Py_DECREF(tmp);
+ }
+}
+
+/* Types defined by this extension */
+static PyTypeObject Element_Type;
+static PyTypeObject ElementIter_Type;
+static PyTypeObject TreeBuilder_Type;
+static PyTypeObject XMLParser_Type;
+
/* glue functions (see the init function for details) */
static PyObject* elementtree_parseerror_obj;
-static PyObject* elementtree_copyelement_obj;
static PyObject* elementtree_deepcopy_obj;
-static PyObject* elementtree_iter_obj;
-static PyObject* elementtree_itertext_obj;
static PyObject* elementpath_obj;
/* helpers */
@@ -147,17 +142,11 @@ deepcopy(PyObject* object, PyObject* memo)
return NULL;
}
- args = PyTuple_New(2);
+ args = PyTuple_Pack(2, object, memo);
if (!args)
return NULL;
-
- Py_INCREF(object); PyTuple_SET_ITEM(args, 0, (PyObject*) object);
- Py_INCREF(memo); PyTuple_SET_ITEM(args, 1, (PyObject*) memo);
-
result = PyObject_CallObject(elementtree_deepcopy_obj, args);
-
Py_DECREF(args);
-
return result;
}
@@ -165,53 +154,30 @@ LOCAL(PyObject*)
list_join(PyObject* list)
{
/* join list elements (destroying the list in the process) */
-
PyObject* joiner;
- PyObject* function;
- PyObject* args;
PyObject* result;
- switch (PyList_GET_SIZE(list)) {
- case 0:
- Py_DECREF(list);
- return PyBytes_FromString("");
- case 1:
- result = PyList_GET_ITEM(list, 0);
- Py_INCREF(result);
- Py_DECREF(list);
- return result;
- }
-
- /* two or more elements: slice out a suitable separator from the
- first member, and use that to join the entire list */
-
- joiner = PySequence_GetSlice(PyList_GET_ITEM(list, 0), 0, 0);
+ joiner = PyUnicode_FromStringAndSize("", 0);
if (!joiner)
return NULL;
-
- function = PyObject_GetAttrString(joiner, "join");
- if (!function) {
- Py_DECREF(joiner);
- return NULL;
- }
-
- args = PyTuple_New(1);
- if (!args)
- return NULL;
-
- PyTuple_SET_ITEM(args, 0, list);
-
- result = PyObject_CallObject(function, args);
-
- Py_DECREF(args); /* also removes list */
- Py_DECREF(function);
+ result = PyUnicode_Join(joiner, list);
Py_DECREF(joiner);
-
+ if (result)
+ Py_DECREF(list);
return result;
}
+/* Is the given object an empty dictionary?
+*/
+static int
+is_empty_dict(PyObject *obj)
+{
+ return PyDict_CheckExact(obj) && PyDict_Size(obj) == 0;
+}
+
+
/* -------------------------------------------------------------------- */
-/* the element type */
+/* the Element type */
typedef struct {
@@ -226,7 +192,7 @@ typedef struct {
PyObject* *children;
PyObject* _children[STATIC_CHILDREN];
-
+
} ElementObjectExtra;
typedef struct {
@@ -249,17 +215,18 @@ typedef struct {
ElementObjectExtra* extra;
+ PyObject *weakreflist; /* For tp_weaklistoffset */
+
} ElementObject;
-static PyTypeObject Element_Type;
#define Element_CheckExact(op) (Py_TYPE(op) == &Element_Type)
/* -------------------------------------------------------------------- */
-/* element constructor and destructor */
+/* Element constructors and destructor */
LOCAL(int)
-element_new_extra(ElementObject* self, PyObject* attrib)
+create_extra(ElementObject* self, PyObject* attrib)
{
self->extra = PyObject_Malloc(sizeof(ElementObjectExtra));
if (!self->extra)
@@ -279,47 +246,48 @@ element_new_extra(ElementObject* self, PyObject* attrib)
}
LOCAL(void)
-element_dealloc_extra(ElementObject* self)
+dealloc_extra(ElementObject* self)
{
+ ElementObjectExtra *myextra;
int i;
- Py_DECREF(self->extra->attrib);
+ if (!self->extra)
+ return;
+
+ /* Avoid DECREFs calling into this code again (cycles, etc.)
+ */
+ myextra = self->extra;
+ self->extra = NULL;
+
+ Py_DECREF(myextra->attrib);
- for (i = 0; i < self->extra->length; i++)
- Py_DECREF(self->extra->children[i]);
+ for (i = 0; i < myextra->length; i++)
+ Py_DECREF(myextra->children[i]);
- if (self->extra->children != self->extra->_children)
- PyObject_Free(self->extra->children);
+ if (myextra->children != myextra->_children)
+ PyObject_Free(myextra->children);
- PyObject_Free(self->extra);
+ PyObject_Free(myextra);
}
+/* Convenience internal function to create new Element objects with the given
+ * tag and attributes.
+*/
LOCAL(PyObject*)
-element_new(PyObject* tag, PyObject* attrib)
+create_new_element(PyObject* tag, PyObject* attrib)
{
ElementObject* self;
- self = PyObject_New(ElementObject, &Element_Type);
+ self = PyObject_GC_New(ElementObject, &Element_Type);
if (self == NULL)
return NULL;
-
- /* use None for empty dictionaries */
- if (PyDict_CheckExact(attrib) && !PyDict_Size(attrib))
- attrib = Py_None;
-
self->extra = NULL;
- if (attrib != Py_None) {
-
- if (element_new_extra(self, attrib) < 0) {
+ if (attrib != Py_None && !is_empty_dict(attrib)) {
+ if (create_extra(self, attrib) < 0) {
PyObject_Del(self);
return NULL;
}
-
- self->extra->length = 0;
- self->extra->allocated = STATIC_CHILDREN;
- self->extra->children = self->extra->_children;
-
}
Py_INCREF(tag);
@@ -331,11 +299,131 @@ element_new(PyObject* tag, PyObject* attrib)
Py_INCREF(Py_None);
self->tail = Py_None;
- ALLOC(sizeof(ElementObject), "create element");
+ self->weakreflist = NULL;
+ ALLOC(sizeof(ElementObject), "create element");
+ PyObject_GC_Track(self);
return (PyObject*) self;
}
+static PyObject *
+element_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ ElementObject *e = (ElementObject *)type->tp_alloc(type, 0);
+ if (e != NULL) {
+ Py_INCREF(Py_None);
+ e->tag = Py_None;
+
+ Py_INCREF(Py_None);
+ e->text = Py_None;
+
+ Py_INCREF(Py_None);
+ e->tail = Py_None;
+
+ e->extra = NULL;
+ e->weakreflist = NULL;
+ }
+ return (PyObject *)e;
+}
+
+/* Helper function for extracting the attrib dictionary from a keywords dict.
+ * This is required by some constructors/functions in this module that can
+ * either accept attrib as a keyword argument or all attributes splashed
+ * directly into *kwds.
+ *
+ * Return a dictionary with the content of kwds merged into the content of
+ * attrib. If there is no attrib keyword, return a copy of kwds.
+ */
+static PyObject*
+get_attrib_from_keywords(PyObject *kwds)
+{
+ PyObject *attrib_str = PyUnicode_FromString("attrib");
+ PyObject *attrib = PyDict_GetItem(kwds, attrib_str);
+
+ if (attrib) {
+ /* If attrib was found in kwds, copy its value and remove it from
+ * kwds
+ */
+ if (!PyDict_Check(attrib)) {
+ Py_DECREF(attrib_str);
+ PyErr_Format(PyExc_TypeError, "attrib must be dict, not %.100s",
+ Py_TYPE(attrib)->tp_name);
+ return NULL;
+ }
+ attrib = PyDict_Copy(attrib);
+ PyDict_DelItem(kwds, attrib_str);
+ } else {
+ attrib = PyDict_New();
+ }
+
+ Py_DECREF(attrib_str);
+
+ if (attrib)
+ if (PyDict_Update(attrib, kwds) < 0)
+ return NULL;
+ return attrib;
+}
+
+static int
+element_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ PyObject *tag;
+ PyObject *tmp;
+ PyObject *attrib = NULL;
+ ElementObject *self_elem;
+
+ if (!PyArg_ParseTuple(args, "O|O!:Element", &tag, &PyDict_Type, &attrib))
+ return -1;
+
+ if (attrib) {
+ /* attrib passed as positional arg */
+ attrib = PyDict_Copy(attrib);
+ if (!attrib)
+ return -1;
+ if (kwds) {
+ if (PyDict_Update(attrib, kwds) < 0) {
+ Py_DECREF(attrib);
+ return -1;
+ }
+ }
+ } else if (kwds) {
+ /* have keywords args */
+ attrib = get_attrib_from_keywords(kwds);
+ if (!attrib)
+ return -1;
+ }
+
+ self_elem = (ElementObject *)self;
+
+ if (attrib != NULL && !is_empty_dict(attrib)) {
+ if (create_extra(self_elem, attrib) < 0) {
+ Py_DECREF(attrib);
+ return -1;
+ }
+ }
+
+ /* We own a reference to attrib here and it's no longer needed. */
+ Py_XDECREF(attrib);
+
+ /* Replace the objects already pointed to by tag, text and tail. */
+ tmp = self_elem->tag;
+ Py_INCREF(tag);
+ self_elem->tag = tag;
+ Py_DECREF(tmp);
+
+ tmp = self_elem->text;
+ Py_INCREF(Py_None);
+ self_elem->text = Py_None;
+ Py_DECREF(JOIN_OBJ(tmp));
+
+ tmp = self_elem->tail;
+ Py_INCREF(Py_None);
+ self_elem->tail = Py_None;
+ Py_DECREF(JOIN_OBJ(tmp));
+
+ return 0;
+}
+
LOCAL(int)
element_resize(ElementObject* self, int extra)
{
@@ -346,7 +434,7 @@ element_resize(ElementObject* self, int extra)
elements. set an exception and return -1 if allocation failed */
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
size = self->extra->length + extra;
@@ -354,14 +442,14 @@ element_resize(ElementObject* self, int extra)
/* use Python 2.4's list growth strategy */
size = (size >> 3) + (size < 9 ? 3 : 6) + size;
/* Coverity CID #182 size_error: Allocating 1 bytes to pointer "children"
- * which needs at least 4 bytes.
- * Although it's a false alarm always assume at least one child to
+ * which needs at least 4 bytes.
+ * Although it's a false alarm always assume at least one child to
* be safe.
*/
size = size ? size : 1;
if (self->extra->children != self->extra->_children) {
/* Coverity CID #182 size_error: Allocating 1 bytes to pointer
- * "children", which needs at least 4 bytes. Although it's a
+ * "children", which needs at least 4 bytes. Although it's a
* false alarm always assume at least one child to be safe.
*/
children = PyObject_Realloc(self->extra->children,
@@ -412,11 +500,11 @@ element_get_attrib(ElementObject* self)
PyObject* res = self->extra->attrib;
if (res == Py_None) {
- Py_DECREF(res);
/* create missing dictionary */
res = PyDict_New();
if (!res)
return NULL;
+ Py_DECREF(Py_None);
self->extra->attrib = res;
}
@@ -464,36 +552,7 @@ element_get_tail(ElementObject* self)
}
static PyObject*
-element(PyObject* self, PyObject* args, PyObject* kw)
-{
- PyObject* elem;
-
- PyObject* tag;
- PyObject* attrib = NULL;
- if (!PyArg_ParseTuple(args, "O|O!:Element", &tag,
- &PyDict_Type, &attrib))
- return NULL;
-
- if (attrib || kw) {
- attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
- if (!attrib)
- return NULL;
- if (kw)
- PyDict_Update(attrib, kw);
- } else {
- Py_INCREF(Py_None);
- attrib = Py_None;
- }
-
- elem = element_new(tag, attrib);
-
- Py_DECREF(attrib);
-
- return elem;
-}
-
-static PyObject*
-subelement(PyObject* self, PyObject* args, PyObject* kw)
+subelement(PyObject *self, PyObject *args, PyObject *kwds)
{
PyObject* elem;
@@ -505,18 +564,28 @@ subelement(PyObject* self, PyObject* args, PyObject* kw)
&PyDict_Type, &attrib))
return NULL;
- if (attrib || kw) {
- attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
+ if (attrib) {
+ /* attrib passed as positional arg */
+ attrib = PyDict_Copy(attrib);
+ if (!attrib)
+ return NULL;
+ if (kwds) {
+ if (PyDict_Update(attrib, kwds) < 0) {
+ return NULL;
+ }
+ }
+ } else if (kwds) {
+ /* have keyword args */
+ attrib = get_attrib_from_keywords(kwds);
if (!attrib)
return NULL;
- if (kw)
- PyDict_Update(attrib, kw);
} else {
+ /* no attrib arg, no kwds, so no attribute */
Py_INCREF(Py_None);
attrib = Py_None;
}
- elem = element_new(tag, attrib);
+ elem = create_new_element(tag, attrib);
Py_DECREF(attrib);
@@ -528,20 +597,51 @@ subelement(PyObject* self, PyObject* args, PyObject* kw)
return elem;
}
+static int
+element_gc_traverse(ElementObject *self, visitproc visit, void *arg)
+{
+ Py_VISIT(self->tag);
+ Py_VISIT(JOIN_OBJ(self->text));
+ Py_VISIT(JOIN_OBJ(self->tail));
+
+ if (self->extra) {
+ int i;
+ Py_VISIT(self->extra->attrib);
+
+ for (i = 0; i < self->extra->length; ++i)
+ Py_VISIT(self->extra->children[i]);
+ }
+ return 0;
+}
+
+static int
+element_gc_clear(ElementObject *self)
+{
+ Py_CLEAR(self->tag);
+ _clear_joined_ptr(&self->text);
+ _clear_joined_ptr(&self->tail);
+
+ /* After dropping all references from extra, it's no longer valid anyway,
+ * so fully deallocate it.
+ */
+ dealloc_extra(self);
+ return 0;
+}
+
static void
element_dealloc(ElementObject* self)
{
- if (self->extra)
- element_dealloc_extra(self);
+ PyObject_GC_UnTrack(self);
- /* discard attributes */
- Py_DECREF(self->tag);
- Py_DECREF(JOIN_OBJ(self->text));
- Py_DECREF(JOIN_OBJ(self->tail));
+ if (self->weakreflist != NULL)
+ PyObject_ClearWeakRefs((PyObject *) self);
- RELEASE(sizeof(ElementObject), "destroy element");
+ /* element_gc_clear clears all references and deallocates extra
+ */
+ element_gc_clear(self);
- PyObject_Del(self);
+ RELEASE(sizeof(ElementObject), "destroy element");
+ Py_TYPE(self)->tp_free((PyObject *)self);
}
/* -------------------------------------------------------------------- */
@@ -561,15 +661,12 @@ element_append(ElementObject* self, PyObject* args)
}
static PyObject*
-element_clear(ElementObject* self, PyObject* args)
+element_clearmethod(ElementObject* self, PyObject* args)
{
if (!PyArg_ParseTuple(args, ":clear"))
return NULL;
- if (self->extra) {
- element_dealloc_extra(self);
- self->extra = NULL;
- }
+ dealloc_extra(self);
Py_INCREF(Py_None);
Py_DECREF(JOIN_OBJ(self->text));
@@ -591,7 +688,7 @@ element_copy(ElementObject* self, PyObject* args)
if (!PyArg_ParseTuple(args, ":__copy__"))
return NULL;
- element = (ElementObject*) element_new(
+ element = (ElementObject*) create_new_element(
self->tag, (self->extra) ? self->extra->attrib : Py_None
);
if (!element)
@@ -606,7 +703,7 @@ element_copy(ElementObject* self, PyObject* args)
Py_INCREF(JOIN_OBJ(element->tail));
if (self->extra) {
-
+
if (element_resize(element, self->extra->length) < 0) {
Py_DECREF(element);
return NULL;
@@ -618,7 +715,7 @@ element_copy(ElementObject* self, PyObject* args)
}
element->extra->length = self->extra->length;
-
+
}
return (PyObject*) element;
@@ -654,14 +751,14 @@ element_deepcopy(ElementObject* self, PyObject* args)
attrib = Py_None;
}
- element = (ElementObject*) element_new(tag, attrib);
+ element = (ElementObject*) create_new_element(tag, attrib);
Py_DECREF(tag);
Py_DECREF(attrib);
if (!element)
return NULL;
-
+
text = deepcopy(JOIN_OBJ(self->text), memo);
if (!text)
goto error;
@@ -675,7 +772,7 @@ element_deepcopy(ElementObject* self, PyObject* args)
element->tail = JOIN_SET(tail, JOIN_GET(self->tail));
if (self->extra) {
-
+
if (element_resize(element, self->extra->length) < 0)
goto error;
@@ -689,11 +786,11 @@ element_deepcopy(ElementObject* self, PyObject* args)
}
element->extra->length = self->extra->length;
-
+
}
/* add object to memo dictionary (so deepcopy won't visit it again) */
- id = PyLong_FromLong((Py_uintptr_t) self);
+ id = PyLong_FromSsize_t((Py_uintptr_t) self);
if (!id)
goto error;
@@ -711,6 +808,186 @@ element_deepcopy(ElementObject* self, PyObject* args)
return NULL;
}
+static PyObject*
+element_sizeof(PyObject* myself, PyObject* args)
+{
+ ElementObject *self = (ElementObject*)myself;
+ Py_ssize_t result = sizeof(ElementObject);
+ if (self->extra) {
+ result += sizeof(ElementObjectExtra);
+ if (self->extra->children != self->extra->_children)
+ result += sizeof(PyObject*) * self->extra->allocated;
+ }
+ return PyLong_FromSsize_t(result);
+}
+
+/* dict keys for getstate/setstate. */
+#define PICKLED_TAG "tag"
+#define PICKLED_CHILDREN "_children"
+#define PICKLED_ATTRIB "attrib"
+#define PICKLED_TAIL "tail"
+#define PICKLED_TEXT "text"
+
+/* __getstate__ returns a fabricated instance dict as in the pure-Python
+ * Element implementation, for interoperability/interchangeability. This
+ * makes the pure-Python implementation details an API, but (a) there aren't
+ * any unnecessary structures there; and (b) it buys compatibility with 3.2
+ * pickles. See issue #16076.
+ */
+static PyObject *
+element_getstate(ElementObject *self)
+{
+ int i, noattrib;
+ PyObject *instancedict = NULL, *children;
+
+ /* Build a list of children. */
+ children = PyList_New(self->extra ? self->extra->length : 0);
+ if (!children)
+ return NULL;
+ for (i = 0; i < PyList_GET_SIZE(children); i++) {
+ PyObject *child = self->extra->children[i];
+ Py_INCREF(child);
+ PyList_SET_ITEM(children, i, child);
+ }
+
+ /* Construct the state object. */
+ noattrib = (self->extra == NULL || self->extra->attrib == Py_None);
+ if (noattrib)
+ instancedict = Py_BuildValue("{sOsOs{}sOsO}",
+ PICKLED_TAG, self->tag,
+ PICKLED_CHILDREN, children,
+ PICKLED_ATTRIB,
+ PICKLED_TEXT, JOIN_OBJ(self->text),
+ PICKLED_TAIL, JOIN_OBJ(self->tail));
+ else
+ instancedict = Py_BuildValue("{sOsOsOsOsO}",
+ PICKLED_TAG, self->tag,
+ PICKLED_CHILDREN, children,
+ PICKLED_ATTRIB, self->extra->attrib,
+ PICKLED_TEXT, JOIN_OBJ(self->text),
+ PICKLED_TAIL, JOIN_OBJ(self->tail));
+ if (instancedict) {
+ Py_DECREF(children);
+ return instancedict;
+ }
+ else {
+ for (i = 0; i < PyList_GET_SIZE(children); i++)
+ Py_DECREF(PyList_GET_ITEM(children, i));
+ Py_DECREF(children);
+
+ return NULL;
+ }
+}
+
+static PyObject *
+element_setstate_from_attributes(ElementObject *self,
+ PyObject *tag,
+ PyObject *attrib,
+ PyObject *text,
+ PyObject *tail,
+ PyObject *children)
+{
+ Py_ssize_t i, nchildren;
+
+ if (!tag) {
+ PyErr_SetString(PyExc_TypeError, "tag may not be NULL");
+ return NULL;
+ }
+
+ Py_CLEAR(self->tag);
+ self->tag = tag;
+ Py_INCREF(self->tag);
+
+ _clear_joined_ptr(&self->text);
+ self->text = text ? JOIN_SET(text, PyList_CheckExact(text)) : Py_None;
+ Py_INCREF(JOIN_OBJ(self->text));
+
+ _clear_joined_ptr(&self->tail);
+ self->tail = tail ? JOIN_SET(tail, PyList_CheckExact(tail)) : Py_None;
+ Py_INCREF(JOIN_OBJ(self->tail));
+
+ /* Handle ATTRIB and CHILDREN. */
+ if (!children && !attrib)
+ Py_RETURN_NONE;
+
+ /* Compute 'nchildren'. */
+ if (children) {
+ if (!PyList_Check(children)) {
+ PyErr_SetString(PyExc_TypeError, "'_children' is not a list");
+ return NULL;
+ }
+ nchildren = PyList_Size(children);
+ }
+ else {
+ nchildren = 0;
+ }
+
+ /* Allocate 'extra'. */
+ if (element_resize(self, nchildren)) {
+ return NULL;
+ }
+ assert(self->extra && self->extra->allocated >= nchildren);
+
+ /* Copy children */
+ for (i = 0; i < nchildren; i++) {
+ self->extra->children[i] = PyList_GET_ITEM(children, i);
+ Py_INCREF(self->extra->children[i]);
+ }
+
+ self->extra->length = nchildren;
+ self->extra->allocated = nchildren;
+
+ /* Stash attrib. */
+ if (attrib) {
+ Py_CLEAR(self->extra->attrib);
+ self->extra->attrib = attrib;
+ Py_INCREF(attrib);
+ }
+
+ Py_RETURN_NONE;
+}
+
+/* __setstate__ for Element instance from the Python implementation.
+ * 'state' should be the instance dict.
+ */
+static PyObject *
+element_setstate_from_Python(ElementObject *self, PyObject *state)
+{
+ static char *kwlist[] = {PICKLED_TAG, PICKLED_ATTRIB, PICKLED_TEXT,
+ PICKLED_TAIL, PICKLED_CHILDREN, 0};
+ PyObject *args;
+ PyObject *tag, *attrib, *text, *tail, *children;
+ PyObject *retval;
+
+ tag = attrib = text = tail = children = NULL;
+ args = PyTuple_New(0);
+ if (!args)
+ return NULL;
+
+ if (PyArg_ParseTupleAndKeywords(args, state, "|$OOOOO", kwlist, &tag,
+ &attrib, &text, &tail, &children))
+ retval = element_setstate_from_attributes(self, tag, attrib, text,
+ tail, children);
+ else
+ retval = NULL;
+
+ Py_DECREF(args);
+ return retval;
+}
+
+static PyObject *
+element_setstate(ElementObject *self, PyObject *state)
+{
+ if (!PyDict_CheckExact(state)) {
+ PyErr_Format(PyExc_TypeError,
+ "Don't know how to unpickle \"%.200R\" as an Element",
+ state);
+ return NULL;
+ }
+ else
+ return element_setstate_from_Python(self, state);
+}
+
LOCAL(int)
checkpath(PyObject* tag)
{
@@ -723,13 +1000,16 @@ checkpath(PyObject* tag)
(ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.')
if (PyUnicode_Check(tag)) {
- Py_UNICODE *p = PyUnicode_AS_UNICODE(tag);
- for (i = 0; i < PyUnicode_GET_SIZE(tag); i++) {
- if (p[i] == '{')
+ const Py_ssize_t len = PyUnicode_GET_LENGTH(tag);
+ void *data = PyUnicode_DATA(tag);
+ unsigned int kind = PyUnicode_KIND(tag);
+ for (i = 0; i < len; i++) {
+ Py_UCS4 ch = PyUnicode_READ(kind, data, i);
+ if (ch == '{')
check = 0;
- else if (p[i] == '}')
+ else if (ch == '}')
check = 1;
- else if (check && PATHCHAR(p[i]))
+ else if (check && PATHCHAR(ch))
return 1;
}
return 0;
@@ -772,6 +1052,15 @@ element_extend(ElementObject* self, PyObject* args)
seqlen = PySequence_Size(seq);
for (i = 0; i < seqlen; i++) {
PyObject* element = PySequence_Fast_GET_ITEM(seq, i);
+ if (!PyObject_IsInstance(element, (PyObject *)&Element_Type)) {
+ Py_DECREF(seq);
+ PyErr_Format(
+ PyExc_TypeError,
+ "expected an Element, not \"%.200s\"",
+ Py_TYPE(element)->tp_name);
+ return NULL;
+ }
+
if (element_add_subelement(self, element) < 0) {
Py_DECREF(seq);
return NULL;
@@ -784,23 +1073,27 @@ element_extend(ElementObject* self, PyObject* args)
}
static PyObject*
-element_find(ElementObject* self, PyObject* args)
+element_find(ElementObject *self, PyObject *args, PyObject *kwds)
{
int i;
-
PyObject* tag;
PyObject* namespaces = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:find", &tag, &namespaces))
+ static char *kwlist[] = {"path", "namespaces", 0};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:find", kwlist,
+ &tag, &namespaces))
return NULL;
- if (checkpath(tag) || namespaces != Py_None)
- return PyObject_CallMethod(
- elementpath_obj, "find", "OOO", self, tag, namespaces
+ if (checkpath(tag) || namespaces != Py_None) {
+ _Py_IDENTIFIER(find);
+ return _PyObject_CallMethodId(
+ elementpath_obj, &PyId_find, "OOO", self, tag, namespaces
);
+ }
if (!self->extra)
Py_RETURN_NONE;
-
+
for (i = 0; i < self->extra->length; i++) {
PyObject* item = self->extra->children[i];
if (Element_CheckExact(item) &&
@@ -814,19 +1107,22 @@ element_find(ElementObject* self, PyObject* args)
}
static PyObject*
-element_findtext(ElementObject* self, PyObject* args)
+element_findtext(ElementObject *self, PyObject *args, PyObject *kwds)
{
int i;
-
PyObject* tag;
PyObject* default_value = Py_None;
PyObject* namespaces = Py_None;
- if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces))
+ _Py_IDENTIFIER(findtext);
+ static char *kwlist[] = {"path", "default", "namespaces", 0};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:findtext", kwlist,
+ &tag, &default_value, &namespaces))
return NULL;
if (checkpath(tag) || namespaces != Py_None)
- return PyObject_CallMethod(
- elementpath_obj, "findtext", "OOOO", self, tag, default_value, namespaces
+ return _PyObject_CallMethodId(
+ elementpath_obj, &PyId_findtext, "OOOO", self, tag, default_value, namespaces
);
if (!self->extra) {
@@ -840,7 +1136,7 @@ element_findtext(ElementObject* self, PyObject* args)
PyObject* text = element_get_text(item);
if (text == Py_None)
- return PyUnicode_FromString("");
+ return PyUnicode_New(0, 0);
Py_XINCREF(text);
return text;
}
@@ -851,20 +1147,24 @@ element_findtext(ElementObject* self, PyObject* args)
}
static PyObject*
-element_findall(ElementObject* self, PyObject* args)
+element_findall(ElementObject *self, PyObject *args, PyObject *kwds)
{
int i;
PyObject* out;
-
PyObject* tag;
PyObject* namespaces = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:findall", &tag, &namespaces))
+ static char *kwlist[] = {"path", "namespaces", 0};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:findall", kwlist,
+ &tag, &namespaces))
return NULL;
- if (checkpath(tag) || namespaces != Py_None)
- return PyObject_CallMethod(
- elementpath_obj, "findall", "OOO", self, tag, namespaces
+ if (checkpath(tag) || namespaces != Py_None) {
+ _Py_IDENTIFIER(findall);
+ return _PyObject_CallMethodId(
+ elementpath_obj, &PyId_findall, "OOO", self, tag, namespaces
);
+ }
out = PyList_New(0);
if (!out)
@@ -888,26 +1188,33 @@ element_findall(ElementObject* self, PyObject* args)
}
static PyObject*
-element_iterfind(ElementObject* self, PyObject* args)
+element_iterfind(ElementObject *self, PyObject *args, PyObject *kwds)
{
PyObject* tag;
PyObject* namespaces = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces))
+ _Py_IDENTIFIER(iterfind);
+ static char *kwlist[] = {"path", "namespaces", 0};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:iterfind", kwlist,
+ &tag, &namespaces))
return NULL;
- return PyObject_CallMethod(
- elementpath_obj, "iterfind", "OOO", self, tag, namespaces
+ return _PyObject_CallMethodId(
+ elementpath_obj, &PyId_iterfind, "OOO", self, tag, namespaces
);
}
static PyObject*
-element_get(ElementObject* self, PyObject* args)
+element_get(ElementObject* self, PyObject* args, PyObject* kwds)
{
PyObject* value;
+ static char* kwlist[] = {"key", "default", 0};
PyObject* key;
PyObject* default_value = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:get", &key, &default_value))
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:get", kwlist, &key,
+ &default_value))
return NULL;
if (!self->extra || self->extra->attrib == Py_None)
@@ -949,67 +1256,34 @@ element_getchildren(ElementObject* self, PyObject* args)
return list;
}
-static PyObject*
-element_iter(ElementObject* self, PyObject* args)
-{
- PyObject* result;
-
- PyObject* tag = Py_None;
- if (!PyArg_ParseTuple(args, "|O:iter", &tag))
- return NULL;
-
- if (!elementtree_iter_obj) {
- PyErr_SetString(
- PyExc_RuntimeError,
- "iter helper not found"
- );
- return NULL;
- }
- args = PyTuple_New(2);
- if (!args)
- return NULL;
+static PyObject *
+create_elementiter(ElementObject *self, PyObject *tag, int gettext);
- Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self);
- Py_INCREF(tag); PyTuple_SET_ITEM(args, 1, (PyObject*) tag);
- result = PyObject_CallObject(elementtree_iter_obj, args);
+static PyObject *
+element_iter(ElementObject *self, PyObject *args, PyObject *kwds)
+{
+ PyObject* tag = Py_None;
+ static char* kwlist[] = {"tag", 0};
- Py_DECREF(args);
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:iter", kwlist, &tag))
+ return NULL;
- return result;
+ return create_elementiter(self, tag, 0);
}
static PyObject*
element_itertext(ElementObject* self, PyObject* args)
{
- PyObject* result;
-
if (!PyArg_ParseTuple(args, ":itertext"))
return NULL;
- if (!elementtree_itertext_obj) {
- PyErr_SetString(
- PyExc_RuntimeError,
- "itertext helper not found"
- );
- return NULL;
- }
-
- args = PyTuple_New(1);
- if (!args)
- return NULL;
-
- Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self);
-
- result = PyObject_CallObject(elementtree_itertext_obj, args);
-
- Py_DECREF(args);
-
- return result;
+ return create_elementiter(self, Py_None, 1);
}
+
static PyObject*
element_getitem(PyObject* self_, Py_ssize_t index)
{
@@ -1039,7 +1313,7 @@ element_insert(ElementObject* self, PyObject* args)
return NULL;
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
if (index < 0) {
index += self->extra->length;
@@ -1110,7 +1384,7 @@ element_makeelement(PyObject* self, PyObject* args, PyObject* kw)
if (!attrib)
return NULL;
- elem = element_new(tag, attrib);
+ elem = create_new_element(tag, attrib);
Py_DECREF(attrib);
@@ -1118,31 +1392,6 @@ element_makeelement(PyObject* self, PyObject* args, PyObject* kw)
}
static PyObject*
-element_reduce(ElementObject* self, PyObject* args)
-{
- if (!PyArg_ParseTuple(args, ":__reduce__"))
- return NULL;
-
- /* Hack alert: This method is used to work around a __copy__
- problem on certain 2.3 and 2.4 versions. To save time and
- simplify the code, we create the copy in here, and use a dummy
- copyelement helper to trick the copy module into doing the
- right thing. */
-
- if (!elementtree_copyelement_obj) {
- PyErr_SetString(
- PyExc_RuntimeError,
- "copyelement helper not found"
- );
- return NULL;
- }
-
- return Py_BuildValue(
- "O(N)", elementtree_copyelement_obj, element_copy(self, args)
- );
-}
-
-static PyObject*
element_remove(ElementObject* self, PyObject* args)
{
int i;
@@ -1189,7 +1438,10 @@ element_remove(ElementObject* self, PyObject* args)
static PyObject*
element_repr(ElementObject* self)
{
- return PyUnicode_FromFormat("<Element %R at %p>", self->tag, self);
+ if (self->tag)
+ return PyUnicode_FromFormat("<Element %R at %p>", self->tag, self);
+ else
+ return PyUnicode_FromFormat("<Element at %p>", self);
}
static PyObject*
@@ -1203,7 +1455,7 @@ element_set(ElementObject* self, PyObject* args)
return NULL;
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
attrib = element_get_attrib(self);
if (!attrib)
@@ -1250,13 +1502,8 @@ element_subscr(PyObject* self_, PyObject* item)
{
ElementObject* self = (ElementObject*) self_;
-#if (PY_VERSION_HEX < 0x02050000)
- if (PyInt_Check(item) || PyLong_Check(item)) {
- long i = PyInt_AsLong(item);
-#else
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
-#endif
if (i == -1 && PyErr_Occurred()) {
return NULL;
@@ -1307,13 +1554,8 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
{
ElementObject* self = (ElementObject*) self_;
-#if (PY_VERSION_HEX < 0x02050000)
- if (PyInt_Check(item) || PyLong_Check(item)) {
- long i = PyInt_AsLong(item);
-#else
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
-#endif
if (i == -1 && PyErr_Occurred()) {
return -1;
@@ -1329,7 +1571,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
PyObject* seq = NULL;
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
if (PySlice_GetIndicesEx(item,
self->extra->length,
@@ -1337,9 +1579,74 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
return -1;
}
- if (value == NULL)
- newlen = 0;
+ if (value == NULL) {
+ /* Delete slice */
+ size_t cur;
+ Py_ssize_t i;
+
+ if (slicelen <= 0)
+ return 0;
+
+ /* Since we're deleting, the direction of the range doesn't matter,
+ * so for simplicity make it always ascending.
+ */
+ if (step < 0) {
+ stop = start + 1;
+ start = stop + step * (slicelen - 1) - 1;
+ step = -step;
+ }
+
+ assert((size_t)slicelen <= PY_SIZE_MAX / sizeof(PyObject *));
+
+ /* recycle is a list that will contain all the children
+ * scheduled for removal.
+ */
+ if (!(recycle = PyList_New(slicelen))) {
+ PyErr_NoMemory();
+ return -1;
+ }
+
+ /* This loop walks over all the children that have to be deleted,
+ * with cur pointing at them. num_moved is the amount of children
+ * until the next deleted child that have to be "shifted down" to
+ * occupy the deleted's places.
+ * Note that in the ith iteration, shifting is done i+i places down
+ * because i children were already removed.
+ */
+ for (cur = start, i = 0; cur < (size_t)stop; cur += step, ++i) {
+ /* Compute how many children have to be moved, clipping at the
+ * list end.
+ */
+ Py_ssize_t num_moved = step - 1;
+ if (cur + step >= (size_t)self->extra->length) {
+ num_moved = self->extra->length - cur - 1;
+ }
+
+ PyList_SET_ITEM(recycle, i, self->extra->children[cur]);
+
+ memmove(
+ self->extra->children + cur - i,
+ self->extra->children + cur + 1,
+ num_moved * sizeof(PyObject *));
+ }
+
+ /* Leftover "tail" after the last removed child */
+ cur = start + (size_t)slicelen * step;
+ if (cur < (size_t)self->extra->length) {
+ memmove(
+ self->extra->children + cur - slicelen,
+ self->extra->children + cur,
+ (self->extra->length - cur) * sizeof(PyObject *));
+ }
+
+ self->extra->length -= slicelen;
+
+ /* Discard the recycle list with all the deleted sub-elements */
+ Py_XDECREF(recycle);
+ return 0;
+ }
else {
+ /* A new slice is actually being assigned */
seq = PySequence_Fast(value, "");
if (!seq) {
PyErr_Format(
@@ -1354,19 +1661,13 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
if (step != 1 && newlen != slicelen)
{
PyErr_Format(PyExc_ValueError,
-#if (PY_VERSION_HEX < 0x02050000)
- "attempt to assign sequence of size %d "
- "to extended slice of size %d",
-#else
"attempt to assign sequence of size %zd "
"to extended slice of size %zd",
-#endif
newlen, slicelen
);
return -1;
}
-
/* Resize before creating the recycle bin, to prevent refleaks. */
if (newlen > slicelen) {
if (element_resize(self, newlen - slicelen) < 0) {
@@ -1431,25 +1732,25 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
static PyMethodDef element_methods[] = {
- {"clear", (PyCFunction) element_clear, METH_VARARGS},
+ {"clear", (PyCFunction) element_clearmethod, METH_VARARGS},
- {"get", (PyCFunction) element_get, METH_VARARGS},
+ {"get", (PyCFunction) element_get, METH_VARARGS | METH_KEYWORDS},
{"set", (PyCFunction) element_set, METH_VARARGS},
- {"find", (PyCFunction) element_find, METH_VARARGS},
- {"findtext", (PyCFunction) element_findtext, METH_VARARGS},
- {"findall", (PyCFunction) element_findall, METH_VARARGS},
+ {"find", (PyCFunction) element_find, METH_VARARGS | METH_KEYWORDS},
+ {"findtext", (PyCFunction) element_findtext, METH_VARARGS | METH_KEYWORDS},
+ {"findall", (PyCFunction) element_findall, METH_VARARGS | METH_KEYWORDS},
{"append", (PyCFunction) element_append, METH_VARARGS},
{"extend", (PyCFunction) element_extend, METH_VARARGS},
{"insert", (PyCFunction) element_insert, METH_VARARGS},
{"remove", (PyCFunction) element_remove, METH_VARARGS},
- {"iter", (PyCFunction) element_iter, METH_VARARGS},
+ {"iter", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
{"itertext", (PyCFunction) element_itertext, METH_VARARGS},
- {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS},
+ {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS | METH_KEYWORDS},
- {"getiterator", (PyCFunction) element_iter, METH_VARARGS},
+ {"getiterator", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
{"getchildren", (PyCFunction) element_getchildren, METH_VARARGS},
{"items", (PyCFunction) element_items, METH_VARARGS},
@@ -1459,18 +1760,9 @@ static PyMethodDef element_methods[] = {
{"__copy__", (PyCFunction) element_copy, METH_VARARGS},
{"__deepcopy__", (PyCFunction) element_deepcopy, METH_VARARGS},
-
- /* Some 2.3 and 2.4 versions do not handle the __copy__ method on
- C objects correctly, so we have to fake it using a __reduce__-
- based hack (see the element_reduce implementation above for
- details). */
-
- /* The behaviour has been changed in 2.3.5 and 2.4.1, so we're
- using a runtime test to figure out if we need to fake things
- or now (see the init code below). The following entry is
- enabled only if the hack is needed. */
-
- {"!__reduce__", (PyCFunction) element_reduce, METH_VARARGS},
+ {"__sizeof__", element_sizeof, METH_NOARGS},
+ {"__getstate__", (PyCFunction)element_getstate, METH_NOARGS},
+ {"__setstate__", (PyCFunction)element_setstate, METH_O},
{NULL, NULL}
};
@@ -1483,7 +1775,7 @@ element_getattro(ElementObject* self, PyObject* nameobj)
if (PyUnicode_Check(nameobj))
name = _PyUnicode_AsString(nameobj);
-
+
if (name == NULL)
return NULL;
@@ -1510,7 +1802,7 @@ element_getattro(ElementObject* self, PyObject* nameobj)
} else if (strcmp(name, "attrib") == 0) {
PyErr_Clear();
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
res = element_get_attrib(self);
}
@@ -1522,17 +1814,15 @@ element_getattro(ElementObject* self, PyObject* nameobj)
}
static int
-element_setattr(ElementObject* self, const char* name, PyObject* value)
+element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value)
{
- if (value == NULL) {
- PyErr_SetString(
- PyExc_AttributeError,
- "can't delete element attributes"
- );
- return -1;
- }
+ char *name = "";
+ if (PyUnicode_Check(nameobj))
+ name = _PyUnicode_AsString(nameobj);
- if (strcmp(name, "tag") == 0) {
+ if (name == NULL) {
+ return -1;
+ } else if (strcmp(name, "tag") == 0) {
Py_DECREF(self->tag);
self->tag = value;
Py_INCREF(self->tag);
@@ -1546,12 +1836,13 @@ element_setattr(ElementObject* self, const char* name, PyObject* value)
Py_INCREF(self->tail);
} else if (strcmp(name, "attrib") == 0) {
if (!self->extra)
- element_new_extra(self, NULL);
+ create_extra(self, NULL);
Py_DECREF(self->extra->attrib);
self->extra->attrib = value;
Py_INCREF(self->extra->attrib);
} else {
- PyErr_SetString(PyExc_AttributeError, name);
+ PyErr_SetString(PyExc_AttributeError,
+ "Can't set arbitrary attributes on Element");
return -1;
}
@@ -1576,136 +1867,504 @@ static PyMappingMethods element_as_mapping = {
static PyTypeObject Element_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "Element", sizeof(ElementObject), 0,
+ "xml.etree.ElementTree.Element", sizeof(ElementObject), 0,
/* methods */
- (destructor)element_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- (setattrfunc)element_setattr, /* tp_setattr */
- 0, /* tp_reserved */
- (reprfunc)element_repr, /* tp_repr */
- 0, /* tp_as_number */
- &element_as_sequence, /* tp_as_sequence */
- &element_as_mapping, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- (getattrofunc)element_getattro, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- element_methods, /* tp_methods */
- 0, /* tp_members */
+ (destructor)element_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc)element_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ &element_as_sequence, /* tp_as_sequence */
+ &element_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ (getattrofunc)element_getattro, /* tp_getattro */
+ (setattrofunc)element_setattro, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+ /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)element_gc_traverse, /* tp_traverse */
+ (inquiry)element_gc_clear, /* tp_clear */
+ 0, /* tp_richcompare */
+ offsetof(ElementObject, weakreflist), /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ element_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)element_init, /* tp_init */
+ PyType_GenericAlloc, /* tp_alloc */
+ element_new, /* tp_new */
+ 0, /* tp_free */
};
+/******************************* Element iterator ****************************/
+
+/* ElementIterObject represents the iteration state over an XML element in
+ * pre-order traversal. To keep track of which sub-element should be returned
+ * next, a stack of parents is maintained. This is a standard stack-based
+ * iterative pre-order traversal of a tree.
+ * The stack is managed using a single-linked list starting at parent_stack.
+ * Each stack node contains the saved parent to which we should return after
+ * the current one is exhausted, and the next child to examine in that parent.
+ */
+typedef struct ParentLocator_t {
+ ElementObject *parent;
+ Py_ssize_t child_index;
+ struct ParentLocator_t *next;
+} ParentLocator;
+
+typedef struct {
+ PyObject_HEAD
+ ParentLocator *parent_stack;
+ ElementObject *root_element;
+ PyObject *sought_tag;
+ int root_done;
+ int gettext;
+} ElementIterObject;
+
+
+static void
+elementiter_dealloc(ElementIterObject *it)
+{
+ ParentLocator *p = it->parent_stack;
+ while (p) {
+ ParentLocator *temp = p;
+ Py_XDECREF(p->parent);
+ p = p->next;
+ PyObject_Free(temp);
+ }
+
+ Py_XDECREF(it->sought_tag);
+ Py_XDECREF(it->root_element);
+
+ PyObject_GC_UnTrack(it);
+ PyObject_GC_Del(it);
+}
+
+static int
+elementiter_traverse(ElementIterObject *it, visitproc visit, void *arg)
+{
+ ParentLocator *p = it->parent_stack;
+ while (p) {
+ Py_VISIT(p->parent);
+ p = p->next;
+ }
+
+ Py_VISIT(it->root_element);
+ Py_VISIT(it->sought_tag);
+ return 0;
+}
+
+/* Helper function for elementiter_next. Add a new parent to the parent stack.
+ */
+static ParentLocator *
+parent_stack_push_new(ParentLocator *stack, ElementObject *parent)
+{
+ ParentLocator *new_node = PyObject_Malloc(sizeof(ParentLocator));
+ if (new_node) {
+ new_node->parent = parent;
+ Py_INCREF(parent);
+ new_node->child_index = 0;
+ new_node->next = stack;
+ }
+ return new_node;
+}
+
+static PyObject *
+elementiter_next(ElementIterObject *it)
+{
+ /* Sub-element iterator.
+ *
+ * A short note on gettext: this function serves both the iter() and
+ * itertext() methods to avoid code duplication. However, there are a few
+ * small differences in the way these iterations work. Namely:
+ * - itertext() only yields text from nodes that have it, and continues
+ * iterating when a node doesn't have text (so it doesn't return any
+ * node like iter())
+ * - itertext() also has to handle tail, after finishing with all the
+ * children of a node.
+ */
+ ElementObject *cur_parent;
+ Py_ssize_t child_index;
+
+ while (1) {
+ /* Handle the case reached in the beginning and end of iteration, where
+ * the parent stack is empty. The root_done flag gives us indication
+ * whether we've just started iterating (so root_done is 0), in which
+ * case the root is returned. If root_done is 1 and we're here, the
+ * iterator is exhausted.
+ */
+ if (!it->parent_stack->parent) {
+ if (it->root_done) {
+ PyErr_SetNone(PyExc_StopIteration);
+ return NULL;
+ } else {
+ it->parent_stack = parent_stack_push_new(it->parent_stack,
+ it->root_element);
+ if (!it->parent_stack) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ it->root_done = 1;
+ if (it->sought_tag == Py_None ||
+ PyObject_RichCompareBool(it->root_element->tag,
+ it->sought_tag, Py_EQ) == 1) {
+ if (it->gettext) {
+ PyObject *text = element_get_text(it->root_element);
+ if (!text)
+ return NULL;
+ if (PyObject_IsTrue(text)) {
+ Py_INCREF(text);
+ return text;
+ }
+ } else {
+ Py_INCREF(it->root_element);
+ return (PyObject *)it->root_element;
+ }
+ }
+ }
+ }
+
+ /* See if there are children left to traverse in the current parent. If
+ * yes, visit the next child. If not, pop the stack and try again.
+ */
+ cur_parent = it->parent_stack->parent;
+ child_index = it->parent_stack->child_index;
+ if (cur_parent->extra && child_index < cur_parent->extra->length) {
+ ElementObject *child = (ElementObject *)
+ cur_parent->extra->children[child_index];
+ it->parent_stack->child_index++;
+ it->parent_stack = parent_stack_push_new(it->parent_stack,
+ child);
+ if (!it->parent_stack) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ if (it->gettext) {
+ PyObject *text = element_get_text(child);
+ if (!text)
+ return NULL;
+ if (PyObject_IsTrue(text)) {
+ Py_INCREF(text);
+ return text;
+ }
+ } else if (it->sought_tag == Py_None ||
+ PyObject_RichCompareBool(child->tag,
+ it->sought_tag, Py_EQ) == 1) {
+ Py_INCREF(child);
+ return (PyObject *)child;
+ }
+ else
+ continue;
+ }
+ else {
+ PyObject *tail;
+ ParentLocator *next = it->parent_stack->next;
+ if (it->gettext) {
+ tail = element_get_tail(cur_parent);
+ if (!tail)
+ return NULL;
+ }
+ else
+ tail = Py_None;
+ Py_XDECREF(it->parent_stack->parent);
+ PyObject_Free(it->parent_stack);
+ it->parent_stack = next;
+
+ /* Note that extra condition on it->parent_stack->parent here;
+ * this is because itertext() is supposed to only return *inner*
+ * text, not text following the element it began iteration with.
+ */
+ if (it->parent_stack->parent && PyObject_IsTrue(tail)) {
+ Py_INCREF(tail);
+ return tail;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+
+static PyTypeObject ElementIter_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ /* Using the module's name since the pure-Python implementation does not
+ have such a type. */
+ "_elementtree._element_iterator", /* tp_name */
+ sizeof(ElementIterObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ (destructor)elementiter_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)elementiter_traverse, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ PyObject_SelfIter, /* tp_iter */
+ (iternextfunc)elementiter_next, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+};
+
+
+static PyObject *
+create_elementiter(ElementObject *self, PyObject *tag, int gettext)
+{
+ ElementIterObject *it;
+ PyObject *star = NULL;
+
+ it = PyObject_GC_New(ElementIterObject, &ElementIter_Type);
+ if (!it)
+ return NULL;
+ if (!(it->parent_stack = PyObject_Malloc(sizeof(ParentLocator)))) {
+ PyObject_GC_Del(it);
+ return NULL;
+ }
+
+ it->parent_stack->parent = NULL;
+ it->parent_stack->child_index = 0;
+ it->parent_stack->next = NULL;
+
+ if (PyUnicode_Check(tag))
+ star = PyUnicode_FromString("*");
+ else if (PyBytes_Check(tag))
+ star = PyBytes_FromString("*");
+
+ if (star && PyObject_RichCompareBool(tag, star, Py_EQ) == 1)
+ tag = Py_None;
+
+ Py_XDECREF(star);
+ it->sought_tag = tag;
+ it->root_done = 0;
+ it->gettext = gettext;
+ it->root_element = self;
+
+ Py_INCREF(self);
+ Py_INCREF(tag);
+
+ PyObject_GC_Track(it);
+ return (PyObject *)it;
+}
+
+
/* ==================================================================== */
/* the tree builder type */
typedef struct {
PyObject_HEAD
- PyObject* root; /* root node (first created node) */
+ PyObject *root; /* root node (first created node) */
- ElementObject* this; /* current node */
- ElementObject* last; /* most recently created node */
+ PyObject *this; /* current node */
+ PyObject *last; /* most recently created node */
- PyObject* data; /* data collector (string or list), or NULL */
+ PyObject *data; /* data collector (string or list), or NULL */
- PyObject* stack; /* element stack */
- Py_ssize_t index; /* current stack size (0=empty) */
+ PyObject *stack; /* element stack */
+ Py_ssize_t index; /* current stack size (0 means empty) */
- /* element tracing */
- PyObject* events; /* list of events, or NULL if not collecting */
- PyObject* start_event_obj; /* event objects (NULL to ignore) */
- PyObject* end_event_obj;
- PyObject* start_ns_event_obj;
- PyObject* end_ns_event_obj;
+ PyObject *element_factory;
+ /* element tracing */
+ PyObject *events; /* list of events, or NULL if not collecting */
+ PyObject *start_event_obj; /* event objects (NULL to ignore) */
+ PyObject *end_event_obj;
+ PyObject *start_ns_event_obj;
+ PyObject *end_ns_event_obj;
} TreeBuilderObject;
-static PyTypeObject TreeBuilder_Type;
-
#define TreeBuilder_CheckExact(op) (Py_TYPE(op) == &TreeBuilder_Type)
/* -------------------------------------------------------------------- */
/* constructor and destructor */
-LOCAL(PyObject*)
-treebuilder_new(void)
+static PyObject *
+treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
- TreeBuilderObject* self;
+ TreeBuilderObject *t = (TreeBuilderObject *)type->tp_alloc(type, 0);
+ if (t != NULL) {
+ t->root = NULL;
- self = PyObject_New(TreeBuilderObject, &TreeBuilder_Type);
- if (self == NULL)
- return NULL;
-
- self->root = NULL;
+ Py_INCREF(Py_None);
+ t->this = Py_None;
+ Py_INCREF(Py_None);
+ t->last = Py_None;
+
+ t->data = NULL;
+ t->element_factory = NULL;
+ t->stack = PyList_New(20);
+ if (!t->stack) {
+ Py_DECREF(t->this);
+ Py_DECREF(t->last);
+ Py_DECREF((PyObject *) t);
+ return NULL;
+ }
+ t->index = 0;
- Py_INCREF(Py_None);
- self->this = (ElementObject*) Py_None;
+ t->events = NULL;
+ t->start_event_obj = t->end_event_obj = NULL;
+ t->start_ns_event_obj = t->end_ns_event_obj = NULL;
+ }
+ return (PyObject *)t;
+}
- Py_INCREF(Py_None);
- self->last = (ElementObject*) Py_None;
+static int
+treebuilder_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"element_factory", 0};
+ PyObject *element_factory = NULL;
+ TreeBuilderObject *self_tb = (TreeBuilderObject *)self;
+ PyObject *tmp;
- self->data = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:TreeBuilder", kwlist,
+ &element_factory)) {
+ return -1;
+ }
- self->stack = PyList_New(20);
- self->index = 0;
+ if (element_factory) {
+ Py_INCREF(element_factory);
+ tmp = self_tb->element_factory;
+ self_tb->element_factory = element_factory;
+ Py_XDECREF(tmp);
+ }
- self->events = NULL;
- self->start_event_obj = self->end_event_obj = NULL;
- self->start_ns_event_obj = self->end_ns_event_obj = NULL;
+ return 0;
+}
- ALLOC(sizeof(TreeBuilderObject), "create treebuilder");
+static int
+treebuilder_gc_traverse(TreeBuilderObject *self, visitproc visit, void *arg)
+{
+ Py_VISIT(self->root);
+ Py_VISIT(self->this);
+ Py_VISIT(self->last);
+ Py_VISIT(self->data);
+ Py_VISIT(self->stack);
+ Py_VISIT(self->element_factory);
+ return 0;
+}
- return (PyObject*) self;
+static int
+treebuilder_gc_clear(TreeBuilderObject *self)
+{
+ Py_CLEAR(self->end_ns_event_obj);
+ Py_CLEAR(self->start_ns_event_obj);
+ Py_CLEAR(self->end_event_obj);
+ Py_CLEAR(self->start_event_obj);
+ Py_CLEAR(self->events);
+ Py_CLEAR(self->stack);
+ Py_CLEAR(self->data);
+ Py_CLEAR(self->last);
+ Py_CLEAR(self->this);
+ Py_CLEAR(self->element_factory);
+ Py_CLEAR(self->root);
+ return 0;
}
-static PyObject*
-treebuilder(PyObject* self_, PyObject* args)
+static void
+treebuilder_dealloc(TreeBuilderObject *self)
{
- if (!PyArg_ParseTuple(args, ":TreeBuilder"))
- return NULL;
-
- return treebuilder_new();
+ PyObject_GC_UnTrack(self);
+ treebuilder_gc_clear(self);
+ Py_TYPE(self)->tp_free((PyObject *)self);
}
-static void
-treebuilder_dealloc(TreeBuilderObject* self)
-{
- Py_XDECREF(self->end_ns_event_obj);
- Py_XDECREF(self->start_ns_event_obj);
- Py_XDECREF(self->end_event_obj);
- Py_XDECREF(self->start_event_obj);
- Py_XDECREF(self->events);
- Py_DECREF(self->stack);
- Py_XDECREF(self->data);
- Py_DECREF(self->last);
- Py_DECREF(self->this);
- Py_XDECREF(self->root);
+/* -------------------------------------------------------------------- */
+/* helpers for handling of arbitrary element-like objects */
- RELEASE(sizeof(TreeBuilderObject), "destroy treebuilder");
+static int
+treebuilder_set_element_text_or_tail(PyObject *element, PyObject *data,
+ PyObject **dest, _Py_Identifier *name)
+{
+ if (Element_CheckExact(element)) {
+ Py_DECREF(JOIN_OBJ(*dest));
+ *dest = JOIN_SET(data, PyList_CheckExact(data));
+ return 0;
+ }
+ else {
+ PyObject *joined = list_join(data);
+ int r;
+ if (joined == NULL)
+ return -1;
+ r = _PyObject_SetAttrId(element, name, joined);
+ Py_DECREF(joined);
+ return r;
+ }
+}
- PyObject_Del(self);
+/* These two functions steal a reference to data */
+static int
+treebuilder_set_element_text(PyObject *element, PyObject *data)
+{
+ _Py_IDENTIFIER(text);
+ return treebuilder_set_element_text_or_tail(
+ element, data, &((ElementObject *) element)->text, &PyId_text);
}
-/* -------------------------------------------------------------------- */
-/* handlers */
+static int
+treebuilder_set_element_tail(PyObject *element, PyObject *data)
+{
+ _Py_IDENTIFIER(tail);
+ return treebuilder_set_element_text_or_tail(
+ element, data, &((ElementObject *) element)->tail, &PyId_tail);
+}
-LOCAL(PyObject*)
-treebuilder_handle_xml(TreeBuilderObject* self, PyObject* encoding,
- PyObject* standalone)
+static int
+treebuilder_add_subelement(PyObject *element, PyObject *child)
{
- Py_RETURN_NONE;
+ _Py_IDENTIFIER(append);
+ if (Element_CheckExact(element)) {
+ ElementObject *elem = (ElementObject *) element;
+ return element_add_subelement(elem, child);
+ }
+ else {
+ PyObject *res;
+ res = _PyObject_CallMethodId(element, &PyId_append, "O", child);
+ if (res == NULL)
+ return -1;
+ Py_DECREF(res);
+ return 0;
+ }
}
+/* -------------------------------------------------------------------- */
+/* handlers */
+
LOCAL(PyObject*)
treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
PyObject* attrib)
@@ -1715,27 +2374,29 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
if (self->data) {
if (self->this == self->last) {
- Py_DECREF(JOIN_OBJ(self->last->text));
- self->last->text = JOIN_SET(
- self->data, PyList_CheckExact(self->data)
- );
- } else {
- Py_DECREF(JOIN_OBJ(self->last->tail));
- self->last->tail = JOIN_SET(
- self->data, PyList_CheckExact(self->data)
- );
+ if (treebuilder_set_element_text(self->last, self->data))
+ return NULL;
+ }
+ else {
+ if (treebuilder_set_element_tail(self->last, self->data))
+ return NULL;
}
self->data = NULL;
}
- node = element_new(tag, attrib);
- if (!node)
+ if (self->element_factory && self->element_factory != Py_None) {
+ node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
+ } else {
+ node = create_new_element(tag, attrib);
+ }
+ if (!node) {
return NULL;
+ }
- this = (PyObject*) self->this;
+ this = self->this;
if (this != Py_None) {
- if (element_add_subelement((ElementObject*) this, node) < 0)
+ if (treebuilder_add_subelement(this, node) < 0)
goto error;
} else {
if (self->root) {
@@ -1761,19 +2422,17 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
Py_DECREF(this);
Py_INCREF(node);
- self->this = (ElementObject*) node;
+ self->this = node;
Py_DECREF(self->last);
Py_INCREF(node);
- self->last = (ElementObject*) node;
+ self->last = node;
if (self->start_event_obj) {
PyObject* res;
PyObject* action = self->start_event_obj;
- res = PyTuple_New(2);
+ res = PyTuple_Pack(2, action, node);
if (res) {
- Py_INCREF(action); PyTuple_SET_ITEM(res, 0, (PyObject*) action);
- Py_INCREF(node); PyTuple_SET_ITEM(res, 1, (PyObject*) node);
PyList_Append(self->events, res);
Py_DECREF(res);
} else
@@ -1791,7 +2450,7 @@ LOCAL(PyObject*)
treebuilder_handle_data(TreeBuilderObject* self, PyObject* data)
{
if (!self->data) {
- if (self->last == (ElementObject*) Py_None) {
+ if (self->last == Py_None) {
/* ignore calls to data before the first call to start */
Py_RETURN_NONE;
}
@@ -1801,6 +2460,7 @@ treebuilder_handle_data(TreeBuilderObject* self, PyObject* data)
/* more than one item; use a list to collect items */
if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
PyBytes_CheckExact(data) && PyBytes_GET_SIZE(data) == 1) {
+ /* XXX this code path unused in Python 3? */
/* expat often generates single character data sections; handle
the most common case by resizing the existing string... */
Py_ssize_t size = PyBytes_GET_SIZE(self->data);
@@ -1830,15 +2490,11 @@ treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag)
if (self->data) {
if (self->this == self->last) {
- Py_DECREF(JOIN_OBJ(self->last->text));
- self->last->text = JOIN_SET(
- self->data, PyList_CheckExact(self->data)
- );
+ if (treebuilder_set_element_text(self->last, self->data))
+ return NULL;
} else {
- Py_DECREF(JOIN_OBJ(self->last->tail));
- self->last->tail = JOIN_SET(
- self->data, PyList_CheckExact(self->data)
- );
+ if (treebuilder_set_element_tail(self->last, self->data))
+ return NULL;
}
self->data = NULL;
}
@@ -1858,17 +2514,15 @@ treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag)
Py_DECREF(self->last);
- self->last = (ElementObject*) self->this;
- self->this = (ElementObject*) item;
+ self->last = self->this;
+ self->this = item;
if (self->end_event_obj) {
PyObject* res;
PyObject* action = self->end_event_obj;
PyObject* node = (PyObject*) self->last;
- res = PyTuple_New(2);
+ res = PyTuple_Pack(2, action, node);
if (res) {
- Py_INCREF(action); PyTuple_SET_ITEM(res, 0, (PyObject*) action);
- Py_INCREF(node); PyTuple_SET_ITEM(res, 1, (PyObject*) node);
PyList_Append(self->events, res);
Py_DECREF(res);
} else
@@ -1914,8 +2568,12 @@ treebuilder_handle_namespace(TreeBuilderObject* self, int start,
PyTuple_SET_ITEM(res, 1, parcel);
PyList_Append(self->events, res);
Py_DECREF(res);
- } else
+ }
+ else {
+ Py_DECREF(action);
+ Py_DECREF(parcel);
PyErr_Clear(); /* FIXME: propagate error */
+ }
}
/* -------------------------------------------------------------------- */
@@ -1977,55 +2635,54 @@ treebuilder_start(TreeBuilderObject* self, PyObject* args)
return treebuilder_handle_start(self, tag, attrib);
}
-static PyObject*
-treebuilder_xml(TreeBuilderObject* self, PyObject* args)
-{
- PyObject* encoding;
- PyObject* standalone;
- if (!PyArg_ParseTuple(args, "OO:xml", &encoding, &standalone))
- return NULL;
-
- return treebuilder_handle_xml(self, encoding, standalone);
-}
-
static PyMethodDef treebuilder_methods[] = {
{"data", (PyCFunction) treebuilder_data, METH_VARARGS},
{"start", (PyCFunction) treebuilder_start, METH_VARARGS},
{"end", (PyCFunction) treebuilder_end, METH_VARARGS},
- {"xml", (PyCFunction) treebuilder_xml, METH_VARARGS},
{"close", (PyCFunction) treebuilder_close, METH_VARARGS},
{NULL, NULL}
};
static PyTypeObject TreeBuilder_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "TreeBuilder", sizeof(TreeBuilderObject), 0,
+ "xml.etree.ElementTree.TreeBuilder", sizeof(TreeBuilderObject), 0,
/* methods */
- (destructor)treebuilder_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- treebuilder_methods, /* tp_methods */
- 0, /* tp_members */
+ (destructor)treebuilder_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+ /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)treebuilder_gc_traverse, /* tp_traverse */
+ (inquiry)treebuilder_gc_clear, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ treebuilder_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)treebuilder_init, /* tp_init */
+ PyType_GenericAlloc, /* tp_alloc */
+ treebuilder_new, /* tp_new */
+ 0, /* tp_free */
};
/* ==================================================================== */
@@ -2034,39 +2691,36 @@ static PyTypeObject TreeBuilder_Type = {
#if defined(USE_EXPAT)
#include "expat.h"
-
-#if defined(USE_PYEXPAT_CAPI)
#include "pyexpat.h"
-static struct PyExpat_CAPI* expat_capi;
+static struct PyExpat_CAPI *expat_capi;
#define EXPAT(func) (expat_capi->func)
-#else
-#define EXPAT(func) (XML_##func)
-#endif
+
+static XML_Memory_Handling_Suite ExpatMemoryHandler = {
+ PyObject_Malloc, PyObject_Realloc, PyObject_Free};
typedef struct {
PyObject_HEAD
XML_Parser parser;
- PyObject* target;
- PyObject* entity;
-
- PyObject* names;
+ PyObject *target;
+ PyObject *entity;
- PyObject* handle_xml;
+ PyObject *names;
- PyObject* handle_start;
- PyObject* handle_data;
- PyObject* handle_end;
+ PyObject *handle_start;
+ PyObject *handle_data;
+ PyObject *handle_end;
- PyObject* handle_comment;
- PyObject* handle_pi;
+ PyObject *handle_comment;
+ PyObject *handle_pi;
+ PyObject *handle_doctype;
- PyObject* handle_close;
+ PyObject *handle_close;
} XMLParserObject;
-static PyTypeObject XMLParser_Type;
+#define XMLParser_CheckExact(op) (Py_TYPE(op) == &XMLParser_Type)
/* helpers */
@@ -2076,7 +2730,7 @@ makeuniversal(XMLParserObject* self, const char* string)
/* convert a UTF-8 tag/attribute name from the expat parser
to a universal name string */
- int size = strlen(string);
+ Py_ssize_t size = (Py_ssize_t) strlen(string);
PyObject* key;
PyObject* value;
@@ -2095,7 +2749,7 @@ makeuniversal(XMLParserObject* self, const char* string)
PyObject* tag;
char* p;
- int i;
+ Py_ssize_t i;
/* look for namespace separator */
for (i = 0; i < size; i++)
@@ -2113,7 +2767,7 @@ makeuniversal(XMLParserObject* self, const char* string)
Py_INCREF(key);
tag = key;
}
-
+
/* decode universal name */
p = PyBytes_AS_STRING(tag);
value = PyUnicode_DecodeUTF8(p, size, "strict");
@@ -2135,20 +2789,39 @@ makeuniversal(XMLParserObject* self, const char* string)
return value;
}
+/* Set the ParseError exception with the given parameters.
+ * If message is not NULL, it's used as the error string. Otherwise, the
+ * message string is the default for the given error_code.
+*/
static void
-expat_set_error(const char* message, int line, int column)
+expat_set_error(enum XML_Error error_code, int line, int column, char *message)
{
- PyObject *error;
- PyObject *position;
- char buffer[256];
+ PyObject *errmsg, *error, *position, *code;
- sprintf(buffer, "%.100s: line %d, column %d", message, line, column);
+ errmsg = PyUnicode_FromFormat("%s: line %d, column %d",
+ message ? message : EXPAT(ErrorString)(error_code),
+ line, column);
+ if (errmsg == NULL)
+ return;
- error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer);
+ error = PyObject_CallFunction(elementtree_parseerror_obj, "O", errmsg);
+ Py_DECREF(errmsg);
if (!error)
return;
- /* add position attribute */
+ /* Add code and position attributes */
+ code = PyLong_FromLong((long)error_code);
+ if (!code) {
+ Py_DECREF(error);
+ return;
+ }
+ if (PyObject_SetAttrString(error, "code", code) == -1) {
+ Py_DECREF(error);
+ Py_DECREF(code);
+ return;
+ }
+ Py_DECREF(code);
+
position = Py_BuildValue("(ii)", line, column);
if (!position) {
Py_DECREF(error);
@@ -2200,9 +2873,10 @@ expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
char message[128] = "undefined entity ";
strncat(message, data_in, data_len < 100?data_len:100);
expat_set_error(
- message,
+ XML_ERROR_UNDEFINED_ENTITY,
EXPAT(GetErrorLineNumber)(self->parser),
- EXPAT(GetErrorColumnNumber)(self->parser)
+ EXPAT(GetErrorColumnNumber)(self->parser),
+ message
);
}
@@ -2247,21 +2921,18 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in,
attrib_in += 2;
}
} else {
- Py_INCREF(Py_None);
- attrib = Py_None;
+ /* Pass an empty dictionary on */
+ attrib = PyDict_New();
+ if (!attrib)
+ return;
}
- if (TreeBuilder_CheckExact(self->target))
+ if (TreeBuilder_CheckExact(self->target)) {
/* shortcut */
res = treebuilder_handle_start((TreeBuilderObject*) self->target,
tag, attrib);
+ }
else if (self->handle_start) {
- if (attrib == Py_None) {
- Py_DECREF(attrib);
- attrib = PyDict_New();
- if (!attrib)
- return;
- }
res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
} else
res = NULL;
@@ -2326,7 +2997,10 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix,
PyObject* sprefix = NULL;
PyObject* suri = NULL;
- suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict");
+ if (uri)
+ suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict");
+ else
+ suri = PyUnicode_FromString("");
if (!suri)
return;
@@ -2372,6 +3046,78 @@ expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
}
static void
+expat_start_doctype_handler(XMLParserObject *self,
+ const XML_Char *doctype_name,
+ const XML_Char *sysid,
+ const XML_Char *pubid,
+ int has_internal_subset)
+{
+ PyObject *self_pyobj = (PyObject *)self;
+ PyObject *doctype_name_obj, *sysid_obj, *pubid_obj;
+ PyObject *parser_doctype = NULL;
+ PyObject *res = NULL;
+
+ doctype_name_obj = makeuniversal(self, doctype_name);
+ if (!doctype_name_obj)
+ return;
+
+ if (sysid) {
+ sysid_obj = makeuniversal(self, sysid);
+ if (!sysid_obj) {
+ Py_DECREF(doctype_name_obj);
+ return;
+ }
+ } else {
+ Py_INCREF(Py_None);
+ sysid_obj = Py_None;
+ }
+
+ if (pubid) {
+ pubid_obj = makeuniversal(self, pubid);
+ if (!pubid_obj) {
+ Py_DECREF(doctype_name_obj);
+ Py_DECREF(sysid_obj);
+ return;
+ }
+ } else {
+ Py_INCREF(Py_None);
+ pubid_obj = Py_None;
+ }
+
+ /* If the target has a handler for doctype, call it. */
+ if (self->handle_doctype) {
+ res = PyObject_CallFunction(self->handle_doctype, "OOO",
+ doctype_name_obj, pubid_obj, sysid_obj);
+ Py_CLEAR(res);
+ }
+
+ /* Now see if the parser itself has a doctype method. If yes and it's
+ * a subclass, call it but warn about deprecation. If it's not a subclass
+ * (i.e. vanilla XMLParser), do nothing.
+ */
+ parser_doctype = PyObject_GetAttrString(self_pyobj, "doctype");
+ if (parser_doctype) {
+ if (!XMLParser_CheckExact(self_pyobj)) {
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "This method of XMLParser is deprecated. Define"
+ " doctype() method on the TreeBuilder target.",
+ 1) < 0) {
+ goto clear;
+ }
+ res = PyObject_CallFunction(parser_doctype, "OOO",
+ doctype_name_obj, pubid_obj, sysid_obj);
+ Py_CLEAR(res);
+ }
+ }
+
+clear:
+ Py_XDECREF(parser_doctype);
+ Py_DECREF(doctype_name_obj);
+ Py_DECREF(pubid_obj);
+ Py_DECREF(sysid_obj);
+}
+
+static void
expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
const XML_Char* data_in)
{
@@ -2394,185 +3140,160 @@ expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
}
}
-static int
-expat_unknown_encoding_handler(XMLParserObject *self, const XML_Char *name,
- XML_Encoding *info)
-{
- PyObject* u;
- Py_UNICODE* p;
- unsigned char s[256];
- int i;
-
- memset(info, 0, sizeof(XML_Encoding));
-
- for (i = 0; i < 256; i++)
- s[i] = i;
-
- u = PyUnicode_Decode((char*) s, 256, name, "replace");
- if (!u)
- return XML_STATUS_ERROR;
-
- if (PyUnicode_GET_SIZE(u) != 256) {
- Py_DECREF(u);
- return XML_STATUS_ERROR;
- }
-
- p = PyUnicode_AS_UNICODE(u);
+/* -------------------------------------------------------------------- */
- for (i = 0; i < 256; i++) {
- if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER)
- info->map[i] = p[i];
- else
- info->map[i] = -1;
+static PyObject *
+xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ XMLParserObject *self = (XMLParserObject *)type->tp_alloc(type, 0);
+ if (self) {
+ self->parser = NULL;
+ self->target = self->entity = self->names = NULL;
+ self->handle_start = self->handle_data = self->handle_end = NULL;
+ self->handle_comment = self->handle_pi = self->handle_close = NULL;
+ self->handle_doctype = NULL;
}
-
- Py_DECREF(u);
-
- return XML_STATUS_OK;
+ return (PyObject *)self;
}
-/* -------------------------------------------------------------------- */
-/* constructor and destructor */
-
-static PyObject*
-xmlparser(PyObject* self_, PyObject* args, PyObject* kw)
+static int
+xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds)
{
- XMLParserObject* self;
- /* FIXME: does this need to be static? */
- static XML_Memory_Handling_Suite memory_handler;
+ XMLParserObject *self_xp = (XMLParserObject *)self;
+ PyObject *target = NULL, *html = NULL;
+ char *encoding = NULL;
+ static char *kwlist[] = {"html", "target", "encoding", 0};
- PyObject* target = NULL;
- char* encoding = NULL;
- static char* kwlist[] = { "target", "encoding", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kw, "|Oz:XMLParser", kwlist,
- &target, &encoding))
- return NULL;
-
-#if defined(USE_PYEXPAT_CAPI)
- if (!expat_capi) {
- PyErr_SetString(
- PyExc_RuntimeError, "cannot load dispatch table from pyexpat"
- );
- return NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOz:XMLParser", kwlist,
+ &html, &target, &encoding)) {
+ return -1;
}
-#endif
- self = PyObject_New(XMLParserObject, &XMLParser_Type);
- if (self == NULL)
- return NULL;
+ self_xp->entity = PyDict_New();
+ if (!self_xp->entity)
+ return -1;
- self->entity = PyDict_New();
- if (!self->entity) {
- PyObject_Del(self);
- return NULL;
- }
-
- self->names = PyDict_New();
- if (!self->names) {
- PyObject_Del(self->entity);
- PyObject_Del(self);
- return NULL;
+ self_xp->names = PyDict_New();
+ if (!self_xp->names) {
+ Py_CLEAR(self_xp->entity);
+ return -1;
}
- memory_handler.malloc_fcn = PyObject_Malloc;
- memory_handler.realloc_fcn = PyObject_Realloc;
- memory_handler.free_fcn = PyObject_Free;
-
- self->parser = EXPAT(ParserCreate_MM)(encoding, &memory_handler, "}");
- if (!self->parser) {
- PyObject_Del(self->names);
- PyObject_Del(self->entity);
- PyObject_Del(self);
+ self_xp->parser = EXPAT(ParserCreate_MM)(encoding, &ExpatMemoryHandler, "}");
+ if (!self_xp->parser) {
+ Py_CLEAR(self_xp->entity);
+ Py_CLEAR(self_xp->names);
PyErr_NoMemory();
- return NULL;
+ return -1;
}
- /* setup target handlers */
- if (!target) {
- target = treebuilder_new();
+ if (target) {
+ Py_INCREF(target);
+ } else {
+ target = treebuilder_new(&TreeBuilder_Type, NULL, NULL);
if (!target) {
- EXPAT(ParserFree)(self->parser);
- PyObject_Del(self->names);
- PyObject_Del(self->entity);
- PyObject_Del(self);
- return NULL;
+ Py_CLEAR(self_xp->entity);
+ Py_CLEAR(self_xp->names);
+ EXPAT(ParserFree)(self_xp->parser);
+ return -1;
}
- } else
- Py_INCREF(target);
- self->target = target;
+ }
+ self_xp->target = target;
- self->handle_xml = PyObject_GetAttrString(target, "xml");
- self->handle_start = PyObject_GetAttrString(target, "start");
- self->handle_data = PyObject_GetAttrString(target, "data");
- self->handle_end = PyObject_GetAttrString(target, "end");
- self->handle_comment = PyObject_GetAttrString(target, "comment");
- self->handle_pi = PyObject_GetAttrString(target, "pi");
- self->handle_close = PyObject_GetAttrString(target, "close");
+ self_xp->handle_start = PyObject_GetAttrString(target, "start");
+ self_xp->handle_data = PyObject_GetAttrString(target, "data");
+ self_xp->handle_end = PyObject_GetAttrString(target, "end");
+ self_xp->handle_comment = PyObject_GetAttrString(target, "comment");
+ self_xp->handle_pi = PyObject_GetAttrString(target, "pi");
+ self_xp->handle_close = PyObject_GetAttrString(target, "close");
+ self_xp->handle_doctype = PyObject_GetAttrString(target, "doctype");
PyErr_Clear();
/* configure parser */
- EXPAT(SetUserData)(self->parser, self);
+ EXPAT(SetUserData)(self_xp->parser, self_xp);
EXPAT(SetElementHandler)(
- self->parser,
+ self_xp->parser,
(XML_StartElementHandler) expat_start_handler,
(XML_EndElementHandler) expat_end_handler
);
EXPAT(SetDefaultHandlerExpand)(
- self->parser,
+ self_xp->parser,
(XML_DefaultHandler) expat_default_handler
);
EXPAT(SetCharacterDataHandler)(
- self->parser,
+ self_xp->parser,
(XML_CharacterDataHandler) expat_data_handler
);
- if (self->handle_comment)
+ if (self_xp->handle_comment)
EXPAT(SetCommentHandler)(
- self->parser,
+ self_xp->parser,
(XML_CommentHandler) expat_comment_handler
);
- if (self->handle_pi)
+ if (self_xp->handle_pi)
EXPAT(SetProcessingInstructionHandler)(
- self->parser,
+ self_xp->parser,
(XML_ProcessingInstructionHandler) expat_pi_handler
);
+ EXPAT(SetStartDoctypeDeclHandler)(
+ self_xp->parser,
+ (XML_StartDoctypeDeclHandler) expat_start_doctype_handler
+ );
EXPAT(SetUnknownEncodingHandler)(
- self->parser,
- (XML_UnknownEncodingHandler) expat_unknown_encoding_handler, NULL
+ self_xp->parser,
+ EXPAT(DefaultUnknownEncodingHandler), NULL
);
- ALLOC(sizeof(XMLParserObject), "create expatparser");
+ return 0;
+}
- return (PyObject*) self;
+static int
+xmlparser_gc_traverse(XMLParserObject *self, visitproc visit, void *arg)
+{
+ Py_VISIT(self->handle_close);
+ Py_VISIT(self->handle_pi);
+ Py_VISIT(self->handle_comment);
+ Py_VISIT(self->handle_end);
+ Py_VISIT(self->handle_data);
+ Py_VISIT(self->handle_start);
+
+ Py_VISIT(self->target);
+ Py_VISIT(self->entity);
+ Py_VISIT(self->names);
+
+ return 0;
}
-static void
-xmlparser_dealloc(XMLParserObject* self)
+static int
+xmlparser_gc_clear(XMLParserObject *self)
{
EXPAT(ParserFree)(self->parser);
- Py_XDECREF(self->handle_close);
- Py_XDECREF(self->handle_pi);
- Py_XDECREF(self->handle_comment);
- Py_XDECREF(self->handle_end);
- Py_XDECREF(self->handle_data);
- Py_XDECREF(self->handle_start);
- Py_XDECREF(self->handle_xml);
-
- Py_DECREF(self->target);
- Py_DECREF(self->entity);
- Py_DECREF(self->names);
+ Py_CLEAR(self->handle_close);
+ Py_CLEAR(self->handle_pi);
+ Py_CLEAR(self->handle_comment);
+ Py_CLEAR(self->handle_end);
+ Py_CLEAR(self->handle_data);
+ Py_CLEAR(self->handle_start);
+ Py_CLEAR(self->handle_doctype);
- RELEASE(sizeof(XMLParserObject), "destroy expatparser");
+ Py_CLEAR(self->target);
+ Py_CLEAR(self->entity);
+ Py_CLEAR(self->names);
- PyObject_Del(self);
+ return 0;
}
-/* -------------------------------------------------------------------- */
-/* methods (in alphabetical order) */
+static void
+xmlparser_dealloc(XMLParserObject* self)
+{
+ PyObject_GC_UnTrack(self);
+ xmlparser_gc_clear(self);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
LOCAL(PyObject*)
-expat_parse(XMLParserObject* self, char* data, int data_len, int final)
+expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
{
int ok;
@@ -2583,9 +3304,10 @@ expat_parse(XMLParserObject* self, char* data, int data_len, int final)
if (!ok) {
expat_set_error(
- EXPAT(ErrorString)(EXPAT(GetErrorCode)(self->parser)),
+ EXPAT(GetErrorCode)(self->parser),
EXPAT(GetErrorLineNumber)(self->parser),
- EXPAT(GetErrorColumnNumber)(self->parser)
+ EXPAT(GetErrorColumnNumber)(self->parser),
+ NULL
);
return NULL;
}
@@ -2617,16 +3339,37 @@ xmlparser_close(XMLParserObject* self, PyObject* args)
}
static PyObject*
-xmlparser_feed(XMLParserObject* self, PyObject* args)
+xmlparser_feed(XMLParserObject* self, PyObject* arg)
{
/* feed data to parser */
- char* data;
- int data_len;
- if (!PyArg_ParseTuple(args, "s#:feed", &data, &data_len))
- return NULL;
-
- return expat_parse(self, data, data_len, 0);
+ if (PyUnicode_Check(arg)) {
+ Py_ssize_t data_len;
+ const char *data = PyUnicode_AsUTF8AndSize(arg, &data_len);
+ if (data == NULL)
+ return NULL;
+ if (data_len > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "size does not fit in an int");
+ return NULL;
+ }
+ /* Explicitly set UTF-8 encoding. Return code ignored. */
+ (void)EXPAT(SetEncoding)(self->parser, "utf-8");
+ return expat_parse(self, data, (int)data_len, 0);
+ }
+ else {
+ Py_buffer view;
+ PyObject *res;
+ if (PyObject_GetBuffer(arg, &view, PyBUF_SIMPLE) < 0)
+ return NULL;
+ if (view.len > INT_MAX) {
+ PyBuffer_Release(&view);
+ PyErr_SetString(PyExc_OverflowError, "size does not fit in an int");
+ return NULL;
+ }
+ res = expat_parse(self, view.buf, (int)view.len, 0);
+ PyBuffer_Release(&view);
+ return res;
+ }
}
static PyObject*
@@ -2636,6 +3379,7 @@ xmlparser_parse(XMLParserObject* self, PyObject* args)
PyObject* reader;
PyObject* buffer;
+ PyObject* temp;
PyObject* res;
PyObject* fileobj;
@@ -2645,7 +3389,7 @@ xmlparser_parse(XMLParserObject* self, PyObject* args)
reader = PyObject_GetAttrString(fileobj, "read");
if (!reader)
return NULL;
-
+
/* read from open file object */
for (;;) {
@@ -2657,7 +3401,22 @@ xmlparser_parse(XMLParserObject* self, PyObject* args)
return NULL;
}
- if (!PyBytes_CheckExact(buffer) || PyBytes_GET_SIZE(buffer) == 0) {
+ if (PyUnicode_CheckExact(buffer)) {
+ /* A unicode object is encoded into bytes using UTF-8 */
+ if (PyUnicode_GET_SIZE(buffer) == 0) {
+ Py_DECREF(buffer);
+ break;
+ }
+ temp = PyUnicode_AsEncodedString(buffer, "utf-8", "surrogatepass");
+ Py_DECREF(buffer);
+ if (!temp) {
+ /* Propagate exception from PyUnicode_AsEncodedString */
+ Py_DECREF(reader);
+ return NULL;
+ }
+ buffer = temp;
+ }
+ else if (!PyBytes_CheckExact(buffer) || PyBytes_GET_SIZE(buffer) == 0) {
Py_DECREF(buffer);
break;
}
@@ -2689,7 +3448,13 @@ xmlparser_parse(XMLParserObject* self, PyObject* args)
}
static PyObject*
-xmlparser_setevents(XMLParserObject* self, PyObject* args)
+xmlparser_doctype(XMLParserObject *self, PyObject *args)
+{
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+xmlparser_setevents(XMLParserObject *self, PyObject* args)
{
/* activate element event reporting */
@@ -2705,7 +3470,7 @@ xmlparser_setevents(XMLParserObject* self, PyObject* args)
if (!TreeBuilder_CheckExact(self->target)) {
PyErr_SetString(
PyExc_TypeError,
- "event handling only supported for cElementTree.Treebuilder "
+ "event handling only supported for ElementTree.TreeBuilder "
"targets"
);
return NULL;
@@ -2718,10 +3483,10 @@ xmlparser_setevents(XMLParserObject* self, PyObject* args)
target->events = events;
/* clear out existing events */
- Py_XDECREF(target->start_event_obj); target->start_event_obj = NULL;
- Py_XDECREF(target->end_event_obj); target->end_event_obj = NULL;
- Py_XDECREF(target->start_ns_event_obj); target->start_ns_event_obj = NULL;
- Py_XDECREF(target->end_ns_event_obj); target->end_ns_event_obj = NULL;
+ Py_CLEAR(target->start_event_obj);
+ Py_CLEAR(target->end_event_obj);
+ Py_CLEAR(target->start_ns_event_obj);
+ Py_CLEAR(target->end_ns_event_obj);
if (event_set == Py_None) {
/* default is "end" only */
@@ -2789,14 +3554,15 @@ xmlparser_setevents(XMLParserObject* self, PyObject* args)
}
static PyMethodDef xmlparser_methods[] = {
- {"feed", (PyCFunction) xmlparser_feed, METH_VARARGS},
+ {"feed", (PyCFunction) xmlparser_feed, METH_O},
{"close", (PyCFunction) xmlparser_close, METH_VARARGS},
{"_parse", (PyCFunction) xmlparser_parse, METH_VARARGS},
{"_setevents", (PyCFunction) xmlparser_setevents, METH_VARARGS},
+ {"doctype", (PyCFunction) xmlparser_doctype, METH_VARARGS},
{NULL, NULL}
};
-static PyObject*
+static PyObject*
xmlparser_getattro(XMLParserObject* self, PyObject* nameobj)
{
if (PyUnicode_Check(nameobj)) {
@@ -2822,33 +3588,44 @@ xmlparser_getattro(XMLParserObject* self, PyObject* nameobj)
static PyTypeObject XMLParser_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "XMLParser", sizeof(XMLParserObject), 0,
+ "xml.etree.ElementTree.XMLParser", sizeof(XMLParserObject), 0,
/* methods */
- (destructor)xmlparser_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- (getattrofunc)xmlparser_getattro, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- xmlparser_methods, /* tp_methods */
- 0, /* tp_members */
+ (destructor)xmlparser_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ (getattrofunc)xmlparser_getattro, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+ /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)xmlparser_gc_traverse, /* tp_traverse */
+ (inquiry)xmlparser_gc_clear, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ xmlparser_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)xmlparser_init, /* tp_init */
+ PyType_GenericAlloc, /* tp_alloc */
+ xmlparser_new, /* tp_new */
+ 0, /* tp_free */
};
#endif
@@ -2857,13 +3634,7 @@ static PyTypeObject XMLParser_Type = {
/* python module interface */
static PyMethodDef _functions[] = {
- {"Element", (PyCFunction) element, METH_VARARGS|METH_KEYWORDS},
- {"SubElement", (PyCFunction) subelement, METH_VARARGS|METH_KEYWORDS},
- {"TreeBuilder", (PyCFunction) treebuilder, METH_VARARGS},
-#if defined(USE_EXPAT)
- {"XMLParser", (PyCFunction) xmlparser, METH_VARARGS|METH_KEYWORDS},
- {"XMLTreeBuilder", (PyCFunction) xmlparser, METH_VARARGS|METH_KEYWORDS},
-#endif
+ {"SubElement", (PyCFunction) subelement, METH_VARARGS | METH_KEYWORDS},
{NULL, NULL}
};
@@ -2883,11 +3654,11 @@ static struct PyModuleDef _elementtreemodule = {
PyMODINIT_FUNC
PyInit__elementtree(void)
{
- PyObject* m;
- PyObject* g;
- char* bootstrap;
+ PyObject *m, *temp;
/* Initialize object types */
+ if (PyType_Ready(&ElementIter_Type) < 0)
+ return NULL;
if (PyType_Ready(&TreeBuilder_Type) < 0)
return NULL;
if (PyType_Ready(&Element_Type) < 0)
@@ -2901,212 +3672,15 @@ PyInit__elementtree(void)
if (!m)
return NULL;
- /* The code below requires that the module gets already added
- to sys.modules. */
- PyDict_SetItemString(PyImport_GetModuleDict(),
- _elementtreemodule.m_name,
- m);
-
- /* python glue code */
-
- g = PyDict_New();
- if (!g)
- return NULL;
-
- PyDict_SetItemString(g, "__builtins__", PyEval_GetBuiltins());
-
- bootstrap = (
-
- "from copy import copy, deepcopy\n"
-
- "try:\n"
- " from xml.etree import ElementTree\n"
- "except ImportError:\n"
- " import ElementTree\n"
- "ET = ElementTree\n"
- "del ElementTree\n"
-
- "import _elementtree as cElementTree\n"
-
- "try:\n" /* check if copy works as is */
- " copy(cElementTree.Element('x'))\n"
- "except:\n"
- " def copyelement(elem):\n"
- " return elem\n"
-
- "class CommentProxy:\n"
- " def __call__(self, text=None):\n"
- " element = cElementTree.Element(ET.Comment)\n"
- " element.text = text\n"
- " return element\n"
- " def __eq__(self, other):\n"
- " return ET.Comment == other\n"
- "cElementTree.Comment = CommentProxy()\n"
-
- "class ElementTree(ET.ElementTree):\n" /* public */
- " def parse(self, source, parser=None):\n"
- " close_source = False\n"
- " if not hasattr(source, 'read'):\n"
- " source = open(source, 'rb')\n"
- " close_source = True\n"
- " try:\n"
- " if parser is not None:\n"
- " while 1:\n"
- " data = source.read(65536)\n"
- " if not data:\n"
- " break\n"
- " parser.feed(data)\n"
- " self._root = parser.close()\n"
- " else:\n"
- " parser = cElementTree.XMLParser()\n"
- " self._root = parser._parse(source)\n"
- " return self._root\n"
- " finally:\n"
- " if close_source:\n"
- " source.close()\n"
- "cElementTree.ElementTree = ElementTree\n"
-
- "def iter(node, tag=None):\n" /* helper */
- " if tag == '*':\n"
- " tag = None\n"
- " if tag is None or node.tag == tag:\n"
- " yield node\n"
- " for node in node:\n"
- " for node in iter(node, tag):\n"
- " yield node\n"
-
- "def itertext(node):\n" /* helper */
- " if node.text:\n"
- " yield node.text\n"
- " for e in node:\n"
- " for s in e.itertext():\n"
- " yield s\n"
- " if e.tail:\n"
- " yield e.tail\n"
-
- "def parse(source, parser=None):\n" /* public */
- " tree = ElementTree()\n"
- " tree.parse(source, parser)\n"
- " return tree\n"
- "cElementTree.parse = parse\n"
-
- "class iterparse:\n"
- " root = None\n"
- " def __init__(self, file, events=None):\n"
- " self._close_file = False\n"
- " if not hasattr(file, 'read'):\n"
- " file = open(file, 'rb')\n"
- " self._close_file = True\n"
- " self._file = file\n"
- " self._events = []\n"
- " self._index = 0\n"
- " self._error = None\n"
- " self.root = self._root = None\n"
- " b = cElementTree.TreeBuilder()\n"
- " self._parser = cElementTree.XMLParser(b)\n"
- " self._parser._setevents(self._events, events)\n"
- " def __next__(self):\n"
- " while 1:\n"
- " try:\n"
- " item = self._events[self._index]\n"
- " self._index += 1\n"
- " return item\n"
- " except IndexError:\n"
- " pass\n"
- " if self._error:\n"
- " e = self._error\n"
- " self._error = None\n"
- " raise e\n"
- " if self._parser is None:\n"
- " self.root = self._root\n"
- " if self._close_file:\n"
- " self._file.close()\n"
- " raise StopIteration\n"
- " # load event buffer\n"
- " del self._events[:]\n"
- " self._index = 0\n"
- " data = self._file.read(16384)\n"
- " if data:\n"
- " try:\n"
- " self._parser.feed(data)\n"
- " except SyntaxError as exc:\n"
- " self._error = exc\n"
- " else:\n"
- " self._root = self._parser.close()\n"
- " self._parser = None\n"
- " def __iter__(self):\n"
- " return self\n"
- "cElementTree.iterparse = iterparse\n"
-
- "class PIProxy:\n"
- " def __call__(self, target, text=None):\n"
- " element = cElementTree.Element(ET.PI)\n"
- " element.text = target\n"
- " if text:\n"
- " element.text = element.text + ' ' + text\n"
- " return element\n"
- " def __eq__(self, other):\n"
- " return ET.PI == other\n"
- "cElementTree.PI = cElementTree.ProcessingInstruction = PIProxy()\n"
-
- "def XML(text):\n" /* public */
- " parser = cElementTree.XMLParser()\n"
- " parser.feed(text)\n"
- " return parser.close()\n"
- "cElementTree.XML = cElementTree.fromstring = XML\n"
-
- "def XMLID(text):\n" /* public */
- " tree = XML(text)\n"
- " ids = {}\n"
- " for elem in tree.iter():\n"
- " id = elem.get('id')\n"
- " if id:\n"
- " ids[id] = elem\n"
- " return tree, ids\n"
- "cElementTree.XMLID = XMLID\n"
-
- "try:\n"
- " register_namespace = ET.register_namespace\n"
- "except AttributeError:\n"
- " def register_namespace(prefix, uri):\n"
- " ET._namespace_map[uri] = prefix\n"
- "cElementTree.register_namespace = register_namespace\n"
-
- "cElementTree.dump = ET.dump\n"
- "cElementTree.ElementPath = ElementPath = ET.ElementPath\n"
- "cElementTree.iselement = ET.iselement\n"
- "cElementTree.QName = ET.QName\n"
- "cElementTree.tostring = ET.tostring\n"
- "cElementTree.fromstringlist = ET.fromstringlist\n"
- "cElementTree.tostringlist = ET.tostringlist\n"
- "cElementTree.VERSION = '" VERSION "'\n"
- "cElementTree.__version__ = '" VERSION "'\n"
-
- );
-
- if (!PyRun_String(bootstrap, Py_file_input, g, NULL))
- return NULL;
-
- elementpath_obj = PyDict_GetItemString(g, "ElementPath");
-
- elementtree_copyelement_obj = PyDict_GetItemString(g, "copyelement");
- if (elementtree_copyelement_obj) {
- /* reduce hack needed; enable reduce method */
- PyMethodDef* mp;
- for (mp = element_methods; mp->ml_name; mp++)
- if (mp->ml_meth == (PyCFunction) element_reduce) {
- mp->ml_name = "__reduce__";
- break;
- }
- } else
- PyErr_Clear();
+ if (!(temp = PyImport_ImportModule("copy")))
+ return NULL;
+ elementtree_deepcopy_obj = PyObject_GetAttrString(temp, "deepcopy");
+ Py_XDECREF(temp);
- elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy");
- elementtree_iter_obj = PyDict_GetItemString(g, "iter");
- elementtree_itertext_obj = PyDict_GetItemString(g, "itertext");
+ if (!(elementpath_obj = PyImport_ImportModule("xml.etree.ElementPath")))
+ return NULL;
-#if defined(USE_PYEXPAT_CAPI)
- /* link against pyexpat, if possible */
+ /* link against pyexpat */
expat_capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0);
if (expat_capi) {
/* check that it's usable */
@@ -3122,13 +3696,23 @@ PyInit__elementtree(void)
} else {
return NULL;
}
-#endif
elementtree_parseerror_obj = PyErr_NewException(
- "cElementTree.ParseError", PyExc_SyntaxError, NULL
+ "xml.etree.ElementTree.ParseError", PyExc_SyntaxError, NULL
);
Py_INCREF(elementtree_parseerror_obj);
PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj);
+ Py_INCREF((PyObject *)&Element_Type);
+ PyModule_AddObject(m, "Element", (PyObject *)&Element_Type);
+
+ Py_INCREF((PyObject *)&TreeBuilder_Type);
+ PyModule_AddObject(m, "TreeBuilder", (PyObject *)&TreeBuilder_Type);
+
+#if defined(USE_EXPAT)
+ Py_INCREF((PyObject *)&XMLParser_Type);
+ PyModule_AddObject(m, "XMLParser", (PyObject *)&XMLParser_Type);
+#endif
+
return m;
}
diff --git a/Modules/_freeze_importlib.c b/Modules/_freeze_importlib.c
new file mode 100644
index 0000000000..8f07a89a8a
--- /dev/null
+++ b/Modules/_freeze_importlib.c
@@ -0,0 +1,144 @@
+/* This is built as a stand-alone executable by the Makefile, and helps turn
+ Lib/importlib/_bootstrap.py into a frozen module in Python/importlib.h
+*/
+
+#include <Python.h>
+#include <marshal.h>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifndef MS_WINDOWS
+#include <unistd.h>
+#endif
+
+
+/* To avoid a circular dependency on frozen.o, we create our own structure
+ of frozen modules instead, left deliberately blank so as to avoid
+ unintentional import of a stale version of _frozen_importlib. */
+
+static struct _frozen _PyImport_FrozenModules[] = {
+ {0, 0, 0} /* sentinel */
+};
+
+#ifndef MS_WINDOWS
+/* On Windows, this links with the regular pythonXY.dll, so this variable comes
+ from frozen.obj. In the Makefile, frozen.o is not linked into this executable,
+ so we define the variable here. */
+struct _frozen *PyImport_FrozenModules;
+#endif
+
+const char header[] = "/* Auto-generated by Modules/_freeze_importlib.c */";
+
+int
+main(int argc, char *argv[])
+{
+ char *inpath, *outpath;
+ FILE *infile = NULL, *outfile = NULL;
+ struct stat st;
+ size_t text_size, data_size, n;
+ char *text = NULL;
+ unsigned char *data;
+ PyObject *code = NULL, *marshalled = NULL;
+
+ PyImport_FrozenModules = _PyImport_FrozenModules;
+
+ if (argc != 3) {
+ fprintf(stderr, "need to specify input and output paths\n");
+ return 2;
+ }
+ inpath = argv[1];
+ outpath = argv[2];
+ infile = fopen(inpath, "rb");
+ if (infile == NULL) {
+ fprintf(stderr, "cannot open '%s' for reading\n", inpath);
+ goto error;
+ }
+ if (fstat(fileno(infile), &st)) {
+ fprintf(stderr, "cannot fstat '%s'\n", inpath);
+ goto error;
+ }
+ text_size = st.st_size;
+ text = (char *) malloc(text_size + 1);
+ if (text == NULL) {
+ fprintf(stderr, "could not allocate %ld bytes\n", (long) text_size);
+ goto error;
+ }
+ n = fread(text, 1, text_size, infile);
+ fclose(infile);
+ infile = NULL;
+ if (n < text_size) {
+ fprintf(stderr, "read too short: got %ld instead of %ld bytes\n",
+ (long) n, (long) text_size);
+ goto error;
+ }
+ text[text_size] = '\0';
+
+ Py_NoUserSiteDirectory++;
+ Py_NoSiteFlag++;
+ Py_IgnoreEnvironmentFlag++;
+
+ Py_SetProgramName(L"./_freeze_importlib");
+ /* Don't install importlib, since it could execute outdated bytecode. */
+ _Py_InitializeEx_Private(1, 0);
+
+ code = Py_CompileStringExFlags(text, "<frozen importlib._bootstrap>",
+ Py_file_input, NULL, 0);
+ if (code == NULL)
+ goto error;
+ free(text);
+ text = NULL;
+
+ marshalled = PyMarshal_WriteObjectToString(code, Py_MARSHAL_VERSION);
+ Py_CLEAR(code);
+ if (marshalled == NULL)
+ goto error;
+
+ assert(PyBytes_CheckExact(marshalled));
+ data = (unsigned char *) PyBytes_AS_STRING(marshalled);
+ data_size = PyBytes_GET_SIZE(marshalled);
+
+ /* Open the file in text mode. The hg checkout should be using the eol extension,
+ which in turn should cause the EOL style match the C library's text mode */
+ outfile = fopen(outpath, "w");
+ if (outfile == NULL) {
+ fprintf(stderr, "cannot open '%s' for writing\n", outpath);
+ goto error;
+ }
+ fprintf(outfile, "%s\n", header);
+ fprintf(outfile, "unsigned char _Py_M__importlib[] = {\n");
+ for (n = 0; n < data_size; n += 16) {
+ size_t i, end = Py_MIN(n + 16, data_size);
+ fprintf(outfile, " ");
+ for (i = n; i < end; i++) {
+ fprintf(outfile, "%d,", (unsigned int) data[i]);
+ }
+ fprintf(outfile, "\n");
+ }
+ fprintf(outfile, "};\n");
+
+ Py_CLEAR(marshalled);
+
+ Py_Finalize();
+ if (outfile) {
+ if (ferror(outfile)) {
+ fprintf(stderr, "error when writing to '%s'\n", outpath);
+ goto error;
+ }
+ fclose(outfile);
+ }
+ return 0;
+
+error:
+ PyErr_Print();
+ Py_Finalize();
+ if (infile)
+ fclose(infile);
+ if (outfile)
+ fclose(outfile);
+ if (text)
+ free(text);
+ if (marshalled)
+ Py_DECREF(marshalled);
+ return 1;
+}
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index a0ea3ab849..57dfba0410 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -155,44 +155,8 @@ static PyMemberDef partial_memberlist[] = {
{NULL} /* Sentinel */
};
-static PyObject *
-partial_get_dict(partialobject *pto)
-{
- if (pto->dict == NULL) {
- pto->dict = PyDict_New();
- if (pto->dict == NULL)
- return NULL;
- }
- Py_INCREF(pto->dict);
- return pto->dict;
-}
-
-static int
-partial_set_dict(partialobject *pto, PyObject *value)
-{
- PyObject *tmp;
-
- /* It is illegal to del p.__dict__ */
- if (value == NULL) {
- PyErr_SetString(PyExc_TypeError,
- "a partial object's dictionary may not be deleted");
- return -1;
- }
- /* Can only set __dict__ to a dictionary */
- if (!PyDict_Check(value)) {
- PyErr_SetString(PyExc_TypeError,
- "setting partial object's dictionary to a non-dict");
- return -1;
- }
- tmp = pto->dict;
- Py_INCREF(value);
- pto->dict = value;
- Py_XDECREF(tmp);
- return 0;
-}
-
static PyGetSetDef partial_getsetlist[] = {
- {"__dict__", (getter)partial_get_dict, (setter)partial_set_dict},
+ {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
{NULL} /* Sentinel */
};
@@ -330,6 +294,176 @@ static PyTypeObject partial_type = {
};
+/* cmp_to_key ***************************************************************/
+
+typedef struct {
+ PyObject_HEAD
+ PyObject *cmp;
+ PyObject *object;
+} keyobject;
+
+static void
+keyobject_dealloc(keyobject *ko)
+{
+ Py_DECREF(ko->cmp);
+ Py_XDECREF(ko->object);
+ PyObject_FREE(ko);
+}
+
+static int
+keyobject_traverse(keyobject *ko, visitproc visit, void *arg)
+{
+ Py_VISIT(ko->cmp);
+ if (ko->object)
+ Py_VISIT(ko->object);
+ return 0;
+}
+
+static int
+keyobject_clear(keyobject *ko)
+{
+ Py_CLEAR(ko->cmp);
+ if (ko->object)
+ Py_CLEAR(ko->object);
+ return 0;
+}
+
+static PyMemberDef keyobject_members[] = {
+ {"obj", T_OBJECT,
+ offsetof(keyobject, object), 0,
+ PyDoc_STR("Value wrapped by a key function.")},
+ {NULL}
+};
+
+static PyObject *
+keyobject_call(keyobject *ko, PyObject *args, PyObject *kwds);
+
+static PyObject *
+keyobject_richcompare(PyObject *ko, PyObject *other, int op);
+
+static PyTypeObject keyobject_type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "functools.KeyWrapper", /* tp_name */
+ sizeof(keyobject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ (destructor)keyobject_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ (ternaryfunc)keyobject_call, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)keyobject_traverse, /* tp_traverse */
+ (inquiry)keyobject_clear, /* tp_clear */
+ keyobject_richcompare, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ keyobject_members, /* tp_members */
+ 0, /* tp_getset */
+};
+
+static PyObject *
+keyobject_call(keyobject *ko, PyObject *args, PyObject *kwds)
+{
+ PyObject *object;
+ keyobject *result;
+ static char *kwargs[] = {"obj", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:K", kwargs, &object))
+ return NULL;
+ result = PyObject_New(keyobject, &keyobject_type);
+ if (!result)
+ return NULL;
+ Py_INCREF(ko->cmp);
+ result->cmp = ko->cmp;
+ Py_INCREF(object);
+ result->object = object;
+ return (PyObject *)result;
+}
+
+static PyObject *
+keyobject_richcompare(PyObject *ko, PyObject *other, int op)
+{
+ PyObject *res;
+ PyObject *args;
+ PyObject *x;
+ PyObject *y;
+ PyObject *compare;
+ PyObject *answer;
+ static PyObject *zero;
+
+ if (zero == NULL) {
+ zero = PyLong_FromLong(0);
+ if (!zero)
+ return NULL;
+ }
+
+ if (Py_TYPE(other) != &keyobject_type){
+ PyErr_Format(PyExc_TypeError, "other argument must be K instance");
+ return NULL;
+ }
+ compare = ((keyobject *) ko)->cmp;
+ assert(compare != NULL);
+ x = ((keyobject *) ko)->object;
+ y = ((keyobject *) other)->object;
+ if (!x || !y){
+ PyErr_Format(PyExc_AttributeError, "object");
+ return NULL;
+ }
+
+ /* Call the user's comparison function and translate the 3-way
+ * result into true or false (or error).
+ */
+ args = PyTuple_New(2);
+ if (args == NULL)
+ return NULL;
+ Py_INCREF(x);
+ Py_INCREF(y);
+ PyTuple_SET_ITEM(args, 0, x);
+ PyTuple_SET_ITEM(args, 1, y);
+ res = PyObject_Call(compare, args, NULL);
+ Py_DECREF(args);
+ if (res == NULL)
+ return NULL;
+ answer = PyObject_RichCompare(res, zero, op);
+ Py_DECREF(res);
+ return answer;
+}
+
+static PyObject *
+functools_cmp_to_key(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ PyObject *cmp;
+ static char *kwargs[] = {"mycmp", NULL};
+ keyobject *object;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:cmp_to_key", kwargs, &cmp))
+ return NULL;
+ object = PyObject_New(keyobject, &keyobject_type);
+ if (!object)
+ return NULL;
+ Py_INCREF(cmp);
+ object->cmp = cmp;
+ object->object = NULL;
+ return (PyObject *)object;
+}
+
+PyDoc_STRVAR(functools_cmp_to_key_doc,
+"Convert a cmp= function into a key= function.");
+
/* reduce (used to be a builtin) ********************************************/
static PyObject *
@@ -413,6 +547,8 @@ PyDoc_STRVAR(module_doc,
static PyMethodDef module_methods[] = {
{"reduce", functools_reduce, METH_VARARGS, functools_reduce_doc},
+ {"cmp_to_key", (PyCFunction)functools_cmp_to_key,
+ METH_VARARGS | METH_KEYWORDS, functools_cmp_to_key_doc},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c
index 474561b235..0bd59c8aa2 100644
--- a/Modules/_gdbmmodule.c
+++ b/Modules/_gdbmmodule.c
@@ -290,20 +290,29 @@ dbm_contains(PyObject *self, PyObject *arg)
{
dbmobject *dp = (dbmobject *)self;
datum key;
+ Py_ssize_t size;
if ((dp)->di_dbm == NULL) {
PyErr_SetString(DbmError,
"GDBM object has already been closed");
return -1;
}
- if (!PyBytes_Check(arg)) {
+ if (PyUnicode_Check(arg)) {
+ key.dptr = PyUnicode_AsUTF8AndSize(arg, &size);
+ key.dsize = size;
+ if (key.dptr == NULL)
+ return -1;
+ }
+ else if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
- "gdbm key must be bytes, not %.100s",
+ "gdbm key must be bytes or string, not %.100s",
arg->ob_type->tp_name);
return -1;
}
- key.dptr = PyBytes_AS_STRING(arg);
- key.dsize = PyBytes_GET_SIZE(arg);
+ else {
+ key.dptr = PyBytes_AS_STRING(arg);
+ key.dsize = PyBytes_GET_SIZE(arg);
+ }
return gdbm_exists(dp->di_dbm, key);
}
diff --git a/Modules/_gestalt.c b/Modules/_gestalt.c
index a45780fe79..cd3068334a 100644
--- a/Modules/_gestalt.c
+++ b/Modules/_gestalt.c
@@ -33,7 +33,7 @@ static int
convert_to_OSType(PyObject *v, OSType *pr)
{
uint32_t tmp;
- if (!PyUnicode_Check(v) || PyUnicode_GetSize(v) != 4) {
+ if (!PyUnicode_Check(v) || PyUnicode_GetLength(v) != 4) {
PyErr_SetString(PyExc_TypeError,
"OSType arg must be string of 4 chars");
return 0;
diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
index 8bcf71d66a..3ab1c0c99b 100644
--- a/Modules/_hashopenssl.c
+++ b/Modules/_hashopenssl.c
@@ -201,13 +201,11 @@ EVP_hexdigest(EVPobject *self, PyObject *unused)
/* Make hex version of the digest */
for(i=j=0; i<digest_size; i++) {
- char c;
+ unsigned char c;
c = (digest[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
c = (digest[i] & 0xf);
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
}
retval = PyUnicode_FromStringAndSize(hex_digest, digest_size * 2);
PyMem_Free(hex_digest);
diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c
index bee61dddcd..f377e9cf6c 100644
--- a/Modules/_heapqmodule.c
+++ b/Modules/_heapqmodule.c
@@ -146,7 +146,7 @@ heappush(PyObject *self, PyObject *args)
}
PyDoc_STRVAR(heappush_doc,
-"Push item onto heap, maintaining the heap invariant.");
+"heappush(heap, item) -> None. Push item onto heap, maintaining the heap invariant.");
static PyObject *
heappop(PyObject *self, PyObject *heap)
@@ -214,7 +214,7 @@ heapreplace(PyObject *self, PyObject *args)
}
PyDoc_STRVAR(heapreplace_doc,
-"Pop and return the current smallest value, and add the new item.\n\
+"heapreplace(heap, item) -> value. Pop and return the current smallest value, and add the new item.\n\
\n\
This is more efficient than heappop() followed by heappush(), and can be\n\
more appropriate when using a fixed-size heap. Note that the value\n\
@@ -261,7 +261,7 @@ heappushpop(PyObject *self, PyObject *args)
}
PyDoc_STRVAR(heappushpop_doc,
-"Push item on the heap, then pop and return the smallest item\n\
+"heappushpop(heap, item) -> value. Push item on the heap, then pop and return the smallest item\n\
from the heap. The combined action runs more efficiently than\n\
heappush() followed by a separate call to heappop().");
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index fe91a59836..4a7e758cda 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -1,9 +1,9 @@
/*
An implementation of the new I/O lib as defined by PEP 3116 - "New I/O"
-
+
Classes defined here: UnsupportedOperation, BlockingIOError.
Functions defined here: open().
-
+
Mostly written by Amaury Forgeot d'Arc
*/
@@ -36,6 +36,7 @@ PyObject *_PyIO_str_nl;
PyObject *_PyIO_str_read;
PyObject *_PyIO_str_read1;
PyObject *_PyIO_str_readable;
+PyObject *_PyIO_str_readall;
PyObject *_PyIO_str_readinto;
PyObject *_PyIO_str_readline;
PyObject *_PyIO_str_reset;
@@ -90,94 +91,11 @@ PyDoc_STRVAR(module_doc,
/*
- * BlockingIOError extends IOError
- */
-
-static int
-blockingioerror_init(PyBlockingIOErrorObject *self, PyObject *args,
- PyObject *kwds)
-{
- PyObject *myerrno = NULL, *strerror = NULL;
- PyObject *baseargs = NULL;
- Py_ssize_t written = 0;
-
- assert(PyTuple_Check(args));
-
- self->written = 0;
- if (!PyArg_ParseTuple(args, "OO|n:BlockingIOError",
- &myerrno, &strerror, &written))
- return -1;
-
- baseargs = PyTuple_Pack(2, myerrno, strerror);
- if (baseargs == NULL)
- return -1;
- /* This will take care of initializing of myerrno and strerror members */
- if (((PyTypeObject *)PyExc_IOError)->tp_init(
- (PyObject *)self, baseargs, kwds) == -1) {
- Py_DECREF(baseargs);
- return -1;
- }
- Py_DECREF(baseargs);
-
- self->written = written;
- return 0;
-}
-
-static PyMemberDef blockingioerror_members[] = {
- {"characters_written", T_PYSSIZET, offsetof(PyBlockingIOErrorObject, written), 0},
- {NULL} /* Sentinel */
-};
-
-static PyTypeObject _PyExc_BlockingIOError = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "BlockingIOError", /*tp_name*/
- sizeof(PyBlockingIOErrorObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- 0, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare */
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash */
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
- PyDoc_STR("Exception raised when I/O would block "
- "on a non-blocking I/O stream"), /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- 0, /* tp_methods */
- blockingioerror_members, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- (initproc)blockingioerror_init, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
-};
-PyObject *PyExc_BlockingIOError = (PyObject *)&_PyExc_BlockingIOError;
-
-
-/*
* The main open() function
*/
PyDoc_STRVAR(open_doc,
"open(file, mode='r', buffering=-1, encoding=None,\n"
-" errors=None, newline=None, closefd=True) -> file object\n"
+" errors=None, newline=None, closefd=True, opener=None) -> file object\n"
"\n"
"Open file and return a stream. Raise IOError upon failure.\n"
"\n"
@@ -190,18 +108,20 @@ PyDoc_STRVAR(open_doc,
"mode is an optional string that specifies the mode in which the file\n"
"is opened. It defaults to 'r' which means open for reading in text\n"
"mode. Other common values are 'w' for writing (truncating the file if\n"
-"it already exists), and 'a' for appending (which on some Unix systems,\n"
-"means that all writes append to the end of the file regardless of the\n"
-"current seek position). In text mode, if encoding is not specified the\n"
-"encoding used is platform dependent. (For reading and writing raw\n"
-"bytes use binary mode and leave encoding unspecified.) The available\n"
-"modes are:\n"
+"it already exists), 'x' for creating and writing to a new file, and\n"
+"'a' for appending (which on some Unix systems, means that all writes\n"
+"append to the end of the file regardless of the current seek position).\n"
+"In text mode, if encoding is not specified the encoding used is platform\n"
+"dependent: locale.getpreferredencoding(False) is called to get the\n"
+"current locale encoding. (For reading and writing raw bytes use binary\n"
+"mode and leave encoding unspecified.) The available modes are:\n"
"\n"
"========= ===============================================================\n"
"Character Meaning\n"
"--------- ---------------------------------------------------------------\n"
"'r' open for reading (default)\n"
"'w' open for writing, truncating the file first\n"
+"'x' create a new file and open it for writing\n"
"'a' open for writing, appending to the end of the file if it exists\n"
"'b' binary mode\n"
"'t' text mode (default)\n"
@@ -212,7 +132,8 @@ PyDoc_STRVAR(open_doc,
"\n"
"The default mode is 'rt' (open for reading text). For binary random\n"
"access, the mode 'w+b' opens and truncates the file to 0 bytes, while\n"
-"'r+b' opens the file without truncation.\n"
+"'r+b' opens the file without truncation. The 'x' mode implies 'w' and\n"
+"raises an `FileExistsError` if the file already exists.\n"
"\n"
"Python distinguishes between files opened in binary and text modes,\n"
"even when the underlying operating system doesn't. Files opened in\n"
@@ -247,8 +168,8 @@ PyDoc_STRVAR(open_doc,
"'strict' to raise a ValueError exception if there is an encoding error\n"
"(the default of None has the same effect), or pass 'ignore' to ignore\n"
"errors. (Note that ignoring encoding errors can lead to data loss.)\n"
-"See the documentation for codecs.register for a list of the permitted\n"
-"encoding error strings.\n"
+"See the documentation for codecs.register or run 'help(codecs.Codec)'\n"
+"for a list of the permitted encoding error strings.\n"
"\n"
"newline controls how universal newlines works (it only applies to text\n"
"mode). It can be None, '', '\\n', '\\r', and '\\r\\n'. It works as\n"
@@ -272,6 +193,12 @@ PyDoc_STRVAR(open_doc,
"when the file is closed. This does not work when a file name is given\n"
"and must be True in that case.\n"
"\n"
+"A custom opener can be used by passing a callable as *opener*. The\n"
+"underlying file descriptor for the file object is then obtained by\n"
+"calling *opener* with (*file*, *flags*). *opener* must return an open\n"
+"file descriptor (passing os.open as *opener* results in functionality\n"
+"similar to passing None).\n"
+"\n"
"open() returns a file object whose type depends on the mode, and\n"
"through which the standard file operations such as reading and writing\n"
"are performed. When open() is used to open a file in a text mode ('w',\n"
@@ -292,26 +219,29 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
{
char *kwlist[] = {"file", "mode", "buffering",
"encoding", "errors", "newline",
- "closefd", NULL};
- PyObject *file;
+ "closefd", "opener", NULL};
+ PyObject *file, *opener = Py_None;
char *mode = "r";
int buffering = -1, closefd = 1;
char *encoding = NULL, *errors = NULL, *newline = NULL;
unsigned i;
- int reading = 0, writing = 0, appending = 0, updating = 0;
+ int creating = 0, reading = 0, writing = 0, appending = 0, updating = 0;
int text = 0, binary = 0, universal = 0;
- char rawmode[5], *m;
- int line_buffering;
- long isatty;
+ char rawmode[6], *m;
+ int line_buffering, isatty;
PyObject *raw, *modeobj = NULL, *buffer = NULL, *wrapper = NULL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|sizzzi:open", kwlist,
+ _Py_IDENTIFIER(isatty);
+ _Py_IDENTIFIER(fileno);
+ _Py_IDENTIFIER(mode);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|sizzziO:open", kwlist,
&file, &mode, &buffering,
&encoding, &errors, &newline,
- &closefd)) {
+ &closefd, &opener)) {
return NULL;
}
@@ -327,6 +257,9 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
char c = mode[i];
switch (c) {
+ case 'x':
+ creating = 1;
+ break;
case 'r':
reading = 1;
break;
@@ -363,6 +296,7 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
}
m = rawmode;
+ if (creating) *(m++) = 'x';
if (reading) *(m++) = 'r';
if (writing) *(m++) = 'w';
if (appending) *(m++) = 'a';
@@ -385,9 +319,9 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
return NULL;
}
- if (reading + writing + appending > 1) {
+ if (creating + reading + writing + appending > 1) {
PyErr_SetString(PyExc_ValueError,
- "must have exactly one of read/write/append mode");
+ "must have exactly one of create/read/write/append mode");
return NULL;
}
@@ -411,7 +345,7 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
/* Create the Raw file stream */
raw = PyObject_CallFunction((PyObject *)&PyFileIO_Type,
- "Osi", file, rawmode, closefd);
+ "OsiO", file, rawmode, closefd, opener);
if (raw == NULL)
return NULL;
@@ -421,7 +355,7 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
/* buffering */
{
- PyObject *res = PyObject_CallMethod(raw, "isatty", NULL);
+ PyObject *res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
if (res == NULL)
goto error;
isatty = PyLong_AsLong(res);
@@ -442,12 +376,12 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
{
struct stat st;
- int fileno;
- PyObject *res = PyObject_CallMethod(raw, "fileno", NULL);
+ long fileno;
+ PyObject *res = _PyObject_CallMethodId(raw, &PyId_fileno, NULL);
if (res == NULL)
goto error;
- fileno = _PyLong_AsInt(res);
+ fileno = PyLong_AsLong(res);
Py_DECREF(res);
if (fileno == -1 && PyErr_Occurred())
goto error;
@@ -481,7 +415,7 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
if (updating)
Buffered_class = (PyObject *)&PyBufferedRandom_Type;
- else if (writing || appending)
+ else if (creating || writing || appending)
Buffered_class = (PyObject *)&PyBufferedWriter_Type;
else if (reading)
Buffered_class = (PyObject *)&PyBufferedReader_Type;
@@ -514,7 +448,7 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
if (wrapper == NULL)
goto error;
- if (PyObject_SetAttrString(wrapper, "mode", modeobj) < 0)
+ if (_PyObject_SetAttrId(wrapper, &PyId_mode, modeobj) < 0)
goto error;
Py_DECREF(modeobj);
return wrapper;
@@ -577,7 +511,7 @@ PyNumber_AsOff_t(PyObject *item, PyObject *err)
/* Basically the "n" format code with the ability to turn None into -1. */
-int
+int
_PyIO_ConvertSsize_t(PyObject *obj, void *result) {
Py_ssize_t limit;
if (obj == Py_None) {
@@ -604,7 +538,6 @@ iomodule_traverse(PyObject *mod, visitproc visit, void *arg) {
_PyIO_State *state = IO_MOD_STATE(mod);
if (!state->initialized)
return 0;
- Py_VISIT(state->os_module);
if (state->locale_module != NULL) {
Py_VISIT(state->locale_module);
}
@@ -618,7 +551,6 @@ iomodule_clear(PyObject *mod) {
_PyIO_State *state = IO_MOD_STATE(mod);
if (!state->initialized)
return 0;
- Py_CLEAR(state->os_module);
if (state->locale_module != NULL)
Py_CLEAR(state->locale_module);
Py_CLEAR(state->unsupported_operation);
@@ -662,11 +594,6 @@ PyInit__io(void)
state = IO_MOD_STATE(m);
state->initialized = 0;
- /* put os in the module state */
- state->os_module = PyImport_ImportModule("os");
- if (state->os_module == NULL)
- goto fail;
-
#define ADD_TYPE(type, name) \
if (PyType_Ready(type) < 0) \
goto fail; \
@@ -691,9 +618,11 @@ PyInit__io(void)
state->unsupported_operation) < 0)
goto fail;
- /* BlockingIOError */
- _PyExc_BlockingIOError.tp_base = (PyTypeObject *) PyExc_IOError;
- ADD_TYPE(&_PyExc_BlockingIOError, "BlockingIOError");
+ /* BlockingIOError, for compatibility */
+ Py_INCREF(PyExc_BlockingIOError);
+ if (PyModule_AddObject(m, "BlockingIOError",
+ (PyObject *) PyExc_BlockingIOError) < 0)
+ goto fail;
/* Concrete base types of the IO ABCs.
(the ABCs themselves are declared through inheritance in io.py)
@@ -759,6 +688,7 @@ PyInit__io(void)
ADD_INTERNED(read)
ADD_INTERNED(read1)
ADD_INTERNED(readable)
+ ADD_INTERNED(readall)
ADD_INTERNED(readinto)
ADD_INTERNED(readline)
ADD_INTERNED(reset)
@@ -789,7 +719,6 @@ PyInit__io(void)
return m;
fail:
- Py_XDECREF(state->os_module);
Py_XDECREF(state->unsupported_operation);
Py_DECREF(m);
return NULL;
diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h
index aa8bfd69dd..0fe90a3b3b 100644
--- a/Modules/_io/_iomodule.h
+++ b/Modules/_io/_iomodule.h
@@ -50,12 +50,12 @@ extern PyObject *_PyIncrementalNewlineDecoder_decode(
`*consumed`.
If not found, returns -1 and sets `*consumed` to the number of characters
which can be safely put aside until another search.
-
- NOTE: for performance reasons, `end` must point to a NUL character ('\0').
+
+ NOTE: for performance reasons, `end` must point to a NUL character ('\0').
Otherwise, the function will scan further and return garbage. */
extern Py_ssize_t _PyIO_find_line_ending(
int translated, int universal, PyObject *readnl,
- Py_UNICODE *start, Py_UNICODE *end, Py_ssize_t *consumed);
+ int kind, char *start, char *end, Py_ssize_t *consumed);
/* Return 1 if an EnvironmentError with errno == EINTR is set (and then
clears the error indicator), 0 otherwise.
@@ -65,15 +65,6 @@ extern int _PyIO_trap_eintr(void);
#define DEFAULT_BUFFER_SIZE (8 * 1024) /* bytes */
-typedef struct {
- PyException_HEAD
- PyObject *myerrno;
- PyObject *strerror;
- PyObject *filename; /* Not used, but part of the IOError object */
- Py_ssize_t written;
-} PyBlockingIOErrorObject;
-extern PyObject *PyExc_BlockingIOError;
-
/*
* Offset type for positioning.
*/
@@ -138,7 +129,6 @@ extern PyModuleDef _PyIO_Module;
typedef struct {
int initialized;
- PyObject *os_module;
PyObject *locale_module;
PyObject *unsupported_operation;
@@ -160,6 +150,7 @@ extern PyObject *_PyIO_str_nl;
extern PyObject *_PyIO_str_read;
extern PyObject *_PyIO_str_read1;
extern PyObject *_PyIO_str_readable;
+extern PyObject *_PyIO_str_readall;
extern PyObject *_PyIO_str_readinto;
extern PyObject *_PyIO_str_readline;
extern PyObject *_PyIO_str_reset;
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index a8278d466c..c28e289277 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -1,9 +1,9 @@
/*
An implementation of Buffered I/O as defined by PEP 3116 - "New I/O"
-
+
Classes defined here: BufferedIOBase, BufferedReader, BufferedWriter,
BufferedRandom.
-
+
Written by Amaury Forgeot d'Arc and Antoine Pitrou
*/
@@ -13,6 +13,20 @@
#include "pythread.h"
#include "_iomodule.h"
+_Py_IDENTIFIER(close);
+_Py_IDENTIFIER(_dealloc_warn);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(isatty);
+_Py_IDENTIFIER(mode);
+_Py_IDENTIFIER(name);
+_Py_IDENTIFIER(peek);
+_Py_IDENTIFIER(read);
+_Py_IDENTIFIER(read1);
+_Py_IDENTIFIER(readable);
+_Py_IDENTIFIER(readinto);
+_Py_IDENTIFIER(writable);
+_Py_IDENTIFIER(write);
+
/*
* BufferedIOBase class, inherits from IOBase.
*/
@@ -38,12 +52,13 @@ bufferediobase_readinto(PyObject *self, PyObject *args)
Py_buffer buf;
Py_ssize_t len;
PyObject *data;
+ _Py_IDENTIFIER(read);
if (!PyArg_ParseTuple(args, "w*:readinto", &buf)) {
return NULL;
}
- data = PyObject_CallMethod(self, "read", "n", buf.len);
+ data = _PyObject_CallMethodId(self, &PyId_read, "n", buf.len);
if (data == NULL)
goto error;
@@ -54,6 +69,14 @@ bufferediobase_readinto(PyObject *self, PyObject *args)
}
len = Py_SIZE(data);
+ if (len > buf.len) {
+ PyErr_Format(PyExc_ValueError,
+ "read() returned too much data: "
+ "%zd bytes requested, %zd returned",
+ buf.len, len);
+ Py_DECREF(data);
+ goto error;
+ }
memcpy(buf.buf, PyBytes_AS_STRING(data), len);
PyBuffer_Release(&buf);
@@ -198,7 +221,7 @@ typedef struct {
int readable;
int writable;
int deallocating;
-
+
/* True if this is a vanilla Buffered object (rather than a user derived
class) *and* the raw stream is a vanilla FileIO object. */
int fast_closed_checks;
@@ -237,7 +260,7 @@ typedef struct {
/*
Implementation notes:
-
+
* BufferedReader, BufferedWriter and BufferedRandom try to share most
methods (this is helped by the members `readable` and `writable`, which
are initialized in the respective constructors)
@@ -255,7 +278,7 @@ typedef struct {
NOTE: we should try to maintain block alignment of reads and writes to the
raw stream (according to the buffer size), but for now it is only done
in read() and friends.
-
+
*/
/* These macros protect the buffered object against concurrent operations. */
@@ -421,7 +444,7 @@ buffered_dealloc_warn(buffered *self, PyObject *source)
{
if (self->ok && self->raw) {
PyObject *r;
- r = PyObject_CallMethod(self->raw, "_dealloc_warn", "O", source);
+ r = _PyObject_CallMethodId(self->raw, &PyId__dealloc_warn, "O", source);
if (r)
Py_DECREF(r);
else
@@ -469,7 +492,7 @@ buffered_closed_get(buffered *self, void *context)
static PyObject *
buffered_close(buffered *self, PyObject *args)
{
- PyObject *res = NULL;
+ PyObject *res = NULL, *exc = NULL, *val, *tb;
int r;
CHECK_INITIALIZED(self)
@@ -497,13 +520,29 @@ buffered_close(buffered *self, PyObject *args)
res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
if (!ENTER_BUFFERED(self))
return NULL;
- if (res == NULL) {
- goto end;
- }
- Py_XDECREF(res);
+ if (res == NULL)
+ PyErr_Fetch(&exc, &val, &tb);
+ else
+ Py_DECREF(res);
res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_close, NULL);
+ if (exc != NULL) {
+ if (res != NULL) {
+ Py_CLEAR(res);
+ PyErr_Restore(exc, val, tb);
+ }
+ else {
+ PyObject *val2;
+ Py_DECREF(exc);
+ Py_XDECREF(tb);
+ PyErr_Fetch(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc, &val2, &tb);
+ PyException_SetContext(val2, val);
+ PyErr_Restore(exc, val2, tb);
+ }
+ }
+
end:
LEAVE_BUFFERED(self)
return res;
@@ -554,14 +593,14 @@ static PyObject *
buffered_name_get(buffered *self, void *context)
{
CHECK_INITIALIZED(self)
- return PyObject_GetAttrString(self->raw, "name");
+ return _PyObject_GetAttrId(self->raw, &PyId_name);
}
static PyObject *
buffered_mode_get(buffered *self, void *context)
{
CHECK_INITIALIZED(self)
- return PyObject_GetAttrString(self->raw, "mode");
+ return _PyObject_GetAttrId(self->raw, &PyId_mode);
}
/* Lower-level APIs */
@@ -600,14 +639,15 @@ _bufferedreader_reset_buf(buffered *self);
static void
_bufferedwriter_reset_buf(buffered *self);
static PyObject *
-_bufferedreader_peek_unlocked(buffered *self, Py_ssize_t);
+_bufferedreader_peek_unlocked(buffered *self);
static PyObject *
_bufferedreader_read_all(buffered *self);
static PyObject *
_bufferedreader_read_fast(buffered *self, Py_ssize_t);
static PyObject *
_bufferedreader_read_generic(buffered *self, Py_ssize_t);
-
+static Py_ssize_t
+_bufferedreader_raw_read(buffered *self, char *start, Py_ssize_t len);
/*
* Helpers
@@ -631,14 +671,14 @@ static Py_ssize_t *
_buffered_check_blocking_error(void)
{
PyObject *t, *v, *tb;
- PyBlockingIOErrorObject *err;
+ PyOSErrorObject *err;
PyErr_Fetch(&t, &v, &tb);
if (v == NULL || !PyErr_GivenExceptionMatches(v, PyExc_BlockingIOError)) {
PyErr_Restore(t, v, tb);
return NULL;
}
- err = (PyBlockingIOErrorObject *) v;
+ err = (PyOSErrorObject *) v;
/* TODO: sanity check (err->written >= 0) */
PyErr_Restore(t, v, tb);
return &err->written;
@@ -658,7 +698,7 @@ _buffered_raw_tell(buffered *self)
if (!PyErr_Occurred())
PyErr_Format(PyExc_IOError,
"Raw stream returned invalid position %" PY_PRIdOFF,
- (PY_OFF_T_COMPAT)n);
+ (PY_OFF_T_COMPAT)n);
return -1;
}
self->abs_pos = n;
@@ -691,7 +731,7 @@ _buffered_raw_seek(buffered *self, Py_off_t target, int whence)
if (!PyErr_Occurred())
PyErr_Format(PyExc_IOError,
"Raw stream returned invalid position %" PY_PRIdOFF,
- (PY_OFF_T_COMPAT)n);
+ (PY_OFF_T_COMPAT)n);
return -1;
}
self->abs_pos = n;
@@ -832,7 +872,7 @@ buffered_peek(buffered *self, PyObject *args)
goto end;
Py_CLEAR(res);
}
- res = _bufferedreader_peek_unlocked(self, n);
+ res = _bufferedreader_peek_unlocked(self);
end:
LEAVE_BUFFERED(self)
@@ -896,61 +936,112 @@ buffered_read1(buffered *self, PyObject *args)
if (n == 0)
return PyBytes_FromStringAndSize(NULL, 0);
- if (!ENTER_BUFFERED(self))
- return NULL;
-
/* Return up to n bytes. If at least one byte is buffered, we
only return buffered bytes. Otherwise, we do one raw read. */
- /* XXX: this mimicks the io.py implementation but is probably wrong.
- If we need to read from the raw stream, then we could actually read
- all `n` bytes asked by the caller (and possibly more, so as to fill
- our buffer for the next reads). */
-
have = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t);
if (have > 0) {
- if (n > have)
- n = have;
- res = PyBytes_FromStringAndSize(self->buffer + self->pos, n);
- if (res == NULL)
- goto end;
- self->pos += n;
- goto end;
+ n = Py_MIN(have, n);
+ res = _bufferedreader_read_fast(self, n);
+ assert(res != Py_None);
+ return res;
}
-
- if (self->writable) {
- res = buffered_flush_and_rewind_unlocked(self);
- if (res == NULL)
- goto end;
+ res = PyBytes_FromStringAndSize(NULL, n);
+ if (res == NULL)
+ return NULL;
+ if (!ENTER_BUFFERED(self)) {
Py_DECREF(res);
+ return NULL;
}
-
- /* Fill the buffer from the raw stream, and copy it to the result. */
_bufferedreader_reset_buf(self);
- r = _bufferedreader_fill_buffer(self);
- if (r == -1)
- goto end;
+ r = _bufferedreader_raw_read(self, PyBytes_AS_STRING(res), n);
+ LEAVE_BUFFERED(self)
+ if (r == -1) {
+ Py_DECREF(res);
+ return NULL;
+ }
if (r == -2)
r = 0;
if (n > r)
- n = r;
- res = PyBytes_FromStringAndSize(self->buffer, n);
- if (res == NULL)
- goto end;
- self->pos = n;
-
-end:
- LEAVE_BUFFERED(self)
+ _PyBytes_Resize(&res, r);
return res;
}
static PyObject *
buffered_readinto(buffered *self, PyObject *args)
{
+ Py_buffer buf;
+ Py_ssize_t n, written = 0, remaining;
+ PyObject *res = NULL;
+
CHECK_INITIALIZED(self)
-
- /* TODO: use raw.readinto() (or a direct copy from our buffer) instead! */
- return bufferediobase_readinto((PyObject *)self, args);
+
+ if (!PyArg_ParseTuple(args, "w*:readinto", &buf))
+ return NULL;
+
+ n = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t);
+ if (n > 0) {
+ if (n >= buf.len) {
+ memcpy(buf.buf, self->buffer + self->pos, buf.len);
+ self->pos += buf.len;
+ res = PyLong_FromSsize_t(buf.len);
+ goto end_unlocked;
+ }
+ memcpy(buf.buf, self->buffer + self->pos, n);
+ self->pos += n;
+ written = n;
+ }
+
+ if (!ENTER_BUFFERED(self))
+ goto end_unlocked;
+
+ if (self->writable) {
+ res = buffered_flush_and_rewind_unlocked(self);
+ if (res == NULL)
+ goto end;
+ Py_CLEAR(res);
+ }
+
+ _bufferedreader_reset_buf(self);
+ self->pos = 0;
+
+ for (remaining = buf.len - written;
+ remaining > 0;
+ written += n, remaining -= n) {
+ /* If remaining bytes is larger than internal buffer size, copy
+ * directly into caller's buffer. */
+ if (remaining > self->buffer_size) {
+ n = _bufferedreader_raw_read(self, (char *) buf.buf + written,
+ remaining);
+ }
+ else {
+ n = _bufferedreader_fill_buffer(self);
+ if (n > 0) {
+ if (n > remaining)
+ n = remaining;
+ memcpy((char *) buf.buf + written,
+ self->buffer + self->pos, n);
+ self->pos += n;
+ continue; /* short circuit */
+ }
+ }
+ if (n == 0 || (n == -2 && written > 0))
+ break;
+ if (n < 0) {
+ if (n == -2) {
+ Py_INCREF(Py_None);
+ res = Py_None;
+ }
+ goto end;
+ }
+ }
+ res = PyLong_FromSsize_t(written);
+
+end:
+ LEAVE_BUFFERED(self);
+end_unlocked:
+ PyBuffer_Release(&buf);
+ return res;
}
static PyObject *
@@ -1101,9 +1192,20 @@ buffered_seek(buffered *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O|i:seek", &targetobj, &whence)) {
return NULL;
}
- if (whence < 0 || whence > 2) {
+
+ /* Do some error checking instead of trusting OS 'seek()'
+ ** error detection, just in case.
+ */
+ if ((whence < 0 || whence >2)
+#ifdef SEEK_HOLE
+ && (whence != SEEK_HOLE)
+#endif
+#ifdef SEEK_DATA
+ && (whence != SEEK_DATA)
+#endif
+ ) {
PyErr_Format(PyExc_ValueError,
- "whence must be between 0 and 2, not %d", whence);
+ "whence value %d unsupported", whence);
return NULL;
}
@@ -1116,7 +1218,11 @@ buffered_seek(buffered *self, PyObject *args)
if (target == -1 && PyErr_Occurred())
return NULL;
- if (whence != 2 && self->readable) {
+ /* SEEK_SET and SEEK_CUR are special because we could seek inside the
+ buffer. Other whence values must be managed without this optimization.
+ Some Operating Systems can provide additional values, like
+ SEEK_HOLE/SEEK_DATA. */
+ if (((whence == 0) || (whence == 1)) && self->readable) {
Py_off_t current, avail;
/* Check if seeking leaves us inside the current buffer,
so as to return quickly if possible. Also, we needn't take the
@@ -1242,7 +1348,7 @@ buffered_repr(buffered *self)
{
PyObject *nameobj, *res;
- nameobj = PyObject_GetAttrString((PyObject *) self, "name");
+ nameobj = _PyObject_GetAttrId((PyObject *) self, &PyId_name);
if (nameobj == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -1368,71 +1474,95 @@ static PyObject *
_bufferedreader_read_all(buffered *self)
{
Py_ssize_t current_size;
- PyObject *res, *data = NULL;
- PyObject *chunks = PyList_New(0);
-
- if (chunks == NULL)
- return NULL;
+ PyObject *res = NULL, *data = NULL, *tmp = NULL, *chunks = NULL;
/* First copy what we have in the current buffer. */
current_size = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t);
if (current_size) {
data = PyBytes_FromStringAndSize(
self->buffer + self->pos, current_size);
- if (data == NULL) {
- Py_DECREF(chunks);
+ if (data == NULL)
return NULL;
- }
self->pos += current_size;
}
/* We're going past the buffer's bounds, flush it */
if (self->writable) {
- res = buffered_flush_and_rewind_unlocked(self);
- if (res == NULL) {
- Py_DECREF(chunks);
- return NULL;
- }
- Py_CLEAR(res);
+ tmp = buffered_flush_and_rewind_unlocked(self);
+ if (tmp == NULL)
+ goto cleanup;
+ Py_CLEAR(tmp);
}
_bufferedreader_reset_buf(self);
+
+ if (PyObject_HasAttr(self->raw, _PyIO_str_readall)) {
+ tmp = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_readall, NULL);
+ if (tmp == NULL)
+ goto cleanup;
+ if (tmp != Py_None && !PyBytes_Check(tmp)) {
+ PyErr_SetString(PyExc_TypeError, "readall() should return bytes");
+ goto cleanup;
+ }
+ if (tmp == Py_None) {
+ if (current_size == 0) {
+ res = Py_None;
+ goto cleanup;
+ } else {
+ res = data;
+ goto cleanup;
+ }
+ }
+ else if (current_size) {
+ PyBytes_Concat(&data, tmp);
+ res = data;
+ goto cleanup;
+ }
+ else {
+ res = tmp;
+ goto cleanup;
+ }
+ }
+
+ chunks = PyList_New(0);
+ if (chunks == NULL)
+ goto cleanup;
+
while (1) {
if (data) {
- if (PyList_Append(chunks, data) < 0) {
- Py_DECREF(data);
- Py_DECREF(chunks);
- return NULL;
- }
- Py_DECREF(data);
+ if (PyList_Append(chunks, data) < 0)
+ goto cleanup;
+ Py_CLEAR(data);
}
/* Read until EOF or until read() would block. */
data = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_read, NULL);
- if (data == NULL) {
- Py_DECREF(chunks);
- return NULL;
- }
+ if (data == NULL)
+ goto cleanup;
if (data != Py_None && !PyBytes_Check(data)) {
- Py_DECREF(data);
- Py_DECREF(chunks);
PyErr_SetString(PyExc_TypeError, "read() should return bytes");
- return NULL;
+ goto cleanup;
}
if (data == Py_None || PyBytes_GET_SIZE(data) == 0) {
if (current_size == 0) {
- Py_DECREF(chunks);
- return data;
+ res = data;
+ goto cleanup;
}
else {
- res = _PyBytes_Join(_PyIO_empty_bytes, chunks);
- Py_DECREF(data);
- Py_DECREF(chunks);
- return res;
+ tmp = _PyBytes_Join(_PyIO_empty_bytes, chunks);
+ res = tmp;
+ goto cleanup;
}
}
current_size += PyBytes_GET_SIZE(data);
if (self->abs_pos != -1)
self->abs_pos += PyBytes_GET_SIZE(data);
}
+cleanup:
+ /* res is either NULL or a borrowed ref */
+ Py_XINCREF(res);
+ Py_XDECREF(data);
+ Py_XDECREF(tmp);
+ Py_XDECREF(chunks);
+ return res;
}
/* Read n bytes from the buffer if it can, otherwise return None.
@@ -1556,7 +1686,7 @@ error:
}
static PyObject *
-_bufferedreader_peek_unlocked(buffered *self, Py_ssize_t n)
+_bufferedreader_peek_unlocked(buffered *self)
{
Py_ssize_t have, r;
@@ -1598,6 +1728,7 @@ static PyMethodDef bufferedreader_methods[] = {
{"read", (PyCFunction)buffered_read, METH_VARARGS},
{"peek", (PyCFunction)buffered_peek, METH_VARARGS},
{"read1", (PyCFunction)buffered_read1, METH_VARARGS},
+ {"readinto", (PyCFunction)buffered_readinto, METH_VARARGS},
{"readline", (PyCFunction)buffered_readline, METH_VARARGS},
{"seek", (PyCFunction)buffered_seek, METH_VARARGS},
{"tell", (PyCFunction)buffered_tell, METH_NOARGS},
@@ -1663,15 +1794,6 @@ PyTypeObject PyBufferedReader_Type = {
-static int
-complain_about_max_buffer_size(void)
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "max_buffer_size is deprecated", 1) < 0)
- return 0;
- return 1;
-}
-
/*
* class BufferedWriter
*/
@@ -1680,7 +1802,7 @@ PyDoc_STRVAR(bufferedwriter_doc,
"\n"
"The constructor creates a BufferedWriter for the given writeable raw\n"
"stream. If the buffer_size is not given, it defaults to\n"
- "DEFAULT_BUFFER_SIZE. max_buffer_size isn't used anymore.\n"
+ "DEFAULT_BUFFER_SIZE.\n"
);
static void
@@ -1693,23 +1815,18 @@ _bufferedwriter_reset_buf(buffered *self)
static int
bufferedwriter_init(buffered *self, PyObject *args, PyObject *kwds)
{
- /* TODO: properly deprecate max_buffer_size */
- char *kwlist[] = {"raw", "buffer_size", "max_buffer_size", NULL};
+ char *kwlist[] = {"raw", "buffer_size", NULL};
Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
- Py_ssize_t max_buffer_size = -234;
PyObject *raw;
self->ok = 0;
self->detached = 0;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|nn:BufferedWriter", kwlist,
- &raw, &buffer_size, &max_buffer_size)) {
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:BufferedWriter", kwlist,
+ &raw, &buffer_size)) {
return -1;
}
- if (max_buffer_size != -234 && !complain_about_max_buffer_size())
- return -1;
-
if (_PyIOBase_check_writable(raw, Py_True) == NULL)
return -1;
@@ -2091,16 +2208,12 @@ bufferedrwpair_init(rwpair *self, PyObject *args, PyObject *kwds)
{
PyObject *reader, *writer;
Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
- Py_ssize_t max_buffer_size = -234;
- if (!PyArg_ParseTuple(args, "OO|nn:BufferedRWPair", &reader, &writer,
- &buffer_size, &max_buffer_size)) {
+ if (!PyArg_ParseTuple(args, "OO|n:BufferedRWPair", &reader, &writer,
+ &buffer_size)) {
return -1;
}
- if (max_buffer_size != -234 && !complain_about_max_buffer_size())
- return -1;
-
if (_PyIOBase_check_readable(reader, Py_True) == NULL)
return -1;
if (_PyIOBase_check_writable(writer, Py_True) == NULL)
@@ -2148,13 +2261,18 @@ bufferedrwpair_dealloc(rwpair *self)
}
static PyObject *
-_forward_call(buffered *self, const char *name, PyObject *args)
+_forward_call(buffered *self, _Py_Identifier *name, PyObject *args)
{
- PyObject *func = PyObject_GetAttrString((PyObject *)self, name);
- PyObject *ret;
+ PyObject *func, *ret;
+ if (self == NULL) {
+ PyErr_SetString(PyExc_ValueError,
+ "I/O operation on uninitialized object");
+ return NULL;
+ }
+ func = _PyObject_GetAttrId((PyObject *)self, name);
if (func == NULL) {
- PyErr_SetString(PyExc_AttributeError, name);
+ PyErr_SetString(PyExc_AttributeError, name->string);
return NULL;
}
@@ -2166,66 +2284,66 @@ _forward_call(buffered *self, const char *name, PyObject *args)
static PyObject *
bufferedrwpair_read(rwpair *self, PyObject *args)
{
- return _forward_call(self->reader, "read", args);
+ return _forward_call(self->reader, &PyId_read, args);
}
static PyObject *
bufferedrwpair_peek(rwpair *self, PyObject *args)
{
- return _forward_call(self->reader, "peek", args);
+ return _forward_call(self->reader, &PyId_peek, args);
}
static PyObject *
bufferedrwpair_read1(rwpair *self, PyObject *args)
{
- return _forward_call(self->reader, "read1", args);
+ return _forward_call(self->reader, &PyId_read1, args);
}
static PyObject *
bufferedrwpair_readinto(rwpair *self, PyObject *args)
{
- return _forward_call(self->reader, "readinto", args);
+ return _forward_call(self->reader, &PyId_readinto, args);
}
static PyObject *
bufferedrwpair_write(rwpair *self, PyObject *args)
{
- return _forward_call(self->writer, "write", args);
+ return _forward_call(self->writer, &PyId_write, args);
}
static PyObject *
bufferedrwpair_flush(rwpair *self, PyObject *args)
{
- return _forward_call(self->writer, "flush", args);
+ return _forward_call(self->writer, &PyId_flush, args);
}
static PyObject *
bufferedrwpair_readable(rwpair *self, PyObject *args)
{
- return _forward_call(self->reader, "readable", args);
+ return _forward_call(self->reader, &PyId_readable, args);
}
static PyObject *
bufferedrwpair_writable(rwpair *self, PyObject *args)
{
- return _forward_call(self->writer, "writable", args);
+ return _forward_call(self->writer, &PyId_writable, args);
}
static PyObject *
bufferedrwpair_close(rwpair *self, PyObject *args)
{
- PyObject *ret = _forward_call(self->writer, "close", args);
+ PyObject *ret = _forward_call(self->writer, &PyId_close, args);
if (ret == NULL)
return NULL;
Py_DECREF(ret);
- return _forward_call(self->reader, "close", args);
+ return _forward_call(self->reader, &PyId_close, args);
}
static PyObject *
bufferedrwpair_isatty(rwpair *self, PyObject *args)
{
- PyObject *ret = _forward_call(self->writer, "isatty", args);
+ PyObject *ret = _forward_call(self->writer, &PyId_isatty, args);
if (ret != Py_False) {
/* either True or exception */
@@ -2233,7 +2351,7 @@ bufferedrwpair_isatty(rwpair *self, PyObject *args)
}
Py_DECREF(ret);
- return _forward_call(self->reader, "isatty", args);
+ return _forward_call(self->reader, &PyId_isatty, args);
}
static PyObject *
@@ -2325,28 +2443,24 @@ PyDoc_STRVAR(bufferedrandom_doc,
"\n"
"The constructor creates a reader and writer for a seekable stream,\n"
"raw, given in the first argument. If the buffer_size is omitted it\n"
- "defaults to DEFAULT_BUFFER_SIZE. max_buffer_size isn't used anymore.\n"
+ "defaults to DEFAULT_BUFFER_SIZE.\n"
);
static int
bufferedrandom_init(buffered *self, PyObject *args, PyObject *kwds)
{
- char *kwlist[] = {"raw", "buffer_size", "max_buffer_size", NULL};
+ char *kwlist[] = {"raw", "buffer_size", NULL};
Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
- Py_ssize_t max_buffer_size = -234;
PyObject *raw;
self->ok = 0;
self->detached = 0;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|nn:BufferedRandom", kwlist,
- &raw, &buffer_size, &max_buffer_size)) {
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:BufferedRandom", kwlist,
+ &raw, &buffer_size)) {
return -1;
}
- if (max_buffer_size != -234 && !complain_about_max_buffer_size())
- return -1;
-
if (_PyIOBase_check_seekable(raw, Py_True) == NULL)
return -1;
if (_PyIOBase_check_readable(raw, Py_True) == NULL)
diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
index 4164533407..54840bb88a 100644
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -962,13 +962,11 @@ static int
bytesiobuf_getbuffer(bytesiobuf *obj, Py_buffer *view, int flags)
{
int ret;
- void *ptr;
bytesio *b = (bytesio *) obj->source;
if (view == NULL) {
b->exports++;
return 0;
}
- ptr = (void *) obj;
ret = PyBuffer_FillInfo(view, (PyObject*)obj, b->buf, b->string_size,
0, flags);
if (ret >= 0) {
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index ad4a7e6bcd..f3ce776993 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -46,8 +46,10 @@
typedef struct {
PyObject_HEAD
int fd;
+ unsigned int created : 1;
unsigned int readable : 1;
unsigned int writable : 1;
+ unsigned int appending : 1;
signed int seekable : 2; /* -1 means unknown */
unsigned int closefd : 1;
unsigned int deallocating: 1;
@@ -122,6 +124,7 @@ internal_close(fileio *self)
static PyObject *
fileio_close(fileio *self)
{
+ _Py_IDENTIFIER(close);
if (!self->closefd) {
self->fd = -1;
Py_RETURN_NONE;
@@ -137,8 +140,8 @@ fileio_close(fileio *self)
if (errno < 0)
return NULL;
- return PyObject_CallMethod((PyObject*)&PyRawIOBase_Type,
- "close", "O", self);
+ return _PyObject_CallMethodId((PyObject*)&PyRawIOBase_Type,
+ &PyId_close, "O", self);
}
static PyObject *
@@ -151,8 +154,10 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
self = (fileio *) type->tp_alloc(type, 0);
if (self != NULL) {
self->fd = -1;
+ self->created = 0;
self->readable = 0;
self->writable = 0;
+ self->appending = 0;
self->seekable = -1;
self->closefd = 1;
self->weakreflist = NULL;
@@ -168,7 +173,7 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static int
dircheck(fileio* self, PyObject *nameobj)
{
-#if defined(HAVE_FSTAT) && defined(S_IFDIR) && defined(EISDIR)
+#if defined(HAVE_FSTAT) && defined(S_ISDIR) && defined(EISDIR)
struct stat buf;
if (self->fd < 0)
return 0;
@@ -204,16 +209,16 @@ static int
fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
{
fileio *self = (fileio *) oself;
- static char *kwlist[] = {"file", "mode", "closefd", NULL};
+ static char *kwlist[] = {"file", "mode", "closefd", "opener", NULL};
const char *name = NULL;
- PyObject *nameobj, *stringobj = NULL;
+ PyObject *nameobj, *stringobj = NULL, *opener = Py_None;
char *mode = "r";
char *s;
#ifdef MS_WINDOWS
Py_UNICODE *widename = NULL;
#endif
int ret = 0;
- int rwa = 0, plus = 0, append = 0;
+ int rwa = 0, plus = 0;
int flags = 0;
int fd = -1;
int closefd = 1;
@@ -230,8 +235,9 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
self->fd = -1;
}
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|si:fileio",
- kwlist, &nameobj, &mode, &closefd))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|siO:fileio",
+ kwlist, &nameobj, &mode, &closefd,
+ &opener))
return -1;
if (PyFloat_Check(nameobj)) {
@@ -258,9 +264,10 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
PyErr_SetString(PyExc_TypeError, "embedded NUL character");
return -1;
}
- widename = PyUnicode_AS_UNICODE(nameobj);
- }
- if (widename == NULL)
+ widename = PyUnicode_AsUnicode(nameobj);
+ if (widename == NULL)
+ return -1;
+ } else
#endif
if (fd < 0)
{
@@ -273,15 +280,23 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
s = mode;
while (*s) {
switch (*s++) {
- case 'r':
+ case 'x':
if (rwa) {
bad_mode:
PyErr_SetString(PyExc_ValueError,
- "Must have exactly one of read/write/append "
+ "Must have exactly one of create/read/write/append "
"mode and at most one plus");
goto error;
}
rwa = 1;
+ self->created = 1;
+ self->writable = 1;
+ flags |= O_EXCL | O_CREAT;
+ break;
+ case 'r':
+ if (rwa)
+ goto bad_mode;
+ rwa = 1;
self->readable = 1;
break;
case 'w':
@@ -296,8 +311,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
goto bad_mode;
rwa = 1;
self->writable = 1;
- flags |= O_CREAT;
- append = 1;
+ self->appending = 1;
+ flags |= O_APPEND | O_CREAT;
break;
case 'b':
break;
@@ -328,11 +343,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
flags |= O_BINARY;
#endif
-#ifdef O_APPEND
- if (append)
- flags |= O_APPEND;
-#endif
-
if (fd >= 0) {
if (check_fd(fd))
goto error;
@@ -347,20 +357,40 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
goto error;
}
- Py_BEGIN_ALLOW_THREADS
errno = 0;
+ if (opener == Py_None) {
+ Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
- if (widename != NULL)
- self->fd = _wopen(widename, flags, 0666);
- else
+ if (widename != NULL)
+ self->fd = _wopen(widename, flags, 0666);
+ else
#endif
- self->fd = open(name, flags, 0666);
- Py_END_ALLOW_THREADS
+ self->fd = open(name, flags, 0666);
+ Py_END_ALLOW_THREADS
+ } else {
+ PyObject *fdobj = PyObject_CallFunction(
+ opener, "Oi", nameobj, flags);
+ if (fdobj == NULL)
+ goto error;
+ if (!PyLong_Check(fdobj)) {
+ Py_DECREF(fdobj);
+ PyErr_SetString(PyExc_TypeError,
+ "expected integer from opener");
+ goto error;
+ }
+
+ self->fd = _PyLong_AsInt(fdobj);
+ Py_DECREF(fdobj);
+ if (self->fd == -1) {
+ goto error;
+ }
+ }
+
fd_is_own = 1;
if (self->fd < 0) {
#ifdef MS_WINDOWS
if (widename != NULL)
- PyErr_SetFromErrnoWithUnicodeFilename(PyExc_IOError, widename);
+ PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj);
else
#endif
PyErr_SetFromErrnoWithFilename(PyExc_IOError, name);
@@ -378,7 +408,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
if (PyObject_SetAttrString((PyObject *)self, "name", nameobj) < 0)
goto error;
- if (append) {
+ if (self->appending) {
/* For consistent behaviour, we explicitly seek to the
end of file (otherwise, it might be done only on the
first write()). */
@@ -529,36 +559,53 @@ fileio_readinto(fileio *self, PyObject *args)
}
static size_t
-new_buffersize(fileio *self, size_t currentsize)
+new_buffersize(fileio *self, size_t currentsize
+#ifdef HAVE_FSTAT
+ , Py_off_t pos, Py_off_t end
+#endif
+ )
{
+ size_t addend;
#ifdef HAVE_FSTAT
- off_t pos, end;
- struct stat st;
- if (fstat(self->fd, &st) == 0) {
- end = st.st_size;
- pos = lseek(self->fd, 0L, SEEK_CUR);
+ if (end != (Py_off_t)-1) {
/* Files claiming a size smaller than SMALLCHUNK may
actually be streaming pseudo-files. In this case, we
apply the more aggressive algorithm below.
*/
if (end >= SMALLCHUNK && end >= pos && pos >= 0) {
/* Add 1 so if the file were to grow we'd notice. */
- return currentsize + end - pos + 1;
+ Py_off_t bufsize = currentsize + end - pos + 1;
+ if (bufsize < PY_SSIZE_T_MAX)
+ return (size_t)bufsize;
+ else
+ return PY_SSIZE_T_MAX;
}
}
#endif
/* Expand the buffer by an amount proportional to the current size,
- giving us amortized linear-time behavior. Use a less-than-double
- growth factor to avoid excessive allocation. */
- return currentsize + (currentsize >> 3) + 6;
+ giving us amortized linear-time behavior. For bigger sizes, use a
+ less-than-double growth factor to avoid excessive allocation. */
+ if (currentsize > 65536)
+ addend = currentsize >> 3;
+ else
+ addend = 256 + currentsize;
+ if (addend < SMALLCHUNK)
+ /* Avoid tiny read() calls. */
+ addend = SMALLCHUNK;
+ return addend + currentsize;
}
static PyObject *
fileio_readall(fileio *self)
{
+#ifdef HAVE_FSTAT
+ struct stat st;
+ Py_off_t pos, end;
+#endif
PyObject *result;
Py_ssize_t total = 0;
Py_ssize_t n;
+ size_t newsize;
if (self->fd < 0)
return err_closed();
@@ -569,8 +616,23 @@ fileio_readall(fileio *self)
if (result == NULL)
return NULL;
+#ifdef HAVE_FSTAT
+#if defined(MS_WIN64) || defined(MS_WINDOWS)
+ pos = _lseeki64(self->fd, 0L, SEEK_CUR);
+#else
+ pos = lseek(self->fd, 0L, SEEK_CUR);
+#endif
+ if (fstat(self->fd, &st) == 0)
+ end = st.st_size;
+ else
+ end = (Py_off_t)-1;
+#endif
while (1) {
- size_t newsize = new_buffersize(self, total);
+#ifdef HAVE_FSTAT
+ newsize = new_buffersize(self, total, pos, end);
+#else
+ newsize = new_buffersize(self, total);
+#endif
if (newsize > PY_SSIZE_T_MAX || newsize <= 0) {
PyErr_SetString(PyExc_OverflowError,
"unbounded read returned more bytes "
@@ -625,6 +687,9 @@ fileio_readall(fileio *self)
return NULL;
}
total += n;
+#ifdef HAVE_FSTAT
+ pos += n;
+#endif
}
if (PyBytes_GET_SIZE(result) > total) {
@@ -938,7 +1003,19 @@ fileio_truncate(fileio *self, PyObject *args)
static char *
mode_string(fileio *self)
{
- if (self->readable) {
+ if (self->created) {
+ if (self->readable)
+ return "xb+";
+ else
+ return "xb";
+ }
+ if (self->appending) {
+ if (self->readable)
+ return "ab+";
+ else
+ return "ab";
+ }
+ else if (self->readable) {
if (self->writable)
return "rb+";
else
@@ -951,12 +1028,13 @@ mode_string(fileio *self)
static PyObject *
fileio_repr(fileio *self)
{
+ _Py_IDENTIFIER(name);
PyObject *nameobj, *res;
if (self->fd < 0)
return PyUnicode_FromFormat("<_io.FileIO [closed]>");
- nameobj = PyObject_GetAttrString((PyObject *) self, "name");
+ nameobj = _PyObject_GetAttrId((PyObject *) self, &PyId_name);
if (nameobj == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -996,13 +1074,19 @@ fileio_getstate(fileio *self)
PyDoc_STRVAR(fileio_doc,
-"file(name: str[, mode: str]) -> file IO object\n"
+"file(name: str[, mode: str][, opener: None]) -> file IO object\n"
"\n"
-"Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n"
-"writing or appending. The file will be created if it doesn't exist\n"
-"when opened for writing or appending; it will be truncated when\n"
-"opened for writing. Add a '+' to the mode to allow simultaneous\n"
-"reading and writing.");
+"Open a file. The mode can be 'r', 'w', 'x' or 'a' for reading (default),\n"
+"writing, exclusive creation or appending. The file will be created if it\n"
+"doesn't exist when opened for writing or appending; it will be truncated\n"
+"when opened for writing. A `FileExistsError` will be raised if it already\n"
+"exists when opened for creating. Opening a file for creating implies\n"
+"writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode\n"
+"to allow simultaneous reading and writing. A custom opener can be used by\n"
+"passing a callable as *opener*. The underlying file descriptor for the file\n"
+"object is then obtained by calling opener with (*name*, *flags*).\n"
+"*opener* must return an open file descriptor (passing os.open as *opener*\n"
+"results in functionality similar to passing None).");
PyDoc_STRVAR(read_doc,
"read(size: int) -> bytes. read at most size bytes, returned as bytes.\n"
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index ae89797af5..e38473a745 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -59,8 +59,9 @@ PyDoc_STRVAR(iobase_doc,
of the IOBase object rather than the virtual `closed` attribute as returned
by whatever subclass. */
+_Py_IDENTIFIER(__IOBase_closed);
#define IS_CLOSED(self) \
- PyObject_HasAttrString(self, "__IOBase_closed")
+ _PyObject_HasAttrId(self, &PyId___IOBase_closed)
/* Internal methods */
static PyObject *
@@ -97,7 +98,9 @@ PyDoc_STRVAR(iobase_tell_doc,
static PyObject *
iobase_tell(PyObject *self, PyObject *args)
{
- return PyObject_CallMethod(self, "seek", "ii", 0, 1);
+ _Py_IDENTIFIER(seek);
+
+ return _PyObject_CallMethodId(self, &PyId_seek, "ii", 0, 1);
}
PyDoc_STRVAR(iobase_truncate_doc,
@@ -156,19 +159,6 @@ iobase_closed_get(PyObject *self, void *context)
return PyBool_FromLong(IS_CLOSED(self));
}
-static PyObject *
-iobase_get_dict(PyObject *self)
-{
- PyObject **dictptr = _PyObject_GetDictPtr(self);
- PyObject *dict;
- assert(dictptr);
- dict = *dictptr;
- if (dict == NULL)
- dict = *dictptr = PyDict_New();
- Py_XINCREF(dict);
- return dict;
-}
-
PyObject *
_PyIOBase_check_closed(PyObject *self, PyObject *args)
{
@@ -190,12 +180,13 @@ static PyObject *
iobase_close(PyObject *self, PyObject *args)
{
PyObject *res;
+ _Py_IDENTIFIER(__IOBase_closed);
if (IS_CLOSED(self))
Py_RETURN_NONE;
res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
- PyObject_SetAttrString(self, "__IOBase_closed", Py_True);
+ _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
if (res == NULL) {
return NULL;
}
@@ -464,12 +455,14 @@ iobase_readline(PyObject *self, PyObject *args)
int has_peek = 0;
PyObject *buffer, *result;
Py_ssize_t old_size = -1;
+ _Py_IDENTIFIER(read);
+ _Py_IDENTIFIER(peek);
if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) {
return NULL;
}
- if (PyObject_HasAttrString(self, "peek"))
+ if (_PyObject_HasAttrId(self, &PyId_peek))
has_peek = 1;
buffer = PyByteArray_FromStringAndSize(NULL, 0);
@@ -481,7 +474,7 @@ iobase_readline(PyObject *self, PyObject *args)
PyObject *b;
if (has_peek) {
- PyObject *readahead = PyObject_CallMethod(self, "peek", "i", 1);
+ PyObject *readahead = _PyObject_CallMethodId(self, &PyId_peek, "i", 1);
if (readahead == NULL) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
@@ -521,7 +514,7 @@ iobase_readline(PyObject *self, PyObject *args)
Py_DECREF(readahead);
}
- b = PyObject_CallMethod(self, "read", "n", nreadahead);
+ b = _PyObject_CallMethodId(self, &PyId_read, "n", nreadahead);
if (b == NULL) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
@@ -613,7 +606,9 @@ iobase_readlines(PyObject *self, PyObject *args)
/* XXX special-casing this made sense in the Python version in order
to remove the bytecode interpretation overhead, but it could
probably be removed here. */
- PyObject *ret = PyObject_CallMethod(result, "extend", "O", self);
+ _Py_IDENTIFIER(extend);
+ PyObject *ret = _PyObject_CallMethodId(result, &PyId_extend, "O", self);
+
if (ret == NULL) {
Py_DECREF(result);
return NULL;
@@ -719,7 +714,7 @@ static PyMethodDef iobase_methods[] = {
};
static PyGetSetDef iobase_getset[] = {
- {"__dict__", (getter)iobase_get_dict, NULL, NULL},
+ {"__dict__", PyObject_GenericGetDict, NULL, NULL},
{"closed", (getter)iobase_closed_get, NULL, NULL},
{NULL}
};
@@ -796,8 +791,11 @@ rawiobase_read(PyObject *self, PyObject *args)
return NULL;
}
- if (n < 0)
- return PyObject_CallMethod(self, "readall", NULL);
+ if (n < 0) {
+ _Py_IDENTIFIER(readall);
+
+ return _PyObject_CallMethodId(self, &PyId_readall, NULL);
+ }
/* TODO: allocate a bytes object directly instead and manually construct
a writable memoryview pointing to it. */
@@ -838,8 +836,9 @@ rawiobase_readall(PyObject *self, PyObject *args)
return NULL;
while (1) {
- PyObject *data = PyObject_CallMethod(self, "read",
- "i", DEFAULT_BUFFER_SIZE);
+ _Py_IDENTIFIER(read);
+ PyObject *data = _PyObject_CallMethodId(self, &PyId_read,
+ "i", DEFAULT_BUFFER_SIZE);
if (!data) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index 1f1fa40b02..9d73884f73 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -1,19 +1,32 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "structmember.h"
+#include "accu.h"
#include "_iomodule.h"
/* Implementation note: the buffer is always at least one character longer
than the enclosed string, for proper functioning of _PyIO_find_line_ending.
*/
+#define STATE_REALIZED 1
+#define STATE_ACCUMULATING 2
+
typedef struct {
PyObject_HEAD
- Py_UNICODE *buf;
+ Py_UCS4 *buf;
Py_ssize_t pos;
Py_ssize_t string_size;
size_t buf_size;
+ /* The stringio object can be in two states: accumulating or realized.
+ In accumulating state, the internal buffer contains nothing and
+ the contents are given by the embedded _PyAccu structure.
+ In realized state, the internal buffer is meaningful and the
+ _PyAccu is destroyed.
+ */
+ int state;
+ _PyAccu accu;
+
char ok; /* initialized? */
char closed;
char readuniversal;
@@ -21,7 +34,7 @@ typedef struct {
PyObject *decoder;
PyObject *readnl;
PyObject *writenl;
-
+
PyObject *dict;
PyObject *weakreflist;
} stringio;
@@ -40,6 +53,11 @@ typedef struct {
return NULL; \
}
+#define ENSURE_REALIZED(self) \
+ if (realize(self) < 0) { \
+ return NULL; \
+ }
+
PyDoc_STRVAR(stringio_doc,
"Text I/O implementation using an in-memory buffer.\n"
"\n"
@@ -56,7 +74,7 @@ resize_buffer(stringio *self, size_t size)
/* Here, unsigned types are used to avoid dealing with signed integer
overflow, which is undefined in C. */
size_t alloc = self->buf_size;
- Py_UNICODE *new_buf = NULL;
+ Py_UCS4 *new_buf = NULL;
assert(self->buf != NULL);
@@ -84,10 +102,9 @@ resize_buffer(stringio *self, size_t size)
alloc = size + 1;
}
- if (alloc > ((size_t)-1) / sizeof(Py_UNICODE))
+ if (alloc > PY_SIZE_MAX / sizeof(Py_UCS4))
goto overflow;
- new_buf = (Py_UNICODE *)PyMem_Realloc(self->buf,
- alloc * sizeof(Py_UNICODE));
+ new_buf = (Py_UCS4 *)PyMem_Realloc(self->buf, alloc * sizeof(Py_UCS4));
if (new_buf == NULL) {
PyErr_NoMemory();
return -1;
@@ -103,14 +120,62 @@ resize_buffer(stringio *self, size_t size)
return -1;
}
+static PyObject *
+make_intermediate(stringio *self)
+{
+ PyObject *intermediate = _PyAccu_Finish(&self->accu);
+ self->state = STATE_REALIZED;
+ if (intermediate == NULL)
+ return NULL;
+ if (_PyAccu_Init(&self->accu) ||
+ _PyAccu_Accumulate(&self->accu, intermediate)) {
+ Py_DECREF(intermediate);
+ return NULL;
+ }
+ self->state = STATE_ACCUMULATING;
+ return intermediate;
+}
+
+static int
+realize(stringio *self)
+{
+ Py_ssize_t len;
+ PyObject *intermediate;
+
+ if (self->state == STATE_REALIZED)
+ return 0;
+ assert(self->state == STATE_ACCUMULATING);
+ self->state = STATE_REALIZED;
+
+ intermediate = _PyAccu_Finish(&self->accu);
+ if (intermediate == NULL)
+ return -1;
+
+ /* Append the intermediate string to the internal buffer.
+ The length should be equal to the current cursor position.
+ */
+ len = PyUnicode_GET_LENGTH(intermediate);
+ if (resize_buffer(self, len) < 0) {
+ Py_DECREF(intermediate);
+ return -1;
+ }
+ if (!PyUnicode_AsUCS4(intermediate, self->buf, len, 0)) {
+ Py_DECREF(intermediate);
+ return -1;
+ }
+
+ Py_DECREF(intermediate);
+ return 0;
+}
+
/* Internal routine for writing a whole PyUnicode object to the buffer of a
StringIO object. Returns 0 on success, or -1 on error. */
static Py_ssize_t
write_str(stringio *self, PyObject *obj)
{
- Py_UNICODE *str;
Py_ssize_t len;
PyObject *decoded = NULL;
+
assert(self->buf != NULL);
assert(self->pos >= 0);
@@ -132,9 +197,11 @@ write_str(stringio *self, PyObject *obj)
return -1;
assert(PyUnicode_Check(decoded));
- str = PyUnicode_AS_UNICODE(decoded);
- len = PyUnicode_GET_SIZE(decoded);
-
+ if (PyUnicode_READY(decoded)) {
+ Py_DECREF(decoded);
+ return -1;
+ }
+ len = PyUnicode_GET_LENGTH(decoded);
assert(len >= 0);
/* This overflow check is not strictly necessary. However, it avoids us to
@@ -145,6 +212,17 @@ write_str(stringio *self, PyObject *obj)
"new position too large");
goto fail;
}
+
+ if (self->state == STATE_ACCUMULATING) {
+ if (self->string_size == self->pos) {
+ if (_PyAccu_Accumulate(&self->accu, decoded))
+ goto fail;
+ goto success;
+ }
+ if (realize(self))
+ goto fail;
+ }
+
if (self->pos + len > self->string_size) {
if (resize_buffer(self, self->pos + len) < 0)
goto fail;
@@ -161,18 +239,22 @@ write_str(stringio *self, PyObject *obj)
*/
memset(self->buf + self->string_size, '\0',
- (self->pos - self->string_size) * sizeof(Py_UNICODE));
+ (self->pos - self->string_size) * sizeof(Py_UCS4));
}
/* Copy the data to the internal buffer, overwriting some of the
existing data if self->pos < self->string_size. */
- memcpy(self->buf + self->pos, str, len * sizeof(Py_UNICODE));
- self->pos += len;
+ if (!PyUnicode_AsUCS4(decoded,
+ self->buf + self->pos,
+ self->buf_size - self->pos,
+ 0))
+ goto fail;
+success:
/* Set the new length of the internal string if it has changed. */
- if (self->string_size < self->pos) {
+ self->pos += len;
+ if (self->string_size < self->pos)
self->string_size = self->pos;
- }
Py_DECREF(decoded);
return 0;
@@ -190,7 +272,10 @@ stringio_getvalue(stringio *self)
{
CHECK_INITIALIZED(self);
CHECK_CLOSED(self);
- return PyUnicode_FromUnicode(self->buf, self->string_size);
+ if (self->state == STATE_ACCUMULATING)
+ return make_intermediate(self);
+ return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, self->buf,
+ self->string_size);
}
PyDoc_STRVAR(stringio_tell_doc,
@@ -214,7 +299,7 @@ static PyObject *
stringio_read(stringio *self, PyObject *args)
{
Py_ssize_t size, n;
- Py_UNICODE *output;
+ Py_UCS4 *output;
PyObject *arg = Py_None;
CHECK_INITIALIZED(self);
@@ -245,21 +330,29 @@ stringio_read(stringio *self, PyObject *args)
size = 0;
}
+ /* Optimization for seek(0); read() */
+ if (self->state == STATE_ACCUMULATING && self->pos == 0 && size == n) {
+ PyObject *result = make_intermediate(self);
+ self->pos = self->string_size;
+ return result;
+ }
+
+ ENSURE_REALIZED(self);
output = self->buf + self->pos;
self->pos += size;
- return PyUnicode_FromUnicode(output, size);
+ return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, output, size);
}
/* Internal helper, used by stringio_readline and stringio_iternext */
static PyObject *
_stringio_readline(stringio *self, Py_ssize_t limit)
{
- Py_UNICODE *start, *end, old_char;
+ Py_UCS4 *start, *end, old_char;
Py_ssize_t len, consumed;
/* In case of overseek, return the empty string */
if (self->pos >= self->string_size)
- return PyUnicode_FromString("");
+ return PyUnicode_New(0, 0);
start = self->buf + self->pos;
if (limit < 0 || limit > self->string_size - self->pos)
@@ -270,14 +363,14 @@ _stringio_readline(stringio *self, Py_ssize_t limit)
*end = '\0';
len = _PyIO_find_line_ending(
self->readtranslate, self->readuniversal, self->readnl,
- start, end, &consumed);
+ PyUnicode_4BYTE_KIND, (char*)start, (char*)end, &consumed);
*end = old_char;
/* If we haven't found any line ending, we just return everything
(`consumed` is ignored). */
if (len < 0)
len = limit;
self->pos += len;
- return PyUnicode_FromUnicode(start, len);
+ return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, start, len);
}
PyDoc_STRVAR(stringio_readline_doc,
@@ -295,6 +388,7 @@ stringio_readline(stringio *self, PyObject *args)
if (!PyArg_ParseTuple(args, "|O:readline", &arg))
return NULL;
CHECK_CLOSED(self);
+ ENSURE_REALIZED(self);
if (PyNumber_Check(arg)) {
limit = PyNumber_AsSsize_t(arg, PyExc_OverflowError);
@@ -316,6 +410,7 @@ stringio_iternext(stringio *self)
CHECK_INITIALIZED(self);
CHECK_CLOSED(self);
+ ENSURE_REALIZED(self);
if (Py_TYPE(self) == &PyStringIO_Type) {
/* Skip method call overhead for speed */
@@ -337,7 +432,7 @@ stringio_iternext(stringio *self)
if (line == NULL)
return NULL;
- if (PyUnicode_GET_SIZE(line) == 0) {
+ if (PyUnicode_GET_LENGTH(line) == 0) {
/* Reached EOF */
Py_DECREF(line);
return NULL;
@@ -386,6 +481,7 @@ stringio_truncate(stringio *self, PyObject *args)
}
if (size < self->string_size) {
+ ENSURE_REALIZED(self);
if (resize_buffer(self, size) < 0)
return NULL;
self->string_size = size;
@@ -462,8 +558,10 @@ stringio_write(stringio *self, PyObject *obj)
Py_TYPE(obj)->tp_name);
return NULL;
}
+ if (PyUnicode_READY(obj))
+ return NULL;
CHECK_CLOSED(self);
- size = PyUnicode_GET_SIZE(obj);
+ size = PyUnicode_GET_LENGTH(obj);
if (size > 0 && write_str(self, obj) < 0)
return NULL;
@@ -484,6 +582,7 @@ stringio_close(stringio *self)
/* Free up some memory */
if (resize_buffer(self, 0) < 0)
return NULL;
+ _PyAccu_Destroy(&self->accu);
Py_CLEAR(self->readnl);
Py_CLEAR(self->writenl);
Py_CLEAR(self->decoder);
@@ -513,6 +612,7 @@ stringio_dealloc(stringio *self)
PyMem_Free(self->buf);
self->buf = NULL;
}
+ _PyAccu_Destroy(&self->accu);
Py_CLEAR(self->readnl);
Py_CLEAR(self->writenl);
Py_CLEAR(self->decoder);
@@ -535,7 +635,7 @@ stringio_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
/* tp_alloc initializes all the fields to zero. So we don't have to
initialize them here. */
- self->buf = (Py_UNICODE *)PyMem_Malloc(0);
+ self->buf = (Py_UCS4 *)PyMem_Malloc(0);
if (self->buf == NULL) {
Py_DECREF(self);
return PyErr_NoMemory();
@@ -551,6 +651,7 @@ stringio_init(stringio *self, PyObject *args, PyObject *kwds)
PyObject *value = NULL;
PyObject *newline_obj = NULL;
char *newline = "\n";
+ Py_ssize_t value_len;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:__init__", kwlist,
&value, &newline_obj))
@@ -592,6 +693,7 @@ stringio_init(stringio *self, PyObject *args, PyObject *kwds)
self->ok = 0;
+ _PyAccu_Destroy(&self->accu);
Py_CLEAR(self->readnl);
Py_CLEAR(self->writenl);
Py_CLEAR(self->decoder);
@@ -628,19 +730,27 @@ stringio_init(stringio *self, PyObject *args, PyObject *kwds)
/* Now everything is set up, resize buffer to size of initial value,
and copy it */
self->string_size = 0;
- if (value && value != Py_None) {
- Py_ssize_t len = PyUnicode_GetSize(value);
+ if (value && value != Py_None)
+ value_len = PyUnicode_GetLength(value);
+ else
+ value_len = 0;
+ if (value_len > 0) {
/* This is a heuristic, for newline translation might change
the string length. */
- if (resize_buffer(self, len) < 0)
+ if (resize_buffer(self, 0) < 0)
return -1;
+ self->state = STATE_REALIZED;
self->pos = 0;
if (write_str(self, value) < 0)
return -1;
}
else {
+ /* Empty stringio object, we can start by accumulating */
if (resize_buffer(self, 0) < 0)
return -1;
+ if (_PyAccu_Init(&self->accu))
+ return -1;
+ self->state = STATE_ACCUMULATING;
}
self->pos = 0;
@@ -760,11 +870,22 @@ stringio_setstate(stringio *self, PyObject *state)
once by __init__. So we do not take any chance and replace object's
buffer completely. */
{
- Py_UNICODE *buf = PyUnicode_AS_UNICODE(PyTuple_GET_ITEM(state, 0));
- Py_ssize_t bufsize = PyUnicode_GET_SIZE(PyTuple_GET_ITEM(state, 0));
- if (resize_buffer(self, bufsize) < 0)
+ PyObject *item;
+ Py_UCS4 *buf;
+ Py_ssize_t bufsize;
+
+ item = PyTuple_GET_ITEM(state, 0);
+ buf = PyUnicode_AsUCS4Copy(item);
+ if (buf == NULL)
return NULL;
- memcpy(self->buf, buf, bufsize * sizeof(Py_UNICODE));
+ bufsize = PyUnicode_GET_LENGTH(item);
+
+ if (resize_buffer(self, bufsize) < 0) {
+ PyMem_Free(buf);
+ return NULL;
+ }
+ memcpy(self->buf, buf, bufsize * sizeof(Py_UCS4));
+ PyMem_Free(buf);
self->string_size = bufsize;
}
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index a8231bebb6..e8f9984c90 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -11,6 +11,27 @@
#include "structmember.h"
#include "_iomodule.h"
+_Py_IDENTIFIER(close);
+_Py_IDENTIFIER(_dealloc_warn);
+_Py_IDENTIFIER(decode);
+_Py_IDENTIFIER(fileno);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(getpreferredencoding);
+_Py_IDENTIFIER(isatty);
+_Py_IDENTIFIER(mode);
+_Py_IDENTIFIER(name);
+_Py_IDENTIFIER(raw);
+_Py_IDENTIFIER(read);
+_Py_IDENTIFIER(read1);
+_Py_IDENTIFIER(readable);
+_Py_IDENTIFIER(replace);
+_Py_IDENTIFIER(reset);
+_Py_IDENTIFIER(seek);
+_Py_IDENTIFIER(seekable);
+_Py_IDENTIFIER(setstate);
+_Py_IDENTIFIER(tell);
+_Py_IDENTIFIER(writable);
+
/* TextIOBase */
PyDoc_STRVAR(textiobase_doc,
@@ -248,6 +269,10 @@ check_decoded(PyObject *decoded)
Py_DECREF(decoded);
return -1;
}
+ if (PyUnicode_READY(decoded) < 0) {
+ Py_DECREF(decoded);
+ return -1;
+ }
return 0;
}
@@ -257,12 +282,12 @@ check_decoded(PyObject *decoded)
#define SEEN_ALL (SEEN_CR | SEEN_LF | SEEN_CRLF)
PyObject *
-_PyIncrementalNewlineDecoder_decode(PyObject *_self,
+_PyIncrementalNewlineDecoder_decode(PyObject *myself,
PyObject *input, int final)
{
PyObject *output;
Py_ssize_t output_len;
- nldecoder_object *self = (nldecoder_object *) _self;
+ nldecoder_object *self = (nldecoder_object *) myself;
if (self->decoder == NULL) {
PyErr_SetString(PyExc_ValueError,
@@ -283,18 +308,23 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
if (check_decoded(output) < 0)
return NULL;
- output_len = PyUnicode_GET_SIZE(output);
+ output_len = PyUnicode_GET_LENGTH(output);
if (self->pendingcr && (final || output_len > 0)) {
- Py_UNICODE *out;
- PyObject *modified = PyUnicode_FromUnicode(NULL, output_len + 1);
+ /* Prefix output with CR */
+ int kind;
+ PyObject *modified;
+ char *out;
+
+ modified = PyUnicode_New(output_len + 1,
+ PyUnicode_MAX_CHAR_VALUE(output));
if (modified == NULL)
goto error;
- out = PyUnicode_AS_UNICODE(modified);
- out[0] = '\r';
- memcpy(out + 1, PyUnicode_AS_UNICODE(output),
- output_len * sizeof(Py_UNICODE));
+ kind = PyUnicode_KIND(modified);
+ out = PyUnicode_DATA(modified);
+ PyUnicode_WRITE(kind, PyUnicode_DATA(modified), 0, '\r');
+ memcpy(out + kind, PyUnicode_DATA(output), kind * output_len);
Py_DECREF(output);
- output = modified;
+ output = modified; /* output remains ready */
self->pendingcr = 0;
output_len++;
}
@@ -304,21 +334,13 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
*/
if (!final) {
if (output_len > 0
- && PyUnicode_AS_UNICODE(output)[output_len - 1] == '\r') {
-
- if (Py_REFCNT(output) == 1) {
- if (PyUnicode_Resize(&output, output_len - 1) < 0)
- goto error;
- }
- else {
- PyObject *modified = PyUnicode_FromUnicode(
- PyUnicode_AS_UNICODE(output),
- output_len - 1);
- if (modified == NULL)
- goto error;
- Py_DECREF(output);
- output = modified;
- }
+ && PyUnicode_READ_CHAR(output, output_len - 1) == '\r')
+ {
+ PyObject *modified = PyUnicode_Substring(output, 0, output_len -1);
+ if (modified == NULL)
+ goto error;
+ Py_DECREF(output);
+ output = modified;
self->pendingcr = 1;
}
}
@@ -326,13 +348,15 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
/* Record which newlines are read and do newline translation if desired,
all in one pass. */
{
- Py_UNICODE *in_str;
+ void *in_str;
Py_ssize_t len;
int seennl = self->seennl;
int only_lf = 0;
+ int kind;
- in_str = PyUnicode_AS_UNICODE(output);
- len = PyUnicode_GET_SIZE(output);
+ in_str = PyUnicode_DATA(output);
+ len = PyUnicode_GET_LENGTH(output);
+ kind = PyUnicode_KIND(output);
if (len == 0)
return output;
@@ -341,7 +365,7 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
for the \r *byte* with the libc's optimized memchr.
*/
if (seennl == SEEN_LF || seennl == 0) {
- only_lf = (memchr(in_str, '\r', len * sizeof(Py_UNICODE)) == NULL);
+ only_lf = (memchr(in_str, '\r', kind * len) == NULL);
}
if (only_lf) {
@@ -349,51 +373,51 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
(there's nothing else to be done, even when in translation mode)
*/
if (seennl == 0 &&
- memchr(in_str, '\n', len * sizeof(Py_UNICODE)) != NULL) {
- Py_UNICODE *s, *end;
- s = in_str;
- end = in_str + len;
- for (;;) {
- Py_UNICODE c;
- /* Fast loop for non-control characters */
- while (*s > '\n')
- s++;
- c = *s++;
- if (c == '\n') {
- seennl |= SEEN_LF;
- break;
+ memchr(in_str, '\n', kind * len) != NULL) {
+ if (kind == PyUnicode_1BYTE_KIND)
+ seennl |= SEEN_LF;
+ else {
+ Py_ssize_t i = 0;
+ for (;;) {
+ Py_UCS4 c;
+ /* Fast loop for non-control characters */
+ while (PyUnicode_READ(kind, in_str, i) > '\n')
+ i++;
+ c = PyUnicode_READ(kind, in_str, i++);
+ if (c == '\n') {
+ seennl |= SEEN_LF;
+ break;
+ }
+ if (i >= len)
+ break;
}
- if (s > end)
- break;
}
}
/* Finished: we have scanned for newlines, and none of them
need translating */
}
else if (!self->translate) {
- Py_UNICODE *s, *end;
+ Py_ssize_t i = 0;
/* We have already seen all newline types, no need to scan again */
if (seennl == SEEN_ALL)
goto endscan;
- s = in_str;
- end = in_str + len;
for (;;) {
- Py_UNICODE c;
+ Py_UCS4 c;
/* Fast loop for non-control characters */
- while (*s > '\r')
- s++;
- c = *s++;
+ while (PyUnicode_READ(kind, in_str, i) > '\r')
+ i++;
+ c = PyUnicode_READ(kind, in_str, i++);
if (c == '\n')
seennl |= SEEN_LF;
else if (c == '\r') {
- if (*s == '\n') {
+ if (PyUnicode_READ(kind, in_str, i) == '\n') {
seennl |= SEEN_CRLF;
- s++;
+ i++;
}
else
seennl |= SEEN_CR;
}
- if (s > end)
+ if (i >= len)
break;
if (seennl == SEEN_ALL)
break;
@@ -402,61 +426,51 @@ _PyIncrementalNewlineDecoder_decode(PyObject *_self,
;
}
else {
- PyObject *translated = NULL;
- Py_UNICODE *out_str;
- Py_UNICODE *in, *out, *end;
- if (Py_REFCNT(output) != 1) {
- /* We could try to optimize this so that we only do a copy
- when there is something to translate. On the other hand,
- most decoders should only output non-shared strings, i.e.
- translation is done in place. */
- translated = PyUnicode_FromUnicode(NULL, len);
- if (translated == NULL)
- goto error;
- assert(Py_REFCNT(translated) == 1);
- memcpy(PyUnicode_AS_UNICODE(translated),
- PyUnicode_AS_UNICODE(output),
- len * sizeof(Py_UNICODE));
- }
- else {
- translated = output;
+ void *translated;
+ int kind = PyUnicode_KIND(output);
+ void *in_str = PyUnicode_DATA(output);
+ Py_ssize_t in, out;
+ /* XXX: Previous in-place translation here is disabled as
+ resizing is not possible anymore */
+ /* We could try to optimize this so that we only do a copy
+ when there is something to translate. On the other hand,
+ we already know there is a \r byte, so chances are high
+ that something needs to be done. */
+ translated = PyMem_Malloc(kind * len);
+ if (translated == NULL) {
+ PyErr_NoMemory();
+ goto error;
}
- out_str = PyUnicode_AS_UNICODE(translated);
- in = in_str;
- out = out_str;
- end = in_str + len;
+ in = out = 0;
for (;;) {
- Py_UNICODE c;
+ Py_UCS4 c;
/* Fast loop for non-control characters */
- while ((c = *in++) > '\r')
- *out++ = c;
+ while ((c = PyUnicode_READ(kind, in_str, in++)) > '\r')
+ PyUnicode_WRITE(kind, translated, out++, c);
if (c == '\n') {
- *out++ = c;
+ PyUnicode_WRITE(kind, translated, out++, c);
seennl |= SEEN_LF;
continue;
}
if (c == '\r') {
- if (*in == '\n') {
+ if (PyUnicode_READ(kind, in_str, in) == '\n') {
in++;
seennl |= SEEN_CRLF;
}
else
seennl |= SEEN_CR;
- *out++ = '\n';
+ PyUnicode_WRITE(kind, translated, out++, '\n');
continue;
}
- if (in > end)
+ if (in > len)
break;
- *out++ = c;
- }
- if (translated != output) {
- Py_DECREF(output);
- output = translated;
- }
- if (out - out_str != len) {
- if (PyUnicode_Resize(&output, out - out_str) < 0)
- goto error;
+ PyUnicode_WRITE(kind, translated, out++, c);
}
+ Py_DECREF(output);
+ output = PyUnicode_FromKindAndData(kind, translated, out);
+ PyMem_Free(translated);
+ if (!output)
+ return NULL;
}
self->seennl |= seennl;
}
@@ -523,8 +537,8 @@ incrementalnewlinedecoder_setstate(nldecoder_object *self, PyObject *state)
flag >>= 1;
if (self->decoder != Py_None)
- return PyObject_CallMethod(self->decoder,
- "setstate", "((OK))", buffer, flag);
+ return _PyObject_CallMethodId(self->decoder,
+ &PyId_setstate, "((OK))", buffer, flag);
else
Py_RETURN_NONE;
}
@@ -626,10 +640,11 @@ PyDoc_STRVAR(textiowrapper_doc,
"Character and line based layer over a BufferedIOBase object, buffer.\n"
"\n"
"encoding gives the name of the encoding that the stream will be\n"
- "decoded or encoded with. It defaults to locale.getpreferredencoding.\n"
+ "decoded or encoded with. It defaults to locale.getpreferredencoding(False).\n"
"\n"
- "errors determines the strictness of encoding and decoding (see the\n"
- "codecs.register) and defaults to \"strict\".\n"
+ "errors determines the strictness of encoding and decoding (see\n"
+ "help(codecs.Codec) or the documentation for codecs.register) and\n"
+ "defaults to \"strict\".\n"
"\n"
"newline controls how line endings are handled. It can be None, '',\n"
"'\\n', '\\r', and '\\r\\n'. It works as follows:\n"
@@ -696,12 +711,16 @@ typedef struct
PyObject *pending_bytes; /* list of bytes objects waiting to be
written, or NULL */
Py_ssize_t pending_bytes_count;
- PyObject *snapshot;
+
/* snapshot is either None, or a tuple (dec_flags, next_input) where
* dec_flags is the second (integer) item of the decoder state and
* next_input is the chunk of input bytes that comes next after the
* snapshot point. We use this to reconstruct decoder states in tell().
*/
+ PyObject *snapshot;
+ /* Bytes-to-characters ratio for the current chunk. Serves as input for
+ the heuristic in tell(). */
+ double b2cratio;
/* Cache raw object if it's a FileIO object */
PyObject *raw;
@@ -717,25 +736,21 @@ typedef struct
static PyObject *
ascii_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeASCII(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors));
+ return _PyUnicode_AsASCIIString(text, PyBytes_AS_STRING(self->errors));
}
static PyObject *
utf16be_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), 1);
+ return _PyUnicode_EncodeUTF16(text,
+ PyBytes_AS_STRING(self->errors), 1);
}
static PyObject *
utf16le_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), -1);
+ return _PyUnicode_EncodeUTF16(text,
+ PyBytes_AS_STRING(self->errors), -1);
}
static PyObject *
@@ -749,25 +764,22 @@ utf16_encode(textio *self, PyObject *text)
return utf16le_encode(self, text);
#endif
}
- return PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), 0);
+ return _PyUnicode_EncodeUTF16(text,
+ PyBytes_AS_STRING(self->errors), 0);
}
static PyObject *
utf32be_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), 1);
+ return _PyUnicode_EncodeUTF32(text,
+ PyBytes_AS_STRING(self->errors), 1);
}
static PyObject *
utf32le_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), -1);
+ return _PyUnicode_EncodeUTF32(text,
+ PyBytes_AS_STRING(self->errors), -1);
}
static PyObject *
@@ -781,25 +793,20 @@ utf32_encode(textio *self, PyObject *text)
return utf32le_encode(self, text);
#endif
}
- return PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors), 0);
+ return _PyUnicode_EncodeUTF32(text,
+ PyBytes_AS_STRING(self->errors), 0);
}
static PyObject *
utf8_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors));
+ return _PyUnicode_AsUTF8String(text, PyBytes_AS_STRING(self->errors));
}
static PyObject *
latin1_encode(textio *self, PyObject *text)
{
- return PyUnicode_EncodeLatin1(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text),
- PyBytes_AS_STRING(self->errors));
+ return _PyUnicode_AsLatin1String(text, PyBytes_AS_STRING(self->errors));
}
/* Map normalized encoding names onto the specialized encoding funcs */
@@ -829,7 +836,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
char *kwlist[] = {"buffer", "encoding", "errors",
"newline", "line_buffering", "write_through",
NULL};
- PyObject *buffer, *raw;
+ PyObject *buffer, *raw, *codec_info = NULL;
char *encoding = NULL;
char *errors = NULL;
char *newline = NULL;
@@ -868,11 +875,12 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
self->decoded_chars_used = 0;
self->pending_bytes_count = 0;
self->encodefunc = NULL;
+ self->b2cratio = 0.0;
if (encoding == NULL) {
/* Try os.device_encoding(fileno) */
PyObject *fileno;
- fileno = PyObject_CallMethod(buffer, "fileno", NULL);
+ fileno = _PyObject_CallMethodId(buffer, &PyId_fileno, NULL);
/* Ignore only AttributeError and UnsupportedOperation */
if (fileno == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError) ||
@@ -884,9 +892,13 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
}
}
else {
- self->encoding = PyObject_CallMethod(state->os_module,
- "device_encoding",
- "N", fileno);
+ int fd = _PyLong_AsInt(fileno);
+ Py_DECREF(fileno);
+ if (fd == -1 && PyErr_Occurred()) {
+ goto error;
+ }
+
+ self->encoding = _Py_device_encoding(fd);
if (self->encoding == NULL)
goto error;
else if (!PyUnicode_Check(self->encoding))
@@ -903,8 +915,8 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
}
else {
use_locale:
- self->encoding = PyObject_CallMethod(
- state->locale_module, "getpreferredencoding", NULL);
+ self->encoding = _PyObject_CallMethodId(
+ state->locale_module, &PyId_getpreferredencoding, "O", Py_False);
if (self->encoding == NULL) {
catch_ImportError:
/*
@@ -939,6 +951,17 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
"could not determine default encoding");
}
+ /* Check we have been asked for a real text encoding */
+ codec_info = _PyCodec_LookupTextEncoding(encoding, "codecs.open()");
+ if (codec_info == NULL) {
+ Py_CLEAR(self->encoding);
+ goto error;
+ }
+
+ /* XXX: Failures beyond this point have the potential to leak elements
+ * of the partially constructed object (like self->encoding)
+ */
+
if (errors == NULL)
errors = "strict";
self->errors = PyBytes_FromString(errors);
@@ -953,7 +976,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
if (newline) {
self->readnl = PyUnicode_FromString(newline);
if (self->readnl == NULL)
- return -1;
+ goto error;
}
self->writetranslate = (newline == NULL || newline[0] != '\0');
if (!self->readuniversal && self->readnl) {
@@ -969,7 +992,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
#endif
/* Build the decoder object */
- res = PyObject_CallMethod(buffer, "readable", NULL);
+ res = _PyObject_CallMethodId(buffer, &PyId_readable, NULL);
if (res == NULL)
goto error;
r = PyObject_IsTrue(res);
@@ -977,8 +1000,8 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
if (r == -1)
goto error;
if (r == 1) {
- self->decoder = PyCodec_IncrementalDecoder(
- encoding, errors);
+ self->decoder = _PyCodecInfo_GetIncrementalDecoder(codec_info,
+ errors);
if (self->decoder == NULL)
goto error;
@@ -994,7 +1017,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
}
/* Build the encoder object */
- res = PyObject_CallMethod(buffer, "writable", NULL);
+ res = _PyObject_CallMethodId(buffer, &PyId_writable, NULL);
if (res == NULL)
goto error;
r = PyObject_IsTrue(res);
@@ -1002,17 +1025,12 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
if (r == -1)
goto error;
if (r == 1) {
- PyObject *ci;
- self->encoder = PyCodec_IncrementalEncoder(
- encoding, errors);
+ self->encoder = _PyCodecInfo_GetIncrementalEncoder(codec_info,
+ errors);
if (self->encoder == NULL)
goto error;
/* Get the normalized named of the codec */
- ci = _PyCodec_Lookup(encoding);
- if (ci == NULL)
- goto error;
- res = PyObject_GetAttrString(ci, "name");
- Py_DECREF(ci);
+ res = _PyObject_GetAttrId(codec_info, &PyId_name);
if (res == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -1032,13 +1050,16 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
Py_XDECREF(res);
}
+ /* Finished sorting out the codec details */
+ Py_DECREF(codec_info);
+
self->buffer = buffer;
Py_INCREF(buffer);
if (Py_TYPE(buffer) == &PyBufferedReader_Type ||
Py_TYPE(buffer) == &PyBufferedWriter_Type ||
Py_TYPE(buffer) == &PyBufferedRandom_Type) {
- raw = PyObject_GetAttrString(buffer, "raw");
+ raw = _PyObject_GetAttrId(buffer, &PyId_raw);
/* Cache the raw FileIO object to speed up 'closed' checks */
if (raw == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
@@ -1052,7 +1073,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
Py_DECREF(raw);
}
- res = PyObject_CallMethod(buffer, "seekable", NULL);
+ res = _PyObject_CallMethodId(buffer, &PyId_seekable, NULL);
if (res == NULL)
goto error;
r = PyObject_IsTrue(res);
@@ -1061,7 +1082,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
goto error;
self->seekable = self->telling = r;
- self->has_read1 = PyObject_HasAttrString(buffer, "read1");
+ self->has_read1 = _PyObject_HasAttrId(buffer, &PyId_read1);
self->encoding_start_of_stream = 0;
if (self->seekable && self->encoder) {
@@ -1094,6 +1115,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
return 0;
error:
+ Py_XDECREF(codec_info);
return -1;
}
@@ -1227,18 +1249,6 @@ textiowrapper_detach(textio *self)
return buffer;
}
-Py_LOCAL_INLINE(const Py_UNICODE *)
-findchar(const Py_UNICODE *s, Py_ssize_t size, Py_UNICODE ch)
-{
- /* like wcschr, but doesn't stop at NULL characters */
- while (size-- > 0) {
- if (*s == ch)
- return s;
- s++;
- }
- return NULL;
-}
-
/* Flush the internal write buffer. This doesn't explicitly flush the
underlying buffered object, though. */
static int
@@ -1286,6 +1296,9 @@ textiowrapper_write(textio *self, PyObject *args)
return NULL;
}
+ if (PyUnicode_READY(text) == -1)
+ return NULL;
+
CHECK_CLOSED(self);
if (self->encoder == NULL)
@@ -1293,16 +1306,15 @@ textiowrapper_write(textio *self, PyObject *args)
Py_INCREF(text);
- textlen = PyUnicode_GetSize(text);
+ textlen = PyUnicode_GET_LENGTH(text);
if ((self->writetranslate && self->writenl != NULL) || self->line_buffering)
- if (findchar(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text), '\n'))
+ if (PyUnicode_FindChar(text, '\n', 0, PyUnicode_GET_LENGTH(text), 1) != -1)
haslf = 1;
if (haslf && self->writetranslate && self->writenl != NULL) {
- PyObject *newtext = PyObject_CallMethod(
- text, "replace", "ss", "\n", self->writenl);
+ PyObject *newtext = _PyObject_CallMethodId(
+ text, &PyId_replace, "ss", "\n", self->writenl);
Py_DECREF(text);
if (newtext == NULL)
return NULL;
@@ -1313,8 +1325,7 @@ textiowrapper_write(textio *self, PyObject *args)
needflush = 1;
else if (self->line_buffering &&
(haslf ||
- findchar(PyUnicode_AS_UNICODE(text),
- PyUnicode_GET_SIZE(text), '\r')))
+ PyUnicode_FindChar(text, '\r', 0, PyUnicode_GET_LENGTH(text), 1) != -1))
needflush = 1;
/* XXX What if we were just reading? */
@@ -1358,7 +1369,7 @@ textiowrapper_write(textio *self, PyObject *args)
Py_CLEAR(self->snapshot);
if (self->decoder) {
- ret = PyObject_CallMethod(self->decoder, "reset", NULL);
+ ret = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL);
if (ret == NULL)
return NULL;
Py_DECREF(ret);
@@ -1386,7 +1397,8 @@ textiowrapper_get_decoded_chars(textio *self, Py_ssize_t n)
if (self->decoded_chars == NULL)
return PyUnicode_FromStringAndSize(NULL, 0);
- avail = (PyUnicode_GET_SIZE(self->decoded_chars)
+ /* decoded_chars is guaranteed to be "ready". */
+ avail = (PyUnicode_GET_LENGTH(self->decoded_chars)
- self->decoded_chars_used);
assert(avail >= 0);
@@ -1395,9 +1407,9 @@ textiowrapper_get_decoded_chars(textio *self, Py_ssize_t n)
n = avail;
if (self->decoded_chars_used > 0 || n < avail) {
- chars = PyUnicode_FromUnicode(
- PyUnicode_AS_UNICODE(self->decoded_chars)
- + self->decoded_chars_used, n);
+ chars = PyUnicode_Substring(self->decoded_chars,
+ self->decoded_chars_used,
+ self->decoded_chars_used + n);
if (chars == NULL)
return NULL;
}
@@ -1413,12 +1425,13 @@ textiowrapper_get_decoded_chars(textio *self, Py_ssize_t n)
/* Read and decode the next chunk of data from the BufferedReader.
*/
static int
-textiowrapper_read_chunk(textio *self)
+textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint)
{
PyObject *dec_buffer = NULL;
PyObject *dec_flags = NULL;
PyObject *input_chunk = NULL;
PyObject *decoded_chars, *chunk_size;
+ Py_ssize_t nbytes, nchars;
int eof;
/* The return value is True unless EOF was reached. The decoded string is
@@ -1454,7 +1467,10 @@ textiowrapper_read_chunk(textio *self)
}
/* Read a chunk, decode it, and put the result in self._decoded_chars. */
- chunk_size = PyLong_FromSsize_t(self->chunk_size);
+ if (size_hint > 0) {
+ size_hint = (Py_ssize_t)(Py_MAX(self->b2cratio, 1.0) * size_hint);
+ }
+ chunk_size = PyLong_FromSsize_t(Py_MAX(self->chunk_size, size_hint));
if (chunk_size == NULL)
goto fail;
input_chunk = PyObject_CallMethodObjArgs(self->buffer,
@@ -1471,7 +1487,8 @@ textiowrapper_read_chunk(textio *self)
goto fail;
}
- eof = (PyBytes_Size(input_chunk) == 0);
+ nbytes = PyBytes_Size(input_chunk);
+ eof = (nbytes == 0);
if (Py_TYPE(self->decoder) == &PyIncrementalNewlineDecoder_Type) {
decoded_chars = _PyIncrementalNewlineDecoder_decode(
@@ -1485,7 +1502,12 @@ textiowrapper_read_chunk(textio *self)
if (check_decoded(decoded_chars) < 0)
goto fail;
textiowrapper_set_decoded_chars(self, decoded_chars);
- if (PyUnicode_GET_SIZE(decoded_chars) > 0)
+ nchars = PyUnicode_GET_LENGTH(decoded_chars);
+ if (nchars > 0)
+ self->b2cratio = (double) nbytes / nchars;
+ else
+ self->b2cratio = 0.0;
+ if (nchars > 0)
eof = 0;
if (self->telling) {
@@ -1539,12 +1561,17 @@ textiowrapper_read(textio *self, PyObject *args)
if (n < 0) {
/* Read everything */
- PyObject *bytes = PyObject_CallMethod(self->buffer, "read", NULL);
+ PyObject *bytes = _PyObject_CallMethodId(self->buffer, &PyId_read, NULL);
PyObject *decoded;
if (bytes == NULL)
goto fail;
- decoded = PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_decode,
- bytes, Py_True, NULL);
+
+ if (Py_TYPE(self->decoder) == &PyIncrementalNewlineDecoder_Type)
+ decoded = _PyIncrementalNewlineDecoder_decode(self->decoder,
+ bytes, 1);
+ else
+ decoded = PyObject_CallMethodObjArgs(
+ self->decoder, _PyIO_str_decode, bytes, Py_True, NULL);
Py_DECREF(bytes);
if (check_decoded(decoded) < 0)
goto fail;
@@ -1570,11 +1597,13 @@ textiowrapper_read(textio *self, PyObject *args)
result = textiowrapper_get_decoded_chars(self, n);
if (result == NULL)
goto fail;
- remaining -= PyUnicode_GET_SIZE(result);
+ if (PyUnicode_READY(result) == -1)
+ goto fail;
+ remaining -= PyUnicode_GET_LENGTH(result);
/* Keep reading chunks until we have n characters to return */
while (remaining > 0) {
- res = textiowrapper_read_chunk(self);
+ res = textiowrapper_read_chunk(self, remaining);
if (res < 0) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
@@ -1590,13 +1619,14 @@ textiowrapper_read(textio *self, PyObject *args)
if (chunks == NULL)
goto fail;
}
- if (PyList_Append(chunks, result) < 0)
+ if (PyUnicode_GET_LENGTH(result) > 0 &&
+ PyList_Append(chunks, result) < 0)
goto fail;
Py_DECREF(result);
result = textiowrapper_get_decoded_chars(self, remaining);
if (result == NULL)
goto fail;
- remaining -= PyUnicode_GET_SIZE(result);
+ remaining -= PyUnicode_GET_LENGTH(result);
}
if (chunks != NULL) {
if (result != NULL && PyList_Append(chunks, result) < 0)
@@ -1616,36 +1646,39 @@ textiowrapper_read(textio *self, PyObject *args)
}
-/* NOTE: `end` must point to the real end of the Py_UNICODE storage,
+/* NOTE: `end` must point to the real end of the Py_UCS4 storage,
that is to the NUL character. Otherwise the function will produce
incorrect results. */
-static Py_UNICODE *
-find_control_char(Py_UNICODE *start, Py_UNICODE *end, Py_UNICODE ch)
+static char *
+find_control_char(int kind, char *s, char *end, Py_UCS4 ch)
{
- Py_UNICODE *s = start;
+ if (kind == PyUnicode_1BYTE_KIND) {
+ assert(ch < 256);
+ return (char *) memchr((void *) s, (char) ch, end - s);
+ }
for (;;) {
- while (*s > ch)
- s++;
- if (*s == ch)
+ while (PyUnicode_READ(kind, s, 0) > ch)
+ s += kind;
+ if (PyUnicode_READ(kind, s, 0) == ch)
return s;
if (s == end)
return NULL;
- s++;
+ s += kind;
}
}
Py_ssize_t
_PyIO_find_line_ending(
int translated, int universal, PyObject *readnl,
- Py_UNICODE *start, Py_UNICODE *end, Py_ssize_t *consumed)
+ int kind, char *start, char *end, Py_ssize_t *consumed)
{
- Py_ssize_t len = end - start;
+ Py_ssize_t len = ((char*)end - (char*)start)/kind;
if (translated) {
/* Newlines are already translated, only search for \n */
- Py_UNICODE *pos = find_control_char(start, end, '\n');
+ char *pos = find_control_char(kind, start, end, '\n');
if (pos != NULL)
- return pos - start + 1;
+ return (pos - start)/kind + 1;
else {
*consumed = len;
return -1;
@@ -1655,63 +1688,66 @@ _PyIO_find_line_ending(
/* Universal newline search. Find any of \r, \r\n, \n
* The decoder ensures that \r\n are not split in two pieces
*/
- Py_UNICODE *s = start;
+ char *s = start;
for (;;) {
- Py_UNICODE ch;
+ Py_UCS4 ch;
/* Fast path for non-control chars. The loop always ends
- since the Py_UNICODE storage is NUL-terminated. */
- while (*s > '\r')
- s++;
+ since the Unicode string is NUL-terminated. */
+ while (PyUnicode_READ(kind, s, 0) > '\r')
+ s += kind;
if (s >= end) {
*consumed = len;
return -1;
}
- ch = *s++;
+ ch = PyUnicode_READ(kind, s, 0);
+ s += kind;
if (ch == '\n')
- return s - start;
+ return (s - start)/kind;
if (ch == '\r') {
- if (*s == '\n')
- return s - start + 1;
+ if (PyUnicode_READ(kind, s, 0) == '\n')
+ return (s - start)/kind + 1;
else
- return s - start;
+ return (s - start)/kind;
}
}
}
else {
/* Non-universal mode. */
- Py_ssize_t readnl_len = PyUnicode_GET_SIZE(readnl);
- Py_UNICODE *nl = PyUnicode_AS_UNICODE(readnl);
+ Py_ssize_t readnl_len = PyUnicode_GET_LENGTH(readnl);
+ char *nl = PyUnicode_DATA(readnl);
+ /* Assume that readnl is an ASCII character. */
+ assert(PyUnicode_KIND(readnl) == PyUnicode_1BYTE_KIND);
if (readnl_len == 1) {
- Py_UNICODE *pos = find_control_char(start, end, nl[0]);
+ char *pos = find_control_char(kind, start, end, nl[0]);
if (pos != NULL)
- return pos - start + 1;
+ return (pos - start)/kind + 1;
*consumed = len;
return -1;
}
else {
- Py_UNICODE *s = start;
- Py_UNICODE *e = end - readnl_len + 1;
- Py_UNICODE *pos;
+ char *s = start;
+ char *e = end - (readnl_len - 1)*kind;
+ char *pos;
if (e < s)
e = s;
while (s < e) {
Py_ssize_t i;
- Py_UNICODE *pos = find_control_char(s, end, nl[0]);
+ char *pos = find_control_char(kind, s, end, nl[0]);
if (pos == NULL || pos >= e)
break;
for (i = 1; i < readnl_len; i++) {
- if (pos[i] != nl[i])
+ if (PyUnicode_READ(kind, pos, i) != nl[i])
break;
}
if (i == readnl_len)
- return pos - start + readnl_len;
- s = pos + 1;
+ return (pos - start)/kind + readnl_len;
+ s = pos + kind;
}
- pos = find_control_char(e, end, nl[0]);
+ pos = find_control_char(kind, e, end, nl[0]);
if (pos == NULL)
*consumed = len;
else
- *consumed = pos - start;
+ *consumed = (pos - start)/kind;
return -1;
}
}
@@ -1732,15 +1768,16 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit)
chunked = 0;
while (1) {
- Py_UNICODE *ptr;
+ char *ptr;
Py_ssize_t line_len;
+ int kind;
Py_ssize_t consumed = 0;
/* First, get some data if necessary */
res = 1;
while (!self->decoded_chars ||
- !PyUnicode_GET_SIZE(self->decoded_chars)) {
- res = textiowrapper_read_chunk(self);
+ !PyUnicode_GET_LENGTH(self->decoded_chars)) {
+ res = textiowrapper_read_chunk(self, 0);
if (res < 0) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
@@ -1770,18 +1807,24 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit)
assert(self->decoded_chars_used == 0);
line = PyUnicode_Concat(remaining, self->decoded_chars);
start = 0;
- offset_to_buffer = PyUnicode_GET_SIZE(remaining);
+ offset_to_buffer = PyUnicode_GET_LENGTH(remaining);
Py_CLEAR(remaining);
if (line == NULL)
goto error;
+ if (PyUnicode_READY(line) == -1)
+ goto error;
}
- ptr = PyUnicode_AS_UNICODE(line);
- line_len = PyUnicode_GET_SIZE(line);
+ ptr = PyUnicode_DATA(line);
+ line_len = PyUnicode_GET_LENGTH(line);
+ kind = PyUnicode_KIND(line);
endpos = _PyIO_find_line_ending(
self->readtranslate, self->readuniversal, self->readnl,
- ptr + start, ptr + line_len, &consumed);
+ kind,
+ ptr + kind * start,
+ ptr + kind * line_len,
+ &consumed);
if (endpos >= 0) {
endpos += start;
if (limit >= 0 && (endpos - start) + chunked >= limit)
@@ -1805,21 +1848,20 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit)
if (chunks == NULL)
goto error;
}
- s = PyUnicode_FromUnicode(ptr + start, endpos - start);
+ s = PyUnicode_Substring(line, start, endpos);
if (s == NULL)
goto error;
if (PyList_Append(chunks, s) < 0) {
Py_DECREF(s);
goto error;
}
- chunked += PyUnicode_GET_SIZE(s);
+ chunked += PyUnicode_GET_LENGTH(s);
Py_DECREF(s);
}
/* There may be some remaining bytes we'll have to prepend to the
next chunk of data */
if (endpos < line_len) {
- remaining = PyUnicode_FromUnicode(
- ptr + endpos, line_len - endpos);
+ remaining = PyUnicode_Substring(line, endpos, line_len);
if (remaining == NULL)
goto error;
}
@@ -1831,19 +1873,12 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit)
if (line != NULL) {
/* Our line ends in the current buffer */
self->decoded_chars_used = endpos - offset_to_buffer;
- if (start > 0 || endpos < PyUnicode_GET_SIZE(line)) {
- if (start == 0 && Py_REFCNT(line) == 1) {
- if (PyUnicode_Resize(&line, endpos) < 0)
- goto error;
- }
- else {
- PyObject *s = PyUnicode_FromUnicode(
- PyUnicode_AS_UNICODE(line) + start, endpos - start);
- Py_CLEAR(line);
- if (s == NULL)
- goto error;
- line = s;
- }
+ if (start > 0 || endpos < PyUnicode_GET_LENGTH(line)) {
+ PyObject *s = PyUnicode_Substring(line, start, endpos);
+ Py_CLEAR(line);
+ if (s == NULL)
+ goto error;
+ line = s;
}
}
if (remaining != NULL) {
@@ -1857,16 +1892,20 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit)
Py_CLEAR(remaining);
}
if (chunks != NULL) {
- if (line != NULL && PyList_Append(chunks, line) < 0)
- goto error;
- Py_CLEAR(line);
+ if (line != NULL) {
+ if (PyList_Append(chunks, line) < 0)
+ goto error;
+ Py_DECREF(line);
+ }
line = PyUnicode_Join(_PyIO_empty_str, chunks);
if (line == NULL)
goto error;
- Py_DECREF(chunks);
+ Py_CLEAR(chunks);
+ }
+ if (line == NULL) {
+ Py_INCREF(_PyIO_empty_str);
+ line = _PyIO_empty_str;
}
- if (line == NULL)
- line = PyUnicode_FromStringAndSize(NULL, 0);
return line;
@@ -1989,8 +2028,8 @@ _textiowrapper_decoder_setstate(textio *self, cookie_type *cookie)
if (cookie->start_pos == 0 && cookie->dec_flags == 0)
res = PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_reset, NULL);
else
- res = PyObject_CallMethod(self->decoder, "setstate",
- "((yi))", "", cookie->dec_flags);
+ res = _PyObject_CallMethodId(self->decoder, &PyId_setstate,
+ "((yi))", "", cookie->dec_flags);
if (res == NULL)
return -1;
Py_DECREF(res);
@@ -2054,13 +2093,12 @@ textiowrapper_seek(textio *self, PyObject *args)
* sync the underlying buffer with the current position.
*/
Py_DECREF(cookieObj);
- cookieObj = PyObject_CallMethod((PyObject *)self, "tell", NULL);
+ cookieObj = _PyObject_CallMethodId((PyObject *)self, &PyId_tell, NULL);
if (cookieObj == NULL)
goto fail;
}
else if (whence == 2) {
/* seek relative to end of file */
-
cmp = PyObject_RichCompareBool(cookieObj, _PyIO_zero, Py_EQ);
if (cmp < 0)
goto fail;
@@ -2070,7 +2108,7 @@ textiowrapper_seek(textio *self, PyObject *args)
goto fail;
}
- res = PyObject_CallMethod((PyObject *)self, "flush", NULL);
+ res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
if (res == NULL)
goto fail;
Py_DECREF(res);
@@ -2078,13 +2116,13 @@ textiowrapper_seek(textio *self, PyObject *args)
textiowrapper_set_decoded_chars(self, NULL);
Py_CLEAR(self->snapshot);
if (self->decoder) {
- res = PyObject_CallMethod(self->decoder, "reset", NULL);
+ res = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL);
if (res == NULL)
goto fail;
Py_DECREF(res);
}
- res = PyObject_CallMethod(self->buffer, "seek", "ii", 0, 2);
+ res = _PyObject_CallMethodId(self->buffer, &PyId_seek, "ii", 0, 2);
Py_XDECREF(cookieObj);
return res;
}
@@ -2137,8 +2175,8 @@ textiowrapper_seek(textio *self, PyObject *args)
if (cookie.chars_to_skip) {
/* Just like _read_chunk, feed the decoder and save a snapshot. */
- PyObject *input_chunk = PyObject_CallMethod(
- self->buffer, "read", "i", cookie.bytes_to_feed);
+ PyObject *input_chunk = _PyObject_CallMethodId(
+ self->buffer, &PyId_read, "i", cookie.bytes_to_feed);
PyObject *decoded;
if (input_chunk == NULL)
@@ -2159,8 +2197,8 @@ textiowrapper_seek(textio *self, PyObject *args)
goto fail;
}
- decoded = PyObject_CallMethod(self->decoder, "decode",
- "Oi", input_chunk, (int)cookie.need_eof);
+ decoded = _PyObject_CallMethodId(self->decoder, &PyId_decode,
+ "Oi", input_chunk, (int)cookie.need_eof);
if (check_decoded(decoded) < 0)
goto fail;
@@ -2168,7 +2206,7 @@ textiowrapper_seek(textio *self, PyObject *args)
textiowrapper_set_decoded_chars(self, decoded);
/* Skip chars_to_skip of the decoded characters. */
- if (PyUnicode_GetSize(self->decoded_chars) < cookie.chars_to_skip) {
+ if (PyUnicode_GetLength(self->decoded_chars) < cookie.chars_to_skip) {
PyErr_SetString(PyExc_IOError, "can't restore logical file position");
goto fail;
}
@@ -2200,8 +2238,12 @@ textiowrapper_tell(textio *self, PyObject *args)
cookie_type cookie = {0,0,0,0,0};
PyObject *next_input;
Py_ssize_t chars_to_skip, chars_decoded;
+ Py_ssize_t skip_bytes, skip_back;
PyObject *saved_state = NULL;
char *input, *input_end;
+ char *dec_buffer;
+ Py_ssize_t dec_buffer_len;
+ int dec_flags;
CHECK_INITIALIZED(self);
CHECK_CLOSED(self);
@@ -2218,17 +2260,17 @@ textiowrapper_tell(textio *self, PyObject *args)
if (_textiowrapper_writeflush(self) < 0)
return NULL;
- res = PyObject_CallMethod((PyObject *)self, "flush", NULL);
+ res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
if (res == NULL)
goto fail;
Py_DECREF(res);
- posobj = PyObject_CallMethod(self->buffer, "tell", NULL);
+ posobj = _PyObject_CallMethodId(self->buffer, &PyId_tell, NULL);
if (posobj == NULL)
goto fail;
if (self->decoder == NULL || self->snapshot == NULL) {
- assert (self->decoded_chars == NULL || PyUnicode_GetSize(self->decoded_chars) == 0);
+ assert (self->decoded_chars == NULL || PyUnicode_GetLength(self->decoded_chars) == 0);
return posobj;
}
@@ -2237,6 +2279,7 @@ textiowrapper_tell(textio *self, PyObject *args)
#else
cookie.start_pos = PyLong_AsLong(posobj);
#endif
+ Py_DECREF(posobj);
if (PyErr_Occurred())
goto fail;
@@ -2251,56 +2294,97 @@ textiowrapper_tell(textio *self, PyObject *args)
/* How many decoded characters have been used up since the snapshot? */
if (self->decoded_chars_used == 0) {
/* We haven't moved from the snapshot point. */
- Py_DECREF(posobj);
return textiowrapper_build_cookie(&cookie);
}
chars_to_skip = self->decoded_chars_used;
- /* Starting from the snapshot position, we will walk the decoder
- * forward until it gives us enough decoded characters.
- */
+ /* Decoder state will be restored at the end */
saved_state = PyObject_CallMethodObjArgs(self->decoder,
_PyIO_str_getstate, NULL);
if (saved_state == NULL)
goto fail;
- /* Note our initial start point. */
- if (_textiowrapper_decoder_setstate(self, &cookie) < 0)
- goto fail;
+#define DECODER_GETSTATE() do { \
+ PyObject *_state = PyObject_CallMethodObjArgs(self->decoder, \
+ _PyIO_str_getstate, NULL); \
+ if (_state == NULL) \
+ goto fail; \
+ if (!PyArg_Parse(_state, "(y#i)", &dec_buffer, &dec_buffer_len, &dec_flags)) { \
+ Py_DECREF(_state); \
+ goto fail; \
+ } \
+ Py_DECREF(_state); \
+ } while (0)
- /* Feed the decoder one byte at a time. As we go, note the
- * nearest "safe start point" before the current location
- * (a point where the decoder has nothing buffered, so seek()
+#define DECODER_DECODE(start, len, res) do { \
+ PyObject *_decoded = _PyObject_CallMethodId( \
+ self->decoder, &PyId_decode, "y#", start, len); \
+ if (check_decoded(_decoded) < 0) \
+ goto fail; \
+ res = PyUnicode_GET_LENGTH(_decoded); \
+ Py_DECREF(_decoded); \
+ } while (0)
+
+ /* Fast search for an acceptable start point, close to our
+ current pos */
+ skip_bytes = (Py_ssize_t) (self->b2cratio * chars_to_skip);
+ skip_back = 1;
+ assert(skip_back <= PyBytes_GET_SIZE(next_input));
+ input = PyBytes_AS_STRING(next_input);
+ while (skip_bytes > 0) {
+ /* Decode up to temptative start point */
+ if (_textiowrapper_decoder_setstate(self, &cookie) < 0)
+ goto fail;
+ DECODER_DECODE(input, skip_bytes, chars_decoded);
+ if (chars_decoded <= chars_to_skip) {
+ DECODER_GETSTATE();
+ if (dec_buffer_len == 0) {
+ /* Before pos and no bytes buffered in decoder => OK */
+ cookie.dec_flags = dec_flags;
+ chars_to_skip -= chars_decoded;
+ break;
+ }
+ /* Skip back by buffered amount and reset heuristic */
+ skip_bytes -= dec_buffer_len;
+ skip_back = 1;
+ }
+ else {
+ /* We're too far ahead, skip back a bit */
+ skip_bytes -= skip_back;
+ skip_back *= 2;
+ }
+ }
+ if (skip_bytes <= 0) {
+ skip_bytes = 0;
+ if (_textiowrapper_decoder_setstate(self, &cookie) < 0)
+ goto fail;
+ }
+
+ /* Note our initial start point. */
+ cookie.start_pos += skip_bytes;
+ cookie.chars_to_skip = chars_to_skip;
+ if (chars_to_skip == 0)
+ goto finally;
+
+ /* We should be close to the desired position. Now feed the decoder one
+ * byte at a time until we reach the `chars_to_skip` target.
+ * As we go, note the nearest "safe start point" before the current
+ * location (a point where the decoder has nothing buffered, so seek()
* can safely start from there and advance to this location).
*/
chars_decoded = 0;
input = PyBytes_AS_STRING(next_input);
input_end = input + PyBytes_GET_SIZE(next_input);
+ input += skip_bytes;
while (input < input_end) {
- PyObject *state;
- char *dec_buffer;
- Py_ssize_t dec_buffer_len;
- int dec_flags;
-
- PyObject *decoded = PyObject_CallMethod(
- self->decoder, "decode", "y#", input, 1);
- if (check_decoded(decoded) < 0)
- goto fail;
- chars_decoded += PyUnicode_GET_SIZE(decoded);
- Py_DECREF(decoded);
+ Py_ssize_t n;
+ DECODER_DECODE(input, (Py_ssize_t)1, n);
+ /* We got n chars for 1 byte */
+ chars_decoded += n;
cookie.bytes_to_feed += 1;
-
- state = PyObject_CallMethodObjArgs(self->decoder,
- _PyIO_str_getstate, NULL);
- if (state == NULL)
- goto fail;
- if (!PyArg_Parse(state, "(y#i)", &dec_buffer, &dec_buffer_len, &dec_flags)) {
- Py_DECREF(state);
- goto fail;
- }
- Py_DECREF(state);
+ DECODER_GETSTATE();
if (dec_buffer_len == 0 && chars_decoded <= chars_to_skip) {
/* Decoder buffer is empty, so this is a safe start point. */
@@ -2316,11 +2400,11 @@ textiowrapper_tell(textio *self, PyObject *args)
}
if (input == input_end) {
/* We didn't get enough decoded data; signal EOF to get more. */
- PyObject *decoded = PyObject_CallMethod(
- self->decoder, "decode", "yi", "", /* final = */ 1);
+ PyObject *decoded = _PyObject_CallMethodId(
+ self->decoder, &PyId_decode, "yi", "", /* final = */ 1);
if (check_decoded(decoded) < 0)
goto fail;
- chars_decoded += PyUnicode_GET_SIZE(decoded);
+ chars_decoded += PyUnicode_GET_LENGTH(decoded);
Py_DECREF(decoded);
cookie.need_eof = 1;
@@ -2331,9 +2415,8 @@ textiowrapper_tell(textio *self, PyObject *args)
}
}
- /* finally */
- Py_XDECREF(posobj);
- res = PyObject_CallMethod(self->decoder, "setstate", "(O)", saved_state);
+finally:
+ res = _PyObject_CallMethodId(self->decoder, &PyId_setstate, "(O)", saved_state);
Py_DECREF(saved_state);
if (res == NULL)
return NULL;
@@ -2343,13 +2426,12 @@ textiowrapper_tell(textio *self, PyObject *args)
cookie.chars_to_skip = Py_SAFE_DOWNCAST(chars_to_skip, Py_ssize_t, int);
return textiowrapper_build_cookie(&cookie);
- fail:
- Py_XDECREF(posobj);
+fail:
if (saved_state) {
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
- res = PyObject_CallMethod(self->decoder, "setstate", "(O)", saved_state);
+ res = _PyObject_CallMethodId(self->decoder, &PyId_setstate, "(O)", saved_state);
Py_DECREF(saved_state);
if (res == NULL)
return NULL;
@@ -2389,7 +2471,7 @@ textiowrapper_repr(textio *self)
res = PyUnicode_FromString("<_io.TextIOWrapper");
if (res == NULL)
return NULL;
- nameobj = PyObject_GetAttrString((PyObject *) self, "name");
+ nameobj = _PyObject_GetAttrId((PyObject *) self, &PyId_name);
if (nameobj == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -2405,7 +2487,7 @@ textiowrapper_repr(textio *self)
if (res == NULL)
return NULL;
}
- modeobj = PyObject_GetAttrString((PyObject *) self, "mode");
+ modeobj = _PyObject_GetAttrId((PyObject *) self, &PyId_mode);
if (modeobj == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -2437,35 +2519,35 @@ static PyObject *
textiowrapper_fileno(textio *self, PyObject *args)
{
CHECK_INITIALIZED(self);
- return PyObject_CallMethod(self->buffer, "fileno", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_fileno, NULL);
}
static PyObject *
textiowrapper_seekable(textio *self, PyObject *args)
{
CHECK_INITIALIZED(self);
- return PyObject_CallMethod(self->buffer, "seekable", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_seekable, NULL);
}
static PyObject *
textiowrapper_readable(textio *self, PyObject *args)
{
CHECK_INITIALIZED(self);
- return PyObject_CallMethod(self->buffer, "readable", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL);
}
static PyObject *
textiowrapper_writable(textio *self, PyObject *args)
{
CHECK_INITIALIZED(self);
- return PyObject_CallMethod(self->buffer, "writable", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL);
}
static PyObject *
textiowrapper_isatty(textio *self, PyObject *args)
{
CHECK_INITIALIZED(self);
- return PyObject_CallMethod(self->buffer, "isatty", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_isatty, NULL);
}
static PyObject *
@@ -2484,7 +2566,7 @@ textiowrapper_flush(textio *self, PyObject *args)
self->telling = self->seekable;
if (_textiowrapper_writeflush(self) < 0)
return NULL;
- return PyObject_CallMethod(self->buffer, "flush", NULL);
+ return _PyObject_CallMethodId(self->buffer, &PyId_flush, NULL);
}
static PyObject *
@@ -2506,21 +2588,37 @@ textiowrapper_close(textio *self, PyObject *args)
Py_RETURN_NONE; /* stream already closed */
}
else {
+ PyObject *exc = NULL, *val, *tb;
if (self->deallocating) {
- res = PyObject_CallMethod(self->buffer, "_dealloc_warn", "O", self);
+ res = _PyObject_CallMethodId(self->buffer, &PyId__dealloc_warn, "O", self);
if (res)
Py_DECREF(res);
else
PyErr_Clear();
}
- res = PyObject_CallMethod((PyObject *)self, "flush", NULL);
- if (res == NULL) {
- return NULL;
- }
+ res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
+ if (res == NULL)
+ PyErr_Fetch(&exc, &val, &tb);
else
Py_DECREF(res);
- return PyObject_CallMethod(self->buffer, "close", NULL);
+ res = _PyObject_CallMethodId(self->buffer, &PyId_close, NULL);
+ if (exc != NULL) {
+ if (res != NULL) {
+ Py_CLEAR(res);
+ PyErr_Restore(exc, val, tb);
+ }
+ else {
+ PyObject *val2;
+ Py_DECREF(exc);
+ Py_XDECREF(tb);
+ PyErr_Fetch(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc, &val2, &tb);
+ PyException_SetContext(val2, val);
+ PyErr_Restore(exc, val2, tb);
+ }
+ }
+ return res;
}
}
@@ -2548,10 +2646,10 @@ textiowrapper_iternext(textio *self)
}
}
- if (line == NULL)
+ if (line == NULL || PyUnicode_READY(line) == -1)
return NULL;
- if (PyUnicode_GET_SIZE(line) == 0) {
+ if (PyUnicode_GET_LENGTH(line) == 0) {
/* Reached EOF or would have blocked */
Py_DECREF(line);
Py_CLEAR(self->snapshot);
@@ -2566,7 +2664,7 @@ static PyObject *
textiowrapper_name_get(textio *self, void *context)
{
CHECK_INITIALIZED(self);
- return PyObject_GetAttrString(self->buffer, "name");
+ return _PyObject_GetAttrId(self->buffer, &PyId_name);
}
static PyObject *
diff --git a/Modules/_json.c b/Modules/_json.c
index 4d0f3c473a..4bc585dc2a 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -1,5 +1,7 @@
#include "Python.h"
#include "structmember.h"
+#include "accu.h"
+
#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TYPE)
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#endif
@@ -76,6 +78,21 @@ static PyMemberDef encoder_members[] = {
};
static PyObject *
+join_list_unicode(PyObject *lst)
+{
+ /* return u''.join(lst) */
+ static PyObject *sep = NULL;
+ if (sep == NULL) {
+ sep = PyUnicode_FromStringAndSize("", 0);
+ if (sep == NULL)
+ return NULL;
+ }
+ return PyUnicode_Join(sep, lst);
+}
+
+/* Forward decls */
+
+static PyObject *
ascii_escape_unicode(PyObject *pystr);
static PyObject *
py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr);
@@ -101,11 +118,11 @@ encoder_dealloc(PyObject *self);
static int
encoder_clear(PyObject *self);
static int
-encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ssize_t indent_level);
+encoder_listencode_list(PyEncoderObject *s, _PyAccu *acc, PyObject *seq, Py_ssize_t indent_level);
static int
-encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssize_t indent_level);
+encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc, PyObject *obj, Py_ssize_t indent_level);
static int
-encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ssize_t indent_level);
+encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc, PyObject *dct, Py_ssize_t indent_level);
static PyObject *
_encoded_const(PyObject *obj);
static void
@@ -122,13 +139,6 @@ encoder_encode_float(PyEncoderObject *s, PyObject *obj);
#define S_CHAR(c) (c >= ' ' && c <= '~' && c != '\\' && c != '"')
#define IS_WHITESPACE(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\n') || ((c) == '\r'))
-#define MIN_EXPANSION 6
-#ifdef Py_UNICODE_WIDE
-#define MAX_EXPANSION (2 * MIN_EXPANSION)
-#else
-#define MAX_EXPANSION MIN_EXPANSION
-#endif
-
static int
_convertPyInt_AsSsize_t(PyObject *o, Py_ssize_t *size_ptr)
{
@@ -147,7 +157,7 @@ _convertPyInt_FromSsize_t(Py_ssize_t *size_ptr)
}
static Py_ssize_t
-ascii_escape_unichar(Py_UNICODE c, Py_UNICODE *output, Py_ssize_t chars)
+ascii_escape_unichar(Py_UCS4 c, unsigned char *output, Py_ssize_t chars)
{
/* Escape unicode code point c to ASCII escape sequences
in char *output. output must have at least 12 bytes unused to
@@ -162,25 +172,23 @@ ascii_escape_unichar(Py_UNICODE c, Py_UNICODE *output, Py_ssize_t chars)
case '\r': output[chars++] = 'r'; break;
case '\t': output[chars++] = 't'; break;
default:
-#ifdef Py_UNICODE_WIDE
if (c >= 0x10000) {
/* UTF-16 surrogate pair */
- Py_UNICODE v = c - 0x10000;
+ Py_UCS4 v = c - 0x10000;
c = 0xd800 | ((v >> 10) & 0x3ff);
output[chars++] = 'u';
- output[chars++] = "0123456789abcdef"[(c >> 12) & 0xf];
- output[chars++] = "0123456789abcdef"[(c >> 8) & 0xf];
- output[chars++] = "0123456789abcdef"[(c >> 4) & 0xf];
- output[chars++] = "0123456789abcdef"[(c ) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 12) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 8) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 4) & 0xf];
+ output[chars++] = Py_hexdigits[(c ) & 0xf];
c = 0xdc00 | (v & 0x3ff);
output[chars++] = '\\';
}
-#endif
output[chars++] = 'u';
- output[chars++] = "0123456789abcdef"[(c >> 12) & 0xf];
- output[chars++] = "0123456789abcdef"[(c >> 8) & 0xf];
- output[chars++] = "0123456789abcdef"[(c >> 4) & 0xf];
- output[chars++] = "0123456789abcdef"[(c ) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 12) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 8) & 0xf];
+ output[chars++] = Py_hexdigits[(c >> 4) & 0xf];
+ output[chars++] = Py_hexdigits[(c ) & 0xf];
}
return chars;
}
@@ -192,54 +200,55 @@ ascii_escape_unicode(PyObject *pystr)
Py_ssize_t i;
Py_ssize_t input_chars;
Py_ssize_t output_size;
- Py_ssize_t max_output_size;
Py_ssize_t chars;
PyObject *rval;
- Py_UNICODE *output;
- Py_UNICODE *input_unicode;
+ void *input;
+ unsigned char *output;
+ int kind;
- input_chars = PyUnicode_GET_SIZE(pystr);
- input_unicode = PyUnicode_AS_UNICODE(pystr);
+ if (PyUnicode_READY(pystr) == -1)
+ return NULL;
+
+ input_chars = PyUnicode_GET_LENGTH(pystr);
+ input = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+
+ /* Compute the output size */
+ for (i = 0, output_size = 2; i < input_chars; i++) {
+ Py_UCS4 c = PyUnicode_READ(kind, input, i);
+ if (S_CHAR(c))
+ output_size++;
+ else {
+ switch(c) {
+ case '\\': case '"': case '\b': case '\f':
+ case '\n': case '\r': case '\t':
+ output_size += 2; break;
+ default:
+ output_size += c >= 0x10000 ? 12 : 6;
+ }
+ }
+ }
- /* One char input can be up to 6 chars output, estimate 4 of these */
- output_size = 2 + (MIN_EXPANSION * 4) + input_chars;
- max_output_size = 2 + (input_chars * MAX_EXPANSION);
- rval = PyUnicode_FromStringAndSize(NULL, output_size);
+ rval = PyUnicode_New(output_size, 127);
if (rval == NULL) {
return NULL;
}
- output = PyUnicode_AS_UNICODE(rval);
+ output = PyUnicode_1BYTE_DATA(rval);
chars = 0;
output[chars++] = '"';
for (i = 0; i < input_chars; i++) {
- Py_UNICODE c = input_unicode[i];
+ Py_UCS4 c = PyUnicode_READ(kind, input, i);
if (S_CHAR(c)) {
output[chars++] = c;
}
else {
chars = ascii_escape_unichar(c, output, chars);
}
- if (output_size - chars < (1 + MAX_EXPANSION)) {
- /* There's more than four, so let's resize by a lot */
- Py_ssize_t new_output_size = output_size * 2;
- /* This is an upper bound */
- if (new_output_size > max_output_size) {
- new_output_size = max_output_size;
- }
- /* Make sure that the output size changed before resizing */
- if (new_output_size != output_size) {
- output_size = new_output_size;
- if (PyUnicode_Resize(&rval, output_size) == -1) {
- return NULL;
- }
- output = PyUnicode_AS_UNICODE(rval);
- }
- }
}
output[chars++] = '"';
- if (PyUnicode_Resize(&rval, chars) == -1) {
- return NULL;
- }
+#ifdef Py_DEBUG
+ assert(_PyUnicode_CheckConsistency(rval, 1));
+#endif
return rval;
}
@@ -267,19 +276,6 @@ raise_errmsg(char *msg, PyObject *s, Py_ssize_t end)
}
static PyObject *
-join_list_unicode(PyObject *lst)
-{
- /* return u''.join(lst) */
- static PyObject *sep = NULL;
- if (sep == NULL) {
- sep = PyUnicode_FromStringAndSize("", 0);
- if (sep == NULL)
- return NULL;
- }
- return PyUnicode_Join(sep, lst);
-}
-
-static PyObject *
_build_rval_index_tuple(PyObject *rval, Py_ssize_t idx) {
/* return (rval, idx) tuple, stealing reference to rval */
PyObject *tpl;
@@ -333,22 +329,30 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
Return value is a new PyUnicode
*/
PyObject *rval = NULL;
- Py_ssize_t len = PyUnicode_GET_SIZE(pystr);
+ Py_ssize_t len;
Py_ssize_t begin = end - 1;
- Py_ssize_t next = begin;
- const Py_UNICODE *buf = PyUnicode_AS_UNICODE(pystr);
+ Py_ssize_t next /* = begin */;
+ const void *buf;
+ int kind;
PyObject *chunks = NULL;
PyObject *chunk = NULL;
+ if (PyUnicode_READY(pystr) == -1)
+ return 0;
+
+ len = PyUnicode_GET_LENGTH(pystr);
+ buf = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+
if (end < 0 || len <= end) {
PyErr_SetString(PyExc_ValueError, "end is out of bounds");
goto bail;
}
while (1) {
/* Find the end of the string or the next escape */
- Py_UNICODE c = 0;
+ Py_UCS4 c = 0;
for (next = end; next < len; next++) {
- c = buf[next];
+ c = PyUnicode_READ(kind, buf, next);
if (c == '"' || c == '\\') {
break;
}
@@ -364,7 +368,10 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
/* Pick up this chunk if it's not zero length */
if (next != end) {
APPEND_OLD_CHUNK
- chunk = PyUnicode_FromUnicode(&buf[end], next - end);
+ chunk = PyUnicode_FromKindAndData(
+ kind,
+ (char*)buf + kind * end,
+ next - end);
if (chunk == NULL) {
goto bail;
}
@@ -378,7 +385,7 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
raise_errmsg("Unterminated string starting at", pystr, begin);
goto bail;
}
- c = buf[next];
+ c = PyUnicode_READ(kind, buf, next);
if (c != 'u') {
/* Non-unicode backslash escapes */
end = next + 1;
@@ -408,7 +415,7 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
}
/* Decode 4 hex digits */
for (; next < end; next++) {
- Py_UNICODE digit = buf[next];
+ Py_UCS4 digit = PyUnicode_READ(kind, buf, next);
c <<= 4;
switch (digit) {
case '0': case '1': case '2': case '3': case '4':
@@ -425,22 +432,15 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
goto bail;
}
}
-#ifdef Py_UNICODE_WIDE
/* Surrogate pair */
- if ((c & 0xfc00) == 0xd800) {
- Py_UNICODE c2 = 0;
- if (end + 6 >= len) {
- raise_errmsg("Unpaired high surrogate", pystr, end - 5);
- goto bail;
- }
- if (buf[next++] != '\\' || buf[next++] != 'u') {
- raise_errmsg("Unpaired high surrogate", pystr, end - 5);
- goto bail;
- }
+ if (Py_UNICODE_IS_HIGH_SURROGATE(c) && end + 6 < len &&
+ PyUnicode_READ(kind, buf, next++) == '\\' &&
+ PyUnicode_READ(kind, buf, next++) == 'u') {
+ Py_UCS4 c2 = 0;
end += 6;
/* Decode 4 hex digits */
for (; next < end; next++) {
- Py_UNICODE digit = buf[next];
+ Py_UCS4 digit = PyUnicode_READ(kind, buf, next);
c2 <<= 4;
switch (digit) {
case '0': case '1': case '2': case '3': case '4':
@@ -457,20 +457,14 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
goto bail;
}
}
- if ((c2 & 0xfc00) != 0xdc00) {
- raise_errmsg("Unpaired high surrogate", pystr, end - 5);
- goto bail;
- }
- c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
- }
- else if ((c & 0xfc00) == 0xdc00) {
- raise_errmsg("Unpaired low surrogate", pystr, end - 5);
- goto bail;
+ if (Py_UNICODE_IS_LOW_SURROGATE(c2))
+ c = Py_UNICODE_JOIN_SURROGATES(c, c2);
+ else
+ end -= 6;
}
-#endif
}
APPEND_OLD_CHUNK
- chunk = PyUnicode_FromUnicode(&c, 1);
+ chunk = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, &c, 1);
if (chunk == NULL) {
goto bail;
}
@@ -608,8 +602,9 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
Returns a new PyObject (usually a dict, but object_hook can change that)
*/
- Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
- Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
+ void *str;
+ int kind;
+ Py_ssize_t end_idx;
PyObject *val = NULL;
PyObject *rval = NULL;
PyObject *key = NULL;
@@ -617,6 +612,13 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
int has_pairs_hook = (s->object_pairs_hook != Py_None);
Py_ssize_t next_idx;
+ if (PyUnicode_READY(pystr) == -1)
+ return NULL;
+
+ str = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+ end_idx = PyUnicode_GET_LENGTH(pystr) - 1;
+
if (has_pairs_hook)
rval = PyList_New(0);
else
@@ -625,15 +627,15 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
return NULL;
/* skip whitespace after { */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind,str, idx))) idx++;
/* only loop if the object is non-empty */
- if (idx <= end_idx && str[idx] != '}') {
+ if (idx <= end_idx && PyUnicode_READ(kind, str, idx) != '}') {
while (idx <= end_idx) {
PyObject *memokey;
/* read key */
- if (str[idx] != '"') {
+ if (PyUnicode_READ(kind, str, idx) != '"') {
raise_errmsg("Expecting property name enclosed in double quotes", pystr, idx);
goto bail;
}
@@ -653,13 +655,13 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
idx = next_idx;
/* skip whitespace between key and : delimiter, read :, skip whitespace */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
- if (idx > end_idx || str[idx] != ':') {
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
+ if (idx > end_idx || PyUnicode_READ(kind, str, idx) != ':') {
raise_errmsg("Expecting ':' delimiter", pystr, idx);
goto bail;
}
idx++;
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
/* read any JSON term */
val = scan_once_unicode(s, pystr, idx, &next_idx);
@@ -687,26 +689,26 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
idx = next_idx;
/* skip whitespace before } or , */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
/* bail if the object is closed or we didn't get the , delimiter */
if (idx > end_idx) break;
- if (str[idx] == '}') {
+ if (PyUnicode_READ(kind, str, idx) == '}') {
break;
}
- else if (str[idx] != ',') {
+ else if (PyUnicode_READ(kind, str, idx) != ',') {
raise_errmsg("Expecting ',' delimiter", pystr, idx);
goto bail;
}
idx++;
/* skip whitespace after , delimiter */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
}
}
/* verify that idx < end_idx, str[idx] should be '}' */
- if (idx > end_idx || str[idx] != '}') {
+ if (idx > end_idx || PyUnicode_READ(kind, str, idx) != '}') {
raise_errmsg("Expecting object", pystr, end_idx);
goto bail;
}
@@ -742,19 +744,27 @@ _parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssi
Returns a new PyList
*/
- Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
- Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
+ void *str;
+ int kind;
+ Py_ssize_t end_idx;
PyObject *val = NULL;
PyObject *rval = PyList_New(0);
Py_ssize_t next_idx;
if (rval == NULL)
return NULL;
+ if (PyUnicode_READY(pystr) == -1)
+ return NULL;
+
+ str = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+ end_idx = PyUnicode_GET_LENGTH(pystr) - 1;
+
/* skip whitespace after [ */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
/* only loop if the array is non-empty */
- if (idx <= end_idx && str[idx] != ']') {
+ if (idx <= end_idx && PyUnicode_READ(kind, str, idx) != ']') {
while (idx <= end_idx) {
/* read any JSON term */
@@ -769,26 +779,26 @@ _parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssi
idx = next_idx;
/* skip whitespace between term and , */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
/* bail if the array is closed or we didn't get the , delimiter */
if (idx > end_idx) break;
- if (str[idx] == ']') {
+ if (PyUnicode_READ(kind, str, idx) == ']') {
break;
}
- else if (str[idx] != ',') {
+ else if (PyUnicode_READ(kind, str, idx) != ',') {
raise_errmsg("Expecting ',' delimiter", pystr, idx);
goto bail;
}
idx++;
/* skip whitespace after , */
- while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
+ while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
}
}
- /* verify that idx < end_idx, str[idx] should be ']' */
- if (idx > end_idx || str[idx] != ']') {
+ /* verify that idx < end_idx, PyUnicode_READ(kind, str, idx) should be ']' */
+ if (idx > end_idx || PyUnicode_READ(kind, str, idx) != ']') {
raise_errmsg("Expecting object", pystr, end_idx);
goto bail;
}
@@ -820,7 +830,7 @@ _parse_constant(PyScannerObject *s, char *constant, Py_ssize_t idx, Py_ssize_t *
/* rval = parse_constant(constant) */
rval = PyObject_CallFunctionObjArgs(s->parse_constant, cstr, NULL);
- idx += PyUnicode_GET_SIZE(cstr);
+ idx += PyUnicode_GET_LENGTH(cstr);
Py_DECREF(cstr);
*next_idx_ptr = idx;
return rval;
@@ -837,15 +847,24 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_
PyInt, PyLong, or PyFloat.
May return other types if parse_int or parse_float are set
*/
- Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
- Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
+ void *str;
+ int kind;
+ Py_ssize_t end_idx;
Py_ssize_t idx = start;
int is_float = 0;
PyObject *rval;
- PyObject *numstr;
+ PyObject *numstr = NULL;
+ PyObject *custom_func;
+
+ if (PyUnicode_READY(pystr) == -1)
+ return NULL;
+
+ str = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+ end_idx = PyUnicode_GET_LENGTH(pystr) - 1;
/* read a sign if it's there, make sure it's not the end of the string */
- if (str[idx] == '-') {
+ if (PyUnicode_READ(kind, str, idx) == '-') {
idx++;
if (idx > end_idx) {
PyErr_SetNone(PyExc_StopIteration);
@@ -854,12 +873,12 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_
}
/* read as many integer digits as we find as long as it doesn't start with 0 */
- if (str[idx] >= '1' && str[idx] <= '9') {
+ if (PyUnicode_READ(kind, str, idx) >= '1' && PyUnicode_READ(kind, str, idx) <= '9') {
idx++;
- while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
+ while (idx <= end_idx && PyUnicode_READ(kind, str, idx) >= '0' && PyUnicode_READ(kind, str, idx) <= '9') idx++;
}
/* if it starts with 0 we only expect one integer digit */
- else if (str[idx] == '0') {
+ else if (PyUnicode_READ(kind, str, idx) == '0') {
idx++;
}
/* no integer digits, error */
@@ -869,25 +888,25 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_
}
/* if the next char is '.' followed by a digit then read all float digits */
- if (idx < end_idx && str[idx] == '.' && str[idx + 1] >= '0' && str[idx + 1] <= '9') {
+ if (idx < end_idx && PyUnicode_READ(kind, str, idx) == '.' && PyUnicode_READ(kind, str, idx + 1) >= '0' && PyUnicode_READ(kind, str, idx + 1) <= '9') {
is_float = 1;
idx += 2;
- while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
+ while (idx <= end_idx && PyUnicode_READ(kind, str, idx) >= '0' && PyUnicode_READ(kind, str, idx) <= '9') idx++;
}
/* if the next char is 'e' or 'E' then maybe read the exponent (or backtrack) */
- if (idx < end_idx && (str[idx] == 'e' || str[idx] == 'E')) {
+ if (idx < end_idx && (PyUnicode_READ(kind, str, idx) == 'e' || PyUnicode_READ(kind, str, idx) == 'E')) {
Py_ssize_t e_start = idx;
idx++;
/* read an exponent sign if present */
- if (idx < end_idx && (str[idx] == '-' || str[idx] == '+')) idx++;
+ if (idx < end_idx && (PyUnicode_READ(kind, str, idx) == '-' || PyUnicode_READ(kind, str, idx) == '+')) idx++;
/* read all digits */
- while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
+ while (idx <= end_idx && PyUnicode_READ(kind, str, idx) >= '0' && PyUnicode_READ(kind, str, idx) <= '9') idx++;
/* if we got a digit, then parse as float. if not, backtrack */
- if (str[idx - 1] >= '0' && str[idx - 1] <= '9') {
+ if (PyUnicode_READ(kind, str, idx - 1) >= '0' && PyUnicode_READ(kind, str, idx - 1) <= '9') {
is_float = 1;
}
else {
@@ -895,22 +914,39 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_
}
}
- /* copy the section we determined to be a number */
- numstr = PyUnicode_FromUnicode(&str[start], idx - start);
- if (numstr == NULL)
- return NULL;
- if (is_float) {
- /* parse as a float using a fast path if available, otherwise call user defined method */
- if (s->parse_float != (PyObject *)&PyFloat_Type) {
- rval = PyObject_CallFunctionObjArgs(s->parse_float, numstr, NULL);
- }
- else {
- rval = PyFloat_FromString(numstr);
- }
+ if (is_float && s->parse_float != (PyObject *)&PyFloat_Type)
+ custom_func = s->parse_float;
+ else if (!is_float && s->parse_int != (PyObject *) &PyLong_Type)
+ custom_func = s->parse_int;
+ else
+ custom_func = NULL;
+
+ if (custom_func) {
+ /* copy the section we determined to be a number */
+ numstr = PyUnicode_FromKindAndData(kind,
+ (char*)str + kind * start,
+ idx - start);
+ if (numstr == NULL)
+ return NULL;
+ rval = PyObject_CallFunctionObjArgs(custom_func, numstr, NULL);
}
else {
- /* no fast path for unicode -> int, just call */
- rval = PyObject_CallFunctionObjArgs(s->parse_int, numstr, NULL);
+ Py_ssize_t i, n;
+ char *buf;
+ /* Straight conversion to ASCII, to avoid costly conversion of
+ decimal unicode digits (which cannot appear here) */
+ n = idx - start;
+ numstr = PyBytes_FromStringAndSize(NULL, n);
+ if (numstr == NULL)
+ return NULL;
+ buf = PyBytes_AS_STRING(numstr);
+ for (i = 0; i < n; i++) {
+ buf[i] = (char) PyUnicode_READ(kind, str, i + start);
+ }
+ if (is_float)
+ rval = PyFloat_FromString(numstr);
+ else
+ rval = PyLong_FromString(buf, NULL, 10);
}
Py_DECREF(numstr);
*next_idx_ptr = idx;
@@ -928,17 +964,27 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
Returns a new PyObject representation of the term.
*/
PyObject *res;
- Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
- Py_ssize_t length = PyUnicode_GET_SIZE(pystr);
+ void *str;
+ int kind;
+ Py_ssize_t length;
+
+ if (PyUnicode_READY(pystr) == -1)
+ return NULL;
+
+ str = PyUnicode_DATA(pystr);
+ kind = PyUnicode_KIND(pystr);
+ length = PyUnicode_GET_LENGTH(pystr);
+
if (idx < 0) {
- PyErr_SetString(PyExc_ValueError, "idx canont be negative");
+ PyErr_SetString(PyExc_ValueError, "idx cannot be negative");
return NULL;
}
if (idx >= length) {
PyErr_SetNone(PyExc_StopIteration);
return NULL;
}
- switch (str[idx]) {
+
+ switch (PyUnicode_READ(kind, str, idx)) {
case '"':
/* string */
return scanstring_unicode(pystr, idx + 1,
@@ -962,7 +1008,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
return res;
case 'n':
/* null */
- if ((idx + 3 < length) && str[idx + 1] == 'u' && str[idx + 2] == 'l' && str[idx + 3] == 'l') {
+ if ((idx + 3 < length) && PyUnicode_READ(kind, str, idx + 1) == 'u' && PyUnicode_READ(kind, str, idx + 2) == 'l' && PyUnicode_READ(kind, str, idx + 3) == 'l') {
Py_INCREF(Py_None);
*next_idx_ptr = idx + 4;
return Py_None;
@@ -970,7 +1016,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
break;
case 't':
/* true */
- if ((idx + 3 < length) && str[idx + 1] == 'r' && str[idx + 2] == 'u' && str[idx + 3] == 'e') {
+ if ((idx + 3 < length) && PyUnicode_READ(kind, str, idx + 1) == 'r' && PyUnicode_READ(kind, str, idx + 2) == 'u' && PyUnicode_READ(kind, str, idx + 3) == 'e') {
Py_INCREF(Py_True);
*next_idx_ptr = idx + 4;
return Py_True;
@@ -978,7 +1024,10 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
break;
case 'f':
/* false */
- if ((idx + 4 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'l' && str[idx + 3] == 's' && str[idx + 4] == 'e') {
+ if ((idx + 4 < length) && PyUnicode_READ(kind, str, idx + 1) == 'a' &&
+ PyUnicode_READ(kind, str, idx + 2) == 'l' &&
+ PyUnicode_READ(kind, str, idx + 3) == 's' &&
+ PyUnicode_READ(kind, str, idx + 4) == 'e') {
Py_INCREF(Py_False);
*next_idx_ptr = idx + 5;
return Py_False;
@@ -986,19 +1035,33 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
break;
case 'N':
/* NaN */
- if ((idx + 2 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'N') {
+ if ((idx + 2 < length) && PyUnicode_READ(kind, str, idx + 1) == 'a' &&
+ PyUnicode_READ(kind, str, idx + 2) == 'N') {
return _parse_constant(s, "NaN", idx, next_idx_ptr);
}
break;
case 'I':
/* Infinity */
- if ((idx + 7 < length) && str[idx + 1] == 'n' && str[idx + 2] == 'f' && str[idx + 3] == 'i' && str[idx + 4] == 'n' && str[idx + 5] == 'i' && str[idx + 6] == 't' && str[idx + 7] == 'y') {
+ if ((idx + 7 < length) && PyUnicode_READ(kind, str, idx + 1) == 'n' &&
+ PyUnicode_READ(kind, str, idx + 2) == 'f' &&
+ PyUnicode_READ(kind, str, idx + 3) == 'i' &&
+ PyUnicode_READ(kind, str, idx + 4) == 'n' &&
+ PyUnicode_READ(kind, str, idx + 5) == 'i' &&
+ PyUnicode_READ(kind, str, idx + 6) == 't' &&
+ PyUnicode_READ(kind, str, idx + 7) == 'y') {
return _parse_constant(s, "Infinity", idx, next_idx_ptr);
}
break;
case '-':
/* -Infinity */
- if ((idx + 8 < length) && str[idx + 1] == 'I' && str[idx + 2] == 'n' && str[idx + 3] == 'f' && str[idx + 4] == 'i' && str[idx + 5] == 'n' && str[idx + 6] == 'i' && str[idx + 7] == 't' && str[idx + 8] == 'y') {
+ if ((idx + 8 < length) && PyUnicode_READ(kind, str, idx + 1) == 'I' &&
+ PyUnicode_READ(kind, str, idx + 2) == 'n' &&
+ PyUnicode_READ(kind, str, idx + 3) == 'f' &&
+ PyUnicode_READ(kind, str, idx + 4) == 'i' &&
+ PyUnicode_READ(kind, str, idx + 5) == 'n' &&
+ PyUnicode_READ(kind, str, idx + 6) == 'i' &&
+ PyUnicode_READ(kind, str, idx + 7) == 't' &&
+ PyUnicode_READ(kind, str, idx + 8) == 'y') {
return _parse_constant(s, "-Infinity", idx, next_idx_ptr);
}
break;
@@ -1214,22 +1277,22 @@ encoder_call(PyObject *self, PyObject *args, PyObject *kwds)
/* Python callable interface to encode_listencode_obj */
static char *kwlist[] = {"obj", "_current_indent_level", NULL};
PyObject *obj;
- PyObject *rval;
Py_ssize_t indent_level;
PyEncoderObject *s;
+ _PyAccu acc;
+
assert(PyEncoder_Check(self));
s = (PyEncoderObject *)self;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&:_iterencode", kwlist,
&obj, _convertPyInt_AsSsize_t, &indent_level))
return NULL;
- rval = PyList_New(0);
- if (rval == NULL)
+ if (_PyAccu_Init(&acc))
return NULL;
- if (encoder_listencode_obj(s, rval, obj, indent_level)) {
- Py_DECREF(rval);
+ if (encoder_listencode_obj(s, &acc, obj, indent_level)) {
+ _PyAccu_Destroy(&acc);
return NULL;
}
- return rval;
+ return _PyAccu_FinishAsList(&acc);
}
static PyObject *
@@ -1301,18 +1364,19 @@ encoder_encode_string(PyEncoderObject *s, PyObject *obj)
}
static int
-_steal_list_append(PyObject *lst, PyObject *stolen)
+_steal_accumulate(_PyAccu *acc, PyObject *stolen)
{
/* Append stolen and then decrement its reference count */
- int rval = PyList_Append(lst, stolen);
+ int rval = _PyAccu_Accumulate(acc, stolen);
Py_DECREF(stolen);
return rval;
}
static int
-encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssize_t indent_level)
+encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc,
+ PyObject *obj, Py_ssize_t indent_level)
{
- /* Encode Python object obj to a JSON term, rval is a PyList */
+ /* Encode Python object obj to a JSON term */
PyObject *newobj;
int rv;
@@ -1320,38 +1384,38 @@ encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssi
PyObject *cstr = _encoded_const(obj);
if (cstr == NULL)
return -1;
- return _steal_list_append(rval, cstr);
+ return _steal_accumulate(acc, cstr);
}
else if (PyUnicode_Check(obj))
{
PyObject *encoded = encoder_encode_string(s, obj);
if (encoded == NULL)
return -1;
- return _steal_list_append(rval, encoded);
+ return _steal_accumulate(acc, encoded);
}
else if (PyLong_Check(obj)) {
PyObject *encoded = PyObject_Str(obj);
if (encoded == NULL)
return -1;
- return _steal_list_append(rval, encoded);
+ return _steal_accumulate(acc, encoded);
}
else if (PyFloat_Check(obj)) {
PyObject *encoded = encoder_encode_float(s, obj);
if (encoded == NULL)
return -1;
- return _steal_list_append(rval, encoded);
+ return _steal_accumulate(acc, encoded);
}
else if (PyList_Check(obj) || PyTuple_Check(obj)) {
if (Py_EnterRecursiveCall(" while encoding a JSON object"))
return -1;
- rv = encoder_listencode_list(s, rval, obj, indent_level);
+ rv = encoder_listencode_list(s, acc, obj, indent_level);
Py_LeaveRecursiveCall();
return rv;
}
else if (PyDict_Check(obj)) {
if (Py_EnterRecursiveCall(" while encoding a JSON object"))
return -1;
- rv = encoder_listencode_dict(s, rval, obj, indent_level);
+ rv = encoder_listencode_dict(s, acc, obj, indent_level);
Py_LeaveRecursiveCall();
return rv;
}
@@ -1382,7 +1446,7 @@ encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssi
if (Py_EnterRecursiveCall(" while encoding a JSON object"))
return -1;
- rv = encoder_listencode_obj(s, rval, newobj, indent_level);
+ rv = encoder_listencode_obj(s, acc, newobj, indent_level);
Py_LeaveRecursiveCall();
Py_DECREF(newobj);
@@ -1402,9 +1466,10 @@ encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssi
}
static int
-encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ssize_t indent_level)
+encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
+ PyObject *dct, Py_ssize_t indent_level)
{
- /* Encode Python dict dct a JSON term, rval is a PyList */
+ /* Encode Python dict dct a JSON term */
static PyObject *open_dict = NULL;
static PyObject *close_dict = NULL;
static PyObject *empty_dict = NULL;
@@ -1424,7 +1489,7 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
return -1;
}
if (Py_SIZE(dct) == 0)
- return PyList_Append(rval, empty_dict);
+ return _PyAccu_Accumulate(acc, empty_dict);
if (s->markers != Py_None) {
int has_key;
@@ -1442,7 +1507,7 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
}
}
- if (PyList_Append(rval, open_dict))
+ if (_PyAccu_Accumulate(acc, open_dict))
goto bail;
if (s->indent != Py_None) {
@@ -1529,7 +1594,7 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
}
if (idx) {
- if (PyList_Append(rval, s->item_separator))
+ if (_PyAccu_Accumulate(acc, s->item_separator))
goto bail;
}
@@ -1537,16 +1602,16 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
Py_CLEAR(kstr);
if (encoded == NULL)
goto bail;
- if (PyList_Append(rval, encoded)) {
+ if (_PyAccu_Accumulate(acc, encoded)) {
Py_DECREF(encoded);
goto bail;
}
Py_DECREF(encoded);
- if (PyList_Append(rval, s->key_separator))
+ if (_PyAccu_Accumulate(acc, s->key_separator))
goto bail;
value = PyTuple_GET_ITEM(item, 1);
- if (encoder_listencode_obj(s, rval, value, indent_level))
+ if (encoder_listencode_obj(s, acc, value, indent_level))
goto bail;
idx += 1;
Py_DECREF(item);
@@ -1560,14 +1625,13 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
goto bail;
Py_CLEAR(ident);
}
+ /* TODO DOES NOT RUN; dead code
if (s->indent != Py_None) {
- /* TODO: DOES NOT RUN */
indent_level -= 1;
- /*
- yield '\n' + (' ' * (_indent * _current_indent_level))
- */
- }
- if (PyList_Append(rval, close_dict))
+
+ yield '\n' + (' ' * (_indent * _current_indent_level))
+ }*/
+ if (_PyAccu_Accumulate(acc, close_dict))
goto bail;
return 0;
@@ -1581,9 +1645,10 @@ bail:
static int
-encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ssize_t indent_level)
+encoder_listencode_list(PyEncoderObject *s, _PyAccu *acc,
+ PyObject *seq, Py_ssize_t indent_level)
{
- /* Encode Python list seq to a JSON term, rval is a PyList */
+ /* Encode Python list seq to a JSON term */
static PyObject *open_array = NULL;
static PyObject *close_array = NULL;
static PyObject *empty_array = NULL;
@@ -1604,7 +1669,7 @@ encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ss
return -1;
if (PySequence_Fast_GET_SIZE(s_fast) == 0) {
Py_DECREF(s_fast);
- return PyList_Append(rval, empty_array);
+ return _PyAccu_Accumulate(acc, empty_array);
}
if (s->markers != Py_None) {
@@ -1623,7 +1688,7 @@ encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ss
}
}
- if (PyList_Append(rval, open_array))
+ if (_PyAccu_Accumulate(acc, open_array))
goto bail;
if (s->indent != Py_None) {
/* TODO: DOES NOT RUN */
@@ -1637,10 +1702,10 @@ encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ss
for (i = 0; i < PySequence_Fast_GET_SIZE(s_fast); i++) {
PyObject *obj = PySequence_Fast_GET_ITEM(s_fast, i);
if (i) {
- if (PyList_Append(rval, s->item_separator))
+ if (_PyAccu_Accumulate(acc, s->item_separator))
goto bail;
}
- if (encoder_listencode_obj(s, rval, obj, indent_level))
+ if (encoder_listencode_obj(s, acc, obj, indent_level))
goto bail;
}
if (ident != NULL) {
@@ -1648,14 +1713,14 @@ encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ss
goto bail;
Py_CLEAR(ident);
}
+
+ /* TODO: DOES NOT RUN
if (s->indent != Py_None) {
- /* TODO: DOES NOT RUN */
indent_level -= 1;
- /*
- yield '\n' + (' ' * (_indent * _current_indent_level))
- */
- }
- if (PyList_Append(rval, close_array))
+
+ yield '\n' + (' ' * (_indent * _current_indent_level))
+ }*/
+ if (_PyAccu_Accumulate(acc, close_array))
goto bail;
Py_DECREF(s_fast);
return 0;
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 1001dd22b7..cc688ba140 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -42,43 +42,6 @@ PyDoc_STRVAR(locale__doc__, "Support for POSIX locales.");
static PyObject *Error;
-/* Convert a char* to a Unicode object according to the current locale */
-static PyObject*
-str2uni(const char* s)
-{
-#ifdef HAVE_BROKEN_MBSTOWCS
- size_t needed = strlen(s);
-#else
- size_t needed = mbstowcs(NULL, s, 0);
-#endif
- size_t res1;
- wchar_t smallbuf[30];
- wchar_t *dest;
- PyObject *res2;
- if (needed == (size_t)-1) {
- PyErr_SetString(PyExc_ValueError, "Cannot convert byte to string");
- return NULL;
- }
- if (needed*sizeof(wchar_t) < sizeof(smallbuf))
- dest = smallbuf;
- else {
- dest = PyMem_Malloc((needed+1)*sizeof(wchar_t));
- if (!dest)
- return PyErr_NoMemory();
- }
- /* This shouldn't fail now */
- res1 = mbstowcs(dest, s, needed+1);
-#ifdef HAVE_BROKEN_MBSTOWCS
- assert(res1 != (size_t)-1);
-#else
- assert(res1 == needed);
-#endif
- res2 = PyUnicode_FromWideChar(dest, res1);
- if (dest != smallbuf)
- PyMem_Free(dest);
- return res2;
-}
-
/* support functions for formatting floating point numbers */
PyDoc_STRVAR(setlocale__doc__,
@@ -149,7 +112,7 @@ PyLocale_setlocale(PyObject* self, PyObject* args)
PyErr_SetString(Error, "unsupported locale setting");
return NULL;
}
- result_object = str2uni(result);
+ result_object = PyUnicode_DecodeLocale(result, NULL);
if (!result_object)
return NULL;
} else {
@@ -159,7 +122,7 @@ PyLocale_setlocale(PyObject* self, PyObject* args)
PyErr_SetString(Error, "locale query failed");
return NULL;
}
- result_object = str2uni(result);
+ result_object = PyUnicode_DecodeLocale(result, NULL);
}
return result_object;
}
@@ -185,7 +148,7 @@ PyLocale_localeconv(PyObject* self)
involved herein */
#define RESULT_STRING(s)\
- x = str2uni(l->s); \
+ x = PyUnicode_DecodeLocale(l->s, NULL); \
if (!x) goto failed;\
PyDict_SetItemString(result, #s, x);\
Py_XDECREF(x)
@@ -271,51 +234,43 @@ Return a string that can be used as a key for locale-aware comparisons.");
static PyObject*
PyLocale_strxfrm(PyObject* self, PyObject* args)
{
- Py_UNICODE *s0;
- Py_ssize_t n0;
- wchar_t *s, *buf = NULL;
- size_t n1, n2;
+ PyObject *str;
+ Py_ssize_t n1;
+ wchar_t *s = NULL, *buf = NULL;
+ size_t n2;
PyObject *result = NULL;
-#if Py_UNICODE_SIZE != SIZEOF_WCHAR_T
- Py_ssize_t i;
-#endif
- if (!PyArg_ParseTuple(args, "u#:strxfrm", &s0, &n0))
+ if (!PyArg_ParseTuple(args, "U:strxfrm", &str))
return NULL;
-#if Py_UNICODE_SIZE == SIZEOF_WCHAR_T
- s = (wchar_t *) s0;
-#else
- s = PyMem_Malloc((n0+1)*sizeof(wchar_t));
- if (!s)
- return PyErr_NoMemory();
- for (i=0; i<=n0; i++)
- s[i] = s0[i];
-#endif
+ s = PyUnicode_AsWideCharString(str, &n1);
+ if (s == NULL)
+ goto exit;
/* assume no change in size, first */
- n1 = wcslen(s) + 1;
- buf = PyMem_Malloc(n1*sizeof(wchar_t));
+ n1 = n1 + 1;
+ buf = PyMem_Malloc(n1 * sizeof(wchar_t));
if (!buf) {
PyErr_NoMemory();
goto exit;
}
n2 = wcsxfrm(buf, s, n1);
- if (n2 >= n1) {
+ if (n2 >= (size_t)n1) {
/* more space needed */
- buf = PyMem_Realloc(buf, (n2+1)*sizeof(wchar_t));
- if (!buf) {
+ wchar_t * new_buf = PyMem_Realloc(buf, (n2+1)*sizeof(wchar_t));
+ if (!new_buf) {
PyErr_NoMemory();
goto exit;
}
+ buf = new_buf;
n2 = wcsxfrm(buf, s, n2+1);
}
result = PyUnicode_FromWideChar(buf, n2);
- exit:
- if (buf) PyMem_Free(buf);
-#if Py_UNICODE_SIZE != SIZEOF_WCHAR_T
- PyMem_Free(s);
-#endif
+exit:
+ if (buf)
+ PyMem_Free(buf);
+ if (s)
+ PyMem_Free(s);
return result;
}
#endif
@@ -485,7 +440,7 @@ PyLocale_nl_langinfo(PyObject* self, PyObject* args)
instead of an empty string for nl_langinfo(ERA). */
const char *result = nl_langinfo(item);
result = result != NULL ? result : "";
- return str2uni(result);
+ return PyUnicode_DecodeLocale(result, NULL);
}
PyErr_SetString(PyExc_ValueError, "unsupported langinfo constant");
return NULL;
@@ -504,7 +459,7 @@ PyIntl_gettext(PyObject* self, PyObject *args)
char *in;
if (!PyArg_ParseTuple(args, "s", &in))
return 0;
- return str2uni(gettext(in));
+ return PyUnicode_DecodeLocale(gettext(in), NULL);
}
PyDoc_STRVAR(dgettext__doc__,
@@ -517,7 +472,7 @@ PyIntl_dgettext(PyObject* self, PyObject *args)
char *domain, *in;
if (!PyArg_ParseTuple(args, "zs", &domain, &in))
return 0;
- return str2uni(dgettext(domain, in));
+ return PyUnicode_DecodeLocale(dgettext(domain, in), NULL);
}
PyDoc_STRVAR(dcgettext__doc__,
@@ -531,7 +486,7 @@ PyIntl_dcgettext(PyObject *self, PyObject *args)
int category;
if (!PyArg_ParseTuple(args, "zsi", &domain, &msgid, &category))
return 0;
- return str2uni(dcgettext(domain,msgid,category));
+ return PyUnicode_DecodeLocale(dcgettext(domain,msgid,category), NULL);
}
PyDoc_STRVAR(textdomain__doc__,
@@ -549,7 +504,7 @@ PyIntl_textdomain(PyObject* self, PyObject* args)
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
- return str2uni(domain);
+ return PyUnicode_DecodeLocale(domain, NULL);
}
PyDoc_STRVAR(bindtextdomain__doc__,
@@ -581,7 +536,7 @@ PyIntl_bindtextdomain(PyObject* self,PyObject*args)
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
- result = str2uni(current_dirname);
+ result = PyUnicode_DecodeLocale(current_dirname, NULL);
Py_XDECREF(dirname_bytes);
return result;
}
@@ -599,7 +554,7 @@ PyIntl_bind_textdomain_codeset(PyObject* self,PyObject*args)
return NULL;
codeset = bind_textdomain_codeset(domain, codeset);
if (codeset)
- return str2uni(codeset);
+ return PyUnicode_DecodeLocale(codeset, NULL);
Py_RETURN_NONE;
}
#endif
diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c
index cc412bfc23..4162be8340 100644
--- a/Modules/_lsprof.c
+++ b/Modules/_lsprof.c
@@ -176,36 +176,29 @@ normalizeUserObj(PyObject *obj)
if (fn->m_self == NULL) {
/* built-in function: look up the module name */
PyObject *mod = fn->m_module;
- const char *modname;
- if (mod && PyUnicode_Check(mod)) {
- /* XXX: The following will truncate module names with embedded
- * null-characters. It is unlikely that this can happen in
- * practice and the concequences are not serious enough to
- * introduce extra checks here.
- */
- modname = _PyUnicode_AsString(mod);
- if (modname == NULL) {
- modname = "<encoding error>";
- PyErr_Clear();
+ PyObject *modname = NULL;
+ if (mod != NULL) {
+ if (PyUnicode_Check(mod)) {
+ modname = mod;
+ Py_INCREF(modname);
}
- }
- else if (mod && PyModule_Check(mod)) {
- modname = PyModule_GetName(mod);
- if (modname == NULL) {
- PyErr_Clear();
- modname = "builtins";
+ else if (PyModule_Check(mod)) {
+ modname = PyModule_GetNameObject(mod);
+ if (modname == NULL)
+ PyErr_Clear();
}
}
- else {
- modname = "builtins";
+ if (modname != NULL) {
+ if (PyUnicode_CompareWithASCIIString(modname, "builtins") != 0) {
+ PyObject *result;
+ result = PyUnicode_FromFormat("<%U.%s>", modname,
+ fn->m_ml->ml_name);
+ Py_DECREF(modname);
+ return result;
+ }
+ Py_DECREF(modname);
}
- if (strcmp(modname, "builtins") != 0)
- return PyUnicode_FromFormat("<%s.%s>",
- modname,
- fn->m_ml->ml_name);
- else
- return PyUnicode_FromFormat("<%s>",
- fn->m_ml->ml_name);
+ return PyUnicode_FromFormat("<%s>", fn->m_ml->ml_name);
}
else {
/* built-in method: try to return
@@ -462,7 +455,6 @@ profiler_callback(PyObject *self, PyFrameObject *frame, int what,
PyTrace_RETURN event will be generated, so we don't need to
handle it. */
-#ifdef PyTrace_C_CALL /* not defined in Python <= 2.3 */
/* the Python function 'frame' is issuing a call to the built-in
function 'arg' */
case PyTrace_C_CALL:
@@ -484,7 +476,6 @@ profiler_callback(PyObject *self, PyFrameObject *frame, int what,
((PyCFunctionObject *)arg)->m_ml);
}
break;
-#endif
default:
break;
@@ -674,13 +665,7 @@ setBuiltins(ProfilerObject *pObj, int nvalue)
if (nvalue == 0)
pObj->flags &= ~POF_BUILTINS;
else if (nvalue > 0) {
-#ifndef PyTrace_C_CALL
- PyErr_SetString(PyExc_ValueError,
- "builtins=True requires Python >= 2.4");
- return -1;
-#else
pObj->flags |= POF_BUILTINS;
-#endif
}
return 0;
}
@@ -778,11 +763,7 @@ profiler_init(ProfilerObject *pObj, PyObject *args, PyObject *kw)
PyObject *timer = NULL;
double timeunit = 0.0;
int subcalls = 1;
-#ifdef PyTrace_C_CALL
int builtins = 1;
-#else
- int builtins = 0;
-#endif
static char *kwlist[] = {"timer", "timeunit",
"subcalls", "builtins", 0};
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
new file mode 100644
index 0000000000..643616052c
--- /dev/null
+++ b/Modules/_lzmamodule.c
@@ -0,0 +1,1304 @@
+/* _lzma - Low-level Python interface to liblzma.
+
+ Initial implementation by Per Øyvind Karlsen.
+ Rewritten by Nadeem Vawda.
+
+*/
+
+#define PY_SSIZE_T_CLEAN
+
+#include "Python.h"
+#include "structmember.h"
+#ifdef WITH_THREAD
+#include "pythread.h"
+#endif
+
+#include <stdarg.h>
+#include <string.h>
+
+#include <lzma.h>
+
+
+#ifndef PY_LONG_LONG
+#error "This module requires PY_LONG_LONG to be defined"
+#endif
+
+
+#ifdef WITH_THREAD
+#define ACQUIRE_LOCK(obj) do { \
+ if (!PyThread_acquire_lock((obj)->lock, 0)) { \
+ Py_BEGIN_ALLOW_THREADS \
+ PyThread_acquire_lock((obj)->lock, 1); \
+ Py_END_ALLOW_THREADS \
+ } } while (0)
+#define RELEASE_LOCK(obj) PyThread_release_lock((obj)->lock)
+#else
+#define ACQUIRE_LOCK(obj)
+#define RELEASE_LOCK(obj)
+#endif
+
+
+/* Container formats: */
+enum {
+ FORMAT_AUTO,
+ FORMAT_XZ,
+ FORMAT_ALONE,
+ FORMAT_RAW,
+};
+
+#define LZMA_CHECK_UNKNOWN (LZMA_CHECK_ID_MAX + 1)
+
+
+typedef struct {
+ PyObject_HEAD
+ lzma_stream lzs;
+ int flushed;
+#ifdef WITH_THREAD
+ PyThread_type_lock lock;
+#endif
+} Compressor;
+
+typedef struct {
+ PyObject_HEAD
+ lzma_stream lzs;
+ int check;
+ char eof;
+ PyObject *unused_data;
+#ifdef WITH_THREAD
+ PyThread_type_lock lock;
+#endif
+} Decompressor;
+
+/* LZMAError class object. */
+static PyObject *Error;
+
+/* An empty tuple, used by the filter specifier parsing code. */
+static PyObject *empty_tuple;
+
+
+/* Helper functions. */
+
+static int
+catch_lzma_error(lzma_ret lzret)
+{
+ switch (lzret) {
+ case LZMA_OK:
+ case LZMA_GET_CHECK:
+ case LZMA_NO_CHECK:
+ case LZMA_STREAM_END:
+ return 0;
+ case LZMA_UNSUPPORTED_CHECK:
+ PyErr_SetString(Error, "Unsupported integrity check");
+ return 1;
+ case LZMA_MEM_ERROR:
+ PyErr_NoMemory();
+ return 1;
+ case LZMA_MEMLIMIT_ERROR:
+ PyErr_SetString(Error, "Memory usage limit exceeded");
+ return 1;
+ case LZMA_FORMAT_ERROR:
+ PyErr_SetString(Error, "Input format not supported by decoder");
+ return 1;
+ case LZMA_OPTIONS_ERROR:
+ PyErr_SetString(Error, "Invalid or unsupported options");
+ return 1;
+ case LZMA_DATA_ERROR:
+ PyErr_SetString(Error, "Corrupt input data");
+ return 1;
+ case LZMA_BUF_ERROR:
+ PyErr_SetString(Error, "Insufficient buffer space");
+ return 1;
+ case LZMA_PROG_ERROR:
+ PyErr_SetString(Error, "Internal error");
+ return 1;
+ default:
+ PyErr_Format(Error, "Unrecognized error from liblzma: %d", lzret);
+ return 1;
+ }
+}
+
+#if BUFSIZ < 8192
+#define INITIAL_BUFFER_SIZE 8192
+#else
+#define INITIAL_BUFFER_SIZE BUFSIZ
+#endif
+
+static int
+grow_buffer(PyObject **buf)
+{
+ size_t size = PyBytes_GET_SIZE(*buf);
+ return _PyBytes_Resize(buf, size + (size >> 3) + 6);
+}
+
+
+/* Some custom type conversions for PyArg_ParseTupleAndKeywords(),
+ since the predefined conversion specifiers do not suit our needs:
+
+ uint32_t - the "I" (unsigned int) specifier is the right size, but
+ silently ignores overflows on conversion.
+
+ lzma_vli - the "K" (unsigned PY_LONG_LONG) specifier is the right
+ size, but like "I" it silently ignores overflows on conversion.
+
+ lzma_mode and lzma_match_finder - these are enumeration types, and
+ so the size of each is implementation-defined. Worse, different
+ enum types can be of different sizes within the same program, so
+ to be strictly correct, we need to define two separate converters.
+ */
+
+#define INT_TYPE_CONVERTER_FUNC(TYPE, FUNCNAME) \
+ static int \
+ FUNCNAME(PyObject *obj, void *ptr) \
+ { \
+ unsigned PY_LONG_LONG val; \
+ \
+ val = PyLong_AsUnsignedLongLong(obj); \
+ if (PyErr_Occurred()) \
+ return 0; \
+ if ((unsigned PY_LONG_LONG)(TYPE)val != val) { \
+ PyErr_SetString(PyExc_OverflowError, \
+ "Value too large for " #TYPE " type"); \
+ return 0; \
+ } \
+ *(TYPE *)ptr = (TYPE)val; \
+ return 1; \
+ }
+
+INT_TYPE_CONVERTER_FUNC(uint32_t, uint32_converter)
+INT_TYPE_CONVERTER_FUNC(lzma_vli, lzma_vli_converter)
+INT_TYPE_CONVERTER_FUNC(lzma_mode, lzma_mode_converter)
+INT_TYPE_CONVERTER_FUNC(lzma_match_finder, lzma_mf_converter)
+
+#undef INT_TYPE_CONVERTER_FUNC
+
+
+/* Filter specifier parsing.
+
+ This code handles converting filter specifiers (Python dicts) into
+ the C lzma_filter structs expected by liblzma. */
+
+static void *
+parse_filter_spec_lzma(PyObject *spec)
+{
+ static char *optnames[] = {"id", "preset", "dict_size", "lc", "lp",
+ "pb", "mode", "nice_len", "mf", "depth", NULL};
+ PyObject *id;
+ PyObject *preset_obj;
+ uint32_t preset = LZMA_PRESET_DEFAULT;
+ lzma_options_lzma *options;
+
+ /* First, fill in default values for all the options using a preset.
+ Then, override the defaults with any values given by the caller. */
+
+ preset_obj = PyMapping_GetItemString(spec, "preset");
+ if (preset_obj == NULL) {
+ if (PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_Clear();
+ else
+ return NULL;
+ } else {
+ int ok = uint32_converter(preset_obj, &preset);
+ Py_DECREF(preset_obj);
+ if (!ok)
+ return NULL;
+ }
+
+ options = (lzma_options_lzma *)PyMem_Malloc(sizeof *options);
+ if (options == NULL)
+ return PyErr_NoMemory();
+ memset(options, 0, sizeof *options);
+
+ if (lzma_lzma_preset(options, preset)) {
+ PyMem_Free(options);
+ PyErr_Format(Error, "Invalid compression preset: %d", preset);
+ return NULL;
+ }
+
+ if (!PyArg_ParseTupleAndKeywords(empty_tuple, spec,
+ "|OOO&O&O&O&O&O&O&O&", optnames,
+ &id, &preset_obj,
+ uint32_converter, &options->dict_size,
+ uint32_converter, &options->lc,
+ uint32_converter, &options->lp,
+ uint32_converter, &options->pb,
+ lzma_mode_converter, &options->mode,
+ uint32_converter, &options->nice_len,
+ lzma_mf_converter, &options->mf,
+ uint32_converter, &options->depth)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Invalid filter specifier for LZMA filter");
+ PyMem_Free(options);
+ options = NULL;
+ }
+ return options;
+}
+
+static void *
+parse_filter_spec_delta(PyObject *spec)
+{
+ static char *optnames[] = {"id", "dist", NULL};
+ PyObject *id;
+ uint32_t dist = 1;
+ lzma_options_delta *options;
+
+ if (!PyArg_ParseTupleAndKeywords(empty_tuple, spec, "|OO&", optnames,
+ &id, uint32_converter, &dist)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Invalid filter specifier for delta filter");
+ return NULL;
+ }
+
+ options = (lzma_options_delta *)PyMem_Malloc(sizeof *options);
+ if (options == NULL)
+ return PyErr_NoMemory();
+ memset(options, 0, sizeof *options);
+ options->type = LZMA_DELTA_TYPE_BYTE;
+ options->dist = dist;
+ return options;
+}
+
+static void *
+parse_filter_spec_bcj(PyObject *spec)
+{
+ static char *optnames[] = {"id", "start_offset", NULL};
+ PyObject *id;
+ uint32_t start_offset = 0;
+ lzma_options_bcj *options;
+
+ if (!PyArg_ParseTupleAndKeywords(empty_tuple, spec, "|OO&", optnames,
+ &id, uint32_converter, &start_offset)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Invalid filter specifier for BCJ filter");
+ return NULL;
+ }
+
+ options = (lzma_options_bcj *)PyMem_Malloc(sizeof *options);
+ if (options == NULL)
+ return PyErr_NoMemory();
+ memset(options, 0, sizeof *options);
+ options->start_offset = start_offset;
+ return options;
+}
+
+static void *
+parse_filter_spec(lzma_filter *f, PyObject *spec)
+{
+ PyObject *id_obj;
+
+ if (!PyMapping_Check(spec)) {
+ PyErr_SetString(PyExc_TypeError,
+ "Filter specifier must be a dict or dict-like object");
+ return NULL;
+ }
+ id_obj = PyMapping_GetItemString(spec, "id");
+ if (id_obj == NULL) {
+ if (PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_SetString(PyExc_ValueError,
+ "Filter specifier must have an \"id\" entry");
+ return NULL;
+ }
+ f->id = PyLong_AsUnsignedLongLong(id_obj);
+ Py_DECREF(id_obj);
+ if (PyErr_Occurred())
+ return NULL;
+
+ switch (f->id) {
+ case LZMA_FILTER_LZMA1:
+ case LZMA_FILTER_LZMA2:
+ f->options = parse_filter_spec_lzma(spec);
+ return f->options;
+ case LZMA_FILTER_DELTA:
+ f->options = parse_filter_spec_delta(spec);
+ return f->options;
+ case LZMA_FILTER_X86:
+ case LZMA_FILTER_POWERPC:
+ case LZMA_FILTER_IA64:
+ case LZMA_FILTER_ARM:
+ case LZMA_FILTER_ARMTHUMB:
+ case LZMA_FILTER_SPARC:
+ f->options = parse_filter_spec_bcj(spec);
+ return f->options;
+ default:
+ PyErr_Format(PyExc_ValueError, "Invalid filter ID: %llu", f->id);
+ return NULL;
+ }
+}
+
+static void
+free_filter_chain(lzma_filter filters[])
+{
+ int i;
+
+ for (i = 0; filters[i].id != LZMA_VLI_UNKNOWN; i++)
+ PyMem_Free(filters[i].options);
+}
+
+static int
+parse_filter_chain_spec(lzma_filter filters[], PyObject *filterspecs)
+{
+ Py_ssize_t i, num_filters;
+
+ num_filters = PySequence_Length(filterspecs);
+ if (num_filters == -1)
+ return -1;
+ if (num_filters > LZMA_FILTERS_MAX) {
+ PyErr_Format(PyExc_ValueError,
+ "Too many filters - liblzma supports a maximum of %d",
+ LZMA_FILTERS_MAX);
+ return -1;
+ }
+
+ for (i = 0; i < num_filters; i++) {
+ int ok = 1;
+ PyObject *spec = PySequence_GetItem(filterspecs, i);
+ if (spec == NULL || parse_filter_spec(&filters[i], spec) == NULL)
+ ok = 0;
+ Py_XDECREF(spec);
+ if (!ok) {
+ filters[i].id = LZMA_VLI_UNKNOWN;
+ free_filter_chain(filters);
+ return -1;
+ }
+ }
+ filters[num_filters].id = LZMA_VLI_UNKNOWN;
+ return 0;
+}
+
+
+/* Filter specifier construction.
+
+ This code handles converting C lzma_filter structs into
+ Python-level filter specifiers (represented as dicts). */
+
+static int
+spec_add_field(PyObject *spec, _Py_Identifier *key, unsigned PY_LONG_LONG value)
+{
+ int status;
+ PyObject *value_object;
+
+ value_object = PyLong_FromUnsignedLongLong(value);
+ if (value_object == NULL)
+ return -1;
+
+ status = _PyDict_SetItemId(spec, key, value_object);
+ Py_DECREF(value_object);
+ return status;
+}
+
+static PyObject *
+build_filter_spec(const lzma_filter *f)
+{
+ PyObject *spec;
+
+ spec = PyDict_New();
+ if (spec == NULL)
+ return NULL;
+
+#define ADD_FIELD(SOURCE, FIELD) \
+ do { \
+ _Py_IDENTIFIER(FIELD); \
+ if (spec_add_field(spec, &PyId_##FIELD, SOURCE->FIELD) == -1) \
+ goto error;\
+ } while (0)
+
+ ADD_FIELD(f, id);
+
+ switch (f->id) {
+ /* For LZMA1 filters, lzma_properties_{encode,decode}() only look at the
+ lc, lp, pb, and dict_size fields. For LZMA2 filters, only the
+ dict_size field is used. */
+ case LZMA_FILTER_LZMA1: {
+ lzma_options_lzma *options = f->options;
+ ADD_FIELD(options, lc);
+ ADD_FIELD(options, lp);
+ ADD_FIELD(options, pb);
+ ADD_FIELD(options, dict_size);
+ break;
+ }
+ case LZMA_FILTER_LZMA2: {
+ lzma_options_lzma *options = f->options;
+ ADD_FIELD(options, dict_size);
+ break;
+ }
+ case LZMA_FILTER_DELTA: {
+ lzma_options_delta *options = f->options;
+ ADD_FIELD(options, dist);
+ break;
+ }
+ case LZMA_FILTER_X86:
+ case LZMA_FILTER_POWERPC:
+ case LZMA_FILTER_IA64:
+ case LZMA_FILTER_ARM:
+ case LZMA_FILTER_ARMTHUMB:
+ case LZMA_FILTER_SPARC: {
+ lzma_options_bcj *options = f->options;
+ ADD_FIELD(options, start_offset);
+ break;
+ }
+ default:
+ PyErr_Format(PyExc_ValueError, "Invalid filter ID: %llu", f->id);
+ goto error;
+ }
+
+#undef ADD_FIELD
+
+ return spec;
+
+error:
+ Py_DECREF(spec);
+ return NULL;
+}
+
+
+/* LZMACompressor class. */
+
+static PyObject *
+compress(Compressor *c, uint8_t *data, size_t len, lzma_action action)
+{
+ size_t data_size = 0;
+ PyObject *result;
+
+ result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE);
+ if (result == NULL)
+ return NULL;
+ c->lzs.next_in = data;
+ c->lzs.avail_in = len;
+ c->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result);
+ c->lzs.avail_out = PyBytes_GET_SIZE(result);
+ for (;;) {
+ lzma_ret lzret;
+
+ Py_BEGIN_ALLOW_THREADS
+ lzret = lzma_code(&c->lzs, action);
+ data_size = (char *)c->lzs.next_out - PyBytes_AS_STRING(result);
+ Py_END_ALLOW_THREADS
+ if (catch_lzma_error(lzret))
+ goto error;
+ if ((action == LZMA_RUN && c->lzs.avail_in == 0) ||
+ (action == LZMA_FINISH && lzret == LZMA_STREAM_END)) {
+ break;
+ } else if (c->lzs.avail_out == 0) {
+ if (grow_buffer(&result) == -1)
+ goto error;
+ c->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size;
+ c->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size;
+ }
+ }
+ if (data_size != PyBytes_GET_SIZE(result))
+ if (_PyBytes_Resize(&result, data_size) == -1)
+ goto error;
+ return result;
+
+error:
+ Py_XDECREF(result);
+ return NULL;
+}
+
+PyDoc_STRVAR(Compressor_compress_doc,
+"compress(data) -> bytes\n"
+"\n"
+"Provide data to the compressor object. Returns a chunk of\n"
+"compressed data if possible, or b\"\" otherwise.\n"
+"\n"
+"When you have finished providing data to the compressor, call the\n"
+"flush() method to finish the conversion process.\n");
+
+static PyObject *
+Compressor_compress(Compressor *self, PyObject *args)
+{
+ Py_buffer buffer;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "y*:compress", &buffer))
+ return NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->flushed)
+ PyErr_SetString(PyExc_ValueError, "Compressor has been flushed");
+ else
+ result = compress(self, buffer.buf, buffer.len, LZMA_RUN);
+ RELEASE_LOCK(self);
+ PyBuffer_Release(&buffer);
+ return result;
+}
+
+PyDoc_STRVAR(Compressor_flush_doc,
+"flush() -> bytes\n"
+"\n"
+"Finish the compression process. Returns the compressed data left\n"
+"in internal buffers.\n"
+"\n"
+"The compressor object cannot be used after this method is called.\n");
+
+static PyObject *
+Compressor_flush(Compressor *self, PyObject *noargs)
+{
+ PyObject *result = NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->flushed) {
+ PyErr_SetString(PyExc_ValueError, "Repeated call to flush()");
+ } else {
+ self->flushed = 1;
+ result = compress(self, NULL, 0, LZMA_FINISH);
+ }
+ RELEASE_LOCK(self);
+ return result;
+}
+
+static PyObject *
+Compressor_getstate(Compressor *self, PyObject *noargs)
+{
+ PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+ Py_TYPE(self)->tp_name);
+ return NULL;
+}
+
+static int
+Compressor_init_xz(lzma_stream *lzs, int check, uint32_t preset,
+ PyObject *filterspecs)
+{
+ lzma_ret lzret;
+
+ if (filterspecs == Py_None) {
+ lzret = lzma_easy_encoder(lzs, preset, check);
+ } else {
+ lzma_filter filters[LZMA_FILTERS_MAX + 1];
+
+ if (parse_filter_chain_spec(filters, filterspecs) == -1)
+ return -1;
+ lzret = lzma_stream_encoder(lzs, filters, check);
+ free_filter_chain(filters);
+ }
+ if (catch_lzma_error(lzret))
+ return -1;
+ else
+ return 0;
+}
+
+static int
+Compressor_init_alone(lzma_stream *lzs, uint32_t preset, PyObject *filterspecs)
+{
+ lzma_ret lzret;
+
+ if (filterspecs == Py_None) {
+ lzma_options_lzma options;
+
+ if (lzma_lzma_preset(&options, preset)) {
+ PyErr_Format(Error, "Invalid compression preset: %d", preset);
+ return -1;
+ }
+ lzret = lzma_alone_encoder(lzs, &options);
+ } else {
+ lzma_filter filters[LZMA_FILTERS_MAX + 1];
+
+ if (parse_filter_chain_spec(filters, filterspecs) == -1)
+ return -1;
+ if (filters[0].id == LZMA_FILTER_LZMA1 &&
+ filters[1].id == LZMA_VLI_UNKNOWN) {
+ lzret = lzma_alone_encoder(lzs, filters[0].options);
+ } else {
+ PyErr_SetString(PyExc_ValueError,
+ "Invalid filter chain for FORMAT_ALONE - "
+ "must be a single LZMA1 filter");
+ lzret = LZMA_PROG_ERROR;
+ }
+ free_filter_chain(filters);
+ }
+ if (PyErr_Occurred() || catch_lzma_error(lzret))
+ return -1;
+ else
+ return 0;
+}
+
+static int
+Compressor_init_raw(lzma_stream *lzs, PyObject *filterspecs)
+{
+ lzma_filter filters[LZMA_FILTERS_MAX + 1];
+ lzma_ret lzret;
+
+ if (filterspecs == Py_None) {
+ PyErr_SetString(PyExc_ValueError,
+ "Must specify filters for FORMAT_RAW");
+ return -1;
+ }
+ if (parse_filter_chain_spec(filters, filterspecs) == -1)
+ return -1;
+ lzret = lzma_raw_encoder(lzs, filters);
+ free_filter_chain(filters);
+ if (catch_lzma_error(lzret))
+ return -1;
+ else
+ return 0;
+}
+
+static int
+Compressor_init(Compressor *self, PyObject *args, PyObject *kwargs)
+{
+ static char *arg_names[] = {"format", "check", "preset", "filters", NULL};
+ int format = FORMAT_XZ;
+ int check = -1;
+ uint32_t preset = LZMA_PRESET_DEFAULT;
+ PyObject *preset_obj = Py_None;
+ PyObject *filterspecs = Py_None;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "|iiOO:LZMACompressor", arg_names,
+ &format, &check, &preset_obj,
+ &filterspecs))
+ return -1;
+
+ if (format != FORMAT_XZ && check != -1 && check != LZMA_CHECK_NONE) {
+ PyErr_SetString(PyExc_ValueError,
+ "Integrity checks are only supported by FORMAT_XZ");
+ return -1;
+ }
+
+ if (preset_obj != Py_None && filterspecs != Py_None) {
+ PyErr_SetString(PyExc_ValueError,
+ "Cannot specify both preset and filter chain");
+ return -1;
+ }
+
+ if (preset_obj != Py_None)
+ if (!uint32_converter(preset_obj, &preset))
+ return -1;
+
+#ifdef WITH_THREAD
+ self->lock = PyThread_allocate_lock();
+ if (self->lock == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock");
+ return -1;
+ }
+#endif
+
+ self->flushed = 0;
+ switch (format) {
+ case FORMAT_XZ:
+ if (check == -1)
+ check = LZMA_CHECK_CRC64;
+ if (Compressor_init_xz(&self->lzs, check, preset, filterspecs) != 0)
+ break;
+ return 0;
+
+ case FORMAT_ALONE:
+ if (Compressor_init_alone(&self->lzs, preset, filterspecs) != 0)
+ break;
+ return 0;
+
+ case FORMAT_RAW:
+ if (Compressor_init_raw(&self->lzs, filterspecs) != 0)
+ break;
+ return 0;
+
+ default:
+ PyErr_Format(PyExc_ValueError,
+ "Invalid container format: %d", format);
+ break;
+ }
+
+#ifdef WITH_THREAD
+ PyThread_free_lock(self->lock);
+ self->lock = NULL;
+#endif
+ return -1;
+}
+
+static void
+Compressor_dealloc(Compressor *self)
+{
+ lzma_end(&self->lzs);
+#ifdef WITH_THREAD
+ if (self->lock != NULL)
+ PyThread_free_lock(self->lock);
+#endif
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef Compressor_methods[] = {
+ {"compress", (PyCFunction)Compressor_compress, METH_VARARGS,
+ Compressor_compress_doc},
+ {"flush", (PyCFunction)Compressor_flush, METH_NOARGS,
+ Compressor_flush_doc},
+ {"__getstate__", (PyCFunction)Compressor_getstate, METH_NOARGS},
+ {NULL}
+};
+
+PyDoc_STRVAR(Compressor_doc,
+"LZMACompressor(format=FORMAT_XZ, check=-1, preset=None, filters=None)\n"
+"\n"
+"Create a compressor object for compressing data incrementally.\n"
+"\n"
+"format specifies the container format to use for the output. This can\n"
+"be FORMAT_XZ (default), FORMAT_ALONE, or FORMAT_RAW.\n"
+"\n"
+"check specifies the integrity check to use. For FORMAT_XZ, the default\n"
+"is CHECK_CRC64. FORMAT_ALONE and FORMAT_RAW do not suport integrity\n"
+"checks; for these formats, check must be omitted, or be CHECK_NONE.\n"
+"\n"
+"The settings used by the compressor can be specified either as a\n"
+"preset compression level (with the 'preset' argument), or in detail\n"
+"as a custom filter chain (with the 'filters' argument). For FORMAT_XZ\n"
+"and FORMAT_ALONE, the default is to use the PRESET_DEFAULT preset\n"
+"level. For FORMAT_RAW, the caller must always specify a filter chain;\n"
+"the raw compressor does not support preset compression levels.\n"
+"\n"
+"preset (if provided) should be an integer in the range 0-9, optionally\n"
+"OR-ed with the constant PRESET_EXTREME.\n"
+"\n"
+"filters (if provided) should be a sequence of dicts. Each dict should\n"
+"have an entry for \"id\" indicating the ID of the filter, plus\n"
+"additional entries for options to the filter.\n"
+"\n"
+"For one-shot compression, use the compress() function instead.\n");
+
+static PyTypeObject Compressor_type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "_lzma.LZMACompressor", /* tp_name */
+ sizeof(Compressor), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Compressor_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Compressor_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Compressor_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)Compressor_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
+};
+
+
+/* LZMADecompressor class. */
+
+static PyObject *
+decompress(Decompressor *d, uint8_t *data, size_t len)
+{
+ size_t data_size = 0;
+ PyObject *result;
+
+ result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE);
+ if (result == NULL)
+ return NULL;
+ d->lzs.next_in = data;
+ d->lzs.avail_in = len;
+ d->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result);
+ d->lzs.avail_out = PyBytes_GET_SIZE(result);
+ for (;;) {
+ lzma_ret lzret;
+
+ Py_BEGIN_ALLOW_THREADS
+ lzret = lzma_code(&d->lzs, LZMA_RUN);
+ data_size = (char *)d->lzs.next_out - PyBytes_AS_STRING(result);
+ Py_END_ALLOW_THREADS
+ if (catch_lzma_error(lzret))
+ goto error;
+ if (lzret == LZMA_GET_CHECK || lzret == LZMA_NO_CHECK)
+ d->check = lzma_get_check(&d->lzs);
+ if (lzret == LZMA_STREAM_END) {
+ d->eof = 1;
+ if (d->lzs.avail_in > 0) {
+ Py_CLEAR(d->unused_data);
+ d->unused_data = PyBytes_FromStringAndSize(
+ (char *)d->lzs.next_in, d->lzs.avail_in);
+ if (d->unused_data == NULL)
+ goto error;
+ }
+ break;
+ } else if (d->lzs.avail_in == 0) {
+ break;
+ } else if (d->lzs.avail_out == 0) {
+ if (grow_buffer(&result) == -1)
+ goto error;
+ d->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size;
+ d->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size;
+ }
+ }
+ if (data_size != PyBytes_GET_SIZE(result))
+ if (_PyBytes_Resize(&result, data_size) == -1)
+ goto error;
+ return result;
+
+error:
+ Py_XDECREF(result);
+ return NULL;
+}
+
+PyDoc_STRVAR(Decompressor_decompress_doc,
+"decompress(data) -> bytes\n"
+"\n"
+"Provide data to the decompressor object. Returns a chunk of\n"
+"decompressed data if possible, or b\"\" otherwise.\n"
+"\n"
+"Attempting to decompress data after the end of the stream is\n"
+"reached raises an EOFError. Any data found after the end of the\n"
+"stream is ignored, and saved in the unused_data attribute.\n");
+
+static PyObject *
+Decompressor_decompress(Decompressor *self, PyObject *args)
+{
+ Py_buffer buffer;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "y*:decompress", &buffer))
+ return NULL;
+
+ ACQUIRE_LOCK(self);
+ if (self->eof)
+ PyErr_SetString(PyExc_EOFError, "Already at end of stream");
+ else
+ result = decompress(self, buffer.buf, buffer.len);
+ RELEASE_LOCK(self);
+ PyBuffer_Release(&buffer);
+ return result;
+}
+
+static PyObject *
+Decompressor_getstate(Decompressor *self, PyObject *noargs)
+{
+ PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+ Py_TYPE(self)->tp_name);
+ return NULL;
+}
+
+static int
+Decompressor_init_raw(lzma_stream *lzs, PyObject *filterspecs)
+{
+ lzma_filter filters[LZMA_FILTERS_MAX + 1];
+ lzma_ret lzret;
+
+ if (parse_filter_chain_spec(filters, filterspecs) == -1)
+ return -1;
+ lzret = lzma_raw_decoder(lzs, filters);
+ free_filter_chain(filters);
+ if (catch_lzma_error(lzret))
+ return -1;
+ else
+ return 0;
+}
+
+static int
+Decompressor_init(Decompressor *self, PyObject *args, PyObject *kwargs)
+{
+ static char *arg_names[] = {"format", "memlimit", "filters", NULL};
+ const uint32_t decoder_flags = LZMA_TELL_ANY_CHECK | LZMA_TELL_NO_CHECK;
+ int format = FORMAT_AUTO;
+ uint64_t memlimit = UINT64_MAX;
+ PyObject *memlimit_obj = Py_None;
+ PyObject *filterspecs = Py_None;
+ lzma_ret lzret;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "|iOO:LZMADecompressor", arg_names,
+ &format, &memlimit_obj, &filterspecs))
+ return -1;
+
+ if (memlimit_obj != Py_None) {
+ if (format == FORMAT_RAW) {
+ PyErr_SetString(PyExc_ValueError,
+ "Cannot specify memory limit with FORMAT_RAW");
+ return -1;
+ }
+ memlimit = PyLong_AsUnsignedLongLong(memlimit_obj);
+ if (PyErr_Occurred())
+ return -1;
+ }
+
+ if (format == FORMAT_RAW && filterspecs == Py_None) {
+ PyErr_SetString(PyExc_ValueError,
+ "Must specify filters for FORMAT_RAW");
+ return -1;
+ } else if (format != FORMAT_RAW && filterspecs != Py_None) {
+ PyErr_SetString(PyExc_ValueError,
+ "Cannot specify filters except with FORMAT_RAW");
+ return -1;
+ }
+
+#ifdef WITH_THREAD
+ self->lock = PyThread_allocate_lock();
+ if (self->lock == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock");
+ return -1;
+ }
+#endif
+
+ self->check = LZMA_CHECK_UNKNOWN;
+ self->unused_data = PyBytes_FromStringAndSize(NULL, 0);
+ if (self->unused_data == NULL)
+ goto error;
+
+ switch (format) {
+ case FORMAT_AUTO:
+ lzret = lzma_auto_decoder(&self->lzs, memlimit, decoder_flags);
+ if (catch_lzma_error(lzret))
+ break;
+ return 0;
+
+ case FORMAT_XZ:
+ lzret = lzma_stream_decoder(&self->lzs, memlimit, decoder_flags);
+ if (catch_lzma_error(lzret))
+ break;
+ return 0;
+
+ case FORMAT_ALONE:
+ self->check = LZMA_CHECK_NONE;
+ lzret = lzma_alone_decoder(&self->lzs, memlimit);
+ if (catch_lzma_error(lzret))
+ break;
+ return 0;
+
+ case FORMAT_RAW:
+ self->check = LZMA_CHECK_NONE;
+ if (Decompressor_init_raw(&self->lzs, filterspecs) == -1)
+ break;
+ return 0;
+
+ default:
+ PyErr_Format(PyExc_ValueError,
+ "Invalid container format: %d", format);
+ break;
+ }
+
+error:
+ Py_CLEAR(self->unused_data);
+#ifdef WITH_THREAD
+ PyThread_free_lock(self->lock);
+ self->lock = NULL;
+#endif
+ return -1;
+}
+
+static void
+Decompressor_dealloc(Decompressor *self)
+{
+ lzma_end(&self->lzs);
+ Py_CLEAR(self->unused_data);
+#ifdef WITH_THREAD
+ if (self->lock != NULL)
+ PyThread_free_lock(self->lock);
+#endif
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef Decompressor_methods[] = {
+ {"decompress", (PyCFunction)Decompressor_decompress, METH_VARARGS,
+ Decompressor_decompress_doc},
+ {"__getstate__", (PyCFunction)Decompressor_getstate, METH_NOARGS},
+ {NULL}
+};
+
+PyDoc_STRVAR(Decompressor_check_doc,
+"ID of the integrity check used by the input stream.");
+
+PyDoc_STRVAR(Decompressor_eof_doc,
+"True if the end-of-stream marker has been reached.");
+
+PyDoc_STRVAR(Decompressor_unused_data_doc,
+"Data found after the end of the compressed stream.");
+
+static PyMemberDef Decompressor_members[] = {
+ {"check", T_INT, offsetof(Decompressor, check), READONLY,
+ Decompressor_check_doc},
+ {"eof", T_BOOL, offsetof(Decompressor, eof), READONLY,
+ Decompressor_eof_doc},
+ {"unused_data", T_OBJECT_EX, offsetof(Decompressor, unused_data), READONLY,
+ Decompressor_unused_data_doc},
+ {NULL}
+};
+
+PyDoc_STRVAR(Decompressor_doc,
+"LZMADecompressor(format=FORMAT_AUTO, memlimit=None, filters=None)\n"
+"\n"
+"Create a decompressor object for decompressing data incrementally.\n"
+"\n"
+"format specifies the container format of the input stream. If this is\n"
+"FORMAT_AUTO (the default), the decompressor will automatically detect\n"
+"whether the input is FORMAT_XZ or FORMAT_ALONE. Streams created with\n"
+"FORMAT_RAW cannot be autodetected.\n"
+"\n"
+"memlimit can be specified to limit the amount of memory used by the\n"
+"decompressor. This will cause decompression to fail if the input\n"
+"cannot be decompressed within the given limit.\n"
+"\n"
+"filters specifies a custom filter chain. This argument is required for\n"
+"FORMAT_RAW, and not accepted with any other format. When provided,\n"
+"this should be a sequence of dicts, each indicating the ID and options\n"
+"for a single filter.\n"
+"\n"
+"For one-shot decompression, use the decompress() function instead.\n");
+
+static PyTypeObject Decompressor_type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "_lzma.LZMADecompressor", /* tp_name */
+ sizeof(Decompressor), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Decompressor_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Decompressor_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Decompressor_methods, /* tp_methods */
+ Decompressor_members, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)Decompressor_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
+};
+
+
+/* Module-level functions. */
+
+PyDoc_STRVAR(is_check_supported_doc,
+"is_check_supported(check_id) -> bool\n"
+"\n"
+"Test whether the given integrity check is supported.\n"
+"\n"
+"Always returns True for CHECK_NONE and CHECK_CRC32.\n");
+
+static PyObject *
+is_check_supported(PyObject *self, PyObject *args)
+{
+ int check_id;
+
+ if (!PyArg_ParseTuple(args, "i:is_check_supported", &check_id))
+ return NULL;
+
+ return PyBool_FromLong(lzma_check_is_supported(check_id));
+}
+
+
+PyDoc_STRVAR(_encode_filter_properties_doc,
+"_encode_filter_properties(filter) -> bytes\n"
+"\n"
+"Return a bytes object encoding the options (properties) of the filter\n"
+"specified by *filter* (a dict).\n"
+"\n"
+"The result does not include the filter ID itself, only the options.\n");
+
+static PyObject *
+_encode_filter_properties(PyObject *self, PyObject *args)
+{
+ PyObject *filterspec;
+ lzma_filter filter;
+ lzma_ret lzret;
+ uint32_t encoded_size;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "O:_encode_filter_properties", &filterspec))
+ return NULL;
+
+ if (parse_filter_spec(&filter, filterspec) == NULL)
+ return NULL;
+
+ lzret = lzma_properties_size(&encoded_size, &filter);
+ if (catch_lzma_error(lzret))
+ goto error;
+
+ result = PyBytes_FromStringAndSize(NULL, encoded_size);
+ if (result == NULL)
+ goto error;
+
+ lzret = lzma_properties_encode(
+ &filter, (uint8_t *)PyBytes_AS_STRING(result));
+ if (catch_lzma_error(lzret))
+ goto error;
+
+ PyMem_Free(filter.options);
+ return result;
+
+error:
+ Py_XDECREF(result);
+ PyMem_Free(filter.options);
+ return NULL;
+}
+
+
+PyDoc_STRVAR(_decode_filter_properties_doc,
+"_decode_filter_properties(filter_id, encoded_props) -> dict\n"
+"\n"
+"Return a dict describing a filter with ID *filter_id*, and options\n"
+"(properties) decoded from the bytes object *encoded_props*.\n");
+
+static PyObject *
+_decode_filter_properties(PyObject *self, PyObject *args)
+{
+ Py_buffer encoded_props;
+ lzma_filter filter;
+ lzma_ret lzret;
+ PyObject *result = NULL;
+
+ if (!PyArg_ParseTuple(args, "O&y*:_decode_filter_properties",
+ lzma_vli_converter, &filter.id, &encoded_props))
+ return NULL;
+
+ lzret = lzma_properties_decode(
+ &filter, NULL, encoded_props.buf, encoded_props.len);
+ PyBuffer_Release(&encoded_props);
+ if (catch_lzma_error(lzret))
+ return NULL;
+
+ result = build_filter_spec(&filter);
+
+ /* We use vanilla free() here instead of PyMem_Free() - filter.options was
+ allocated by lzma_properties_decode() using the default allocator. */
+ free(filter.options);
+ return result;
+}
+
+
+/* Module initialization. */
+
+static PyMethodDef module_methods[] = {
+ {"is_check_supported", (PyCFunction)is_check_supported,
+ METH_VARARGS, is_check_supported_doc},
+ {"_encode_filter_properties", (PyCFunction)_encode_filter_properties,
+ METH_VARARGS, _encode_filter_properties_doc},
+ {"_decode_filter_properties", (PyCFunction)_decode_filter_properties,
+ METH_VARARGS, _decode_filter_properties_doc},
+ {NULL}
+};
+
+static PyModuleDef _lzmamodule = {
+ PyModuleDef_HEAD_INIT,
+ "_lzma",
+ NULL,
+ -1,
+ module_methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+};
+
+/* Some of our constants are more than 32 bits wide, so PyModule_AddIntConstant
+ would not work correctly on platforms with 32-bit longs. */
+static int
+module_add_int_constant(PyObject *m, const char *name, PY_LONG_LONG value)
+{
+ PyObject *o = PyLong_FromLongLong(value);
+ if (o == NULL)
+ return -1;
+ if (PyModule_AddObject(m, name, o) == 0)
+ return 0;
+ Py_DECREF(o);
+ return -1;
+}
+
+#define ADD_INT_PREFIX_MACRO(m, macro) \
+ module_add_int_constant(m, #macro, LZMA_ ## macro)
+
+PyMODINIT_FUNC
+PyInit__lzma(void)
+{
+ PyObject *m;
+
+ empty_tuple = PyTuple_New(0);
+ if (empty_tuple == NULL)
+ return NULL;
+
+ m = PyModule_Create(&_lzmamodule);
+ if (m == NULL)
+ return NULL;
+
+ if (PyModule_AddIntMacro(m, FORMAT_AUTO) == -1 ||
+ PyModule_AddIntMacro(m, FORMAT_XZ) == -1 ||
+ PyModule_AddIntMacro(m, FORMAT_ALONE) == -1 ||
+ PyModule_AddIntMacro(m, FORMAT_RAW) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_NONE) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_CRC32) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_CRC64) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_SHA256) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_ID_MAX) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, CHECK_UNKNOWN) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_LZMA1) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_LZMA2) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_DELTA) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_X86) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_IA64) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_ARM) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_ARMTHUMB) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_SPARC) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, FILTER_POWERPC) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MF_HC3) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MF_HC4) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MF_BT2) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MF_BT3) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MF_BT4) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MODE_FAST) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, MODE_NORMAL) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, PRESET_DEFAULT) == -1 ||
+ ADD_INT_PREFIX_MACRO(m, PRESET_EXTREME) == -1)
+ return NULL;
+
+ Error = PyErr_NewExceptionWithDoc(
+ "_lzma.LZMAError", "Call to liblzma failed.", NULL, NULL);
+ if (Error == NULL)
+ return NULL;
+ Py_INCREF(Error);
+ if (PyModule_AddObject(m, "LZMAError", Error) == -1)
+ return NULL;
+
+ if (PyType_Ready(&Compressor_type) == -1)
+ return NULL;
+ Py_INCREF(&Compressor_type);
+ if (PyModule_AddObject(m, "LZMACompressor",
+ (PyObject *)&Compressor_type) == -1)
+ return NULL;
+
+ if (PyType_Ready(&Decompressor_type) == -1)
+ return NULL;
+ Py_INCREF(&Decompressor_type);
+ if (PyModule_AddObject(m, "LZMADecompressor",
+ (PyObject *)&Decompressor_type) == -1)
+ return NULL;
+
+ return m;
+}
diff --git a/Modules/_math.c b/Modules/_math.c
index fe75a36ec5..a14ff0605f 100644
--- a/Modules/_math.c
+++ b/Modules/_math.c
@@ -22,7 +22,9 @@
static const double ln2 = 6.93147180559945286227E-01;
static const double two_pow_m28 = 3.7252902984619141E-09; /* 2**-28 */
static const double two_pow_p28 = 268435456.0; /* 2**28 */
+#ifndef Py_NAN
static const double zero = 0.0;
+#endif
/* acosh(x)
* Method :
diff --git a/Modules/_multiprocessing/connection.h b/Modules/_multiprocessing/connection.h
deleted file mode 100644
index 002d5aa9cc..0000000000
--- a/Modules/_multiprocessing/connection.h
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * Definition of a `Connection` type.
- * Used by `socket_connection.c` and `pipe_connection.c`.
- *
- * connection.h
- *
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
- */
-
-#ifndef CONNECTION_H
-#define CONNECTION_H
-
-/*
- * Read/write flags
- */
-
-#define READABLE 1
-#define WRITABLE 2
-
-#define CHECK_READABLE(self) \
- if (!(self->flags & READABLE)) { \
- PyErr_SetString(PyExc_IOError, "connection is write-only"); \
- return NULL; \
- }
-
-#define CHECK_WRITABLE(self) \
- if (!(self->flags & WRITABLE)) { \
- PyErr_SetString(PyExc_IOError, "connection is read-only"); \
- return NULL; \
- }
-
-/*
- * Allocation and deallocation
- */
-
-static PyObject *
-connection_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- ConnectionObject *self;
- HANDLE handle;
- BOOL readable = TRUE, writable = TRUE;
-
- static char *kwlist[] = {"handle", "readable", "writable", NULL};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, F_HANDLE "|ii", kwlist,
- &handle, &readable, &writable))
- return NULL;
-
- if (handle == INVALID_HANDLE_VALUE || (Py_ssize_t)handle < 0) {
- PyErr_Format(PyExc_IOError, "invalid handle %zd",
- (Py_ssize_t)handle);
- return NULL;
- }
-
- if (!readable && !writable) {
- PyErr_SetString(PyExc_ValueError,
- "either readable or writable must be true");
- return NULL;
- }
-
- self = PyObject_New(ConnectionObject, type);
- if (self == NULL)
- return NULL;
-
- self->weakreflist = NULL;
- self->handle = handle;
- self->flags = 0;
-
- if (readable)
- self->flags |= READABLE;
- if (writable)
- self->flags |= WRITABLE;
- assert(self->flags >= 1 && self->flags <= 3);
-
- return (PyObject*)self;
-}
-
-static void
-connection_dealloc(ConnectionObject* self)
-{
- if (self->weakreflist != NULL)
- PyObject_ClearWeakRefs((PyObject*)self);
-
- if (self->handle != INVALID_HANDLE_VALUE) {
- Py_BEGIN_ALLOW_THREADS
- CLOSE(self->handle);
- Py_END_ALLOW_THREADS
- }
- PyObject_Del(self);
-}
-
-/*
- * Functions for transferring buffers
- */
-
-static PyObject *
-connection_sendbytes(ConnectionObject *self, PyObject *args)
-{
- Py_buffer pbuffer;
- char *buffer;
- Py_ssize_t length, offset=0, size=PY_SSIZE_T_MIN;
- int res;
-
- if (!PyArg_ParseTuple(args, F_RBUFFER "*|" F_PY_SSIZE_T F_PY_SSIZE_T,
- &pbuffer, &offset, &size))
- return NULL;
- buffer = pbuffer.buf;
- length = pbuffer.len;
-
- CHECK_WRITABLE(self); /* XXX release buffer in case of failure */
-
- if (offset < 0) {
- PyBuffer_Release(&pbuffer);
- PyErr_SetString(PyExc_ValueError, "offset is negative");
- return NULL;
- }
- if (length < offset) {
- PyBuffer_Release(&pbuffer);
- PyErr_SetString(PyExc_ValueError, "buffer length < offset");
- return NULL;
- }
-
- if (size == PY_SSIZE_T_MIN) {
- size = length - offset;
- } else {
- if (size < 0) {
- PyBuffer_Release(&pbuffer);
- PyErr_SetString(PyExc_ValueError, "size is negative");
- return NULL;
- }
- if (offset + size > length) {
- PyBuffer_Release(&pbuffer);
- PyErr_SetString(PyExc_ValueError,
- "buffer length < offset + size");
- return NULL;
- }
- }
-
- res = conn_send_string(self, buffer + offset, size);
-
- PyBuffer_Release(&pbuffer);
- if (res < 0) {
- if (PyErr_Occurred())
- return NULL;
- else
- return mp_SetError(PyExc_IOError, res);
- }
-
- Py_RETURN_NONE;
-}
-
-static PyObject *
-connection_recvbytes(ConnectionObject *self, PyObject *args)
-{
- char *freeme = NULL;
- Py_ssize_t res, maxlength = PY_SSIZE_T_MAX;
- PyObject *result = NULL;
-
- if (!PyArg_ParseTuple(args, "|" F_PY_SSIZE_T, &maxlength))
- return NULL;
-
- CHECK_READABLE(self);
-
- if (maxlength < 0) {
- PyErr_SetString(PyExc_ValueError, "maxlength < 0");
- return NULL;
- }
-
- res = conn_recv_string(self, self->buffer, CONNECTION_BUFFER_SIZE,
- &freeme, maxlength);
-
- if (res < 0) {
- if (res == MP_BAD_MESSAGE_LENGTH) {
- if ((self->flags & WRITABLE) == 0) {
- Py_BEGIN_ALLOW_THREADS
- CLOSE(self->handle);
- Py_END_ALLOW_THREADS
- self->handle = INVALID_HANDLE_VALUE;
- } else {
- self->flags = WRITABLE;
- }
- }
- mp_SetError(PyExc_IOError, res);
- } else {
- if (freeme == NULL) {
- result = PyBytes_FromStringAndSize(self->buffer, res);
- } else {
- result = PyBytes_FromStringAndSize(freeme, res);
- PyMem_Free(freeme);
- }
- }
-
- return result;
-}
-
-static PyObject *
-connection_recvbytes_into(ConnectionObject *self, PyObject *args)
-{
- char *freeme = NULL, *buffer = NULL;
- Py_ssize_t res, length, offset = 0;
- PyObject *result = NULL;
- Py_buffer pbuf;
-
- CHECK_READABLE(self);
-
- if (!PyArg_ParseTuple(args, "w*|" F_PY_SSIZE_T,
- &pbuf, &offset))
- return NULL;
-
- buffer = pbuf.buf;
- length = pbuf.len;
-
- if (offset < 0) {
- PyErr_SetString(PyExc_ValueError, "negative offset");
- goto _error;
- }
-
- if (offset > length) {
- PyErr_SetString(PyExc_ValueError, "offset too large");
- goto _error;
- }
-
- res = conn_recv_string(self, buffer+offset, length-offset,
- &freeme, PY_SSIZE_T_MAX);
-
- if (res < 0) {
- if (res == MP_BAD_MESSAGE_LENGTH) {
- if ((self->flags & WRITABLE) == 0) {
- Py_BEGIN_ALLOW_THREADS
- CLOSE(self->handle);
- Py_END_ALLOW_THREADS
- self->handle = INVALID_HANDLE_VALUE;
- } else {
- self->flags = WRITABLE;
- }
- }
- mp_SetError(PyExc_IOError, res);
- } else {
- if (freeme == NULL) {
- result = PyInt_FromSsize_t(res);
- } else {
- result = PyObject_CallFunction(BufferTooShort,
- F_RBUFFER "#",
- freeme, res);
- PyMem_Free(freeme);
- if (result) {
- PyErr_SetObject(BufferTooShort, result);
- Py_DECREF(result);
- }
- goto _error;
- }
- }
-
-_cleanup:
- PyBuffer_Release(&pbuf);
- return result;
-
-_error:
- result = NULL;
- goto _cleanup;
-}
-
-/*
- * Functions for transferring objects
- */
-
-static PyObject *
-connection_send_obj(ConnectionObject *self, PyObject *obj)
-{
- char *buffer;
- int res;
- Py_ssize_t length;
- PyObject *pickled_string = NULL;
-
- CHECK_WRITABLE(self);
-
- pickled_string = PyObject_CallFunctionObjArgs(pickle_dumps, obj,
- pickle_protocol, NULL);
- if (!pickled_string)
- goto failure;
-
- if (PyBytes_AsStringAndSize(pickled_string, &buffer, &length) < 0)
- goto failure;
-
- res = conn_send_string(self, buffer, (int)length);
-
- if (res < 0) {
- mp_SetError(PyExc_IOError, res);
- goto failure;
- }
-
- Py_XDECREF(pickled_string);
- Py_RETURN_NONE;
-
- failure:
- Py_XDECREF(pickled_string);
- return NULL;
-}
-
-static PyObject *
-connection_recv_obj(ConnectionObject *self)
-{
- char *freeme = NULL;
- Py_ssize_t res;
- PyObject *temp = NULL, *result = NULL;
-
- CHECK_READABLE(self);
-
- res = conn_recv_string(self, self->buffer, CONNECTION_BUFFER_SIZE,
- &freeme, PY_SSIZE_T_MAX);
-
- if (res < 0) {
- if (res == MP_BAD_MESSAGE_LENGTH) {
- if ((self->flags & WRITABLE) == 0) {
- Py_BEGIN_ALLOW_THREADS
- CLOSE(self->handle);
- Py_END_ALLOW_THREADS
- self->handle = INVALID_HANDLE_VALUE;
- } else {
- self->flags = WRITABLE;
- }
- }
- mp_SetError(PyExc_IOError, res);
- } else {
- if (freeme == NULL) {
- temp = PyBytes_FromStringAndSize(self->buffer, res);
- } else {
- temp = PyBytes_FromStringAndSize(freeme, res);
- PyMem_Free(freeme);
- }
- }
-
- if (temp)
- result = PyObject_CallFunctionObjArgs(pickle_loads,
- temp, NULL);
- Py_XDECREF(temp);
- return result;
-}
-
-/*
- * Other functions
- */
-
-static PyObject *
-connection_poll(ConnectionObject *self, PyObject *args)
-{
- PyObject *timeout_obj = NULL;
- double timeout = 0.0;
- int res;
-
- CHECK_READABLE(self);
-
- if (!PyArg_ParseTuple(args, "|O", &timeout_obj))
- return NULL;
-
- if (timeout_obj == NULL) {
- timeout = 0.0;
- } else if (timeout_obj == Py_None) {
- timeout = -1.0; /* block forever */
- } else {
- timeout = PyFloat_AsDouble(timeout_obj);
- if (PyErr_Occurred())
- return NULL;
- if (timeout < 0.0)
- timeout = 0.0;
- }
-
- Py_BEGIN_ALLOW_THREADS
- res = conn_poll(self, timeout, _save);
- Py_END_ALLOW_THREADS
-
- switch (res) {
- case TRUE:
- Py_RETURN_TRUE;
- case FALSE:
- Py_RETURN_FALSE;
- default:
- return mp_SetError(PyExc_IOError, res);
- }
-}
-
-static PyObject *
-connection_fileno(ConnectionObject* self)
-{
- if (self->handle == INVALID_HANDLE_VALUE) {
- PyErr_SetString(PyExc_IOError, "handle is invalid");
- return NULL;
- }
- return PyInt_FromLong((long)self->handle);
-}
-
-static PyObject *
-connection_close(ConnectionObject *self)
-{
- if (self->handle != INVALID_HANDLE_VALUE) {
- Py_BEGIN_ALLOW_THREADS
- CLOSE(self->handle);
- Py_END_ALLOW_THREADS
- self->handle = INVALID_HANDLE_VALUE;
- }
-
- Py_RETURN_NONE;
-}
-
-static PyObject *
-connection_repr(ConnectionObject *self)
-{
- static char *conn_type[] = {"read-only", "write-only", "read-write"};
-
- assert(self->flags >= 1 && self->flags <= 3);
- return FROM_FORMAT("<%s %s, handle %zd>",
- conn_type[self->flags - 1],
- CONNECTION_NAME, (Py_ssize_t)self->handle);
-}
-
-/*
- * Getters and setters
- */
-
-static PyObject *
-connection_closed(ConnectionObject *self, void *closure)
-{
- return PyBool_FromLong((long)(self->handle == INVALID_HANDLE_VALUE));
-}
-
-static PyObject *
-connection_readable(ConnectionObject *self, void *closure)
-{
- return PyBool_FromLong((long)(self->flags & READABLE));
-}
-
-static PyObject *
-connection_writable(ConnectionObject *self, void *closure)
-{
- return PyBool_FromLong((long)(self->flags & WRITABLE));
-}
-
-/*
- * Tables
- */
-
-static PyMethodDef connection_methods[] = {
- {"send_bytes", (PyCFunction)connection_sendbytes, METH_VARARGS,
- "send the byte data from a readable buffer-like object"},
- {"recv_bytes", (PyCFunction)connection_recvbytes, METH_VARARGS,
- "receive byte data as a string"},
- {"recv_bytes_into",(PyCFunction)connection_recvbytes_into,METH_VARARGS,
- "receive byte data into a writeable buffer-like object\n"
- "returns the number of bytes read"},
-
- {"send", (PyCFunction)connection_send_obj, METH_O,
- "send a (picklable) object"},
- {"recv", (PyCFunction)connection_recv_obj, METH_NOARGS,
- "receive a (picklable) object"},
-
- {"poll", (PyCFunction)connection_poll, METH_VARARGS,
- "whether there is any input available to be read"},
- {"fileno", (PyCFunction)connection_fileno, METH_NOARGS,
- "file descriptor or handle of the connection"},
- {"close", (PyCFunction)connection_close, METH_NOARGS,
- "close the connection"},
-
- {NULL} /* Sentinel */
-};
-
-static PyGetSetDef connection_getset[] = {
- {"closed", (getter)connection_closed, NULL,
- "True if the connection is closed", NULL},
- {"readable", (getter)connection_readable, NULL,
- "True if the connection is readable", NULL},
- {"writable", (getter)connection_writable, NULL,
- "True if the connection is writable", NULL},
- {NULL}
-};
-
-/*
- * Connection type
- */
-
-PyDoc_STRVAR(connection_doc,
- "Connection type whose constructor signature is\n\n"
- " Connection(handle, readable=True, writable=True).\n\n"
- "The constructor does *not* duplicate the handle.");
-
-PyTypeObject CONNECTION_TYPE = {
- PyVarObject_HEAD_INIT(NULL, 0)
- /* tp_name */ "_multiprocessing." CONNECTION_NAME,
- /* tp_basicsize */ sizeof(ConnectionObject),
- /* tp_itemsize */ 0,
- /* tp_dealloc */ (destructor)connection_dealloc,
- /* tp_print */ 0,
- /* tp_getattr */ 0,
- /* tp_setattr */ 0,
- /* tp_reserved */ 0,
- /* tp_repr */ (reprfunc)connection_repr,
- /* tp_as_number */ 0,
- /* tp_as_sequence */ 0,
- /* tp_as_mapping */ 0,
- /* tp_hash */ 0,
- /* tp_call */ 0,
- /* tp_str */ 0,
- /* tp_getattro */ 0,
- /* tp_setattro */ 0,
- /* tp_as_buffer */ 0,
- /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_HAVE_WEAKREFS,
- /* tp_doc */ connection_doc,
- /* tp_traverse */ 0,
- /* tp_clear */ 0,
- /* tp_richcompare */ 0,
- /* tp_weaklistoffset */ offsetof(ConnectionObject, weakreflist),
- /* tp_iter */ 0,
- /* tp_iternext */ 0,
- /* tp_methods */ connection_methods,
- /* tp_members */ 0,
- /* tp_getset */ connection_getset,
- /* tp_base */ 0,
- /* tp_dict */ 0,
- /* tp_descr_get */ 0,
- /* tp_descr_set */ 0,
- /* tp_dictoffset */ 0,
- /* tp_init */ 0,
- /* tp_alloc */ 0,
- /* tp_new */ connection_new,
-};
-
-#endif /* CONNECTION_H */
diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c
index ee250e0043..9460c896ca 100644
--- a/Modules/_multiprocessing/multiprocessing.c
+++ b/Modules/_multiprocessing/multiprocessing.c
@@ -3,20 +3,13 @@
*
* multiprocessing.c
*
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
+ * Copyright (c) 2006-2008, R Oudkerk
+ * Licensed to PSF under a Contributor Agreement.
*/
#include "multiprocessing.h"
-#if (defined(CMSG_LEN) && defined(SCM_RIGHTS))
- #define HAVE_FD_TRANSFER 1
-#else
- #define HAVE_FD_TRANSFER 0
-#endif
-
-PyObject *create_win32_namespace(void);
-PyObject *pickle_dumps, *pickle_loads, *pickle_protocol;
PyObject *ProcessError, *BufferTooShort;
/*
@@ -49,189 +42,91 @@ mp_SetError(PyObject *Type, int num)
case MP_MEMORY_ERROR:
PyErr_NoMemory();
break;
- case MP_END_OF_FILE:
- PyErr_SetNone(PyExc_EOFError);
- break;
- case MP_EARLY_END_OF_FILE:
- PyErr_SetString(PyExc_IOError,
- "got end of file during message");
- break;
- case MP_BAD_MESSAGE_LENGTH:
- PyErr_SetString(PyExc_IOError, "bad message length");
- break;
case MP_EXCEPTION_HAS_BEEN_SET:
break;
default:
PyErr_Format(PyExc_RuntimeError,
- "unkown error number %d", num);
+ "unknown error number %d", num);
}
return NULL;
}
-
-/*
- * Windows only
- */
-
#ifdef MS_WINDOWS
-
-/* On Windows we set an event to signal Ctrl-C; compare with timemodule.c */
-
-HANDLE sigint_event = NULL;
-
-static BOOL WINAPI
-ProcessingCtrlHandler(DWORD dwCtrlType)
-{
- SetEvent(sigint_event);
- return FALSE;
-}
-
-/*
- * Unix only
- */
-
-#else /* !MS_WINDOWS */
-
-#if HAVE_FD_TRANSFER
-
-/* Functions for transferring file descriptors between processes.
- Reimplements some of the functionality of the fdcred
- module at http://www.mca-ltd.com/resources/fdcred_1.tgz. */
-/* Based in http://resin.csoft.net/cgi-bin/man.cgi?section=3&topic=CMSG_DATA */
-
static PyObject *
-multiprocessing_sendfd(PyObject *self, PyObject *args)
+multiprocessing_closesocket(PyObject *self, PyObject *args)
{
- int conn, fd, res;
- struct iovec dummy_iov;
- char dummy_char;
- struct msghdr msg;
- struct cmsghdr *cmsg;
- union {
- struct cmsghdr hdr;
- unsigned char buf[CMSG_SPACE(sizeof(int))];
- } cmsgbuf;
-
- if (!PyArg_ParseTuple(args, "ii", &conn, &fd))
- return NULL;
-
- dummy_iov.iov_base = &dummy_char;
- dummy_iov.iov_len = 1;
+ HANDLE handle;
+ int ret;
- memset(&msg, 0, sizeof(msg));
- msg.msg_control = &cmsgbuf.buf;
- msg.msg_controllen = sizeof(cmsgbuf.buf);
- msg.msg_iov = &dummy_iov;
- msg.msg_iovlen = 1;
-
- cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_len = CMSG_LEN(sizeof(int));
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- * (int *) CMSG_DATA(cmsg) = fd;
+ if (!PyArg_ParseTuple(args, F_HANDLE ":closesocket" , &handle))
+ return NULL;
Py_BEGIN_ALLOW_THREADS
- res = sendmsg(conn, &msg, 0);
+ ret = closesocket((SOCKET) handle);
Py_END_ALLOW_THREADS
- if (res < 0)
- return PyErr_SetFromErrno(PyExc_OSError);
+ if (ret)
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, WSAGetLastError());
Py_RETURN_NONE;
}
static PyObject *
-multiprocessing_recvfd(PyObject *self, PyObject *args)
+multiprocessing_recv(PyObject *self, PyObject *args)
{
- int conn, fd, res;
- char dummy_char;
- struct iovec dummy_iov;
- struct msghdr msg = {0};
- struct cmsghdr *cmsg;
- union {
- struct cmsghdr hdr;
- unsigned char buf[CMSG_SPACE(sizeof(int))];
- } cmsgbuf;
-
- if (!PyArg_ParseTuple(args, "i", &conn))
- return NULL;
-
- dummy_iov.iov_base = &dummy_char;
- dummy_iov.iov_len = 1;
+ HANDLE handle;
+ int size, nread;
+ PyObject *buf;
- memset(&msg, 0, sizeof(msg));
- msg.msg_control = &cmsgbuf.buf;
- msg.msg_controllen = sizeof(cmsgbuf.buf);
- msg.msg_iov = &dummy_iov;
- msg.msg_iovlen = 1;
+ if (!PyArg_ParseTuple(args, F_HANDLE "i:recv" , &handle, &size))
+ return NULL;
- cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- cmsg->cmsg_len = CMSG_LEN(sizeof(int));
- msg.msg_controllen = cmsg->cmsg_len;
+ buf = PyBytes_FromStringAndSize(NULL, size);
+ if (!buf)
+ return NULL;
Py_BEGIN_ALLOW_THREADS
- res = recvmsg(conn, &msg, 0);
+ nread = recv((SOCKET) handle, PyBytes_AS_STRING(buf), size, 0);
Py_END_ALLOW_THREADS
- if (res < 0)
- return PyErr_SetFromErrno(PyExc_OSError);
-
- if (msg.msg_controllen < CMSG_LEN(sizeof(int)) ||
- (cmsg = CMSG_FIRSTHDR(&msg)) == NULL ||
- cmsg->cmsg_level != SOL_SOCKET ||
- cmsg->cmsg_type != SCM_RIGHTS ||
- cmsg->cmsg_len < CMSG_LEN(sizeof(int))) {
- /* If at least one control message is present, there should be
- no room for any further data in the buffer. */
- PyErr_SetString(PyExc_RuntimeError, "No file descriptor received");
- return NULL;
+ if (nread < 0) {
+ Py_DECREF(buf);
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, WSAGetLastError());
}
-
- fd = * (int *) CMSG_DATA(cmsg);
- return Py_BuildValue("i", fd);
+ _PyBytes_Resize(&buf, nread);
+ return buf;
}
-#endif /* HAVE_FD_TRANSFER */
-
-#endif /* !MS_WINDOWS */
-
-
-/*
- * All platforms
- */
-
-static PyObject*
-multiprocessing_address_of_buffer(PyObject *self, PyObject *obj)
+static PyObject *
+multiprocessing_send(PyObject *self, PyObject *args)
{
- void *buffer;
- Py_ssize_t buffer_len;
+ HANDLE handle;
+ Py_buffer buf;
+ int ret;
- if (PyObject_AsWriteBuffer(obj, &buffer, &buffer_len) < 0)
+ if (!PyArg_ParseTuple(args, F_HANDLE "y*:send" , &handle, &buf))
return NULL;
- return Py_BuildValue("N" F_PY_SSIZE_T,
- PyLong_FromVoidPtr(buffer), buffer_len);
+ Py_BEGIN_ALLOW_THREADS
+ ret = send((SOCKET) handle, buf.buf, buf.len, 0);
+ Py_END_ALLOW_THREADS
+
+ PyBuffer_Release(&buf);
+ if (ret < 0)
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, WSAGetLastError());
+ return PyLong_FromLong(ret);
}
+#endif
/*
* Function table
*/
static PyMethodDef module_methods[] = {
- {"address_of_buffer", multiprocessing_address_of_buffer, METH_O,
- "address_of_buffer(obj) -> int\n"
- "Return address of obj assuming obj supports buffer inteface"},
-#if HAVE_FD_TRANSFER
- {"sendfd", multiprocessing_sendfd, METH_VARARGS,
- "sendfd(sockfd, fd) -> None\n"
- "Send file descriptor given by fd over the unix domain socket\n"
- "whose file decriptor is sockfd"},
- {"recvfd", multiprocessing_recvfd, METH_VARARGS,
- "recvfd(sockfd) -> fd\n"
- "Receive a file descriptor over a unix domain socket\n"
- "whose file decriptor is sockfd"},
+#ifdef MS_WINDOWS
+ {"closesocket", multiprocessing_closesocket, METH_VARARGS, ""},
+ {"recv", multiprocessing_recv, METH_VARARGS, ""},
+ {"send", multiprocessing_send, METH_VARARGS, ""},
#endif
{NULL}
};
@@ -257,22 +152,13 @@ static struct PyModuleDef multiprocessing_module = {
PyMODINIT_FUNC
PyInit__multiprocessing(void)
{
- PyObject *module, *temp, *value;
+ PyObject *module, *temp, *value = NULL;
/* Initialize module */
module = PyModule_Create(&multiprocessing_module);
if (!module)
return NULL;
- /* Get copy of objects from pickle */
- temp = PyImport_ImportModule(PICKLE_MODULE);
- if (!temp)
- return NULL;
- pickle_dumps = PyObject_GetAttrString(temp, "dumps");
- pickle_loads = PyObject_GetAttrString(temp, "loads");
- pickle_protocol = PyObject_GetAttrString(temp, "HIGHEST_PROTOCOL");
- Py_XDECREF(temp);
-
/* Get copy of BufferTooShort */
temp = PyImport_ImportModule("multiprocessing");
if (!temp)
@@ -280,12 +166,6 @@ PyInit__multiprocessing(void)
BufferTooShort = PyObject_GetAttrString(temp, "BufferTooShort");
Py_XDECREF(temp);
- /* Add connection type to module */
- if (PyType_Ready(&ConnectionType) < 0)
- return NULL;
- Py_INCREF(&ConnectionType);
- PyModule_AddObject(module, "Connection", (PyObject*)&ConnectionType);
-
#if defined(MS_WINDOWS) || \
(defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED))
/* Add SemLock type to module */
@@ -308,32 +188,6 @@ PyInit__multiprocessing(void)
PyModule_AddObject(module, "SemLock", (PyObject*)&SemLockType);
#endif
-#ifdef MS_WINDOWS
- /* Add PipeConnection to module */
- if (PyType_Ready(&PipeConnectionType) < 0)
- return NULL;
- Py_INCREF(&PipeConnectionType);
- PyModule_AddObject(module, "PipeConnection",
- (PyObject*)&PipeConnectionType);
-
- /* Initialize win32 class and add to multiprocessing */
- temp = create_win32_namespace();
- if (!temp)
- return NULL;
- PyModule_AddObject(module, "win32", temp);
-
- /* Initialize the event handle used to signal Ctrl-C */
- sigint_event = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (!sigint_event) {
- PyErr_SetFromWindowsErr(0);
- return NULL;
- }
- if (!SetConsoleCtrlHandler(ProcessingCtrlHandler, TRUE)) {
- PyErr_SetFromWindowsErr(0);
- return NULL;
- }
-#endif
-
/* Add configuration macros */
temp = PyDict_New();
if (!temp)
@@ -343,7 +197,7 @@ PyInit__multiprocessing(void)
value = Py_BuildValue("i", name); \
if (value == NULL) { Py_DECREF(temp); return NULL; } \
if (PyDict_SetItemString(temp, #name, value) < 0) { \
- Py_DECREF(temp); Py_DECREF(value); return NULL; } \
+ Py_DECREF(temp); Py_DECREF(value); return NULL; } \
Py_DECREF(value)
#if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED)
@@ -352,9 +206,6 @@ PyInit__multiprocessing(void)
#ifdef HAVE_SEM_TIMEDWAIT
ADD_FLAG(HAVE_SEM_TIMEDWAIT);
#endif
-#ifdef HAVE_FD_TRANSFER
- ADD_FLAG(HAVE_FD_TRANSFER);
-#endif
#ifdef HAVE_BROKEN_SEM_GETVALUE
ADD_FLAG(HAVE_BROKEN_SEM_GETVALUE);
#endif
diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h
index 14425de821..e3de9baf1b 100644
--- a/Modules/_multiprocessing/multiprocessing.h
+++ b/Modules/_multiprocessing/multiprocessing.h
@@ -3,12 +3,6 @@
#define PY_SSIZE_T_CLEAN
-#ifdef __sun
-/* The control message API is only available on Solaris
- if XPG 4.2 or later is requested. */
-#define _XOPEN_SOURCE 500
-#endif
-
#include "Python.h"
#include "structmember.h"
#include "pythread.h"
@@ -29,10 +23,6 @@
# define SEM_VALUE_MAX LONG_MAX
#else
# include <fcntl.h> /* O_CREAT and O_EXCL */
-# include <netinet/in.h>
-# include <sys/socket.h>
-# include <sys/uio.h>
-# include <arpa/inet.h> /* htonl() and ntohl() */
# if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED)
# include <semaphore.h>
typedef sem_t *SEM_HANDLE;
@@ -64,20 +54,6 @@
/*
- * Make sure Py_ssize_t available
- */
-
-#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
- typedef int Py_ssize_t;
-# define PY_SSIZE_T_MAX INT_MAX
-# define PY_SSIZE_T_MIN INT_MIN
-# define F_PY_SSIZE_T "i"
-# define PyInt_FromSsize_t(n) PyInt_FromLong((long)n)
-#else
-# define F_PY_SSIZE_T "n"
-#endif
-
-/*
* Format codes
*/
@@ -105,12 +81,6 @@
# define T_SEM_HANDLE T_POINTER
#endif
-#if PY_VERSION_HEX >= 0x03000000
-# define F_RBUFFER "y"
-#else
-# define F_RBUFFER "s"
-#endif
-
/*
* Error codes which can be returned by functions called without GIL
*/
@@ -118,11 +88,8 @@
#define MP_SUCCESS (0)
#define MP_STANDARD_ERROR (-1)
#define MP_MEMORY_ERROR (-1001)
-#define MP_END_OF_FILE (-1002)
-#define MP_EARLY_END_OF_FILE (-1003)
-#define MP_BAD_MESSAGE_LENGTH (-1004)
-#define MP_SOCKET_ERROR (-1005)
-#define MP_EXCEPTION_HAS_BEEN_SET (-1006)
+#define MP_SOCKET_ERROR (-1002)
+#define MP_EXCEPTION_HAS_BEEN_SET (-1003)
PyObject *mp_SetError(PyObject *Type, int num);
@@ -130,57 +97,14 @@ PyObject *mp_SetError(PyObject *Type, int num);
* Externs - not all will really exist on all platforms
*/
-extern PyObject *pickle_dumps;
-extern PyObject *pickle_loads;
-extern PyObject *pickle_protocol;
extern PyObject *BufferTooShort;
extern PyTypeObject SemLockType;
-extern PyTypeObject ConnectionType;
extern PyTypeObject PipeConnectionType;
-extern HANDLE sigint_event;
-
-/*
- * Py3k compatibility
- */
-
-#if PY_VERSION_HEX >= 0x03000000
-# define PICKLE_MODULE "pickle"
-# define FROM_FORMAT PyUnicode_FromFormat
-# define PyInt_FromLong PyLong_FromLong
-# define PyInt_FromSsize_t PyLong_FromSsize_t
-#else
-# define PICKLE_MODULE "cPickle"
-# define FROM_FORMAT PyString_FromFormat
-#endif
-
-#ifndef PyVarObject_HEAD_INIT
-# define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size,
-#endif
-
-#ifndef Py_TPFLAGS_HAVE_WEAKREFS
-# define Py_TPFLAGS_HAVE_WEAKREFS 0
-#endif
-
-/*
- * Connection definition
- */
-
-#define CONNECTION_BUFFER_SIZE 1024
-
-typedef struct {
- PyObject_HEAD
- HANDLE handle;
- int flags;
- PyObject *weakreflist;
- char buffer[CONNECTION_BUFFER_SIZE];
-} ConnectionObject;
/*
* Miscellaneous
*/
-#define MAX_MESSAGE_LENGTH 0x7fffffff
-
#ifndef MIN
# define MIN(x, y) ((x) < (y) ? x : y)
# define MAX(x, y) ((x) > (y) ? x : y)
diff --git a/Modules/_multiprocessing/pipe_connection.c b/Modules/_multiprocessing/pipe_connection.c
deleted file mode 100644
index 05dde0cf39..0000000000
--- a/Modules/_multiprocessing/pipe_connection.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * A type which wraps a pipe handle in message oriented mode
- *
- * pipe_connection.c
- *
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
- */
-
-#include "multiprocessing.h"
-
-#define CLOSE(h) CloseHandle(h)
-
-/*
- * Send string to the pipe; assumes in message oriented mode
- */
-
-static Py_ssize_t
-conn_send_string(ConnectionObject *conn, char *string, size_t length)
-{
- DWORD amount_written;
- BOOL ret;
-
- Py_BEGIN_ALLOW_THREADS
- ret = WriteFile(conn->handle, string, length, &amount_written, NULL);
- Py_END_ALLOW_THREADS
-
- if (ret == 0 && GetLastError() == ERROR_NO_SYSTEM_RESOURCES) {
- PyErr_Format(PyExc_ValueError, "Cannnot send %" PY_FORMAT_SIZE_T "d bytes over connection", length);
- return MP_STANDARD_ERROR;
- }
-
- return ret ? MP_SUCCESS : MP_STANDARD_ERROR;
-}
-
-/*
- * Attempts to read into buffer, or if buffer too small into *newbuffer.
- *
- * Returns number of bytes read. Assumes in message oriented mode.
- */
-
-static Py_ssize_t
-conn_recv_string(ConnectionObject *conn, char *buffer,
- size_t buflength, char **newbuffer, size_t maxlength)
-{
- DWORD left, length, full_length, err;
- BOOL ret;
- *newbuffer = NULL;
-
- Py_BEGIN_ALLOW_THREADS
- ret = ReadFile(conn->handle, buffer, MIN(buflength, maxlength),
- &length, NULL);
- Py_END_ALLOW_THREADS
- if (ret)
- return length;
-
- err = GetLastError();
- if (err != ERROR_MORE_DATA) {
- if (err == ERROR_BROKEN_PIPE)
- return MP_END_OF_FILE;
- return MP_STANDARD_ERROR;
- }
-
- if (!PeekNamedPipe(conn->handle, NULL, 0, NULL, NULL, &left))
- return MP_STANDARD_ERROR;
-
- full_length = length + left;
- if (full_length > maxlength)
- return MP_BAD_MESSAGE_LENGTH;
-
- *newbuffer = PyMem_Malloc(full_length);
- if (*newbuffer == NULL)
- return MP_MEMORY_ERROR;
-
- memcpy(*newbuffer, buffer, length);
-
- Py_BEGIN_ALLOW_THREADS
- ret = ReadFile(conn->handle, *newbuffer+length, left, &length, NULL);
- Py_END_ALLOW_THREADS
- if (ret) {
- assert(length == left);
- return full_length;
- } else {
- PyMem_Free(*newbuffer);
- return MP_STANDARD_ERROR;
- }
-}
-
-/*
- * Check whether any data is available for reading
- */
-
-static int
-conn_poll(ConnectionObject *conn, double timeout, PyThreadState *_save)
-{
- DWORD bytes, deadline, delay;
- int difference, res;
- BOOL block = FALSE;
-
- if (!PeekNamedPipe(conn->handle, NULL, 0, NULL, &bytes, NULL))
- return MP_STANDARD_ERROR;
-
- if (timeout == 0.0)
- return bytes > 0;
-
- if (timeout < 0.0)
- block = TRUE;
- else
- /* XXX does not check for overflow */
- deadline = GetTickCount() + (DWORD)(1000 * timeout + 0.5);
-
- Sleep(0);
-
- for (delay = 1 ; ; delay += 1) {
- if (!PeekNamedPipe(conn->handle, NULL, 0, NULL, &bytes, NULL))
- return MP_STANDARD_ERROR;
- else if (bytes > 0)
- return TRUE;
-
- if (!block) {
- difference = deadline - GetTickCount();
- if (difference < 0)
- return FALSE;
- if ((int)delay > difference)
- delay = difference;
- }
-
- if (delay > 20)
- delay = 20;
-
- Sleep(delay);
-
- /* check for signals */
- Py_BLOCK_THREADS
- res = PyErr_CheckSignals();
- Py_UNBLOCK_THREADS
-
- if (res)
- return MP_EXCEPTION_HAS_BEEN_SET;
- }
-}
-
-/*
- * "connection.h" defines the PipeConnection type using the definitions above
- */
-
-#define CONNECTION_NAME "PipeConnection"
-#define CONNECTION_TYPE PipeConnectionType
-
-#include "connection.h"
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index 1ee224d550..2c2b020e3b 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -3,7 +3,8 @@
*
* semaphore.c
*
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
+ * Copyright (c) 2006-2008, R Oudkerk
+ * Licensed to PSF under a Contributor Agreement.
*/
#include "multiprocessing.h"
@@ -62,7 +63,8 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
int blocking = 1;
double timeout;
PyObject *timeout_obj = Py_None;
- DWORD res, full_msecs, msecs, start, ticks;
+ DWORD res, full_msecs, nhandles;
+ HANDLE handles[2], sigint_event;
static char *kwlist[] = {"block", "timeout", NULL};
@@ -96,53 +98,40 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
Py_RETURN_TRUE;
}
- /* check whether we can acquire without blocking */
+ /* check whether we can acquire without releasing the GIL and blocking */
if (WaitForSingleObject(self->handle, 0) == WAIT_OBJECT_0) {
self->last_tid = GetCurrentThreadId();
++self->count;
Py_RETURN_TRUE;
}
- msecs = full_msecs;
- start = GetTickCount();
-
- for ( ; ; ) {
- HANDLE handles[2] = {self->handle, sigint_event};
+ /* prepare list of handles */
+ nhandles = 0;
+ handles[nhandles++] = self->handle;
+ if (_PyOS_IsMainThread()) {
+ sigint_event = _PyOS_SigintEvent();
+ assert(sigint_event != NULL);
+ handles[nhandles++] = sigint_event;
+ }
- /* do the wait */
- Py_BEGIN_ALLOW_THREADS
+ /* do the wait */
+ Py_BEGIN_ALLOW_THREADS
+ if (sigint_event != NULL)
ResetEvent(sigint_event);
- res = WaitForMultipleObjects(2, handles, FALSE, msecs);
- Py_END_ALLOW_THREADS
-
- /* handle result */
- if (res != WAIT_OBJECT_0 + 1)
- break;
-
- /* got SIGINT so give signal handler a chance to run */
- Sleep(1);
-
- /* if this is main thread let KeyboardInterrupt be raised */
- if (PyErr_CheckSignals())
- return NULL;
-
- /* recalculate timeout */
- if (msecs != INFINITE) {
- ticks = GetTickCount();
- if ((DWORD)(ticks - start) >= full_msecs)
- Py_RETURN_FALSE;
- msecs = full_msecs - (ticks - start);
- }
- }
+ res = WaitForMultipleObjects(nhandles, handles, FALSE, full_msecs);
+ Py_END_ALLOW_THREADS
/* handle result */
switch (res) {
case WAIT_TIMEOUT:
Py_RETURN_FALSE;
- case WAIT_OBJECT_0:
+ case WAIT_OBJECT_0 + 0:
self->last_tid = GetCurrentThreadId();
++self->count;
Py_RETURN_TRUE;
+ case WAIT_OBJECT_0 + 1:
+ errno = EINTR;
+ return PyErr_SetFromErrno(PyExc_IOError);
case WAIT_FAILED:
return PyErr_SetFromWindowsErr(0);
default:
@@ -490,7 +479,7 @@ semlock_dealloc(SemLockObject* self)
static PyObject *
semlock_count(SemLockObject *self)
{
- return PyInt_FromLong((long)self->count);
+ return PyLong_FromLong((long)self->count);
}
static PyObject *
@@ -514,7 +503,7 @@ semlock_getvalue(SemLockObject *self)
the number of waiting threads */
if (sval < 0)
sval = 0;
- return PyInt_FromLong((long)sval);
+ return PyLong_FromLong((long)sval);
#endif
}
diff --git a/Modules/_multiprocessing/socket_connection.c b/Modules/_multiprocessing/socket_connection.c
deleted file mode 100644
index 66bc377792..0000000000
--- a/Modules/_multiprocessing/socket_connection.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * A type which wraps a socket
- *
- * socket_connection.c
- *
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
- */
-
-#include "multiprocessing.h"
-
-#if defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)
-# include "poll.h"
-#endif
-
-#ifdef MS_WINDOWS
-# define WRITE(h, buffer, length) send((SOCKET)h, buffer, length, 0)
-# define READ(h, buffer, length) recv((SOCKET)h, buffer, length, 0)
-# define CLOSE(h) closesocket((SOCKET)h)
-#else
-# define WRITE(h, buffer, length) write(h, buffer, length)
-# define READ(h, buffer, length) read(h, buffer, length)
-# define CLOSE(h) close(h)
-#endif
-
-/*
- * Send string to file descriptor
- */
-
-static Py_ssize_t
-_conn_sendall(HANDLE h, char *string, size_t length)
-{
- char *p = string;
- Py_ssize_t res;
-
- while (length > 0) {
- res = WRITE(h, p, length);
- if (res < 0)
- return MP_SOCKET_ERROR;
- length -= res;
- p += res;
- }
-
- return MP_SUCCESS;
-}
-
-/*
- * Receive string of exact length from file descriptor
- */
-
-static Py_ssize_t
-_conn_recvall(HANDLE h, char *buffer, size_t length)
-{
- size_t remaining = length;
- Py_ssize_t temp;
- char *p = buffer;
-
- while (remaining > 0) {
- temp = READ(h, p, remaining);
- if (temp <= 0) {
- if (temp == 0)
- return remaining == length ?
- MP_END_OF_FILE : MP_EARLY_END_OF_FILE;
- else
- return temp;
- }
- remaining -= temp;
- p += temp;
- }
-
- return MP_SUCCESS;
-}
-
-/*
- * Send a string prepended by the string length in network byte order
- */
-
-static Py_ssize_t
-conn_send_string(ConnectionObject *conn, char *string, size_t length)
-{
- Py_ssize_t res;
- /* The "header" of the message is a 32 bit unsigned number (in
- network order) which specifies the length of the "body". If
- the message is shorter than about 16kb then it is quicker to
- combine the "header" and the "body" of the message and send
- them at once. */
- if (length < (16*1024)) {
- char *message;
-
- message = PyMem_Malloc(length+4);
- if (message == NULL)
- return MP_MEMORY_ERROR;
-
- *(UINT32*)message = htonl((UINT32)length);
- memcpy(message+4, string, length);
- Py_BEGIN_ALLOW_THREADS
- res = _conn_sendall(conn->handle, message, length+4);
- Py_END_ALLOW_THREADS
- PyMem_Free(message);
- } else {
- UINT32 lenbuff;
-
- if (length > MAX_MESSAGE_LENGTH)
- return MP_BAD_MESSAGE_LENGTH;
-
- lenbuff = htonl((UINT32)length);
- Py_BEGIN_ALLOW_THREADS
- res = _conn_sendall(conn->handle, (char*)&lenbuff, 4) ||
- _conn_sendall(conn->handle, string, length);
- Py_END_ALLOW_THREADS
- }
- return res;
-}
-
-/*
- * Attempts to read into buffer, or failing that into *newbuffer
- *
- * Returns number of bytes read.
- */
-
-static Py_ssize_t
-conn_recv_string(ConnectionObject *conn, char *buffer,
- size_t buflength, char **newbuffer, size_t maxlength)
-{
- Py_ssize_t res;
- UINT32 ulength;
-
- *newbuffer = NULL;
-
- Py_BEGIN_ALLOW_THREADS
- res = _conn_recvall(conn->handle, (char*)&ulength, 4);
- Py_END_ALLOW_THREADS
- if (res < 0)
- return res;
-
- ulength = ntohl(ulength);
- if (ulength > maxlength)
- return MP_BAD_MESSAGE_LENGTH;
-
- if (ulength > buflength) {
- *newbuffer = buffer = PyMem_Malloc((size_t)ulength);
- if (buffer == NULL)
- return MP_MEMORY_ERROR;
- }
-
- Py_BEGIN_ALLOW_THREADS
- res = _conn_recvall(conn->handle, buffer, (size_t)ulength);
- Py_END_ALLOW_THREADS
-
- if (res >= 0) {
- res = (Py_ssize_t)ulength;
- } else if (*newbuffer != NULL) {
- PyMem_Free(*newbuffer);
- *newbuffer = NULL;
- }
- return res;
-}
-
-/*
- * Check whether any data is available for reading -- neg timeout blocks
- */
-
-static int
-conn_poll(ConnectionObject *conn, double timeout, PyThreadState *_save)
-{
-#if defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)
- int res;
- struct pollfd p;
-
- p.fd = (int)conn->handle;
- p.events = POLLIN | POLLPRI;
- p.revents = 0;
-
- if (timeout < 0) {
- res = poll(&p, 1, -1);
- } else {
- res = poll(&p, 1, (int)(timeout * 1000 + 0.5));
- }
-
- if (res < 0) {
- return MP_SOCKET_ERROR;
- } else if (p.revents & (POLLNVAL|POLLERR)) {
- Py_BLOCK_THREADS
- PyErr_SetString(PyExc_IOError, "poll() gave POLLNVAL or POLLERR");
- Py_UNBLOCK_THREADS
- return MP_EXCEPTION_HAS_BEEN_SET;
- } else if (p.revents != 0) {
- return TRUE;
- } else {
- assert(res == 0);
- return FALSE;
- }
-#else
- int res;
- fd_set rfds;
-
- /*
- * Verify the handle, issue 3321. Not required for windows.
- */
- #ifndef MS_WINDOWS
- if (((int)conn->handle) < 0 || ((int)conn->handle) >= FD_SETSIZE) {
- Py_BLOCK_THREADS
- PyErr_SetString(PyExc_IOError, "handle out of range in select()");
- Py_UNBLOCK_THREADS
- return MP_EXCEPTION_HAS_BEEN_SET;
- }
- #endif
-
- FD_ZERO(&rfds);
- FD_SET((SOCKET)conn->handle, &rfds);
-
- if (timeout < 0.0) {
- res = select((int)conn->handle+1, &rfds, NULL, NULL, NULL);
- } else {
- struct timeval tv;
- tv.tv_sec = (long)timeout;
- tv.tv_usec = (long)((timeout - tv.tv_sec) * 1e6 + 0.5);
- res = select((int)conn->handle+1, &rfds, NULL, NULL, &tv);
- }
-
- if (res < 0) {
- return MP_SOCKET_ERROR;
- } else if (FD_ISSET(conn->handle, &rfds)) {
- return TRUE;
- } else {
- assert(res == 0);
- return FALSE;
- }
-#endif
-}
-
-/*
- * "connection.h" defines the Connection type using defs above
- */
-
-#define CONNECTION_NAME "Connection"
-#define CONNECTION_TYPE ConnectionType
-
-#include "connection.h"
diff --git a/Modules/_multiprocessing/win32_functions.c b/Modules/_multiprocessing/win32_functions.c
deleted file mode 100644
index 0e348c4134..0000000000
--- a/Modules/_multiprocessing/win32_functions.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Win32 functions used by multiprocessing package
- *
- * win32_functions.c
- *
- * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
- */
-
-#include "multiprocessing.h"
-
-
-#define WIN32_FUNCTION(func) \
- {#func, (PyCFunction)win32_ ## func, METH_VARARGS | METH_STATIC, ""}
-
-#define WIN32_CONSTANT(fmt, con) \
- PyDict_SetItemString(Win32Type.tp_dict, #con, Py_BuildValue(fmt, con))
-
-
-static PyObject *
-win32_CloseHandle(PyObject *self, PyObject *args)
-{
- HANDLE hObject;
- BOOL success;
-
- if (!PyArg_ParseTuple(args, F_HANDLE, &hObject))
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- success = CloseHandle(hObject);
- Py_END_ALLOW_THREADS
-
- if (!success)
- return PyErr_SetFromWindowsErr(0);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *
-win32_ConnectNamedPipe(PyObject *self, PyObject *args)
-{
- HANDLE hNamedPipe;
- LPOVERLAPPED lpOverlapped;
- BOOL success;
-
- if (!PyArg_ParseTuple(args, F_HANDLE F_POINTER,
- &hNamedPipe, &lpOverlapped))
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- success = ConnectNamedPipe(hNamedPipe, lpOverlapped);
- Py_END_ALLOW_THREADS
-
- if (!success)
- return PyErr_SetFromWindowsErr(0);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *
-win32_CreateFile(PyObject *self, PyObject *args)
-{
- LPCTSTR lpFileName;
- DWORD dwDesiredAccess;
- DWORD dwShareMode;
- LPSECURITY_ATTRIBUTES lpSecurityAttributes;
- DWORD dwCreationDisposition;
- DWORD dwFlagsAndAttributes;
- HANDLE hTemplateFile;
- HANDLE handle;
-
- if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_POINTER
- F_DWORD F_DWORD F_HANDLE,
- &lpFileName, &dwDesiredAccess, &dwShareMode,
- &lpSecurityAttributes, &dwCreationDisposition,
- &dwFlagsAndAttributes, &hTemplateFile))
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- handle = CreateFile(lpFileName, dwDesiredAccess,
- dwShareMode, lpSecurityAttributes,
- dwCreationDisposition,
- dwFlagsAndAttributes, hTemplateFile);
- Py_END_ALLOW_THREADS
-
- if (handle == INVALID_HANDLE_VALUE)
- return PyErr_SetFromWindowsErr(0);
-
- return Py_BuildValue(F_HANDLE, handle);
-}
-
-static PyObject *
-win32_CreateNamedPipe(PyObject *self, PyObject *args)
-{
- LPCTSTR lpName;
- DWORD dwOpenMode;
- DWORD dwPipeMode;
- DWORD nMaxInstances;
- DWORD nOutBufferSize;
- DWORD nInBufferSize;
- DWORD nDefaultTimeOut;
- LPSECURITY_ATTRIBUTES lpSecurityAttributes;
- HANDLE handle;
-
- if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_DWORD
- F_DWORD F_DWORD F_DWORD F_POINTER,
- &lpName, &dwOpenMode, &dwPipeMode,
- &nMaxInstances, &nOutBufferSize,
- &nInBufferSize, &nDefaultTimeOut,
- &lpSecurityAttributes))
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- handle = CreateNamedPipe(lpName, dwOpenMode, dwPipeMode,
- nMaxInstances, nOutBufferSize,
- nInBufferSize, nDefaultTimeOut,
- lpSecurityAttributes);
- Py_END_ALLOW_THREADS
-
- if (handle == INVALID_HANDLE_VALUE)
- return PyErr_SetFromWindowsErr(0);
-
- return Py_BuildValue(F_HANDLE, handle);
-}
-
-static PyObject *
-win32_ExitProcess(PyObject *self, PyObject *args)
-{
- UINT uExitCode;
-
- if (!PyArg_ParseTuple(args, "I", &uExitCode))
- return NULL;
-
- #if defined(Py_DEBUG)
- SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT|SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);
- _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
- #endif
-
-
- ExitProcess(uExitCode);
-
- return NULL;
-}
-
-static PyObject *
-win32_GetLastError(PyObject *self, PyObject *args)
-{
- return Py_BuildValue(F_DWORD, GetLastError());
-}
-
-static PyObject *
-win32_OpenProcess(PyObject *self, PyObject *args)
-{
- DWORD dwDesiredAccess;
- BOOL bInheritHandle;
- DWORD dwProcessId;
- HANDLE handle;
-
- if (!PyArg_ParseTuple(args, F_DWORD "i" F_DWORD,
- &dwDesiredAccess, &bInheritHandle, &dwProcessId))
- return NULL;
-
- handle = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
- if (handle == NULL)
- return PyErr_SetFromWindowsErr(0);
-
- return Py_BuildValue(F_HANDLE, handle);
-}
-
-static PyObject *
-win32_SetNamedPipeHandleState(PyObject *self, PyObject *args)
-{
- HANDLE hNamedPipe;
- PyObject *oArgs[3];
- DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL};
- int i;
-
- if (!PyArg_ParseTuple(args, F_HANDLE "OOO",
- &hNamedPipe, &oArgs[0], &oArgs[1], &oArgs[2]))
- return NULL;
-
- PyErr_Clear();
-
- for (i = 0 ; i < 3 ; i++) {
- if (oArgs[i] != Py_None) {
- dwArgs[i] = PyLong_AsUnsignedLongMask(oArgs[i]);
- if (PyErr_Occurred())
- return NULL;
- pArgs[i] = &dwArgs[i];
- }
- }
-
- if (!SetNamedPipeHandleState(hNamedPipe, pArgs[0], pArgs[1], pArgs[2]))
- return PyErr_SetFromWindowsErr(0);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *
-win32_WaitNamedPipe(PyObject *self, PyObject *args)
-{
- LPCTSTR lpNamedPipeName;
- DWORD nTimeOut;
- BOOL success;
-
- if (!PyArg_ParseTuple(args, "s" F_DWORD, &lpNamedPipeName, &nTimeOut))
- return NULL;
-
- Py_BEGIN_ALLOW_THREADS
- success = WaitNamedPipe(lpNamedPipeName, nTimeOut);
- Py_END_ALLOW_THREADS
-
- if (!success)
- return PyErr_SetFromWindowsErr(0);
-
- Py_RETURN_NONE;
-}
-
-static PyMethodDef win32_methods[] = {
- WIN32_FUNCTION(CloseHandle),
- WIN32_FUNCTION(GetLastError),
- WIN32_FUNCTION(OpenProcess),
- WIN32_FUNCTION(ExitProcess),
- WIN32_FUNCTION(ConnectNamedPipe),
- WIN32_FUNCTION(CreateFile),
- WIN32_FUNCTION(CreateNamedPipe),
- WIN32_FUNCTION(SetNamedPipeHandleState),
- WIN32_FUNCTION(WaitNamedPipe),
- {NULL}
-};
-
-
-PyTypeObject Win32Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
-};
-
-
-PyObject *
-create_win32_namespace(void)
-{
- Win32Type.tp_name = "_multiprocessing.win32";
- Win32Type.tp_methods = win32_methods;
- if (PyType_Ready(&Win32Type) < 0)
- return NULL;
- Py_INCREF(&Win32Type);
-
- WIN32_CONSTANT(F_DWORD, ERROR_ALREADY_EXISTS);
- WIN32_CONSTANT(F_DWORD, ERROR_NO_DATA);
- WIN32_CONSTANT(F_DWORD, ERROR_PIPE_BUSY);
- WIN32_CONSTANT(F_DWORD, ERROR_PIPE_CONNECTED);
- WIN32_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT);
- WIN32_CONSTANT(F_DWORD, GENERIC_READ);
- WIN32_CONSTANT(F_DWORD, GENERIC_WRITE);
- WIN32_CONSTANT(F_DWORD, INFINITE);
- WIN32_CONSTANT(F_DWORD, NMPWAIT_WAIT_FOREVER);
- WIN32_CONSTANT(F_DWORD, OPEN_EXISTING);
- WIN32_CONSTANT(F_DWORD, PIPE_ACCESS_DUPLEX);
- WIN32_CONSTANT(F_DWORD, PIPE_ACCESS_INBOUND);
- WIN32_CONSTANT(F_DWORD, PIPE_READMODE_MESSAGE);
- WIN32_CONSTANT(F_DWORD, PIPE_TYPE_MESSAGE);
- WIN32_CONSTANT(F_DWORD, PIPE_UNLIMITED_INSTANCES);
- WIN32_CONSTANT(F_DWORD, PIPE_WAIT);
- WIN32_CONSTANT(F_DWORD, PROCESS_ALL_ACCESS);
-
- WIN32_CONSTANT("i", NULL);
-
- return (PyObject*)&Win32Type;
-}
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 18eaa38bdb..ae801f74ef 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -319,6 +319,7 @@ typedef struct PicklerObject {
objects to support self-referential objects
pickling. */
PyObject *pers_func; /* persistent_id() method, can be NULL */
+ PyObject *dispatch_table; /* private dispatch_table, can be NULL */
PyObject *arg;
PyObject *write; /* write() method of the output stream. */
@@ -386,8 +387,8 @@ static PyTypeObject Unpickler_Type;
/*************************************************************************
- A custom hashtable mapping void* to longs. This is used by the pickler for
- memoization. Using a custom hashtable rather than PyDict allows us to skip
+ A custom hashtable mapping void* to Python ints. This is used by the pickler
+ for memoization. Using a custom hashtable rather than PyDict allows us to skip
a bunch of unnecessary object creation. This makes a huge performance
difference. */
@@ -605,7 +606,7 @@ PyMemoTable_Set(PyMemoTable *self, PyObject *key, Py_ssize_t value)
/*************************************************************************/
/* Helpers for creating the argument tuple passed to functions. This has the
- performance advantage of calling PyTuple_New() only once.
+ performance advantage of calling PyTuple_New() only once.
XXX(avassalotti): Inline directly in _Pickler_FastCall() and
_Unpickler_FastCall(). */
@@ -764,6 +765,7 @@ _Pickler_New(void)
return NULL;
self->pers_func = NULL;
+ self->dispatch_table = NULL;
self->arg = NULL;
self->write = NULL;
self->proto = 0;
@@ -813,7 +815,7 @@ _Pickler_SetProtocol(PicklerObject *self, PyObject *proto_obj,
fix_imports = PyObject_IsTrue(fix_imports_obj);
if (fix_imports == -1)
return -1;
-
+
self->proto = proto;
self->bin = proto > 0;
self->fix_imports = fix_imports && proto < 3;
@@ -826,8 +828,9 @@ _Pickler_SetProtocol(PicklerObject *self, PyObject *proto_obj,
static int
_Pickler_SetOutputStream(PicklerObject *self, PyObject *file)
{
+ _Py_IDENTIFIER(write);
assert(file != NULL);
- self->write = PyObject_GetAttrString(file, "write");
+ self->write = _PyObject_GetAttrId(file, &PyId_write);
if (self->write == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_SetString(PyExc_TypeError,
@@ -909,7 +912,7 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n)
Py_ssize_t read_size, prefetched_size = 0;
assert(self->read != NULL);
-
+
if (_Unpickler_SkipConsumed(self) < 0)
return -1;
@@ -1037,7 +1040,7 @@ _Unpickler_Readline(UnpicklerObject *self, char **result)
self->next_read_idx = num_read;
return _Unpickler_CopyLine(self, self->input_buffer, num_read, result);
}
-
+
/* If we get here, we've run off the end of the input string. Return the
remaining string and let the caller figure it out. */
*result = self->input_buffer + self->next_read_idx;
@@ -1173,15 +1176,19 @@ _Unpickler_New(void)
static int
_Unpickler_SetInputStream(UnpicklerObject *self, PyObject *file)
{
- self->peek = PyObject_GetAttrString(file, "peek");
+ _Py_IDENTIFIER(peek);
+ _Py_IDENTIFIER(read);
+ _Py_IDENTIFIER(readline);
+
+ self->peek = _PyObject_GetAttrId(file, &PyId_peek);
if (self->peek == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
else
return -1;
}
- self->read = PyObject_GetAttrString(file, "read");
- self->readline = PyObject_GetAttrString(file, "readline");
+ self->read = _PyObject_GetAttrId(file, &PyId_read);
+ self->readline = _PyObject_GetAttrId(file, &PyId_readline);
if (self->readline == NULL || self->read == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_SetString(PyExc_TypeError,
@@ -1543,7 +1550,10 @@ save_long(PicklerObject *self, PyObject *obj)
PyErr_Clear();
}
else
- return save_int(self, val);
+#if SIZEOF_LONG > 4
+ if (val <= 0x7fffffffL && val >= -0x80000000L)
+#endif
+ return save_int(self, val);
if (self->proto >= 2) {
/* Linear-time pickling. */
@@ -1571,8 +1581,8 @@ save_long(PicklerObject *self, PyObject *obj)
* need another byte even if there aren't any leftovers:
* the most-significant bit of the most-significant byte
* acts like a sign bit, and it's usually got a sense
- * opposite of the one we need. The exception is longs
- * of the form -(2**(8*j-1)) for j > 0. Such a long is
+ * opposite of the one we need. The exception is ints
+ * of the form -(2**(8*j-1)) for j > 0. Such an int is
* its own 256's-complement, so has the right sign bit
* even without the extra byte. That's a pain to check
* for in advance, though, so we always grab an extra
@@ -1581,7 +1591,7 @@ save_long(PicklerObject *self, PyObject *obj)
nbytes = (nbits >> 3) + 1;
if (nbytes > 0x7fffffffL) {
PyErr_SetString(PyExc_OverflowError,
- "long too large to pickle");
+ "int too large to pickle");
goto error;
}
repr = PyBytes_FromStringAndSize(NULL, (Py_ssize_t)nbytes);
@@ -1593,12 +1603,12 @@ save_long(PicklerObject *self, PyObject *obj)
1 /* little endian */ , 1 /* signed */ );
if (i < 0)
goto error;
- /* If the long is negative, this may be a byte more than
+ /* If the int is negative, this may be a byte more than
* needed. This is so iff the MSB is all redundant sign
* bits.
*/
if (sign < 0 &&
- nbytes > 1 &&
+ nbytes > 1 &&
pdata[nbytes - 1] == 0xff &&
(pdata[nbytes - 2] & 0x80) != 0) {
nbytes--;
@@ -1664,7 +1674,7 @@ save_float(PicklerObject *self, PyObject *obj)
return -1;
if (_Pickler_Write(self, pdata, 9) < 0)
return -1;
- }
+ }
else {
int result = -1;
char *buf = NULL;
@@ -1778,7 +1788,7 @@ save_bytes(PicklerObject *self, PyObject *obj)
}
else {
PyErr_SetString(PyExc_OverflowError,
- "cannot serialize a bytes object larger than 4GB");
+ "cannot serialize a bytes object larger than 4 GiB");
return -1; /* string too large */
}
@@ -1798,90 +1808,65 @@ save_bytes(PicklerObject *self, PyObject *obj)
/* A copy of PyUnicode_EncodeRawUnicodeEscape() that also translates
backslash and newline characters to \uXXXX escapes. */
static PyObject *
-raw_unicode_escape(const Py_UNICODE *s, Py_ssize_t size)
+raw_unicode_escape(PyObject *obj)
{
PyObject *repr, *result;
char *p;
- char *q;
+ Py_ssize_t i, size, expandsize;
+ void *data;
+ unsigned int kind;
- static const char *hexdigits = "0123456789abcdef";
+ if (PyUnicode_READY(obj))
+ return NULL;
+
+ size = PyUnicode_GET_LENGTH(obj);
+ data = PyUnicode_DATA(obj);
+ kind = PyUnicode_KIND(obj);
+ if (kind == PyUnicode_4BYTE_KIND)
+ expandsize = 10;
+ else
+ expandsize = 6;
-#ifdef Py_UNICODE_WIDE
- const Py_ssize_t expandsize = 10;
-#else
- const Py_ssize_t expandsize = 6;
-#endif
-
if (size > PY_SSIZE_T_MAX / expandsize)
return PyErr_NoMemory();
-
repr = PyByteArray_FromStringAndSize(NULL, expandsize * size);
if (repr == NULL)
return NULL;
if (size == 0)
goto done;
- p = q = PyByteArray_AS_STRING(repr);
- while (size-- > 0) {
- Py_UNICODE ch = *s++;
-#ifdef Py_UNICODE_WIDE
+ p = PyByteArray_AS_STRING(repr);
+ for (i=0; i < size; i++) {
+ Py_UCS4 ch = PyUnicode_READ(kind, data, i);
/* Map 32-bit characters to '\Uxxxxxxxx' */
if (ch >= 0x10000) {
*p++ = '\\';
*p++ = 'U';
- *p++ = hexdigits[(ch >> 28) & 0xf];
- *p++ = hexdigits[(ch >> 24) & 0xf];
- *p++ = hexdigits[(ch >> 20) & 0xf];
- *p++ = hexdigits[(ch >> 16) & 0xf];
- *p++ = hexdigits[(ch >> 12) & 0xf];
- *p++ = hexdigits[(ch >> 8) & 0xf];
- *p++ = hexdigits[(ch >> 4) & 0xf];
- *p++ = hexdigits[ch & 15];
+ *p++ = Py_hexdigits[(ch >> 28) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 24) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 20) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 16) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 12) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 8) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 4) & 0xf];
+ *p++ = Py_hexdigits[ch & 15];
}
- else
-#else
- /* Map UTF-16 surrogate pairs to '\U00xxxxxx' */
- if (ch >= 0xD800 && ch < 0xDC00) {
- Py_UNICODE ch2;
- Py_UCS4 ucs;
-
- ch2 = *s++;
- size--;
- if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {
- ucs = (((ch & 0x03FF) << 10) | (ch2 & 0x03FF)) + 0x00010000;
- *p++ = '\\';
- *p++ = 'U';
- *p++ = hexdigits[(ucs >> 28) & 0xf];
- *p++ = hexdigits[(ucs >> 24) & 0xf];
- *p++ = hexdigits[(ucs >> 20) & 0xf];
- *p++ = hexdigits[(ucs >> 16) & 0xf];
- *p++ = hexdigits[(ucs >> 12) & 0xf];
- *p++ = hexdigits[(ucs >> 8) & 0xf];
- *p++ = hexdigits[(ucs >> 4) & 0xf];
- *p++ = hexdigits[ucs & 0xf];
- continue;
- }
- /* Fall through: isolated surrogates are copied as-is */
- s--;
- size++;
- }
-#endif
/* Map 16-bit characters to '\uxxxx' */
- if (ch >= 256 || ch == '\\' || ch == '\n') {
+ else if (ch >= 256 || ch == '\\' || ch == '\n') {
*p++ = '\\';
*p++ = 'u';
- *p++ = hexdigits[(ch >> 12) & 0xf];
- *p++ = hexdigits[(ch >> 8) & 0xf];
- *p++ = hexdigits[(ch >> 4) & 0xf];
- *p++ = hexdigits[ch & 15];
+ *p++ = Py_hexdigits[(ch >> 12) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 8) & 0xf];
+ *p++ = Py_hexdigits[(ch >> 4) & 0xf];
+ *p++ = Py_hexdigits[ch & 15];
}
/* Copy everything else as-is */
else
*p++ = (char) ch;
}
- size = p - q;
+ size = p - PyByteArray_AS_STRING(repr);
- done:
+done:
result = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(repr), size);
Py_DECREF(repr);
return result;
@@ -1896,16 +1881,14 @@ save_unicode(PicklerObject *self, PyObject *obj)
if (self->bin) {
char pdata[5];
- encoded = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(obj),
- PyUnicode_GET_SIZE(obj),
- "surrogatepass");
+ encoded = PyUnicode_AsEncodedString(obj, "utf-8", "surrogatepass");
if (encoded == NULL)
goto error;
size = PyBytes_GET_SIZE(encoded);
if (size > 0xffffffffL) {
PyErr_SetString(PyExc_OverflowError,
- "cannot serialize a string larger than 4GB");
+ "cannot serialize a string larger than 4 GiB");
goto error; /* string too large */
}
@@ -1924,8 +1907,7 @@ save_unicode(PicklerObject *self, PyObject *obj)
else {
const char unicode_op = UNICODE;
- encoded = raw_unicode_escape(PyUnicode_AS_UNICODE(obj),
- PyUnicode_GET_SIZE(obj));
+ encoded = raw_unicode_escape(obj);
if (encoded == NULL)
goto error;
@@ -2544,7 +2526,9 @@ save_dict(PicklerObject *self, PyObject *obj)
status = batch_dict_exact(self, obj);
Py_LeaveRecursiveCall();
} else {
- items = PyObject_CallMethod(obj, "items", "()");
+ _Py_IDENTIFIER(items);
+
+ items = _PyObject_CallMethodId(obj, &PyId_items, "()");
if (items == NULL)
goto error;
iter = PyObject_GetIter(items);
@@ -2828,6 +2812,60 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
}
static int
+save_ellipsis(PicklerObject *self, PyObject *obj)
+{
+ PyObject *str = PyUnicode_FromString("Ellipsis");
+ int res;
+ if (str == NULL)
+ return -1;
+ res = save_global(self, Py_Ellipsis, str);
+ Py_DECREF(str);
+ return res;
+}
+
+static int
+save_notimplemented(PicklerObject *self, PyObject *obj)
+{
+ PyObject *str = PyUnicode_FromString("NotImplemented");
+ int res;
+ if (str == NULL)
+ return -1;
+ res = save_global(self, Py_NotImplemented, str);
+ Py_DECREF(str);
+ return res;
+}
+
+static int
+save_singleton_type(PicklerObject *self, PyObject *obj, PyObject *singleton)
+{
+ PyObject *reduce_value;
+ int status;
+
+ reduce_value = Py_BuildValue("O(O)", &PyType_Type, singleton);
+ if (reduce_value == NULL) {
+ return -1;
+ }
+ status = save_reduce(self, reduce_value, obj);
+ Py_DECREF(reduce_value);
+ return status;
+}
+
+static int
+save_type(PicklerObject *self, PyObject *obj)
+{
+ if (obj == (PyObject *)&_PyNone_Type) {
+ return save_singleton_type(self, obj, Py_None);
+ }
+ else if (obj == (PyObject *)&PyEllipsis_Type) {
+ return save_singleton_type(self, obj, Py_Ellipsis);
+ }
+ else if (obj == (PyObject *)&_PyNotImplemented_Type) {
+ return save_singleton_type(self, obj, Py_NotImplemented);
+ }
+ return save_global(self, obj, NULL);
+}
+
+static int
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
{
PyObject *pid = NULL;
@@ -2881,6 +2919,28 @@ save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
return status;
}
+static PyObject *
+get_class(PyObject *obj)
+{
+ PyObject *cls;
+ static PyObject *str_class;
+
+ if (str_class == NULL) {
+ str_class = PyUnicode_InternFromString("__class__");
+ if (str_class == NULL)
+ return NULL;
+ }
+ cls = PyObject_GetAttr(obj, str_class);
+ if (cls == NULL) {
+ if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ PyErr_Clear();
+ cls = (PyObject *) Py_TYPE(obj);
+ Py_INCREF(cls);
+ }
+ }
+ return cls;
+}
+
/* We're saving obj, and args is the 2-thru-5 tuple returned by the
* appropriate __reduce__ method for obj.
*/
@@ -2928,7 +2988,7 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
if (listitems == Py_None)
listitems = NULL;
else if (!PyIter_Check(listitems)) {
- PyErr_Format(PicklingError, "Fourth element of tuple"
+ PyErr_Format(PicklingError, "fourth element of the tuple "
"returned by __reduce__ must be an iterator, not %s",
Py_TYPE(listitems)->tp_name);
return -1;
@@ -2937,7 +2997,7 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
if (dictitems == Py_None)
dictitems = NULL;
else if (!PyIter_Check(dictitems)) {
- PyErr_Format(PicklingError, "Fifth element of tuple"
+ PyErr_Format(PicklingError, "fifth element of the tuple "
"returned by __reduce__ must be an iterator, not %s",
Py_TYPE(dictitems)->tp_name);
return -1;
@@ -2946,17 +3006,18 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
/* Protocol 2 special case: if callable's name is __newobj__, use
NEWOBJ. */
if (use_newobj) {
- static PyObject *newobj_str = NULL;
- PyObject *name_str;
+ static PyObject *newobj_str = NULL, *name_str = NULL;
+ PyObject *name;
if (newobj_str == NULL) {
newobj_str = PyUnicode_InternFromString("__newobj__");
- if (newobj_str == NULL)
+ name_str = PyUnicode_InternFromString("__name__");
+ if (newobj_str == NULL || name_str == NULL)
return -1;
}
- name_str = PyObject_GetAttrString(callable, "__name__");
- if (name_str == NULL) {
+ name = PyObject_GetAttr(callable, name_str);
+ if (name == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
else
@@ -2964,9 +3025,9 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
use_newobj = 0;
}
else {
- use_newobj = PyUnicode_Check(name_str) &&
- PyUnicode_Compare(name_str, newobj_str) == 0;
- Py_DECREF(name_str);
+ use_newobj = PyUnicode_Check(name) &&
+ PyUnicode_Compare(name, newobj_str) == 0;
+ Py_DECREF(name);
}
}
if (use_newobj) {
@@ -2982,20 +3043,14 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
}
cls = PyTuple_GET_ITEM(argtup, 0);
- if (!PyObject_HasAttrString(cls, "__new__")) {
+ if (!PyType_Check(cls)) {
PyErr_SetString(PicklingError, "args[0] from "
- "__newobj__ args has no __new__");
+ "__newobj__ args is not a type");
return -1;
}
if (obj != NULL) {
- obj_class = PyObject_GetAttrString(obj, "__class__");
- if (obj_class == NULL) {
- if (PyErr_ExceptionMatches(PyExc_AttributeError))
- PyErr_Clear();
- else
- return -1;
- }
+ obj_class = get_class(obj);
p = obj_class != cls; /* true iff a problem */
Py_DECREF(obj_class);
if (p) {
@@ -3069,7 +3124,7 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
return -1;
if (state) {
- if (save(self, state, 0) < 0 ||
+ if (save(self, state, 0) < 0 ||
_Pickler_Write(self, &build_op, 1) < 0)
return -1;
}
@@ -3113,6 +3168,14 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
status = save_none(self, obj);
goto done;
}
+ else if (obj == Py_Ellipsis) {
+ status = save_ellipsis(self, obj);
+ goto done;
+ }
+ else if (obj == Py_NotImplemented) {
+ status = save_notimplemented(self, obj);
+ goto done;
+ }
else if (obj == Py_False || obj == Py_True) {
status = save_bool(self, obj);
goto done;
@@ -3156,7 +3219,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
goto done;
}
else if (type == &PyType_Type) {
- status = save_global(self, obj, NULL);
+ status = save_type(self, obj);
goto done;
}
else if (type == &PyFunction_Type) {
@@ -3177,17 +3240,24 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
/* XXX: This part needs some unit tests. */
/* Get a reduction callable, and call it. This may come from
- * copyreg.dispatch_table, the object's __reduce_ex__ method,
- * or the object's __reduce__ method.
+ * self.dispatch_table, copyreg.dispatch_table, the object's
+ * __reduce_ex__ method, or the object's __reduce__ method.
*/
- reduce_func = PyDict_GetItem(dispatch_table, (PyObject *)type);
+ if (self->dispatch_table == NULL) {
+ reduce_func = PyDict_GetItem(dispatch_table, (PyObject *)type);
+ /* PyDict_GetItem() unlike PyObject_GetItem() and
+ PyObject_GetAttr() returns a borrowed ref */
+ Py_XINCREF(reduce_func);
+ } else {
+ reduce_func = PyObject_GetItem(self->dispatch_table, (PyObject *)type);
+ if (reduce_func == NULL) {
+ if (PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_Clear();
+ else
+ goto error;
+ }
+ }
if (reduce_func != NULL) {
- /* Here, the reference count of the reduce_func object returned by
- PyDict_GetItem needs to be increased to be consistent with the one
- returned by PyObject_GetAttr. This is allow us to blindly DECREF
- reduce_func at the end of the save() routine.
- */
- Py_INCREF(reduce_func);
Py_INCREF(obj);
reduce_value = _Pickler_FastCall(self, reduce_func, obj);
}
@@ -3323,7 +3393,7 @@ Pickler_dump(PicklerObject *self, PyObject *args)
Developers often forget to call __init__() in their subclasses, which
would trigger a segfault without this check. */
if (self->write == NULL) {
- PyErr_Format(PicklingError,
+ PyErr_Format(PicklingError,
"Pickler.__init__() was not called by %s.__init__()",
Py_TYPE(self)->tp_name);
return NULL;
@@ -3360,6 +3430,7 @@ Pickler_dealloc(PicklerObject *self)
Py_XDECREF(self->output_buffer);
Py_XDECREF(self->write);
Py_XDECREF(self->pers_func);
+ Py_XDECREF(self->dispatch_table);
Py_XDECREF(self->arg);
Py_XDECREF(self->fast_memo);
@@ -3373,6 +3444,7 @@ Pickler_traverse(PicklerObject *self, visitproc visit, void *arg)
{
Py_VISIT(self->write);
Py_VISIT(self->pers_func);
+ Py_VISIT(self->dispatch_table);
Py_VISIT(self->arg);
Py_VISIT(self->fast_memo);
return 0;
@@ -3384,6 +3456,7 @@ Pickler_clear(PicklerObject *self)
Py_CLEAR(self->output_buffer);
Py_CLEAR(self->write);
Py_CLEAR(self->pers_func);
+ Py_CLEAR(self->dispatch_table);
Py_CLEAR(self->arg);
Py_CLEAR(self->fast_memo);
@@ -3427,6 +3500,8 @@ Pickler_init(PicklerObject *self, PyObject *args, PyObject *kwds)
PyObject *file;
PyObject *proto_obj = NULL;
PyObject *fix_imports = Py_True;
+ _Py_IDENTIFIER(persistent_id);
+ _Py_IDENTIFIER(dispatch_table);
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:Pickler",
kwlist, &file, &proto_obj, &fix_imports))
@@ -3462,12 +3537,19 @@ Pickler_init(PicklerObject *self, PyObject *args, PyObject *kwds)
self->fast_nesting = 0;
self->fast_memo = NULL;
self->pers_func = NULL;
- if (PyObject_HasAttrString((PyObject *)self, "persistent_id")) {
- self->pers_func = PyObject_GetAttrString((PyObject *)self,
- "persistent_id");
+ if (_PyObject_HasAttrId((PyObject *)self, &PyId_persistent_id)) {
+ self->pers_func = _PyObject_GetAttrId((PyObject *)self,
+ &PyId_persistent_id);
if (self->pers_func == NULL)
return -1;
}
+ self->dispatch_table = NULL;
+ if (_PyObject_HasAttrId((PyObject *)self, &PyId_dispatch_table)) {
+ self->dispatch_table = _PyObject_GetAttrId((PyObject *)self,
+ &PyId_dispatch_table);
+ if (self->dispatch_table == NULL)
+ return -1;
+ }
return 0;
}
@@ -3749,6 +3831,7 @@ Pickler_set_persid(PicklerObject *self, PyObject *value)
static PyMemberDef Pickler_members[] = {
{"bin", T_INT, offsetof(PicklerObject, bin)},
{"fast", T_INT, offsetof(PicklerObject, fast)},
+ {"dispatch_table", T_OBJECT_EX, offsetof(PicklerObject, dispatch_table)},
{NULL}
};
@@ -3803,7 +3886,7 @@ static PyTypeObject Pickler_Type = {
0, /*tp_is_gc*/
};
-/* Temporary helper for calling self.find_class().
+/* Temporary helper for calling self.find_class().
XXX: It would be nice to able to avoid Python function call overhead, by
using directly the C version of find_class(), when find_class() is not
@@ -3813,8 +3896,10 @@ static PyTypeObject Pickler_Type = {
static PyObject *
find_class(UnpicklerObject *self, PyObject *module_name, PyObject *global_name)
{
- return PyObject_CallMethod((PyObject *)self, "find_class", "OO",
- module_name, global_name);
+ _Py_IDENTIFIER(find_class);
+
+ return _PyObject_CallMethodId((PyObject *)self, &PyId_find_class, "OO",
+ module_name, global_name);
}
static Py_ssize_t
@@ -3856,13 +3941,13 @@ load_int(UnpicklerObject *self)
return bad_readline();
errno = 0;
- /* XXX: Should the base argument of strtol() be explicitly set to 10?
+ /* XXX: Should the base argument of strtol() be explicitly set to 10?
XXX(avassalotti): Should this uses PyOS_strtol()? */
x = strtol(s, &endptr, 0);
if (errno || (*endptr != '\n' && *endptr != '\0')) {
/* Hm, maybe we've got something long. Let's try reading
- * it as a Python long object. */
+ * it as a Python int object. */
errno = 0;
/* XXX: Same thing about the base here. */
value = PyLong_FromString(s, NULL, 0);
@@ -4116,7 +4201,7 @@ load_string(UnpicklerObject *self)
if ((len = _Unpickler_Readline(self, &s)) < 0)
return -1;
- if (len < 3)
+ if (len < 2)
return bad_readline();
if ((s = strdup(s)) == NULL) {
PyErr_NoMemory();
@@ -4124,14 +4209,14 @@ load_string(UnpicklerObject *self)
}
/* Strip outermost quotes */
- while (s[len - 1] <= ' ')
+ while (len > 0 && s[len - 1] <= ' ')
len--;
- if (s[0] == '"' && s[len - 1] == '"') {
+ if (len > 1 && s[0] == '"' && s[len - 1] == '"') {
s[len - 1] = '\0';
p = s + 1;
len -= 2;
}
- else if (s[0] == '\'' && s[len - 1] == '\'') {
+ else if (len > 1 && s[0] == '\'' && s[len - 1] == '\'') {
s[len - 1] = '\0';
p = s + 1;
len -= 2;
@@ -4221,7 +4306,7 @@ load_binstring(UnpicklerObject *self)
x = calc_binint(s, 4);
if (x < 0) {
- PyErr_SetString(UnpicklingError,
+ PyErr_SetString(UnpicklingError,
"BINSTRING pickle has negative byte count");
return -1;
}
@@ -4418,16 +4503,19 @@ static PyObject *
instantiate(PyObject *cls, PyObject *args)
{
PyObject *result = NULL;
+ _Py_IDENTIFIER(__getinitargs__);
/* Caller must assure args are a tuple. Normally, args come from
Pdata_poptuple which packs objects from the top of the stack
into a newly created tuple. */
assert(PyTuple_Check(args));
if (Py_SIZE(args) > 0 || !PyType_Check(cls) ||
- PyObject_HasAttrString(cls, "__getinitargs__")) {
+ _PyObject_HasAttrId(cls, &PyId___getinitargs__)) {
result = PyObject_CallObject(cls, args);
}
else {
- result = PyObject_CallMethod(cls, "__new__", "O", cls);
+ _Py_IDENTIFIER(__new__);
+
+ result = _PyObject_CallMethodId(cls, &PyId___new__, "O", cls);
}
return result;
}
@@ -4607,7 +4695,7 @@ load_persid(UnpicklerObject *self)
if (self->pers_func) {
if ((len = _Unpickler_Readline(self, &s)) < 0)
return -1;
- if (len < 2)
+ if (len < 1)
return bad_readline();
pid = PyBytes_FromStringAndSize(s, len - 1);
@@ -4758,9 +4846,10 @@ load_binget(UnpicklerObject *self)
value = _Unpickler_MemoGet(self, idx);
if (value == NULL) {
PyObject *key = PyLong_FromSsize_t(idx);
- if (!PyErr_Occurred())
+ if (key != NULL) {
PyErr_SetObject(PyExc_KeyError, key);
- Py_DECREF(key);
+ Py_DECREF(key);
+ }
return -1;
}
@@ -4783,9 +4872,10 @@ load_long_binget(UnpicklerObject *self)
value = _Unpickler_MemoGet(self, idx);
if (value == NULL) {
PyObject *key = PyLong_FromSsize_t(idx);
- if (!PyErr_Occurred())
+ if (key != NULL) {
PyErr_SetObject(PyExc_KeyError, key);
- Py_DECREF(key);
+ Py_DECREF(key);
+ }
return -1;
}
@@ -4968,8 +5058,9 @@ do_append(UnpicklerObject *self, Py_ssize_t x)
}
else {
PyObject *append_func;
+ _Py_IDENTIFIER(append);
- append_func = PyObject_GetAttrString(list, "append");
+ append_func = _PyObject_GetAttrId(list, &PyId_append);
if (append_func == NULL)
return -1;
for (i = x; i < len; i++) {
@@ -4980,11 +5071,13 @@ do_append(UnpicklerObject *self, Py_ssize_t x)
if (result == NULL) {
Pdata_clear(self->stack, i + 1);
Py_SIZE(self->stack) = x;
+ Py_DECREF(append_func);
return -1;
}
Py_DECREF(result);
}
Py_SIZE(self->stack) = x;
+ Py_DECREF(append_func);
}
return 0;
@@ -5015,7 +5108,7 @@ do_setitems(UnpicklerObject *self, Py_ssize_t x)
return stack_underflow();
if (len == x) /* nothing to do */
return 0;
- if ((len - x) % 2 != 0) {
+ if ((len - x) % 2 != 0) {
/* Currupt or hostile pickle -- we never write one like this. */
PyErr_SetString(UnpicklingError, "odd number of items for SETITEMS");
return -1;
@@ -5056,6 +5149,7 @@ load_build(UnpicklerObject *self)
PyObject *state, *inst, *slotstate;
PyObject *setstate;
int status = 0;
+ _Py_IDENTIFIER(__setstate__);
/* Stack is ... instance, state. We want to leave instance at
* the stack top, possibly mutated via instance.__setstate__(state).
@@ -5069,7 +5163,7 @@ load_build(UnpicklerObject *self)
inst = self->stack->data[Py_SIZE(self->stack) - 1];
- setstate = PyObject_GetAttrString(inst, "__setstate__");
+ setstate = _PyObject_GetAttrId(inst, &PyId___setstate__);
if (setstate == NULL) {
if (PyErr_ExceptionMatches(PyExc_AttributeError))
PyErr_Clear();
@@ -5112,12 +5206,13 @@ load_build(UnpicklerObject *self)
PyObject *dict;
PyObject *d_key, *d_value;
Py_ssize_t i;
+ _Py_IDENTIFIER(__dict__);
if (!PyDict_Check(state)) {
PyErr_SetString(UnpicklingError, "state is not a dictionary");
goto error;
}
- dict = PyObject_GetAttrString(inst, "__dict__");
+ dict = _PyObject_GetAttrId(inst, &PyId___dict__);
if (dict == NULL)
goto error;
@@ -5372,7 +5467,7 @@ Unpickler_load(UnpicklerObject *self)
not call Unpickler.__init__(). Here, we simply ensure that self->read
is not NULL. */
if (self->read == NULL) {
- PyErr_Format(UnpicklingError,
+ PyErr_Format(UnpicklingError,
"Unpickler.__init__() was not called by %s.__init__()",
Py_TYPE(self)->tp_name);
return NULL;
@@ -5474,7 +5569,7 @@ Unpickler_find_class(UnpicklerObject *self, PyObject *args)
global = PyObject_GetAttr(module, global_name);
Py_DECREF(module);
}
- else {
+ else {
global = PyObject_GetAttr(module, global_name);
}
return global;
@@ -5582,6 +5677,7 @@ Unpickler_init(UnpicklerObject *self, PyObject *args, PyObject *kwds)
PyObject *fix_imports = Py_True;
char *encoding = NULL;
char *errors = NULL;
+ _Py_IDENTIFIER(persistent_load);
/* XXX: That is an horrible error message. But, I don't know how to do
better... */
@@ -5616,9 +5712,9 @@ Unpickler_init(UnpicklerObject *self, PyObject *args, PyObject *kwds)
if (self->fix_imports == -1)
return -1;
- if (PyObject_HasAttrString((PyObject *)self, "persistent_load")) {
- self->pers_func = PyObject_GetAttrString((PyObject *)self,
- "persistent_load");
+ if (_PyObject_HasAttrId((PyObject *)self, &PyId_persistent_load)) {
+ self->pers_func = _PyObject_GetAttrId((PyObject *)self,
+ &PyId_persistent_load);
if (self->pers_func == NULL)
return -1;
}
@@ -5651,7 +5747,7 @@ Unpickler_init(UnpicklerObject *self, PyObject *args, PyObject *kwds)
* intentional, as these should be treated as black-box implementation details.
*
* We do, however, have to implement pickling/unpickling support because of
- * real-world code like cvs2svn.
+ * real-world code like cvs2svn.
*/
typedef struct {
@@ -5867,6 +5963,11 @@ Unpickler_set_memo(UnpicklerObject *self, PyObject *obj)
idx = PyLong_AsSsize_t(key);
if (idx == -1 && PyErr_Occurred())
goto error;
+ if (idx < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "memo key must be positive integers.");
+ goto error;
+ }
if (_Unpickler_MemoPut(self, idx, value) < 0)
goto error;
}
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index 19ca31f56d..0196ca2cb6 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -47,7 +47,9 @@ static int
_enable_gc(PyObject *gc_module)
{
PyObject *result;
- result = PyObject_CallMethod(gc_module, "enable", NULL);
+ _Py_IDENTIFIER(enable);
+
+ result = _PyObject_CallMethodId(gc_module, &PyId_enable, NULL);
if (result == NULL)
return 1;
Py_DECREF(result);
@@ -78,7 +80,7 @@ _pos_int_from_ascii(char *name)
* that properly supports /dev/fd.
*/
static int
-_is_fdescfs_mounted_on_dev_fd()
+_is_fdescfs_mounted_on_dev_fd(void)
{
struct stat dev_stat;
struct stat dev_fd_stat;
@@ -174,17 +176,11 @@ _close_fds_by_brute_force(int start_fd, int end_fd, PyObject *py_fds_to_keep)
* This structure is very old and stable: It will not change unless the kernel
* chooses to break compatibility with all existing binaries. Highly Unlikely.
*/
-struct linux_dirent {
-#if defined(__x86_64__) && defined(__ILP32__)
- /* Support the wacky x32 ABI (fake 32-bit userspace speaking to x86_64
- * kernel interfaces) - https://sites.google.com/site/x32abi/ */
+struct linux_dirent64 {
unsigned long long d_ino;
- unsigned long long d_off;
-#else
- unsigned long d_ino; /* Inode number */
- unsigned long d_off; /* Offset to next linux_dirent */
-#endif
+ long long d_off;
unsigned short d_reclen; /* Length of this linux_dirent */
+ unsigned char d_type;
char d_name[256]; /* Filename (null-terminated) */
};
@@ -226,16 +222,16 @@ _close_open_fd_range_safe(int start_fd, int end_fd, PyObject* py_fds_to_keep)
_close_fds_by_brute_force(start_fd, end_fd, py_fds_to_keep);
return;
} else {
- char buffer[sizeof(struct linux_dirent)];
+ char buffer[sizeof(struct linux_dirent64)];
int bytes;
- while ((bytes = syscall(SYS_getdents, fd_dir_fd,
- (struct linux_dirent *)buffer,
+ while ((bytes = syscall(SYS_getdents64, fd_dir_fd,
+ (struct linux_dirent64 *)buffer,
sizeof(buffer))) > 0) {
- struct linux_dirent *entry;
+ struct linux_dirent64 *entry;
int offset;
for (offset = 0; offset < bytes; offset += entry->d_reclen) {
int fd;
- entry = (struct linux_dirent *)(buffer + offset);
+ entry = (struct linux_dirent64 *)(buffer + offset);
if ((fd = _pos_int_from_ascii(entry->d_name)) < 0)
continue; /* Not a number. */
if (fd != fd_dir_fd && fd >= start_fd && fd < end_fd &&
@@ -416,17 +412,6 @@ child_exec(char *const exec_array[],
POSIX_CALL(close(errwrite));
}
- if (close_fds) {
- int local_max_fd = max_fd;
-#if defined(__NetBSD__)
- local_max_fd = fcntl(0, F_MAXFD);
- if (local_max_fd < 0)
- local_max_fd = max_fd;
-#endif
- /* TODO HP-UX could use pstat_getproc() if anyone cares about it. */
- _close_open_fd_range(3, local_max_fd, py_fds_to_keep);
- }
-
if (cwd)
POSIX_CALL(chdir(cwd));
@@ -455,6 +440,18 @@ child_exec(char *const exec_array[],
/* Py_DECREF(result); - We're about to exec so why bother? */
}
+ /* close FDs after executing preexec_fn, which might open FDs */
+ if (close_fds) {
+ int local_max_fd = max_fd;
+#if defined(__NetBSD__)
+ local_max_fd = fcntl(0, F_MAXFD);
+ if (local_max_fd < 0)
+ local_max_fd = max_fd;
+#endif
+ /* TODO HP-UX could use pstat_getproc() if anyone cares about it. */
+ _close_open_fd_range(3, local_max_fd, py_fds_to_keep);
+ }
+
/* This loop matches the Lib/os.py _execvpe()'s PATH search when */
/* given the executable_list generated by Lib/subprocess.py. */
saved_errno = 0;
@@ -506,7 +503,7 @@ static PyObject *
subprocess_fork_exec(PyObject* self, PyObject *args)
{
PyObject *gc_module = NULL;
- PyObject *executable_list, *py_close_fds, *py_fds_to_keep;
+ PyObject *executable_list, *py_fds_to_keep;
PyObject *env_list, *preexec_fn;
PyObject *process_args, *converted_args = NULL, *fast_args = NULL;
PyObject *preexec_fn_args_tuple = NULL;
@@ -521,17 +518,14 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
Py_ssize_t arg_num;
if (!PyArg_ParseTuple(
- args, "OOOOOOiiiiiiiiiiO:fork_exec",
- &process_args, &executable_list, &py_close_fds, &py_fds_to_keep,
+ args, "OOpOOOiiiiiiiiiiO:fork_exec",
+ &process_args, &executable_list, &close_fds, &py_fds_to_keep,
&cwd_obj, &env_list,
&p2cread, &p2cwrite, &c2pread, &c2pwrite,
&errread, &errwrite, &errpipe_read, &errpipe_write,
&restore_signals, &call_setsid, &preexec_fn))
return NULL;
- close_fds = PyObject_IsTrue(py_close_fds);
- if (close_fds < 0)
- return NULL;
if (close_fds && errpipe_write < 3) { /* precondition */
PyErr_SetString(PyExc_ValueError, "errpipe_write must be >= 3");
return NULL;
@@ -548,10 +542,13 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
/* We need to call gc.disable() when we'll be calling preexec_fn */
if (preexec_fn != Py_None) {
PyObject *result;
+ _Py_IDENTIFIER(isenabled);
+ _Py_IDENTIFIER(disable);
+
gc_module = PyImport_ImportModule("gc");
if (gc_module == NULL)
return NULL;
- result = PyObject_CallMethod(gc_module, "isenabled", NULL);
+ result = _PyObject_CallMethodId(gc_module, &PyId_isenabled, NULL);
if (result == NULL) {
Py_DECREF(gc_module);
return NULL;
@@ -562,7 +559,7 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
Py_DECREF(gc_module);
return NULL;
}
- result = PyObject_CallMethod(gc_module, "disable", NULL);
+ result = _PyObject_CallMethodId(gc_module, &PyId_disable, NULL);
if (result == NULL) {
Py_DECREF(gc_module);
return NULL;
@@ -726,26 +723,24 @@ Raises: Only on an error in the parent process.\n\
PyDoc_STRVAR(subprocess_cloexec_pipe_doc,
"cloexec_pipe() -> (read_end, write_end)\n\n\
-Create a pipe whose ends have the cloexec flag set.");
+Create a pipe whose ends have the cloexec flag set; write_end will be >= 3.");
static PyObject *
subprocess_cloexec_pipe(PyObject *self, PyObject *noargs)
{
int fds[2];
- int res;
+ int res, saved_errno;
+ long oldflags;
#ifdef HAVE_PIPE2
Py_BEGIN_ALLOW_THREADS
res = pipe2(fds, O_CLOEXEC);
Py_END_ALLOW_THREADS
if (res != 0 && errno == ENOSYS)
{
- {
#endif
/* We hold the GIL which offers some protection from other code calling
* fork() before the CLOEXEC flags have been set but we can't guarantee
* anything without pipe2(). */
- long oldflags;
-
res = pipe(fds);
if (res == 0) {
@@ -762,9 +757,47 @@ subprocess_cloexec_pipe(PyObject *self, PyObject *noargs)
if (res == 0)
res = fcntl(fds[1], F_SETFD, oldflags | FD_CLOEXEC);
#ifdef HAVE_PIPE2
- }
}
#endif
+ if (res == 0 && fds[1] < 3) {
+ /* We always want the write end of the pipe to avoid fds 0, 1 and 2
+ * as our child may claim those for stdio connections. */
+ int write_fd = fds[1];
+ int fds_to_close[3] = {-1, -1, -1};
+ int fds_to_close_idx = 0;
+#ifdef F_DUPFD_CLOEXEC
+ fds_to_close[fds_to_close_idx++] = write_fd;
+ write_fd = fcntl(write_fd, F_DUPFD_CLOEXEC, 3);
+ if (write_fd < 0) /* We don't support F_DUPFD_CLOEXEC / other error */
+#endif
+ {
+ /* Use dup a few times until we get a desirable fd. */
+ for (; fds_to_close_idx < 3; ++fds_to_close_idx) {
+ fds_to_close[fds_to_close_idx] = write_fd;
+ write_fd = dup(write_fd);
+ if (write_fd >= 3)
+ break;
+ /* We may dup a few extra times if it returns an error but
+ * that is okay. Repeat calls should return the same error. */
+ }
+ if (write_fd < 0) res = write_fd;
+ if (res == 0) {
+ oldflags = fcntl(write_fd, F_GETFD, 0);
+ if (oldflags < 0) res = oldflags;
+ if (res == 0)
+ res = fcntl(write_fd, F_SETFD, oldflags | FD_CLOEXEC);
+ }
+ }
+ saved_errno = errno;
+ /* Close fds we tried for the write end that were too low. */
+ for (fds_to_close_idx=0; fds_to_close_idx < 3; ++fds_to_close_idx) {
+ int temp_fd = fds_to_close[fds_to_close_idx];
+ while (temp_fd >= 0 && close(temp_fd) < 0 && errno == EINTR);
+ }
+ errno = saved_errno; /* report dup or fcntl errors, not close. */
+ fds[1] = write_fd;
+ } /* end if write fd was too small */
+
if (res != 0)
return PyErr_SetFromErrno(PyExc_OSError);
return Py_BuildValue("(ii)", fds[0], fds[1]);
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index bc9b04a27b..21a2b09f94 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -210,7 +210,7 @@ random_seed(RandomObject *self, PyObject *args)
PyObject *masklower = NULL;
PyObject *thirtytwo = NULL;
PyObject *n = NULL;
- unsigned long *key = NULL;
+ unsigned long *new_key, *key = NULL;
unsigned long keymax; /* # of allocated slots in key */
unsigned long keyused; /* # of used slots in key */
int err;
@@ -228,16 +228,17 @@ random_seed(RandomObject *self, PyObject *args)
Py_INCREF(Py_None);
return Py_None;
}
- /* If the arg is an int or long, use its absolute value; else use
- * the absolute value of its hash code.
+ /* This algorithm relies on the number being unsigned.
+ * So: if the arg is a PyLong, use its absolute value.
+ * Otherwise use its hash value, cast to unsigned.
*/
if (PyLong_Check(arg))
n = PyNumber_Absolute(arg);
else {
- long hash = PyObject_Hash(arg);
+ Py_hash_t hash = PyObject_Hash(arg);
if (hash == -1)
goto Done;
- n = PyLong_FromUnsignedLong((unsigned long)hash);
+ n = PyLong_FromSize_t((size_t)hash);
}
if (n == NULL)
goto Done;
@@ -283,14 +284,16 @@ random_seed(RandomObject *self, PyObject *args)
n = newn;
if (keyused >= keymax) {
unsigned long bigger = keymax << 1;
- if ((bigger >> 1) != keymax) {
+ if ((bigger >> 1) != keymax ||
+ bigger > PY_SSIZE_T_MAX / sizeof(*key)) {
PyErr_NoMemory();
goto Done;
}
- key = (unsigned long *)PyMem_Realloc(key,
+ new_key = (unsigned long *)PyMem_Realloc(key,
bigger * sizeof(*key));
- if (key == NULL)
+ if (new_key == NULL)
goto Done;
+ key = new_key;
keymax = bigger;
}
assert(keyused < keymax);
@@ -441,7 +444,7 @@ static PyMethodDef random_methods[] = {
{"setstate", (PyCFunction)random_setstate, METH_O,
PyDoc_STR("setstate(state) -> None. Restores generator state.")},
{"getrandbits", (PyCFunction)random_getrandbits, METH_VARARGS,
- PyDoc_STR("getrandbits(k) -> x. Generates a long int with "
+ PyDoc_STR("getrandbits(k) -> x. Generates an int with "
"k random bits.")},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/_sqlite/cache.c b/Modules/_sqlite/cache.c
index 735a2426cc..3693363bb2 100644
--- a/Modules/_sqlite/cache.c
+++ b/Modules/_sqlite/cache.c
@@ -217,8 +217,6 @@ PyObject* pysqlite_cache_display(pysqlite_Cache* self, PyObject* args)
pysqlite_Node* ptr;
PyObject* prevkey;
PyObject* nextkey;
- PyObject* fmt_args;
- PyObject* template;
PyObject* display_str;
ptr = self->first;
@@ -229,36 +227,21 @@ PyObject* pysqlite_cache_display(pysqlite_Cache* self, PyObject* args)
} else {
prevkey = Py_None;
}
- Py_INCREF(prevkey);
if (ptr->next) {
nextkey = ptr->next->key;
} else {
nextkey = Py_None;
}
- Py_INCREF(nextkey);
- fmt_args = Py_BuildValue("OOO", prevkey, ptr->key, nextkey);
- if (!fmt_args) {
- return NULL;
- }
- template = PyUnicode_FromString("%s <- %s ->%s\n");
- if (!template) {
- Py_DECREF(fmt_args);
- return NULL;
- }
- display_str = PyUnicode_Format(template, fmt_args);
- Py_DECREF(template);
- Py_DECREF(fmt_args);
+ display_str = PyUnicode_FromFormat("%S <- %S -> %S\n",
+ prevkey, ptr->key, nextkey);
if (!display_str) {
return NULL;
}
PyObject_Print(display_str, stdout, Py_PRINT_RAW);
Py_DECREF(display_str);
- Py_DECREF(prevkey);
- Py_DECREF(nextkey);
-
ptr = ptr->next;
}
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index d52bea49c3..8cf2d6aa80 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -109,7 +109,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
Py_INCREF(isolation_level);
}
self->isolation_level = NULL;
- pysqlite_connection_set_isolation_level(self, isolation_level);
+ if (pysqlite_connection_set_isolation_level(self, isolation_level) < 0) {
+ Py_DECREF(isolation_level);
+ return -1;
+ }
Py_DECREF(isolation_level);
self->statement_cache = (pysqlite_Cache*)PyObject_CallFunction((PyObject*)&pysqlite_CacheType, "Oi", self, cached_statements);
@@ -677,7 +680,7 @@ void _pysqlite_final_callback(sqlite3_context* context)
{
PyObject* function_result;
PyObject** aggregate_instance;
- PyObject* aggregate_class;
+ _Py_IDENTIFIER(finalize);
int ok;
#ifdef WITH_THREAD
@@ -686,8 +689,6 @@ void _pysqlite_final_callback(sqlite3_context* context)
threadstate = PyGILState_Ensure();
#endif
- aggregate_class = (PyObject*)sqlite3_user_data(context);
-
aggregate_instance = (PyObject**)sqlite3_aggregate_context(context, sizeof(PyObject*));
if (!*aggregate_instance) {
/* this branch is executed if there was an exception in the aggregate's
@@ -696,7 +697,7 @@ void _pysqlite_final_callback(sqlite3_context* context)
goto error;
}
- function_result = PyObject_CallMethod(*aggregate_instance, "finalize", "");
+ function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, "");
Py_DECREF(*aggregate_instance);
ok = 0;
@@ -717,6 +718,9 @@ error:
#ifdef WITH_THREAD
PyGILState_Release(threadstate);
#endif
+ /* explicit return to avoid a compilation error if WITH_THREAD
+ is not defined */
+ return;
}
static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self)
@@ -916,6 +920,38 @@ static int _progress_handler(void* user_arg)
return rc;
}
+static void _trace_callback(void* user_arg, const char* statement_string)
+{
+ PyObject *py_statement = NULL;
+ PyObject *ret = NULL;
+
+#ifdef WITH_THREAD
+ PyGILState_STATE gilstate;
+
+ gilstate = PyGILState_Ensure();
+#endif
+ py_statement = PyUnicode_DecodeUTF8(statement_string,
+ strlen(statement_string), "replace");
+ if (py_statement) {
+ ret = PyObject_CallFunctionObjArgs((PyObject*)user_arg, py_statement, NULL);
+ Py_DECREF(py_statement);
+ }
+
+ if (ret) {
+ Py_DECREF(ret);
+ } else {
+ if (_enable_callback_tracebacks) {
+ PyErr_Print();
+ } else {
+ PyErr_Clear();
+ }
+ }
+
+#ifdef WITH_THREAD
+ PyGILState_Release(gilstate);
+#endif
+}
+
static PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
{
PyObject* authorizer_cb;
@@ -975,6 +1011,34 @@ static PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* s
return Py_None;
}
+static PyObject* pysqlite_connection_set_trace_callback(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
+{
+ PyObject* trace_callback;
+
+ static char *kwlist[] = { "trace_callback", NULL };
+
+ if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
+ return NULL;
+ }
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_trace_callback",
+ kwlist, &trace_callback)) {
+ return NULL;
+ }
+
+ if (trace_callback == Py_None) {
+ /* None clears the trace callback previously set */
+ sqlite3_trace(self->db, 0, (void*)0);
+ } else {
+ if (PyDict_SetItem(self->function_pinboard, trace_callback, Py_None) == -1)
+ return NULL;
+ sqlite3_trace(self->db, _trace_callback, trace_callback);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
#ifdef HAVE_LOAD_EXTENSION
static PyObject* pysqlite_enable_load_extension(pysqlite_Connection* self, PyObject* args)
{
@@ -1180,8 +1244,9 @@ PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args,
PyObject* cursor = 0;
PyObject* result = 0;
PyObject* method = 0;
+ _Py_IDENTIFIER(cursor);
- cursor = PyObject_CallMethod((PyObject*)self, "cursor", "");
+ cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
if (!cursor) {
goto error;
}
@@ -1209,8 +1274,9 @@ PyObject* pysqlite_connection_executemany(pysqlite_Connection* self, PyObject* a
PyObject* cursor = 0;
PyObject* result = 0;
PyObject* method = 0;
+ _Py_IDENTIFIER(cursor);
- cursor = PyObject_CallMethod((PyObject*)self, "cursor", "");
+ cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
if (!cursor) {
goto error;
}
@@ -1238,8 +1304,9 @@ PyObject* pysqlite_connection_executescript(pysqlite_Connection* self, PyObject*
PyObject* cursor = 0;
PyObject* result = 0;
PyObject* method = 0;
+ _Py_IDENTIFIER(cursor);
- cursor = PyObject_CallMethod((PyObject*)self, "cursor", "");
+ cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
if (!cursor) {
goto error;
}
@@ -1394,10 +1461,12 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
PyObject* uppercase_name = 0;
PyObject* name;
PyObject* retval;
- Py_UNICODE* chk;
Py_ssize_t i, len;
+ _Py_IDENTIFIER(upper);
char *uppercase_name_str;
int rc;
+ unsigned int kind;
+ void *data;
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
goto finally;
@@ -1407,17 +1476,21 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
goto finally;
}
- uppercase_name = PyObject_CallMethod(name, "upper", "");
+ uppercase_name = _PyObject_CallMethodId(name, &PyId_upper, "");
if (!uppercase_name) {
goto finally;
}
- len = PyUnicode_GET_SIZE(uppercase_name);
- chk = PyUnicode_AS_UNICODE(uppercase_name);
- for (i=0; i<len; i++, chk++) {
- if ((*chk >= '0' && *chk <= '9')
- || (*chk >= 'A' && *chk <= 'Z')
- || (*chk == '_'))
+ if (PyUnicode_READY(uppercase_name))
+ goto finally;
+ len = PyUnicode_GET_LENGTH(uppercase_name);
+ kind = PyUnicode_KIND(uppercase_name);
+ data = PyUnicode_DATA(uppercase_name);
+ for (i=0; i<len; i++) {
+ Py_UCS4 ch = PyUnicode_READ(kind, data, i);
+ if ((ch >= '0' && ch <= '9')
+ || (ch >= 'A' && ch <= 'Z')
+ || (ch == '_'))
{
continue;
} else {
@@ -1536,6 +1609,8 @@ static PyMethodDef connection_methods[] = {
#endif
{"set_progress_handler", (PyCFunction)pysqlite_connection_set_progress_handler, METH_VARARGS|METH_KEYWORDS,
PyDoc_STR("Sets progress handler callback. Non-standard.")},
+ {"set_trace_callback", (PyCFunction)pysqlite_connection_set_trace_callback, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("Sets a trace callback called for each SQL statement (passed as unicode). Non-standard.")},
{"execute", (PyCFunction)pysqlite_connection_execute, METH_VARARGS,
PyDoc_STR("Executes a SQL statement. Non-standard.")},
{"executemany", (PyCFunction)pysqlite_connection_executemany, METH_VARARGS,
diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h
index c8e2f7cbd2..0c9734caf7 100644
--- a/Modules/_sqlite/connection.h
+++ b/Modules/_sqlite/connection.h
@@ -83,8 +83,7 @@ typedef struct
/* Determines how bytestrings from SQLite are converted to Python objects:
* - PyUnicode_Type: Python Unicode objects are constructed from UTF-8 bytestrings
- * - OptimizedUnicode: Like before, but for ASCII data, only PyStrings are created.
- * - PyBytes_Type: PyStrings are created as-is.
+ * - PyBytes_Type: The bytestrings are returned as-is.
* - Any custom callable: Any object returned from the callable called with the bytestring
* as single parameter.
*/
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 30c2206ae6..09c13d4dbd 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -118,11 +118,9 @@ static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject*
static void pysqlite_cursor_dealloc(pysqlite_Cursor* self)
{
- int rc;
-
/* Reset the statement if the user has not closed the cursor */
if (self->statement) {
- rc = pysqlite_statement_reset(self->statement);
+ pysqlite_statement_reset(self->statement);
Py_DECREF(self->statement);
}
@@ -144,8 +142,9 @@ PyObject* _pysqlite_get_converter(PyObject* key)
{
PyObject* upcase_key;
PyObject* retval;
+ _Py_IDENTIFIER(upper);
- upcase_key = PyObject_CallMethod(key, "upper", "");
+ upcase_key = _PyObject_CallMethodId(key, &PyId_upper, "");
if (!upcase_key) {
return NULL;
}
@@ -231,8 +230,7 @@ int pysqlite_build_row_cast_map(pysqlite_Cursor* self)
if (converter != Py_None) {
Py_DECREF(converter);
}
- Py_XDECREF(self->row_cast_map);
- self->row_cast_map = NULL;
+ Py_CLEAR(self->row_cast_map);
return -1;
}
@@ -260,11 +258,6 @@ PyObject* _pysqlite_build_column_name(const char* colname)
}
}
-PyObject* pysqlite_unicode_from_string(const char* val_str, Py_ssize_t size, int optimize)
-{
- return PyUnicode_FromStringAndSize(val_str, size);
-}
-
/*
* Returns a row from the currently active SQLite statement
*
@@ -342,12 +335,8 @@ PyObject* _pysqlite_fetch_one_row(pysqlite_Cursor* self)
} else if (coltype == SQLITE_TEXT) {
val_str = (const char*)sqlite3_column_text(self->statement->st, i);
nbytes = sqlite3_column_bytes(self->statement->st, i);
- if ((self->connection->text_factory == (PyObject*)&PyUnicode_Type)
- || (self->connection->text_factory == pysqlite_OptimizedUnicode)) {
-
- converted = pysqlite_unicode_from_string(val_str, nbytes,
- self->connection->text_factory == pysqlite_OptimizedUnicode ? 1 : 0);
-
+ if (self->connection->text_factory == (PyObject*)&PyUnicode_Type) {
+ converted = PyUnicode_FromStringAndSize(val_str, nbytes);
if (!converted) {
colname = sqlite3_column_name(self->statement->st, i);
if (!colname) {
@@ -445,7 +434,6 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
int statement_type;
PyObject* descriptor;
PyObject* second_argument = NULL;
- int allow_8bit_chars;
if (!check_cursor(self)) {
goto error;
@@ -454,12 +442,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
self->locked = 1;
self->reset = 0;
- /* Make shooting yourself in the foot with not utf-8 decodable 8-bit-strings harder */
- allow_8bit_chars = ((self->connection->text_factory != (PyObject*)&PyUnicode_Type) &&
- (self->connection->text_factory != pysqlite_OptimizedUnicode));
-
- Py_XDECREF(self->next_row);
- self->next_row = NULL;
+ Py_CLEAR(self->next_row);
if (multiple) {
/* executemany() */
@@ -521,7 +504,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
if (self->statement != NULL) {
/* There is an active statement */
- rc = pysqlite_statement_reset(self->statement);
+ pysqlite_statement_reset(self->statement);
}
operation_cstr = _PyUnicode_AsStringAndSize(operation, &operation_len);
@@ -616,7 +599,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
pysqlite_statement_mark_dirty(self->statement);
- pysqlite_statement_bind_parameters(self->statement, parameters, allow_8bit_chars);
+ pysqlite_statement_bind_parameters(self->statement, parameters);
if (PyErr_Occurred()) {
goto error;
}
@@ -727,7 +710,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
}
if (multiple) {
- rc = pysqlite_statement_reset(self->statement);
+ pysqlite_statement_reset(self->statement);
}
Py_XDECREF(parameters);
}
@@ -875,8 +858,7 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor *self)
if (!self->next_row) {
if (self->statement) {
(void)pysqlite_statement_reset(self->statement);
- Py_DECREF(self->statement);
- self->statement = NULL;
+ Py_CLEAR(self->statement);
}
return NULL;
}
diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c
index c730afa7bd..2261b8013c 100644
--- a/Modules/_sqlite/microprotocols.c
+++ b/Modules/_sqlite/microprotocols.c
@@ -95,7 +95,9 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
/* try to have the protocol adapt this object*/
if (PyObject_HasAttrString(proto, "__adapt__")) {
- PyObject *adapted = PyObject_CallMethod(proto, "__adapt__", "O", obj);
+ _Py_IDENTIFIER(__adapt__);
+ PyObject *adapted = _PyObject_CallMethodId(proto, &PyId___adapt__, "O", obj);
+
if (adapted) {
if (adapted != Py_None) {
return adapted;
@@ -110,7 +112,9 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
/* and finally try to have the object adapt itself */
if (PyObject_HasAttrString(obj, "__conform__")) {
- PyObject *adapted = PyObject_CallMethod(obj, "__conform__","O", proto);
+ _Py_IDENTIFIER(__conform__);
+ PyObject *adapted = _PyObject_CallMethodId(obj, &PyId___conform__,"O", proto);
+
if (adapted) {
if (adapted != Py_None) {
return adapted;
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index cbc3b8e90b..bea6d6aba1 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -37,7 +37,7 @@
PyObject* pysqlite_Error, *pysqlite_Warning, *pysqlite_InterfaceError, *pysqlite_DatabaseError,
*pysqlite_InternalError, *pysqlite_OperationalError, *pysqlite_ProgrammingError,
- *pysqlite_IntegrityError, *pysqlite_DataError, *pysqlite_NotSupportedError, *pysqlite_OptimizedUnicode;
+ *pysqlite_IntegrityError, *pysqlite_DataError, *pysqlite_NotSupportedError;
PyObject* converters;
int _enable_callback_tracebacks;
@@ -179,13 +179,14 @@ static PyObject* module_register_converter(PyObject* self, PyObject* args)
PyObject* name = NULL;
PyObject* callable;
PyObject* retval = NULL;
+ _Py_IDENTIFIER(upper);
if (!PyArg_ParseTuple(args, "UO", &orig_name, &callable)) {
return NULL;
}
/* convert the name to upper case */
- name = PyObject_CallMethod(orig_name, "upper", "");
+ name = _PyObject_CallMethodId(orig_name, &PyId_upper, "");
if (!name) {
goto error;
}
@@ -406,13 +407,13 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
}
PyDict_SetItemString(dict, "NotSupportedError", pysqlite_NotSupportedError);
- /* We just need "something" unique for pysqlite_OptimizedUnicode. It does not really
- * need to be a string subclass. Just anything that can act as a special
- * marker for us. So I pulled PyCell_Type out of my magic hat.
- */
- Py_INCREF((PyObject*)&PyCell_Type);
- pysqlite_OptimizedUnicode = (PyObject*)&PyCell_Type;
- PyDict_SetItemString(dict, "OptimizedUnicode", pysqlite_OptimizedUnicode);
+ /* In Python 2.x, setting Connection.text_factory to
+ OptimizedUnicode caused Unicode objects to be returned for
+ non-ASCII data and bytestrings to be returned for ASCII data.
+ Now OptimizedUnicode is an alias for str, so it has no
+ effect. */
+ Py_INCREF((PyObject*)&PyUnicode_Type);
+ PyDict_SetItemString(dict, "OptimizedUnicode", (PyObject*)&PyUnicode_Type);
/* Set integer constants */
for (i = 0; _int_constants[i].constant_name != 0; i++) {
diff --git a/Modules/_sqlite/module.h b/Modules/_sqlite/module.h
index 0eddb67948..b51724bf4c 100644
--- a/Modules/_sqlite/module.h
+++ b/Modules/_sqlite/module.h
@@ -38,8 +38,6 @@ extern PyObject* pysqlite_IntegrityError;
extern PyObject* pysqlite_DataError;
extern PyObject* pysqlite_NotSupportedError;
-extern PyObject* pysqlite_OptimizedUnicode;
-
/* the functions time.time() and time.sleep() */
extern PyObject* time_time;
extern PyObject* time_sleep;
diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c
index 3d440942f9..b50658c220 100644
--- a/Modules/_sqlite/row.c
+++ b/Modules/_sqlite/row.c
@@ -173,10 +173,9 @@ static Py_hash_t pysqlite_row_hash(pysqlite_Row *self)
static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other, int opid)
{
- if (opid != Py_EQ && opid != Py_NE) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (opid != Py_EQ && opid != Py_NE)
+ Py_RETURN_NOTIMPLEMENTED;
+
if (PyType_IsSubtype(Py_TYPE(_other), &pysqlite_RowType)) {
pysqlite_Row *other = (pysqlite_Row *)_other;
PyObject *res = PyObject_RichCompare(self->description, other->description, opid);
@@ -186,8 +185,7 @@ static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other,
return PyObject_RichCompare(self->data, other->data, opid);
}
}
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
PyMappingMethods pysqlite_row_as_mapping = {
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c
index 09d95d9a67..471a0676a8 100644
--- a/Modules/_sqlite/statement.c
+++ b/Modules/_sqlite/statement.c
@@ -88,7 +88,7 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con
return rc;
}
-int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter, int allow_8bit_chars)
+int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter)
{
int rc = SQLITE_OK;
const char* buffer;
@@ -169,7 +169,7 @@ static int _need_adapt(PyObject* obj)
}
}
-void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* parameters, int allow_8bit_chars)
+void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* parameters)
{
PyObject* current_param;
PyObject* adapted;
@@ -223,7 +223,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para
}
}
- rc = pysqlite_statement_bind_parameter(self, i + 1, adapted, allow_8bit_chars);
+ rc = pysqlite_statement_bind_parameter(self, i + 1, adapted);
Py_DECREF(adapted);
if (rc != SQLITE_OK) {
@@ -268,7 +268,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para
}
}
- rc = pysqlite_statement_bind_parameter(self, i, adapted, allow_8bit_chars);
+ rc = pysqlite_statement_bind_parameter(self, i, adapted);
Py_DECREF(adapted);
if (rc != SQLITE_OK) {
@@ -372,11 +372,9 @@ void pysqlite_statement_mark_dirty(pysqlite_Statement* self)
void pysqlite_statement_dealloc(pysqlite_Statement* self)
{
- int rc;
-
if (self->st) {
Py_BEGIN_ALLOW_THREADS
- rc = sqlite3_finalize(self->st);
+ sqlite3_finalize(self->st);
Py_END_ALLOW_THREADS
}
diff --git a/Modules/_sqlite/statement.h b/Modules/_sqlite/statement.h
index e5da42e7d8..4681443e76 100644
--- a/Modules/_sqlite/statement.h
+++ b/Modules/_sqlite/statement.h
@@ -46,8 +46,8 @@ extern PyTypeObject pysqlite_StatementType;
int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* connection, PyObject* sql);
void pysqlite_statement_dealloc(pysqlite_Statement* self);
-int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter, int allow_8bit_chars);
-void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* parameters, int allow_8bit_chars);
+int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter);
+void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* parameters);
int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* parameters);
int pysqlite_statement_finalize(pysqlite_Statement* self);
diff --git a/Modules/_sre.c b/Modules/_sre.c
index e76144de59..b1258eefc4 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -163,21 +163,17 @@ static unsigned int sre_lower_locale(unsigned int ch)
/* unicode-specific character predicates */
-#if defined(HAVE_UNICODE)
-
-#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL((Py_UNICODE)(ch))
-#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE((Py_UNICODE)(ch))
-#define SRE_UNI_IS_LINEBREAK(ch) Py_UNICODE_ISLINEBREAK((Py_UNICODE)(ch))
-#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM((Py_UNICODE)(ch))
-#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM((ch)) || (ch) == '_')
+#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch)
+#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
+#define SRE_UNI_IS_LINEBREAK(ch) Py_UNICODE_ISLINEBREAK(ch)
+#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
+#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
static unsigned int sre_lower_unicode(unsigned int ch)
{
- return (unsigned int) Py_UNICODE_TOLOWER((Py_UNICODE)(ch));
+ return (unsigned int) Py_UNICODE_TOLOWER(ch);
}
-#endif
-
LOCAL(int)
sre_category(SRE_CODE category, unsigned int ch)
{
@@ -205,7 +201,6 @@ sre_category(SRE_CODE category, unsigned int ch)
case SRE_CATEGORY_LOC_NOT_WORD:
return !SRE_LOC_IS_WORD(ch);
-#if defined(HAVE_UNICODE)
case SRE_CATEGORY_UNI_DIGIT:
return SRE_UNI_IS_DIGIT(ch);
case SRE_CATEGORY_UNI_NOT_DIGIT:
@@ -222,24 +217,6 @@ sre_category(SRE_CODE category, unsigned int ch)
return SRE_UNI_IS_LINEBREAK(ch);
case SRE_CATEGORY_UNI_NOT_LINEBREAK:
return !SRE_UNI_IS_LINEBREAK(ch);
-#else
- case SRE_CATEGORY_UNI_DIGIT:
- return SRE_IS_DIGIT(ch);
- case SRE_CATEGORY_UNI_NOT_DIGIT:
- return !SRE_IS_DIGIT(ch);
- case SRE_CATEGORY_UNI_SPACE:
- return SRE_IS_SPACE(ch);
- case SRE_CATEGORY_UNI_NOT_SPACE:
- return !SRE_IS_SPACE(ch);
- case SRE_CATEGORY_UNI_WORD:
- return SRE_LOC_IS_WORD(ch);
- case SRE_CATEGORY_UNI_NOT_WORD:
- return !SRE_LOC_IS_WORD(ch);
- case SRE_CATEGORY_UNI_LINEBREAK:
- return SRE_IS_LINEBREAK(ch);
- case SRE_CATEGORY_UNI_NOT_LINEBREAK:
- return !SRE_IS_LINEBREAK(ch);
-#endif
}
return 0;
}
@@ -265,7 +242,7 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
if (cursize < minsize) {
void* stack;
cursize = minsize+minsize/4+1024;
- TRACE(("allocate/grow stack %d\n", cursize));
+ TRACE(("allocate/grow stack %" PY_FORMAT_SIZE_T "d\n", cursize));
stack = PyMem_REALLOC(state->data_stack, cursize);
if (!stack) {
data_stack_dealloc(state);
@@ -280,6 +257,7 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
/* generate 8-bit version */
#define SRE_CHAR unsigned char
+#define SRE_CHARGET(state, buf, index) ((unsigned char*)buf)[index]
#define SRE_AT sre_at
#define SRE_COUNT sre_count
#define SRE_CHARSET sre_charset
@@ -287,15 +265,11 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
#define SRE_MATCH sre_match
#define SRE_MATCH_CONTEXT sre_match_context
#define SRE_SEARCH sre_search
-#define SRE_LITERAL_TEMPLATE sre_literal_template
-
-#if defined(HAVE_UNICODE)
#define SRE_RECURSIVE
#include "_sre.c"
#undef SRE_RECURSIVE
-#undef SRE_LITERAL_TEMPLATE
#undef SRE_SEARCH
#undef SRE_MATCH
#undef SRE_MATCH_CONTEXT
@@ -304,10 +278,15 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
#undef SRE_COUNT
#undef SRE_AT
#undef SRE_CHAR
+#undef SRE_CHARGET
-/* generate 16-bit unicode version */
+/* generate 8/16/32-bit unicode version */
-#define SRE_CHAR Py_UNICODE
+#define SRE_CHAR void
+#define SRE_CHARGET(state, buf, index) \
+ ((state->charsize==1) ? ((Py_UCS1*)buf)[index] : \
+ (state->charsize==2) ? ((Py_UCS2*)buf)[index] : \
+ ((Py_UCS4*)buf)[index])
#define SRE_AT sre_uat
#define SRE_COUNT sre_ucount
#define SRE_CHARSET sre_ucharset
@@ -315,8 +294,6 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
#define SRE_MATCH sre_umatch
#define SRE_MATCH_CONTEXT sre_umatch_context
#define SRE_SEARCH sre_usearch
-#define SRE_LITERAL_TEMPLATE sre_uliteral_template
-#endif
#endif /* SRE_RECURSIVE */
@@ -327,7 +304,7 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
settings */
LOCAL(int)
-SRE_AT(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at)
+SRE_AT(SRE_STATE* state, char* ptr, SRE_CODE at)
{
/* check if pointer is at given position */
@@ -341,16 +318,16 @@ SRE_AT(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at)
case SRE_AT_BEGINNING_LINE:
return ((void*) ptr == state->beginning ||
- SRE_IS_LINEBREAK((int) ptr[-1]));
+ SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, -1)));
case SRE_AT_END:
- return (((void*) (ptr+1) == state->end &&
- SRE_IS_LINEBREAK((int) ptr[0])) ||
+ return (((void*) (ptr+state->charsize) == state->end &&
+ SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, 0))) ||
((void*) ptr == state->end));
case SRE_AT_END_LINE:
return ((void*) ptr == state->end ||
- SRE_IS_LINEBREAK((int) ptr[0]));
+ SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, 0)));
case SRE_AT_END_STRING:
return ((void*) ptr == state->end);
@@ -359,57 +336,55 @@ SRE_AT(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at)
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_IS_WORD((int) ptr[-1]) : 0;
+ SRE_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_IS_WORD((int) ptr[0]) : 0;
+ SRE_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp != thatp;
case SRE_AT_NON_BOUNDARY:
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_IS_WORD((int) ptr[-1]) : 0;
+ SRE_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_IS_WORD((int) ptr[0]) : 0;
+ SRE_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp == thatp;
case SRE_AT_LOC_BOUNDARY:
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
+ SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_LOC_IS_WORD((int) ptr[0]) : 0;
+ SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp != thatp;
case SRE_AT_LOC_NON_BOUNDARY:
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
+ SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_LOC_IS_WORD((int) ptr[0]) : 0;
+ SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp == thatp;
-#if defined(HAVE_UNICODE)
case SRE_AT_UNI_BOUNDARY:
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
+ SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_UNI_IS_WORD((int) ptr[0]) : 0;
+ SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp != thatp;
case SRE_AT_UNI_NON_BOUNDARY:
if (state->beginning == state->end)
return 0;
thatp = ((void*) ptr > state->beginning) ?
- SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
+ SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
thisp = ((void*) ptr < state->end) ?
- SRE_UNI_IS_WORD((int) ptr[0]) : 0;
+ SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
return thisp == thatp;
-#endif
}
@@ -512,28 +487,29 @@ LOCAL(Py_ssize_t)
SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount)
{
SRE_CODE chr;
- SRE_CHAR* ptr = (SRE_CHAR *)state->ptr;
- SRE_CHAR* end = (SRE_CHAR *)state->end;
+ char* ptr = (char *)state->ptr;
+ char* end = (char *)state->end;
Py_ssize_t i;
/* adjust end */
- if (maxcount < end - ptr && maxcount != SRE_MAXREPEAT)
- end = ptr + maxcount;
+ if (maxcount < (end - ptr) / state->charsize && maxcount != SRE_MAXREPEAT)
+ end = ptr + maxcount*state->charsize;
switch (pattern[0]) {
case SRE_OP_IN:
/* repeated set */
TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
- while (ptr < end && SRE_CHARSET(pattern + 2, *ptr))
- ptr++;
+ while (ptr < end &&
+ SRE_CHARSET(pattern + 2, SRE_CHARGET(state, ptr, 0)))
+ ptr += state->charsize;
break;
case SRE_OP_ANY:
/* repeated dot wildcard. */
TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
- while (ptr < end && !SRE_IS_LINEBREAK(*ptr))
- ptr++;
+ while (ptr < end && !SRE_IS_LINEBREAK(SRE_CHARGET(state, ptr, 0)))
+ ptr += state->charsize;
break;
case SRE_OP_ANY_ALL:
@@ -547,51 +523,52 @@ SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount)
/* repeated literal */
chr = pattern[1];
TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
- while (ptr < end && (SRE_CODE) *ptr == chr)
- ptr++;
+ while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) == chr)
+ ptr += state->charsize;
break;
case SRE_OP_LITERAL_IGNORE:
/* repeated literal */
chr = pattern[1];
TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
- while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr)
- ptr++;
+ while (ptr < end && (SRE_CODE) state->lower(SRE_CHARGET(state, ptr, 0)) == chr)
+ ptr += state->charsize;
break;
case SRE_OP_NOT_LITERAL:
/* repeated non-literal */
chr = pattern[1];
TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
- while (ptr < end && (SRE_CODE) *ptr != chr)
- ptr++;
+ while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) != chr)
+ ptr += state->charsize;
break;
case SRE_OP_NOT_LITERAL_IGNORE:
/* repeated non-literal */
chr = pattern[1];
TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
- while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr)
- ptr++;
+ while (ptr < end && (SRE_CODE) state->lower(SRE_CHARGET(state, ptr, 0)) != chr)
+ ptr += state->charsize;
break;
default:
/* repeated single character pattern */
TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
- while ((SRE_CHAR*) state->ptr < end) {
+ while ((char*) state->ptr < end) {
i = SRE_MATCH(state, pattern);
if (i < 0)
return i;
if (!i)
break;
}
- TRACE(("|%p|%p|COUNT %d\n", pattern, ptr,
- (SRE_CHAR*) state->ptr - ptr));
- return (SRE_CHAR*) state->ptr - ptr;
+ TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
+ ((char*)state->ptr - ptr)/state->charsize));
+ return ((char*)state->ptr - ptr)/state->charsize;
}
- TRACE(("|%p|%p|COUNT %d\n", pattern, ptr, ptr - (SRE_CHAR*) state->ptr));
- return ptr - (SRE_CHAR*) state->ptr;
+ TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
+ (ptr - (char*) state->ptr)/state->charsize));
+ return (ptr - (char*) state->ptr)/state->charsize;
}
#if 0 /* not used in this release */
@@ -602,19 +579,19 @@ SRE_INFO(SRE_STATE* state, SRE_CODE* pattern)
returns the number of SRE_CODE objects to skip if successful, 0
if no match */
- SRE_CHAR* end = state->end;
- SRE_CHAR* ptr = state->ptr;
+ char* end = state->end;
+ char* ptr = state->ptr;
Py_ssize_t i;
/* check minimal length */
- if (pattern[3] && (end - ptr) < pattern[3])
+ if (pattern[3] && (end - ptr)/state->charsize < pattern[3])
return 0;
/* check known prefix */
if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) {
/* <length> <skip> <prefix data> <overlap data> */
for (i = 0; i < pattern[5]; i++)
- if ((SRE_CODE) ptr[i] != pattern[7 + i])
+ if ((SRE_CODE) SRE_CHARGET(state, ptr, i) != pattern[7 + i])
return 0;
return pattern[0] + 2 * pattern[6];
}
@@ -677,9 +654,10 @@ SRE_INFO(SRE_STATE* state, SRE_CODE* pattern)
#define DATA_STACK_ALLOC(state, type, ptr) \
do { \
alloc_pos = state->data_stack_base; \
- TRACE(("allocating %s in %d (%d)\n", \
+ TRACE(("allocating %s in %" PY_FORMAT_SIZE_T "d " \
+ "(%" PY_FORMAT_SIZE_T "d)\n", \
SFY(type), alloc_pos, sizeof(type))); \
- if (state->data_stack_size < alloc_pos+sizeof(type)) { \
+ if (sizeof(type) > state->data_stack_size - alloc_pos) { \
int j = data_stack_grow(state, sizeof(type)); \
if (j < 0) return j; \
if (ctx_pos != -1) \
@@ -691,15 +669,16 @@ do { \
#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
do { \
- TRACE(("looking up %s at %d\n", SFY(type), pos)); \
+ TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", SFY(type), pos)); \
ptr = (type*)(state->data_stack+pos); \
} while (0)
#define DATA_STACK_PUSH(state, data, size) \
do { \
- TRACE(("copy data in %p to %d (%d)\n", \
+ TRACE(("copy data in %p to %" PY_FORMAT_SIZE_T "d " \
+ "(%" PY_FORMAT_SIZE_T "d)\n", \
data, state->data_stack_base, size)); \
- if (state->data_stack_size < state->data_stack_base+size) { \
+ if (size > state->data_stack_size - state->data_stack_base) { \
int j = data_stack_grow(state, size); \
if (j < 0) return j; \
if (ctx_pos != -1) \
@@ -711,7 +690,8 @@ do { \
#define DATA_STACK_POP(state, data, size, discard) \
do { \
- TRACE(("copy data to %p from %d (%d)\n", \
+ TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
+ "(%" PY_FORMAT_SIZE_T "d)\n", \
data, state->data_stack_base-size, size)); \
memcpy(data, state->data_stack+state->data_stack_base-size, size); \
if (discard) \
@@ -720,7 +700,8 @@ do { \
#define DATA_STACK_POP_DISCARD(state, size) \
do { \
- TRACE(("discard data from %d (%d)\n", \
+ TRACE(("discard data from %" PY_FORMAT_SIZE_T "d " \
+ "(%" PY_FORMAT_SIZE_T "d)\n", \
state->data_stack_base-size, size)); \
state->data_stack_base -= size; \
} while(0)
@@ -783,7 +764,7 @@ do { \
typedef struct {
Py_ssize_t last_ctx_pos;
Py_ssize_t jump;
- SRE_CHAR* ptr;
+ char* ptr;
SRE_CODE* pattern;
Py_ssize_t count;
Py_ssize_t lastmark;
@@ -799,7 +780,7 @@ typedef struct {
LOCAL(Py_ssize_t)
SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
{
- SRE_CHAR* end = (SRE_CHAR *)state->end;
+ char* end = (char*)state->end;
Py_ssize_t alloc_pos, ctx_pos = -1;
Py_ssize_t i, ret = 0;
Py_ssize_t jump;
@@ -818,14 +799,16 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
entrance:
- ctx->ptr = (SRE_CHAR *)state->ptr;
+ ctx->ptr = (char *)state->ptr;
if (ctx->pattern[0] == SRE_OP_INFO) {
/* optimization info block */
/* <INFO> <1=skip> <2=flags> <3=min> ... */
- if (ctx->pattern[3] && (end - ctx->ptr) < ctx->pattern[3]) {
- TRACE(("reject (got %d chars, need %d)\n",
- (end - ctx->ptr), ctx->pattern[3]));
+ if (ctx->pattern[3] && (end - ctx->ptr)/state->charsize < ctx->pattern[3]) {
+ TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, "
+ "need %" PY_FORMAT_SIZE_T "d)\n",
+ (end - ctx->ptr)/state->charsize,
+ (Py_ssize_t) ctx->pattern[3]));
RETURN_FAILURE;
}
ctx->pattern += ctx->pattern[1] + 1;
@@ -865,10 +848,10 @@ entrance:
/* <LITERAL> <code> */
TRACE(("|%p|%p|LITERAL %d\n", ctx->pattern,
ctx->ptr, *ctx->pattern));
- if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] != ctx->pattern[0])
+ if (ctx->ptr >= end || (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) != ctx->pattern[0])
RETURN_FAILURE;
ctx->pattern++;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_NOT_LITERAL:
@@ -876,10 +859,10 @@ entrance:
/* <NOT_LITERAL> <code> */
TRACE(("|%p|%p|NOT_LITERAL %d\n", ctx->pattern,
ctx->ptr, *ctx->pattern));
- if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] == ctx->pattern[0])
+ if (ctx->ptr >= end || (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) == ctx->pattern[0])
RETURN_FAILURE;
ctx->pattern++;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_SUCCESS:
@@ -902,19 +885,19 @@ entrance:
/* <CATEGORY> <code> */
TRACE(("|%p|%p|CATEGORY %d\n", ctx->pattern,
ctx->ptr, *ctx->pattern));
- if (ctx->ptr >= end || !sre_category(ctx->pattern[0], ctx->ptr[0]))
+ if (ctx->ptr >= end || !sre_category(ctx->pattern[0], SRE_CHARGET(state, ctx->ptr, 0)))
RETURN_FAILURE;
ctx->pattern++;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_ANY:
/* match anything (except a newline) */
/* <ANY> */
TRACE(("|%p|%p|ANY\n", ctx->pattern, ctx->ptr));
- if (ctx->ptr >= end || SRE_IS_LINEBREAK(ctx->ptr[0]))
- RETURN_FAILURE;
- ctx->ptr++;
+ if (ctx->ptr >= end || SRE_IS_LINEBREAK(SRE_CHARGET(state, ctx->ptr, 0)))
+ RETURN_FAILURE;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_ANY_ALL:
@@ -923,47 +906,47 @@ entrance:
TRACE(("|%p|%p|ANY_ALL\n", ctx->pattern, ctx->ptr));
if (ctx->ptr >= end)
RETURN_FAILURE;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_IN:
/* match set member (or non_member) */
/* <IN> <skip> <set> */
TRACE(("|%p|%p|IN\n", ctx->pattern, ctx->ptr));
- if (ctx->ptr >= end || !SRE_CHARSET(ctx->pattern + 1, *ctx->ptr))
- RETURN_FAILURE;
+ if (ctx->ptr >= end || !SRE_CHARSET(ctx->pattern + 1, SRE_CHARGET(state, ctx->ptr, 0)))
+ RETURN_FAILURE;
ctx->pattern += ctx->pattern[0];
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_LITERAL_IGNORE:
TRACE(("|%p|%p|LITERAL_IGNORE %d\n",
ctx->pattern, ctx->ptr, ctx->pattern[0]));
if (ctx->ptr >= end ||
- state->lower(*ctx->ptr) != state->lower(*ctx->pattern))
+ state->lower(SRE_CHARGET(state, ctx->ptr, 0)) != state->lower(*ctx->pattern))
RETURN_FAILURE;
ctx->pattern++;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_NOT_LITERAL_IGNORE:
TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n",
ctx->pattern, ctx->ptr, *ctx->pattern));
if (ctx->ptr >= end ||
- state->lower(*ctx->ptr) == state->lower(*ctx->pattern))
+ state->lower(SRE_CHARGET(state, ctx->ptr, 0)) == state->lower(*ctx->pattern))
RETURN_FAILURE;
ctx->pattern++;
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_IN_IGNORE:
TRACE(("|%p|%p|IN_IGNORE\n", ctx->pattern, ctx->ptr));
if (ctx->ptr >= end
|| !SRE_CHARSET(ctx->pattern+1,
- (SRE_CODE)state->lower(*ctx->ptr)))
+ (SRE_CODE)state->lower(SRE_CHARGET(state, ctx->ptr, 0))))
RETURN_FAILURE;
ctx->pattern += ctx->pattern[0];
- ctx->ptr++;
+ ctx->ptr += state->charsize;
break;
case SRE_OP_JUMP:
@@ -986,11 +969,11 @@ entrance:
for (; ctx->pattern[0]; ctx->pattern += ctx->pattern[0]) {
if (ctx->pattern[1] == SRE_OP_LITERAL &&
(ctx->ptr >= end ||
- (SRE_CODE) *ctx->ptr != ctx->pattern[2]))
+ (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) != ctx->pattern[2]))
continue;
if (ctx->pattern[1] == SRE_OP_IN &&
(ctx->ptr >= end ||
- !SRE_CHARSET(ctx->pattern + 3, (SRE_CODE) *ctx->ptr)))
+ !SRE_CHARSET(ctx->pattern + 3, (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0))))
continue;
state->ptr = ctx->ptr;
DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1);
@@ -1021,7 +1004,7 @@ entrance:
TRACE(("|%p|%p|REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
ctx->pattern[1], ctx->pattern[2]));
- if (ctx->ptr + ctx->pattern[1] > end)
+ if ((Py_ssize_t) ctx->pattern[1] > (end - ctx->ptr) / state->charsize)
RETURN_FAILURE; /* cannot match */
state->ptr = ctx->ptr;
@@ -1030,7 +1013,7 @@ entrance:
RETURN_ON_ERROR(ret);
DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
ctx->count = ret;
- ctx->ptr += ctx->count;
+ ctx->ptr += state->charsize * ctx->count;
/* when we arrive here, count contains the number of
matches, and ctx->ptr points to the tail of the target
@@ -1054,8 +1037,9 @@ entrance:
ctx->u.chr = ctx->pattern[ctx->pattern[0]+1];
for (;;) {
while (ctx->count >= (Py_ssize_t) ctx->pattern[1] &&
- (ctx->ptr >= end || *ctx->ptr != ctx->u.chr)) {
- ctx->ptr--;
+ (ctx->ptr >= end ||
+ SRE_CHARGET(state, ctx->ptr, 0) != ctx->u.chr)) {
+ ctx->ptr -= state->charsize;
ctx->count--;
}
if (ctx->count < (Py_ssize_t) ctx->pattern[1])
@@ -1070,7 +1054,7 @@ entrance:
LASTMARK_RESTORE();
- ctx->ptr--;
+ ctx->ptr -= state->charsize;
ctx->count--;
}
@@ -1084,7 +1068,7 @@ entrance:
RETURN_ON_ERROR(ret);
RETURN_SUCCESS;
}
- ctx->ptr--;
+ ctx->ptr -= state->charsize;
ctx->count--;
LASTMARK_RESTORE();
}
@@ -1104,7 +1088,7 @@ entrance:
TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
ctx->pattern[1], ctx->pattern[2]));
- if (ctx->ptr + ctx->pattern[1] > end)
+ if ((Py_ssize_t) ctx->pattern[1] > (end - ctx->ptr) / state->charsize)
RETURN_FAILURE; /* cannot match */
state->ptr = ctx->ptr;
@@ -1121,7 +1105,7 @@ entrance:
RETURN_FAILURE;
/* advance past minimum matches of repeat */
ctx->count = ret;
- ctx->ptr += ctx->count;
+ ctx->ptr += state->charsize * ctx->count;
}
if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) {
@@ -1148,7 +1132,7 @@ entrance:
if (ret == 0)
break;
assert(ret == 1);
- ctx->ptr++;
+ ctx->ptr += state->charsize;
ctx->count++;
LASTMARK_RESTORE();
}
@@ -1200,10 +1184,10 @@ entrance:
ctx->count = ctx->u.rep->count+1;
- TRACE(("|%p|%p|MAX_UNTIL %d\n", ctx->pattern,
+ TRACE(("|%p|%p|MAX_UNTIL %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
ctx->ptr, ctx->count));
- if (ctx->count < ctx->u.rep->pattern[1]) {
+ if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
/* not enough matches */
ctx->u.rep->count = ctx->count;
DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1,
@@ -1217,7 +1201,7 @@ entrance:
RETURN_FAILURE;
}
- if ((ctx->count < ctx->u.rep->pattern[2] ||
+ if ((ctx->count < (Py_ssize_t) ctx->u.rep->pattern[2] ||
ctx->u.rep->pattern[2] == SRE_MAXREPEAT) &&
state->ptr != ctx->u.rep->last_ptr) {
/* we may have enough matches, but if we can
@@ -1263,10 +1247,10 @@ entrance:
ctx->count = ctx->u.rep->count+1;
- TRACE(("|%p|%p|MIN_UNTIL %d %p\n", ctx->pattern,
+ TRACE(("|%p|%p|MIN_UNTIL %" PY_FORMAT_SIZE_T "d %p\n", ctx->pattern,
ctx->ptr, ctx->count, ctx->u.rep->pattern));
- if (ctx->count < ctx->u.rep->pattern[1]) {
+ if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
/* not enough matches */
ctx->u.rep->count = ctx->count;
DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1,
@@ -1295,7 +1279,7 @@ entrance:
LASTMARK_RESTORE();
- if ((ctx->count >= ctx->u.rep->pattern[2]
+ if ((ctx->count >= (Py_ssize_t) ctx->u.rep->pattern[2]
&& ctx->u.rep->pattern[2] != SRE_MAXREPEAT) ||
state->ptr == ctx->u.rep->last_ptr)
RETURN_FAILURE;
@@ -1325,14 +1309,16 @@ entrance:
if (groupref >= state->lastmark) {
RETURN_FAILURE;
} else {
- SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
- SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
+ char* p = (char*) state->mark[groupref];
+ char* e = (char*) state->mark[groupref+1];
if (!p || !e || e < p)
RETURN_FAILURE;
while (p < e) {
- if (ctx->ptr >= end || *ctx->ptr != *p)
+ if (ctx->ptr >= end ||
+ SRE_CHARGET(state, ctx->ptr, 0) != SRE_CHARGET(state, p, 0))
RETURN_FAILURE;
- p++; ctx->ptr++;
+ p += state->charsize;
+ ctx->ptr += state->charsize;
}
}
}
@@ -1349,15 +1335,17 @@ entrance:
if (groupref >= state->lastmark) {
RETURN_FAILURE;
} else {
- SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
- SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
+ char* p = (char*) state->mark[groupref];
+ char* e = (char*) state->mark[groupref+1];
if (!p || !e || e < p)
RETURN_FAILURE;
while (p < e) {
if (ctx->ptr >= end ||
- state->lower(*ctx->ptr) != state->lower(*p))
+ state->lower(SRE_CHARGET(state, ctx->ptr, 0)) !=
+ state->lower(SRE_CHARGET(state, p, 0)))
RETURN_FAILURE;
- p++; ctx->ptr++;
+ p += state->charsize;
+ ctx->ptr += state->charsize;
}
}
}
@@ -1391,7 +1379,7 @@ entrance:
/* <ASSERT> <skip> <back> <pattern> */
TRACE(("|%p|%p|ASSERT %d\n", ctx->pattern,
ctx->ptr, ctx->pattern[1]));
- state->ptr = ctx->ptr - ctx->pattern[1];
+ state->ptr = ctx->ptr - state->charsize * ctx->pattern[1];
if (state->ptr < state->beginning)
RETURN_FAILURE;
DO_JUMP(JUMP_ASSERT, jump_assert, ctx->pattern+2);
@@ -1404,7 +1392,7 @@ entrance:
/* <ASSERT_NOT> <skip> <back> <pattern> */
TRACE(("|%p|%p|ASSERT_NOT %d\n", ctx->pattern,
ctx->ptr, ctx->pattern[1]));
- state->ptr = ctx->ptr - ctx->pattern[1];
+ state->ptr = ctx->ptr - state->charsize * ctx->pattern[1];
if (state->ptr >= state->beginning) {
DO_JUMP(JUMP_ASSERT_NOT, jump_assert_not, ctx->pattern+2);
if (ret) {
@@ -1476,7 +1464,8 @@ exit:
TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", ctx->pattern, ctx->ptr));
goto jump_assert_not;
case JUMP_NONE:
- TRACE(("|%p|%p|RETURN %d\n", ctx->pattern, ctx->ptr, ret));
+ TRACE(("|%p|%p|RETURN %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
+ ctx->ptr, ret));
break;
}
@@ -1486,8 +1475,8 @@ exit:
LOCAL(Py_ssize_t)
SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
{
- SRE_CHAR* ptr = (SRE_CHAR *)state->start;
- SRE_CHAR* end = (SRE_CHAR *)state->end;
+ char* ptr = (char*)state->start;
+ char* end = (char*)state->end;
Py_ssize_t status = 0;
Py_ssize_t prefix_len = 0;
Py_ssize_t prefix_skip = 0;
@@ -1505,9 +1494,9 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
if (pattern[3] > 1) {
/* adjust end point (but make sure we leave at least one
character in there, so literal search will work) */
- end -= pattern[3]-1;
+ end -= (pattern[3]-1) * state->charsize;
if (end <= ptr)
- end = ptr+1;
+ end = ptr + state->charsize;
}
if (flags & SRE_INFO_PREFIX) {
@@ -1525,7 +1514,8 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
pattern += 1 + pattern[1];
}
- TRACE(("prefix = %p %d %d\n", prefix, prefix_len, prefix_skip));
+ TRACE(("prefix = %p %" PY_FORMAT_SIZE_T "d %" PY_FORMAT_SIZE_T "d\n",
+ prefix, prefix_len, prefix_skip));
TRACE(("charset = %p\n", charset));
#if defined(USE_FAST_SEARCH)
@@ -1533,10 +1523,10 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
/* pattern starts with a known prefix. use the overlap
table to skip forward as fast as we possibly can */
Py_ssize_t i = 0;
- end = (SRE_CHAR *)state->end;
+ end = (char *)state->end;
while (ptr < end) {
for (;;) {
- if ((SRE_CODE) ptr[0] != prefix[i]) {
+ if ((SRE_CODE) SRE_CHARGET(state, ptr, 0) != prefix[i]) {
if (!i)
break;
else
@@ -1545,8 +1535,8 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
if (++i == prefix_len) {
/* found a potential match */
TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
- state->start = ptr + 1 - prefix_len;
- state->ptr = ptr + 1 - prefix_len + prefix_skip;
+ state->start = ptr - (prefix_len - 1) * state->charsize;
+ state->ptr = ptr - (prefix_len - prefix_skip - 1) * state->charsize;
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
status = SRE_MATCH(state, pattern + 2*prefix_skip);
@@ -1558,7 +1548,7 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
break;
}
}
- ptr++;
+ ptr += state->charsize;
}
return 0;
}
@@ -1568,15 +1558,16 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
/* pattern starts with a literal character. this is used
for short prefixes, and if fast search is disabled */
SRE_CODE chr = pattern[1];
- end = (SRE_CHAR *)state->end;
+ end = (char*)state->end;
for (;;) {
- while (ptr < end && (SRE_CODE) ptr[0] != chr)
- ptr++;
+ while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) != chr)
+ ptr += state->charsize;
if (ptr >= end)
return 0;
TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
state->start = ptr;
- state->ptr = ++ptr;
+ ptr += state->charsize;
+ state->ptr = ptr;
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
status = SRE_MATCH(state, pattern + 2);
@@ -1585,10 +1576,10 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
}
} else if (charset) {
/* pattern starts with a character from a known set */
- end = (SRE_CHAR *)state->end;
+ end = (char*)state->end;
for (;;) {
- while (ptr < end && !SRE_CHARSET(charset, ptr[0]))
- ptr++;
+ while (ptr < end && !SRE_CHARSET(charset, SRE_CHARGET(state, ptr, 0)))
+ ptr += state->charsize;
if (ptr >= end)
return 0;
TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
@@ -1597,13 +1588,14 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
status = SRE_MATCH(state, pattern);
if (status != 0)
break;
- ptr++;
+ ptr += state->charsize;
}
} else
/* general case */
while (ptr <= end) {
TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
- state->start = state->ptr = ptr++;
+ state->start = state->ptr = ptr;
+ ptr += state->charsize;
status = SRE_MATCH(state, pattern);
if (status != 0)
break;
@@ -1612,16 +1604,6 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
return status;
}
-LOCAL(int)
-SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, Py_ssize_t len)
-{
- /* check if given string is a literal template (i.e. no escapes) */
- while (len-- > 0)
- if (*ptr++ == '\\')
- return 0;
- return 1;
-}
-
#if !defined(SRE_RECURSIVE)
/* -------------------------------------------------------------------- */
@@ -1629,7 +1611,24 @@ SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, Py_ssize_t len)
/* see sre.h for object declarations */
static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, int);
-static PyObject*pattern_scanner(PatternObject*, PyObject*);
+static PyObject*pattern_scanner(PatternObject*, PyObject*, PyObject* kw);
+
+static int
+sre_literal_template(int charsize, char* ptr, Py_ssize_t len)
+{
+ /* check if given string is a literal template (i.e. no escapes) */
+ struct {
+ int charsize;
+ } state = {
+ charsize
+ };
+ while (len-- > 0) {
+ if (SRE_CHARGET((&state), ptr, 0) == '\\')
+ return 0;
+ ptr += charsize;
+ }
+ return 1;
+}
static PyObject *
sre_codesize(PyObject* self, PyObject *unused)
@@ -1646,11 +1645,7 @@ sre_getlower(PyObject* self, PyObject* args)
if (flags & SRE_FLAG_LOCALE)
return Py_BuildValue("i", sre_lower_locale(character));
if (flags & SRE_FLAG_UNICODE)
-#if defined(HAVE_UNICODE)
return Py_BuildValue("i", sre_lower_unicode(character));
-#else
- return Py_BuildValue("i", sre_lower_locale(character));
-#endif
return Py_BuildValue("i", sre_lower(character));
}
@@ -1669,7 +1664,9 @@ state_reset(SRE_STATE* state)
}
static void*
-getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize, Py_buffer *view)
+getstring(PyObject* string, Py_ssize_t* p_length,
+ int* p_logical_charsize, int* p_charsize,
+ Py_buffer *view)
{
/* given a python object, return a data pointer, a length (in
characters), and a character size. return NULL if the object
@@ -1683,13 +1680,16 @@ getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize, Py_buffer *vi
/* Unicode objects do not support the buffer API. So, get the data
directly instead. */
if (PyUnicode_Check(string)) {
- ptr = (void *)PyUnicode_AS_DATA(string);
- *p_length = PyUnicode_GET_SIZE(string);
- *p_charsize = sizeof(Py_UNICODE);
+ if (PyUnicode_READY(string) == -1)
+ return NULL;
+ ptr = PyUnicode_DATA(string);
+ *p_length = PyUnicode_GET_LENGTH(string);
+ *p_charsize = PyUnicode_KIND(string);
+ *p_logical_charsize = 4;
return ptr;
}
- /* get pointer to string buffer */
+ /* get pointer to byte string buffer */
view->len = -1;
buffer = Py_TYPE(string)->tp_as_buffer;
if (!buffer || !buffer->bf_getbuffer ||
@@ -1712,10 +1712,6 @@ getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize, Py_buffer *vi
if (PyBytes_Check(string) || bytes == size)
charsize = 1;
-#if defined(HAVE_UNICODE)
- else if (bytes == (Py_ssize_t) (size * sizeof(Py_UNICODE)))
- charsize = sizeof(Py_UNICODE);
-#endif
else {
PyErr_SetString(PyExc_TypeError, "buffer size mismatch");
goto err;
@@ -1723,6 +1719,7 @@ getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize, Py_buffer *vi
*p_length = size;
*p_charsize = charsize;
+ *p_logical_charsize = charsize;
if (ptr == NULL) {
PyErr_SetString(PyExc_ValueError,
@@ -1743,7 +1740,7 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
/* prepare state object */
Py_ssize_t length;
- int charsize;
+ int logical_charsize, charsize;
void* ptr;
memset(state, 0, sizeof(SRE_STATE));
@@ -1752,18 +1749,18 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
state->lastindex = -1;
state->buffer.buf = NULL;
- ptr = getstring(string, &length, &charsize, &state->buffer);
+ ptr = getstring(string, &length, &logical_charsize, &charsize, &state->buffer);
if (!ptr)
goto err;
- if (charsize == 1 && pattern->charsize > 1) {
+ if (logical_charsize == 1 && pattern->logical_charsize > 1) {
PyErr_SetString(PyExc_TypeError,
- "can't use a string pattern on a bytes-like object");
+ "can't use a string pattern on a bytes-like object");
goto err;
}
- if (charsize > 1 && pattern->charsize == 1) {
+ if (logical_charsize > 1 && pattern->logical_charsize == 1) {
PyErr_SetString(PyExc_TypeError,
- "can't use a bytes pattern on a string-like object");
+ "can't use a bytes pattern on a string-like object");
goto err;
}
@@ -1778,6 +1775,7 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
else if (end > length)
end = length;
+ state->logical_charsize = logical_charsize;
state->charsize = charsize;
state->beginning = ptr;
@@ -1793,11 +1791,7 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
if (pattern->flags & SRE_FLAG_LOCALE)
state->lower = sre_lower_locale;
else if (pattern->flags & SRE_FLAG_UNICODE)
-#if defined(HAVE_UNICODE)
state->lower = sre_lower_unicode;
-#else
- state->lower = sre_lower_locale;
-#endif
else
state->lower = sre_lower;
@@ -1883,17 +1877,45 @@ pattern_dealloc(PatternObject* self)
}
static PyObject*
+fix_string_param(PyObject *string, PyObject *string2, const char *oldname)
+{
+ if (string2 != NULL) {
+ if (string != NULL) {
+ PyErr_Format(PyExc_TypeError,
+ "Argument given by name ('%s') and position (1)",
+ oldname);
+ return NULL;
+ }
+ if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+ "The '%s' keyword parameter name is deprecated. "
+ "Use 'string' instead.", oldname) < 0)
+ return NULL;
+ return string2;
+ }
+ if (string == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "Required argument 'string' (pos 1) not found");
+ return NULL;
+ }
+ return string;
+}
+
+static PyObject*
pattern_match(PatternObject* self, PyObject* args, PyObject* kw)
{
SRE_STATE state;
int status;
- PyObject* string;
+ PyObject *string = NULL, *string2 = NULL;
Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX;
- static char* kwlist[] = { "pattern", "pos", "endpos", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:match", kwlist,
- &string, &start, &end))
+ static char* kwlist[] = { "string", "pos", "endpos", "pattern", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:match", kwlist,
+ &string, &start, &end, &string2))
+ return NULL;
+
+ string = fix_string_param(string, string2, "pattern");
+ if (!string)
return NULL;
string = state_init(&state, self, string, start, end);
@@ -1904,12 +1926,10 @@ pattern_match(PatternObject* self, PyObject* args, PyObject* kw)
TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
- if (state.charsize == 1) {
+ if (state.logical_charsize == 1) {
status = sre_match(&state, PatternObject_GetCode(self));
} else {
-#if defined(HAVE_UNICODE)
status = sre_umatch(&state, PatternObject_GetCode(self));
-#endif
}
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
@@ -1927,12 +1947,16 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw)
SRE_STATE state;
int status;
- PyObject* string;
+ PyObject *string = NULL, *string2 = NULL;
Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX;
- static char* kwlist[] = { "pattern", "pos", "endpos", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:search", kwlist,
- &string, &start, &end))
+ static char* kwlist[] = { "string", "pos", "endpos", "pattern", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:search", kwlist,
+ &string, &start, &end, &string2))
+ return NULL;
+
+ string = fix_string_param(string, string2, "pattern");
+ if (!string)
return NULL;
string = state_init(&state, self, string, start, end);
@@ -1941,12 +1965,10 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw)
TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr));
- if (state.charsize == 1) {
+ if (state.logical_charsize == 1) {
status = sre_search(&state, PatternObject_GetCode(self));
} else {
-#if defined(HAVE_UNICODE)
status = sre_usearch(&state, PatternObject_GetCode(self));
-#endif
}
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
@@ -2062,12 +2084,16 @@ pattern_findall(PatternObject* self, PyObject* args, PyObject* kw)
int status;
Py_ssize_t i, b, e;
- PyObject* string;
+ PyObject *string = NULL, *string2 = NULL;
Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX;
- static char* kwlist[] = { "source", "pos", "endpos", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:findall", kwlist,
- &string, &start, &end))
+ static char* kwlist[] = { "string", "pos", "endpos", "source", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:findall", kwlist,
+ &string, &start, &end, &string2))
+ return NULL;
+
+ string = fix_string_param(string, string2, "source");
+ if (!string)
return NULL;
string = state_init(&state, self, string, start, end);
@@ -2088,16 +2114,14 @@ pattern_findall(PatternObject* self, PyObject* args, PyObject* kw)
state.ptr = state.start;
- if (state.charsize == 1) {
+ if (state.logical_charsize == 1) {
status = sre_search(&state, PatternObject_GetCode(self));
} else {
-#if defined(HAVE_UNICODE)
status = sre_usearch(&state, PatternObject_GetCode(self));
-#endif
}
- if (PyErr_Occurred())
- goto error;
+ if (PyErr_Occurred())
+ goto error;
if (status <= 0) {
if (status == 0)
@@ -2159,13 +2183,13 @@ error:
#if PY_VERSION_HEX >= 0x02020000
static PyObject*
-pattern_finditer(PatternObject* pattern, PyObject* args)
+pattern_finditer(PatternObject* pattern, PyObject* args, PyObject* kw)
{
PyObject* scanner;
PyObject* search;
PyObject* iterator;
- scanner = pattern_scanner(pattern, args);
+ scanner = pattern_scanner(pattern, args, kw);
if (!scanner)
return NULL;
@@ -2192,11 +2216,15 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw)
Py_ssize_t i;
void* last;
- PyObject* string;
+ PyObject *string = NULL, *string2 = NULL;
Py_ssize_t maxsplit = 0;
- static char* kwlist[] = { "source", "maxsplit", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O|n:split", kwlist,
- &string, &maxsplit))
+ static char* kwlist[] = { "string", "maxsplit", "source", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "|On$O:split", kwlist,
+ &string, &maxsplit, &string2))
+ return NULL;
+
+ string = fix_string_param(string, string2, "source");
+ if (!string)
return NULL;
string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX);
@@ -2218,16 +2246,14 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw)
state.ptr = state.start;
- if (state.charsize == 1) {
+ if (state.logical_charsize == 1) {
status = sre_search(&state, PatternObject_GetCode(self));
} else {
-#if defined(HAVE_UNICODE)
status = sre_usearch(&state, PatternObject_GetCode(self));
-#endif
}
- if (PyErr_Occurred())
- goto error;
+ if (PyErr_Occurred())
+ goto error;
if (status <= 0) {
if (status == 0)
@@ -2308,7 +2334,7 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
int status;
Py_ssize_t n;
Py_ssize_t i, b, e;
- int bint;
+ int logical_charsize, charsize;
int filter_is_callable;
Py_buffer view;
@@ -2321,16 +2347,10 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
/* if not callable, check if it's a literal string */
int literal;
view.buf = NULL;
- ptr = getstring(ptemplate, &n, &bint, &view);
- b = bint;
+ ptr = getstring(ptemplate, &n, &logical_charsize, &charsize, &view);
+ b = charsize;
if (ptr) {
- if (b == 1) {
- literal = sre_literal_template((unsigned char *)ptr, n);
- } else {
-#if defined(HAVE_UNICODE)
- literal = sre_uliteral_template((Py_UNICODE *)ptr, n);
-#endif
- }
+ literal = sre_literal_template(b, ptr, n);
} else {
PyErr_Clear();
literal = 0;
@@ -2374,16 +2394,14 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
state.ptr = state.start;
- if (state.charsize == 1) {
+ if (state.logical_charsize == 1) {
status = sre_search(&state, PatternObject_GetCode(self));
} else {
-#if defined(HAVE_UNICODE)
status = sre_usearch(&state, PatternObject_GetCode(self));
-#endif
}
- if (PyErr_Occurred())
- goto error;
+ if (PyErr_Occurred())
+ goto error;
if (status <= 0) {
if (status == 0)
@@ -2564,35 +2582,35 @@ pattern_deepcopy(PatternObject* self, PyObject* memo)
}
PyDoc_STRVAR(pattern_match_doc,
-"match(string[, pos[, endpos]]) -> match object or None.\n\n\
+"match(string[, pos[, endpos]]) -> match object or None.\n\
Matches zero or more characters at the beginning of the string");
PyDoc_STRVAR(pattern_search_doc,
-"search(string[, pos[, endpos]]) -> match object or None.\n\n\
+"search(string[, pos[, endpos]]) -> match object or None.\n\
Scan through string looking for a match, and return a corresponding\n\
match object instance. Return None if no position in the string matches.");
PyDoc_STRVAR(pattern_split_doc,
-"split(string[, maxsplit = 0]) -> list.\n\n\
+"split(string[, maxsplit = 0]) -> list.\n\
Split string by the occurrences of pattern.");
PyDoc_STRVAR(pattern_findall_doc,
-"findall(string[, pos[, endpos]]) -> list.\n\n\
+"findall(string[, pos[, endpos]]) -> list.\n\
Return a list of all non-overlapping matches of pattern in string.");
PyDoc_STRVAR(pattern_finditer_doc,
-"finditer(string[, pos[, endpos]]) -> iterator.\n\n\
+"finditer(string[, pos[, endpos]]) -> iterator.\n\
Return an iterator over all non-overlapping matches for the \n\
RE pattern in string. For each match, the iterator returns a\n\
match object.");
PyDoc_STRVAR(pattern_sub_doc,
-"sub(repl, string[, count = 0]) -> newstring.\n\n\
+"sub(repl, string[, count = 0]) -> newstring.\n\
Return the string obtained by replacing the leftmost non-overlapping\n\
occurrences of pattern in string by the replacement repl.");
PyDoc_STRVAR(pattern_subn_doc,
-"subn(repl, string[, count = 0]) -> (newstring, number of subs)\n\n\
+"subn(repl, string[, count = 0]) -> (newstring, number of subs)\n\
Return the tuple (new_string, number_of_subs_made) found by replacing\n\
the leftmost non-overlapping occurrences of pattern with the\n\
replacement repl.");
@@ -2601,22 +2619,22 @@ PyDoc_STRVAR(pattern_doc, "Compiled regular expression objects");
static PyMethodDef pattern_methods[] = {
{"match", (PyCFunction) pattern_match, METH_VARARGS|METH_KEYWORDS,
- pattern_match_doc},
+ pattern_match_doc},
{"search", (PyCFunction) pattern_search, METH_VARARGS|METH_KEYWORDS,
- pattern_search_doc},
+ pattern_search_doc},
{"sub", (PyCFunction) pattern_sub, METH_VARARGS|METH_KEYWORDS,
- pattern_sub_doc},
+ pattern_sub_doc},
{"subn", (PyCFunction) pattern_subn, METH_VARARGS|METH_KEYWORDS,
- pattern_subn_doc},
+ pattern_subn_doc},
{"split", (PyCFunction) pattern_split, METH_VARARGS|METH_KEYWORDS,
- pattern_split_doc},
+ pattern_split_doc},
{"findall", (PyCFunction) pattern_findall, METH_VARARGS|METH_KEYWORDS,
- pattern_findall_doc},
+ pattern_findall_doc},
#if PY_VERSION_HEX >= 0x02020000
- {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS,
- pattern_finditer_doc},
+ {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS|METH_KEYWORDS,
+ pattern_finditer_doc},
#endif
- {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS},
+ {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS|METH_KEYWORDS},
{"__copy__", (PyCFunction) pattern_copy, METH_NOARGS},
{"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_O},
{NULL, NULL}
@@ -2635,31 +2653,31 @@ static PyTypeObject Pattern_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"_" SRE_MODULE ".SRE_Pattern",
sizeof(PatternObject), sizeof(SRE_CODE),
- (destructor)pattern_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- pattern_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- pattern_methods, /* tp_methods */
- pattern_members, /* tp_members */
+ (destructor)pattern_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ pattern_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ pattern_methods, /* tp_methods */
+ pattern_members, /* tp_members */
};
static int _validate(PatternObject *self); /* Forward */
@@ -2700,13 +2718,6 @@ _compile(PyObject* self_, PyObject* args)
for (i = 0; i < n; i++) {
PyObject *o = PyList_GET_ITEM(code, i);
unsigned long value = PyLong_AsUnsignedLong(o);
- if (value == (unsigned long)-1 && PyErr_Occurred()) {
- if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
- PyErr_SetString(PyExc_OverflowError,
- "regular expression code size limit exceeded");
- }
- break;
- }
self->code[i] = (SRE_CODE) value;
if ((unsigned long) self->code[i] != value) {
PyErr_SetString(PyExc_OverflowError,
@@ -2720,11 +2731,14 @@ _compile(PyObject* self_, PyObject* args)
return NULL;
}
- if (pattern == Py_None)
+ if (pattern == Py_None) {
+ self->logical_charsize = -1;
self->charsize = -1;
+ }
else {
Py_ssize_t p_length;
- if (!getstring(pattern, &p_length, &self->charsize, &self->view)) {
+ if (!getstring(pattern, &p_length, &self->logical_charsize,
+ &self->charsize, &self->view)) {
Py_DECREF(self);
return NULL;
}
@@ -2775,8 +2789,7 @@ _compile(PyObject* self_, PyObject* args)
\_________\_____/ /
\____________/
- It also helps that SRE_CODE is always an unsigned type, either 2 bytes or 4
- bytes wide (the latter if Python is compiled for "wide" unicode support).
+ It also helps that SRE_CODE is always an unsigned type.
*/
/* Defining this one enables tracing of the validator */
@@ -2814,7 +2827,7 @@ _compile(PyObject* self_, PyObject* args)
skip = *code; \
VTRACE(("%lu (skip to %p)\n", \
(unsigned long)skip, code+skip)); \
- if (code+skip-adj < code || code+skip-adj > end)\
+ if (skip-adj > end-code) \
FAIL; \
code++; \
} while (0)
@@ -2847,7 +2860,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end)
case SRE_OP_CHARSET:
offset = 32/sizeof(SRE_CODE); /* 32-byte bitmap */
- if (code+offset < code || code+offset > end)
+ if (offset > end-code)
FAIL;
code += offset;
break;
@@ -2855,7 +2868,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end)
case SRE_OP_BIGCHARSET:
GET_ARG; /* Number of blocks */
offset = 256/sizeof(SRE_CODE); /* 256-byte table */
- if (code+offset < code || code+offset > end)
+ if (offset > end-code)
FAIL;
/* Make sure that each byte points to a valid block */
for (i = 0; i < 256; i++) {
@@ -2864,7 +2877,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end)
}
code += offset;
offset = arg * 32/sizeof(SRE_CODE); /* 32-byte bitmap times arg */
- if (code+offset < code || code+offset > end)
+ if (offset > end-code)
FAIL;
code += offset;
break;
@@ -2989,13 +3002,13 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
<INFO> <1=skip> <2=flags> <3=min> <4=max>;
If SRE_INFO_PREFIX or SRE_INFO_CHARSET is in the flags,
more follows. */
- SRE_CODE flags, min, max, i;
+ SRE_CODE flags, i;
SRE_CODE *newcode;
GET_SKIP;
newcode = code+skip-1;
GET_ARG; flags = arg;
- GET_ARG; min = arg;
- GET_ARG; max = arg;
+ GET_ARG;
+ GET_ARG;
/* Check that only valid flags are present */
if ((flags & ~(SRE_INFO_PREFIX |
SRE_INFO_LITERAL |
@@ -3011,15 +3024,15 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
FAIL;
/* Validate the prefix */
if (flags & SRE_INFO_PREFIX) {
- SRE_CODE prefix_len, prefix_skip;
+ SRE_CODE prefix_len;
GET_ARG; prefix_len = arg;
- GET_ARG; prefix_skip = arg;
+ GET_ARG;
/* Here comes the prefix string */
- if (code+prefix_len < code || code+prefix_len > newcode)
+ if (prefix_len > newcode-code)
FAIL;
code += prefix_len;
/* And here comes the overlap table */
- if (code+prefix_len < code || code+prefix_len > newcode)
+ if (prefix_len > newcode-code)
FAIL;
/* Each overlap value should be < prefix_len */
for (i = 0; i < prefix_len; i++) {
@@ -3148,7 +3161,7 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
to allow arbitrary jumps anywhere in the code; so we just look
for a JUMP opcode preceding our skip target.
*/
- if (skip >= 3 && code+skip-3 >= code &&
+ if (skip >= 3 && skip-3 < end-code &&
code[skip-3] == SRE_OP_JUMP)
{
VTRACE(("both then and else parts present\n"));
@@ -3260,8 +3273,8 @@ match_getindex(MatchObject* self, PyObject* index)
Py_ssize_t i;
if (index == NULL)
- /* Default value */
- return 0;
+ /* Default value */
+ return 0;
if (PyLong_Check(index))
return PyLong_AsSsize_t(index);
@@ -3589,36 +3602,36 @@ PyDoc_STRVAR(match_doc,
Match objects always have a boolean value of True.");
PyDoc_STRVAR(match_group_doc,
-"group([group1, ...]) -> str or tuple.\n\n\
+"group([group1, ...]) -> str or tuple.\n\
Return subgroup(s) of the match by indices or names.\n\
For 0 returns the entire match.");
PyDoc_STRVAR(match_start_doc,
-"start([group=0]) -> int.\n\n\
+"start([group=0]) -> int.\n\
Return index of the start of the substring matched by group.");
PyDoc_STRVAR(match_end_doc,
-"end([group=0]) -> int.\n\n\
+"end([group=0]) -> int.\n\
Return index of the end of the substring matched by group.");
PyDoc_STRVAR(match_span_doc,
-"span([group]) -> tuple.\n\n\
+"span([group]) -> tuple.\n\
For MatchObject m, return the 2-tuple (m.start(group), m.end(group)).");
PyDoc_STRVAR(match_groups_doc,
-"groups([default=None]) -> tuple.\n\n\
+"groups([default=None]) -> tuple.\n\
Return a tuple containing all the subgroups of the match, from 1.\n\
The default argument is used for groups\n\
that did not participate in the match");
PyDoc_STRVAR(match_groupdict_doc,
-"groupdict([default=None]) -> dict.\n\n\
+"groupdict([default=None]) -> dict.\n\
Return a dictionary containing all the named subgroups of the match,\n\
keyed by the subgroup name. The default argument is used for groups\n\
that did not participate in the match");
PyDoc_STRVAR(match_expand_doc,
-"expand(template) -> str.\n\n\
+"expand(template) -> str.\n\
Return the string obtained by doing backslash substitution\n\
on the string template, as done by the sub() method.");
@@ -3694,32 +3707,32 @@ static PyTypeObject Match_Type = {
PyVarObject_HEAD_INIT(NULL,0)
"_" SRE_MODULE ".SRE_Match",
sizeof(MatchObject), sizeof(Py_ssize_t),
- (destructor)match_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- match_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- match_methods, /* tp_methods */
- match_members, /* tp_members */
- match_getset, /* tp_getset */
+ (destructor)match_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ match_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ match_methods, /* tp_methods */
+ match_members, /* tp_members */
+ match_getset, /* tp_getset */
};
static PyObject*
@@ -3808,12 +3821,10 @@ scanner_match(ScannerObject* self, PyObject *unused)
state->ptr = state->start;
- if (state->charsize == 1) {
+ if (state->logical_charsize == 1) {
status = sre_match(state, PatternObject_GetCode(self->pattern));
} else {
-#if defined(HAVE_UNICODE)
status = sre_umatch(state, PatternObject_GetCode(self->pattern));
-#endif
}
if (PyErr_Occurred())
return NULL;
@@ -3841,12 +3852,10 @@ scanner_search(ScannerObject* self, PyObject *unused)
state->ptr = state->start;
- if (state->charsize == 1) {
+ if (state->logical_charsize == 1) {
status = sre_search(state, PatternObject_GetCode(self->pattern));
} else {
-#if defined(HAVE_UNICODE)
status = sre_usearch(state, PatternObject_GetCode(self->pattern));
-#endif
}
if (PyErr_Occurred())
return NULL;
@@ -3870,7 +3879,7 @@ static PyMethodDef scanner_methods[] = {
#define SCAN_OFF(x) offsetof(ScannerObject, x)
static PyMemberDef scanner_members[] = {
- {"pattern", T_OBJECT, SCAN_OFF(pattern), READONLY},
+ {"pattern", T_OBJECT, SCAN_OFF(pattern), READONLY},
{NULL} /* Sentinel */
};
@@ -3879,44 +3888,50 @@ static PyTypeObject Scanner_Type = {
"_" SRE_MODULE ".SRE_Scanner",
sizeof(ScannerObject), 0,
(destructor)scanner_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- scanner_methods, /* tp_methods */
- scanner_members, /* tp_members */
- 0, /* tp_getset */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ scanner_methods, /* tp_methods */
+ scanner_members, /* tp_members */
+ 0, /* tp_getset */
};
static PyObject*
-pattern_scanner(PatternObject* pattern, PyObject* args)
+pattern_scanner(PatternObject* pattern, PyObject* args, PyObject* kw)
{
/* create search state object */
ScannerObject* self;
- PyObject* string;
+ PyObject *string = NULL, *string2 = NULL;
Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX;
- if (!PyArg_ParseTuple(args, "O|nn:scanner", &string, &start, &end))
+ static char* kwlist[] = { "string", "pos", "endpos", "source", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:scanner", kwlist,
+ &string, &start, &end, &string2))
+ return NULL;
+
+ string = fix_string_param(string, string2, "source");
+ if (!string)
return NULL;
/* create scanner object */
@@ -3945,15 +3960,15 @@ static PyMethodDef _functions[] = {
};
static struct PyModuleDef sremodule = {
- PyModuleDef_HEAD_INIT,
- "_" SRE_MODULE,
- NULL,
- -1,
- _functions,
- NULL,
- NULL,
- NULL,
- NULL
+ PyModuleDef_HEAD_INIT,
+ "_" SRE_MODULE,
+ NULL,
+ -1,
+ _functions,
+ NULL,
+ NULL,
+ NULL,
+ NULL
};
PyMODINIT_FUNC PyInit__sre(void)
@@ -3969,7 +3984,7 @@ PyMODINIT_FUNC PyInit__sre(void)
m = PyModule_Create(&sremodule);
if (m == NULL)
- return NULL;
+ return NULL;
d = PyModule_GetDict(m);
x = PyLong_FromLong(SRE_MAGIC);
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index e9de8cad27..499e8ba269 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -18,16 +18,23 @@
#ifdef WITH_THREAD
#include "pythread.h"
+
+
+#define PySSL_BEGIN_ALLOW_THREADS_S(save) \
+ do { if (_ssl_locks_count>0) { (save) = PyEval_SaveThread(); } } while (0)
+#define PySSL_END_ALLOW_THREADS_S(save) \
+ do { if (_ssl_locks_count>0) { PyEval_RestoreThread(save); } } while (0)
#define PySSL_BEGIN_ALLOW_THREADS { \
PyThreadState *_save = NULL; \
- if (_ssl_locks_count>0) {_save = PyEval_SaveThread();}
-#define PySSL_BLOCK_THREADS if (_ssl_locks_count>0){PyEval_RestoreThread(_save)};
-#define PySSL_UNBLOCK_THREADS if (_ssl_locks_count>0){_save = PyEval_SaveThread()};
-#define PySSL_END_ALLOW_THREADS if (_ssl_locks_count>0){PyEval_RestoreThread(_save);} \
- }
+ PySSL_BEGIN_ALLOW_THREADS_S(_save);
+#define PySSL_BLOCK_THREADS PySSL_END_ALLOW_THREADS_S(_save);
+#define PySSL_UNBLOCK_THREADS PySSL_BEGIN_ALLOW_THREADS_S(_save);
+#define PySSL_END_ALLOW_THREADS PySSL_END_ALLOW_THREADS_S(_save); }
#else /* no WITH_THREAD */
+#define PySSL_BEGIN_ALLOW_THREADS_S(save)
+#define PySSL_END_ALLOW_THREADS_S(save)
#define PySSL_BEGIN_ALLOW_THREADS
#define PySSL_BLOCK_THREADS
#define PySSL_UNBLOCK_THREADS
@@ -63,14 +70,22 @@ enum py_ssl_cert_requirements {
};
enum py_ssl_version {
-#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
-#endif
PY_SSL_VERSION_SSL3=1,
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1
};
+struct py_ssl_error_code {
+ const char *mnemonic;
+ int library, reason;
+};
+
+struct py_ssl_library_code {
+ const char *library;
+ int code;
+};
+
/* Include symbols from _socket module */
#include "socketmodule.h"
@@ -92,8 +107,21 @@ static PySocketModule_APIObject PySocketModule;
#include "openssl/err.h"
#include "openssl/rand.h"
+/* Include generated data (error codes) */
+#include "_ssl_data.h"
+
/* SSL error object */
static PyObject *PySSLErrorObject;
+static PyObject *PySSLZeroReturnErrorObject;
+static PyObject *PySSLWantReadErrorObject;
+static PyObject *PySSLWantWriteErrorObject;
+static PyObject *PySSLSyscallErrorObject;
+static PyObject *PySSLEOFErrorObject;
+
+/* Error mappings */
+static PyObject *err_codes_to_names;
+static PyObject *err_names_to_codes;
+static PyObject *lib_codes_to_names;
#ifdef WITH_THREAD
@@ -124,9 +152,35 @@ static unsigned int _ssl_locks_count = 0;
# undef HAVE_SSL_CTX_CLEAR_OPTIONS
#endif
+/* In case of 'tls-unique' it will be 12 bytes for TLS, 36 bytes for
+ * older SSL, but let's be safe */
+#define PySSL_CB_MAXLEN 128
+
+/* SSL_get_finished got added to OpenSSL in 0.9.5 */
+#if OPENSSL_VERSION_NUMBER >= 0x0090500fL
+# define HAVE_OPENSSL_FINISHED 1
+#else
+# define HAVE_OPENSSL_FINISHED 0
+#endif
+
+/* ECDH support got added to OpenSSL in 0.9.8 */
+#if OPENSSL_VERSION_NUMBER < 0x0090800fL && !defined(OPENSSL_NO_ECDH)
+# define OPENSSL_NO_ECDH
+#endif
+
+/* compression support got added to OpenSSL in 0.9.8 */
+#if OPENSSL_VERSION_NUMBER < 0x0090800fL && !defined(OPENSSL_NO_COMP)
+# define OPENSSL_NO_COMP
+#endif
+
+
typedef struct {
PyObject_HEAD
SSL_CTX *ctx;
+#ifdef OPENSSL_NPN_NEGOTIATED
+ char *npn_protocols;
+ int npn_protocols_len;
+#endif
} PySSLContext;
typedef struct {
@@ -135,6 +189,7 @@ typedef struct {
SSL *ssl;
X509 *peer_cert;
int shutdown_seen_zero;
+ enum py_ssl_server_or_client socket_type;
} PySSLSocket;
static PyTypeObject PySSLContext_Type;
@@ -165,36 +220,152 @@ typedef enum {
#define ERRSTR1(x,y,z) (x ":" y ": " z)
#define ERRSTR(x) ERRSTR1("_ssl.c", STRINGIFY2(__LINE__), x)
-/* XXX It might be helpful to augment the error message generated
- below with the name of the SSL function that generated the error.
- I expect it's obvious most of the time.
-*/
+
+/*
+ * SSL errors.
+ */
+
+PyDoc_STRVAR(SSLError_doc,
+"An error occurred in the SSL implementation.");
+
+PyDoc_STRVAR(SSLZeroReturnError_doc,
+"SSL/TLS session closed cleanly.");
+
+PyDoc_STRVAR(SSLWantReadError_doc,
+"Non-blocking SSL socket needs to read more data\n"
+"before the requested operation can be completed.");
+
+PyDoc_STRVAR(SSLWantWriteError_doc,
+"Non-blocking SSL socket needs to write more data\n"
+"before the requested operation can be completed.");
+
+PyDoc_STRVAR(SSLSyscallError_doc,
+"System error when attempting SSL operation.");
+
+PyDoc_STRVAR(SSLEOFError_doc,
+"SSL/TLS connection terminated abruptly.");
+
+static PyObject *
+SSLError_str(PyOSErrorObject *self)
+{
+ if (self->strerror != NULL && PyUnicode_Check(self->strerror)) {
+ Py_INCREF(self->strerror);
+ return self->strerror;
+ }
+ else
+ return PyObject_Str(self->args);
+}
+
+static PyType_Slot sslerror_type_slots[] = {
+ {Py_tp_base, NULL}, /* Filled out in module init as it's not a constant */
+ {Py_tp_doc, SSLError_doc},
+ {Py_tp_str, SSLError_str},
+ {0, 0},
+};
+
+static PyType_Spec sslerror_type_spec = {
+ "ssl.SSLError",
+ sizeof(PyOSErrorObject),
+ 0,
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ sslerror_type_slots
+};
+
+static void
+fill_and_set_sslerror(PyObject *type, int ssl_errno, const char *errstr,
+ int lineno, unsigned long errcode)
+{
+ PyObject *err_value = NULL, *reason_obj = NULL, *lib_obj = NULL;
+ PyObject *init_value, *msg, *key;
+ _Py_IDENTIFIER(reason);
+ _Py_IDENTIFIER(library);
+
+ if (errcode != 0) {
+ int lib, reason;
+
+ lib = ERR_GET_LIB(errcode);
+ reason = ERR_GET_REASON(errcode);
+ key = Py_BuildValue("ii", lib, reason);
+ if (key == NULL)
+ goto fail;
+ reason_obj = PyDict_GetItem(err_codes_to_names, key);
+ Py_DECREF(key);
+ if (reason_obj == NULL) {
+ /* XXX if reason < 100, it might reflect a library number (!!) */
+ PyErr_Clear();
+ }
+ key = PyLong_FromLong(lib);
+ if (key == NULL)
+ goto fail;
+ lib_obj = PyDict_GetItem(lib_codes_to_names, key);
+ Py_DECREF(key);
+ if (lib_obj == NULL) {
+ PyErr_Clear();
+ }
+ if (errstr == NULL)
+ errstr = ERR_reason_error_string(errcode);
+ }
+ if (errstr == NULL)
+ errstr = "unknown error";
+
+ if (reason_obj && lib_obj)
+ msg = PyUnicode_FromFormat("[%S: %S] %s (_ssl.c:%d)",
+ lib_obj, reason_obj, errstr, lineno);
+ else if (lib_obj)
+ msg = PyUnicode_FromFormat("[%S] %s (_ssl.c:%d)",
+ lib_obj, errstr, lineno);
+ else
+ msg = PyUnicode_FromFormat("%s (_ssl.c:%d)", errstr, lineno);
+
+ if (msg == NULL)
+ goto fail;
+ init_value = Py_BuildValue("iN", ssl_errno, msg);
+ err_value = PyObject_CallObject(type, init_value);
+ Py_DECREF(init_value);
+ if (err_value == NULL)
+ goto fail;
+ if (reason_obj == NULL)
+ reason_obj = Py_None;
+ if (_PyObject_SetAttrId(err_value, &PyId_reason, reason_obj))
+ goto fail;
+ if (lib_obj == NULL)
+ lib_obj = Py_None;
+ if (_PyObject_SetAttrId(err_value, &PyId_library, lib_obj))
+ goto fail;
+ PyErr_SetObject(type, err_value);
+fail:
+ Py_XDECREF(err_value);
+}
static PyObject *
PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno)
{
- PyObject *v;
- char buf[2048];
- char *errstr;
+ PyObject *type = PySSLErrorObject;
+ char *errstr = NULL;
int err;
enum py_ssl_error p = PY_SSL_ERROR_NONE;
+ unsigned long e = 0;
assert(ret <= 0);
+ e = ERR_peek_last_error();
if (obj->ssl != NULL) {
err = SSL_get_error(obj->ssl, ret);
switch (err) {
case SSL_ERROR_ZERO_RETURN:
- errstr = "TLS/SSL connection has been closed";
+ errstr = "TLS/SSL connection has been closed (EOF)";
+ type = PySSLZeroReturnErrorObject;
p = PY_SSL_ERROR_ZERO_RETURN;
break;
case SSL_ERROR_WANT_READ:
errstr = "The operation did not complete (read)";
+ type = PySSLWantReadErrorObject;
p = PY_SSL_ERROR_WANT_READ;
break;
case SSL_ERROR_WANT_WRITE:
p = PY_SSL_ERROR_WANT_WRITE;
+ type = PySSLWantWriteErrorObject;
errstr = "The operation did not complete (write)";
break;
case SSL_ERROR_WANT_X509_LOOKUP:
@@ -207,80 +378,64 @@ PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno)
break;
case SSL_ERROR_SYSCALL:
{
- unsigned long e = ERR_get_error();
if (e == 0) {
PySocketSockObject *s
= (PySocketSockObject *) PyWeakref_GetObject(obj->Socket);
if (ret == 0 || (((PyObject *)s) == Py_None)) {
p = PY_SSL_ERROR_EOF;
+ type = PySSLEOFErrorObject;
errstr = "EOF occurred in violation of protocol";
} else if (ret == -1) {
/* underlying BIO reported an I/O error */
Py_INCREF(s);
ERR_clear_error();
- v = s->errorhandler();
+ s->errorhandler();
Py_DECREF(s);
- return v;
+ return NULL;
} else { /* possible? */
p = PY_SSL_ERROR_SYSCALL;
+ type = PySSLSyscallErrorObject;
errstr = "Some I/O error occurred";
}
} else {
p = PY_SSL_ERROR_SYSCALL;
- /* XXX Protected by global interpreter lock */
- errstr = ERR_error_string(e, NULL);
}
break;
}
case SSL_ERROR_SSL:
{
- unsigned long e = ERR_get_error();
p = PY_SSL_ERROR_SSL;
- if (e != 0)
- /* XXX Protected by global interpreter lock */
- errstr = ERR_error_string(e, NULL);
- else { /* possible? */
+ if (e == 0)
+ /* possible? */
errstr = "A failure in the SSL library occurred";
- }
break;
}
default:
p = PY_SSL_ERROR_INVALID_ERROR_CODE;
errstr = "Invalid error code";
}
- } else {
- errstr = ERR_error_string(ERR_peek_last_error(), NULL);
}
- PyOS_snprintf(buf, sizeof(buf), "_ssl.c:%d: %s", lineno, errstr);
+ fill_and_set_sslerror(type, p, errstr, lineno, e);
ERR_clear_error();
- v = Py_BuildValue("(is)", p, buf);
- if (v != NULL) {
- PyErr_SetObject(PySSLErrorObject, v);
- Py_DECREF(v);
- }
return NULL;
}
static PyObject *
_setSSLError (char *errstr, int errcode, char *filename, int lineno) {
- char buf[2048];
- PyObject *v;
-
- if (errstr == NULL) {
+ if (errstr == NULL)
errcode = ERR_peek_last_error();
- errstr = ERR_error_string(errcode, NULL);
- }
- PyOS_snprintf(buf, sizeof(buf), "_ssl.c:%d: %s", lineno, errstr);
+ else
+ errcode = 0;
+ fill_and_set_sslerror(PySSLErrorObject, errcode, errstr, lineno, errcode);
ERR_clear_error();
- v = Py_BuildValue("(is)", errcode, buf);
- if (v != NULL) {
- PyErr_SetObject(PySSLErrorObject, v);
- Py_DECREF(v);
- }
return NULL;
}
+/*
+ * SSL objects
+ */
+
static PySSLSocket *
newPySSLSocket(SSL_CTX *ctx, PySocketSockObject *sock,
enum py_ssl_server_or_client socket_type,
@@ -295,6 +450,7 @@ newPySSLSocket(SSL_CTX *ctx, PySocketSockObject *sock,
self->peer_cert = NULL;
self->ssl = NULL;
self->Socket = NULL;
+ self->shutdown_seen_zero = 0;
/* Make sure the SSL error state is initialized */
(void) ERR_get_state();
@@ -328,6 +484,7 @@ newPySSLSocket(SSL_CTX *ctx, PySocketSockObject *sock,
SSL_set_accept_state(self->ssl);
PySSL_END_ALLOW_THREADS
+ self->socket_type = socket_type;
self->Socket = PyWeakref_NewRef((PyObject *) sock, NULL);
return self;
}
@@ -356,7 +513,6 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self)
/* Actually negotiate SSL connection */
/* XXX If SSL_do_handshake() returns 0, it's also a failure. */
- sockstate = 0;
do {
PySSL_BEGIN_ALLOW_THREADS
ret = SSL_do_handshake(self->ssl);
@@ -561,7 +717,7 @@ _get_peer_alt_names (X509 *certificate) {
int i, j;
PyObject *peer_alt_names = Py_None;
- PyObject *v, *t;
+ PyObject *v = NULL, *t;
X509_EXTENSION *ext = NULL;
GENERAL_NAMES *names = NULL;
GENERAL_NAME *name;
@@ -616,12 +772,14 @@ _get_peer_alt_names (X509 *certificate) {
ext->value->length));
for(j = 0; j < sk_GENERAL_NAME_num(names); j++) {
-
/* get a rendering of each name in the set of names */
+ int gntype;
+ ASN1_STRING *as = NULL;
name = sk_GENERAL_NAME_value(names, j);
- if (name->type == GEN_DIRNAME) {
-
+ gntype = name->type;
+ switch (gntype) {
+ case GEN_DIRNAME:
/* we special-case DirName as a tuple of
tuples of attributes */
@@ -643,11 +801,62 @@ _get_peer_alt_names (X509 *certificate) {
goto fail;
}
PyTuple_SET_ITEM(t, 1, v);
+ break;
- } else {
+ case GEN_EMAIL:
+ case GEN_DNS:
+ case GEN_URI:
+ /* GENERAL_NAME_print() doesn't handle NULL bytes in ASN1_string
+ correctly, CVE-2013-4238 */
+ t = PyTuple_New(2);
+ if (t == NULL)
+ goto fail;
+ switch (gntype) {
+ case GEN_EMAIL:
+ v = PyUnicode_FromString("email");
+ as = name->d.rfc822Name;
+ break;
+ case GEN_DNS:
+ v = PyUnicode_FromString("DNS");
+ as = name->d.dNSName;
+ break;
+ case GEN_URI:
+ v = PyUnicode_FromString("URI");
+ as = name->d.uniformResourceIdentifier;
+ break;
+ }
+ if (v == NULL) {
+ Py_DECREF(t);
+ goto fail;
+ }
+ PyTuple_SET_ITEM(t, 0, v);
+ v = PyUnicode_FromStringAndSize((char *)ASN1_STRING_data(as),
+ ASN1_STRING_length(as));
+ if (v == NULL) {
+ Py_DECREF(t);
+ goto fail;
+ }
+ PyTuple_SET_ITEM(t, 1, v);
+ break;
+ default:
/* for everything else, we use the OpenSSL print form */
-
+ switch (gntype) {
+ /* check for new general name type */
+ case GEN_OTHERNAME:
+ case GEN_X400:
+ case GEN_EDIPARTY:
+ case GEN_IPADD:
+ case GEN_RID:
+ break;
+ default:
+ if (PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
+ "Unknown general name type %d",
+ gntype) == -1) {
+ goto fail;
+ }
+ break;
+ }
(void) BIO_reset(biobuf);
GENERAL_NAME_print(biobuf, name);
len = BIO_gets(biobuf, buf, sizeof(buf)-1);
@@ -674,6 +883,7 @@ _get_peer_alt_names (X509 *certificate) {
goto fail;
}
PyTuple_SET_ITEM(t, 1, v);
+ break;
}
/* and add that rendering to the list */
@@ -748,6 +958,8 @@ _decode_certificate(X509 *certificate) {
Py_DECREF(issuer);
version = PyLong_FromLong(X509_get_version(certificate) + 1);
+ if (version == NULL)
+ goto fail0;
if (PyDict_SetItemString(retval, "version", version) < 0) {
Py_DECREF(version);
goto fail0;
@@ -882,19 +1094,15 @@ PySSL_peercert(PySSLSocket *self, PyObject *args)
PyObject *retval = NULL;
int len;
int verification;
- PyObject *binary_mode = Py_None;
- int b;
+ int binary_mode = 0;
- if (!PyArg_ParseTuple(args, "|O:peer_certificate", &binary_mode))
+ if (!PyArg_ParseTuple(args, "|p:peer_certificate", &binary_mode))
return NULL;
if (!self->peer_cert)
Py_RETURN_NONE;
- b = PyObject_IsTrue(binary_mode);
- if (b < 0)
- return NULL;
- if (b) {
+ if (binary_mode) {
/* return cert in DER-encoded format */
unsigned char *bytes_buf = NULL;
@@ -959,7 +1167,7 @@ static PyObject *PySSL_cipher (PySSLSocket *self) {
goto fail0;
PyTuple_SET_ITEM(retval, 0, v);
}
- cipher_protocol = SSL_CIPHER_get_version(current);
+ cipher_protocol = (char *) SSL_CIPHER_get_version(current);
if (cipher_protocol == NULL) {
Py_INCREF(Py_None);
PyTuple_SET_ITEM(retval, 1, Py_None);
@@ -980,6 +1188,39 @@ static PyObject *PySSL_cipher (PySSLSocket *self) {
return NULL;
}
+#ifdef OPENSSL_NPN_NEGOTIATED
+static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) {
+ const unsigned char *out;
+ unsigned int outlen;
+
+ SSL_get0_next_proto_negotiated(self->ssl,
+ &out, &outlen);
+
+ if (out == NULL)
+ Py_RETURN_NONE;
+ return PyUnicode_FromStringAndSize((char *) out, outlen);
+}
+#endif
+
+static PyObject *PySSL_compression(PySSLSocket *self) {
+#ifdef OPENSSL_NO_COMP
+ Py_RETURN_NONE;
+#else
+ const COMP_METHOD *comp_method;
+ const char *short_name;
+
+ if (self->ssl == NULL)
+ Py_RETURN_NONE;
+ comp_method = SSL_get_current_compression(self->ssl);
+ if (comp_method == NULL || comp_method->type == NID_undef)
+ Py_RETURN_NONE;
+ short_name = OBJ_nid2sn(comp_method->type);
+ if (short_name == NULL)
+ Py_RETURN_NONE;
+ return PyUnicode_DecodeFSDefault(short_name);
+#endif
+}
+
static void PySSL_dealloc(PySSLSocket *self)
{
if (self->peer_cert) /* Possible not to have one? */
@@ -1080,6 +1321,12 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args)
return NULL;
}
+ if (buf.len > INT_MAX) {
+ PyErr_Format(PyExc_OverflowError,
+ "string longer than %d bytes", INT_MAX);
+ goto error;
+ }
+
/* just in case the blocking state of the socket has been changed */
nonblocking = (sock->sock_timeout >= 0.0);
BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking);
@@ -1100,9 +1347,8 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args)
goto error;
}
do {
- err = 0;
PySSL_BEGIN_ALLOW_THREADS
- len = SSL_write(self->ssl, buf.buf, buf.len);
+ len = SSL_write(self->ssl, buf.buf, (int)buf.len);
err = SSL_get_error(self->ssl, len);
PySSL_END_ALLOW_THREADS
if (PyErr_CheckSignals()) {
@@ -1236,7 +1482,6 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args)
}
}
do {
- err = 0;
PySSL_BEGIN_ALLOW_THREADS
count = SSL_read(self->ssl, mem, len);
err = SSL_get_error(self->ssl, count);
@@ -1320,7 +1565,7 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self)
* Otherwise OpenSSL might read in too much data,
* eating clear text data that happens to be
* transmitted after the SSL shutdown.
- * Should be safe to call repeatedly everytime this
+ * Should be safe to call repeatedly every time this
* function is used and the shutdown_seen_zero != 0
* condition is met.
*/
@@ -1388,6 +1633,40 @@ PyDoc_STRVAR(PySSL_SSLshutdown_doc,
Does the SSL shutdown handshake with the remote end, and returns\n\
the underlying socket object.");
+#if HAVE_OPENSSL_FINISHED
+static PyObject *
+PySSL_tls_unique_cb(PySSLSocket *self)
+{
+ PyObject *retval = NULL;
+ char buf[PySSL_CB_MAXLEN];
+ size_t len;
+
+ if (SSL_session_reused(self->ssl) ^ !self->socket_type) {
+ /* if session is resumed XOR we are the client */
+ len = SSL_get_finished(self->ssl, buf, PySSL_CB_MAXLEN);
+ }
+ else {
+ /* if a new session XOR we are the server */
+ len = SSL_get_peer_finished(self->ssl, buf, PySSL_CB_MAXLEN);
+ }
+
+ /* It cannot be negative in current OpenSSL version as of July 2011 */
+ if (len == 0)
+ Py_RETURN_NONE;
+
+ retval = PyBytes_FromStringAndSize(buf, len);
+
+ return retval;
+}
+
+PyDoc_STRVAR(PySSL_tls_unique_cb_doc,
+"tls_unique_cb() -> bytes\n\
+\n\
+Returns the 'tls-unique' channel binding data, as defined by RFC 5929.\n\
+\n\
+If the TLS handshake is not yet complete, None is returned");
+
+#endif /* HAVE_OPENSSL_FINISHED */
static PyMethodDef PySSLMethods[] = {
{"do_handshake", (PyCFunction)PySSL_SSLdo_handshake, METH_NOARGS},
@@ -1400,8 +1679,16 @@ static PyMethodDef PySSLMethods[] = {
{"peer_certificate", (PyCFunction)PySSL_peercert, METH_VARARGS,
PySSL_peercert_doc},
{"cipher", (PyCFunction)PySSL_cipher, METH_NOARGS},
+#ifdef OPENSSL_NPN_NEGOTIATED
+ {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS},
+#endif
+ {"compression", (PyCFunction)PySSL_compression, METH_NOARGS},
{"shutdown", (PyCFunction)PySSL_SSLshutdown, METH_NOARGS,
PySSL_SSLshutdown_doc},
+#if HAVE_OPENSSL_FINISHED
+ {"tls_unique_cb", (PyCFunction)PySSL_tls_unique_cb, METH_NOARGS,
+ PySSL_tls_unique_cb_doc},
+#endif
{NULL, NULL}
};
@@ -1448,6 +1735,7 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
char *kwlist[] = {"protocol", NULL};
PySSLContext *self;
int proto_version = PY_SSL_VERSION_SSL23;
+ long options;
SSL_CTX *ctx = NULL;
if (!PyArg_ParseTupleAndKeywords(
@@ -1488,10 +1776,15 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
self->ctx = ctx;
+#ifdef OPENSSL_NPN_NEGOTIATED
+ self->npn_protocols = NULL;
+#endif
/* Defaults */
SSL_CTX_set_verify(self->ctx, SSL_VERIFY_NONE, NULL);
- SSL_CTX_set_options(self->ctx,
- SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS);
+ options = SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
+ if (proto_version != PY_SSL_VERSION_SSL2)
+ options |= SSL_OP_NO_SSLv2;
+ SSL_CTX_set_options(self->ctx, options);
#define SID_CTX "Python"
SSL_CTX_set_session_id_context(self->ctx, (const unsigned char *) SID_CTX,
@@ -1505,6 +1798,9 @@ static void
context_dealloc(PySSLContext *self)
{
SSL_CTX_free(self->ctx);
+#ifdef OPENSSL_NPN_NEGOTIATED
+ PyMem_Free(self->npn_protocols);
+#endif
Py_TYPE(self)->tp_free(self);
}
@@ -1529,6 +1825,91 @@ set_ciphers(PySSLContext *self, PyObject *args)
Py_RETURN_NONE;
}
+#ifdef OPENSSL_NPN_NEGOTIATED
+/* this callback gets passed to SSL_CTX_set_next_protos_advertise_cb */
+static int
+_advertiseNPN_cb(SSL *s,
+ const unsigned char **data, unsigned int *len,
+ void *args)
+{
+ PySSLContext *ssl_ctx = (PySSLContext *) args;
+
+ if (ssl_ctx->npn_protocols == NULL) {
+ *data = (unsigned char *) "";
+ *len = 0;
+ } else {
+ *data = (unsigned char *) ssl_ctx->npn_protocols;
+ *len = ssl_ctx->npn_protocols_len;
+ }
+
+ return SSL_TLSEXT_ERR_OK;
+}
+/* this callback gets passed to SSL_CTX_set_next_proto_select_cb */
+static int
+_selectNPN_cb(SSL *s,
+ unsigned char **out, unsigned char *outlen,
+ const unsigned char *server, unsigned int server_len,
+ void *args)
+{
+ PySSLContext *ssl_ctx = (PySSLContext *) args;
+
+ unsigned char *client = (unsigned char *) ssl_ctx->npn_protocols;
+ int client_len;
+
+ if (client == NULL) {
+ client = (unsigned char *) "";
+ client_len = 0;
+ } else {
+ client_len = ssl_ctx->npn_protocols_len;
+ }
+
+ SSL_select_next_proto(out, outlen,
+ server, server_len,
+ client, client_len);
+
+ return SSL_TLSEXT_ERR_OK;
+}
+#endif
+
+static PyObject *
+_set_npn_protocols(PySSLContext *self, PyObject *args)
+{
+#ifdef OPENSSL_NPN_NEGOTIATED
+ Py_buffer protos;
+
+ if (!PyArg_ParseTuple(args, "y*:set_npn_protocols", &protos))
+ return NULL;
+
+ if (self->npn_protocols != NULL) {
+ PyMem_Free(self->npn_protocols);
+ }
+
+ self->npn_protocols = PyMem_Malloc(protos.len);
+ if (self->npn_protocols == NULL) {
+ PyBuffer_Release(&protos);
+ return PyErr_NoMemory();
+ }
+ memcpy(self->npn_protocols, protos.buf, protos.len);
+ self->npn_protocols_len = (int) protos.len;
+
+ /* set both server and client callbacks, because the context can
+ * be used to create both types of sockets */
+ SSL_CTX_set_next_protos_advertised_cb(self->ctx,
+ _advertiseNPN_cb,
+ self);
+ SSL_CTX_set_next_proto_select_cb(self->ctx,
+ _selectNPN_cb,
+ self);
+
+ PyBuffer_Release(&protos);
+ Py_RETURN_NONE;
+#else
+ PyErr_SetString(PyExc_NotImplementedError,
+ "The NPN extension requires OpenSSL 1.0.1 or later.");
+ return NULL;
+#endif
+}
+
static PyObject *
get_verify_mode(PySSLContext *self, void *c)
{
@@ -1595,19 +1976,124 @@ set_options(PySSLContext *self, PyObject *arg, void *c)
return 0;
}
+typedef struct {
+ PyThreadState *thread_state;
+ PyObject *callable;
+ char *password;
+ int size;
+ int error;
+} _PySSLPasswordInfo;
+
+static int
+_pwinfo_set(_PySSLPasswordInfo *pw_info, PyObject* password,
+ const char *bad_type_error)
+{
+ /* Set the password and size fields of a _PySSLPasswordInfo struct
+ from a unicode, bytes, or byte array object.
+ The password field will be dynamically allocated and must be freed
+ by the caller */
+ PyObject *password_bytes = NULL;
+ const char *data = NULL;
+ Py_ssize_t size;
+
+ if (PyUnicode_Check(password)) {
+ password_bytes = PyUnicode_AsEncodedString(password, NULL, NULL);
+ if (!password_bytes) {
+ goto error;
+ }
+ data = PyBytes_AS_STRING(password_bytes);
+ size = PyBytes_GET_SIZE(password_bytes);
+ } else if (PyBytes_Check(password)) {
+ data = PyBytes_AS_STRING(password);
+ size = PyBytes_GET_SIZE(password);
+ } else if (PyByteArray_Check(password)) {
+ data = PyByteArray_AS_STRING(password);
+ size = PyByteArray_GET_SIZE(password);
+ } else {
+ PyErr_SetString(PyExc_TypeError, bad_type_error);
+ goto error;
+ }
+
+ if (size > (Py_ssize_t)INT_MAX) {
+ PyErr_Format(PyExc_ValueError,
+ "password cannot be longer than %d bytes", INT_MAX);
+ goto error;
+ }
+
+ free(pw_info->password);
+ pw_info->password = malloc(size);
+ if (!pw_info->password) {
+ PyErr_SetString(PyExc_MemoryError,
+ "unable to allocate password buffer");
+ goto error;
+ }
+ memcpy(pw_info->password, data, size);
+ pw_info->size = (int)size;
+
+ Py_XDECREF(password_bytes);
+ return 1;
+
+error:
+ Py_XDECREF(password_bytes);
+ return 0;
+}
+
+static int
+_password_callback(char *buf, int size, int rwflag, void *userdata)
+{
+ _PySSLPasswordInfo *pw_info = (_PySSLPasswordInfo*) userdata;
+ PyObject *fn_ret = NULL;
+
+ PySSL_END_ALLOW_THREADS_S(pw_info->thread_state);
+
+ if (pw_info->callable) {
+ fn_ret = PyObject_CallFunctionObjArgs(pw_info->callable, NULL);
+ if (!fn_ret) {
+ /* TODO: It would be nice to move _ctypes_add_traceback() into the
+ core python API, so we could use it to add a frame here */
+ goto error;
+ }
+
+ if (!_pwinfo_set(pw_info, fn_ret,
+ "password callback must return a string")) {
+ goto error;
+ }
+ Py_CLEAR(fn_ret);
+ }
+
+ if (pw_info->size > size) {
+ PyErr_Format(PyExc_ValueError,
+ "password cannot be longer than %d bytes", size);
+ goto error;
+ }
+
+ PySSL_BEGIN_ALLOW_THREADS_S(pw_info->thread_state);
+ memcpy(buf, pw_info->password, pw_info->size);
+ return pw_info->size;
+
+error:
+ Py_XDECREF(fn_ret);
+ PySSL_BEGIN_ALLOW_THREADS_S(pw_info->thread_state);
+ pw_info->error = 1;
+ return -1;
+}
+
static PyObject *
load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwds)
{
- char *kwlist[] = {"certfile", "keyfile", NULL};
- PyObject *certfile, *keyfile = NULL;
+ char *kwlist[] = {"certfile", "keyfile", "password", NULL};
+ PyObject *certfile, *keyfile = NULL, *password = NULL;
PyObject *certfile_bytes = NULL, *keyfile_bytes = NULL;
+ pem_password_cb *orig_passwd_cb = self->ctx->default_passwd_callback;
+ void *orig_passwd_userdata = self->ctx->default_passwd_callback_userdata;
+ _PySSLPasswordInfo pw_info = { NULL, NULL, NULL, 0, 0 };
int r;
errno = 0;
ERR_clear_error();
if (!PyArg_ParseTupleAndKeywords(args, kwds,
- "O|O:load_cert_chain", kwlist,
- &certfile, &keyfile))
+ "O|OO:load_cert_chain", kwlist,
+ &certfile, &keyfile, &password))
return NULL;
if (keyfile == Py_None)
keyfile = NULL;
@@ -1621,12 +2107,26 @@ load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwds)
"keyfile should be a valid filesystem path");
goto error;
}
- PySSL_BEGIN_ALLOW_THREADS
+ if (password && password != Py_None) {
+ if (PyCallable_Check(password)) {
+ pw_info.callable = password;
+ } else if (!_pwinfo_set(&pw_info, password,
+ "password should be a string or callable")) {
+ goto error;
+ }
+ SSL_CTX_set_default_passwd_cb(self->ctx, _password_callback);
+ SSL_CTX_set_default_passwd_cb_userdata(self->ctx, &pw_info);
+ }
+ PySSL_BEGIN_ALLOW_THREADS_S(pw_info.thread_state);
r = SSL_CTX_use_certificate_chain_file(self->ctx,
PyBytes_AS_STRING(certfile_bytes));
- PySSL_END_ALLOW_THREADS
+ PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
if (r != 1) {
- if (errno != 0) {
+ if (pw_info.error) {
+ ERR_clear_error();
+ /* the password callback has already set the error information */
+ }
+ else if (errno != 0) {
ERR_clear_error();
PyErr_SetFromErrno(PyExc_IOError);
}
@@ -1635,33 +2135,43 @@ load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwds)
}
goto error;
}
- PySSL_BEGIN_ALLOW_THREADS
+ PySSL_BEGIN_ALLOW_THREADS_S(pw_info.thread_state);
r = SSL_CTX_use_PrivateKey_file(self->ctx,
PyBytes_AS_STRING(keyfile ? keyfile_bytes : certfile_bytes),
SSL_FILETYPE_PEM);
- PySSL_END_ALLOW_THREADS
- Py_XDECREF(keyfile_bytes);
- Py_XDECREF(certfile_bytes);
+ PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
+ Py_CLEAR(keyfile_bytes);
+ Py_CLEAR(certfile_bytes);
if (r != 1) {
- if (errno != 0) {
+ if (pw_info.error) {
+ ERR_clear_error();
+ /* the password callback has already set the error information */
+ }
+ else if (errno != 0) {
ERR_clear_error();
PyErr_SetFromErrno(PyExc_IOError);
}
else {
_setSSLError(NULL, 0, __FILE__, __LINE__);
}
- return NULL;
+ goto error;
}
- PySSL_BEGIN_ALLOW_THREADS
+ PySSL_BEGIN_ALLOW_THREADS_S(pw_info.thread_state);
r = SSL_CTX_check_private_key(self->ctx);
- PySSL_END_ALLOW_THREADS
+ PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
if (r != 1) {
_setSSLError(NULL, 0, __FILE__, __LINE__);
- return NULL;
+ goto error;
}
+ SSL_CTX_set_default_passwd_cb(self->ctx, orig_passwd_cb);
+ SSL_CTX_set_default_passwd_cb_userdata(self->ctx, orig_passwd_userdata);
+ free(pw_info.password);
Py_RETURN_NONE;
error:
+ SSL_CTX_set_default_passwd_cb(self->ctx, orig_passwd_cb);
+ SSL_CTX_set_default_passwd_cb_userdata(self->ctx, orig_passwd_userdata);
+ free(pw_info.password);
Py_XDECREF(keyfile_bytes);
Py_XDECREF(certfile_bytes);
return NULL;
@@ -1724,6 +2234,39 @@ load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwds)
}
static PyObject *
+load_dh_params(PySSLContext *self, PyObject *filepath)
+{
+ FILE *f;
+ DH *dh;
+
+ f = _Py_fopen(filepath, "rb");
+ if (f == NULL) {
+ if (!PyErr_Occurred())
+ PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, filepath);
+ return NULL;
+ }
+ errno = 0;
+ PySSL_BEGIN_ALLOW_THREADS
+ dh = PEM_read_DHparams(f, NULL, NULL, NULL);
+ fclose(f);
+ PySSL_END_ALLOW_THREADS
+ if (dh == NULL) {
+ if (errno != 0) {
+ ERR_clear_error();
+ PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, filepath);
+ }
+ else {
+ _setSSLError(NULL, 0, __FILE__, __LINE__);
+ }
+ return NULL;
+ }
+ if (SSL_CTX_set_tmp_dh(self->ctx, dh) == 0)
+ _setSSLError(NULL, 0, __FILE__, __LINE__);
+ DH_free(dh);
+ Py_RETURN_NONE;
+}
+
+static PyObject *
context_wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwds)
{
char *kwlist[] = {"sock", "server_side", "server_hostname", NULL};
@@ -1808,6 +2351,35 @@ set_default_verify_paths(PySSLContext *self, PyObject *unused)
Py_RETURN_NONE;
}
+#ifndef OPENSSL_NO_ECDH
+static PyObject *
+set_ecdh_curve(PySSLContext *self, PyObject *name)
+{
+ PyObject *name_bytes;
+ int nid;
+ EC_KEY *key;
+
+ if (!PyUnicode_FSConverter(name, &name_bytes))
+ return NULL;
+ assert(PyBytes_Check(name_bytes));
+ nid = OBJ_sn2nid(PyBytes_AS_STRING(name_bytes));
+ Py_DECREF(name_bytes);
+ if (nid == 0) {
+ PyErr_Format(PyExc_ValueError,
+ "unknown elliptic curve name %R", name);
+ return NULL;
+ }
+ key = EC_KEY_new_by_curve_name(nid);
+ if (key == NULL) {
+ _setSSLError(NULL, 0, __FILE__, __LINE__);
+ return NULL;
+ }
+ SSL_CTX_set_tmp_ecdh(self->ctx, key);
+ EC_KEY_free(key);
+ Py_RETURN_NONE;
+}
+#endif
+
static PyGetSetDef context_getsetlist[] = {
{"options", (getter) get_options,
(setter) set_options, NULL},
@@ -1821,14 +2393,22 @@ static struct PyMethodDef context_methods[] = {
METH_VARARGS | METH_KEYWORDS, NULL},
{"set_ciphers", (PyCFunction) set_ciphers,
METH_VARARGS, NULL},
+ {"_set_npn_protocols", (PyCFunction) _set_npn_protocols,
+ METH_VARARGS, NULL},
{"load_cert_chain", (PyCFunction) load_cert_chain,
METH_VARARGS | METH_KEYWORDS, NULL},
+ {"load_dh_params", (PyCFunction) load_dh_params,
+ METH_O, NULL},
{"load_verify_locations", (PyCFunction) load_verify_locations,
METH_VARARGS | METH_KEYWORDS, NULL},
{"session_stats", (PyCFunction) session_stats,
METH_NOARGS, NULL},
{"set_default_verify_paths", (PyCFunction) set_default_verify_paths,
METH_NOARGS, NULL},
+#ifndef OPENSSL_NO_ECDH
+ {"set_ecdh_curve", (PyCFunction) set_ecdh_curve,
+ METH_O, NULL},
+#endif
{NULL, NULL} /* sentinel */
};
@@ -1899,6 +2479,74 @@ Mix string into the OpenSSL PRNG state. entropy (a float) is a lower\n\
bound on the entropy contained in string. See RFC 1750.");
static PyObject *
+PySSL_RAND(int len, int pseudo)
+{
+ int ok;
+ PyObject *bytes;
+ unsigned long err;
+ const char *errstr;
+ PyObject *v;
+
+ if (len < 0) {
+ PyErr_SetString(PyExc_ValueError, "num must be positive");
+ return NULL;
+ }
+
+ bytes = PyBytes_FromStringAndSize(NULL, len);
+ if (bytes == NULL)
+ return NULL;
+ if (pseudo) {
+ ok = RAND_pseudo_bytes((unsigned char*)PyBytes_AS_STRING(bytes), len);
+ if (ok == 0 || ok == 1)
+ return Py_BuildValue("NO", bytes, ok == 1 ? Py_True : Py_False);
+ }
+ else {
+ ok = RAND_bytes((unsigned char*)PyBytes_AS_STRING(bytes), len);
+ if (ok == 1)
+ return bytes;
+ }
+ Py_DECREF(bytes);
+
+ err = ERR_get_error();
+ errstr = ERR_reason_error_string(err);
+ v = Py_BuildValue("(ks)", err, errstr);
+ if (v != NULL) {
+ PyErr_SetObject(PySSLErrorObject, v);
+ Py_DECREF(v);
+ }
+ return NULL;
+}
+
+static PyObject *
+PySSL_RAND_bytes(PyObject *self, PyObject *args)
+{
+ int len;
+ if (!PyArg_ParseTuple(args, "i:RAND_bytes", &len))
+ return NULL;
+ return PySSL_RAND(len, 0);
+}
+
+PyDoc_STRVAR(PySSL_RAND_bytes_doc,
+"RAND_bytes(n) -> bytes\n\
+\n\
+Generate n cryptographically strong pseudo-random bytes.");
+
+static PyObject *
+PySSL_RAND_pseudo_bytes(PyObject *self, PyObject *args)
+{
+ int len;
+ if (!PyArg_ParseTuple(args, "i:RAND_pseudo_bytes", &len))
+ return NULL;
+ return PySSL_RAND(len, 1);
+}
+
+PyDoc_STRVAR(PySSL_RAND_pseudo_bytes_doc,
+"RAND_pseudo_bytes(n) -> (bytes, is_cryptographic)\n\
+\n\
+Generate n pseudo-random bytes. is_cryptographic is True if the bytes\
+generated are cryptographically strong.");
+
+static PyObject *
PySSL_RAND_status(PyObject *self)
{
return PyLong_FromLong(RAND_status());
@@ -1937,9 +2585,10 @@ PyDoc_STRVAR(PySSL_RAND_egd_doc,
\n\
Queries the entropy gather daemon (EGD) on the socket named by 'path'.\n\
Returns number of bytes read. Raises SSLError if connection to EGD\n\
-fails or if it does provide enough data to seed PRNG.");
+fails or if it does not provide enough data to seed PRNG.");
+
+#endif /* HAVE_OPENSSL_RAND */
-#endif
@@ -1951,6 +2600,10 @@ static PyMethodDef PySSL_methods[] = {
#ifdef HAVE_OPENSSL_RAND
{"RAND_add", PySSL_RAND_add, METH_VARARGS,
PySSL_RAND_add_doc},
+ {"RAND_bytes", PySSL_RAND_bytes, METH_VARARGS,
+ PySSL_RAND_bytes_doc},
+ {"RAND_pseudo_bytes", PySSL_RAND_pseudo_bytes, METH_VARARGS,
+ PySSL_RAND_pseudo_bytes_doc},
{"RAND_egd", PySSL_RAND_egd, METH_VARARGS,
PySSL_RAND_egd_doc},
{"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS,
@@ -1967,9 +2620,21 @@ static PyMethodDef PySSL_methods[] = {
static PyThread_type_lock *_ssl_locks = NULL;
-static unsigned long _ssl_thread_id_function (void) {
+#if OPENSSL_VERSION_NUMBER >= 0x10000000
+/* use new CRYPTO_THREADID API. */
+static void
+_ssl_threadid_callback(CRYPTO_THREADID *id)
+{
+ CRYPTO_THREADID_set_numeric(id,
+ (unsigned long)PyThread_get_thread_ident());
+}
+#else
+/* deprecated CRYPTO_set_id_callback() API. */
+static unsigned long
+_ssl_thread_id_function (void) {
return PyThread_get_thread_ident();
}
+#endif
static void _ssl_thread_locking_function
(int mode, int n, const char *file, int line) {
@@ -2022,7 +2687,11 @@ static int _setup_ssl_threads(void) {
}
}
CRYPTO_set_locking_callback(_ssl_thread_locking_function);
+#if OPENSSL_VERSION_NUMBER >= 0x10000000
+ CRYPTO_THREADID_set_callback(_ssl_threadid_callback);
+#else
CRYPTO_set_id_callback(_ssl_thread_id_function);
+#endif
}
return 1;
}
@@ -2071,6 +2740,8 @@ PyInit__ssl(void)
unsigned long libver;
unsigned int major, minor, fix, patch, status;
PySocketModule_APIObject *socket_api;
+ struct py_ssl_error_code *errcode;
+ struct py_ssl_library_code *libcode;
if (PyType_Ready(&PySSLContext_Type) < 0)
return NULL;
@@ -2100,12 +2771,38 @@ PyInit__ssl(void)
OpenSSL_add_all_algorithms();
/* Add symbols to module dict */
- PySSLErrorObject = PyErr_NewException("ssl.SSLError",
- PySocketModule.error,
- NULL);
+ sslerror_type_slots[0].pfunc = PyExc_OSError;
+ PySSLErrorObject = PyType_FromSpec(&sslerror_type_spec);
if (PySSLErrorObject == NULL)
return NULL;
- if (PyDict_SetItemString(d, "SSLError", PySSLErrorObject) != 0)
+
+ PySSLZeroReturnErrorObject = PyErr_NewExceptionWithDoc(
+ "ssl.SSLZeroReturnError", SSLZeroReturnError_doc,
+ PySSLErrorObject, NULL);
+ PySSLWantReadErrorObject = PyErr_NewExceptionWithDoc(
+ "ssl.SSLWantReadError", SSLWantReadError_doc,
+ PySSLErrorObject, NULL);
+ PySSLWantWriteErrorObject = PyErr_NewExceptionWithDoc(
+ "ssl.SSLWantWriteError", SSLWantWriteError_doc,
+ PySSLErrorObject, NULL);
+ PySSLSyscallErrorObject = PyErr_NewExceptionWithDoc(
+ "ssl.SSLSyscallError", SSLSyscallError_doc,
+ PySSLErrorObject, NULL);
+ PySSLEOFErrorObject = PyErr_NewExceptionWithDoc(
+ "ssl.SSLEOFError", SSLEOFError_doc,
+ PySSLErrorObject, NULL);
+ if (PySSLZeroReturnErrorObject == NULL
+ || PySSLWantReadErrorObject == NULL
+ || PySSLWantWriteErrorObject == NULL
+ || PySSLSyscallErrorObject == NULL
+ || PySSLEOFErrorObject == NULL)
+ return NULL;
+ if (PyDict_SetItemString(d, "SSLError", PySSLErrorObject) != 0
+ || PyDict_SetItemString(d, "SSLZeroReturnError", PySSLZeroReturnErrorObject) != 0
+ || PyDict_SetItemString(d, "SSLWantReadError", PySSLWantReadErrorObject) != 0
+ || PyDict_SetItemString(d, "SSLWantWriteError", PySSLWantWriteErrorObject) != 0
+ || PyDict_SetItemString(d, "SSLSyscallError", PySSLSyscallErrorObject) != 0
+ || PyDict_SetItemString(d, "SSLEOFError", PySSLEOFErrorObject) != 0)
return NULL;
if (PyDict_SetItemString(d, "_SSLContext",
(PyObject *)&PySSLContext_Type) != 0)
@@ -2158,6 +2855,16 @@ PyInit__ssl(void)
PyModule_AddIntConstant(m, "OP_NO_SSLv2", SSL_OP_NO_SSLv2);
PyModule_AddIntConstant(m, "OP_NO_SSLv3", SSL_OP_NO_SSLv3);
PyModule_AddIntConstant(m, "OP_NO_TLSv1", SSL_OP_NO_TLSv1);
+ PyModule_AddIntConstant(m, "OP_CIPHER_SERVER_PREFERENCE",
+ SSL_OP_CIPHER_SERVER_PREFERENCE);
+ PyModule_AddIntConstant(m, "OP_SINGLE_DH_USE", SSL_OP_SINGLE_DH_USE);
+#ifdef SSL_OP_SINGLE_ECDH_USE
+ PyModule_AddIntConstant(m, "OP_SINGLE_ECDH_USE", SSL_OP_SINGLE_ECDH_USE);
+#endif
+#ifdef SSL_OP_NO_COMPRESSION
+ PyModule_AddIntConstant(m, "OP_NO_COMPRESSION",
+ SSL_OP_NO_COMPRESSION);
+#endif
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
r = Py_True;
@@ -2167,6 +2874,74 @@ PyInit__ssl(void)
Py_INCREF(r);
PyModule_AddObject(m, "HAS_SNI", r);
+#if HAVE_OPENSSL_FINISHED
+ r = Py_True;
+#else
+ r = Py_False;
+#endif
+ Py_INCREF(r);
+ PyModule_AddObject(m, "HAS_TLS_UNIQUE", r);
+
+#ifdef OPENSSL_NO_ECDH
+ r = Py_False;
+#else
+ r = Py_True;
+#endif
+ Py_INCREF(r);
+ PyModule_AddObject(m, "HAS_ECDH", r);
+
+#ifdef OPENSSL_NPN_NEGOTIATED
+ r = Py_True;
+#else
+ r = Py_False;
+#endif
+ Py_INCREF(r);
+ PyModule_AddObject(m, "HAS_NPN", r);
+
+ /* Mappings for error codes */
+ err_codes_to_names = PyDict_New();
+ err_names_to_codes = PyDict_New();
+ if (err_codes_to_names == NULL || err_names_to_codes == NULL)
+ return NULL;
+ errcode = error_codes;
+ while (errcode->mnemonic != NULL) {
+ PyObject *mnemo, *key;
+ mnemo = PyUnicode_FromString(errcode->mnemonic);
+ key = Py_BuildValue("ii", errcode->library, errcode->reason);
+ if (mnemo == NULL || key == NULL)
+ return NULL;
+ if (PyDict_SetItem(err_codes_to_names, key, mnemo))
+ return NULL;
+ if (PyDict_SetItem(err_names_to_codes, mnemo, key))
+ return NULL;
+ Py_DECREF(key);
+ Py_DECREF(mnemo);
+ errcode++;
+ }
+ if (PyModule_AddObject(m, "err_codes_to_names", err_codes_to_names))
+ return NULL;
+ if (PyModule_AddObject(m, "err_names_to_codes", err_names_to_codes))
+ return NULL;
+
+ lib_codes_to_names = PyDict_New();
+ if (lib_codes_to_names == NULL)
+ return NULL;
+ libcode = library_codes;
+ while (libcode->library != NULL) {
+ PyObject *mnemo, *key;
+ key = PyLong_FromLong(libcode->code);
+ mnemo = PyUnicode_FromString(libcode->library);
+ if (key == NULL || mnemo == NULL)
+ return NULL;
+ if (PyDict_SetItem(lib_codes_to_names, key, mnemo))
+ return NULL;
+ Py_DECREF(key);
+ Py_DECREF(mnemo);
+ libcode++;
+ }
+ if (PyModule_AddObject(m, "lib_codes_to_names", lib_codes_to_names))
+ return NULL;
+
/* OpenSSL version */
/* SSLeay() gives us the version of the library linked against,
which could be different from the headers version.
diff --git a/Modules/_ssl_data.h b/Modules/_ssl_data.h
new file mode 100644
index 0000000000..81a8d7ba16
--- /dev/null
+++ b/Modules/_ssl_data.h
@@ -0,0 +1,1653 @@
+/* File generated by Tools/ssl/make_ssl_data.py */
+/* Generated on 2012-05-16T23:56:40.981382 */
+
+static struct py_ssl_library_code library_codes[] = {
+ {"PEM", ERR_LIB_PEM},
+ {"SSL", ERR_LIB_SSL},
+ {"X509", ERR_LIB_X509},
+ { NULL }
+};
+
+static struct py_ssl_error_code error_codes[] = {
+ #ifdef PEM_R_BAD_BASE64_DECODE
+ {"BAD_BASE64_DECODE", ERR_LIB_PEM, PEM_R_BAD_BASE64_DECODE},
+ #else
+ {"BAD_BASE64_DECODE", ERR_LIB_PEM, 100},
+ #endif
+ #ifdef PEM_R_BAD_DECRYPT
+ {"BAD_DECRYPT", ERR_LIB_PEM, PEM_R_BAD_DECRYPT},
+ #else
+ {"BAD_DECRYPT", ERR_LIB_PEM, 101},
+ #endif
+ #ifdef PEM_R_BAD_END_LINE
+ {"BAD_END_LINE", ERR_LIB_PEM, PEM_R_BAD_END_LINE},
+ #else
+ {"BAD_END_LINE", ERR_LIB_PEM, 102},
+ #endif
+ #ifdef PEM_R_BAD_IV_CHARS
+ {"BAD_IV_CHARS", ERR_LIB_PEM, PEM_R_BAD_IV_CHARS},
+ #else
+ {"BAD_IV_CHARS", ERR_LIB_PEM, 103},
+ #endif
+ #ifdef PEM_R_BAD_MAGIC_NUMBER
+ {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, PEM_R_BAD_MAGIC_NUMBER},
+ #else
+ {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, 116},
+ #endif
+ #ifdef PEM_R_BAD_PASSWORD_READ
+ {"BAD_PASSWORD_READ", ERR_LIB_PEM, PEM_R_BAD_PASSWORD_READ},
+ #else
+ {"BAD_PASSWORD_READ", ERR_LIB_PEM, 104},
+ #endif
+ #ifdef PEM_R_BAD_VERSION_NUMBER
+ {"BAD_VERSION_NUMBER", ERR_LIB_PEM, PEM_R_BAD_VERSION_NUMBER},
+ #else
+ {"BAD_VERSION_NUMBER", ERR_LIB_PEM, 117},
+ #endif
+ #ifdef PEM_R_BIO_WRITE_FAILURE
+ {"BIO_WRITE_FAILURE", ERR_LIB_PEM, PEM_R_BIO_WRITE_FAILURE},
+ #else
+ {"BIO_WRITE_FAILURE", ERR_LIB_PEM, 118},
+ #endif
+ #ifdef PEM_R_CIPHER_IS_NULL
+ {"CIPHER_IS_NULL", ERR_LIB_PEM, PEM_R_CIPHER_IS_NULL},
+ #else
+ {"CIPHER_IS_NULL", ERR_LIB_PEM, 127},
+ #endif
+ #ifdef PEM_R_ERROR_CONVERTING_PRIVATE_KEY
+ {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, PEM_R_ERROR_CONVERTING_PRIVATE_KEY},
+ #else
+ {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, 115},
+ #endif
+ #ifdef PEM_R_EXPECTING_PRIVATE_KEY_BLOB
+ {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PRIVATE_KEY_BLOB},
+ #else
+ {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, 119},
+ #endif
+ #ifdef PEM_R_EXPECTING_PUBLIC_KEY_BLOB
+ {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PUBLIC_KEY_BLOB},
+ #else
+ {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, 120},
+ #endif
+ #ifdef PEM_R_INCONSISTENT_HEADER
+ {"INCONSISTENT_HEADER", ERR_LIB_PEM, PEM_R_INCONSISTENT_HEADER},
+ #else
+ {"INCONSISTENT_HEADER", ERR_LIB_PEM, 121},
+ #endif
+ #ifdef PEM_R_KEYBLOB_HEADER_PARSE_ERROR
+ {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, PEM_R_KEYBLOB_HEADER_PARSE_ERROR},
+ #else
+ {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, 122},
+ #endif
+ #ifdef PEM_R_KEYBLOB_TOO_SHORT
+ {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, PEM_R_KEYBLOB_TOO_SHORT},
+ #else
+ {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, 123},
+ #endif
+ #ifdef PEM_R_NOT_DEK_INFO
+ {"NOT_DEK_INFO", ERR_LIB_PEM, PEM_R_NOT_DEK_INFO},
+ #else
+ {"NOT_DEK_INFO", ERR_LIB_PEM, 105},
+ #endif
+ #ifdef PEM_R_NOT_ENCRYPTED
+ {"NOT_ENCRYPTED", ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED},
+ #else
+ {"NOT_ENCRYPTED", ERR_LIB_PEM, 106},
+ #endif
+ #ifdef PEM_R_NOT_PROC_TYPE
+ {"NOT_PROC_TYPE", ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE},
+ #else
+ {"NOT_PROC_TYPE", ERR_LIB_PEM, 107},
+ #endif
+ #ifdef PEM_R_NO_START_LINE
+ {"NO_START_LINE", ERR_LIB_PEM, PEM_R_NO_START_LINE},
+ #else
+ {"NO_START_LINE", ERR_LIB_PEM, 108},
+ #endif
+ #ifdef PEM_R_PROBLEMS_GETTING_PASSWORD
+ {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, PEM_R_PROBLEMS_GETTING_PASSWORD},
+ #else
+ {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, 109},
+ #endif
+ #ifdef PEM_R_PUBLIC_KEY_NO_RSA
+ {"PUBLIC_KEY_NO_RSA", ERR_LIB_PEM, PEM_R_PUBLIC_KEY_NO_RSA},
+ #else
+ {"PUBLIC_KEY_NO_RSA", ERR_LIB_PEM, 110},
+ #endif
+ #ifdef PEM_R_PVK_DATA_TOO_SHORT
+ {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_DATA_TOO_SHORT},
+ #else
+ {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, 124},
+ #endif
+ #ifdef PEM_R_PVK_TOO_SHORT
+ {"PVK_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_TOO_SHORT},
+ #else
+ {"PVK_TOO_SHORT", ERR_LIB_PEM, 125},
+ #endif
+ #ifdef PEM_R_READ_KEY
+ {"READ_KEY", ERR_LIB_PEM, PEM_R_READ_KEY},
+ #else
+ {"READ_KEY", ERR_LIB_PEM, 111},
+ #endif
+ #ifdef PEM_R_SHORT_HEADER
+ {"SHORT_HEADER", ERR_LIB_PEM, PEM_R_SHORT_HEADER},
+ #else
+ {"SHORT_HEADER", ERR_LIB_PEM, 112},
+ #endif
+ #ifdef PEM_R_UNSUPPORTED_CIPHER
+ {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, PEM_R_UNSUPPORTED_CIPHER},
+ #else
+ {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, 113},
+ #endif
+ #ifdef PEM_R_UNSUPPORTED_ENCRYPTION
+ {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION},
+ #else
+ {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, 114},
+ #endif
+ #ifdef PEM_R_UNSUPPORTED_KEY_COMPONENTS
+ {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, PEM_R_UNSUPPORTED_KEY_COMPONENTS},
+ #else
+ {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, 126},
+ #endif
+ #ifdef SSL_R_APP_DATA_IN_HANDSHAKE
+ {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, SSL_R_APP_DATA_IN_HANDSHAKE},
+ #else
+ {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, 100},
+ #endif
+ #ifdef SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT
+ {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT},
+ #else
+ {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, 272},
+ #endif
+ #ifdef SSL_R_BAD_ALERT_RECORD
+ {"BAD_ALERT_RECORD", ERR_LIB_SSL, SSL_R_BAD_ALERT_RECORD},
+ #else
+ {"BAD_ALERT_RECORD", ERR_LIB_SSL, 101},
+ #endif
+ #ifdef SSL_R_BAD_AUTHENTICATION_TYPE
+ {"BAD_AUTHENTICATION_TYPE", ERR_LIB_SSL, SSL_R_BAD_AUTHENTICATION_TYPE},
+ #else
+ {"BAD_AUTHENTICATION_TYPE", ERR_LIB_SSL, 102},
+ #endif
+ #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC
+ {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC},
+ #else
+ {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, 103},
+ #endif
+ #ifdef SSL_R_BAD_CHECKSUM
+ {"BAD_CHECKSUM", ERR_LIB_SSL, SSL_R_BAD_CHECKSUM},
+ #else
+ {"BAD_CHECKSUM", ERR_LIB_SSL, 104},
+ #endif
+ #ifdef SSL_R_BAD_DATA_RETURNED_BY_CALLBACK
+ {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK},
+ #else
+ {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, 106},
+ #endif
+ #ifdef SSL_R_BAD_DECOMPRESSION
+ {"BAD_DECOMPRESSION", ERR_LIB_SSL, SSL_R_BAD_DECOMPRESSION},
+ #else
+ {"BAD_DECOMPRESSION", ERR_LIB_SSL, 107},
+ #endif
+ #ifdef SSL_R_BAD_DH_G_LENGTH
+ {"BAD_DH_G_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DH_G_LENGTH},
+ #else
+ {"BAD_DH_G_LENGTH", ERR_LIB_SSL, 108},
+ #endif
+ #ifdef SSL_R_BAD_DH_PUB_KEY_LENGTH
+ {"BAD_DH_PUB_KEY_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DH_PUB_KEY_LENGTH},
+ #else
+ {"BAD_DH_PUB_KEY_LENGTH", ERR_LIB_SSL, 109},
+ #endif
+ #ifdef SSL_R_BAD_DH_P_LENGTH
+ {"BAD_DH_P_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DH_P_LENGTH},
+ #else
+ {"BAD_DH_P_LENGTH", ERR_LIB_SSL, 110},
+ #endif
+ #ifdef SSL_R_BAD_DIGEST_LENGTH
+ {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DIGEST_LENGTH},
+ #else
+ {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, 111},
+ #endif
+ #ifdef SSL_R_BAD_DSA_SIGNATURE
+ {"BAD_DSA_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_DSA_SIGNATURE},
+ #else
+ {"BAD_DSA_SIGNATURE", ERR_LIB_SSL, 112},
+ #endif
+ #ifdef SSL_R_BAD_ECC_CERT
+ {"BAD_ECC_CERT", ERR_LIB_SSL, SSL_R_BAD_ECC_CERT},
+ #else
+ {"BAD_ECC_CERT", ERR_LIB_SSL, 304},
+ #endif
+ #ifdef SSL_R_BAD_ECDSA_SIGNATURE
+ {"BAD_ECDSA_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_ECDSA_SIGNATURE},
+ #else
+ {"BAD_ECDSA_SIGNATURE", ERR_LIB_SSL, 305},
+ #endif
+ #ifdef SSL_R_BAD_ECPOINT
+ {"BAD_ECPOINT", ERR_LIB_SSL, SSL_R_BAD_ECPOINT},
+ #else
+ {"BAD_ECPOINT", ERR_LIB_SSL, 306},
+ #endif
+ #ifdef SSL_R_BAD_HANDSHAKE_LENGTH
+ {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_LENGTH},
+ #else
+ {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, 332},
+ #endif
+ #ifdef SSL_R_BAD_HELLO_REQUEST
+ {"BAD_HELLO_REQUEST", ERR_LIB_SSL, SSL_R_BAD_HELLO_REQUEST},
+ #else
+ {"BAD_HELLO_REQUEST", ERR_LIB_SSL, 105},
+ #endif
+ #ifdef SSL_R_BAD_LENGTH
+ {"BAD_LENGTH", ERR_LIB_SSL, SSL_R_BAD_LENGTH},
+ #else
+ {"BAD_LENGTH", ERR_LIB_SSL, 271},
+ #endif
+ #ifdef SSL_R_BAD_MAC_DECODE
+ {"BAD_MAC_DECODE", ERR_LIB_SSL, SSL_R_BAD_MAC_DECODE},
+ #else
+ {"BAD_MAC_DECODE", ERR_LIB_SSL, 113},
+ #endif
+ #ifdef SSL_R_BAD_MAC_LENGTH
+ {"BAD_MAC_LENGTH", ERR_LIB_SSL, SSL_R_BAD_MAC_LENGTH},
+ #else
+ {"BAD_MAC_LENGTH", ERR_LIB_SSL, 333},
+ #endif
+ #ifdef SSL_R_BAD_MESSAGE_TYPE
+ {"BAD_MESSAGE_TYPE", ERR_LIB_SSL, SSL_R_BAD_MESSAGE_TYPE},
+ #else
+ {"BAD_MESSAGE_TYPE", ERR_LIB_SSL, 114},
+ #endif
+ #ifdef SSL_R_BAD_PACKET_LENGTH
+ {"BAD_PACKET_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PACKET_LENGTH},
+ #else
+ {"BAD_PACKET_LENGTH", ERR_LIB_SSL, 115},
+ #endif
+ #ifdef SSL_R_BAD_PROTOCOL_VERSION_NUMBER
+ {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_BAD_PROTOCOL_VERSION_NUMBER},
+ #else
+ {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, 116},
+ #endif
+ #ifdef SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH
+ {"BAD_PSK_IDENTITY_HINT_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH},
+ #else
+ {"BAD_PSK_IDENTITY_HINT_LENGTH", ERR_LIB_SSL, 316},
+ #endif
+ #ifdef SSL_R_BAD_RESPONSE_ARGUMENT
+ {"BAD_RESPONSE_ARGUMENT", ERR_LIB_SSL, SSL_R_BAD_RESPONSE_ARGUMENT},
+ #else
+ {"BAD_RESPONSE_ARGUMENT", ERR_LIB_SSL, 117},
+ #endif
+ #ifdef SSL_R_BAD_RSA_DECRYPT
+ {"BAD_RSA_DECRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_DECRYPT},
+ #else
+ {"BAD_RSA_DECRYPT", ERR_LIB_SSL, 118},
+ #endif
+ #ifdef SSL_R_BAD_RSA_ENCRYPT
+ {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_ENCRYPT},
+ #else
+ {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, 119},
+ #endif
+ #ifdef SSL_R_BAD_RSA_E_LENGTH
+ {"BAD_RSA_E_LENGTH", ERR_LIB_SSL, SSL_R_BAD_RSA_E_LENGTH},
+ #else
+ {"BAD_RSA_E_LENGTH", ERR_LIB_SSL, 120},
+ #endif
+ #ifdef SSL_R_BAD_RSA_MODULUS_LENGTH
+ {"BAD_RSA_MODULUS_LENGTH", ERR_LIB_SSL, SSL_R_BAD_RSA_MODULUS_LENGTH},
+ #else
+ {"BAD_RSA_MODULUS_LENGTH", ERR_LIB_SSL, 121},
+ #endif
+ #ifdef SSL_R_BAD_RSA_SIGNATURE
+ {"BAD_RSA_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_RSA_SIGNATURE},
+ #else
+ {"BAD_RSA_SIGNATURE", ERR_LIB_SSL, 122},
+ #endif
+ #ifdef SSL_R_BAD_SIGNATURE
+ {"BAD_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_SIGNATURE},
+ #else
+ {"BAD_SIGNATURE", ERR_LIB_SSL, 123},
+ #endif
+ #ifdef SSL_R_BAD_SSL_FILETYPE
+ {"BAD_SSL_FILETYPE", ERR_LIB_SSL, SSL_R_BAD_SSL_FILETYPE},
+ #else
+ {"BAD_SSL_FILETYPE", ERR_LIB_SSL, 124},
+ #endif
+ #ifdef SSL_R_BAD_SSL_SESSION_ID_LENGTH
+ {"BAD_SSL_SESSION_ID_LENGTH", ERR_LIB_SSL, SSL_R_BAD_SSL_SESSION_ID_LENGTH},
+ #else
+ {"BAD_SSL_SESSION_ID_LENGTH", ERR_LIB_SSL, 125},
+ #endif
+ #ifdef SSL_R_BAD_STATE
+ {"BAD_STATE", ERR_LIB_SSL, SSL_R_BAD_STATE},
+ #else
+ {"BAD_STATE", ERR_LIB_SSL, 126},
+ #endif
+ #ifdef SSL_R_BAD_WRITE_RETRY
+ {"BAD_WRITE_RETRY", ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY},
+ #else
+ {"BAD_WRITE_RETRY", ERR_LIB_SSL, 127},
+ #endif
+ #ifdef SSL_R_BIO_NOT_SET
+ {"BIO_NOT_SET", ERR_LIB_SSL, SSL_R_BIO_NOT_SET},
+ #else
+ {"BIO_NOT_SET", ERR_LIB_SSL, 128},
+ #endif
+ #ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG
+ {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG},
+ #else
+ {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, 129},
+ #endif
+ #ifdef SSL_R_BN_LIB
+ {"BN_LIB", ERR_LIB_SSL, SSL_R_BN_LIB},
+ #else
+ {"BN_LIB", ERR_LIB_SSL, 130},
+ #endif
+ #ifdef SSL_R_CA_DN_LENGTH_MISMATCH
+ {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CA_DN_LENGTH_MISMATCH},
+ #else
+ {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, 131},
+ #endif
+ #ifdef SSL_R_CA_DN_TOO_LONG
+ {"CA_DN_TOO_LONG", ERR_LIB_SSL, SSL_R_CA_DN_TOO_LONG},
+ #else
+ {"CA_DN_TOO_LONG", ERR_LIB_SSL, 132},
+ #endif
+ #ifdef SSL_R_CCS_RECEIVED_EARLY
+ {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, SSL_R_CCS_RECEIVED_EARLY},
+ #else
+ {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, 133},
+ #endif
+ #ifdef SSL_R_CERTIFICATE_VERIFY_FAILED
+ {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED},
+ #else
+ {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, 134},
+ #endif
+ #ifdef SSL_R_CERT_LENGTH_MISMATCH
+ {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CERT_LENGTH_MISMATCH},
+ #else
+ {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, 135},
+ #endif
+ #ifdef SSL_R_CHALLENGE_IS_DIFFERENT
+ {"CHALLENGE_IS_DIFFERENT", ERR_LIB_SSL, SSL_R_CHALLENGE_IS_DIFFERENT},
+ #else
+ {"CHALLENGE_IS_DIFFERENT", ERR_LIB_SSL, 136},
+ #endif
+ #ifdef SSL_R_CIPHER_CODE_WRONG_LENGTH
+ {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, SSL_R_CIPHER_CODE_WRONG_LENGTH},
+ #else
+ {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, 137},
+ #endif
+ #ifdef SSL_R_CIPHER_OR_HASH_UNAVAILABLE
+ {"CIPHER_OR_HASH_UNAVAILABLE", ERR_LIB_SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE},
+ #else
+ {"CIPHER_OR_HASH_UNAVAILABLE", ERR_LIB_SSL, 138},
+ #endif
+ #ifdef SSL_R_CIPHER_TABLE_SRC_ERROR
+ {"CIPHER_TABLE_SRC_ERROR", ERR_LIB_SSL, SSL_R_CIPHER_TABLE_SRC_ERROR},
+ #else
+ {"CIPHER_TABLE_SRC_ERROR", ERR_LIB_SSL, 139},
+ #endif
+ #ifdef SSL_R_CLIENTHELLO_TLSEXT
+ {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_CLIENTHELLO_TLSEXT},
+ #else
+ {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, 226},
+ #endif
+ #ifdef SSL_R_COMPRESSED_LENGTH_TOO_LONG
+ {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_COMPRESSED_LENGTH_TOO_LONG},
+ #else
+ {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, 140},
+ #endif
+ #ifdef SSL_R_COMPRESSION_DISABLED
+ {"COMPRESSION_DISABLED", ERR_LIB_SSL, SSL_R_COMPRESSION_DISABLED},
+ #else
+ {"COMPRESSION_DISABLED", ERR_LIB_SSL, 343},
+ #endif
+ #ifdef SSL_R_COMPRESSION_FAILURE
+ {"COMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_COMPRESSION_FAILURE},
+ #else
+ {"COMPRESSION_FAILURE", ERR_LIB_SSL, 141},
+ #endif
+ #ifdef SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE
+ {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE},
+ #else
+ {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, 307},
+ #endif
+ #ifdef SSL_R_COMPRESSION_LIBRARY_ERROR
+ {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, SSL_R_COMPRESSION_LIBRARY_ERROR},
+ #else
+ {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, 142},
+ #endif
+ #ifdef SSL_R_CONNECTION_ID_IS_DIFFERENT
+ {"CONNECTION_ID_IS_DIFFERENT", ERR_LIB_SSL, SSL_R_CONNECTION_ID_IS_DIFFERENT},
+ #else
+ {"CONNECTION_ID_IS_DIFFERENT", ERR_LIB_SSL, 143},
+ #endif
+ #ifdef SSL_R_CONNECTION_TYPE_NOT_SET
+ {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET},
+ #else
+ {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, 144},
+ #endif
+ #ifdef SSL_R_COOKIE_MISMATCH
+ {"COOKIE_MISMATCH", ERR_LIB_SSL, SSL_R_COOKIE_MISMATCH},
+ #else
+ {"COOKIE_MISMATCH", ERR_LIB_SSL, 308},
+ #endif
+ #ifdef SSL_R_DATA_BETWEEN_CCS_AND_FINISHED
+ {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED},
+ #else
+ {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, 145},
+ #endif
+ #ifdef SSL_R_DATA_LENGTH_TOO_LONG
+ {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG},
+ #else
+ {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, 146},
+ #endif
+ #ifdef SSL_R_DECRYPTION_FAILED
+ {"DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED},
+ #else
+ {"DECRYPTION_FAILED", ERR_LIB_SSL, 147},
+ #endif
+ #ifdef SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC
+ {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC},
+ #else
+ {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, 281},
+ #endif
+ #ifdef SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG
+ {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG},
+ #else
+ {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, 148},
+ #endif
+ #ifdef SSL_R_DIGEST_CHECK_FAILED
+ {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, SSL_R_DIGEST_CHECK_FAILED},
+ #else
+ {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, 149},
+ #endif
+ #ifdef SSL_R_DTLS_MESSAGE_TOO_BIG
+ {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, SSL_R_DTLS_MESSAGE_TOO_BIG},
+ #else
+ {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, 334},
+ #endif
+ #ifdef SSL_R_DUPLICATE_COMPRESSION_ID
+ {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, SSL_R_DUPLICATE_COMPRESSION_ID},
+ #else
+ {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, 309},
+ #endif
+ #ifdef SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT
+ {"ECC_CERT_NOT_FOR_KEY_AGREEMENT", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT},
+ #else
+ {"ECC_CERT_NOT_FOR_KEY_AGREEMENT", ERR_LIB_SSL, 317},
+ #endif
+ #ifdef SSL_R_ECC_CERT_NOT_FOR_SIGNING
+ {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING},
+ #else
+ {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, 318},
+ #endif
+ #ifdef SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE
+ {"ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE", ERR_LIB_SSL, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE},
+ #else
+ {"ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE", ERR_LIB_SSL, 322},
+ #endif
+ #ifdef SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE
+ {"ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE", ERR_LIB_SSL, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE},
+ #else
+ {"ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE", ERR_LIB_SSL, 323},
+ #endif
+ #ifdef SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER
+ {"ECGROUP_TOO_LARGE_FOR_CIPHER", ERR_LIB_SSL, SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER},
+ #else
+ {"ECGROUP_TOO_LARGE_FOR_CIPHER", ERR_LIB_SSL, 310},
+ #endif
+ #ifdef SSL_R_ENCRYPTED_LENGTH_TOO_LONG
+ {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_ENCRYPTED_LENGTH_TOO_LONG},
+ #else
+ {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, 150},
+ #endif
+ #ifdef SSL_R_ERROR_GENERATING_TMP_RSA_KEY
+ {"ERROR_GENERATING_TMP_RSA_KEY", ERR_LIB_SSL, SSL_R_ERROR_GENERATING_TMP_RSA_KEY},
+ #else
+ {"ERROR_GENERATING_TMP_RSA_KEY", ERR_LIB_SSL, 282},
+ #endif
+ #ifdef SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST
+ {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST},
+ #else
+ {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, 151},
+ #endif
+ #ifdef SSL_R_EXCESSIVE_MESSAGE_SIZE
+ {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, SSL_R_EXCESSIVE_MESSAGE_SIZE},
+ #else
+ {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, 152},
+ #endif
+ #ifdef SSL_R_EXTRA_DATA_IN_MESSAGE
+ {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, SSL_R_EXTRA_DATA_IN_MESSAGE},
+ #else
+ {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, 153},
+ #endif
+ #ifdef SSL_R_GOT_A_FIN_BEFORE_A_CCS
+ {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, SSL_R_GOT_A_FIN_BEFORE_A_CCS},
+ #else
+ {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, 154},
+ #endif
+ #ifdef SSL_R_HTTPS_PROXY_REQUEST
+ {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, SSL_R_HTTPS_PROXY_REQUEST},
+ #else
+ {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, 155},
+ #endif
+ #ifdef SSL_R_HTTP_REQUEST
+ {"HTTP_REQUEST", ERR_LIB_SSL, SSL_R_HTTP_REQUEST},
+ #else
+ {"HTTP_REQUEST", ERR_LIB_SSL, 156},
+ #endif
+ #ifdef SSL_R_ILLEGAL_PADDING
+ {"ILLEGAL_PADDING", ERR_LIB_SSL, SSL_R_ILLEGAL_PADDING},
+ #else
+ {"ILLEGAL_PADDING", ERR_LIB_SSL, 283},
+ #endif
+ #ifdef SSL_R_INCONSISTENT_COMPRESSION
+ {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, SSL_R_INCONSISTENT_COMPRESSION},
+ #else
+ {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, 340},
+ #endif
+ #ifdef SSL_R_INVALID_CHALLENGE_LENGTH
+ {"INVALID_CHALLENGE_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_CHALLENGE_LENGTH},
+ #else
+ {"INVALID_CHALLENGE_LENGTH", ERR_LIB_SSL, 158},
+ #endif
+ #ifdef SSL_R_INVALID_COMMAND
+ {"INVALID_COMMAND", ERR_LIB_SSL, SSL_R_INVALID_COMMAND},
+ #else
+ {"INVALID_COMMAND", ERR_LIB_SSL, 280},
+ #endif
+ #ifdef SSL_R_INVALID_COMPRESSION_ALGORITHM
+ {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_INVALID_COMPRESSION_ALGORITHM},
+ #else
+ {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, 341},
+ #endif
+ #ifdef SSL_R_INVALID_PURPOSE
+ {"INVALID_PURPOSE", ERR_LIB_SSL, SSL_R_INVALID_PURPOSE},
+ #else
+ {"INVALID_PURPOSE", ERR_LIB_SSL, 278},
+ #endif
+ #ifdef SSL_R_INVALID_STATUS_RESPONSE
+ {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_INVALID_STATUS_RESPONSE},
+ #else
+ {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, 328},
+ #endif
+ #ifdef SSL_R_INVALID_TICKET_KEYS_LENGTH
+ {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH},
+ #else
+ {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, 325},
+ #endif
+ #ifdef SSL_R_INVALID_TRUST
+ {"INVALID_TRUST", ERR_LIB_SSL, SSL_R_INVALID_TRUST},
+ #else
+ {"INVALID_TRUST", ERR_LIB_SSL, 279},
+ #endif
+ #ifdef SSL_R_KEY_ARG_TOO_LONG
+ {"KEY_ARG_TOO_LONG", ERR_LIB_SSL, SSL_R_KEY_ARG_TOO_LONG},
+ #else
+ {"KEY_ARG_TOO_LONG", ERR_LIB_SSL, 284},
+ #endif
+ #ifdef SSL_R_KRB5
+ {"KRB5", ERR_LIB_SSL, SSL_R_KRB5},
+ #else
+ {"KRB5", ERR_LIB_SSL, 285},
+ #endif
+ #ifdef SSL_R_KRB5_C_CC_PRINC
+ {"KRB5_C_CC_PRINC", ERR_LIB_SSL, SSL_R_KRB5_C_CC_PRINC},
+ #else
+ {"KRB5_C_CC_PRINC", ERR_LIB_SSL, 286},
+ #endif
+ #ifdef SSL_R_KRB5_C_GET_CRED
+ {"KRB5_C_GET_CRED", ERR_LIB_SSL, SSL_R_KRB5_C_GET_CRED},
+ #else
+ {"KRB5_C_GET_CRED", ERR_LIB_SSL, 287},
+ #endif
+ #ifdef SSL_R_KRB5_C_INIT
+ {"KRB5_C_INIT", ERR_LIB_SSL, SSL_R_KRB5_C_INIT},
+ #else
+ {"KRB5_C_INIT", ERR_LIB_SSL, 288},
+ #endif
+ #ifdef SSL_R_KRB5_C_MK_REQ
+ {"KRB5_C_MK_REQ", ERR_LIB_SSL, SSL_R_KRB5_C_MK_REQ},
+ #else
+ {"KRB5_C_MK_REQ", ERR_LIB_SSL, 289},
+ #endif
+ #ifdef SSL_R_KRB5_S_BAD_TICKET
+ {"KRB5_S_BAD_TICKET", ERR_LIB_SSL, SSL_R_KRB5_S_BAD_TICKET},
+ #else
+ {"KRB5_S_BAD_TICKET", ERR_LIB_SSL, 290},
+ #endif
+ #ifdef SSL_R_KRB5_S_INIT
+ {"KRB5_S_INIT", ERR_LIB_SSL, SSL_R_KRB5_S_INIT},
+ #else
+ {"KRB5_S_INIT", ERR_LIB_SSL, 291},
+ #endif
+ #ifdef SSL_R_KRB5_S_RD_REQ
+ {"KRB5_S_RD_REQ", ERR_LIB_SSL, SSL_R_KRB5_S_RD_REQ},
+ #else
+ {"KRB5_S_RD_REQ", ERR_LIB_SSL, 292},
+ #endif
+ #ifdef SSL_R_KRB5_S_TKT_EXPIRED
+ {"KRB5_S_TKT_EXPIRED", ERR_LIB_SSL, SSL_R_KRB5_S_TKT_EXPIRED},
+ #else
+ {"KRB5_S_TKT_EXPIRED", ERR_LIB_SSL, 293},
+ #endif
+ #ifdef SSL_R_KRB5_S_TKT_NYV
+ {"KRB5_S_TKT_NYV", ERR_LIB_SSL, SSL_R_KRB5_S_TKT_NYV},
+ #else
+ {"KRB5_S_TKT_NYV", ERR_LIB_SSL, 294},
+ #endif
+ #ifdef SSL_R_KRB5_S_TKT_SKEW
+ {"KRB5_S_TKT_SKEW", ERR_LIB_SSL, SSL_R_KRB5_S_TKT_SKEW},
+ #else
+ {"KRB5_S_TKT_SKEW", ERR_LIB_SSL, 295},
+ #endif
+ #ifdef SSL_R_LENGTH_MISMATCH
+ {"LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_LENGTH_MISMATCH},
+ #else
+ {"LENGTH_MISMATCH", ERR_LIB_SSL, 159},
+ #endif
+ #ifdef SSL_R_LENGTH_TOO_SHORT
+ {"LENGTH_TOO_SHORT", ERR_LIB_SSL, SSL_R_LENGTH_TOO_SHORT},
+ #else
+ {"LENGTH_TOO_SHORT", ERR_LIB_SSL, 160},
+ #endif
+ #ifdef SSL_R_LIBRARY_BUG
+ {"LIBRARY_BUG", ERR_LIB_SSL, SSL_R_LIBRARY_BUG},
+ #else
+ {"LIBRARY_BUG", ERR_LIB_SSL, 274},
+ #endif
+ #ifdef SSL_R_LIBRARY_HAS_NO_CIPHERS
+ {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS},
+ #else
+ {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, 161},
+ #endif
+ #ifdef SSL_R_MESSAGE_TOO_LONG
+ {"MESSAGE_TOO_LONG", ERR_LIB_SSL, SSL_R_MESSAGE_TOO_LONG},
+ #else
+ {"MESSAGE_TOO_LONG", ERR_LIB_SSL, 296},
+ #endif
+ #ifdef SSL_R_MISSING_DH_DSA_CERT
+ {"MISSING_DH_DSA_CERT", ERR_LIB_SSL, SSL_R_MISSING_DH_DSA_CERT},
+ #else
+ {"MISSING_DH_DSA_CERT", ERR_LIB_SSL, 162},
+ #endif
+ #ifdef SSL_R_MISSING_DH_KEY
+ {"MISSING_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_DH_KEY},
+ #else
+ {"MISSING_DH_KEY", ERR_LIB_SSL, 163},
+ #endif
+ #ifdef SSL_R_MISSING_DH_RSA_CERT
+ {"MISSING_DH_RSA_CERT", ERR_LIB_SSL, SSL_R_MISSING_DH_RSA_CERT},
+ #else
+ {"MISSING_DH_RSA_CERT", ERR_LIB_SSL, 164},
+ #endif
+ #ifdef SSL_R_MISSING_DSA_SIGNING_CERT
+ {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT},
+ #else
+ {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, 165},
+ #endif
+ #ifdef SSL_R_MISSING_EXPORT_TMP_DH_KEY
+ {"MISSING_EXPORT_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_EXPORT_TMP_DH_KEY},
+ #else
+ {"MISSING_EXPORT_TMP_DH_KEY", ERR_LIB_SSL, 166},
+ #endif
+ #ifdef SSL_R_MISSING_EXPORT_TMP_RSA_KEY
+ {"MISSING_EXPORT_TMP_RSA_KEY", ERR_LIB_SSL, SSL_R_MISSING_EXPORT_TMP_RSA_KEY},
+ #else
+ {"MISSING_EXPORT_TMP_RSA_KEY", ERR_LIB_SSL, 167},
+ #endif
+ #ifdef SSL_R_MISSING_RSA_CERTIFICATE
+ {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, SSL_R_MISSING_RSA_CERTIFICATE},
+ #else
+ {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, 168},
+ #endif
+ #ifdef SSL_R_MISSING_RSA_ENCRYPTING_CERT
+ {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_ENCRYPTING_CERT},
+ #else
+ {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, 169},
+ #endif
+ #ifdef SSL_R_MISSING_RSA_SIGNING_CERT
+ {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_SIGNING_CERT},
+ #else
+ {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, 170},
+ #endif
+ #ifdef SSL_R_MISSING_TMP_DH_KEY
+ {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY},
+ #else
+ {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, 171},
+ #endif
+ #ifdef SSL_R_MISSING_TMP_ECDH_KEY
+ {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_ECDH_KEY},
+ #else
+ {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, 311},
+ #endif
+ #ifdef SSL_R_MISSING_TMP_RSA_KEY
+ {"MISSING_TMP_RSA_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_RSA_KEY},
+ #else
+ {"MISSING_TMP_RSA_KEY", ERR_LIB_SSL, 172},
+ #endif
+ #ifdef SSL_R_MISSING_TMP_RSA_PKEY
+ {"MISSING_TMP_RSA_PKEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_RSA_PKEY},
+ #else
+ {"MISSING_TMP_RSA_PKEY", ERR_LIB_SSL, 173},
+ #endif
+ #ifdef SSL_R_MISSING_VERIFY_MESSAGE
+ {"MISSING_VERIFY_MESSAGE", ERR_LIB_SSL, SSL_R_MISSING_VERIFY_MESSAGE},
+ #else
+ {"MISSING_VERIFY_MESSAGE", ERR_LIB_SSL, 174},
+ #endif
+ #ifdef SSL_R_NON_SSLV2_INITIAL_PACKET
+ {"NON_SSLV2_INITIAL_PACKET", ERR_LIB_SSL, SSL_R_NON_SSLV2_INITIAL_PACKET},
+ #else
+ {"NON_SSLV2_INITIAL_PACKET", ERR_LIB_SSL, 175},
+ #endif
+ #ifdef SSL_R_NO_CERTIFICATES_RETURNED
+ {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATES_RETURNED},
+ #else
+ {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, 176},
+ #endif
+ #ifdef SSL_R_NO_CERTIFICATE_ASSIGNED
+ {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED},
+ #else
+ {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, 177},
+ #endif
+ #ifdef SSL_R_NO_CERTIFICATE_RETURNED
+ {"NO_CERTIFICATE_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_RETURNED},
+ #else
+ {"NO_CERTIFICATE_RETURNED", ERR_LIB_SSL, 178},
+ #endif
+ #ifdef SSL_R_NO_CERTIFICATE_SET
+ {"NO_CERTIFICATE_SET", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SET},
+ #else
+ {"NO_CERTIFICATE_SET", ERR_LIB_SSL, 179},
+ #endif
+ #ifdef SSL_R_NO_CERTIFICATE_SPECIFIED
+ {"NO_CERTIFICATE_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SPECIFIED},
+ #else
+ {"NO_CERTIFICATE_SPECIFIED", ERR_LIB_SSL, 180},
+ #endif
+ #ifdef SSL_R_NO_CIPHERS_AVAILABLE
+ {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_CIPHERS_AVAILABLE},
+ #else
+ {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, 181},
+ #endif
+ #ifdef SSL_R_NO_CIPHERS_PASSED
+ {"NO_CIPHERS_PASSED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_PASSED},
+ #else
+ {"NO_CIPHERS_PASSED", ERR_LIB_SSL, 182},
+ #endif
+ #ifdef SSL_R_NO_CIPHERS_SPECIFIED
+ {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED},
+ #else
+ {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, 183},
+ #endif
+ #ifdef SSL_R_NO_CIPHER_LIST
+ {"NO_CIPHER_LIST", ERR_LIB_SSL, SSL_R_NO_CIPHER_LIST},
+ #else
+ {"NO_CIPHER_LIST", ERR_LIB_SSL, 184},
+ #endif
+ #ifdef SSL_R_NO_CIPHER_MATCH
+ {"NO_CIPHER_MATCH", ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH},
+ #else
+ {"NO_CIPHER_MATCH", ERR_LIB_SSL, 185},
+ #endif
+ #ifdef SSL_R_NO_CLIENT_CERT_METHOD
+ {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD},
+ #else
+ {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, 331},
+ #endif
+ #ifdef SSL_R_NO_CLIENT_CERT_RECEIVED
+ {"NO_CLIENT_CERT_RECEIVED", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_RECEIVED},
+ #else
+ {"NO_CLIENT_CERT_RECEIVED", ERR_LIB_SSL, 186},
+ #endif
+ #ifdef SSL_R_NO_COMPRESSION_SPECIFIED
+ {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_COMPRESSION_SPECIFIED},
+ #else
+ {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, 187},
+ #endif
+ #ifdef SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER
+ {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER},
+ #else
+ {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, 330},
+ #endif
+ #ifdef SSL_R_NO_METHOD_SPECIFIED
+ {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED},
+ #else
+ {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, 188},
+ #endif
+ #ifdef SSL_R_NO_PRIVATEKEY
+ {"NO_PRIVATEKEY", ERR_LIB_SSL, SSL_R_NO_PRIVATEKEY},
+ #else
+ {"NO_PRIVATEKEY", ERR_LIB_SSL, 189},
+ #endif
+ #ifdef SSL_R_NO_PRIVATE_KEY_ASSIGNED
+ {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED},
+ #else
+ {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, 190},
+ #endif
+ #ifdef SSL_R_NO_PROTOCOLS_AVAILABLE
+ {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_PROTOCOLS_AVAILABLE},
+ #else
+ {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, 191},
+ #endif
+ #ifdef SSL_R_NO_PUBLICKEY
+ {"NO_PUBLICKEY", ERR_LIB_SSL, SSL_R_NO_PUBLICKEY},
+ #else
+ {"NO_PUBLICKEY", ERR_LIB_SSL, 192},
+ #endif
+ #ifdef SSL_R_NO_RENEGOTIATION
+ {"NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION},
+ #else
+ {"NO_RENEGOTIATION", ERR_LIB_SSL, 339},
+ #endif
+ #ifdef SSL_R_NO_REQUIRED_DIGEST
+ {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, SSL_R_NO_REQUIRED_DIGEST},
+ #else
+ {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, 324},
+ #endif
+ #ifdef SSL_R_NO_SHARED_CIPHER
+ {"NO_SHARED_CIPHER", ERR_LIB_SSL, SSL_R_NO_SHARED_CIPHER},
+ #else
+ {"NO_SHARED_CIPHER", ERR_LIB_SSL, 193},
+ #endif
+ #ifdef SSL_R_NO_VERIFY_CALLBACK
+ {"NO_VERIFY_CALLBACK", ERR_LIB_SSL, SSL_R_NO_VERIFY_CALLBACK},
+ #else
+ {"NO_VERIFY_CALLBACK", ERR_LIB_SSL, 194},
+ #endif
+ #ifdef SSL_R_NULL_SSL_CTX
+ {"NULL_SSL_CTX", ERR_LIB_SSL, SSL_R_NULL_SSL_CTX},
+ #else
+ {"NULL_SSL_CTX", ERR_LIB_SSL, 195},
+ #endif
+ #ifdef SSL_R_NULL_SSL_METHOD_PASSED
+ {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED},
+ #else
+ {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, 196},
+ #endif
+ #ifdef SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED
+ {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED},
+ #else
+ {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, 197},
+ #endif
+ #ifdef SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED
+ {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED},
+ #else
+ {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, 344},
+ #endif
+ #ifdef SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE
+ {"ONLY_TLS_ALLOWED_IN_FIPS_MODE", ERR_LIB_SSL, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE},
+ #else
+ {"ONLY_TLS_ALLOWED_IN_FIPS_MODE", ERR_LIB_SSL, 297},
+ #endif
+ #ifdef SSL_R_OPAQUE_PRF_INPUT_TOO_LONG
+ {"OPAQUE_PRF_INPUT_TOO_LONG", ERR_LIB_SSL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG},
+ #else
+ {"OPAQUE_PRF_INPUT_TOO_LONG", ERR_LIB_SSL, 327},
+ #endif
+ #ifdef SSL_R_PACKET_LENGTH_TOO_LONG
+ {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PACKET_LENGTH_TOO_LONG},
+ #else
+ {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, 198},
+ #endif
+ #ifdef SSL_R_PARSE_TLSEXT
+ {"PARSE_TLSEXT", ERR_LIB_SSL, SSL_R_PARSE_TLSEXT},
+ #else
+ {"PARSE_TLSEXT", ERR_LIB_SSL, 227},
+ #endif
+ #ifdef SSL_R_PATH_TOO_LONG
+ {"PATH_TOO_LONG", ERR_LIB_SSL, SSL_R_PATH_TOO_LONG},
+ #else
+ {"PATH_TOO_LONG", ERR_LIB_SSL, 270},
+ #endif
+ #ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE
+ {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE},
+ #else
+ {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, 199},
+ #endif
+ #ifdef SSL_R_PEER_ERROR
+ {"PEER_ERROR", ERR_LIB_SSL, SSL_R_PEER_ERROR},
+ #else
+ {"PEER_ERROR", ERR_LIB_SSL, 200},
+ #endif
+ #ifdef SSL_R_PEER_ERROR_CERTIFICATE
+ {"PEER_ERROR_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_ERROR_CERTIFICATE},
+ #else
+ {"PEER_ERROR_CERTIFICATE", ERR_LIB_SSL, 201},
+ #endif
+ #ifdef SSL_R_PEER_ERROR_NO_CERTIFICATE
+ {"PEER_ERROR_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_ERROR_NO_CERTIFICATE},
+ #else
+ {"PEER_ERROR_NO_CERTIFICATE", ERR_LIB_SSL, 202},
+ #endif
+ #ifdef SSL_R_PEER_ERROR_NO_CIPHER
+ {"PEER_ERROR_NO_CIPHER", ERR_LIB_SSL, SSL_R_PEER_ERROR_NO_CIPHER},
+ #else
+ {"PEER_ERROR_NO_CIPHER", ERR_LIB_SSL, 203},
+ #endif
+ #ifdef SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
+ {"PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE},
+ #else
+ {"PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE", ERR_LIB_SSL, 204},
+ #endif
+ #ifdef SSL_R_PRE_MAC_LENGTH_TOO_LONG
+ {"PRE_MAC_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PRE_MAC_LENGTH_TOO_LONG},
+ #else
+ {"PRE_MAC_LENGTH_TOO_LONG", ERR_LIB_SSL, 205},
+ #endif
+ #ifdef SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS
+ {"PROBLEMS_MAPPING_CIPHER_FUNCTIONS", ERR_LIB_SSL, SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS},
+ #else
+ {"PROBLEMS_MAPPING_CIPHER_FUNCTIONS", ERR_LIB_SSL, 206},
+ #endif
+ #ifdef SSL_R_PROTOCOL_IS_SHUTDOWN
+ {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN},
+ #else
+ {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, 207},
+ #endif
+ #ifdef SSL_R_PSK_IDENTITY_NOT_FOUND
+ {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, SSL_R_PSK_IDENTITY_NOT_FOUND},
+ #else
+ {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, 223},
+ #endif
+ #ifdef SSL_R_PSK_NO_CLIENT_CB
+ {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, SSL_R_PSK_NO_CLIENT_CB},
+ #else
+ {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, 224},
+ #endif
+ #ifdef SSL_R_PSK_NO_SERVER_CB
+ {"PSK_NO_SERVER_CB", ERR_LIB_SSL, SSL_R_PSK_NO_SERVER_CB},
+ #else
+ {"PSK_NO_SERVER_CB", ERR_LIB_SSL, 225},
+ #endif
+ #ifdef SSL_R_PUBLIC_KEY_ENCRYPT_ERROR
+ {"PUBLIC_KEY_ENCRYPT_ERROR", ERR_LIB_SSL, SSL_R_PUBLIC_KEY_ENCRYPT_ERROR},
+ #else
+ {"PUBLIC_KEY_ENCRYPT_ERROR", ERR_LIB_SSL, 208},
+ #endif
+ #ifdef SSL_R_PUBLIC_KEY_IS_NOT_RSA
+ {"PUBLIC_KEY_IS_NOT_RSA", ERR_LIB_SSL, SSL_R_PUBLIC_KEY_IS_NOT_RSA},
+ #else
+ {"PUBLIC_KEY_IS_NOT_RSA", ERR_LIB_SSL, 209},
+ #endif
+ #ifdef SSL_R_PUBLIC_KEY_NOT_RSA
+ {"PUBLIC_KEY_NOT_RSA", ERR_LIB_SSL, SSL_R_PUBLIC_KEY_NOT_RSA},
+ #else
+ {"PUBLIC_KEY_NOT_RSA", ERR_LIB_SSL, 210},
+ #endif
+ #ifdef SSL_R_READ_BIO_NOT_SET
+ {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET},
+ #else
+ {"READ_BIO_NOT_SET", ERR_LIB_SSL, 211},
+ #endif
+ #ifdef SSL_R_READ_TIMEOUT_EXPIRED
+ {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, SSL_R_READ_TIMEOUT_EXPIRED},
+ #else
+ {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, 312},
+ #endif
+ #ifdef SSL_R_READ_WRONG_PACKET_TYPE
+ {"READ_WRONG_PACKET_TYPE", ERR_LIB_SSL, SSL_R_READ_WRONG_PACKET_TYPE},
+ #else
+ {"READ_WRONG_PACKET_TYPE", ERR_LIB_SSL, 212},
+ #endif
+ #ifdef SSL_R_RECORD_LENGTH_MISMATCH
+ {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH},
+ #else
+ {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, 213},
+ #endif
+ #ifdef SSL_R_RECORD_TOO_LARGE
+ {"RECORD_TOO_LARGE", ERR_LIB_SSL, SSL_R_RECORD_TOO_LARGE},
+ #else
+ {"RECORD_TOO_LARGE", ERR_LIB_SSL, 214},
+ #endif
+ #ifdef SSL_R_RECORD_TOO_SMALL
+ {"RECORD_TOO_SMALL", ERR_LIB_SSL, SSL_R_RECORD_TOO_SMALL},
+ #else
+ {"RECORD_TOO_SMALL", ERR_LIB_SSL, 298},
+ #endif
+ #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG
+ {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG},
+ #else
+ {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, 335},
+ #endif
+ #ifdef SSL_R_RENEGOTIATION_ENCODING_ERR
+ {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, SSL_R_RENEGOTIATION_ENCODING_ERR},
+ #else
+ {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, 336},
+ #endif
+ #ifdef SSL_R_RENEGOTIATION_MISMATCH
+ {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, SSL_R_RENEGOTIATION_MISMATCH},
+ #else
+ {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, 337},
+ #endif
+ #ifdef SSL_R_REQUIRED_CIPHER_MISSING
+ {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_CIPHER_MISSING},
+ #else
+ {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, 215},
+ #endif
+ #ifdef SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING
+ {"REQUIRED_COMPRESSSION_ALGORITHM_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING},
+ #else
+ {"REQUIRED_COMPRESSSION_ALGORITHM_MISSING", ERR_LIB_SSL, 342},
+ #endif
+ #ifdef SSL_R_REUSE_CERT_LENGTH_NOT_ZERO
+ {"REUSE_CERT_LENGTH_NOT_ZERO", ERR_LIB_SSL, SSL_R_REUSE_CERT_LENGTH_NOT_ZERO},
+ #else
+ {"REUSE_CERT_LENGTH_NOT_ZERO", ERR_LIB_SSL, 216},
+ #endif
+ #ifdef SSL_R_REUSE_CERT_TYPE_NOT_ZERO
+ {"REUSE_CERT_TYPE_NOT_ZERO", ERR_LIB_SSL, SSL_R_REUSE_CERT_TYPE_NOT_ZERO},
+ #else
+ {"REUSE_CERT_TYPE_NOT_ZERO", ERR_LIB_SSL, 217},
+ #endif
+ #ifdef SSL_R_REUSE_CIPHER_LIST_NOT_ZERO
+ {"REUSE_CIPHER_LIST_NOT_ZERO", ERR_LIB_SSL, SSL_R_REUSE_CIPHER_LIST_NOT_ZERO},
+ #else
+ {"REUSE_CIPHER_LIST_NOT_ZERO", ERR_LIB_SSL, 218},
+ #endif
+ #ifdef SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING
+ {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING},
+ #else
+ {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, 345},
+ #endif
+ #ifdef SSL_R_SERVERHELLO_TLSEXT
+ {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT},
+ #else
+ {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, 275},
+ #endif
+ #ifdef SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED
+ {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED},
+ #else
+ {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, 277},
+ #endif
+ #ifdef SSL_R_SHORT_READ
+ {"SHORT_READ", ERR_LIB_SSL, SSL_R_SHORT_READ},
+ #else
+ {"SHORT_READ", ERR_LIB_SSL, 219},
+ #endif
+ #ifdef SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE
+ {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE},
+ #else
+ {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, 220},
+ #endif
+ #ifdef SSL_R_SSL23_DOING_SESSION_ID_REUSE
+ {"SSL23_DOING_SESSION_ID_REUSE", ERR_LIB_SSL, SSL_R_SSL23_DOING_SESSION_ID_REUSE},
+ #else
+ {"SSL23_DOING_SESSION_ID_REUSE", ERR_LIB_SSL, 221},
+ #endif
+ #ifdef SSL_R_SSL2_CONNECTION_ID_TOO_LONG
+ {"SSL2_CONNECTION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL2_CONNECTION_ID_TOO_LONG},
+ #else
+ {"SSL2_CONNECTION_ID_TOO_LONG", ERR_LIB_SSL, 299},
+ #endif
+ #ifdef SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT
+ {"SSL3_EXT_INVALID_ECPOINTFORMAT", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT},
+ #else
+ {"SSL3_EXT_INVALID_ECPOINTFORMAT", ERR_LIB_SSL, 321},
+ #endif
+ #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME
+ {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME},
+ #else
+ {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, 319},
+ #endif
+ #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE
+ {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE},
+ #else
+ {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, 320},
+ #endif
+ #ifdef SSL_R_SSL3_SESSION_ID_TOO_LONG
+ {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_LONG},
+ #else
+ {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, 300},
+ #endif
+ #ifdef SSL_R_SSL3_SESSION_ID_TOO_SHORT
+ {"SSL3_SESSION_ID_TOO_SHORT", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_SHORT},
+ #else
+ {"SSL3_SESSION_ID_TOO_SHORT", ERR_LIB_SSL, 222},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE
+ {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE},
+ #else
+ {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, 1042},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
+ {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
+ #else
+ {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, 1020},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED
+ {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED},
+ #else
+ {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, 1045},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
+ {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
+ #else
+ {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, 1044},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
+ {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
+ #else
+ {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, 1046},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE
+ {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE},
+ #else
+ {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, 1030},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
+ {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
+ #else
+ {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, 1040},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER
+ {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER},
+ #else
+ {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, 1047},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
+ {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
+ #else
+ {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, 1041},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
+ {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
+ #else
+ {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, 1010},
+ #endif
+ #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
+ {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE},
+ #else
+ {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, 1043},
+ #endif
+ #ifdef SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION
+ {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION},
+ #else
+ {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, 228},
+ #endif
+ #ifdef SSL_R_SSL_HANDSHAKE_FAILURE
+ {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE},
+ #else
+ {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, 229},
+ #endif
+ #ifdef SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS
+ {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS},
+ #else
+ {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, 230},
+ #endif
+ #ifdef SSL_R_SSL_SESSION_ID_CALLBACK_FAILED
+ {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED},
+ #else
+ {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, 301},
+ #endif
+ #ifdef SSL_R_SSL_SESSION_ID_CONFLICT
+ {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONFLICT},
+ #else
+ {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, 302},
+ #endif
+ #ifdef SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG
+ {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG},
+ #else
+ {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, 273},
+ #endif
+ #ifdef SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH
+ {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH},
+ #else
+ {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, 303},
+ #endif
+ #ifdef SSL_R_SSL_SESSION_ID_IS_DIFFERENT
+ {"SSL_SESSION_ID_IS_DIFFERENT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_IS_DIFFERENT},
+ #else
+ {"SSL_SESSION_ID_IS_DIFFERENT", ERR_LIB_SSL, 231},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
+ {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED},
+ #else
+ {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, 1049},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR
+ {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR},
+ #else
+ {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, 1050},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
+ {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
+ #else
+ {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, 1021},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR
+ {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR},
+ #else
+ {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, 1051},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
+ {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
+ #else
+ {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, 1060},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
+ {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
+ #else
+ {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, 1071},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR
+ {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR},
+ #else
+ {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, 1080},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
+ {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
+ #else
+ {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, 1100},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION
+ {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION},
+ #else
+ {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, 1070},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
+ {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
+ #else
+ {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, 1022},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
+ {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA},
+ #else
+ {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, 1048},
+ #endif
+ #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
+ {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED},
+ #else
+ {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, 1090},
+ #endif
+ #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
+ {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
+ #else
+ {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, 1114},
+ #endif
+ #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
+ {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE},
+ #else
+ {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, 1113},
+ #endif
+ #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
+ {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
+ #else
+ {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, 1111},
+ #endif
+ #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME
+ {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME},
+ #else
+ {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, 1112},
+ #endif
+ #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
+ {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
+ #else
+ {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, 1110},
+ #endif
+ #ifdef SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER
+ {"TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER", ERR_LIB_SSL, SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER},
+ #else
+ {"TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER", ERR_LIB_SSL, 232},
+ #endif
+ #ifdef SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST
+ {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST},
+ #else
+ {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, 157},
+ #endif
+ #ifdef SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST
+ {"TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST", ERR_LIB_SSL, SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST},
+ #else
+ {"TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST", ERR_LIB_SSL, 233},
+ #endif
+ #ifdef SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG
+ {"TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG},
+ #else
+ {"TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, 234},
+ #endif
+ #ifdef SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER
+ {"TRIED_TO_USE_UNSUPPORTED_CIPHER", ERR_LIB_SSL, SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER},
+ #else
+ {"TRIED_TO_USE_UNSUPPORTED_CIPHER", ERR_LIB_SSL, 235},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_DECODE_DH_CERTS
+ {"UNABLE_TO_DECODE_DH_CERTS", ERR_LIB_SSL, SSL_R_UNABLE_TO_DECODE_DH_CERTS},
+ #else
+ {"UNABLE_TO_DECODE_DH_CERTS", ERR_LIB_SSL, 236},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_DECODE_ECDH_CERTS
+ {"UNABLE_TO_DECODE_ECDH_CERTS", ERR_LIB_SSL, SSL_R_UNABLE_TO_DECODE_ECDH_CERTS},
+ #else
+ {"UNABLE_TO_DECODE_ECDH_CERTS", ERR_LIB_SSL, 313},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY
+ {"UNABLE_TO_EXTRACT_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY},
+ #else
+ {"UNABLE_TO_EXTRACT_PUBLIC_KEY", ERR_LIB_SSL, 237},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_FIND_DH_PARAMETERS
+ {"UNABLE_TO_FIND_DH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_DH_PARAMETERS},
+ #else
+ {"UNABLE_TO_FIND_DH_PARAMETERS", ERR_LIB_SSL, 238},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS
+ {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS},
+ #else
+ {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, 314},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS
+ {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS},
+ #else
+ {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, 239},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_FIND_SSL_METHOD
+ {"UNABLE_TO_FIND_SSL_METHOD", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_SSL_METHOD},
+ #else
+ {"UNABLE_TO_FIND_SSL_METHOD", ERR_LIB_SSL, 240},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES
+ {"UNABLE_TO_LOAD_SSL2_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES},
+ #else
+ {"UNABLE_TO_LOAD_SSL2_MD5_ROUTINES", ERR_LIB_SSL, 241},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES
+ {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES},
+ #else
+ {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, 242},
+ #endif
+ #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES
+ {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES},
+ #else
+ {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, 243},
+ #endif
+ #ifdef SSL_R_UNEXPECTED_MESSAGE
+ {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_MESSAGE},
+ #else
+ {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, 244},
+ #endif
+ #ifdef SSL_R_UNEXPECTED_RECORD
+ {"UNEXPECTED_RECORD", ERR_LIB_SSL, SSL_R_UNEXPECTED_RECORD},
+ #else
+ {"UNEXPECTED_RECORD", ERR_LIB_SSL, 245},
+ #endif
+ #ifdef SSL_R_UNINITIALIZED
+ {"UNINITIALIZED", ERR_LIB_SSL, SSL_R_UNINITIALIZED},
+ #else
+ {"UNINITIALIZED", ERR_LIB_SSL, 276},
+ #endif
+ #ifdef SSL_R_UNKNOWN_ALERT_TYPE
+ {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_ALERT_TYPE},
+ #else
+ {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, 246},
+ #endif
+ #ifdef SSL_R_UNKNOWN_CERTIFICATE_TYPE
+ {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE},
+ #else
+ {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, 247},
+ #endif
+ #ifdef SSL_R_UNKNOWN_CIPHER_RETURNED
+ {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_RETURNED},
+ #else
+ {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, 248},
+ #endif
+ #ifdef SSL_R_UNKNOWN_CIPHER_TYPE
+ {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_TYPE},
+ #else
+ {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, 249},
+ #endif
+ #ifdef SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE
+ {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE},
+ #else
+ {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, 250},
+ #endif
+ #ifdef SSL_R_UNKNOWN_PKEY_TYPE
+ {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE},
+ #else
+ {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, 251},
+ #endif
+ #ifdef SSL_R_UNKNOWN_PROTOCOL
+ {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, SSL_R_UNKNOWN_PROTOCOL},
+ #else
+ {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, 252},
+ #endif
+ #ifdef SSL_R_UNKNOWN_REMOTE_ERROR_TYPE
+ {"UNKNOWN_REMOTE_ERROR_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_REMOTE_ERROR_TYPE},
+ #else
+ {"UNKNOWN_REMOTE_ERROR_TYPE", ERR_LIB_SSL, 253},
+ #endif
+ #ifdef SSL_R_UNKNOWN_SSL_VERSION
+ {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNKNOWN_SSL_VERSION},
+ #else
+ {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, 254},
+ #endif
+ #ifdef SSL_R_UNKNOWN_STATE
+ {"UNKNOWN_STATE", ERR_LIB_SSL, SSL_R_UNKNOWN_STATE},
+ #else
+ {"UNKNOWN_STATE", ERR_LIB_SSL, 255},
+ #endif
+ #ifdef SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED
+ {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED},
+ #else
+ {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, 338},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_CIPHER
+ {"UNSUPPORTED_CIPHER", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CIPHER},
+ #else
+ {"UNSUPPORTED_CIPHER", ERR_LIB_SSL, 256},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM
+ {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM},
+ #else
+ {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, 257},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_DIGEST_TYPE
+ {"UNSUPPORTED_DIGEST_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_DIGEST_TYPE},
+ #else
+ {"UNSUPPORTED_DIGEST_TYPE", ERR_LIB_SSL, 326},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE
+ {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE},
+ #else
+ {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, 315},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_PROTOCOL
+ {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL},
+ #else
+ {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, 258},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_SSL_VERSION
+ {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNSUPPORTED_SSL_VERSION},
+ #else
+ {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, 259},
+ #endif
+ #ifdef SSL_R_UNSUPPORTED_STATUS_TYPE
+ {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_STATUS_TYPE},
+ #else
+ {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, 329},
+ #endif
+ #ifdef SSL_R_WRITE_BIO_NOT_SET
+ {"WRITE_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_WRITE_BIO_NOT_SET},
+ #else
+ {"WRITE_BIO_NOT_SET", ERR_LIB_SSL, 260},
+ #endif
+ #ifdef SSL_R_WRONG_CIPHER_RETURNED
+ {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_WRONG_CIPHER_RETURNED},
+ #else
+ {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, 261},
+ #endif
+ #ifdef SSL_R_WRONG_MESSAGE_TYPE
+ {"WRONG_MESSAGE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_MESSAGE_TYPE},
+ #else
+ {"WRONG_MESSAGE_TYPE", ERR_LIB_SSL, 262},
+ #endif
+ #ifdef SSL_R_WRONG_NUMBER_OF_KEY_BITS
+ {"WRONG_NUMBER_OF_KEY_BITS", ERR_LIB_SSL, SSL_R_WRONG_NUMBER_OF_KEY_BITS},
+ #else
+ {"WRONG_NUMBER_OF_KEY_BITS", ERR_LIB_SSL, 263},
+ #endif
+ #ifdef SSL_R_WRONG_SIGNATURE_LENGTH
+ {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH},
+ #else
+ {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, 264},
+ #endif
+ #ifdef SSL_R_WRONG_SIGNATURE_SIZE
+ {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_SIZE},
+ #else
+ {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, 265},
+ #endif
+ #ifdef SSL_R_WRONG_SSL_VERSION
+ {"WRONG_SSL_VERSION", ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION},
+ #else
+ {"WRONG_SSL_VERSION", ERR_LIB_SSL, 266},
+ #endif
+ #ifdef SSL_R_WRONG_VERSION_NUMBER
+ {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_WRONG_VERSION_NUMBER},
+ #else
+ {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, 267},
+ #endif
+ #ifdef SSL_R_X509_LIB
+ {"X509_LIB", ERR_LIB_SSL, SSL_R_X509_LIB},
+ #else
+ {"X509_LIB", ERR_LIB_SSL, 268},
+ #endif
+ #ifdef SSL_R_X509_VERIFICATION_SETUP_PROBLEMS
+ {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS},
+ #else
+ {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, 269},
+ #endif
+ #ifdef X509_R_BAD_X509_FILETYPE
+ {"BAD_X509_FILETYPE", ERR_LIB_X509, X509_R_BAD_X509_FILETYPE},
+ #else
+ {"BAD_X509_FILETYPE", ERR_LIB_X509, 100},
+ #endif
+ #ifdef X509_R_BASE64_DECODE_ERROR
+ {"BASE64_DECODE_ERROR", ERR_LIB_X509, X509_R_BASE64_DECODE_ERROR},
+ #else
+ {"BASE64_DECODE_ERROR", ERR_LIB_X509, 118},
+ #endif
+ #ifdef X509_R_CANT_CHECK_DH_KEY
+ {"CANT_CHECK_DH_KEY", ERR_LIB_X509, X509_R_CANT_CHECK_DH_KEY},
+ #else
+ {"CANT_CHECK_DH_KEY", ERR_LIB_X509, 114},
+ #endif
+ #ifdef X509_R_CERT_ALREADY_IN_HASH_TABLE
+ {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, X509_R_CERT_ALREADY_IN_HASH_TABLE},
+ #else
+ {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, 101},
+ #endif
+ #ifdef X509_R_ERR_ASN1_LIB
+ {"ERR_ASN1_LIB", ERR_LIB_X509, X509_R_ERR_ASN1_LIB},
+ #else
+ {"ERR_ASN1_LIB", ERR_LIB_X509, 102},
+ #endif
+ #ifdef X509_R_INVALID_DIRECTORY
+ {"INVALID_DIRECTORY", ERR_LIB_X509, X509_R_INVALID_DIRECTORY},
+ #else
+ {"INVALID_DIRECTORY", ERR_LIB_X509, 113},
+ #endif
+ #ifdef X509_R_INVALID_FIELD_NAME
+ {"INVALID_FIELD_NAME", ERR_LIB_X509, X509_R_INVALID_FIELD_NAME},
+ #else
+ {"INVALID_FIELD_NAME", ERR_LIB_X509, 119},
+ #endif
+ #ifdef X509_R_INVALID_TRUST
+ {"INVALID_TRUST", ERR_LIB_X509, X509_R_INVALID_TRUST},
+ #else
+ {"INVALID_TRUST", ERR_LIB_X509, 123},
+ #endif
+ #ifdef X509_R_KEY_TYPE_MISMATCH
+ {"KEY_TYPE_MISMATCH", ERR_LIB_X509, X509_R_KEY_TYPE_MISMATCH},
+ #else
+ {"KEY_TYPE_MISMATCH", ERR_LIB_X509, 115},
+ #endif
+ #ifdef X509_R_KEY_VALUES_MISMATCH
+ {"KEY_VALUES_MISMATCH", ERR_LIB_X509, X509_R_KEY_VALUES_MISMATCH},
+ #else
+ {"KEY_VALUES_MISMATCH", ERR_LIB_X509, 116},
+ #endif
+ #ifdef X509_R_LOADING_CERT_DIR
+ {"LOADING_CERT_DIR", ERR_LIB_X509, X509_R_LOADING_CERT_DIR},
+ #else
+ {"LOADING_CERT_DIR", ERR_LIB_X509, 103},
+ #endif
+ #ifdef X509_R_LOADING_DEFAULTS
+ {"LOADING_DEFAULTS", ERR_LIB_X509, X509_R_LOADING_DEFAULTS},
+ #else
+ {"LOADING_DEFAULTS", ERR_LIB_X509, 104},
+ #endif
+ #ifdef X509_R_METHOD_NOT_SUPPORTED
+ {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, X509_R_METHOD_NOT_SUPPORTED},
+ #else
+ {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, 124},
+ #endif
+ #ifdef X509_R_NO_CERT_SET_FOR_US_TO_VERIFY
+ {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY},
+ #else
+ {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, 105},
+ #endif
+ #ifdef X509_R_PUBLIC_KEY_DECODE_ERROR
+ {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_DECODE_ERROR},
+ #else
+ {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, 125},
+ #endif
+ #ifdef X509_R_PUBLIC_KEY_ENCODE_ERROR
+ {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_ENCODE_ERROR},
+ #else
+ {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, 126},
+ #endif
+ #ifdef X509_R_SHOULD_RETRY
+ {"SHOULD_RETRY", ERR_LIB_X509, X509_R_SHOULD_RETRY},
+ #else
+ {"SHOULD_RETRY", ERR_LIB_X509, 106},
+ #endif
+ #ifdef X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN
+ {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN},
+ #else
+ {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, 107},
+ #endif
+ #ifdef X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY
+ {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY},
+ #else
+ {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, 108},
+ #endif
+ #ifdef X509_R_UNKNOWN_KEY_TYPE
+ {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, X509_R_UNKNOWN_KEY_TYPE},
+ #else
+ {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, 117},
+ #endif
+ #ifdef X509_R_UNKNOWN_NID
+ {"UNKNOWN_NID", ERR_LIB_X509, X509_R_UNKNOWN_NID},
+ #else
+ {"UNKNOWN_NID", ERR_LIB_X509, 109},
+ #endif
+ #ifdef X509_R_UNKNOWN_PURPOSE_ID
+ {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID},
+ #else
+ {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, 121},
+ #endif
+ #ifdef X509_R_UNKNOWN_TRUST_ID
+ {"UNKNOWN_TRUST_ID", ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID},
+ #else
+ {"UNKNOWN_TRUST_ID", ERR_LIB_X509, 120},
+ #endif
+ #ifdef X509_R_UNSUPPORTED_ALGORITHM
+ {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, X509_R_UNSUPPORTED_ALGORITHM},
+ #else
+ {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, 111},
+ #endif
+ #ifdef X509_R_WRONG_LOOKUP_TYPE
+ {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE},
+ #else
+ {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, 112},
+ #endif
+ #ifdef X509_R_WRONG_TYPE
+ {"WRONG_TYPE", ERR_LIB_X509, X509_R_WRONG_TYPE},
+ #else
+ {"WRONG_TYPE", ERR_LIB_X509, 122},
+ #endif
+ { NULL }
+};
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 3f20518d9f..a248753766 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -58,6 +58,7 @@ typedef struct { char c; long x; } st_long;
typedef struct { char c; float x; } st_float;
typedef struct { char c; double x; } st_double;
typedef struct { char c; void *x; } st_void_p;
+typedef struct { char c; size_t x; } st_size_t;
#define SHORT_ALIGN (sizeof(st_short) - sizeof(short))
#define INT_ALIGN (sizeof(st_int) - sizeof(int))
@@ -65,6 +66,7 @@ typedef struct { char c; void *x; } st_void_p;
#define FLOAT_ALIGN (sizeof(st_float) - sizeof(float))
#define DOUBLE_ALIGN (sizeof(st_double) - sizeof(double))
#define VOID_P_ALIGN (sizeof(st_void_p) - sizeof(void *))
+#define SIZE_T_ALIGN (sizeof(st_size_t) - sizeof(size_t))
/* We can't support q and Q in native mode unless the compiler does;
in std mode, they're 8 bytes on all platforms. */
@@ -213,6 +215,52 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p)
#endif
+/* Same, but handling Py_ssize_t */
+
+static int
+get_ssize_t(PyObject *v, Py_ssize_t *p)
+{
+ Py_ssize_t x;
+
+ v = get_pylong(v);
+ if (v == NULL)
+ return -1;
+ assert(PyLong_Check(v));
+ x = PyLong_AsSsize_t(v);
+ Py_DECREF(v);
+ if (x == (Py_ssize_t)-1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches(PyExc_OverflowError))
+ PyErr_SetString(StructError,
+ "argument out of range");
+ return -1;
+ }
+ *p = x;
+ return 0;
+}
+
+/* Same, but handling size_t */
+
+static int
+get_size_t(PyObject *v, size_t *p)
+{
+ size_t x;
+
+ v = get_pylong(v);
+ if (v == NULL)
+ return -1;
+ assert(PyLong_Check(v));
+ x = PyLong_AsSize_t(v);
+ Py_DECREF(v);
+ if (x == (size_t)-1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches(PyExc_OverflowError))
+ PyErr_SetString(StructError,
+ "argument out of range");
+ return -1;
+ }
+ *p = x;
+ return 0;
+}
+
#define RANGE_ERROR(x, f, flag, mask) return _range_error(f, flag)
@@ -369,6 +417,23 @@ nu_ulong(const char *p, const formatdef *f)
return PyLong_FromUnsignedLong(x);
}
+static PyObject *
+nu_ssize_t(const char *p, const formatdef *f)
+{
+ Py_ssize_t x;
+ memcpy((char *)&x, p, sizeof x);
+ return PyLong_FromSsize_t(x);
+}
+
+static PyObject *
+nu_size_t(const char *p, const formatdef *f)
+{
+ size_t x;
+ memcpy((char *)&x, p, sizeof x);
+ return PyLong_FromSize_t(x);
+}
+
+
/* Native mode doesn't support q or Q unless the platform C supports
long long (or, on Windows, __int64). */
@@ -558,6 +623,26 @@ np_ulong(char *p, PyObject *v, const formatdef *f)
return 0;
}
+static int
+np_ssize_t(char *p, PyObject *v, const formatdef *f)
+{
+ Py_ssize_t x;
+ if (get_ssize_t(v, &x) < 0)
+ return -1;
+ memcpy(p, (char *)&x, sizeof x);
+ return 0;
+}
+
+static int
+np_size_t(char *p, PyObject *v, const formatdef *f)
+{
+ size_t x;
+ if (get_size_t(v, &x) < 0)
+ return -1;
+ memcpy(p, (char *)&x, sizeof x);
+ return 0;
+}
+
#ifdef HAVE_LONG_LONG
static int
@@ -651,6 +736,8 @@ static formatdef native_table[] = {
{'I', sizeof(int), INT_ALIGN, nu_uint, np_uint},
{'l', sizeof(long), LONG_ALIGN, nu_long, np_long},
{'L', sizeof(long), LONG_ALIGN, nu_ulong, np_ulong},
+ {'n', sizeof(size_t), SIZE_T_ALIGN, nu_ssize_t, np_ssize_t},
+ {'N', sizeof(size_t), SIZE_T_ALIGN, nu_size_t, np_size_t},
#ifdef HAVE_LONG_LONG
{'q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_longlong, np_longlong},
{'Q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong},
@@ -1544,7 +1631,7 @@ s_pack_internal(PyStructObject *soself, PyObject *args, int offset, char* buf)
if (e->pack(res, v, e) < 0) {
if (PyLong_Check(v) && PyErr_ExceptionMatches(PyExc_OverflowError))
PyErr_SetString(StructError,
- "long too large to convert to int");
+ "int too large to convert");
return -1;
}
}
@@ -1974,7 +2061,8 @@ these can be preceded by a decimal repeat count:\n\
l:long; L:unsigned long; f:float; d:double.\n\
Special cases (preceding decimal count indicates length):\n\
s:string (array of char); p: pascal string (with count byte).\n\
-Special case (only available in native format):\n\
+Special cases (only available in native format):\n\
+ n:ssize_t; N:size_t;\n\
P:an integer type that is wide enough to hold a pointer.\n\
Special case (not in native mode unless 'long long' in platform C):\n\
q:long long; Q:unsigned long long\n\
diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c
new file mode 100644
index 0000000000..316666e68e
--- /dev/null
+++ b/Modules/_testbuffer.c
@@ -0,0 +1,2875 @@
+/* C Extension module to test all aspects of PEP-3118.
+ Written by Stefan Krah. */
+
+
+#define PY_SSIZE_T_CLEAN
+
+#include "Python.h"
+
+
+/* struct module */
+PyObject *structmodule = NULL;
+PyObject *Struct = NULL;
+PyObject *calcsize = NULL;
+
+/* cache simple format string */
+static const char *simple_fmt = "B";
+PyObject *simple_format = NULL;
+#define SIMPLE_FORMAT(fmt) (fmt == NULL || strcmp(fmt, "B") == 0)
+#define FIX_FORMAT(fmt) (fmt == NULL ? "B" : fmt)
+
+
+/**************************************************************************/
+/* NDArray Object */
+/**************************************************************************/
+
+static PyTypeObject NDArray_Type;
+#define NDArray_Check(v) (Py_TYPE(v) == &NDArray_Type)
+
+#define CHECK_LIST_OR_TUPLE(v) \
+ if (!PyList_Check(v) && !PyTuple_Check(v)) { \
+ PyErr_SetString(PyExc_TypeError, \
+ #v " must be a list or a tuple"); \
+ return NULL; \
+ } \
+
+#define PyMem_XFree(v) \
+ do { if (v) PyMem_Free(v); } while (0)
+
+/* Maximum number of dimensions. */
+#define ND_MAX_NDIM (2 * PyBUF_MAX_NDIM)
+
+/* Check for the presence of suboffsets in the first dimension. */
+#define HAVE_PTR(suboffsets) (suboffsets && suboffsets[0] >= 0)
+/* Adjust ptr if suboffsets are present. */
+#define ADJUST_PTR(ptr, suboffsets) \
+ (HAVE_PTR(suboffsets) ? *((char**)ptr) + suboffsets[0] : ptr)
+
+/* Default: NumPy style (strides), read-only, no var-export, C-style layout */
+#define ND_DEFAULT 0x000
+/* User configurable flags for the ndarray */
+#define ND_VAREXPORT 0x001 /* change layout while buffers are exported */
+/* User configurable flags for each base buffer */
+#define ND_WRITABLE 0x002 /* mark base buffer as writable */
+#define ND_FORTRAN 0x004 /* Fortran contiguous layout */
+#define ND_SCALAR 0x008 /* scalar: ndim = 0 */
+#define ND_PIL 0x010 /* convert to PIL-style array (suboffsets) */
+#define ND_REDIRECT 0x020 /* redirect buffer requests */
+#define ND_GETBUF_FAIL 0x040 /* trigger getbuffer failure */
+#define ND_GETBUF_UNDEFINED 0x080 /* undefined view.obj */
+/* Internal flags for the base buffer */
+#define ND_C 0x100 /* C contiguous layout (default) */
+#define ND_OWN_ARRAYS 0x200 /* consumer owns arrays */
+
+/* ndarray properties */
+#define ND_IS_CONSUMER(nd) \
+ (((NDArrayObject *)nd)->head == &((NDArrayObject *)nd)->staticbuf)
+
+/* ndbuf->flags properties */
+#define ND_C_CONTIGUOUS(flags) (!!(flags&(ND_SCALAR|ND_C)))
+#define ND_FORTRAN_CONTIGUOUS(flags) (!!(flags&(ND_SCALAR|ND_FORTRAN)))
+#define ND_ANY_CONTIGUOUS(flags) (!!(flags&(ND_SCALAR|ND_C|ND_FORTRAN)))
+
+/* getbuffer() requests */
+#define REQ_INDIRECT(flags) ((flags&PyBUF_INDIRECT) == PyBUF_INDIRECT)
+#define REQ_C_CONTIGUOUS(flags) ((flags&PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS)
+#define REQ_F_CONTIGUOUS(flags) ((flags&PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS)
+#define REQ_ANY_CONTIGUOUS(flags) ((flags&PyBUF_ANY_CONTIGUOUS) == PyBUF_ANY_CONTIGUOUS)
+#define REQ_STRIDES(flags) ((flags&PyBUF_STRIDES) == PyBUF_STRIDES)
+#define REQ_SHAPE(flags) ((flags&PyBUF_ND) == PyBUF_ND)
+#define REQ_WRITABLE(flags) (flags&PyBUF_WRITABLE)
+#define REQ_FORMAT(flags) (flags&PyBUF_FORMAT)
+
+
+/* Single node of a list of base buffers. The list is needed to implement
+ changes in memory layout while exported buffers are active. */
+static PyTypeObject NDArray_Type;
+
+struct ndbuf;
+typedef struct ndbuf {
+ struct ndbuf *next;
+ struct ndbuf *prev;
+ Py_ssize_t len; /* length of data */
+ Py_ssize_t offset; /* start of the array relative to data */
+ char *data; /* raw data */
+ int flags; /* capabilities of the base buffer */
+ Py_ssize_t exports; /* number of exports */
+ Py_buffer base; /* base buffer */
+} ndbuf_t;
+
+typedef struct {
+ PyObject_HEAD
+ int flags; /* ndarray flags */
+ ndbuf_t staticbuf; /* static buffer for re-exporting mode */
+ ndbuf_t *head; /* currently active base buffer */
+} NDArrayObject;
+
+
+static ndbuf_t *
+ndbuf_new(Py_ssize_t nitems, Py_ssize_t itemsize, Py_ssize_t offset, int flags)
+{
+ ndbuf_t *ndbuf;
+ Py_buffer *base;
+ Py_ssize_t len;
+
+ len = nitems * itemsize;
+ if (offset % itemsize) {
+ PyErr_SetString(PyExc_ValueError,
+ "offset must be a multiple of itemsize");
+ return NULL;
+ }
+ if (offset < 0 || offset+itemsize > len) {
+ PyErr_SetString(PyExc_ValueError, "offset out of bounds");
+ return NULL;
+ }
+
+ ndbuf = PyMem_Malloc(sizeof *ndbuf);
+ if (ndbuf == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ ndbuf->next = NULL;
+ ndbuf->prev = NULL;
+ ndbuf->len = len;
+ ndbuf->offset= offset;
+
+ ndbuf->data = PyMem_Malloc(len);
+ if (ndbuf->data == NULL) {
+ PyErr_NoMemory();
+ PyMem_Free(ndbuf);
+ return NULL;
+ }
+
+ ndbuf->flags = flags;
+ ndbuf->exports = 0;
+
+ base = &ndbuf->base;
+ base->obj = NULL;
+ base->buf = ndbuf->data;
+ base->len = len;
+ base->itemsize = 1;
+ base->readonly = 0;
+ base->format = NULL;
+ base->ndim = 1;
+ base->shape = NULL;
+ base->strides = NULL;
+ base->suboffsets = NULL;
+ base->internal = ndbuf;
+
+ return ndbuf;
+}
+
+static void
+ndbuf_free(ndbuf_t *ndbuf)
+{
+ Py_buffer *base = &ndbuf->base;
+
+ PyMem_XFree(ndbuf->data);
+ PyMem_XFree(base->format);
+ PyMem_XFree(base->shape);
+ PyMem_XFree(base->strides);
+ PyMem_XFree(base->suboffsets);
+
+ PyMem_Free(ndbuf);
+}
+
+static void
+ndbuf_push(NDArrayObject *nd, ndbuf_t *elt)
+{
+ elt->next = nd->head;
+ if (nd->head) nd->head->prev = elt;
+ nd->head = elt;
+ elt->prev = NULL;
+}
+
+static void
+ndbuf_delete(NDArrayObject *nd, ndbuf_t *elt)
+{
+ if (elt->prev)
+ elt->prev->next = elt->next;
+ else
+ nd->head = elt->next;
+
+ if (elt->next)
+ elt->next->prev = elt->prev;
+
+ ndbuf_free(elt);
+}
+
+static void
+ndbuf_pop(NDArrayObject *nd)
+{
+ ndbuf_delete(nd, nd->head);
+}
+
+
+static PyObject *
+ndarray_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ NDArrayObject *nd;
+
+ nd = PyObject_New(NDArrayObject, &NDArray_Type);
+ if (nd == NULL)
+ return NULL;
+
+ nd->flags = 0;
+ nd->head = NULL;
+ return (PyObject *)nd;
+}
+
+static void
+ndarray_dealloc(NDArrayObject *self)
+{
+ if (self->head) {
+ if (ND_IS_CONSUMER(self)) {
+ Py_buffer *base = &self->head->base;
+ if (self->head->flags & ND_OWN_ARRAYS) {
+ PyMem_XFree(base->shape);
+ PyMem_XFree(base->strides);
+ PyMem_XFree(base->suboffsets);
+ }
+ PyBuffer_Release(base);
+ }
+ else {
+ while (self->head)
+ ndbuf_pop(self);
+ }
+ }
+ PyObject_Del(self);
+}
+
+static int
+ndarray_init_staticbuf(PyObject *exporter, NDArrayObject *nd, int flags)
+{
+ Py_buffer *base = &nd->staticbuf.base;
+
+ if (PyObject_GetBuffer(exporter, base, flags) < 0)
+ return -1;
+
+ nd->head = &nd->staticbuf;
+
+ nd->head->next = NULL;
+ nd->head->prev = NULL;
+ nd->head->len = -1;
+ nd->head->offset = -1;
+ nd->head->data = NULL;
+
+ nd->head->flags = base->readonly ? 0 : ND_WRITABLE;
+ nd->head->exports = 0;
+
+ return 0;
+}
+
+static void
+init_flags(ndbuf_t *ndbuf)
+{
+ if (ndbuf->base.ndim == 0)
+ ndbuf->flags |= ND_SCALAR;
+ if (ndbuf->base.suboffsets)
+ ndbuf->flags |= ND_PIL;
+ if (PyBuffer_IsContiguous(&ndbuf->base, 'C'))
+ ndbuf->flags |= ND_C;
+ if (PyBuffer_IsContiguous(&ndbuf->base, 'F'))
+ ndbuf->flags |= ND_FORTRAN;
+}
+
+
+/****************************************************************************/
+/* Buffer/List conversions */
+/****************************************************************************/
+
+static Py_ssize_t *strides_from_shape(const ndbuf_t *, int flags);
+
+/* Get number of members in a struct: see issue #12740 */
+typedef struct {
+ PyObject_HEAD
+ Py_ssize_t s_size;
+ Py_ssize_t s_len;
+} PyPartialStructObject;
+
+static Py_ssize_t
+get_nmemb(PyObject *s)
+{
+ return ((PyPartialStructObject *)s)->s_len;
+}
+
+/* Pack all items into the buffer of 'obj'. The 'format' parameter must be
+ in struct module syntax. For standard C types, a single item is an integer.
+ For compound types, a single item is a tuple of integers. */
+static int
+pack_from_list(PyObject *obj, PyObject *items, PyObject *format,
+ Py_ssize_t itemsize)
+{
+ PyObject *structobj, *pack_into;
+ PyObject *args, *offset;
+ PyObject *item, *tmp;
+ Py_ssize_t nitems; /* number of items */
+ Py_ssize_t nmemb; /* number of members in a single item */
+ Py_ssize_t i, j;
+ int ret = 0;
+
+ assert(PyObject_CheckBuffer(obj));
+ assert(PyList_Check(items) || PyTuple_Check(items));
+
+ structobj = PyObject_CallFunctionObjArgs(Struct, format, NULL);
+ if (structobj == NULL)
+ return -1;
+
+ nitems = PySequence_Fast_GET_SIZE(items);
+ nmemb = get_nmemb(structobj);
+ assert(nmemb >= 1);
+
+ pack_into = PyObject_GetAttrString(structobj, "pack_into");
+ if (pack_into == NULL) {
+ Py_DECREF(structobj);
+ return -1;
+ }
+
+ /* nmemb >= 1 */
+ args = PyTuple_New(2 + nmemb);
+ if (args == NULL) {
+ Py_DECREF(pack_into);
+ Py_DECREF(structobj);
+ return -1;
+ }
+
+ offset = NULL;
+ for (i = 0; i < nitems; i++) {
+ /* Loop invariant: args[j] are borrowed references or NULL. */
+ PyTuple_SET_ITEM(args, 0, obj);
+ for (j = 1; j < 2+nmemb; j++)
+ PyTuple_SET_ITEM(args, j, NULL);
+
+ Py_XDECREF(offset);
+ offset = PyLong_FromSsize_t(i*itemsize);
+ if (offset == NULL) {
+ ret = -1;
+ break;
+ }
+ PyTuple_SET_ITEM(args, 1, offset);
+
+ item = PySequence_Fast_GET_ITEM(items, i);
+ if ((PyBytes_Check(item) || PyLong_Check(item) ||
+ PyFloat_Check(item)) && nmemb == 1) {
+ PyTuple_SET_ITEM(args, 2, item);
+ }
+ else if ((PyList_Check(item) || PyTuple_Check(item)) &&
+ PySequence_Length(item) == nmemb) {
+ for (j = 0; j < nmemb; j++) {
+ tmp = PySequence_Fast_GET_ITEM(item, j);
+ PyTuple_SET_ITEM(args, 2+j, tmp);
+ }
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError,
+ "mismatch between initializer element and format string");
+ ret = -1;
+ break;
+ }
+
+ tmp = PyObject_CallObject(pack_into, args);
+ if (tmp == NULL) {
+ ret = -1;
+ break;
+ }
+ Py_DECREF(tmp);
+ }
+
+ Py_INCREF(obj); /* args[0] */
+ /* args[1]: offset is either NULL or should be dealloc'd */
+ for (i = 2; i < 2+nmemb; i++) {
+ tmp = PyTuple_GET_ITEM(args, i);
+ Py_XINCREF(tmp);
+ }
+ Py_DECREF(args);
+
+ Py_DECREF(pack_into);
+ Py_DECREF(structobj);
+ return ret;
+
+}
+
+/* Pack single element */
+static int
+pack_single(char *ptr, PyObject *item, const char *fmt, Py_ssize_t itemsize)
+{
+ PyObject *structobj = NULL, *pack_into = NULL, *args = NULL;
+ PyObject *format = NULL, *mview = NULL, *zero = NULL;
+ Py_ssize_t i, nmemb;
+ int ret = -1;
+ PyObject *x;
+
+ if (fmt == NULL) fmt = "B";
+
+ format = PyUnicode_FromString(fmt);
+ if (format == NULL)
+ goto out;
+
+ structobj = PyObject_CallFunctionObjArgs(Struct, format, NULL);
+ if (structobj == NULL)
+ goto out;
+
+ nmemb = get_nmemb(structobj);
+ assert(nmemb >= 1);
+
+ mview = PyMemoryView_FromMemory(ptr, itemsize, PyBUF_WRITE);
+ if (mview == NULL)
+ goto out;
+
+ zero = PyLong_FromLong(0);
+ if (zero == NULL)
+ goto out;
+
+ pack_into = PyObject_GetAttrString(structobj, "pack_into");
+ if (pack_into == NULL)
+ goto out;
+
+ args = PyTuple_New(2+nmemb);
+ if (args == NULL)
+ goto out;
+
+ PyTuple_SET_ITEM(args, 0, mview);
+ PyTuple_SET_ITEM(args, 1, zero);
+
+ if ((PyBytes_Check(item) || PyLong_Check(item) ||
+ PyFloat_Check(item)) && nmemb == 1) {
+ PyTuple_SET_ITEM(args, 2, item);
+ }
+ else if ((PyList_Check(item) || PyTuple_Check(item)) &&
+ PySequence_Length(item) == nmemb) {
+ for (i = 0; i < nmemb; i++) {
+ x = PySequence_Fast_GET_ITEM(item, i);
+ PyTuple_SET_ITEM(args, 2+i, x);
+ }
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError,
+ "mismatch between initializer element and format string");
+ goto args_out;
+ }
+
+ x = PyObject_CallObject(pack_into, args);
+ if (x != NULL) {
+ Py_DECREF(x);
+ ret = 0;
+ }
+
+
+args_out:
+ for (i = 0; i < 2+nmemb; i++)
+ Py_XINCREF(PyTuple_GET_ITEM(args, i));
+ Py_XDECREF(args);
+out:
+ Py_XDECREF(pack_into);
+ Py_XDECREF(zero);
+ Py_XDECREF(mview);
+ Py_XDECREF(structobj);
+ Py_XDECREF(format);
+ return ret;
+}
+
+static void
+copy_rec(const Py_ssize_t *shape, Py_ssize_t ndim, Py_ssize_t itemsize,
+ char *dptr, const Py_ssize_t *dstrides, const Py_ssize_t *dsuboffsets,
+ char *sptr, const Py_ssize_t *sstrides, const Py_ssize_t *ssuboffsets,
+ char *mem)
+{
+ Py_ssize_t i;
+
+ assert(ndim >= 1);
+
+ if (ndim == 1) {
+ if (!HAVE_PTR(dsuboffsets) && !HAVE_PTR(ssuboffsets) &&
+ dstrides[0] == itemsize && sstrides[0] == itemsize) {
+ memmove(dptr, sptr, shape[0] * itemsize);
+ }
+ else {
+ char *p;
+ assert(mem != NULL);
+ for (i=0, p=mem; i<shape[0]; p+=itemsize, sptr+=sstrides[0], i++) {
+ char *xsptr = ADJUST_PTR(sptr, ssuboffsets);
+ memcpy(p, xsptr, itemsize);
+ }
+ for (i=0, p=mem; i<shape[0]; p+=itemsize, dptr+=dstrides[0], i++) {
+ char *xdptr = ADJUST_PTR(dptr, dsuboffsets);
+ memcpy(xdptr, p, itemsize);
+ }
+ }
+ return;
+ }
+
+ for (i = 0; i < shape[0]; dptr+=dstrides[0], sptr+=sstrides[0], i++) {
+ char *xdptr = ADJUST_PTR(dptr, dsuboffsets);
+ char *xsptr = ADJUST_PTR(sptr, ssuboffsets);
+
+ copy_rec(shape+1, ndim-1, itemsize,
+ xdptr, dstrides+1, dsuboffsets ? dsuboffsets+1 : NULL,
+ xsptr, sstrides+1, ssuboffsets ? ssuboffsets+1 : NULL,
+ mem);
+ }
+}
+
+static int
+cmp_structure(Py_buffer *dest, Py_buffer *src)
+{
+ Py_ssize_t i;
+
+ if (strcmp(FIX_FORMAT(dest->format), FIX_FORMAT(src->format)) != 0 ||
+ dest->itemsize != src->itemsize ||
+ dest->ndim != src->ndim)
+ return -1;
+
+ for (i = 0; i < dest->ndim; i++) {
+ if (dest->shape[i] != src->shape[i])
+ return -1;
+ if (dest->shape[i] == 0)
+ break;
+ }
+
+ return 0;
+}
+
+/* Copy src to dest. Both buffers must have the same format, itemsize,
+ ndim and shape. Copying is atomic, the function never fails with
+ a partial copy. */
+static int
+copy_buffer(Py_buffer *dest, Py_buffer *src)
+{
+ char *mem = NULL;
+
+ assert(dest->ndim > 0);
+
+ if (cmp_structure(dest, src) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "ndarray assignment: lvalue and rvalue have different structures");
+ return -1;
+ }
+
+ if ((dest->suboffsets && dest->suboffsets[dest->ndim-1] >= 0) ||
+ (src->suboffsets && src->suboffsets[src->ndim-1] >= 0) ||
+ dest->strides[dest->ndim-1] != dest->itemsize ||
+ src->strides[src->ndim-1] != src->itemsize) {
+ mem = PyMem_Malloc(dest->shape[dest->ndim-1] * dest->itemsize);
+ if (mem == NULL) {
+ PyErr_NoMemory();
+ return -1;
+ }
+ }
+
+ copy_rec(dest->shape, dest->ndim, dest->itemsize,
+ dest->buf, dest->strides, dest->suboffsets,
+ src->buf, src->strides, src->suboffsets,
+ mem);
+
+ PyMem_XFree(mem);
+ return 0;
+}
+
+
+/* Unpack single element */
+static PyObject *
+unpack_single(char *ptr, const char *fmt, Py_ssize_t itemsize)
+{
+ PyObject *x, *unpack_from, *mview;
+
+ if (fmt == NULL) {
+ fmt = "B";
+ itemsize = 1;
+ }
+
+ unpack_from = PyObject_GetAttrString(structmodule, "unpack_from");
+ if (unpack_from == NULL)
+ return NULL;
+
+ mview = PyMemoryView_FromMemory(ptr, itemsize, PyBUF_READ);
+ if (mview == NULL) {
+ Py_DECREF(unpack_from);
+ return NULL;
+ }
+
+ x = PyObject_CallFunction(unpack_from, "sO", fmt, mview);
+ Py_DECREF(unpack_from);
+ Py_DECREF(mview);
+ if (x == NULL)
+ return NULL;
+
+ if (PyTuple_GET_SIZE(x) == 1) {
+ PyObject *tmp = PyTuple_GET_ITEM(x, 0);
+ Py_INCREF(tmp);
+ Py_DECREF(x);
+ return tmp;
+ }
+
+ return x;
+}
+
+/* Unpack a multi-dimensional matrix into a nested list. Return a scalar
+ for ndim = 0. */
+static PyObject *
+unpack_rec(PyObject *unpack_from, char *ptr, PyObject *mview, char *item,
+ const Py_ssize_t *shape, const Py_ssize_t *strides,
+ const Py_ssize_t *suboffsets, Py_ssize_t ndim, Py_ssize_t itemsize)
+{
+ PyObject *lst, *x;
+ Py_ssize_t i;
+
+ assert(ndim >= 0);
+ assert(shape != NULL);
+ assert(strides != NULL);
+
+ if (ndim == 0) {
+ memcpy(item, ptr, itemsize);
+ x = PyObject_CallFunctionObjArgs(unpack_from, mview, NULL);
+ if (x == NULL)
+ return NULL;
+ if (PyTuple_GET_SIZE(x) == 1) {
+ PyObject *tmp = PyTuple_GET_ITEM(x, 0);
+ Py_INCREF(tmp);
+ Py_DECREF(x);
+ return tmp;
+ }
+ return x;
+ }
+
+ lst = PyList_New(shape[0]);
+ if (lst == NULL)
+ return NULL;
+
+ for (i = 0; i < shape[0]; ptr+=strides[0], i++) {
+ char *nextptr = ADJUST_PTR(ptr, suboffsets);
+
+ x = unpack_rec(unpack_from, nextptr, mview, item,
+ shape+1, strides+1, suboffsets ? suboffsets+1 : NULL,
+ ndim-1, itemsize);
+ if (x == NULL) {
+ Py_DECREF(lst);
+ return NULL;
+ }
+
+ PyList_SET_ITEM(lst, i, x);
+ }
+
+ return lst;
+}
+
+
+static PyObject *
+ndarray_as_list(NDArrayObject *nd)
+{
+ PyObject *structobj = NULL, *unpack_from = NULL;
+ PyObject *lst = NULL, *mview = NULL;
+ Py_buffer *base = &nd->head->base;
+ Py_ssize_t *shape = base->shape;
+ Py_ssize_t *strides = base->strides;
+ Py_ssize_t simple_shape[1];
+ Py_ssize_t simple_strides[1];
+ char *item = NULL;
+ PyObject *format;
+ char *fmt = base->format;
+
+ base = &nd->head->base;
+
+ if (fmt == NULL) {
+ PyErr_SetString(PyExc_ValueError,
+ "ndarray: tolist() does not support format=NULL, use "
+ "tobytes()");
+ return NULL;
+ }
+ if (shape == NULL) {
+ assert(ND_C_CONTIGUOUS(nd->head->flags));
+ assert(base->strides == NULL);
+ assert(base->ndim <= 1);
+ shape = simple_shape;
+ shape[0] = base->len;
+ strides = simple_strides;
+ strides[0] = base->itemsize;
+ }
+ else if (strides == NULL) {
+ assert(ND_C_CONTIGUOUS(nd->head->flags));
+ strides = strides_from_shape(nd->head, 0);
+ if (strides == NULL)
+ return NULL;
+ }
+
+ format = PyUnicode_FromString(fmt);
+ if (format == NULL)
+ goto out;
+
+ structobj = PyObject_CallFunctionObjArgs(Struct, format, NULL);
+ Py_DECREF(format);
+ if (structobj == NULL)
+ goto out;
+
+ unpack_from = PyObject_GetAttrString(structobj, "unpack_from");
+ if (unpack_from == NULL)
+ goto out;
+
+ item = PyMem_Malloc(base->itemsize);
+ if (item == NULL) {
+ PyErr_NoMemory();
+ goto out;
+ }
+
+ mview = PyMemoryView_FromMemory(item, base->itemsize, PyBUF_WRITE);
+ if (mview == NULL)
+ goto out;
+
+ lst = unpack_rec(unpack_from, base->buf, mview, item,
+ shape, strides, base->suboffsets,
+ base->ndim, base->itemsize);
+
+out:
+ Py_XDECREF(mview);
+ PyMem_XFree(item);
+ Py_XDECREF(unpack_from);
+ Py_XDECREF(structobj);
+ if (strides != base->strides && strides != simple_strides)
+ PyMem_XFree(strides);
+
+ return lst;
+}
+
+
+/****************************************************************************/
+/* Initialize ndbuf */
+/****************************************************************************/
+
+/*
+ State of a new ndbuf during initialization. 'OK' means that initialization
+ is complete. 'PTR' means that a pointer has been initialized, but the
+ state of the memory is still undefined and ndbuf->offset is disregarded.
+
+ +-----------------+-----------+-------------+----------------+
+ | | ndbuf_new | init_simple | init_structure |
+ +-----------------+-----------+-------------+----------------+
+ | next | OK (NULL) | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | prev | OK (NULL) | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | len | OK | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | offset | OK | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | data | PTR | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | flags | user | user | OK |
+ +-----------------+-----------+-------------+----------------+
+ | exports | OK (0) | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.obj | OK (NULL) | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.buf | PTR | PTR | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.len | len(data) | len(data) | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.itemsize | 1 | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.readonly | 0 | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.format | NULL | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.ndim | 1 | 1 | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.shape | NULL | NULL | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.strides | NULL | NULL | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.suboffsets | NULL | NULL | OK |
+ +-----------------+-----------+-------------+----------------+
+ | base.internal | OK | OK | OK |
+ +-----------------+-----------+-------------+----------------+
+
+*/
+
+static Py_ssize_t
+get_itemsize(PyObject *format)
+{
+ PyObject *tmp;
+ Py_ssize_t itemsize;
+
+ tmp = PyObject_CallFunctionObjArgs(calcsize, format, NULL);
+ if (tmp == NULL)
+ return -1;
+ itemsize = PyLong_AsSsize_t(tmp);
+ Py_DECREF(tmp);
+
+ return itemsize;
+}
+
+static char *
+get_format(PyObject *format)
+{
+ PyObject *tmp;
+ char *fmt;
+
+ tmp = PyUnicode_AsASCIIString(format);
+ if (tmp == NULL)
+ return NULL;
+ fmt = PyMem_Malloc(PyBytes_GET_SIZE(tmp)+1);
+ if (fmt == NULL) {
+ PyErr_NoMemory();
+ Py_DECREF(tmp);
+ return NULL;
+ }
+ strcpy(fmt, PyBytes_AS_STRING(tmp));
+ Py_DECREF(tmp);
+
+ return fmt;
+}
+
+static int
+init_simple(ndbuf_t *ndbuf, PyObject *items, PyObject *format,
+ Py_ssize_t itemsize)
+{
+ PyObject *mview;
+ Py_buffer *base = &ndbuf->base;
+ int ret;
+
+ mview = PyMemoryView_FromBuffer(base);
+ if (mview == NULL)
+ return -1;
+
+ ret = pack_from_list(mview, items, format, itemsize);
+ Py_DECREF(mview);
+ if (ret < 0)
+ return -1;
+
+ base->readonly = !(ndbuf->flags & ND_WRITABLE);
+ base->itemsize = itemsize;
+ base->format = get_format(format);
+ if (base->format == NULL)
+ return -1;
+
+ return 0;
+}
+
+static Py_ssize_t *
+seq_as_ssize_array(PyObject *seq, Py_ssize_t len, int is_shape)
+{
+ Py_ssize_t *dest;
+ Py_ssize_t x, i;
+
+ dest = PyMem_Malloc(len * (sizeof *dest));
+ if (dest == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ for (i = 0; i < len; i++) {
+ PyObject *tmp = PySequence_Fast_GET_ITEM(seq, i);
+ if (!PyLong_Check(tmp)) {
+ PyErr_Format(PyExc_ValueError,
+ "elements of %s must be integers",
+ is_shape ? "shape" : "strides");
+ PyMem_Free(dest);
+ return NULL;
+ }
+ x = PyLong_AsSsize_t(tmp);
+ if (PyErr_Occurred()) {
+ PyMem_Free(dest);
+ return NULL;
+ }
+ if (is_shape && x < 0) {
+ PyErr_Format(PyExc_ValueError,
+ "elements of shape must be integers >= 0");
+ PyMem_Free(dest);
+ return NULL;
+ }
+ dest[i] = x;
+ }
+
+ return dest;
+}
+
+static Py_ssize_t *
+strides_from_shape(const ndbuf_t *ndbuf, int flags)
+{
+ const Py_buffer *base = &ndbuf->base;
+ Py_ssize_t *s, i;
+
+ s = PyMem_Malloc(base->ndim * (sizeof *s));
+ if (s == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ if (flags & ND_FORTRAN) {
+ s[0] = base->itemsize;
+ for (i = 1; i < base->ndim; i++)
+ s[i] = s[i-1] * base->shape[i-1];
+ }
+ else {
+ s[base->ndim-1] = base->itemsize;
+ for (i = base->ndim-2; i >= 0; i--)
+ s[i] = s[i+1] * base->shape[i+1];
+ }
+
+ return s;
+}
+
+/* Bounds check:
+
+ len := complete length of allocated memory
+ offset := start of the array
+
+ A single array element is indexed by:
+
+ i = indices[0] * strides[0] + indices[1] * strides[1] + ...
+
+ imin is reached when all indices[n] combined with positive strides are 0
+ and all indices combined with negative strides are shape[n]-1, which is
+ the maximum index for the nth dimension.
+
+ imax is reached when all indices[n] combined with negative strides are 0
+ and all indices combined with positive strides are shape[n]-1.
+*/
+static int
+verify_structure(Py_ssize_t len, Py_ssize_t itemsize, Py_ssize_t offset,
+ const Py_ssize_t *shape, const Py_ssize_t *strides,
+ Py_ssize_t ndim)
+{
+ Py_ssize_t imin, imax;
+ Py_ssize_t n;
+
+ assert(ndim >= 0);
+
+ if (ndim == 0 && (offset < 0 || offset+itemsize > len))
+ goto invalid_combination;
+
+ for (n = 0; n < ndim; n++)
+ if (strides[n] % itemsize) {
+ PyErr_SetString(PyExc_ValueError,
+ "strides must be a multiple of itemsize");
+ return -1;
+ }
+
+ for (n = 0; n < ndim; n++)
+ if (shape[n] == 0)
+ return 0;
+
+ imin = imax = 0;
+ for (n = 0; n < ndim; n++)
+ if (strides[n] <= 0)
+ imin += (shape[n]-1) * strides[n];
+ else
+ imax += (shape[n]-1) * strides[n];
+
+ if (imin + offset < 0 || imax + offset + itemsize > len)
+ goto invalid_combination;
+
+ return 0;
+
+
+invalid_combination:
+ PyErr_SetString(PyExc_ValueError,
+ "invalid combination of buffer, shape and strides");
+ return -1;
+}
+
+/*
+ Convert a NumPy-style array to an array using suboffsets to stride in
+ the first dimension. Requirements: ndim > 0.
+
+ Contiguous example
+ ==================
+
+ Input:
+ ------
+ shape = {2, 2, 3};
+ strides = {6, 3, 1};
+ suboffsets = NULL;
+ data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+ buf = &data[0]
+
+ Output:
+ -------
+ shape = {2, 2, 3};
+ strides = {sizeof(char *), 3, 1};
+ suboffsets = {0, -1, -1};
+ data = {p1, p2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+ | | ^ ^
+ `---'---' |
+ | |
+ `---------------------'
+ buf = &data[0]
+
+ So, in the example the input resembles the three-dimensional array
+ char v[2][2][3], while the output resembles an array of two pointers
+ to two-dimensional arrays: char (*v[2])[2][3].
+
+
+ Non-contiguous example:
+ =======================
+
+ Input (with offset and negative strides):
+ -----------------------------------------
+ shape = {2, 2, 3};
+ strides = {-6, 3, -1};
+ offset = 8
+ suboffsets = NULL;
+ data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
+ Output:
+ -------
+ shape = {2, 2, 3};
+ strides = {-sizeof(char *), 3, -1};
+ suboffsets = {2, -1, -1};
+ newdata = {p1, p2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+ | | ^ ^ ^ ^
+ `---'---' | | `- p2+suboffsets[0]
+ | `-----------|--- p1+suboffsets[0]
+ `---------------------'
+ buf = &newdata[1] # striding backwards over the pointers.
+
+ suboffsets[0] is the same as the offset that one would specify if
+ the two {2, 3} subarrays were created directly, hence the name.
+*/
+static int
+init_suboffsets(ndbuf_t *ndbuf)
+{
+ Py_buffer *base = &ndbuf->base;
+ Py_ssize_t start, step;
+ Py_ssize_t imin, suboffset0;
+ Py_ssize_t addsize;
+ Py_ssize_t n;
+ char *data;
+
+ assert(base->ndim > 0);
+ assert(base->suboffsets == NULL);
+
+ /* Allocate new data with additional space for shape[0] pointers. */
+ addsize = base->shape[0] * (sizeof (char *));
+
+ /* Align array start to a multiple of 8. */
+ addsize = 8 * ((addsize + 7) / 8);
+
+ data = PyMem_Malloc(ndbuf->len + addsize);
+ if (data == NULL) {
+ PyErr_NoMemory();
+ return -1;
+ }
+
+ memcpy(data + addsize, ndbuf->data, ndbuf->len);
+
+ PyMem_Free(ndbuf->data);
+ ndbuf->data = data;
+ ndbuf->len += addsize;
+ base->buf = ndbuf->data;
+
+ /* imin: minimum index of the input array relative to ndbuf->offset.
+ suboffset0: offset for each sub-array of the output. This is the
+ same as calculating -imin' for a sub-array of ndim-1. */
+ imin = suboffset0 = 0;
+ for (n = 0; n < base->ndim; n++) {
+ if (base->shape[n] == 0)
+ break;
+ if (base->strides[n] <= 0) {
+ Py_ssize_t x = (base->shape[n]-1) * base->strides[n];
+ imin += x;
+ suboffset0 += (n >= 1) ? -x : 0;
+ }
+ }
+
+ /* Initialize the array of pointers to the sub-arrays. */
+ start = addsize + ndbuf->offset + imin;
+ step = base->strides[0] < 0 ? -base->strides[0] : base->strides[0];
+
+ for (n = 0; n < base->shape[0]; n++)
+ ((char **)base->buf)[n] = (char *)base->buf + start + n*step;
+
+ /* Initialize suboffsets. */
+ base->suboffsets = PyMem_Malloc(base->ndim * (sizeof *base->suboffsets));
+ if (base->suboffsets == NULL) {
+ PyErr_NoMemory();
+ return -1;
+ }
+ base->suboffsets[0] = suboffset0;
+ for (n = 1; n < base->ndim; n++)
+ base->suboffsets[n] = -1;
+
+ /* Adjust strides for the first (zeroth) dimension. */
+ if (base->strides[0] >= 0) {
+ base->strides[0] = sizeof(char *);
+ }
+ else {
+ /* Striding backwards. */
+ base->strides[0] = -(Py_ssize_t)sizeof(char *);
+ if (base->shape[0] > 0)
+ base->buf = (char *)base->buf + (base->shape[0]-1) * sizeof(char *);
+ }
+
+ ndbuf->flags &= ~(ND_C|ND_FORTRAN);
+ ndbuf->offset = 0;
+ return 0;
+}
+
+static void
+init_len(Py_buffer *base)
+{
+ Py_ssize_t i;
+
+ base->len = 1;
+ for (i = 0; i < base->ndim; i++)
+ base->len *= base->shape[i];
+ base->len *= base->itemsize;
+}
+
+static int
+init_structure(ndbuf_t *ndbuf, PyObject *shape, PyObject *strides,
+ Py_ssize_t ndim)
+{
+ Py_buffer *base = &ndbuf->base;
+
+ base->ndim = (int)ndim;
+ if (ndim == 0) {
+ if (ndbuf->flags & ND_PIL) {
+ PyErr_SetString(PyExc_TypeError,
+ "ndim = 0 cannot be used in conjunction with ND_PIL");
+ return -1;
+ }
+ ndbuf->flags |= (ND_SCALAR|ND_C|ND_FORTRAN);
+ return 0;
+ }
+
+ /* shape */
+ base->shape = seq_as_ssize_array(shape, ndim, 1);
+ if (base->shape == NULL)
+ return -1;
+
+ /* strides */
+ if (strides) {
+ base->strides = seq_as_ssize_array(strides, ndim, 0);
+ }
+ else {
+ base->strides = strides_from_shape(ndbuf, ndbuf->flags);
+ }
+ if (base->strides == NULL)
+ return -1;
+ if (verify_structure(base->len, base->itemsize, ndbuf->offset,
+ base->shape, base->strides, ndim) < 0)
+ return -1;
+
+ /* buf */
+ base->buf = ndbuf->data + ndbuf->offset;
+
+ /* len */
+ init_len(base);
+
+ /* ndbuf->flags */
+ if (PyBuffer_IsContiguous(base, 'C'))
+ ndbuf->flags |= ND_C;
+ if (PyBuffer_IsContiguous(base, 'F'))
+ ndbuf->flags |= ND_FORTRAN;
+
+
+ /* convert numpy array to suboffset representation */
+ if (ndbuf->flags & ND_PIL) {
+ /* modifies base->buf, base->strides and base->suboffsets **/
+ return init_suboffsets(ndbuf);
+ }
+
+ return 0;
+}
+
+static ndbuf_t *
+init_ndbuf(PyObject *items, PyObject *shape, PyObject *strides,
+ Py_ssize_t offset, PyObject *format, int flags)
+{
+ ndbuf_t *ndbuf;
+ Py_ssize_t ndim;
+ Py_ssize_t nitems;
+ Py_ssize_t itemsize;
+
+ /* ndim = len(shape) */
+ CHECK_LIST_OR_TUPLE(shape)
+ ndim = PySequence_Fast_GET_SIZE(shape);
+ if (ndim > ND_MAX_NDIM) {
+ PyErr_Format(PyExc_ValueError,
+ "ndim must not exceed %d", ND_MAX_NDIM);
+ return NULL;
+ }
+
+ /* len(strides) = len(shape) */
+ if (strides) {
+ CHECK_LIST_OR_TUPLE(strides)
+ if (PySequence_Fast_GET_SIZE(strides) == 0)
+ strides = NULL;
+ else if (flags & ND_FORTRAN) {
+ PyErr_SetString(PyExc_TypeError,
+ "ND_FORTRAN cannot be used together with strides");
+ return NULL;
+ }
+ else if (PySequence_Fast_GET_SIZE(strides) != ndim) {
+ PyErr_SetString(PyExc_ValueError,
+ "len(shape) != len(strides)");
+ return NULL;
+ }
+ }
+
+ /* itemsize */
+ itemsize = get_itemsize(format);
+ if (itemsize <= 0) {
+ if (itemsize == 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "itemsize must not be zero");
+ }
+ return NULL;
+ }
+
+ /* convert scalar to list */
+ if (ndim == 0) {
+ items = Py_BuildValue("(O)", items);
+ if (items == NULL)
+ return NULL;
+ }
+ else {
+ CHECK_LIST_OR_TUPLE(items)
+ Py_INCREF(items);
+ }
+
+ /* number of items */
+ nitems = PySequence_Fast_GET_SIZE(items);
+ if (nitems == 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "initializer list or tuple must not be empty");
+ Py_DECREF(items);
+ return NULL;
+ }
+
+ ndbuf = ndbuf_new(nitems, itemsize, offset, flags);
+ if (ndbuf == NULL) {
+ Py_DECREF(items);
+ return NULL;
+ }
+
+
+ if (init_simple(ndbuf, items, format, itemsize) < 0)
+ goto error;
+ if (init_structure(ndbuf, shape, strides, ndim) < 0)
+ goto error;
+
+ Py_DECREF(items);
+ return ndbuf;
+
+error:
+ Py_DECREF(items);
+ ndbuf_free(ndbuf);
+ return NULL;
+}
+
+/* initialize and push a new base onto the linked list */
+static int
+ndarray_push_base(NDArrayObject *nd, PyObject *items,
+ PyObject *shape, PyObject *strides,
+ Py_ssize_t offset, PyObject *format, int flags)
+{
+ ndbuf_t *ndbuf;
+
+ ndbuf = init_ndbuf(items, shape, strides, offset, format, flags);
+ if (ndbuf == NULL)
+ return -1;
+
+ ndbuf_push(nd, ndbuf);
+ return 0;
+}
+
+#define PyBUF_UNUSED 0x10000
+static int
+ndarray_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ static char *kwlist[] = {
+ "obj", "shape", "strides", "offset", "format", "flags", "getbuf", NULL
+ };
+ PyObject *v = NULL; /* initializer: scalar, list, tuple or base object */
+ PyObject *shape = NULL; /* size of each dimension */
+ PyObject *strides = NULL; /* number of bytes to the next elt in each dim */
+ Py_ssize_t offset = 0; /* buffer offset */
+ PyObject *format = simple_format; /* struct module specifier: "B" */
+ int flags = ND_DEFAULT; /* base buffer and ndarray flags */
+
+ int getbuf = PyBUF_UNUSED; /* re-exporter: getbuffer request flags */
+
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOnOii", kwlist,
+ &v, &shape, &strides, &offset, &format, &flags, &getbuf))
+ return -1;
+
+ /* NDArrayObject is re-exporter */
+ if (PyObject_CheckBuffer(v) && shape == NULL) {
+ if (strides || offset || format != simple_format ||
+ !(flags == ND_DEFAULT || flags == ND_REDIRECT)) {
+ PyErr_SetString(PyExc_TypeError,
+ "construction from exporter object only takes 'obj', 'getbuf' "
+ "and 'flags' arguments");
+ return -1;
+ }
+
+ getbuf = (getbuf == PyBUF_UNUSED) ? PyBUF_FULL_RO : getbuf;
+
+ if (ndarray_init_staticbuf(v, nd, getbuf) < 0)
+ return -1;
+
+ init_flags(nd->head);
+ nd->head->flags |= flags;
+
+ return 0;
+ }
+
+ /* NDArrayObject is the original base object. */
+ if (getbuf != PyBUF_UNUSED) {
+ PyErr_SetString(PyExc_TypeError,
+ "getbuf argument only valid for construction from exporter "
+ "object");
+ return -1;
+ }
+ if (shape == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "shape is a required argument when constructing from "
+ "list, tuple or scalar");
+ return -1;
+ }
+
+ if (flags & ND_VAREXPORT) {
+ nd->flags |= ND_VAREXPORT;
+ flags &= ~ND_VAREXPORT;
+ }
+
+ /* Initialize and push the first base buffer onto the linked list. */
+ return ndarray_push_base(nd, v, shape, strides, offset, format, flags);
+}
+
+/* Push an additional base onto the linked list. */
+static PyObject *
+ndarray_push(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ static char *kwlist[] = {
+ "items", "shape", "strides", "offset", "format", "flags", NULL
+ };
+ PyObject *items = NULL; /* initializer: scalar, list or tuple */
+ PyObject *shape = NULL; /* size of each dimension */
+ PyObject *strides = NULL; /* number of bytes to the next elt in each dim */
+ PyObject *format = simple_format; /* struct module specifier: "B" */
+ Py_ssize_t offset = 0; /* buffer offset */
+ int flags = ND_DEFAULT; /* base buffer flags */
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|OnOi", kwlist,
+ &items, &shape, &strides, &offset, &format, &flags))
+ return NULL;
+
+ if (flags & ND_VAREXPORT) {
+ PyErr_SetString(PyExc_ValueError,
+ "ND_VAREXPORT flag can only be used during object creation");
+ return NULL;
+ }
+ if (ND_IS_CONSUMER(nd)) {
+ PyErr_SetString(PyExc_BufferError,
+ "structure of re-exporting object is immutable");
+ return NULL;
+ }
+ if (!(nd->flags&ND_VAREXPORT) && nd->head->exports > 0) {
+ PyErr_Format(PyExc_BufferError,
+ "cannot change structure: %zd exported buffer%s",
+ nd->head->exports, nd->head->exports==1 ? "" : "s");
+ return NULL;
+ }
+
+ if (ndarray_push_base(nd, items, shape, strides,
+ offset, format, flags) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+}
+
+/* Pop a base from the linked list (if possible). */
+static PyObject *
+ndarray_pop(PyObject *self, PyObject *dummy)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ if (ND_IS_CONSUMER(nd)) {
+ PyErr_SetString(PyExc_BufferError,
+ "structure of re-exporting object is immutable");
+ return NULL;
+ }
+ if (nd->head->exports > 0) {
+ PyErr_Format(PyExc_BufferError,
+ "cannot change structure: %zd exported buffer%s",
+ nd->head->exports, nd->head->exports==1 ? "" : "s");
+ return NULL;
+ }
+ if (nd->head->next == NULL) {
+ PyErr_SetString(PyExc_BufferError,
+ "list only has a single base");
+ return NULL;
+ }
+
+ ndbuf_pop(nd);
+ Py_RETURN_NONE;
+}
+
+/**************************************************************************/
+/* getbuffer */
+/**************************************************************************/
+
+static int
+ndarray_getbuf(NDArrayObject *self, Py_buffer *view, int flags)
+{
+ ndbuf_t *ndbuf = self->head;
+ Py_buffer *base = &ndbuf->base;
+ int baseflags = ndbuf->flags;
+
+ /* redirect mode */
+ if (base->obj != NULL && (baseflags&ND_REDIRECT)) {
+ return PyObject_GetBuffer(base->obj, view, flags);
+ }
+
+ /* start with complete information */
+ *view = *base;
+ view->obj = NULL;
+
+ /* reconstruct format */
+ if (view->format == NULL)
+ view->format = "B";
+
+ if (base->ndim != 0 &&
+ ((REQ_SHAPE(flags) && base->shape == NULL) ||
+ (REQ_STRIDES(flags) && base->strides == NULL))) {
+ /* The ndarray is a re-exporter that has been created without full
+ information for testing purposes. In this particular case the
+ ndarray is not a PEP-3118 compliant buffer provider. */
+ PyErr_SetString(PyExc_BufferError,
+ "re-exporter does not provide format, shape or strides");
+ return -1;
+ }
+
+ if (baseflags & ND_GETBUF_FAIL) {
+ PyErr_SetString(PyExc_BufferError,
+ "ND_GETBUF_FAIL: forced test exception");
+ if (baseflags & ND_GETBUF_UNDEFINED)
+ view->obj = (PyObject *)0x1; /* wrong but permitted in <= 3.2 */
+ return -1;
+ }
+
+ if (REQ_WRITABLE(flags) && base->readonly) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray is not writable");
+ return -1;
+ }
+ if (!REQ_FORMAT(flags)) {
+ /* NULL indicates that the buffer's data type has been cast to 'B'.
+ view->itemsize is the _previous_ itemsize. If shape is present,
+ the equality product(shape) * itemsize = len still holds at this
+ point. The equality calcsize(format) = itemsize does _not_ hold
+ from here on! */
+ view->format = NULL;
+ }
+
+ if (REQ_C_CONTIGUOUS(flags) && !ND_C_CONTIGUOUS(baseflags)) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray is not C-contiguous");
+ return -1;
+ }
+ if (REQ_F_CONTIGUOUS(flags) && !ND_FORTRAN_CONTIGUOUS(baseflags)) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray is not Fortran contiguous");
+ return -1;
+ }
+ if (REQ_ANY_CONTIGUOUS(flags) && !ND_ANY_CONTIGUOUS(baseflags)) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray is not contiguous");
+ return -1;
+ }
+ if (!REQ_INDIRECT(flags) && (baseflags & ND_PIL)) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray cannot be represented without suboffsets");
+ return -1;
+ }
+ if (!REQ_STRIDES(flags)) {
+ if (!ND_C_CONTIGUOUS(baseflags)) {
+ PyErr_SetString(PyExc_BufferError,
+ "ndarray is not C-contiguous");
+ return -1;
+ }
+ view->strides = NULL;
+ }
+ if (!REQ_SHAPE(flags)) {
+ /* PyBUF_SIMPLE or PyBUF_WRITABLE: at this point buf is C-contiguous,
+ so base->buf = ndbuf->data. */
+ if (view->format != NULL) {
+ /* PyBUF_SIMPLE|PyBUF_FORMAT and PyBUF_WRITABLE|PyBUF_FORMAT do
+ not make sense. */
+ PyErr_Format(PyExc_BufferError,
+ "ndarray: cannot cast to unsigned bytes if the format flag "
+ "is present");
+ return -1;
+ }
+ /* product(shape) * itemsize = len and calcsize(format) = itemsize
+ do _not_ hold from here on! */
+ view->ndim = 1;
+ view->shape = NULL;
+ }
+
+ view->obj = (PyObject *)self;
+ Py_INCREF(view->obj);
+ self->head->exports++;
+
+ return 0;
+}
+
+static int
+ndarray_releasebuf(NDArrayObject *self, Py_buffer *view)
+{
+ if (!ND_IS_CONSUMER(self)) {
+ ndbuf_t *ndbuf = view->internal;
+ if (--ndbuf->exports == 0 && ndbuf != self->head)
+ ndbuf_delete(self, ndbuf);
+ }
+
+ return 0;
+}
+
+static PyBufferProcs ndarray_as_buffer = {
+ (getbufferproc)ndarray_getbuf, /* bf_getbuffer */
+ (releasebufferproc)ndarray_releasebuf /* bf_releasebuffer */
+};
+
+
+/**************************************************************************/
+/* indexing/slicing */
+/**************************************************************************/
+
+static char *
+ptr_from_index(Py_buffer *base, Py_ssize_t index)
+{
+ char *ptr;
+ Py_ssize_t nitems; /* items in the first dimension */
+
+ if (base->shape)
+ nitems = base->shape[0];
+ else {
+ assert(base->ndim == 1 && SIMPLE_FORMAT(base->format));
+ nitems = base->len;
+ }
+
+ if (index < 0) {
+ index += nitems;
+ }
+ if (index < 0 || index >= nitems) {
+ PyErr_SetString(PyExc_IndexError, "index out of bounds");
+ return NULL;
+ }
+
+ ptr = (char *)base->buf;
+
+ if (base->strides == NULL)
+ ptr += base->itemsize * index;
+ else
+ ptr += base->strides[0] * index;
+
+ ptr = ADJUST_PTR(ptr, base->suboffsets);
+
+ return ptr;
+}
+
+static PyObject *
+ndarray_item(NDArrayObject *self, Py_ssize_t index)
+{
+ ndbuf_t *ndbuf = self->head;
+ Py_buffer *base = &ndbuf->base;
+ char *ptr;
+
+ if (base->ndim == 0) {
+ PyErr_SetString(PyExc_TypeError, "invalid indexing of scalar");
+ return NULL;
+ }
+
+ ptr = ptr_from_index(base, index);
+ if (ptr == NULL)
+ return NULL;
+
+ if (base->ndim == 1) {
+ return unpack_single(ptr, base->format, base->itemsize);
+ }
+ else {
+ NDArrayObject *nd;
+ Py_buffer *subview;
+
+ nd = (NDArrayObject *)ndarray_new(&NDArray_Type, NULL, NULL);
+ if (nd == NULL)
+ return NULL;
+
+ if (ndarray_init_staticbuf((PyObject *)self, nd, PyBUF_FULL_RO) < 0) {
+ Py_DECREF(nd);
+ return NULL;
+ }
+
+ subview = &nd->staticbuf.base;
+
+ subview->buf = ptr;
+ subview->len /= subview->shape[0];
+
+ subview->ndim--;
+ subview->shape++;
+ if (subview->strides) subview->strides++;
+ if (subview->suboffsets) subview->suboffsets++;
+
+ init_flags(&nd->staticbuf);
+
+ return (PyObject *)nd;
+ }
+}
+
+/*
+ For each dimension, we get valid (start, stop, step, slicelength) quadruples
+ from PySlice_GetIndicesEx().
+
+ Slicing NumPy arrays
+ ====================
+
+ A pointer to an element in a NumPy array is defined by:
+
+ ptr = (char *)buf + indices[0] * strides[0] +
+ ... +
+ indices[ndim-1] * strides[ndim-1]
+
+ Adjust buf:
+ -----------
+ Adding start[n] for each dimension effectively adds the constant:
+
+ c = start[0] * strides[0] + ... + start[ndim-1] * strides[ndim-1]
+
+ Therefore init_slice() adds all start[n] directly to buf.
+
+ Adjust shape:
+ -------------
+ Obviously shape[n] = slicelength[n]
+
+ Adjust strides:
+ ---------------
+ In the original array, the next element in a dimension is reached
+ by adding strides[n] to the pointer. In the sliced array, elements
+ may be skipped, so the next element is reached by adding:
+
+ strides[n] * step[n]
+
+ Slicing PIL arrays
+ ==================
+
+ Layout:
+ -------
+ In the first (zeroth) dimension, PIL arrays have an array of pointers
+ to sub-arrays of ndim-1. Striding in the first dimension is done by
+ getting the index of the nth pointer, dereference it and then add a
+ suboffset to it. The arrays pointed to can best be seen a regular
+ NumPy arrays.
+
+ Adjust buf:
+ -----------
+ In the original array, buf points to a location (usually the start)
+ in the array of pointers. For the sliced array, start[0] can be
+ added to buf in the same manner as for NumPy arrays.
+
+ Adjust suboffsets:
+ ------------------
+ Due to the dereferencing step in the addressing scheme, it is not
+ possible to adjust buf for higher dimensions. Recall that the
+ sub-arrays pointed to are regular NumPy arrays, so for each of
+ those arrays adding start[n] effectively adds the constant:
+
+ c = start[1] * strides[1] + ... + start[ndim-1] * strides[ndim-1]
+
+ This constant is added to suboffsets[0]. suboffsets[0] in turn is
+ added to each pointer right after dereferencing.
+
+ Adjust shape and strides:
+ -------------------------
+ Shape and strides are not influenced by the dereferencing step, so
+ they are adjusted in the same manner as for NumPy arrays.
+
+ Multiple levels of suboffsets
+ =============================
+
+ For a construct like an array of pointers to array of pointers to
+ sub-arrays of ndim-2:
+
+ suboffsets[0] = start[1] * strides[1]
+ suboffsets[1] = start[2] * strides[2] + ...
+*/
+static int
+init_slice(Py_buffer *base, PyObject *key, int dim)
+{
+ Py_ssize_t start, stop, step, slicelength;
+
+ if (PySlice_GetIndicesEx(key, base->shape[dim],
+ &start, &stop, &step, &slicelength) < 0) {
+ return -1;
+ }
+
+
+ if (base->suboffsets == NULL || dim == 0) {
+ adjust_buf:
+ base->buf = (char *)base->buf + base->strides[dim] * start;
+ }
+ else {
+ Py_ssize_t n = dim-1;
+ while (n >= 0 && base->suboffsets[n] < 0)
+ n--;
+ if (n < 0)
+ goto adjust_buf; /* all suboffsets are negative */
+ base->suboffsets[n] = base->suboffsets[n] + base->strides[dim] * start;
+ }
+ base->shape[dim] = slicelength;
+ base->strides[dim] = base->strides[dim] * step;
+
+ return 0;
+}
+
+static int
+copy_structure(Py_buffer *base)
+{
+ Py_ssize_t *shape = NULL, *strides = NULL, *suboffsets = NULL;
+ Py_ssize_t i;
+
+ shape = PyMem_Malloc(base->ndim * (sizeof *shape));
+ strides = PyMem_Malloc(base->ndim * (sizeof *strides));
+ if (shape == NULL || strides == NULL)
+ goto err_nomem;
+
+ suboffsets = NULL;
+ if (base->suboffsets) {
+ suboffsets = PyMem_Malloc(base->ndim * (sizeof *suboffsets));
+ if (suboffsets == NULL)
+ goto err_nomem;
+ }
+
+ for (i = 0; i < base->ndim; i++) {
+ shape[i] = base->shape[i];
+ strides[i] = base->strides[i];
+ if (suboffsets)
+ suboffsets[i] = base->suboffsets[i];
+ }
+
+ base->shape = shape;
+ base->strides = strides;
+ base->suboffsets = suboffsets;
+
+ return 0;
+
+err_nomem:
+ PyErr_NoMemory();
+ PyMem_XFree(shape);
+ PyMem_XFree(strides);
+ PyMem_XFree(suboffsets);
+ return -1;
+}
+
+static PyObject *
+ndarray_subscript(NDArrayObject *self, PyObject *key)
+{
+ NDArrayObject *nd;
+ ndbuf_t *ndbuf;
+ Py_buffer *base = &self->head->base;
+
+ if (base->ndim == 0) {
+ if (PyTuple_Check(key) && PyTuple_GET_SIZE(key) == 0) {
+ return unpack_single(base->buf, base->format, base->itemsize);
+ }
+ else if (key == Py_Ellipsis) {
+ Py_INCREF(self);
+ return (PyObject *)self;
+ }
+ else {
+ PyErr_SetString(PyExc_TypeError, "invalid indexing of scalar");
+ return NULL;
+ }
+ }
+ if (PyIndex_Check(key)) {
+ Py_ssize_t index = PyLong_AsSsize_t(key);
+ if (index == -1 && PyErr_Occurred())
+ return NULL;
+ return ndarray_item(self, index);
+ }
+
+ nd = (NDArrayObject *)ndarray_new(&NDArray_Type, NULL, NULL);
+ if (nd == NULL)
+ return NULL;
+
+ /* new ndarray is a consumer */
+ if (ndarray_init_staticbuf((PyObject *)self, nd, PyBUF_FULL_RO) < 0) {
+ Py_DECREF(nd);
+ return NULL;
+ }
+
+ /* copy shape, strides and suboffsets */
+ ndbuf = nd->head;
+ base = &ndbuf->base;
+ if (copy_structure(base) < 0) {
+ Py_DECREF(nd);
+ return NULL;
+ }
+ ndbuf->flags |= ND_OWN_ARRAYS;
+
+ if (PySlice_Check(key)) {
+ /* one-dimensional slice */
+ if (init_slice(base, key, 0) < 0)
+ goto err_occurred;
+ }
+ else if PyTuple_Check(key) {
+ /* multi-dimensional slice */
+ PyObject *tuple = key;
+ Py_ssize_t i, n;
+
+ n = PyTuple_GET_SIZE(tuple);
+ for (i = 0; i < n; i++) {
+ key = PyTuple_GET_ITEM(tuple, i);
+ if (!PySlice_Check(key))
+ goto type_error;
+ if (init_slice(base, key, (int)i) < 0)
+ goto err_occurred;
+ }
+ }
+ else {
+ goto type_error;
+ }
+
+ init_len(base);
+ init_flags(ndbuf);
+
+ return (PyObject *)nd;
+
+
+type_error:
+ PyErr_Format(PyExc_TypeError,
+ "cannot index memory using \"%.200s\"",
+ key->ob_type->tp_name);
+err_occurred:
+ Py_DECREF(nd);
+ return NULL;
+}
+
+
+static int
+ndarray_ass_subscript(NDArrayObject *self, PyObject *key, PyObject *value)
+{
+ NDArrayObject *nd;
+ Py_buffer *dest = &self->head->base;
+ Py_buffer src;
+ char *ptr;
+ Py_ssize_t index;
+ int ret = -1;
+
+ if (dest->readonly) {
+ PyErr_SetString(PyExc_TypeError, "ndarray is not writable");
+ return -1;
+ }
+ if (value == NULL) {
+ PyErr_SetString(PyExc_TypeError, "ndarray data cannot be deleted");
+ return -1;
+ }
+ if (dest->ndim == 0) {
+ if (key == Py_Ellipsis ||
+ (PyTuple_Check(key) && PyTuple_GET_SIZE(key) == 0)) {
+ ptr = (char *)dest->buf;
+ return pack_single(ptr, value, dest->format, dest->itemsize);
+ }
+ else {
+ PyErr_SetString(PyExc_TypeError, "invalid indexing of scalar");
+ return -1;
+ }
+ }
+ if (dest->ndim == 1 && PyIndex_Check(key)) {
+ /* rvalue must be a single item */
+ index = PyLong_AsSsize_t(key);
+ if (index == -1 && PyErr_Occurred())
+ return -1;
+ else {
+ ptr = ptr_from_index(dest, index);
+ if (ptr == NULL)
+ return -1;
+ }
+ return pack_single(ptr, value, dest->format, dest->itemsize);
+ }
+
+ /* rvalue must be an exporter */
+ if (PyObject_GetBuffer(value, &src, PyBUF_FULL_RO) == -1)
+ return -1;
+
+ nd = (NDArrayObject *)ndarray_subscript(self, key);
+ if (nd != NULL) {
+ dest = &nd->head->base;
+ ret = copy_buffer(dest, &src);
+ Py_DECREF(nd);
+ }
+
+ PyBuffer_Release(&src);
+ return ret;
+}
+
+static PyObject *
+slice_indices(PyObject *self, PyObject *args)
+{
+ PyObject *ret, *key, *tmp;
+ Py_ssize_t s[4]; /* start, stop, step, slicelength */
+ Py_ssize_t i, len;
+
+ if (!PyArg_ParseTuple(args, "On", &key, &len)) {
+ return NULL;
+ }
+ if (!PySlice_Check(key)) {
+ PyErr_SetString(PyExc_TypeError,
+ "first argument must be a slice object");
+ return NULL;
+ }
+ if (PySlice_GetIndicesEx(key, len, &s[0], &s[1], &s[2], &s[3]) < 0) {
+ return NULL;
+ }
+
+ ret = PyTuple_New(4);
+ if (ret == NULL)
+ return NULL;
+
+ for (i = 0; i < 4; i++) {
+ tmp = PyLong_FromSsize_t(s[i]);
+ if (tmp == NULL)
+ goto error;
+ PyTuple_SET_ITEM(ret, i, tmp);
+ }
+
+ return ret;
+
+error:
+ Py_DECREF(ret);
+ return NULL;
+}
+
+
+static PyMappingMethods ndarray_as_mapping = {
+ NULL, /* mp_length */
+ (binaryfunc)ndarray_subscript, /* mp_subscript */
+ (objobjargproc)ndarray_ass_subscript /* mp_ass_subscript */
+};
+
+static PySequenceMethods ndarray_as_sequence = {
+ 0, /* sq_length */
+ 0, /* sq_concat */
+ 0, /* sq_repeat */
+ (ssizeargfunc)ndarray_item, /* sq_item */
+};
+
+
+/**************************************************************************/
+/* getters */
+/**************************************************************************/
+
+static PyObject *
+ssize_array_as_tuple(Py_ssize_t *array, Py_ssize_t len)
+{
+ PyObject *tuple, *x;
+ Py_ssize_t i;
+
+ if (array == NULL)
+ return PyTuple_New(0);
+
+ tuple = PyTuple_New(len);
+ if (tuple == NULL)
+ return NULL;
+
+ for (i = 0; i < len; i++) {
+ x = PyLong_FromSsize_t(array[i]);
+ if (x == NULL) {
+ Py_DECREF(tuple);
+ return NULL;
+ }
+ PyTuple_SET_ITEM(tuple, i, x);
+ }
+
+ return tuple;
+}
+
+static PyObject *
+ndarray_get_flags(NDArrayObject *self, void *closure)
+{
+ return PyLong_FromLong(self->head->flags);
+}
+
+static PyObject *
+ndarray_get_offset(NDArrayObject *self, void *closure)
+{
+ ndbuf_t *ndbuf = self->head;
+ return PyLong_FromSsize_t(ndbuf->offset);
+}
+
+static PyObject *
+ndarray_get_obj(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+
+ if (base->obj == NULL) {
+ Py_RETURN_NONE;
+ }
+ Py_INCREF(base->obj);
+ return base->obj;
+}
+
+static PyObject *
+ndarray_get_nbytes(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return PyLong_FromSsize_t(base->len);
+}
+
+static PyObject *
+ndarray_get_readonly(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return PyLong_FromLong(base->readonly);
+}
+
+static PyObject *
+ndarray_get_itemsize(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return PyLong_FromSsize_t(base->itemsize);
+}
+
+static PyObject *
+ndarray_get_format(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ char *fmt = base->format ? base->format : "";
+ return PyUnicode_FromString(fmt);
+}
+
+static PyObject *
+ndarray_get_ndim(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return PyLong_FromSsize_t(base->ndim);
+}
+
+static PyObject *
+ndarray_get_shape(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return ssize_array_as_tuple(base->shape, base->ndim);
+}
+
+static PyObject *
+ndarray_get_strides(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return ssize_array_as_tuple(base->strides, base->ndim);
+}
+
+static PyObject *
+ndarray_get_suboffsets(NDArrayObject *self, void *closure)
+{
+ Py_buffer *base = &self->head->base;
+ return ssize_array_as_tuple(base->suboffsets, base->ndim);
+}
+
+static PyObject *
+ndarray_c_contig(PyObject *self, PyObject *dummy)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ int ret = PyBuffer_IsContiguous(&nd->head->base, 'C');
+
+ if (ret != ND_C_CONTIGUOUS(nd->head->flags)) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "results from PyBuffer_IsContiguous() and flags differ");
+ return NULL;
+ }
+ return PyBool_FromLong(ret);
+}
+
+static PyObject *
+ndarray_fortran_contig(PyObject *self, PyObject *dummy)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ int ret = PyBuffer_IsContiguous(&nd->head->base, 'F');
+
+ if (ret != ND_FORTRAN_CONTIGUOUS(nd->head->flags)) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "results from PyBuffer_IsContiguous() and flags differ");
+ return NULL;
+ }
+ return PyBool_FromLong(ret);
+}
+
+static PyObject *
+ndarray_contig(PyObject *self, PyObject *dummy)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ int ret = PyBuffer_IsContiguous(&nd->head->base, 'A');
+
+ if (ret != ND_ANY_CONTIGUOUS(nd->head->flags)) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "results from PyBuffer_IsContiguous() and flags differ");
+ return NULL;
+ }
+ return PyBool_FromLong(ret);
+}
+
+
+static PyGetSetDef ndarray_getset [] =
+{
+ /* ndbuf */
+ { "flags", (getter)ndarray_get_flags, NULL, NULL, NULL},
+ { "offset", (getter)ndarray_get_offset, NULL, NULL, NULL},
+ /* ndbuf.base */
+ { "obj", (getter)ndarray_get_obj, NULL, NULL, NULL},
+ { "nbytes", (getter)ndarray_get_nbytes, NULL, NULL, NULL},
+ { "readonly", (getter)ndarray_get_readonly, NULL, NULL, NULL},
+ { "itemsize", (getter)ndarray_get_itemsize, NULL, NULL, NULL},
+ { "format", (getter)ndarray_get_format, NULL, NULL, NULL},
+ { "ndim", (getter)ndarray_get_ndim, NULL, NULL, NULL},
+ { "shape", (getter)ndarray_get_shape, NULL, NULL, NULL},
+ { "strides", (getter)ndarray_get_strides, NULL, NULL, NULL},
+ { "suboffsets", (getter)ndarray_get_suboffsets, NULL, NULL, NULL},
+ { "c_contiguous", (getter)ndarray_c_contig, NULL, NULL, NULL},
+ { "f_contiguous", (getter)ndarray_fortran_contig, NULL, NULL, NULL},
+ { "contiguous", (getter)ndarray_contig, NULL, NULL, NULL},
+ {NULL}
+};
+
+static PyObject *
+ndarray_tolist(PyObject *self, PyObject *dummy)
+{
+ return ndarray_as_list((NDArrayObject *)self);
+}
+
+static PyObject *
+ndarray_tobytes(PyObject *self, PyObject *dummy)
+{
+ ndbuf_t *ndbuf = ((NDArrayObject *)self)->head;
+ Py_buffer *src = &ndbuf->base;
+ Py_buffer dest;
+ PyObject *ret = NULL;
+ char *mem;
+
+ if (ND_C_CONTIGUOUS(ndbuf->flags))
+ return PyBytes_FromStringAndSize(src->buf, src->len);
+
+ assert(src->shape != NULL);
+ assert(src->strides != NULL);
+ assert(src->ndim > 0);
+
+ mem = PyMem_Malloc(src->len);
+ if (mem == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ dest = *src;
+ dest.buf = mem;
+ dest.suboffsets = NULL;
+ dest.strides = strides_from_shape(ndbuf, 0);
+ if (dest.strides == NULL)
+ goto out;
+ if (copy_buffer(&dest, src) < 0)
+ goto out;
+
+ ret = PyBytes_FromStringAndSize(mem, src->len);
+
+out:
+ PyMem_XFree(dest.strides);
+ PyMem_Free(mem);
+ return ret;
+}
+
+/* add redundant (negative) suboffsets for testing */
+static PyObject *
+ndarray_add_suboffsets(PyObject *self, PyObject *dummy)
+{
+ NDArrayObject *nd = (NDArrayObject *)self;
+ Py_buffer *base = &nd->head->base;
+ Py_ssize_t i;
+
+ if (base->suboffsets != NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "cannot add suboffsets to PIL-style array");
+ return NULL;
+ }
+ if (base->strides == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "cannot add suboffsets to array without strides");
+ return NULL;
+ }
+
+ base->suboffsets = PyMem_Malloc(base->ndim * (sizeof *base->suboffsets));
+ if (base->suboffsets == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ for (i = 0; i < base->ndim; i++)
+ base->suboffsets[i] = -1;
+
+ Py_RETURN_NONE;
+}
+
+/* Test PyMemoryView_FromBuffer(): return a memoryview from a static buffer.
+ Obviously this is fragile and only one such view may be active at any
+ time. Never use anything like this in real code! */
+static char *infobuf = NULL;
+static PyObject *
+ndarray_memoryview_from_buffer(PyObject *self, PyObject *dummy)
+{
+ const NDArrayObject *nd = (NDArrayObject *)self;
+ const Py_buffer *view = &nd->head->base;
+ const ndbuf_t *ndbuf;
+ static char format[ND_MAX_NDIM+1];
+ static Py_ssize_t shape[ND_MAX_NDIM];
+ static Py_ssize_t strides[ND_MAX_NDIM];
+ static Py_ssize_t suboffsets[ND_MAX_NDIM];
+ static Py_buffer info;
+ char *p;
+
+ if (!ND_IS_CONSUMER(nd))
+ ndbuf = nd->head; /* self is ndarray/original exporter */
+ else if (NDArray_Check(view->obj) && !ND_IS_CONSUMER(view->obj))
+ /* self is ndarray and consumer from ndarray/original exporter */
+ ndbuf = ((NDArrayObject *)view->obj)->head;
+ else {
+ PyErr_SetString(PyExc_TypeError,
+ "memoryview_from_buffer(): ndarray must be original exporter or "
+ "consumer from ndarray/original exporter");
+ return NULL;
+ }
+
+ info = *view;
+ p = PyMem_Realloc(infobuf, ndbuf->len);
+ if (p == NULL) {
+ PyMem_Free(infobuf);
+ PyErr_NoMemory();
+ infobuf = NULL;
+ return NULL;
+ }
+ else {
+ infobuf = p;
+ }
+ /* copy the complete raw data */
+ memcpy(infobuf, ndbuf->data, ndbuf->len);
+ info.buf = infobuf + ((char *)view->buf - ndbuf->data);
+
+ if (view->format) {
+ if (strlen(view->format) > ND_MAX_NDIM) {
+ PyErr_Format(PyExc_TypeError,
+ "memoryview_from_buffer: format is limited to %d characters",
+ ND_MAX_NDIM);
+ return NULL;
+ }
+ strcpy(format, view->format);
+ info.format = format;
+ }
+ if (view->ndim > ND_MAX_NDIM) {
+ PyErr_Format(PyExc_TypeError,
+ "memoryview_from_buffer: ndim is limited to %d", ND_MAX_NDIM);
+ return NULL;
+ }
+ if (view->shape) {
+ memcpy(shape, view->shape, view->ndim * sizeof(Py_ssize_t));
+ info.shape = shape;
+ }
+ if (view->strides) {
+ memcpy(strides, view->strides, view->ndim * sizeof(Py_ssize_t));
+ info.strides = strides;
+ }
+ if (view->suboffsets) {
+ memcpy(suboffsets, view->suboffsets, view->ndim * sizeof(Py_ssize_t));
+ info.suboffsets = suboffsets;
+ }
+
+ return PyMemoryView_FromBuffer(&info);
+}
+
+/* Get a single item from bufobj at the location specified by seq.
+ seq is a list or tuple of indices. The purpose of this function
+ is to check other functions against PyBuffer_GetPointer(). */
+static PyObject *
+get_pointer(PyObject *self, PyObject *args)
+{
+ PyObject *ret = NULL, *bufobj, *seq;
+ Py_buffer view;
+ Py_ssize_t indices[ND_MAX_NDIM];
+ Py_ssize_t i;
+ void *ptr;
+
+ if (!PyArg_ParseTuple(args, "OO", &bufobj, &seq)) {
+ return NULL;
+ }
+
+ CHECK_LIST_OR_TUPLE(seq);
+ if (PyObject_GetBuffer(bufobj, &view, PyBUF_FULL_RO) < 0)
+ return NULL;
+
+ if (view.ndim > ND_MAX_NDIM) {
+ PyErr_Format(PyExc_ValueError,
+ "get_pointer(): ndim > %d", ND_MAX_NDIM);
+ goto out;
+ }
+ if (PySequence_Fast_GET_SIZE(seq) != view.ndim) {
+ PyErr_SetString(PyExc_ValueError,
+ "get_pointer(): len(indices) != ndim");
+ goto out;
+ }
+
+ for (i = 0; i < view.ndim; i++) {
+ PyObject *x = PySequence_Fast_GET_ITEM(seq, i);
+ indices[i] = PyLong_AsSsize_t(x);
+ if (PyErr_Occurred())
+ goto out;
+ if (indices[i] < 0 || indices[i] >= view.shape[i]) {
+ PyErr_Format(PyExc_ValueError,
+ "get_pointer(): invalid index %zd at position %zd",
+ indices[i], i);
+ goto out;
+ }
+ }
+
+ ptr = PyBuffer_GetPointer(&view, indices);
+ ret = unpack_single(ptr, view.format, view.itemsize);
+
+out:
+ PyBuffer_Release(&view);
+ return ret;
+}
+
+static PyObject *
+get_sizeof_void_p(PyObject *self)
+{
+ return PyLong_FromSize_t(sizeof(void *));
+}
+
+static char
+get_ascii_order(PyObject *order)
+{
+ PyObject *ascii_order;
+ char ord;
+
+ if (!PyUnicode_Check(order)) {
+ PyErr_SetString(PyExc_TypeError,
+ "order must be a string");
+ return CHAR_MAX;
+ }
+
+ ascii_order = PyUnicode_AsASCIIString(order);
+ if (ascii_order == NULL) {
+ return CHAR_MAX;
+ }
+
+ ord = PyBytes_AS_STRING(ascii_order)[0];
+ Py_DECREF(ascii_order);
+
+ if (ord != 'C' && ord != 'F' && ord != 'A') {
+ PyErr_SetString(PyExc_ValueError,
+ "invalid order, must be C, F or A");
+ return CHAR_MAX;
+ }
+
+ return ord;
+}
+
+/* Get a contiguous memoryview. */
+static PyObject *
+get_contiguous(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ PyObject *buffertype;
+ PyObject *order;
+ long type;
+ char ord;
+
+ if (!PyArg_ParseTuple(args, "OOO", &obj, &buffertype, &order)) {
+ return NULL;
+ }
+
+ if (!PyLong_Check(buffertype)) {
+ PyErr_SetString(PyExc_TypeError,
+ "buffertype must be PyBUF_READ or PyBUF_WRITE");
+ return NULL;
+ }
+
+ type = PyLong_AsLong(buffertype);
+ if (type == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+ if (type != PyBUF_READ && type != PyBUF_WRITE) {
+ PyErr_SetString(PyExc_ValueError,
+ "invalid buffer type");
+ return NULL;
+ }
+
+ ord = get_ascii_order(order);
+ if (ord == CHAR_MAX)
+ return NULL;
+
+ return PyMemoryView_GetContiguous(obj, (int)type, ord);
+}
+
+/* PyBuffer_ToContiguous() */
+static PyObject *
+py_buffer_to_contiguous(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ PyObject *order;
+ PyObject *ret = NULL;
+ int flags;
+ char ord;
+ Py_buffer view;
+ char *buf = NULL;
+
+ if (!PyArg_ParseTuple(args, "OOi", &obj, &order, &flags)) {
+ return NULL;
+ }
+
+ if (PyObject_GetBuffer(obj, &view, flags) < 0) {
+ return NULL;
+ }
+
+ ord = get_ascii_order(order);
+ if (ord == CHAR_MAX) {
+ goto out;
+ }
+
+ buf = PyMem_Malloc(view.len);
+ if (buf == NULL) {
+ PyErr_NoMemory();
+ goto out;
+ }
+
+ if (PyBuffer_ToContiguous(buf, &view, view.len, ord) < 0) {
+ goto out;
+ }
+
+ ret = PyBytes_FromStringAndSize(buf, view.len);
+
+out:
+ PyBuffer_Release(&view);
+ PyMem_XFree(buf);
+ return ret;
+}
+
+static int
+fmtcmp(const char *fmt1, const char *fmt2)
+{
+ if (fmt1 == NULL) {
+ return fmt2 == NULL || strcmp(fmt2, "B") == 0;
+ }
+ if (fmt2 == NULL) {
+ return fmt1 == NULL || strcmp(fmt1, "B") == 0;
+ }
+ return strcmp(fmt1, fmt2) == 0;
+}
+
+static int
+arraycmp(const Py_ssize_t *a1, const Py_ssize_t *a2, const Py_ssize_t *shape,
+ Py_ssize_t ndim)
+{
+ Py_ssize_t i;
+
+ if (ndim == 1 && shape && shape[0] == 1) {
+ /* This is for comparing strides: For example, the array
+ [175], shape=[1], strides=[-5] is considered contiguous. */
+ return 1;
+ }
+
+ for (i = 0; i < ndim; i++) {
+ if (a1[i] != a2[i]) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/* Compare two contiguous buffers for physical equality. */
+static PyObject *
+cmp_contig(PyObject *self, PyObject *args)
+{
+ PyObject *b1, *b2; /* buffer objects */
+ Py_buffer v1, v2;
+ PyObject *ret;
+ int equal = 0;
+
+ if (!PyArg_ParseTuple(args, "OO", &b1, &b2)) {
+ return NULL;
+ }
+
+ if (PyObject_GetBuffer(b1, &v1, PyBUF_FULL_RO) < 0) {
+ PyErr_SetString(PyExc_TypeError,
+ "cmp_contig: first argument does not implement the buffer "
+ "protocol");
+ return NULL;
+ }
+ if (PyObject_GetBuffer(b2, &v2, PyBUF_FULL_RO) < 0) {
+ PyErr_SetString(PyExc_TypeError,
+ "cmp_contig: second argument does not implement the buffer "
+ "protocol");
+ PyBuffer_Release(&v1);
+ return NULL;
+ }
+
+ if (!(PyBuffer_IsContiguous(&v1, 'C')&&PyBuffer_IsContiguous(&v2, 'C')) &&
+ !(PyBuffer_IsContiguous(&v1, 'F')&&PyBuffer_IsContiguous(&v2, 'F'))) {
+ goto result;
+ }
+
+ /* readonly may differ if created from non-contiguous */
+ if (v1.len != v2.len ||
+ v1.itemsize != v2.itemsize ||
+ v1.ndim != v2.ndim ||
+ !fmtcmp(v1.format, v2.format) ||
+ !!v1.shape != !!v2.shape ||
+ !!v1.strides != !!v2.strides ||
+ !!v1.suboffsets != !!v2.suboffsets) {
+ goto result;
+ }
+
+ if ((v1.shape && !arraycmp(v1.shape, v2.shape, NULL, v1.ndim)) ||
+ (v1.strides && !arraycmp(v1.strides, v2.strides, v1.shape, v1.ndim)) ||
+ (v1.suboffsets && !arraycmp(v1.suboffsets, v2.suboffsets, NULL,
+ v1.ndim))) {
+ goto result;
+ }
+
+ if (memcmp((char *)v1.buf, (char *)v2.buf, v1.len) != 0) {
+ goto result;
+ }
+
+ equal = 1;
+
+result:
+ PyBuffer_Release(&v1);
+ PyBuffer_Release(&v2);
+
+ ret = equal ? Py_True : Py_False;
+ Py_INCREF(ret);
+ return ret;
+}
+
+static PyObject *
+is_contiguous(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ PyObject *order;
+ PyObject *ret = NULL;
+ Py_buffer view;
+ char ord;
+
+ if (!PyArg_ParseTuple(args, "OO", &obj, &order)) {
+ return NULL;
+ }
+
+ if (PyObject_GetBuffer(obj, &view, PyBUF_FULL_RO) < 0) {
+ PyErr_SetString(PyExc_TypeError,
+ "is_contiguous: object does not implement the buffer "
+ "protocol");
+ return NULL;
+ }
+
+ ord = get_ascii_order(order);
+ if (ord == CHAR_MAX) {
+ goto release;
+ }
+
+ ret = PyBuffer_IsContiguous(&view, ord) ? Py_True : Py_False;
+ Py_INCREF(ret);
+
+release:
+ PyBuffer_Release(&view);
+ return ret;
+}
+
+static Py_hash_t
+ndarray_hash(PyObject *self)
+{
+ const NDArrayObject *nd = (NDArrayObject *)self;
+ const Py_buffer *view = &nd->head->base;
+ PyObject *bytes;
+ Py_hash_t hash;
+
+ if (!view->readonly) {
+ PyErr_SetString(PyExc_ValueError,
+ "cannot hash writable ndarray object");
+ return -1;
+ }
+ if (view->obj != NULL && PyObject_Hash(view->obj) == -1) {
+ return -1;
+ }
+
+ bytes = ndarray_tobytes(self, NULL);
+ if (bytes == NULL) {
+ return -1;
+ }
+
+ hash = PyObject_Hash(bytes);
+ Py_DECREF(bytes);
+ return hash;
+}
+
+
+static PyMethodDef ndarray_methods [] =
+{
+ { "tolist", ndarray_tolist, METH_NOARGS, NULL },
+ { "tobytes", ndarray_tobytes, METH_NOARGS, NULL },
+ { "push", (PyCFunction)ndarray_push, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "pop", ndarray_pop, METH_NOARGS, NULL },
+ { "add_suboffsets", ndarray_add_suboffsets, METH_NOARGS, NULL },
+ { "memoryview_from_buffer", ndarray_memoryview_from_buffer, METH_NOARGS, NULL },
+ {NULL}
+};
+
+static PyTypeObject NDArray_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "ndarray", /* Name of this type */
+ sizeof(NDArrayObject), /* Basic object size */
+ 0, /* Item size for varobject */
+ (destructor)ndarray_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ &ndarray_as_sequence, /* tp_as_sequence */
+ &ndarray_as_mapping, /* tp_as_mapping */
+ (hashfunc)ndarray_hash, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ &ndarray_as_buffer, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ ndarray_methods, /* tp_methods */
+ 0, /* tp_members */
+ ndarray_getset, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ ndarray_init, /* tp_init */
+ 0, /* tp_alloc */
+ ndarray_new, /* tp_new */
+};
+
+/**************************************************************************/
+/* StaticArray Object */
+/**************************************************************************/
+
+static PyTypeObject StaticArray_Type;
+
+typedef struct {
+ PyObject_HEAD
+ int legacy_mode; /* if true, use the view.obj==NULL hack */
+} StaticArrayObject;
+
+static char static_mem[12] = {0,1,2,3,4,5,6,7,8,9,10,11};
+static Py_ssize_t static_shape[1] = {12};
+static Py_ssize_t static_strides[1] = {1};
+static Py_buffer static_buffer = {
+ static_mem, /* buf */
+ NULL, /* obj */
+ 12, /* len */
+ 1, /* itemsize */
+ 1, /* readonly */
+ 1, /* ndim */
+ "B", /* format */
+ static_shape, /* shape */
+ static_strides, /* strides */
+ NULL, /* suboffsets */
+ NULL /* internal */
+};
+
+static PyObject *
+staticarray_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ return (PyObject *)PyObject_New(StaticArrayObject, &StaticArray_Type);
+}
+
+static int
+staticarray_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ StaticArrayObject *a = (StaticArrayObject *)self;
+ static char *kwlist[] = {
+ "legacy_mode", NULL
+ };
+ PyObject *legacy_mode = Py_False;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &legacy_mode))
+ return -1;
+
+ a->legacy_mode = (legacy_mode != Py_False);
+ return 0;
+}
+
+static void
+staticarray_dealloc(StaticArrayObject *self)
+{
+ PyObject_Del(self);
+}
+
+/* Return a buffer for a PyBUF_FULL_RO request. Flags are not checked,
+ which makes this object a non-compliant exporter! */
+static int
+staticarray_getbuf(StaticArrayObject *self, Py_buffer *view, int flags)
+{
+ *view = static_buffer;
+
+ if (self->legacy_mode) {
+ view->obj = NULL; /* Don't use this in new code. */
+ }
+ else {
+ view->obj = (PyObject *)self;
+ Py_INCREF(view->obj);
+ }
+
+ return 0;
+}
+
+static PyBufferProcs staticarray_as_buffer = {
+ (getbufferproc)staticarray_getbuf, /* bf_getbuffer */
+ NULL, /* bf_releasebuffer */
+};
+
+static PyTypeObject StaticArray_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "staticarray", /* Name of this type */
+ sizeof(StaticArrayObject), /* Basic object size */
+ 0, /* Item size for varobject */
+ (destructor)staticarray_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ &staticarray_as_buffer, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ staticarray_init, /* tp_init */
+ 0, /* tp_alloc */
+ staticarray_new, /* tp_new */
+};
+
+
+static struct PyMethodDef _testbuffer_functions[] = {
+ {"slice_indices", slice_indices, METH_VARARGS, NULL},
+ {"get_pointer", get_pointer, METH_VARARGS, NULL},
+ {"get_sizeof_void_p", (PyCFunction)get_sizeof_void_p, METH_NOARGS, NULL},
+ {"get_contiguous", get_contiguous, METH_VARARGS, NULL},
+ {"py_buffer_to_contiguous", py_buffer_to_contiguous, METH_VARARGS, NULL},
+ {"is_contiguous", is_contiguous, METH_VARARGS, NULL},
+ {"cmp_contig", cmp_contig, METH_VARARGS, NULL},
+ {NULL, NULL}
+};
+
+static struct PyModuleDef _testbuffermodule = {
+ PyModuleDef_HEAD_INIT,
+ "_testbuffer",
+ NULL,
+ -1,
+ _testbuffer_functions,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+
+PyMODINIT_FUNC
+PyInit__testbuffer(void)
+{
+ PyObject *m;
+
+ m = PyModule_Create(&_testbuffermodule);
+ if (m == NULL)
+ return NULL;
+
+ Py_TYPE(&NDArray_Type) = &PyType_Type;
+ Py_INCREF(&NDArray_Type);
+ PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
+
+ Py_TYPE(&StaticArray_Type) = &PyType_Type;
+ Py_INCREF(&StaticArray_Type);
+ PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
+
+ structmodule = PyImport_ImportModule("struct");
+ if (structmodule == NULL)
+ return NULL;
+
+ Struct = PyObject_GetAttrString(structmodule, "Struct");
+ calcsize = PyObject_GetAttrString(structmodule, "calcsize");
+ if (Struct == NULL || calcsize == NULL)
+ return NULL;
+
+ simple_format = PyUnicode_FromString(simple_fmt);
+ if (simple_format == NULL)
+ return NULL;
+
+ PyModule_AddIntConstant(m, "ND_MAX_NDIM", ND_MAX_NDIM);
+ PyModule_AddIntConstant(m, "ND_VAREXPORT", ND_VAREXPORT);
+ PyModule_AddIntConstant(m, "ND_WRITABLE", ND_WRITABLE);
+ PyModule_AddIntConstant(m, "ND_FORTRAN", ND_FORTRAN);
+ PyModule_AddIntConstant(m, "ND_SCALAR", ND_SCALAR);
+ PyModule_AddIntConstant(m, "ND_PIL", ND_PIL);
+ PyModule_AddIntConstant(m, "ND_GETBUF_FAIL", ND_GETBUF_FAIL);
+ PyModule_AddIntConstant(m, "ND_GETBUF_UNDEFINED", ND_GETBUF_UNDEFINED);
+ PyModule_AddIntConstant(m, "ND_REDIRECT", ND_REDIRECT);
+
+ PyModule_AddIntConstant(m, "PyBUF_SIMPLE", PyBUF_SIMPLE);
+ PyModule_AddIntConstant(m, "PyBUF_WRITABLE", PyBUF_WRITABLE);
+ PyModule_AddIntConstant(m, "PyBUF_FORMAT", PyBUF_FORMAT);
+ PyModule_AddIntConstant(m, "PyBUF_ND", PyBUF_ND);
+ PyModule_AddIntConstant(m, "PyBUF_STRIDES", PyBUF_STRIDES);
+ PyModule_AddIntConstant(m, "PyBUF_INDIRECT", PyBUF_INDIRECT);
+ PyModule_AddIntConstant(m, "PyBUF_C_CONTIGUOUS", PyBUF_C_CONTIGUOUS);
+ PyModule_AddIntConstant(m, "PyBUF_F_CONTIGUOUS", PyBUF_F_CONTIGUOUS);
+ PyModule_AddIntConstant(m, "PyBUF_ANY_CONTIGUOUS", PyBUF_ANY_CONTIGUOUS);
+ PyModule_AddIntConstant(m, "PyBUF_FULL", PyBUF_FULL);
+ PyModule_AddIntConstant(m, "PyBUF_FULL_RO", PyBUF_FULL_RO);
+ PyModule_AddIntConstant(m, "PyBUF_RECORDS", PyBUF_RECORDS);
+ PyModule_AddIntConstant(m, "PyBUF_RECORDS_RO", PyBUF_RECORDS_RO);
+ PyModule_AddIntConstant(m, "PyBUF_STRIDED", PyBUF_STRIDED);
+ PyModule_AddIntConstant(m, "PyBUF_STRIDED_RO", PyBUF_STRIDED_RO);
+ PyModule_AddIntConstant(m, "PyBUF_CONTIG", PyBUF_CONTIG);
+ PyModule_AddIntConstant(m, "PyBUF_CONTIG_RO", PyBUF_CONTIG_RO);
+
+ PyModule_AddIntConstant(m, "PyBUF_READ", PyBUF_READ);
+ PyModule_AddIntConstant(m, "PyBUF_WRITE", PyBUF_WRITE);
+
+ return m;
+}
+
+
+
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 94b6e6793a..91f291a011 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -22,14 +22,7 @@ static PyObject *TestError; /* set to exception object in init */
static PyObject *
raiseTestError(const char* test_name, const char* msg)
{
- char buf[2048];
-
- if (strlen(test_name) + strlen(msg) > sizeof(buf) - 50)
- PyErr_SetString(TestError, "internal error msg too large");
- else {
- PyOS_snprintf(buf, sizeof(buf), "%s: %s", test_name, msg);
- PyErr_SetString(TestError, buf);
- }
+ PyErr_Format(TestError, "%s: %s", test_name, msg);
return NULL;
}
@@ -43,11 +36,9 @@ static PyObject*
sizeof_error(const char* fatname, const char* typname,
int expected, int got)
{
- char buf[1024];
- PyOS_snprintf(buf, sizeof(buf),
- "%.200s #define == %d but sizeof(%.200s) == %d",
+ PyErr_Format(TestError,
+ "%s #define == %d but sizeof(%s) == %d",
fatname, expected, typname, got);
- PyErr_SetString(TestError, buf);
return (PyObject*)NULL;
}
@@ -129,7 +120,13 @@ test_dict_inner(int count)
for (i = 0; i < count; i++) {
v = PyLong_FromLong(i);
- PyDict_SetItem(dict, v, v);
+ if (v == NULL) {
+ return -1;
+ }
+ if (PyDict_SetItem(dict, v, v) < 0) {
+ Py_DECREF(v);
+ return -1;
+ }
Py_DECREF(v);
}
@@ -284,95 +281,6 @@ test_lazy_hash_inheritance(PyObject* self)
}
-/* Issue #7385: Check that memoryview() does not crash
- * when bf_getbuffer returns an error
- */
-
-static int
-broken_buffer_getbuffer(PyObject *self, Py_buffer *view, int flags)
-{
- PyErr_SetString(
- TestError,
- "test_broken_memoryview: expected error in bf_getbuffer");
- return -1;
-}
-
-static PyBufferProcs memoryviewtester_as_buffer = {
- (getbufferproc)broken_buffer_getbuffer, /* bf_getbuffer */
- 0, /* bf_releasebuffer */
-};
-
-static PyTypeObject _MemoryViewTester_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "memoryviewtester", /* Name of this type */
- sizeof(PyObject), /* Basic object size */
- 0, /* Item size for varobject */
- (destructor)PyObject_Del, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_compare */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- 0, /* tp_setattro */
- &memoryviewtester_as_buffer, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- 0, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- PyType_GenericNew, /* tp_new */
-};
-
-static PyObject*
-test_broken_memoryview(PyObject* self)
-{
- PyObject *obj = PyObject_New(PyObject, &_MemoryViewTester_Type);
- PyObject *res;
-
- if (obj == NULL) {
- PyErr_Clear();
- PyErr_SetString(
- TestError,
- "test_broken_memoryview: failed to create object");
- return NULL;
- }
-
- res = PyMemoryView_FromObject(obj);
- if (res || !PyErr_Occurred()){
- PyErr_SetString(
- TestError,
- "test_broken_memoryview: memoryview() didn't raise an Exception");
- Py_XDECREF(res);
- Py_DECREF(obj);
- return NULL;
- }
-
- PyErr_Clear();
- Py_DECREF(obj);
- Py_RETURN_NONE;
-}
-
-
/* Tests of PyLong_{As, From}{Unsigned,}Long(), and (#ifdef HAVE_LONG_LONG)
PyLong_{As, From}{Unsigned,}LongLong().
@@ -778,6 +686,68 @@ test_long_long_and_overflow(PyObject *self)
return Py_None;
}
+/* Test the PyLong_As{Size,Ssize}_t API. At present this just tests that
+ non-integer arguments are handled correctly. It should be extended to
+ test overflow handling.
+ */
+
+static PyObject *
+test_long_as_size_t(PyObject *self)
+{
+ size_t out_u;
+ Py_ssize_t out_s;
+
+ Py_INCREF(Py_None);
+
+ out_u = PyLong_AsSize_t(Py_None);
+ if (out_u != (size_t)-1 || !PyErr_Occurred())
+ return raiseTestError("test_long_as_size_t",
+ "PyLong_AsSize_t(None) didn't complain");
+ if (!PyErr_ExceptionMatches(PyExc_TypeError))
+ return raiseTestError("test_long_as_size_t",
+ "PyLong_AsSize_t(None) raised "
+ "something other than TypeError");
+ PyErr_Clear();
+
+ out_s = PyLong_AsSsize_t(Py_None);
+ if (out_s != (Py_ssize_t)-1 || !PyErr_Occurred())
+ return raiseTestError("test_long_as_size_t",
+ "PyLong_AsSsize_t(None) didn't complain");
+ if (!PyErr_ExceptionMatches(PyExc_TypeError))
+ return raiseTestError("test_long_as_size_t",
+ "PyLong_AsSsize_t(None) raised "
+ "something other than TypeError");
+ PyErr_Clear();
+
+ /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
+ return Py_None;
+}
+
+/* Test the PyLong_AsDouble API. At present this just tests that
+ non-integer arguments are handled correctly.
+ */
+
+static PyObject *
+test_long_as_double(PyObject *self)
+{
+ double out;
+
+ Py_INCREF(Py_None);
+
+ out = PyLong_AsDouble(Py_None);
+ if (out != -1.0 || !PyErr_Occurred())
+ return raiseTestError("test_long_as_double",
+ "PyLong_AsDouble(None) didn't complain");
+ if (!PyErr_ExceptionMatches(PyExc_TypeError))
+ return raiseTestError("test_long_as_double",
+ "PyLong_AsDouble(None) raised "
+ "something other than TypeError");
+ PyErr_Clear();
+
+ /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
+ return Py_None;
+}
+
/* Test the L code for PyArg_ParseTuple. This should deliver a PY_LONG_LONG
for both long and int arguments. The test may leak a little memory if
it fails.
@@ -837,7 +807,8 @@ getargs_tuple(PyObject *self, PyObject *args)
}
/* test PyArg_ParseTupleAndKeywords */
-static PyObject *getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
+static PyObject *
+getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
{
static char *keywords[] = {"arg1","arg2","arg3","arg4","arg5", NULL};
static char *fmt="(ii)i|(i(ii))(iii)i";
@@ -852,6 +823,21 @@ static PyObject *getargs_keywords(PyObject *self, PyObject *args, PyObject *kwar
int_args[5], int_args[6], int_args[7], int_args[8], int_args[9]);
}
+/* test PyArg_ParseTupleAndKeywords keyword-only arguments */
+static PyObject *
+getargs_keyword_only(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *keywords[] = {"required", "optional", "keyword_only", NULL};
+ int required = -1;
+ int optional = -1;
+ int keyword_only = -1;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i$i", keywords,
+ &required, &optional, &keyword_only))
+ return NULL;
+ return Py_BuildValue("iii", required, optional, keyword_only);
+}
+
/* Functions to call PyArg_ParseTuple with integer format codes,
and return the result.
*/
@@ -936,6 +922,15 @@ getargs_n(PyObject *self, PyObject *args)
return PyLong_FromSsize_t(value);
}
+static PyObject *
+getargs_p(PyObject *self, PyObject *args)
+{
+ int value;
+ if (!PyArg_ParseTuple(args, "p", &value))
+ return NULL;
+ return PyLong_FromLong(value);
+}
+
#ifdef HAVE_LONG_LONG
static PyObject *
getargs_L(PyObject *self, PyObject *args)
@@ -1012,6 +1007,15 @@ test_k_code(PyObject *self)
}
static PyObject *
+getargs_c(PyObject *self, PyObject *args)
+{
+ char c;
+ if (!PyArg_ParseTuple(args, "c", &c))
+ return NULL;
+ return PyBytes_FromStringAndSize(&c, 1);
+}
+
+static PyObject *
getargs_s(PyObject *self, PyObject *args)
{
char *str;
@@ -1197,50 +1201,72 @@ test_s_code(PyObject *self)
}
static PyObject *
-test_bug_7414(PyObject *self)
+parse_tuple_and_keywords(PyObject *self, PyObject *args)
{
- /* Issue #7414: for PyArg_ParseTupleAndKeywords, 'C' code wasn't being
- skipped properly in skipitem() */
- int a = 0, b = 0, result;
- char *kwlist[] = {"a", "b", NULL};
- PyObject *tuple = NULL, *dict = NULL, *b_str;
+ PyObject *sub_args;
+ PyObject *sub_kwargs;
+ char *sub_format;
+ PyObject *sub_keywords;
- tuple = PyTuple_New(0);
- if (tuple == NULL)
- goto failure;
- dict = PyDict_New();
- if (dict == NULL)
- goto failure;
- b_str = PyUnicode_FromString("b");
- if (b_str == NULL)
- goto failure;
- result = PyDict_SetItemString(dict, "b", b_str);
- Py_DECREF(b_str);
- if (result < 0)
- goto failure;
+ Py_ssize_t i, size;
+ char *keywords[8 + 1]; /* space for NULL at end */
+ PyObject *o;
+ PyObject *converted[8];
+
+ int result;
+ PyObject *return_value = NULL;
- result = PyArg_ParseTupleAndKeywords(tuple, dict, "|CC",
- kwlist, &a, &b);
- if (!result)
- goto failure;
+ double buffers[8][4]; /* double ensures alignment where necessary */
- if (a != 0)
- return raiseTestError("test_bug_7414",
- "C format code not skipped properly");
- if (b != 'b')
- return raiseTestError("test_bug_7414",
- "C format code returned wrong value");
+ if (!PyArg_ParseTuple(args, "OOyO:parse_tuple_and_keywords",
+ &sub_args, &sub_kwargs,
+ &sub_format, &sub_keywords))
+ return NULL;
- Py_DECREF(dict);
- Py_DECREF(tuple);
- Py_RETURN_NONE;
+ if (!(PyList_CheckExact(sub_keywords) || PyTuple_CheckExact(sub_keywords))) {
+ PyErr_SetString(PyExc_ValueError,
+ "parse_tuple_and_keywords: sub_keywords must be either list or tuple");
+ return NULL;
+ }
- failure:
- Py_XDECREF(dict);
- Py_XDECREF(tuple);
- return NULL;
-}
+ memset(buffers, 0, sizeof(buffers));
+ memset(converted, 0, sizeof(converted));
+ memset(keywords, 0, sizeof(keywords));
+
+ size = PySequence_Fast_GET_SIZE(sub_keywords);
+ if (size > 8) {
+ PyErr_SetString(PyExc_ValueError,
+ "parse_tuple_and_keywords: too many keywords in sub_keywords");
+ goto exit;
+ }
+
+ for (i = 0; i < size; i++) {
+ o = PySequence_Fast_GET_ITEM(sub_keywords, i);
+ if (!PyUnicode_FSConverter(o, (void *)(converted + i))) {
+ PyErr_Format(PyExc_ValueError,
+ "parse_tuple_and_keywords: could not convert keywords[%zd] to narrow string", i);
+ goto exit;
+ }
+ keywords[i] = PyBytes_AS_STRING(converted[i]);
+ }
+
+ result = PyArg_ParseTupleAndKeywords(sub_args, sub_kwargs,
+ sub_format, keywords,
+ buffers + 0, buffers + 1, buffers + 2, buffers + 3,
+ buffers + 4, buffers + 5, buffers + 6, buffers + 7);
+ if (result) {
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+ }
+
+exit:
+ size = sizeof(converted) / sizeof(converted[0]);
+ for (i = 0; i < size; i++) {
+ Py_XDECREF(converted[i]);
+ }
+ return return_value;
+}
static volatile int x;
@@ -1293,7 +1319,7 @@ static PyObject *
test_Z_code(PyObject *self)
{
PyObject *tuple, *obj;
- Py_UNICODE *value1, *value2;
+ const Py_UNICODE *value1, *value2;
Py_ssize_t len1, len2;
tuple = PyTuple_New(2);
@@ -1347,6 +1373,7 @@ test_widechar(PyObject *self)
#if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
const wchar_t wtext[2] = {(wchar_t)0x10ABCDu};
size_t wtextlen = 1;
+ const wchar_t invalid[1] = {(wchar_t)0x110000u};
#else
const wchar_t wtext[3] = {(wchar_t)0xDBEAu, (wchar_t)0xDFCDu};
size_t wtextlen = 2;
@@ -1363,7 +1390,7 @@ test_widechar(PyObject *self)
return NULL;
}
- if (PyUnicode_GET_SIZE(wide) != PyUnicode_GET_SIZE(utf8)) {
+ if (PyUnicode_GET_LENGTH(wide) != PyUnicode_GET_LENGTH(utf8)) {
Py_DECREF(wide);
Py_DECREF(utf8);
return raiseTestError("test_widechar",
@@ -1382,6 +1409,23 @@ test_widechar(PyObject *self)
Py_DECREF(wide);
Py_DECREF(utf8);
+
+#if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
+ wide = PyUnicode_FromWideChar(invalid, 1);
+ if (wide == NULL)
+ PyErr_Clear();
+ else
+ return raiseTestError("test_widechar",
+ "PyUnicode_FromWideChar(L\"\\U00110000\", 1) didn't fail");
+
+ wide = PyUnicode_FromUnicode(invalid, 1);
+ if (wide == NULL)
+ PyErr_Clear();
+ else
+ return raiseTestError("test_widechar",
+ "PyUnicode_FromUnicode(L\"\\U00110000\", 1) didn't fail");
+#endif
+
Py_RETURN_NONE;
}
@@ -1483,6 +1527,29 @@ unicode_transformdecimaltoascii(PyObject *self, PyObject *args)
}
static PyObject *
+unicode_legacy_string(PyObject *self, PyObject *args)
+{
+ Py_UNICODE *data;
+ Py_ssize_t len;
+ PyObject *u;
+
+ if (!PyArg_ParseTuple(args, "u#", &data, &len))
+ return NULL;
+
+ u = PyUnicode_FromUnicode(NULL, len);
+ if (u == NULL)
+ return NULL;
+
+ memcpy(PyUnicode_AS_UNICODE(u), data, len * sizeof(Py_UNICODE));
+
+ if (len > 0) { /* The empty string is always ready. */
+ assert(!PyUnicode_IS_READY(u));
+ }
+
+ return u;
+}
+
+static PyObject *
getargs_w_star(PyObject *self, PyObject *args)
{
Py_buffer buffer;
@@ -1568,7 +1635,7 @@ test_long_numbits(PyObject *self)
{-3L, 2, -1},
{4L, 3, 1},
{-4L, 3, -1},
- {0x7fffL, 15, 1}, /* one Python long digit */
+ {0x7fffL, 15, 1}, /* one Python int digit */
{-0x7fffL, 15, -1},
{0xffffL, 16, 1},
{-0xffffL, 16, -1},
@@ -1576,10 +1643,16 @@ test_long_numbits(PyObject *self)
{-0xfffffffL, 28, -1}};
int i;
- for (i = 0; i < sizeof(testcases) / sizeof(struct triple); ++i) {
- PyObject *plong = PyLong_FromLong(testcases[i].input);
- size_t nbits = _PyLong_NumBits(plong);
- int sign = _PyLong_Sign(plong);
+ for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) {
+ size_t nbits;
+ int sign;
+ PyObject *plong;
+
+ plong = PyLong_FromLong(testcases[i].input);
+ if (plong == NULL)
+ return NULL;
+ nbits = _PyLong_NumBits(plong);
+ sign = _PyLong_Sign(plong);
Py_DECREF(plong);
if (nbits != testcases[i].nbits)
@@ -1632,6 +1705,29 @@ raise_exception(PyObject *self, PyObject *args)
return NULL;
}
+static PyObject *
+test_set_exc_info(PyObject *self, PyObject *args)
+{
+ PyObject *orig_exc;
+ PyObject *new_type, *new_value, *new_tb;
+ PyObject *type, *value, *tb;
+ if (!PyArg_ParseTuple(args, "OOO:test_set_exc_info",
+ &new_type, &new_value, &new_tb))
+ return NULL;
+
+ PyErr_GetExcInfo(&type, &value, &tb);
+
+ Py_INCREF(new_type);
+ Py_INCREF(new_value);
+ Py_INCREF(new_tb);
+ PyErr_SetExcInfo(new_type, new_value, new_tb);
+
+ orig_exc = PyTuple_Pack(3, type ? type : Py_None, value ? value : Py_None, tb ? tb : Py_None);
+ Py_XDECREF(type);
+ Py_XDECREF(value);
+ Py_XDECREF(tb);
+ return orig_exc;
+}
static int test_run_counter = 0;
@@ -1786,13 +1882,12 @@ test_string_from_format(PyObject *self, PyObject *args)
{
PyObject *result;
char *msg;
- static const Py_UNICODE one[] = {'1', 0};
#define CHECK_1_FORMAT(FORMAT, TYPE) \
result = PyUnicode_FromFormat(FORMAT, (TYPE)1); \
if (result == NULL) \
return NULL; \
- if (Py_UNICODE_strcmp(PyUnicode_AS_UNICODE(result), one)) { \
+ if (PyUnicode_CompareWithASCIIString(result, "1")) { \
msg = FORMAT " failed at 1"; \
goto Fail; \
} \
@@ -2091,6 +2186,8 @@ profile_int(PyObject *self, PyObject* args)
/* Test 3: Allocate a few integers, then release
them all simultaneously. */
multiple = malloc(sizeof(PyObject*) * 1000);
+ if (multiple == NULL)
+ return PyErr_NoMemory();
gettimeofday(&start, NULL);
for(k=0; k < 20000; k++) {
for(i=0; i < 1000; i++) {
@@ -2102,10 +2199,13 @@ profile_int(PyObject *self, PyObject* args)
}
gettimeofday(&stop, NULL);
print_delta(3, &start, &stop);
+ free(multiple);
/* Test 4: Allocate many integers, then release
them all simultaneously. */
multiple = malloc(sizeof(PyObject*) * 1000000);
+ if (multiple == NULL)
+ return PyErr_NoMemory();
gettimeofday(&start, NULL);
for(k=0; k < 20; k++) {
for(i=0; i < 1000000; i++) {
@@ -2117,9 +2217,12 @@ profile_int(PyObject *self, PyObject* args)
}
gettimeofday(&stop, NULL);
print_delta(4, &start, &stop);
+ free(multiple);
/* Test 5: Allocate many integers < 32000 */
multiple = malloc(sizeof(PyObject*) * 1000000);
+ if (multiple == NULL)
+ return PyErr_NoMemory();
gettimeofday(&start, NULL);
for(k=0; k < 10; k++) {
for(i=0; i < 1000000; i++) {
@@ -2131,6 +2234,7 @@ profile_int(PyObject *self, PyObject* args)
}
gettimeofday(&stop, NULL);
print_delta(5, &start, &stop);
+ free(multiple);
/* Test 6: Perform small int addition */
op1 = PyLong_FromLong(1);
@@ -2145,10 +2249,12 @@ profile_int(PyObject *self, PyObject* args)
/* Test 7: Perform medium int addition */
op1 = PyLong_FromLong(1000);
+ if (op1 == NULL)
+ return NULL;
gettimeofday(&start, NULL);
for(i=0; i < 10000000; i++) {
result = PyNumber_Add(op1, op1);
- Py_DECREF(result);
+ Py_XDECREF(result);
}
gettimeofday(&stop, NULL);
Py_DECREF(op1);
@@ -2317,6 +2423,14 @@ run_in_subinterp(PyObject *self, PyObject *args)
PyThreadState_Swap(NULL);
substate = Py_NewInterpreter();
+ if (substate == NULL) {
+ /* Since no new thread state was created, there is no exception to
+ propagate; raise a fresh one after swapping in the old thread
+ state. */
+ PyThreadState_Swap(mainstate);
+ PyErr_SetString(PyExc_RuntimeError, "sub-interpreter creation failed");
+ return NULL;
+ }
r = PyRun_SimpleString(code);
Py_EndInterpreter(substate);
@@ -2325,6 +2439,133 @@ run_in_subinterp(PyObject *self, PyObject *args)
return PyLong_FromLong(r);
}
+static PyObject *
+test_pytime_object_to_time_t(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ time_t sec;
+ if (!PyArg_ParseTuple(args, "O:pytime_object_to_time_t", &obj))
+ return NULL;
+ if (_PyTime_ObjectToTime_t(obj, &sec) == -1)
+ return NULL;
+ return _PyLong_FromTime_t(sec);
+}
+
+static PyObject *
+test_pytime_object_to_timeval(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ time_t sec;
+ long usec;
+ if (!PyArg_ParseTuple(args, "O:pytime_object_to_timeval", &obj))
+ return NULL;
+ if (_PyTime_ObjectToTimeval(obj, &sec, &usec) == -1)
+ return NULL;
+ return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), usec);
+}
+
+static PyObject *
+test_pytime_object_to_timespec(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ time_t sec;
+ long nsec;
+ if (!PyArg_ParseTuple(args, "O:pytime_object_to_timespec", &obj))
+ return NULL;
+ if (_PyTime_ObjectToTimespec(obj, &sec, &nsec) == -1)
+ return NULL;
+ return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), nsec);
+}
+
+#ifdef WITH_THREAD
+typedef struct {
+ PyThread_type_lock start_event;
+ PyThread_type_lock exit_event;
+ PyObject *callback;
+} test_c_thread_t;
+
+static void
+temporary_c_thread(void *data)
+{
+ test_c_thread_t *test_c_thread = data;
+ PyGILState_STATE state;
+ PyObject *res;
+
+ PyThread_release_lock(test_c_thread->start_event);
+
+ /* Allocate a Python thread state for this thread */
+ state = PyGILState_Ensure();
+
+ res = PyObject_CallFunction(test_c_thread->callback, "", NULL);
+ Py_CLEAR(test_c_thread->callback);
+
+ if (res == NULL) {
+ PyErr_Print();
+ }
+ else {
+ Py_DECREF(res);
+ }
+
+ /* Destroy the Python thread state for this thread */
+ PyGILState_Release(state);
+
+ PyThread_release_lock(test_c_thread->exit_event);
+
+ PyThread_exit_thread();
+}
+
+static PyObject *
+call_in_temporary_c_thread(PyObject *self, PyObject *callback)
+{
+ PyObject *res = NULL;
+ test_c_thread_t test_c_thread;
+ long thread;
+
+ PyEval_InitThreads();
+
+ test_c_thread.start_event = PyThread_allocate_lock();
+ test_c_thread.exit_event = PyThread_allocate_lock();
+ test_c_thread.callback = NULL;
+ if (!test_c_thread.start_event || !test_c_thread.exit_event) {
+ PyErr_SetString(PyExc_RuntimeError, "could not allocate lock");
+ goto exit;
+ }
+
+ Py_INCREF(callback);
+ test_c_thread.callback = callback;
+
+ PyThread_acquire_lock(test_c_thread.start_event, 1);
+ PyThread_acquire_lock(test_c_thread.exit_event, 1);
+
+ thread = PyThread_start_new_thread(temporary_c_thread, &test_c_thread);
+ if (thread == -1) {
+ PyErr_SetString(PyExc_RuntimeError, "unable to start the thread");
+ PyThread_release_lock(test_c_thread.start_event);
+ PyThread_release_lock(test_c_thread.exit_event);
+ goto exit;
+ }
+
+ PyThread_acquire_lock(test_c_thread.start_event, 1);
+ PyThread_release_lock(test_c_thread.start_event);
+
+ Py_BEGIN_ALLOW_THREADS
+ PyThread_acquire_lock(test_c_thread.exit_event, 1);
+ PyThread_release_lock(test_c_thread.exit_event);
+ Py_END_ALLOW_THREADS
+
+ Py_INCREF(Py_None);
+ res = Py_None;
+
+exit:
+ Py_CLEAR(test_c_thread.callback);
+ if (test_c_thread.start_event)
+ PyThread_free_lock(test_c_thread.start_event);
+ if (test_c_thread.exit_event)
+ PyThread_free_lock(test_c_thread.exit_event);
+ return res;
+}
+#endif /* WITH_THREAD */
+
static PyMethodDef TestMethods[] = {
{"raise_exception", raise_exception, METH_VARARGS},
@@ -2334,14 +2575,15 @@ static PyMethodDef TestMethods[] = {
{"test_list_api", (PyCFunction)test_list_api, METH_NOARGS},
{"test_dict_iteration", (PyCFunction)test_dict_iteration,METH_NOARGS},
{"test_lazy_hash_inheritance", (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS},
- {"test_broken_memoryview", (PyCFunction)test_broken_memoryview,METH_NOARGS},
{"test_long_api", (PyCFunction)test_long_api, METH_NOARGS},
{"test_long_and_overflow", (PyCFunction)test_long_and_overflow,
METH_NOARGS},
+ {"test_long_as_double", (PyCFunction)test_long_as_double,METH_NOARGS},
+ {"test_long_as_size_t", (PyCFunction)test_long_as_size_t,METH_NOARGS},
{"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
{"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
- {"test_bug_7414", (PyCFunction)test_bug_7414, METH_NOARGS},
+ {"parse_tuple_and_keywords", parse_tuple_and_keywords, METH_VARARGS},
{"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
{"test_string_from_format", (PyCFunction)test_string_from_format, METH_NOARGS},
{"test_with_docstring", (PyCFunction)test_with_docstring, METH_NOARGS,
@@ -2352,6 +2594,8 @@ static PyMethodDef TestMethods[] = {
{"getargs_tuple", getargs_tuple, METH_VARARGS},
{"getargs_keywords", (PyCFunction)getargs_keywords,
METH_VARARGS|METH_KEYWORDS},
+ {"getargs_keyword_only", (PyCFunction)getargs_keyword_only,
+ METH_VARARGS|METH_KEYWORDS},
{"getargs_b", getargs_b, METH_VARARGS},
{"getargs_B", getargs_B, METH_VARARGS},
{"getargs_h", getargs_h, METH_VARARGS},
@@ -2361,6 +2605,7 @@ static PyMethodDef TestMethods[] = {
{"getargs_i", getargs_i, METH_VARARGS},
{"getargs_l", getargs_l, METH_VARARGS},
{"getargs_n", getargs_n, METH_VARARGS},
+ {"getargs_p", getargs_p, METH_VARARGS},
#ifdef HAVE_LONG_LONG
{"getargs_L", getargs_L, METH_VARARGS},
{"getargs_K", getargs_K, METH_VARARGS},
@@ -2369,6 +2614,7 @@ static PyMethodDef TestMethods[] = {
(PyCFunction)test_long_long_and_overflow, METH_NOARGS},
{"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
#endif
+ {"getargs_c", getargs_c, METH_VARARGS},
{"getargs_s", getargs_s, METH_VARARGS},
{"getargs_s_star", getargs_s_star, METH_VARARGS},
{"getargs_s_hash", getargs_s_hash, METH_VARARGS},
@@ -2395,6 +2641,7 @@ static PyMethodDef TestMethods[] = {
{"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS},
{"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS},
{"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS},
+ {"unicode_legacy_string", unicode_legacy_string, METH_VARARGS},
#ifdef WITH_THREAD
{"_test_thread_state", test_thread_state, METH_VARARGS},
{"_pending_threadfunc", pending_threadfunc, METH_VARARGS},
@@ -2404,6 +2651,7 @@ static PyMethodDef TestMethods[] = {
#endif
{"traceback_print", traceback_print, METH_VARARGS},
{"exception_print", exception_print, METH_VARARGS},
+ {"set_exc_info", test_set_exc_info, METH_VARARGS},
{"argparsing", argparsing, METH_VARARGS},
{"code_newempty", code_newempty, METH_VARARGS},
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
@@ -2412,6 +2660,13 @@ static PyMethodDef TestMethods[] = {
METH_NOARGS},
{"crash_no_current_thread", (PyCFunction)crash_no_current_thread, METH_NOARGS},
{"run_in_subinterp", run_in_subinterp, METH_VARARGS},
+ {"pytime_object_to_time_t", test_pytime_object_to_time_t, METH_VARARGS},
+ {"pytime_object_to_timeval", test_pytime_object_to_timeval, METH_VARARGS},
+ {"pytime_object_to_timespec", test_pytime_object_to_timespec, METH_VARARGS},
+#ifdef WITH_THREAD
+ {"call_in_temporary_c_thread", call_in_temporary_c_thread, METH_O,
+ PyDoc_STR("set_error_class(error_class) -> None")},
+#endif
{NULL, NULL} /* sentinel */
};
@@ -2594,7 +2849,6 @@ PyInit__testcapi(void)
return NULL;
Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
- Py_TYPE(&_MemoryViewTester_Type)=&PyType_Type;
Py_TYPE(&test_structmembersType)=&PyType_Type;
Py_INCREF(&test_structmembersType);
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index 4f8ec2d82e..d1dc61d0b1 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -23,6 +23,7 @@ typedef struct {
PyObject_HEAD
PyThread_type_lock lock_lock;
PyObject *in_weakreflist;
+ char locked; /* for sanity checking */
} lockobject;
static void
@@ -32,9 +33,8 @@ lock_dealloc(lockobject *self)
PyObject_ClearWeakRefs((PyObject *) self);
if (self->lock_lock != NULL) {
/* Unlock the lock so it's safe to free it */
- PyThread_acquire_lock(self->lock_lock, 0);
- PyThread_release_lock(self->lock_lock);
-
+ if (self->locked)
+ PyThread_release_lock(self->lock_lock);
PyThread_free_lock(self->lock_lock);
}
PyObject_Del(self);
@@ -53,6 +53,7 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds)
_PyTime_timeval curtime;
_PyTime_timeval endtime;
+
if (microseconds > 0) {
_PyTime_gettimeofday(&endtime);
endtime.tv_sec += microseconds / (1000 * 1000);
@@ -61,9 +62,13 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds)
do {
- Py_BEGIN_ALLOW_THREADS
- r = PyThread_acquire_lock_timed(lock, microseconds, 1);
- Py_END_ALLOW_THREADS
+ /* first a simple non-blocking try without releasing the GIL */
+ r = PyThread_acquire_lock_timed(lock, 0, 0);
+ if (r == PY_LOCK_FAILURE && microseconds != 0) {
+ Py_BEGIN_ALLOW_THREADS
+ r = PyThread_acquire_lock_timed(lock, microseconds, 1);
+ Py_END_ALLOW_THREADS
+ }
if (r == PY_LOCK_INTR) {
/* Run signal handlers if we were interrupted. Propagate
@@ -75,7 +80,7 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds)
/* If we're using a timeout, recompute the timeout after processing
* signals, since those can take time. */
- if (microseconds >= 0) {
+ if (microseconds > 0) {
_PyTime_gettimeofday(&curtime);
microseconds = ((endtime.tv_sec - curtime.tv_sec) * 1000000 +
(endtime.tv_usec - curtime.tv_usec));
@@ -134,6 +139,8 @@ lock_PyThread_acquire_lock(lockobject *self, PyObject *args, PyObject *kwds)
return NULL;
}
+ if (r == PY_LOCK_ACQUIRED)
+ self->locked = 1;
return PyBool_FromLong(r == PY_LOCK_ACQUIRED);
}
@@ -152,13 +159,13 @@ static PyObject *
lock_PyThread_release_lock(lockobject *self)
{
/* Sanity check: the lock must be locked */
- if (PyThread_acquire_lock(self->lock_lock, 0)) {
- PyThread_release_lock(self->lock_lock);
+ if (!self->locked) {
PyErr_SetString(ThreadError, "release unlocked lock");
return NULL;
}
PyThread_release_lock(self->lock_lock);
+ self->locked = 0;
Py_INCREF(Py_None);
return Py_None;
}
@@ -174,11 +181,7 @@ but it needn't be locked by the same thread that unlocks it.");
static PyObject *
lock_locked_lock(lockobject *self)
{
- if (PyThread_acquire_lock(self->lock_lock, 0)) {
- PyThread_release_lock(self->lock_lock);
- return PyBool_FromLong(0L);
- }
- return PyBool_FromLong(1L);
+ return PyBool_FromLong((long)self->locked);
}
PyDoc_STRVAR(locked_doc,
@@ -312,14 +315,7 @@ rlock_acquire(rlockobject *self, PyObject *args, PyObject *kwds)
self->rlock_count = count;
Py_RETURN_TRUE;
}
-
- if (self->rlock_count > 0 ||
- !PyThread_acquire_lock(self->rlock_lock, 0)) {
- if (microseconds == 0) {
- Py_RETURN_FALSE;
- }
- r = acquire_timed(self->rlock_lock, microseconds);
- }
+ r = acquire_timed(self->rlock_lock, microseconds);
if (r == PY_LOCK_ACQUIRED) {
assert(self->rlock_count == 0);
self->rlock_owner = tid;
@@ -413,6 +409,12 @@ rlock_release_save(rlockobject *self)
long owner;
unsigned long count;
+ if (self->rlock_count == 0) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "cannot release un-acquired lock");
+ return NULL;
+ }
+
owner = self->rlock_owner;
count = self->rlock_count;
self->rlock_count = 0;
@@ -541,6 +543,7 @@ newlockobject(void)
if (self == NULL)
return NULL;
self->lock_lock = PyThread_allocate_lock();
+ self->locked = 0;
self->in_weakreflist = NULL;
if (self->lock_lock == NULL) {
Py_DECREF(self);
@@ -1225,11 +1228,9 @@ the suggested approach in the absence of more specific information).");
static PyMethodDef thread_methods[] = {
{"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread,
- METH_VARARGS,
- start_new_doc},
+ METH_VARARGS, start_new_doc},
{"start_new", (PyCFunction)thread_PyThread_start_new_thread,
- METH_VARARGS,
- start_new_doc},
+ METH_VARARGS, start_new_doc},
{"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock,
METH_NOARGS, allocate_doc},
{"allocate", (PyCFunction)thread_PyThread_allocate_lock,
@@ -1245,8 +1246,7 @@ static PyMethodDef thread_methods[] = {
{"_count", (PyCFunction)thread__count,
METH_NOARGS, _count_doc},
{"stack_size", (PyCFunction)thread_stack_size,
- METH_VARARGS,
- stack_size_doc},
+ METH_VARARGS, stack_size_doc},
{NULL, NULL} /* sentinel */
};
@@ -1310,7 +1310,9 @@ PyInit__thread(void)
/* Add a symbolic constant */
d = PyModule_GetDict(m);
- ThreadError = PyErr_NewException("_thread.error", NULL, NULL);
+ ThreadError = PyExc_RuntimeError;
+ Py_INCREF(ThreadError);
+
PyDict_SetItemString(d, "error", ThreadError);
Locktype.tp_doc = lock_doc;
Py_INCREF(&Locktype);
diff --git a/Modules/_time.c b/Modules/_time.c
deleted file mode 100644
index 10cc8e12a6..0000000000
--- a/Modules/_time.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Python.h"
-#include "_time.h"
-
-/* Exposed in timefuncs.h. */
-time_t
-_PyTime_DoubleToTimet(double x)
-{
- time_t result;
- double diff;
-
- result = (time_t)x;
- /* How much info did we lose? time_t may be an integral or
- * floating type, and we don't know which. If it's integral,
- * we don't know whether C truncates, rounds, returns the floor,
- * etc. If we lost a second or more, the C rounding is
- * unreasonable, or the input just doesn't fit in a time_t;
- * call it an error regardless. Note that the original cast to
- * time_t can cause a C error too, but nothing we can do to
- * work around that.
- */
- diff = x - (double)result;
- if (diff <= -1.0 || diff >= 1.0) {
- PyErr_SetString(PyExc_ValueError,
- "timestamp out of range for platform time_t");
- result = (time_t)-1;
- }
- return result;
-}
diff --git a/Modules/_time.h b/Modules/_time.h
deleted file mode 100644
index 816593b03f..0000000000
--- a/Modules/_time.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* XXX: It is probably best to move timefuncs.h content in here, and
- remove it but user code may rely on it. */
-#include "timefuncs.h"
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index c6a3e388ef..262d679055 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -33,19 +33,8 @@ Copyright (C) 1994 Steen Lumholt.
#include <windows.h>
#endif
-/* Allow using this code in Python 2.[12] */
-#ifndef PyDoc_STRVAR
-#define PyDoc_STRVAR(name,str) static char name[] = str
-#endif
-
-#ifndef PyMODINIT_FUNC
-#define PyMODINIT_FUNC void
-#endif
-
-#ifndef PyBool_Check
-#define PyBool_Check(o) 0
-#define PyBool_FromLong PyLong_FromLong
-#endif
+#define CHECK_SIZE(size, elemsize) \
+ ((size_t)(size) <= Py_MAX((size_t)INT_MAX, UINT_MAX / (size_t)(elemsize)))
/* Starting with Tcl 8.4, many APIs offer const-correctness. Unfortunately,
making _tkinter correct for this API means to break earlier
@@ -80,18 +69,6 @@ Copyright (C) 1994 Steen Lumholt.
#error "Tk older than 8.3.1 not supported"
#endif
-/* Unicode conversion assumes that Tcl_UniChar is two bytes.
- We cannot test this directly, so we test UTF-8 size instead,
- expecting that TCL_UTF_MAX is changed if Tcl ever supports
- either UTF-16 or UCS-4.
- Redhat 8 sets TCL_UTF_MAX to 6, and uses wchar_t for
- Tcl_Unichar. This is also ok as long as Python uses UCS-4,
- as well.
-*/
-#if TCL_UTF_MAX != 3 && !(defined(Py_UNICODE_WIDE) && TCL_UTF_MAX==6)
-#error "unsupported Tcl configuration"
-#endif
-
#if !(defined(MS_WINDOWS) || defined(__CYGWIN__))
#define HAVE_CREATEFILEHANDLER
#endif
@@ -340,17 +317,8 @@ AsString(PyObject *value, PyObject *tmp)
{
if (PyBytes_Check(value))
return PyBytes_AsString(value);
- else if (PyUnicode_Check(value)) {
- PyObject *v = PyUnicode_AsUTF8String(value);
- if (v == NULL)
- return NULL;
- if (PyList_Append(tmp, v) != 0) {
- Py_DECREF(v);
- return NULL;
- }
- Py_DECREF(v);
- return PyBytes_AsString(v);
- }
+ else if (PyUnicode_Check(value))
+ return PyUnicode_AsUTF8(value);
else {
PyObject *v = PyObject_Str(value);
if (v == NULL)
@@ -360,7 +328,7 @@ AsString(PyObject *value, PyObject *tmp)
return NULL;
}
Py_DECREF(v);
- return PyBytes_AsString(v);
+ return PyUnicode_AsUTF8(v);
}
}
@@ -376,7 +344,7 @@ Merge(PyObject *args)
char **argv = NULL;
int fvStore[ARGSZ];
int *fv = NULL;
- int argc = 0, fvc = 0, i;
+ Py_ssize_t argc = 0, fvc = 0, i;
char *res = NULL;
if (!(tmp = PyList_New(0)))
@@ -398,8 +366,12 @@ Merge(PyObject *args)
argc = PyTuple_Size(args);
if (argc > ARGSZ) {
- argv = (char **)ckalloc(argc * sizeof(char *));
- fv = (int *)ckalloc(argc * sizeof(int));
+ if (!CHECK_SIZE(argc, sizeof(char *))) {
+ PyErr_SetString(PyExc_OverflowError, "tuple is too long");
+ goto finally;
+ }
+ argv = (char **)ckalloc((size_t)argc * sizeof(char *));
+ fv = (int *)ckalloc((size_t)argc * sizeof(int));
if (argv == NULL || fv == NULL) {
PyErr_NoMemory();
goto finally;
@@ -447,6 +419,51 @@ Merge(PyObject *args)
static PyObject *
+unicodeFromTclStringAndSize(const char *s, Py_ssize_t size)
+{
+ PyObject *r = PyUnicode_DecodeUTF8(s, size, NULL);
+ if (!r && PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
+ /* Tcl encodes null character as \xc0\x80 */
+ if (memchr(s, '\xc0', size)) {
+ char *buf, *q;
+ const char *e = s + size;
+ PyErr_Clear();
+ q = buf = (char *)PyMem_Malloc(size);
+ if (buf == NULL)
+ return NULL;
+ while (s != e) {
+ if (s + 1 != e && s[0] == '\xc0' && s[1] == '\x80') {
+ *q++ = '\0';
+ s += 2;
+ }
+ else
+ *q++ = *s++;
+ }
+ s = buf;
+ size = q - s;
+ r = PyUnicode_DecodeUTF8(s, size, NULL);
+ PyMem_Free(buf);
+ }
+ }
+ return r;
+}
+
+static PyObject *
+unicodeFromTclString(const char *s)
+{
+ return unicodeFromTclStringAndSize(s, strlen(s));
+}
+
+static PyObject *
+unicodeFromTclObj(Tcl_Obj *value)
+{
+ int len;
+ char *s = Tcl_GetStringFromObj(value, &len);
+ return unicodeFromTclStringAndSize(s, len);
+}
+
+
+static PyObject *
Split(char *list)
{
int argc;
@@ -463,13 +480,13 @@ Split(char *list)
* Could be a quoted string containing funnies, e.g. {"}.
* Return the string itself.
*/
- return PyUnicode_FromString(list);
+ return unicodeFromTclString(list);
}
if (argc == 0)
v = PyUnicode_FromString("");
else if (argc == 1)
- v = PyUnicode_FromString(argv[0]);
+ v = unicodeFromTclString(argv[0]);
else if ((v = PyTuple_New(argc)) != NULL) {
int i;
PyObject *w;
@@ -531,6 +548,21 @@ SplitObj(PyObject *arg)
return result;
/* Fall through, returning arg. */
}
+ else if (PyUnicode_Check(arg)) {
+ int argc;
+ char **argv;
+ char *list = PyUnicode_AsUTF8(arg);
+
+ if (list == NULL ||
+ Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) {
+ Py_INCREF(arg);
+ return arg;
+ }
+ Tcl_Free(FREECAST argv);
+ if (argc > 1)
+ return Split(list);
+ /* Fall through, returning arg. */
+ }
else if (PyBytes_Check(arg)) {
int argc;
char **argv;
@@ -793,11 +825,8 @@ PyDoc_STRVAR(PyTclObject_string__doc__,
static PyObject *
PyTclObject_string(PyTclObject *self, void *ignored)
{
- char *s;
- int len;
if (!self->string) {
- s = Tcl_GetStringFromObj(self->value, &len);
- self->string = PyUnicode_FromStringAndSize(s, len);
+ self->string = unicodeFromTclObj(self->value);
if (!self->string)
return NULL;
}
@@ -808,15 +837,12 @@ PyTclObject_string(PyTclObject *self, void *ignored)
static PyObject *
PyTclObject_str(PyTclObject *self, void *ignored)
{
- char *s;
- int len;
- if (self->string && PyUnicode_Check(self->string)) {
+ if (self->string) {
Py_INCREF(self->string);
return self->string;
}
/* XXX Could chache result if it is non-ASCII. */
- s = Tcl_GetStringFromObj(self->value, &len);
- return PyUnicode_DecodeUTF8(s, len, "strict");
+ return unicodeFromTclObj(self->value);
}
static PyObject *
@@ -886,7 +912,7 @@ PyDoc_STRVAR(get_typename__doc__, "name of the Tcl type");
static PyObject*
get_typename(PyTclObject* obj, void* ignored)
{
- return PyUnicode_FromString(obj->value->typePtr->name);
+ return unicodeFromTclString(obj->value->typePtr->name);
}
@@ -963,52 +989,70 @@ AsObj(PyObject *value)
else if (PyFloat_Check(value))
return Tcl_NewDoubleObj(PyFloat_AS_DOUBLE(value));
else if (PyTuple_Check(value)) {
- Tcl_Obj **argv = (Tcl_Obj**)
- ckalloc(PyTuple_Size(value)*sizeof(Tcl_Obj*));
- int i;
+ Tcl_Obj **argv;
+ Py_ssize_t size, i;
+
+ size = PyTuple_Size(value);
+ if (!CHECK_SIZE(size, sizeof(Tcl_Obj *))) {
+ PyErr_SetString(PyExc_OverflowError, "tuple is too long");
+ return NULL;
+ }
+ argv = (Tcl_Obj **) ckalloc(((size_t)size) * sizeof(Tcl_Obj *));
if(!argv)
return 0;
- for(i=0;i<PyTuple_Size(value);i++)
+ for (i = 0; i < size; i++)
argv[i] = AsObj(PyTuple_GetItem(value,i));
result = Tcl_NewListObj(PyTuple_Size(value), argv);
ckfree(FREECAST argv);
return result;
}
else if (PyUnicode_Check(value)) {
- Py_UNICODE *inbuf = PyUnicode_AS_UNICODE(value);
- Py_ssize_t size = PyUnicode_GET_SIZE(value);
- /* This #ifdef assumes that Tcl uses UCS-2.
- See TCL_UTF_MAX test above. */
-#if defined(Py_UNICODE_WIDE) && TCL_UTF_MAX == 3
+ void *inbuf;
+ Py_ssize_t size;
+ int kind;
Tcl_UniChar *outbuf = NULL;
Py_ssize_t i;
- size_t allocsize = ((size_t)size) * sizeof(Tcl_UniChar);
- if (allocsize >= size)
- outbuf = (Tcl_UniChar*)ckalloc(allocsize);
+ size_t allocsize;
+
+ if (PyUnicode_READY(value) == -1)
+ return NULL;
+
+ inbuf = PyUnicode_DATA(value);
+ size = PyUnicode_GET_LENGTH(value);
+ if (!CHECK_SIZE(size, sizeof(Tcl_UniChar))) {
+ PyErr_SetString(PyExc_OverflowError, "string is too long");
+ return NULL;
+ }
+ kind = PyUnicode_KIND(value);
+ if (kind == sizeof(Tcl_UniChar))
+ return Tcl_NewUnicodeObj(inbuf, size);
+ allocsize = ((size_t)size) * sizeof(Tcl_UniChar);
+ outbuf = (Tcl_UniChar*)ckalloc(allocsize);
/* Else overflow occurred, and we take the next exit */
if (!outbuf) {
PyErr_NoMemory();
return NULL;
}
for (i = 0; i < size; i++) {
- if (inbuf[i] >= 0x10000) {
+ Py_UCS4 ch = PyUnicode_READ(kind, inbuf, i);
+ /* We cannot test for sizeof(Tcl_UniChar) directly,
+ so we test for UTF-8 size instead. */
+#if TCL_UTF_MAX == 3
+ if (ch >= 0x10000) {
/* Tcl doesn't do UTF-16, yet. */
PyErr_Format(Tkinter_TclError,
"character U+%x is above the range "
"(U+0000-U+FFFF) allowed by Tcl",
- inbuf[i]);
+ ch);
ckfree(FREECAST outbuf);
return NULL;
}
- outbuf[i] = inbuf[i];
+#endif
+ outbuf[i] = ch;
}
result = Tcl_NewUnicodeObj(outbuf, size);
ckfree(FREECAST outbuf);
return result;
-#else
- return Tcl_NewUnicodeObj(inbuf, size);
-#endif
-
}
else if(PyTclObject_Check(value)) {
Tcl_Obj *v = ((PyTclObject*)value)->value;
@@ -1032,8 +1076,7 @@ FromObj(PyObject* tkapp, Tcl_Obj *value)
TkappObject *app = (TkappObject*)tkapp;
if (value->typePtr == NULL) {
- return PyUnicode_FromStringAndSize(value->bytes,
- value->length);
+ return unicodeFromTclStringAndSize(value->bytes, value->length);
}
if (value->typePtr == app->BooleanType) {
@@ -1090,25 +1133,9 @@ FromObj(PyObject* tkapp, Tcl_Obj *value)
}
if (value->typePtr == app->StringType) {
-#if defined(Py_UNICODE_WIDE) && TCL_UTF_MAX==3
- PyObject *result;
- int size;
- Tcl_UniChar *input;
- Py_UNICODE *output;
-
- size = Tcl_GetCharLength(value);
- result = PyUnicode_FromUnicode(NULL, size);
- if (!result)
- return NULL;
- input = Tcl_GetUnicode(value);
- output = PyUnicode_AS_UNICODE(result);
- while (size--)
- *output++ = *input++;
- return result;
-#else
- return PyUnicode_FromUnicode(Tcl_GetUnicode(value),
- Tcl_GetCharLength(value));
-#endif
+ return PyUnicode_FromKindAndData(
+ sizeof(Tcl_UniChar), Tcl_GetUnicode(value),
+ Tcl_GetCharLength(value));
}
return newPyTclObject(value);
@@ -1146,7 +1173,7 @@ static Tcl_Obj**
Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc)
{
Tcl_Obj **objv = objStore;
- int objc = 0, i;
+ Py_ssize_t objc = 0, i;
if (args == NULL)
/* do nothing */;
@@ -1161,7 +1188,11 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc)
objc = PyTuple_Size(args);
if (objc > ARGSZ) {
- objv = (Tcl_Obj **)ckalloc(objc * sizeof(char *));
+ if (!CHECK_SIZE(objc, sizeof(Tcl_Obj *))) {
+ PyErr_SetString(PyExc_OverflowError, "tuple is too long");
+ return NULL;
+ }
+ objv = (Tcl_Obj **)ckalloc(((size_t)objc) * sizeof(Tcl_Obj *));
if (objv == NULL) {
PyErr_NoMemory();
objc = 0;
@@ -1198,8 +1229,8 @@ static PyObject*
Tkapp_CallResult(TkappObject *self)
{
PyObject *res = NULL;
+ Tcl_Obj *value = Tcl_GetObjResult(self->interp);
if(self->wantobjects) {
- Tcl_Obj *value = Tcl_GetObjResult(self->interp);
/* Not sure whether the IncrRef is necessary, but something
may overwrite the interpreter result while we are
converting it. */
@@ -1207,10 +1238,7 @@ Tkapp_CallResult(TkappObject *self)
res = FromObj((PyObject*)self, value);
Tcl_DecrRefCount(value);
} else {
- const char *s = Tcl_GetStringResult(self->interp);
- const char *p = s;
-
- res = PyUnicode_FromStringAndSize(s, (int)(p-s));
+ res = unicodeFromTclObj(value);
}
return res;
}
@@ -1359,6 +1387,11 @@ Tkapp_GlobalCall(PyObject *self, PyObject *args)
char *cmd;
PyObject *res = NULL;
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "globalcall is deprecated and will be removed in 3.4",
+ 1) < 0)
+ return 0;
+
CHECK_TCL_APPARTMENT;
cmd = Merge(args);
@@ -1396,7 +1429,7 @@ Tkapp_Eval(PyObject *self, PyObject *args)
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyUnicode_FromString(Tkapp_Result(self));
+ res = unicodeFromTclString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1408,6 +1441,11 @@ Tkapp_GlobalEval(PyObject *self, PyObject *args)
PyObject *res = NULL;
int err;
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "globaleval is deprecated and will be removed in 3.4",
+ 1) < 0)
+ return 0;
+
if (!PyArg_ParseTuple(args, "s:globaleval", &script))
return NULL;
@@ -1441,9 +1479,8 @@ Tkapp_EvalFile(PyObject *self, PyObject *args)
ENTER_OVERLAP
if (err == TCL_ERROR)
res = Tkinter_Error(self);
-
else
- res = PyUnicode_FromString(Tkapp_Result(self));
+ res = unicodeFromTclString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1466,7 +1503,7 @@ Tkapp_Record(PyObject *self, PyObject *args)
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyUnicode_FromString(Tkapp_Result(self));
+ res = unicodeFromTclString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1513,20 +1550,45 @@ typedef struct VarEvent {
static int
varname_converter(PyObject *in, void *_out)
{
+ char *s;
char **out = (char**)_out;
if (PyBytes_Check(in)) {
- *out = PyBytes_AsString(in);
+ if (PyBytes_Size(in) > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "bytes object is too long");
+ return 0;
+ }
+ s = PyBytes_AsString(in);
+ if (strlen(s) != PyBytes_Size(in)) {
+ PyErr_SetString(PyExc_ValueError, "null byte in bytes object");
+ return 0;
+ }
+ *out = s;
return 1;
}
if (PyUnicode_Check(in)) {
- *out = _PyUnicode_AsString(in);
+ Py_ssize_t size;
+ s = PyUnicode_AsUTF8AndSize(in, &size);
+ if (s == NULL) {
+ return 0;
+ }
+ if (size > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "string is too long");
+ return 0;
+ }
+ if (strlen(s) != size) {
+ PyErr_SetString(PyExc_ValueError, "null character in string");
+ return 0;
+ }
+ *out = s;
return 1;
}
if (PyTclObject_Check(in)) {
*out = PyTclObject_TclString(in);
return 1;
}
- /* XXX: Should give diagnostics. */
+ PyErr_Format(PyExc_TypeError,
+ "must be str, bytes or Tcl_Obj, not %.50s",
+ in->ob_type->tp_name);
return 0;
}
@@ -1612,8 +1674,11 @@ SetVar(PyObject *self, PyObject *args, int flags)
PyObject *res = NULL;
Tcl_Obj *newval, *ok;
- if (PyArg_ParseTuple(args, "O&O:setvar",
- varname_converter, &name1, &newValue)) {
+ switch (PyTuple_GET_SIZE(args)) {
+ case 2:
+ if (!PyArg_ParseTuple(args, "O&O:setvar",
+ varname_converter, &name1, &newValue))
+ return NULL;
/* XXX Acquire tcl lock??? */
newval = AsObj(newValue);
if (newval == NULL)
@@ -1629,27 +1694,27 @@ SetVar(PyObject *self, PyObject *args, int flags)
Py_INCREF(res);
}
LEAVE_OVERLAP_TCL
- }
- else {
- PyErr_Clear();
- if (PyArg_ParseTuple(args, "ssO:setvar",
- &name1, &name2, &newValue)) {
- /* XXX must hold tcl lock already??? */
- newval = AsObj(newValue);
- ENTER_TCL
- ok = Tcl_SetVar2Ex(Tkapp_Interp(self), name1, name2, newval, flags);
- ENTER_OVERLAP
- if (!ok)
- Tkinter_Error(self);
- else {
- res = Py_None;
- Py_INCREF(res);
- }
- LEAVE_OVERLAP_TCL
- }
- else {
+ break;
+ case 3:
+ if (!PyArg_ParseTuple(args, "ssO:setvar",
+ &name1, &name2, &newValue))
return NULL;
+ /* XXX must hold tcl lock already??? */
+ newval = AsObj(newValue);
+ ENTER_TCL
+ ok = Tcl_SetVar2Ex(Tkapp_Interp(self), name1, name2, newval, flags);
+ ENTER_OVERLAP
+ if (!ok)
+ Tkinter_Error(self);
+ else {
+ res = Py_None;
+ Py_INCREF(res);
}
+ LEAVE_OVERLAP_TCL
+ break;
+ default:
+ PyErr_SetString(PyExc_TypeError, "setvar requires 2 to 3 arguments");
+ return NULL;
}
return res;
}
@@ -1689,7 +1754,7 @@ GetVar(PyObject *self, PyObject *args, int flags)
res = FromObj(self, tres);
}
else {
- res = PyUnicode_FromString(Tcl_GetString(tres));
+ res = unicodeFromTclObj(tres);
}
}
LEAVE_OVERLAP_TCL
@@ -1827,7 +1892,7 @@ Tkapp_ExprString(PyObject *self, PyObject *args)
if (retval == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = Py_BuildValue("s", Tkapp_Result(self));
+ res = unicodeFromTclString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1910,16 +1975,35 @@ Tkapp_SplitList(PyObject *self, PyObject *args)
char *list;
int argc;
char **argv;
- PyObject *v;
+ PyObject *arg, *v;
int i;
- if (PyTuple_Size(args) == 1) {
- v = PyTuple_GetItem(args, 0);
- if (PyTuple_Check(v)) {
- Py_INCREF(v);
- return v;
+ if (!PyArg_ParseTuple(args, "O:splitlist", &arg))
+ return NULL;
+ if (PyTclObject_Check(arg)) {
+ int objc;
+ Tcl_Obj **objv;
+ if (Tcl_ListObjGetElements(Tkapp_Interp(self),
+ ((PyTclObject*)arg)->value,
+ &objc, &objv) == TCL_ERROR) {
+ return Tkinter_Error(self);
}
+ if (!(v = PyTuple_New(objc)))
+ return NULL;
+ for (i = 0; i < objc; i++) {
+ PyObject *s = FromObj(self, objv[i]);
+ if (!s || PyTuple_SetItem(v, i, s)) {
+ Py_DECREF(v);
+ return NULL;
+ }
+ }
+ return v;
+ }
+ if (PyTuple_Check(arg)) {
+ Py_INCREF(arg);
+ return arg;
}
+
if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list))
return NULL;
@@ -1933,7 +2017,7 @@ Tkapp_SplitList(PyObject *self, PyObject *args)
goto finally;
for (i = 0; i < argc; i++) {
- PyObject *s = PyUnicode_FromString(argv[i]);
+ PyObject *s = unicodeFromTclString(argv[i]);
if (!s || PyTuple_SetItem(v, i, s)) {
Py_DECREF(v);
v = NULL;
@@ -1950,16 +2034,38 @@ Tkapp_SplitList(PyObject *self, PyObject *args)
static PyObject *
Tkapp_Split(PyObject *self, PyObject *args)
{
- PyObject *v;
+ PyObject *arg, *v;
char *list;
- if (PyTuple_Size(args) == 1) {
- PyObject* o = PyTuple_GetItem(args, 0);
- if (PyTuple_Check(o)) {
- o = SplitObj(o);
- return o;
+ if (!PyArg_ParseTuple(args, "O:split", &arg))
+ return NULL;
+ if (PyTclObject_Check(arg)) {
+ Tcl_Obj *value = ((PyTclObject*)arg)->value;
+ int objc;
+ Tcl_Obj **objv;
+ int i;
+ if (Tcl_ListObjGetElements(Tkapp_Interp(self), value,
+ &objc, &objv) == TCL_ERROR) {
+ return FromObj(self, value);
+ }
+ if (objc == 0)
+ return PyUnicode_FromString("");
+ if (objc == 1)
+ return FromObj(self, objv[0]);
+ if (!(v = PyTuple_New(objc)))
+ return NULL;
+ for (i = 0; i < objc; i++) {
+ PyObject *s = FromObj(self, objv[i]);
+ if (!s || PyTuple_SetItem(v, i, s)) {
+ Py_DECREF(v);
+ return NULL;
+ }
}
+ return v;
}
+ if (PyTuple_Check(arg))
+ return SplitObj(arg);
+
if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list))
return NULL;
v = Split(list);
@@ -1970,9 +2076,16 @@ Tkapp_Split(PyObject *self, PyObject *args)
static PyObject *
Tkapp_Merge(PyObject *self, PyObject *args)
{
- char *s = Merge(args);
+ char *s;
PyObject *res = NULL;
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "merge is deprecated and will be removed in 3.4",
+ 1) < 0)
+ return 0;
+
+ s = Merge(args);
+
if (s) {
res = PyUnicode_FromString(s);
ckfree(s);
@@ -2007,7 +2120,7 @@ static int
PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
{
PythonCmd_ClientData *data = (PythonCmd_ClientData *)clientData;
- PyObject *self, *func, *arg, *res;
+ PyObject *func, *arg, *res;
int i, rv;
Tcl_Obj *obj_res;
@@ -2016,7 +2129,6 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
/* TBD: no error checking here since we know, via the
* Tkapp_CreateCommand() that the client data is a two-tuple
*/
- self = data->self;
func = data->func;
/* Create argument list (argv1, ..., argvN) */
@@ -2024,20 +2136,8 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
return PythonCmd_Error(interp);
for (i = 0; i < (argc - 1); i++) {
- PyObject *s = PyUnicode_FromString(argv[i + 1]);
- if (!s) {
- /* Is Tk leaking 0xC080 in %A - a "modified" utf-8 null? */
- if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError) &&
- !strcmp(argv[i + 1], "\xC0\x80")) {
- PyErr_Clear();
- /* Convert to "strict" utf-8 null */
- s = PyUnicode_FromString("\0");
- } else {
- Py_DECREF(arg);
- return PythonCmd_Error(interp);
- }
- }
- if (PyTuple_SetItem(arg, i, s)) {
+ PyObject *s = unicodeFromTclString(argv[i + 1]);
+ if (!s || PyTuple_SetItem(arg, i, s)) {
Py_DECREF(arg);
return PythonCmd_Error(interp);
}
@@ -2415,11 +2515,9 @@ static PyObject *
Tktt_Repr(PyObject *self)
{
TkttObject *v = (TkttObject *)self;
- char buf[100];
-
- PyOS_snprintf(buf, sizeof(buf), "<tktimertoken at %p%s>", v,
- v->func == NULL ? ", handler deleted" : "");
- return PyUnicode_FromString(buf);
+ return PyUnicode_FromFormat("<tktimertoken at %p%s>",
+ v,
+ v->func == NULL ? ", handler deleted" : "");
}
static PyTypeObject Tktt_Type =
@@ -2613,7 +2711,7 @@ Tkapp_InterpAddr(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, ":interpaddr"))
return NULL;
- return PyLong_FromLong((long)Tkapp_Interp(self));
+ return PyLong_FromVoidPtr(Tkapp_Interp(self));
}
static PyObject *
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
new file mode 100644
index 0000000000..c53d55a535
--- /dev/null
+++ b/Modules/_winapi.c
@@ -0,0 +1,1328 @@
+/*
+ * Support routines from the Windows API
+ *
+ * This module was originally created by merging PC/_subprocess.c with
+ * Modules/_multiprocessing/win32_functions.c.
+ *
+ * Copyright (c) 2004 by Fredrik Lundh <fredrik@pythonware.com>
+ * Copyright (c) 2004 by Secret Labs AB, http://www.pythonware.com
+ * Copyright (c) 2004 by Peter Astrand <astrand@lysator.liu.se>
+ *
+ * By obtaining, using, and/or copying this software and/or its
+ * associated documentation, you agree that you have read, understood,
+ * and will comply with the following terms and conditions:
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its associated documentation for any purpose and without fee is
+ * hereby granted, provided that the above copyright notice appears in
+ * all copies, and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of the
+ * authors not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission.
+ *
+ * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/* Licensed to PSF under a Contributor Agreement. */
+/* See http://www.python.org/2.4/license for licensing details. */
+
+#include "Python.h"
+#include "structmember.h"
+
+#define WINDOWS_LEAN_AND_MEAN
+#include "windows.h"
+#include <crtdbg.h>
+
+#if defined(MS_WIN32) && !defined(MS_WIN64)
+#define HANDLE_TO_PYNUM(handle) \
+ PyLong_FromUnsignedLong((unsigned long) handle)
+#define PYNUM_TO_HANDLE(obj) ((HANDLE)PyLong_AsUnsignedLong(obj))
+#define F_POINTER "k"
+#define T_POINTER T_ULONG
+#else
+#define HANDLE_TO_PYNUM(handle) \
+ PyLong_FromUnsignedLongLong((unsigned long long) handle)
+#define PYNUM_TO_HANDLE(obj) ((HANDLE)PyLong_AsUnsignedLongLong(obj))
+#define F_POINTER "K"
+#define T_POINTER T_ULONGLONG
+#endif
+
+#define F_HANDLE F_POINTER
+#define F_DWORD "k"
+#define F_BOOL "i"
+#define F_UINT "I"
+
+#define T_HANDLE T_POINTER
+
+/* Grab CancelIoEx dynamically from kernel32 */
+static int has_CancelIoEx = -1;
+static BOOL (CALLBACK *Py_CancelIoEx)(HANDLE, LPOVERLAPPED);
+
+static int
+check_CancelIoEx()
+{
+ if (has_CancelIoEx == -1)
+ {
+ HINSTANCE hKernel32 = GetModuleHandle("KERNEL32");
+ * (FARPROC *) &Py_CancelIoEx = GetProcAddress(hKernel32,
+ "CancelIoEx");
+ has_CancelIoEx = (Py_CancelIoEx != NULL);
+ }
+ return has_CancelIoEx;
+}
+
+
+/*
+ * A Python object wrapping an OVERLAPPED structure and other useful data
+ * for overlapped I/O
+ */
+
+typedef struct {
+ PyObject_HEAD
+ OVERLAPPED overlapped;
+ /* For convenience, we store the file handle too */
+ HANDLE handle;
+ /* Whether there's I/O in flight */
+ int pending;
+ /* Whether I/O completed successfully */
+ int completed;
+ /* Buffer used for reading (optional) */
+ PyObject *read_buffer;
+ /* Buffer used for writing (optional) */
+ Py_buffer write_buffer;
+} OverlappedObject;
+
+static void
+overlapped_dealloc(OverlappedObject *self)
+{
+ DWORD bytes;
+ int err = GetLastError();
+ if (self->pending) {
+ /* make it a programming error to deallocate while operation
+ is pending, even if we can safely cancel it */
+ if (check_CancelIoEx() &&
+ Py_CancelIoEx(self->handle, &self->overlapped))
+ GetOverlappedResult(self->handle, &self->overlapped, &bytes, TRUE);
+ PyErr_SetString(PyExc_RuntimeError,
+ "I/O operations still in flight while destroying "
+ "Overlapped object, the process may crash");
+ PyErr_WriteUnraisable(NULL);
+ }
+ CloseHandle(self->overlapped.hEvent);
+ SetLastError(err);
+ if (self->write_buffer.obj)
+ PyBuffer_Release(&self->write_buffer);
+ Py_CLEAR(self->read_buffer);
+ PyObject_Del(self);
+}
+
+static PyObject *
+overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *waitobj)
+{
+ int wait;
+ BOOL res;
+ DWORD transferred = 0;
+ DWORD err;
+
+ wait = PyObject_IsTrue(waitobj);
+ if (wait < 0)
+ return NULL;
+ Py_BEGIN_ALLOW_THREADS
+ res = GetOverlappedResult(self->handle, &self->overlapped, &transferred,
+ wait != 0);
+ Py_END_ALLOW_THREADS
+
+ err = res ? ERROR_SUCCESS : GetLastError();
+ switch (err) {
+ case ERROR_SUCCESS:
+ case ERROR_MORE_DATA:
+ case ERROR_OPERATION_ABORTED:
+ self->completed = 1;
+ self->pending = 0;
+ break;
+ case ERROR_IO_INCOMPLETE:
+ break;
+ default:
+ self->pending = 0;
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, err);
+ }
+ if (self->completed && self->read_buffer != NULL) {
+ assert(PyBytes_CheckExact(self->read_buffer));
+ if (transferred != PyBytes_GET_SIZE(self->read_buffer) &&
+ _PyBytes_Resize(&self->read_buffer, transferred))
+ return NULL;
+ }
+ return Py_BuildValue("II", (unsigned) transferred, (unsigned) err);
+}
+
+static PyObject *
+overlapped_getbuffer(OverlappedObject *self)
+{
+ PyObject *res;
+ if (!self->completed) {
+ PyErr_SetString(PyExc_ValueError,
+ "can't get read buffer before GetOverlappedResult() "
+ "signals the operation completed");
+ return NULL;
+ }
+ res = self->read_buffer ? self->read_buffer : Py_None;
+ Py_INCREF(res);
+ return res;
+}
+
+static PyObject *
+overlapped_cancel(OverlappedObject *self)
+{
+ BOOL res = TRUE;
+
+ if (self->pending) {
+ Py_BEGIN_ALLOW_THREADS
+ if (check_CancelIoEx())
+ res = Py_CancelIoEx(self->handle, &self->overlapped);
+ else
+ res = CancelIo(self->handle);
+ Py_END_ALLOW_THREADS
+ }
+
+ /* CancelIoEx returns ERROR_NOT_FOUND if the I/O completed in-between */
+ if (!res && GetLastError() != ERROR_NOT_FOUND)
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ self->pending = 0;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef overlapped_methods[] = {
+ {"GetOverlappedResult", (PyCFunction) overlapped_GetOverlappedResult,
+ METH_O, NULL},
+ {"getbuffer", (PyCFunction) overlapped_getbuffer, METH_NOARGS, NULL},
+ {"cancel", (PyCFunction) overlapped_cancel, METH_NOARGS, NULL},
+ {NULL}
+};
+
+static PyMemberDef overlapped_members[] = {
+ {"event", T_HANDLE,
+ offsetof(OverlappedObject, overlapped) + offsetof(OVERLAPPED, hEvent),
+ READONLY, "overlapped event handle"},
+ {NULL}
+};
+
+PyTypeObject OverlappedType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ /* tp_name */ "_winapi.Overlapped",
+ /* tp_basicsize */ sizeof(OverlappedObject),
+ /* tp_itemsize */ 0,
+ /* tp_dealloc */ (destructor) overlapped_dealloc,
+ /* tp_print */ 0,
+ /* tp_getattr */ 0,
+ /* tp_setattr */ 0,
+ /* tp_reserved */ 0,
+ /* tp_repr */ 0,
+ /* tp_as_number */ 0,
+ /* tp_as_sequence */ 0,
+ /* tp_as_mapping */ 0,
+ /* tp_hash */ 0,
+ /* tp_call */ 0,
+ /* tp_str */ 0,
+ /* tp_getattro */ 0,
+ /* tp_setattro */ 0,
+ /* tp_as_buffer */ 0,
+ /* tp_flags */ Py_TPFLAGS_DEFAULT,
+ /* tp_doc */ "OVERLAPPED structure wrapper",
+ /* tp_traverse */ 0,
+ /* tp_clear */ 0,
+ /* tp_richcompare */ 0,
+ /* tp_weaklistoffset */ 0,
+ /* tp_iter */ 0,
+ /* tp_iternext */ 0,
+ /* tp_methods */ overlapped_methods,
+ /* tp_members */ overlapped_members,
+ /* tp_getset */ 0,
+ /* tp_base */ 0,
+ /* tp_dict */ 0,
+ /* tp_descr_get */ 0,
+ /* tp_descr_set */ 0,
+ /* tp_dictoffset */ 0,
+ /* tp_init */ 0,
+ /* tp_alloc */ 0,
+ /* tp_new */ 0,
+};
+
+static OverlappedObject *
+new_overlapped(HANDLE handle)
+{
+ OverlappedObject *self;
+
+ self = PyObject_New(OverlappedObject, &OverlappedType);
+ if (!self)
+ return NULL;
+ self->handle = handle;
+ self->read_buffer = NULL;
+ self->pending = 0;
+ self->completed = 0;
+ memset(&self->overlapped, 0, sizeof(OVERLAPPED));
+ memset(&self->write_buffer, 0, sizeof(Py_buffer));
+ /* Manual reset, initially non-signalled */
+ self->overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+ return self;
+}
+
+/* -------------------------------------------------------------------- */
+/* windows API functions */
+
+PyDoc_STRVAR(CloseHandle_doc,
+"CloseHandle(handle) -> None\n\
+\n\
+Close handle.");
+
+static PyObject *
+winapi_CloseHandle(PyObject *self, PyObject *args)
+{
+ HANDLE hObject;
+ BOOL success;
+
+ if (!PyArg_ParseTuple(args, F_HANDLE ":CloseHandle", &hObject))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ success = CloseHandle(hObject);
+ Py_END_ALLOW_THREADS
+
+ if (!success)
+ return PyErr_SetFromWindowsErr(0);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+winapi_ConnectNamedPipe(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ HANDLE hNamedPipe;
+ int use_overlapped = 0;
+ BOOL success;
+ OverlappedObject *overlapped = NULL;
+ static char *kwlist[] = {"handle", "overlapped", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds,
+ F_HANDLE "|" F_BOOL, kwlist,
+ &hNamedPipe, &use_overlapped))
+ return NULL;
+
+ if (use_overlapped) {
+ overlapped = new_overlapped(hNamedPipe);
+ if (!overlapped)
+ return NULL;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ success = ConnectNamedPipe(hNamedPipe,
+ overlapped ? &overlapped->overlapped : NULL);
+ Py_END_ALLOW_THREADS
+
+ if (overlapped) {
+ int err = GetLastError();
+ /* Overlapped ConnectNamedPipe never returns a success code */
+ assert(success == 0);
+ if (err == ERROR_IO_PENDING)
+ overlapped->pending = 1;
+ else if (err == ERROR_PIPE_CONNECTED)
+ SetEvent(overlapped->overlapped.hEvent);
+ else {
+ Py_DECREF(overlapped);
+ return PyErr_SetFromWindowsErr(err);
+ }
+ return (PyObject *) overlapped;
+ }
+ if (!success)
+ return PyErr_SetFromWindowsErr(0);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+winapi_CreateFile(PyObject *self, PyObject *args)
+{
+ LPCTSTR lpFileName;
+ DWORD dwDesiredAccess;
+ DWORD dwShareMode;
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes;
+ DWORD dwCreationDisposition;
+ DWORD dwFlagsAndAttributes;
+ HANDLE hTemplateFile;
+ HANDLE handle;
+
+ if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_POINTER
+ F_DWORD F_DWORD F_HANDLE,
+ &lpFileName, &dwDesiredAccess, &dwShareMode,
+ &lpSecurityAttributes, &dwCreationDisposition,
+ &dwFlagsAndAttributes, &hTemplateFile))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ handle = CreateFile(lpFileName, dwDesiredAccess,
+ dwShareMode, lpSecurityAttributes,
+ dwCreationDisposition,
+ dwFlagsAndAttributes, hTemplateFile);
+ Py_END_ALLOW_THREADS
+
+ if (handle == INVALID_HANDLE_VALUE)
+ return PyErr_SetFromWindowsErr(0);
+
+ return Py_BuildValue(F_HANDLE, handle);
+}
+
+static PyObject *
+winapi_CreateNamedPipe(PyObject *self, PyObject *args)
+{
+ LPCTSTR lpName;
+ DWORD dwOpenMode;
+ DWORD dwPipeMode;
+ DWORD nMaxInstances;
+ DWORD nOutBufferSize;
+ DWORD nInBufferSize;
+ DWORD nDefaultTimeOut;
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes;
+ HANDLE handle;
+
+ if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_DWORD
+ F_DWORD F_DWORD F_DWORD F_POINTER,
+ &lpName, &dwOpenMode, &dwPipeMode,
+ &nMaxInstances, &nOutBufferSize,
+ &nInBufferSize, &nDefaultTimeOut,
+ &lpSecurityAttributes))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ handle = CreateNamedPipe(lpName, dwOpenMode, dwPipeMode,
+ nMaxInstances, nOutBufferSize,
+ nInBufferSize, nDefaultTimeOut,
+ lpSecurityAttributes);
+ Py_END_ALLOW_THREADS
+
+ if (handle == INVALID_HANDLE_VALUE)
+ return PyErr_SetFromWindowsErr(0);
+
+ return Py_BuildValue(F_HANDLE, handle);
+}
+
+PyDoc_STRVAR(CreatePipe_doc,
+"CreatePipe(pipe_attrs, size) -> (read_handle, write_handle)\n\
+\n\
+Create an anonymous pipe, and return handles to the read and\n\
+write ends of the pipe.\n\
+\n\
+pipe_attrs is ignored internally and can be None.");
+
+static PyObject *
+winapi_CreatePipe(PyObject* self, PyObject* args)
+{
+ HANDLE read_pipe;
+ HANDLE write_pipe;
+ BOOL result;
+
+ PyObject* pipe_attributes; /* ignored */
+ DWORD size;
+
+ if (! PyArg_ParseTuple(args, "O" F_DWORD ":CreatePipe",
+ &pipe_attributes, &size))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ result = CreatePipe(&read_pipe, &write_pipe, NULL, size);
+ Py_END_ALLOW_THREADS
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return Py_BuildValue(
+ "NN", HANDLE_TO_PYNUM(read_pipe), HANDLE_TO_PYNUM(write_pipe));
+}
+
+/* helpers for createprocess */
+
+static unsigned long
+getulong(PyObject* obj, char* name)
+{
+ PyObject* value;
+ unsigned long ret;
+
+ value = PyObject_GetAttrString(obj, name);
+ if (! value) {
+ PyErr_Clear(); /* FIXME: propagate error? */
+ return 0;
+ }
+ ret = PyLong_AsUnsignedLong(value);
+ Py_DECREF(value);
+ return ret;
+}
+
+static HANDLE
+gethandle(PyObject* obj, char* name)
+{
+ PyObject* value;
+ HANDLE ret;
+
+ value = PyObject_GetAttrString(obj, name);
+ if (! value) {
+ PyErr_Clear(); /* FIXME: propagate error? */
+ return NULL;
+ }
+ if (value == Py_None)
+ ret = NULL;
+ else
+ ret = PYNUM_TO_HANDLE(value);
+ Py_DECREF(value);
+ return ret;
+}
+
+static PyObject*
+getenvironment(PyObject* environment)
+{
+ Py_ssize_t i, envsize, totalsize;
+ Py_UCS4 *buffer = NULL, *p, *end;
+ PyObject *keys, *values, *res;
+
+ /* convert environment dictionary to windows environment string */
+ if (! PyMapping_Check(environment)) {
+ PyErr_SetString(
+ PyExc_TypeError, "environment must be dictionary or None");
+ return NULL;
+ }
+
+ envsize = PyMapping_Length(environment);
+
+ keys = PyMapping_Keys(environment);
+ values = PyMapping_Values(environment);
+ if (!keys || !values)
+ goto error;
+
+ totalsize = 1; /* trailing null character */
+ for (i = 0; i < envsize; i++) {
+ PyObject* key = PyList_GET_ITEM(keys, i);
+ PyObject* value = PyList_GET_ITEM(values, i);
+
+ if (! PyUnicode_Check(key) || ! PyUnicode_Check(value)) {
+ PyErr_SetString(PyExc_TypeError,
+ "environment can only contain strings");
+ goto error;
+ }
+ totalsize += PyUnicode_GET_LENGTH(key) + 1; /* +1 for '=' */
+ totalsize += PyUnicode_GET_LENGTH(value) + 1; /* +1 for '\0' */
+ }
+
+ buffer = PyMem_Malloc(totalsize * sizeof(Py_UCS4));
+ if (! buffer)
+ goto error;
+ p = buffer;
+ end = buffer + totalsize;
+
+ for (i = 0; i < envsize; i++) {
+ PyObject* key = PyList_GET_ITEM(keys, i);
+ PyObject* value = PyList_GET_ITEM(values, i);
+ if (!PyUnicode_AsUCS4(key, p, end - p, 0))
+ goto error;
+ p += PyUnicode_GET_LENGTH(key);
+ *p++ = '=';
+ if (!PyUnicode_AsUCS4(value, p, end - p, 0))
+ goto error;
+ p += PyUnicode_GET_LENGTH(value);
+ *p++ = '\0';
+ }
+
+ /* add trailing null byte */
+ *p++ = '\0';
+ assert(p == end);
+
+ Py_XDECREF(keys);
+ Py_XDECREF(values);
+
+ res = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buffer, p - buffer);
+ PyMem_Free(buffer);
+ return res;
+
+ error:
+ PyMem_Free(buffer);
+ Py_XDECREF(keys);
+ Py_XDECREF(values);
+ return NULL;
+}
+
+PyDoc_STRVAR(CreateProcess_doc,
+"CreateProcess(app_name, cmd_line, proc_attrs, thread_attrs,\n\
+ inherit, flags, env_mapping, curdir,\n\
+ startup_info) -> (proc_handle, thread_handle,\n\
+ pid, tid)\n\
+\n\
+Create a new process and its primary thread. The return\n\
+value is a tuple of the process handle, thread handle,\n\
+process ID, and thread ID.\n\
+\n\
+proc_attrs and thread_attrs are ignored internally and can be None.");
+
+static PyObject *
+winapi_CreateProcess(PyObject* self, PyObject* args)
+{
+ BOOL result;
+ PROCESS_INFORMATION pi;
+ STARTUPINFOW si;
+ PyObject* environment;
+ wchar_t *wenvironment;
+
+ wchar_t* application_name;
+ wchar_t* command_line;
+ PyObject* process_attributes; /* ignored */
+ PyObject* thread_attributes; /* ignored */
+ BOOL inherit_handles;
+ DWORD creation_flags;
+ PyObject* env_mapping;
+ wchar_t* current_directory;
+ PyObject* startup_info;
+
+ if (! PyArg_ParseTuple(args, "ZZOO" F_BOOL F_DWORD "OZO:CreateProcess",
+ &application_name,
+ &command_line,
+ &process_attributes,
+ &thread_attributes,
+ &inherit_handles,
+ &creation_flags,
+ &env_mapping,
+ &current_directory,
+ &startup_info))
+ return NULL;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+
+ /* note: we only support a small subset of all SI attributes */
+ si.dwFlags = getulong(startup_info, "dwFlags");
+ si.wShowWindow = (WORD)getulong(startup_info, "wShowWindow");
+ si.hStdInput = gethandle(startup_info, "hStdInput");
+ si.hStdOutput = gethandle(startup_info, "hStdOutput");
+ si.hStdError = gethandle(startup_info, "hStdError");
+ if (PyErr_Occurred())
+ return NULL;
+
+ if (env_mapping != Py_None) {
+ environment = getenvironment(env_mapping);
+ if (! environment)
+ return NULL;
+ wenvironment = PyUnicode_AsUnicode(environment);
+ if (wenvironment == NULL)
+ {
+ Py_XDECREF(environment);
+ return NULL;
+ }
+ }
+ else {
+ environment = NULL;
+ wenvironment = NULL;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ result = CreateProcessW(application_name,
+ command_line,
+ NULL,
+ NULL,
+ inherit_handles,
+ creation_flags | CREATE_UNICODE_ENVIRONMENT,
+ wenvironment,
+ current_directory,
+ &si,
+ &pi);
+ Py_END_ALLOW_THREADS
+
+ Py_XDECREF(environment);
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return Py_BuildValue("NNkk",
+ HANDLE_TO_PYNUM(pi.hProcess),
+ HANDLE_TO_PYNUM(pi.hThread),
+ pi.dwProcessId,
+ pi.dwThreadId);
+}
+
+PyDoc_STRVAR(DuplicateHandle_doc,
+"DuplicateHandle(source_proc_handle, source_handle,\n\
+ target_proc_handle, target_handle, access,\n\
+ inherit[, options]) -> handle\n\
+\n\
+Return a duplicate handle object.\n\
+\n\
+The duplicate handle refers to the same object as the original\n\
+handle. Therefore, any changes to the object are reflected\n\
+through both handles.");
+
+static PyObject *
+winapi_DuplicateHandle(PyObject* self, PyObject* args)
+{
+ HANDLE target_handle;
+ BOOL result;
+
+ HANDLE source_process_handle;
+ HANDLE source_handle;
+ HANDLE target_process_handle;
+ DWORD desired_access;
+ BOOL inherit_handle;
+ DWORD options = 0;
+
+ if (! PyArg_ParseTuple(args,
+ F_HANDLE F_HANDLE F_HANDLE F_DWORD F_BOOL F_DWORD
+ ":DuplicateHandle",
+ &source_process_handle,
+ &source_handle,
+ &target_process_handle,
+ &desired_access,
+ &inherit_handle,
+ &options))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ result = DuplicateHandle(
+ source_process_handle,
+ source_handle,
+ target_process_handle,
+ &target_handle,
+ desired_access,
+ inherit_handle,
+ options
+ );
+ Py_END_ALLOW_THREADS
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return HANDLE_TO_PYNUM(target_handle);
+}
+
+static PyObject *
+winapi_ExitProcess(PyObject *self, PyObject *args)
+{
+ UINT uExitCode;
+
+ if (!PyArg_ParseTuple(args, F_UINT, &uExitCode))
+ return NULL;
+
+ #if defined(Py_DEBUG)
+ SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT|
+ SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
+ #endif
+
+ ExitProcess(uExitCode);
+
+ return NULL;
+}
+
+PyDoc_STRVAR(GetCurrentProcess_doc,
+"GetCurrentProcess() -> handle\n\
+\n\
+Return a handle object for the current process.");
+
+static PyObject *
+winapi_GetCurrentProcess(PyObject* self, PyObject* args)
+{
+ if (! PyArg_ParseTuple(args, ":GetCurrentProcess"))
+ return NULL;
+
+ return HANDLE_TO_PYNUM(GetCurrentProcess());
+}
+
+PyDoc_STRVAR(GetExitCodeProcess_doc,
+"GetExitCodeProcess(handle) -> Exit code\n\
+\n\
+Return the termination status of the specified process.");
+
+static PyObject *
+winapi_GetExitCodeProcess(PyObject* self, PyObject* args)
+{
+ DWORD exit_code;
+ BOOL result;
+
+ HANDLE process;
+ if (! PyArg_ParseTuple(args, F_HANDLE ":GetExitCodeProcess", &process))
+ return NULL;
+
+ result = GetExitCodeProcess(process, &exit_code);
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return PyLong_FromUnsignedLong(exit_code);
+}
+
+static PyObject *
+winapi_GetLastError(PyObject *self, PyObject *args)
+{
+ return Py_BuildValue(F_DWORD, GetLastError());
+}
+
+PyDoc_STRVAR(GetModuleFileName_doc,
+"GetModuleFileName(module) -> path\n\
+\n\
+Return the fully-qualified path for the file that contains\n\
+the specified module. The module must have been loaded by the\n\
+current process.\n\
+\n\
+The module parameter should be a handle to the loaded module\n\
+whose path is being requested. If this parameter is 0, \n\
+GetModuleFileName retrieves the path of the executable file\n\
+of the current process.");
+
+static PyObject *
+winapi_GetModuleFileName(PyObject* self, PyObject* args)
+{
+ BOOL result;
+ HMODULE module;
+ WCHAR filename[MAX_PATH];
+
+ if (! PyArg_ParseTuple(args, F_HANDLE ":GetModuleFileName",
+ &module))
+ return NULL;
+
+ result = GetModuleFileNameW(module, filename, MAX_PATH);
+ filename[MAX_PATH-1] = '\0';
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return PyUnicode_FromWideChar(filename, wcslen(filename));
+}
+
+PyDoc_STRVAR(GetStdHandle_doc,
+"GetStdHandle(handle) -> integer\n\
+\n\
+Return a handle to the specified standard device\n\
+(STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR_HANDLE).\n\
+The integer associated with the handle object is returned.");
+
+static PyObject *
+winapi_GetStdHandle(PyObject* self, PyObject* args)
+{
+ HANDLE handle;
+ DWORD std_handle;
+
+ if (! PyArg_ParseTuple(args, F_DWORD ":GetStdHandle", &std_handle))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ handle = GetStdHandle(std_handle);
+ Py_END_ALLOW_THREADS
+
+ if (handle == INVALID_HANDLE_VALUE)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ if (! handle) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ /* note: returns integer, not handle object */
+ return HANDLE_TO_PYNUM(handle);
+}
+
+PyDoc_STRVAR(GetVersion_doc,
+"GetVersion() -> version\n\
+\n\
+Return the version number of the current operating system.");
+
+static PyObject *
+winapi_GetVersion(PyObject* self, PyObject* args)
+{
+ if (! PyArg_ParseTuple(args, ":GetVersion"))
+ return NULL;
+
+ return PyLong_FromUnsignedLong(GetVersion());
+}
+
+static PyObject *
+winapi_OpenProcess(PyObject *self, PyObject *args)
+{
+ DWORD dwDesiredAccess;
+ BOOL bInheritHandle;
+ DWORD dwProcessId;
+ HANDLE handle;
+
+ if (!PyArg_ParseTuple(args, F_DWORD F_BOOL F_DWORD,
+ &dwDesiredAccess, &bInheritHandle, &dwProcessId))
+ return NULL;
+
+ handle = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
+ if (handle == NULL)
+ return PyErr_SetFromWindowsErr(0);
+
+ return Py_BuildValue(F_HANDLE, handle);
+}
+
+static PyObject *
+winapi_PeekNamedPipe(PyObject *self, PyObject *args)
+{
+ HANDLE handle;
+ int size = 0;
+ PyObject *buf = NULL;
+ DWORD nread, navail, nleft;
+ BOOL ret;
+
+ if (!PyArg_ParseTuple(args, F_HANDLE "|i:PeekNamedPipe" , &handle, &size))
+ return NULL;
+
+ if (size < 0) {
+ PyErr_SetString(PyExc_ValueError, "negative size");
+ return NULL;
+ }
+
+ if (size) {
+ buf = PyBytes_FromStringAndSize(NULL, size);
+ if (!buf)
+ return NULL;
+ Py_BEGIN_ALLOW_THREADS
+ ret = PeekNamedPipe(handle, PyBytes_AS_STRING(buf), size, &nread,
+ &navail, &nleft);
+ Py_END_ALLOW_THREADS
+ if (!ret) {
+ Py_DECREF(buf);
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ }
+ if (_PyBytes_Resize(&buf, nread))
+ return NULL;
+ return Py_BuildValue("Nii", buf, navail, nleft);
+ }
+ else {
+ Py_BEGIN_ALLOW_THREADS
+ ret = PeekNamedPipe(handle, NULL, 0, NULL, &navail, &nleft);
+ Py_END_ALLOW_THREADS
+ if (!ret) {
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ }
+ return Py_BuildValue("ii", navail, nleft);
+ }
+}
+
+static PyObject *
+winapi_ReadFile(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ HANDLE handle;
+ int size;
+ DWORD nread;
+ PyObject *buf;
+ BOOL ret;
+ int use_overlapped = 0;
+ DWORD err;
+ OverlappedObject *overlapped = NULL;
+ static char *kwlist[] = {"handle", "size", "overlapped", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds,
+ F_HANDLE "i|i:ReadFile", kwlist,
+ &handle, &size, &use_overlapped))
+ return NULL;
+
+ buf = PyBytes_FromStringAndSize(NULL, size);
+ if (!buf)
+ return NULL;
+ if (use_overlapped) {
+ overlapped = new_overlapped(handle);
+ if (!overlapped) {
+ Py_DECREF(buf);
+ return NULL;
+ }
+ /* Steals reference to buf */
+ overlapped->read_buffer = buf;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ ret = ReadFile(handle, PyBytes_AS_STRING(buf), size, &nread,
+ overlapped ? &overlapped->overlapped : NULL);
+ Py_END_ALLOW_THREADS
+
+ err = ret ? 0 : GetLastError();
+
+ if (overlapped) {
+ if (!ret) {
+ if (err == ERROR_IO_PENDING)
+ overlapped->pending = 1;
+ else if (err != ERROR_MORE_DATA) {
+ Py_DECREF(overlapped);
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ }
+ }
+ return Py_BuildValue("NI", (PyObject *) overlapped, err);
+ }
+
+ if (!ret && err != ERROR_MORE_DATA) {
+ Py_DECREF(buf);
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ }
+ if (_PyBytes_Resize(&buf, nread))
+ return NULL;
+ return Py_BuildValue("NI", buf, err);
+}
+
+static PyObject *
+winapi_SetNamedPipeHandleState(PyObject *self, PyObject *args)
+{
+ HANDLE hNamedPipe;
+ PyObject *oArgs[3];
+ DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL};
+ int i;
+
+ if (!PyArg_ParseTuple(args, F_HANDLE "OOO",
+ &hNamedPipe, &oArgs[0], &oArgs[1], &oArgs[2]))
+ return NULL;
+
+ PyErr_Clear();
+
+ for (i = 0 ; i < 3 ; i++) {
+ if (oArgs[i] != Py_None) {
+ dwArgs[i] = PyLong_AsUnsignedLongMask(oArgs[i]);
+ if (PyErr_Occurred())
+ return NULL;
+ pArgs[i] = &dwArgs[i];
+ }
+ }
+
+ if (!SetNamedPipeHandleState(hNamedPipe, pArgs[0], pArgs[1], pArgs[2]))
+ return PyErr_SetFromWindowsErr(0);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(TerminateProcess_doc,
+"TerminateProcess(handle, exit_code) -> None\n\
+\n\
+Terminate the specified process and all of its threads.");
+
+static PyObject *
+winapi_TerminateProcess(PyObject* self, PyObject* args)
+{
+ BOOL result;
+
+ HANDLE process;
+ UINT exit_code;
+ if (! PyArg_ParseTuple(args, F_HANDLE F_UINT ":TerminateProcess",
+ &process, &exit_code))
+ return NULL;
+
+ result = TerminateProcess(process, exit_code);
+
+ if (! result)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject *
+winapi_WaitNamedPipe(PyObject *self, PyObject *args)
+{
+ LPCTSTR lpNamedPipeName;
+ DWORD nTimeOut;
+ BOOL success;
+
+ if (!PyArg_ParseTuple(args, "s" F_DWORD, &lpNamedPipeName, &nTimeOut))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ success = WaitNamedPipe(lpNamedPipeName, nTimeOut);
+ Py_END_ALLOW_THREADS
+
+ if (!success)
+ return PyErr_SetFromWindowsErr(0);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+winapi_WaitForMultipleObjects(PyObject* self, PyObject* args)
+{
+ DWORD result;
+ PyObject *handle_seq;
+ HANDLE handles[MAXIMUM_WAIT_OBJECTS];
+ HANDLE sigint_event = NULL;
+ Py_ssize_t nhandles, i;
+ BOOL wait_flag;
+ DWORD milliseconds = INFINITE;
+
+ if (!PyArg_ParseTuple(args, "O" F_BOOL "|" F_DWORD
+ ":WaitForMultipleObjects",
+ &handle_seq, &wait_flag, &milliseconds))
+ return NULL;
+
+ if (!PySequence_Check(handle_seq)) {
+ PyErr_Format(PyExc_TypeError,
+ "sequence type expected, got '%s'",
+ Py_TYPE(handle_seq)->tp_name);
+ return NULL;
+ }
+ nhandles = PySequence_Length(handle_seq);
+ if (nhandles == -1)
+ return NULL;
+ if (nhandles < 0 || nhandles >= MAXIMUM_WAIT_OBJECTS - 1) {
+ PyErr_Format(PyExc_ValueError,
+ "need at most %zd handles, got a sequence of length %zd",
+ MAXIMUM_WAIT_OBJECTS - 1, nhandles);
+ return NULL;
+ }
+ for (i = 0; i < nhandles; i++) {
+ HANDLE h;
+ PyObject *v = PySequence_GetItem(handle_seq, i);
+ if (v == NULL)
+ return NULL;
+ if (!PyArg_Parse(v, F_HANDLE, &h)) {
+ Py_DECREF(v);
+ return NULL;
+ }
+ handles[i] = h;
+ Py_DECREF(v);
+ }
+ /* If this is the main thread then make the wait interruptible
+ by Ctrl-C unless we are waiting for *all* handles */
+ if (!wait_flag && _PyOS_IsMainThread()) {
+ sigint_event = _PyOS_SigintEvent();
+ assert(sigint_event != NULL);
+ handles[nhandles++] = sigint_event;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ if (sigint_event != NULL)
+ ResetEvent(sigint_event);
+ result = WaitForMultipleObjects((DWORD) nhandles, handles,
+ wait_flag, milliseconds);
+ Py_END_ALLOW_THREADS
+
+ if (result == WAIT_FAILED)
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ else if (sigint_event != NULL && result == WAIT_OBJECT_0 + nhandles - 1) {
+ errno = EINTR;
+ return PyErr_SetFromErrno(PyExc_IOError);
+ }
+
+ return PyLong_FromLong((int) result);
+}
+
+PyDoc_STRVAR(WaitForSingleObject_doc,
+"WaitForSingleObject(handle, timeout) -> result\n\
+\n\
+Wait until the specified object is in the signaled state or\n\
+the time-out interval elapses. The timeout value is specified\n\
+in milliseconds.");
+
+static PyObject *
+winapi_WaitForSingleObject(PyObject* self, PyObject* args)
+{
+ DWORD result;
+
+ HANDLE handle;
+ DWORD milliseconds;
+ if (! PyArg_ParseTuple(args, F_HANDLE F_DWORD ":WaitForSingleObject",
+ &handle,
+ &milliseconds))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ result = WaitForSingleObject(handle, milliseconds);
+ Py_END_ALLOW_THREADS
+
+ if (result == WAIT_FAILED)
+ return PyErr_SetFromWindowsErr(GetLastError());
+
+ return PyLong_FromUnsignedLong(result);
+}
+
+static PyObject *
+winapi_WriteFile(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ HANDLE handle;
+ Py_buffer _buf, *buf;
+ PyObject *bufobj;
+ DWORD written;
+ BOOL ret;
+ int use_overlapped = 0;
+ DWORD err;
+ OverlappedObject *overlapped = NULL;
+ static char *kwlist[] = {"handle", "buffer", "overlapped", NULL};
+
+ /* First get handle and use_overlapped to know which Py_buffer to use */
+ if (!PyArg_ParseTupleAndKeywords(args, kwds,
+ F_HANDLE "O|i:WriteFile", kwlist,
+ &handle, &bufobj, &use_overlapped))
+ return NULL;
+
+ if (use_overlapped) {
+ overlapped = new_overlapped(handle);
+ if (!overlapped)
+ return NULL;
+ buf = &overlapped->write_buffer;
+ }
+ else
+ buf = &_buf;
+
+ if (!PyArg_Parse(bufobj, "y*", buf)) {
+ Py_XDECREF(overlapped);
+ return NULL;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ ret = WriteFile(handle, buf->buf, buf->len, &written,
+ overlapped ? &overlapped->overlapped : NULL);
+ Py_END_ALLOW_THREADS
+
+ err = ret ? 0 : GetLastError();
+
+ if (overlapped) {
+ if (!ret) {
+ if (err == ERROR_IO_PENDING)
+ overlapped->pending = 1;
+ else {
+ Py_DECREF(overlapped);
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ }
+ }
+ return Py_BuildValue("NI", (PyObject *) overlapped, err);
+ }
+
+ PyBuffer_Release(buf);
+ if (!ret)
+ return PyErr_SetExcFromWindowsErr(PyExc_IOError, 0);
+ return Py_BuildValue("II", written, err);
+}
+
+
+static PyMethodDef winapi_functions[] = {
+ {"CloseHandle", winapi_CloseHandle, METH_VARARGS,
+ CloseHandle_doc},
+ {"ConnectNamedPipe", (PyCFunction)winapi_ConnectNamedPipe,
+ METH_VARARGS | METH_KEYWORDS, ""},
+ {"CreateFile", winapi_CreateFile, METH_VARARGS,
+ ""},
+ {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS,
+ ""},
+ {"CreatePipe", winapi_CreatePipe, METH_VARARGS,
+ CreatePipe_doc},
+ {"CreateProcess", winapi_CreateProcess, METH_VARARGS,
+ CreateProcess_doc},
+ {"DuplicateHandle", winapi_DuplicateHandle, METH_VARARGS,
+ DuplicateHandle_doc},
+ {"ExitProcess", winapi_ExitProcess, METH_VARARGS,
+ ""},
+ {"GetCurrentProcess", winapi_GetCurrentProcess, METH_VARARGS,
+ GetCurrentProcess_doc},
+ {"GetExitCodeProcess", winapi_GetExitCodeProcess, METH_VARARGS,
+ GetExitCodeProcess_doc},
+ {"GetLastError", winapi_GetLastError, METH_NOARGS,
+ GetCurrentProcess_doc},
+ {"GetModuleFileName", winapi_GetModuleFileName, METH_VARARGS,
+ GetModuleFileName_doc},
+ {"GetStdHandle", winapi_GetStdHandle, METH_VARARGS,
+ GetStdHandle_doc},
+ {"GetVersion", winapi_GetVersion, METH_VARARGS,
+ GetVersion_doc},
+ {"OpenProcess", winapi_OpenProcess, METH_VARARGS,
+ ""},
+ {"PeekNamedPipe", winapi_PeekNamedPipe, METH_VARARGS,
+ ""},
+ {"ReadFile", (PyCFunction)winapi_ReadFile, METH_VARARGS | METH_KEYWORDS,
+ ""},
+ {"SetNamedPipeHandleState", winapi_SetNamedPipeHandleState, METH_VARARGS,
+ ""},
+ {"TerminateProcess", winapi_TerminateProcess, METH_VARARGS,
+ TerminateProcess_doc},
+ {"WaitNamedPipe", winapi_WaitNamedPipe, METH_VARARGS,
+ ""},
+ {"WaitForMultipleObjects", winapi_WaitForMultipleObjects, METH_VARARGS,
+ ""},
+ {"WaitForSingleObject", winapi_WaitForSingleObject, METH_VARARGS,
+ WaitForSingleObject_doc},
+ {"WriteFile", (PyCFunction)winapi_WriteFile, METH_VARARGS | METH_KEYWORDS,
+ ""},
+ {NULL, NULL}
+};
+
+static struct PyModuleDef winapi_module = {
+ PyModuleDef_HEAD_INIT,
+ "_winapi",
+ NULL,
+ -1,
+ winapi_functions,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+#define WINAPI_CONSTANT(fmt, con) \
+ PyDict_SetItemString(d, #con, Py_BuildValue(fmt, con))
+
+PyMODINIT_FUNC
+PyInit__winapi(void)
+{
+ PyObject *d;
+ PyObject *m;
+
+ if (PyType_Ready(&OverlappedType) < 0)
+ return NULL;
+
+ m = PyModule_Create(&winapi_module);
+ if (m == NULL)
+ return NULL;
+ d = PyModule_GetDict(m);
+
+ PyDict_SetItemString(d, "Overlapped", (PyObject *) &OverlappedType);
+
+ /* constants */
+ WINAPI_CONSTANT(F_DWORD, CREATE_NEW_CONSOLE);
+ WINAPI_CONSTANT(F_DWORD, CREATE_NEW_PROCESS_GROUP);
+ WINAPI_CONSTANT(F_DWORD, DUPLICATE_SAME_ACCESS);
+ WINAPI_CONSTANT(F_DWORD, DUPLICATE_CLOSE_SOURCE);
+ WINAPI_CONSTANT(F_DWORD, ERROR_ALREADY_EXISTS);
+ WINAPI_CONSTANT(F_DWORD, ERROR_BROKEN_PIPE);
+ WINAPI_CONSTANT(F_DWORD, ERROR_IO_PENDING);
+ WINAPI_CONSTANT(F_DWORD, ERROR_MORE_DATA);
+ WINAPI_CONSTANT(F_DWORD, ERROR_NETNAME_DELETED);
+ WINAPI_CONSTANT(F_DWORD, ERROR_NO_SYSTEM_RESOURCES);
+ WINAPI_CONSTANT(F_DWORD, ERROR_MORE_DATA);
+ WINAPI_CONSTANT(F_DWORD, ERROR_NETNAME_DELETED);
+ WINAPI_CONSTANT(F_DWORD, ERROR_NO_DATA);
+ WINAPI_CONSTANT(F_DWORD, ERROR_NO_SYSTEM_RESOURCES);
+ WINAPI_CONSTANT(F_DWORD, ERROR_OPERATION_ABORTED);
+ WINAPI_CONSTANT(F_DWORD, ERROR_PIPE_BUSY);
+ WINAPI_CONSTANT(F_DWORD, ERROR_PIPE_CONNECTED);
+ WINAPI_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT);
+ WINAPI_CONSTANT(F_DWORD, FILE_FLAG_FIRST_PIPE_INSTANCE);
+ WINAPI_CONSTANT(F_DWORD, FILE_FLAG_OVERLAPPED);
+ WINAPI_CONSTANT(F_DWORD, FILE_GENERIC_READ);
+ WINAPI_CONSTANT(F_DWORD, FILE_GENERIC_WRITE);
+ WINAPI_CONSTANT(F_DWORD, GENERIC_READ);
+ WINAPI_CONSTANT(F_DWORD, GENERIC_WRITE);
+ WINAPI_CONSTANT(F_DWORD, INFINITE);
+ WINAPI_CONSTANT(F_DWORD, NMPWAIT_WAIT_FOREVER);
+ WINAPI_CONSTANT(F_DWORD, OPEN_EXISTING);
+ WINAPI_CONSTANT(F_DWORD, PIPE_ACCESS_DUPLEX);
+ WINAPI_CONSTANT(F_DWORD, PIPE_ACCESS_INBOUND);
+ WINAPI_CONSTANT(F_DWORD, PIPE_READMODE_MESSAGE);
+ WINAPI_CONSTANT(F_DWORD, PIPE_TYPE_MESSAGE);
+ WINAPI_CONSTANT(F_DWORD, PIPE_UNLIMITED_INSTANCES);
+ WINAPI_CONSTANT(F_DWORD, PIPE_WAIT);
+ WINAPI_CONSTANT(F_DWORD, PROCESS_ALL_ACCESS);
+ WINAPI_CONSTANT(F_DWORD, PROCESS_DUP_HANDLE);
+ WINAPI_CONSTANT(F_DWORD, STARTF_USESHOWWINDOW);
+ WINAPI_CONSTANT(F_DWORD, STARTF_USESTDHANDLES);
+ WINAPI_CONSTANT(F_DWORD, STD_INPUT_HANDLE);
+ WINAPI_CONSTANT(F_DWORD, STD_OUTPUT_HANDLE);
+ WINAPI_CONSTANT(F_DWORD, STD_ERROR_HANDLE);
+ WINAPI_CONSTANT(F_DWORD, STILL_ACTIVE);
+ WINAPI_CONSTANT(F_DWORD, SW_HIDE);
+ WINAPI_CONSTANT(F_DWORD, WAIT_OBJECT_0);
+ WINAPI_CONSTANT(F_DWORD, WAIT_TIMEOUT);
+
+ WINAPI_CONSTANT("i", NULL);
+
+ return m;
+}
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 475acb4692..3aba9adbeb 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -22,7 +22,7 @@ struct arrayobject; /* Forward */
* functions aren't visible yet.
*/
struct arraydescr {
- Py_UNICODE typecode;
+ char typecode;
int itemsize;
PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *);
@@ -356,6 +356,59 @@ LL_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
return 0;
}
+#ifdef HAVE_LONG_LONG
+
+static PyObject *
+q_getitem(arrayobject *ap, Py_ssize_t i)
+{
+ return PyLong_FromLongLong(((PY_LONG_LONG *)ap->ob_item)[i]);
+}
+
+static int
+q_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
+{
+ PY_LONG_LONG x;
+ if (!PyArg_Parse(v, "L;array item must be integer", &x))
+ return -1;
+ if (i >= 0)
+ ((PY_LONG_LONG *)ap->ob_item)[i] = x;
+ return 0;
+}
+
+static PyObject *
+QQ_getitem(arrayobject *ap, Py_ssize_t i)
+{
+ return PyLong_FromUnsignedLongLong(
+ ((unsigned PY_LONG_LONG *)ap->ob_item)[i]);
+}
+
+static int
+QQ_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
+{
+ unsigned PY_LONG_LONG x;
+ if (PyLong_Check(v)) {
+ x = PyLong_AsUnsignedLongLong(v);
+ if (x == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred())
+ return -1;
+ }
+ else {
+ PY_LONG_LONG y;
+ if (!PyArg_Parse(v, "L;array item must be integer", &y))
+ return -1;
+ if (y < 0) {
+ PyErr_SetString(PyExc_OverflowError,
+ "unsigned long long is less than minimum");
+ return -1;
+ }
+ x = (unsigned PY_LONG_LONG)y;
+ }
+
+ if (i >= 0)
+ ((unsigned PY_LONG_LONG *)ap->ob_item)[i] = x;
+ return 0;
+}
+#endif
+
static PyObject *
f_getitem(arrayobject *ap, Py_ssize_t i)
{
@@ -406,6 +459,10 @@ static struct arraydescr descriptors[] = {
{'I', sizeof(int), II_getitem, II_setitem, "I", 1, 0},
{'l', sizeof(long), l_getitem, l_setitem, "l", 1, 1},
{'L', sizeof(long), LL_getitem, LL_setitem, "L", 1, 0},
+#ifdef HAVE_LONG_LONG
+ {'q', sizeof(PY_LONG_LONG), q_getitem, q_setitem, "q", 1, 1},
+ {'Q', sizeof(PY_LONG_LONG), QQ_getitem, QQ_setitem, "Q", 1, 0},
+#endif
{'f', sizeof(float), f_getitem, f_setitem, "f", 0, 0},
{'d', sizeof(double), d_getitem, d_setitem, "d", 0, 0},
{'\0', 0, 0, 0, 0, 0, 0} /* Sentinel */
@@ -426,11 +483,11 @@ newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr)
return NULL;
}
- nbytes = size * descr->itemsize;
/* Check for overflow */
- if (nbytes / descr->itemsize != (size_t)size) {
+ if (size > PY_SSIZE_T_MAX / descr->itemsize) {
return PyErr_NoMemory();
}
+ nbytes = size * descr->itemsize;
op = (arrayobject *) type->tp_alloc(type, 0);
if (op == NULL) {
return NULL;
@@ -514,10 +571,8 @@ array_richcompare(PyObject *v, PyObject *w, int op)
Py_ssize_t i, k;
PyObject *res;
- if (!array_Check(v) || !array_Check(w)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
+ if (!array_Check(v) || !array_Check(w))
+ Py_RETURN_NOTIMPLEMENTED;
va = (arrayobject *)v;
wa = (arrayobject *)w;
@@ -876,7 +931,6 @@ array_inplace_repeat(arrayobject *self, Py_ssize_t n)
if (Py_SIZE(self) > 0) {
if (n < 0)
n = 0;
- items = self->ob_item;
if ((self->ob_descr->itemsize != 0) &&
(Py_SIZE(self) > PY_SSIZE_T_MAX / self->ob_descr->itemsize)) {
return PyErr_NoMemory();
@@ -1191,18 +1245,23 @@ array_fromfile(arrayobject *self, PyObject *args)
PyObject *f, *b, *res;
Py_ssize_t itemsize = self->ob_descr->itemsize;
Py_ssize_t n, nbytes;
+ _Py_IDENTIFIER(read);
int not_enough_bytes;
if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n))
return NULL;
- nbytes = n * itemsize;
- if (nbytes < 0 || nbytes/itemsize != n) {
+ if (n < 0) {
+ PyErr_SetString(PyExc_ValueError, "negative count");
+ return NULL;
+ }
+ if (n > PY_SSIZE_T_MAX / itemsize) {
PyErr_NoMemory();
return NULL;
}
+ nbytes = n * itemsize;
- b = PyObject_CallMethod(f, "read", "n", nbytes);
+ b = _PyObject_CallMethodId(f, &PyId_read, "n", nbytes);
if (b == NULL)
return NULL;
@@ -1259,12 +1318,14 @@ array_tofile(arrayobject *self, PyObject *f)
char* ptr = self->ob_item + i*BLOCKSIZE;
Py_ssize_t size = BLOCKSIZE;
PyObject *bytes, *res;
+ _Py_IDENTIFIER(write);
+
if (i*BLOCKSIZE + size > nbytes)
size = nbytes - i*BLOCKSIZE;
bytes = PyBytes_FromStringAndSize(ptr, size);
if (bytes == NULL)
return NULL;
- res = PyObject_CallMethod(f, "write", "O", bytes);
+ res = _PyObject_CallMethodId(f, &PyId_write, "O", bytes);
Py_DECREF(bytes);
if (res == NULL)
return NULL;
@@ -1456,7 +1517,7 @@ array_fromunicode(arrayobject *self, PyObject *args)
{
Py_UNICODE *ustr;
Py_ssize_t n;
- Py_UNICODE typecode;
+ char typecode;
if (!PyArg_ParseTuple(args, "u#:fromunicode", &ustr, &n))
return NULL;
@@ -1491,7 +1552,7 @@ append Unicode data to an array of some other type.");
static PyObject *
array_tounicode(arrayobject *self, PyObject *unused)
{
- Py_UNICODE typecode;
+ char typecode;
typecode = self->ob_descr->typecode;
if (typecode != 'u') {
PyErr_SetString(PyExc_ValueError,
@@ -1601,7 +1662,7 @@ static const struct mformatdescr {
* be found.
*/
static enum machine_format_code
-typecode_to_mformat_code(int typecode)
+typecode_to_mformat_code(char typecode)
{
#ifdef WORDS_BIGENDIAN
const int is_big_endian = 1;
@@ -1671,6 +1732,16 @@ typecode_to_mformat_code(int typecode)
intsize = sizeof(long);
is_signed = 0;
break;
+#if HAVE_LONG_LONG
+ case 'q':
+ intsize = sizeof(PY_LONG_LONG);
+ is_signed = 1;
+ break;
+ case 'Q':
+ intsize = sizeof(PY_LONG_LONG);
+ is_signed = 0;
+ break;
+#endif
default:
return UNKNOWN_FORMAT;
}
@@ -1701,7 +1772,7 @@ static PyObject *array_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
* NULL is returned to indicate a failure.
*/
static PyObject *
-make_array(PyTypeObject *arraytype, Py_UNICODE typecode, PyObject *items)
+make_array(PyTypeObject *arraytype, char typecode, PyObject *items)
{
PyObject *new_args;
PyObject *array_obj;
@@ -1710,7 +1781,7 @@ make_array(PyTypeObject *arraytype, Py_UNICODE typecode, PyObject *items)
assert(arraytype != NULL);
assert(items != NULL);
- typecode_obj = PyUnicode_FromUnicode(&typecode, 1);
+ typecode_obj = PyUnicode_FromOrdinal(typecode);
if (typecode_obj == NULL)
return NULL;
@@ -1740,17 +1811,14 @@ array_reconstructor(PyObject *self, PyObject *args)
PyObject *items;
PyObject *converted_items;
PyObject *result;
- int typecode_int;
- Py_UNICODE typecode;
+ int typecode;
enum machine_format_code mformat_code;
struct arraydescr *descr;
if (!PyArg_ParseTuple(args, "OCiO:array._array_reconstructor",
- &arraytype, &typecode_int, &mformat_code, &items))
+ &arraytype, &typecode, &mformat_code, &items))
return NULL;
- typecode = (Py_UNICODE)typecode_int;
-
if (!PyType_Check(arraytype)) {
PyErr_Format(PyExc_TypeError,
"first argument must a type object, not %.200s",
@@ -1764,7 +1832,7 @@ array_reconstructor(PyObject *self, PyObject *args)
return NULL;
}
for (descr = descriptors; descr->typecode != '\0'; descr++) {
- if (descr->typecode == typecode)
+ if ((int)descr->typecode == typecode)
break;
}
if (descr->typecode == '\0') {
@@ -1786,9 +1854,9 @@ array_reconstructor(PyObject *self, PyObject *args)
}
/* Fast path: No decoding has to be done. */
- if (mformat_code == typecode_to_mformat_code(typecode) ||
+ if (mformat_code == typecode_to_mformat_code((char)typecode) ||
mformat_code == UNKNOWN_FORMAT) {
- return make_array(arraytype, typecode, items);
+ return make_array(arraytype, (char)typecode, items);
}
/* Slow path: Decode the byte string according to the given machine
@@ -1934,7 +2002,7 @@ array_reconstructor(PyObject *self, PyObject *args)
return NULL;
}
- result = make_array(arraytype, typecode, converted_items);
+ result = make_array(arraytype, (char)typecode, converted_items);
Py_DECREF(converted_items);
return result;
}
@@ -1949,14 +2017,16 @@ array_reduce_ex(arrayobject *array, PyObject *value)
int mformat_code;
static PyObject *array_reconstructor = NULL;
long protocol;
+ _Py_IDENTIFIER(_array_reconstructor);
+ _Py_IDENTIFIER(__dict__);
if (array_reconstructor == NULL) {
PyObject *array_module = PyImport_ImportModule("array");
if (array_module == NULL)
return NULL;
- array_reconstructor = PyObject_GetAttrString(
+ array_reconstructor = _PyObject_GetAttrId(
array_module,
- "_array_reconstructor");
+ &PyId__array_reconstructor);
Py_DECREF(array_module);
if (array_reconstructor == NULL)
return NULL;
@@ -1971,7 +2041,7 @@ array_reduce_ex(arrayobject *array, PyObject *value)
if (protocol == -1 && PyErr_Occurred())
return NULL;
- dict = PyObject_GetAttrString((PyObject *)array, "__dict__");
+ dict = _PyObject_GetAttrId((PyObject *)array, &PyId___dict__);
if (dict == NULL) {
if (!PyErr_ExceptionMatches(PyExc_AttributeError))
return NULL;
@@ -2023,8 +2093,8 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
static PyObject *
array_get_typecode(arrayobject *a, void *closure)
{
- Py_UNICODE tc = a->ob_descr->typecode;
- return PyUnicode_FromUnicode(&tc, 1);
+ char typecode = a->ob_descr->typecode;
+ return PyUnicode_FromOrdinal(typecode);
}
static PyObject *
@@ -2044,7 +2114,7 @@ static PyGetSetDef array_getsets [] = {
static PyMethodDef array_methods[] = {
{"append", (PyCFunction)array_append, METH_O,
append_doc},
- {"buffer_info", (PyCFunction)array_buffer_info, METH_NOARGS,
+ {"buffer_info", (PyCFunction)array_buffer_info, METH_NOARGS,
buffer_info_doc},
{"byteswap", (PyCFunction)array_byteswap, METH_NOARGS,
byteswap_doc},
@@ -2052,9 +2122,9 @@ static PyMethodDef array_methods[] = {
copy_doc},
{"count", (PyCFunction)array_count, METH_O,
count_doc},
- {"__deepcopy__",(PyCFunction)array_copy, METH_O,
+ {"__deepcopy__", (PyCFunction)array_copy, METH_O,
copy_doc},
- {"extend", (PyCFunction)array_extend, METH_O,
+ {"extend", (PyCFunction)array_extend, METH_O,
extend_doc},
{"fromfile", (PyCFunction)array_fromfile, METH_VARARGS,
fromfile_doc},
@@ -2072,14 +2142,12 @@ static PyMethodDef array_methods[] = {
insert_doc},
{"pop", (PyCFunction)array_pop, METH_VARARGS,
pop_doc},
- {"__reduce_ex__", (PyCFunction)array_reduce_ex, METH_O,
+ {"__reduce_ex__", (PyCFunction)array_reduce_ex, METH_O,
reduce_doc},
{"remove", (PyCFunction)array_remove, METH_O,
remove_doc},
{"reverse", (PyCFunction)array_reverse, METH_NOARGS,
reverse_doc},
-/* {"sort", (PyCFunction)array_sort, METH_VARARGS,
- sort_doc},*/
{"tofile", (PyCFunction)array_tofile, METH_O,
tofile_doc},
{"tolist", (PyCFunction)array_tolist, METH_NOARGS,
@@ -2088,7 +2156,7 @@ static PyMethodDef array_methods[] = {
tostring_doc},
{"tobytes", (PyCFunction)array_tobytes, METH_NOARGS,
tobytes_doc},
- {"tounicode", (PyCFunction)array_tounicode, METH_NOARGS,
+ {"tounicode", (PyCFunction)array_tounicode, METH_NOARGS,
tounicode_doc},
{"__sizeof__", (PyCFunction)array_sizeof, METH_NOARGS,
sizeof_doc},
@@ -2098,7 +2166,7 @@ static PyMethodDef array_methods[] = {
static PyObject *
array_repr(arrayobject *a)
{
- Py_UNICODE typecode;
+ char typecode;
PyObject *s, *v = NULL;
Py_ssize_t len;
@@ -2112,6 +2180,8 @@ array_repr(arrayobject *a)
} else {
v = array_tolist(a, NULL);
}
+ if (v == NULL)
+ return NULL;
s = PyUnicode_FromFormat("array('%c', %R)", (int)typecode, v);
Py_DECREF(v);
@@ -2303,7 +2373,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
self->ob_item + (cur + 1) * itemsize,
lim * itemsize);
}
- cur = start + slicelength * step;
+ cur = start + (size_t)slicelength * step;
if (cur < (size_t)Py_SIZE(self)) {
memmove(self->ob_item + (cur-slicelength) * itemsize,
self->ob_item + cur * itemsize,
@@ -2487,7 +2557,17 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_DECREF(v);
}
else if (initial != NULL && PyUnicode_Check(initial)) {
- Py_ssize_t n = PyUnicode_GET_DATA_SIZE(initial);
+ Py_UNICODE *ustr;
+ Py_ssize_t n;
+
+ ustr = PyUnicode_AsUnicode(initial);
+ if (ustr == NULL) {
+ PyErr_NoMemory();
+ Py_DECREF(a);
+ return NULL;
+ }
+
+ n = PyUnicode_GET_DATA_SIZE(initial);
if (n > 0) {
arrayobject *self = (arrayobject *)a;
char *item = self->ob_item;
@@ -2499,7 +2579,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
self->ob_item = item;
Py_SIZE(self) = n / sizeof(Py_UNICODE);
- memcpy(item, PyUnicode_AS_DATA(initial), n);
+ memcpy(item, ustr, n);
self->allocated = Py_SIZE(self);
}
}
@@ -2520,7 +2600,11 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
}
PyErr_SetString(PyExc_ValueError,
+#ifdef HAVE_LONG_LONG
+ "bad typecode (must be b, B, u, h, H, i, I, l, L, q, Q, f or d)");
+#else
"bad typecode (must be b, B, u, h, H, i, I, l, L, f or d)");
+#endif
return NULL;
}
@@ -2543,12 +2627,18 @@ is a single character. The following type codes are defined:\n\
'I' unsigned integer 2 \n\
'l' signed integer 4 \n\
'L' unsigned integer 4 \n\
+ 'q' signed integer 8 (see note) \n\
+ 'Q' unsigned integer 8 (see note) \n\
'f' floating point 4 \n\
'd' floating point 8 \n\
\n\
NOTE: The 'u' typecode corresponds to Python's unicode character. On \n\
narrow builds this is 2-bytes on wide builds this is 4-bytes.\n\
\n\
+NOTE: The 'q' and 'Q' type codes are only available if the platform \n\
+C compiler used to build Python supports 'long long', or, on Windows, \n\
+'__int64'.\n\
+\n\
The constructor is:\n\
\n\
array(typecode [, initializer]) -- create a new array\n\
@@ -2693,6 +2783,36 @@ arrayiter_traverse(arrayiterobject *it, visitproc visit, void *arg)
return 0;
}
+static PyObject *
+arrayiter_reduce(arrayiterobject *it)
+{
+ return Py_BuildValue("N(O)n", _PyObject_GetBuiltin("iter"),
+ it->ao, it->index);
+}
+
+static PyObject *
+arrayiter_setstate(arrayiterobject *it, PyObject *state)
+{
+ Py_ssize_t index = PyLong_AsSsize_t(state);
+ if (index == -1 && PyErr_Occurred())
+ return NULL;
+ if (index < 0)
+ index = 0;
+ else if (index > Py_SIZE(it->ao))
+ index = Py_SIZE(it->ao); /* iterator exhausted */
+ it->index = index;
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
+static PyMethodDef arrayiter_methods[] = {
+ {"__reduce__", (PyCFunction)arrayiter_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)arrayiter_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
static PyTypeObject PyArrayIter_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"arrayiterator", /* tp_name */
@@ -2722,7 +2842,7 @@ static PyTypeObject PyArrayIter_Type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)arrayiter_next, /* tp_iternext */
- 0, /* tp_methods */
+ arrayiter_methods, /* tp_methods */
};
@@ -2752,9 +2872,9 @@ PyMODINIT_FUNC
PyInit_array(void)
{
PyObject *m;
+ char buffer[Py_ARRAY_LENGTH(descriptors)], *p;
PyObject *typecodes;
Py_ssize_t size = 0;
- register Py_UNICODE *p;
struct arraydescr *descr;
if (PyType_Ready(&Arraytype) < 0)
@@ -2773,13 +2893,13 @@ PyInit_array(void)
size++;
}
- typecodes = PyUnicode_FromStringAndSize(NULL, size);
- p = PyUnicode_AS_UNICODE(typecodes);
+ p = buffer;
for (descr = descriptors; descr->typecode != '\0'; descr++) {
*p++ = (char)descr->typecode;
}
+ typecodes = PyUnicode_DecodeASCII(buffer, p - buffer, NULL);
- PyModule_AddObject(m, "typecodes", (PyObject *)typecodes);
+ PyModule_AddObject(m, "typecodes", typecodes);
if (PyErr_Occurred()) {
Py_DECREF(m);
diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c
index 1ee7ead05f..f68d8047ed 100644
--- a/Modules/atexitmodule.c
+++ b/Modules/atexitmodule.c
@@ -211,6 +211,14 @@ atexit_clear(PyObject *self, PyObject *unused)
Py_RETURN_NONE;
}
+static void
+atexit_free(PyObject *m)
+{
+ atexitmodule_state *modstate;
+ modstate = GET_ATEXIT_STATE(m);
+ PyMem_Free(modstate->atexit_callbacks);
+}
+
PyDoc_STRVAR(atexit_unregister__doc__,
"unregister(func) -> None\n\
\n\
@@ -275,7 +283,7 @@ static struct PyModuleDef atexitmodule = {
NULL,
NULL,
NULL,
- NULL
+ (freefunc)atexit_free
};
PyMODINIT_FUNC
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 5c6925870d..3f047623eb 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -27,7 +27,8 @@ typedef short PyInt16;
#endif
static const int maxvals[] = {0, 0x7F, 0x7FFF, 0x7FFFFF, 0x7FFFFFFF};
-static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x80000000};
+/* -1 trick is needed on Windows to support -0x80000000 without a warning */
+static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x7FFFFFFF-1};
static const unsigned int masks[] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
static int
@@ -385,7 +386,9 @@ audioop_minmax(PyObject *self, PyObject *args)
signed char *cp;
Py_ssize_t len, i;
int size, val = 0;
- int min = 0x7fffffff, max = -0x80000000;
+ /* -1 trick below is needed on Windows to support -0x80000000 without
+ a warning */
+ int min = 0x7fffffff, max = -0x7FFFFFFF-1;
if (!PyArg_ParseTuple(args, "s#i:minmax", &cp, &len, &size))
return NULL;
@@ -530,7 +533,6 @@ audioop_findfit(PyObject *self, PyObject *args)
best_result = result;
best_j = 0;
- j = 0;
for ( j=1; j<=len1-len2; j++) {
aj_m1 = (double)cp1[j-1];
@@ -616,7 +618,6 @@ audioop_findmax(PyObject *self, PyObject *args)
best_result = result;
best_j = 0;
- j = 0;
for ( j=1; j<=len1-len2; j++) {
aj_m1 = (double)cp1[j-1];
@@ -1103,8 +1104,7 @@ audioop_ratecv(PyObject *self, PyObject *args)
PyErr_SetString(AudioopError, "# of channels should be >= 1");
return NULL;
}
- bytes_per_frame = size * nchannels;
- if (bytes_per_frame / nchannels != size) {
+ if (size > INT_MAX / nchannels) {
/* This overflow test is rigorously correct because
both multiplicands are >= 1. Use the argument names
from the docs for the error msg. */
@@ -1112,6 +1112,7 @@ audioop_ratecv(PyObject *self, PyObject *args)
"width * nchannels too big for a C int");
return NULL;
}
+ bytes_per_frame = size * nchannels;
if (weightA < 1 || weightB < 0) {
PyErr_SetString(AudioopError,
"weightA should be >= 1, weightB should be >= 0");
@@ -1431,7 +1432,6 @@ audioop_lin2adpcm(PyObject *self, PyObject *args)
if ( state == Py_None ) {
/* First time, it seems. Set defaults */
valpred = 0;
- step = 7;
index = 0;
} else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
return 0;
@@ -1532,7 +1532,6 @@ audioop_adpcm2lin(PyObject *self, PyObject *args)
if ( state == Py_None ) {
/* First time, it seems. Set defaults */
valpred = 0;
- step = 7;
index = 0;
} else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
return 0;
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 74db73955e..a84badc7c9 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -183,6 +183,44 @@ static unsigned short crctab_hqx[256] = {
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
};
+static int
+ascii_buffer_converter(PyObject *arg, Py_buffer *buf)
+{
+ if (arg == NULL) {
+ PyBuffer_Release(buf);
+ return 1;
+ }
+ if (PyUnicode_Check(arg)) {
+ if (PyUnicode_READY(arg) < 0)
+ return 0;
+ if (!PyUnicode_IS_ASCII(arg)) {
+ PyErr_SetString(PyExc_ValueError,
+ "string argument should contain only ASCII characters");
+ return 0;
+ }
+ assert(PyUnicode_KIND(arg) == PyUnicode_1BYTE_KIND);
+ buf->buf = (void *) PyUnicode_1BYTE_DATA(arg);
+ buf->len = PyUnicode_GET_LENGTH(arg);
+ buf->obj = NULL;
+ return 1;
+ }
+ if (PyObject_GetBuffer(arg, buf, PyBUF_SIMPLE) != 0) {
+ PyErr_Format(PyExc_TypeError,
+ "argument should be bytes, buffer or ASCII string, "
+ "not %R", Py_TYPE(arg));
+ return 0;
+ }
+ if (!PyBuffer_IsContiguous(buf, 'C')) {
+ PyErr_Format(PyExc_TypeError,
+ "argument should be a contiguous buffer, "
+ "not %R", Py_TYPE(arg));
+ PyBuffer_Release(buf);
+ return 0;
+ }
+ return Py_CLEANUP_SUPPORTED;
+}
+
+
PyDoc_STRVAR(doc_a2b_uu, "(ascii) -> bin. Decode a line of uuencoded data");
static PyObject *
@@ -196,7 +234,7 @@ binascii_a2b_uu(PyObject *self, PyObject *args)
PyObject *rv;
Py_ssize_t ascii_len, bin_len;
- if ( !PyArg_ParseTuple(args, "y*:a2b_uu", &pascii) )
+ if ( !PyArg_ParseTuple(args, "O&:a2b_uu", ascii_buffer_converter, &pascii) )
return NULL;
ascii_data = pascii.buf;
ascii_len = pascii.len;
@@ -370,7 +408,7 @@ binascii_a2b_base64(PyObject *self, PyObject *args)
Py_ssize_t ascii_len, bin_len;
int quad_pos = 0;
- if ( !PyArg_ParseTuple(args, "y*:a2b_base64", &pascii) )
+ if ( !PyArg_ParseTuple(args, "O&:a2b_base64", ascii_buffer_converter, &pascii) )
return NULL;
ascii_data = pascii.buf;
ascii_len = pascii.len;
@@ -546,7 +584,7 @@ binascii_a2b_hqx(PyObject *self, PyObject *args)
Py_ssize_t len;
int done = 0;
- if ( !PyArg_ParseTuple(args, "y*:a2b_hqx", &pascii) )
+ if ( !PyArg_ParseTuple(args, "O&:a2b_hqx", ascii_buffer_converter, &pascii) )
return NULL;
ascii_data = pascii.buf;
len = pascii.len;
@@ -1078,13 +1116,11 @@ binascii_hexlify(PyObject *self, PyObject *args)
/* make hex version of string, taken from shamodule.c */
for (i=j=0; i < arglen; i++) {
- char c;
+ unsigned char c;
c = (argbuf[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- retbuf[j++] = c;
+ retbuf[j++] = Py_hexdigits[c];
c = argbuf[i] & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- retbuf[j++] = c;
+ retbuf[j++] = Py_hexdigits[c];
}
PyBuffer_Release(&parg);
return retval;
@@ -1093,7 +1129,8 @@ binascii_hexlify(PyObject *self, PyObject *args)
PyDoc_STRVAR(doc_hexlify,
"b2a_hex(data) -> s; Hexadecimal representation of binary data.\n\
\n\
-This function is also available as \"hexlify()\".");
+The return value is a bytes object. This function is also\n\
+available as \"hexlify()\".");
static int
@@ -1121,7 +1158,7 @@ binascii_unhexlify(PyObject *self, PyObject *args)
char* retbuf;
Py_ssize_t i, j;
- if (!PyArg_ParseTuple(args, "y*:a2b_hex", &parg))
+ if (!PyArg_ParseTuple(args, "O&:a2b_hex", ascii_buffer_converter, &parg))
return NULL;
argbuf = parg.buf;
arglen = parg.len;
@@ -1199,8 +1236,8 @@ binascii_a2b_qp(PyObject *self, PyObject *args, PyObject *kwargs)
static char *kwlist[] = {"data", "header", NULL};
int header = 0;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i", kwlist, &pdata,
- &header))
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", kwlist,
+ ascii_buffer_converter, &pdata, &header))
return NULL;
data = pdata.buf;
datalen = pdata.len;
diff --git a/Modules/bz2module.c b/Modules/bz2module.c
deleted file mode 100644
index 2e99df9d86..0000000000
--- a/Modules/bz2module.c
+++ /dev/null
@@ -1,2193 +0,0 @@
-/*
-
-python-bz2 - python bz2 library interface
-
-Copyright (c) 2002 Gustavo Niemeyer <niemeyer@conectiva.com>
-Copyright (c) 2002 Python Software Foundation; All Rights Reserved
-
-*/
-
-#include "Python.h"
-#include <stdio.h>
-#include <bzlib.h>
-#include "structmember.h"
-
-#ifdef WITH_THREAD
-#include "pythread.h"
-#endif
-
-static char __author__[] =
-"The bz2 python module was written by:\n\
-\n\
- Gustavo Niemeyer <niemeyer@conectiva.com>\n\
-";
-
-/* Our very own off_t-like type, 64-bit if possible */
-/* copied from Objects/fileobject.c */
-#if !defined(HAVE_LARGEFILE_SUPPORT)
-typedef off_t Py_off_t;
-#elif SIZEOF_OFF_T >= 8
-typedef off_t Py_off_t;
-#elif SIZEOF_FPOS_T >= 8
-typedef fpos_t Py_off_t;
-#else
-#error "Large file support, but neither off_t nor fpos_t is large enough."
-#endif
-
-#define BUF(v) PyBytes_AS_STRING(v)
-
-#define MODE_CLOSED 0
-#define MODE_READ 1
-#define MODE_READ_EOF 2
-#define MODE_WRITE 3
-
-
-#ifndef BZ_CONFIG_ERROR
-
-#define BZ2_bzRead bzRead
-#define BZ2_bzReadOpen bzReadOpen
-#define BZ2_bzReadClose bzReadClose
-#define BZ2_bzWrite bzWrite
-#define BZ2_bzWriteOpen bzWriteOpen
-#define BZ2_bzWriteClose bzWriteClose
-#define BZ2_bzCompress bzCompress
-#define BZ2_bzCompressInit bzCompressInit
-#define BZ2_bzCompressEnd bzCompressEnd
-#define BZ2_bzDecompress bzDecompress
-#define BZ2_bzDecompressInit bzDecompressInit
-#define BZ2_bzDecompressEnd bzDecompressEnd
-
-#endif /* ! BZ_CONFIG_ERROR */
-
-
-#ifdef WITH_THREAD
-#define ACQUIRE_LOCK(obj) do { \
- if (!PyThread_acquire_lock(obj->lock, 0)) { \
- Py_BEGIN_ALLOW_THREADS \
- PyThread_acquire_lock(obj->lock, 1); \
- Py_END_ALLOW_THREADS \
- } } while(0)
-#define RELEASE_LOCK(obj) PyThread_release_lock(obj->lock)
-#else
-#define ACQUIRE_LOCK(obj)
-#define RELEASE_LOCK(obj)
-#endif
-
-#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
-
-/* ===================================================================== */
-/* Structure definitions. */
-
-typedef struct {
- PyObject_HEAD
- FILE *rawfp;
-
- char* f_buf; /* Allocated readahead buffer */
- char* f_bufend; /* Points after last occupied position */
- char* f_bufptr; /* Current buffer position */
-
- BZFILE *fp;
- int mode;
- Py_off_t pos;
- Py_off_t size;
-#ifdef WITH_THREAD
- PyThread_type_lock lock;
-#endif
-} BZ2FileObject;
-
-typedef struct {
- PyObject_HEAD
- bz_stream bzs;
- int running;
-#ifdef WITH_THREAD
- PyThread_type_lock lock;
-#endif
-} BZ2CompObject;
-
-typedef struct {
- PyObject_HEAD
- bz_stream bzs;
- int running;
- PyObject *unused_data;
-#ifdef WITH_THREAD
- PyThread_type_lock lock;
-#endif
-} BZ2DecompObject;
-
-/* ===================================================================== */
-/* Utility functions. */
-
-/* Refuse regular I/O if there's data in the iteration-buffer.
- * Mixing them would cause data to arrive out of order, as the read*
- * methods don't use the iteration buffer. */
-static int
-check_iterbuffered(BZ2FileObject *f)
-{
- if (f->f_buf != NULL &&
- (f->f_bufend - f->f_bufptr) > 0 &&
- f->f_buf[0] != '\0') {
- PyErr_SetString(PyExc_ValueError,
- "Mixing iteration and read methods would lose data");
- return -1;
- }
- return 0;
-}
-
-static int
-Util_CatchBZ2Error(int bzerror)
-{
- int ret = 0;
- switch(bzerror) {
- case BZ_OK:
- case BZ_STREAM_END:
- break;
-
-#ifdef BZ_CONFIG_ERROR
- case BZ_CONFIG_ERROR:
- PyErr_SetString(PyExc_SystemError,
- "the bz2 library was not compiled "
- "correctly");
- ret = 1;
- break;
-#endif
-
- case BZ_PARAM_ERROR:
- PyErr_SetString(PyExc_ValueError,
- "the bz2 library has received wrong "
- "parameters");
- ret = 1;
- break;
-
- case BZ_MEM_ERROR:
- PyErr_NoMemory();
- ret = 1;
- break;
-
- case BZ_DATA_ERROR:
- case BZ_DATA_ERROR_MAGIC:
- PyErr_SetString(PyExc_IOError, "invalid data stream");
- ret = 1;
- break;
-
- case BZ_IO_ERROR:
- PyErr_SetString(PyExc_IOError, "unknown IO error");
- ret = 1;
- break;
-
- case BZ_UNEXPECTED_EOF:
- PyErr_SetString(PyExc_EOFError,
- "compressed file ended before the "
- "logical end-of-stream was detected");
- ret = 1;
- break;
-
- case BZ_SEQUENCE_ERROR:
- PyErr_SetString(PyExc_RuntimeError,
- "wrong sequence of bz2 library "
- "commands used");
- ret = 1;
- break;
- }
- return ret;
-}
-
-#if BUFSIZ < 8192
-#define SMALLCHUNK 8192
-#else
-#define SMALLCHUNK BUFSIZ
-#endif
-
-/* This is a hacked version of Python's fileobject.c:new_buffersize(). */
-static size_t
-Util_NewBufferSize(size_t currentsize)
-{
- /* Expand the buffer by an amount proportional to the current size,
- giving us amortized linear-time behavior. Use a less-than-double
- growth factor to avoid excessive allocation. */
- return currentsize + (currentsize >> 3) + 6;
-}
-
-static int
-Util_GrowBuffer(PyObject **buf)
-{
- size_t size = PyBytes_GET_SIZE(*buf);
- size_t new_size = Util_NewBufferSize(size);
- if (new_size > size) {
- return _PyBytes_Resize(buf, new_size);
- } else { /* overflow */
- PyErr_SetString(PyExc_OverflowError,
- "Unable to allocate buffer - output too large");
- return -1;
- }
-}
-
-/* This is a hacked version of Python's fileobject.c:get_line(). */
-static PyObject *
-Util_GetLine(BZ2FileObject *f, int n)
-{
- char c;
- char *buf, *end;
- size_t total_v_size; /* total # of slots in buffer */
- size_t used_v_size; /* # used slots in buffer */
- size_t increment; /* amount to increment the buffer */
- PyObject *v;
- int bzerror;
- int bytes_read;
-
- total_v_size = n > 0 ? n : 100;
- v = PyBytes_FromStringAndSize((char *)NULL, total_v_size);
- if (v == NULL)
- return NULL;
-
- buf = BUF(v);
- end = buf + total_v_size;
-
- for (;;) {
- Py_BEGIN_ALLOW_THREADS
- do {
- bytes_read = BZ2_bzRead(&bzerror, f->fp, &c, 1);
- f->pos++;
- if (bytes_read == 0)
- break;
- *buf++ = c;
- } while (bzerror == BZ_OK && c != '\n' && buf != end);
- Py_END_ALLOW_THREADS
- if (bzerror == BZ_STREAM_END) {
- f->size = f->pos;
- f->mode = MODE_READ_EOF;
- break;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- Py_DECREF(v);
- return NULL;
- }
- if (c == '\n')
- break;
- /* Must be because buf == end */
- if (n > 0)
- break;
- used_v_size = total_v_size;
- increment = total_v_size >> 2; /* mild exponential growth */
- total_v_size += increment;
- if (total_v_size > INT_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "line is longer than a Python string can hold");
- Py_DECREF(v);
- return NULL;
- }
- if (_PyBytes_Resize(&v, total_v_size) < 0) {
- return NULL;
- }
- buf = BUF(v) + used_v_size;
- end = BUF(v) + total_v_size;
- }
-
- used_v_size = buf - BUF(v);
- if (used_v_size != total_v_size) {
- if (_PyBytes_Resize(&v, used_v_size) < 0) {
- v = NULL;
- }
- }
- return v;
-}
-
-/* This is a hacked version of Python's fileobject.c:drop_readahead(). */
-static void
-Util_DropReadAhead(BZ2FileObject *f)
-{
- if (f->f_buf != NULL) {
- PyMem_Free(f->f_buf);
- f->f_buf = NULL;
- }
-}
-
-/* This is a hacked version of Python's fileobject.c:readahead(). */
-static int
-Util_ReadAhead(BZ2FileObject *f, int bufsize)
-{
- int chunksize;
- int bzerror;
-
- if (f->f_buf != NULL) {
- if((f->f_bufend - f->f_bufptr) >= 1)
- return 0;
- else
- Util_DropReadAhead(f);
- }
- if (f->mode == MODE_READ_EOF) {
- f->f_bufptr = f->f_buf;
- f->f_bufend = f->f_buf;
- return 0;
- }
- if ((f->f_buf = PyMem_Malloc(bufsize)) == NULL) {
- PyErr_NoMemory();
- return -1;
- }
- Py_BEGIN_ALLOW_THREADS
- chunksize = BZ2_bzRead(&bzerror, f->fp, f->f_buf, bufsize);
- Py_END_ALLOW_THREADS
- f->pos += chunksize;
- if (bzerror == BZ_STREAM_END) {
- f->size = f->pos;
- f->mode = MODE_READ_EOF;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- Util_DropReadAhead(f);
- return -1;
- }
- f->f_bufptr = f->f_buf;
- f->f_bufend = f->f_buf + chunksize;
- return 0;
-}
-
-/* This is a hacked version of Python's
- * fileobject.c:readahead_get_line_skip(). */
-static PyBytesObject *
-Util_ReadAheadGetLineSkip(BZ2FileObject *f, int skip, int bufsize)
-{
- PyBytesObject* s;
- char *bufptr;
- char *buf;
- int len;
-
- if (f->f_buf == NULL)
- if (Util_ReadAhead(f, bufsize) < 0)
- return NULL;
-
- len = f->f_bufend - f->f_bufptr;
- if (len == 0)
- return (PyBytesObject *)
- PyBytes_FromStringAndSize(NULL, skip);
- bufptr = memchr(f->f_bufptr, '\n', len);
- if (bufptr != NULL) {
- bufptr++; /* Count the '\n' */
- len = bufptr - f->f_bufptr;
- s = (PyBytesObject *)
- PyBytes_FromStringAndSize(NULL, skip+len);
- if (s == NULL)
- return NULL;
- memcpy(PyBytes_AS_STRING(s)+skip, f->f_bufptr, len);
- f->f_bufptr = bufptr;
- if (bufptr == f->f_bufend)
- Util_DropReadAhead(f);
- } else {
- bufptr = f->f_bufptr;
- buf = f->f_buf;
- f->f_buf = NULL; /* Force new readahead buffer */
- s = Util_ReadAheadGetLineSkip(f, skip+len,
- bufsize + (bufsize>>2));
- if (s == NULL) {
- PyMem_Free(buf);
- return NULL;
- }
- memcpy(PyBytes_AS_STRING(s)+skip, bufptr, len);
- PyMem_Free(buf);
- }
- return s;
-}
-
-/* ===================================================================== */
-/* Methods of BZ2File. */
-
-PyDoc_STRVAR(BZ2File_read__doc__,
-"read([size]) -> string\n\
-\n\
-Read at most size uncompressed bytes, returned as a string. If the size\n\
-argument is negative or omitted, read until EOF is reached.\n\
-");
-
-/* This is a hacked version of Python's fileobject.c:file_read(). */
-static PyObject *
-BZ2File_read(BZ2FileObject *self, PyObject *args)
-{
- long bytesrequested = -1;
- size_t bytesread, buffersize, chunksize;
- int bzerror;
- PyObject *ret = NULL;
-
- if (!PyArg_ParseTuple(args, "|l:read", &bytesrequested))
- return NULL;
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_READ:
- break;
- case MODE_READ_EOF:
- ret = PyBytes_FromStringAndSize("", 0);
- goto cleanup;
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
- default:
- PyErr_SetString(PyExc_IOError,
- "file is not ready for reading");
- goto cleanup;
- }
-
- /* refuse to mix with f.next() */
- if (check_iterbuffered(self))
- goto cleanup;
-
- if (bytesrequested < 0)
- buffersize = Util_NewBufferSize((size_t)0);
- else
- buffersize = bytesrequested;
- if (buffersize > INT_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "requested number of bytes is "
- "more than a Python string can hold");
- goto cleanup;
- }
- ret = PyBytes_FromStringAndSize((char *)NULL, buffersize);
- if (ret == NULL || buffersize == 0)
- goto cleanup;
- bytesread = 0;
-
- for (;;) {
- Py_BEGIN_ALLOW_THREADS
- chunksize = BZ2_bzRead(&bzerror, self->fp,
- BUF(ret)+bytesread,
- buffersize-bytesread);
- self->pos += chunksize;
- Py_END_ALLOW_THREADS
- bytesread += chunksize;
- if (bzerror == BZ_STREAM_END) {
- self->size = self->pos;
- self->mode = MODE_READ_EOF;
- break;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- Py_DECREF(ret);
- ret = NULL;
- goto cleanup;
- }
- if (bytesrequested < 0) {
- buffersize = Util_NewBufferSize(buffersize);
- if (_PyBytes_Resize(&ret, buffersize) < 0) {
- ret = NULL;
- goto cleanup;
- }
- } else {
- break;
- }
- }
- if (bytesread != buffersize) {
- if (_PyBytes_Resize(&ret, bytesread) < 0) {
- ret = NULL;
- }
- }
-
-cleanup:
- RELEASE_LOCK(self);
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_readline__doc__,
-"readline([size]) -> string\n\
-\n\
-Return the next line from the file, as a string, retaining newline.\n\
-A non-negative size argument will limit the maximum number of bytes to\n\
-return (an incomplete line may be returned then). Return an empty\n\
-string at EOF.\n\
-");
-
-static PyObject *
-BZ2File_readline(BZ2FileObject *self, PyObject *args)
-{
- PyObject *ret = NULL;
- int sizehint = -1;
-
- if (!PyArg_ParseTuple(args, "|i:readline", &sizehint))
- return NULL;
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_READ:
- break;
- case MODE_READ_EOF:
- ret = PyBytes_FromStringAndSize("", 0);
- goto cleanup;
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
- default:
- PyErr_SetString(PyExc_IOError,
- "file is not ready for reading");
- goto cleanup;
- }
-
- /* refuse to mix with f.next() */
- if (check_iterbuffered(self))
- goto cleanup;
-
- if (sizehint == 0)
- ret = PyBytes_FromStringAndSize("", 0);
- else
- ret = Util_GetLine(self, (sizehint < 0) ? 0 : sizehint);
-
-cleanup:
- RELEASE_LOCK(self);
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_readlines__doc__,
-"readlines([size]) -> list\n\
-\n\
-Call readline() repeatedly and return a list of lines read.\n\
-The optional size argument, if given, is an approximate bound on the\n\
-total number of bytes in the lines returned.\n\
-");
-
-/* This is a hacked version of Python's fileobject.c:file_readlines(). */
-static PyObject *
-BZ2File_readlines(BZ2FileObject *self, PyObject *args)
-{
- long sizehint = 0;
- PyObject *list = NULL;
- PyObject *line;
- char small_buffer[SMALLCHUNK];
- char *buffer = small_buffer;
- size_t buffersize = SMALLCHUNK;
- PyObject *big_buffer = NULL;
- size_t nfilled = 0;
- size_t nread;
- size_t totalread = 0;
- char *p, *q, *end;
- int err;
- int shortread = 0;
- int bzerror;
-
- if (!PyArg_ParseTuple(args, "|l:readlines", &sizehint))
- return NULL;
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_READ:
- break;
- case MODE_READ_EOF:
- list = PyList_New(0);
- goto cleanup;
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
- default:
- PyErr_SetString(PyExc_IOError,
- "file is not ready for reading");
- goto cleanup;
- }
-
- /* refuse to mix with f.next() */
- if (check_iterbuffered(self))
- goto cleanup;
-
- if ((list = PyList_New(0)) == NULL)
- goto cleanup;
-
- for (;;) {
- Py_BEGIN_ALLOW_THREADS
- nread = BZ2_bzRead(&bzerror, self->fp,
- buffer+nfilled, buffersize-nfilled);
- self->pos += nread;
- Py_END_ALLOW_THREADS
- if (bzerror == BZ_STREAM_END) {
- self->size = self->pos;
- self->mode = MODE_READ_EOF;
- if (nread == 0) {
- sizehint = 0;
- break;
- }
- shortread = 1;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- error:
- Py_DECREF(list);
- list = NULL;
- goto cleanup;
- }
- totalread += nread;
- p = memchr(buffer+nfilled, '\n', nread);
- if (!shortread && p == NULL) {
- /* Need a larger buffer to fit this line */
- nfilled += nread;
- buffersize *= 2;
- if (buffersize > INT_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "line is longer than a Python string can hold");
- goto error;
- }
- if (big_buffer == NULL) {
- /* Create the big buffer */
- big_buffer = PyBytes_FromStringAndSize(
- NULL, buffersize);
- if (big_buffer == NULL)
- goto error;
- buffer = PyBytes_AS_STRING(big_buffer);
- memcpy(buffer, small_buffer, nfilled);
- }
- else {
- /* Grow the big buffer */
- if (_PyBytes_Resize(&big_buffer, buffersize) < 0){
- big_buffer = NULL;
- goto error;
- }
- buffer = PyBytes_AS_STRING(big_buffer);
- }
- continue;
- }
- end = buffer+nfilled+nread;
- q = buffer;
- while (p != NULL) {
- /* Process complete lines */
- p++;
- line = PyBytes_FromStringAndSize(q, p-q);
- if (line == NULL)
- goto error;
- err = PyList_Append(list, line);
- Py_DECREF(line);
- if (err != 0)
- goto error;
- q = p;
- p = memchr(q, '\n', end-q);
- }
- /* Move the remaining incomplete line to the start */
- nfilled = end-q;
- memmove(buffer, q, nfilled);
- if (sizehint > 0)
- if (totalread >= (size_t)sizehint)
- break;
- if (shortread) {
- sizehint = 0;
- break;
- }
- }
- if (nfilled != 0) {
- /* Partial last line */
- line = PyBytes_FromStringAndSize(buffer, nfilled);
- if (line == NULL)
- goto error;
- if (sizehint > 0) {
- /* Need to complete the last line */
- PyObject *rest = Util_GetLine(self, 0);
- if (rest == NULL) {
- Py_DECREF(line);
- goto error;
- }
- PyBytes_Concat(&line, rest);
- Py_DECREF(rest);
- if (line == NULL)
- goto error;
- }
- err = PyList_Append(list, line);
- Py_DECREF(line);
- if (err != 0)
- goto error;
- }
-
- cleanup:
- RELEASE_LOCK(self);
- if (big_buffer) {
- Py_DECREF(big_buffer);
- }
- return list;
-}
-
-PyDoc_STRVAR(BZ2File_write__doc__,
-"write(data) -> None\n\
-\n\
-Write the 'data' string to file. Note that due to buffering, close() may\n\
-be needed before the file on disk reflects the data written.\n\
-");
-
-/* This is a hacked version of Python's fileobject.c:file_write(). */
-static PyObject *
-BZ2File_write(BZ2FileObject *self, PyObject *args)
-{
- PyObject *ret = NULL;
- Py_buffer pbuf;
- char *buf;
- int len;
- int bzerror;
-
- if (!PyArg_ParseTuple(args, "y*:write", &pbuf))
- return NULL;
- buf = pbuf.buf;
- len = pbuf.len;
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_WRITE:
- break;
-
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
-
- default:
- PyErr_SetString(PyExc_IOError,
- "file is not ready for writing");
- goto cleanup;
- }
-
- Py_BEGIN_ALLOW_THREADS
- BZ2_bzWrite (&bzerror, self->fp, buf, len);
- self->pos += len;
- Py_END_ALLOW_THREADS
-
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto cleanup;
- }
-
- Py_INCREF(Py_None);
- ret = Py_None;
-
-cleanup:
- PyBuffer_Release(&pbuf);
- RELEASE_LOCK(self);
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_writelines__doc__,
-"writelines(sequence_of_strings) -> None\n\
-\n\
-Write the sequence of strings to the file. Note that newlines are not\n\
-added. The sequence can be any iterable object producing strings. This is\n\
-equivalent to calling write() for each string.\n\
-");
-
-/* This is a hacked version of Python's fileobject.c:file_writelines(). */
-static PyObject *
-BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
-{
-#define CHUNKSIZE 1000
- PyObject *list = NULL;
- PyObject *iter = NULL;
- PyObject *ret = NULL;
- PyObject *line;
- int i, j, index, len, islist;
- int bzerror;
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_WRITE:
- break;
-
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto error;
-
- default:
- PyErr_SetString(PyExc_IOError,
- "file is not ready for writing");
- goto error;
- }
-
- islist = PyList_Check(seq);
- if (!islist) {
- iter = PyObject_GetIter(seq);
- if (iter == NULL) {
- PyErr_SetString(PyExc_TypeError,
- "writelines() requires an iterable argument");
- goto error;
- }
- list = PyList_New(CHUNKSIZE);
- if (list == NULL)
- goto error;
- }
-
- /* Strategy: slurp CHUNKSIZE lines into a private list,
- checking that they are all strings, then write that list
- without holding the interpreter lock, then come back for more. */
- for (index = 0; ; index += CHUNKSIZE) {
- if (islist) {
- Py_XDECREF(list);
- list = PyList_GetSlice(seq, index, index+CHUNKSIZE);
- if (list == NULL)
- goto error;
- j = PyList_GET_SIZE(list);
- }
- else {
- for (j = 0; j < CHUNKSIZE; j++) {
- line = PyIter_Next(iter);
- if (line == NULL) {
- if (PyErr_Occurred())
- goto error;
- break;
- }
- PyList_SetItem(list, j, line);
- }
- }
- if (j == 0)
- break;
-
- /* Check that all entries are indeed byte strings. If not,
- apply the same rules as for file.write() and
- convert the rets to strings. This is slow, but
- seems to be the only way since all conversion APIs
- could potentially execute Python code. */
- for (i = 0; i < j; i++) {
- PyObject *v = PyList_GET_ITEM(list, i);
- if (!PyBytes_Check(v)) {
- const char *buffer;
- Py_ssize_t len;
- if (PyObject_AsCharBuffer(v, &buffer, &len)) {
- PyErr_SetString(PyExc_TypeError,
- "writelines() "
- "argument must be "
- "a sequence of "
- "bytes objects");
- goto error;
- }
- line = PyBytes_FromStringAndSize(buffer,
- len);
- if (line == NULL)
- goto error;
- Py_DECREF(v);
- PyList_SET_ITEM(list, i, line);
- }
- }
-
- /* Since we are releasing the global lock, the
- following code may *not* execute Python code. */
- Py_BEGIN_ALLOW_THREADS
- for (i = 0; i < j; i++) {
- line = PyList_GET_ITEM(list, i);
- len = PyBytes_GET_SIZE(line);
- BZ2_bzWrite (&bzerror, self->fp,
- PyBytes_AS_STRING(line), len);
- if (bzerror != BZ_OK) {
- Py_BLOCK_THREADS
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
- }
- Py_END_ALLOW_THREADS
-
- if (j < CHUNKSIZE)
- break;
- }
-
- Py_INCREF(Py_None);
- ret = Py_None;
-
- error:
- RELEASE_LOCK(self);
- Py_XDECREF(list);
- Py_XDECREF(iter);
- return ret;
-#undef CHUNKSIZE
-}
-
-PyDoc_STRVAR(BZ2File_seek__doc__,
-"seek(offset [, whence]) -> None\n\
-\n\
-Move to new file position. Argument offset is a byte count. Optional\n\
-argument whence defaults to 0 (offset from start of file, offset\n\
-should be >= 0); other values are 1 (move relative to current position,\n\
-positive or negative), and 2 (move relative to end of file, usually\n\
-negative, although many platforms allow seeking beyond the end of a file).\n\
-\n\
-Note that seeking of bz2 files is emulated, and depending on the parameters\n\
-the operation may be extremely slow.\n\
-");
-
-static PyObject *
-BZ2File_seek(BZ2FileObject *self, PyObject *args)
-{
- int where = 0;
- PyObject *offobj;
- Py_off_t offset;
- char small_buffer[SMALLCHUNK];
- char *buffer = small_buffer;
- size_t buffersize = SMALLCHUNK;
- Py_off_t bytesread = 0;
- size_t readsize;
- int chunksize;
- int bzerror;
- PyObject *ret = NULL;
-
- if (!PyArg_ParseTuple(args, "O|i:seek", &offobj, &where))
- return NULL;
-#if !defined(HAVE_LARGEFILE_SUPPORT)
- offset = PyLong_AsLong(offobj);
-#else
- offset = PyLong_Check(offobj) ?
- PyLong_AsLongLong(offobj) : PyLong_AsLong(offobj);
-#endif
- if (PyErr_Occurred())
- return NULL;
-
- ACQUIRE_LOCK(self);
- Util_DropReadAhead(self);
- switch (self->mode) {
- case MODE_READ:
- case MODE_READ_EOF:
- break;
-
- case MODE_CLOSED:
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
-
- default:
- PyErr_SetString(PyExc_IOError,
- "seek works only while reading");
- goto cleanup;
- }
-
- if (where == 2) {
- if (self->size == -1) {
- assert(self->mode != MODE_READ_EOF);
- for (;;) {
- Py_BEGIN_ALLOW_THREADS
- chunksize = BZ2_bzRead(&bzerror, self->fp,
- buffer, buffersize);
- self->pos += chunksize;
- Py_END_ALLOW_THREADS
-
- bytesread += chunksize;
- if (bzerror == BZ_STREAM_END) {
- break;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto cleanup;
- }
- }
- self->mode = MODE_READ_EOF;
- self->size = self->pos;
- bytesread = 0;
- }
- offset = self->size + offset;
- } else if (where == 1) {
- offset = self->pos + offset;
- }
-
- /* Before getting here, offset must be the absolute position the file
- * pointer should be set to. */
-
- if (offset >= self->pos) {
- /* we can move forward */
- offset -= self->pos;
- } else {
- /* we cannot move back, so rewind the stream */
- BZ2_bzReadClose(&bzerror, self->fp);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto cleanup;
- }
- rewind(self->rawfp);
- self->pos = 0;
- self->fp = BZ2_bzReadOpen(&bzerror, self->rawfp,
- 0, 0, NULL, 0);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto cleanup;
- }
- self->mode = MODE_READ;
- }
-
- if (offset <= 0 || self->mode == MODE_READ_EOF)
- goto exit;
-
- /* Before getting here, offset must be set to the number of bytes
- * to walk forward. */
- for (;;) {
- if (offset-bytesread > buffersize)
- readsize = buffersize;
- else
- /* offset might be wider that readsize, but the result
- * of the subtraction is bound by buffersize (see the
- * condition above). buffersize is 8192. */
- readsize = (size_t)(offset-bytesread);
- Py_BEGIN_ALLOW_THREADS
- chunksize = BZ2_bzRead(&bzerror, self->fp, buffer, readsize);
- self->pos += chunksize;
- Py_END_ALLOW_THREADS
- bytesread += chunksize;
- if (bzerror == BZ_STREAM_END) {
- self->size = self->pos;
- self->mode = MODE_READ_EOF;
- break;
- } else if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto cleanup;
- }
- if (bytesread == offset)
- break;
- }
-
-exit:
- Py_INCREF(Py_None);
- ret = Py_None;
-
-cleanup:
- RELEASE_LOCK(self);
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_tell__doc__,
-"tell() -> int\n\
-\n\
-Return the current file position, an integer (may be a long integer).\n\
-");
-
-static PyObject *
-BZ2File_tell(BZ2FileObject *self, PyObject *args)
-{
- PyObject *ret = NULL;
-
- if (self->mode == MODE_CLOSED) {
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- goto cleanup;
- }
-
-#if !defined(HAVE_LARGEFILE_SUPPORT)
- ret = PyLong_FromLong(self->pos);
-#else
- ret = PyLong_FromLongLong(self->pos);
-#endif
-
-cleanup:
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_close__doc__,
-"close() -> None or (perhaps) an integer\n\
-\n\
-Close the file. Sets data attribute .closed to true. A closed file\n\
-cannot be used for further I/O operations. close() may be called more\n\
-than once without error.\n\
-");
-
-static PyObject *
-BZ2File_close(BZ2FileObject *self)
-{
- PyObject *ret = NULL;
- int bzerror = BZ_OK;
-
- if (self->mode == MODE_CLOSED) {
- Py_RETURN_NONE;
- }
-
- ACQUIRE_LOCK(self);
- switch (self->mode) {
- case MODE_READ:
- case MODE_READ_EOF:
- BZ2_bzReadClose(&bzerror, self->fp);
- break;
- case MODE_WRITE:
- BZ2_bzWriteClose(&bzerror, self->fp,
- 0, NULL, NULL);
- break;
- }
- self->mode = MODE_CLOSED;
- fclose(self->rawfp);
- self->rawfp = NULL;
- if (bzerror == BZ_OK) {
- Py_INCREF(Py_None);
- ret = Py_None;
- }
- else {
- Util_CatchBZ2Error(bzerror);
- }
-
- RELEASE_LOCK(self);
- return ret;
-}
-
-PyDoc_STRVAR(BZ2File_enter_doc,
-"__enter__() -> self.");
-
-static PyObject *
-BZ2File_enter(BZ2FileObject *self)
-{
- if (self->mode == MODE_CLOSED) {
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- return NULL;
- }
- Py_INCREF(self);
- return (PyObject *) self;
-}
-
-PyDoc_STRVAR(BZ2File_exit_doc,
-"__exit__(*excinfo) -> None. Closes the file.");
-
-static PyObject *
-BZ2File_exit(BZ2FileObject *self, PyObject *args)
-{
- PyObject *ret = PyObject_CallMethod((PyObject *) self, "close", NULL);
- if (!ret)
- /* If error occurred, pass through */
- return NULL;
- Py_DECREF(ret);
- Py_RETURN_NONE;
-}
-
-
-static PyObject *BZ2File_getiter(BZ2FileObject *self);
-
-static PyMethodDef BZ2File_methods[] = {
- {"read", (PyCFunction)BZ2File_read, METH_VARARGS, BZ2File_read__doc__},
- {"readline", (PyCFunction)BZ2File_readline, METH_VARARGS, BZ2File_readline__doc__},
- {"readlines", (PyCFunction)BZ2File_readlines, METH_VARARGS, BZ2File_readlines__doc__},
- {"write", (PyCFunction)BZ2File_write, METH_VARARGS, BZ2File_write__doc__},
- {"writelines", (PyCFunction)BZ2File_writelines, METH_O, BZ2File_writelines__doc__},
- {"seek", (PyCFunction)BZ2File_seek, METH_VARARGS, BZ2File_seek__doc__},
- {"tell", (PyCFunction)BZ2File_tell, METH_NOARGS, BZ2File_tell__doc__},
- {"close", (PyCFunction)BZ2File_close, METH_NOARGS, BZ2File_close__doc__},
- {"__enter__", (PyCFunction)BZ2File_enter, METH_NOARGS, BZ2File_enter_doc},
- {"__exit__", (PyCFunction)BZ2File_exit, METH_VARARGS, BZ2File_exit_doc},
- {NULL, NULL} /* sentinel */
-};
-
-
-/* ===================================================================== */
-/* Getters and setters of BZ2File. */
-
-static PyObject *
-BZ2File_get_closed(BZ2FileObject *self, void *closure)
-{
- return PyLong_FromLong(self->mode == MODE_CLOSED);
-}
-
-static PyGetSetDef BZ2File_getset[] = {
- {"closed", (getter)BZ2File_get_closed, NULL,
- "True if the file is closed"},
- {NULL} /* Sentinel */
-};
-
-
-/* ===================================================================== */
-/* Slot definitions for BZ2File_Type. */
-
-static int
-BZ2File_init(BZ2FileObject *self, PyObject *args, PyObject *kwargs)
-{
- static char *kwlist[] = {"filename", "mode", "buffering",
- "compresslevel", 0};
- PyObject *name_obj = NULL;
- char *name;
- char *mode = "r";
- int buffering = -1;
- int compresslevel = 9;
- int bzerror;
- int mode_char = 0;
-
- self->size = -1;
-
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|sii:BZ2File",
- kwlist, PyUnicode_FSConverter, &name_obj,
- &mode, &buffering,
- &compresslevel))
- return -1;
-
- name = PyBytes_AsString(name_obj);
- if (compresslevel < 1 || compresslevel > 9) {
- PyErr_SetString(PyExc_ValueError,
- "compresslevel must be between 1 and 9");
- Py_DECREF(name_obj);
- return -1;
- }
-
- for (;;) {
- int error = 0;
- switch (*mode) {
- case 'r':
- case 'w':
- if (mode_char)
- error = 1;
- mode_char = *mode;
- break;
-
- case 'b':
- break;
-
- default:
- error = 1;
- break;
- }
- if (error) {
- PyErr_Format(PyExc_ValueError,
- "invalid mode char %c", *mode);
- Py_DECREF(name_obj);
- return -1;
- }
- mode++;
- if (*mode == '\0')
- break;
- }
-
- if (mode_char == 0) {
- mode_char = 'r';
- }
-
- mode = (mode_char == 'r') ? "rb" : "wb";
-
- self->rawfp = fopen(name, mode);
- Py_DECREF(name_obj);
- if (self->rawfp == NULL) {
- PyErr_SetFromErrno(PyExc_IOError);
- return -1;
- }
- /* XXX Ignore buffering */
-
- /* From now on, we have stuff to dealloc, so jump to error label
- * instead of returning */
-
-#ifdef WITH_THREAD
- self->lock = PyThread_allocate_lock();
- if (!self->lock) {
- PyErr_SetString(PyExc_MemoryError, "unable to allocate lock");
- goto error;
- }
-#endif
-
- if (mode_char == 'r')
- self->fp = BZ2_bzReadOpen(&bzerror, self->rawfp,
- 0, 0, NULL, 0);
- else
- self->fp = BZ2_bzWriteOpen(&bzerror, self->rawfp,
- compresslevel, 0, 0);
-
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
-
- self->mode = (mode_char == 'r') ? MODE_READ : MODE_WRITE;
-
- return 0;
-
-error:
- fclose(self->rawfp);
- self->rawfp = NULL;
-#ifdef WITH_THREAD
- if (self->lock) {
- PyThread_free_lock(self->lock);
- self->lock = NULL;
- }
-#endif
- return -1;
-}
-
-static void
-BZ2File_dealloc(BZ2FileObject *self)
-{
- int bzerror;
-#ifdef WITH_THREAD
- if (self->lock)
- PyThread_free_lock(self->lock);
-#endif
- switch (self->mode) {
- case MODE_READ:
- case MODE_READ_EOF:
- BZ2_bzReadClose(&bzerror, self->fp);
- break;
- case MODE_WRITE:
- BZ2_bzWriteClose(&bzerror, self->fp,
- 0, NULL, NULL);
- break;
- }
- Util_DropReadAhead(self);
- if (self->rawfp != NULL)
- fclose(self->rawfp);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-/* This is a hacked version of Python's fileobject.c:file_getiter(). */
-static PyObject *
-BZ2File_getiter(BZ2FileObject *self)
-{
- if (self->mode == MODE_CLOSED) {
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- return NULL;
- }
- Py_INCREF((PyObject*)self);
- return (PyObject *)self;
-}
-
-/* This is a hacked version of Python's fileobject.c:file_iternext(). */
-#define READAHEAD_BUFSIZE 8192
-static PyObject *
-BZ2File_iternext(BZ2FileObject *self)
-{
- PyBytesObject* ret;
- ACQUIRE_LOCK(self);
- if (self->mode == MODE_CLOSED) {
- RELEASE_LOCK(self);
- PyErr_SetString(PyExc_ValueError,
- "I/O operation on closed file");
- return NULL;
- }
- ret = Util_ReadAheadGetLineSkip(self, 0, READAHEAD_BUFSIZE);
- RELEASE_LOCK(self);
- if (ret == NULL || PyBytes_GET_SIZE(ret) == 0) {
- Py_XDECREF(ret);
- return NULL;
- }
- return (PyObject *)ret;
-}
-
-/* ===================================================================== */
-/* BZ2File_Type definition. */
-
-PyDoc_VAR(BZ2File__doc__) =
-PyDoc_STR(
-"BZ2File(name [, mode='r', buffering=0, compresslevel=9]) -> file object\n\
-\n\
-Open a bz2 file. The mode can be 'r' or 'w', for reading (default) or\n\
-writing. When opened for writing, the file will be created if it doesn't\n\
-exist, and truncated otherwise. If the buffering argument is given, 0 means\n\
-unbuffered, and larger numbers specify the buffer size. If compresslevel\n\
-is given, must be a number between 1 and 9.\n\
-Data read is always returned in bytes; data written ought to be bytes.\n\
-");
-
-static PyTypeObject BZ2File_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "bz2.BZ2File", /*tp_name*/
- sizeof(BZ2FileObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)BZ2File_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_reserved*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- PyObject_GenericGetAttr,/*tp_getattro*/
- PyObject_GenericSetAttr,/*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
- BZ2File__doc__, /*tp_doc*/
- 0, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- (getiterfunc)BZ2File_getiter, /*tp_iter*/
- (iternextfunc)BZ2File_iternext, /*tp_iternext*/
- BZ2File_methods, /*tp_methods*/
- 0, /*tp_members*/
- BZ2File_getset, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- 0, /*tp_dictoffset*/
- (initproc)BZ2File_init, /*tp_init*/
- PyType_GenericAlloc, /*tp_alloc*/
- PyType_GenericNew, /*tp_new*/
- PyObject_Free, /*tp_free*/
- 0, /*tp_is_gc*/
-};
-
-
-/* ===================================================================== */
-/* Methods of BZ2Comp. */
-
-PyDoc_STRVAR(BZ2Comp_compress__doc__,
-"compress(data) -> string\n\
-\n\
-Provide more data to the compressor object. It will return chunks of\n\
-compressed data whenever possible. When you've finished providing data\n\
-to compress, call the flush() method to finish the compression process,\n\
-and return what is left in the internal buffers.\n\
-");
-
-static PyObject *
-BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
-{
- Py_buffer pdata;
- size_t input_left;
- size_t output_size = 0;
- PyObject *ret = NULL;
- bz_stream *bzs = &self->bzs;
- int bzerror;
-
- if (!PyArg_ParseTuple(args, "y*:compress", &pdata))
- return NULL;
-
- if (pdata.len == 0) {
- PyBuffer_Release(&pdata);
- return PyBytes_FromStringAndSize("", 0);
- }
-
- ACQUIRE_LOCK(self);
- if (!self->running) {
- PyErr_SetString(PyExc_ValueError,
- "this object was already flushed");
- goto error;
- }
-
- ret = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
- if (!ret)
- goto error;
-
- bzs->next_in = pdata.buf;
- bzs->avail_in = MIN(pdata.len, UINT_MAX);
- input_left = pdata.len - bzs->avail_in;
-
- bzs->next_out = BUF(ret);
- bzs->avail_out = PyBytes_GET_SIZE(ret);
-
- for (;;) {
- char *saved_next_out;
-
- Py_BEGIN_ALLOW_THREADS
- saved_next_out = bzs->next_out;
- bzerror = BZ2_bzCompress(bzs, BZ_RUN);
- output_size += bzs->next_out - saved_next_out;
- Py_END_ALLOW_THREADS
-
- if (bzerror != BZ_RUN_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
- if (bzs->avail_in == 0) {
- if (input_left == 0)
- break; /* no more input data */
- bzs->avail_in = MIN(input_left, UINT_MAX);
- input_left -= bzs->avail_in;
- }
- if (bzs->avail_out == 0) {
- size_t buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- if (buffer_left == 0) {
- if (Util_GrowBuffer(&ret) < 0) {
- BZ2_bzCompressEnd(bzs);
- goto error;
- }
- bzs->next_out = BUF(ret) + output_size;
- buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- }
- bzs->avail_out = MIN(buffer_left, UINT_MAX);
- }
- }
-
- if (_PyBytes_Resize(&ret, output_size) < 0)
- goto error;
-
- RELEASE_LOCK(self);
- PyBuffer_Release(&pdata);
- return ret;
-
-error:
- RELEASE_LOCK(self);
- PyBuffer_Release(&pdata);
- Py_XDECREF(ret);
- return NULL;
-}
-
-PyDoc_STRVAR(BZ2Comp_flush__doc__,
-"flush() -> string\n\
-\n\
-Finish the compression process and return what is left in internal buffers.\n\
-You must not use the compressor object after calling this method.\n\
-");
-
-static PyObject *
-BZ2Comp_flush(BZ2CompObject *self)
-{
- size_t output_size = 0;
- PyObject *ret = NULL;
- bz_stream *bzs = &self->bzs;
- int bzerror;
-
- ACQUIRE_LOCK(self);
- if (!self->running) {
- PyErr_SetString(PyExc_ValueError, "object was already flushed");
- goto error;
- }
- self->running = 0;
-
- ret = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
- if (!ret)
- goto error;
-
- bzs->next_out = BUF(ret);
- bzs->avail_out = PyBytes_GET_SIZE(ret);
-
- for (;;) {
- char *saved_next_out;
-
- Py_BEGIN_ALLOW_THREADS
- saved_next_out = bzs->next_out;
- bzerror = BZ2_bzCompress(bzs, BZ_FINISH);
- output_size += bzs->next_out - saved_next_out;
- Py_END_ALLOW_THREADS
-
- if (bzerror == BZ_STREAM_END) {
- break;
- } else if (bzerror != BZ_FINISH_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
- if (bzs->avail_out == 0) {
- size_t buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- if (buffer_left == 0) {
- if (Util_GrowBuffer(&ret) < 0)
- goto error;
- bzs->next_out = BUF(ret) + output_size;
- buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- }
- bzs->avail_out = MIN(buffer_left, UINT_MAX);
- }
- }
-
- if (output_size != PyBytes_GET_SIZE(ret))
- if (_PyBytes_Resize(&ret, output_size) < 0)
- goto error;
-
- RELEASE_LOCK(self);
- return ret;
-
-error:
- RELEASE_LOCK(self);
- Py_XDECREF(ret);
- return NULL;
-}
-
-static PyMethodDef BZ2Comp_methods[] = {
- {"compress", (PyCFunction)BZ2Comp_compress, METH_VARARGS,
- BZ2Comp_compress__doc__},
- {"flush", (PyCFunction)BZ2Comp_flush, METH_NOARGS,
- BZ2Comp_flush__doc__},
- {NULL, NULL} /* sentinel */
-};
-
-
-/* ===================================================================== */
-/* Slot definitions for BZ2Comp_Type. */
-
-static int
-BZ2Comp_init(BZ2CompObject *self, PyObject *args, PyObject *kwargs)
-{
- int compresslevel = 9;
- int bzerror;
- static char *kwlist[] = {"compresslevel", 0};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:BZ2Compressor",
- kwlist, &compresslevel))
- return -1;
-
- if (compresslevel < 1 || compresslevel > 9) {
- PyErr_SetString(PyExc_ValueError,
- "compresslevel must be between 1 and 9");
- goto error;
- }
-
-#ifdef WITH_THREAD
- self->lock = PyThread_allocate_lock();
- if (!self->lock) {
- PyErr_SetString(PyExc_MemoryError, "unable to allocate lock");
- goto error;
- }
-#endif
-
- memset(&self->bzs, 0, sizeof(bz_stream));
- bzerror = BZ2_bzCompressInit(&self->bzs, compresslevel, 0, 0);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
-
- self->running = 1;
-
- return 0;
-error:
-#ifdef WITH_THREAD
- if (self->lock) {
- PyThread_free_lock(self->lock);
- self->lock = NULL;
- }
-#endif
- return -1;
-}
-
-static void
-BZ2Comp_dealloc(BZ2CompObject *self)
-{
-#ifdef WITH_THREAD
- if (self->lock)
- PyThread_free_lock(self->lock);
-#endif
- BZ2_bzCompressEnd(&self->bzs);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-
-/* ===================================================================== */
-/* BZ2Comp_Type definition. */
-
-PyDoc_STRVAR(BZ2Comp__doc__,
-"BZ2Compressor([compresslevel=9]) -> compressor object\n\
-\n\
-Create a new compressor object. This object may be used to compress\n\
-data sequentially. If you want to compress data in one shot, use the\n\
-compress() function instead. The compresslevel parameter, if given,\n\
-must be a number between 1 and 9.\n\
-");
-
-static PyTypeObject BZ2Comp_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "bz2.BZ2Compressor", /*tp_name*/
- sizeof(BZ2CompObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)BZ2Comp_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_reserved*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- PyObject_GenericGetAttr,/*tp_getattro*/
- PyObject_GenericSetAttr,/*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
- BZ2Comp__doc__, /*tp_doc*/
- 0, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- BZ2Comp_methods, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- 0, /*tp_dictoffset*/
- (initproc)BZ2Comp_init, /*tp_init*/
- PyType_GenericAlloc, /*tp_alloc*/
- PyType_GenericNew, /*tp_new*/
- PyObject_Free, /*tp_free*/
- 0, /*tp_is_gc*/
-};
-
-
-/* ===================================================================== */
-/* Members of BZ2Decomp. */
-
-#undef OFF
-#define OFF(x) offsetof(BZ2DecompObject, x)
-
-static PyMemberDef BZ2Decomp_members[] = {
- {"unused_data", T_OBJECT, OFF(unused_data), READONLY},
- {NULL} /* Sentinel */
-};
-
-
-/* ===================================================================== */
-/* Methods of BZ2Decomp. */
-
-PyDoc_STRVAR(BZ2Decomp_decompress__doc__,
-"decompress(data) -> string\n\
-\n\
-Provide more data to the decompressor object. It will return chunks\n\
-of decompressed data whenever possible. If you try to decompress data\n\
-after the end of stream is found, EOFError will be raised. If any data\n\
-was found after the end of stream, it'll be ignored and saved in\n\
-unused_data attribute.\n\
-");
-
-static PyObject *
-BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
-{
- Py_buffer pdata;
- size_t input_left;
- size_t output_size = 0;
- PyObject *ret = NULL;
- bz_stream *bzs = &self->bzs;
- int bzerror;
-
- if (!PyArg_ParseTuple(args, "y*:decompress", &pdata))
- return NULL;
-
- ACQUIRE_LOCK(self);
- if (!self->running) {
- PyErr_SetString(PyExc_EOFError, "end of stream was "
- "already found");
- goto error;
- }
-
- ret = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
- if (!ret)
- goto error;
-
- bzs->next_in = pdata.buf;
- bzs->avail_in = MIN(pdata.len, UINT_MAX);
- input_left = pdata.len - bzs->avail_in;
-
- bzs->next_out = BUF(ret);
- bzs->avail_out = PyBytes_GET_SIZE(ret);
-
- for (;;) {
- char *saved_next_out;
-
- Py_BEGIN_ALLOW_THREADS
- saved_next_out = bzs->next_out;
- bzerror = BZ2_bzDecompress(bzs);
- output_size += bzs->next_out - saved_next_out;
- Py_END_ALLOW_THREADS
-
- if (bzerror == BZ_STREAM_END) {
- self->running = 0;
- input_left += bzs->avail_in;
- if (input_left != 0) {
- Py_DECREF(self->unused_data);
- self->unused_data =
- PyBytes_FromStringAndSize(bzs->next_in, input_left);
- if (self->unused_data == NULL)
- goto error;
- }
- break;
- }
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
- if (bzs->avail_in == 0) {
- if (input_left == 0)
- break; /* no more input data */
- bzs->avail_in = MIN(input_left, UINT_MAX);
- input_left -= bzs->avail_in;
- }
- if (bzs->avail_out == 0) {
- size_t buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- if (buffer_left == 0) {
- if (Util_GrowBuffer(&ret) < 0) {
- BZ2_bzDecompressEnd(bzs);
- goto error;
- }
- bzs->next_out = BUF(ret) + output_size;
- buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- }
- bzs->avail_out = MIN(buffer_left, UINT_MAX);
- }
- }
-
- if (output_size != PyBytes_GET_SIZE(ret))
- if (_PyBytes_Resize(&ret, output_size) < 0)
- goto error;
-
- RELEASE_LOCK(self);
- PyBuffer_Release(&pdata);
- return ret;
-
-error:
- RELEASE_LOCK(self);
- PyBuffer_Release(&pdata);
- Py_XDECREF(ret);
- return NULL;
-}
-
-static PyMethodDef BZ2Decomp_methods[] = {
- {"decompress", (PyCFunction)BZ2Decomp_decompress, METH_VARARGS, BZ2Decomp_decompress__doc__},
- {NULL, NULL} /* sentinel */
-};
-
-
-/* ===================================================================== */
-/* Slot definitions for BZ2Decomp_Type. */
-
-static int
-BZ2Decomp_init(BZ2DecompObject *self, PyObject *args, PyObject *kwargs)
-{
- int bzerror;
-
- if (!PyArg_ParseTuple(args, ":BZ2Decompressor"))
- return -1;
-
-#ifdef WITH_THREAD
- self->lock = PyThread_allocate_lock();
- if (!self->lock) {
- PyErr_SetString(PyExc_MemoryError, "unable to allocate lock");
- goto error;
- }
-#endif
-
- self->unused_data = PyBytes_FromStringAndSize("", 0);
- if (!self->unused_data)
- goto error;
-
- memset(&self->bzs, 0, sizeof(bz_stream));
- bzerror = BZ2_bzDecompressInit(&self->bzs, 0, 0);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- goto error;
- }
-
- self->running = 1;
-
- return 0;
-
-error:
-#ifdef WITH_THREAD
- if (self->lock) {
- PyThread_free_lock(self->lock);
- self->lock = NULL;
- }
-#endif
- Py_CLEAR(self->unused_data);
- return -1;
-}
-
-static void
-BZ2Decomp_dealloc(BZ2DecompObject *self)
-{
-#ifdef WITH_THREAD
- if (self->lock)
- PyThread_free_lock(self->lock);
-#endif
- Py_XDECREF(self->unused_data);
- BZ2_bzDecompressEnd(&self->bzs);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-
-/* ===================================================================== */
-/* BZ2Decomp_Type definition. */
-
-PyDoc_STRVAR(BZ2Decomp__doc__,
-"BZ2Decompressor() -> decompressor object\n\
-\n\
-Create a new decompressor object. This object may be used to decompress\n\
-data sequentially. If you want to decompress data in one shot, use the\n\
-decompress() function instead.\n\
-");
-
-static PyTypeObject BZ2Decomp_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "bz2.BZ2Decompressor", /*tp_name*/
- sizeof(BZ2DecompObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)BZ2Decomp_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_reserved*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
- PyObject_GenericGetAttr,/*tp_getattro*/
- PyObject_GenericSetAttr,/*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
- BZ2Decomp__doc__, /*tp_doc*/
- 0, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- BZ2Decomp_methods, /*tp_methods*/
- BZ2Decomp_members, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- 0, /*tp_dictoffset*/
- (initproc)BZ2Decomp_init, /*tp_init*/
- PyType_GenericAlloc, /*tp_alloc*/
- PyType_GenericNew, /*tp_new*/
- PyObject_Free, /*tp_free*/
- 0, /*tp_is_gc*/
-};
-
-
-/* ===================================================================== */
-/* Module functions. */
-
-PyDoc_STRVAR(bz2_compress__doc__,
-"compress(data [, compresslevel=9]) -> string\n\
-\n\
-Compress data in one shot. If you want to compress data sequentially,\n\
-use an instance of BZ2Compressor instead. The compresslevel parameter, if\n\
-given, must be a number between 1 and 9.\n\
-");
-
-static PyObject *
-bz2_compress(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- int compresslevel=9;
- int action;
- Py_buffer pdata;
- size_t input_left;
- size_t output_size = 0;
- PyObject *ret = NULL;
- bz_stream _bzs;
- bz_stream *bzs = &_bzs;
- int bzerror;
- static char *kwlist[] = {"data", "compresslevel", 0};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i",
- kwlist, &pdata,
- &compresslevel))
- return NULL;
-
- if (compresslevel < 1 || compresslevel > 9) {
- PyErr_SetString(PyExc_ValueError,
- "compresslevel must be between 1 and 9");
- PyBuffer_Release(&pdata);
- return NULL;
- }
-
- ret = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
- if (!ret) {
- PyBuffer_Release(&pdata);
- return NULL;
- }
-
- memset(bzs, 0, sizeof(bz_stream));
-
- bzs->next_in = pdata.buf;
- bzs->avail_in = MIN(pdata.len, UINT_MAX);
- input_left = pdata.len - bzs->avail_in;
-
- bzs->next_out = BUF(ret);
- bzs->avail_out = PyBytes_GET_SIZE(ret);
-
- bzerror = BZ2_bzCompressInit(bzs, compresslevel, 0, 0);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- PyBuffer_Release(&pdata);
- Py_DECREF(ret);
- return NULL;
- }
-
- action = input_left > 0 ? BZ_RUN : BZ_FINISH;
-
- for (;;) {
- char *saved_next_out;
-
- Py_BEGIN_ALLOW_THREADS
- saved_next_out = bzs->next_out;
- bzerror = BZ2_bzCompress(bzs, action);
- output_size += bzs->next_out - saved_next_out;
- Py_END_ALLOW_THREADS
-
- if (bzerror == BZ_STREAM_END) {
- break;
- } else if (bzerror != BZ_RUN_OK && bzerror != BZ_FINISH_OK) {
- BZ2_bzCompressEnd(bzs);
- Util_CatchBZ2Error(bzerror);
- PyBuffer_Release(&pdata);
- Py_DECREF(ret);
- return NULL;
- }
- if (action == BZ_RUN && bzs->avail_in == 0) {
- if (input_left == 0) {
- action = BZ_FINISH;
- } else {
- bzs->avail_in = MIN(input_left, UINT_MAX);
- input_left -= bzs->avail_in;
- }
- }
- if (bzs->avail_out == 0) {
- size_t buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- if (buffer_left == 0) {
- if (Util_GrowBuffer(&ret) < 0) {
- BZ2_bzCompressEnd(bzs);
- PyBuffer_Release(&pdata);
- return NULL;
- }
- bzs->next_out = BUF(ret) + output_size;
- buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- }
- bzs->avail_out = MIN(buffer_left, UINT_MAX);
- }
- }
-
- if (output_size != PyBytes_GET_SIZE(ret))
- _PyBytes_Resize(&ret, output_size); /* Sets ret to NULL on failure. */
-
- BZ2_bzCompressEnd(bzs);
- PyBuffer_Release(&pdata);
- return ret;
-}
-
-PyDoc_STRVAR(bz2_decompress__doc__,
-"decompress(data) -> decompressed data\n\
-\n\
-Decompress data in one shot. If you want to decompress data sequentially,\n\
-use an instance of BZ2Decompressor instead.\n\
-");
-
-static PyObject *
-bz2_decompress(PyObject *self, PyObject *args)
-{
- Py_buffer pdata;
- size_t input_left;
- size_t output_size = 0;
- PyObject *ret;
- bz_stream _bzs;
- bz_stream *bzs = &_bzs;
- int bzerror;
-
- if (!PyArg_ParseTuple(args, "y*:decompress", &pdata))
- return NULL;
-
- if (pdata.len == 0) {
- PyBuffer_Release(&pdata);
- return PyBytes_FromStringAndSize("", 0);
- }
-
- ret = PyBytes_FromStringAndSize(NULL, SMALLCHUNK);
- if (!ret) {
- PyBuffer_Release(&pdata);
- return NULL;
- }
-
- memset(bzs, 0, sizeof(bz_stream));
-
- bzs->next_in = pdata.buf;
- bzs->avail_in = MIN(pdata.len, UINT_MAX);
- input_left = pdata.len - bzs->avail_in;
-
- bzs->next_out = BUF(ret);
- bzs->avail_out = PyBytes_GET_SIZE(ret);
-
- bzerror = BZ2_bzDecompressInit(bzs, 0, 0);
- if (bzerror != BZ_OK) {
- Util_CatchBZ2Error(bzerror);
- Py_DECREF(ret);
- PyBuffer_Release(&pdata);
- return NULL;
- }
-
- for (;;) {
- char *saved_next_out;
-
- Py_BEGIN_ALLOW_THREADS
- saved_next_out = bzs->next_out;
- bzerror = BZ2_bzDecompress(bzs);
- output_size += bzs->next_out - saved_next_out;
- Py_END_ALLOW_THREADS
-
- if (bzerror == BZ_STREAM_END) {
- break;
- } else if (bzerror != BZ_OK) {
- BZ2_bzDecompressEnd(bzs);
- Util_CatchBZ2Error(bzerror);
- PyBuffer_Release(&pdata);
- Py_DECREF(ret);
- return NULL;
- }
- if (bzs->avail_in == 0) {
- if (input_left == 0) {
- BZ2_bzDecompressEnd(bzs);
- PyErr_SetString(PyExc_ValueError,
- "couldn't find end of stream");
- PyBuffer_Release(&pdata);
- Py_DECREF(ret);
- return NULL;
- }
- bzs->avail_in = MIN(input_left, UINT_MAX);
- input_left -= bzs->avail_in;
- }
- if (bzs->avail_out == 0) {
- size_t buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- if (buffer_left == 0) {
- if (Util_GrowBuffer(&ret) < 0) {
- BZ2_bzDecompressEnd(bzs);
- PyBuffer_Release(&pdata);
- return NULL;
- }
- bzs->next_out = BUF(ret) + output_size;
- buffer_left = PyBytes_GET_SIZE(ret) - output_size;
- }
- bzs->avail_out = MIN(buffer_left, UINT_MAX);
- }
- }
-
- if (output_size != PyBytes_GET_SIZE(ret))
- _PyBytes_Resize(&ret, output_size); /* Sets ret to NULL on failure. */
-
- BZ2_bzDecompressEnd(bzs);
- PyBuffer_Release(&pdata);
- return ret;
-}
-
-static PyMethodDef bz2_methods[] = {
- {"compress", (PyCFunction) bz2_compress, METH_VARARGS|METH_KEYWORDS,
- bz2_compress__doc__},
- {"decompress", (PyCFunction) bz2_decompress, METH_VARARGS,
- bz2_decompress__doc__},
- {NULL, NULL} /* sentinel */
-};
-
-/* ===================================================================== */
-/* Initialization function. */
-
-PyDoc_STRVAR(bz2__doc__,
-"The python bz2 module provides a comprehensive interface for\n\
-the bz2 compression library. It implements a complete file\n\
-interface, one shot (de)compression functions, and types for\n\
-sequential (de)compression.\n\
-");
-
-
-static struct PyModuleDef bz2module = {
- PyModuleDef_HEAD_INIT,
- "bz2",
- bz2__doc__,
- -1,
- bz2_methods,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-PyMODINIT_FUNC
-PyInit_bz2(void)
-{
- PyObject *m;
-
- if (PyType_Ready(&BZ2File_Type) < 0)
- return NULL;
- if (PyType_Ready(&BZ2Comp_Type) < 0)
- return NULL;
- if (PyType_Ready(&BZ2Decomp_Type) < 0)
- return NULL;
-
- m = PyModule_Create(&bz2module);
- if (m == NULL)
- return NULL;
-
- PyModule_AddObject(m, "__author__", PyUnicode_FromString(__author__));
-
- Py_INCREF(&BZ2File_Type);
- PyModule_AddObject(m, "BZ2File", (PyObject *)&BZ2File_Type);
-
- Py_INCREF(&BZ2Comp_Type);
- PyModule_AddObject(m, "BZ2Compressor", (PyObject *)&BZ2Comp_Type);
-
- Py_INCREF(&BZ2Decomp_Type);
- PyModule_AddObject(m, "BZ2Decompressor", (PyObject *)&BZ2Decomp_Type);
- return m;
-}
diff --git a/Modules/cjkcodecs/_codecs_cn.c b/Modules/cjkcodecs/_codecs_cn.c
index ab4e659332..9e9e96c4d1 100644
--- a/Modules/cjkcodecs/_codecs_cn.c
+++ b/Modules/cjkcodecs/_codecs_cn.c
@@ -85,7 +85,7 @@ DECODER(gb2312)
TRYMAP_DEC(gb2312, **outbuf, c ^ 0x80, IN2 ^ 0x80) {
NEXT(2, 1)
}
- else return 2;
+ else return 1;
}
return 0;
@@ -141,7 +141,7 @@ DECODER(gbk)
REQUIRE_INBUF(2)
GBK_DECODE(c, IN2, **outbuf)
- else return 2;
+ else return 1;
NEXT(2, 1)
}
@@ -267,7 +267,7 @@ DECODER(gb18030)
c3 = IN3;
c4 = IN4;
if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39)
- return 4;
+ return 1;
c -= 0x81; c2 -= 0x30;
c3 -= 0x81; c4 -= 0x30;
@@ -292,12 +292,12 @@ DECODER(gb18030)
continue;
}
}
- return 4;
+ return 1;
}
GBK_DECODE(c, c2, **outbuf)
else TRYMAP_DEC(gb18030ext, **outbuf, c, c2);
- else return 2;
+ else return 1;
NEXT(2, 1)
}
@@ -400,7 +400,7 @@ DECODER(hz)
else if (c2 == '\n')
; /* line-continuation */
else
- return 2;
+ return 1;
NEXT(2, 0);
continue;
}
@@ -419,7 +419,7 @@ DECODER(hz)
NEXT(2, 1)
}
else
- return 2;
+ return 1;
}
}
diff --git a/Modules/cjkcodecs/_codecs_hk.c b/Modules/cjkcodecs/_codecs_hk.c
index 558a42f89c..d3ad04b6dd 100644
--- a/Modules/cjkcodecs/_codecs_hk.c
+++ b/Modules/cjkcodecs/_codecs_hk.c
@@ -161,7 +161,7 @@ DECODER(big5hkscs)
case 0x8864: WRITE2(0x00ca, 0x030c); break;
case 0x88a3: WRITE2(0x00ea, 0x0304); break;
case 0x88a5: WRITE2(0x00ea, 0x030c); break;
- default: return 2;
+ default: return 1;
}
NEXT(2, 2) /* all decoded codepoints are pairs, above. */
diff --git a/Modules/cjkcodecs/_codecs_iso2022.c b/Modules/cjkcodecs/_codecs_iso2022.c
index 25c1a361da..cbc1542922 100644
--- a/Modules/cjkcodecs/_codecs_iso2022.c
+++ b/Modules/cjkcodecs/_codecs_iso2022.c
@@ -123,7 +123,7 @@ struct iso2022_config {
CODEC_INIT(iso2022)
{
- const struct iso2022_designation *desig = CONFIG_DESIGNATIONS;
+ const struct iso2022_designation *desig;
for (desig = CONFIG_DESIGNATIONS; desig->mark; desig++)
if (desig->initializer != NULL && desig->initializer() != 0)
return -1;
diff --git a/Modules/cjkcodecs/_codecs_jp.c b/Modules/cjkcodecs/_codecs_jp.c
index a05e01b32e..a500696e93 100644
--- a/Modules/cjkcodecs/_codecs_jp.c
+++ b/Modules/cjkcodecs/_codecs_jp.c
@@ -112,7 +112,7 @@ DECODER(cp932)
TRYMAP_DEC(cp932ext, **outbuf, c, c2);
else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)){
if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
- return 2;
+ return 1;
c = (c < 0xe0 ? c - 0x81 : c - 0xc1);
c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);
@@ -120,7 +120,7 @@ DECODER(cp932)
c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;
TRYMAP_DEC(jisx0208, **outbuf, c, c2);
- else return 2;
+ else return 1;
}
else if (c >= 0xf0 && c <= 0xf9) {
if ((c2 >= 0x40 && c2 <= 0x7e) ||
@@ -128,10 +128,10 @@ DECODER(cp932)
OUT1(0xe000 + 188 * (c - 0xf0) +
(c2 < 0x80 ? c2 - 0x40 : c2 - 0x41))
else
- return 2;
+ return 1;
}
else
- return 2;
+ return 1;
NEXT(2, 1)
}
@@ -256,7 +256,7 @@ DECODER(euc_jis_2004)
NEXT(2, 1)
}
else
- return 2;
+ return 1;
}
else if (c == 0x8f) {
unsigned char c2, c3;
@@ -274,7 +274,7 @@ DECODER(euc_jis_2004)
continue;
}
else TRYMAP_DEC(jisx0212, **outbuf, c2, c3) ;
- else return 3;
+ else return 1;
NEXT(3, 1)
}
else {
@@ -300,7 +300,7 @@ DECODER(euc_jis_2004)
NEXT(2, 2)
continue;
}
- else return 2;
+ else return 1;
NEXT(2, 1)
}
}
@@ -388,7 +388,7 @@ DECODER(euc_jp)
NEXT(2, 1)
}
else
- return 2;
+ return 1;
}
else if (c == 0x8f) {
unsigned char c2, c3;
@@ -401,7 +401,7 @@ DECODER(euc_jp)
NEXT(3, 1)
}
else
- return 3;
+ return 1;
}
else {
unsigned char c2;
@@ -417,7 +417,7 @@ DECODER(euc_jp)
#endif
TRYMAP_DEC(jisx0208, **outbuf,
c ^ 0x80, c2 ^ 0x80) ;
- else return 2;
+ else return 1;
NEXT(2, 1)
}
}
@@ -502,7 +502,7 @@ DECODER(shift_jis)
REQUIRE_INBUF(2)
c2 = IN2;
if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
- return 2;
+ return 1;
c1 = (c < 0xe0 ? c - 0x81 : c - 0xc1);
c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);
@@ -522,10 +522,10 @@ DECODER(shift_jis)
continue;
}
else
- return 2;
+ return 1;
}
else
- return 2;
+ return 1;
NEXT(1, 1) /* JIS X 0201 */
}
@@ -645,7 +645,7 @@ DECODER(shift_jis_2004)
REQUIRE_INBUF(2)
c2 = IN2;
if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
- return 2;
+ return 1;
c1 = (c < 0xe0 ? c - 0x81 : c - 0xc1);
c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);
@@ -671,7 +671,7 @@ DECODER(shift_jis_2004)
NEXT_OUT(2)
}
else
- return 2;
+ return 1;
NEXT_IN(2)
}
else { /* Plane 2 */
@@ -689,13 +689,13 @@ DECODER(shift_jis_2004)
continue;
}
else
- return 2;
+ return 1;
NEXT(2, 1)
}
continue;
}
else
- return 2;
+ return 1;
NEXT(1, 1) /* JIS X 0201 */
}
diff --git a/Modules/cjkcodecs/_codecs_kr.c b/Modules/cjkcodecs/_codecs_kr.c
index 9272e363e1..f5697dd2f6 100644
--- a/Modules/cjkcodecs/_codecs_kr.c
+++ b/Modules/cjkcodecs/_codecs_kr.c
@@ -123,7 +123,7 @@ DECODER(euc_kr)
if ((*inbuf)[2] != EUCKR_JAMO_FIRSTBYTE ||
(*inbuf)[4] != EUCKR_JAMO_FIRSTBYTE ||
(*inbuf)[6] != EUCKR_JAMO_FIRSTBYTE)
- return 8;
+ return 1;
c = (*inbuf)[3];
if (0xa1 <= c && c <= 0xbe)
@@ -143,7 +143,7 @@ DECODER(euc_kr)
jong = NONE;
if (cho == NONE || jung == NONE || jong == NONE)
- return 8;
+ return 1;
OUT1(0xac00 + cho*588 + jung*28 + jong);
NEXT(8, 1)
@@ -152,7 +152,7 @@ DECODER(euc_kr)
NEXT(2, 1)
}
else
- return 2;
+ return 1;
}
return 0;
@@ -208,7 +208,7 @@ DECODER(cp949)
REQUIRE_INBUF(2)
TRYMAP_DEC(ksx1001, **outbuf, c ^ 0x80, IN2 ^ 0x80);
else TRYMAP_DEC(cp949ext, **outbuf, c, IN2);
- else return 2;
+ else return 1;
NEXT(2, 1)
}
@@ -375,7 +375,7 @@ DECODER(johab)
i_jong = johabidx_jongseong[c_jong];
if (i_cho == NONE || i_jung == NONE || i_jong == NONE)
- return 2;
+ return 1;
/* we don't use U+1100 hangul jamo yet. */
if (i_cho == FILL) {
@@ -391,7 +391,7 @@ DECODER(johab)
OUT1(0x3100 |
johabjamo_jungseong[c_jung])
else
- return 2;
+ return 1;
}
} else {
if (i_jung == FILL) {
@@ -399,7 +399,7 @@ DECODER(johab)
OUT1(0x3100 |
johabjamo_choseong[c_cho])
else
- return 2;
+ return 1;
}
else
OUT1(0xac00 +
@@ -414,7 +414,7 @@ DECODER(johab)
c2 < 0x31 || (c2 >= 0x80 && c2 < 0x91) ||
(c2 & 0x7f) == 0x7f ||
(c == 0xda && (c2 >= 0xa1 && c2 <= 0xd3)))
- return 2;
+ return 1;
else {
unsigned char t1, t2;
@@ -425,7 +425,7 @@ DECODER(johab)
t2 = (t2 < 0x5e ? t2 : t2 - 0x5e) + 0x21;
TRYMAP_DEC(ksx1001, **outbuf, t1, t2);
- else return 2;
+ else return 1;
NEXT(2, 1)
}
}
diff --git a/Modules/cjkcodecs/_codecs_tw.c b/Modules/cjkcodecs/_codecs_tw.c
index 38cf7239b4..916298d167 100644
--- a/Modules/cjkcodecs/_codecs_tw.c
+++ b/Modules/cjkcodecs/_codecs_tw.c
@@ -55,7 +55,7 @@ DECODER(big5)
TRYMAP_DEC(big5, **outbuf, c, IN2) {
NEXT(2, 1)
}
- else return 2;
+ else return 1;
}
return 0;
@@ -109,7 +109,7 @@ DECODER(cp950)
TRYMAP_DEC(cp950ext, **outbuf, c, IN2);
else TRYMAP_DEC(big5, **outbuf, c, IN2);
- else return 2;
+ else return 1;
NEXT(2, 1)
}
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 7b04f020c9..c032cdb0ed 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -316,15 +316,15 @@ multibytecodec_encerror(MultibyteCodec *codec,
goto errorexit;
if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 ||
- !PyUnicode_Check((tobj = PyTuple_GET_ITEM(retobj, 0))) ||
+ (!PyUnicode_Check((tobj = PyTuple_GET_ITEM(retobj, 0))) && !PyBytes_Check(tobj)) ||
!PyLong_Check(PyTuple_GET_ITEM(retobj, 1))) {
PyErr_SetString(PyExc_TypeError,
"encoding error handler must return "
- "(unicode, int) tuple");
+ "(str, int) tuple");
goto errorexit;
}
- {
+ if (PyUnicode_Check(tobj)) {
const Py_UNICODE *uraw = PyUnicode_AS_UNICODE(tobj);
retstr = multibytecodec_encode(codec, state, &uraw,
@@ -333,6 +333,10 @@ multibytecodec_encerror(MultibyteCodec *codec,
if (retstr == NULL)
goto errorexit;
}
+ else {
+ Py_INCREF(tobj);
+ retstr = tobj;
+ }
assert(PyBytes_Check(retstr));
retstrsize = PyBytes_GET_SIZE(retstr);
@@ -439,14 +443,16 @@ multibytecodec_decerror(MultibyteCodec *codec,
!PyLong_Check(PyTuple_GET_ITEM(retobj, 1))) {
PyErr_SetString(PyExc_TypeError,
"decoding error handler must return "
- "(unicode, int) tuple");
+ "(str, int) tuple");
goto errorexit;
}
+ if (PyUnicode_AsUnicode(retuni) == NULL)
+ goto errorexit;
retunisize = PyUnicode_GET_SIZE(retuni);
if (retunisize > 0) {
REQUIRE_DECODEBUFFER(buf, retunisize);
- memcpy((char *)buf->outbuf, PyUnicode_AS_DATA(retuni),
+ memcpy((char *)buf->outbuf, PyUnicode_AS_UNICODE(retuni),
retunisize * Py_UNICODE_SIZE);
buf->outbuf += retunisize;
}
@@ -483,6 +489,7 @@ multibytecodec_encode(MultibyteCodec *codec,
return PyBytes_FromStringAndSize(NULL, 0);
buf.excobj = NULL;
+ buf.outobj = NULL;
buf.inbuf = buf.inbuf_top = *data;
buf.inbuf_end = buf.inbuf_top + datalen;
@@ -573,8 +580,11 @@ MultibyteCodec_Encode(MultibyteCodecObject *self,
}
}
- data = PyUnicode_AS_UNICODE(arg);
- datalen = PyUnicode_GET_SIZE(arg);
+ data = PyUnicode_AsUnicodeAndSize(arg, &datalen);
+ if (data == NULL) {
+ Py_XDECREF(ucvt);
+ return NULL;
+ }
errorcb = internal_error_callback(errors);
if (errorcb == NULL) {
@@ -627,7 +637,7 @@ MultibyteCodec_Decode(MultibyteCodecObject *self,
if (datalen == 0) {
PyBuffer_Release(&pdata);
ERROR_DECREF(errorcb);
- return make_tuple(PyUnicode_FromUnicode(NULL, 0), 0);
+ return make_tuple(PyUnicode_New(0, 0), 0);
}
buf.excobj = NULL;
@@ -637,6 +647,8 @@ MultibyteCodec_Decode(MultibyteCodecObject *self,
if (buf.outobj == NULL)
goto errorexit;
buf.outbuf = PyUnicode_AS_UNICODE(buf.outobj);
+ if (buf.outbuf == NULL)
+ goto errorexit;
buf.outbuf_end = buf.outbuf + PyUnicode_GET_SIZE(buf.outobj);
if (self->codec->decinit != NULL &&
@@ -742,6 +754,7 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx,
PyObject *ucvt, *r = NULL;
Py_UNICODE *inbuf, *inbuf_end, *inbuf_tmp = NULL;
Py_ssize_t datalen, origpending;
+ wchar_t *data;
if (PyUnicode_Check(unistr))
ucvt = NULL;
@@ -751,13 +764,15 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx,
return NULL;
else if (!PyUnicode_Check(unistr)) {
PyErr_SetString(PyExc_TypeError,
- "couldn't convert the object to unicode.");
+ "couldn't convert the object to str.");
Py_DECREF(ucvt);
return NULL;
}
}
- datalen = PyUnicode_GET_SIZE(unistr);
+ data = PyUnicode_AsUnicodeAndSize(unistr, &datalen);
+ if (data == NULL)
+ goto errorexit;
origpending = ctx->pendingsize;
if (origpending > 0) {
@@ -848,7 +863,9 @@ decoder_prepare_buffer(MultibyteDecodeBuffer *buf, const char *data,
buf->outobj = PyUnicode_FromUnicode(NULL, size);
if (buf->outobj == NULL)
return -1;
- buf->outbuf = PyUnicode_AS_UNICODE(buf->outobj);
+ buf->outbuf = PyUnicode_AsUnicode(buf->outobj);
+ if (buf->outbuf == NULL)
+ return -1;
buf->outbuf_end = buf->outbuf +
PyUnicode_GET_SIZE(buf->outobj);
}
@@ -900,11 +917,17 @@ mbiencoder_encode(MultibyteIncrementalEncoderObject *self,
static PyObject *
mbiencoder_reset(MultibyteIncrementalEncoderObject *self)
{
- if (self->codec->decreset != NULL &&
- self->codec->decreset(&self->state, self->codec->config) != 0)
- return NULL;
+ /* Longest output: 4 bytes (b'\x0F\x1F(B') with ISO 2022 */
+ unsigned char buffer[4], *outbuf;
+ Py_ssize_t r;
+ if (self->codec->encreset != NULL) {
+ outbuf = buffer;
+ r = self->codec->encreset(&self->state, self->codec->config,
+ &outbuf, sizeof(buffer));
+ if (r != 0)
+ return NULL;
+ }
self->pendingsize = 0;
-
Py_RETURN_NONE;
}
@@ -1246,7 +1269,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
Py_ssize_t rsize, finalsize = 0;
if (sizehint == 0)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
buf.outobj = buf.excobj = NULL;
cres = NULL;
@@ -1572,12 +1595,13 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self,
PyObject *unistr)
{
PyObject *str, *wr;
+ _Py_IDENTIFIER(write);
str = encoder_encode_stateful(STATEFUL_ECTX(self), unistr, 0);
if (str == NULL)
return -1;
- wr = PyObject_CallMethod(self->stream, "write", "O", str);
+ wr = _PyObject_CallMethodId(self->stream, &PyId_write, "O", str);
Py_DECREF(str);
if (wr == NULL)
return -1;
@@ -1643,7 +1667,9 @@ mbstreamwriter_reset(MultibyteStreamWriterObject *self)
assert(PyBytes_Check(pwrt));
if (PyBytes_Size(pwrt) > 0) {
PyObject *wr;
- wr = PyObject_CallMethod(self->stream, "write", "O", pwrt);
+ _Py_IDENTIFIER(write);
+
+ wr = _PyObject_CallMethodId(self->stream, &PyId_write, "O", pwrt);
if (wr == NULL) {
Py_DECREF(pwrt);
return NULL;
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index 3021cf0466..36bf4a1e3d 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -1006,6 +1006,13 @@ cmath_rect(PyObject *self, PyObject *args)
else
errno = 0;
}
+ else if (phi == 0.0) {
+ /* Workaround for buggy results with phi=-0.0 on OS X 10.8. See
+ bugs.python.org/issue18513. */
+ z.real = r;
+ z.imag = r * phi;
+ errno = 0;
+ }
else {
z.real = r * cos(phi);
z.imag = r * sin(phi);
diff --git a/Modules/config.c.in b/Modules/config.c.in
index 34d44d5a88..7a24e2dc89 100644
--- a/Modules/config.c.in
+++ b/Modules/config.c.in
@@ -39,13 +39,12 @@ struct _inittab _PyImport_Inittab[] = {
{"marshal", PyMarshal_Init},
/* This lives in import.c */
- {"imp", PyInit_imp},
+ {"_imp", PyInit_imp},
/* This lives in Python/Python-ast.c */
{"_ast", PyInit__ast},
/* These entries are here for sys.builtin_module_names */
- {"__main__", NULL},
{"builtins", NULL},
{"sys", NULL},
diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c
index 86720af49d..06ed53a64d 100644
--- a/Modules/errnomodule.c
+++ b/Modules/errnomodule.c
@@ -7,6 +7,33 @@
#ifdef MS_WINDOWS
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+/* The following constants were added to errno.h in VS2010 but have
+ preferred WSA equivalents. */
+#undef EADDRINUSE
+#undef EADDRNOTAVAIL
+#undef EAFNOSUPPORT
+#undef EALREADY
+#undef ECONNABORTED
+#undef ECONNREFUSED
+#undef ECONNRESET
+#undef EDESTADDRREQ
+#undef EHOSTUNREACH
+#undef EINPROGRESS
+#undef EISCONN
+#undef ELOOP
+#undef EMSGSIZE
+#undef ENETDOWN
+#undef ENETRESET
+#undef ENETUNREACH
+#undef ENOBUFS
+#undef ENOPROTOOPT
+#undef ENOTCONN
+#undef ENOTSOCK
+#undef EOPNOTSUPP
+#undef EPROTONOSUPPORT
+#undef EPROTOTYPE
+#undef ETIMEDOUT
+#undef EWOULDBLOCK
#endif
/*
@@ -84,6 +111,8 @@ PyInit_errno(void)
* The names and comments are borrowed from linux/include/errno.h,
* which should be pretty all-inclusive. However, the Solaris specific
* names and comments are borrowed from sys/errno.h in Solaris.
+ * MacOSX specific names and comments are borrowed from sys/errno.h in
+ * MacOSX.
*/
#ifdef ENODEV
@@ -848,6 +877,59 @@ PyInit_errno(void)
inscode(d, ds, de, "ENOTACTIVE", ENOTACTIVE, "Facility is not active");
#endif
+ /* MacOSX specific errnos */
+#ifdef EAUTH
+ inscode(d, ds, de, "EAUTH", EAUTH, "Authentication error");
+#endif
+#ifdef EBADARCH
+ inscode(d, ds, de, "EBADARCH", EBADARCH, "Bad CPU type in executable");
+#endif
+#ifdef EBADEXEC
+ inscode(d, ds, de, "EBADEXEC", EBADEXEC, "Bad executable (or shared library)");
+#endif
+#ifdef EBADMACHO
+ inscode(d, ds, de, "EBADMACHO", EBADMACHO, "Malformed Mach-o file");
+#endif
+#ifdef EBADRPC
+ inscode(d, ds, de, "EBADRPC", EBADRPC, "RPC struct is bad");
+#endif
+#ifdef EDEVERR
+ inscode(d, ds, de, "EDEVERR", EDEVERR, "Device error");
+#endif
+#ifdef EFTYPE
+ inscode(d, ds, de, "EFTYPE", EFTYPE, "Inappropriate file type or format");
+#endif
+#ifdef ENEEDAUTH
+ inscode(d, ds, de, "ENEEDAUTH", ENEEDAUTH, "Need authenticator");
+#endif
+#ifdef ENOATTR
+ inscode(d, ds, de, "ENOATTR", ENOATTR, "Attribute not found");
+#endif
+#ifdef ENOPOLICY
+ inscode(d, ds, de, "ENOPOLICY", ENOPOLICY, "Policy not found");
+#endif
+#ifdef EPROCLIM
+ inscode(d, ds, de, "EPROCLIM", EPROCLIM, "Too many processes");
+#endif
+#ifdef EPROCUNAVAIL
+ inscode(d, ds, de, "EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
+#endif
+#ifdef EPROGMISMATCH
+ inscode(d, ds, de, "EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
+#endif
+#ifdef EPROGUNAVAIL
+ inscode(d, ds, de, "EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
+#endif
+#ifdef EPWROFF
+ inscode(d, ds, de, "EPWROFF", EPWROFF, "Device power is off");
+#endif
+#ifdef ERPCMISMATCH
+ inscode(d, ds, de, "ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
+#endif
+#ifdef ESHLIBVERS
+ inscode(d, ds, de, "ESHLIBVERS", ESHLIBVERS, "Shared library version mismatch");
+#endif
+
Py_DECREF(de);
return m;
}
diff --git a/Modules/expat/expat_external.h b/Modules/expat/expat_external.h
index 2c03284ea2..f337e1c562 100644
--- a/Modules/expat/expat_external.h
+++ b/Modules/expat/expat_external.h
@@ -7,6 +7,10 @@
/* External API definitions */
+/* Namespace external symbols to allow multiple libexpat version to
+ co-exist. */
+#include "pyexpatns.h"
+
#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__)
#define XML_USE_MSC_EXTENSIONS 1
#endif
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
new file mode 100644
index 0000000000..680f630ebd
--- /dev/null
+++ b/Modules/faulthandler.c
@@ -0,0 +1,1153 @@
+#include "Python.h"
+#include "pythread.h"
+#include <signal.h>
+#include <object.h>
+#include <frameobject.h>
+#include <signal.h>
+#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
+#include <pthread.h>
+#endif
+
+/* Allocate at maximum 100 MB of the stack to raise the stack overflow */
+#define STACK_OVERFLOW_MAX_SIZE (100*1024*1024)
+
+#ifdef WITH_THREAD
+# define FAULTHANDLER_LATER
+#endif
+
+#ifndef MS_WINDOWS
+ /* register() is useless on Windows, because only SIGSEGV, SIGABRT and
+ SIGILL can be handled by the process, and these signals can only be used
+ with enable(), not using register() */
+# define FAULTHANDLER_USER
+#endif
+
+#define PUTS(fd, str) write(fd, str, strlen(str))
+
+#ifdef HAVE_SIGACTION
+typedef struct sigaction _Py_sighandler_t;
+#else
+typedef PyOS_sighandler_t _Py_sighandler_t;
+#endif
+
+typedef struct {
+ int signum;
+ int enabled;
+ const char* name;
+ _Py_sighandler_t previous;
+ int all_threads;
+} fault_handler_t;
+
+static struct {
+ int enabled;
+ PyObject *file;
+ int fd;
+ int all_threads;
+ PyInterpreterState *interp;
+} fatal_error = {0, NULL, -1, 0};
+
+#ifdef FAULTHANDLER_LATER
+static struct {
+ PyObject *file;
+ int fd;
+ PY_TIMEOUT_T timeout_us; /* timeout in microseconds */
+ int repeat;
+ PyInterpreterState *interp;
+ int exit;
+ char *header;
+ size_t header_len;
+ /* The main thread always holds this lock. It is only released when
+ faulthandler_thread() is interrupted before this thread exits, or at
+ Python exit. */
+ PyThread_type_lock cancel_event;
+ /* released by child thread when joined */
+ PyThread_type_lock running;
+} thread;
+#endif
+
+#ifdef FAULTHANDLER_USER
+typedef struct {
+ int enabled;
+ PyObject *file;
+ int fd;
+ int all_threads;
+ int chain;
+ _Py_sighandler_t previous;
+ PyInterpreterState *interp;
+} user_signal_t;
+
+static user_signal_t *user_signals;
+
+/* the following macros come from Python: Modules/signalmodule.c */
+#if defined(PYOS_OS2) && !defined(PYCC_GCC)
+#define NSIG 12
+#endif
+#ifndef NSIG
+# if defined(_NSIG)
+# define NSIG _NSIG /* For BSD/SysV */
+# elif defined(_SIGMAX)
+# define NSIG (_SIGMAX + 1) /* For QNX */
+# elif defined(SIGMAX)
+# define NSIG (SIGMAX + 1) /* For djgpp */
+# else
+# define NSIG 64 /* Use a reasonable default value */
+# endif
+#endif
+
+static void faulthandler_user(int signum);
+#endif /* FAULTHANDLER_USER */
+
+
+static fault_handler_t faulthandler_handlers[] = {
+#ifdef SIGBUS
+ {SIGBUS, 0, "Bus error", },
+#endif
+#ifdef SIGILL
+ {SIGILL, 0, "Illegal instruction", },
+#endif
+ {SIGFPE, 0, "Floating point exception", },
+ {SIGABRT, 0, "Aborted", },
+ /* define SIGSEGV at the end to make it the default choice if searching the
+ handler fails in faulthandler_fatal_error() */
+ {SIGSEGV, 0, "Segmentation fault", }
+};
+static const unsigned char faulthandler_nsignals = \
+ Py_ARRAY_LENGTH(faulthandler_handlers);
+
+#ifdef HAVE_SIGALTSTACK
+static stack_t stack;
+#endif
+
+
+/* Get the file descriptor of a file by calling its fileno() method and then
+ call its flush() method.
+
+ If file is NULL or Py_None, use sys.stderr as the new file.
+
+ On success, return the new file and write the file descriptor into *p_fd.
+ On error, return NULL. */
+
+static PyObject*
+faulthandler_get_fileno(PyObject *file, int *p_fd)
+{
+ PyObject *result;
+ _Py_IDENTIFIER(fileno);
+ _Py_IDENTIFIER(flush);
+ long fd_long;
+ int fd;
+
+ if (file == NULL || file == Py_None) {
+ file = PySys_GetObject("stderr");
+ if (file == NULL) {
+ PyErr_SetString(PyExc_RuntimeError, "unable to get sys.stderr");
+ return NULL;
+ }
+ }
+
+ result = _PyObject_CallMethodId(file, &PyId_fileno, "");
+ if (result == NULL)
+ return NULL;
+
+ fd = -1;
+ if (PyLong_Check(result)) {
+ fd_long = PyLong_AsLong(result);
+ if (0 <= fd_long && fd_long < INT_MAX)
+ fd = (int)fd_long;
+ }
+ Py_DECREF(result);
+
+ if (fd == -1) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "file.fileno() is not a valid file descriptor");
+ return NULL;
+ }
+
+ result = _PyObject_CallMethodId(file, &PyId_flush, "");
+ if (result != NULL)
+ Py_DECREF(result);
+ else {
+ /* ignore flush() error */
+ PyErr_Clear();
+ }
+ *p_fd = fd;
+ return file;
+}
+
+/* Get the state of the current thread: only call this function if the current
+ thread holds the GIL. Raise an exception on error. */
+static PyThreadState*
+get_thread_state(void)
+{
+ PyThreadState *tstate = PyThreadState_Get();
+ if (tstate == NULL) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "unable to get the current thread state");
+ return NULL;
+ }
+ return tstate;
+}
+
+static PyObject*
+faulthandler_dump_traceback_py(PyObject *self,
+ PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = {"file", "all_threads", NULL};
+ PyObject *file = NULL;
+ int all_threads = 1;
+ PyThreadState *tstate;
+ const char *errmsg;
+ int fd;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "|Oi:dump_traceback", kwlist,
+ &file, &all_threads))
+ return NULL;
+
+ file = faulthandler_get_fileno(file, &fd);
+ if (file == NULL)
+ return NULL;
+
+ tstate = get_thread_state();
+ if (tstate == NULL)
+ return NULL;
+
+ if (all_threads) {
+ errmsg = _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
+ if (errmsg != NULL) {
+ PyErr_SetString(PyExc_RuntimeError, errmsg);
+ return NULL;
+ }
+ }
+ else {
+ _Py_DumpTraceback(fd, tstate);
+ }
+ Py_RETURN_NONE;
+}
+
+
+/* Handler for SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL signals.
+
+ Display the current Python traceback, restore the previous handler and call
+ the previous handler.
+
+ On Windows, don't explicitly call the previous handler, because the Windows
+ signal handler would not be called (for an unknown reason). The execution of
+ the program continues at faulthandler_fatal_error() exit, but the same
+ instruction will raise the same fault (signal), and so the previous handler
+ will be called.
+
+ This function is signal-safe and should only call signal-safe functions. */
+
+static void
+faulthandler_fatal_error(int signum)
+{
+ const int fd = fatal_error.fd;
+ unsigned int i;
+ fault_handler_t *handler = NULL;
+ PyThreadState *tstate;
+ int save_errno = errno;
+
+ if (!fatal_error.enabled)
+ return;
+
+ for (i=0; i < faulthandler_nsignals; i++) {
+ handler = &faulthandler_handlers[i];
+ if (handler->signum == signum)
+ break;
+ }
+ if (handler == NULL) {
+ /* faulthandler_nsignals == 0 (unlikely) */
+ return;
+ }
+
+ /* restore the previous handler */
+#ifdef HAVE_SIGACTION
+ (void)sigaction(signum, &handler->previous, NULL);
+#else
+ (void)signal(signum, handler->previous);
+#endif
+ handler->enabled = 0;
+
+ PUTS(fd, "Fatal Python error: ");
+ PUTS(fd, handler->name);
+ PUTS(fd, "\n\n");
+
+#ifdef WITH_THREAD
+ /* SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL are synchronous signals and
+ are thus delivered to the thread that caused the fault. Get the Python
+ thread state of the current thread.
+
+ PyThreadState_Get() doesn't give the state of the thread that caused the
+ fault if the thread released the GIL, and so this function cannot be
+ used. Read the thread local storage (TLS) instead: call
+ PyGILState_GetThisThreadState(). */
+ tstate = PyGILState_GetThisThreadState();
+#else
+ tstate = PyThreadState_Get();
+#endif
+
+ if (fatal_error.all_threads)
+ _Py_DumpTracebackThreads(fd, fatal_error.interp, tstate);
+ else {
+ if (tstate != NULL)
+ _Py_DumpTraceback(fd, tstate);
+ }
+
+ errno = save_errno;
+#ifdef MS_WINDOWS
+ if (signum == SIGSEGV) {
+ /* don't explicitly call the previous handler for SIGSEGV in this signal
+ handler, because the Windows signal handler would not be called */
+ return;
+ }
+#endif
+ /* call the previous signal handler: it is called immediately if we use
+ sigaction() thanks to SA_NODEFER flag, otherwise it is deferred */
+ raise(signum);
+}
+
+/* Install the handler for fatal signals, faulthandler_fatal_error(). */
+
+static PyObject*
+faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = {"file", "all_threads", NULL};
+ PyObject *file = NULL;
+ int all_threads = 1;
+ unsigned int i;
+ fault_handler_t *handler;
+#ifdef HAVE_SIGACTION
+ struct sigaction action;
+#endif
+ int err;
+ int fd;
+ PyThreadState *tstate;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "|Oi:enable", kwlist, &file, &all_threads))
+ return NULL;
+
+ file = faulthandler_get_fileno(file, &fd);
+ if (file == NULL)
+ return NULL;
+
+ tstate = get_thread_state();
+ if (tstate == NULL)
+ return NULL;
+
+ Py_XDECREF(fatal_error.file);
+ Py_INCREF(file);
+ fatal_error.file = file;
+ fatal_error.fd = fd;
+ fatal_error.all_threads = all_threads;
+ fatal_error.interp = tstate->interp;
+
+ if (!fatal_error.enabled) {
+ fatal_error.enabled = 1;
+
+ for (i=0; i < faulthandler_nsignals; i++) {
+ handler = &faulthandler_handlers[i];
+#ifdef HAVE_SIGACTION
+ action.sa_handler = faulthandler_fatal_error;
+ sigemptyset(&action.sa_mask);
+ /* Do not prevent the signal from being received from within
+ its own signal handler */
+ action.sa_flags = SA_NODEFER;
+#ifdef HAVE_SIGALTSTACK
+ if (stack.ss_sp != NULL) {
+ /* Call the signal handler on an alternate signal stack
+ provided by sigaltstack() */
+ action.sa_flags |= SA_ONSTACK;
+ }
+#endif
+ err = sigaction(handler->signum, &action, &handler->previous);
+#else
+ handler->previous = signal(handler->signum,
+ faulthandler_fatal_error);
+ err = (handler->previous == SIG_ERR);
+#endif
+ if (err) {
+ PyErr_SetFromErrno(PyExc_RuntimeError);
+ return NULL;
+ }
+ handler->enabled = 1;
+ }
+ }
+ Py_RETURN_NONE;
+}
+
+static void
+faulthandler_disable(void)
+{
+ unsigned int i;
+ fault_handler_t *handler;
+
+ if (fatal_error.enabled) {
+ fatal_error.enabled = 0;
+ for (i=0; i < faulthandler_nsignals; i++) {
+ handler = &faulthandler_handlers[i];
+ if (!handler->enabled)
+ continue;
+#ifdef HAVE_SIGACTION
+ (void)sigaction(handler->signum, &handler->previous, NULL);
+#else
+ (void)signal(handler->signum, handler->previous);
+#endif
+ handler->enabled = 0;
+ }
+ }
+
+ Py_CLEAR(fatal_error.file);
+}
+
+static PyObject*
+faulthandler_disable_py(PyObject *self)
+{
+ if (!fatal_error.enabled) {
+ Py_INCREF(Py_False);
+ return Py_False;
+ }
+ faulthandler_disable();
+ Py_INCREF(Py_True);
+ return Py_True;
+}
+
+static PyObject*
+faulthandler_is_enabled(PyObject *self)
+{
+ return PyBool_FromLong(fatal_error.enabled);
+}
+
+#ifdef FAULTHANDLER_LATER
+
+static void
+faulthandler_thread(void *unused)
+{
+ PyLockStatus st;
+ const char* errmsg;
+ PyThreadState *current;
+ int ok;
+#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
+ sigset_t set;
+
+ /* we don't want to receive any signal */
+ sigfillset(&set);
+ pthread_sigmask(SIG_SETMASK, &set, NULL);
+#endif
+
+ do {
+ st = PyThread_acquire_lock_timed(thread.cancel_event,
+ thread.timeout_us, 0);
+ if (st == PY_LOCK_ACQUIRED) {
+ PyThread_release_lock(thread.cancel_event);
+ break;
+ }
+ /* Timeout => dump traceback */
+ assert(st == PY_LOCK_FAILURE);
+
+ /* get the thread holding the GIL, NULL if no thread hold the GIL */
+ current = _Py_atomic_load_relaxed(&_PyThreadState_Current);
+
+ write(thread.fd, thread.header, thread.header_len);
+
+ errmsg = _Py_DumpTracebackThreads(thread.fd, thread.interp, current);
+ ok = (errmsg == NULL);
+
+ if (thread.exit)
+ _exit(1);
+ } while (ok && thread.repeat);
+
+ /* The only way out */
+ PyThread_release_lock(thread.running);
+}
+
+static void
+cancel_dump_traceback_later(void)
+{
+ /* Notify cancellation */
+ PyThread_release_lock(thread.cancel_event);
+
+ /* Wait for thread to join */
+ PyThread_acquire_lock(thread.running, 1);
+ PyThread_release_lock(thread.running);
+
+ /* The main thread should always hold the cancel_event lock */
+ PyThread_acquire_lock(thread.cancel_event, 1);
+
+ Py_CLEAR(thread.file);
+ if (thread.header) {
+ free(thread.header);
+ thread.header = NULL;
+ }
+}
+
+static char*
+format_timeout(double timeout)
+{
+ unsigned long us, sec, min, hour;
+ double intpart, fracpart;
+ char buffer[100];
+
+ fracpart = modf(timeout, &intpart);
+ sec = (unsigned long)intpart;
+ us = (unsigned long)(fracpart * 1e6);
+ min = sec / 60;
+ sec %= 60;
+ hour = min / 60;
+ min %= 60;
+
+ if (us != 0)
+ PyOS_snprintf(buffer, sizeof(buffer),
+ "Timeout (%lu:%02lu:%02lu.%06lu)!\n",
+ hour, min, sec, us);
+ else
+ PyOS_snprintf(buffer, sizeof(buffer),
+ "Timeout (%lu:%02lu:%02lu)!\n",
+ hour, min, sec);
+
+ return strdup(buffer);
+}
+
+static PyObject*
+faulthandler_dump_traceback_later(PyObject *self,
+ PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = {"timeout", "repeat", "file", "exit", NULL};
+ double timeout;
+ PY_TIMEOUT_T timeout_us;
+ int repeat = 0;
+ PyObject *file = NULL;
+ int fd;
+ int exit = 0;
+ PyThreadState *tstate;
+ char *header;
+ size_t header_len;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "d|iOi:dump_traceback_later", kwlist,
+ &timeout, &repeat, &file, &exit))
+ return NULL;
+ if ((timeout * 1e6) >= (double) PY_TIMEOUT_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "timeout value is too large");
+ return NULL;
+ }
+ timeout_us = (PY_TIMEOUT_T)(timeout * 1e6);
+ if (timeout_us <= 0) {
+ PyErr_SetString(PyExc_ValueError, "timeout must be greater than 0");
+ return NULL;
+ }
+
+ tstate = get_thread_state();
+ if (tstate == NULL)
+ return NULL;
+
+ file = faulthandler_get_fileno(file, &fd);
+ if (file == NULL)
+ return NULL;
+
+ /* format the timeout */
+ header = format_timeout(timeout);
+ if (header == NULL)
+ return PyErr_NoMemory();
+ header_len = strlen(header);
+
+ /* Cancel previous thread, if running */
+ cancel_dump_traceback_later();
+
+ Py_XDECREF(thread.file);
+ Py_INCREF(file);
+ thread.file = file;
+ thread.fd = fd;
+ thread.timeout_us = timeout_us;
+ thread.repeat = repeat;
+ thread.interp = tstate->interp;
+ thread.exit = exit;
+ thread.header = header;
+ thread.header_len = header_len;
+
+ /* Arm these locks to serve as events when released */
+ PyThread_acquire_lock(thread.running, 1);
+
+ if (PyThread_start_new_thread(faulthandler_thread, NULL) == -1) {
+ PyThread_release_lock(thread.running);
+ Py_CLEAR(thread.file);
+ free(header);
+ thread.header = NULL;
+ PyErr_SetString(PyExc_RuntimeError,
+ "unable to start watchdog thread");
+ return NULL;
+ }
+
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+faulthandler_cancel_dump_traceback_later_py(PyObject *self)
+{
+ cancel_dump_traceback_later();
+ Py_RETURN_NONE;
+}
+#endif /* FAULTHANDLER_LATER */
+
+#ifdef FAULTHANDLER_USER
+static int
+faulthandler_register(int signum, int chain, _Py_sighandler_t *p_previous)
+{
+#ifdef HAVE_SIGACTION
+ struct sigaction action;
+ action.sa_handler = faulthandler_user;
+ sigemptyset(&action.sa_mask);
+ /* if the signal is received while the kernel is executing a system
+ call, try to restart the system call instead of interrupting it and
+ return EINTR. */
+ action.sa_flags = SA_RESTART;
+ if (chain) {
+ /* do not prevent the signal from being received from within its
+ own signal handler */
+ action.sa_flags = SA_NODEFER;
+ }
+#ifdef HAVE_SIGALTSTACK
+ if (stack.ss_sp != NULL) {
+ /* Call the signal handler on an alternate signal stack
+ provided by sigaltstack() */
+ action.sa_flags |= SA_ONSTACK;
+ }
+#endif
+ return sigaction(signum, &action, p_previous);
+#else
+ _Py_sighandler_t previous;
+ previous = signal(signum, faulthandler_user);
+ if (p_previous != NULL)
+ *p_previous = previous;
+ return (previous == SIG_ERR);
+#endif
+}
+
+/* Handler of user signals (e.g. SIGUSR1).
+
+ Dump the traceback of the current thread, or of all threads if
+ thread.all_threads is true.
+
+ This function is signal safe and should only call signal safe functions. */
+
+static void
+faulthandler_user(int signum)
+{
+ user_signal_t *user;
+ PyThreadState *tstate;
+ int save_errno = errno;
+
+ user = &user_signals[signum];
+ if (!user->enabled)
+ return;
+
+#ifdef WITH_THREAD
+ /* PyThreadState_Get() doesn't give the state of the current thread if
+ the thread doesn't hold the GIL. Read the thread local storage (TLS)
+ instead: call PyGILState_GetThisThreadState(). */
+ tstate = PyGILState_GetThisThreadState();
+#else
+ tstate = PyThreadState_Get();
+#endif
+
+ if (user->all_threads)
+ _Py_DumpTracebackThreads(user->fd, user->interp, tstate);
+ else {
+ if (tstate != NULL)
+ _Py_DumpTraceback(user->fd, tstate);
+ }
+#ifdef HAVE_SIGACTION
+ if (user->chain) {
+ (void)sigaction(signum, &user->previous, NULL);
+ errno = save_errno;
+
+ /* call the previous signal handler */
+ raise(signum);
+
+ save_errno = errno;
+ (void)faulthandler_register(signum, user->chain, NULL);
+ errno = save_errno;
+ }
+#else
+ if (user->chain) {
+ errno = save_errno;
+ /* call the previous signal handler */
+ user->previous(signum);
+ }
+#endif
+}
+
+static int
+check_signum(int signum)
+{
+ unsigned int i;
+
+ for (i=0; i < faulthandler_nsignals; i++) {
+ if (faulthandler_handlers[i].signum == signum) {
+ PyErr_Format(PyExc_RuntimeError,
+ "signal %i cannot be registered, "
+ "use enable() instead",
+ signum);
+ return 0;
+ }
+ }
+ if (signum < 1 || NSIG <= signum) {
+ PyErr_SetString(PyExc_ValueError, "signal number out of range");
+ return 0;
+ }
+ return 1;
+}
+
+static PyObject*
+faulthandler_register_py(PyObject *self,
+ PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = {"signum", "file", "all_threads", "chain", NULL};
+ int signum;
+ PyObject *file = NULL;
+ int all_threads = 1;
+ int chain = 0;
+ int fd;
+ user_signal_t *user;
+ _Py_sighandler_t previous;
+ PyThreadState *tstate;
+ int err;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "i|Oii:register", kwlist,
+ &signum, &file, &all_threads, &chain))
+ return NULL;
+
+ if (!check_signum(signum))
+ return NULL;
+
+ tstate = get_thread_state();
+ if (tstate == NULL)
+ return NULL;
+
+ file = faulthandler_get_fileno(file, &fd);
+ if (file == NULL)
+ return NULL;
+
+ if (user_signals == NULL) {
+ user_signals = calloc(NSIG, sizeof(user_signal_t));
+ if (user_signals == NULL)
+ return PyErr_NoMemory();
+ }
+ user = &user_signals[signum];
+
+ if (!user->enabled) {
+ err = faulthandler_register(signum, chain, &previous);
+ if (err) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ user->previous = previous;
+ }
+
+ Py_XDECREF(user->file);
+ Py_INCREF(file);
+ user->file = file;
+ user->fd = fd;
+ user->all_threads = all_threads;
+ user->chain = chain;
+ user->interp = tstate->interp;
+ user->enabled = 1;
+
+ Py_RETURN_NONE;
+}
+
+static int
+faulthandler_unregister(user_signal_t *user, int signum)
+{
+ if (!user->enabled)
+ return 0;
+ user->enabled = 0;
+#ifdef HAVE_SIGACTION
+ (void)sigaction(signum, &user->previous, NULL);
+#else
+ (void)signal(signum, user->previous);
+#endif
+ Py_CLEAR(user->file);
+ user->fd = -1;
+ return 1;
+}
+
+static PyObject*
+faulthandler_unregister_py(PyObject *self, PyObject *args)
+{
+ int signum;
+ user_signal_t *user;
+ int change;
+
+ if (!PyArg_ParseTuple(args, "i:unregister", &signum))
+ return NULL;
+
+ if (!check_signum(signum))
+ return NULL;
+
+ if (user_signals == NULL)
+ Py_RETURN_FALSE;
+
+ user = &user_signals[signum];
+ change = faulthandler_unregister(user, signum);
+ return PyBool_FromLong(change);
+}
+#endif /* FAULTHANDLER_USER */
+
+
+static PyObject *
+faulthandler_read_null(PyObject *self, PyObject *args)
+{
+ volatile int *x;
+ volatile int y;
+ int release_gil = 0;
+ if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil))
+ return NULL;
+
+ x = NULL;
+ if (release_gil) {
+ Py_BEGIN_ALLOW_THREADS
+ y = *x;
+ Py_END_ALLOW_THREADS
+ } else
+ y = *x;
+ return PyLong_FromLong(y);
+
+}
+
+static PyObject *
+faulthandler_sigsegv(PyObject *self, PyObject *args)
+{
+#if defined(MS_WINDOWS)
+ /* For SIGSEGV, faulthandler_fatal_error() restores the previous signal
+ handler and then gives back the execution flow to the program (without
+ explicitly calling the previous error handler). In a normal case, the
+ SIGSEGV was raised by the kernel because of a fault, and so if the
+ program retries to execute the same instruction, the fault will be
+ raised again.
+
+ Here the fault is simulated by a fake SIGSEGV signal raised by the
+ application. We have to raise SIGSEGV at lease twice: once for
+ faulthandler_fatal_error(), and one more time for the previous signal
+ handler. */
+ while(1)
+ raise(SIGSEGV);
+#else
+ raise(SIGSEGV);
+#endif
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+faulthandler_sigfpe(PyObject *self, PyObject *args)
+{
+ /* Do an integer division by zero: raise a SIGFPE on Intel CPU, but not on
+ PowerPC. Use volatile to disable compile-time optimizations. */
+ volatile int x = 1, y = 0, z;
+ z = x / y;
+ /* If the division by zero didn't raise a SIGFPE (e.g. on PowerPC),
+ raise it manually. */
+ raise(SIGFPE);
+ /* This line is never reached, but we pretend to make something with z
+ to silence a compiler warning. */
+ return PyLong_FromLong(z);
+}
+
+static PyObject *
+faulthandler_sigabrt(PyObject *self, PyObject *args)
+{
+#ifdef _MSC_VER
+ /* Visual Studio: configure abort() to not display an error message nor
+ open a popup asking to report the fault. */
+ _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
+#endif
+ abort();
+ Py_RETURN_NONE;
+}
+
+#ifdef SIGBUS
+static PyObject *
+faulthandler_sigbus(PyObject *self, PyObject *args)
+{
+ raise(SIGBUS);
+ Py_RETURN_NONE;
+}
+#endif
+
+#ifdef SIGILL
+static PyObject *
+faulthandler_sigill(PyObject *self, PyObject *args)
+{
+ raise(SIGILL);
+ Py_RETURN_NONE;
+}
+#endif
+
+static PyObject *
+faulthandler_fatal_error_py(PyObject *self, PyObject *args)
+{
+ char *message;
+ if (!PyArg_ParseTuple(args, "y:fatal_error", &message))
+ return NULL;
+ Py_FatalError(message);
+ Py_RETURN_NONE;
+}
+
+#if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
+static void*
+stack_overflow(void *min_sp, void *max_sp, size_t *depth)
+{
+ /* allocate 4096 bytes on the stack at each call */
+ unsigned char buffer[4096];
+ void *sp = &buffer;
+ *depth += 1;
+ if (sp < min_sp || max_sp < sp)
+ return sp;
+ buffer[0] = 1;
+ buffer[4095] = 0;
+ return stack_overflow(min_sp, max_sp, depth);
+}
+
+static PyObject *
+faulthandler_stack_overflow(PyObject *self)
+{
+ size_t depth, size;
+ char *sp = (char *)&depth, *stop;
+
+ depth = 0;
+ stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE,
+ sp + STACK_OVERFLOW_MAX_SIZE,
+ &depth);
+ if (sp < stop)
+ size = stop - sp;
+ else
+ size = sp - stop;
+ PyErr_Format(PyExc_RuntimeError,
+ "unable to raise a stack overflow (allocated %zu bytes "
+ "on the stack, %zu recursive calls)",
+ size, depth);
+ return NULL;
+}
+#endif
+
+
+static int
+faulthandler_traverse(PyObject *module, visitproc visit, void *arg)
+{
+#ifdef FAULTHANDLER_USER
+ unsigned int signum;
+#endif
+
+#ifdef FAULTHANDLER_LATER
+ Py_VISIT(thread.file);
+#endif
+#ifdef FAULTHANDLER_USER
+ if (user_signals != NULL) {
+ for (signum=0; signum < NSIG; signum++)
+ Py_VISIT(user_signals[signum].file);
+ }
+#endif
+ Py_VISIT(fatal_error.file);
+ return 0;
+}
+
+PyDoc_STRVAR(module_doc,
+"faulthandler module.");
+
+static PyMethodDef module_methods[] = {
+ {"enable",
+ (PyCFunction)faulthandler_enable, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("enable(file=sys.stderr, all_threads=True): "
+ "enable the fault handler")},
+ {"disable", (PyCFunction)faulthandler_disable_py, METH_NOARGS,
+ PyDoc_STR("disable(): disable the fault handler")},
+ {"is_enabled", (PyCFunction)faulthandler_is_enabled, METH_NOARGS,
+ PyDoc_STR("is_enabled()->bool: check if the handler is enabled")},
+ {"dump_traceback",
+ (PyCFunction)faulthandler_dump_traceback_py, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("dump_traceback(file=sys.stderr, all_threads=True): "
+ "dump the traceback of the current thread, or of all threads "
+ "if all_threads is True, into file")},
+#ifdef FAULTHANDLER_LATER
+ {"dump_traceback_later",
+ (PyCFunction)faulthandler_dump_traceback_later, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("dump_traceback_later(timeout, repeat=False, file=sys.stderrn, exit=False):\n"
+ "dump the traceback of all threads in timeout seconds,\n"
+ "or each timeout seconds if repeat is True. If exit is True, "
+ "call _exit(1) which is not safe.")},
+ {"cancel_dump_traceback_later",
+ (PyCFunction)faulthandler_cancel_dump_traceback_later_py, METH_NOARGS,
+ PyDoc_STR("cancel_dump_traceback_later():\ncancel the previous call "
+ "to dump_traceback_later().")},
+#endif
+
+#ifdef FAULTHANDLER_USER
+ {"register",
+ (PyCFunction)faulthandler_register_py, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("register(signum, file=sys.stderr, all_threads=True, chain=False): "
+ "register an handler for the signal 'signum': dump the "
+ "traceback of the current thread, or of all threads if "
+ "all_threads is True, into file")},
+ {"unregister",
+ faulthandler_unregister_py, METH_VARARGS|METH_KEYWORDS,
+ PyDoc_STR("unregister(signum): unregister the handler of the signal "
+ "'signum' registered by register()")},
+#endif
+
+ {"_read_null", faulthandler_read_null, METH_VARARGS,
+ PyDoc_STR("_read_null(release_gil=False): read from NULL, raise "
+ "a SIGSEGV or SIGBUS signal depending on the platform")},
+ {"_sigsegv", faulthandler_sigsegv, METH_VARARGS,
+ PyDoc_STR("_sigsegv(): raise a SIGSEGV signal")},
+ {"_sigabrt", faulthandler_sigabrt, METH_VARARGS,
+ PyDoc_STR("_sigabrt(): raise a SIGABRT signal")},
+ {"_sigfpe", (PyCFunction)faulthandler_sigfpe, METH_NOARGS,
+ PyDoc_STR("_sigfpe(): raise a SIGFPE signal")},
+#ifdef SIGBUS
+ {"_sigbus", (PyCFunction)faulthandler_sigbus, METH_NOARGS,
+ PyDoc_STR("_sigbus(): raise a SIGBUS signal")},
+#endif
+#ifdef SIGILL
+ {"_sigill", (PyCFunction)faulthandler_sigill, METH_NOARGS,
+ PyDoc_STR("_sigill(): raise a SIGILL signal")},
+#endif
+ {"_fatal_error", faulthandler_fatal_error_py, METH_VARARGS,
+ PyDoc_STR("_fatal_error(message): call Py_FatalError(message)")},
+#if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
+ {"_stack_overflow", (PyCFunction)faulthandler_stack_overflow, METH_NOARGS,
+ PyDoc_STR("_stack_overflow(): recursive call to raise a stack overflow")},
+#endif
+ {NULL, NULL} /* sentinel */
+};
+
+static struct PyModuleDef module_def = {
+ PyModuleDef_HEAD_INIT,
+ "faulthandler",
+ module_doc,
+ 0, /* non-negative size to be able to unload the module */
+ module_methods,
+ NULL,
+ faulthandler_traverse,
+ NULL,
+ NULL
+};
+
+PyMODINIT_FUNC
+PyInit_faulthandler(void)
+{
+ return PyModule_Create(&module_def);
+}
+
+/* Call faulthandler.enable() if the PYTHONFAULTHANDLER environment variable
+ is defined, or if sys._xoptions has a 'faulthandler' key. */
+
+static int
+faulthandler_env_options(void)
+{
+ PyObject *xoptions, *key, *module, *res;
+ _Py_IDENTIFIER(enable);
+
+ if (!Py_GETENV("PYTHONFAULTHANDLER")) {
+ int has_key;
+
+ xoptions = PySys_GetXOptions();
+ if (xoptions == NULL)
+ return -1;
+
+ key = PyUnicode_FromString("faulthandler");
+ if (key == NULL)
+ return -1;
+
+ has_key = PyDict_Contains(xoptions, key);
+ Py_DECREF(key);
+ if (!has_key)
+ return 0;
+ }
+
+ module = PyImport_ImportModule("faulthandler");
+ if (module == NULL) {
+ return -1;
+ }
+ res = _PyObject_CallMethodId(module, &PyId_enable, "");
+ Py_DECREF(module);
+ if (res == NULL)
+ return -1;
+ Py_DECREF(res);
+ return 0;
+}
+
+int _PyFaulthandler_Init(void)
+{
+#ifdef HAVE_SIGALTSTACK
+ int err;
+
+ /* Try to allocate an alternate stack for faulthandler() signal handler to
+ * be able to allocate memory on the stack, even on a stack overflow. If it
+ * fails, ignore the error. */
+ stack.ss_flags = 0;
+ stack.ss_size = SIGSTKSZ;
+ stack.ss_sp = PyMem_Malloc(stack.ss_size);
+ if (stack.ss_sp != NULL) {
+ err = sigaltstack(&stack, NULL);
+ if (err) {
+ PyMem_Free(stack.ss_sp);
+ stack.ss_sp = NULL;
+ }
+ }
+#endif
+#ifdef FAULTHANDLER_LATER
+ thread.file = NULL;
+ thread.cancel_event = PyThread_allocate_lock();
+ thread.running = PyThread_allocate_lock();
+ if (!thread.cancel_event || !thread.running) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "could not allocate locks for faulthandler");
+ return -1;
+ }
+ PyThread_acquire_lock(thread.cancel_event, 1);
+#endif
+
+ return faulthandler_env_options();
+}
+
+void _PyFaulthandler_Fini(void)
+{
+#ifdef FAULTHANDLER_USER
+ unsigned int signum;
+#endif
+
+#ifdef FAULTHANDLER_LATER
+ /* later */
+ if (thread.cancel_event) {
+ cancel_dump_traceback_later();
+ PyThread_release_lock(thread.cancel_event);
+ PyThread_free_lock(thread.cancel_event);
+ thread.cancel_event = NULL;
+ }
+ if (thread.running) {
+ PyThread_free_lock(thread.running);
+ thread.running = NULL;
+ }
+#endif
+
+#ifdef FAULTHANDLER_USER
+ /* user */
+ if (user_signals != NULL) {
+ for (signum=0; signum < NSIG; signum++)
+ faulthandler_unregister(&user_signals[signum], signum);
+ free(user_signals);
+ user_signals = NULL;
+ }
+#endif
+
+ /* fatal */
+ faulthandler_disable();
+#ifdef HAVE_SIGALTSTACK
+ if (stack.ss_sp != NULL) {
+ PyMem_Free(stack.ss_sp);
+ stack.ss_sp = NULL;
+ }
+#endif
+}
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index bfc59855dd..6769098203 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -27,7 +27,7 @@ conv_descriptor(PyObject *object, int *target)
}
-/* fcntl(fd, opt, [arg]) */
+/* fcntl(fd, op, [arg]) */
static PyObject *
fcntl_fcntl(PyObject *self, PyObject *args)
@@ -77,11 +77,12 @@ fcntl_fcntl(PyObject *self, PyObject *args)
}
PyDoc_STRVAR(fcntl_doc,
-"fcntl(fd, opt, [arg])\n\
+"fcntl(fd, op, [arg])\n\
\n\
-Perform the requested operation on file descriptor fd. The operation\n\
-is defined by op and is operating system dependent. These constants are\n\
-available from the fcntl module. The argument arg is optional, and\n\
+Perform the operation op on file descriptor fd. The values used\n\
+for op are operating system dependent, and are available\n\
+as constants in the fcntl module, using the same names as used in\n\
+the relevant C header files. The argument arg is optional, and\n\
defaults to 0; it may be an int or a string. If arg is given as a string,\n\
the return value of fcntl is a string of that length, containing the\n\
resulting value put in the arg buffer by the operating system. The length\n\
@@ -90,7 +91,7 @@ is an integer or if none is specified, the result value is an integer\n\
corresponding to the return value of the fcntl call in the C code.");
-/* ioctl(fd, opt, [arg]) */
+/* ioctl(fd, op, [arg]) */
static PyObject *
fcntl_ioctl(PyObject *self, PyObject *args)
@@ -104,7 +105,7 @@ fcntl_ioctl(PyObject *self, PyObject *args)
whereas the system expects it to be a 32bit bit field value
regardless of it being passed as an int or unsigned long on
various platforms. See the termios.TIOCSWINSZ constant across
- platforms for an example of thise.
+ platforms for an example of this.
If any of the 64bit platforms ever decide to use more than 32bits
in their unsigned long ioctl codes this will break and need
@@ -222,11 +223,12 @@ fcntl_ioctl(PyObject *self, PyObject *args)
}
PyDoc_STRVAR(ioctl_doc,
-"ioctl(fd, opt[, arg[, mutate_flag]])\n\
+"ioctl(fd, op[, arg[, mutate_flag]])\n\
\n\
-Perform the requested operation on file descriptor fd. The operation is\n\
-defined by opt and is operating system dependent. Typically these codes are\n\
-retrieved from the fcntl or termios library modules.\n\
+Perform the operation op on file descriptor fd. The values used for op\n\
+are operating system dependent, and are available as constants in the\n\
+fcntl or termios library modules, using the same names as used in the\n\
+relevant C header files.\n\
\n\
The argument arg is optional, and defaults to 0; it may be an int or a\n\
buffer containing character data (most likely a string or an array). \n\
@@ -309,7 +311,7 @@ PyDoc_STRVAR(flock_doc,
"flock(fd, operation)\n\
\n\
Perform the lock operation op on file descriptor fd. See the Unix \n\
-manual page for flock(3) for details. (On some systems, this function is\n\
+manual page for flock(2) for details. (On some systems, this function is\n\
emulated using fcntl().)");
@@ -540,10 +542,13 @@ all_ins(PyObject* d)
if (ins(d, "F_SHLCK", (long)F_SHLCK)) return -1;
#endif
-/* OS X (and maybe others) let you tell the storage device to flush to physical media */
+/* OS X specifics */
#ifdef F_FULLFSYNC
if (ins(d, "F_FULLFSYNC", (long)F_FULLFSYNC)) return -1;
#endif
+#ifdef F_NOCACHE
+ if (ins(d, "F_NOCACHE", (long)F_NOCACHE)) return -1;
+#endif
/* For F_{GET|SET}FL */
#ifdef FD_CLOEXEC
diff --git a/Modules/fpectlmodule.c b/Modules/fpectlmodule.c
index 1bb51cf7e3..6af2f82f70 100644
--- a/Modules/fpectlmodule.c
+++ b/Modules/fpectlmodule.c
@@ -174,17 +174,6 @@ static void fpe_reset(Sigfunc *handler)
fp_enable(TRP_INVALID | TRP_DIV_BY_ZERO | TRP_OVERFLOW);
PyOS_setsig(SIGFPE, handler);
-/*-- DEC ALPHA OSF --------------------------------------------------------*/
-#elif defined(__alpha) && defined(__osf__)
- /* References: exception_intro, ieee man pages */
- /* cc -c -I/usr/local/python/include fpectlmodule.c */
- /* ld -shared -o fpectlmodule.so fpectlmodule.o */
-#include <machine/fpu.h>
- unsigned long fp_control =
- IEEE_TRAP_ENABLE_INV | IEEE_TRAP_ENABLE_DZE | IEEE_TRAP_ENABLE_OVF;
- ieee_set_fp_control(fp_control);
- PyOS_setsig(SIGFPE, handler);
-
/*-- DEC ALPHA LINUX ------------------------------------------------------*/
#elif defined(__alpha) && defined(linux)
#include <asm/fpu.h>
diff --git a/Modules/gc_weakref.txt b/Modules/gc_weakref.txt
index d7be6c3ab4..2f18402c02 100644
--- a/Modules/gc_weakref.txt
+++ b/Modules/gc_weakref.txt
@@ -15,8 +15,8 @@ have been called before resurrection). At best (and this has been an
historically common bug), tp_clear empties an instance's __dict__, and
"impossible" AttributeErrors result. At worst, tp_clear leaves behind an
insane object at the C level, and segfaults result (historically, most
-often by setting a new-style class's mro pointer to NULL, after which
-attribute lookups performed by the class can segfault).
+often by setting a class's mro pointer to NULL, after which attribute
+lookups performed by the class can segfault).
OTOH, it's OK to run Python-level code that can't access unreachable
objects, and sometimes that's necessary. The chief example is the callback
@@ -119,7 +119,7 @@ isn't easy to stumble into by accident while Python is running, and, indeed,
it took quite a while to dream up failing test cases. Zope3 saw segfaults
during shutdown, during the second call of gc in Py_Finalize, after most
modules had been torn down. That creates many trash cycles (esp. those
-involving new-style classes), making the problem much more likely. Once you
+involving classes), making the problem much more likely. Once you
know what's required to provoke the problem, though, it's easy to create
tests that segfault before shutdown.
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 8c524f8309..c66dd38126 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -65,17 +65,17 @@ static PyObject *garbage = NULL;
/* Python string to use if unhandled exception occurs */
static PyObject *gc_str = NULL;
-/* Python string used to look for __del__ attribute. */
-static PyObject *delstr = NULL;
+/* a list of callbacks to be invoked when collection is performed */
+static PyObject *callbacks = NULL;
-/* This is the number of objects who survived the last full collection. It
+/* This is the number of objects that survived the last full collection. It
approximates the number of long lived objects tracked by the GC.
(by "full collection", we mean a collection of the oldest generation).
*/
static Py_ssize_t long_lived_total = 0;
-/* This is the number of objects who survived all "non-full" collections,
+/* This is the number of objects that survived all "non-full" collections,
and are awaiting to undergo a full collection for the first time.
*/
@@ -118,7 +118,7 @@ static Py_ssize_t long_lived_pending = 0;
/*
NOTE: about untracking of mutable objects.
-
+
Certain types of container cannot participate in a reference cycle, and
so do not need to be tracked by the garbage collector. Untracking these
objects reduces the cost of garbage collections. However, determining
@@ -136,10 +136,10 @@ static Py_ssize_t long_lived_pending = 0;
not survive until garbage collection. It is therefore not worthwhile
to untrack eligible tuples at creation time.
- Instead, all tuples except the empty tuple are tracked when created.
- During garbage collection it is determined whether any surviving tuples
- can be untracked. A tuple can be untracked if all of its contents are
- already not tracked. Tuples are examined for untracking in all garbage
+ Instead, all tuples except the empty tuple are tracked when created.
+ During garbage collection it is determined whether any surviving tuples
+ can be untracked. A tuple can be untracked if all of its contents are
+ already not tracked. Tuples are examined for untracking in all garbage
collection cycles. It may take more than one cycle to untrack a tuple.
Dictionaries containing only immutable objects also do not need to be
@@ -152,8 +152,8 @@ static Py_ssize_t long_lived_pending = 0;
The module provides the python function is_tracked(obj), which returns
the CURRENT tracking status of the object. Subsequent garbage
collections may change the tracking status of the object.
-
- Untracking of certain containers was introduced in issue #4688, and
+
+ Untracking of certain containers was introduced in issue #4688, and
the algorithm was refined in response to issue #14775.
*/
@@ -731,8 +731,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
static void
debug_cycle(char *msg, PyObject *op)
{
- PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
- msg, Py_TYPE(op)->tp_name, op);
+ PySys_FormatStderr("gc: %s <%s %p>\n",
+ msg, Py_TYPE(op)->tp_name, op);
}
/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
@@ -813,6 +813,9 @@ clear_freelists(void)
(void)PyTuple_ClearFreeList();
(void)PyUnicode_ClearFreeList();
(void)PyFloat_ClearFreeList();
+ (void)PyList_ClearFreeList();
+ (void)PyDict_ClearFreeList();
+ (void)PySet_ClearFreeList();
}
static double
@@ -820,7 +823,9 @@ get_time(void)
{
double result = 0;
if (tmod != NULL) {
- PyObject *f = PyObject_CallMethod(tmod, "time", NULL);
+ _Py_IDENTIFIER(time);
+
+ PyObject *f = _PyObject_CallMethodId(tmod, &PyId_time, NULL);
if (f == NULL) {
PyErr_Clear();
}
@@ -836,7 +841,7 @@ get_time(void)
/* This is the main function. Read this to understand how the
* collection process works. */
static Py_ssize_t
-collect(int generation)
+collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable)
{
int i;
Py_ssize_t m = 0; /* # objects collected */
@@ -848,12 +853,6 @@ collect(int generation)
PyGC_Head *gc;
double t1 = 0.0;
- if (delstr == NULL) {
- delstr = PyUnicode_InternFromString("__del__");
- if (delstr == NULL)
- Py_FatalError("gc couldn't allocate \"__del__\"");
- }
-
if (debug & DEBUG_STATS) {
PySys_WriteStderr("gc: collecting generation %d...\n",
generation);
@@ -993,9 +992,64 @@ collect(int generation)
PyErr_WriteUnraisable(gc_str);
Py_FatalError("unexpected exception during garbage collection");
}
+
+ if (n_collected)
+ *n_collected = m;
+ if (n_uncollectable)
+ *n_uncollectable = n;
return n+m;
}
+/* Invoke progress callbacks to notify clients that garbage collection
+ * is starting or stopping
+ */
+static void
+invoke_gc_callback(const char *phase, int generation,
+ Py_ssize_t collected, Py_ssize_t uncollectable)
+{
+ Py_ssize_t i;
+ PyObject *info = NULL;
+
+ /* we may get called very early */
+ if (callbacks == NULL)
+ return;
+ /* The local variable cannot be rebound, check it for sanity */
+ assert(callbacks != NULL && PyList_CheckExact(callbacks));
+ if (PyList_GET_SIZE(callbacks) != 0) {
+ info = Py_BuildValue("{sisnsn}",
+ "generation", generation,
+ "collected", collected,
+ "uncollectable", uncollectable);
+ if (info == NULL) {
+ PyErr_WriteUnraisable(NULL);
+ return;
+ }
+ }
+ for (i=0; i<PyList_GET_SIZE(callbacks); i++) {
+ PyObject *r, *cb = PyList_GET_ITEM(callbacks, i);
+ Py_INCREF(cb); /* make sure cb doesn't go away */
+ r = PyObject_CallFunction(cb, "sO", phase, info);
+ Py_XDECREF(r);
+ if (r == NULL)
+ PyErr_WriteUnraisable(cb);
+ Py_DECREF(cb);
+ }
+ Py_XDECREF(info);
+}
+
+/* Perform garbage collection of a generation and invoke
+ * progress callbacks.
+ */
+static Py_ssize_t
+collect_with_callback(int generation)
+{
+ Py_ssize_t result, collected, uncollectable;
+ invoke_gc_callback("start", generation, 0, 0);
+ result = collect(generation, &collected, &uncollectable);
+ invoke_gc_callback("stop", generation, collected, uncollectable);
+ return result;
+}
+
static Py_ssize_t
collect_generations(void)
{
@@ -1014,7 +1068,7 @@ collect_generations(void)
if (i == NUM_GENERATIONS - 1
&& long_lived_pending < long_lived_total / 4)
continue;
- n = collect(i);
+ n = collect_with_callback(i);
break;
}
}
@@ -1085,7 +1139,7 @@ gc_collect(PyObject *self, PyObject *args, PyObject *kws)
n = 0; /* already collecting, don't do anything */
else {
collecting = 1;
- n = collect(genarg);
+ n = collect_with_callback(genarg);
collecting = 0;
}
@@ -1378,6 +1432,15 @@ PyInit_gc(void)
if (PyModule_AddObject(m, "garbage", garbage) < 0)
return NULL;
+ if (callbacks == NULL) {
+ callbacks = PyList_New(0);
+ if (callbacks == NULL)
+ return NULL;
+ }
+ Py_INCREF(callbacks);
+ if (PyModule_AddObject(m, "callbacks", callbacks) < 0)
+ return NULL;
+
/* Importing can't be done in collect() because collect()
* can be called via PyGC_Collect() in Py_Finalize().
* This wouldn't be a problem, except that <initialized> is
@@ -1410,7 +1473,7 @@ PyGC_Collect(void)
n = 0; /* already collecting, don't do anything */
else {
collecting = 1;
- n = collect(NUM_GENERATIONS - 1);
+ n = collect_with_callback(NUM_GENERATIONS - 1);
collecting = 0;
}
@@ -1447,6 +1510,7 @@ _PyGC_Fini(void)
Py_XDECREF(bytes);
}
}
+ Py_CLEAR(callbacks);
}
/* for debugging */
@@ -1470,13 +1534,6 @@ PyObject_GC_Track(void *op)
_PyObject_GC_TRACK(op);
}
-/* for binary compatibility with 2.2 */
-void
-_PyObject_GC_Track(PyObject *op)
-{
- PyObject_GC_Track(op);
-}
-
void
PyObject_GC_UnTrack(void *op)
{
@@ -1487,13 +1544,6 @@ PyObject_GC_UnTrack(void *op)
_PyObject_GC_UNTRACK(op);
}
-/* for binary compatibility with 2.2 */
-void
-_PyObject_GC_UnTrack(PyObject *op)
-{
- PyObject_GC_UnTrack(op);
-}
-
PyObject *
_PyObject_GC_Malloc(size_t basicsize)
{
diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c
index 7069b6e202..0971a64fcc 100644
--- a/Modules/getbuildinfo.c
+++ b/Modules/getbuildinfo.c
@@ -20,14 +20,6 @@
#endif
#endif
-/* on unix, SVNVERSION is passed on the command line.
- * on Windows, the string is interpolated using
- * subwcrev.exe
- */
-#ifndef SVNVERSION
-#define SVNVERSION "$WCRANGE$$WCMODS?M:$"
-#endif
-
/* XXX Only unix build process has been tested */
#ifndef HGVERSION
#define HGVERSION ""
@@ -57,16 +49,6 @@ Py_GetBuildInfo(void)
}
const char *
-_Py_svnversion(void)
-{
- /* the following string can be modified by subwcrev.exe */
- static const char svnversion[] = SVNVERSION;
- if (svnversion[0] != '$')
- return svnversion; /* it was interpolated, or passed on command line */
- return "Unversioned directory";
-}
-
-const char *
_Py_hgversion(void)
{
return HGVERSION;
diff --git a/Modules/getpath.c b/Modules/getpath.c
index b7f9573f69..ff14fdd6cd 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -260,6 +260,59 @@ absolutize(wchar_t *path)
wcscpy(path, buffer);
}
+/* search for a prefix value in an environment file. If found, copy it
+ to the provided buffer, which is expected to be no more than MAXPATHLEN
+ bytes long.
+*/
+
+static int
+find_env_config_value(FILE * env_file, const wchar_t * key, wchar_t * value)
+{
+ int result = 0; /* meaning not found */
+ char buffer[MAXPATHLEN*2+1]; /* allow extra for key, '=', etc. */
+
+ fseek(env_file, 0, SEEK_SET);
+ while (!feof(env_file)) {
+ char * p = fgets(buffer, MAXPATHLEN*2, env_file);
+ wchar_t tmpbuffer[MAXPATHLEN*2+1];
+ PyObject * decoded;
+ int n;
+
+ if (p == NULL)
+ break;
+ n = strlen(p);
+ if (p[n - 1] != '\n') {
+ /* line has overflowed - bail */
+ break;
+ }
+ if (p[0] == '#') /* Comment - skip */
+ continue;
+ decoded = PyUnicode_DecodeUTF8(buffer, n, "surrogateescape");
+ if (decoded != NULL) {
+ Py_ssize_t k;
+ wchar_t * state;
+ k = PyUnicode_AsWideChar(decoded,
+ tmpbuffer, MAXPATHLEN * 2);
+ Py_DECREF(decoded);
+ if (k >= 0) {
+ wchar_t * tok = wcstok(tmpbuffer, L" \t\r\n", &state);
+ if ((tok != NULL) && !wcscmp(tok, key)) {
+ tok = wcstok(NULL, L" \t", &state);
+ if ((tok != NULL) && !wcscmp(tok, L"=")) {
+ tok = wcstok(NULL, L"\r\n", &state);
+ if (tok != NULL) {
+ wcsncpy(value, tok, MAXPATHLEN);
+ result = 1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ return result;
+}
+
/* search_for_prefix requires that argv0_path be no more than MAXPATHLEN
bytes long.
*/
@@ -273,6 +326,7 @@ search_for_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_prefix)
if (home) {
wchar_t *delim;
wcsncpy(prefix, home, MAXPATHLEN);
+ prefix[MAXPATHLEN] = L'\0';
delim = wcschr(prefix, DELIM);
if (delim)
*delim = L'\0';
@@ -282,13 +336,15 @@ search_for_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_prefix)
}
/* Check to see if argv[0] is in the build directory */
- wcscpy(prefix, argv0_path);
+ wcsncpy(prefix, argv0_path, MAXPATHLEN);
+ prefix[MAXPATHLEN] = L'\0';
joinpath(prefix, L"Modules/Setup");
if (isfile(prefix)) {
/* Check VPATH to see if argv0_path is in the build directory. */
vpath = _Py_char2wchar(VPATH, NULL);
if (vpath != NULL) {
- wcscpy(prefix, argv0_path);
+ wcsncpy(prefix, argv0_path, MAXPATHLEN);
+ prefix[MAXPATHLEN] = L'\0';
joinpath(prefix, vpath);
PyMem_Free(vpath);
joinpath(prefix, L"Lib");
@@ -312,6 +368,7 @@ search_for_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_prefix)
/* Look at configure's PREFIX */
wcsncpy(prefix, _prefix, MAXPATHLEN);
+ prefix[MAXPATHLEN] = L'\0';
joinpath(prefix, lib_python);
joinpath(prefix, LANDMARK);
if (ismodule(prefix))
@@ -338,6 +395,7 @@ search_for_exec_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_exec_prefix
wcsncpy(exec_prefix, delim+1, MAXPATHLEN);
else
wcsncpy(exec_prefix, home, MAXPATHLEN);
+ exec_prefix[MAXPATHLEN] = L'\0';
joinpath(exec_prefix, lib_python);
joinpath(exec_prefix, L"lib-dynload");
return 1;
@@ -346,7 +404,8 @@ search_for_exec_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_exec_prefix
/* Check to see if argv[0] is in the build directory. "pybuilddir.txt"
is written by setup.py and contains the relative path to the location
of shared library modules. */
- wcscpy(exec_prefix, argv0_path);
+ wcsncpy(exec_prefix, argv0_path, MAXPATHLEN);
+ exec_prefix[MAXPATHLEN] = L'\0';
joinpath(exec_prefix, L"pybuilddir.txt");
if (isfile(exec_prefix)) {
FILE *f = _Py_wfopen(exec_prefix, L"rb");
@@ -367,7 +426,8 @@ search_for_exec_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_exec_prefix
Py_DECREF(decoded);
if (k >= 0) {
rel_builddir_path[k] = L'\0';
- wcscpy(exec_prefix, argv0_path);
+ wcsncpy(exec_prefix, argv0_path, MAXPATHLEN);
+ exec_prefix[MAXPATHLEN] = L'\0';
joinpath(exec_prefix, rel_builddir_path);
return -1;
}
@@ -389,6 +449,7 @@ search_for_exec_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_exec_prefix
/* Look at configure's EXEC_PREFIX */
wcsncpy(exec_prefix, _exec_prefix, MAXPATHLEN);
+ exec_prefix[MAXPATHLEN] = L'\0';
joinpath(exec_prefix, lib_python);
joinpath(exec_prefix, L"lib-dynload");
if (isdir(exec_prefix))
@@ -406,7 +467,7 @@ calculate_path(void)
static wchar_t delimiter[2] = {DELIM, '\0'};
static wchar_t separator[2] = {SEP, '\0'};
char *_rtpypath = Py_GETENV("PYTHONPATH"); /* XXX use wide version on Windows */
- wchar_t rtpypath[MAXPATHLEN+1];
+ wchar_t *rtpypath = NULL;
wchar_t *home = Py_GetPythonHome();
char *_path = getenv("PATH");
wchar_t *path_buffer = NULL;
@@ -421,6 +482,7 @@ calculate_path(void)
wchar_t *defpath;
#ifdef WITH_NEXT_FRAMEWORK
NSModule pythonModule;
+ const char* modPath;
#endif
#ifdef __APPLE__
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
@@ -515,8 +577,8 @@ calculate_path(void)
*/
pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
/* Use dylib functions to find out where the framework was loaded from */
- buf = (wchar_t *)NSLibraryNameForModule(pythonModule);
- if (buf != NULL) {
+ modPath = NSLibraryNameForModule(pythonModule);
+ if (modPath != NULL) {
/* We're in a framework. */
/* See if we might be in the build directory. The framework in the
** build directory is incomplete, it only has the .dylib and a few
@@ -525,7 +587,12 @@ calculate_path(void)
** be running the interpreter in the build directory, so we use the
** build-directory-specific logic to find Lib and such.
*/
- wcsncpy(argv0_path, buf, MAXPATHLEN);
+ wchar_t* wbuf = _Py_char2wchar(modPath, NULL);
+ if (wbuf == NULL) {
+ Py_FatalError("Cannot decode framework location");
+ }
+
+ wcsncpy(argv0_path, wbuf, MAXPATHLEN);
reduce(argv0_path);
joinpath(argv0_path, lib_python);
joinpath(argv0_path, LANDMARK);
@@ -536,8 +603,9 @@ calculate_path(void)
}
else {
/* Use the location of the library as the progpath */
- wcsncpy(argv0_path, buf, MAXPATHLEN);
+ wcsncpy(argv0_path, wbuf, MAXPATHLEN);
}
+ PyMem_Free(wbuf);
}
#endif
@@ -565,6 +633,40 @@ calculate_path(void)
MAXPATHLEN bytes long.
*/
+ /* Search for an environment configuration file, first in the
+ executable's directory and then in the parent directory.
+ If found, open it for use when searching for prefixes.
+ */
+
+ {
+ wchar_t tmpbuffer[MAXPATHLEN+1];
+ wchar_t *env_cfg = L"pyvenv.cfg";
+ FILE * env_file = NULL;
+
+ wcscpy(tmpbuffer, argv0_path);
+
+ joinpath(tmpbuffer, env_cfg);
+ env_file = _Py_wfopen(tmpbuffer, L"r");
+ if (env_file == NULL) {
+ errno = 0;
+ reduce(tmpbuffer);
+ reduce(tmpbuffer);
+ joinpath(tmpbuffer, env_cfg);
+ env_file = _Py_wfopen(tmpbuffer, L"r");
+ if (env_file == NULL) {
+ errno = 0;
+ }
+ }
+ if (env_file != NULL) {
+ /* Look for a 'home' variable and set argv0_path to it, if found */
+ if (find_env_config_value(env_file, L"home", tmpbuffer)) {
+ wcscpy(argv0_path, tmpbuffer);
+ }
+ fclose(env_file);
+ env_file = NULL;
+ }
+ }
+
if (!(pfound = search_for_prefix(argv0_path, home, _prefix))) {
if (!Py_FrozenFlag)
fprintf(stderr,
@@ -606,12 +708,12 @@ calculate_path(void)
bufsz = 0;
if (_rtpypath) {
- size_t s = mbstowcs(rtpypath, _rtpypath, sizeof(rtpypath)/sizeof(wchar_t));
- if (s == (size_t)-1 || s >=sizeof(rtpypath))
- /* XXX deal with errors more gracefully */
+ size_t rtpypath_len;
+ rtpypath = _Py_char2wchar(_rtpypath, &rtpypath_len);
+ if (rtpypath != NULL)
+ bufsz += rtpypath_len + 1;
+ else
_rtpypath = NULL;
- if (_rtpypath)
- bufsz += wcslen(rtpypath) + 1;
}
defpath = _pythonpath;
@@ -645,7 +747,7 @@ calculate_path(void)
}
else {
/* Run-time value of $PYTHONPATH goes first */
- if (_rtpypath) {
+ if (rtpypath) {
wcscpy(buf, rtpypath);
wcscat(buf, delimiter);
}
@@ -719,6 +821,8 @@ calculate_path(void)
PyMem_Free(_pythonpath);
PyMem_Free(_prefix);
PyMem_Free(_exec_prefix);
+ if (rtpypath != NULL)
+ PyMem_Free(rtpypath);
}
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index f85cdd46fc..042cf0554a 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -10,7 +10,7 @@ static PyStructSequence_Field struct_group_type_fields[] = {
{"gr_name", "group name"},
{"gr_passwd", "password"},
{"gr_gid", "group id"},
- {"gr_mem", "group memebers"},
+ {"gr_mem", "group members"},
{0}
};
diff --git a/Modules/hashlib.h b/Modules/hashlib.h
index db39cea7aa..459914605f 100644
--- a/Modules/hashlib.h
+++ b/Modules/hashlib.h
@@ -2,7 +2,7 @@
/*
* Given a PyObject* obj, fill in the Py_buffer* viewp with the result
- * of PyObject_GetBuffer. Sets and exception and issues a return NULL
+ * of PyObject_GetBuffer. Sets an exception and issues a return NULL
* on any errors.
*/
#define GET_BUFFER_VIEW_OR_ERROUT(obj, viewp) do { \
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 52a38a55df..0123181612 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -4,7 +4,7 @@
/* Itertools module written and maintained
by Raymond D. Hettinger <python@rcn.com>
- Copyright (c) 2003 Python Software Foundation.
+ Copyright (c) 2003-2013 Python Software Foundation.
All rights reserved.
*/
@@ -134,6 +134,53 @@ groupby_next(groupbyobject *gbo)
return r;
}
+static PyObject *
+groupby_reduce(groupbyobject *lz)
+{
+ /* reduce as a 'new' call with an optional 'setstate' if groupby
+ * has started
+ */
+ PyObject *value;
+ if (lz->tgtkey && lz->currkey && lz->currvalue)
+ value = Py_BuildValue("O(OO)(OOO)", Py_TYPE(lz),
+ lz->it, lz->keyfunc, lz->currkey, lz->currvalue, lz->tgtkey);
+ else
+ value = Py_BuildValue("O(OO)", Py_TYPE(lz),
+ lz->it, lz->keyfunc);
+
+ return value;
+}
+
+PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
+
+static PyObject *
+groupby_setstate(groupbyobject *lz, PyObject *state)
+{
+ PyObject *currkey, *currvalue, *tgtkey;
+ if (!PyArg_ParseTuple(state, "OOO", &currkey, &currvalue, &tgtkey))
+ return NULL;
+ Py_CLEAR(lz->currkey);
+ lz->currkey = currkey;
+ Py_INCREF(lz->currkey);
+ Py_CLEAR(lz->currvalue);
+ lz->currvalue = currvalue;
+ Py_INCREF(lz->currvalue);
+ Py_CLEAR(lz->tgtkey);
+ lz->tgtkey = tgtkey;
+ Py_INCREF(lz->tgtkey);
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
+
+static PyMethodDef groupby_methods[] = {
+ {"__reduce__", (PyCFunction)groupby_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)groupby_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(groupby_doc,
"groupby(iterable[, keyfunc]) -> create an iterator which returns\n\
(key, sub-iterator) grouped by each value of key(value).\n");
@@ -168,7 +215,7 @@ static PyTypeObject groupby_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)groupby_next, /* tp_iternext */
- 0, /* tp_methods */
+ groupby_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -194,6 +241,17 @@ typedef struct {
static PyTypeObject _grouper_type;
static PyObject *
+_grouper_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ PyObject *parent, *tgtkey;
+
+ if (!PyArg_ParseTuple(args, "O!O", &groupby_type, &parent, &tgtkey))
+ return NULL;
+
+ return _grouper_create((groupbyobject*) parent, tgtkey);
+}
+
+static PyObject *
_grouper_create(groupbyobject *parent, PyObject *tgtkey)
{
_grouperobject *igo;
@@ -269,6 +327,20 @@ _grouper_next(_grouperobject *igo)
return r;
}
+static PyObject *
+_grouper_reduce(_grouperobject *lz)
+{
+ return Py_BuildValue("O(OO)", Py_TYPE(lz),
+ lz->parent, lz->tgtkey);
+}
+
+static PyMethodDef _grouper_methods[] = {
+ {"__reduce__", (PyCFunction)_grouper_reduce, METH_NOARGS,
+ reduce_doc},
+ {NULL, NULL} /* sentinel */
+};
+
+
static PyTypeObject _grouper_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"itertools._grouper", /* tp_name */
@@ -298,7 +370,7 @@ static PyTypeObject _grouper_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)_grouper_next, /* tp_iternext */
- 0, /* tp_methods */
+ _grouper_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -308,7 +380,7 @@ static PyTypeObject _grouper_type = {
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
- 0, /* tp_new */
+ _grouper_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
};
@@ -344,7 +416,7 @@ typedef struct {
static PyTypeObject teedataobject_type;
static PyObject *
-teedataobject_new(PyObject *it)
+teedataobject_newinternal(PyObject *it)
{
teedataobject *tdo;
@@ -364,7 +436,7 @@ static PyObject *
teedataobject_jumplink(teedataobject *tdo)
{
if (tdo->nextlink == NULL)
- tdo->nextlink = teedataobject_new(tdo->it);
+ tdo->nextlink = teedataobject_newinternal(tdo->it);
Py_XINCREF(tdo->nextlink);
return tdo->nextlink;
}
@@ -437,11 +509,81 @@ teedataobject_dealloc(teedataobject *tdo)
PyObject_GC_Del(tdo);
}
+static PyObject *
+teedataobject_reduce(teedataobject *tdo)
+{
+ int i;
+ /* create a temporary list of already iterated values */
+ PyObject *values = PyList_New(tdo->numread);
+ if (!values)
+ return NULL;
+ for (i=0 ; i<tdo->numread ; i++) {
+ Py_INCREF(tdo->values[i]);
+ PyList_SET_ITEM(values, i, tdo->values[i]);
+ }
+ return Py_BuildValue("O(ONO)", Py_TYPE(tdo), tdo->it,
+ values,
+ tdo->nextlink ? tdo->nextlink : Py_None);
+}
+
+static PyTypeObject teedataobject_type;
+
+static PyObject *
+teedataobject_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+{
+ teedataobject *tdo;
+ PyObject *it, *values, *next;
+ Py_ssize_t i, len;
+
+ assert(type == &teedataobject_type);
+ if (!PyArg_ParseTuple(args, "OO!O", &it, &PyList_Type, &values, &next))
+ return NULL;
+
+ tdo = (teedataobject *)teedataobject_newinternal(it);
+ if (!tdo)
+ return NULL;
+
+ len = PyList_GET_SIZE(values);
+ if (len > LINKCELLS)
+ goto err;
+ for (i=0; i<len; i++) {
+ tdo->values[i] = PyList_GET_ITEM(values, i);
+ Py_INCREF(tdo->values[i]);
+ }
+ /* len <= LINKCELLS < INT_MAX */
+ tdo->numread = Py_SAFE_DOWNCAST(len, Py_ssize_t, int);
+
+ if (len == LINKCELLS) {
+ if (next != Py_None) {
+ if (Py_TYPE(next) != &teedataobject_type)
+ goto err;
+ assert(tdo->nextlink == NULL);
+ Py_INCREF(next);
+ tdo->nextlink = next;
+ }
+ } else {
+ if (next != Py_None)
+ goto err; /* shouldn't have a next if we are not full */
+ }
+ return (PyObject*)tdo;
+
+err:
+ Py_XDECREF(tdo);
+ PyErr_SetString(PyExc_ValueError, "Invalid arguments");
+ return NULL;
+}
+
+static PyMethodDef teedataobject_methods[] = {
+ {"__reduce__", (PyCFunction)teedataobject_reduce, METH_NOARGS,
+ reduce_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(teedataobject_doc, "Data container common to multiple tee objects.");
static PyTypeObject teedataobject_type = {
PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */
- "itertools.tee_dataobject", /* tp_name */
+ "itertools._tee_dataobject", /* tp_name */
sizeof(teedataobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
@@ -468,7 +610,7 @@ static PyTypeObject teedataobject_type = {
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
- 0, /* tp_methods */
+ teedataobject_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -478,7 +620,7 @@ static PyTypeObject teedataobject_type = {
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
- 0, /* tp_new */
+ teedataobject_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
};
@@ -547,7 +689,7 @@ tee_fromiterable(PyObject *iterable)
to = PyObject_GC_New(teeobject, &tee_type);
if (to == NULL)
goto done;
- to->dataobj = (teedataobject *)teedataobject_new(it);
+ to->dataobj = (teedataobject *)teedataobject_newinternal(it);
if (!to->dataobj) {
PyObject_GC_Del(to);
to = NULL;
@@ -567,7 +709,7 @@ tee_new(PyTypeObject *type, PyObject *args, PyObject *kw)
{
PyObject *iterable;
- if (!PyArg_UnpackTuple(args, "tee", 1, 1, &iterable))
+ if (!PyArg_UnpackTuple(args, "_tee", 1, 1, &iterable))
return NULL;
return tee_fromiterable(iterable);
}
@@ -589,17 +731,43 @@ tee_dealloc(teeobject *to)
PyObject_GC_Del(to);
}
+static PyObject *
+tee_reduce(teeobject *to)
+{
+ return Py_BuildValue("O(())(Oi)", Py_TYPE(to), to->dataobj, to->index);
+}
+
+static PyObject *
+tee_setstate(teeobject *to, PyObject *state)
+{
+ teedataobject *tdo;
+ int index;
+ if (!PyArg_ParseTuple(state, "O!i", &teedataobject_type, &tdo, &index))
+ return NULL;
+ if (index < 0 || index > LINKCELLS) {
+ PyErr_SetString(PyExc_ValueError, "Index out of range");
+ return NULL;
+ }
+ Py_CLEAR(to->dataobj);
+ to->dataobj = tdo;
+ Py_INCREF(to->dataobj);
+ to->index = index;
+ Py_RETURN_NONE;
+}
+
PyDoc_STRVAR(teeobject_doc,
"Iterator wrapped to make it copyable");
static PyMethodDef tee_methods[] = {
{"__copy__", (PyCFunction)tee_copy, METH_NOARGS, teecopy_doc},
+ {"__reduce__", (PyCFunction)tee_reduce, METH_NOARGS, reduce_doc},
+ {"__setstate__", (PyCFunction)tee_setstate, METH_O, setstate_doc},
{NULL, NULL} /* sentinel */
};
static PyTypeObject tee_type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "itertools.tee", /* tp_name */
+ "itertools._tee", /* tp_name */
sizeof(teeobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
@@ -645,6 +813,7 @@ tee(PyObject *self, PyObject *args)
{
Py_ssize_t i, n=2;
PyObject *it, *iterable, *copyable, *result;
+ _Py_IDENTIFIER(__copy__);
if (!PyArg_ParseTuple(args, "O|n", &iterable, &n))
return NULL;
@@ -662,7 +831,7 @@ tee(PyObject *self, PyObject *args)
Py_DECREF(result);
return NULL;
}
- if (!PyObject_HasAttrString(it, "__copy__")) {
+ if (!_PyObject_HasAttrId(it, &PyId___copy__)) {
copyable = tee_fromiterable(it);
Py_DECREF(it);
if (copyable == NULL) {
@@ -673,7 +842,8 @@ tee(PyObject *self, PyObject *args)
copyable = it;
PyTuple_SET_ITEM(result, 0, copyable);
for (i=1 ; i<n ; i++) {
- copyable = PyObject_CallMethod(copyable, "__copy__", NULL);
+
+ copyable = _PyObject_CallMethodId(copyable, &PyId___copy__, NULL);
if (copyable == NULL) {
Py_DECREF(result);
return NULL;
@@ -788,6 +958,38 @@ cycle_next(cycleobject *lz)
}
}
+static PyObject *
+cycle_reduce(cycleobject *lz)
+{
+ /* Create a new cycle with the iterator tuple, then set
+ * the saved state on it.
+ */
+ return Py_BuildValue("O(O)(Oi)", Py_TYPE(lz),
+ lz->it, lz->saved, lz->firstpass);
+ }
+
+static PyObject *
+cycle_setstate(cycleobject *lz, PyObject *state)
+{
+ PyObject *saved=NULL;
+ int firstpass;
+ if (!PyArg_ParseTuple(state, "Oi", &saved, &firstpass))
+ return NULL;
+ Py_CLEAR(lz->saved);
+ lz->saved = saved;
+ Py_XINCREF(lz->saved);
+ lz->firstpass = firstpass != 0;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef cycle_methods[] = {
+ {"__reduce__", (PyCFunction)cycle_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)cycle_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(cycle_doc,
"cycle(iterable) --> cycle object\n\
\n\
@@ -824,7 +1026,7 @@ static PyTypeObject cycle_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)cycle_next, /* tp_iternext */
- 0, /* tp_methods */
+ cycle_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -932,6 +1134,31 @@ dropwhile_next(dropwhileobject *lz)
}
}
+static PyObject *
+dropwhile_reduce(dropwhileobject *lz)
+{
+ return Py_BuildValue("O(OO)l", Py_TYPE(lz),
+ lz->func, lz->it, lz->start);
+}
+
+static PyObject *
+dropwhile_setstate(dropwhileobject *lz, PyObject *state)
+{
+ int start = PyObject_IsTrue(state);
+ if (start < 0)
+ return NULL;
+ lz->start = start;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef dropwhile_methods[] = {
+ {"__reduce__", (PyCFunction)dropwhile_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)dropwhile_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(dropwhile_doc,
"dropwhile(predicate, iterable) --> dropwhile object\n\
\n\
@@ -968,7 +1195,7 @@ static PyTypeObject dropwhile_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)dropwhile_next, /* tp_iternext */
- 0, /* tp_methods */
+ dropwhile_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -1064,7 +1291,7 @@ takewhile_next(takewhileobject *lz)
}
ok = PyObject_IsTrue(good);
Py_DECREF(good);
- if (ok > 0)
+ if (ok == 1)
return item;
Py_DECREF(item);
if (ok == 0)
@@ -1072,6 +1299,30 @@ takewhile_next(takewhileobject *lz)
return NULL;
}
+static PyObject *
+takewhile_reduce(takewhileobject *lz)
+{
+ return Py_BuildValue("O(OO)l", Py_TYPE(lz),
+ lz->func, lz->it, lz->stop);
+}
+
+static PyObject *
+takewhile_reduce_setstate(takewhileobject *lz, PyObject *state)
+{
+ int stop = PyObject_IsTrue(state);
+ if (stop < 0)
+ return NULL;
+ lz->stop = stop;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef takewhile_reduce_methods[] = {
+ {"__reduce__", (PyCFunction)takewhile_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)takewhile_reduce_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
PyDoc_STRVAR(takewhile_doc,
"takewhile(predicate, iterable) --> takewhile object\n\
\n\
@@ -1108,7 +1359,7 @@ static PyTypeObject takewhile_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)takewhile_next, /* tp_iternext */
- 0, /* tp_methods */
+ takewhile_reduce_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -1264,8 +1515,47 @@ islice_next(isliceobject *lz)
return item;
}
+static PyObject *
+islice_reduce(isliceobject *lz)
+{
+ /* When unpickled, generate a new object with the same bounds,
+ * then 'setstate' with the next and count
+ */
+ PyObject *stop;
+ if (lz->stop == -1) {
+ stop = Py_None;
+ Py_INCREF(stop);
+ } else {
+ stop = PyLong_FromSsize_t(lz->stop);
+ if (stop == NULL)
+ return NULL;
+ }
+ return Py_BuildValue("O(OnNn)n", Py_TYPE(lz),
+ lz->it, lz->next, stop, lz->step,
+ lz->cnt);
+}
+
+static PyObject *
+islice_setstate(isliceobject *lz, PyObject *state)
+{
+ Py_ssize_t cnt = PyLong_AsSsize_t(state);
+ if (cnt == -1 && PyErr_Occurred())
+ return NULL;
+ lz->cnt = cnt;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef islice_methods[] = {
+ {"__reduce__", (PyCFunction)islice_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)islice_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(islice_doc,
-"islice(iterable, [start,] stop [, step]) --> islice object\n\
+"islice(iterable, stop) --> islice object\n\
+islice(iterable, start, stop[, step]) --> islice object\n\
\n\
Return an iterator whose next() method returns selected values from an\n\
iterable. If start is specified, will skip all preceding elements;\n\
@@ -1304,7 +1594,7 @@ static PyTypeObject islice_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)islice_next, /* tp_iternext */
- 0, /* tp_methods */
+ islice_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -1399,6 +1689,19 @@ starmap_next(starmapobject *lz)
return result;
}
+static PyObject *
+starmap_reduce(starmapobject *lz)
+{
+ /* Just pickle the iterator */
+ return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
+}
+
+static PyMethodDef starmap_methods[] = {
+ {"__reduce__", (PyCFunction)starmap_reduce, METH_NOARGS,
+ reduce_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(starmap_doc,
"starmap(function, sequence) --> starmap object\n\
\n\
@@ -1435,7 +1738,7 @@ static PyTypeObject starmap_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)starmap_next, /* tp_iternext */
- 0, /* tp_methods */
+ starmap_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -1554,6 +1857,41 @@ chain_next(chainobject *lz)
return chain_next(lz); /* recurse and use next active */
}
+static PyObject *
+chain_reduce(chainobject *lz)
+{
+ if (lz->source) {
+ /* we can't pickle function objects (itertools.from_iterable) so
+ * we must use setstate to replace the iterable. One day we
+ * will fix pickling of functions
+ */
+ if (lz->active) {
+ return Py_BuildValue("O()(OO)", Py_TYPE(lz), lz->source, lz->active);
+ } else {
+ return Py_BuildValue("O()(O)", Py_TYPE(lz), lz->source);
+ }
+ } else {
+ return Py_BuildValue("O()", Py_TYPE(lz)); /* exhausted */
+ }
+ return NULL;
+}
+
+static PyObject *
+chain_setstate(chainobject *lz, PyObject *state)
+{
+ PyObject *source, *active=NULL;
+ if (! PyArg_ParseTuple(state, "O|O", &source, &active))
+ return NULL;
+
+ Py_CLEAR(lz->source);
+ lz->source = source;
+ Py_INCREF(lz->source);
+ Py_CLEAR(lz->active);
+ lz->active = active;
+ Py_XINCREF(lz->active);
+ Py_RETURN_NONE;
+}
+
PyDoc_STRVAR(chain_doc,
"chain(*iterables) --> chain object\n\
\n\
@@ -1570,6 +1908,10 @@ that evaluates lazily.");
static PyMethodDef chain_methods[] = {
{"from_iterable", (PyCFunction) chain_new_from_iterable, METH_O | METH_CLASS,
chain_from_iterable_doc},
+ {"__reduce__", (PyCFunction)chain_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)chain_setstate, METH_O,
+ setstate_doc},
{NULL, NULL} /* sentinel */
};
@@ -1810,8 +2152,85 @@ empty:
return NULL;
}
+static PyObject *
+product_reduce(productobject *lz)
+{
+ if (lz->stopped) {
+ return Py_BuildValue("O(())", Py_TYPE(lz));
+ } else if (lz->result == NULL) {
+ return Py_BuildValue("OO", Py_TYPE(lz), lz->pools);
+ } else {
+ PyObject *indices;
+ Py_ssize_t n, i;
+
+ /* we must pickle the indices use them for setstate, and
+ * additionally indicate that the iterator has started
+ */
+ n = PyTuple_GET_SIZE(lz->pools);
+ indices = PyTuple_New(n);
+ if (indices == NULL)
+ return NULL;
+ for (i=0; i<n; i++){
+ PyObject* index = PyLong_FromSsize_t(lz->indices[i]);
+ if (!index) {
+ Py_DECREF(indices);
+ return NULL;
+ }
+ PyTuple_SET_ITEM(indices, i, index);
+ }
+ return Py_BuildValue("OON", Py_TYPE(lz), lz->pools, indices);
+ }
+}
+
+static PyObject *
+product_setstate(productobject *lz, PyObject *state)
+{
+ PyObject *result;
+ Py_ssize_t n, i;
+
+ n = PyTuple_GET_SIZE(lz->pools);
+ if (!PyTuple_Check(state) || PyTuple_GET_SIZE(state) != n) {
+ PyErr_SetString(PyExc_ValueError, "invalid arguments");
+ return NULL;
+ }
+ for (i=0; i<n; i++)
+ {
+ PyObject* indexObject = PyTuple_GET_ITEM(state, i);
+ Py_ssize_t index = PyLong_AsSsize_t(indexObject);
+ if (index < 0 && PyErr_Occurred())
+ return NULL; /* not an integer */
+ /* clamp the index */
+ if (index < 0)
+ index = 0;
+ else if (index > n-1)
+ index = n-1;
+ lz->indices[i] = index;
+ }
+
+ result = PyTuple_New(n);
+ if (!result)
+ return NULL;
+ for (i=0; i<n; i++) {
+ PyObject *pool = PyTuple_GET_ITEM(lz->pools, i);
+ PyObject *element = PyTuple_GET_ITEM(pool, lz->indices[i]);
+ Py_INCREF(element);
+ PyTuple_SET_ITEM(result, i, element);
+ }
+ Py_CLEAR(lz->result);
+ lz->result = result;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef product_methods[] = {
+ {"__reduce__", (PyCFunction)product_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)product_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(product_doc,
-"product(*iterables) --> product object\n\
+"product(*iterables, repeat=1) --> product object\n\
\n\
Cartesian product of input iterables. Equivalent to nested for-loops.\n\n\
For example, product(A, B) returns the same as: ((x,y) for x in A for y in B).\n\
@@ -1854,7 +2273,7 @@ static PyTypeObject product_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)product_next, /* tp_iternext */
- 0, /* tp_methods */
+ product_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2041,6 +2460,86 @@ empty:
return NULL;
}
+static PyObject *
+combinations_reduce(combinationsobject *lz)
+{
+ if (lz->result == NULL) {
+ return Py_BuildValue("O(On)", Py_TYPE(lz), lz->pool, lz->r);
+ } else if (lz->stopped) {
+ return Py_BuildValue("O(()n)", Py_TYPE(lz), lz->r);
+ } else {
+ PyObject *indices;
+ Py_ssize_t i;
+
+ /* we must pickle the indices and use them for setstate */
+ indices = PyTuple_New(lz->r);
+ if (!indices)
+ return NULL;
+ for (i=0; i<lz->r; i++)
+ {
+ PyObject* index = PyLong_FromSsize_t(lz->indices[i]);
+ if (!index) {
+ Py_DECREF(indices);
+ return NULL;
+ }
+ PyTuple_SET_ITEM(indices, i, index);
+ }
+
+ return Py_BuildValue("O(On)N", Py_TYPE(lz), lz->pool, lz->r, indices);
+ }
+}
+
+static PyObject *
+combinations_setstate(combinationsobject *lz, PyObject *state)
+{
+ PyObject *result;
+ Py_ssize_t i;
+ Py_ssize_t n = PyTuple_GET_SIZE(lz->pool);
+
+ if (!PyTuple_Check(state) || PyTuple_GET_SIZE(state) != lz->r)
+ {
+ PyErr_SetString(PyExc_ValueError, "invalid arguments");
+ return NULL;
+ }
+
+ for (i=0; i<lz->r; i++)
+ {
+ Py_ssize_t max;
+ PyObject* indexObject = PyTuple_GET_ITEM(state, i);
+ Py_ssize_t index = PyLong_AsSsize_t(indexObject);
+ if (index == -1 && PyErr_Occurred())
+ return NULL; /* not an integer */
+ max = i + n - lz->r;
+ /* clamp the index (beware of negative max) */
+ if (index > max)
+ index = max;
+ if (index < 0)
+ index = 0;
+ lz->indices[i] = index;
+ }
+
+ result = PyTuple_New(lz->r);
+ if (result == NULL)
+ return NULL;
+ for (i=0; i<lz->r; i++) {
+ PyObject *element = PyTuple_GET_ITEM(lz->pool, lz->indices[i]);
+ Py_INCREF(element);
+ PyTuple_SET_ITEM(result, i, element);
+ }
+
+ Py_CLEAR(lz->result);
+ lz->result = result;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef combinations_methods[] = {
+ {"__reduce__", (PyCFunction)combinations_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)combinations_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(combinations_doc,
"combinations(iterable, r) --> combinations object\n\
\n\
@@ -2049,11 +2548,11 @@ combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)");
static PyTypeObject combinations_type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "itertools.combinations", /* tp_name */
+ "itertools.combinations", /* tp_name */
sizeof(combinationsobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
- (destructor)combinations_dealloc, /* tp_dealloc */
+ (destructor)combinations_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
@@ -2070,14 +2569,14 @@ static PyTypeObject combinations_type = {
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_BASETYPE, /* tp_flags */
- combinations_doc, /* tp_doc */
- (traverseproc)combinations_traverse, /* tp_traverse */
+ combinations_doc, /* tp_doc */
+ (traverseproc)combinations_traverse,/* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
- (iternextfunc)combinations_next, /* tp_iternext */
- 0, /* tp_methods */
+ (iternextfunc)combinations_next, /* tp_iternext */
+ combinations_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2087,7 +2586,7 @@ static PyTypeObject combinations_type = {
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
- combinations_new, /* tp_new */
+ combinations_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
};
@@ -2214,20 +2713,20 @@ cwr_next(cwrobject *co)
PyObject *result = co->result;
Py_ssize_t n = PyTuple_GET_SIZE(pool);
Py_ssize_t r = co->r;
- Py_ssize_t i, j, index;
+ Py_ssize_t i, index;
if (co->stopped)
return NULL;
if (result == NULL) {
- /* On the first pass, initialize result tuple using the indices */
+ /* On the first pass, initialize result tuple with pool[0] */
result = PyTuple_New(r);
if (result == NULL)
goto empty;
co->result = result;
+ elem = PyTuple_GET_ITEM(pool, 0);
for (i=0; i<r ; i++) {
- index = indices[i];
- elem = PyTuple_GET_ITEM(pool, index);
+ assert(indices[i] == 0);
Py_INCREF(elem);
PyTuple_SET_ITEM(result, i, elem);
}
@@ -2250,27 +2749,23 @@ cwr_next(cwrobject *co)
empty tuple is a singleton and cached in PyTuple's freelist. */
assert(r == 0 || Py_REFCNT(result) == 1);
- /* Scan indices right-to-left until finding one that is not
- * at its maximum (n-1). */
+ /* Scan indices right-to-left until finding one that is not
+ * at its maximum (n-1). */
for (i=r-1 ; i >= 0 && indices[i] == n-1; i--)
;
/* If i is negative, then the indices are all at
- their maximum value and we're done. */
+ their maximum value and we're done. */
if (i < 0)
goto empty;
/* Increment the current index which we know is not at its
- maximum. Then set all to the right to the same value. */
- indices[i]++;
- for (j=i+1 ; j<r ; j++)
- indices[j] = indices[j-1];
-
- /* Update the result tuple for the new indices
- starting with i, the leftmost index that changed */
+ maximum. Then set all to the right to the same value. */
+ index = indices[i] + 1;
+ assert(index < n);
+ elem = PyTuple_GET_ITEM(pool, index);
for ( ; i<r ; i++) {
- index = indices[i];
- elem = PyTuple_GET_ITEM(pool, index);
+ indices[i] = index;
Py_INCREF(elem);
oldelem = PyTuple_GET_ITEM(result, i);
PyTuple_SET_ITEM(result, i, elem);
@@ -2286,6 +2781,82 @@ empty:
return NULL;
}
+static PyObject *
+cwr_reduce(cwrobject *lz)
+{
+ if (lz->result == NULL) {
+ return Py_BuildValue("O(On)", Py_TYPE(lz), lz->pool, lz->r);
+ } else if (lz->stopped) {
+ return Py_BuildValue("O(()n)", Py_TYPE(lz), lz->r);
+ } else {
+ PyObject *indices;
+ Py_ssize_t i;
+
+ /* we must pickle the indices and use them for setstate */
+ indices = PyTuple_New(lz->r);
+ if (!indices)
+ return NULL;
+ for (i=0; i<lz->r; i++)
+ {
+ PyObject* index = PyLong_FromSsize_t(lz->indices[i]);
+ if (!index) {
+ Py_DECREF(indices);
+ return NULL;
+ }
+ PyTuple_SET_ITEM(indices, i, index);
+ }
+
+ return Py_BuildValue("O(On)N", Py_TYPE(lz), lz->pool, lz->r, indices);
+ }
+}
+
+static PyObject *
+cwr_setstate(cwrobject *lz, PyObject *state)
+{
+ PyObject *result;
+ Py_ssize_t n, i;
+
+ if (!PyTuple_Check(state) || PyTuple_GET_SIZE(state) != lz->r)
+ {
+ PyErr_SetString(PyExc_ValueError, "invalid arguments");
+ return NULL;
+ }
+
+ n = PyTuple_GET_SIZE(lz->pool);
+ for (i=0; i<lz->r; i++)
+ {
+ PyObject* indexObject = PyTuple_GET_ITEM(state, i);
+ Py_ssize_t index = PyLong_AsSsize_t(indexObject);
+ if (index < 0 && PyErr_Occurred())
+ return NULL; /* not an integer */
+ /* clamp the index */
+ if (index < 0)
+ index = 0;
+ else if (index > n-1)
+ index = n-1;
+ lz->indices[i] = index;
+ }
+ result = PyTuple_New(lz->r);
+ if (result == NULL)
+ return NULL;
+ for (i=0; i<lz->r; i++) {
+ PyObject *element = PyTuple_GET_ITEM(lz->pool, lz->indices[i]);
+ Py_INCREF(element);
+ PyTuple_SET_ITEM(result, i, element);
+ }
+ Py_CLEAR(lz->result);
+ lz->result = result;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef cwr_methods[] = {
+ {"__reduce__", (PyCFunction)cwr_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)cwr_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(cwr_doc,
"combinations_with_replacement(iterable, r) --> combinations_with_replacement object\n\
\n\
@@ -2295,11 +2866,11 @@ combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC");
static PyTypeObject cwr_type = {
PyVarObject_HEAD_INIT(NULL, 0)
- "itertools.combinations_with_replacement", /* tp_name */
- sizeof(cwrobject), /* tp_basicsize */
+ "itertools.combinations_with_replacement", /* tp_name */
+ sizeof(cwrobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
- (destructor)cwr_dealloc, /* tp_dealloc */
+ (destructor)cwr_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
@@ -2311,19 +2882,19 @@ static PyTypeObject cwr_type = {
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
- Py_TPFLAGS_BASETYPE, /* tp_flags */
- cwr_doc, /* tp_doc */
- (traverseproc)cwr_traverse, /* tp_traverse */
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+ cwr_doc, /* tp_doc */
+ (traverseproc)cwr_traverse, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
- PyObject_SelfIter, /* tp_iter */
- (iternextfunc)cwr_next, /* tp_iternext */
- 0, /* tp_methods */
+ PyObject_SelfIter, /* tp_iter */
+ (iternextfunc)cwr_next, /* tp_iternext */
+ cwr_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2333,8 +2904,8 @@ static PyTypeObject cwr_type = {
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
- cwr_new, /* tp_new */
- PyObject_GC_Del, /* tp_free */
+ cwr_new, /* tp_new */
+ PyObject_GC_Del, /* tp_free */
};
@@ -2558,6 +3129,115 @@ empty:
return NULL;
}
+static PyObject *
+permutations_reduce(permutationsobject *po)
+{
+ if (po->result == NULL) {
+ return Py_BuildValue("O(On)", Py_TYPE(po), po->pool, po->r);
+ } else if (po->stopped) {
+ return Py_BuildValue("O(()n)", Py_TYPE(po), po->r);
+ } else {
+ PyObject *indices=NULL, *cycles=NULL;
+ Py_ssize_t n, i;
+
+ /* we must pickle the indices and cycles and use them for setstate */
+ n = PyTuple_GET_SIZE(po->pool);
+ indices = PyTuple_New(n);
+ if (indices == NULL)
+ goto err;
+ for (i=0; i<n; i++){
+ PyObject* index = PyLong_FromSsize_t(po->indices[i]);
+ if (!index)
+ goto err;
+ PyTuple_SET_ITEM(indices, i, index);
+ }
+
+ cycles = PyTuple_New(po->r);
+ if (cycles == NULL)
+ goto err;
+ for (i=0; i<po->r; i++)
+ {
+ PyObject* index = PyLong_FromSsize_t(po->cycles[i]);
+ if (!index)
+ goto err;
+ PyTuple_SET_ITEM(cycles, i, index);
+ }
+ return Py_BuildValue("O(On)(NN)", Py_TYPE(po),
+ po->pool, po->r,
+ indices, cycles);
+ err:
+ Py_XDECREF(indices);
+ Py_XDECREF(cycles);
+ return NULL;
+ }
+}
+
+static PyObject *
+permutations_setstate(permutationsobject *po, PyObject *state)
+{
+ PyObject *indices, *cycles, *result;
+ Py_ssize_t n, i;
+
+ if (!PyArg_ParseTuple(state, "O!O!",
+ &PyTuple_Type, &indices,
+ &PyTuple_Type, &cycles))
+ return NULL;
+
+ n = PyTuple_GET_SIZE(po->pool);
+ if (PyTuple_GET_SIZE(indices) != n ||
+ PyTuple_GET_SIZE(cycles) != po->r)
+ {
+ PyErr_SetString(PyExc_ValueError, "invalid arguments");
+ return NULL;
+ }
+
+ for (i=0; i<n; i++)
+ {
+ PyObject* indexObject = PyTuple_GET_ITEM(indices, i);
+ Py_ssize_t index = PyLong_AsSsize_t(indexObject);
+ if (index < 0 && PyErr_Occurred())
+ return NULL; /* not an integer */
+ /* clamp the index */
+ if (index < 0)
+ index = 0;
+ else if (index > n-1)
+ index = n-1;
+ po->indices[i] = index;
+ }
+
+ for (i=0; i<po->r; i++)
+ {
+ PyObject* indexObject = PyTuple_GET_ITEM(cycles, i);
+ Py_ssize_t index = PyLong_AsSsize_t(indexObject);
+ if (index < 0 && PyErr_Occurred())
+ return NULL; /* not an integer */
+ if (index < 1)
+ index = 1;
+ else if (index > n-i)
+ index = n-i;
+ po->cycles[i] = index;
+ }
+ result = PyTuple_New(po->r);
+ if (result == NULL)
+ return NULL;
+ for (i=0; i<po->r; i++) {
+ PyObject *element = PyTuple_GET_ITEM(po->pool, po->indices[i]);
+ Py_INCREF(element);
+ PyTuple_SET_ITEM(result, i, element);
+ }
+ Py_CLEAR(po->result);
+ po->result = result;
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef permuations_methods[] = {
+ {"__reduce__", (PyCFunction)permutations_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)permutations_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(permutations_doc,
"permutations(iterable[, r]) --> permutations object\n\
\n\
@@ -2594,7 +3274,7 @@ static PyTypeObject permutations_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)permutations_next, /* tp_iternext */
- 0, /* tp_methods */
+ permuations_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2614,6 +3294,7 @@ typedef struct {
PyObject_HEAD
PyObject *total;
PyObject *it;
+ PyObject *binop;
} accumulateobject;
static PyTypeObject accumulate_type;
@@ -2621,12 +3302,14 @@ static PyTypeObject accumulate_type;
static PyObject *
accumulate_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
- static char *kwargs[] = {"iterable", NULL};
+ static char *kwargs[] = {"iterable", "func", NULL};
PyObject *iterable;
PyObject *it;
+ PyObject *binop = Py_None;
accumulateobject *lz;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:accumulate", kwargs, &iterable))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:accumulate",
+ kwargs, &iterable, &binop))
return NULL;
/* Get iterator. */
@@ -2641,6 +3324,10 @@ accumulate_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
+ if (binop != Py_None) {
+ Py_XINCREF(binop);
+ lz->binop = binop;
+ }
lz->total = NULL;
lz->it = it;
return (PyObject *)lz;
@@ -2650,6 +3337,7 @@ static void
accumulate_dealloc(accumulateobject *lz)
{
PyObject_GC_UnTrack(lz);
+ Py_XDECREF(lz->binop);
Py_XDECREF(lz->total);
Py_XDECREF(lz->it);
Py_TYPE(lz)->tp_free(lz);
@@ -2658,6 +3346,7 @@ accumulate_dealloc(accumulateobject *lz)
static int
accumulate_traverse(accumulateobject *lz, visitproc visit, void *arg)
{
+ Py_VISIT(lz->binop);
Py_VISIT(lz->it);
Py_VISIT(lz->total);
return 0;
@@ -2678,7 +3367,10 @@ accumulate_next(accumulateobject *lz)
return lz->total;
}
- newtotal = PyNumber_Add(lz->total, val);
+ if (lz->binop == NULL)
+ newtotal = PyNumber_Add(lz->total, val);
+ else
+ newtotal = PyObject_CallFunctionObjArgs(lz->binop, lz->total, val, NULL);
Py_DECREF(val);
if (newtotal == NULL)
return NULL;
@@ -2691,10 +3383,35 @@ accumulate_next(accumulateobject *lz)
return newtotal;
}
+static PyObject *
+accumulate_reduce(accumulateobject *lz)
+{
+ return Py_BuildValue("O(OO)O", Py_TYPE(lz),
+ lz->it, lz->binop?lz->binop:Py_None,
+ lz->total?lz->total:Py_None);
+ }
+
+static PyObject *
+accumulate_setstate(accumulateobject *lz, PyObject *state)
+{
+ Py_CLEAR(lz->total);
+ lz->total = state;
+ Py_INCREF(lz->total);
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef accumulate_methods[] = {
+ {"__reduce__", (PyCFunction)accumulate_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)accumulate_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(accumulate_doc,
-"accumulate(iterable) --> accumulate object\n\
+"accumulate(iterable[, func]) --> accumulate object\n\
\n\
-Return series of accumulated sums.");
+Return series of accumulated sums (or other binary function results).");
static PyTypeObject accumulate_type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -2726,7 +3443,7 @@ static PyTypeObject accumulate_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)accumulate_next, /* tp_iternext */
- 0, /* tp_methods */
+ accumulate_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2838,11 +3555,24 @@ compress_next(compressobject *lz)
if (ok == 1)
return datum;
Py_DECREF(datum);
- if (ok == -1)
+ if (ok < 0)
return NULL;
}
}
+static PyObject *
+compress_reduce(compressobject *lz)
+{
+ return Py_BuildValue("O(OO)", Py_TYPE(lz),
+ lz->data, lz->selectors);
+ }
+
+static PyMethodDef compress_methods[] = {
+ {"__reduce__", (PyCFunction)compress_reduce, METH_NOARGS,
+ reduce_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(compress_doc,
"compress(data, selectors) --> iterator over selected data\n\
\n\
@@ -2880,7 +3610,7 @@ static PyTypeObject compress_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)compress_next, /* tp_iternext */
- 0, /* tp_methods */
+ compress_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -2989,6 +3719,19 @@ filterfalse_next(filterfalseobject *lz)
}
}
+static PyObject *
+filterfalse_reduce(filterfalseobject *lz)
+{
+ return Py_BuildValue("O(OO)", Py_TYPE(lz),
+ lz->func, lz->it);
+ }
+
+static PyMethodDef filterfalse_methods[] = {
+ {"__reduce__", (PyCFunction)filterfalse_reduce, METH_NOARGS,
+ reduce_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(filterfalse_doc,
"filterfalse(function or None, sequence) --> filterfalse object\n\
\n\
@@ -3025,7 +3768,7 @@ static PyTypeObject filterfalse_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)filterfalse_next, /* tp_iternext */
- 0, /* tp_methods */
+ filterfalse_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -3219,11 +3962,9 @@ count_reduce(countobject *lz)
return Py_BuildValue("O(n)", Py_TYPE(lz), lz->cnt);
}
-PyDoc_STRVAR(count_reduce_doc, "Return state information for pickling.");
-
static PyMethodDef count_methods[] = {
{"__reduce__", (PyCFunction)count_reduce, METH_NOARGS,
- count_reduce_doc},
+ reduce_doc},
{NULL, NULL} /* sentinel */
};
@@ -3233,10 +3974,10 @@ PyDoc_STRVAR(count_doc,
Return a count object whose .__next__() method returns consecutive values.\n\
Equivalent to:\n\n\
def count(firstval=0, step=1):\n\
- x = firstval\n\
- while 1:\n\
- yield x\n\
- x += step\n");
+ x = firstval\n\
+ while 1:\n\
+ yield x\n\
+ x += step\n");
static PyTypeObject count_type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -3364,8 +4105,21 @@ repeat_len(repeatobject *ro)
PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(it)).");
+static PyObject *
+repeat_reduce(repeatobject *ro)
+{
+ /* unpickle this so that a new repeat iterator is constructed with an
+ * object, then call __setstate__ on it to set cnt
+ */
+ if (ro->cnt >= 0)
+ return Py_BuildValue("O(On)", Py_TYPE(ro), ro->element, ro->cnt);
+ else
+ return Py_BuildValue("O(O)", Py_TYPE(ro), ro->element);
+}
+
static PyMethodDef repeat_methods[] = {
{"__length_hint__", (PyCFunction)repeat_len, METH_NOARGS, length_hint_doc},
+ {"__reduce__", (PyCFunction)repeat_reduce, METH_NOARGS, reduce_doc},
{NULL, NULL} /* sentinel */
};
@@ -3591,6 +4345,49 @@ zip_longest_next(ziplongestobject *lz)
return result;
}
+static PyObject *
+zip_longest_reduce(ziplongestobject *lz)
+{
+
+ /* Create a new tuple with empty sequences where appropriate to pickle.
+ * Then use setstate to set the fillvalue
+ */
+ int i;
+ PyObject *args = PyTuple_New(PyTuple_GET_SIZE(lz->ittuple));
+ if (args == NULL)
+ return NULL;
+ for (i=0; i<PyTuple_GET_SIZE(lz->ittuple); i++) {
+ PyObject *elem = PyTuple_GET_ITEM(lz->ittuple, i);
+ if (elem == NULL) {
+ elem = PyTuple_New(0);
+ if (elem == NULL) {
+ Py_DECREF(args);
+ return NULL;
+ }
+ } else
+ Py_INCREF(elem);
+ PyTuple_SET_ITEM(args, i, elem);
+ }
+ return Py_BuildValue("ONO", Py_TYPE(lz), args, lz->fillvalue);
+}
+
+static PyObject *
+zip_longest_setstate(ziplongestobject *lz, PyObject *state)
+{
+ Py_CLEAR(lz->fillvalue);
+ lz->fillvalue = state;
+ Py_INCREF(lz->fillvalue);
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef zip_longest_methods[] = {
+ {"__reduce__", (PyCFunction)zip_longest_reduce, METH_NOARGS,
+ reduce_doc},
+ {"__setstate__", (PyCFunction)zip_longest_setstate, METH_O,
+ setstate_doc},
+ {NULL, NULL} /* sentinel */
+};
+
PyDoc_STRVAR(zip_longest_doc,
"zip_longest(iter1 [,iter2 [...]], [fillvalue=None]) --> zip_longest object\n\
\n\
@@ -3632,7 +4429,7 @@ static PyTypeObject ziplongest_type = {
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)zip_longest_next, /* tp_iternext */
- 0, /* tp_methods */
+ zip_longest_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
@@ -3652,13 +4449,14 @@ PyDoc_STRVAR(module_doc,
"Functional tools for creating and using iterators.\n\
\n\
Infinite iterators:\n\
-count([n]) --> n, n+1, n+2, ...\n\
+count(start=0, step=1) --> start, start+step, start+2*step, ...\n\
cycle(p) --> p0, p1, ... plast, p0, p1, ...\n\
repeat(elem [,n]) --> elem, elem, elem, ... endlessly or up to n times\n\
\n\
Iterators terminating on the shortest input sequence:\n\
-accumulate(p, start=0) --> p0, p0+p1, p0+p1+p2\n\
+accumulate(p[, func]) --> p0, p0+p1, p0+p1+p2\n\
chain(p, q, ...) --> p0, p1, ... plast, q0, q1, ... \n\
+chain.from_iterable([p, q, ...]) --> p0, p1, ... plast, q0, q1, ... \n\
compress(data, selectors) --> (d[0] if s[0]), (d[1] if s[1]), ...\n\
dropwhile(pred, seq) --> seq[n], seq[n+1], starting when pred fails\n\
groupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v)\n\
@@ -3720,6 +4518,9 @@ PyInit_itertools(void)
&product_type,
&repeat_type,
&groupby_type,
+ &_grouper_type,
+ &tee_type,
+ &teedataobject_type,
NULL
};
@@ -3737,11 +4538,5 @@ PyInit_itertools(void)
PyModule_AddObject(m, name+1, (PyObject *)typelist[i]);
}
- if (PyType_Ready(&teedataobject_type) < 0)
- return NULL;
- if (PyType_Ready(&tee_type) < 0)
- return NULL;
- if (PyType_Ready(&_grouper_type) < 0)
- return NULL;
return m;
}
diff --git a/Modules/main.c b/Modules/main.c
index 17aebae3ec..3cfc9c3bd4 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -6,6 +6,7 @@
#include <locale.h>
#ifdef __VMS
+#error "PEP 11: VMS is now unsupported, code will be removed in Python 3.4"
#include <unixlib.h>
#endif
@@ -72,14 +73,12 @@ static char *usage_2 = "\
-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
-OO : remove doc-strings in addition to the -O optimizations\n\
-q : don't print version and copyright messages on interactive startup\n\
--R : use a pseudo-random salt to make hash() values of various types be\n\
- unpredictable between separate invocations of the interpreter, as\n\
- a defence against denial-of-service attacks\n\
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\
-S : don't imply 'import site' on initialization\n\
";
static char *usage_3 = "\
--u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
+-u : unbuffered binary stdout and stderr, stdin always buffered;\n\
+ also PYTHONUNBUFFERED=x\n\
see man page for details on internal buffering relating to '-u'\n\
-v : verbose (trace import statements); also PYTHONVERBOSE=x\n\
can be supplied multiple times to increase verbosity\n\
@@ -102,13 +101,14 @@ static char *usage_5 =
"PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n"
" The default module search path uses %s.\n"
"PYTHONCASEOK : ignore case in 'import' statements (Windows).\n"
-"PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n\
+"PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n"
+"PYTHONFAULTHANDLER: dump the Python traceback on fatal errors.\n\
";
static char *usage_6 = "\
-PYTHONHASHSEED: if this variable is set to 'random', the effect is the same\n\
- as specifying the -R option: a random value is used to seed the hashes of\n\
- str, bytes and datetime objects. It can also be set to an integer\n\
- in the range [0,4294967295] to get hash values with a predictable seed.\n\
+PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n\
+ to seed the hashes of str, bytes and datetime objects. It can also be\n\
+ set to an integer in the range [0,4294967295] to get hash values with a\n\
+ predictable seed.\n\
";
static int
@@ -225,7 +225,7 @@ RunMainFromImporter(wchar_t *filename)
if (importer == NULL)
goto error;
- if (importer->ob_type == &PyNullImporter_Type) {
+ if (importer == Py_None) {
Py_DECREF(argv0);
Py_DECREF(importer);
return -1;
@@ -346,21 +346,13 @@ Py_Main(int argc, wchar_t **argv)
not interpreter options. */
break;
}
- switch (c) {
- case 'E':
+ if (c == 'E') {
Py_IgnoreEnvironmentFlag++;
break;
- case 'R':
- Py_HashRandomizationFlag++;
- break;
}
}
- /* The variable is only tested for existence here; _PyRandom_Init will
- check its value further. */
- if (!Py_HashRandomizationFlag &&
- (p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
- Py_HashRandomizationFlag = 1;
+ Py_HashRandomizationFlag = 1;
_PyRandom_Init();
PySys_ResetWarnOptions();
@@ -467,7 +459,7 @@ Py_Main(int argc, wchar_t **argv)
break;
case 'R':
- /* Already handled above */
+ /* Ignored */
break;
/* This space reserved for other options */
@@ -534,16 +526,13 @@ Py_Main(int argc, wchar_t **argv)
/* Use utf-8 on Mac OS X */
unicode = PyUnicode_FromString(p);
#else
- wchar_t *wchar;
- size_t len;
- wchar = _Py_char2wchar(p, &len);
- if (wchar == NULL)
- continue;
- unicode = PyUnicode_FromWideChar(wchar, len);
- PyMem_Free(wchar);
+ unicode = PyUnicode_DecodeLocale(p, "surrogateescape");
#endif
- if (unicode == NULL)
+ if (unicode == NULL) {
+ /* ignore errors */
+ PyErr_Clear();
continue;
+ }
PySys_AddWarnOptionUnicode(unicode);
Py_DECREF(unicode);
}
@@ -618,7 +607,6 @@ Py_Main(int argc, wchar_t **argv)
if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '\0') {
wchar_t* buffer;
size_t len = strlen(p) + 1;
- size_t r;
buffer = malloc(len * sizeof(wchar_t));
if (buffer == NULL) {
@@ -626,11 +614,33 @@ Py_Main(int argc, wchar_t **argv)
"not enough memory to copy PYTHONEXECUTABLE");
}
- r = mbstowcs(buffer, p, len);
+ mbstowcs(buffer, p, len);
Py_SetProgramName(buffer);
/* buffer is now handed off - do not free */
} else {
+#ifdef WITH_NEXT_FRAMEWORK
+ char* pyvenv_launcher = getenv("__PYVENV_LAUNCHER__");
+
+ if (pyvenv_launcher && *pyvenv_launcher) {
+ /* Used by Mac/Tools/pythonw.c to forward
+ * the argv0 of the stub executable
+ */
+ wchar_t* wbuf = _Py_char2wchar(pyvenv_launcher, NULL);
+
+ if (wbuf == NULL) {
+ Py_FatalError("Cannot decode __PYVENV_LAUNCHER__");
+ }
+ Py_SetProgramName(wbuf);
+
+ /* Don't free wbuf, the argument to Py_SetProgramName
+ * must remain valid until the Py_Finalize is called.
+ */
+ } else {
+ Py_SetProgramName(argv[0]);
+ }
+#else
Py_SetProgramName(argv[0]);
+#endif
}
#else
Py_SetProgramName(argv[0]);
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 142eca468a..7f094ffb53 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -55,11 +55,6 @@ raised for division by zero and mod by zero.
#include "Python.h"
#include "_math.h"
-#ifdef _OSF_SOURCE
-/* OSF1 5.1 doesn't make this available with XOPEN_SOURCE_EXTENDED defined */
-extern double copysign(double, double);
-#endif
-
/*
sin(pi*x), giving accurate results for all finite x (especially x
integral or close to an integer). This is here for use in the
@@ -244,7 +239,8 @@ m_tgamma(double x)
}
if (x == 0.0) {
errno = EDOM;
- return 1.0/x; /* tgamma(+-0.0) = +-inf, divide-by-zero */
+ /* tgamma(+-0.0) = +-inf, divide-by-zero */
+ return copysign(Py_HUGE_VAL, x);
}
/* integer arguments */
@@ -582,6 +578,61 @@ m_log(double x)
}
}
+/*
+ log2: log to base 2.
+
+ Uses an algorithm that should:
+
+ (a) produce exact results for powers of 2, and
+ (b) give a monotonic log2 (for positive finite floats),
+ assuming that the system log is monotonic.
+*/
+
+static double
+m_log2(double x)
+{
+ if (!Py_IS_FINITE(x)) {
+ if (Py_IS_NAN(x))
+ return x; /* log2(nan) = nan */
+ else if (x > 0.0)
+ return x; /* log2(+inf) = +inf */
+ else {
+ errno = EDOM;
+ return Py_NAN; /* log2(-inf) = nan, invalid-operation */
+ }
+ }
+
+ if (x > 0.0) {
+#ifdef HAVE_LOG2
+ return log2(x);
+#else
+ double m;
+ int e;
+ m = frexp(x, &e);
+ /* We want log2(m * 2**e) == log(m) / log(2) + e. Care is needed when
+ * x is just greater than 1.0: in that case e is 1, log(m) is negative,
+ * and we get significant cancellation error from the addition of
+ * log(m) / log(2) to e. The slight rewrite of the expression below
+ * avoids this problem.
+ */
+ if (x >= 1.0) {
+ return log(2.0 * m) / log(2.0) + (e - 1);
+ }
+ else {
+ return log(m) / log(2.0) + e;
+ }
+#endif
+ }
+ else if (x == 0.0) {
+ errno = EDOM;
+ return -Py_HUGE_VAL; /* log2(0) = -inf, divide-by-zero */
+ }
+ else {
+ errno = EDOM;
+ return Py_NAN; /* log2(-inf) = nan, invalid-operation */
+ }
+}
+
static double
m_log10(double x)
{
@@ -836,10 +887,10 @@ FUNC1(atanh, m_atanh, 0,
"atanh(x)\n\nReturn the hyperbolic arc tangent (measured in radians) of x.")
static PyObject * math_ceil(PyObject *self, PyObject *number) {
- static PyObject *ceil_str = NULL;
+ _Py_IDENTIFIER(__ceil__);
PyObject *method, *result;
- method = _PyObject_LookupSpecial(number, "__ceil__", &ceil_str);
+ method = _PyObject_LookupSpecial(number, &PyId___ceil__);
if (method == NULL) {
if (PyErr_Occurred())
return NULL;
@@ -855,7 +906,9 @@ PyDoc_STRVAR(math_ceil_doc,
"This is the smallest integral value >= x.");
FUNC2(copysign, copysign,
- "copysign(x, y)\n\nReturn x with the sign of y.")
+ "copysign(x, y)\n\nReturn a float with the magnitude (absolute value) "
+ "of x but the sign \nof y. On platforms that support signed zeros, "
+ "copysign(1.0, -0.0) \nreturns -1.0.\n")
FUNC1(cos, cos, 0,
"cos(x)\n\nReturn the cosine of x (measured in radians).")
FUNC1(cosh, cosh, 1,
@@ -874,10 +927,10 @@ FUNC1(fabs, fabs, 0,
"fabs(x)\n\nReturn the absolute value of the float x.")
static PyObject * math_floor(PyObject *self, PyObject *number) {
- static PyObject *floor_str = NULL;
+ _Py_IDENTIFIER(__floor__);
PyObject *method, *result;
- method = _PyObject_LookupSpecial(number, "__floor__", &floor_str);
+ method = _PyObject_LookupSpecial(number, &PyId___floor__);
if (method == NULL) {
if (PyErr_Occurred())
return NULL;
@@ -1383,7 +1436,7 @@ math_factorial(PyObject *self, PyObject *arg)
}
/* use lookup table if x is small */
- if (x < (long)(sizeof(SmallFactorials)/sizeof(SmallFactorials[0])))
+ if (x < (long)Py_ARRAY_LENGTH(SmallFactorials))
return PyLong_FromUnsignedLong(SmallFactorials[x]);
/* else express in the form odd_part * 2**two_valuation, and compute as
@@ -1410,7 +1463,7 @@ PyDoc_STRVAR(math_factorial_doc,
static PyObject *
math_trunc(PyObject *self, PyObject *number)
{
- static PyObject *trunc_str = NULL;
+ _Py_IDENTIFIER(__trunc__);
PyObject *trunc, *result;
if (Py_TYPE(number)->tp_dict == NULL) {
@@ -1418,7 +1471,7 @@ math_trunc(PyObject *self, PyObject *number)
return NULL;
}
- trunc = _PyObject_LookupSpecial(number, "__trunc__", &trunc_str);
+ trunc = _PyObject_LookupSpecial(number, &PyId___trunc__);
if (trunc == NULL) {
if (!PyErr_Occurred())
PyErr_Format(PyExc_TypeError,
@@ -1484,8 +1537,7 @@ math_ldexp(PyObject *self, PyObject *args)
}
else {
PyErr_SetString(PyExc_TypeError,
- "Expected an int or long as second argument "
- "to ldexp.");
+ "Expected an int as second argument to ldexp.");
return NULL;
}
@@ -1547,19 +1599,19 @@ PyDoc_STRVAR(math_modf_doc,
"Return the fractional and integer parts of x. Both results carry the sign\n"
"of x and are floats.");
-/* A decent logarithm is easy to compute even for huge longs, but libm can't
+/* A decent logarithm is easy to compute even for huge ints, but libm can't
do that by itself -- loghelper can. func is log or log10, and name is
- "log" or "log10". Note that overflow of the result isn't possible: a long
+ "log" or "log10". Note that overflow of the result isn't possible: an int
can contain no more than INT_MAX * SHIFT bits, so has value certainly less
than 2**(2**64 * 2**16) == 2**2**80, and log2 of that is 2**80, which is
small enough to fit in an IEEE single. log and log10 are even smaller.
- However, intermediate overflow is possible for a long if the number of bits
- in that long is larger than PY_SSIZE_T_MAX. */
+ However, intermediate overflow is possible for an int if the number of bits
+ in that int is larger than PY_SSIZE_T_MAX. */
static PyObject*
loghelper(PyObject* arg, double (*func)(double), char *funcname)
{
- /* If it is long, do it ourselves. */
+ /* If it is int, do it ourselves. */
if (PyLong_Check(arg)) {
double x, result;
Py_ssize_t e;
@@ -1627,6 +1679,15 @@ Return the logarithm of x to the given base.\n\
If the base not specified, returns the natural logarithm (base e) of x.");
static PyObject *
+math_log2(PyObject *self, PyObject *arg)
+{
+ return loghelper(arg, m_log2, "log2");
+}
+
+PyDoc_STRVAR(math_log2_doc,
+"log2(x)\n\nReturn the base 2 logarithm of x.");
+
+static PyObject *
math_log10(PyObject *self, PyObject *arg)
{
return loghelper(arg, m_log10, "log10");
@@ -1898,6 +1959,7 @@ static PyMethodDef math_methods[] = {
{"log", math_log, METH_VARARGS, math_log_doc},
{"log1p", math_log1p, METH_O, math_log1p_doc},
{"log10", math_log10, METH_O, math_log10_doc},
+ {"log2", math_log2, METH_O, math_log2_doc},
{"modf", math_modf, METH_O, math_modf_doc},
{"pow", math_pow, METH_VARARGS, math_pow_doc},
{"radians", math_radians, METH_O, math_radians_doc},
diff --git a/Modules/md5module.c b/Modules/md5module.c
index 208930dfaa..12e187cb94 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -210,7 +210,8 @@ static void md5_compress(struct md5_state *md5, unsigned char *buf)
Initialize the hash state
@param sha1 The hash state you wish to initialize
*/
-void md5_init(struct md5_state *md5)
+static void
+md5_init(struct md5_state *md5)
{
assert(md5 != NULL);
md5->state[0] = 0x67452301UL;
@@ -227,8 +228,8 @@ void md5_init(struct md5_state *md5)
@param in The data to hash
@param inlen The length of the data (octets)
*/
-void md5_process(struct md5_state *md5,
- const unsigned char *in, Py_ssize_t inlen)
+static void
+md5_process(struct md5_state *md5, const unsigned char *in, Py_ssize_t inlen)
{
Py_ssize_t n;
@@ -243,7 +244,7 @@ void md5_process(struct md5_state *md5,
in += MD5_BLOCKSIZE;
inlen -= MD5_BLOCKSIZE;
} else {
- n = MIN(inlen, (MD5_BLOCKSIZE - md5->curlen));
+ n = MIN(inlen, (Py_ssize_t)(MD5_BLOCKSIZE - md5->curlen));
memcpy(md5->buf + md5->curlen, in, (size_t)n);
md5->curlen += n;
in += n;
@@ -262,7 +263,8 @@ void md5_process(struct md5_state *md5,
@param sha1 The hash state
@param out [out] The destination of the hash (16 bytes)
*/
-void md5_done(struct md5_state *md5, unsigned char *out)
+static void
+md5_done(struct md5_state *md5, unsigned char *out)
{
int i;
@@ -376,7 +378,7 @@ MD5_hexdigest(MD5object *self, PyObject *unused)
unsigned char digest[MD5_DIGESTSIZE];
struct md5_state temp;
PyObject *retval;
- Py_UNICODE *hex_digest;
+ Py_UCS1 *hex_digest;
int i, j;
/* Get the raw (binary) digest value */
@@ -384,25 +386,22 @@ MD5_hexdigest(MD5object *self, PyObject *unused)
md5_done(&temp, digest);
/* Create a new string */
- retval = PyUnicode_FromStringAndSize(NULL, MD5_DIGESTSIZE * 2);
+ retval = PyUnicode_New(MD5_DIGESTSIZE * 2, 127);
if (!retval)
return NULL;
- hex_digest = PyUnicode_AS_UNICODE(retval);
- if (!hex_digest) {
- Py_DECREF(retval);
- return NULL;
- }
+ hex_digest = PyUnicode_1BYTE_DATA(retval);
/* Make hex version of the digest */
for(i=j=0; i<MD5_DIGESTSIZE; i++) {
- char c;
+ unsigned char c;
c = (digest[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
c = (digest[i] & 0xf);
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
}
+#ifdef Py_DEBUG
+ assert(_PyUnicode_CheckConsistency(retval, 1));
+#endif
return retval;
}
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 352dd52979..1107eb8f6e 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -78,8 +78,6 @@ my_getpagesize(void)
# define MAP_ANONYMOUS MAP_ANON
#endif
-static PyObject *mmap_module_error;
-
typedef enum
{
ACCESS_DEFAULT,
@@ -240,15 +238,37 @@ mmap_read_line_method(mmap_object *self,
return result;
}
+/* Basically the "n" format code with the ability to turn None into -1. */
+static int
+mmap_convert_ssize_t(PyObject *obj, void *result) {
+ Py_ssize_t limit;
+ if (obj == Py_None) {
+ limit = -1;
+ }
+ else if (PyNumber_Check(obj)) {
+ limit = PyNumber_AsSsize_t(obj, PyExc_OverflowError);
+ if (limit == -1 && PyErr_Occurred())
+ return 0;
+ }
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "integer argument expected, got '%.200s'",
+ Py_TYPE(obj)->tp_name);
+ return 0;
+ }
+ *((Py_ssize_t *)result) = limit;
+ return 1;
+}
+
static PyObject *
mmap_read_method(mmap_object *self,
PyObject *args)
{
- Py_ssize_t num_bytes, n;
+ Py_ssize_t num_bytes = -1, n;
PyObject *result;
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple(args, "n:read", &num_bytes))
+ if (!PyArg_ParseTuple(args, "|O&:read", mmap_convert_ssize_t, &num_bytes))
return(NULL);
/* silently 'adjust' out-of-range requests */
@@ -437,7 +457,7 @@ mmap_size_method(mmap_object *self,
{
struct stat buf;
if (-1 == fstat(self->fd, &buf)) {
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
#ifdef HAVE_LARGEFILE_SUPPORT
@@ -527,7 +547,7 @@ mmap_resize_method(mmap_object *self,
void *newmap;
if (ftruncate(self->fd, self->offset + new_size) == -1) {
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -542,7 +562,7 @@ mmap_resize_method(mmap_object *self,
#endif
if (newmap == (void *)-1)
{
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
self->data = newmap;
@@ -583,7 +603,7 @@ mmap_flush_method(mmap_object *self, PyObject *args)
/* XXX semantics of return value? */
/* XXX flags for msync? */
if (-1 == msync(self->data + offset, size, MS_SYNC)) {
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
return PyLong_FromLong(0);
@@ -645,9 +665,9 @@ mmap_move_method(mmap_object *self, PyObject *args)
return NULL;
} else {
/* bounds check the values */
- if (cnt < 0 || (cnt + dest) < cnt || (cnt + src) < cnt ||
- src < 0 || src > self->size || (src + cnt) > self->size ||
- dest < 0 || dest > self->size || (dest + cnt) > self->size) {
+ if ((cnt + dest) < cnt || (cnt + src) < cnt ||
+ src > self->size || (src + cnt) > self->size ||
+ dest > self->size || (dest + cnt) > self->size) {
PyErr_SetString(PyExc_ValueError,
"source, destination, or count out of range");
return NULL;
@@ -680,7 +700,9 @@ mmap__enter__method(mmap_object *self, PyObject *args)
static PyObject *
mmap__exit__method(PyObject *self, PyObject *args)
{
- return PyObject_CallMethod(self, "close", NULL);
+ _Py_IDENTIFIER(close);
+
+ return _PyObject_CallMethodId(self, &PyId_close, NULL);
}
static struct PyMethodDef mmap_object_methods[] = {
@@ -937,13 +959,13 @@ mmap_ass_subscript(mmap_object *self, PyObject *item, PyObject *value)
}
static PySequenceMethods mmap_as_sequence = {
- (lenfunc)mmap_length, /*sq_length*/
- (binaryfunc)mmap_concat, /*sq_concat*/
- (ssizeargfunc)mmap_repeat, /*sq_repeat*/
- (ssizeargfunc)mmap_item, /*sq_item*/
- 0, /*sq_slice*/
- (ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/
- 0, /*sq_ass_slice*/
+ (lenfunc)mmap_length, /*sq_length*/
+ (binaryfunc)mmap_concat, /*sq_concat*/
+ (ssizeargfunc)mmap_repeat, /*sq_repeat*/
+ (ssizeargfunc)mmap_item, /*sq_item*/
+ 0, /*sq_slice*/
+ (ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/
+ 0, /*sq_ass_slice*/
};
static PyMappingMethods mmap_as_mapping = {
@@ -1005,7 +1027,7 @@ static PyTypeObject mmap_object_type = {
PyObject_GenericGetAttr, /*tp_getattro*/
0, /*tp_setattro*/
&mmap_as_buffer, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
mmap_doc, /*tp_doc*/
0, /* tp_traverse */
0, /* tp_clear */
@@ -1021,10 +1043,10 @@ static PyTypeObject mmap_object_type = {
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
- 0, /* tp_init */
+ 0, /* tp_init */
PyType_GenericAlloc, /* tp_alloc */
new_mmap_object, /* tp_new */
- PyObject_Del, /* tp_free */
+ PyObject_Del, /* tp_free */
};
@@ -1075,8 +1097,8 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
int devzero = -1;
int access = (int)ACCESS_DEFAULT;
static char *keywords[] = {"fileno", "length",
- "flags", "prot",
- "access", "offset", NULL};
+ "flags", "prot",
+ "access", "offset", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|iii" _Py_PARSE_OFF_T, keywords,
&fd, &map_size_obj, &flags, &prot,
@@ -1184,7 +1206,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
fd = devzero = open("/dev/zero", O_RDWR);
if (devzero == -1) {
Py_DECREF(m_obj);
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
#endif
@@ -1192,7 +1214,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
m_obj->fd = dup(fd);
if (m_obj->fd == -1) {
Py_DECREF(m_obj);
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
}
@@ -1208,7 +1230,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
if (m_obj->data == (char *)-1) {
m_obj->data = NULL;
Py_DECREF(m_obj);
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
m_obj->access = (access_mode)access;
@@ -1241,8 +1263,8 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
int access = (access_mode)ACCESS_DEFAULT;
DWORD flProtect, dwDesiredAccess;
static char *keywords[] = { "fileno", "length",
- "tagname",
- "access", "offset", NULL };
+ "tagname",
+ "access", "offset", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|ziL", keywords,
&fileno, &map_size_obj,
@@ -1289,12 +1311,12 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
if (fileno != -1 && fileno != 0) {
/* Ensure that fileno is within the CRT's valid range */
if (_PyVerify_fd(fileno) == 0) {
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
fh = (HANDLE)_get_osfhandle(fileno);
if (fh==(HANDLE)-1) {
- PyErr_SetFromErrno(mmap_module_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
/* Win9x appears to need us seeked to zero */
@@ -1456,11 +1478,7 @@ PyInit_mmap(void)
dict = PyModule_GetDict(module);
if (!dict)
return NULL;
- mmap_module_error = PyErr_NewException("mmap.error",
- PyExc_EnvironmentError , NULL);
- if (mmap_module_error == NULL)
- return NULL;
- PyDict_SetItemString(dict, "error", mmap_module_error);
+ PyDict_SetItemString(dict, "error", PyExc_OSError);
PyDict_SetItemString(dict, "mmap", (PyObject*) &mmap_object_type);
#ifdef PROT_EXEC
setint(dict, "PROT_EXEC", PROT_EXEC);
diff --git a/Modules/nismodule.c b/Modules/nismodule.c
index a81ca8ca4d..0af495fa53 100644
--- a/Modules/nismodule.c
+++ b/Modules/nismodule.c
@@ -411,7 +411,7 @@ nis_maps (PyObject *self, PyObject *args, PyObject *kwdict)
return NULL;
if ((list = PyList_New(0)) == NULL)
return NULL;
- for (maps = maps; maps; maps = maps->next) {
+ for (; maps; maps = maps->next) {
PyObject *str = PyUnicode_FromString(maps->map);
if (!str || PyList_Append(list, str) < 0)
{
diff --git a/Modules/operator.c b/Modules/operator.c
index 866ec3a761..5156b6b32d 100644
--- a/Modules/operator.c
+++ b/Modules/operator.c
@@ -159,6 +159,143 @@ is_not(PyObject *s, PyObject *a)
#undef spam2
#undef spam1o
#undef spam1o
+
+/* compare_digest **********************************************************/
+
+/*
+ * timing safe compare
+ *
+ * Returns 1 of the strings are equal.
+ * In case of len(a) != len(b) the function tries to keep the timing
+ * dependent on the length of b. CPU cache locally may still alter timing
+ * a bit.
+ */
+static int
+_tscmp(const unsigned char *a, const unsigned char *b,
+ Py_ssize_t len_a, Py_ssize_t len_b)
+{
+ /* The volatile type declarations make sure that the compiler has no
+ * chance to optimize and fold the code in any way that may change
+ * the timing.
+ */
+ volatile Py_ssize_t length;
+ volatile const unsigned char *left;
+ volatile const unsigned char *right;
+ Py_ssize_t i;
+ unsigned char result;
+
+ /* loop count depends on length of b */
+ length = len_b;
+ left = NULL;
+ right = b;
+
+ /* don't use else here to keep the amount of CPU instructions constant,
+ * volatile forces re-evaluation
+ * */
+ if (len_a == length) {
+ left = *((volatile const unsigned char**)&a);
+ result = 0;
+ }
+ if (len_a != length) {
+ left = b;
+ result = 1;
+ }
+
+ for (i=0; i < length; i++) {
+ result |= *left++ ^ *right++;
+ }
+
+ return (result == 0);
+}
+
+PyDoc_STRVAR(compare_digest__doc__,
+"compare_digest(a, b) -> bool\n"
+"\n"
+"Return 'a == b'. This function uses an approach designed to prevent\n"
+"timing analysis, making it appropriate for cryptography.\n"
+"a and b must both be of the same type: either str (ASCII only),\n"
+"or any type that supports the buffer protocol (e.g. bytes).\n"
+"\n"
+"Note: If a and b are of different lengths, or if an error occurs,\n"
+"a timing attack could theoretically reveal information about the\n"
+"types and lengths of a and b--but not their values.\n");
+
+static PyObject*
+compare_digest(PyObject *self, PyObject *args)
+{
+ PyObject *a, *b;
+ int rc;
+
+ if (!PyArg_ParseTuple(args, "OO:compare_digest", &a, &b)) {
+ return NULL;
+ }
+
+ /* ASCII unicode string */
+ if(PyUnicode_Check(a) && PyUnicode_Check(b)) {
+ if (PyUnicode_READY(a) == -1 || PyUnicode_READY(b) == -1) {
+ return NULL;
+ }
+ if (!PyUnicode_IS_ASCII(a) || !PyUnicode_IS_ASCII(b)) {
+ PyErr_SetString(PyExc_TypeError,
+ "comparing strings with non-ASCII characters is "
+ "not supported");
+ return NULL;
+ }
+
+ rc = _tscmp(PyUnicode_DATA(a),
+ PyUnicode_DATA(b),
+ PyUnicode_GET_LENGTH(a),
+ PyUnicode_GET_LENGTH(b));
+ }
+ /* fallback to buffer interface for bytes, bytesarray and other */
+ else {
+ Py_buffer view_a;
+ Py_buffer view_b;
+
+ if ((PyObject_CheckBuffer(a) == 0) & (PyObject_CheckBuffer(b) == 0)) {
+ PyErr_Format(PyExc_TypeError,
+ "unsupported operand types(s) or combination of types: "
+ "'%.100s' and '%.100s'",
+ Py_TYPE(a)->tp_name, Py_TYPE(b)->tp_name);
+ return NULL;
+ }
+
+ if (PyObject_GetBuffer(a, &view_a, PyBUF_SIMPLE) == -1) {
+ return NULL;
+ }
+ if (view_a.ndim > 1) {
+ PyErr_SetString(PyExc_BufferError,
+ "Buffer must be single dimension");
+ PyBuffer_Release(&view_a);
+ return NULL;
+ }
+
+ if (PyObject_GetBuffer(b, &view_b, PyBUF_SIMPLE) == -1) {
+ PyBuffer_Release(&view_a);
+ return NULL;
+ }
+ if (view_b.ndim > 1) {
+ PyErr_SetString(PyExc_BufferError,
+ "Buffer must be single dimension");
+ PyBuffer_Release(&view_a);
+ PyBuffer_Release(&view_b);
+ return NULL;
+ }
+
+ rc = _tscmp((const unsigned char*)view_a.buf,
+ (const unsigned char*)view_b.buf,
+ view_a.len,
+ view_b.len);
+
+ PyBuffer_Release(&view_a);
+ PyBuffer_Release(&view_b);
+ }
+
+ return PyBool_FromLong(rc);
+}
+
+/* operator methods **********************************************************/
+
#define spam1(OP,DOC) {#OP, OP, METH_VARARGS, PyDoc_STR(DOC)},
#define spam2(OP,ALTOP,DOC) {#OP, op_##OP, METH_VARARGS, PyDoc_STR(DOC)}, \
{#ALTOP, op_##OP, METH_VARARGS, PyDoc_STR(DOC)},
@@ -227,6 +364,8 @@ spam2(ne,__ne__, "ne(a, b) -- Same as a!=b.")
spam2(gt,__gt__, "gt(a, b) -- Same as a>b.")
spam2(ge,__ge__, "ge(a, b) -- Same as a>=b.")
+ {"_compare_digest", (PyCFunction)compare_digest, METH_VARARGS,
+ compare_digest__doc__},
{NULL, NULL} /* sentinel */
};
@@ -321,8 +460,8 @@ PyDoc_STRVAR(itemgetter_doc,
"itemgetter(item, ...) --> itemgetter object\n\
\n\
Return a callable object that fetches the given item(s) from its operand.\n\
-After, f=itemgetter(2), the call f(r) returns r[2].\n\
-After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3])");
+After f = itemgetter(2), the call f(r) returns r[2].\n\
+After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])");
static PyTypeObject itemgetter_type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -402,7 +541,8 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
for (idx = 0; idx < nattrs; ++idx) {
PyObject *item = PyTuple_GET_ITEM(args, idx);
Py_ssize_t item_len;
- Py_UNICODE *item_buffer;
+ void *data;
+ unsigned int kind;
int dot_count;
if (!PyUnicode_Check(item)) {
@@ -411,13 +551,18 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_DECREF(attr);
return NULL;
}
- item_len = PyUnicode_GET_SIZE(item);
- item_buffer = PyUnicode_AS_UNICODE(item);
+ if (PyUnicode_READY(item)) {
+ Py_DECREF(attr);
+ return NULL;
+ }
+ item_len = PyUnicode_GET_LENGTH(item);
+ kind = PyUnicode_KIND(item);
+ data = PyUnicode_DATA(item);
/* check whethere the string is dotted */
dot_count = 0;
for (char_idx = 0; char_idx < item_len; ++char_idx) {
- if (item_buffer[char_idx] == (Py_UNICODE)'.')
+ if (PyUnicode_READ(kind, data, char_idx) == '.')
++dot_count;
}
@@ -438,12 +583,12 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
for (; dot_count > 0; --dot_count) {
- while (item_buffer[unibuff_till] != (Py_UNICODE)'.') {
+ while (PyUnicode_READ(kind, data, unibuff_till) != '.') {
++unibuff_till;
}
- attr_chain_item = PyUnicode_FromUnicode(
- item_buffer + unibuff_from,
- unibuff_till - unibuff_from);
+ attr_chain_item = PyUnicode_Substring(item,
+ unibuff_from,
+ unibuff_till);
if (attr_chain_item == NULL) {
Py_DECREF(attr_chain);
Py_DECREF(attr);
@@ -456,9 +601,8 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
/* now add the last dotless name */
- attr_chain_item = PyUnicode_FromUnicode(
- item_buffer + unibuff_from,
- item_len - unibuff_from);
+ attr_chain_item = PyUnicode_Substring(item,
+ unibuff_from, item_len);
if (attr_chain_item == NULL) {
Py_DECREF(attr_chain);
Py_DECREF(attr);
@@ -568,9 +712,9 @@ PyDoc_STRVAR(attrgetter_doc,
"attrgetter(attr, ...) --> attrgetter object\n\
\n\
Return a callable object that fetches the given attribute(s) from its operand.\n\
-After, f=attrgetter('name'), the call f(r) returns r.name.\n\
-After, g=attrgetter('name', 'date'), the call g(r) returns (r.name, r.date).\n\
-After, h=attrgetter('name.first', 'name.last'), the call h(r) returns\n\
+After f = attrgetter('name'), the call f(r) returns r.name.\n\
+After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date).\n\
+After h = attrgetter('name.first', 'name.last'), the call h(r) returns\n\
(r.name.first, r.name.last).");
static PyTypeObject attrgetter_type = {
@@ -700,8 +844,8 @@ PyDoc_STRVAR(methodcaller_doc,
"methodcaller(name, ...) --> methodcaller object\n\
\n\
Return a callable object that calls the given method on its operand.\n\
-After, f = methodcaller('name'), the call f(r) returns r.name().\n\
-After, g = methodcaller('name', 'date', foo=1), the call g(r) returns\n\
+After f = methodcaller('name'), the call f(r) returns r.name().\n\
+After g = methodcaller('name', 'date', foo=1), the call g(r) returns\n\
r.name('date', foo=1).");
static PyTypeObject methodcaller_type = {
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index 0ac1cb37b9..817e20428c 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -214,6 +214,21 @@ oss_mixer_dealloc(oss_mixer_t *self)
* Helper functions
*/
+/* Check if a given file descriptor is valid (i.e. hasn't been closed).
+ * If true, return 1. Otherwise, raise ValueError and return 0.
+ */
+static int _is_fd_valid(int fd)
+{
+ /* the FD is set to -1 in oss_close()/oss_mixer_close() */
+ if (fd >= 0) {
+ return 1;
+ } else {
+ PyErr_SetString(PyExc_ValueError,
+ "Operation on closed OSS device.");
+ return 0;
+ }
+}
+
/* _do_ioctl_1() is a private helper function used for the OSS ioctls --
SNDCTL_DSP_{SETFMT,CHANNELS,SPEED} -- that are called from C
like this:
@@ -301,6 +316,9 @@ _do_ioctl_0(int fd, PyObject *args, char *fname, int cmd)
static PyObject *
oss_nonblock(oss_audio_t *self, PyObject *unused)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
/* Hmmm: it doesn't appear to be possible to return to blocking
mode once we're in non-blocking mode! */
if (ioctl(self->fd, SNDCTL_DSP_NONBLOCK, NULL) == -1)
@@ -312,6 +330,9 @@ oss_nonblock(oss_audio_t *self, PyObject *unused)
static PyObject *
oss_setfmt(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1(self->fd, args, "setfmt", SNDCTL_DSP_SETFMT);
}
@@ -319,6 +340,10 @@ static PyObject *
oss_getfmts(oss_audio_t *self, PyObject *unused)
{
int mask;
+
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (ioctl(self->fd, SNDCTL_DSP_GETFMTS, &mask) == -1)
return PyErr_SetFromErrno(PyExc_IOError);
return PyLong_FromLong(mask);
@@ -327,30 +352,45 @@ oss_getfmts(oss_audio_t *self, PyObject *unused)
static PyObject *
oss_channels(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1(self->fd, args, "channels", SNDCTL_DSP_CHANNELS);
}
static PyObject *
oss_speed(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1(self->fd, args, "speed", SNDCTL_DSP_SPEED);
}
static PyObject *
oss_sync(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_0(self->fd, args, "sync", SNDCTL_DSP_SYNC);
}
static PyObject *
oss_reset(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_0(self->fd, args, "reset", SNDCTL_DSP_RESET);
}
static PyObject *
oss_post(oss_audio_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_0(self->fd, args, "post", SNDCTL_DSP_POST);
}
@@ -365,6 +405,9 @@ oss_read(oss_audio_t *self, PyObject *args)
char *cp;
PyObject *rv;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (!PyArg_ParseTuple(args, "i:read", &size))
return NULL;
rv = PyBytes_FromStringAndSize(NULL, size);
@@ -392,6 +435,9 @@ oss_write(oss_audio_t *self, PyObject *args)
char *cp;
int rv, size;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (!PyArg_ParseTuple(args, "y#:write", &cp, &size)) {
return NULL;
}
@@ -423,6 +469,9 @@ oss_writeall(oss_audio_t *self, PyObject *args)
mode, the behaviour of write() and writeall() from Python is
indistinguishable. */
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (!PyArg_ParseTuple(args, "y#:write", &cp, &size))
return NULL;
@@ -482,10 +531,12 @@ oss_self(PyObject *self, PyObject *unused)
return self;
}
-static PyObject *
+static PyObject *
oss_exit(PyObject *self, PyObject *unused)
{
- PyObject *ret = PyObject_CallMethod(self, "close", NULL);
+ _Py_IDENTIFIER(close);
+
+ PyObject *ret = _PyObject_CallMethodId(self, &PyId_close, NULL);
if (!ret)
return NULL;
Py_DECREF(ret);
@@ -495,6 +546,9 @@ oss_exit(PyObject *self, PyObject *unused)
static PyObject *
oss_fileno(oss_audio_t *self, PyObject *unused)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return PyLong_FromLong(self->fd);
}
@@ -507,7 +561,9 @@ oss_setparameters(oss_audio_t *self, PyObject *args)
{
int wanted_fmt, wanted_channels, wanted_rate, strict=0;
int fmt, channels, rate;
- PyObject * rv; /* return tuple (fmt, channels, rate) */
+
+ if (!_is_fd_valid(self->fd))
+ return NULL;
if (!PyArg_ParseTuple(args, "iii|i:setparameters",
&wanted_fmt, &wanted_channels, &wanted_rate,
@@ -549,13 +605,7 @@ oss_setparameters(oss_audio_t *self, PyObject *args)
/* Construct the return value: a (fmt, channels, rate) tuple that
tells what the audio hardware was actually set to. */
- rv = PyTuple_New(3);
- if (rv == NULL)
- return NULL;
- PyTuple_SET_ITEM(rv, 0, PyLong_FromLong(fmt));
- PyTuple_SET_ITEM(rv, 1, PyLong_FromLong(channels));
- PyTuple_SET_ITEM(rv, 2, PyLong_FromLong(rate));
- return rv;
+ return Py_BuildValue("(iii)", fmt, channels, rate);
}
static int
@@ -599,6 +649,9 @@ oss_bufsize(oss_audio_t *self, PyObject *unused)
audio_buf_info ai;
int nchannels=0, ssize=0;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -618,6 +671,9 @@ oss_obufcount(oss_audio_t *self, PyObject *unused)
audio_buf_info ai;
int nchannels=0, ssize=0;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -638,6 +694,9 @@ oss_obuffree(oss_audio_t *self, PyObject *unused)
audio_buf_info ai;
int nchannels=0, ssize=0;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -655,6 +714,9 @@ oss_getptr(oss_audio_t *self, PyObject *unused)
count_info info;
int req;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
if (self->mode == O_RDONLY)
req = SNDCTL_DSP_GETIPTR;
else
@@ -685,6 +747,9 @@ oss_mixer_close(oss_mixer_t *self, PyObject *unused)
static PyObject *
oss_mixer_fileno(oss_mixer_t *self, PyObject *unused)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return PyLong_FromLong(self->fd);
}
@@ -693,6 +758,9 @@ oss_mixer_fileno(oss_mixer_t *self, PyObject *unused)
static PyObject *
oss_mixer_controls(oss_mixer_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1_internal(self->fd, args, "controls",
SOUND_MIXER_READ_DEVMASK);
}
@@ -700,6 +768,9 @@ oss_mixer_controls(oss_mixer_t *self, PyObject *args)
static PyObject *
oss_mixer_stereocontrols(oss_mixer_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1_internal(self->fd, args, "stereocontrols",
SOUND_MIXER_READ_STEREODEVS);
}
@@ -707,6 +778,9 @@ oss_mixer_stereocontrols(oss_mixer_t *self, PyObject *args)
static PyObject *
oss_mixer_reccontrols(oss_mixer_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1_internal(self->fd, args, "reccontrols",
SOUND_MIXER_READ_RECMASK);
}
@@ -716,6 +790,9 @@ oss_mixer_get(oss_mixer_t *self, PyObject *args)
{
int channel, volume;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
/* Can't use _do_ioctl_1 because of encoded arg thingy. */
if (!PyArg_ParseTuple(args, "i:get", &channel))
return NULL;
@@ -736,6 +813,9 @@ oss_mixer_set(oss_mixer_t *self, PyObject *args)
{
int channel, volume, leftVol, rightVol;
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
/* Can't use _do_ioctl_1 because of encoded arg thingy. */
if (!PyArg_ParseTuple(args, "i(ii):set", &channel, &leftVol, &rightVol))
return NULL;
@@ -761,6 +841,9 @@ oss_mixer_set(oss_mixer_t *self, PyObject *args)
static PyObject *
oss_mixer_get_recsrc(oss_mixer_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1_internal(self->fd, args, "get_recsrc",
SOUND_MIXER_READ_RECSRC);
}
@@ -768,6 +851,9 @@ oss_mixer_get_recsrc(oss_mixer_t *self, PyObject *args)
static PyObject *
oss_mixer_set_recsrc(oss_mixer_t *self, PyObject *args)
{
+ if (!_is_fd_valid(self->fd))
+ return NULL;
+
return _do_ioctl_1(self->fd, args, "set_recsrc",
SOUND_MIXER_WRITE_RECSRC);
}
@@ -971,8 +1057,8 @@ build_namelists (PyObject *module)
int num_controls;
int i;
- num_controls = sizeof(control_labels) / sizeof(control_labels[0]);
- assert(num_controls == sizeof(control_names) / sizeof(control_names[0]));
+ num_controls = Py_ARRAY_LENGTH(control_labels);
+ assert(num_controls == Py_ARRAY_LENGTH(control_names));
labels = PyList_New(num_controls);
names = PyList_New(num_controls);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 9497aaee43..e598046074 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -300,25 +300,25 @@ parser_richcompare(PyObject *left, PyObject *right, int op)
/* Convert return value to a Boolean */
switch (op) {
- case Py_EQ:
+ case Py_EQ:
v = TEST_COND(result == 0);
break;
- case Py_NE:
+ case Py_NE:
v = TEST_COND(result != 0);
break;
- case Py_LE:
+ case Py_LE:
v = TEST_COND(result <= 0);
break;
- case Py_GE:
+ case Py_GE:
v = TEST_COND(result >= 0);
break;
- case Py_LT:
+ case Py_LT:
v = TEST_COND(result < 0);
break;
- case Py_GT:
+ case Py_GT:
v = TEST_COND(result > 0);
break;
- default:
+ default:
PyErr_BadArgument();
return NULL;
}
@@ -382,40 +382,28 @@ parser_sizeof(PyST_Object *st, void *unused)
static PyObject*
parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
{
- PyObject *line_option = 0;
- PyObject *col_option = 0;
+ int line_info = 0;
+ int col_info = 0;
PyObject *res = 0;
int ok;
static char *keywords[] = {"st", "line_info", "col_info", NULL};
if (self == NULL || PyModule_Check(self)) {
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords,
- &PyST_Type, &self, &line_option,
- &col_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|pp:st2tuple", keywords,
+ &PyST_Type, &self, &line_info,
+ &col_info);
}
else
- ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:totuple", &keywords[1],
- &line_option, &col_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "|pp:totuple", &keywords[1],
+ &line_info, &col_info);
if (ok != 0) {
- int lineno = 0;
- int col_offset = 0;
- if (line_option != NULL) {
- lineno = PyObject_IsTrue(line_option);
- if (lineno < 0)
- return NULL;
- }
- if (col_option != NULL) {
- col_offset = PyObject_IsTrue(col_option);
- if (col_offset < 0)
- return NULL;
- }
/*
* Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
res = node2tuple(((PyST_Object*)self)->st_node,
- PyTuple_New, PyTuple_SetItem, lineno, col_offset);
+ PyTuple_New, PyTuple_SetItem, line_info, col_info);
}
return (res);
}
@@ -430,39 +418,27 @@ parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
static PyObject*
parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw)
{
- PyObject *line_option = 0;
- PyObject *col_option = 0;
+ int line_info = 0;
+ int col_info = 0;
PyObject *res = 0;
int ok;
static char *keywords[] = {"st", "line_info", "col_info", NULL};
if (self == NULL || PyModule_Check(self))
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords,
- &PyST_Type, &self, &line_option,
- &col_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|pp:st2list", keywords,
+ &PyST_Type, &self, &line_info,
+ &col_info);
else
- ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:tolist", &keywords[1],
- &line_option, &col_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "|pp:tolist", &keywords[1],
+ &line_info, &col_info);
if (ok) {
- int lineno = 0;
- int col_offset = 0;
- if (line_option != 0) {
- lineno = PyObject_IsTrue(line_option);
- if (lineno < 0)
- return NULL;
- }
- if (col_option != 0) {
- col_offset = PyObject_IsTrue(col_option);
- if (col_offset < 0)
- return NULL;
- }
/*
* Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
res = node2tuple(self->st_node,
- PyList_New, PyList_SetItem, lineno, col_offset);
+ PyList_New, PyList_SetItem, line_info, col_info);
}
return (res);
}
@@ -600,8 +576,10 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type)
if (res)
((PyST_Object *)res)->st_flags.cf_flags = flags & PyCF_MASK;
}
- else
+ else {
PyParser_SetError(&err);
+ }
+ PyParser_ClearError(&err);
}
return (res);
}
@@ -747,7 +725,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
/* elem must always be a sequence, however simple */
PyObject* elem = PySequence_GetItem(tuple, i);
int ok = elem != NULL;
- long type = 0;
+ int type = 0;
char *strn = 0;
if (ok)
@@ -758,13 +736,19 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
ok = 0;
else {
ok = PyLong_Check(temp);
- if (ok)
- type = PyLong_AS_LONG(temp);
+ if (ok) {
+ type = _PyLong_AsInt(temp);
+ if (type == -1 && PyErr_Occurred()) {
+ Py_DECREF(temp);
+ Py_DECREF(elem);
+ return 0;
+ }
+ }
Py_DECREF(temp);
}
}
if (!ok) {
- PyObject *err = Py_BuildValue("os", elem,
+ PyObject *err = Py_BuildValue("Os", elem,
"Illegal node construct.");
PyErr_SetObject(parser_error, err);
Py_XDECREF(err);
@@ -795,8 +779,16 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
if (len == 3) {
PyObject *o = PySequence_GetItem(elem, 2);
if (o != NULL) {
- if (PyLong_Check(o))
- *line_num = PyLong_AS_LONG(o);
+ if (PyLong_Check(o)) {
+ int num = _PyLong_AsInt(o);
+ if (num == -1 && PyErr_Occurred()) {
+ Py_DECREF(o);
+ Py_DECREF(temp);
+ Py_DECREF(elem);
+ return 0;
+ }
+ *line_num = num;
+ }
else {
PyErr_Format(parser_error,
"third item in terminal node must be an"
@@ -995,6 +987,7 @@ VALIDATER(comp_iter); VALIDATER(comp_if);
VALIDATER(testlist_comp); VALIDATER(yield_expr);
VALIDATER(or_test);
VALIDATER(test_nocond); VALIDATER(lambdef_nocond);
+VALIDATER(yield_arg);
#undef VALIDATER
@@ -1655,22 +1648,49 @@ validate_raise_stmt(node *tree)
}
-/* yield_expr: 'yield' [testlist]
+/* yield_expr: 'yield' [yield_arg]
*/
static int
validate_yield_expr(node *tree)
{
int nch = NCH(tree);
- int res = (validate_ntype(tree, yield_expr)
- && ((nch == 1) || (nch == 2))
- && validate_name(CHILD(tree, 0), "yield"));
-
- if (res && (nch == 2))
- res = validate_testlist(CHILD(tree, 1));
-
- return (res);
+ if (nch < 1 || nch > 2)
+ return 0;
+ if (!validate_ntype(tree, yield_expr))
+ return 0;
+ if (!validate_name(CHILD(tree, 0), "yield"))
+ return 0;
+ if (nch == 2) {
+ if (!validate_yield_arg(CHILD(tree, 1)))
+ return 0;
+ }
+ return 1;
}
+/* yield_arg: 'from' test | testlist
+ */
+static int
+validate_yield_arg(node *tree)
+{
+ int nch = NCH(tree);
+ if (!validate_ntype(tree, yield_arg))
+ return 0;
+ switch (nch) {
+ case 1:
+ if (!validate_testlist(CHILD(tree, nch - 1)))
+ return 0;
+ break;
+ case 2:
+ if (!validate_name(CHILD(tree, 0), "from"))
+ return 0;
+ if (!validate_test(CHILD(tree, 1)))
+ return 0;
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
/* yield_stmt: yield_expr
*/
@@ -2165,16 +2185,16 @@ validate_comp_op(node *tree)
*/
tree = CHILD(tree, 0);
switch (TYPE(tree)) {
- case LESS:
- case GREATER:
- case EQEQUAL:
- case EQUAL:
- case LESSEQUAL:
- case GREATEREQUAL:
- case NOTEQUAL:
+ case LESS:
+ case GREATER:
+ case EQEQUAL:
+ case EQUAL:
+ case LESSEQUAL:
+ case GREATEREQUAL:
+ case NOTEQUAL:
res = 1;
break;
- case NAME:
+ case NAME:
res = ((strcmp(STR(tree), "in") == 0)
|| (strcmp(STR(tree), "is") == 0));
if (!res) {
@@ -2719,9 +2739,9 @@ validate_argument(node *tree)
{
int nch = NCH(tree);
int res = (validate_ntype(tree, argument)
- && ((nch == 1) || (nch == 2) || (nch == 3))
- && validate_test(CHILD(tree, 0)));
-
+ && ((nch == 1) || (nch == 2) || (nch == 3)));
+ if (res)
+ res = validate_test(CHILD(tree, 0));
if (res && (nch == 2))
res = validate_comp_for(CHILD(tree, 1));
else if (res && (nch == 3))
@@ -3356,10 +3376,13 @@ PyInit_parser(void)
copyreg = PyImport_ImportModuleNoBlock("copyreg");
if (copyreg != NULL) {
PyObject *func, *pickler;
+ _Py_IDENTIFIER(pickle);
+ _Py_IDENTIFIER(sequence2st);
+ _Py_IDENTIFIER(_pickler);
- func = PyObject_GetAttrString(copyreg, "pickle");
- pickle_constructor = PyObject_GetAttrString(module, "sequence2st");
- pickler = PyObject_GetAttrString(module, "_pickler");
+ func = _PyObject_GetAttrId(copyreg, &PyId_pickle);
+ pickle_constructor = _PyObject_GetAttrId(module, &PyId_sequence2st);
+ pickler = _PyObject_GetAttrId(module, &PyId__pickler);
Py_XINCREF(pickle_constructor);
if ((func != NULL) && (pickle_constructor != NULL)
&& (pickler != NULL)) {
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 34dff11257..767a6653c4 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -31,6 +31,7 @@
#endif
#if defined(__VMS)
+# error "PEP 11: VMS is now unsupported, code will be removed in Python 3.4"
# include <unixio.h>
#endif /* defined(__VMS) */
@@ -46,6 +47,7 @@ corresponding Unix manual entries for more information on calls.");
#if defined(PYOS_OS2)
+#error "PEP 11: OS/2 is now unsupported, code will be removed in Python 3.4"
#define INCL_DOS
#define INCL_DOSERRORS
#define INCL_DOSPROCESS
@@ -60,6 +62,10 @@ corresponding Unix manual entries for more information on calls.");
#include "osdefs.h"
#endif
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif /* HAVE_SYS_TYPES_H */
@@ -96,6 +102,48 @@ corresponding Unix manual entries for more information on calls.");
#include <langinfo.h>
#endif
+#ifdef HAVE_SYS_SENDFILE_H
+#include <sys/sendfile.h>
+#endif
+
+#ifdef HAVE_SCHED_H
+#include <sched.h>
+#endif
+
+#if !defined(CPU_ALLOC) && defined(HAVE_SCHED_SETAFFINITY)
+#undef HAVE_SCHED_SETAFFINITY
+#endif
+
+#if defined(HAVE_SYS_XATTR_H) && defined(__GLIBC__)
+#define USE_XATTRS
+#endif
+
+#ifdef USE_XATTRS
+#include <sys/xattr.h>
+#endif
+
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#if defined(MS_WINDOWS)
+# define TERMSIZE_USE_CONIO
+#elif defined(HAVE_SYS_IOCTL_H)
+# include <sys/ioctl.h>
+# if defined(HAVE_TERMIOS_H)
+# include <termios.h>
+# endif
+# if defined(TIOCGWINSZ)
+# define TERMSIZE_USE_IOCTL
+# endif
+#endif /* MS_WINDOWS */
+
/* Various compilers have only certain posix functions */
/* XXX Gosh I wish these were all moved into pyconfig.h */
#if defined(PYCC_VACPP) && defined(PYOS_OS2)
@@ -158,6 +206,9 @@ corresponding Unix manual entries for more information on calls.");
#endif /* ! __WATCOMC__ || __QNX__ */
#endif /* ! __IBMC__ */
+
+
+
#ifndef _MSC_VER
#if defined(__sgi)&&_COMPILER_VERSION>=700
@@ -331,10 +382,12 @@ static int win32_can_symlink = 0;
#undef STRUCT_STAT
#if defined(MS_WIN64) || defined(MS_WINDOWS)
# define STAT win32_stat
+# define LSTAT win32_lstat
# define FSTAT win32_fstat
# define STRUCT_STAT struct win32_stat
#else
# define STAT stat
+# define LSTAT lstat
# define FSTAT fstat
# define STRUCT_STAT struct stat
#endif
@@ -351,6 +404,18 @@ static int win32_can_symlink = 0;
#endif
+#ifdef MS_WINDOWS
+static int
+win32_warn_bytes_api()
+{
+ return PyErr_WarnEx(PyExc_DeprecationWarning,
+ "The Windows bytes API has been deprecated, "
+ "use Unicode filenames instead",
+ 1);
+}
+#endif
+
+
#ifndef MS_WINDOWS
PyObject *
_PyLong_FromUid(uid_t uid)
@@ -478,6 +543,392 @@ OverflowUp:
#endif /* MS_WINDOWS */
+#ifdef AT_FDCWD
+/*
+ * Why the (int) cast? Solaris 10 defines AT_FDCWD as 0xffd19553 (-3041965);
+ * without the int cast, the value gets interpreted as uint (4291925331),
+ * which doesn't play nicely with all the initializer lines in this file that
+ * look like this:
+ * int dir_fd = DEFAULT_DIR_FD;
+ */
+#define DEFAULT_DIR_FD (int)AT_FDCWD
+#else
+#define DEFAULT_DIR_FD (-100)
+#endif
+
+static int
+_fd_converter(PyObject *o, int *p, const char *allowed)
+{
+ int overflow;
+ long long_value = PyLong_AsLongAndOverflow(o, &overflow);
+ if (PyFloat_Check(o) ||
+ (long_value == -1 && !overflow && PyErr_Occurred())) {
+ PyErr_Clear();
+ PyErr_Format(PyExc_TypeError,
+ "argument should be %s, not %.200s",
+ allowed, Py_TYPE(o)->tp_name);
+ return 0;
+ }
+ if (overflow > 0 || long_value > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError,
+ "signed integer is greater than maximum");
+ return 0;
+ }
+ if (overflow < 0 || long_value < INT_MIN) {
+ PyErr_SetString(PyExc_OverflowError,
+ "signed integer is less than minimum");
+ return 0;
+ }
+ *p = (int)long_value;
+ return 1;
+}
+
+static int
+dir_fd_converter(PyObject *o, void *p)
+{
+ if (o == Py_None) {
+ *(int *)p = DEFAULT_DIR_FD;
+ return 1;
+ }
+ return _fd_converter(o, (int *)p, "integer");
+}
+
+
+
+/*
+ * A PyArg_ParseTuple "converter" function
+ * that handles filesystem paths in the manner
+ * preferred by the os module.
+ *
+ * path_converter accepts (Unicode) strings and their
+ * subclasses, and bytes and their subclasses. What
+ * it does with the argument depends on the platform:
+ *
+ * * On Windows, if we get a (Unicode) string we
+ * extract the wchar_t * and return it; if we get
+ * bytes we extract the char * and return that.
+ *
+ * * On all other platforms, strings are encoded
+ * to bytes using PyUnicode_FSConverter, then we
+ * extract the char * from the bytes object and
+ * return that.
+ *
+ * path_converter also optionally accepts signed
+ * integers (representing open file descriptors) instead
+ * of path strings.
+ *
+ * Input fields:
+ * path.nullable
+ * If nonzero, the path is permitted to be None.
+ * path.allow_fd
+ * If nonzero, the path is permitted to be a file handle
+ * (a signed int) instead of a string.
+ * path.function_name
+ * If non-NULL, path_converter will use that as the name
+ * of the function in error messages.
+ * (If path.argument_name is NULL it omits the function name.)
+ * path.argument_name
+ * If non-NULL, path_converter will use that as the name
+ * of the parameter in error messages.
+ * (If path.argument_name is NULL it uses "path".)
+ *
+ * Output fields:
+ * path.wide
+ * Points to the path if it was expressed as Unicode
+ * and was not encoded. (Only used on Windows.)
+ * path.narrow
+ * Points to the path if it was expressed as bytes,
+ * or it was Unicode and was encoded to bytes.
+ * path.fd
+ * Contains a file descriptor if path.accept_fd was true
+ * and the caller provided a signed integer instead of any
+ * sort of string.
+ *
+ * WARNING: if your "path" parameter is optional, and is
+ * unspecified, path_converter will never get called.
+ * So if you set allow_fd, you *MUST* initialize path.fd = -1
+ * yourself!
+ * path.length
+ * The length of the path in characters, if specified as
+ * a string.
+ * path.object
+ * The original object passed in.
+ * path.cleanup
+ * For internal use only. May point to a temporary object.
+ * (Pay no attention to the man behind the curtain.)
+ *
+ * At most one of path.wide or path.narrow will be non-NULL.
+ * If path was None and path.nullable was set,
+ * or if path was an integer and path.allow_fd was set,
+ * both path.wide and path.narrow will be NULL
+ * and path.length will be 0.
+ *
+ * path_converter takes care to not write to the path_t
+ * unless it's successful. However it must reset the
+ * "cleanup" field each time it's called.
+ *
+ * Use as follows:
+ * path_t path;
+ * memset(&path, 0, sizeof(path));
+ * PyArg_ParseTuple(args, "O&", path_converter, &path);
+ * // ... use values from path ...
+ * path_cleanup(&path);
+ *
+ * (Note that if PyArg_Parse fails you don't need to call
+ * path_cleanup(). However it is safe to do so.)
+ */
+typedef struct {
+ char *function_name;
+ char *argument_name;
+ int nullable;
+ int allow_fd;
+ wchar_t *wide;
+ char *narrow;
+ int fd;
+ Py_ssize_t length;
+ PyObject *object;
+ PyObject *cleanup;
+} path_t;
+
+static void
+path_cleanup(path_t *path) {
+ if (path->cleanup) {
+ Py_CLEAR(path->cleanup);
+ }
+}
+
+static int
+path_converter(PyObject *o, void *p) {
+ path_t *path = (path_t *)p;
+ PyObject *unicode, *bytes;
+ Py_ssize_t length;
+ char *narrow;
+
+#define FORMAT_EXCEPTION(exc, fmt) \
+ PyErr_Format(exc, "%s%s" fmt, \
+ path->function_name ? path->function_name : "", \
+ path->function_name ? ": " : "", \
+ path->argument_name ? path->argument_name : "path")
+
+ /* Py_CLEANUP_SUPPORTED support */
+ if (o == NULL) {
+ path_cleanup(path);
+ return 1;
+ }
+
+ /* ensure it's always safe to call path_cleanup() */
+ path->cleanup = NULL;
+
+ if (o == Py_None) {
+ if (!path->nullable) {
+ FORMAT_EXCEPTION(PyExc_TypeError,
+ "can't specify None for %s argument");
+ return 0;
+ }
+ path->wide = NULL;
+ path->narrow = NULL;
+ path->length = 0;
+ path->object = o;
+ path->fd = -1;
+ return 1;
+ }
+
+ unicode = PyUnicode_FromObject(o);
+ if (unicode) {
+#ifdef MS_WINDOWS
+ wchar_t *wide;
+ length = PyUnicode_GET_SIZE(unicode);
+ if (length > 32767) {
+ FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows");
+ Py_DECREF(unicode);
+ return 0;
+ }
+
+ wide = PyUnicode_AsUnicode(unicode);
+ if (!wide) {
+ Py_DECREF(unicode);
+ return 0;
+ }
+
+ path->wide = wide;
+ path->narrow = NULL;
+ path->length = length;
+ path->object = o;
+ path->fd = -1;
+ path->cleanup = unicode;
+ return Py_CLEANUP_SUPPORTED;
+#else
+ int converted = PyUnicode_FSConverter(unicode, &bytes);
+ Py_DECREF(unicode);
+ if (!converted)
+ bytes = NULL;
+#endif
+ }
+ else {
+ PyErr_Clear();
+ if (PyObject_CheckBuffer(o))
+ bytes = PyBytes_FromObject(o);
+ else
+ bytes = NULL;
+ if (!bytes) {
+ PyErr_Clear();
+ if (path->allow_fd) {
+ int fd;
+ int result = _fd_converter(o, &fd,
+ "string, bytes or integer");
+ if (result) {
+ path->wide = NULL;
+ path->narrow = NULL;
+ path->length = 0;
+ path->object = o;
+ path->fd = fd;
+ return result;
+ }
+ }
+ }
+ }
+
+ if (!bytes) {
+ if (!PyErr_Occurred())
+ FORMAT_EXCEPTION(PyExc_TypeError, "illegal type for %s parameter");
+ return 0;
+ }
+
+#ifdef MS_WINDOWS
+ if (win32_warn_bytes_api()) {
+ Py_DECREF(bytes);
+ return 0;
+ }
+#endif
+
+ length = PyBytes_GET_SIZE(bytes);
+#ifdef MS_WINDOWS
+ if (length > MAX_PATH) {
+ FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows");
+ Py_DECREF(bytes);
+ return 0;
+ }
+#endif
+
+ narrow = PyBytes_AS_STRING(bytes);
+ if (length != strlen(narrow)) {
+ FORMAT_EXCEPTION(PyExc_ValueError, "embedded NUL character in %s");
+ Py_DECREF(bytes);
+ return 0;
+ }
+
+ path->wide = NULL;
+ path->narrow = narrow;
+ path->length = length;
+ path->object = o;
+ path->fd = -1;
+ path->cleanup = bytes;
+ return Py_CLEANUP_SUPPORTED;
+}
+
+static void
+argument_unavailable_error(char *function_name, char *argument_name) {
+ PyErr_Format(PyExc_NotImplementedError,
+ "%s%s%s unavailable on this platform",
+ (function_name != NULL) ? function_name : "",
+ (function_name != NULL) ? ": ": "",
+ argument_name);
+}
+
+static int
+dir_fd_unavailable(PyObject *o, void *p)
+{
+ int dir_fd;
+ if (!dir_fd_converter(o, &dir_fd))
+ return 0;
+ if (dir_fd != DEFAULT_DIR_FD) {
+ argument_unavailable_error(NULL, "dir_fd");
+ return 0;
+ }
+ *(int *)p = dir_fd;
+ return 1;
+}
+
+static int
+fd_specified(char *function_name, int fd) {
+ if (fd == -1)
+ return 0;
+
+ argument_unavailable_error(function_name, "fd");
+ return 1;
+}
+
+static int
+follow_symlinks_specified(char *function_name, int follow_symlinks) {
+ if (follow_symlinks)
+ return 0;
+
+ argument_unavailable_error(function_name, "follow_symlinks");
+ return 1;
+}
+
+static int
+path_and_dir_fd_invalid(char *function_name, path_t *path, int dir_fd) {
+ if (!path->narrow && !path->wide && (dir_fd != DEFAULT_DIR_FD)) {
+ PyErr_Format(PyExc_ValueError,
+ "%s: can't specify dir_fd without matching path",
+ function_name);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+dir_fd_and_fd_invalid(char *function_name, int dir_fd, int fd) {
+ if ((dir_fd != DEFAULT_DIR_FD) && (fd != -1)) {
+ PyErr_Format(PyExc_ValueError,
+ "%s: can't specify both dir_fd and fd",
+ function_name);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+fd_and_follow_symlinks_invalid(char *function_name, int fd,
+ int follow_symlinks) {
+ if ((fd > 0) && (!follow_symlinks)) {
+ PyErr_Format(PyExc_ValueError,
+ "%s: cannot use fd and follow_symlinks together",
+ function_name);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+dir_fd_and_follow_symlinks_invalid(char *function_name, int dir_fd,
+ int follow_symlinks) {
+ if ((dir_fd != DEFAULT_DIR_FD) && (!follow_symlinks)) {
+ PyErr_Format(PyExc_ValueError,
+ "%s: cannot use dir_fd and follow_symlinks together",
+ function_name);
+ return 1;
+ }
+ return 0;
+}
+
+/* A helper used by a number of POSIX-only functions */
+#ifndef MS_WINDOWS
+static int
+_parse_off_t(PyObject* arg, void* addr)
+{
+#if !defined(HAVE_LARGEFILE_SUPPORT)
+ *((off_t*)addr) = PyLong_AsLong(arg);
+#else
+ *((off_t*)addr) = PyLong_AsLongLong(arg);
+#endif
+ if (PyErr_Occurred())
+ return 0;
+ return 1;
+}
+#endif
+
#if defined _MSC_VER && _MSC_VER >= 1400
/* Microsoft CRT in VS2005 and higher will verify that a filehandle is
* valid and raise an assertion if it isn't.
@@ -629,6 +1080,7 @@ win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag)
return TRUE;
}
+
#endif /* MS_WINDOWS */
/* Return a dictionary corresponding to the POSIX environment table */
@@ -785,7 +1237,7 @@ win32_error(char* function, const char* filename)
}
static PyObject *
-win32_error_unicode(char* function, Py_UNICODE* filename)
+win32_error_unicode(char* function, wchar_t* filename)
{
/* XXX - see win32_error for comments on 'function' */
errno = GetLastError();
@@ -795,25 +1247,48 @@ win32_error_unicode(char* function, Py_UNICODE* filename)
return PyErr_SetFromWindowsErr(errno);
}
-static int
-convert_to_unicode(PyObject **param)
-{
- if (PyUnicode_CheckExact(*param))
- Py_INCREF(*param);
- else if (PyUnicode_Check(*param))
- /* For a Unicode subtype that's not a Unicode object,
- return a true Unicode object with the same data. */
- *param = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(*param),
- PyUnicode_GET_SIZE(*param));
+static PyObject *
+win32_error_object(char* function, PyObject* filename)
+{
+ /* XXX - see win32_error for comments on 'function' */
+ errno = GetLastError();
+ if (filename)
+ return PyErr_SetExcFromWindowsErrWithFilenameObject(
+ PyExc_WindowsError,
+ errno,
+ filename);
else
- *param = PyUnicode_FromEncodedObject(*param,
- Py_FileSystemDefaultEncoding,
- "strict");
- return (*param) != NULL;
+ return PyErr_SetFromWindowsErr(errno);
}
#endif /* MS_WINDOWS */
+/*
+ * Some functions return Win32 errors, others only ever use posix_error
+ * (this is for backwards compatibility with exceptions)
+ */
+static PyObject *
+path_posix_error(char *function_name, path_t *path)
+{
+ if (path->narrow)
+ return posix_error_with_filename(path->narrow);
+ return posix_error();
+}
+
+static PyObject *
+path_error(char *function_name, path_t *path)
+{
+#ifdef MS_WINDOWS
+ if (path->narrow)
+ return win32_error(function_name, path->narrow);
+ if (path->wide)
+ return win32_error_unicode(function_name, path->wide);
+ return win32_error(function_name, NULL);
+#else
+ return path_posix_error(function_name, path);
+#endif
+}
+
#if defined(PYOS_OS2)
/**********************************************************************
* Helper Function to Trim and Format OS/2 Messages
@@ -932,32 +1407,6 @@ posix_1str(PyObject *args, char *format, int (*func)(const char*))
return Py_None;
}
-static PyObject *
-posix_2str(PyObject *args,
- char *format,
- int (*func)(const char *, const char *))
-{
- PyObject *opath1 = NULL, *opath2 = NULL;
- char *path1, *path2;
- int res;
- if (!PyArg_ParseTuple(args, format,
- PyUnicode_FSConverter, &opath1,
- PyUnicode_FSConverter, &opath2)) {
- return NULL;
- }
- path1 = PyBytes_AsString(opath1);
- path2 = PyBytes_AsString(opath2);
- Py_BEGIN_ALLOW_THREADS
- res = (*func)(path1, path2);
- Py_END_ALLOW_THREADS
- Py_DECREF(opath1);
- Py_DECREF(opath2);
- if (res != 0)
- /* XXX how to report both path1 and path2??? */
- return posix_error();
- Py_INCREF(Py_None);
- return Py_None;
-}
#ifdef MS_WINDOWS
static PyObject*
@@ -966,22 +1415,28 @@ win32_1str(PyObject* args, char* func,
char* wformat, BOOL (__stdcall *funcW)(LPWSTR))
{
PyObject *uni;
- char *ansi;
+ const char *ansi;
BOOL result;
- if (!PyArg_ParseTuple(args, wformat, &uni))
- PyErr_Clear();
- else {
+ if (PyArg_ParseTuple(args, wformat, &uni))
+ {
+ wchar_t *wstr = PyUnicode_AsUnicode(uni);
+ if (wstr == NULL)
+ return NULL;
Py_BEGIN_ALLOW_THREADS
- result = funcW(PyUnicode_AsUnicode(uni));
+ result = funcW(wstr);
Py_END_ALLOW_THREADS
if (!result)
- return win32_error_unicode(func, PyUnicode_AsUnicode(uni));
+ return win32_error_object(func, uni);
Py_INCREF(Py_None);
return Py_None;
}
+ PyErr_Clear();
+
if (!PyArg_ParseTuple(args, format, &ansi))
return NULL;
+ if (win32_warn_bytes_api())
+ return NULL;
Py_BEGIN_ALLOW_THREADS
result = funcA(ansi);
Py_END_ALLOW_THREADS
@@ -1196,18 +1651,19 @@ attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *
/* Grab GetFinalPathNameByHandle dynamically from kernel32 */
static int has_GetFinalPathNameByHandle = 0;
-static DWORD (CALLBACK *Py_GetFinalPathNameByHandleA)(HANDLE, LPSTR, DWORD,
- DWORD);
static DWORD (CALLBACK *Py_GetFinalPathNameByHandleW)(HANDLE, LPWSTR, DWORD,
DWORD);
static int
check_GetFinalPathNameByHandle()
{
HINSTANCE hKernel32;
+ DWORD (CALLBACK *Py_GetFinalPathNameByHandleA)(HANDLE, LPSTR, DWORD,
+ DWORD);
+
/* only recheck */
if (!has_GetFinalPathNameByHandle)
{
- hKernel32 = GetModuleHandle("KERNEL32");
+ hKernel32 = GetModuleHandleW(L"KERNEL32");
*(FARPROC*)&Py_GetFinalPathNameByHandleA = GetProcAddress(hKernel32,
"GetFinalPathNameByHandleA");
*(FARPROC*)&Py_GetFinalPathNameByHandleW = GetProcAddress(hKernel32,
@@ -1285,7 +1741,7 @@ win32_xstat_impl(const char *path, struct win32_stat *result,
/* FILE_FLAG_BACKUP_SEMANTICS is required to open a directory */
/* FILE_FLAG_OPEN_REPARSE_POINT does not follow the symlink.
Because of this, calls like GetFinalPathNameByHandle will return
- the symlink path agin and not the actual final path. */
+ the symlink path again and not the actual final path. */
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS|
FILE_FLAG_OPEN_REPARSE_POINT,
NULL);
@@ -1381,7 +1837,7 @@ win32_xstat_impl_w(const wchar_t *path, struct win32_stat *result,
/* FILE_FLAG_BACKUP_SEMANTICS is required to open a directory */
/* FILE_FLAG_OPEN_REPARSE_POINT does not follow the symlink.
Because of this, calls like GetFinalPathNameByHandle will return
- the symlink path agin and not the actual final path. */
+ the symlink path again and not the actual final path. */
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS|
FILE_FLAG_OPEN_REPARSE_POINT,
NULL);
@@ -1514,7 +1970,10 @@ win32_fstat(int file_number, struct win32_stat *result)
HANDLE h;
int type;
- h = (HANDLE)_get_osfhandle(file_number);
+ if (!_PyVerify_fd(file_number))
+ h = INVALID_HANDLE_VALUE;
+ else
+ h = (HANDLE)_get_osfhandle(file_number);
/* Protocol violation: we explicitly clear errno, instead of
setting it to a POSIX error. Callers should use GetLastError. */
@@ -1558,7 +2017,7 @@ win32_fstat(int file_number, struct win32_stat *result)
#endif /* MS_WINDOWS */
PyDoc_STRVAR(stat_result__doc__,
-"stat_result: Result from stat or lstat.\n\n\
+"stat_result: Result from stat, fstat, or lstat.\n\n\
This object may be accessed either as a tuple of\n\
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)\n\
or via the attributes st_mode, st_ino, st_dev, st_nlink, st_uid, and so on.\n\
@@ -1583,6 +2042,9 @@ static PyStructSequence_Field stat_result_fields[] = {
{"st_atime", "time of last access"},
{"st_mtime", "time of last modification"},
{"st_ctime", "time of last change"},
+ {"st_atime_ns", "time of last access in nanoseconds"},
+ {"st_mtime_ns", "time of last modification in nanoseconds"},
+ {"st_ctime_ns", "time of last change in nanoseconds"},
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
{"st_blksize", "blocksize for filesystem I/O"},
#endif
@@ -1605,9 +2067,9 @@ static PyStructSequence_Field stat_result_fields[] = {
};
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
-#define ST_BLKSIZE_IDX 13
+#define ST_BLKSIZE_IDX 16
#else
-#define ST_BLKSIZE_IDX 12
+#define ST_BLKSIZE_IDX 15
#endif
#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
@@ -1676,9 +2138,39 @@ static PyStructSequence_Desc statvfs_result_desc = {
10
};
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+PyDoc_STRVAR(waitid_result__doc__,
+"waitid_result: Result from waitid.\n\n\
+This object may be accessed either as a tuple of\n\
+ (si_pid, si_uid, si_signo, si_status, si_code),\n\
+or via the attributes si_pid, si_uid, and so on.\n\
+\n\
+See os.waitid for more information.");
+
+static PyStructSequence_Field waitid_result_fields[] = {
+ {"si_pid", },
+ {"si_uid", },
+ {"si_signo", },
+ {"si_status", },
+ {"si_code", },
+ {0}
+};
+
+static PyStructSequence_Desc waitid_result_desc = {
+ "waitid_result", /* name */
+ waitid_result__doc__, /* doc */
+ waitid_result_fields,
+ 5
+};
+static PyTypeObject WaitidResultType;
+#endif
+
static int initialized;
static PyTypeObject StatResultType;
static PyTypeObject StatVFSResultType;
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER)
+static PyTypeObject SchedParamType;
+#endif
static newfunc structseq_new;
static PyObject *
@@ -1721,6 +2213,10 @@ stat_float_times(PyObject* self, PyObject *args)
int newval = -1;
if (!PyArg_ParseTuple(args, "|i:stat_float_times", &newval))
return NULL;
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "stat_float_times() is deprecated",
+ 1))
+ return NULL;
if (newval == -1)
/* Return old value */
return PyBool_FromLong(_stat_float_times);
@@ -1729,25 +2225,50 @@ stat_float_times(PyObject* self, PyObject *args)
return Py_None;
}
+static PyObject *billion = NULL;
+
static void
fill_time(PyObject *v, int index, time_t sec, unsigned long nsec)
{
- PyObject *fval,*ival;
-#if SIZEOF_TIME_T > SIZEOF_LONG
- ival = PyLong_FromLongLong((PY_LONG_LONG)sec);
-#else
- ival = PyLong_FromLong((long)sec);
-#endif
- if (!ival)
- return;
+ PyObject *s = _PyLong_FromTime_t(sec);
+ PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec);
+ PyObject *s_in_ns = NULL;
+ PyObject *ns_total = NULL;
+ PyObject *float_s = NULL;
+
+ if (!(s && ns_fractional))
+ goto exit;
+
+ s_in_ns = PyNumber_Multiply(s, billion);
+ if (!s_in_ns)
+ goto exit;
+
+ ns_total = PyNumber_Add(s_in_ns, ns_fractional);
+ if (!ns_total)
+ goto exit;
+
if (_stat_float_times) {
- fval = PyFloat_FromDouble(sec + 1e-9*nsec);
- } else {
- fval = ival;
- Py_INCREF(fval);
+ float_s = PyFloat_FromDouble(sec + 1e-9*nsec);
+ if (!float_s)
+ goto exit;
}
- PyStructSequence_SET_ITEM(v, index, ival);
- PyStructSequence_SET_ITEM(v, index+3, fval);
+ else {
+ float_s = s;
+ Py_INCREF(float_s);
+ }
+
+ PyStructSequence_SET_ITEM(v, index, s);
+ PyStructSequence_SET_ITEM(v, index+3, float_s);
+ PyStructSequence_SET_ITEM(v, index+6, ns_total);
+ s = NULL;
+ float_s = NULL;
+ ns_total = NULL;
+exit:
+ Py_XDECREF(s);
+ Py_XDECREF(ns_fractional);
+ Py_XDECREF(s_in_ns);
+ Py_XDECREF(ns_total);
+ Py_XDECREF(float_s);
}
/* pack a system stat C structure into the Python stat tuple
@@ -1855,126 +2376,238 @@ _pystat_fromstructstat(STRUCT_STAT *st)
return v;
}
+/* POSIX methods */
+
+
static PyObject *
-posix_do_stat(PyObject *self, PyObject *args,
- char *format,
-#ifdef __VMS
- int (*statfunc)(const char *, STRUCT_STAT *, ...),
-#else
- int (*statfunc)(const char *, STRUCT_STAT *),
-#endif
- char *wformat,
- int (*wstatfunc)(const Py_UNICODE *, STRUCT_STAT *))
+posix_do_stat(char *function_name, path_t *path,
+ int dir_fd, int follow_symlinks)
{
STRUCT_STAT st;
- PyObject *opath;
- char *path;
- int res;
- PyObject *result;
-
-#ifdef MS_WINDOWS
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, wformat, &po)) {
- Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
-
- Py_BEGIN_ALLOW_THREADS
- /* PyUnicode_AS_UNICODE result OK without
- thread lock as it is a simple dereference. */
- res = wstatfunc(wpath, &st);
- Py_END_ALLOW_THREADS
+ int result;
- if (res != 0)
- return win32_error_unicode("stat", wpath);
- return _pystat_fromstructstat(&st);
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
+#if !defined(MS_WINDOWS) && !defined(HAVE_FSTATAT) && !defined(HAVE_LSTAT)
+ if (follow_symlinks_specified(function_name, follow_symlinks))
+ return NULL;
#endif
- if (!PyArg_ParseTuple(args, format,
- PyUnicode_FSConverter, &opath))
+ if (path_and_dir_fd_invalid("stat", path, dir_fd) ||
+ dir_fd_and_fd_invalid("stat", dir_fd, path->fd) ||
+ fd_and_follow_symlinks_invalid("stat", path->fd, follow_symlinks))
return NULL;
- path = PyBytes_AsString(opath);
- Py_BEGIN_ALLOW_THREADS
- res = (*statfunc)(path, &st);
- Py_END_ALLOW_THREADS
- if (res != 0) {
+ Py_BEGIN_ALLOW_THREADS
+ if (path->fd != -1)
+ result = FSTAT(path->fd, &st);
+ else
#ifdef MS_WINDOWS
- result = win32_error("stat", path);
-#else
- result = posix_error_with_filename(path);
-#endif
+ if (path->wide) {
+ if (follow_symlinks)
+ result = win32_stat_w(path->wide, &st);
+ else
+ result = win32_lstat_w(path->wide, &st);
}
else
- result = _pystat_fromstructstat(&st);
+#endif
+#if defined(HAVE_LSTAT) || defined(MS_WINDOWS)
+ if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
+ result = LSTAT(path->narrow, &st);
+ else
+#endif
+#ifdef HAVE_FSTATAT
+ if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks)
+ result = fstatat(dir_fd, path->narrow, &st,
+ follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
+ else
+#endif
+ result = STAT(path->narrow, &st);
+ Py_END_ALLOW_THREADS
- Py_DECREF(opath);
- return result;
+ if (result != 0)
+ return path_error("stat", path);
+
+ return _pystat_fromstructstat(&st);
}
-/* POSIX methods */
+PyDoc_STRVAR(posix_stat__doc__,
+"stat(path, *, dir_fd=None, follow_symlinks=True) -> stat result\n\n\
+Perform a stat system call on the given path.\n\
+\n\
+path may be specified as either a string or as an open file descriptor.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+ dir_fd may not be supported on your platform; if it is unavailable, using\n\
+ it will raise a NotImplementedError.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, stat will examine the symbolic link itself instead of the file the\n\
+ link points to.\n\
+It is an error to use dir_fd or follow_symlinks when specifying path as\n\
+ an open file descriptor.");
+
+static PyObject *
+posix_stat(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *keywords[] = {"path", "dir_fd", "follow_symlinks", NULL};
+ path_t path;
+ int dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 1;
+ PyObject *return_value;
+
+ memset(&path, 0, sizeof(path));
+ path.allow_fd = 1;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", keywords,
+ path_converter, &path,
+#ifdef HAVE_FSTATAT
+ dir_fd_converter, &dir_fd,
+#else
+ dir_fd_unavailable, &dir_fd,
+#endif
+ &follow_symlinks))
+ return NULL;
+ return_value = posix_do_stat("stat", &path, dir_fd, follow_symlinks);
+ path_cleanup(&path);
+ return return_value;
+}
+
+PyDoc_STRVAR(posix_lstat__doc__,
+"lstat(path, *, dir_fd=None) -> stat result\n\n\
+Like stat(), but do not follow symbolic links.\n\
+Equivalent to stat(path, follow_symlinks=False).");
+
+static PyObject *
+posix_lstat(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *keywords[] = {"path", "dir_fd", NULL};
+ path_t path;
+ int dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 0;
+ PyObject *return_value;
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:lstat", keywords,
+ path_converter, &path,
+#ifdef HAVE_FSTATAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
+ return NULL;
+ return_value = posix_do_stat("stat", &path, dir_fd, follow_symlinks);
+ path_cleanup(&path);
+ return return_value;
+}
PyDoc_STRVAR(posix_access__doc__,
-"access(path, mode) -> True if granted, False otherwise\n\n\
-Use the real uid/gid to test for access to a path. Note that most\n\
-operations will use the effective uid/gid, therefore this routine can\n\
-be used in a suid/sgid environment to test if the invoking user has the\n\
-specified access to the path. The mode argument can be F_OK to test\n\
-existence, or the inclusive-OR of R_OK, W_OK, and X_OK.");
+"access(path, mode, *, dir_fd=None, effective_ids=False,\
+ follow_symlinks=True)\n\n\
+Use the real uid/gid to test for access to a path. Returns True if granted,\n\
+False otherwise.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+If effective_ids is True, access will use the effective uid/gid instead of\n\
+ the real uid/gid.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, access will examine the symbolic link itself instead of the file the\n\
+ link points to.\n\
+dir_fd, effective_ids, and follow_symlinks may not be implemented\n\
+ on your platform. If they are unavailable, using them will raise a\n\
+ NotImplementedError.\n\
+\n\
+Note that most operations will use the effective uid/gid, therefore this\n\
+ routine can be used in a suid/sgid environment to test if the invoking user\n\
+ has the specified access to the path.\n\
+The mode argument can be F_OK to test existence, or the inclusive-OR\n\
+ of R_OK, W_OK, and X_OK.");
static PyObject *
-posix_access(PyObject *self, PyObject *args)
+posix_access(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath;
- char *path;
+ static char *keywords[] = {"path", "mode", "dir_fd", "effective_ids",
+ "follow_symlinks", NULL};
+ path_t path;
int mode;
+ int dir_fd = DEFAULT_DIR_FD;
+ int effective_ids = 0;
+ int follow_symlinks = 1;
+ PyObject *return_value = NULL;
#ifdef MS_WINDOWS
DWORD attr;
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, "Ui:access", &po, &mode)) {
- Py_BEGIN_ALLOW_THREADS
- /* PyUnicode_AS_UNICODE OK without thread lock as
- it is a simple dereference. */
- attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
- Py_END_ALLOW_THREADS
- goto finish;
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
- if (!PyArg_ParseTuple(args, "O&i:access",
- PyUnicode_FSConverter, &opath, &mode))
+#else
+ int result;
+#endif
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", keywords,
+ path_converter, &path, &mode,
+#ifdef HAVE_FACCESSAT
+ dir_fd_converter, &dir_fd,
+#else
+ dir_fd_unavailable, &dir_fd,
+#endif
+ &effective_ids, &follow_symlinks))
return NULL;
- path = PyBytes_AsString(opath);
+
+#ifndef HAVE_FACCESSAT
+ if (follow_symlinks_specified("access", follow_symlinks))
+ goto exit;
+
+ if (effective_ids) {
+ argument_unavailable_error("access", "effective_ids");
+ goto exit;
+ }
+#endif
+
+#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
- attr = GetFileAttributesA(path);
+ if (path.wide != NULL)
+ attr = GetFileAttributesW(path.wide);
+ else
+ attr = GetFileAttributesA(path.narrow);
Py_END_ALLOW_THREADS
- Py_DECREF(opath);
-finish:
- if (attr == 0xFFFFFFFF)
- /* File does not exist, or cannot read attributes */
- return PyBool_FromLong(0);
- /* Access is possible if either write access wasn't requested, or
- the file isn't read-only, or if it's a directory, as there are
- no read-only directories on Windows. */
- return PyBool_FromLong(!(mode & 2)
- || !(attr & FILE_ATTRIBUTE_READONLY)
- || (attr & FILE_ATTRIBUTE_DIRECTORY));
+
+ /*
+ * Access is possible if
+ * * we didn't get a -1, and
+ * * write access wasn't requested,
+ * * or the file isn't read-only,
+ * * or it's a directory.
+ * (Directories cannot be read-only on Windows.)
+ */
+ return_value = PyBool_FromLong(
+ (attr != 0xFFFFFFFF) &&
+ (!(mode & 2) ||
+ !(attr & FILE_ATTRIBUTE_READONLY) ||
+ (attr & FILE_ATTRIBUTE_DIRECTORY)));
#else
- int res;
- if (!PyArg_ParseTuple(args, "O&i:access",
- PyUnicode_FSConverter, &opath, &mode))
- return NULL;
- path = PyBytes_AsString(opath);
+
Py_BEGIN_ALLOW_THREADS
- res = access(path, mode);
+#ifdef HAVE_FACCESSAT
+ if ((dir_fd != DEFAULT_DIR_FD) ||
+ effective_ids ||
+ !follow_symlinks) {
+ int flags = 0;
+ if (!follow_symlinks)
+ flags |= AT_SYMLINK_NOFOLLOW;
+ if (effective_ids)
+ flags |= AT_EACCESS;
+ result = faccessat(dir_fd, path.narrow, mode, flags);
+ }
+ else
+#endif
+ result = access(path.narrow, mode);
Py_END_ALLOW_THREADS
- Py_DECREF(opath);
- return PyBool_FromLong(res == 0);
+ return_value = PyBool_FromLong(!result);
+#endif
+
+#ifndef HAVE_FACCESSAT
+exit:
#endif
+ path_cleanup(&path);
+ return return_value;
}
#ifndef F_OK
@@ -2045,27 +2678,66 @@ posix_ctermid(PyObject *self, PyObject *noargs)
PyDoc_STRVAR(posix_chdir__doc__,
"chdir(path)\n\n\
-Change the current working directory to the specified path.");
+Change the current working directory to the specified path.\n\
+\n\
+path may always be specified as a string.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.");
static PyObject *
-posix_chdir(PyObject *self, PyObject *args)
+posix_chdir(PyObject *self, PyObject *args, PyObject *kwargs)
{
+ path_t path;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", NULL};
+
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FCHDIR
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chdir", keywords,
+ path_converter, &path
+ ))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
- return win32_1str(args, "chdir", "y:chdir", win32_chdir, "U:chdir", win32_wchdir);
+ if (path.wide)
+ result = win32_wchdir(path.wide);
+ else
+ result = win32_chdir(path.narrow);
+ result = !result; /* on unix, success = 0, on windows, success = !0 */
#elif defined(PYOS_OS2) && defined(PYCC_GCC)
- return posix_1str(args, "O&:chdir", _chdir2);
-#elif defined(__VMS)
- return posix_1str(args, "O&:chdir", (int (*)(const char *))chdir);
+ result = _chdir2(path.narrow);
#else
- return posix_1str(args, "O&:chdir", chdir);
+#ifdef HAVE_FCHDIR
+ if (path.fd != -1)
+ result = fchdir(path.fd);
+ else
+#endif
+ result = chdir(path.narrow);
#endif
+ Py_END_ALLOW_THREADS
+
+ if (result) {
+ return_value = path_error("chdir", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#ifdef HAVE_FCHDIR
PyDoc_STRVAR(posix_fchdir__doc__,
-"fchdir(fildes)\n\n\
-Change to the directory of the given file descriptor. fildes must be\n\
-opened on a directory, not a file.");
+"fchdir(fd)\n\n\
+Change to the directory of the given file descriptor. fd must be\n\
+opened on a directory, not a file. Equivalent to os.chdir(fd).");
static PyObject *
posix_fchdir(PyObject *self, PyObject *fdobj)
@@ -2076,87 +2748,155 @@ posix_fchdir(PyObject *self, PyObject *fdobj)
PyDoc_STRVAR(posix_chmod__doc__,
-"chmod(path, mode)\n\n\
-Change the access permissions of a file.");
+"chmod(path, mode, *, dir_fd=None, follow_symlinks=True)\n\n\
+Change the access permissions of a file.\n\
+\n\
+path may always be specified as a string.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, chmod will modify the symbolic link itself instead of the file the\n\
+ link points to.\n\
+It is an error to use dir_fd or follow_symlinks when specifying path as\n\
+ an open file descriptor.\n\
+dir_fd and follow_symlinks may not be implemented on your platform.\n\
+ If they are unavailable, using them will raise a NotImplementedError.");
+
+static PyObject *
+posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ int mode;
+ int dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 1;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "mode", "dir_fd",
+ "follow_symlinks", NULL};
-static PyObject *
-posix_chmod(PyObject *self, PyObject *args)
-{
- PyObject *opath = NULL;
- char *path = NULL;
- int i;
- int res;
#ifdef MS_WINDOWS
DWORD attr;
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, "Ui|:chmod", &po, &i)) {
- Py_BEGIN_ALLOW_THREADS
- attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
- if (attr != 0xFFFFFFFF) {
- if (i & _S_IWRITE)
- attr &= ~FILE_ATTRIBUTE_READONLY;
- else
- attr |= FILE_ATTRIBUTE_READONLY;
- res = SetFileAttributesW(PyUnicode_AS_UNICODE(po), attr);
- }
- else
- res = 0;
- Py_END_ALLOW_THREADS
- if (!res)
- return win32_error_unicode("chmod",
- PyUnicode_AS_UNICODE(po));
- Py_INCREF(Py_None);
- return Py_None;
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
+#endif
- if (!PyArg_ParseTuple(args, "O&i:chmod", PyUnicode_FSConverter,
- &opath, &i))
+#ifdef HAVE_FCHMODAT
+ int fchmodat_nofollow_unsupported = 0;
+#endif
+
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FCHMOD
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&p:chmod", keywords,
+ path_converter, &path,
+ &mode,
+#ifdef HAVE_FCHMODAT
+ dir_fd_converter, &dir_fd,
+#else
+ dir_fd_unavailable, &dir_fd,
+#endif
+ &follow_symlinks))
return NULL;
- path = PyBytes_AsString(opath);
+
+#if !(defined(HAVE_FCHMODAT) || defined(HAVE_LCHMOD))
+ if (follow_symlinks_specified("chmod", follow_symlinks))
+ goto exit;
+#endif
+
+#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
- attr = GetFileAttributesA(path);
- if (attr != 0xFFFFFFFF) {
- if (i & _S_IWRITE)
+ if (path.wide)
+ attr = GetFileAttributesW(path.wide);
+ else
+ attr = GetFileAttributesA(path.narrow);
+ if (attr == 0xFFFFFFFF)
+ result = 0;
+ else {
+ if (mode & _S_IWRITE)
attr &= ~FILE_ATTRIBUTE_READONLY;
else
attr |= FILE_ATTRIBUTE_READONLY;
- res = SetFileAttributesA(path, attr);
+ if (path.wide)
+ result = SetFileAttributesW(path.wide, attr);
+ else
+ result = SetFileAttributesA(path.narrow, attr);
}
- else
- res = 0;
Py_END_ALLOW_THREADS
- if (!res) {
- win32_error("chmod", path);
- Py_DECREF(opath);
- return NULL;
+
+ if (!result) {
+ return_value = win32_error_object("chmod", path.object);
+ goto exit;
}
- Py_DECREF(opath);
- Py_INCREF(Py_None);
- return Py_None;
#else /* MS_WINDOWS */
- if (!PyArg_ParseTuple(args, "O&i:chmod", PyUnicode_FSConverter,
- &opath, &i))
- return NULL;
- path = PyBytes_AsString(opath);
Py_BEGIN_ALLOW_THREADS
- res = chmod(path, i);
+#ifdef HAVE_FCHMOD
+ if (path.fd != -1)
+ result = fchmod(path.fd, mode);
+ else
+#endif
+#ifdef HAVE_LCHMOD
+ if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
+ result = lchmod(path.narrow, mode);
+ else
+#endif
+#ifdef HAVE_FCHMODAT
+ if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
+ /*
+ * fchmodat() doesn't currently support AT_SYMLINK_NOFOLLOW!
+ * The documentation specifically shows how to use it,
+ * and then says it isn't implemented yet.
+ * (true on linux with glibc 2.15, and openindiana 3.x)
+ *
+ * Once it is supported, os.chmod will automatically
+ * support dir_fd and follow_symlinks=False. (Hopefully.)
+ * Until then, we need to be careful what exception we raise.
+ */
+ result = fchmodat(dir_fd, path.narrow, mode,
+ follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
+ /*
+ * But wait! We can't throw the exception without allowing threads,
+ * and we can't do that in this nested scope. (Macro trickery, sigh.)
+ */
+ fchmodat_nofollow_unsupported =
+ result &&
+ ((errno == ENOTSUP) || (errno == EOPNOTSUPP)) &&
+ !follow_symlinks;
+ }
+ else
+#endif
+ result = chmod(path.narrow, mode);
Py_END_ALLOW_THREADS
- if (res < 0)
- return posix_error_with_allocated_filename(opath);
- Py_DECREF(opath);
- Py_INCREF(Py_None);
- return Py_None;
+
+ if (result) {
+#ifdef HAVE_FCHMODAT
+ if (fchmodat_nofollow_unsupported) {
+ if (dir_fd != DEFAULT_DIR_FD)
+ dir_fd_and_follow_symlinks_invalid("chmod",
+ dir_fd, follow_symlinks);
+ else
+ follow_symlinks_specified("chmod", follow_symlinks);
+ }
+ else
#endif
+ return_value = path_error("chmod", &path);
+ goto exit;
+ }
+#endif
+
+ Py_INCREF(Py_None);
+ return_value = Py_None;
+exit:
+ path_cleanup(&path);
+ return return_value;
}
+
#ifdef HAVE_FCHMOD
PyDoc_STRVAR(posix_fchmod__doc__,
"fchmod(fd, mode)\n\n\
Change the access permissions of the file given by file\n\
-descriptor fd.");
+descriptor fd. Equivalent to os.chmod(fd, mode).");
static PyObject *
posix_fchmod(PyObject *self, PyObject *args)
@@ -2177,7 +2917,8 @@ posix_fchmod(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_lchmod__doc__,
"lchmod(path, mode)\n\n\
Change the access permissions of a file. If path is a symlink, this\n\
-affects the link itself rather than the target.");
+affects the link itself rather than the target.\n\
+Equivalent to chmod(path, mode, follow_symlinks=False).");
static PyObject *
posix_lchmod(PyObject *self, PyObject *args)
@@ -2203,28 +2944,56 @@ posix_lchmod(PyObject *self, PyObject *args)
#ifdef HAVE_CHFLAGS
PyDoc_STRVAR(posix_chflags__doc__,
-"chflags(path, flags)\n\n\
-Set file flags.");
+"chflags(path, flags, *, follow_symlinks=True)\n\n\
+Set file flags.\n\
+\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, chflags will change flags on the symbolic link itself instead of the\n\
+ file the link points to.\n\
+follow_symlinks may not be implemented on your platform. If it is\n\
+unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_chflags(PyObject *self, PyObject *args)
+posix_chflags(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath;
- char *path;
+ path_t path;
unsigned long flags;
- int res;
- if (!PyArg_ParseTuple(args, "O&k:chflags",
- PyUnicode_FSConverter, &opath, &flags))
+ int follow_symlinks = 1;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "flags", "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k|$i:chflags", keywords,
+ path_converter, &path,
+ &flags, &follow_symlinks))
return NULL;
- path = PyBytes_AsString(opath);
+
+#ifndef HAVE_LCHFLAGS
+ if (follow_symlinks_specified("chflags", follow_symlinks))
+ goto exit;
+#endif
+
Py_BEGIN_ALLOW_THREADS
- res = chflags(path, flags);
+#ifdef HAVE_LCHFLAGS
+ if (!follow_symlinks)
+ result = lchflags(path.narrow, flags);
+ else
+#endif
+ result = chflags(path.narrow, flags);
Py_END_ALLOW_THREADS
- if (res < 0)
- return posix_error_with_allocated_filename(opath);
- Py_DECREF(opath);
+
+ if (result) {
+ return_value = path_posix_error("chflags", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
Py_INCREF(Py_None);
- return Py_None;
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#endif /* HAVE_CHFLAGS */
@@ -2232,7 +3001,8 @@ posix_chflags(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_lchflags__doc__,
"lchflags(path, flags)\n\n\
Set file flags.\n\
-This function will not follow symbolic links.");
+This function will not follow symbolic links.\n\
+Equivalent to chflags(path, flags, follow_symlinks=False).");
static PyObject *
posix_lchflags(PyObject *self, PyObject *args)
@@ -2280,6 +3050,21 @@ posix_fsync(PyObject *self, PyObject *fdobj)
}
#endif /* HAVE_FSYNC */
+#ifdef HAVE_SYNC
+PyDoc_STRVAR(posix_sync__doc__,
+"sync()\n\n\
+Force write of everything to disk.");
+
+static PyObject *
+posix_sync(PyObject *self, PyObject *noargs)
+{
+ Py_BEGIN_ALLOW_THREADS
+ sync();
+ Py_END_ALLOW_THREADS
+ Py_RETURN_NONE;
+}
+#endif
+
#ifdef HAVE_FDATASYNC
#ifdef __hpux
@@ -2301,31 +3086,103 @@ posix_fdatasync(PyObject *self, PyObject *fdobj)
#ifdef HAVE_CHOWN
PyDoc_STRVAR(posix_chown__doc__,
-"chown(path, uid, gid)\n\n\
-Change the owner and group id of path to the numeric uid and gid.");
-
-static PyObject *
-posix_chown(PyObject *self, PyObject *args)
-{
- PyObject *opath;
- char *path;
+"chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n\n\
+Change the owner and group id of path to the numeric uid and gid.\n\
+\n\
+path may always be specified as a string.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, chown will modify the symbolic link itself instead of the file the\n\
+ link points to.\n\
+It is an error to use dir_fd or follow_symlinks when specifying path as\n\
+ an open file descriptor.\n\
+dir_fd and follow_symlinks may not be implemented on your platform.\n\
+ If they are unavailable, using them will raise a NotImplementedError.");
+
+static PyObject *
+posix_chown(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
uid_t uid;
gid_t gid;
- int res;
- if (!PyArg_ParseTuple(args, "O&O&O&:chown",
- PyUnicode_FSConverter, &opath,
- _Py_Uid_Converter, &uid,
- _Py_Gid_Converter, &gid))
+ int dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 1;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "uid", "gid", "dir_fd",
+ "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FCHOWN
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", keywords,
+ path_converter, &path,
+ _Py_Uid_Converter, &uid,
+ _Py_Gid_Converter, &gid,
+#ifdef HAVE_FCHOWNAT
+ dir_fd_converter, &dir_fd,
+#else
+ dir_fd_unavailable, &dir_fd,
+#endif
+ &follow_symlinks))
return NULL;
- path = PyBytes_AsString(opath);
+
+#if !(defined(HAVE_LCHOWN) || defined(HAVE_FCHOWNAT))
+ if (follow_symlinks_specified("chown", follow_symlinks))
+ goto exit;
+#endif
+ if (dir_fd_and_fd_invalid("chown", dir_fd, path.fd) ||
+ fd_and_follow_symlinks_invalid("chown", path.fd, follow_symlinks))
+ goto exit;
+
+#ifdef __APPLE__
+ /*
+ * This is for Mac OS X 10.3, which doesn't have lchown.
+ * (But we still have an lchown symbol because of weak-linking.)
+ * It doesn't have fchownat either. So there's no possibility
+ * of a graceful failover.
+ */
+ if ((!follow_symlinks) && (lchown == NULL)) {
+ follow_symlinks_specified("chown", follow_symlinks);
+ goto exit;
+ }
+#endif
+
Py_BEGIN_ALLOW_THREADS
- res = chown(path, uid, gid);
+#ifdef HAVE_FCHOWN
+ if (path.fd != -1)
+ result = fchown(path.fd, uid, gid);
+ else
+#endif
+#ifdef HAVE_LCHOWN
+ if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
+ result = lchown(path.narrow, uid, gid);
+ else
+#endif
+#ifdef HAVE_FCHOWNAT
+ if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
+ result = fchownat(dir_fd, path.narrow, uid, gid,
+ follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
+ else
+#endif
+ result = chown(path.narrow, uid, gid);
Py_END_ALLOW_THREADS
- if (res < 0)
- return posix_error_with_allocated_filename(opath);
- Py_DECREF(opath);
+
+ if (result) {
+ return_value = path_posix_error("chown", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
Py_INCREF(Py_None);
- return Py_None;
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#endif /* HAVE_CHOWN */
@@ -2333,7 +3190,7 @@ posix_chown(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_fchown__doc__,
"fchown(fd, uid, gid)\n\n\
Change the owner and group id of the file given by file descriptor\n\
-fd to the numeric uid and gid.");
+fd to the numeric uid and gid. Equivalent to os.chown(fd, uid, gid).");
static PyObject *
posix_fchown(PyObject *self, PyObject *args)
@@ -2359,7 +3216,8 @@ posix_fchown(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_lchown__doc__,
"lchown(path, uid, gid)\n\n\
Change the owner and group id of path to the numeric uid and gid.\n\
-This function will not follow symbolic links.");
+This function will not follow symbolic links.\n\
+Equivalent to os.chown(path, uid, gid, follow_symlinks=False).");
static PyObject *
posix_lchown(PyObject *self, PyObject *args)
@@ -2423,6 +3281,9 @@ posix_getcwd(int use_bytes)
if (wbuf2 != wbuf) free(wbuf2);
return resobj;
}
+
+ if (win32_warn_bytes_api())
+ return NULL;
#endif
Py_BEGIN_ALLOW_THREADS
@@ -2460,150 +3321,228 @@ posix_getcwd_bytes(PyObject *self)
}
#endif
+#if ((!defined(HAVE_LINK)) && defined(MS_WINDOWS))
+#define HAVE_LINK 1
+#endif
#ifdef HAVE_LINK
PyDoc_STRVAR(posix_link__doc__,
-"link(src, dst)\n\n\
-Create a hard link to a file.");
-
-static PyObject *
-posix_link(PyObject *self, PyObject *args)
-{
- return posix_2str(args, "O&O&:link", link);
-}
-#endif /* HAVE_LINK */
-
+"link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)\n\n\
+Create a hard link to a file.\n\
+\n\
+If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\
+ descriptor open to a directory, and the respective path string (src or dst)\n\
+ should be relative; the path will then be relative to that directory.\n\
+If follow_symlinks is False, and the last element of src is a symbolic\n\
+ link, link will create a link to the symbolic link itself instead of the\n\
+ file the link points to.\n\
+src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n\
+ platform. If they are unavailable, using them will raise a\n\
+ NotImplementedError.");
+
+static PyObject *
+posix_link(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t src, dst;
+ int src_dir_fd = DEFAULT_DIR_FD;
+ int dst_dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 1;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd",
+ "follow_symlinks", NULL};
#ifdef MS_WINDOWS
-PyDoc_STRVAR(win32_link__doc__,
-"link(src, dst)\n\n\
-Create a hard link to a file.");
-
-static PyObject *
-win32_link(PyObject *self, PyObject *args)
-{
- PyObject *osrc, *odst;
- char *src, *dst;
- BOOL rslt;
-
- PyUnicodeObject *usrc, *udst;
- if (PyArg_ParseTuple(args, "UU:link", &usrc, &udst)) {
- Py_BEGIN_ALLOW_THREADS
- rslt = CreateHardLinkW(PyUnicode_AS_UNICODE(udst),
- PyUnicode_AS_UNICODE(usrc), NULL);
- Py_END_ALLOW_THREADS
+ BOOL result;
+#else
+ int result;
+#endif
- if (rslt == 0)
- return win32_error("link", NULL);
+ memset(&src, 0, sizeof(src));
+ memset(&dst, 0, sizeof(dst));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|O&O&p:link", keywords,
+ path_converter, &src,
+ path_converter, &dst,
+ dir_fd_converter, &src_dir_fd,
+ dir_fd_converter, &dst_dir_fd,
+ &follow_symlinks))
+ return NULL;
- Py_RETURN_NONE;
+#ifndef HAVE_LINKAT
+ if ((src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD)) {
+ argument_unavailable_error("link", "src_dir_fd and dst_dir_fd");
+ goto exit;
}
+#endif
- /* Narrow strings also valid. */
- PyErr_Clear();
-
- if (!PyArg_ParseTuple(args, "O&O&:link", PyUnicode_FSConverter, &osrc,
- PyUnicode_FSConverter, &odst))
- return NULL;
+ if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) {
+ PyErr_SetString(PyExc_NotImplementedError,
+ "link: src and dst must be the same type");
+ goto exit;
+ }
- src = PyBytes_AsString(osrc);
- dst = PyBytes_AsString(odst);
+#ifdef MS_WINDOWS
+ Py_BEGIN_ALLOW_THREADS
+ if (src.wide)
+ result = CreateHardLinkW(dst.wide, src.wide, NULL);
+ else
+ result = CreateHardLinkA(dst.narrow, src.narrow, NULL);
+ Py_END_ALLOW_THREADS
+ if (!result) {
+ return_value = win32_error_object("link", dst.object);
+ goto exit;
+ }
+#else
Py_BEGIN_ALLOW_THREADS
- rslt = CreateHardLinkA(dst, src, NULL);
+#ifdef HAVE_LINKAT
+ if ((src_dir_fd != DEFAULT_DIR_FD) ||
+ (dst_dir_fd != DEFAULT_DIR_FD) ||
+ (!follow_symlinks))
+ result = linkat(src_dir_fd, src.narrow,
+ dst_dir_fd, dst.narrow,
+ follow_symlinks ? AT_SYMLINK_FOLLOW : 0);
+ else
+#endif
+ result = link(src.narrow, dst.narrow);
Py_END_ALLOW_THREADS
- Py_DECREF(osrc);
- Py_DECREF(odst);
- if (rslt == 0)
- return win32_error("link", NULL);
+ if (result) {
+ return_value = path_error("link", &dst);
+ goto exit;
+ }
+#endif
+
+ return_value = Py_None;
+ Py_INCREF(Py_None);
- Py_RETURN_NONE;
+exit:
+ path_cleanup(&src);
+ path_cleanup(&dst);
+ return return_value;
}
-#endif /* MS_WINDOWS */
+#endif
+
PyDoc_STRVAR(posix_listdir__doc__,
-"listdir([path]) -> list_of_strings\n\n\
-Return a list containing the names of the entries in the directory.\n\
-\n\
- path: path of directory to list (default: '.')\n\
-\n\
+"listdir(path='.') -> list_of_filenames\n\n\
+Return a list containing the names of the files in the directory.\n\
The list is in arbitrary order. It does not include the special\n\
-entries '.' and '..' even if they are present in the directory.");
+entries '.' and '..' even if they are present in the directory.\n\
+\n\
+path can be specified as either str or bytes. If path is bytes,\n\
+ the filenames returned will also be bytes; in all other circumstances\n\
+ the filenames returned will be str.\n\
+On some platforms, path may also be specified as an open file descriptor;\n\
+ the file descriptor must refer to a directory.\n\
+ If this functionality is unavailable, using it raises NotImplementedError.");
static PyObject *
-posix_listdir(PyObject *self, PyObject *args)
+posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs)
{
- /* XXX Should redo this putting the (now four) versions of opendir
- in separate files instead of having them all here... */
-#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
+ path_t path;
+ PyObject *list = NULL;
+ static char *keywords[] = {"path", NULL};
+#ifdef HAVE_FDOPENDIR
+ int fd = -1;
+#endif /* HAVE_FDOPENDIR */
- PyObject *d, *v;
- HANDLE hFindFile;
+#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
+ PyObject *v;
+ HANDLE hFindFile = INVALID_HANDLE_VALUE;
BOOL result;
WIN32_FIND_DATA FileData;
- PyObject *opath;
char namebuf[MAX_PATH+5]; /* Overallocate for \\*.*\0 */
char *bufptr = namebuf;
- Py_ssize_t len = sizeof(namebuf)-5; /* only claim to have space for MAX_PATH */
-
+ /* only claim to have space for MAX_PATH */
+ Py_ssize_t len = sizeof(namebuf)-5;
PyObject *po = NULL;
- if (PyArg_ParseTuple(args, "|U:listdir", &po)) {
+ wchar_t *wnamebuf = NULL;
+#elif defined(PYOS_OS2)
+#ifndef MAX_PATH
+#define MAX_PATH CCHMAXPATH
+#endif
+ char *pt;
+ PyObject *v;
+ char namebuf[MAX_PATH+5];
+ HDIR hdir = 1;
+ ULONG srchcnt = 1;
+ FILEFINDBUF3 ep;
+ APIRET rc;
+#else
+ PyObject *v;
+ DIR *dirp = NULL;
+ struct dirent *ep;
+ int return_str; /* if false, return bytes */
+#endif
+
+ memset(&path, 0, sizeof(path));
+ path.nullable = 1;
+#ifdef HAVE_FDOPENDIR
+ path.allow_fd = 1;
+ path.fd = -1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", keywords,
+ path_converter, &path
+ ))
+ return NULL;
+
+ /* XXX Should redo this putting the (now four) versions of opendir
+ in separate files instead of having them all here... */
+#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
+ if (!path.narrow) {
WIN32_FIND_DATAW wFileData;
- Py_UNICODE *wnamebuf, *po_wchars;
+ wchar_t *po_wchars;
- if (po == NULL) { /* Default arg: "." */
+ if (!path.wide) { /* Default arg: "." */
po_wchars = L".";
len = 1;
} else {
- po_wchars = PyUnicode_AS_UNICODE(po);
- len = PyUnicode_GET_SIZE(po);
+ po_wchars = path.wide;
+ len = wcslen(path.wide);
}
- /* Overallocate for \\*.*\0 */
+ /* The +5 is so we can append "\\*.*\0" */
wnamebuf = malloc((len + 5) * sizeof(wchar_t));
if (!wnamebuf) {
PyErr_NoMemory();
- return NULL;
+ goto exit;
}
wcscpy(wnamebuf, po_wchars);
if (len > 0) {
- Py_UNICODE wch = wnamebuf[len-1];
+ wchar_t wch = wnamebuf[len-1];
if (wch != L'/' && wch != L'\\' && wch != L':')
wnamebuf[len++] = L'\\';
wcscpy(wnamebuf + len, L"*.*");
}
- if ((d = PyList_New(0)) == NULL) {
- free(wnamebuf);
- return NULL;
+ if ((list = PyList_New(0)) == NULL) {
+ goto exit;
}
Py_BEGIN_ALLOW_THREADS
hFindFile = FindFirstFileW(wnamebuf, &wFileData);
Py_END_ALLOW_THREADS
if (hFindFile == INVALID_HANDLE_VALUE) {
int error = GetLastError();
- if (error == ERROR_FILE_NOT_FOUND) {
- free(wnamebuf);
- return d;
- }
- Py_DECREF(d);
+ if (error == ERROR_FILE_NOT_FOUND)
+ goto exit;
+ Py_DECREF(list);
+ list = NULL;
win32_error_unicode("FindFirstFileW", wnamebuf);
- free(wnamebuf);
- return NULL;
+ goto exit;
}
do {
/* Skip over . and .. */
if (wcscmp(wFileData.cFileName, L".") != 0 &&
wcscmp(wFileData.cFileName, L"..") != 0) {
- v = PyUnicode_FromUnicode(wFileData.cFileName, wcslen(wFileData.cFileName));
+ v = PyUnicode_FromWideChar(wFileData.cFileName,
+ wcslen(wFileData.cFileName));
if (v == NULL) {
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
- if (PyList_Append(d, v) != 0) {
+ if (PyList_Append(list, v) != 0) {
Py_DECREF(v);
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
Py_DECREF(v);
@@ -2614,38 +3553,16 @@ posix_listdir(PyObject *self, PyObject *args)
/* FindNextFile sets error to ERROR_NO_MORE_FILES if
it got to the end of the directory. */
if (!result && GetLastError() != ERROR_NO_MORE_FILES) {
- Py_DECREF(d);
- win32_error_unicode("FindNextFileW", wnamebuf);
- FindClose(hFindFile);
- free(wnamebuf);
- return NULL;
+ Py_DECREF(list);
+ list = win32_error_unicode("FindNextFileW", wnamebuf);
+ goto exit;
}
} while (result == TRUE);
- if (FindClose(hFindFile) == FALSE) {
- Py_DECREF(d);
- win32_error_unicode("FindClose", wnamebuf);
- free(wnamebuf);
- return NULL;
- }
- free(wnamebuf);
- return d;
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
-
- if (!PyArg_ParseTuple(args, "O&:listdir",
- PyUnicode_FSConverter, &opath))
- return NULL;
- if (PyBytes_GET_SIZE(opath)+1 > MAX_PATH) {
- PyErr_SetString(PyExc_ValueError, "path too long");
- Py_DECREF(opath);
- return NULL;
+ goto exit;
}
- strcpy(namebuf, PyBytes_AsString(opath));
- len = PyObject_Size(opath);
- Py_DECREF(opath);
+ strcpy(namebuf, path.narrow);
+ len = path.length;
if (len > 0) {
char ch = namebuf[len-1];
if (ch != SEP && ch != ALTSEP && ch != ':')
@@ -2653,7 +3570,7 @@ posix_listdir(PyObject *self, PyObject *args)
strcpy(namebuf + len, "*.*");
}
- if ((d = PyList_New(0)) == NULL)
+ if ((list = PyList_New(0)) == NULL)
return NULL;
Py_BEGIN_ALLOW_THREADS
@@ -2662,9 +3579,10 @@ posix_listdir(PyObject *self, PyObject *args)
if (hFindFile == INVALID_HANDLE_VALUE) {
int error = GetLastError();
if (error == ERROR_FILE_NOT_FOUND)
- return d;
- Py_DECREF(d);
- return win32_error("FindFirstFile", namebuf);
+ goto exit;
+ Py_DECREF(list);
+ list = win32_error("FindFirstFile", namebuf);
+ goto exit;
}
do {
/* Skip over . and .. */
@@ -2672,14 +3590,14 @@ posix_listdir(PyObject *self, PyObject *args)
strcmp(FileData.cFileName, "..") != 0) {
v = PyBytes_FromString(FileData.cFileName);
if (v == NULL) {
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
- if (PyList_Append(d, v) != 0) {
+ if (PyList_Append(list, v) != 0) {
Py_DECREF(v);
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
Py_DECREF(v);
@@ -2690,46 +3608,33 @@ posix_listdir(PyObject *self, PyObject *args)
/* FindNextFile sets error to ERROR_NO_MORE_FILES if
it got to the end of the directory. */
if (!result && GetLastError() != ERROR_NO_MORE_FILES) {
- Py_DECREF(d);
- win32_error("FindNextFile", namebuf);
- FindClose(hFindFile);
- return NULL;
+ Py_DECREF(list);
+ list = win32_error("FindNextFile", namebuf);
+ goto exit;
}
} while (result == TRUE);
- if (FindClose(hFindFile) == FALSE) {
- Py_DECREF(d);
- return win32_error("FindClose", namebuf);
+exit:
+ if (hFindFile != INVALID_HANDLE_VALUE) {
+ if (FindClose(hFindFile) == FALSE) {
+ if (list != NULL) {
+ Py_DECREF(list);
+ list = win32_error_object("FindClose", path.object);
+ }
+ }
}
+ if (wnamebuf)
+ free(wnamebuf);
+ path_cleanup(&path);
- return d;
+ return list;
#elif defined(PYOS_OS2)
-
-#ifndef MAX_PATH
-#define MAX_PATH CCHMAXPATH
-#endif
- PyObject *oname;
- char *name, *pt;
- Py_ssize_t len;
- PyObject *d, *v;
- char namebuf[MAX_PATH+5];
- HDIR hdir = 1;
- ULONG srchcnt = 1;
- FILEFINDBUF3 ep;
- APIRET rc;
-
- if (!PyArg_ParseTuple(args, "O&:listdir",
- PyUnicode_FSConverter, &oname))
- return NULL;
- name = PyBytes_AsString(oname);
- len = PyBytes_GET_SIZE(oname);
- if (len >= MAX_PATH) {
- Py_DECREF(oname);
+ if (path.length >= MAX_PATH) {
PyErr_SetString(PyExc_ValueError, "path too long");
- return NULL;
+ goto exit;
}
- strcpy(namebuf, name);
+ strcpy(namebuf, path.narrow);
for (pt = namebuf; *pt; pt++)
if (*pt == ALTSEP)
*pt = SEP;
@@ -2737,9 +3642,8 @@ posix_listdir(PyObject *self, PyObject *args)
namebuf[len++] = SEP;
strcpy(namebuf + len, "*.*");
- if ((d = PyList_New(0)) == NULL) {
- Py_DECREF(oname);
- return NULL;
+ if ((list = PyList_New(0)) == NULL) {
+ goto exit;
}
rc = DosFindFirst(namebuf, /* Wildcard Pattern to Match */
@@ -2751,7 +3655,9 @@ posix_listdir(PyObject *self, PyObject *args)
if (rc != NO_ERROR) {
errno = ENOENT;
- return posix_error_with_allocated_filename(oname);
+ Py_DECREF(list);
+ list = posix_error_with_filename(path.narrow);
+ goto exit;
}
if (srchcnt > 0) { /* If Directory is NOT Totally Empty, */
@@ -2767,55 +3673,77 @@ posix_listdir(PyObject *self, PyObject *args)
v = PyBytes_FromString(namebuf);
if (v == NULL) {
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
- if (PyList_Append(d, v) != 0) {
+ if (PyList_Append(list, v) != 0) {
Py_DECREF(v);
- Py_DECREF(d);
- d = NULL;
+ Py_DECREF(list);
+ list = NULL;
break;
}
Py_DECREF(v);
} while (DosFindNext(hdir, &ep, sizeof(ep), &srchcnt) == NO_ERROR && srchcnt > 0);
}
- Py_DECREF(oname);
- return d;
+exit:
+ path_cleanup(&path);
+
+ return list;
#else
- PyObject *oname;
- char *name;
- PyObject *d, *v;
- DIR *dirp;
- struct dirent *ep;
- int arg_is_unicode = 1;
errno = 0;
- /* v is never read, so it does not need to be initialized yet. */
- if (!PyArg_ParseTuple(args, "|U:listdir", &v)) {
- arg_is_unicode = 0;
- PyErr_Clear();
+#ifdef HAVE_FDOPENDIR
+ if (path.fd != -1) {
+ /* closedir() closes the FD, so we duplicate it */
+ Py_BEGIN_ALLOW_THREADS
+ fd = dup(path.fd);
+ Py_END_ALLOW_THREADS
+
+ if (fd == -1) {
+ list = posix_error();
+ goto exit;
+ }
+
+ return_str = 1;
+
+ Py_BEGIN_ALLOW_THREADS
+ dirp = fdopendir(fd);
+ Py_END_ALLOW_THREADS
}
- oname = NULL;
- if (!PyArg_ParseTuple(args, "|O&:listdir", PyUnicode_FSConverter, &oname))
- return NULL;
- if (oname == NULL) { /* Default arg: "." */
- oname = PyBytes_FromString(".");
+ else
+#endif
+ {
+ char *name;
+ if (path.narrow) {
+ name = path.narrow;
+ /* only return bytes if they specified a bytes object */
+ return_str = !(PyBytes_Check(path.object));
+ }
+ else {
+ name = ".";
+ return_str = 1;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ dirp = opendir(name);
+ Py_END_ALLOW_THREADS
}
- name = PyBytes_AsString(oname);
- Py_BEGIN_ALLOW_THREADS
- dirp = opendir(name);
- Py_END_ALLOW_THREADS
+
if (dirp == NULL) {
- return posix_error_with_allocated_filename(oname);
+ list = path_error("listdir", &path);
+#ifdef HAVE_FDOPENDIR
+ if (fd != -1) {
+ Py_BEGIN_ALLOW_THREADS
+ close(fd);
+ Py_END_ALLOW_THREADS
+ }
+#endif /* HAVE_FDOPENDIR */
+ goto exit;
}
- if ((d = PyList_New(0)) == NULL) {
- Py_BEGIN_ALLOW_THREADS
- closedir(dirp);
- Py_END_ALLOW_THREADS
- Py_DECREF(oname);
- return NULL;
+ if ((list = PyList_New(0)) == NULL) {
+ goto exit;
}
for (;;) {
errno = 0;
@@ -2826,38 +3754,45 @@ posix_listdir(PyObject *self, PyObject *args)
if (errno == 0) {
break;
} else {
- Py_BEGIN_ALLOW_THREADS
- closedir(dirp);
- Py_END_ALLOW_THREADS
- Py_DECREF(d);
- return posix_error_with_allocated_filename(oname);
+ Py_DECREF(list);
+ list = path_error("listdir", &path);
+ goto exit;
}
}
if (ep->d_name[0] == '.' &&
(NAMLEN(ep) == 1 ||
(ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
continue;
- if (arg_is_unicode)
+ if (return_str)
v = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, NAMLEN(ep));
else
v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
if (v == NULL) {
- Py_CLEAR(d);
+ Py_CLEAR(list);
break;
}
- if (PyList_Append(d, v) != 0) {
+ if (PyList_Append(list, v) != 0) {
Py_DECREF(v);
- Py_CLEAR(d);
+ Py_CLEAR(list);
break;
}
Py_DECREF(v);
}
- Py_BEGIN_ALLOW_THREADS
- closedir(dirp);
- Py_END_ALLOW_THREADS
- Py_DECREF(oname);
- return d;
+exit:
+ if (dirp != NULL) {
+ Py_BEGIN_ALLOW_THREADS
+#ifdef HAVE_FDOPENDIR
+ if (fd > -1)
+ rewinddir(dirp);
+#endif /* HAVE_FDOPENDIR */
+ closedir(dirp);
+ Py_END_ALLOW_THREADS
+ }
+
+ path_cleanup(&path);
+
+ return list;
#endif /* which OS */
} /* end of posix_listdir */
@@ -2867,31 +3802,35 @@ posix_listdir(PyObject *self, PyObject *args)
static PyObject *
posix__getfullpathname(PyObject *self, PyObject *args)
{
- PyObject *opath;
- char *path;
+ const char *path;
char outbuf[MAX_PATH*2];
char *temp;
-#ifdef MS_WINDOWS
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po)) {
- Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
- Py_UNICODE woutbuf[MAX_PATH*2], *woutbufp = woutbuf;
- Py_UNICODE *wtemp;
+ PyObject *po;
+
+ if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po))
+ {
+ wchar_t *wpath;
+ wchar_t woutbuf[MAX_PATH*2], *woutbufp = woutbuf;
+ wchar_t *wtemp;
DWORD result;
PyObject *v;
+
+ wpath = PyUnicode_AsUnicode(po);
+ if (wpath == NULL)
+ return NULL;
result = GetFullPathNameW(wpath,
- sizeof(woutbuf)/sizeof(woutbuf[0]),
+ Py_ARRAY_LENGTH(woutbuf),
woutbuf, &wtemp);
- if (result > sizeof(woutbuf)/sizeof(woutbuf[0])) {
- woutbufp = malloc(result * sizeof(Py_UNICODE));
+ if (result > Py_ARRAY_LENGTH(woutbuf)) {
+ woutbufp = malloc(result * sizeof(wchar_t));
if (!woutbufp)
return PyErr_NoMemory();
result = GetFullPathNameW(wpath, result, woutbufp, &wtemp);
}
if (result)
- v = PyUnicode_FromUnicode(woutbufp, wcslen(woutbufp));
+ v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp));
else
- v = win32_error_unicode("GetFullPathNameW", wpath);
+ v = win32_error_object("GetFullPathNameW", po);
if (woutbufp != woutbuf)
free(woutbufp);
return v;
@@ -2900,18 +3839,16 @@ posix__getfullpathname(PyObject *self, PyObject *args)
are also valid. */
PyErr_Clear();
-#endif
- if (!PyArg_ParseTuple (args, "O&:_getfullpathname",
- PyUnicode_FSConverter, &opath))
+ if (!PyArg_ParseTuple (args, "y:_getfullpathname",
+ &path))
return NULL;
- path = PyBytes_AsString(opath);
- if (!GetFullPathName(path, sizeof(outbuf)/sizeof(outbuf[0]),
+ if (win32_warn_bytes_api())
+ return NULL;
+ if (!GetFullPathName(path, Py_ARRAY_LENGTH(outbuf),
outbuf, &temp)) {
win32_error("GetFullPathName", path);
- Py_DECREF(opath);
return NULL;
}
- Py_DECREF(opath);
if (PyUnicode_Check(PyTuple_GetItem(args, 0))) {
return PyUnicode_Decode(outbuf, strlen(outbuf),
Py_FileSystemDefaultEncoding, NULL);
@@ -2929,12 +3866,14 @@ posix__getfinalpathname(PyObject *self, PyObject *args)
int buf_size;
wchar_t *target_path;
int result_length;
- PyObject *result;
+ PyObject *po, *result;
wchar_t *path;
- if (!PyArg_ParseTuple(args, "u|:_getfinalpathname", &path)) {
+ if (!PyArg_ParseTuple(args, "U|:_getfinalpathname", &po))
+ return NULL;
+ path = PyUnicode_AsUnicode(po);
+ if (path == NULL)
return NULL;
- }
if(!check_GetFinalPathNameByHandle()) {
/* If the OS doesn't have GetFinalPathNameByHandle, return a
@@ -2953,18 +3892,15 @@ posix__getfinalpathname(PyObject *self, PyObject *args)
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
- if(hFile == INVALID_HANDLE_VALUE) {
- return win32_error_unicode("GetFinalPathNamyByHandle", path);
- return PyErr_Format(PyExc_RuntimeError,
- "Could not get a handle to file.");
- }
+ if(hFile == INVALID_HANDLE_VALUE)
+ return win32_error_object("CreateFileW", po);
/* We have a good handle to the target, use it to determine the
target path name. */
buf_size = Py_GetFinalPathNameByHandleW(hFile, 0, 0, VOLUME_NAME_NT);
if(!buf_size)
- return win32_error_unicode("GetFinalPathNameByHandle", path);
+ return win32_error_object("GetFinalPathNameByHandle", po);
target_path = (wchar_t *)malloc((buf_size+1)*sizeof(wchar_t));
if(!target_path)
@@ -2973,13 +3909,13 @@ posix__getfinalpathname(PyObject *self, PyObject *args)
result_length = Py_GetFinalPathNameByHandleW(hFile, target_path,
buf_size, VOLUME_NAME_DOS);
if(!result_length)
- return win32_error_unicode("GetFinalPathNamyByHandle", path);
+ return win32_error_object("GetFinalPathNamyByHandle", po);
if(!CloseHandle(hFile))
- return win32_error_unicode("GetFinalPathNameByHandle", path);
+ return win32_error_object("CloseHandle", po);
target_path[result_length] = 0;
- result = PyUnicode_FromUnicode(target_path, result_length);
+ result = PyUnicode_FromWideChar(target_path, result_length);
free(target_path);
return result;
@@ -3016,13 +3952,14 @@ PyDoc_STRVAR(posix__isdir__doc__,
static PyObject *
posix__isdir(PyObject *self, PyObject *args)
{
- PyObject *opath;
- char *path;
- PyUnicodeObject *po;
+ const char *path;
+ PyObject *po;
DWORD attributes;
if (PyArg_ParseTuple(args, "U|:_isdir", &po)) {
- Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
+ wchar_t *wpath = PyUnicode_AsUnicode(po);
+ if (wpath == NULL)
+ return NULL;
attributes = GetFileAttributesW(wpath);
if (attributes == INVALID_FILE_ATTRIBUTES)
@@ -3033,11 +3970,10 @@ posix__isdir(PyObject *self, PyObject *args)
are also valid. */
PyErr_Clear();
- if (!PyArg_ParseTuple(args, "O&:_isdir",
- PyUnicode_FSConverter, &opath))
+ if (!PyArg_ParseTuple(args, "y:_isdir", &path))
+ return NULL;
+ if (win32_warn_bytes_api())
return NULL;
-
- path = PyBytes_AsString(opath);
attributes = GetFileAttributesA(path);
if (attributes == INVALID_FILE_ATTRIBUTES)
Py_RETURN_FALSE;
@@ -3051,69 +3987,72 @@ check:
#endif /* MS_WINDOWS */
PyDoc_STRVAR(posix_mkdir__doc__,
-"mkdir(path [, mode=0777])\n\n\
-Create a directory.");
+"mkdir(path, mode=0o777, *, dir_fd=None)\n\n\
+Create a directory.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.\n\
+\n\
+The mode argument is ignored on Windows.");
static PyObject *
-posix_mkdir(PyObject *self, PyObject *args)
+posix_mkdir(PyObject *self, PyObject *args, PyObject *kwargs)
{
- int res;
- PyObject *opath;
- char *path;
+ path_t path;
int mode = 0777;
+ int dir_fd = DEFAULT_DIR_FD;
+ static char *keywords[] = {"path", "mode", "dir_fd", NULL};
+ PyObject *return_value = NULL;
+ int result;
-#ifdef MS_WINDOWS
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, "U|i:mkdir", &po, &mode)) {
- Py_BEGIN_ALLOW_THREADS
- /* PyUnicode_AS_UNICODE OK without thread lock as
- it is a simple dereference. */
- res = CreateDirectoryW(PyUnicode_AS_UNICODE(po), NULL);
- Py_END_ALLOW_THREADS
- if (!res)
- return win32_error_unicode("mkdir", PyUnicode_AS_UNICODE(po));
- Py_INCREF(Py_None);
- return Py_None;
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
- if (!PyArg_ParseTuple(args, "O&|i:mkdir",
- PyUnicode_FSConverter, &opath, &mode))
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkdir", keywords,
+ path_converter, &path, &mode,
+#ifdef HAVE_MKDIRAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
return NULL;
- path = PyBytes_AsString(opath);
+
+#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
- /* PyUnicode_AS_UNICODE OK without thread lock as
- it is a simple dereference. */
- res = CreateDirectoryA(path, NULL);
+ if (path.wide)
+ result = CreateDirectoryW(path.wide, NULL);
+ else
+ result = CreateDirectoryA(path.narrow, NULL);
Py_END_ALLOW_THREADS
- if (!res) {
- win32_error("mkdir", path);
- Py_DECREF(opath);
- return NULL;
+
+ if (!result) {
+ return_value = win32_error_object("mkdir", path.object);
+ goto exit;
}
- Py_DECREF(opath);
- Py_INCREF(Py_None);
- return Py_None;
#else
-
- if (!PyArg_ParseTuple(args, "O&|i:mkdir",
- PyUnicode_FSConverter, &opath, &mode))
- return NULL;
- path = PyBytes_AsString(opath);
Py_BEGIN_ALLOW_THREADS
+#if HAVE_MKDIRAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = mkdirat(dir_fd, path.narrow, mode);
+ else
+#endif
#if ( defined(__WATCOMC__) || defined(PYCC_VACPP) ) && !defined(__QNX__)
- res = mkdir(path);
+ result = mkdir(path.narrow);
#else
- res = mkdir(path, mode);
+ result = mkdir(path.narrow, mode);
#endif
Py_END_ALLOW_THREADS
- if (res < 0)
- return posix_error_with_allocated_filename(opath);
- Py_DECREF(opath);
- Py_INCREF(Py_None);
- return Py_None;
+ if (result < 0) {
+ return_value = path_error("mkdir", &path);
+ goto exit;
+ }
#endif
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+exit:
+ path_cleanup(&path);
+ return return_value;
}
@@ -3159,79 +4098,220 @@ posix_nice(PyObject *self, PyObject *args)
}
#endif /* HAVE_NICE */
-PyDoc_STRVAR(posix_rename__doc__,
-"rename(old, new)\n\n\
-Rename a file or directory.");
+
+#ifdef HAVE_GETPRIORITY
+PyDoc_STRVAR(posix_getpriority__doc__,
+"getpriority(which, who) -> current_priority\n\n\
+Get program scheduling priority.");
static PyObject *
-posix_rename(PyObject *self, PyObject *args)
+posix_getpriority(PyObject *self, PyObject *args)
{
+ int which, who, retval;
+
+ if (!PyArg_ParseTuple(args, "ii", &which, &who))
+ return NULL;
+ errno = 0;
+ retval = getpriority(which, who);
+ if (errno != 0)
+ return posix_error();
+ return PyLong_FromLong((long)retval);
+}
+#endif /* HAVE_GETPRIORITY */
+
+
+#ifdef HAVE_SETPRIORITY
+PyDoc_STRVAR(posix_setpriority__doc__,
+"setpriority(which, who, prio) -> None\n\n\
+Set program scheduling priority.");
+
+static PyObject *
+posix_setpriority(PyObject *self, PyObject *args)
+{
+ int which, who, prio, retval;
+
+ if (!PyArg_ParseTuple(args, "iii", &which, &who, &prio))
+ return NULL;
+ retval = setpriority(which, who, prio);
+ if (retval == -1)
+ return posix_error();
+ Py_RETURN_NONE;
+}
+#endif /* HAVE_SETPRIORITY */
+
+
+static PyObject *
+internal_rename(PyObject *args, PyObject *kwargs, int is_replace)
+{
+ char *function_name = is_replace ? "replace" : "rename";
+ path_t src;
+ path_t dst;
+ int src_dir_fd = DEFAULT_DIR_FD;
+ int dst_dir_fd = DEFAULT_DIR_FD;
+ int dir_fd_specified;
+ PyObject *return_value = NULL;
+ char format[24];
+ static char *keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL};
+
#ifdef MS_WINDOWS
- PyObject *o1, *o2;
- char *p1, *p2;
BOOL result;
- if (!PyArg_ParseTuple(args, "OO:rename", &o1, &o2))
- goto error;
- if (!convert_to_unicode(&o1))
- goto error;
- if (!convert_to_unicode(&o2)) {
- Py_DECREF(o1);
- goto error;
+ int flags = is_replace ? MOVEFILE_REPLACE_EXISTING : 0;
+#else
+ int result;
+#endif
+
+ memset(&src, 0, sizeof(src));
+ memset(&dst, 0, sizeof(dst));
+ strcpy(format, "O&O&|$O&O&:");
+ strcat(format, function_name);
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, format, keywords,
+ path_converter, &src,
+ path_converter, &dst,
+ dir_fd_converter, &src_dir_fd,
+ dir_fd_converter, &dst_dir_fd))
+ return NULL;
+
+ dir_fd_specified = (src_dir_fd != DEFAULT_DIR_FD) ||
+ (dst_dir_fd != DEFAULT_DIR_FD);
+#ifndef HAVE_RENAMEAT
+ if (dir_fd_specified) {
+ argument_unavailable_error(function_name, "src_dir_fd and dst_dir_fd");
+ goto exit;
+ }
+#endif
+
+ if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) {
+ PyErr_Format(PyExc_ValueError,
+ "%s: src and dst must be the same type", function_name);
+ goto exit;
}
+
+#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
- result = MoveFileW(PyUnicode_AsUnicode(o1),
- PyUnicode_AsUnicode(o2));
+ if (src.wide)
+ result = MoveFileExW(src.wide, dst.wide, flags);
+ else
+ result = MoveFileExA(src.narrow, dst.narrow, flags);
Py_END_ALLOW_THREADS
- Py_DECREF(o1);
- Py_DECREF(o2);
- if (!result)
- return win32_error("rename", NULL);
- Py_INCREF(Py_None);
- return Py_None;
-error:
- PyErr_Clear();
- if (!PyArg_ParseTuple(args, "ss:rename", &p1, &p2))
- return NULL;
+
+ if (!result) {
+ return_value = win32_error_object(function_name, dst.object);
+ goto exit;
+ }
+
+#else
Py_BEGIN_ALLOW_THREADS
- result = MoveFileA(p1, p2);
+#ifdef HAVE_RENAMEAT
+ if (dir_fd_specified)
+ result = renameat(src_dir_fd, src.narrow, dst_dir_fd, dst.narrow);
+ else
+#endif
+ result = rename(src.narrow, dst.narrow);
Py_END_ALLOW_THREADS
- if (!result)
- return win32_error("rename", NULL);
- Py_INCREF(Py_None);
- return Py_None;
-#else
- return posix_2str(args, "O&O&:rename", rename);
+
+ if (result) {
+ return_value = path_error(function_name, &dst);
+ goto exit;
+ }
#endif
-}
+ Py_INCREF(Py_None);
+ return_value = Py_None;
+exit:
+ path_cleanup(&src);
+ path_cleanup(&dst);
+ return return_value;
+}
-PyDoc_STRVAR(posix_rmdir__doc__,
-"rmdir(path)\n\n\
-Remove a directory.");
+PyDoc_STRVAR(posix_rename__doc__,
+"rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n\n\
+Rename a file or directory.\n\
+\n\
+If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\
+ descriptor open to a directory, and the respective path string (src or dst)\n\
+ should be relative; the path will then be relative to that directory.\n\
+src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n\
+ If they are unavailable, using them will raise a NotImplementedError.");
static PyObject *
-posix_rmdir(PyObject *self, PyObject *args)
+posix_rename(PyObject *self, PyObject *args, PyObject *kwargs)
{
-#ifdef MS_WINDOWS
- return win32_1str(args, "rmdir", "y:rmdir", RemoveDirectoryA, "U:rmdir", RemoveDirectoryW);
-#else
- return posix_1str(args, "O&:rmdir", rmdir);
-#endif
+ return internal_rename(args, kwargs, 0);
}
+PyDoc_STRVAR(posix_replace__doc__,
+"replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n\n\
+Rename a file or directory, overwriting the destination.\n\
+\n\
+If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\
+ descriptor open to a directory, and the respective path string (src or dst)\n\
+ should be relative; the path will then be relative to that directory.\n\
+src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n\
+ If they are unavailable, using them will raise a NotImplementedError.");
-PyDoc_STRVAR(posix_stat__doc__,
-"stat(path) -> stat result\n\n\
-Perform a stat system call on the given path.");
+static PyObject *
+posix_replace(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ return internal_rename(args, kwargs, 1);
+}
+
+PyDoc_STRVAR(posix_rmdir__doc__,
+"rmdir(path, *, dir_fd=None)\n\n\
+Remove a directory.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_stat(PyObject *self, PyObject *args)
+posix_rmdir(PyObject *self, PyObject *args, PyObject *kwargs)
{
+ path_t path;
+ int dir_fd = DEFAULT_DIR_FD;
+ static char *keywords[] = {"path", "dir_fd", NULL};
+ int result;
+ PyObject *return_value = NULL;
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:rmdir", keywords,
+ path_converter, &path,
+#ifdef HAVE_UNLINKAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
- return posix_do_stat(self, args, "O&:stat", STAT, "U:stat", win32_stat_w);
+ if (path.wide)
+ result = RemoveDirectoryW(path.wide);
+ else
+ result = RemoveDirectoryA(path.narrow);
+ result = !result; /* Windows, success=1, UNIX, success=0 */
#else
- return posix_do_stat(self, args, "O&:stat", STAT, NULL, NULL);
+#ifdef HAVE_UNLINKAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = unlinkat(dir_fd, path.narrow, AT_REMOVEDIR);
+ else
+#endif
+ result = rmdir(path.narrow);
#endif
+ Py_END_ALLOW_THREADS
+
+ if (result) {
+ return_value = path_error("rmdir", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
@@ -3323,163 +4403,475 @@ BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName)
#endif /* MS_WINDOWS */
PyDoc_STRVAR(posix_unlink__doc__,
-"unlink(path)\n\n\
-Remove a file (same as remove(path)).");
+"unlink(path, *, dir_fd=None)\n\n\
+Remove a file (same as remove()).\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
PyDoc_STRVAR(posix_remove__doc__,
-"remove(path)\n\n\
-Remove a file (same as unlink(path)).");
+"remove(path, *, dir_fd=None)\n\n\
+Remove a file (same as unlink()).\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_unlink(PyObject *self, PyObject *args)
+posix_unlink(PyObject *self, PyObject *args, PyObject *kwargs)
{
+ path_t path;
+ int dir_fd = DEFAULT_DIR_FD;
+ static char *keywords[] = {"path", "dir_fd", NULL};
+ int result;
+ PyObject *return_value = NULL;
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:unlink", keywords,
+ path_converter, &path,
+#ifdef HAVE_UNLINKAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
- return win32_1str(args, "remove", "y:remove", DeleteFileA,
- "U:remove", Py_DeleteFileW);
+ if (path.wide)
+ result = Py_DeleteFileW(path.wide);
+ else
+ result = DeleteFileA(path.narrow);
+ result = !result; /* Windows, success=1, UNIX, success=0 */
#else
- return posix_1str(args, "O&:remove", unlink);
+#ifdef HAVE_UNLINKAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = unlinkat(dir_fd, path.narrow, 0);
+ else
+#endif /* HAVE_UNLINKAT */
+ result = unlink(path.narrow);
#endif
+ Py_END_ALLOW_THREADS
+
+ if (result) {
+ return_value = path_error("unlink", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
-#ifdef HAVE_UNAME
PyDoc_STRVAR(posix_uname__doc__,
-"uname() -> (sysname, nodename, release, version, machine)\n\n\
-Return a tuple identifying the current operating system.");
+"uname() -> uname_result\n\n\
+Return an object identifying the current operating system.\n\
+The object behaves like a named tuple with the following fields:\n\
+ (sysname, nodename, release, version, machine)");
+
+static PyStructSequence_Field uname_result_fields[] = {
+ {"sysname", "operating system name"},
+ {"nodename", "name of machine on network (implementation-defined)"},
+ {"release", "operating system release"},
+ {"version", "operating system version"},
+ {"machine", "hardware identifier"},
+ {NULL}
+};
+PyDoc_STRVAR(uname_result__doc__,
+"uname_result: Result from os.uname().\n\n\
+This object may be accessed either as a tuple of\n\
+ (sysname, nodename, release, version, machine),\n\
+or via the attributes sysname, nodename, release, version, and machine.\n\
+\n\
+See os.uname for more information.");
+
+static PyStructSequence_Desc uname_result_desc = {
+ "uname_result", /* name */
+ uname_result__doc__, /* doc */
+ uname_result_fields,
+ 5
+};
+
+static PyTypeObject UnameResultType;
+
+
+#ifdef HAVE_UNAME
static PyObject *
posix_uname(PyObject *self, PyObject *noargs)
{
struct utsname u;
int res;
+ PyObject *value;
Py_BEGIN_ALLOW_THREADS
res = uname(&u);
Py_END_ALLOW_THREADS
if (res < 0)
return posix_error();
- return Py_BuildValue("(sssss)",
- u.sysname,
- u.nodename,
- u.release,
- u.version,
- u.machine);
+
+ value = PyStructSequence_New(&UnameResultType);
+ if (value == NULL)
+ return NULL;
+
+#define SET(i, field) \
+ { \
+ PyObject *o = PyUnicode_DecodeFSDefault(field); \
+ if (!o) { \
+ Py_DECREF(value); \
+ return NULL; \
+ } \
+ PyStructSequence_SET_ITEM(value, i, o); \
+ } \
+
+ SET(0, u.sysname);
+ SET(1, u.nodename);
+ SET(2, u.release);
+ SET(3, u.version);
+ SET(4, u.machine);
+
+#undef SET
+
+ return value;
}
#endif /* HAVE_UNAME */
+
+PyDoc_STRVAR(posix_utime__doc__,
+"utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)\n\
+Set the access and modified time of path.\n\
+\n\
+path may always be specified as a string.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.\n\
+\n\
+If times is not None, it must be a tuple (atime, mtime);\n\
+ atime and mtime should be expressed as float seconds since the epoch.\n\
+If ns is not None, it must be a tuple (atime_ns, mtime_ns);\n\
+ atime_ns and mtime_ns should be expressed as integer nanoseconds\n\
+ since the epoch.\n\
+If both times and ns are None, utime uses the current time.\n\
+Specifying tuples for both times and ns is an error.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, utime will modify the symbolic link itself instead of the file the\n\
+ link points to.\n\
+It is an error to use dir_fd or follow_symlinks when specifying path\n\
+ as an open file descriptor.\n\
+dir_fd and follow_symlinks may not be available on your platform.\n\
+ If they are unavailable, using them will raise a NotImplementedError.");
+
+typedef struct {
+ int now;
+ time_t atime_s;
+ long atime_ns;
+ time_t mtime_s;
+ long mtime_ns;
+} utime_t;
+
+/*
+ * these macros assume that "utime" is a pointer to a utime_t
+ * they also intentionally leak the declaration of a pointer named "time"
+ */
+#define UTIME_TO_TIMESPEC \
+ struct timespec ts[2]; \
+ struct timespec *time; \
+ if (utime->now) \
+ time = NULL; \
+ else { \
+ ts[0].tv_sec = utime->atime_s; \
+ ts[0].tv_nsec = utime->atime_ns; \
+ ts[1].tv_sec = utime->mtime_s; \
+ ts[1].tv_nsec = utime->mtime_ns; \
+ time = ts; \
+ } \
+
+#define UTIME_TO_TIMEVAL \
+ struct timeval tv[2]; \
+ struct timeval *time; \
+ if (utime->now) \
+ time = NULL; \
+ else { \
+ tv[0].tv_sec = utime->atime_s; \
+ tv[0].tv_usec = utime->atime_ns / 1000; \
+ tv[1].tv_sec = utime->mtime_s; \
+ tv[1].tv_usec = utime->mtime_ns / 1000; \
+ time = tv; \
+ } \
+
+#define UTIME_TO_UTIMBUF \
+ struct utimbuf u[2]; \
+ struct utimbuf *time; \
+ if (utime->now) \
+ time = NULL; \
+ else { \
+ u.actime = utime->atime_s; \
+ u.modtime = utime->mtime_s; \
+ time = u; \
+ }
+
+#define UTIME_TO_TIME_T \
+ time_t timet[2]; \
+ struct timet time; \
+ if (utime->now) \
+ time = NULL; \
+ else { \
+ timet[0] = utime->atime_s; \
+ timet[1] = utime->mtime_s; \
+ time = &timet; \
+ } \
+
+
+#define UTIME_HAVE_DIR_FD (defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMENSAT))
+
+#if UTIME_HAVE_DIR_FD
+
+static int
+utime_dir_fd(utime_t *utime, int dir_fd, char *path, int follow_symlinks)
+{
+#ifdef HAVE_UTIMENSAT
+ int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW;
+ UTIME_TO_TIMESPEC;
+ return utimensat(dir_fd, path, time, flags);
+#elif defined(HAVE_FUTIMESAT)
+ UTIME_TO_TIMEVAL;
+ /*
+ * follow_symlinks will never be false here;
+ * we only allow !follow_symlinks and dir_fd together
+ * if we have utimensat()
+ */
+ assert(follow_symlinks);
+ return futimesat(dir_fd, path, time);
+#endif
+}
+
+#endif
+
+#define UTIME_HAVE_FD (defined(HAVE_FUTIMES) || defined(HAVE_FUTIMENS))
+
+#if UTIME_HAVE_FD
+
static int
-extract_time(PyObject *t, time_t* sec, long* usec)
+utime_fd(utime_t *utime, int fd)
{
- time_t intval;
- if (PyFloat_Check(t)) {
- double tval = PyFloat_AsDouble(t);
- PyObject *intobj = PyNumber_Long(t);
- if (!intobj)
- return -1;
-#if SIZEOF_TIME_T > SIZEOF_LONG
- intval = PyLong_AsUnsignedLongLongMask(intobj);
+#ifdef HAVE_FUTIMENS
+ UTIME_TO_TIMESPEC;
+ return futimens(fd, time);
#else
- intval = PyLong_AsLong(intobj);
+ UTIME_TO_TIMEVAL;
+ return futimes(fd, time);
#endif
- Py_DECREF(intobj);
- if (intval == -1 && PyErr_Occurred())
- return -1;
- *sec = intval;
- *usec = (long)((tval - intval) * 1e6); /* can't exceed 1000000 */
- if (*usec < 0)
- /* If rounding gave us a negative number,
- truncate. */
- *usec = 0;
- return 0;
- }
-#if SIZEOF_TIME_T > SIZEOF_LONG
- intval = PyLong_AsUnsignedLongLongMask(t);
+}
+
+#endif
+
+
+#define UTIME_HAVE_NOFOLLOW_SYMLINKS \
+ (defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES))
+
+#if UTIME_HAVE_NOFOLLOW_SYMLINKS
+
+static int
+utime_nofollow_symlinks(utime_t *utime, char *path)
+{
+#ifdef HAVE_UTIMENSAT
+ UTIME_TO_TIMESPEC;
+ return utimensat(DEFAULT_DIR_FD, path, time, AT_SYMLINK_NOFOLLOW);
#else
- intval = PyLong_AsLong(t);
+ UTIME_TO_TIMEVAL;
+ return lutimes(path, time);
#endif
- if (intval == -1 && PyErr_Occurred())
- return -1;
- *sec = intval;
- *usec = 0;
- return 0;
}
-PyDoc_STRVAR(posix_utime__doc__,
-"utime(path, (atime, mtime))\n\
-utime(path, None)\n\n\
-Set the access and modified time of the file to the given values. If the\n\
-second form is used, set the access and modified times to the current time.");
+#endif
+
+#ifndef MS_WINDOWS
+
+static int
+utime_default(utime_t *utime, char *path)
+{
+#ifdef HAVE_UTIMENSAT
+ UTIME_TO_TIMESPEC;
+ return utimensat(DEFAULT_DIR_FD, path, time, 0);
+#elif defined(HAVE_UTIMES)
+ UTIME_TO_TIMEVAL;
+ return utimes(path, time);
+#elif defined(HAVE_UTIME_H)
+ UTIME_TO_UTIMBUF;
+ return utime(path, time);
+#else
+ UTIME_TO_TIME_T;
+ return utime(path, time);
+#endif
+}
+
+#endif
+
+static int
+split_py_long_to_s_and_ns(PyObject *py_long, time_t *s, long *ns)
+{
+ int result = 0;
+ PyObject *divmod;
+ divmod = PyNumber_Divmod(py_long, billion);
+ if (!divmod)
+ goto exit;
+ *s = _PyLong_AsTime_t(PyTuple_GET_ITEM(divmod, 0));
+ if ((*s == -1) && PyErr_Occurred())
+ goto exit;
+ *ns = PyLong_AsLong(PyTuple_GET_ITEM(divmod, 1));
+ if ((*ns == -1) && PyErr_Occurred())
+ goto exit;
+
+ result = 1;
+exit:
+ Py_XDECREF(divmod);
+ return result;
+}
static PyObject *
-posix_utime(PyObject *self, PyObject *args)
+posix_utime(PyObject *self, PyObject *args, PyObject *kwargs)
{
+ path_t path;
+ PyObject *times = NULL;
+ PyObject *ns = NULL;
+ int dir_fd = DEFAULT_DIR_FD;
+ int follow_symlinks = 1;
+ char *keywords[] = {"path", "times", "ns", "dir_fd",
+ "follow_symlinks", NULL};
+
+ utime_t utime;
+
#ifdef MS_WINDOWS
- PyObject *arg;
- PyUnicodeObject *obwpath;
- wchar_t *wpath = NULL;
- PyObject *oapath;
- char *apath;
HANDLE hFile;
- time_t atimesec, mtimesec;
- long ausec, musec;
FILETIME atime, mtime;
- PyObject *result = NULL;
+#else
+ int result;
+#endif
- if (PyArg_ParseTuple(args, "UO|:utime", &obwpath, &arg)) {
- wpath = PyUnicode_AS_UNICODE(obwpath);
- Py_BEGIN_ALLOW_THREADS
- hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0,
+ PyObject *return_value = NULL;
+
+ memset(&path, 0, sizeof(path));
+ memset(&utime, 0, sizeof(utime_t));
+#if UTIME_HAVE_FD
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "O&|O$OO&p:utime", keywords,
+ path_converter, &path,
+ &times, &ns,
+#if UTIME_HAVE_DIR_FD
+ dir_fd_converter, &dir_fd,
+#else
+ dir_fd_unavailable, &dir_fd,
+#endif
+ &follow_symlinks
+ ))
+ return NULL;
+
+ if (times && (times != Py_None) && ns) {
+ PyErr_SetString(PyExc_ValueError,
+ "utime: you may specify either 'times'"
+ " or 'ns' but not both");
+ goto exit;
+ }
+
+ if (times && (times != Py_None)) {
+ time_t a_sec, m_sec;
+ long a_nsec, m_nsec;
+ if (!PyTuple_CheckExact(times) || (PyTuple_Size(times) != 2)) {
+ PyErr_SetString(PyExc_TypeError,
+ "utime: 'times' must be either"
+ " a tuple of two ints or None");
+ goto exit;
+ }
+ utime.now = 0;
+ if (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 0),
+ &a_sec, &a_nsec) == -1 ||
+ _PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 1),
+ &m_sec, &m_nsec) == -1) {
+ goto exit;
+ }
+ utime.atime_s = a_sec;
+ utime.atime_ns = a_nsec;
+ utime.mtime_s = m_sec;
+ utime.mtime_ns = m_nsec;
+ }
+ else if (ns) {
+ if (!PyTuple_CheckExact(ns) || (PyTuple_Size(ns) != 2)) {
+ PyErr_SetString(PyExc_TypeError,
+ "utime: 'ns' must be a tuple of two ints");
+ goto exit;
+ }
+ utime.now = 0;
+ if (!split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 0),
+ &utime.atime_s, &utime.atime_ns) ||
+ !split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 1),
+ &utime.mtime_s, &utime.mtime_ns)) {
+ goto exit;
+ }
+ }
+ else {
+ /* times and ns are both None/unspecified. use "now". */
+ utime.now = 1;
+ }
+
+#if !UTIME_HAVE_NOFOLLOW_SYMLINKS
+ if (follow_symlinks_specified("utime", follow_symlinks))
+ goto exit;
+#endif
+
+ if (path_and_dir_fd_invalid("utime", &path, dir_fd) ||
+ dir_fd_and_fd_invalid("utime", dir_fd, path.fd) ||
+ fd_and_follow_symlinks_invalid("utime", path.fd, follow_symlinks))
+ goto exit;
+
+#if !defined(HAVE_UTIMENSAT)
+ if ((dir_fd != DEFAULT_DIR_FD) && (!follow_symlinks)) {
+ PyErr_SetString(PyExc_ValueError,
+ "utime: cannot use dir_fd and follow_symlinks "
+ "together on this platform");
+ goto exit;
+ }
+#endif
+
+#ifdef MS_WINDOWS
+ Py_BEGIN_ALLOW_THREADS
+ if (path.wide)
+ hFile = CreateFileW(path.wide, FILE_WRITE_ATTRIBUTES, 0,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
- Py_END_ALLOW_THREADS
- if (hFile == INVALID_HANDLE_VALUE)
- return win32_error_unicode("utime", wpath);
- } else
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
-
- if (!wpath) {
- if (!PyArg_ParseTuple(args, "O&O:utime",
- PyUnicode_FSConverter, &oapath, &arg))
- return NULL;
- apath = PyBytes_AsString(oapath);
- Py_BEGIN_ALLOW_THREADS
- hFile = CreateFileA(apath, FILE_WRITE_ATTRIBUTES, 0,
+ else
+ hFile = CreateFileA(path.narrow, FILE_WRITE_ATTRIBUTES, 0,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
- Py_END_ALLOW_THREADS
- if (hFile == INVALID_HANDLE_VALUE) {
- win32_error("utime", apath);
- Py_DECREF(oapath);
- return NULL;
- }
- Py_DECREF(oapath);
+ Py_END_ALLOW_THREADS
+ if (hFile == INVALID_HANDLE_VALUE) {
+ win32_error_object("utime", path.object);
+ goto exit;
}
- if (arg == Py_None) {
+ if (utime.now) {
SYSTEMTIME now;
GetSystemTime(&now);
if (!SystemTimeToFileTime(&now, &mtime) ||
!SystemTimeToFileTime(&now, &atime)) {
win32_error("utime", NULL);
- goto done;
+ goto exit;
}
}
- else if (!PyTuple_Check(arg) || PyTuple_Size(arg) != 2) {
- PyErr_SetString(PyExc_TypeError,
- "utime() arg 2 must be a tuple (atime, mtime)");
- goto done;
- }
else {
- if (extract_time(PyTuple_GET_ITEM(arg, 0),
- &atimesec, &ausec) == -1)
- goto done;
- time_t_to_FILE_TIME(atimesec, 1000*ausec, &atime);
- if (extract_time(PyTuple_GET_ITEM(arg, 1),
- &mtimesec, &musec) == -1)
- goto done;
- time_t_to_FILE_TIME(mtimesec, 1000*musec, &mtime);
+ time_t_to_FILE_TIME(utime.atime_s, utime.atime_ns, &atime);
+ time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime);
}
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
/* Avoid putting the file name into the error here,
@@ -3487,93 +4879,52 @@ posix_utime(PyObject *self, PyObject *args)
something is wrong with the file, when it also
could be the time stamp that gives a problem. */
win32_error("utime", NULL);
- goto done;
+ goto exit;
}
- Py_INCREF(Py_None);
- result = Py_None;
-done:
- CloseHandle(hFile);
- return result;
#else /* MS_WINDOWS */
+ Py_BEGIN_ALLOW_THREADS
- PyObject *opath;
- char *path;
- time_t atime, mtime;
- long ausec, musec;
- int res;
- PyObject* arg;
+#if UTIME_HAVE_NOFOLLOW_SYMLINKS
+ if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
+ result = utime_nofollow_symlinks(&utime, path.narrow);
+ else
+#endif
-#if defined(HAVE_UTIMES)
- struct timeval buf[2];
-#define ATIME buf[0].tv_sec
-#define MTIME buf[1].tv_sec
-#elif defined(HAVE_UTIME_H)
-/* XXX should define struct utimbuf instead, above */
- struct utimbuf buf;
-#define ATIME buf.actime
-#define MTIME buf.modtime
-#define UTIME_ARG &buf
-#else /* HAVE_UTIMES */
- time_t buf[2];
-#define ATIME buf[0]
-#define MTIME buf[1]
-#define UTIME_ARG buf
-#endif /* HAVE_UTIMES */
-
-
- if (!PyArg_ParseTuple(args, "O&O:utime",
- PyUnicode_FSConverter, &opath, &arg))
- return NULL;
- path = PyBytes_AsString(opath);
- if (arg == Py_None) {
- /* optional time values not given */
- Py_BEGIN_ALLOW_THREADS
- res = utime(path, NULL);
- Py_END_ALLOW_THREADS
- }
- else if (!PyTuple_Check(arg) || PyTuple_Size(arg) != 2) {
- PyErr_SetString(PyExc_TypeError,
- "utime() arg 2 must be a tuple (atime, mtime)");
- Py_DECREF(opath);
- return NULL;
- }
- else {
- if (extract_time(PyTuple_GET_ITEM(arg, 0),
- &atime, &ausec) == -1) {
- Py_DECREF(opath);
- return NULL;
- }
- if (extract_time(PyTuple_GET_ITEM(arg, 1),
- &mtime, &musec) == -1) {
- Py_DECREF(opath);
- return NULL;
- }
- ATIME = atime;
- MTIME = mtime;
-#ifdef HAVE_UTIMES
- buf[0].tv_usec = ausec;
- buf[1].tv_usec = musec;
- Py_BEGIN_ALLOW_THREADS
- res = utimes(path, buf);
- Py_END_ALLOW_THREADS
-#else
- Py_BEGIN_ALLOW_THREADS
- res = utime(path, UTIME_ARG);
- Py_END_ALLOW_THREADS
-#endif /* HAVE_UTIMES */
- }
- if (res < 0) {
- return posix_error_with_allocated_filename(opath);
+#if UTIME_HAVE_DIR_FD
+ if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
+ result = utime_dir_fd(&utime, dir_fd, path.narrow, follow_symlinks);
+ else
+#endif
+
+#if UTIME_HAVE_FD
+ if (path.fd != -1)
+ result = utime_fd(&utime, path.fd);
+ else
+#endif
+
+ result = utime_default(&utime, path.narrow);
+
+ Py_END_ALLOW_THREADS
+
+ if (result < 0) {
+ /* see previous comment about not putting filename in error here */
+ return_value = posix_error();
+ goto exit;
}
- Py_DECREF(opath);
- Py_INCREF(Py_None);
- return Py_None;
-#undef UTIME_ARG
-#undef ATIME
-#undef MTIME
+
#endif /* MS_WINDOWS */
-}
+ Py_INCREF(Py_None);
+ return_value = Py_None;
+
+exit:
+ path_cleanup(&path);
+#ifdef MS_WINDOWS
+ if (hFile != INVALID_HANDLE_VALUE)
+ CloseHandle(hFile);
+#endif
+ return return_value;
+}
/* Process operations */
@@ -3618,79 +4969,7 @@ int fsconvert_strdup(PyObject *o, char**out)
}
#endif
-
-#ifdef HAVE_EXECV
-PyDoc_STRVAR(posix_execv__doc__,
-"execv(path, args)\n\n\
-Execute an executable path with arguments, replacing current process.\n\
-\n\
- path: path of executable file\n\
- args: tuple or list of strings");
-
-static PyObject *
-posix_execv(PyObject *self, PyObject *args)
-{
- PyObject *opath;
- char *path;
- PyObject *argv;
- char **argvlist;
- Py_ssize_t i, argc;
- PyObject *(*getitem)(PyObject *, Py_ssize_t);
-
- /* execv has two arguments: (path, argv), where
- argv is a list or tuple of strings. */
-
- if (!PyArg_ParseTuple(args, "O&O:execv",
- PyUnicode_FSConverter,
- &opath, &argv))
- return NULL;
- path = PyBytes_AsString(opath);
- if (PyList_Check(argv)) {
- argc = PyList_Size(argv);
- getitem = PyList_GetItem;
- }
- else if (PyTuple_Check(argv)) {
- argc = PyTuple_Size(argv);
- getitem = PyTuple_GetItem;
- }
- else {
- PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list");
- Py_DECREF(opath);
- return NULL;
- }
- if (argc < 1) {
- PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty");
- Py_DECREF(opath);
- return NULL;
- }
-
- argvlist = PyMem_NEW(char *, argc+1);
- if (argvlist == NULL) {
- Py_DECREF(opath);
- return PyErr_NoMemory();
- }
- for (i = 0; i < argc; i++) {
- if (!fsconvert_strdup((*getitem)(argv, i),
- &argvlist[i])) {
- free_string_array(argvlist, i);
- PyErr_SetString(PyExc_TypeError,
- "execv() arg 2 must contain only strings");
- Py_DECREF(opath);
- return NULL;
-
- }
- }
- argvlist[argc] = NULL;
-
- execv(path, argvlist);
-
- /* If we get here it's definitely an error */
-
- free_string_array(argvlist, argc);
- Py_DECREF(opath);
- return posix_error();
-}
-
+#if defined(HAVE_EXECV) || defined (HAVE_FEXECVE)
static char**
parse_envlist(PyObject* env, Py_ssize_t *envc_ptr)
{
@@ -3772,87 +5051,162 @@ error:
return NULL;
}
+static char**
+parse_arglist(PyObject* argv, Py_ssize_t *argc)
+{
+ int i;
+ char **argvlist = PyMem_NEW(char *, *argc+1);
+ if (argvlist == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+ for (i = 0; i < *argc; i++) {
+ PyObject* item = PySequence_ITEM(argv, i);
+ if (item == NULL)
+ goto fail;
+ if (!fsconvert_strdup(item, &argvlist[i])) {
+ Py_DECREF(item);
+ goto fail;
+ }
+ Py_DECREF(item);
+ }
+ argvlist[*argc] = NULL;
+ return argvlist;
+fail:
+ *argc = i;
+ free_string_array(argvlist, *argc);
+ return NULL;
+}
+#endif
+
+#ifdef HAVE_EXECV
+PyDoc_STRVAR(posix_execv__doc__,
+"execv(path, args)\n\n\
+Execute an executable path with arguments, replacing current process.\n\
+\n\
+ path: path of executable file\n\
+ args: tuple or list of strings");
+
+static PyObject *
+posix_execv(PyObject *self, PyObject *args)
+{
+ PyObject *opath;
+ char *path;
+ PyObject *argv;
+ char **argvlist;
+ Py_ssize_t argc;
+
+ /* execv has two arguments: (path, argv), where
+ argv is a list or tuple of strings. */
+
+ if (!PyArg_ParseTuple(args, "O&O:execv",
+ PyUnicode_FSConverter,
+ &opath, &argv))
+ return NULL;
+ path = PyBytes_AsString(opath);
+ if (!PyList_Check(argv) && !PyTuple_Check(argv)) {
+ PyErr_SetString(PyExc_TypeError,
+ "execv() arg 2 must be a tuple or list");
+ Py_DECREF(opath);
+ return NULL;
+ }
+ argc = PySequence_Size(argv);
+ if (argc < 1) {
+ PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty");
+ Py_DECREF(opath);
+ return NULL;
+ }
+
+ argvlist = parse_arglist(argv, &argc);
+ if (argvlist == NULL) {
+ Py_DECREF(opath);
+ return NULL;
+ }
+
+ execv(path, argvlist);
+
+ /* If we get here it's definitely an error */
+
+ free_string_array(argvlist, argc);
+ Py_DECREF(opath);
+ return posix_error();
+}
+
PyDoc_STRVAR(posix_execve__doc__,
"execve(path, args, env)\n\n\
Execute a path with arguments and environment, replacing current process.\n\
\n\
path: path of executable file\n\
args: tuple or list of arguments\n\
- env: dictionary of strings mapping to strings");
+ env: dictionary of strings mapping to strings\n\
+\n\
+On some platforms, you may specify an open file descriptor for path;\n\
+ execve will execute the program the file descriptor is open to.\n\
+ If this functionality is unavailable, using it raises NotImplementedError.");
static PyObject *
-posix_execve(PyObject *self, PyObject *args)
+posix_execve(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath;
- char *path;
+ path_t path;
PyObject *argv, *env;
- char **argvlist;
+ char **argvlist = NULL;
char **envlist;
- Py_ssize_t i, argc, envc;
- PyObject *(*getitem)(PyObject *, Py_ssize_t);
- Py_ssize_t lastarg = 0;
+ Py_ssize_t argc, envc;
+ static char *keywords[] = {"path", "argv", "environment", NULL};
/* execve has three arguments: (path, argv, env), where
argv is a list or tuple of strings and env is a dictionary
like posix.environ. */
- if (!PyArg_ParseTuple(args, "O&OO:execve",
- PyUnicode_FSConverter,
- &opath, &argv, &env))
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FEXECVE
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&OO:execve", keywords,
+ path_converter, &path,
+ &argv, &env
+ ))
return NULL;
- path = PyBytes_AsString(opath);
- if (PyList_Check(argv)) {
- argc = PyList_Size(argv);
- getitem = PyList_GetItem;
- }
- else if (PyTuple_Check(argv)) {
- argc = PyTuple_Size(argv);
- getitem = PyTuple_GetItem;
- }
- else {
+
+ if (!PyList_Check(argv) && !PyTuple_Check(argv)) {
PyErr_SetString(PyExc_TypeError,
- "execve() arg 2 must be a tuple or list");
- goto fail_0;
+ "execve: argv must be a tuple or list");
+ goto fail;
}
+ argc = PySequence_Size(argv);
if (!PyMapping_Check(env)) {
PyErr_SetString(PyExc_TypeError,
- "execve() arg 3 must be a mapping object");
- goto fail_0;
+ "execve: environment must be a mapping object");
+ goto fail;
}
- argvlist = PyMem_NEW(char *, argc+1);
+ argvlist = parse_arglist(argv, &argc);
if (argvlist == NULL) {
- PyErr_NoMemory();
- goto fail_0;
- }
- for (i = 0; i < argc; i++) {
- if (!fsconvert_strdup((*getitem)(argv, i),
- &argvlist[i]))
- {
- lastarg = i;
- goto fail_1;
- }
+ goto fail;
}
- lastarg = argc;
- argvlist[argc] = NULL;
envlist = parse_envlist(env, &envc);
if (envlist == NULL)
- goto fail_1;
+ goto fail;
- execve(path, argvlist, envlist);
+#ifdef HAVE_FEXECVE
+ if (path.fd > -1)
+ fexecve(path.fd, argvlist, envlist);
+ else
+#endif
+ execve(path.narrow, argvlist, envlist);
/* If we get here it's definitely an error */
- (void) posix_error();
+ path_posix_error("execve", &path);
while (--envc >= 0)
PyMem_DEL(envlist[envc]);
PyMem_DEL(envlist);
- fail_1:
- free_string_array(argvlist, lastarg);
- fail_0:
- Py_DECREF(opath);
+ fail:
+ if (argvlist)
+ free_string_array(argvlist, argc);
+ path_cleanup(&path);
return NULL;
}
#endif /* HAVE_EXECV */
@@ -4297,6 +5651,405 @@ posix_fork(PyObject *self, PyObject *noargs)
}
#endif
+#ifdef HAVE_SCHED_H
+
+#ifdef HAVE_SCHED_GET_PRIORITY_MAX
+
+PyDoc_STRVAR(posix_sched_get_priority_max__doc__,
+"sched_get_priority_max(policy)\n\n\
+Get the maximum scheduling priority for *policy*.");
+
+static PyObject *
+posix_sched_get_priority_max(PyObject *self, PyObject *args)
+{
+ int policy, max;
+
+ if (!PyArg_ParseTuple(args, "i:sched_get_priority_max", &policy))
+ return NULL;
+ max = sched_get_priority_max(policy);
+ if (max < 0)
+ return posix_error();
+ return PyLong_FromLong(max);
+}
+
+PyDoc_STRVAR(posix_sched_get_priority_min__doc__,
+"sched_get_priority_min(policy)\n\n\
+Get the minimum scheduling priority for *policy*.");
+
+static PyObject *
+posix_sched_get_priority_min(PyObject *self, PyObject *args)
+{
+ int policy, min;
+
+ if (!PyArg_ParseTuple(args, "i:sched_get_priority_min", &policy))
+ return NULL;
+ min = sched_get_priority_min(policy);
+ if (min < 0)
+ return posix_error();
+ return PyLong_FromLong(min);
+}
+
+#endif /* HAVE_SCHED_GET_PRIORITY_MAX */
+
+#ifdef HAVE_SCHED_SETSCHEDULER
+
+PyDoc_STRVAR(posix_sched_getscheduler__doc__,
+"sched_getscheduler(pid)\n\n\
+Get the scheduling policy for the process with a PID of *pid*.\n\
+Passing a PID of 0 returns the scheduling policy for the calling process.");
+
+static PyObject *
+posix_sched_getscheduler(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ int policy;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getscheduler", &pid))
+ return NULL;
+ policy = sched_getscheduler(pid);
+ if (policy < 0)
+ return posix_error();
+ return PyLong_FromLong(policy);
+}
+
+#endif
+
+#if defined(HAVE_SCHED_SETSCHEDULER) || defined(HAVE_SCHED_SETPARAM)
+
+static PyObject *
+sched_param_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ PyObject *res, *priority;
+ static char *kwlist[] = {"sched_priority", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:sched_param", kwlist, &priority))
+ return NULL;
+ res = PyStructSequence_New(type);
+ if (!res)
+ return NULL;
+ Py_INCREF(priority);
+ PyStructSequence_SET_ITEM(res, 0, priority);
+ return res;
+}
+
+PyDoc_STRVAR(sched_param__doc__,
+"sched_param(sched_priority): A scheduling parameter.\n\n\
+Current has only one field: sched_priority");
+
+static PyStructSequence_Field sched_param_fields[] = {
+ {"sched_priority", "the scheduling priority"},
+ {0}
+};
+
+static PyStructSequence_Desc sched_param_desc = {
+ "sched_param", /* name */
+ sched_param__doc__, /* doc */
+ sched_param_fields,
+ 1
+};
+
+static int
+convert_sched_param(PyObject *param, struct sched_param *res)
+{
+ long priority;
+
+ if (Py_TYPE(param) != &SchedParamType) {
+ PyErr_SetString(PyExc_TypeError, "must have a sched_param object");
+ return 0;
+ }
+ priority = PyLong_AsLong(PyStructSequence_GET_ITEM(param, 0));
+ if (priority == -1 && PyErr_Occurred())
+ return 0;
+ if (priority > INT_MAX || priority < INT_MIN) {
+ PyErr_SetString(PyExc_OverflowError, "sched_priority out of range");
+ return 0;
+ }
+ res->sched_priority = Py_SAFE_DOWNCAST(priority, long, int);
+ return 1;
+}
+
+#endif
+
+#ifdef HAVE_SCHED_SETSCHEDULER
+
+PyDoc_STRVAR(posix_sched_setscheduler__doc__,
+"sched_setscheduler(pid, policy, param)\n\n\
+Set the scheduling policy, *policy*, for *pid*.\n\
+If *pid* is 0, the calling process is changed.\n\
+*param* is an instance of sched_param.");
+
+static PyObject *
+posix_sched_setscheduler(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ int policy;
+ struct sched_param param;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID "iO&:sched_setscheduler",
+ &pid, &policy, &convert_sched_param, &param))
+ return NULL;
+
+ /*
+ ** sched_setscheduler() returns 0 in Linux, but the previous
+ ** scheduling policy under Solaris/Illumos, and others.
+ ** On error, -1 is returned in all Operating Systems.
+ */
+ if (sched_setscheduler(pid, policy, &param) == -1)
+ return posix_error();
+ Py_RETURN_NONE;
+}
+
+#endif
+
+#ifdef HAVE_SCHED_SETPARAM
+
+PyDoc_STRVAR(posix_sched_getparam__doc__,
+"sched_getparam(pid) -> sched_param\n\n\
+Returns scheduling parameters for the process with *pid* as an instance of the\n\
+sched_param class. A PID of 0 means the calling process.");
+
+static PyObject *
+posix_sched_getparam(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ struct sched_param param;
+ PyObject *res, *priority;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getparam", &pid))
+ return NULL;
+ if (sched_getparam(pid, &param))
+ return posix_error();
+ res = PyStructSequence_New(&SchedParamType);
+ if (!res)
+ return NULL;
+ priority = PyLong_FromLong(param.sched_priority);
+ if (!priority) {
+ Py_DECREF(res);
+ return NULL;
+ }
+ PyStructSequence_SET_ITEM(res, 0, priority);
+ return res;
+}
+
+PyDoc_STRVAR(posix_sched_setparam__doc__,
+"sched_setparam(pid, param)\n\n\
+Set scheduling parameters for a process with PID *pid*.\n\
+A PID of 0 means the calling process.");
+
+static PyObject *
+posix_sched_setparam(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ struct sched_param param;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID "O&:sched_setparam",
+ &pid, &convert_sched_param, &param))
+ return NULL;
+ if (sched_setparam(pid, &param))
+ return posix_error();
+ Py_RETURN_NONE;
+}
+
+#endif
+
+#ifdef HAVE_SCHED_RR_GET_INTERVAL
+
+PyDoc_STRVAR(posix_sched_rr_get_interval__doc__,
+"sched_rr_get_interval(pid) -> float\n\n\
+Return the round-robin quantum for the process with PID *pid* in seconds.");
+
+static PyObject *
+posix_sched_rr_get_interval(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ struct timespec interval;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_rr_get_interval", &pid))
+ return NULL;
+ if (sched_rr_get_interval(pid, &interval))
+ return posix_error();
+ return PyFloat_FromDouble((double)interval.tv_sec + 1e-9*interval.tv_nsec);
+}
+
+#endif
+
+PyDoc_STRVAR(posix_sched_yield__doc__,
+"sched_yield()\n\n\
+Voluntarily relinquish the CPU.");
+
+static PyObject *
+posix_sched_yield(PyObject *self, PyObject *noargs)
+{
+ if (sched_yield())
+ return posix_error();
+ Py_RETURN_NONE;
+}
+
+#ifdef HAVE_SCHED_SETAFFINITY
+
+/* The minimum number of CPUs allocated in a cpu_set_t */
+static const int NCPUS_START = sizeof(unsigned long) * CHAR_BIT;
+
+PyDoc_STRVAR(posix_sched_setaffinity__doc__,
+"sched_setaffinity(pid, cpu_set)\n\n\
+Set the affinity of the process with PID *pid* to *cpu_set*.");
+
+static PyObject *
+posix_sched_setaffinity(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ int ncpus;
+ size_t setsize;
+ cpu_set_t *mask = NULL;
+ PyObject *iterable, *iterator = NULL, *item;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID "O:sched_setaffinity",
+ &pid, &iterable))
+ return NULL;
+
+ iterator = PyObject_GetIter(iterable);
+ if (iterator == NULL)
+ return NULL;
+
+ ncpus = NCPUS_START;
+ setsize = CPU_ALLOC_SIZE(ncpus);
+ mask = CPU_ALLOC(ncpus);
+ if (mask == NULL) {
+ PyErr_NoMemory();
+ goto error;
+ }
+ CPU_ZERO_S(setsize, mask);
+
+ while ((item = PyIter_Next(iterator))) {
+ long cpu;
+ if (!PyLong_Check(item)) {
+ PyErr_Format(PyExc_TypeError,
+ "expected an iterator of ints, "
+ "but iterator yielded %R",
+ Py_TYPE(item));
+ Py_DECREF(item);
+ goto error;
+ }
+ cpu = PyLong_AsLong(item);
+ Py_DECREF(item);
+ if (cpu < 0) {
+ if (!PyErr_Occurred())
+ PyErr_SetString(PyExc_ValueError, "negative CPU number");
+ goto error;
+ }
+ if (cpu > INT_MAX - 1) {
+ PyErr_SetString(PyExc_OverflowError, "CPU number too large");
+ goto error;
+ }
+ if (cpu >= ncpus) {
+ /* Grow CPU mask to fit the CPU number */
+ int newncpus = ncpus;
+ cpu_set_t *newmask;
+ size_t newsetsize;
+ while (newncpus <= cpu) {
+ if (newncpus > INT_MAX / 2)
+ newncpus = cpu + 1;
+ else
+ newncpus = newncpus * 2;
+ }
+ newmask = CPU_ALLOC(newncpus);
+ if (newmask == NULL) {
+ PyErr_NoMemory();
+ goto error;
+ }
+ newsetsize = CPU_ALLOC_SIZE(newncpus);
+ CPU_ZERO_S(newsetsize, newmask);
+ memcpy(newmask, mask, setsize);
+ CPU_FREE(mask);
+ setsize = newsetsize;
+ mask = newmask;
+ ncpus = newncpus;
+ }
+ CPU_SET_S(cpu, setsize, mask);
+ }
+ Py_CLEAR(iterator);
+
+ if (sched_setaffinity(pid, setsize, mask)) {
+ posix_error();
+ goto error;
+ }
+ CPU_FREE(mask);
+ Py_RETURN_NONE;
+
+error:
+ if (mask)
+ CPU_FREE(mask);
+ Py_XDECREF(iterator);
+ return NULL;
+}
+
+PyDoc_STRVAR(posix_sched_getaffinity__doc__,
+"sched_getaffinity(pid, ncpus) -> cpu_set\n\n\
+Return the affinity of the process with PID *pid*.\n\
+The returned cpu_set will be of size *ncpus*.");
+
+static PyObject *
+posix_sched_getaffinity(PyObject *self, PyObject *args)
+{
+ pid_t pid;
+ int cpu, ncpus, count;
+ size_t setsize;
+ cpu_set_t *mask = NULL;
+ PyObject *res = NULL;
+
+ if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getaffinity",
+ &pid))
+ return NULL;
+
+ ncpus = NCPUS_START;
+ while (1) {
+ setsize = CPU_ALLOC_SIZE(ncpus);
+ mask = CPU_ALLOC(ncpus);
+ if (mask == NULL)
+ return PyErr_NoMemory();
+ if (sched_getaffinity(pid, setsize, mask) == 0)
+ break;
+ CPU_FREE(mask);
+ if (errno != EINVAL)
+ return posix_error();
+ if (ncpus > INT_MAX / 2) {
+ PyErr_SetString(PyExc_OverflowError, "could not allocate "
+ "a large enough CPU set");
+ return NULL;
+ }
+ ncpus = ncpus * 2;
+ }
+
+ res = PySet_New(NULL);
+ if (res == NULL)
+ goto error;
+ for (cpu = 0, count = CPU_COUNT_S(setsize, mask); count; cpu++) {
+ if (CPU_ISSET_S(cpu, setsize, mask)) {
+ PyObject *cpu_num = PyLong_FromLong(cpu);
+ --count;
+ if (cpu_num == NULL)
+ goto error;
+ if (PySet_Add(res, cpu_num)) {
+ Py_DECREF(cpu_num);
+ goto error;
+ }
+ Py_DECREF(cpu_num);
+ }
+ }
+ CPU_FREE(mask);
+ return res;
+
+error:
+ if (mask)
+ CPU_FREE(mask);
+ Py_XDECREF(res);
+ return NULL;
+}
+
+#endif /* HAVE_SCHED_SETAFFINITY */
+
+#endif /* HAVE_SCHED_H */
+
/* AIX uses /dev/ptc but is otherwise the same as /dev/ptmx */
/* IRIX has both /dev/ptc and /dev/ptmx, use ptmx */
#if defined(HAVE_DEV_PTC) && !defined(HAVE_DEV_PTMX)
@@ -4423,6 +6176,7 @@ posix_forkpty(PyObject *self, PyObject *noargs)
}
#endif
+
#ifdef HAVE_GETEGID
PyDoc_STRVAR(posix_getegid__doc__,
"getegid() -> egid\n\n\
@@ -4472,6 +6226,80 @@ posix_getpid(PyObject *self, PyObject *noargs)
return PyLong_FromPid(getpid());
}
+#ifdef HAVE_GETGROUPLIST
+PyDoc_STRVAR(posix_getgrouplist__doc__,
+"getgrouplist(user, group) -> list of groups to which a user belongs\n\n\
+Returns a list of groups to which a user belongs.\n\n\
+ user: username to lookup\n\
+ group: base group id of the user");
+
+static PyObject *
+posix_getgrouplist(PyObject *self, PyObject *args)
+{
+#ifdef NGROUPS_MAX
+#define MAX_GROUPS NGROUPS_MAX
+#else
+ /* defined to be 16 on Solaris7, so this should be a small number */
+#define MAX_GROUPS 64
+#endif
+
+ const char *user;
+ int i, ngroups;
+ PyObject *list;
+#ifdef __APPLE__
+ int *groups, basegid;
+#else
+ gid_t *groups, basegid;
+#endif
+ ngroups = MAX_GROUPS;
+
+#ifdef __APPLE__
+ if (!PyArg_ParseTuple(args, "si:getgrouplist", &user, &basegid))
+ return NULL;
+#else
+ if (!PyArg_ParseTuple(args, "sO&:getgrouplist", &user,
+ _Py_Gid_Converter, &basegid))
+ return NULL;
+#endif
+
+#ifdef __APPLE__
+ groups = PyMem_Malloc(ngroups * sizeof(int));
+#else
+ groups = PyMem_Malloc(ngroups * sizeof(gid_t));
+#endif
+ if (groups == NULL)
+ return PyErr_NoMemory();
+
+ if (getgrouplist(user, basegid, groups, &ngroups) == -1) {
+ PyMem_Del(groups);
+ return posix_error();
+ }
+
+ list = PyList_New(ngroups);
+ if (list == NULL) {
+ PyMem_Del(groups);
+ return NULL;
+ }
+
+ for (i = 0; i < ngroups; i++) {
+#ifdef __APPLE__
+ PyObject *o = PyLong_FromUnsignedLong((unsigned long)groups[i]);
+#else
+ PyObject *o = _PyLong_FromGid(groups[i]);
+#endif
+ if (o == NULL) {
+ Py_DECREF(list);
+ PyMem_Del(groups);
+ return NULL;
+ }
+ PyList_SET_ITEM(list, i, o);
+ }
+
+ PyMem_Del(groups);
+
+ return list;
+}
+#endif
#ifdef HAVE_GETGROUPS
PyDoc_STRVAR(posix_getgroups__doc__,
@@ -4502,6 +6330,34 @@ posix_getgroups(PyObject *self, PyObject *noargs)
gid_t* alt_grouplist = grouplist;
int n;
+#ifdef __APPLE__
+ /* Issue #17557: As of OS X 10.8, getgroups(2) no longer raises EINVAL if
+ * there are more groups than can fit in grouplist. Therefore, on OS X
+ * always first call getgroups with length 0 to get the actual number
+ * of groups.
+ */
+ n = getgroups(0, NULL);
+ if (n < 0) {
+ return posix_error();
+ } else if (n <= MAX_GROUPS) {
+ /* groups will fit in existing array */
+ alt_grouplist = grouplist;
+ } else {
+ alt_grouplist = PyMem_Malloc(n * sizeof(gid_t));
+ if (alt_grouplist == NULL) {
+ errno = EINVAL;
+ return posix_error();
+ }
+ }
+
+ n = getgroups(n, alt_grouplist);
+ if (n == -1) {
+ if (alt_grouplist != grouplist) {
+ PyMem_Free(alt_grouplist);
+ }
+ return posix_error();
+ }
+#else
n = getgroups(MAX_GROUPS, grouplist);
if (n < 0) {
if (errno == EINVAL) {
@@ -4528,6 +6384,8 @@ posix_getgroups(PyObject *self, PyObject *noargs)
return posix_error();
}
}
+#endif
+
result = PyList_New(n);
if (result != NULL) {
int i;
@@ -4720,7 +6578,7 @@ posix_getlogin(PyObject *self, PyObject *noargs)
PyObject *result = NULL;
#ifdef MS_WINDOWS
wchar_t user_name[UNLEN + 1];
- DWORD num_chars = sizeof(user_name)/sizeof(user_name[0]);
+ DWORD num_chars = Py_ARRAY_LENGTH(user_name);
if (GetUserNameW(user_name, &num_chars)) {
/* num_chars is the number of unicode chars plus null terminator */
@@ -5061,6 +6919,7 @@ wait_helper(pid_t pid, int status, struct rusage *ru)
{
PyObject *result;
static PyObject *struct_rusage;
+ _Py_IDENTIFIER(struct_rusage);
if (pid == -1)
return posix_error();
@@ -5069,7 +6928,7 @@ wait_helper(pid_t pid, int status, struct rusage *ru)
PyObject *m = PyImport_ImportModuleNoBlock("resource");
if (m == NULL)
return NULL;
- struct_rusage = PyObject_GetAttrString(m, "struct_rusage");
+ struct_rusage = _PyObject_GetAttrId(m, &PyId_struct_rusage);
Py_DECREF(m);
if (struct_rusage == NULL)
return NULL;
@@ -5165,6 +7024,55 @@ posix_wait4(PyObject *self, PyObject *args)
}
#endif /* HAVE_WAIT4 */
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+PyDoc_STRVAR(posix_waitid__doc__,
+"waitid(idtype, id, options) -> waitid_result\n\n\
+Wait for the completion of one or more child processes.\n\n\
+idtype can be P_PID, P_PGID or P_ALL.\n\
+id specifies the pid to wait on.\n\
+options is constructed from the ORing of one or more of WEXITED, WSTOPPED\n\
+or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n\
+Returns either waitid_result or None if WNOHANG is specified and there are\n\
+no children in a waitable state.");
+
+static PyObject *
+posix_waitid(PyObject *self, PyObject *args)
+{
+ PyObject *result;
+ idtype_t idtype;
+ id_t id;
+ int options, res;
+ siginfo_t si;
+ si.si_pid = 0;
+ if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID "i:waitid", &idtype, &id, &options))
+ return NULL;
+ Py_BEGIN_ALLOW_THREADS
+ res = waitid(idtype, id, &si, options);
+ Py_END_ALLOW_THREADS
+ if (res == -1)
+ return posix_error();
+
+ if (si.si_pid == 0)
+ Py_RETURN_NONE;
+
+ result = PyStructSequence_New(&WaitidResultType);
+ if (!result)
+ return NULL;
+
+ PyStructSequence_SET_ITEM(result, 0, PyLong_FromPid(si.si_pid));
+ PyStructSequence_SET_ITEM(result, 1, _PyLong_FromUid(si.si_uid));
+ PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong((long)(si.si_signo)));
+ PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong((long)(si.si_status)));
+ PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong((long)(si.si_code)));
+ if (PyErr_Occurred()) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+#endif
+
#ifdef HAVE_WAITPID
PyDoc_STRVAR(posix_waitpid__doc__,
"waitpid(pid, options) -> (pid, status)\n\n\
@@ -5238,106 +7146,351 @@ posix_wait(PyObject *self, PyObject *noargs)
#endif
-PyDoc_STRVAR(posix_lstat__doc__,
-"lstat(path) -> stat result\n\n\
-Like stat(path), but do not follow symbolic links.");
+#if defined(HAVE_READLINK) || defined(MS_WINDOWS)
+PyDoc_STRVAR(readlink__doc__,
+"readlink(path, *, dir_fd=None) -> path\n\n\
+Return a string representing the path to which the symbolic link points.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
+#endif
+
+#ifdef HAVE_READLINK
static PyObject *
-posix_lstat(PyObject *self, PyObject *args)
+posix_readlink(PyObject *self, PyObject *args, PyObject *kwargs)
{
-#ifdef HAVE_LSTAT
- return posix_do_stat(self, args, "O&:lstat", lstat, NULL, NULL);
-#else /* !HAVE_LSTAT */
-#ifdef MS_WINDOWS
- return posix_do_stat(self, args, "O&:lstat", win32_lstat, "U:lstat",
- win32_lstat_w);
+ path_t path;
+ int dir_fd = DEFAULT_DIR_FD;
+ char buffer[MAXPATHLEN];
+ ssize_t length;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "dir_fd", NULL};
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:readlink", keywords,
+ path_converter, &path,
+#ifdef HAVE_READLINKAT
+ dir_fd_converter, &dir_fd
#else
- return posix_do_stat(self, args, "O&:lstat", STAT, NULL, NULL);
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+#ifdef HAVE_READLINKAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ length = readlinkat(dir_fd, path.narrow, buffer, sizeof(buffer));
+ else
#endif
-#endif /* !HAVE_LSTAT */
+ length = readlink(path.narrow, buffer, sizeof(buffer));
+ Py_END_ALLOW_THREADS
+
+ if (length < 0) {
+ return_value = path_posix_error("readlink", &path);
+ goto exit;
+ }
+
+ if (PyUnicode_Check(path.object))
+ return_value = PyUnicode_DecodeFSDefaultAndSize(buffer, length);
+ else
+ return_value = PyBytes_FromStringAndSize(buffer, length);
+exit:
+ path_cleanup(&path);
+ return return_value;
}
-#ifdef HAVE_READLINK
-PyDoc_STRVAR(posix_readlink__doc__,
-"readlink(path) -> path\n\n\
-Return a string representing the path to which the symbolic link points.");
+#endif /* HAVE_READLINK */
-static PyObject *
-posix_readlink(PyObject *self, PyObject *args)
+
+#ifdef HAVE_SYMLINK
+PyDoc_STRVAR(posix_symlink__doc__,
+"symlink(src, dst, target_is_directory=False, *, dir_fd=None)\n\n\
+Create a symbolic link pointing to src named dst.\n\n\
+target_is_directory is required on Windows if the target is to be\n\
+ interpreted as a directory. (On Windows, symlink requires\n\
+ Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n\
+ target_is_directory is ignored on non-Windows platforms.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
+
+#if defined(MS_WINDOWS)
+
+/* Grab CreateSymbolicLinkW dynamically from kernel32 */
+static DWORD (CALLBACK *Py_CreateSymbolicLinkW)(LPWSTR, LPWSTR, DWORD) = NULL;
+static DWORD (CALLBACK *Py_CreateSymbolicLinkA)(LPSTR, LPSTR, DWORD) = NULL;
+static int
+check_CreateSymbolicLink()
{
- PyObject* v;
- char buf[MAXPATHLEN];
- PyObject *opath;
- char *path;
- int n;
- int arg_is_unicode = 0;
+ HINSTANCE hKernel32;
+ /* only recheck */
+ if (Py_CreateSymbolicLinkW && Py_CreateSymbolicLinkA)
+ return 1;
+ hKernel32 = GetModuleHandleW(L"KERNEL32");
+ *(FARPROC*)&Py_CreateSymbolicLinkW = GetProcAddress(hKernel32,
+ "CreateSymbolicLinkW");
+ *(FARPROC*)&Py_CreateSymbolicLinkA = GetProcAddress(hKernel32,
+ "CreateSymbolicLinkA");
+ return (Py_CreateSymbolicLinkW && Py_CreateSymbolicLinkA);
+}
- if (!PyArg_ParseTuple(args, "O&:readlink",
- PyUnicode_FSConverter, &opath))
- return NULL;
- path = PyBytes_AsString(opath);
- v = PySequence_GetItem(args, 0);
- if (v == NULL) {
- Py_DECREF(opath);
- return NULL;
+void _dirnameW(WCHAR *path) {
+ /* Remove the last portion of the path */
+
+ WCHAR *ptr;
+
+ /* walk the path from the end until a backslash is encountered */
+ for(ptr = path + wcslen(path); ptr != path; ptr--)
+ {
+ if(*ptr == *L"\\" || *ptr == *L"/") {
+ break;
+ }
}
+ *ptr = 0;
+}
+
+void _dirnameA(char *path) {
+ /* Remove the last portion of the path */
- if (PyUnicode_Check(v)) {
- arg_is_unicode = 1;
+ char *ptr;
+
+ /* walk the path from the end until a backslash is encountered */
+ for(ptr = path + strlen(path); ptr != path; ptr--)
+ {
+ if(*ptr == '\\' || *ptr == '/') {
+ break;
+ }
}
- Py_DECREF(v);
+ *ptr = 0;
+}
- Py_BEGIN_ALLOW_THREADS
- n = readlink(path, buf, (int) sizeof buf);
- Py_END_ALLOW_THREADS
- if (n < 0)
- return posix_error_with_allocated_filename(opath);
+int _is_absW(WCHAR *path) {
+ /* Is this path absolute? */
+
+ return path[0] == L'\\' || path[0] == L'/' || path[1] == L':';
- Py_DECREF(opath);
- if (arg_is_unicode)
- return PyUnicode_DecodeFSDefaultAndSize(buf, n);
- else
- return PyBytes_FromStringAndSize(buf, n);
}
-#endif /* HAVE_READLINK */
+int _is_absA(char *path) {
+ /* Is this path absolute? */
-#if defined(HAVE_SYMLINK) && !defined(MS_WINDOWS)
-PyDoc_STRVAR(posix_symlink__doc__,
-"symlink(src, dst)\n\n\
-Create a symbolic link pointing to src named dst.");
+ return path[0] == '\\' || path[0] == '/' || path[1] == ':';
+
+}
+
+void _joinW(WCHAR *dest_path, const WCHAR *root, const WCHAR *rest) {
+ /* join root and rest with a backslash */
+ int root_len;
+
+ if(_is_absW(rest)) {
+ wcscpy(dest_path, rest);
+ return;
+ }
+
+ root_len = wcslen(root);
+
+ wcscpy(dest_path, root);
+ if(root_len) {
+ dest_path[root_len] = *L"\\";
+ root_len += 1;
+ }
+ wcscpy(dest_path+root_len, rest);
+}
+
+void _joinA(char *dest_path, const char *root, const char *rest) {
+ /* join root and rest with a backslash */
+ int root_len;
+
+ if(_is_absA(rest)) {
+ strcpy(dest_path, rest);
+ return;
+ }
+
+ root_len = strlen(root);
+
+ strcpy(dest_path, root);
+ if(root_len) {
+ dest_path[root_len] = '\\';
+ root_len += 1;
+ }
+ strcpy(dest_path+root_len, rest);
+}
+
+int _check_dirW(WCHAR *src, WCHAR *dest)
+{
+ /* Return True if the path at src relative to dest is a directory */
+ WIN32_FILE_ATTRIBUTE_DATA src_info;
+ WCHAR dest_parent[MAX_PATH];
+ WCHAR src_resolved[MAX_PATH] = L"";
+
+ /* dest_parent = os.path.dirname(dest) */
+ wcscpy(dest_parent, dest);
+ _dirnameW(dest_parent);
+ /* src_resolved = os.path.join(dest_parent, src) */
+ _joinW(src_resolved, dest_parent, src);
+ return (
+ GetFileAttributesExW(src_resolved, GetFileExInfoStandard, &src_info)
+ && src_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
+ );
+}
+
+int _check_dirA(char *src, char *dest)
+{
+ /* Return True if the path at src relative to dest is a directory */
+ WIN32_FILE_ATTRIBUTE_DATA src_info;
+ char dest_parent[MAX_PATH];
+ char src_resolved[MAX_PATH] = "";
+
+ /* dest_parent = os.path.dirname(dest) */
+ strcpy(dest_parent, dest);
+ _dirnameW(dest_parent);
+ /* src_resolved = os.path.join(dest_parent, src) */
+ _joinW(src_resolved, dest_parent, src);
+ return (
+ GetFileAttributesExA(src_resolved, GetFileExInfoStandard, &src_info)
+ && src_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
+ );
+}
+
+#endif
static PyObject *
-posix_symlink(PyObject *self, PyObject *args)
+posix_symlink(PyObject *self, PyObject *args, PyObject *kwargs)
{
- return posix_2str(args, "O&O&:symlink", symlink);
+ path_t src;
+ path_t dst;
+ int dir_fd = DEFAULT_DIR_FD;
+ int target_is_directory = 0;
+ static char *keywords[] = {"src", "dst", "target_is_directory",
+ "dir_fd", NULL};
+ PyObject *return_value;
+#ifdef MS_WINDOWS
+ DWORD result;
+#else
+ int result;
+#endif
+
+ memset(&src, 0, sizeof(src));
+ src.argument_name = "src";
+ memset(&dst, 0, sizeof(dst));
+ dst.argument_name = "dst";
+
+#ifdef MS_WINDOWS
+ if (!check_CreateSymbolicLink()) {
+ PyErr_SetString(PyExc_NotImplementedError,
+ "CreateSymbolicLink functions not found");
+ return NULL;
+ }
+ if (!win32_can_symlink) {
+ PyErr_SetString(PyExc_OSError, "symbolic link privilege not held");
+ return NULL;
+ }
+#endif
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|i$O&:symlink",
+ keywords,
+ path_converter, &src,
+ path_converter, &dst,
+ &target_is_directory,
+#ifdef HAVE_SYMLINKAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
+ return NULL;
+
+ if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) {
+ PyErr_SetString(PyExc_ValueError,
+ "symlink: src and dst must be the same type");
+ return_value = NULL;
+ goto exit;
+ }
+
+#ifdef MS_WINDOWS
+
+ Py_BEGIN_ALLOW_THREADS
+ if (dst.wide) {
+ /* if src is a directory, ensure target_is_directory==1 */
+ target_is_directory |= _check_dirW(src.wide, dst.wide);
+ result = Py_CreateSymbolicLinkW(dst.wide, src.wide,
+ target_is_directory);
+ }
+ else {
+ /* if src is a directory, ensure target_is_directory==1 */
+ target_is_directory |= _check_dirA(src.narrow, dst.narrow);
+ result = Py_CreateSymbolicLinkA(dst.narrow, src.narrow,
+ target_is_directory);
+ }
+ Py_END_ALLOW_THREADS
+
+ if (!result) {
+ return_value = win32_error_object("symlink", src.object);
+ goto exit;
+ }
+
+#else
+
+ Py_BEGIN_ALLOW_THREADS
+#if HAVE_SYMLINKAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = symlinkat(src.narrow, dir_fd, dst.narrow);
+ else
+#endif
+ result = symlink(src.narrow, dst.narrow);
+ Py_END_ALLOW_THREADS
+
+ if (result) {
+ return_value = path_error("symlink", &dst);
+ goto exit;
+ }
+#endif
+
+ return_value = Py_None;
+ Py_INCREF(Py_None);
+ goto exit; /* silence "unused label" warning */
+exit:
+ path_cleanup(&src);
+ path_cleanup(&dst);
+ return return_value;
}
+
#endif /* HAVE_SYMLINK */
-#if !defined(HAVE_READLINK) && defined(MS_WINDOWS)
-PyDoc_STRVAR(win_readlink__doc__,
-"readlink(path) -> path\n\n\
-Return a string representing the path to which the symbolic link points.");
+#if !defined(HAVE_READLINK) && defined(MS_WINDOWS)
-/* Windows readlink implementation */
static PyObject *
-win_readlink(PyObject *self, PyObject *args)
+win_readlink(PyObject *self, PyObject *args, PyObject *kwargs)
{
wchar_t *path;
DWORD n_bytes_returned;
DWORD io_result;
- PyObject *result;
+ PyObject *po, *result;
+ int dir_fd;
HANDLE reparse_point_handle;
char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer;
wchar_t *print_name;
- if (!PyArg_ParseTuple(args,
- "u:readlink",
- &path))
+ static char *keywords[] = {"path", "dir_fd", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U|$O&:readlink", keywords,
+ &po,
+ dir_fd_unavailable, &dir_fd
+ ))
+ return NULL;
+
+ path = PyUnicode_AsUnicode(po);
+ if (path == NULL)
return NULL;
/* First get a handle to the reparse point */
@@ -5353,9 +7506,7 @@ win_readlink(PyObject *self, PyObject *args)
Py_END_ALLOW_THREADS
if (reparse_point_handle==INVALID_HANDLE_VALUE)
- {
- return win32_error_unicode("readlink", path);
- }
+ return win32_error_object("readlink", po);
Py_BEGIN_ALLOW_THREADS
/* New call DeviceIoControl to read the reparse point */
@@ -5371,9 +7522,7 @@ win_readlink(PyObject *self, PyObject *args)
Py_END_ALLOW_THREADS
if (io_result==0)
- {
- return win32_error_unicode("readlink", path);
- }
+ return win32_error_object("readlink", po);
if (rdb->ReparseTag != IO_REPARSE_TAG_SYMLINK)
{
@@ -5391,80 +7540,76 @@ win_readlink(PyObject *self, PyObject *args)
#endif /* !defined(HAVE_READLINK) && defined(MS_WINDOWS) */
-#if defined(HAVE_SYMLINK) && defined(MS_WINDOWS)
-/* Grab CreateSymbolicLinkW dynamically from kernel32 */
-static int has_CreateSymbolicLinkW = 0;
-static DWORD (CALLBACK *Py_CreateSymbolicLinkW)(LPWSTR, LPWSTR, DWORD);
-static int
-check_CreateSymbolicLinkW()
-{
- HINSTANCE hKernel32;
- /* only recheck */
- if (has_CreateSymbolicLinkW)
- return has_CreateSymbolicLinkW;
- hKernel32 = GetModuleHandle("KERNEL32");
- *(FARPROC*)&Py_CreateSymbolicLinkW = GetProcAddress(hKernel32,
- "CreateSymbolicLinkW");
- if (Py_CreateSymbolicLinkW)
- has_CreateSymbolicLinkW = 1;
- return has_CreateSymbolicLinkW;
-}
+static PyStructSequence_Field times_result_fields[] = {
+ {"user", "user time"},
+ {"system", "system time"},
+ {"children_user", "user time of children"},
+ {"children_system", "system time of children"},
+ {"elapsed", "elapsed time since an arbitrary point in the past"},
+ {NULL}
+};
+
+PyDoc_STRVAR(times_result__doc__,
+"times_result: Result from os.times().\n\n\
+This object may be accessed either as a tuple of\n\
+ (user, system, children_user, children_system, elapsed),\n\
+or via the attributes user, system, children_user, children_system,\n\
+and elapsed.\n\
+\n\
+See os.times for more information.");
+
+static PyStructSequence_Desc times_result_desc = {
+ "times_result", /* name */
+ times_result__doc__, /* doc */
+ times_result_fields,
+ 5
+};
+
+static PyTypeObject TimesResultType;
+
+#ifdef MS_WINDOWS
+#define HAVE_TIMES /* mandatory, for the method table */
+#endif
-PyDoc_STRVAR(win_symlink__doc__,
-"symlink(src, dst, target_is_directory=False)\n\n\
-Create a symbolic link pointing to src named dst.\n\
-target_is_directory is required if the target is to be interpreted as\n\
-a directory.\n\
-This function requires Windows 6.0 or greater, and raises a\n\
-NotImplementedError otherwise.");
+#ifdef HAVE_TIMES
static PyObject *
-win_symlink(PyObject *self, PyObject *args, PyObject *kwargs)
+build_times_result(double user, double system,
+ double children_user, double children_system,
+ double elapsed)
{
- static char *kwlist[] = {"src", "dest", "target_is_directory", NULL};
- PyObject *src, *dest;
- int target_is_directory = 0;
- DWORD res;
-
- if (!check_CreateSymbolicLinkW())
- {
- /* raise NotImplementedError */
- return PyErr_Format(PyExc_NotImplementedError,
- "CreateSymbolicLinkW not found");
- }
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|i:symlink",
- kwlist, &src, &dest, &target_is_directory))
+ PyObject *value = PyStructSequence_New(&TimesResultType);
+ if (value == NULL)
return NULL;
- if (win32_can_symlink == 0)
- return PyErr_Format(PyExc_OSError, "symbolic link privilege not held");
+#define SET(i, field) \
+ { \
+ PyObject *o = PyFloat_FromDouble(field); \
+ if (!o) { \
+ Py_DECREF(value); \
+ return NULL; \
+ } \
+ PyStructSequence_SET_ITEM(value, i, o); \
+ } \
- if (!convert_to_unicode(&src)) { return NULL; }
- if (!convert_to_unicode(&dest)) {
- Py_DECREF(src);
- return NULL;
- }
+ SET(0, user);
+ SET(1, system);
+ SET(2, children_user);
+ SET(3, children_system);
+ SET(4, elapsed);
- Py_BEGIN_ALLOW_THREADS
- res = Py_CreateSymbolicLinkW(
- PyUnicode_AsUnicode(dest),
- PyUnicode_AsUnicode(src),
- target_is_directory);
- Py_END_ALLOW_THREADS
- Py_DECREF(src);
- Py_DECREF(dest);
- if (!res)
- {
- return win32_error_unicode("symlink", PyUnicode_AsUnicode(src));
- }
+#undef SET
- Py_INCREF(Py_None);
- return Py_None;
+ return value;
}
-#endif /* defined(HAVE_SYMLINK) && defined(MS_WINDOWS) */
-#ifdef HAVE_TIMES
+PyDoc_STRVAR(posix_times__doc__,
+"times() -> times_result\n\n\
+Return an object containing floating point numbers indicating process\n\
+times. The object behaves like a named tuple with these fields:\n\
+ (utime, stime, cutime, cstime, elapsed_time)");
+
#if defined(PYCC_VACPP) && defined(PYOS_OS2)
static long
system_uptime(void)
@@ -5482,38 +7627,14 @@ static PyObject *
posix_times(PyObject *self, PyObject *noargs)
{
/* Currently Only Uptime is Provided -- Others Later */
- return Py_BuildValue("ddddd",
+ return build_times_result(
(double)0 /* t.tms_utime / HZ */,
(double)0 /* t.tms_stime / HZ */,
(double)0 /* t.tms_cutime / HZ */,
(double)0 /* t.tms_cstime / HZ */,
(double)system_uptime() / 1000);
}
-#else /* not OS2 */
-#define NEED_TICKS_PER_SECOND
-static long ticks_per_second = -1;
-static PyObject *
-posix_times(PyObject *self, PyObject *noargs)
-{
- struct tms t;
- clock_t c;
- errno = 0;
- c = times(&t);
- if (c == (clock_t) -1)
- return posix_error();
- return Py_BuildValue("ddddd",
- (double)t.tms_utime / ticks_per_second,
- (double)t.tms_stime / ticks_per_second,
- (double)t.tms_cutime / ticks_per_second,
- (double)t.tms_cstime / ticks_per_second,
- (double)c / ticks_per_second);
-}
-#endif /* not OS2 */
-#endif /* HAVE_TIMES */
-
-
-#ifdef MS_WINDOWS
-#define HAVE_TIMES /* so the method table will pick it up */
+#elif defined(MS_WINDOWS)
static PyObject *
posix_times(PyObject *self, PyObject *noargs)
{
@@ -5526,8 +7647,7 @@ posix_times(PyObject *self, PyObject *noargs)
1e7 is one second in such units; 1e-7 the inverse.
429.4967296 is 2**32 / 1e7 or 2**32 * 1e-7.
*/
- return Py_BuildValue(
- "ddddd",
+ return build_times_result(
(double)(user.dwHighDateTime*429.4967296 +
user.dwLowDateTime*1e-7),
(double)(kernel.dwHighDateTime*429.4967296 +
@@ -5536,14 +7656,29 @@ posix_times(PyObject *self, PyObject *noargs)
(double)0,
(double)0);
}
-#endif /* MS_WINDOWS */
-
-#ifdef HAVE_TIMES
-PyDoc_STRVAR(posix_times__doc__,
-"times() -> (utime, stime, cutime, cstime, elapsed_time)\n\n\
-Return a tuple of floating point numbers indicating process times.");
+#else /* Neither Windows nor OS/2 */
+#define NEED_TICKS_PER_SECOND
+static long ticks_per_second = -1;
+static PyObject *
+posix_times(PyObject *self, PyObject *noargs)
+{
+ struct tms t;
+ clock_t c;
+ errno = 0;
+ c = times(&t);
+ if (c == (clock_t) -1)
+ return posix_error();
+ return build_times_result(
+ (double)t.tms_utime / ticks_per_second,
+ (double)t.tms_stime / ticks_per_second,
+ (double)t.tms_cutime / ticks_per_second,
+ (double)t.tms_cstime / ticks_per_second,
+ (double)c / ticks_per_second);
+}
#endif
+#endif /* HAVE_TIMES */
+
#ifdef HAVE_GETSID
PyDoc_STRVAR(posix_getsid__doc__,
@@ -5642,56 +7777,79 @@ posix_tcsetpgrp(PyObject *self, PyObject *args)
/* Functions acting on file descriptors */
PyDoc_STRVAR(posix_open__doc__,
-"open(filename, flag [, mode=0777]) -> fd\n\n\
-Open a file (for low level IO).");
+"open(path, flags, mode=0o777, *, dir_fd=None)\n\n\
+Open a file for low level IO. Returns a file handle (integer).\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_open(PyObject *self, PyObject *args)
+posix_open(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *ofile;
- char *file;
- int flag;
+ path_t path;
+ int flags;
int mode = 0777;
+ int dir_fd = DEFAULT_DIR_FD;
int fd;
-
-#ifdef MS_WINDOWS
- PyUnicodeObject *po;
- if (PyArg_ParseTuple(args, "Ui|i:open", &po, &flag, &mode)) {
- Py_BEGIN_ALLOW_THREADS
- /* PyUnicode_AS_UNICODE OK without thread
- lock as it is a simple dereference. */
- fd = _wopen(PyUnicode_AS_UNICODE(po), flag, mode);
- Py_END_ALLOW_THREADS
- if (fd < 0)
- return posix_error();
- return PyLong_FromLong((long)fd);
- }
- /* Drop the argument parsing error as narrow strings
- are also valid. */
- PyErr_Clear();
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "flags", "mode", "dir_fd", NULL};
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|i$O&:open", keywords,
+ path_converter, &path,
+ &flags, &mode,
+#ifdef HAVE_OPENAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
#endif
-
- if (!PyArg_ParseTuple(args, "O&i|i:open",
- PyUnicode_FSConverter, &ofile,
- &flag, &mode))
+ ))
return NULL;
- file = PyBytes_AsString(ofile);
+
Py_BEGIN_ALLOW_THREADS
- fd = open(file, flag, mode);
+#ifdef MS_WINDOWS
+ if (path.wide)
+ fd = _wopen(path.wide, flags, mode);
+ else
+#endif
+#ifdef HAVE_OPENAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ fd = openat(dir_fd, path.narrow, flags, mode);
+ else
+#endif
+ fd = open(path.narrow, flags, mode);
Py_END_ALLOW_THREADS
- if (fd < 0)
- return posix_error_with_allocated_filename(ofile);
- Py_DECREF(ofile);
- return PyLong_FromLong((long)fd);
-}
+ if (fd == -1) {
+#ifdef MS_WINDOWS
+ /* force use of posix_error here for exact backwards compatibility */
+ if (path.wide)
+ return_value = posix_error();
+ else
+#endif
+ return_value = path_error("open", &path);
+ goto exit;
+ }
+
+ return_value = PyLong_FromLong((long)fd);
+
+exit:
+ path_cleanup(&path);
+ return return_value;
+}
PyDoc_STRVAR(posix_close__doc__,
"close(fd)\n\n\
Close a file descriptor (for low level IO).");
+/*
+The underscore at end of function name avoids a name clash with the libc
+function posix_close.
+*/
static PyObject *
-posix_close(PyObject *self, PyObject *args)
+posix_close_(PyObject *self, PyObject *args)
{
int fd, res;
if (!PyArg_ParseTuple(args, "i:close", &fd))
@@ -5739,9 +7897,7 @@ posix_dup(PyObject *self, PyObject *args)
return NULL;
if (!_PyVerify_fd(fd))
return posix_error();
- Py_BEGIN_ALLOW_THREADS
fd = dup(fd);
- Py_END_ALLOW_THREADS
if (fd < 0)
return posix_error();
return PyLong_FromLong((long)fd);
@@ -5760,15 +7916,42 @@ posix_dup2(PyObject *self, PyObject *args)
return NULL;
if (!_PyVerify_fd_dup2(fd, fd2))
return posix_error();
- Py_BEGIN_ALLOW_THREADS
res = dup2(fd, fd2);
- Py_END_ALLOW_THREADS
if (res < 0)
return posix_error();
Py_INCREF(Py_None);
return Py_None;
}
+#ifdef HAVE_LOCKF
+PyDoc_STRVAR(posix_lockf__doc__,
+"lockf(fd, cmd, len)\n\n\
+Apply, test or remove a POSIX lock on an open file descriptor.\n\n\
+fd is an open file descriptor.\n\
+cmd specifies the command to use - one of F_LOCK, F_TLOCK, F_ULOCK or\n\
+F_TEST.\n\
+len specifies the section of the file to lock.");
+
+static PyObject *
+posix_lockf(PyObject *self, PyObject *args)
+{
+ int fd, cmd, res;
+ off_t len;
+ if (!PyArg_ParseTuple(args, "iiO&:lockf",
+ &fd, &cmd, _parse_off_t, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ res = lockf(fd, cmd, len);
+ Py_END_ALLOW_THREADS
+
+ if (res < 0)
+ return posix_error();
+
+ Py_RETURN_NONE;
+}
+#endif
+
PyDoc_STRVAR(posix_lseek__doc__,
"lseek(fd, pos, how) -> newpos\n\n\
@@ -5799,8 +7982,7 @@ posix_lseek(PyObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
pos = PyLong_AsLong(posobj);
#else
- pos = PyLong_Check(posobj) ?
- PyLong_AsLongLong(posobj) : PyLong_AsLong(posobj);
+ pos = PyLong_AsLongLong(posobj);
#endif
if (PyErr_Occurred())
return NULL;
@@ -5826,7 +8008,7 @@ posix_lseek(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_read__doc__,
-"read(fd, buffersize) -> string\n\n\
+"read(fd, buffersize) -> bytes\n\n\
Read a file descriptor.");
static PyObject *
@@ -5860,10 +8042,150 @@ posix_read(PyObject *self, PyObject *args)
return buffer;
}
+#if (defined(HAVE_SENDFILE) && (defined(__FreeBSD__) || defined(__DragonFly__) \
+ || defined(__APPLE__))) || defined(HAVE_READV) || defined(HAVE_WRITEV)
+static Py_ssize_t
+iov_setup(struct iovec **iov, Py_buffer **buf, PyObject *seq, int cnt, int type)
+{
+ int i, j;
+ Py_ssize_t blen, total = 0;
+
+ *iov = PyMem_New(struct iovec, cnt);
+ if (*iov == NULL) {
+ PyErr_NoMemory();
+ return -1;
+ }
+
+ *buf = PyMem_New(Py_buffer, cnt);
+ if (*buf == NULL) {
+ PyMem_Del(*iov);
+ PyErr_NoMemory();
+ return -1;
+ }
+
+ for (i = 0; i < cnt; i++) {
+ PyObject *item = PySequence_GetItem(seq, i);
+ if (item == NULL)
+ goto fail;
+ if (PyObject_GetBuffer(item, &(*buf)[i], type) == -1) {
+ Py_DECREF(item);
+ goto fail;
+ }
+ Py_DECREF(item);
+ (*iov)[i].iov_base = (*buf)[i].buf;
+ blen = (*buf)[i].len;
+ (*iov)[i].iov_len = blen;
+ total += blen;
+ }
+ return total;
+
+fail:
+ PyMem_Del(*iov);
+ for (j = 0; j < i; j++) {
+ PyBuffer_Release(&(*buf)[j]);
+ }
+ PyMem_Del(*buf);
+ return -1;
+}
+
+static void
+iov_cleanup(struct iovec *iov, Py_buffer *buf, int cnt)
+{
+ int i;
+ PyMem_Del(iov);
+ for (i = 0; i < cnt; i++) {
+ PyBuffer_Release(&buf[i]);
+ }
+ PyMem_Del(buf);
+}
+#endif
+
+#ifdef HAVE_READV
+PyDoc_STRVAR(posix_readv__doc__,
+"readv(fd, buffers) -> bytesread\n\n\
+Read from a file descriptor fd into a number of mutable, bytes-like\n\
+objects (\"buffers\"). readv will transfer data into each buffer\n\
+until it is full and then move on to the next buffer in the sequence\n\
+to hold the rest of the data.\n\n\
+readv returns the total number of bytes read (which may be less than\n\
+the total capacity of all the buffers.");
+
+static PyObject *
+posix_readv(PyObject *self, PyObject *args)
+{
+ int fd, cnt;
+ Py_ssize_t n;
+ PyObject *seq;
+ struct iovec *iov;
+ Py_buffer *buf;
+
+ if (!PyArg_ParseTuple(args, "iO:readv", &fd, &seq))
+ return NULL;
+ if (!PySequence_Check(seq)) {
+ PyErr_SetString(PyExc_TypeError,
+ "readv() arg 2 must be a sequence");
+ return NULL;
+ }
+ cnt = PySequence_Size(seq);
+
+ if (iov_setup(&iov, &buf, seq, cnt, PyBUF_WRITABLE) < 0)
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ n = readv(fd, iov, cnt);
+ Py_END_ALLOW_THREADS
+
+ iov_cleanup(iov, buf, cnt);
+ if (n < 0)
+ return posix_error();
+
+ return PyLong_FromSsize_t(n);
+}
+#endif
+
+#ifdef HAVE_PREAD
+PyDoc_STRVAR(posix_pread__doc__,
+"pread(fd, buffersize, offset) -> string\n\n\
+Read from a file descriptor, fd, at a position of offset. It will read up\n\
+to buffersize number of bytes. The file offset remains unchanged.");
+
+static PyObject *
+posix_pread(PyObject *self, PyObject *args)
+{
+ int fd, size;
+ off_t offset;
+ Py_ssize_t n;
+ PyObject *buffer;
+ if (!PyArg_ParseTuple(args, "iiO&:pread", &fd, &size, _parse_off_t, &offset))
+ return NULL;
+
+ if (size < 0) {
+ errno = EINVAL;
+ return posix_error();
+ }
+ buffer = PyBytes_FromStringAndSize((char *)NULL, size);
+ if (buffer == NULL)
+ return NULL;
+ if (!_PyVerify_fd(fd)) {
+ Py_DECREF(buffer);
+ return posix_error();
+ }
+ Py_BEGIN_ALLOW_THREADS
+ n = pread(fd, PyBytes_AS_STRING(buffer), size, offset);
+ Py_END_ALLOW_THREADS
+ if (n < 0) {
+ Py_DECREF(buffer);
+ return posix_error();
+ }
+ if (n != size)
+ _PyBytes_Resize(&buffer, n);
+ return buffer;
+}
+#endif
PyDoc_STRVAR(posix_write__doc__,
-"write(fd, string) -> byteswritten\n\n\
-Write a string to a file descriptor.");
+"write(fd, data) -> byteswritten\n\n\
+Write bytes to a file descriptor.");
static PyObject *
posix_write(PyObject *self, PyObject *args)
@@ -5894,10 +8216,149 @@ posix_write(PyObject *self, PyObject *args)
return PyLong_FromSsize_t(size);
}
+#ifdef HAVE_SENDFILE
+PyDoc_STRVAR(posix_sendfile__doc__,
+"sendfile(out, in, offset, nbytes) -> byteswritten\n\
+sendfile(out, in, offset, nbytes, headers=None, trailers=None, flags=0)\n\
+ -> byteswritten\n\
+Copy nbytes bytes from file descriptor in to file descriptor out.");
+
+static PyObject *
+posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict)
+{
+ int in, out;
+ Py_ssize_t ret;
+ off_t offset;
+
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#ifndef __APPLE__
+ Py_ssize_t len;
+#endif
+ PyObject *headers = NULL, *trailers = NULL;
+ Py_buffer *hbuf, *tbuf;
+ off_t sbytes;
+ struct sf_hdtr sf;
+ int flags = 0;
+ sf.headers = NULL;
+ sf.trailers = NULL;
+ static char *keywords[] = {"out", "in",
+ "offset", "count",
+ "headers", "trailers", "flags", NULL};
+
+#ifdef __APPLE__
+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&O&|OOi:sendfile",
+ keywords, &out, &in, _parse_off_t, &offset, _parse_off_t, &sbytes,
+#else
+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&n|OOi:sendfile",
+ keywords, &out, &in, _parse_off_t, &offset, &len,
+#endif
+ &headers, &trailers, &flags))
+ return NULL;
+ if (headers != NULL) {
+ if (!PySequence_Check(headers)) {
+ PyErr_SetString(PyExc_TypeError,
+ "sendfile() headers must be a sequence or None");
+ return NULL;
+ } else {
+ Py_ssize_t i = 0; /* Avoid uninitialized warning */
+ sf.hdr_cnt = PySequence_Size(headers);
+ if (sf.hdr_cnt > 0 &&
+ (i = iov_setup(&(sf.headers), &hbuf,
+ headers, sf.hdr_cnt, PyBUF_SIMPLE)) < 0)
+ return NULL;
+#ifdef __APPLE__
+ sbytes += i;
+#endif
+ }
+ }
+ if (trailers != NULL) {
+ if (!PySequence_Check(trailers)) {
+ PyErr_SetString(PyExc_TypeError,
+ "sendfile() trailers must be a sequence or None");
+ return NULL;
+ } else {
+ Py_ssize_t i = 0; /* Avoid uninitialized warning */
+ sf.trl_cnt = PySequence_Size(trailers);
+ if (sf.trl_cnt > 0 &&
+ (i = iov_setup(&(sf.trailers), &tbuf,
+ trailers, sf.trl_cnt, PyBUF_SIMPLE)) < 0)
+ return NULL;
+#ifdef __APPLE__
+ sbytes += i;
+#endif
+ }
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+#ifdef __APPLE__
+ ret = sendfile(in, out, offset, &sbytes, &sf, flags);
+#else
+ ret = sendfile(in, out, offset, len, &sf, &sbytes, flags);
+#endif
+ Py_END_ALLOW_THREADS
+
+ if (sf.headers != NULL)
+ iov_cleanup(sf.headers, hbuf, sf.hdr_cnt);
+ if (sf.trailers != NULL)
+ iov_cleanup(sf.trailers, tbuf, sf.trl_cnt);
+
+ if (ret < 0) {
+ if ((errno == EAGAIN) || (errno == EBUSY)) {
+ if (sbytes != 0) {
+ // some data has been sent
+ goto done;
+ }
+ else {
+ // no data has been sent; upper application is supposed
+ // to retry on EAGAIN or EBUSY
+ return posix_error();
+ }
+ }
+ return posix_error();
+ }
+ goto done;
+
+done:
+ #if !defined(HAVE_LARGEFILE_SUPPORT)
+ return Py_BuildValue("l", sbytes);
+ #else
+ return Py_BuildValue("L", sbytes);
+ #endif
+
+#else
+ Py_ssize_t count;
+ PyObject *offobj;
+ static char *keywords[] = {"out", "in",
+ "offset", "count", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiOn:sendfile",
+ keywords, &out, &in, &offobj, &count))
+ return NULL;
+#ifdef linux
+ if (offobj == Py_None) {
+ Py_BEGIN_ALLOW_THREADS
+ ret = sendfile(out, in, NULL, count);
+ Py_END_ALLOW_THREADS
+ if (ret < 0)
+ return posix_error();
+ return Py_BuildValue("n", ret);
+ }
+#endif
+ if (!_parse_off_t(offobj, &offset))
+ return NULL;
+ Py_BEGIN_ALLOW_THREADS
+ ret = sendfile(out, in, &offset, count);
+ Py_END_ALLOW_THREADS
+ if (ret < 0)
+ return posix_error();
+ return Py_BuildValue("n", ret);
+#endif
+}
+#endif
PyDoc_STRVAR(posix_fstat__doc__,
"fstat(fd) -> stat result\n\n\
-Like stat(), but for an open file descriptor.");
+Like stat(), but for an open file descriptor.\n\
+Equivalent to stat(fd=fd).");
static PyObject *
posix_fstat(PyObject *self, PyObject *args)
@@ -5911,8 +8372,6 @@ posix_fstat(PyObject *self, PyObject *args)
/* on OpenVMS we must ensure that all bytes are written to the file */
fsync(fd);
#endif
- if (!_PyVerify_fd(fd))
- return posix_error();
Py_BEGIN_ALLOW_THREADS
res = FSTAT(fd, &st);
Py_END_ALLOW_THREADS
@@ -5955,9 +8414,7 @@ posix_pipe(PyObject *self, PyObject *noargs)
HFILE read, write;
APIRET rc;
- Py_BEGIN_ALLOW_THREADS
rc = DosCreatePipe( &read, &write, 4096);
- Py_END_ALLOW_THREADS
if (rc != NO_ERROR)
return os2_error(rc);
@@ -5966,9 +8423,7 @@ posix_pipe(PyObject *self, PyObject *noargs)
#if !defined(MS_WINDOWS)
int fds[2];
int res;
- Py_BEGIN_ALLOW_THREADS
res = pipe(fds);
- Py_END_ALLOW_THREADS
if (res != 0)
return posix_error();
return Py_BuildValue("(ii)", fds[0], fds[1]);
@@ -5976,9 +8431,7 @@ posix_pipe(PyObject *self, PyObject *noargs)
HANDLE read, write;
int read_fd, write_fd;
BOOL ok;
- Py_BEGIN_ALLOW_THREADS
ok = CreatePipe(&read, &write, NULL, 0);
- Py_END_ALLOW_THREADS
if (!ok)
return win32_error("CreatePipe", NULL);
read_fd = _open_osfhandle((Py_intptr_t)read, 0);
@@ -5989,66 +8442,218 @@ posix_pipe(PyObject *self, PyObject *noargs)
}
#endif /* HAVE_PIPE */
+#ifdef HAVE_PIPE2
+PyDoc_STRVAR(posix_pipe2__doc__,
+"pipe2(flags) -> (read_end, write_end)\n\n\
+Create a pipe with flags set atomically.\n\
+flags can be constructed by ORing together one or more of these values:\n\
+O_NONBLOCK, O_CLOEXEC.\n\
+");
+
+static PyObject *
+posix_pipe2(PyObject *self, PyObject *arg)
+{
+ int flags;
+ int fds[2];
+ int res;
+
+ flags = _PyLong_AsInt(arg);
+ if (flags == -1 && PyErr_Occurred())
+ return NULL;
+
+ res = pipe2(fds, flags);
+ if (res != 0)
+ return posix_error();
+ return Py_BuildValue("(ii)", fds[0], fds[1]);
+}
+#endif /* HAVE_PIPE2 */
+
+#ifdef HAVE_WRITEV
+PyDoc_STRVAR(posix_writev__doc__,
+"writev(fd, buffers) -> byteswritten\n\n\
+Write the contents of *buffers* to file descriptor *fd*. *buffers*\n\
+must be a sequence of bytes-like objects.\n\n\
+writev writes the contents of each object to the file descriptor\n\
+and returns the total number of bytes written.");
+
+static PyObject *
+posix_writev(PyObject *self, PyObject *args)
+{
+ int fd, cnt;
+ Py_ssize_t res;
+ PyObject *seq;
+ struct iovec *iov;
+ Py_buffer *buf;
+ if (!PyArg_ParseTuple(args, "iO:writev", &fd, &seq))
+ return NULL;
+ if (!PySequence_Check(seq)) {
+ PyErr_SetString(PyExc_TypeError,
+ "writev() arg 2 must be a sequence");
+ return NULL;
+ }
+ cnt = PySequence_Size(seq);
+
+ if (iov_setup(&iov, &buf, seq, cnt, PyBUF_SIMPLE) < 0) {
+ return NULL;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ res = writev(fd, iov, cnt);
+ Py_END_ALLOW_THREADS
+
+ iov_cleanup(iov, buf, cnt);
+ if (res < 0)
+ return posix_error();
+
+ return PyLong_FromSsize_t(res);
+}
+#endif
+
+#ifdef HAVE_PWRITE
+PyDoc_STRVAR(posix_pwrite__doc__,
+"pwrite(fd, string, offset) -> byteswritten\n\n\
+Write string to a file descriptor, fd, from offset, leaving the file\n\
+offset unchanged.");
+
+static PyObject *
+posix_pwrite(PyObject *self, PyObject *args)
+{
+ Py_buffer pbuf;
+ int fd;
+ off_t offset;
+ Py_ssize_t size;
+
+ if (!PyArg_ParseTuple(args, "iy*O&:pwrite", &fd, &pbuf, _parse_off_t, &offset))
+ return NULL;
+
+ if (!_PyVerify_fd(fd)) {
+ PyBuffer_Release(&pbuf);
+ return posix_error();
+ }
+ Py_BEGIN_ALLOW_THREADS
+ size = pwrite(fd, pbuf.buf, (size_t)pbuf.len, offset);
+ Py_END_ALLOW_THREADS
+ PyBuffer_Release(&pbuf);
+ if (size < 0)
+ return posix_error();
+ return PyLong_FromSsize_t(size);
+}
+#endif
#ifdef HAVE_MKFIFO
PyDoc_STRVAR(posix_mkfifo__doc__,
-"mkfifo(filename [, mode=0666])\n\n\
-Create a FIFO (a POSIX named pipe).");
+"mkfifo(path, mode=0o666, *, dir_fd=None)\n\n\
+Create a FIFO (a POSIX named pipe).\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_mkfifo(PyObject *self, PyObject *args)
+posix_mkfifo(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath;
- char *filename;
+ path_t path;
int mode = 0666;
- int res;
- if (!PyArg_ParseTuple(args, "O&|i:mkfifo", PyUnicode_FSConverter, &opath,
- &mode))
+ int dir_fd = DEFAULT_DIR_FD;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "mode", "dir_fd", NULL};
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkfifo", keywords,
+ path_converter, &path,
+ &mode,
+#ifdef HAVE_MKFIFOAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
return NULL;
- filename = PyBytes_AS_STRING(opath);
+
Py_BEGIN_ALLOW_THREADS
- res = mkfifo(filename, mode);
+#ifdef HAVE_MKFIFOAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = mkfifoat(dir_fd, path.narrow, mode);
+ else
+#endif
+ result = mkfifo(path.narrow, mode);
Py_END_ALLOW_THREADS
- Py_DECREF(opath);
- if (res < 0)
- return posix_error();
+
+ if (result < 0) {
+ return_value = posix_error();
+ goto exit;
+ }
+
+ return_value = Py_None;
Py_INCREF(Py_None);
- return Py_None;
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#endif
-
#if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)
PyDoc_STRVAR(posix_mknod__doc__,
-"mknod(filename [, mode=0600, device])\n\n\
+"mknod(filename, mode=0o600, device=0, *, dir_fd=None)\n\n\
Create a filesystem node (file, device special file or named pipe)\n\
named filename. mode specifies both the permissions to use and the\n\
type of node to be created, being combined (bitwise OR) with one of\n\
S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. For S_IFCHR and S_IFBLK,\n\
device defines the newly created device special file (probably using\n\
-os.makedev()), otherwise it is ignored.");
+os.makedev()), otherwise it is ignored.\n\
+\n\
+If dir_fd is not None, it should be a file descriptor open to a directory,\n\
+ and path should be relative; path will then be relative to that directory.\n\
+dir_fd may not be implemented on your platform.\n\
+ If it is unavailable, using it will raise a NotImplementedError.");
static PyObject *
-posix_mknod(PyObject *self, PyObject *args)
+posix_mknod(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath;
- char *filename;
- int mode = 0600;
+ path_t path;
+ int mode = 0666;
int device = 0;
- int res;
- if (!PyArg_ParseTuple(args, "O&|ii:mknod", PyUnicode_FSConverter, &opath,
- &mode, &device))
+ int dir_fd = DEFAULT_DIR_FD;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "mode", "device", "dir_fd", NULL};
+
+ memset(&path, 0, sizeof(path));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|ii$O&:mknod", keywords,
+ path_converter, &path,
+ &mode, &device,
+#ifdef HAVE_MKNODAT
+ dir_fd_converter, &dir_fd
+#else
+ dir_fd_unavailable, &dir_fd
+#endif
+ ))
return NULL;
- filename = PyBytes_AS_STRING(opath);
+
Py_BEGIN_ALLOW_THREADS
- res = mknod(filename, mode, device);
+#ifdef HAVE_MKNODAT
+ if (dir_fd != DEFAULT_DIR_FD)
+ result = mknodat(dir_fd, path.narrow, mode, device);
+ else
+#endif
+ result = mknod(path.narrow, mode, device);
Py_END_ALLOW_THREADS
- Py_DECREF(opath);
- if (res < 0)
- return posix_error();
+
+ if (result < 0) {
+ return_value = posix_error();
+ goto exit;
+ }
+
+ return_value = Py_None;
Py_INCREF(Py_None);
- return Py_None;
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#endif
@@ -6105,18 +8710,8 @@ posix_ftruncate(PyObject *self, PyObject *args)
int fd;
off_t length;
int res;
- PyObject *lenobj;
-
- if (!PyArg_ParseTuple(args, "iO:ftruncate", &fd, &lenobj))
- return NULL;
-#if !defined(HAVE_LARGEFILE_SUPPORT)
- length = PyLong_AsLong(lenobj);
-#else
- length = PyLong_Check(lenobj) ?
- PyLong_AsLongLong(lenobj) : PyLong_AsLong(lenobj);
-#endif
- if (PyErr_Occurred())
+ if (!PyArg_ParseTuple(args, "iO&:ftruncate", &fd, _parse_off_t, &length))
return NULL;
Py_BEGIN_ALLOW_THREADS
@@ -6129,6 +8724,109 @@ posix_ftruncate(PyObject *self, PyObject *args)
}
#endif
+#ifdef HAVE_TRUNCATE
+PyDoc_STRVAR(posix_truncate__doc__,
+"truncate(path, length)\n\n\
+Truncate the file given by path to length bytes.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.");
+
+static PyObject *
+posix_truncate(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ off_t length;
+ int res;
+ PyObject *result = NULL;
+ static char *keywords[] = {"path", "length", NULL};
+
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FTRUNCATE
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:truncate", keywords,
+ path_converter, &path,
+ _parse_off_t, &length))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+#ifdef HAVE_FTRUNCATE
+ if (path.fd != -1)
+ res = ftruncate(path.fd, length);
+ else
+#endif
+ res = truncate(path.narrow, length);
+ Py_END_ALLOW_THREADS
+ if (res < 0)
+ result = path_posix_error("truncate", &path);
+ else {
+ Py_INCREF(Py_None);
+ result = Py_None;
+ }
+ path_cleanup(&path);
+ return result;
+}
+#endif
+
+#ifdef HAVE_POSIX_FALLOCATE
+PyDoc_STRVAR(posix_posix_fallocate__doc__,
+"posix_fallocate(fd, offset, len)\n\n\
+Ensures that enough disk space is allocated for the file specified by fd\n\
+starting from offset and continuing for len bytes.");
+
+static PyObject *
+posix_posix_fallocate(PyObject *self, PyObject *args)
+{
+ off_t len, offset;
+ int res, fd;
+
+ if (!PyArg_ParseTuple(args, "iO&O&:posix_fallocate",
+ &fd, _parse_off_t, &offset, _parse_off_t, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ res = posix_fallocate(fd, offset, len);
+ Py_END_ALLOW_THREADS
+ if (res != 0) {
+ errno = res;
+ return posix_error();
+ }
+ Py_RETURN_NONE;
+}
+#endif
+
+#ifdef HAVE_POSIX_FADVISE
+PyDoc_STRVAR(posix_posix_fadvise__doc__,
+"posix_fadvise(fd, offset, len, advice)\n\n\
+Announces an intention to access data in a specific pattern thus allowing\n\
+the kernel to make optimizations.\n\
+The advice applies to the region of the file specified by fd starting at\n\
+offset and continuing for len bytes.\n\
+advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n\
+POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED or\n\
+POSIX_FADV_DONTNEED.");
+
+static PyObject *
+posix_posix_fadvise(PyObject *self, PyObject *args)
+{
+ off_t len, offset;
+ int res, fd, advice;
+
+ if (!PyArg_ParseTuple(args, "iO&O&i:posix_fadvise",
+ &fd, _parse_off_t, &offset, _parse_off_t, &len, &advice))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ res = posix_fadvise(fd, offset, len, advice);
+ Py_END_ALLOW_THREADS
+ if (res != 0) {
+ errno = res;
+ return posix_error();
+ }
+ Py_RETURN_NONE;
+}
+#endif
+
#ifdef HAVE_PUTENV
PyDoc_STRVAR(posix_putenv__doc__,
"putenv(key, value)\n\n\
@@ -6141,23 +8839,40 @@ static PyObject *posix_putenv_garbage;
static PyObject *
posix_putenv(PyObject *self, PyObject *args)
{
+ PyObject *newstr = NULL;
#ifdef MS_WINDOWS
- wchar_t *s1, *s2;
+ PyObject *os1, *os2;
wchar_t *newenv;
+
+ if (!PyArg_ParseTuple(args,
+ "UU:putenv",
+ &os1, &os2))
+ return NULL;
+
+ newstr = PyUnicode_FromFormat("%U=%U", os1, os2);
+ if (newstr == NULL) {
+ PyErr_NoMemory();
+ goto error;
+ }
+ if (_MAX_ENV < PyUnicode_GET_LENGTH(newstr)) {
+ PyErr_Format(PyExc_ValueError,
+ "the environment variable is longer than %u characters",
+ _MAX_ENV);
+ goto error;
+ }
+
+ newenv = PyUnicode_AsUnicode(newstr);
+ if (newenv == NULL)
+ goto error;
+ if (_wputenv(newenv)) {
+ posix_error();
+ goto error;
+ }
#else
PyObject *os1, *os2;
char *s1, *s2;
char *newenv;
-#endif
- PyObject *newstr = NULL;
- size_t len;
-#ifdef MS_WINDOWS
- if (!PyArg_ParseTuple(args,
- "uu:putenv",
- &s1, &s2))
- return NULL;
-#else
if (!PyArg_ParseTuple(args,
"O&O&:putenv",
PyUnicode_FSConverter, &os1,
@@ -6165,58 +8880,14 @@ posix_putenv(PyObject *self, PyObject *args)
return NULL;
s1 = PyBytes_AsString(os1);
s2 = PyBytes_AsString(os2);
-#endif
-
-#if defined(PYOS_OS2)
- if (stricmp(s1, "BEGINLIBPATH") == 0) {
- APIRET rc;
-
- rc = DosSetExtLIBPATH(s2, BEGIN_LIBPATH);
- if (rc != NO_ERROR) {
- os2_error(rc);
- goto error;
- }
-
- } else if (stricmp(s1, "ENDLIBPATH") == 0) {
- APIRET rc;
- rc = DosSetExtLIBPATH(s2, END_LIBPATH);
- if (rc != NO_ERROR) {
- os2_error(rc);
- goto error;
- }
- } else {
-#endif
- /* XXX This can leak memory -- not easy to fix :-( */
- /* len includes space for a trailing \0; the size arg to
- PyBytes_FromStringAndSize does not count that */
-#ifdef MS_WINDOWS
- len = wcslen(s1) + wcslen(s2) + 2;
- if (_MAX_ENV < (len - 1)) {
- PyErr_Format(PyExc_ValueError,
- "the environment variable is longer than %u characters",
- _MAX_ENV);
- goto error;
- }
- newstr = PyUnicode_FromUnicode(NULL, (int)len - 1);
-#else
- len = PyBytes_GET_SIZE(os1) + PyBytes_GET_SIZE(os2) + 2;
- newstr = PyBytes_FromStringAndSize(NULL, (int)len - 1);
-#endif
+ newstr = PyBytes_FromFormat("%s=%s", s1, s2);
if (newstr == NULL) {
PyErr_NoMemory();
goto error;
}
-#ifdef MS_WINDOWS
- newenv = PyUnicode_AsUnicode(newstr);
- _snwprintf(newenv, len, L"%s=%s", s1, s2);
- if (_wputenv(newenv)) {
- posix_error();
- goto error;
- }
-#else
+
newenv = PyBytes_AS_STRING(newstr);
- PyOS_snprintf(newenv, len, "%s=%s", s1, s2);
if (putenv(newenv)) {
posix_error();
goto error;
@@ -6227,13 +8898,7 @@ posix_putenv(PyObject *self, PyObject *args)
* this will cause previous value to be collected. This has to
* happen after the real putenv() call because the old value
* was still accessible until then. */
- if (PyDict_SetItem(posix_putenv_garbage,
-#ifdef MS_WINDOWS
- PyTuple_GET_ITEM(args, 0),
-#else
- os1,
-#endif
- newstr)) {
+ if (PyDict_SetItem(posix_putenv_garbage, os1, newstr)) {
/* really not much we can do; just leak */
PyErr_Clear();
}
@@ -6241,10 +8906,6 @@ posix_putenv(PyObject *self, PyObject *args)
Py_DECREF(newstr);
}
-#if defined(PYOS_OS2)
- }
-#endif
-
#ifndef MS_WINDOWS
Py_DECREF(os1);
Py_DECREF(os2);
@@ -6269,23 +8930,22 @@ Delete an environment variable.");
static PyObject *
posix_unsetenv(PyObject *self, PyObject *args)
{
- PyObject *os1;
- char *s1;
+ PyObject *name;
#ifndef HAVE_BROKEN_UNSETENV
int err;
#endif
if (!PyArg_ParseTuple(args, "O&:unsetenv",
- PyUnicode_FSConverter, &os1))
+
+ PyUnicode_FSConverter, &name))
return NULL;
- s1 = PyBytes_AsString(os1);
#ifdef HAVE_BROKEN_UNSETENV
- unsetenv(s1);
+ unsetenv(PyBytes_AS_STRING(name));
#else
- err = unsetenv(s1);
+ err = unsetenv(PyBytes_AS_STRING(name));
if (err) {
- Py_DECREF(os1);
+ Py_DECREF(name);
return posix_error();
}
#endif
@@ -6295,12 +8955,11 @@ posix_unsetenv(PyObject *self, PyObject *args)
* happen after the real unsetenv() call because the
* old value was still accessible until then.
*/
- if (PyDict_DelItem(posix_putenv_garbage, os1)) {
+ if (PyDict_DelItem(posix_putenv_garbage, name)) {
/* really not much we can do; just leak */
PyErr_Clear();
}
-
- Py_DECREF(os1);
+ Py_DECREF(name);
Py_RETURN_NONE;
}
#endif /* unsetenv */
@@ -6322,7 +8981,7 @@ posix_strerror(PyObject *self, PyObject *args)
"strerror() argument out of range");
return NULL;
}
- return PyUnicode_FromString(message);
+ return PyUnicode_DecodeLocale(message, "surrogateescape");
}
@@ -6528,7 +9187,8 @@ _pystatvfs_fromstructstatvfs(struct statvfs st) {
PyDoc_STRVAR(posix_fstatvfs__doc__,
"fstatvfs(fd) -> statvfs result\n\n\
-Perform an fstatvfs system call on the given fd.");
+Perform an fstatvfs system call on the given fd.\n\
+Equivalent to statvfs(fd).");
static PyObject *
posix_fstatvfs(PyObject *self, PyObject *args)
@@ -6553,31 +9213,87 @@ posix_fstatvfs(PyObject *self, PyObject *args)
#include <sys/statvfs.h>
PyDoc_STRVAR(posix_statvfs__doc__,
-"statvfs(path) -> statvfs result\n\n\
-Perform a statvfs system call on the given path.");
+"statvfs(path)\n\n\
+Perform a statvfs system call on the given path.\n\
+\n\
+path may always be specified as a string.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.");
static PyObject *
-posix_statvfs(PyObject *self, PyObject *args)
+posix_statvfs(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *opath, *result = NULL;
- char *path;
- int res;
+ static char *keywords[] = {"path", NULL};
+ path_t path;
+ int result;
+ PyObject *return_value = NULL;
struct statvfs st;
- if (!PyArg_ParseTuple(args, "O&:statvfs", PyUnicode_FSConverter, &opath))
+
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FSTATVFS
+ path.allow_fd = 1;
+#endif
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:statvfs", keywords,
+ path_converter, &path
+ ))
return NULL;
- path = PyBytes_AS_STRING(opath);
+
Py_BEGIN_ALLOW_THREADS
- res = statvfs(path, &st);
+#ifdef HAVE_FSTATVFS
+ if (path.fd != -1) {
+#ifdef __APPLE__
+ /* handle weak-linking on Mac OS X 10.3 */
+ if (fstatvfs == NULL) {
+ fd_specified("statvfs", path.fd);
+ goto exit;
+ }
+#endif
+ result = fstatvfs(path.fd, &st);
+ }
+ else
+#endif
+ result = statvfs(path.narrow, &st);
Py_END_ALLOW_THREADS
- if (res != 0)
- return posix_error_with_allocated_filename(opath);
- result = _pystatvfs_fromstructstatvfs(st);
- Py_DECREF(opath);
- return result;
+ if (result) {
+ return_value = path_posix_error("statvfs", &path);
+ goto exit;
+ }
+
+ return_value = _pystatvfs_fromstructstatvfs(st);
+
+exit:
+ path_cleanup(&path);
+ return return_value;
}
#endif /* HAVE_STATVFS */
+#ifdef MS_WINDOWS
+PyDoc_STRVAR(win32__getdiskusage__doc__,
+"_getdiskusage(path) -> (total, free)\n\n\
+Return disk usage statistics about the given path as (total, free) tuple.");
+
+static PyObject *
+win32__getdiskusage(PyObject *self, PyObject *args)
+{
+ BOOL retval;
+ ULARGE_INTEGER _, total, free;
+ const wchar_t *path;
+
+ if (! PyArg_ParseTuple(args, "u", &path))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ retval = GetDiskFreeSpaceExW(path, &_, &total, &free);
+ Py_END_ALLOW_THREADS
+ if (retval == 0)
+ return PyErr_SetFromWindowsErr(0);
+
+ return Py_BuildValue("(LL)", total.QuadPart, free.QuadPart);
+}
+#endif
+
+
/* This is used for fpathconf(), pathconf(), confstr() and sysconf().
* It maps strings representing configuration variable names to
* integer values, allowing those functions to be called with the
@@ -6764,31 +9480,45 @@ posix_fpathconf(PyObject *self, PyObject *args)
PyDoc_STRVAR(posix_pathconf__doc__,
"pathconf(path, name) -> integer\n\n\
Return the configuration limit name for the file or directory path.\n\
-If there is no limit, return -1.");
+If there is no limit, return -1.\n\
+On some platforms, path may also be specified as an open file descriptor.\n\
+ If this functionality is unavailable, using it raises an exception.");
static PyObject *
-posix_pathconf(PyObject *self, PyObject *args)
+posix_pathconf(PyObject *self, PyObject *args, PyObject *kwargs)
{
+ path_t path;
PyObject *result = NULL;
int name;
- char *path;
+ static char *keywords[] = {"path", "name", NULL};
- if (PyArg_ParseTuple(args, "sO&:pathconf", &path,
- conv_path_confname, &name)) {
+ memset(&path, 0, sizeof(path));
+#ifdef HAVE_FPATHCONF
+ path.allow_fd = 1;
+#endif
+ if (PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:pathconf", keywords,
+ path_converter, &path,
+ conv_path_confname, &name)) {
long limit;
errno = 0;
- limit = pathconf(path, name);
+#ifdef HAVE_FPATHCONF
+ if (path.fd != -1)
+ limit = fpathconf(path.fd, name);
+ else
+#endif
+ limit = pathconf(path.narrow, name);
if (limit == -1 && errno != 0) {
if (errno == EINVAL)
/* could be a path or name problem */
posix_error();
else
- posix_error_with_filename(path);
+ result = path_posix_error("pathconf", &path);
}
else
result = PyLong_FromLong(limit);
}
+ path_cleanup(&path);
return result;
}
#endif
@@ -7640,9 +10370,10 @@ win32_startfile(PyObject *self, PyObject *args)
PyObject *ofilepath;
char *filepath;
char *operation = NULL;
+ wchar_t *wpath, *woperation;
HINSTANCE rc;
- PyObject *unipath, *woperation = NULL;
+ PyObject *unipath, *uoperation = NULL;
if (!PyArg_ParseTuple(args, "U|s:startfile",
&unipath, &operation)) {
PyErr_Clear();
@@ -7650,26 +10381,35 @@ win32_startfile(PyObject *self, PyObject *args)
}
if (operation) {
- woperation = PyUnicode_DecodeASCII(operation,
+ uoperation = PyUnicode_DecodeASCII(operation,
strlen(operation), NULL);
- if (!woperation) {
+ if (!uoperation) {
PyErr_Clear();
operation = NULL;
goto normal;
}
}
+ wpath = PyUnicode_AsUnicode(unipath);
+ if (wpath == NULL)
+ goto normal;
+ if (uoperation) {
+ woperation = PyUnicode_AsUnicode(uoperation);
+ if (woperation == NULL)
+ goto normal;
+ }
+ else
+ woperation = NULL;
+
Py_BEGIN_ALLOW_THREADS
- rc = ShellExecuteW((HWND)0, woperation ? PyUnicode_AS_UNICODE(woperation) : 0,
- PyUnicode_AS_UNICODE(unipath),
- NULL, NULL, SW_SHOWNORMAL);
+ rc = ShellExecuteW((HWND)0, woperation, wpath,
+ NULL, NULL, SW_SHOWNORMAL);
Py_END_ALLOW_THREADS
- Py_XDECREF(woperation);
+ Py_XDECREF(uoperation);
if (rc <= (HINSTANCE)32) {
- PyObject *errval = win32_error_unicode("startfile",
- PyUnicode_AS_UNICODE(unipath));
- return errval;
+ win32_error_object("startfile", unipath);
+ return NULL;
}
Py_INCREF(Py_None);
return Py_None;
@@ -7679,6 +10419,10 @@ normal:
PyUnicode_FSConverter, &ofilepath,
&operation))
return NULL;
+ if (win32_warn_bytes_api()) {
+ Py_DECREF(ofilepath);
+ return NULL;
+ }
filepath = PyBytes_AsString(ofilepath);
Py_BEGIN_ALLOW_THREADS
rc = ShellExecute((HWND)0, operation, filepath,
@@ -7723,62 +10467,11 @@ static PyObject *
device_encoding(PyObject *self, PyObject *args)
{
int fd;
- if (!PyArg_ParseTuple(args, "i:device_encoding", &fd))
- return NULL;
- if (!_PyVerify_fd(fd) || !isatty(fd)) {
- Py_INCREF(Py_None);
- return Py_None;
- }
-#if defined(MS_WINDOWS) || defined(MS_WIN64)
- if (fd == 0) {
- char buf[100];
- sprintf(buf, "cp%d", GetConsoleCP());
- return PyUnicode_FromString(buf);
- }
- if (fd == 1 || fd == 2) {
- char buf[100];
- sprintf(buf, "cp%d", GetConsoleOutputCP());
- return PyUnicode_FromString(buf);
- }
-#elif defined(CODESET)
- {
- char *codeset = nl_langinfo(CODESET);
- if (codeset != NULL && codeset[0] != 0)
- return PyUnicode_FromString(codeset);
- }
-#endif
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-PyDoc_STRVAR(posix_urandom__doc__,
-"urandom(n) -> str\n\n\
-Return n random bytes suitable for cryptographic use.");
-
-static PyObject *
-posix_urandom(PyObject *self, PyObject *args)
-{
- Py_ssize_t size;
- PyObject *result;
- int ret;
- /* Read arguments */
- if (!PyArg_ParseTuple(args, "n:urandom", &size))
- return NULL;
- if (size < 0)
- return PyErr_Format(PyExc_ValueError,
- "negative argument not allowed");
- result = PyBytes_FromStringAndSize(NULL, size);
- if (result == NULL)
+ if (!PyArg_ParseTuple(args, "i:device_encoding", &fd))
return NULL;
- ret = _PyOS_URandom(PyBytes_AS_STRING(result),
- PyBytes_GET_SIZE(result));
- if (ret == -1) {
- Py_DECREF(result);
- return NULL;
- }
- return result;
+ return _Py_device_encoding(fd);
}
#ifdef HAVE_SETRESUID
@@ -7789,6 +10482,7 @@ Set the current process's real, effective, and saved user ids.");
static PyObject*
posix_setresuid (PyObject *self, PyObject *args)
{
+ /* We assume uid_t is no larger than a long. */
uid_t ruid, euid, suid;
if (!PyArg_ParseTuple(args, "O&O&O&:setresuid",
_Py_Uid_Converter, &ruid,
@@ -7855,21 +10549,471 @@ posix_getresgid (PyObject *self, PyObject *noargs)
}
#endif
+#ifdef USE_XATTRS
+
+PyDoc_STRVAR(posix_getxattr__doc__,
+"getxattr(path, attribute, *, follow_symlinks=True) -> value\n\n\
+Return the value of extended attribute attribute on path.\n\
+\n\
+path may be either a string or an open file descriptor.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, getxattr will examine the symbolic link itself instead of the file\n\
+ the link points to.");
+
+static PyObject *
+posix_getxattr(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ path_t attribute;
+ int follow_symlinks = 1;
+ PyObject *buffer = NULL;
+ int i;
+ static char *keywords[] = {"path", "attribute", "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+ memset(&attribute, 0, sizeof(attribute));
+ path.allow_fd = 1;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:getxattr", keywords,
+ path_converter, &path,
+ path_converter, &attribute,
+ &follow_symlinks))
+ return NULL;
+
+ if (fd_and_follow_symlinks_invalid("getxattr", path.fd, follow_symlinks))
+ goto exit;
+
+ for (i = 0; ; i++) {
+ void *ptr;
+ ssize_t result;
+ static Py_ssize_t buffer_sizes[] = {128, XATTR_SIZE_MAX, 0};
+ Py_ssize_t buffer_size = buffer_sizes[i];
+ if (!buffer_size) {
+ path_error("getxattr", &path);
+ goto exit;
+ }
+ buffer = PyBytes_FromStringAndSize(NULL, buffer_size);
+ if (!buffer)
+ goto exit;
+ ptr = PyBytes_AS_STRING(buffer);
+
+ Py_BEGIN_ALLOW_THREADS;
+ if (path.fd >= 0)
+ result = fgetxattr(path.fd, attribute.narrow, ptr, buffer_size);
+ else if (follow_symlinks)
+ result = getxattr(path.narrow, attribute.narrow, ptr, buffer_size);
+ else
+ result = lgetxattr(path.narrow, attribute.narrow, ptr, buffer_size);
+ Py_END_ALLOW_THREADS;
+
+ if (result < 0) {
+ Py_DECREF(buffer);
+ buffer = NULL;
+ if (errno == ERANGE)
+ continue;
+ path_error("getxattr", &path);
+ goto exit;
+ }
+
+ if (result != buffer_size) {
+ /* Can only shrink. */
+ _PyBytes_Resize(&buffer, result);
+ }
+ break;
+ }
+
+exit:
+ path_cleanup(&path);
+ path_cleanup(&attribute);
+ return buffer;
+}
+
+PyDoc_STRVAR(posix_setxattr__doc__,
+"setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)\n\n\
+Set extended attribute attribute on path to value.\n\
+path may be either a string or an open file descriptor.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, setxattr will modify the symbolic link itself instead of the file\n\
+ the link points to.");
+
+static PyObject *
+posix_setxattr(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ path_t attribute;
+ Py_buffer value;
+ int flags = 0;
+ int follow_symlinks = 1;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "attribute", "value",
+ "flags", "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+ path.allow_fd = 1;
+ memset(&attribute, 0, sizeof(attribute));
+ memset(&value, 0, sizeof(value));
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&y*|i$p:setxattr",
+ keywords,
+ path_converter, &path,
+ path_converter, &attribute,
+ &value, &flags,
+ &follow_symlinks))
+ return NULL;
+
+ if (fd_and_follow_symlinks_invalid("setxattr", path.fd, follow_symlinks))
+ goto exit;
+
+ Py_BEGIN_ALLOW_THREADS;
+ if (path.fd > -1)
+ result = fsetxattr(path.fd, attribute.narrow,
+ value.buf, value.len, flags);
+ else if (follow_symlinks)
+ result = setxattr(path.narrow, attribute.narrow,
+ value.buf, value.len, flags);
+ else
+ result = lsetxattr(path.narrow, attribute.narrow,
+ value.buf, value.len, flags);
+ Py_END_ALLOW_THREADS;
+
+ if (result) {
+ return_value = path_error("setxattr", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
+ Py_INCREF(return_value);
+
+exit:
+ path_cleanup(&path);
+ path_cleanup(&attribute);
+ PyBuffer_Release(&value);
+
+ return return_value;
+}
+
+PyDoc_STRVAR(posix_removexattr__doc__,
+"removexattr(path, attribute, *, follow_symlinks=True)\n\n\
+Remove extended attribute attribute on path.\n\
+path may be either a string or an open file descriptor.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, removexattr will modify the symbolic link itself instead of the file\n\
+ the link points to.");
+
+static PyObject *
+posix_removexattr(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ path_t attribute;
+ int follow_symlinks = 1;
+ int result;
+ PyObject *return_value = NULL;
+ static char *keywords[] = {"path", "attribute", "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+ memset(&attribute, 0, sizeof(attribute));
+ path.allow_fd = 1;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:removexattr",
+ keywords,
+ path_converter, &path,
+ path_converter, &attribute,
+ &follow_symlinks))
+ return NULL;
+
+ if (fd_and_follow_symlinks_invalid("removexattr", path.fd, follow_symlinks))
+ goto exit;
+
+ Py_BEGIN_ALLOW_THREADS;
+ if (path.fd > -1)
+ result = fremovexattr(path.fd, attribute.narrow);
+ else if (follow_symlinks)
+ result = removexattr(path.narrow, attribute.narrow);
+ else
+ result = lremovexattr(path.narrow, attribute.narrow);
+ Py_END_ALLOW_THREADS;
+
+ if (result) {
+ return_value = path_error("removexattr", &path);
+ goto exit;
+ }
+
+ return_value = Py_None;
+ Py_INCREF(return_value);
+
+exit:
+ path_cleanup(&path);
+ path_cleanup(&attribute);
+
+ return return_value;
+}
+
+PyDoc_STRVAR(posix_listxattr__doc__,
+"listxattr(path='.', *, follow_symlinks=True)\n\n\
+Return a list of extended attributes on path.\n\
+\n\
+path may be either None, a string, or an open file descriptor.\n\
+if path is None, listxattr will examine the current directory.\n\
+If follow_symlinks is False, and the last element of the path is a symbolic\n\
+ link, listxattr will examine the symbolic link itself instead of the file\n\
+ the link points to.");
+
+static PyObject *
+posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ path_t path;
+ int follow_symlinks = 1;
+ Py_ssize_t i;
+ PyObject *result = NULL;
+ char *buffer = NULL;
+ char *name;
+ static char *keywords[] = {"path", "follow_symlinks", NULL};
+
+ memset(&path, 0, sizeof(path));
+ path.allow_fd = 1;
+ path.fd = -1;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&$p:listxattr", keywords,
+ path_converter, &path,
+ &follow_symlinks))
+ return NULL;
+
+ if (fd_and_follow_symlinks_invalid("listxattr", path.fd, follow_symlinks))
+ goto exit;
+
+ name = path.narrow ? path.narrow : ".";
+ for (i = 0; ; i++) {
+ char *start, *trace, *end;
+ ssize_t length;
+ static Py_ssize_t buffer_sizes[] = { 256, XATTR_LIST_MAX, 0 };
+ Py_ssize_t buffer_size = buffer_sizes[i];
+ if (!buffer_size) {
+ /* ERANGE */
+ path_error("listxattr", &path);
+ break;
+ }
+ buffer = PyMem_MALLOC(buffer_size);
+ if (!buffer) {
+ PyErr_NoMemory();
+ break;
+ }
+
+ Py_BEGIN_ALLOW_THREADS;
+ if (path.fd > -1)
+ length = flistxattr(path.fd, buffer, buffer_size);
+ else if (follow_symlinks)
+ length = listxattr(name, buffer, buffer_size);
+ else
+ length = llistxattr(name, buffer, buffer_size);
+ Py_END_ALLOW_THREADS;
+
+ if (length < 0) {
+ if (errno == ERANGE) {
+ PyMem_FREE(buffer);
+ buffer = NULL;
+ continue;
+ }
+ path_error("listxattr", &path);
+ break;
+ }
+
+ result = PyList_New(0);
+ if (!result) {
+ goto exit;
+ }
+
+ end = buffer + length;
+ for (trace = start = buffer; trace != end; trace++) {
+ if (!*trace) {
+ int error;
+ PyObject *attribute = PyUnicode_DecodeFSDefaultAndSize(start,
+ trace - start);
+ if (!attribute) {
+ Py_DECREF(result);
+ result = NULL;
+ goto exit;
+ }
+ error = PyList_Append(result, attribute);
+ Py_DECREF(attribute);
+ if (error) {
+ Py_DECREF(result);
+ result = NULL;
+ goto exit;
+ }
+ start = trace + 1;
+ }
+ }
+ break;
+ }
+exit:
+ path_cleanup(&path);
+ if (buffer)
+ PyMem_FREE(buffer);
+ return result;
+}
+
+#endif /* USE_XATTRS */
+
+
+PyDoc_STRVAR(posix_urandom__doc__,
+"urandom(n) -> str\n\n\
+Return n random bytes suitable for cryptographic use.");
+
+static PyObject *
+posix_urandom(PyObject *self, PyObject *args)
+{
+ Py_ssize_t size;
+ PyObject *result;
+ int ret;
+
+ /* Read arguments */
+ if (!PyArg_ParseTuple(args, "n:urandom", &size))
+ return NULL;
+ if (size < 0)
+ return PyErr_Format(PyExc_ValueError,
+ "negative argument not allowed");
+ result = PyBytes_FromStringAndSize(NULL, size);
+ if (result == NULL)
+ return NULL;
+
+ ret = _PyOS_URandom(PyBytes_AS_STRING(result),
+ PyBytes_GET_SIZE(result));
+ if (ret == -1) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ return result;
+}
+
+/* Terminal size querying */
+
+static PyTypeObject TerminalSizeType;
+
+PyDoc_STRVAR(TerminalSize_docstring,
+ "A tuple of (columns, lines) for holding terminal window size");
+
+static PyStructSequence_Field TerminalSize_fields[] = {
+ {"columns", "width of the terminal window in characters"},
+ {"lines", "height of the terminal window in characters"},
+ {NULL, NULL}
+};
+
+static PyStructSequence_Desc TerminalSize_desc = {
+ "os.terminal_size",
+ TerminalSize_docstring,
+ TerminalSize_fields,
+ 2,
+};
+
+#if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)
+PyDoc_STRVAR(termsize__doc__,
+ "Return the size of the terminal window as (columns, lines).\n" \
+ "\n" \
+ "The optional argument fd (default standard output) specifies\n" \
+ "which file descriptor should be queried.\n" \
+ "\n" \
+ "If the file descriptor is not connected to a terminal, an OSError\n" \
+ "is thrown.\n" \
+ "\n" \
+ "This function will only be defined if an implementation is\n" \
+ "available for this system.\n" \
+ "\n" \
+ "shutil.get_terminal_size is the high-level function which should \n" \
+ "normally be used, os.get_terminal_size is the low-level implementation.");
+
+static PyObject*
+get_terminal_size(PyObject *self, PyObject *args)
+{
+ int columns, lines;
+ PyObject *termsize;
+
+ int fd = fileno(stdout);
+ /* Under some conditions stdout may not be connected and
+ * fileno(stdout) may point to an invalid file descriptor. For example
+ * GUI apps don't have valid standard streams by default.
+ *
+ * If this happens, and the optional fd argument is not present,
+ * the ioctl below will fail returning EBADF. This is what we want.
+ */
+
+ if (!PyArg_ParseTuple(args, "|i", &fd))
+ return NULL;
+
+#ifdef TERMSIZE_USE_IOCTL
+ {
+ struct winsize w;
+ if (ioctl(fd, TIOCGWINSZ, &w))
+ return PyErr_SetFromErrno(PyExc_OSError);
+ columns = w.ws_col;
+ lines = w.ws_row;
+ }
+#endif /* TERMSIZE_USE_IOCTL */
+
+#ifdef TERMSIZE_USE_CONIO
+ {
+ DWORD nhandle;
+ HANDLE handle;
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+ switch (fd) {
+ case 0: nhandle = STD_INPUT_HANDLE;
+ break;
+ case 1: nhandle = STD_OUTPUT_HANDLE;
+ break;
+ case 2: nhandle = STD_ERROR_HANDLE;
+ break;
+ default:
+ return PyErr_Format(PyExc_ValueError, "bad file descriptor");
+ }
+ handle = GetStdHandle(nhandle);
+ if (handle == NULL)
+ return PyErr_Format(PyExc_OSError, "handle cannot be retrieved");
+ if (handle == INVALID_HANDLE_VALUE)
+ return PyErr_SetFromWindowsErr(0);
+
+ if (!GetConsoleScreenBufferInfo(handle, &csbi))
+ return PyErr_SetFromWindowsErr(0);
+
+ columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
+ lines = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
+ }
+#endif /* TERMSIZE_USE_CONIO */
+
+ termsize = PyStructSequence_New(&TerminalSizeType);
+ if (termsize == NULL)
+ return NULL;
+ PyStructSequence_SET_ITEM(termsize, 0, PyLong_FromLong(columns));
+ PyStructSequence_SET_ITEM(termsize, 1, PyLong_FromLong(lines));
+ if (PyErr_Occurred()) {
+ Py_DECREF(termsize);
+ return NULL;
+ }
+ return termsize;
+}
+#endif /* defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL) */
+
+
static PyMethodDef posix_methods[] = {
- {"access", posix_access, METH_VARARGS, posix_access__doc__},
+ {"access", (PyCFunction)posix_access,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_access__doc__},
#ifdef HAVE_TTYNAME
{"ttyname", posix_ttyname, METH_VARARGS, posix_ttyname__doc__},
#endif
- {"chdir", posix_chdir, METH_VARARGS, posix_chdir__doc__},
+ {"chdir", (PyCFunction)posix_chdir,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_chdir__doc__},
#ifdef HAVE_CHFLAGS
- {"chflags", posix_chflags, METH_VARARGS, posix_chflags__doc__},
+ {"chflags", (PyCFunction)posix_chflags,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_chflags__doc__},
#endif /* HAVE_CHFLAGS */
- {"chmod", posix_chmod, METH_VARARGS, posix_chmod__doc__},
+ {"chmod", (PyCFunction)posix_chmod,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_chmod__doc__},
#ifdef HAVE_FCHMOD
{"fchmod", posix_fchmod, METH_VARARGS, posix_fchmod__doc__},
#endif /* HAVE_FCHMOD */
#ifdef HAVE_CHOWN
- {"chown", posix_chown, METH_VARARGS, posix_chown__doc__},
+ {"chown", (PyCFunction)posix_chown,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_chown__doc__},
#endif /* HAVE_CHOWN */
#ifdef HAVE_LCHMOD
{"lchmod", posix_lchmod, METH_VARARGS, posix_lchmod__doc__},
@@ -7895,32 +11039,57 @@ static PyMethodDef posix_methods[] = {
{"getcwdb", (PyCFunction)posix_getcwd_bytes,
METH_NOARGS, posix_getcwdb__doc__},
#endif
-#ifdef HAVE_LINK
- {"link", posix_link, METH_VARARGS, posix_link__doc__},
+#if defined(HAVE_LINK) || defined(MS_WINDOWS)
+ {"link", (PyCFunction)posix_link,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_link__doc__},
#endif /* HAVE_LINK */
- {"listdir", posix_listdir, METH_VARARGS, posix_listdir__doc__},
- {"lstat", posix_lstat, METH_VARARGS, posix_lstat__doc__},
- {"mkdir", posix_mkdir, METH_VARARGS, posix_mkdir__doc__},
+ {"listdir", (PyCFunction)posix_listdir,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_listdir__doc__},
+ {"lstat", (PyCFunction)posix_lstat,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_lstat__doc__},
+ {"mkdir", (PyCFunction)posix_mkdir,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_mkdir__doc__},
#ifdef HAVE_NICE
{"nice", posix_nice, METH_VARARGS, posix_nice__doc__},
#endif /* HAVE_NICE */
+#ifdef HAVE_GETPRIORITY
+ {"getpriority", posix_getpriority, METH_VARARGS, posix_getpriority__doc__},
+#endif /* HAVE_GETPRIORITY */
+#ifdef HAVE_SETPRIORITY
+ {"setpriority", posix_setpriority, METH_VARARGS, posix_setpriority__doc__},
+#endif /* HAVE_SETPRIORITY */
#ifdef HAVE_READLINK
- {"readlink", posix_readlink, METH_VARARGS, posix_readlink__doc__},
+ {"readlink", (PyCFunction)posix_readlink,
+ METH_VARARGS | METH_KEYWORDS,
+ readlink__doc__},
#endif /* HAVE_READLINK */
#if !defined(HAVE_READLINK) && defined(MS_WINDOWS)
- {"readlink", win_readlink, METH_VARARGS, win_readlink__doc__},
+ {"readlink", (PyCFunction)win_readlink,
+ METH_VARARGS | METH_KEYWORDS,
+ readlink__doc__},
#endif /* !defined(HAVE_READLINK) && defined(MS_WINDOWS) */
- {"rename", posix_rename, METH_VARARGS, posix_rename__doc__},
- {"rmdir", posix_rmdir, METH_VARARGS, posix_rmdir__doc__},
- {"stat", posix_stat, METH_VARARGS, posix_stat__doc__},
+ {"rename", (PyCFunction)posix_rename,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_rename__doc__},
+ {"replace", (PyCFunction)posix_replace,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_replace__doc__},
+ {"rmdir", (PyCFunction)posix_rmdir,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_rmdir__doc__},
+ {"stat", (PyCFunction)posix_stat,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_stat__doc__},
{"stat_float_times", stat_float_times, METH_VARARGS, stat_float_times__doc__},
-#if defined(HAVE_SYMLINK) && !defined(MS_WINDOWS)
- {"symlink", posix_symlink, METH_VARARGS, posix_symlink__doc__},
+#if defined(HAVE_SYMLINK)
+ {"symlink", (PyCFunction)posix_symlink,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_symlink__doc__},
#endif /* HAVE_SYMLINK */
-#if defined(HAVE_SYMLINK) && defined(MS_WINDOWS)
- {"symlink", (PyCFunction)win_symlink, METH_VARARGS | METH_KEYWORDS,
- win_symlink__doc__},
-#endif /* defined(HAVE_SYMLINK) && defined(MS_WINDOWS) */
#ifdef HAVE_SYSTEM
{"system", posix_system, METH_VARARGS, posix_system__doc__},
#endif
@@ -7928,16 +11097,23 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_UNAME
{"uname", posix_uname, METH_NOARGS, posix_uname__doc__},
#endif /* HAVE_UNAME */
- {"unlink", posix_unlink, METH_VARARGS, posix_unlink__doc__},
- {"remove", posix_unlink, METH_VARARGS, posix_remove__doc__},
- {"utime", posix_utime, METH_VARARGS, posix_utime__doc__},
+ {"unlink", (PyCFunction)posix_unlink,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_unlink__doc__},
+ {"remove", (PyCFunction)posix_unlink,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_remove__doc__},
+ {"utime", (PyCFunction)posix_utime,
+ METH_VARARGS | METH_KEYWORDS, posix_utime__doc__},
#ifdef HAVE_TIMES
{"times", posix_times, METH_NOARGS, posix_times__doc__},
#endif /* HAVE_TIMES */
{"_exit", posix__exit, METH_VARARGS, posix__exit__doc__},
#ifdef HAVE_EXECV
{"execv", posix_execv, METH_VARARGS, posix_execv__doc__},
- {"execve", posix_execve, METH_VARARGS, posix_execve__doc__},
+ {"execve", (PyCFunction)posix_execve,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_execve__doc__},
#endif /* HAVE_EXECV */
#ifdef HAVE_SPAWNV
{"spawnv", posix_spawnv, METH_VARARGS, posix_spawnv__doc__},
@@ -7953,6 +11129,32 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_FORK
{"fork", posix_fork, METH_NOARGS, posix_fork__doc__},
#endif /* HAVE_FORK */
+#ifdef HAVE_SCHED_H
+#ifdef HAVE_SCHED_GET_PRIORITY_MAX
+ {"sched_get_priority_max", posix_sched_get_priority_max, METH_VARARGS, posix_sched_get_priority_max__doc__},
+ {"sched_get_priority_min", posix_sched_get_priority_min, METH_VARARGS, posix_sched_get_priority_min__doc__},
+#endif
+#ifdef HAVE_SCHED_SETPARAM
+ {"sched_getparam", posix_sched_getparam, METH_VARARGS, posix_sched_getparam__doc__},
+#endif
+#ifdef HAVE_SCHED_SETSCHEDULER
+ {"sched_getscheduler", posix_sched_getscheduler, METH_VARARGS, posix_sched_getscheduler__doc__},
+#endif
+#ifdef HAVE_SCHED_RR_GET_INTERVAL
+ {"sched_rr_get_interval", posix_sched_rr_get_interval, METH_VARARGS, posix_sched_rr_get_interval__doc__},
+#endif
+#ifdef HAVE_SCHED_SETPARAM
+ {"sched_setparam", posix_sched_setparam, METH_VARARGS, posix_sched_setparam__doc__},
+#endif
+#ifdef HAVE_SCHED_SETSCHEDULER
+ {"sched_setscheduler", posix_sched_setscheduler, METH_VARARGS, posix_sched_setscheduler__doc__},
+#endif
+ {"sched_yield", posix_sched_yield, METH_NOARGS, posix_sched_yield__doc__},
+#ifdef HAVE_SCHED_SETAFFINITY
+ {"sched_setaffinity", posix_sched_setaffinity, METH_VARARGS, posix_sched_setaffinity__doc__},
+ {"sched_getaffinity", posix_sched_getaffinity, METH_VARARGS, posix_sched_getaffinity__doc__},
+#endif
+#endif /* HAVE_SCHED_H */
#if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)
{"openpty", posix_openpty, METH_NOARGS, posix_openpty__doc__},
#endif /* HAVE_OPENPTY || HAVE__GETPTY || HAVE_DEV_PTMX */
@@ -7968,6 +11170,9 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_GETGID
{"getgid", posix_getgid, METH_NOARGS, posix_getgid__doc__},
#endif /* HAVE_GETGID */
+#ifdef HAVE_GETGROUPLIST
+ {"getgrouplist", posix_getgrouplist, METH_VARARGS, posix_getgrouplist__doc__},
+#endif
#ifdef HAVE_GETGROUPS
{"getgroups", posix_getgroups, METH_NOARGS, posix_getgroups__doc__},
#endif
@@ -7996,7 +11201,6 @@ static PyMethodDef posix_methods[] = {
#ifdef MS_WINDOWS
{"startfile", win32_startfile, METH_VARARGS, win32_startfile__doc__},
{"kill", win32_kill, METH_VARARGS, win32_kill__doc__},
- {"link", win32_link, METH_VARARGS, win32_link__doc__},
#endif
#ifdef HAVE_SETUID
{"setuid", posix_setuid, METH_VARARGS, posix_setuid__doc__},
@@ -8037,6 +11241,9 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_WAIT4
{"wait4", posix_wait4, METH_VARARGS, posix_wait4__doc__},
#endif /* HAVE_WAIT4 */
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+ {"waitid", posix_waitid, METH_VARARGS, posix_waitid__doc__},
+#endif
#if defined(HAVE_WAITPID) || defined(HAVE_CWAIT)
{"waitpid", posix_waitpid, METH_VARARGS, posix_waitpid__doc__},
#endif /* HAVE_WAITPID */
@@ -8055,25 +11262,53 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_TCSETPGRP
{"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__},
#endif /* HAVE_TCSETPGRP */
- {"open", posix_open, METH_VARARGS, posix_open__doc__},
- {"close", posix_close, METH_VARARGS, posix_close__doc__},
+ {"open", (PyCFunction)posix_open,\
+ METH_VARARGS | METH_KEYWORDS,
+ posix_open__doc__},
+ {"close", posix_close_, METH_VARARGS, posix_close__doc__},
{"closerange", posix_closerange, METH_VARARGS, posix_closerange__doc__},
{"device_encoding", device_encoding, METH_VARARGS, device_encoding__doc__},
{"dup", posix_dup, METH_VARARGS, posix_dup__doc__},
{"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__},
+#ifdef HAVE_LOCKF
+ {"lockf", posix_lockf, METH_VARARGS, posix_lockf__doc__},
+#endif
{"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},
{"read", posix_read, METH_VARARGS, posix_read__doc__},
+#ifdef HAVE_READV
+ {"readv", posix_readv, METH_VARARGS, posix_readv__doc__},
+#endif
+#ifdef HAVE_PREAD
+ {"pread", posix_pread, METH_VARARGS, posix_pread__doc__},
+#endif
{"write", posix_write, METH_VARARGS, posix_write__doc__},
+#ifdef HAVE_WRITEV
+ {"writev", posix_writev, METH_VARARGS, posix_writev__doc__},
+#endif
+#ifdef HAVE_PWRITE
+ {"pwrite", posix_pwrite, METH_VARARGS, posix_pwrite__doc__},
+#endif
+#ifdef HAVE_SENDFILE
+ {"sendfile", (PyCFunction)posix_sendfile, METH_VARARGS | METH_KEYWORDS,
+ posix_sendfile__doc__},
+#endif
{"fstat", posix_fstat, METH_VARARGS, posix_fstat__doc__},
{"isatty", posix_isatty, METH_VARARGS, posix_isatty__doc__},
#ifdef HAVE_PIPE
{"pipe", posix_pipe, METH_NOARGS, posix_pipe__doc__},
#endif
+#ifdef HAVE_PIPE2
+ {"pipe2", posix_pipe2, METH_O, posix_pipe2__doc__},
+#endif
#ifdef HAVE_MKFIFO
- {"mkfifo", posix_mkfifo, METH_VARARGS, posix_mkfifo__doc__},
+ {"mkfifo", (PyCFunction)posix_mkfifo,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_mkfifo__doc__},
#endif
#if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)
- {"mknod", posix_mknod, METH_VARARGS, posix_mknod__doc__},
+ {"mknod", (PyCFunction)posix_mknod,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_mknod__doc__},
#endif
#ifdef HAVE_DEVICE_MACROS
{"major", posix_major, METH_VARARGS, posix_major__doc__},
@@ -8083,6 +11318,17 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_FTRUNCATE
{"ftruncate", posix_ftruncate, METH_VARARGS, posix_ftruncate__doc__},
#endif
+#ifdef HAVE_TRUNCATE
+ {"truncate", (PyCFunction)posix_truncate,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_truncate__doc__},
+#endif
+#ifdef HAVE_POSIX_FALLOCATE
+ {"posix_fallocate", posix_posix_fallocate, METH_VARARGS, posix_posix_fallocate__doc__},
+#endif
+#ifdef HAVE_POSIX_FADVISE
+ {"posix_fadvise", posix_posix_fadvise, METH_VARARGS, posix_posix_fadvise__doc__},
+#endif
#ifdef HAVE_PUTENV
{"putenv", posix_putenv, METH_VARARGS, posix_putenv__doc__},
#endif
@@ -8096,6 +11342,9 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_FSYNC
{"fsync", posix_fsync, METH_O, posix_fsync__doc__},
#endif
+#ifdef HAVE_SYNC
+ {"sync", posix_sync, METH_NOARGS, posix_sync__doc__},
+#endif
#ifdef HAVE_FDATASYNC
{"fdatasync", posix_fdatasync, METH_O, posix_fdatasync__doc__},
#endif
@@ -8129,7 +11378,9 @@ static PyMethodDef posix_methods[] = {
{"fstatvfs", posix_fstatvfs, METH_VARARGS, posix_fstatvfs__doc__},
#endif
#if defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)
- {"statvfs", posix_statvfs, METH_VARARGS, posix_statvfs__doc__},
+ {"statvfs", (PyCFunction)posix_statvfs,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_statvfs__doc__},
#endif
#ifdef HAVE_CONFSTR
{"confstr", posix_confstr, METH_VARARGS, posix_confstr__doc__},
@@ -8141,7 +11392,9 @@ static PyMethodDef posix_methods[] = {
{"fpathconf", posix_fpathconf, METH_VARARGS, posix_fpathconf__doc__},
#endif
#ifdef HAVE_PATHCONF
- {"pathconf", posix_pathconf, METH_VARARGS, posix_pathconf__doc__},
+ {"pathconf", (PyCFunction)posix_pathconf,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_pathconf__doc__},
#endif
{"abort", posix_abort, METH_NOARGS, posix_abort__doc__},
#ifdef MS_WINDOWS
@@ -8149,6 +11402,7 @@ static PyMethodDef posix_methods[] = {
{"_getfinalpathname", posix__getfinalpathname, METH_VARARGS, NULL},
{"_getfileinformation", posix__getfileinformation, METH_VARARGS, NULL},
{"_isdir", posix__isdir, METH_VARARGS, posix__isdir__doc__},
+ {"_getdiskusage", win32__getdiskusage, METH_VARARGS, win32__getdiskusage__doc__},
#endif
#ifdef HAVE_GETLOADAVG
{"getloadavg", posix_getloadavg, METH_NOARGS, posix_getloadavg__doc__},
@@ -8166,6 +11420,24 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_GETRESGID
{"getresgid", posix_getresgid, METH_NOARGS, posix_getresgid__doc__},
#endif
+
+#ifdef USE_XATTRS
+ {"setxattr", (PyCFunction)posix_setxattr,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_setxattr__doc__},
+ {"getxattr", (PyCFunction)posix_getxattr,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_getxattr__doc__},
+ {"removexattr", (PyCFunction)posix_removexattr,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_removexattr__doc__},
+ {"listxattr", (PyCFunction)posix_listxattr,
+ METH_VARARGS | METH_KEYWORDS,
+ posix_listxattr__doc__},
+#endif
+#if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)
+ {"get_terminal_size", get_terminal_size, METH_VARARGS, termsize__doc__},
+#endif
{NULL, NULL} /* Sentinel */
};
@@ -8333,6 +11605,9 @@ all_ins(PyObject *d)
#ifdef O_TEXT
if (ins(d, "O_TEXT", (long)O_TEXT)) return -1;
#endif
+#ifdef O_XATTR
+ if (ins(d, "O_XATTR", (long)O_XATTR)) return -1;
+#endif
#ifdef O_LARGEFILE
if (ins(d, "O_LARGEFILE", (long)O_LARGEFILE)) return -1;
#endif
@@ -8342,6 +11617,38 @@ all_ins(PyObject *d)
#ifdef O_EXLOCK
if (ins(d, "O_EXLOCK", (long)O_EXLOCK)) return -1;
#endif
+#ifdef O_EXEC
+ if (ins(d, "O_EXEC", (long)O_EXEC)) return -1;
+#endif
+#ifdef O_SEARCH
+ if (ins(d, "O_SEARCH", (long)O_SEARCH)) return -1;
+#endif
+#ifdef O_TTY_INIT
+ if (ins(d, "O_TTY_INIT", (long)O_TTY_INIT)) return -1;
+#endif
+#ifdef PRIO_PROCESS
+ if (ins(d, "PRIO_PROCESS", (long)PRIO_PROCESS)) return -1;
+#endif
+#ifdef PRIO_PGRP
+ if (ins(d, "PRIO_PGRP", (long)PRIO_PGRP)) return -1;
+#endif
+#ifdef PRIO_USER
+ if (ins(d, "PRIO_USER", (long)PRIO_USER)) return -1;
+#endif
+#ifdef O_CLOEXEC
+ if (ins(d, "O_CLOEXEC", (long)O_CLOEXEC)) return -1;
+#endif
+#ifdef O_ACCMODE
+ if (ins(d, "O_ACCMODE", (long)O_ACCMODE)) return -1;
+#endif
+
+
+#ifdef SEEK_HOLE
+ if (ins(d, "SEEK_HOLE", (long)SEEK_HOLE)) return -1;
+#endif
+#ifdef SEEK_DATA
+ if (ins(d, "SEEK_DATA", (long)SEEK_DATA)) return -1;
+#endif
/* MS Windows */
#ifdef O_NOINHERIT
@@ -8384,6 +11691,10 @@ all_ins(PyObject *d)
/* Do not follow links. */
if (ins(d, "O_NOFOLLOW", (long)O_NOFOLLOW)) return -1;
#endif
+#ifdef O_NOLINKS
+ /* Fails if link count of the named file is greater than 1 */
+ if (ins(d, "O_NOLINKS", (long)O_NOLINKS)) return -1;
+#endif
#ifdef O_NOATIME
/* Do not update the access time. */
if (ins(d, "O_NOATIME", (long)O_NOATIME)) return -1;
@@ -8450,6 +11761,79 @@ all_ins(PyObject *d)
if (ins(d, "ST_NOSUID", (long)ST_NOSUID)) return -1;
#endif /* ST_NOSUID */
+ /* FreeBSD sendfile() constants */
+#ifdef SF_NODISKIO
+ if (ins(d, "SF_NODISKIO", (long)SF_NODISKIO)) return -1;
+#endif
+#ifdef SF_MNOWAIT
+ if (ins(d, "SF_MNOWAIT", (long)SF_MNOWAIT)) return -1;
+#endif
+#ifdef SF_SYNC
+ if (ins(d, "SF_SYNC", (long)SF_SYNC)) return -1;
+#endif
+
+ /* constants for posix_fadvise */
+#ifdef POSIX_FADV_NORMAL
+ if (ins(d, "POSIX_FADV_NORMAL", (long)POSIX_FADV_NORMAL)) return -1;
+#endif
+#ifdef POSIX_FADV_SEQUENTIAL
+ if (ins(d, "POSIX_FADV_SEQUENTIAL", (long)POSIX_FADV_SEQUENTIAL)) return -1;
+#endif
+#ifdef POSIX_FADV_RANDOM
+ if (ins(d, "POSIX_FADV_RANDOM", (long)POSIX_FADV_RANDOM)) return -1;
+#endif
+#ifdef POSIX_FADV_NOREUSE
+ if (ins(d, "POSIX_FADV_NOREUSE", (long)POSIX_FADV_NOREUSE)) return -1;
+#endif
+#ifdef POSIX_FADV_WILLNEED
+ if (ins(d, "POSIX_FADV_WILLNEED", (long)POSIX_FADV_WILLNEED)) return -1;
+#endif
+#ifdef POSIX_FADV_DONTNEED
+ if (ins(d, "POSIX_FADV_DONTNEED", (long)POSIX_FADV_DONTNEED)) return -1;
+#endif
+
+ /* constants for waitid */
+#if defined(HAVE_SYS_WAIT_H) && defined(HAVE_WAITID)
+ if (ins(d, "P_PID", (long)P_PID)) return -1;
+ if (ins(d, "P_PGID", (long)P_PGID)) return -1;
+ if (ins(d, "P_ALL", (long)P_ALL)) return -1;
+#endif
+#ifdef WEXITED
+ if (ins(d, "WEXITED", (long)WEXITED)) return -1;
+#endif
+#ifdef WNOWAIT
+ if (ins(d, "WNOWAIT", (long)WNOWAIT)) return -1;
+#endif
+#ifdef WSTOPPED
+ if (ins(d, "WSTOPPED", (long)WSTOPPED)) return -1;
+#endif
+#ifdef CLD_EXITED
+ if (ins(d, "CLD_EXITED", (long)CLD_EXITED)) return -1;
+#endif
+#ifdef CLD_DUMPED
+ if (ins(d, "CLD_DUMPED", (long)CLD_DUMPED)) return -1;
+#endif
+#ifdef CLD_TRAPPED
+ if (ins(d, "CLD_TRAPPED", (long)CLD_TRAPPED)) return -1;
+#endif
+#ifdef CLD_CONTINUED
+ if (ins(d, "CLD_CONTINUED", (long)CLD_CONTINUED)) return -1;
+#endif
+
+ /* constants for lockf */
+#ifdef F_LOCK
+ if (ins(d, "F_LOCK", (long)F_LOCK)) return -1;
+#endif
+#ifdef F_TLOCK
+ if (ins(d, "F_TLOCK", (long)F_TLOCK)) return -1;
+#endif
+#ifdef F_ULOCK
+ if (ins(d, "F_ULOCK", (long)F_ULOCK)) return -1;
+#endif
+#ifdef F_TEST
+ if (ins(d, "F_TEST", (long)F_TEST)) return -1;
+#endif
+
#ifdef HAVE_SPAWNV
#if defined(PYOS_OS2) && defined(PYCC_GCC)
if (ins(d, "P_WAIT", (long)P_WAIT)) return -1;
@@ -8481,6 +11865,64 @@ all_ins(PyObject *d)
#endif
#endif
+#ifdef HAVE_SCHED_H
+ if (ins(d, "SCHED_OTHER", (long)SCHED_OTHER)) return -1;
+ if (ins(d, "SCHED_FIFO", (long)SCHED_FIFO)) return -1;
+ if (ins(d, "SCHED_RR", (long)SCHED_RR)) return -1;
+#ifdef SCHED_SPORADIC
+ if (ins(d, "SCHED_SPORADIC", (long)SCHED_SPORADIC)) return -1;
+#endif
+#ifdef SCHED_BATCH
+ if (ins(d, "SCHED_BATCH", (long)SCHED_BATCH)) return -1;
+#endif
+#ifdef SCHED_IDLE
+ if (ins(d, "SCHED_IDLE", (long)SCHED_IDLE)) return -1;
+#endif
+#ifdef SCHED_RESET_ON_FORK
+ if (ins(d, "SCHED_RESET_ON_FORK", (long)SCHED_RESET_ON_FORK)) return -1;
+#endif
+#ifdef SCHED_SYS
+ if (ins(d, "SCHED_SYS", (long)SCHED_SYS)) return -1;
+#endif
+#ifdef SCHED_IA
+ if (ins(d, "SCHED_IA", (long)SCHED_IA)) return -1;
+#endif
+#ifdef SCHED_FSS
+ if (ins(d, "SCHED_FSS", (long)SCHED_FSS)) return -1;
+#endif
+#ifdef SCHED_FX
+ if (ins(d, "SCHED_FX", (long)SCHED_FSS)) return -1;
+#endif
+#endif
+
+#ifdef USE_XATTRS
+ if (ins(d, "XATTR_CREATE", (long)XATTR_CREATE)) return -1;
+ if (ins(d, "XATTR_REPLACE", (long)XATTR_REPLACE)) return -1;
+ if (ins(d, "XATTR_SIZE_MAX", (long)XATTR_SIZE_MAX)) return -1;
+#endif
+
+#ifdef RTLD_LAZY
+ if (PyModule_AddIntMacro(d, RTLD_LAZY)) return -1;
+#endif
+#ifdef RTLD_NOW
+ if (PyModule_AddIntMacro(d, RTLD_NOW)) return -1;
+#endif
+#ifdef RTLD_GLOBAL
+ if (PyModule_AddIntMacro(d, RTLD_GLOBAL)) return -1;
+#endif
+#ifdef RTLD_LOCAL
+ if (PyModule_AddIntMacro(d, RTLD_LOCAL)) return -1;
+#endif
+#ifdef RTLD_NODELETE
+ if (PyModule_AddIntMacro(d, RTLD_NODELETE)) return -1;
+#endif
+#ifdef RTLD_NOLOAD
+ if (PyModule_AddIntMacro(d, RTLD_NOLOAD)) return -1;
+#endif
+#ifdef RTLD_DEEPBIND
+ if (PyModule_AddIntMacro(d, RTLD_DEEPBIND)) return -1;
+#endif
+
#if defined(PYOS_OS2)
if (insertvalues(d)) return -1;
#endif
@@ -8514,10 +11956,142 @@ static struct PyModuleDef posixmodule = {
};
+static char *have_functions[] = {
+
+#ifdef HAVE_FACCESSAT
+ "HAVE_FACCESSAT",
+#endif
+
+#ifdef HAVE_FCHDIR
+ "HAVE_FCHDIR",
+#endif
+
+#ifdef HAVE_FCHMOD
+ "HAVE_FCHMOD",
+#endif
+
+#ifdef HAVE_FCHMODAT
+ "HAVE_FCHMODAT",
+#endif
+
+#ifdef HAVE_FCHOWN
+ "HAVE_FCHOWN",
+#endif
+
+#ifdef HAVE_FCHOWNAT
+ "HAVE_FCHOWNAT",
+#endif
+
+#ifdef HAVE_FEXECVE
+ "HAVE_FEXECVE",
+#endif
+
+#ifdef HAVE_FDOPENDIR
+ "HAVE_FDOPENDIR",
+#endif
+
+#ifdef HAVE_FPATHCONF
+ "HAVE_FPATHCONF",
+#endif
+
+#ifdef HAVE_FSTATAT
+ "HAVE_FSTATAT",
+#endif
+
+#ifdef HAVE_FSTATVFS
+ "HAVE_FSTATVFS",
+#endif
+
+#ifdef HAVE_FTRUNCATE
+ "HAVE_FTRUNCATE",
+#endif
+
+#ifdef HAVE_FUTIMENS
+ "HAVE_FUTIMENS",
+#endif
+
+#ifdef HAVE_FUTIMES
+ "HAVE_FUTIMES",
+#endif
+
+#ifdef HAVE_FUTIMESAT
+ "HAVE_FUTIMESAT",
+#endif
+
+#ifdef HAVE_LINKAT
+ "HAVE_LINKAT",
+#endif
+
+#ifdef HAVE_LCHFLAGS
+ "HAVE_LCHFLAGS",
+#endif
+
+#ifdef HAVE_LCHMOD
+ "HAVE_LCHMOD",
+#endif
+
+#ifdef HAVE_LCHOWN
+ "HAVE_LCHOWN",
+#endif
+
+#ifdef HAVE_LSTAT
+ "HAVE_LSTAT",
+#endif
+
+#ifdef HAVE_LUTIMES
+ "HAVE_LUTIMES",
+#endif
+
+#ifdef HAVE_MKDIRAT
+ "HAVE_MKDIRAT",
+#endif
+
+#ifdef HAVE_MKFIFOAT
+ "HAVE_MKFIFOAT",
+#endif
+
+#ifdef HAVE_MKNODAT
+ "HAVE_MKNODAT",
+#endif
+
+#ifdef HAVE_OPENAT
+ "HAVE_OPENAT",
+#endif
+
+#ifdef HAVE_READLINKAT
+ "HAVE_READLINKAT",
+#endif
+
+#ifdef HAVE_RENAMEAT
+ "HAVE_RENAMEAT",
+#endif
+
+#ifdef HAVE_SYMLINKAT
+ "HAVE_SYMLINKAT",
+#endif
+
+#ifdef HAVE_UNLINKAT
+ "HAVE_UNLINKAT",
+#endif
+
+#ifdef HAVE_UTIMENSAT
+ "HAVE_UTIMENSAT",
+#endif
+
+#ifdef MS_WINDOWS
+ "MS_WINDOWS",
+#endif
+
+ NULL
+};
+
+
PyMODINIT_FUNC
INITFUNC(void)
{
PyObject *m, *v;
+ PyObject *list;
+ char **trace;
#if defined(HAVE_SYMLINK) && defined(MS_WINDOWS)
win32_can_symlink = enable_symlink();
@@ -8549,6 +12123,11 @@ INITFUNC(void)
#endif
if (!initialized) {
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+ waitid_result_desc.name = MODNAME ".waitid_result";
+ PyStructSequence_InitType(&WaitidResultType, &waitid_result_desc);
+#endif
+
stat_result_desc.name = MODNAME ".stat_result";
stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
@@ -8568,13 +12147,38 @@ INITFUNC(void)
ticks_per_second = 60; /* magic fallback value; may be bogus */
# endif
#endif
+
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER)
+ sched_param_desc.name = MODNAME ".sched_param";
+ PyStructSequence_InitType(&SchedParamType, &sched_param_desc);
+ SchedParamType.tp_new = sched_param_new;
+#endif
+
+ /* initialize TerminalSize_info */
+ PyStructSequence_InitType(&TerminalSizeType, &TerminalSize_desc);
}
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+ Py_INCREF((PyObject*) &WaitidResultType);
+ PyModule_AddObject(m, "waitid_result", (PyObject*) &WaitidResultType);
+#endif
Py_INCREF((PyObject*) &StatResultType);
PyModule_AddObject(m, "stat_result", (PyObject*) &StatResultType);
Py_INCREF((PyObject*) &StatVFSResultType);
PyModule_AddObject(m, "statvfs_result",
(PyObject*) &StatVFSResultType);
- initialized = 1;
+
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER)
+ Py_INCREF(&SchedParamType);
+ PyModule_AddObject(m, "sched_param", (PyObject *)&SchedParamType);
+#endif
+
+ times_result_desc.name = MODNAME ".times_result";
+ PyStructSequence_InitType(&TimesResultType, &times_result_desc);
+ PyModule_AddObject(m, "times_result", (PyObject *)&TimesResultType);
+
+ uname_result_desc.name = MODNAME ".uname_result";
+ PyStructSequence_InitType(&UnameResultType, &uname_result_desc);
+ PyModule_AddObject(m, "uname_result", (PyObject *)&UnameResultType);
#ifdef __APPLE__
/*
@@ -8584,7 +12188,7 @@ INITFUNC(void)
* currently active platform.
*
* This block allow one to use a python binary that was build on
- * OSX 10.4 on OSX 10.3, without loosing access to new APIs on
+ * OSX 10.4 on OSX 10.3, without losing access to new APIs on
* OSX 10.4.
*/
#ifdef HAVE_FSTATVFS
@@ -8613,6 +12217,43 @@ INITFUNC(void)
#endif /* __APPLE__ */
+
+ Py_INCREF(&TerminalSizeType);
+ PyModule_AddObject(m, "terminal_size", (PyObject*) &TerminalSizeType);
+
+ billion = PyLong_FromLong(1000000000);
+ if (!billion)
+ return NULL;
+
+ /* suppress "function not used" warnings */
+ {
+ int ignored;
+ fd_specified("", -1);
+ follow_symlinks_specified("", 1);
+ dir_fd_and_follow_symlinks_invalid("chmod", DEFAULT_DIR_FD, 1);
+ dir_fd_converter(Py_None, &ignored);
+ dir_fd_unavailable(Py_None, &ignored);
+ }
+
+ /*
+ * provide list of locally available functions
+ * so os.py can populate support_* lists
+ */
+ list = PyList_New(0);
+ if (!list)
+ return NULL;
+ for (trace = have_functions; *trace; trace++) {
+ PyObject *unicode = PyUnicode_DecodeASCII(*trace, strlen(*trace), NULL);
+ if (!unicode)
+ return NULL;
+ if (PyList_Append(list, unicode))
+ return NULL;
+ Py_DECREF(unicode);
+ }
+ PyModule_AddObject(m, "_have_functions", list);
+
+ initialized = 1;
+
return m;
}
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index 9d22d3a051..45680ae962 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -100,16 +100,17 @@ static PyObject *
set_error(xmlparseobject *self, enum XML_Error code)
{
PyObject *err;
- char buffer[256];
+ PyObject *buffer;
XML_Parser parser = self->itself;
int lineno = XML_GetErrorLineNumber(parser);
int column = XML_GetErrorColumnNumber(parser);
- /* There is no risk of overflowing this buffer, since
- even for 64-bit integers, there is sufficient space. */
- sprintf(buffer, "%.200s: line %i, column %i",
- XML_ErrorString(code), lineno, column);
- err = PyObject_CallFunction(ErrorObject, "s", buffer);
+ buffer = PyUnicode_FromFormat("%s: line %i, column %i",
+ XML_ErrorString(code), lineno, column);
+ if (buffer == NULL)
+ return NULL;
+ err = PyObject_CallFunction(ErrorObject, "O", buffer);
+ Py_DECREF(buffer);
if ( err != NULL
&& set_error_attr(err, "code", code)
&& set_error_attr(err, "offset", column)
@@ -282,12 +283,17 @@ call_with_frame(PyCodeObject *c, PyObject* func, PyObject* args,
{
PyThreadState *tstate = PyThreadState_GET();
PyFrameObject *f;
- PyObject *res;
+ PyObject *res, *globals;
if (c == NULL)
return NULL;
- f = PyFrame_New(tstate, c, PyEval_GetGlobals(), NULL);
+ globals = PyEval_GetGlobals();
+ if (globals == NULL) {
+ return NULL;
+ }
+
+ f = PyFrame_New(tstate, c, globals, NULL);
if (f == NULL)
return NULL;
tstate->frame = f;
@@ -308,8 +314,7 @@ call_with_frame(PyCodeObject *c, PyObject* func, PyObject* args,
}
else {
if (trace_frame(tstate, f, PyTrace_RETURN, res) < 0) {
- Py_XDECREF(res);
- res = NULL;
+ Py_CLEAR(res);
}
}
#else
@@ -793,13 +798,10 @@ xmlparse_Parse(xmlparseobject *self, PyObject *args)
return NULL;
if (PyUnicode_Check(data)) {
- PyObject *bytes;
- bytes = PyUnicode_AsUTF8String(data);
- if (bytes == NULL)
- return NULL;
view.buf = NULL;
- s = PyBytes_AS_STRING(bytes);
- slen = PyBytes_GET_SIZE(bytes);
+ s = PyUnicode_AsUTF8AndSize(data, &slen);
+ if (s == NULL)
+ return NULL;
/* Explicitly set UTF-8 encoding. Return code ignored. */
(void)XML_SetEncoding(self->itself, "utf-8");
}
@@ -877,9 +879,9 @@ xmlparse_ParseFile(xmlparseobject *self, PyObject *f)
{
int rv = 1;
PyObject *readmethod = NULL;
+ _Py_IDENTIFIER(read);
-
- readmethod = PyObject_GetAttrString(f, "read");
+ readmethod = _PyObject_GetAttrId(f, &PyId_read);
if (readmethod == NULL) {
PyErr_SetString(PyExc_TypeError,
"argument must have 'read' attribute");
@@ -1067,16 +1069,10 @@ getting the advantage of providing document type information to the parser.\n\
static PyObject *
xmlparse_UseForeignDTD(xmlparseobject *self, PyObject *args)
{
- PyObject *flagobj = NULL;
int flag = 1;
enum XML_Error rc;
- if (!PyArg_ParseTuple(args, "|O:UseForeignDTD", &flagobj))
+ if (!PyArg_ParseTuple(args, "|p:UseForeignDTD", &flag))
return NULL;
- if (flagobj != NULL) {
- flag = PyObject_IsTrue(flagobj);
- if (flag < 0)
- return NULL;
- }
rc = XML_UseForeignDTD(self->itself, flag ? XML_TRUE : XML_FALSE);
if (rc != XML_ERROR_NONE) {
return set_error(self, rc);
@@ -1119,48 +1115,49 @@ static struct PyMethodDef xmlparse_methods[] = {
Make it as simple as possible.
*/
-static char template_buffer[257];
-
-static void
-init_template_buffer(void)
-{
- int i;
- for (i = 0; i < 256; i++) {
- template_buffer[i] = i;
- }
- template_buffer[256] = 0;
-}
-
static int
PyUnknownEncodingHandler(void *encodingHandlerData,
const XML_Char *name,
XML_Encoding *info)
{
- PyUnicodeObject *_u_string = NULL;
- int result = 0;
+ static unsigned char template_buffer[256] = {0};
+ PyObject* u;
int i;
+ void *data;
+ unsigned int kind;
- /* Yes, supports only 8bit encodings */
- _u_string = (PyUnicodeObject *)
- PyUnicode_Decode(template_buffer, 256, name, "replace");
+ if (template_buffer[1] == 0) {
+ for (i = 0; i < 256; i++)
+ template_buffer[i] = i;
+ }
- if (_u_string == NULL)
- return result;
+ u = PyUnicode_Decode((char*) template_buffer, 256, name, "replace");
+ if (u == NULL || PyUnicode_READY(u))
+ return XML_STATUS_ERROR;
+ if (PyUnicode_GET_LENGTH(u) != 256) {
+ Py_DECREF(u);
+ PyErr_SetString(PyExc_ValueError,
+ "multi-byte encodings are not supported");
+ return XML_STATUS_ERROR;
+ }
+
+ kind = PyUnicode_KIND(u);
+ data = PyUnicode_DATA(u);
for (i = 0; i < 256; i++) {
- /* Stupid to access directly, but fast */
- Py_UNICODE c = _u_string->str[i];
- if (c == Py_UNICODE_REPLACEMENT_CHARACTER)
- info->map[i] = -1;
+ Py_UCS4 ch = PyUnicode_READ(kind, data, i);
+ if (ch != Py_UNICODE_REPLACEMENT_CHARACTER)
+ info->map[i] = ch;
else
- info->map[i] = c;
+ info->map[i] = -1;
}
+
info->data = NULL;
info->convert = NULL;
info->release = NULL;
- result = 1;
- Py_DECREF(_u_string);
- return result;
+ Py_DECREF(u);
+
+ return XML_STATUS_OK;
}
@@ -1273,11 +1270,13 @@ get_pybool(int istrue)
static PyObject *
xmlparse_getattro(xmlparseobject *self, PyObject *nameobj)
{
- Py_UNICODE *name;
+ Py_UCS4 first_char;
int handlernum = -1;
if (!PyUnicode_Check(nameobj))
goto generic;
+ if (PyUnicode_READY(nameobj))
+ return NULL;
handlernum = handlername2int(nameobj);
@@ -1289,8 +1288,8 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj)
return result;
}
- name = PyUnicode_AS_UNICODE(nameobj);
- if (name[0] == 'E') {
+ first_char = PyUnicode_READ_CHAR(nameobj, 0);
+ if (first_char == 'E') {
if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorCode") == 0)
return PyLong_FromLong((long)
XML_GetErrorCode(self->itself));
@@ -1304,7 +1303,7 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj)
return PyLong_FromLong((long)
XML_GetErrorByteIndex(self->itself));
}
- if (name[0] == 'C') {
+ if (first_char == 'C') {
if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentLineNumber") == 0)
return PyLong_FromLong((long)
XML_GetCurrentLineNumber(self->itself));
@@ -1315,7 +1314,7 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj)
return PyLong_FromLong((long)
XML_GetCurrentByteIndex(self->itself));
}
- if (name[0] == 'b') {
+ if (first_char == 'b') {
if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_size") == 0)
return PyLong_FromLong((long) self->buffer_size);
if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_text") == 0)
@@ -1508,7 +1507,9 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v)
if (self->buffer != NULL) {
/* there is already a buffer */
if (self->buffer_used != 0) {
- flush_character_buffer(self);
+ if (flush_character_buffer(self) < 0) {
+ return -1;
+ }
}
/* free existing buffer */
free(self->buffer);
@@ -1709,7 +1710,6 @@ MODULE_INITFUNC(void)
PyObject *errors_module;
PyObject *modelmod_name;
PyObject *model_module;
- PyObject *version;
PyObject *sys_modules;
PyObject *tmpnum, *tmpstr;
PyObject *codes_dict;
@@ -1746,10 +1746,6 @@ MODULE_INITFUNC(void)
Py_INCREF(&Xmlparsetype);
PyModule_AddObject(m, "XMLParserType", (PyObject *) &Xmlparsetype);
- version = PyUnicode_FromString(PY_VERSION);
- if (!version)
- return NULL;
- PyModule_AddObject(m, "__version__", version);
PyModule_AddStringConstant(m, "EXPAT_VERSION",
(char *) XML_ExpatVersion());
{
@@ -1758,7 +1754,6 @@ MODULE_INITFUNC(void)
Py_BuildValue("(iii)", info.major,
info.minor, info.micro));
}
- init_template_buffer();
/* XXX When Expat supports some way of figuring out how it was
compiled, this should check and set native_encoding
appropriately.
@@ -1942,6 +1937,9 @@ MODULE_INITFUNC(void)
capi.SetProcessingInstructionHandler = XML_SetProcessingInstructionHandler;
capi.SetUnknownEncodingHandler = XML_SetUnknownEncodingHandler;
capi.SetUserData = XML_SetUserData;
+ capi.SetStartDoctypeDeclHandler = XML_SetStartDoctypeDeclHandler;
+ capi.SetEncoding = XML_SetEncoding;
+ capi.DefaultUnknownEncodingHandler = PyUnknownEncodingHandler;
/* export using capsule */
capi_object = PyCapsule_New(&capi, PyExpat_CAPSULE_NAME, NULL);
diff --git a/Modules/python.c b/Modules/python.c
index 2be69f1f54..f781d9a525 100644
--- a/Modules/python.c
+++ b/Modules/python.c
@@ -18,11 +18,19 @@ wmain(int argc, wchar_t **argv)
int
main(int argc, char **argv)
{
- wchar_t **argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
- /* We need a second copies, as Python might modify the first one. */
- wchar_t **argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
+ wchar_t **argv_copy;
+ /* We need a second copy, as Python might modify the first one. */
+ wchar_t **argv_copy2;
int i, res;
char *oldloc;
+
+ argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
+ argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
+ if (!argv_copy || !argv_copy2) {
+ fprintf(stderr, "out of memory\n");
+ return 1;
+ }
+
/* 754 requires that FP exceptions run in "no stop" mode by default,
* and until C vendors implement C99's ways to control FP exceptions,
* Python requires non-stop mode. Alas, some platforms enable FP
@@ -34,15 +42,12 @@ main(int argc, char **argv)
m = fpgetmask();
fpsetmask(m & ~FP_X_OFL);
#endif
- if (!argv_copy || !argv_copy2) {
- fprintf(stderr, "out of memory\n");
- return 1;
- }
oldloc = strdup(setlocale(LC_ALL, NULL));
setlocale(LC_ALL, "");
for (i = 0; i < argc; i++) {
argv_copy[i] = _Py_char2wchar(argv[i], NULL);
if (!argv_copy[i]) {
+ free(oldloc);
fprintf(stderr, "Fatal Python error: "
"unable to decode the command line argument #%i\n",
i + 1);
diff --git a/Modules/readline.c b/Modules/readline.c
index 4d54dade5d..8fac526be3 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -54,14 +54,16 @@ extern char **completion_matches(char *, CPFunction *);
* with the "real" readline and cannot be detected at compile-time,
* hence we use a runtime check to detect if we're using libedit
*
- * Currently there is one know API incompatibility:
+ * Currently there is one known API incompatibility:
* - 'get_history' has a 1-based index with GNU readline, and a 0-based
- * index with libedit's emulation.
+ * index with older versions of libedit's emulation.
* - Note that replace_history and remove_history use a 0-based index
- * with both implementation.
+ * with both implementations.
*/
static int using_libedit_emulation = 0;
static const char libedit_version_tag[] = "EditLine wrapper";
+
+static int libedit_history_start = 0;
#endif /* __APPLE__ */
#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
@@ -70,6 +72,10 @@ on_completion_display_matches_hook(char **matches,
int num_matches, int max_length);
#endif
+/* Memory allocated for rl_completer_word_break_characters
+ (see issue #17289 for the motivation). */
+static char *completer_word_break_characters;
+
/* Exported function to send one line to readline's init file parser */
static PyObject *
@@ -225,8 +231,7 @@ set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -235,10 +240,9 @@ set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Py_XDECREF(tmp);
}
else {
- PyOS_snprintf(buf, sizeof(buf),
- "set_%.50s(func): argument not callable",
- funcname);
- PyErr_SetString(PyExc_TypeError, buf);
+ PyErr_Format(PyExc_TypeError,
+ "set_%.50s(func): argument not callable",
+ funcname);
return NULL;
}
Py_RETURN_NONE;
@@ -369,12 +373,20 @@ set_completer_delims(PyObject *self, PyObject *args)
{
char *break_chars;
- if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
+ if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
return NULL;
}
- free((void*)rl_completer_word_break_characters);
- rl_completer_word_break_characters = strdup(break_chars);
- Py_RETURN_NONE;
+ /* Keep a reference to the allocated memory in the module state in case
+ some other module modifies rl_completer_word_break_characters
+ (see issue #17289). */
+ free(completer_word_break_characters);
+ completer_word_break_characters = strdup(break_chars);
+ if (completer_word_break_characters) {
+ rl_completer_word_break_characters = completer_word_break_characters;
+ Py_RETURN_NONE;
+ }
+ else
+ return PyErr_NoMemory();
}
PyDoc_STRVAR(doc_set_completer_delims,
@@ -568,21 +580,21 @@ get_history_item(PyObject *self, PyObject *args)
return NULL;
#ifdef __APPLE__
if (using_libedit_emulation) {
- /* Libedit emulation uses 0-based indexes,
- * the real one uses 1-based indexes,
- * adjust the index to ensure that Python
- * code doesn't have to worry about the
- * difference.
+ /* Older versions of libedit's readline emulation
+ * use 0-based indexes, while readline and newer
+ * versions of libedit use 1-based indexes.
*/
int length = _py_get_history_length();
- idx --;
+
+ idx = idx - 1 + libedit_history_start;
/*
* Apple's readline emulation crashes when
* the index is out of range, therefore
* test for that and fail gracefully.
*/
- if (idx < 0 || idx >= length) {
+ if (idx < (0 + libedit_history_start)
+ || idx >= (length + libedit_history_start)) {
Py_RETURN_NONE;
}
}
@@ -761,14 +773,22 @@ on_hook(PyObject *func)
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -806,7 +826,7 @@ on_completion_display_matches_hook(char **matches,
(r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
goto error;
}
- Py_XDECREF(r); r=NULL;
+ Py_CLEAR(r);
if (0) {
error:
@@ -864,7 +884,7 @@ on_completion(const char *text, int state)
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
rl_completion_append_character ='\0';
@@ -892,11 +912,22 @@ setup_readline(void)
#endif
#ifdef __APPLE__
- /* the libedit readline emulation resets key bindings etc
+ /* the libedit readline emulation resets key bindings etc
* when calling rl_initialize. So call it upfront
*/
if (using_libedit_emulation)
rl_initialize();
+
+ /* Detect if libedit's readline emulation uses 0-based
+ * indexing or 1-based indexing.
+ */
+ add_history("1");
+ if (history_get(1) == NULL) {
+ libedit_history_start = 0;
+ } else {
+ libedit_history_start = 1;
+ }
+ clear_history();
#endif /* __APPLE__ */
using_history();
@@ -912,14 +943,15 @@ setup_readline(void)
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
- rl_completer_word_break_characters =
+ completer_word_break_characters =
+ rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
/* All nonalphanums except '.' */
@@ -932,11 +964,11 @@ setup_readline(void)
*/
#ifdef __APPLE__
if (using_libedit_emulation)
- rl_read_init_file(NULL);
+ rl_read_init_file(NULL);
else
#endif /* __APPLE__ */
rl_initialize();
-
+
RESTORE_LOCALE(saved_locale)
}
@@ -1104,11 +1136,8 @@ call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
if (length > 0)
#ifdef __APPLE__
if (using_libedit_emulation) {
- /*
- * Libedit's emulation uses 0-based indexes,
- * the real readline uses 1-based indexes.
- */
- line = (const char *)history_get(length - 1)->line;
+ /* handle older 0-based or newer 1-based indexing */
+ line = (const char *)history_get(length + libedit_history_start - 1)->line;
} else
#endif /* __APPLE__ */
line = (const char *)history_get(length)->line;
@@ -1175,8 +1204,6 @@ PyInit_readline(void)
if (m == NULL)
return NULL;
-
-
PyOS_ReadlineFunctionPointer = call_readline;
setup_readline();
return m;
diff --git a/Modules/resource.c b/Modules/resource.c
index cadf9e6dff..b294a8cfe1 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -18,8 +18,6 @@
#define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001)
-static PyObject *ResourceError;
-
PyDoc_STRVAR(struct_rusage__doc__,
"struct_rusage: Result from getrusage.\n\n"
"This object may be accessed either as a tuple of\n"
@@ -73,7 +71,7 @@ resource_getrusage(PyObject *self, PyObject *args)
"invalid who parameter");
return NULL;
}
- PyErr_SetFromErrno(ResourceError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -125,7 +123,7 @@ resource_getrlimit(PyObject *self, PyObject *args)
}
if (getrlimit(resource, &rl) == -1) {
- PyErr_SetFromErrno(ResourceError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -195,7 +193,7 @@ resource_setrlimit(PyObject *self, PyObject *args)
PyErr_SetString(PyExc_ValueError,
"not allowed to raise maximum limit");
else
- PyErr_SetFromErrno(ResourceError);
+ PyErr_SetFromErrno(PyExc_OSError);
goto error;
}
Py_DECREF(limits);
@@ -263,12 +261,8 @@ PyInit_resource(void)
return NULL;
/* Add some symbolic constants to the module */
- if (ResourceError == NULL) {
- ResourceError = PyErr_NewException("resource.error",
- NULL, NULL);
- }
- Py_INCREF(ResourceError);
- PyModule_AddObject(m, "error", ResourceError);
+ Py_INCREF(PyExc_OSError);
+ PyModule_AddObject(m, "error", PyExc_OSError);
if (!initialized)
PyStructSequence_InitType(&StructRUsageType,
&struct_rusage_desc);
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 7863aaa4bb..952a0919d4 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -7,6 +7,14 @@
#include "Python.h"
#include <structmember.h>
+#ifdef HAVE_SYS_DEVPOLL_H
+#include <sys/resource.h>
+#include <sys/devpoll.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#endif
+
#ifdef __APPLE__
/* Perform runtime testing for a broken poll on OSX to make it easier
* to use the same binary on multiple releases of the OS.
@@ -54,8 +62,6 @@ extern void bzero(void *, int);
# endif
#endif
-static PyObject *SelectError;
-
/* list of Python objects and their file descriptor */
typedef struct {
PyObject *obj; /* owned reference */
@@ -68,8 +74,7 @@ reap_obj(pylist fd2obj[FD_SETSIZE + 1])
{
int i;
for (i = 0; i < FD_SETSIZE + 1 && fd2obj[i].sentinel >= 0; i++) {
- Py_XDECREF(fd2obj[i].obj);
- fd2obj[i].obj = NULL;
+ Py_CLEAR(fd2obj[i].obj);
}
fd2obj[0].sentinel = -1;
}
@@ -198,9 +203,7 @@ select_select(PyObject *self, PyObject *args)
PyObject *ret = NULL;
PyObject *tout = Py_None;
fd_set ifdset, ofdset, efdset;
- double timeout;
struct timeval tv, *tvp;
- long seconds;
int imax, omax, emax, max;
int n;
@@ -217,18 +220,31 @@ select_select(PyObject *self, PyObject *args)
return NULL;
}
else {
- timeout = PyFloat_AsDouble(tout);
- if (timeout == -1 && PyErr_Occurred())
+#ifdef MS_WINDOWS
+ time_t sec;
+ if (_PyTime_ObjectToTimeval(tout, &sec, &tv.tv_usec) == -1)
return NULL;
- if (timeout > (double)LONG_MAX) {
+ assert(sizeof(tv.tv_sec) == sizeof(long));
+#if SIZEOF_TIME_T > SIZEOF_LONG
+ if (sec > LONG_MAX) {
PyErr_SetString(PyExc_OverflowError,
- "timeout period too long");
+ "timeout is too large");
+ return NULL;
+ }
+#endif
+ tv.tv_sec = (long)sec;
+#else
+ /* 64-bit OS X has struct timeval.tv_usec as an int (and thus still 4
+ bytes as required), but no longer defined by a long. */
+ long tv_usec;
+ if (_PyTime_ObjectToTimeval(tout, &tv.tv_sec, &tv_usec) == -1)
+ return NULL;
+ tv.tv_usec = tv_usec;
+#endif
+ if (tv.tv_sec < 0) {
+ PyErr_SetString(PyExc_ValueError, "timeout must be non-negative");
return NULL;
}
- seconds = (long)timeout;
- timeout = timeout - (double)seconds;
- tv.tv_sec = seconds;
- tv.tv_usec = (long)(timeout * 1E6);
tvp = &tv;
}
@@ -267,11 +283,11 @@ select_select(PyObject *self, PyObject *args)
#ifdef MS_WINDOWS
if (n == SOCKET_ERROR) {
- PyErr_SetExcFromWindowsErr(SelectError, WSAGetLastError());
+ PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError());
}
#else
if (n < 0) {
- PyErr_SetFromErrno(SelectError);
+ PyErr_SetFromErrno(PyExc_OSError);
}
#endif
else {
@@ -315,6 +331,7 @@ typedef struct {
int ufd_uptodate;
int ufd_len;
struct pollfd *ufds;
+ int poll_running;
} pollObject;
static PyTypeObject poll_Type;
@@ -343,7 +360,7 @@ update_ufd_array(pollObject *self)
assert(i < self->ufd_len);
/* Never overflow */
self->ufds[i].fd = (int)PyLong_AsLong(key);
- self->ufds[i].events = (short)PyLong_AsLong(value);
+ self->ufds[i].events = (short)(unsigned short)PyLong_AsLong(value);
i++;
}
assert(i == self->ufd_len);
@@ -351,6 +368,24 @@ update_ufd_array(pollObject *self)
return 1;
}
+static int
+ushort_converter(PyObject *obj, void *ptr)
+{
+ unsigned long uval;
+
+ uval = PyLong_AsUnsignedLong(obj);
+ if (uval == (unsigned long)-1 && PyErr_Occurred())
+ return 0;
+ if (uval > USHRT_MAX) {
+ PyErr_SetString(PyExc_OverflowError,
+ "Python int too large for C unsigned short");
+ return 0;
+ }
+
+ *(unsigned short *)ptr = Py_SAFE_DOWNCAST(uval, unsigned long, unsigned short);
+ return 1;
+}
+
PyDoc_STRVAR(poll_register_doc,
"register(fd [, eventmask] ) -> None\n\n\
Register a file descriptor with the polling object.\n\
@@ -363,12 +398,11 @@ poll_register(pollObject *self, PyObject *args)
{
PyObject *o, *key, *value;
int fd;
- short events = POLLIN | POLLPRI | POLLOUT;
+ unsigned short events = POLLIN | POLLPRI | POLLOUT;
int err;
- if (!PyArg_ParseTuple(args, "O|h:register", &o, &events)) {
+ if (!PyArg_ParseTuple(args, "O|O&:register", &o, ushort_converter, &events))
return NULL;
- }
fd = PyObject_AsFileDescriptor(o);
if (fd == -1) return NULL;
@@ -406,12 +440,12 @@ static PyObject *
poll_modify(pollObject *self, PyObject *args)
{
PyObject *o, *key, *value;
- int fd, events;
+ int fd;
+ unsigned short events;
int err;
- if (!PyArg_ParseTuple(args, "Oi:modify", &o, &events)) {
+ if (!PyArg_ParseTuple(args, "OO&:modify", &o, ushort_converter, &events))
return NULL;
- }
fd = PyObject_AsFileDescriptor(o);
if (fd == -1) return NULL;
@@ -422,7 +456,7 @@ poll_modify(pollObject *self, PyObject *args)
return NULL;
if (PyDict_GetItem(self->dict, key) == NULL) {
errno = ENOENT;
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
Py_DECREF(key);
return NULL;
}
@@ -511,18 +545,29 @@ poll_poll(pollObject *self, PyObject *args)
return NULL;
}
+ /* Avoid concurrent poll() invocation, issue 8865 */
+ if (self->poll_running) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "concurrent poll() invocation");
+ return NULL;
+ }
+
/* Ensure the ufd array is up to date */
if (!self->ufd_uptodate)
if (update_ufd_array(self) == 0)
return NULL;
+ self->poll_running = 1;
+
/* call poll() */
Py_BEGIN_ALLOW_THREADS
poll_result = poll(self->ufds, self->ufd_len, timeout);
Py_END_ALLOW_THREADS
+ self->poll_running = 0;
+
if (poll_result < 0) {
- PyErr_SetFromErrno(SelectError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -597,6 +642,7 @@ newPollObject(void)
array pointed to by ufds matches the contents of the dictionary. */
self->ufd_uptodate = 0;
self->ufds = NULL;
+ self->poll_running = 0;
self->dict = PyDict_New();
if (self->dict == NULL) {
Py_DECREF(self);
@@ -648,6 +694,339 @@ static PyTypeObject poll_Type = {
poll_methods, /*tp_methods*/
};
+#ifdef HAVE_SYS_DEVPOLL_H
+typedef struct {
+ PyObject_HEAD
+ int fd_devpoll;
+ int max_n_fds;
+ int n_fds;
+ struct pollfd *fds;
+} devpollObject;
+
+static PyTypeObject devpoll_Type;
+
+static int devpoll_flush(devpollObject *self)
+{
+ int size, n;
+
+ if (!self->n_fds) return 0;
+
+ size = sizeof(struct pollfd)*self->n_fds;
+ self->n_fds = 0;
+
+ Py_BEGIN_ALLOW_THREADS
+ n = write(self->fd_devpoll, self->fds, size);
+ Py_END_ALLOW_THREADS
+
+ if (n == -1 ) {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return -1;
+ }
+ if (n < size) {
+ /*
+ ** Data writed to /dev/poll is a binary data structure. It is not
+ ** clear what to do if a partial write occurred. For now, raise
+ ** an exception and see if we actually found this problem in
+ ** the wild.
+ ** See http://bugs.python.org/issue6397.
+ */
+ PyErr_Format(PyExc_IOError, "failed to write all pollfds. "
+ "Please, report at http://bugs.python.org/. "
+ "Data to report: Size tried: %d, actual size written: %d.",
+ size, n);
+ return -1;
+ }
+ return 0;
+}
+
+static PyObject *
+internal_devpoll_register(devpollObject *self, PyObject *args, int remove)
+{
+ PyObject *o;
+ int fd;
+ unsigned short events = POLLIN | POLLPRI | POLLOUT;
+
+ if (!PyArg_ParseTuple(args, "O|O&:register", &o, ushort_converter, &events))
+ return NULL;
+
+ fd = PyObject_AsFileDescriptor(o);
+ if (fd == -1) return NULL;
+
+ if (remove) {
+ self->fds[self->n_fds].fd = fd;
+ self->fds[self->n_fds].events = POLLREMOVE;
+
+ if (++self->n_fds == self->max_n_fds) {
+ if (devpoll_flush(self))
+ return NULL;
+ }
+ }
+
+ self->fds[self->n_fds].fd = fd;
+ self->fds[self->n_fds].events = (signed short)events;
+
+ if (++self->n_fds == self->max_n_fds) {
+ if (devpoll_flush(self))
+ return NULL;
+ }
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(devpoll_register_doc,
+"register(fd [, eventmask] ) -> None\n\n\
+Register a file descriptor with the polling object.\n\
+fd -- either an integer, or an object with a fileno() method returning an\n\
+ int.\n\
+events -- an optional bitmask describing the type of events to check for");
+
+static PyObject *
+devpoll_register(devpollObject *self, PyObject *args)
+{
+ return internal_devpoll_register(self, args, 0);
+}
+
+PyDoc_STRVAR(devpoll_modify_doc,
+"modify(fd[, eventmask]) -> None\n\n\
+Modify a possible already registered file descriptor.\n\
+fd -- either an integer, or an object with a fileno() method returning an\n\
+ int.\n\
+events -- an optional bitmask describing the type of events to check for");
+
+static PyObject *
+devpoll_modify(devpollObject *self, PyObject *args)
+{
+ return internal_devpoll_register(self, args, 1);
+}
+
+
+PyDoc_STRVAR(devpoll_unregister_doc,
+"unregister(fd) -> None\n\n\
+Remove a file descriptor being tracked by the polling object.");
+
+static PyObject *
+devpoll_unregister(devpollObject *self, PyObject *o)
+{
+ int fd;
+
+ fd = PyObject_AsFileDescriptor( o );
+ if (fd == -1)
+ return NULL;
+
+ self->fds[self->n_fds].fd = fd;
+ self->fds[self->n_fds].events = POLLREMOVE;
+
+ if (++self->n_fds == self->max_n_fds) {
+ if (devpoll_flush(self))
+ return NULL;
+ }
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(devpoll_poll_doc,
+"poll( [timeout] ) -> list of (fd, event) 2-tuples\n\n\
+Polls the set of registered file descriptors, returning a list containing \n\
+any descriptors that have events or errors to report.");
+
+static PyObject *
+devpoll_poll(devpollObject *self, PyObject *args)
+{
+ struct dvpoll dvp;
+ PyObject *result_list = NULL, *tout = NULL;
+ int poll_result, i;
+ long timeout;
+ PyObject *value, *num1, *num2;
+
+ if (!PyArg_UnpackTuple(args, "poll", 0, 1, &tout)) {
+ return NULL;
+ }
+
+ /* Check values for timeout */
+ if (tout == NULL || tout == Py_None)
+ timeout = -1;
+ else if (!PyNumber_Check(tout)) {
+ PyErr_SetString(PyExc_TypeError,
+ "timeout must be an integer or None");
+ return NULL;
+ }
+ else {
+ tout = PyNumber_Long(tout);
+ if (!tout)
+ return NULL;
+ timeout = PyLong_AsLong(tout);
+ Py_DECREF(tout);
+ if (timeout == -1 && PyErr_Occurred())
+ return NULL;
+ }
+
+ if ((timeout < -1) || (timeout > INT_MAX)) {
+ PyErr_SetString(PyExc_OverflowError,
+ "timeout is out of range");
+ return NULL;
+ }
+
+ if (devpoll_flush(self))
+ return NULL;
+
+ dvp.dp_fds = self->fds;
+ dvp.dp_nfds = self->max_n_fds;
+ dvp.dp_timeout = timeout;
+
+ /* call devpoll() */
+ Py_BEGIN_ALLOW_THREADS
+ poll_result = ioctl(self->fd_devpoll, DP_POLL, &dvp);
+ Py_END_ALLOW_THREADS
+
+ if (poll_result < 0) {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return NULL;
+ }
+
+ /* build the result list */
+
+ result_list = PyList_New(poll_result);
+ if (!result_list)
+ return NULL;
+ else {
+ for (i = 0; i < poll_result; i++) {
+ num1 = PyLong_FromLong(self->fds[i].fd);
+ num2 = PyLong_FromLong(self->fds[i].revents);
+ if ((num1 == NULL) || (num2 == NULL)) {
+ Py_XDECREF(num1);
+ Py_XDECREF(num2);
+ goto error;
+ }
+ value = PyTuple_Pack(2, num1, num2);
+ Py_DECREF(num1);
+ Py_DECREF(num2);
+ if (value == NULL)
+ goto error;
+ if ((PyList_SetItem(result_list, i, value)) == -1) {
+ Py_DECREF(value);
+ goto error;
+ }
+ }
+ }
+
+ return result_list;
+
+ error:
+ Py_DECREF(result_list);
+ return NULL;
+}
+
+static PyMethodDef devpoll_methods[] = {
+ {"register", (PyCFunction)devpoll_register,
+ METH_VARARGS, devpoll_register_doc},
+ {"modify", (PyCFunction)devpoll_modify,
+ METH_VARARGS, devpoll_modify_doc},
+ {"unregister", (PyCFunction)devpoll_unregister,
+ METH_O, devpoll_unregister_doc},
+ {"poll", (PyCFunction)devpoll_poll,
+ METH_VARARGS, devpoll_poll_doc},
+ {NULL, NULL} /* sentinel */
+};
+
+static devpollObject *
+newDevPollObject(void)
+{
+ devpollObject *self;
+ int fd_devpoll, limit_result;
+ struct pollfd *fds;
+ struct rlimit limit;
+
+ Py_BEGIN_ALLOW_THREADS
+ /*
+ ** If we try to process more that getrlimit()
+ ** fds, the kernel will give an error, so
+ ** we set the limit here. It is a dynamic
+ ** value, because we can change rlimit() anytime.
+ */
+ limit_result = getrlimit(RLIMIT_NOFILE, &limit);
+ if (limit_result != -1)
+ fd_devpoll = open("/dev/poll", O_RDWR);
+ Py_END_ALLOW_THREADS
+
+ if (limit_result == -1) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+ if (fd_devpoll == -1) {
+ PyErr_SetFromErrnoWithFilename(PyExc_IOError, "/dev/poll");
+ return NULL;
+ }
+
+ fds = PyMem_NEW(struct pollfd, limit.rlim_cur);
+ if (fds == NULL) {
+ close(fd_devpoll);
+ PyErr_NoMemory();
+ return NULL;
+ }
+
+ self = PyObject_New(devpollObject, &devpoll_Type);
+ if (self == NULL) {
+ close(fd_devpoll);
+ PyMem_DEL(fds);
+ return NULL;
+ }
+ self->fd_devpoll = fd_devpoll;
+ self->max_n_fds = limit.rlim_cur;
+ self->n_fds = 0;
+ self->fds = fds;
+
+ return self;
+}
+
+static void
+devpoll_dealloc(devpollObject *self)
+{
+ Py_BEGIN_ALLOW_THREADS
+ close(self->fd_devpoll);
+ Py_END_ALLOW_THREADS
+
+ PyMem_DEL(self->fds);
+
+ PyObject_Del(self);
+}
+
+static PyTypeObject devpoll_Type = {
+ /* The ob_type field must be initialized in the module init function
+ * to be portable to Windows without using C++. */
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "select.devpoll", /*tp_name*/
+ sizeof(devpollObject), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ /* methods */
+ (destructor)devpoll_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_reserved*/
+ 0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ 0, /*tp_doc*/
+ 0, /*tp_traverse*/
+ 0, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ devpoll_methods, /*tp_methods*/
+};
+#endif /* HAVE_SYS_DEVPOLL_H */
+
+
+
PyDoc_STRVAR(poll_doc,
"Returns a polling object, which supports registering and\n\
unregistering file descriptors, and then polling them for I/O events.");
@@ -658,6 +1037,19 @@ select_poll(PyObject *self, PyObject *unused)
return (PyObject *)newPollObject();
}
+#ifdef HAVE_SYS_DEVPOLL_H
+PyDoc_STRVAR(devpoll_doc,
+"Returns a polling object, which supports registering and\n\
+unregistering file descriptors, and then polling them for I/O events.");
+
+static PyObject *
+select_devpoll(PyObject *self, PyObject *unused)
+{
+ return (PyObject *)newDevPollObject();
+}
+#endif
+
+
#ifdef __APPLE__
/*
* On some systems poll() sets errno on invalid file descriptors. We test
@@ -733,20 +1125,10 @@ pyepoll_internal_close(pyEpoll_Object *self)
}
static PyObject *
-newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
+newPyEpoll_Object(PyTypeObject *type, int sizehint, int flags, SOCKET fd)
{
pyEpoll_Object *self;
- if (sizehint == -1) {
- sizehint = FD_SETSIZE-1;
- }
- else if (sizehint < 1) {
- PyErr_Format(PyExc_ValueError,
- "sizehint must be greater zero, got %d",
- sizehint);
- return NULL;
- }
-
assert(type != NULL && type->tp_alloc != NULL);
self = (pyEpoll_Object *) type->tp_alloc(type, 0);
if (self == NULL)
@@ -754,6 +1136,11 @@ newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
if (fd == -1) {
Py_BEGIN_ALLOW_THREADS
+#ifdef HAVE_EPOLL_CREATE1
+ if (flags)
+ self->epfd = epoll_create1(flags);
+ else
+#endif
self->epfd = epoll_create(sizehint);
Py_END_ALLOW_THREADS
}
@@ -762,7 +1149,7 @@ newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
}
if (self->epfd < 0) {
Py_DECREF(self);
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
return (PyObject *)self;
@@ -772,14 +1159,18 @@ newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
static PyObject *
pyepoll_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
- int sizehint = -1;
- static char *kwlist[] = {"sizehint", NULL};
+ int flags = 0, sizehint = FD_SETSIZE - 1;
+ static char *kwlist[] = {"sizehint", "flags", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:epoll", kwlist,
- &sizehint))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|ii:epoll", kwlist,
+ &sizehint, &flags))
return NULL;
+ if (sizehint < 0) {
+ PyErr_SetString(PyExc_ValueError, "negative sizehint");
+ return NULL;
+ }
- return newPyEpoll_Object(type, sizehint, -1);
+ return newPyEpoll_Object(type, sizehint, flags, -1);
}
@@ -795,7 +1186,7 @@ pyepoll_close(pyEpoll_Object *self)
{
errno = pyepoll_internal_close(self);
if (errno < 0) {
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
Py_RETURN_NONE;
@@ -837,7 +1228,7 @@ pyepoll_fromfd(PyObject *cls, PyObject *args)
if (!PyArg_ParseTuple(args, "i:fromfd", &fd))
return NULL;
- return newPyEpoll_Object((PyTypeObject*)cls, -1, fd);
+ return newPyEpoll_Object((PyTypeObject*)cls, FD_SETSIZE - 1, 0, fd);
}
PyDoc_STRVAR(pyepoll_fromfd_doc,
@@ -888,7 +1279,7 @@ pyepoll_internal_ctl(int epfd, int op, PyObject *pfd, unsigned int events)
}
if (result < 0) {
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
Py_RETURN_NONE;
@@ -912,7 +1303,7 @@ pyepoll_register(pyEpoll_Object *self, PyObject *args, PyObject *kwds)
PyDoc_STRVAR(pyepoll_register_doc,
"register(fd[, eventmask]) -> None\n\
\n\
-Registers a new fd or raises an IOError if the fd is already registered.\n\
+Registers a new fd or raises an OSError if the fd is already registered.\n\
fd is the target file descriptor of the operation.\n\
events is a bit set composed of the various EPOLL constants; the default\n\
is EPOLL_IN | EPOLL_OUT | EPOLL_PRI.\n\
@@ -1011,7 +1402,7 @@ pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds)
nfds = epoll_wait(self->epfd, evs, maxevents, timeout);
Py_END_ALLOW_THREADS
if (nfds < 0) {
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
goto error;
}
@@ -1066,7 +1457,7 @@ static PyGetSetDef pyepoll_getsetlist[] = {
};
PyDoc_STRVAR(pyepoll_doc,
-"select.epoll([sizehint=-1])\n\
+"select.epoll(sizehint=-1, flags=0)\n\
\n\
Returns an epolling object\n\
\n\
@@ -1209,6 +1600,23 @@ static PyTypeObject kqueue_queue_Type;
# error uintptr_t does not match int, long, or long long!
#endif
+/*
+ * kevent is not standard and its members vary across BSDs.
+ */
+#if !defined(__OpenBSD__)
+# define IDENT_TYPE T_UINTPTRT
+# define IDENT_CAST Py_intptr_t
+# define DATA_TYPE T_INTPTRT
+# define DATA_FMT_UNIT INTPTRT_FMT_UNIT
+# define IDENT_AsType PyLong_AsUintptr_t
+#else
+# define IDENT_TYPE T_UINT
+# define IDENT_CAST int
+# define DATA_TYPE T_INT
+# define DATA_FMT_UNIT "i"
+# define IDENT_AsType PyLong_AsUnsignedLong
+#endif
+
/* Unfortunately, we can't store python objects in udata, because
* kevents in the kernel can be removed without warning, which would
* forever lose the refcount on the object stored with it.
@@ -1216,11 +1624,11 @@ static PyTypeObject kqueue_queue_Type;
#define KQ_OFF(x) offsetof(kqueue_event_Object, x)
static struct PyMemberDef kqueue_event_members[] = {
- {"ident", T_UINTPTRT, KQ_OFF(e.ident)},
+ {"ident", IDENT_TYPE, KQ_OFF(e.ident)},
{"filter", T_SHORT, KQ_OFF(e.filter)},
{"flags", T_USHORT, KQ_OFF(e.flags)},
{"fflags", T_UINT, KQ_OFF(e.fflags)},
- {"data", T_INTPTRT, KQ_OFF(e.data)},
+ {"data", DATA_TYPE, KQ_OFF(e.data)},
{"udata", T_UINTPTRT, KQ_OFF(e.udata)},
{NULL} /* Sentinel */
};
@@ -1246,7 +1654,7 @@ kqueue_event_init(kqueue_event_Object *self, PyObject *args, PyObject *kwds)
PyObject *pfd;
static char *kwlist[] = {"ident", "filter", "flags", "fflags",
"data", "udata", NULL};
- static char *fmt = "O|hhi" INTPTRT_FMT_UNIT UINTPTRT_FMT_UNIT ":kevent";
+ static char *fmt = "O|hHI" DATA_FMT_UNIT UINTPTRT_FMT_UNIT ":kevent";
EV_SET(&(self->e), 0, EVFILT_READ, EV_ADD, 0, 0, 0); /* defaults */
@@ -1256,8 +1664,12 @@ kqueue_event_init(kqueue_event_Object *self, PyObject *args, PyObject *kwds)
return -1;
}
- if (PyLong_Check(pfd)) {
- self->e.ident = PyLong_AsUintptr_t(pfd);
+ if (PyLong_Check(pfd)
+#if IDENT_TYPE == T_UINT
+ && PyLong_AsUnsignedLong(pfd) <= UINT_MAX
+#endif
+ ) {
+ self->e.ident = IDENT_AsType(pfd);
}
else {
self->e.ident = PyObject_AsFileDescriptor(pfd);
@@ -1285,10 +1697,10 @@ kqueue_event_richcompare(kqueue_event_Object *s, kqueue_event_Object *o,
Py_TYPE(s)->tp_name, Py_TYPE(o)->tp_name);
return NULL;
}
- if (((result = s->e.ident - o->e.ident) == 0) &&
+ if (((result = (IDENT_CAST)(s->e.ident - o->e.ident)) == 0) &&
((result = s->e.filter - o->e.filter) == 0) &&
((result = s->e.flags - o->e.flags) == 0) &&
- ((result = s->e.fflags - o->e.fflags) == 0) &&
+ ((result = (int)(s->e.fflags - o->e.fflags)) == 0) &&
((result = s->e.data - o->e.data) == 0) &&
((result = s->e.udata - o->e.udata) == 0)
) {
@@ -1402,7 +1814,7 @@ newKqueue_Object(PyTypeObject *type, SOCKET fd)
}
if (self->kqfd < 0) {
Py_DECREF(self);
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
return (PyObject *)self;
@@ -1434,7 +1846,7 @@ kqueue_queue_close(kqueue_queue_Object *self)
{
errno = kqueue_queue_internal_close(self);
if (errno < 0) {
- PyErr_SetFromErrno(PyExc_IOError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
Py_RETURN_NONE;
@@ -1497,7 +1909,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
PyObject *result = NULL;
struct kevent *evl = NULL;
struct kevent *chl = NULL;
- struct timespec timeoutspec;
+ struct timespec timeout;
struct timespec *ptimeoutspec;
if (self->kqfd < 0)
@@ -1517,28 +1929,16 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
ptimeoutspec = NULL;
}
else if (PyNumber_Check(otimeout)) {
- double timeout;
- long seconds;
-
- timeout = PyFloat_AsDouble(otimeout);
- if (timeout == -1 && PyErr_Occurred())
+ if (_PyTime_ObjectToTimespec(otimeout,
+ &timeout.tv_sec, &timeout.tv_nsec) == -1)
return NULL;
- if (timeout > (double)LONG_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "timeout period too long");
- return NULL;
- }
- if (timeout < 0) {
+
+ if (timeout.tv_sec < 0) {
PyErr_SetString(PyExc_ValueError,
"timeout must be positive or None");
return NULL;
}
-
- seconds = (long)timeout;
- timeout = timeout - (double)seconds;
- timeoutspec.tv_sec = seconds;
- timeoutspec.tv_nsec = (long)(timeout * 1E9);
- ptimeoutspec = &timeoutspec;
+ ptimeoutspec = &timeout;
}
else {
PyErr_Format(PyExc_TypeError,
@@ -1715,6 +2115,11 @@ static PyTypeObject kqueue_queue_Type = {
};
#endif /* HAVE_KQUEUE */
+
+
+
+
+
/* ************************************************************************ */
PyDoc_STRVAR(select_doc,
@@ -1746,6 +2151,9 @@ static PyMethodDef select_methods[] = {
#if defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)
{"poll", select_poll, METH_NOARGS, poll_doc},
#endif /* HAVE_POLL */
+#ifdef HAVE_SYS_DEVPOLL_H
+ {"devpoll", select_devpoll, METH_NOARGS, devpoll_doc},
+#endif
{0, 0}, /* sentinel */
};
@@ -1768,6 +2176,9 @@ static struct PyModuleDef selectmodule = {
NULL
};
+
+
+
PyMODINIT_FUNC
PyInit_select(void)
{
@@ -1776,9 +2187,8 @@ PyInit_select(void)
if (m == NULL)
return NULL;
- SelectError = PyErr_NewException("select.error", NULL, NULL);
- Py_INCREF(SelectError);
- PyModule_AddObject(m, "error", SelectError);
+ Py_INCREF(PyExc_OSError);
+ PyModule_AddObject(m, "error", PyExc_OSError);
#ifdef PIPE_BUF
#ifdef HAVE_BROKEN_PIPE_BUF
@@ -1825,6 +2235,11 @@ PyInit_select(void)
}
#endif /* HAVE_POLL */
+#ifdef HAVE_SYS_DEVPOLL_H
+ if (PyType_Ready(&devpoll_Type) < 0)
+ return NULL;
+#endif
+
#ifdef HAVE_EPOLL
Py_TYPE(&pyEpoll_Type) = &PyType_Type;
if (PyType_Ready(&pyEpoll_Type) < 0)
@@ -1849,6 +2264,10 @@ PyInit_select(void)
PyModule_AddIntConstant(m, "EPOLLWRNORM", EPOLLWRNORM);
PyModule_AddIntConstant(m, "EPOLLWRBAND", EPOLLWRBAND);
PyModule_AddIntConstant(m, "EPOLLMSG", EPOLLMSG);
+
+#ifdef EPOLL_CLOEXEC
+ PyModule_AddIntConstant(m, "EPOLL_CLOEXEC", EPOLL_CLOEXEC);
+#endif
#endif /* HAVE_EPOLL */
#ifdef HAVE_KQUEUE
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index b25bd44dd1..d0f318d3fd 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -184,7 +184,8 @@ static void sha1_compress(struct sha1_state *sha1, unsigned char *buf)
Initialize the hash state
@param sha1 The hash state you wish to initialize
*/
-void sha1_init(struct sha1_state *sha1)
+static void
+sha1_init(struct sha1_state *sha1)
{
assert(sha1 != NULL);
sha1->state[0] = 0x67452301UL;
@@ -202,7 +203,8 @@ void sha1_init(struct sha1_state *sha1)
@param in The data to hash
@param inlen The length of the data (octets)
*/
-void sha1_process(struct sha1_state *sha1,
+static void
+sha1_process(struct sha1_state *sha1,
const unsigned char *in, Py_ssize_t inlen)
{
Py_ssize_t n;
@@ -218,7 +220,7 @@ void sha1_process(struct sha1_state *sha1,
in += SHA1_BLOCKSIZE;
inlen -= SHA1_BLOCKSIZE;
} else {
- n = MIN(inlen, (SHA1_BLOCKSIZE - sha1->curlen));
+ n = MIN(inlen, (Py_ssize_t)(SHA1_BLOCKSIZE - sha1->curlen));
memcpy(sha1->buf + sha1->curlen, in, (size_t)n);
sha1->curlen += n;
in += n;
@@ -237,7 +239,8 @@ void sha1_process(struct sha1_state *sha1,
@param sha1 The hash state
@param out [out] The destination of the hash (20 bytes)
*/
-void sha1_done(struct sha1_state *sha1, unsigned char *out)
+static void
+sha1_done(struct sha1_state *sha1, unsigned char *out)
{
int i;
@@ -317,13 +320,8 @@ SHA1_copy(SHA1object *self, PyObject *unused)
{
SHA1object *newobj;
- if (Py_TYPE(self) == &SHA1type) {
- if ( (newobj = newSHA1object())==NULL)
- return NULL;
- } else {
- if ( (newobj = newSHA1object())==NULL)
- return NULL;
- }
+ if ((newobj = newSHA1object()) == NULL)
+ return NULL;
newobj->hash_state = self->hash_state;
return (PyObject *)newobj;
@@ -352,7 +350,7 @@ SHA1_hexdigest(SHA1object *self, PyObject *unused)
unsigned char digest[SHA1_DIGESTSIZE];
struct sha1_state temp;
PyObject *retval;
- Py_UNICODE *hex_digest;
+ Py_UCS1 *hex_digest;
int i, j;
/* Get the raw (binary) digest value */
@@ -360,25 +358,22 @@ SHA1_hexdigest(SHA1object *self, PyObject *unused)
sha1_done(&temp, digest);
/* Create a new string */
- retval = PyUnicode_FromStringAndSize(NULL, SHA1_DIGESTSIZE * 2);
+ retval = PyUnicode_New(SHA1_DIGESTSIZE * 2, 127);
if (!retval)
return NULL;
- hex_digest = PyUnicode_AS_UNICODE(retval);
- if (!hex_digest) {
- Py_DECREF(retval);
- return NULL;
- }
+ hex_digest = PyUnicode_1BYTE_DATA(retval);
/* Make hex version of the digest */
for(i=j=0; i<SHA1_DIGESTSIZE; i++) {
- char c;
+ unsigned char c;
c = (digest[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
c = (digest[i] & 0xf);
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
}
+#ifdef Py_DEBUG
+ assert(_PyUnicode_CheckConsistency(retval, 1));
+#endif
return retval;
}
@@ -420,7 +415,7 @@ SHA1_get_block_size(PyObject *self, void *closure)
static PyObject *
SHA1_get_name(PyObject *self, void *closure)
{
- return PyUnicode_FromStringAndSize("SHA1", 3);
+ return PyUnicode_FromStringAndSize("SHA1", 4);
}
static PyObject *
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index 8617210917..9f6b41639c 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -445,7 +445,7 @@ SHA256_hexdigest(SHAobject *self, PyObject *unused)
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
PyObject *retval;
- Py_UNICODE *hex_digest;
+ Py_UCS1 *hex_digest;
int i, j;
/* Get the raw (binary) digest value */
@@ -453,25 +453,22 @@ SHA256_hexdigest(SHAobject *self, PyObject *unused)
sha_final(digest, &temp);
/* Create a new string */
- retval = PyUnicode_FromStringAndSize(NULL, self->digestsize * 2);
+ retval = PyUnicode_New(self->digestsize * 2, 127);
if (!retval)
return NULL;
- hex_digest = PyUnicode_AS_UNICODE(retval);
- if (!hex_digest) {
- Py_DECREF(retval);
- return NULL;
- }
+ hex_digest = PyUnicode_1BYTE_DATA(retval);
/* Make hex version of the digest */
for(i=j=0; i<self->digestsize; i++) {
- char c;
+ unsigned char c;
c = (digest[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
c = (digest[i] & 0xf);
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
}
+#ifdef Py_DEBUG
+ assert(_PyUnicode_CheckConsistency(retval, 1));
+#endif
return retval;
}
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index 0faaf5c5cb..5536fd5c1c 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -511,7 +511,7 @@ SHA512_hexdigest(SHAobject *self, PyObject *unused)
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
PyObject *retval;
- Py_UNICODE *hex_digest;
+ Py_UCS1 *hex_digest;
int i, j;
/* Get the raw (binary) digest value */
@@ -519,25 +519,22 @@ SHA512_hexdigest(SHAobject *self, PyObject *unused)
sha512_final(digest, &temp);
/* Create a new string */
- retval = PyUnicode_FromStringAndSize(NULL, self->digestsize * 2);
+ retval = PyUnicode_New(self->digestsize * 2, 127);
if (!retval)
return NULL;
- hex_digest = PyUnicode_AS_UNICODE(retval);
- if (!hex_digest) {
- Py_DECREF(retval);
- return NULL;
- }
+ hex_digest = PyUnicode_1BYTE_DATA(retval);
/* Make hex version of the digest */
for (i=j=0; i<self->digestsize; i++) {
- char c;
+ unsigned char c;
c = (digest[i] >> 4) & 0xf;
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
c = (digest[i] & 0xf);
- c = (c>9) ? c+'a'-10 : c + '0';
- hex_digest[j++] = c;
+ hex_digest[j++] = Py_hexdigits[c];
}
+#ifdef Py_DEBUG
+ assert(_PyUnicode_CheckConsistency(retval, 1));
+#endif
return retval;
}
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 9cae454194..704c9f591b 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -4,6 +4,9 @@
/* XXX Signals should be recorded per thread, now we have thread state. */
#include "Python.h"
+#ifndef MS_WINDOWS
+#include "posixmodule.h"
+#endif
#ifdef MS_WINDOWS
#include <Windows.h>
@@ -22,6 +25,14 @@
#include <sys/time.h>
#endif
+#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
+# define PYPTHREAD_SIGMASK
+#endif
+
+#if defined(PYPTHREAD_SIGMASK) && defined(HAVE_PTHREAD_H)
+# include <pthread.h>
+#endif
+
#ifndef SIG_ERR
#define SIG_ERR ((PyOS_sighandler_t)(-1))
#endif
@@ -101,6 +112,10 @@ static PyObject *IntHandler;
static PyOS_sighandler_t old_siginthandler = SIG_DFL;
+#ifdef MS_WINDOWS
+static HANDLE sigint_event = NULL;
+#endif
+
#ifdef HAVE_GETITIMER
static PyObject *ItimerError;
@@ -168,15 +183,19 @@ checksignals_witharg(void * unused)
static void
trip_signal(int sig_num)
{
+ unsigned char byte;
+
Handlers[sig_num].tripped = 1;
+ if (wakeup_fd != -1) {
+ byte = (unsigned char)sig_num;
+ write(wakeup_fd, &byte, 1);
+ }
if (is_tripped)
return;
/* Set is_tripped after setting .tripped, as it gets
cleared in PyErr_CheckSignals() before .tripped. */
is_tripped = 1;
Py_AddPendingCall(checksignals_witharg, NULL);
- if (wakeup_fd != -1)
- write(wakeup_fd, "\0", 1);
}
static void
@@ -217,6 +236,11 @@ signal_handler(int sig_num)
/* Issue #10311: asynchronously executing signal handlers should not
mutate errno under the feet of unsuspecting C code. */
errno = save_errno;
+
+#ifdef MS_WINDOWS
+ if (sig_num == SIGINT)
+ SetEvent(sigint_event);
+#endif
}
@@ -313,14 +337,17 @@ signal_signal(PyObject *self, PyObject *args)
else
func = signal_handler;
if (PyOS_setsig(sig_num, func) == SIG_ERR) {
- PyErr_SetFromErrno(PyExc_RuntimeError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
old_handler = Handlers[sig_num].func;
Handlers[sig_num].tripped = 0;
Py_INCREF(obj);
Handlers[sig_num].func = obj;
- return old_handler;
+ if (old_handler != NULL)
+ return old_handler;
+ else
+ Py_RETURN_NONE;
}
PyDoc_STRVAR(signal_doc,
@@ -348,8 +375,13 @@ signal_getsignal(PyObject *self, PyObject *args)
return NULL;
}
old_handler = Handlers[sig_num].func;
- Py_INCREF(old_handler);
- return old_handler;
+ if (old_handler != NULL) {
+ Py_INCREF(old_handler);
+ return old_handler;
+ }
+ else {
+ Py_RETURN_NONE;
+ }
}
PyDoc_STRVAR(getsignal_doc,
@@ -382,7 +414,7 @@ signal_siginterrupt(PyObject *self, PyObject *args)
return NULL;
}
if (siginterrupt(sig_num, flag)<0) {
- PyErr_SetFromErrno(PyExc_RuntimeError);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -406,7 +438,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args)
return NULL;
}
#endif
- if (fd != -1 && fstat(fd, &buf) != 0) {
+ if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) {
PyErr_SetString(PyExc_ValueError, "invalid fd");
return NULL;
}
@@ -495,6 +527,345 @@ PyDoc_STRVAR(getitimer_doc,
Returns current value of given itimer.");
#endif
+#if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGWAIT) || \
+ defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT)
+/* Convert an iterable to a sigset.
+ Return 0 on success, return -1 and raise an exception on error. */
+
+static int
+iterable_to_sigset(PyObject *iterable, sigset_t *mask)
+{
+ int result = -1;
+ PyObject *iterator, *item;
+ long signum;
+ int err;
+
+ sigemptyset(mask);
+
+ iterator = PyObject_GetIter(iterable);
+ if (iterator == NULL)
+ goto error;
+
+ while (1)
+ {
+ item = PyIter_Next(iterator);
+ if (item == NULL) {
+ if (PyErr_Occurred())
+ goto error;
+ else
+ break;
+ }
+
+ signum = PyLong_AsLong(item);
+ Py_DECREF(item);
+ if (signum == -1 && PyErr_Occurred())
+ goto error;
+ if (0 < signum && signum < NSIG)
+ err = sigaddset(mask, (int)signum);
+ else
+ err = 1;
+ if (err) {
+ PyErr_Format(PyExc_ValueError,
+ "signal number %ld out of range", signum);
+ goto error;
+ }
+ }
+ result = 0;
+
+error:
+ Py_XDECREF(iterator);
+ return result;
+}
+#endif
+
+#if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGPENDING)
+static PyObject*
+sigset_to_set(sigset_t mask)
+{
+ PyObject *signum, *result;
+ int sig;
+
+ result = PySet_New(0);
+ if (result == NULL)
+ return NULL;
+
+ for (sig = 1; sig < NSIG; sig++) {
+ if (sigismember(&mask, sig) != 1)
+ continue;
+
+ /* Handle the case where it is a member by adding the signal to
+ the result list. Ignore the other cases because they mean the
+ signal isn't a member of the mask or the signal was invalid,
+ and an invalid signal must have been our fault in constructing
+ the loop boundaries. */
+ signum = PyLong_FromLong(sig);
+ if (signum == NULL) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ if (PySet_Add(result, signum) == -1) {
+ Py_DECREF(signum);
+ Py_DECREF(result);
+ return NULL;
+ }
+ Py_DECREF(signum);
+ }
+ return result;
+}
+#endif
+
+#ifdef PYPTHREAD_SIGMASK
+static PyObject *
+signal_pthread_sigmask(PyObject *self, PyObject *args)
+{
+ int how;
+ PyObject *signals;
+ sigset_t mask, previous;
+ int err;
+
+ if (!PyArg_ParseTuple(args, "iO:pthread_sigmask", &how, &signals))
+ return NULL;
+
+ if (iterable_to_sigset(signals, &mask))
+ return NULL;
+
+ err = pthread_sigmask(how, &mask, &previous);
+ if (err != 0) {
+ errno = err;
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ /* if signals was unblocked, signal handlers have been called */
+ if (PyErr_CheckSignals())
+ return NULL;
+
+ return sigset_to_set(previous);
+}
+
+PyDoc_STRVAR(signal_pthread_sigmask_doc,
+"pthread_sigmask(how, mask) -> old mask\n\
+\n\
+Fetch and/or change the signal mask of the calling thread.");
+#endif /* #ifdef PYPTHREAD_SIGMASK */
+
+
+#ifdef HAVE_SIGPENDING
+static PyObject *
+signal_sigpending(PyObject *self)
+{
+ int err;
+ sigset_t mask;
+ err = sigpending(&mask);
+ if (err)
+ return PyErr_SetFromErrno(PyExc_OSError);
+ return sigset_to_set(mask);
+}
+
+PyDoc_STRVAR(signal_sigpending_doc,
+"sigpending() -> list\n\
+\n\
+Examine pending signals.");
+#endif /* #ifdef HAVE_SIGPENDING */
+
+
+#ifdef HAVE_SIGWAIT
+static PyObject *
+signal_sigwait(PyObject *self, PyObject *args)
+{
+ PyObject *signals;
+ sigset_t set;
+ int err, signum;
+
+ if (!PyArg_ParseTuple(args, "O:sigwait", &signals))
+ return NULL;
+
+ if (iterable_to_sigset(signals, &set))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ err = sigwait(&set, &signum);
+ Py_END_ALLOW_THREADS
+ if (err) {
+ errno = err;
+ return PyErr_SetFromErrno(PyExc_OSError);
+ }
+
+ return PyLong_FromLong(signum);
+}
+
+PyDoc_STRVAR(signal_sigwait_doc,
+"sigwait(sigset) -> signum\n\
+\n\
+Wait a signal.");
+#endif /* #ifdef HAVE_SIGPENDING */
+
+#if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT)
+static int initialized;
+static PyStructSequence_Field struct_siginfo_fields[] = {
+ {"si_signo", "signal number"},
+ {"si_code", "signal code"},
+ {"si_errno", "errno associated with this signal"},
+ {"si_pid", "sending process ID"},
+ {"si_uid", "real user ID of sending process"},
+ {"si_status", "exit value or signal"},
+ {"si_band", "band event for SIGPOLL"},
+ {0}
+};
+
+PyDoc_STRVAR(struct_siginfo__doc__,
+"struct_siginfo: Result from sigwaitinfo or sigtimedwait.\n\n\
+This object may be accessed either as a tuple of\n\
+(si_signo, si_code, si_errno, si_pid, si_uid, si_status, si_band),\n\
+or via the attributes si_signo, si_code, and so on.");
+
+static PyStructSequence_Desc struct_siginfo_desc = {
+ "signal.struct_siginfo", /* name */
+ struct_siginfo__doc__, /* doc */
+ struct_siginfo_fields, /* fields */
+ 7 /* n_in_sequence */
+};
+
+static PyTypeObject SiginfoType;
+
+static PyObject *
+fill_siginfo(siginfo_t *si)
+{
+ PyObject *result = PyStructSequence_New(&SiginfoType);
+ if (!result)
+ return NULL;
+
+ PyStructSequence_SET_ITEM(result, 0, PyLong_FromLong((long)(si->si_signo)));
+ PyStructSequence_SET_ITEM(result, 1, PyLong_FromLong((long)(si->si_code)));
+ PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong((long)(si->si_errno)));
+ PyStructSequence_SET_ITEM(result, 3, PyLong_FromPid(si->si_pid));
+ PyStructSequence_SET_ITEM(result, 4, _PyLong_FromUid(si->si_uid));
+ PyStructSequence_SET_ITEM(result, 5,
+ PyLong_FromLong((long)(si->si_status)));
+ PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
+ if (PyErr_Occurred()) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+#endif
+
+#ifdef HAVE_SIGWAITINFO
+static PyObject *
+signal_sigwaitinfo(PyObject *self, PyObject *args)
+{
+ PyObject *signals;
+ sigset_t set;
+ siginfo_t si;
+ int err;
+
+ if (!PyArg_ParseTuple(args, "O:sigwaitinfo", &signals))
+ return NULL;
+
+ if (iterable_to_sigset(signals, &set))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ err = sigwaitinfo(&set, &si);
+ Py_END_ALLOW_THREADS
+ if (err == -1)
+ return PyErr_SetFromErrno(PyExc_OSError);
+
+ return fill_siginfo(&si);
+}
+
+PyDoc_STRVAR(signal_sigwaitinfo_doc,
+"sigwaitinfo(sigset) -> struct_siginfo\n\
+\n\
+Wait synchronously for a signal until one of the signals in *sigset* is\n\
+delivered.\n\
+Returns a struct_siginfo containing information about the signal.");
+#endif /* #ifdef HAVE_SIGWAITINFO */
+
+#ifdef HAVE_SIGTIMEDWAIT
+static PyObject *
+signal_sigtimedwait(PyObject *self, PyObject *args)
+{
+ PyObject *signals, *timeout;
+ struct timespec buf;
+ sigset_t set;
+ siginfo_t si;
+ time_t tv_sec;
+ long tv_nsec;
+ int err;
+
+ if (!PyArg_ParseTuple(args, "OO:sigtimedwait",
+ &signals, &timeout))
+ return NULL;
+
+ if (_PyTime_ObjectToTimespec(timeout, &tv_sec, &tv_nsec) == -1)
+ return NULL;
+ buf.tv_sec = tv_sec;
+ buf.tv_nsec = tv_nsec;
+
+ if (buf.tv_sec < 0 || buf.tv_nsec < 0) {
+ PyErr_SetString(PyExc_ValueError, "timeout must be non-negative");
+ return NULL;
+ }
+
+ if (iterable_to_sigset(signals, &set))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ err = sigtimedwait(&set, &si, &buf);
+ Py_END_ALLOW_THREADS
+ if (err == -1) {
+ if (errno == EAGAIN)
+ Py_RETURN_NONE;
+ else
+ return PyErr_SetFromErrno(PyExc_OSError);
+ }
+
+ return fill_siginfo(&si);
+}
+
+PyDoc_STRVAR(signal_sigtimedwait_doc,
+"sigtimedwait(sigset, (timeout_sec, timeout_nsec)) -> struct_siginfo\n\
+\n\
+Like sigwaitinfo(), but with a timeout specified as a tuple of (seconds,\n\
+nanoseconds).");
+#endif /* #ifdef HAVE_SIGTIMEDWAIT */
+
+
+#if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)
+static PyObject *
+signal_pthread_kill(PyObject *self, PyObject *args)
+{
+ long tid;
+ int signum;
+ int err;
+
+ if (!PyArg_ParseTuple(args, "li:pthread_kill", &tid, &signum))
+ return NULL;
+
+ err = pthread_kill((pthread_t)tid, signum);
+ if (err != 0) {
+ errno = err;
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ /* the signal may have been send to the current thread */
+ if (PyErr_CheckSignals())
+ return NULL;
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(signal_pthread_kill_doc,
+"pthread_kill(thread_id, signum)\n\
+\n\
+Send a signal to a thread.");
+#endif /* #if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD) */
+
+
/* List of functions defined in the module */
static PyMethodDef signal_methods[] = {
@@ -515,10 +886,34 @@ static PyMethodDef signal_methods[] = {
#endif
#ifdef HAVE_PAUSE
{"pause", (PyCFunction)signal_pause,
- METH_NOARGS,pause_doc},
+ METH_NOARGS, pause_doc},
#endif
{"default_int_handler", signal_default_int_handler,
METH_VARARGS, default_int_handler_doc},
+#if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)
+ {"pthread_kill", (PyCFunction)signal_pthread_kill,
+ METH_VARARGS, signal_pthread_kill_doc},
+#endif
+#ifdef PYPTHREAD_SIGMASK
+ {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask,
+ METH_VARARGS, signal_pthread_sigmask_doc},
+#endif
+#ifdef HAVE_SIGPENDING
+ {"sigpending", (PyCFunction)signal_sigpending,
+ METH_NOARGS, signal_sigpending_doc},
+#endif
+#ifdef HAVE_SIGWAIT
+ {"sigwait", (PyCFunction)signal_sigwait,
+ METH_VARARGS, signal_sigwait_doc},
+#endif
+#ifdef HAVE_SIGWAITINFO
+ {"sigwaitinfo", (PyCFunction)signal_sigwaitinfo,
+ METH_VARARGS, signal_sigwaitinfo_doc},
+#endif
+#ifdef HAVE_SIGTIMEDWAIT
+ {"sigtimedwait", (PyCFunction)signal_sigtimedwait,
+ METH_VARARGS, signal_sigtimedwait_doc},
+#endif
{NULL, NULL} /* sentinel */
};
@@ -587,6 +982,15 @@ PyInit_signal(void)
if (m == NULL)
return NULL;
+#if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT)
+ if (!initialized)
+ PyStructSequence_InitType(&SiginfoType, &struct_siginfo_desc);
+
+ Py_INCREF((PyObject*) &SiginfoType);
+ PyModule_AddObject(m, "struct_siginfo", (PyObject*) &SiginfoType);
+ initialized = 1;
+#endif
+
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
@@ -603,6 +1007,19 @@ PyInit_signal(void)
goto finally;
Py_DECREF(x);
+#ifdef SIG_BLOCK
+ if (PyModule_AddIntMacro(m, SIG_BLOCK))
+ goto finally;
+#endif
+#ifdef SIG_UNBLOCK
+ if (PyModule_AddIntMacro(m, SIG_UNBLOCK))
+ goto finally;
+#endif
+#ifdef SIG_SETMASK
+ if (PyModule_AddIntMacro(m, SIG_SETMASK))
+ goto finally;
+#endif
+
x = IntHandler = PyDict_GetItemString(d, "default_int_handler");
if (!x)
goto finally;
@@ -855,6 +1272,11 @@ PyInit_signal(void)
Py_DECREF(x);
#endif
+#ifdef MS_WINDOWS
+ /* Create manual-reset event, initially unset */
+ sigint_event = CreateEvent(NULL, TRUE, FALSE, FALSE);
+#endif
+
if (PyErr_Occurred()) {
Py_DECREF(m);
m = NULL;
@@ -883,12 +1305,9 @@ finisignal(void)
Py_XDECREF(func);
}
- Py_XDECREF(IntHandler);
- IntHandler = NULL;
- Py_XDECREF(DefaultHandler);
- DefaultHandler = NULL;
- Py_XDECREF(IgnoreHandler);
- IgnoreHandler = NULL;
+ Py_CLEAR(IntHandler);
+ Py_CLEAR(DefaultHandler);
+ Py_CLEAR(IgnoreHandler);
}
@@ -960,9 +1379,8 @@ PyErr_SetInterrupt(void)
void
PyOS_InitInterrupts(void)
{
- PyObject *m = PyInit_signal();
+ PyObject *m = PyImport_ImportModule("signal");
if (m) {
- _PyImport_FixupBuiltin(m, "signal");
Py_DECREF(m);
}
}
@@ -1017,3 +1435,25 @@ PyOS_AfterFork(void)
_PyImport_ReInitLock();
#endif
}
+
+int
+_PyOS_IsMainThread(void)
+{
+#ifdef WITH_THREAD
+ return PyThread_get_thread_ident() == main_thread;
+#else
+ return 1;
+#endif
+}
+
+#ifdef MS_WINDOWS
+void *_PyOS_SigintEvent(void)
+{
+ /* Returns a manual-reset event which gets tripped whenever
+ SIGINT is received.
+
+ Python.h does not include windows.h so we do cannot use HANDLE
+ as the return type of this function. We use void* instead. */
+ return sigint_event;
+}
+#endif
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 903e10c98c..32b4eba2f2 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -42,6 +42,9 @@ Module interface:
- socket.inet_ntoa(packed IP) -> IP address string
- socket.getdefaulttimeout() -> None | float
- socket.setdefaulttimeout(None | float)
+- socket.if_nameindex() -> list of tuples (if_index, if_name)
+- socket.if_nametoindex(name) -> corresponding interface index
+- socket.if_indextoname(index) -> corresponding interface name
- an Internet socket address is a pair (hostname, port)
where hostname can be anything recognized by gethostbyname()
(including the dd.dd.dd.dd notation) and port is in host byte order
@@ -133,6 +136,9 @@ setblocking(0 | 1) -- set or clear the blocking I/O flag\n\
setsockopt(level, optname, value) -- set socket options\n\
settimeout(None | float) -- set or clear the timeout\n\
shutdown(how) -- shut down traffic in one or both directions\n\
+if_nameindex() -- return all network interface indices and names\n\
+if_nametoindex(name) -- return the corresponding interface index\n\
+if_indextoname(index) -- return the corresponding interface name\n\
\n\
[*] not available on all platforms!");
@@ -150,12 +156,16 @@ shutdown(how) -- shut down traffic in one or both directions\n\
# undef HAVE_GETHOSTBYNAME_R_6_ARG
#endif
+#if defined(__OpenBSD__)
+# include <sys/uio.h>
+#endif
+
#ifndef WITH_THREAD
# undef HAVE_GETHOSTBYNAME_R
#endif
#ifdef HAVE_GETHOSTBYNAME_R
-# if defined(_AIX) || defined(__osf__)
+# if defined(_AIX)
# define HAVE_GETHOSTBYNAME_R_3_ARG
# elif defined(__sun) || defined(__sgi)
# define HAVE_GETHOSTBYNAME_R_5_ARG
@@ -208,6 +218,11 @@ shutdown(how) -- shut down traffic in one or both directions\n\
# include <ioctl.h>
#endif
+#ifdef __APPLE__
+# include <sys/ioctl.h>
+#endif
+
+
#if defined(PYOS_OS2)
# define INCL_DOS
# define INCL_DOSERRORS
@@ -250,6 +265,14 @@ shutdown(how) -- shut down traffic in one or both directions\n\
#include <sys/types.h>
#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+
/* Generic socket object definitions and includes */
#define PySocket_BUILDING_SOCKET
#include "socketmodule.h"
@@ -260,6 +283,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\
/* Non-MS WINDOWS includes */
# include <netdb.h>
+# include <unistd.h>
/* Headers needed for inet_ntoa() and inet_addr() */
# if defined(PYOS_OS2) && defined(PYCC_VACPP)
@@ -357,7 +381,7 @@ dup_socket(SOCKET handle)
return INVALID_SOCKET;
return WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
- FROM_PROTOCOL_INFO, &info, 0, 0);
+ FROM_PROTOCOL_INFO, &info, 0, WSA_FLAG_OVERLAPPED);
}
#define SOCKETCLOSE closesocket
#else
@@ -366,6 +390,7 @@ dup_socket(SOCKET handle)
#endif
#ifdef MS_WIN32
+#undef EAFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define snprintf _snprintf
#endif
@@ -417,7 +442,8 @@ dup_socket(SOCKET handle)
#define SEGMENT_SIZE (32 * 1024 -1)
#endif
-#define SAS2SA(x) ((struct sockaddr *)(x))
+/* Convert "sock_addr_t *" to "struct sockaddr *". */
+#define SAS2SA(x) (&((x)->sa))
/*
* Constants for getnameinfo()
@@ -438,7 +464,6 @@ dup_socket(SOCKET handle)
/* Global variable holding the exception type for errors detected
by this module (but not argument type or memory errors, etc.). */
-static PyObject *socket_error;
static PyObject *socket_herror;
static PyObject *socket_gaierror;
static PyObject *socket_timeout;
@@ -455,6 +480,17 @@ static PyTypeObject sock_type;
#include <sys/poll.h>
#endif
+/* Largest value to try to store in a socklen_t (used when handling
+ ancillary data). POSIX requires socklen_t to hold at least
+ (2**31)-1 and recommends against storing larger values, but
+ socklen_t was originally int in the BSD interface, so to be on the
+ safe side we use the smaller of (2**31)-1 and INT_MAX. */
+#if INT_MAX > 0x7fffffff
+#define SOCKLEN_T_LIMIT 0x7fffffff
+#else
+#define SOCKLEN_T_LIMIT INT_MAX
+#endif
+
#ifdef HAVE_POLL
/* Instead of select(), we'll use poll() since poll() works on any fd. */
#define IS_SELECTABLE(s) 1
@@ -468,7 +504,7 @@ static PyTypeObject sock_type;
static PyObject*
select_error(void)
{
- PyErr_SetString(socket_error, "unable to select on socket");
+ PyErr_SetString(PyExc_OSError, "unable to select on socket");
return NULL;
}
@@ -495,7 +531,7 @@ set_error(void)
recognizes the error codes used by both GetLastError() and
WSAGetLastError */
if (err_no)
- return PyErr_SetExcFromWindowsErr(socket_error, err_no);
+ return PyErr_SetExcFromWindowsErr(PyExc_OSError, err_no);
#endif
#if defined(PYOS_OS2) && !defined(PYCC_GCC)
@@ -526,7 +562,7 @@ set_error(void)
}
v = Py_BuildValue("(is)", myerrorcode, outbuf);
if (v != NULL) {
- PyErr_SetObject(socket_error, v);
+ PyErr_SetObject(PyExc_OSError, v);
Py_DECREF(v);
}
return NULL;
@@ -534,7 +570,7 @@ set_error(void)
}
#endif
- return PyErr_SetFromErrno(socket_error);
+ return PyErr_SetFromErrno(PyExc_OSError);
}
@@ -853,13 +889,13 @@ setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
#endif
default:
freeaddrinfo(res);
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"unsupported address family");
return -1;
}
if (res->ai_next) {
freeaddrinfo(res);
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"wildcard resolved to multiple address");
return -1;
}
@@ -872,7 +908,7 @@ setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) {
struct sockaddr_in *sin;
if (af != AF_INET && af != AF_UNSPEC) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"address family mismatched");
return -1;
}
@@ -930,7 +966,7 @@ setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
return 16;
#endif
default:
- PyErr_SetString(socket_error, "unknown address family");
+ PyErr_SetString(PyExc_OSError, "unknown address family");
return -1;
}
}
@@ -979,7 +1015,7 @@ setbdaddr(char *name, bdaddr_t *bdaddr)
bdaddr->b[5] = b5;
return 6;
} else {
- PyErr_SetString(socket_error, "bad bluetooth address");
+ PyErr_SetString(PyExc_OSError, "bad bluetooth address");
return -1;
}
}
@@ -1044,7 +1080,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
#endif /* linux */
{
/* regular NULL-terminated string */
- return PyUnicode_FromString(a->sun_path);
+ return PyUnicode_DecodeFSDefault(a->sun_path);
}
}
#endif /* AF_UNIX */
@@ -1190,6 +1226,42 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
}
#endif
+#ifdef HAVE_LINUX_CAN_H
+ case AF_CAN:
+ {
+ struct sockaddr_can *a = (struct sockaddr_can *)addr;
+ char *ifname = "";
+ struct ifreq ifr;
+ /* need to look up interface name given index */
+ if (a->can_ifindex) {
+ ifr.ifr_ifindex = a->can_ifindex;
+ if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0)
+ ifname = ifr.ifr_name;
+ }
+
+ return Py_BuildValue("O&h", PyUnicode_DecodeFSDefault,
+ ifname,
+ a->can_family);
+ }
+#endif
+
+#ifdef PF_SYSTEM
+ case PF_SYSTEM:
+ switch(proto) {
+#ifdef SYSPROTO_CONTROL
+ case SYSPROTO_CONTROL:
+ {
+ struct sockaddr_ctl *a = (struct sockaddr_ctl *)addr;
+ return Py_BuildValue("(II)", a->sc_id, a->sc_unit);
+ }
+#endif
+ default:
+ PyErr_SetString(PyExc_ValueError,
+ "Invalid address type");
+ return 0;
+ }
+#endif
+
/* More cases here... */
default:
@@ -1221,17 +1293,27 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
struct sockaddr_un* addr;
char *path;
int len;
- if (!PyArg_Parse(args, "s#", &path, &len))
- return 0;
+ int retval = 0;
+
+ /* PEP 383. Not using PyUnicode_FSConverter since we need to
+ allow embedded nulls on Linux. */
+ if (PyUnicode_Check(args)) {
+ if ((args = PyUnicode_EncodeFSDefault(args)) == NULL)
+ return 0;
+ }
+ else
+ Py_INCREF(args);
+ if (!PyArg_Parse(args, "y#", &path, &len))
+ goto unix_out;
addr = (struct sockaddr_un*)addr_ret;
#ifdef linux
if (len > 0 && path[0] == 0) {
/* Linux abstract namespace extension */
if (len > sizeof addr->sun_path) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"AF_UNIX path too long");
- return 0;
+ goto unix_out;
}
}
else
@@ -1239,9 +1321,9 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
{
/* regular NULL-terminated string */
if (len >= sizeof addr->sun_path) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"AF_UNIX path too long");
- return 0;
+ goto unix_out;
}
addr->sun_path[len] = 0;
}
@@ -1252,7 +1334,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
#else
*len_ret = len + offsetof(struct sockaddr_un, sun_path);
#endif
- return 1;
+ retval = 1;
+ unix_out:
+ Py_DECREF(args);
+ return retval;
}
#endif /* AF_UNIX */
@@ -1280,6 +1365,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
}
#endif
+#ifdef AF_RDS
+ case AF_RDS:
+ /* RDS sockets use sockaddr_in: fall-through */
+#endif
+
case AF_INET:
{
struct sockaddr_in* addr;
@@ -1376,7 +1466,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
_BT_L2_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyArg_ParseTuple(args, "si", &straddr,
&_BT_L2_MEMB(addr, psm))) {
- PyErr_SetString(socket_error, "getsockaddrarg: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
@@ -1395,7 +1485,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
_BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyArg_ParseTuple(args, "si", &straddr,
&_BT_RC_MEMB(addr, channel))) {
- PyErr_SetString(socket_error, "getsockaddrarg: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
@@ -1413,7 +1503,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (straddr == NULL) {
- PyErr_SetString(socket_error, "getsockaddrarg: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
@@ -1422,7 +1512,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
#else
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) {
- PyErr_SetString(socket_error, "getsockaddrarg: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
@@ -1439,7 +1529,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
addr = (struct sockaddr_sco *)addr_ret;
_BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyBytes_Check(args)) {
- PyErr_SetString(socket_error, "getsockaddrarg: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
@@ -1452,7 +1542,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
}
#endif
default:
- PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol");
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: unknown Bluetooth protocol");
return 0;
}
}
@@ -1564,10 +1654,117 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
}
#endif
+#ifdef HAVE_LINUX_CAN_H
+ case AF_CAN:
+ switch (s->sock_proto) {
+ case CAN_RAW:
+ {
+ struct sockaddr_can *addr;
+ PyObject *interfaceName;
+ struct ifreq ifr;
+ Py_ssize_t len;
+
+ addr = (struct sockaddr_can *)addr_ret;
+
+ if (!PyArg_ParseTuple(args, "O&", PyUnicode_FSConverter,
+ &interfaceName))
+ return 0;
+
+ len = PyBytes_GET_SIZE(interfaceName);
+
+ if (len == 0) {
+ ifr.ifr_ifindex = 0;
+ } else if (len < sizeof(ifr.ifr_name)) {
+ strncpy(ifr.ifr_name, PyBytes_AS_STRING(interfaceName), sizeof(ifr.ifr_name));
+ ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
+ if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) {
+ s->errorhandler();
+ Py_DECREF(interfaceName);
+ return 0;
+ }
+ } else {
+ PyErr_SetString(PyExc_OSError,
+ "AF_CAN interface name too long");
+ Py_DECREF(interfaceName);
+ return 0;
+ }
+
+ addr->can_family = AF_CAN;
+ addr->can_ifindex = ifr.ifr_ifindex;
+
+ *len_ret = sizeof(*addr);
+ Py_DECREF(interfaceName);
+ return 1;
+ }
+ default:
+ PyErr_SetString(PyExc_OSError,
+ "getsockaddrarg: unsupported CAN protocol");
+ return 0;
+ }
+#endif
+
+#ifdef PF_SYSTEM
+ case PF_SYSTEM:
+ switch (s->sock_proto) {
+#ifdef SYSPROTO_CONTROL
+ case SYSPROTO_CONTROL:
+ {
+ struct sockaddr_ctl *addr;
+
+ addr = (struct sockaddr_ctl *)addr_ret;
+ addr->sc_family = AF_SYSTEM;
+ addr->ss_sysaddr = AF_SYS_CONTROL;
+
+ if (PyUnicode_Check(args)) {
+ struct ctl_info info;
+ PyObject *ctl_name;
+
+ if (!PyArg_Parse(args, "O&",
+ PyUnicode_FSConverter, &ctl_name)) {
+ return 0;
+ }
+
+ if (PyBytes_GET_SIZE(ctl_name) > sizeof(info.ctl_name)) {
+ PyErr_SetString(PyExc_ValueError,
+ "provided string is too long");
+ Py_DECREF(ctl_name);
+ return 0;
+ }
+ strncpy(info.ctl_name, PyBytes_AS_STRING(ctl_name),
+ sizeof(info.ctl_name));
+ Py_DECREF(ctl_name);
+
+ if (ioctl(s->sock_fd, CTLIOCGINFO, &info)) {
+ PyErr_SetString(PyExc_OSError,
+ "cannot find kernel control with provided name");
+ return 0;
+ }
+
+ addr->sc_id = info.ctl_id;
+ addr->sc_unit = 0;
+ } else if (!PyArg_ParseTuple(args, "II",
+ &(addr->sc_id), &(addr->sc_unit))) {
+ PyErr_SetString(PyExc_TypeError, "getsockaddrarg: "
+ "expected str or tuple of two ints");
+
+ return 0;
+ }
+
+ *len_ret = sizeof(*addr);
+ return 1;
+ }
+#endif
+ default:
+ PyErr_SetString(PyExc_OSError,
+ "getsockaddrarg: unsupported PF_SYSTEM protocol");
+ return 0;
+ }
+#endif
+
/* More cases here... */
default:
- PyErr_SetString(socket_error, "getsockaddrarg: bad family");
+ PyErr_SetString(PyExc_OSError, "getsockaddrarg: bad family");
return 0;
}
@@ -1598,6 +1795,11 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
}
#endif
+#ifdef AF_RDS
+ case AF_RDS:
+ /* RDS sockets use sockaddr_in: fall-through */
+#endif
+
case AF_INET:
{
*len_ret = sizeof (struct sockaddr_in);
@@ -1633,7 +1835,7 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
return 1;
#endif
default:
- PyErr_SetString(socket_error, "getsockaddrlen: "
+ PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
"unknown BT protocol");
return 0;
@@ -1657,14 +1859,149 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
}
#endif
+#ifdef HAVE_LINUX_CAN_H
+ case AF_CAN:
+ {
+ *len_ret = sizeof (struct sockaddr_can);
+ return 1;
+ }
+#endif
+
+#ifdef PF_SYSTEM
+ case PF_SYSTEM:
+ switch(s->sock_proto) {
+#ifdef SYSPROTO_CONTROL
+ case SYSPROTO_CONTROL:
+ *len_ret = sizeof (struct sockaddr_ctl);
+ return 1;
+#endif
+ default:
+ PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
+ "unknown PF_SYSTEM protocol");
+ return 0;
+ }
+#endif
+
/* More cases here... */
default:
- PyErr_SetString(socket_error, "getsockaddrlen: bad family");
+ PyErr_SetString(PyExc_OSError, "getsockaddrlen: bad family");
+ return 0;
+
+ }
+}
+
+
+/* Support functions for the sendmsg() and recvmsg[_into]() methods.
+ Currently, these methods are only compiled if the RFC 2292/3542
+ CMSG_LEN() macro is available. Older systems seem to have used
+ sizeof(struct cmsghdr) + (length) where CMSG_LEN() is used now, so
+ it may be possible to define CMSG_LEN() that way if it's not
+ provided. Some architectures might need extra padding after the
+ cmsghdr, however, and CMSG_LEN() would have to take account of
+ this. */
+#ifdef CMSG_LEN
+/* If length is in range, set *result to CMSG_LEN(length) and return
+ true; otherwise, return false. */
+static int
+get_CMSG_LEN(size_t length, size_t *result)
+{
+ size_t tmp;
+
+ if (length > (SOCKLEN_T_LIMIT - CMSG_LEN(0)))
+ return 0;
+ tmp = CMSG_LEN(length);
+ if (tmp > SOCKLEN_T_LIMIT || tmp < length)
+ return 0;
+ *result = tmp;
+ return 1;
+}
+
+#ifdef CMSG_SPACE
+/* If length is in range, set *result to CMSG_SPACE(length) and return
+ true; otherwise, return false. */
+static int
+get_CMSG_SPACE(size_t length, size_t *result)
+{
+ size_t tmp;
+
+ /* Use CMSG_SPACE(1) here in order to take account of the padding
+ necessary before *and* after the data. */
+ if (length > (SOCKLEN_T_LIMIT - CMSG_SPACE(1)))
+ return 0;
+ tmp = CMSG_SPACE(length);
+ if (tmp > SOCKLEN_T_LIMIT || tmp < length)
+ return 0;
+ *result = tmp;
+ return 1;
+}
+#endif
+
+/* Return true iff msg->msg_controllen is valid, cmsgh is a valid
+ pointer in msg->msg_control with at least "space" bytes after it,
+ and its cmsg_len member inside the buffer. */
+static int
+cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space)
+{
+ size_t cmsg_offset;
+ static const size_t cmsg_len_end = (offsetof(struct cmsghdr, cmsg_len) +
+ sizeof(cmsgh->cmsg_len));
+
+ /* Note that POSIX allows msg_controllen to be of signed type. */
+ if (cmsgh == NULL || msg->msg_control == NULL || msg->msg_controllen < 0)
+ return 0;
+ if (space < cmsg_len_end)
+ space = cmsg_len_end;
+ cmsg_offset = (char *)cmsgh - (char *)msg->msg_control;
+ return (cmsg_offset <= (size_t)-1 - space &&
+ cmsg_offset + space <= msg->msg_controllen);
+}
+
+/* If pointer CMSG_DATA(cmsgh) is in buffer msg->msg_control, set
+ *space to number of bytes following it in the buffer and return
+ true; otherwise, return false. Assumes cmsgh, msg->msg_control and
+ msg->msg_controllen are valid. */
+static int
+get_cmsg_data_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t *space)
+{
+ size_t data_offset;
+ char *data_ptr;
+
+ if ((data_ptr = (char *)CMSG_DATA(cmsgh)) == NULL)
return 0;
+ data_offset = data_ptr - (char *)msg->msg_control;
+ if (data_offset > msg->msg_controllen)
+ return 0;
+ *space = msg->msg_controllen - data_offset;
+ return 1;
+}
+
+/* If cmsgh is invalid or not contained in the buffer pointed to by
+ msg->msg_control, return -1. If cmsgh is valid and its associated
+ data is entirely contained in the buffer, set *data_len to the
+ length of the associated data and return 0. If only part of the
+ associated data is contained in the buffer but cmsgh is otherwise
+ valid, set *data_len to the length contained in the buffer and
+ return 1. */
+static int
+get_cmsg_data_len(struct msghdr *msg, struct cmsghdr *cmsgh, size_t *data_len)
+{
+ size_t space, cmsg_data_len;
+ if (!cmsg_min_space(msg, cmsgh, CMSG_LEN(0)) ||
+ cmsgh->cmsg_len < CMSG_LEN(0))
+ return -1;
+ cmsg_data_len = cmsgh->cmsg_len - CMSG_LEN(0);
+ if (!get_cmsg_data_space(msg, cmsgh, &space))
+ return -1;
+ if (space >= cmsg_data_len) {
+ *data_len = cmsg_data_len;
+ return 0;
}
+ *data_len = space;
+ return 1;
}
+#endif /* CMSG_LEN */
/* s._accept() -> (fd, address) */
@@ -1889,7 +2226,7 @@ sock_getsockopt(PySocketSockObject *s, PyObject *args)
#else
if (buflen <= 0 || buflen > 1024) {
#endif
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"getsockopt buflen out of range");
return NULL;
}
@@ -2587,7 +2924,6 @@ sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds)
return NULL;
buf = pbuf.buf;
buflen = pbuf.len;
- assert(buf != 0 && buflen > 0);
if (recvlen < 0) {
PyBuffer_Release(&pbuf);
@@ -2625,6 +2961,331 @@ PyDoc_STRVAR(recvfrom_into_doc,
Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info.");
+/* The sendmsg() and recvmsg[_into]() methods require a working
+ CMSG_LEN(). See the comment near get_CMSG_LEN(). */
+#ifdef CMSG_LEN
+/*
+ * Call recvmsg() with the supplied iovec structures, flags, and
+ * ancillary data buffer size (controllen). Returns the tuple return
+ * value for recvmsg() or recvmsg_into(), with the first item provided
+ * by the supplied makeval() function. makeval() will be called with
+ * the length read and makeval_data as arguments, and must return a
+ * new reference (which will be decrefed if there is a subsequent
+ * error). On error, closes any file descriptors received via
+ * SCM_RIGHTS.
+ */
+static PyObject *
+sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen,
+ int flags, Py_ssize_t controllen,
+ PyObject *(*makeval)(ssize_t, void *), void *makeval_data)
+{
+ ssize_t bytes_received = -1;
+ int timeout;
+ sock_addr_t addrbuf;
+ socklen_t addrbuflen;
+ struct msghdr msg = {0};
+ PyObject *cmsg_list = NULL, *retval = NULL;
+ void *controlbuf = NULL;
+ struct cmsghdr *cmsgh;
+ size_t cmsgdatalen = 0;
+ int cmsg_status;
+
+ /* XXX: POSIX says that msg_name and msg_namelen "shall be
+ ignored" when the socket is connected (Linux fills them in
+ anyway for AF_UNIX sockets at least). Normally msg_namelen
+ seems to be set to 0 if there's no address, but try to
+ initialize msg_name to something that won't be mistaken for a
+ real address if that doesn't happen. */
+ if (!getsockaddrlen(s, &addrbuflen))
+ return NULL;
+ memset(&addrbuf, 0, addrbuflen);
+ SAS2SA(&addrbuf)->sa_family = AF_UNSPEC;
+
+ if (controllen < 0 || controllen > SOCKLEN_T_LIMIT) {
+ PyErr_SetString(PyExc_ValueError,
+ "invalid ancillary data buffer length");
+ return NULL;
+ }
+ if (controllen > 0 && (controlbuf = PyMem_Malloc(controllen)) == NULL)
+ return PyErr_NoMemory();
+
+ /* Make the system call. */
+ if (!IS_SELECTABLE(s)) {
+ select_error();
+ goto finally;
+ }
+
+ BEGIN_SELECT_LOOP(s)
+ Py_BEGIN_ALLOW_THREADS;
+ msg.msg_name = SAS2SA(&addrbuf);
+ msg.msg_namelen = addrbuflen;
+ msg.msg_iov = iov;
+ msg.msg_iovlen = iovlen;
+ msg.msg_control = controlbuf;
+ msg.msg_controllen = controllen;
+ timeout = internal_select_ex(s, 0, interval);
+ if (!timeout)
+ bytes_received = recvmsg(s->sock_fd, &msg, flags);
+ Py_END_ALLOW_THREADS;
+ if (timeout == 1) {
+ PyErr_SetString(socket_timeout, "timed out");
+ goto finally;
+ }
+ END_SELECT_LOOP(s)
+
+ if (bytes_received < 0) {
+ s->errorhandler();
+ goto finally;
+ }
+
+ /* Make list of (level, type, data) tuples from control messages. */
+ if ((cmsg_list = PyList_New(0)) == NULL)
+ goto err_closefds;
+ /* Check for empty ancillary data as old CMSG_FIRSTHDR()
+ implementations didn't do so. */
+ for (cmsgh = ((msg.msg_controllen > 0) ? CMSG_FIRSTHDR(&msg) : NULL);
+ cmsgh != NULL; cmsgh = CMSG_NXTHDR(&msg, cmsgh)) {
+ PyObject *bytes, *tuple;
+ int tmp;
+
+ cmsg_status = get_cmsg_data_len(&msg, cmsgh, &cmsgdatalen);
+ if (cmsg_status != 0) {
+ if (PyErr_WarnEx(PyExc_RuntimeWarning,
+ "received malformed or improperly-truncated "
+ "ancillary data", 1) == -1)
+ goto err_closefds;
+ }
+ if (cmsg_status < 0)
+ break;
+ if (cmsgdatalen > PY_SSIZE_T_MAX) {
+ PyErr_SetString(PyExc_OSError, "control message too long");
+ goto err_closefds;
+ }
+
+ bytes = PyBytes_FromStringAndSize((char *)CMSG_DATA(cmsgh),
+ cmsgdatalen);
+ tuple = Py_BuildValue("iiN", (int)cmsgh->cmsg_level,
+ (int)cmsgh->cmsg_type, bytes);
+ if (tuple == NULL)
+ goto err_closefds;
+ tmp = PyList_Append(cmsg_list, tuple);
+ Py_DECREF(tuple);
+ if (tmp != 0)
+ goto err_closefds;
+
+ if (cmsg_status != 0)
+ break;
+ }
+
+ retval = Py_BuildValue("NOiN",
+ (*makeval)(bytes_received, makeval_data),
+ cmsg_list,
+ (int)msg.msg_flags,
+ makesockaddr(s->sock_fd, SAS2SA(&addrbuf),
+ ((msg.msg_namelen > addrbuflen) ?
+ addrbuflen : msg.msg_namelen),
+ s->sock_proto));
+ if (retval == NULL)
+ goto err_closefds;
+
+finally:
+ Py_XDECREF(cmsg_list);
+ PyMem_Free(controlbuf);
+ return retval;
+
+err_closefds:
+#ifdef SCM_RIGHTS
+ /* Close all descriptors coming from SCM_RIGHTS, so they don't leak. */
+ for (cmsgh = ((msg.msg_controllen > 0) ? CMSG_FIRSTHDR(&msg) : NULL);
+ cmsgh != NULL; cmsgh = CMSG_NXTHDR(&msg, cmsgh)) {
+ cmsg_status = get_cmsg_data_len(&msg, cmsgh, &cmsgdatalen);
+ if (cmsg_status < 0)
+ break;
+ if (cmsgh->cmsg_level == SOL_SOCKET &&
+ cmsgh->cmsg_type == SCM_RIGHTS) {
+ size_t numfds;
+ int *fdp;
+
+ numfds = cmsgdatalen / sizeof(int);
+ fdp = (int *)CMSG_DATA(cmsgh);
+ while (numfds-- > 0)
+ close(*fdp++);
+ }
+ if (cmsg_status != 0)
+ break;
+ }
+#endif /* SCM_RIGHTS */
+ goto finally;
+}
+
+
+static PyObject *
+makeval_recvmsg(ssize_t received, void *data)
+{
+ PyObject **buf = data;
+
+ if (received < PyBytes_GET_SIZE(*buf))
+ _PyBytes_Resize(buf, received);
+ Py_XINCREF(*buf);
+ return *buf;
+}
+
+/* s.recvmsg(bufsize[, ancbufsize[, flags]]) method */
+
+static PyObject *
+sock_recvmsg(PySocketSockObject *s, PyObject *args)
+{
+ Py_ssize_t bufsize, ancbufsize = 0;
+ int flags = 0;
+ struct iovec iov;
+ PyObject *buf = NULL, *retval = NULL;
+
+ if (!PyArg_ParseTuple(args, "n|ni:recvmsg", &bufsize, &ancbufsize, &flags))
+ return NULL;
+
+ if (bufsize < 0) {
+ PyErr_SetString(PyExc_ValueError, "negative buffer size in recvmsg()");
+ return NULL;
+ }
+ if ((buf = PyBytes_FromStringAndSize(NULL, bufsize)) == NULL)
+ return NULL;
+ iov.iov_base = PyBytes_AS_STRING(buf);
+ iov.iov_len = bufsize;
+
+ /* Note that we're passing a pointer to *our pointer* to the bytes
+ object here (&buf); makeval_recvmsg() may incref the object, or
+ deallocate it and set our pointer to NULL. */
+ retval = sock_recvmsg_guts(s, &iov, 1, flags, ancbufsize,
+ &makeval_recvmsg, &buf);
+ Py_XDECREF(buf);
+ return retval;
+}
+
+PyDoc_STRVAR(recvmsg_doc,
+"recvmsg(bufsize[, ancbufsize[, flags]]) -> (data, ancdata, msg_flags, address)\n\
+\n\
+Receive normal data (up to bufsize bytes) and ancillary data from the\n\
+socket. The ancbufsize argument sets the size in bytes of the\n\
+internal buffer used to receive the ancillary data; it defaults to 0,\n\
+meaning that no ancillary data will be received. Appropriate buffer\n\
+sizes for ancillary data can be calculated using CMSG_SPACE() or\n\
+CMSG_LEN(), and items which do not fit into the buffer might be\n\
+truncated or discarded. The flags argument defaults to 0 and has the\n\
+same meaning as for recv().\n\
+\n\
+The return value is a 4-tuple: (data, ancdata, msg_flags, address).\n\
+The data item is a bytes object holding the non-ancillary data\n\
+received. The ancdata item is a list of zero or more tuples\n\
+(cmsg_level, cmsg_type, cmsg_data) representing the ancillary data\n\
+(control messages) received: cmsg_level and cmsg_type are integers\n\
+specifying the protocol level and protocol-specific type respectively,\n\
+and cmsg_data is a bytes object holding the associated data. The\n\
+msg_flags item is the bitwise OR of various flags indicating\n\
+conditions on the received message; see your system documentation for\n\
+details. If the receiving socket is unconnected, address is the\n\
+address of the sending socket, if available; otherwise, its value is\n\
+unspecified.\n\
+\n\
+If recvmsg() raises an exception after the system call returns, it\n\
+will first attempt to close any file descriptors received via the\n\
+SCM_RIGHTS mechanism.");
+
+
+static PyObject *
+makeval_recvmsg_into(ssize_t received, void *data)
+{
+ return PyLong_FromSsize_t(received);
+}
+
+/* s.recvmsg_into(buffers[, ancbufsize[, flags]]) method */
+
+static PyObject *
+sock_recvmsg_into(PySocketSockObject *s, PyObject *args)
+{
+ Py_ssize_t ancbufsize = 0;
+ int flags = 0;
+ struct iovec *iovs = NULL;
+ Py_ssize_t i, nitems, nbufs = 0;
+ Py_buffer *bufs = NULL;
+ PyObject *buffers_arg, *fast, *retval = NULL;
+
+ if (!PyArg_ParseTuple(args, "O|ni:recvmsg_into",
+ &buffers_arg, &ancbufsize, &flags))
+ return NULL;
+
+ if ((fast = PySequence_Fast(buffers_arg,
+ "recvmsg_into() argument 1 must be an "
+ "iterable")) == NULL)
+ return NULL;
+ nitems = PySequence_Fast_GET_SIZE(fast);
+ if (nitems > INT_MAX) {
+ PyErr_SetString(PyExc_OSError, "recvmsg_into() argument 1 is too long");
+ goto finally;
+ }
+
+ /* Fill in an iovec for each item, and save the Py_buffer
+ structs to release afterwards. */
+ if (nitems > 0 && ((iovs = PyMem_New(struct iovec, nitems)) == NULL ||
+ (bufs = PyMem_New(Py_buffer, nitems)) == NULL)) {
+ PyErr_NoMemory();
+ goto finally;
+ }
+ for (; nbufs < nitems; nbufs++) {
+ if (!PyArg_Parse(PySequence_Fast_GET_ITEM(fast, nbufs),
+ "w*;recvmsg_into() argument 1 must be an iterable "
+ "of single-segment read-write buffers",
+ &bufs[nbufs]))
+ goto finally;
+ iovs[nbufs].iov_base = bufs[nbufs].buf;
+ iovs[nbufs].iov_len = bufs[nbufs].len;
+ }
+
+ retval = sock_recvmsg_guts(s, iovs, nitems, flags, ancbufsize,
+ &makeval_recvmsg_into, NULL);
+finally:
+ for (i = 0; i < nbufs; i++)
+ PyBuffer_Release(&bufs[i]);
+ PyMem_Free(bufs);
+ PyMem_Free(iovs);
+ Py_DECREF(fast);
+ return retval;
+}
+
+PyDoc_STRVAR(recvmsg_into_doc,
+"recvmsg_into(buffers[, ancbufsize[, flags]]) -> (nbytes, ancdata, msg_flags, address)\n\
+\n\
+Receive normal data and ancillary data from the socket, scattering the\n\
+non-ancillary data into a series of buffers. The buffers argument\n\
+must be an iterable of objects that export writable buffers\n\
+(e.g. bytearray objects); these will be filled with successive chunks\n\
+of the non-ancillary data until it has all been written or there are\n\
+no more buffers. The ancbufsize argument sets the size in bytes of\n\
+the internal buffer used to receive the ancillary data; it defaults to\n\
+0, meaning that no ancillary data will be received. Appropriate\n\
+buffer sizes for ancillary data can be calculated using CMSG_SPACE()\n\
+or CMSG_LEN(), and items which do not fit into the buffer might be\n\
+truncated or discarded. The flags argument defaults to 0 and has the\n\
+same meaning as for recv().\n\
+\n\
+The return value is a 4-tuple: (nbytes, ancdata, msg_flags, address).\n\
+The nbytes item is the total number of bytes of non-ancillary data\n\
+written into the buffers. The ancdata item is a list of zero or more\n\
+tuples (cmsg_level, cmsg_type, cmsg_data) representing the ancillary\n\
+data (control messages) received: cmsg_level and cmsg_type are\n\
+integers specifying the protocol level and protocol-specific type\n\
+respectively, and cmsg_data is a bytes object holding the associated\n\
+data. The msg_flags item is the bitwise OR of various flags\n\
+indicating conditions on the received message; see your system\n\
+documentation for details. If the receiving socket is unconnected,\n\
+address is the address of the sending socket, if available; otherwise,\n\
+its value is unspecified.\n\
+\n\
+If recvmsg_into() raises an exception after the system call returns,\n\
+it will first attempt to close any file descriptors received via the\n\
+SCM_RIGHTS mechanism.");
+#endif /* CMSG_LEN */
+
+
/* s.send(data [,flags]) method */
static PyObject *
@@ -2776,6 +3437,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args)
PyErr_Format(PyExc_TypeError,
"sendto() takes 2 or 3 arguments (%d given)",
arglen);
+ return NULL;
}
if (PyErr_Occurred())
return NULL;
@@ -2819,6 +3481,234 @@ Like send(data, flags) but allows specifying the destination address.\n\
For IP sockets, the address is a pair (hostaddr, port).");
+/* The sendmsg() and recvmsg[_into]() methods require a working
+ CMSG_LEN(). See the comment near get_CMSG_LEN(). */
+#ifdef CMSG_LEN
+/* s.sendmsg(buffers[, ancdata[, flags[, address]]]) method */
+
+static PyObject *
+sock_sendmsg(PySocketSockObject *s, PyObject *args)
+{
+ Py_ssize_t i, ndataparts, ndatabufs = 0, ncmsgs, ncmsgbufs = 0;
+ Py_buffer *databufs = NULL;
+ struct iovec *iovs = NULL;
+ sock_addr_t addrbuf;
+ struct msghdr msg = {0};
+ struct cmsginfo {
+ int level;
+ int type;
+ Py_buffer data;
+ } *cmsgs = NULL;
+ void *controlbuf = NULL;
+ size_t controllen, controllen_last;
+ ssize_t bytes_sent = -1;
+ int addrlen, timeout, flags = 0;
+ PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *data_fast = NULL,
+ *cmsg_fast = NULL, *retval = NULL;
+
+ if (!PyArg_ParseTuple(args, "O|OiO:sendmsg",
+ &data_arg, &cmsg_arg, &flags, &addr_arg))
+ return NULL;
+
+ /* Parse destination address. */
+ if (addr_arg != NULL && addr_arg != Py_None) {
+ if (!getsockaddrarg(s, addr_arg, SAS2SA(&addrbuf), &addrlen))
+ goto finally;
+ msg.msg_name = &addrbuf;
+ msg.msg_namelen = addrlen;
+ }
+
+ /* Fill in an iovec for each message part, and save the Py_buffer
+ structs to release afterwards. */
+ if ((data_fast = PySequence_Fast(data_arg,
+ "sendmsg() argument 1 must be an "
+ "iterable")) == NULL)
+ goto finally;
+ ndataparts = PySequence_Fast_GET_SIZE(data_fast);
+ if (ndataparts > INT_MAX) {
+ PyErr_SetString(PyExc_OSError, "sendmsg() argument 1 is too long");
+ goto finally;
+ }
+ msg.msg_iovlen = ndataparts;
+ if (ndataparts > 0 &&
+ ((msg.msg_iov = iovs = PyMem_New(struct iovec, ndataparts)) == NULL ||
+ (databufs = PyMem_New(Py_buffer, ndataparts)) == NULL)) {
+ PyErr_NoMemory();
+ goto finally;
+ }
+ for (; ndatabufs < ndataparts; ndatabufs++) {
+ if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs),
+ "y*;sendmsg() argument 1 must be an iterable of "
+ "buffer-compatible objects",
+ &databufs[ndatabufs]))
+ goto finally;
+ iovs[ndatabufs].iov_base = databufs[ndatabufs].buf;
+ iovs[ndatabufs].iov_len = databufs[ndatabufs].len;
+ }
+
+ if (cmsg_arg == NULL)
+ ncmsgs = 0;
+ else {
+ if ((cmsg_fast = PySequence_Fast(cmsg_arg,
+ "sendmsg() argument 2 must be an "
+ "iterable")) == NULL)
+ goto finally;
+ ncmsgs = PySequence_Fast_GET_SIZE(cmsg_fast);
+ }
+
+#ifndef CMSG_SPACE
+ if (ncmsgs > 1) {
+ PyErr_SetString(PyExc_OSError,
+ "sending multiple control messages is not supported "
+ "on this system");
+ goto finally;
+ }
+#endif
+ /* Save level, type and Py_buffer for each control message,
+ and calculate total size. */
+ if (ncmsgs > 0 && (cmsgs = PyMem_New(struct cmsginfo, ncmsgs)) == NULL) {
+ PyErr_NoMemory();
+ goto finally;
+ }
+ controllen = controllen_last = 0;
+ while (ncmsgbufs < ncmsgs) {
+ size_t bufsize, space;
+
+ if (!PyArg_Parse(PySequence_Fast_GET_ITEM(cmsg_fast, ncmsgbufs),
+ "(iiy*):[sendmsg() ancillary data items]",
+ &cmsgs[ncmsgbufs].level,
+ &cmsgs[ncmsgbufs].type,
+ &cmsgs[ncmsgbufs].data))
+ goto finally;
+ bufsize = cmsgs[ncmsgbufs++].data.len;
+
+#ifdef CMSG_SPACE
+ if (!get_CMSG_SPACE(bufsize, &space)) {
+#else
+ if (!get_CMSG_LEN(bufsize, &space)) {
+#endif
+ PyErr_SetString(PyExc_OSError, "ancillary data item too large");
+ goto finally;
+ }
+ controllen += space;
+ if (controllen > SOCKLEN_T_LIMIT || controllen < controllen_last) {
+ PyErr_SetString(PyExc_OSError, "too much ancillary data");
+ goto finally;
+ }
+ controllen_last = controllen;
+ }
+
+ /* Construct ancillary data block from control message info. */
+ if (ncmsgbufs > 0) {
+ struct cmsghdr *cmsgh = NULL;
+
+ if ((msg.msg_control = controlbuf =
+ PyMem_Malloc(controllen)) == NULL) {
+ PyErr_NoMemory();
+ goto finally;
+ }
+ msg.msg_controllen = controllen;
+
+ /* Need to zero out the buffer as a workaround for glibc's
+ CMSG_NXTHDR() implementation. After getting the pointer to
+ the next header, it checks its (uninitialized) cmsg_len
+ member to see if the "message" fits in the buffer, and
+ returns NULL if it doesn't. Zero-filling the buffer
+ ensures that this doesn't happen. */
+ memset(controlbuf, 0, controllen);
+
+ for (i = 0; i < ncmsgbufs; i++) {
+ size_t msg_len, data_len = cmsgs[i].data.len;
+ int enough_space = 0;
+
+ cmsgh = (i == 0) ? CMSG_FIRSTHDR(&msg) : CMSG_NXTHDR(&msg, cmsgh);
+ if (cmsgh == NULL) {
+ PyErr_Format(PyExc_RuntimeError,
+ "unexpected NULL result from %s()",
+ (i == 0) ? "CMSG_FIRSTHDR" : "CMSG_NXTHDR");
+ goto finally;
+ }
+ if (!get_CMSG_LEN(data_len, &msg_len)) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "item size out of range for CMSG_LEN()");
+ goto finally;
+ }
+ if (cmsg_min_space(&msg, cmsgh, msg_len)) {
+ size_t space;
+
+ cmsgh->cmsg_len = msg_len;
+ if (get_cmsg_data_space(&msg, cmsgh, &space))
+ enough_space = (space >= data_len);
+ }
+ if (!enough_space) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "ancillary data does not fit in calculated "
+ "space");
+ goto finally;
+ }
+ cmsgh->cmsg_level = cmsgs[i].level;
+ cmsgh->cmsg_type = cmsgs[i].type;
+ memcpy(CMSG_DATA(cmsgh), cmsgs[i].data.buf, data_len);
+ }
+ }
+
+ /* Make the system call. */
+ if (!IS_SELECTABLE(s)) {
+ select_error();
+ goto finally;
+ }
+
+ BEGIN_SELECT_LOOP(s)
+ Py_BEGIN_ALLOW_THREADS;
+ timeout = internal_select_ex(s, 1, interval);
+ if (!timeout)
+ bytes_sent = sendmsg(s->sock_fd, &msg, flags);
+ Py_END_ALLOW_THREADS;
+ if (timeout == 1) {
+ PyErr_SetString(socket_timeout, "timed out");
+ goto finally;
+ }
+ END_SELECT_LOOP(s)
+
+ if (bytes_sent < 0) {
+ s->errorhandler();
+ goto finally;
+ }
+ retval = PyLong_FromSsize_t(bytes_sent);
+
+finally:
+ PyMem_Free(controlbuf);
+ for (i = 0; i < ncmsgbufs; i++)
+ PyBuffer_Release(&cmsgs[i].data);
+ PyMem_Free(cmsgs);
+ Py_XDECREF(cmsg_fast);
+ for (i = 0; i < ndatabufs; i++)
+ PyBuffer_Release(&databufs[i]);
+ PyMem_Free(databufs);
+ PyMem_Free(iovs);
+ Py_XDECREF(data_fast);
+ return retval;
+}
+
+PyDoc_STRVAR(sendmsg_doc,
+"sendmsg(buffers[, ancdata[, flags[, address]]]) -> count\n\
+\n\
+Send normal and ancillary data to the socket, gathering the\n\
+non-ancillary data from a series of buffers and concatenating it into\n\
+a single message. The buffers argument specifies the non-ancillary\n\
+data as an iterable of buffer-compatible objects (e.g. bytes objects).\n\
+The ancdata argument specifies the ancillary data (control messages)\n\
+as an iterable of zero or more tuples (cmsg_level, cmsg_type,\n\
+cmsg_data), where cmsg_level and cmsg_type are integers specifying the\n\
+protocol level and protocol-specific type respectively, and cmsg_data\n\
+is a buffer-compatible object holding the associated data. The flags\n\
+argument defaults to 0 and has the same meaning as for send(). If\n\
+address is supplied and not None, it sets a destination address for\n\
+the message. The return value is the number of bytes of non-ancillary\n\
+data sent.");
+#endif /* CMSG_LEN */
+
+
/* s.shutdown(how) method */
static PyObject *
@@ -2887,6 +3777,34 @@ PyDoc_STRVAR(sock_ioctl_doc,
Control the socket with WSAIoctl syscall. Currently supported 'cmd' values are\n\
SIO_RCVALL: 'option' must be one of the socket.RCVALL_* constants.\n\
SIO_KEEPALIVE_VALS: 'option' is a tuple of (onoff, timeout, interval).");
+#endif
+
+#if defined(MS_WINDOWS)
+static PyObject*
+sock_share(PySocketSockObject *s, PyObject *arg)
+{
+ WSAPROTOCOL_INFO info;
+ DWORD processId;
+ int result;
+
+ if (!PyArg_ParseTuple(arg, "I", &processId))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ result = WSADuplicateSocket(s->sock_fd, processId, &info);
+ Py_END_ALLOW_THREADS
+ if (result == SOCKET_ERROR)
+ return set_error();
+ return PyBytes_FromStringAndSize((const char*)&info, sizeof(info));
+}
+PyDoc_STRVAR(sock_share_doc,
+"share(process_id) -> bytes\n\
+\n\
+Share the socket with another process. The target process id\n\
+must be provided and the resulting bytes object passed to the target\n\
+process. There the shared socket can be instantiated by calling\n\
+socket.fromshare().");
+
#endif
@@ -2919,6 +3837,10 @@ static PyMethodDef sock_methods[] = {
{"ioctl", (PyCFunction)sock_ioctl, METH_VARARGS,
sock_ioctl_doc},
#endif
+#if defined(MS_WINDOWS)
+ {"share", (PyCFunction)sock_share, METH_VARARGS,
+ sock_share_doc},
+#endif
{"listen", (PyCFunction)sock_listen, METH_O,
listen_doc},
{"recv", (PyCFunction)sock_recv, METH_VARARGS,
@@ -2945,6 +3867,14 @@ static PyMethodDef sock_methods[] = {
setsockopt_doc},
{"shutdown", (PyCFunction)sock_shutdown, METH_O,
shutdown_doc},
+#ifdef CMSG_LEN
+ {"recvmsg", (PyCFunction)sock_recvmsg, METH_VARARGS,
+ recvmsg_doc},
+ {"recvmsg_into", (PyCFunction)sock_recvmsg_into, METH_VARARGS,
+ recvmsg_into_doc,},
+ {"sendmsg", (PyCFunction)sock_sendmsg, METH_VARARGS,
+ sendmsg_doc},
+#endif
{NULL, NULL} /* sentinel */
};
@@ -3038,13 +3968,40 @@ sock_initobj(PyObject *self, PyObject *args, PyObject *kwds)
return -1;
if (fdobj != NULL && fdobj != Py_None) {
- fd = PyLong_AsSocket_t(fdobj);
- if (fd == (SOCKET_T)(-1) && PyErr_Occurred())
- return -1;
- if (fd == INVALID_SOCKET) {
- PyErr_SetString(PyExc_ValueError,
- "can't use invalid socket value");
- return -1;
+#ifdef MS_WINDOWS
+ /* recreate a socket that was duplicated */
+ if (PyBytes_Check(fdobj)) {
+ WSAPROTOCOL_INFO info;
+ if (PyBytes_GET_SIZE(fdobj) != sizeof(info)) {
+ PyErr_Format(PyExc_ValueError,
+ "socket descriptor string has wrong size, "
+ "should be %zu bytes.", sizeof(info));
+ return -1;
+ }
+ memcpy(&info, PyBytes_AS_STRING(fdobj), sizeof(info));
+ Py_BEGIN_ALLOW_THREADS
+ fd = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
+ FROM_PROTOCOL_INFO, &info, 0, WSA_FLAG_OVERLAPPED);
+ Py_END_ALLOW_THREADS
+ if (fd == INVALID_SOCKET) {
+ set_error();
+ return -1;
+ }
+ family = info.iAddressFamily;
+ type = info.iSocketType;
+ proto = info.iProtocol;
+ }
+ else
+#endif
+ {
+ fd = PyLong_AsSocket_t(fdobj);
+ if (fd == (SOCKET_T)(-1) && PyErr_Occurred())
+ return -1;
+ if (fd == INVALID_SOCKET) {
+ PyErr_SetString(PyExc_ValueError,
+ "can't use invalid socket value");
+ return -1;
+ }
}
}
else {
@@ -3120,25 +4077,35 @@ socket_gethostname(PyObject *self, PyObject *unused)
version of the hostname, whereas we need a Unicode string.
Otherwise, gethostname apparently also returns the DNS name. */
wchar_t buf[MAX_COMPUTERNAME_LENGTH + 1];
- DWORD size = sizeof(buf) / sizeof(wchar_t);
+ DWORD size = Py_ARRAY_LENGTH(buf);
+ wchar_t *name;
PyObject *result;
- if (!GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size)) {
- if (GetLastError() == ERROR_MORE_DATA) {
- /* MSDN says this may occur "because DNS allows longer names */
- if (size == 0) /* XXX: I'm not sure how to handle this */
- return PyUnicode_FromUnicode(NULL, 0);
- result = PyUnicode_FromUnicode(NULL, size - 1);
- if (!result)
- return NULL;
- if (GetComputerNameExW(ComputerNamePhysicalDnsHostname,
- PyUnicode_AS_UNICODE(result),
- &size))
- return result;
- Py_DECREF(result);
- }
- return PyErr_SetExcFromWindowsErr(PyExc_WindowsError, GetLastError());
+
+ if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size))
+ return PyUnicode_FromWideChar(buf, size);
+
+ if (GetLastError() != ERROR_MORE_DATA)
+ return PyErr_SetFromWindowsErr(0);
+
+ if (size == 0)
+ return PyUnicode_New(0, 0);
+
+ /* MSDN says ERROR_MORE_DATA may occur because DNS allows longer
+ names */
+ name = PyMem_Malloc(size * sizeof(wchar_t));
+ if (!name)
+ return NULL;
+ if (!GetComputerNameExW(ComputerNamePhysicalDnsHostname,
+ name,
+ &size))
+ {
+ PyMem_Free(name);
+ return PyErr_SetFromWindowsErr(0);
}
- return PyUnicode_FromUnicode(buf, size);
+
+ result = PyUnicode_FromWideChar(name, size);
+ PyMem_Free(name);
+ return result;
#else
char buf[1024];
int res;
@@ -3148,7 +4115,7 @@ socket_gethostname(PyObject *self, PyObject *unused)
if (res < 0)
return set_error();
buf[sizeof buf - 1] = '\0';
- return PyUnicode_FromString(buf);
+ return PyUnicode_DecodeFSDefault(buf);
#endif
}
@@ -3157,6 +4124,42 @@ PyDoc_STRVAR(gethostname_doc,
\n\
Return the current host name.");
+#ifdef HAVE_SETHOSTNAME
+PyDoc_STRVAR(sethostname_doc,
+"sethostname(name)\n\n\
+Sets the hostname to name.");
+
+static PyObject *
+socket_sethostname(PyObject *self, PyObject *args)
+{
+ PyObject *hnobj;
+ Py_buffer buf;
+ int res, flag = 0;
+
+#ifdef _AIX
+/* issue #18259, not declared in any useful header file */
+extern int sethostname(const char *, size_t);
+#endif
+
+ if (!PyArg_ParseTuple(args, "S:sethostname", &hnobj)) {
+ PyErr_Clear();
+ if (!PyArg_ParseTuple(args, "O&:sethostname",
+ PyUnicode_FSConverter, &hnobj))
+ return NULL;
+ flag = 1;
+ }
+ res = PyObject_GetBuffer(hnobj, &buf, PyBUF_SIMPLE);
+ if (!res) {
+ res = sethostname(buf.buf, buf.len);
+ PyBuffer_Release(&buf);
+ }
+ if (flag)
+ Py_DECREF(hnobj);
+ if (res)
+ return set_error();
+ Py_RETURN_NONE;
+}
+#endif
/* Python interface to gethostbyname(name). */
@@ -3203,9 +4206,8 @@ gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
if (h->h_addrtype != af) {
/* Let's get real error message to return */
- PyErr_SetString(socket_error,
- (char *)strerror(EAFNOSUPPORT));
-
+ errno = EAFNOSUPPORT;
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
@@ -3288,7 +4290,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
#endif
default: /* can't happen */
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"unsupported address family");
return NULL;
}
@@ -3320,11 +4322,7 @@ socket_gethostbyname_ex(PyObject *self, PyObject *args)
{
char *name;
struct hostent *h;
-#ifdef ENABLE_IPV6
- struct sockaddr_storage addr;
-#else
- struct sockaddr_in addr;
-#endif
+ sock_addr_t addr;
struct sockaddr *sa;
PyObject *ret = NULL;
#ifdef HAVE_GETHOSTBYNAME_R
@@ -3336,19 +4334,19 @@ socket_gethostbyname_ex(PyObject *self, PyObject *args)
int buf_len = (sizeof buf) - 1;
int errnop;
#endif
-#if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
+#ifdef HAVE_GETHOSTBYNAME_R_3_ARG
int result;
#endif
#endif /* HAVE_GETHOSTBYNAME_R */
if (!PyArg_ParseTuple(args, "et:gethostbyname_ex", "idna", &name))
return NULL;
- if (setipaddr(name, (struct sockaddr *)&addr, sizeof(addr), AF_INET) < 0)
+ if (setipaddr(name, SAS2SA(&addr), sizeof(addr), AF_INET) < 0)
goto finally;
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_GETHOSTBYNAME_R
#if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
- result = gethostbyname_r(name, &hp_allocated, buf, buf_len,
+ gethostbyname_r(name, &hp_allocated, buf, buf_len,
&h, &errnop);
#elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
h = gethostbyname_r(name, &hp_allocated, buf, buf_len, &errnop);
@@ -3368,8 +4366,8 @@ socket_gethostbyname_ex(PyObject *self, PyObject *args)
addr.ss_family.
Therefore, we cast the sockaddr_storage into sockaddr to
access sa_family. */
- sa = (struct sockaddr*)&addr;
- ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr),
+ sa = SAS2SA(&addr);
+ ret = gethost_common(h, SAS2SA(&addr), sizeof(addr),
sa->sa_family);
#ifdef USE_GETHOSTBYNAME_LOCK
PyThread_release_lock(netdb_lock);
@@ -3392,12 +4390,8 @@ for a host. The host argument is a string giving a host name or IP number.");
static PyObject *
socket_gethostbyaddr(PyObject *self, PyObject *args)
{
-#ifdef ENABLE_IPV6
- struct sockaddr_storage addr;
-#else
- struct sockaddr_in addr;
-#endif
- struct sockaddr *sa = (struct sockaddr *)&addr;
+ sock_addr_t addr;
+ struct sockaddr *sa = SAS2SA(&addr);
char *ip_num;
struct hostent *h;
PyObject *ret = NULL;
@@ -3414,7 +4408,7 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
int buf_len = (sizeof buf) - 1;
int errnop;
#endif
-#if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
+#ifdef HAVE_GETHOSTBYNAME_R_3_ARG
int result;
#endif
#endif /* HAVE_GETHOSTBYNAME_R */
@@ -3429,7 +4423,7 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
goto finally;
af = sa->sa_family;
ap = NULL;
- al = 0;
+ /* al = 0; */
switch (af) {
case AF_INET:
ap = (char *)&((struct sockaddr_in *)sa)->sin_addr;
@@ -3442,13 +4436,13 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
break;
#endif
default:
- PyErr_SetString(socket_error, "unsupported address family");
+ PyErr_SetString(PyExc_OSError, "unsupported address family");
goto finally;
}
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_GETHOSTBYNAME_R
#if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
- result = gethostbyaddr_r(ap, al, af,
+ gethostbyaddr_r(ap, al, af,
&hp_allocated, buf, buf_len,
&h, &errnop);
#elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
@@ -3466,7 +4460,7 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
h = gethostbyaddr(ap, al, af);
#endif /* HAVE_GETHOSTBYNAME_R */
Py_END_ALLOW_THREADS
- ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), af);
+ ret = gethost_common(h, SAS2SA(&addr), sizeof(addr), af);
#ifdef USE_GETHOSTBYNAME_LOCK
PyThread_release_lock(netdb_lock);
#endif
@@ -3498,7 +4492,7 @@ socket_getservbyname(PyObject *self, PyObject *args)
sp = getservbyname(name, proto);
Py_END_ALLOW_THREADS
if (sp == NULL) {
- PyErr_SetString(socket_error, "service/proto not found");
+ PyErr_SetString(PyExc_OSError, "service/proto not found");
return NULL;
}
return PyLong_FromLong((long) ntohs(sp->s_port));
@@ -3535,7 +4529,7 @@ socket_getservbyport(PyObject *self, PyObject *args)
sp = getservbyport(htons((short)port), proto);
Py_END_ALLOW_THREADS
if (sp == NULL) {
- PyErr_SetString(socket_error, "port/proto not found");
+ PyErr_SetString(PyExc_OSError, "port/proto not found");
return NULL;
}
return PyUnicode_FromString(sp->s_name);
@@ -3564,7 +4558,7 @@ socket_getprotobyname(PyObject *self, PyObject *args)
sp = getprotobyname(name);
Py_END_ALLOW_THREADS
if (sp == NULL) {
- PyErr_SetString(socket_error, "protocol not found");
+ PyErr_SetString(PyExc_OSError, "protocol not found");
return NULL;
}
return PyLong_FromLong((long) sp->p_proto);
@@ -3703,17 +4697,15 @@ socket_ntohl(PyObject *self, PyObject *arg)
y = x & 0xFFFFFFFFUL;
if (y ^ x)
return PyErr_Format(PyExc_OverflowError,
- "long int larger than 32 bits");
+ "int larger than 32 bits");
x = y;
}
#endif
}
else
return PyErr_Format(PyExc_TypeError,
- "expected int/long, %s found",
+ "expected int, %s found",
Py_TYPE(arg)->tp_name);
- if (x == (unsigned long) -1 && PyErr_Occurred())
- return NULL;
return PyLong_FromUnsignedLong(ntohl(x));
}
@@ -3762,14 +4754,14 @@ socket_htonl(PyObject *self, PyObject *arg)
y = x & 0xFFFFFFFFUL;
if (y ^ x)
return PyErr_Format(PyExc_OverflowError,
- "long int larger than 32 bits");
+ "int larger than 32 bits");
x = y;
}
#endif
}
else
return PyErr_Format(PyExc_TypeError,
- "expected int/long, %s found",
+ "expected int, %s found",
Py_TYPE(arg)->tp_name);
return PyLong_FromUnsignedLong(htonl((unsigned long)x));
}
@@ -3819,7 +4811,7 @@ socket_inet_aton(PyObject *self, PyObject *args)
return PyBytes_FromStringAndSize((char *)(&buf),
sizeof(buf));
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"illegal IP address string passed to inet_aton");
return NULL;
@@ -3840,7 +4832,7 @@ socket_inet_aton(PyObject *self, PyObject *args)
packed_addr = inet_addr(ip_addr);
if (packed_addr == INADDR_NONE) { /* invalid address */
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"illegal IP address string passed to inet_aton");
return NULL;
}
@@ -3872,7 +4864,7 @@ socket_inet_ntoa(PyObject *self, PyObject *args)
}
if (addr_len != sizeof(packed_addr)) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"packed IP wrong length for inet_ntoa");
return NULL;
}
@@ -3907,7 +4899,7 @@ socket_inet_pton(PyObject *self, PyObject *args)
#if !defined(ENABLE_IPV6) && defined(AF_INET6)
if(af == AF_INET6) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"can't use AF_INET6, IPv6 is disabled");
return NULL;
}
@@ -3915,10 +4907,10 @@ socket_inet_pton(PyObject *self, PyObject *args)
retval = inet_pton(af, ip, packed);
if (retval < 0) {
- PyErr_SetFromErrno(socket_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
} else if (retval == 0) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"illegal IP address string passed to inet_pton");
return NULL;
} else if (af == AF_INET) {
@@ -3930,7 +4922,7 @@ socket_inet_pton(PyObject *self, PyObject *args)
sizeof(struct in6_addr));
#endif
} else {
- PyErr_SetString(socket_error, "unknown address family");
+ PyErr_SetString(PyExc_OSError, "unknown address family");
return NULL;
}
}
@@ -3982,7 +4974,7 @@ socket_inet_ntop(PyObject *self, PyObject *args)
retval = inet_ntop(af, packed, ip, sizeof(ip));
if (!retval) {
- PyErr_SetFromErrno(socket_error);
+ PyErr_SetFromErrno(PyExc_OSError);
return NULL;
} else {
return PyUnicode_FromString(retval);
@@ -4001,7 +4993,7 @@ socket_inet_ntop(PyObject *self, PyObject *args)
static PyObject *
socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
{
- static char* kwnames[] = {"host", "port", "family", "type", "proto",
+ static char* kwnames[] = {"host", "port", "family", "type", "proto",
"flags", 0};
struct addrinfo hints, *res;
struct addrinfo *res0 = NULL;
@@ -4016,7 +5008,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
family = socktype = protocol = flags = 0;
family = AF_UNSPEC;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iiii:getaddrinfo",
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iiii:getaddrinfo",
kwnames, &hobj, &pobj, &family, &socktype,
&protocol, &flags)) {
return NULL;
@@ -4024,7 +5016,9 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
if (hobj == Py_None) {
hptr = NULL;
} else if (PyUnicode_Check(hobj)) {
- idna = PyObject_CallMethod(hobj, "encode", "s", "idna");
+ _Py_IDENTIFIER(encode);
+
+ idna = _PyObject_CallMethodId(hobj, &PyId_encode, "s", "idna");
if (!idna)
return NULL;
assert(PyBytes_Check(idna));
@@ -4051,9 +5045,18 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
} else if (pobj == Py_None) {
pptr = (char *)NULL;
} else {
- PyErr_SetString(socket_error, "Int or String expected");
+ PyErr_SetString(PyExc_OSError, "Int or String expected");
goto err;
}
+#if defined(__APPLE__) && defined(AI_NUMERICSERV)
+ if ((flags & AI_NUMERICSERV) && (pptr == NULL || (pptr[0] == '0' && pptr[1] == 0))) {
+ /* On OSX upto at least OSX 10.8 getaddrinfo crashes
+ * if AI_NUMERICSERV is set and the servname is NULL or "0".
+ * This workaround avoids a segfault in libsystem.
+ */
+ pptr = "00";
+ }
+#endif
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = socktype;
@@ -4154,7 +5157,7 @@ socket_getnameinfo(PyObject *self, PyObject *args)
goto fail;
}
if (res->ai_next) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"sockaddr resolved to multiple addresses");
goto fail;
}
@@ -4162,7 +5165,7 @@ socket_getnameinfo(PyObject *self, PyObject *args)
case AF_INET:
{
if (PyTuple_GET_SIZE(sa) != 2) {
- PyErr_SetString(socket_error,
+ PyErr_SetString(PyExc_OSError,
"IPv4 sockaddr must be 2 tuple");
goto fail;
}
@@ -4249,6 +5252,163 @@ Set the default timeout in seconds (float) for new socket objects.\n\
A value of None indicates that new socket objects have no timeout.\n\
When the socket module is first imported, the default is None.");
+#ifdef HAVE_IF_NAMEINDEX
+/* Python API for getting interface indices and names */
+
+static PyObject *
+socket_if_nameindex(PyObject *self, PyObject *arg)
+{
+ PyObject *list;
+ int i;
+ struct if_nameindex *ni;
+
+ ni = if_nameindex();
+ if (ni == NULL) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ list = PyList_New(0);
+ if (list == NULL) {
+ if_freenameindex(ni);
+ return NULL;
+ }
+
+ for (i = 0; ni[i].if_index != 0 && i < INT_MAX; i++) {
+ PyObject *ni_tuple = Py_BuildValue("IO&",
+ ni[i].if_index, PyUnicode_DecodeFSDefault, ni[i].if_name);
+
+ if (ni_tuple == NULL || PyList_Append(list, ni_tuple) == -1) {
+ Py_XDECREF(ni_tuple);
+ Py_DECREF(list);
+ if_freenameindex(ni);
+ return NULL;
+ }
+ Py_DECREF(ni_tuple);
+ }
+
+ if_freenameindex(ni);
+ return list;
+}
+
+PyDoc_STRVAR(if_nameindex_doc,
+"if_nameindex()\n\
+\n\
+Returns a list of network interface information (index, name) tuples.");
+
+static PyObject *
+socket_if_nametoindex(PyObject *self, PyObject *args)
+{
+ PyObject *oname;
+ unsigned long index;
+
+ if (!PyArg_ParseTuple(args, "O&:if_nametoindex",
+ PyUnicode_FSConverter, &oname))
+ return NULL;
+
+ index = if_nametoindex(PyBytes_AS_STRING(oname));
+ Py_DECREF(oname);
+ if (index == 0) {
+ /* if_nametoindex() doesn't set errno */
+ PyErr_SetString(PyExc_OSError, "no interface with this name");
+ return NULL;
+ }
+
+ return PyLong_FromUnsignedLong(index);
+}
+
+PyDoc_STRVAR(if_nametoindex_doc,
+"if_nametoindex(if_name)\n\
+\n\
+Returns the interface index corresponding to the interface name if_name.");
+
+static PyObject *
+socket_if_indextoname(PyObject *self, PyObject *arg)
+{
+ unsigned long index;
+ char name[IF_NAMESIZE + 1];
+
+ index = PyLong_AsUnsignedLong(arg);
+ if (index == (unsigned long) -1)
+ return NULL;
+
+ if (if_indextoname(index, name) == NULL) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ return PyUnicode_DecodeFSDefault(name);
+}
+
+PyDoc_STRVAR(if_indextoname_doc,
+"if_indextoname(if_index)\n\
+\n\
+Returns the interface name corresponding to the interface index if_index.");
+
+#endif /* HAVE_IF_NAMEINDEX */
+
+
+#ifdef CMSG_LEN
+/* Python interface to CMSG_LEN(length). */
+
+static PyObject *
+socket_CMSG_LEN(PyObject *self, PyObject *args)
+{
+ Py_ssize_t length;
+ size_t result;
+
+ if (!PyArg_ParseTuple(args, "n:CMSG_LEN", &length))
+ return NULL;
+ if (length < 0 || !get_CMSG_LEN(length, &result)) {
+ PyErr_Format(PyExc_OverflowError, "CMSG_LEN() argument out of range");
+ return NULL;
+ }
+ return PyLong_FromSize_t(result);
+}
+
+PyDoc_STRVAR(CMSG_LEN_doc,
+"CMSG_LEN(length) -> control message length\n\
+\n\
+Return the total length, without trailing padding, of an ancillary\n\
+data item with associated data of the given length. This value can\n\
+often be used as the buffer size for recvmsg() to receive a single\n\
+item of ancillary data, but RFC 3542 requires portable applications to\n\
+use CMSG_SPACE() and thus include space for padding, even when the\n\
+item will be the last in the buffer. Raises OverflowError if length\n\
+is outside the permissible range of values.");
+
+
+#ifdef CMSG_SPACE
+/* Python interface to CMSG_SPACE(length). */
+
+static PyObject *
+socket_CMSG_SPACE(PyObject *self, PyObject *args)
+{
+ Py_ssize_t length;
+ size_t result;
+
+ if (!PyArg_ParseTuple(args, "n:CMSG_SPACE", &length))
+ return NULL;
+ if (length < 0 || !get_CMSG_SPACE(length, &result)) {
+ PyErr_SetString(PyExc_OverflowError,
+ "CMSG_SPACE() argument out of range");
+ return NULL;
+ }
+ return PyLong_FromSize_t(result);
+}
+
+PyDoc_STRVAR(CMSG_SPACE_doc,
+"CMSG_SPACE(length) -> buffer size\n\
+\n\
+Return the buffer size needed for recvmsg() to receive an ancillary\n\
+data item with associated data of the given length, along with any\n\
+trailing padding. The buffer space needed to receive multiple items\n\
+is the sum of the CMSG_SPACE() values for their associated data\n\
+lengths. Raises OverflowError if length is outside the permissible\n\
+range of values.");
+#endif /* CMSG_SPACE */
+#endif /* CMSG_LEN */
+
/* List of functions exported by this module. */
@@ -4261,6 +5421,10 @@ static PyMethodDef socket_methods[] = {
METH_VARARGS, gethostbyaddr_doc},
{"gethostname", socket_gethostname,
METH_NOARGS, gethostname_doc},
+#ifdef HAVE_SETHOSTNAME
+ {"sethostname", socket_sethostname,
+ METH_VARARGS, sethostname_doc},
+#endif
{"getservbyname", socket_getservbyname,
METH_VARARGS, getservbyname_doc},
{"getservbyport", socket_getservbyport,
@@ -4301,6 +5465,22 @@ static PyMethodDef socket_methods[] = {
METH_NOARGS, getdefaulttimeout_doc},
{"setdefaulttimeout", socket_setdefaulttimeout,
METH_O, setdefaulttimeout_doc},
+#ifdef HAVE_IF_NAMEINDEX
+ {"if_nameindex", socket_if_nameindex,
+ METH_NOARGS, if_nameindex_doc},
+ {"if_nametoindex", socket_if_nametoindex,
+ METH_VARARGS, if_nametoindex_doc},
+ {"if_indextoname", socket_if_indextoname,
+ METH_O, if_indextoname_doc},
+#endif
+#ifdef CMSG_LEN
+ {"CMSG_LEN", socket_CMSG_LEN,
+ METH_VARARGS, CMSG_LEN_doc},
+#ifdef CMSG_SPACE
+ {"CMSG_SPACE", socket_CMSG_SPACE,
+ METH_VARARGS, CMSG_SPACE_doc},
+#endif
+#endif
{NULL, NULL} /* Sentinel */
};
@@ -4433,27 +5613,24 @@ PyInit__socket(void)
if (m == NULL)
return NULL;
- socket_error = PyErr_NewException("socket.error",
- PyExc_IOError, NULL);
- if (socket_error == NULL)
- return NULL;
- PySocketModuleAPI.error = socket_error;
- Py_INCREF(socket_error);
- PyModule_AddObject(m, "error", socket_error);
+ Py_INCREF(PyExc_OSError);
+ PySocketModuleAPI.error = PyExc_OSError;
+ Py_INCREF(PyExc_OSError);
+ PyModule_AddObject(m, "error", PyExc_OSError);
socket_herror = PyErr_NewException("socket.herror",
- socket_error, NULL);
+ PyExc_OSError, NULL);
if (socket_herror == NULL)
return NULL;
Py_INCREF(socket_herror);
PyModule_AddObject(m, "herror", socket_herror);
- socket_gaierror = PyErr_NewException("socket.gaierror", socket_error,
+ socket_gaierror = PyErr_NewException("socket.gaierror", PyExc_OSError,
NULL);
if (socket_gaierror == NULL)
return NULL;
Py_INCREF(socket_gaierror);
PyModule_AddObject(m, "gaierror", socket_gaierror);
socket_timeout = PyErr_NewException("socket.timeout",
- socket_error, NULL);
+ PyExc_OSError, NULL);
if (socket_timeout == NULL)
return NULL;
PySocketModuleAPI.timeout_error = socket_timeout;
@@ -4639,6 +5816,31 @@ PyInit__socket(void)
PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
#endif
+#ifdef AF_CAN
+ /* Controller Area Network */
+ PyModule_AddIntConstant(m, "AF_CAN", AF_CAN);
+#endif
+#ifdef PF_CAN
+ /* Controller Area Network */
+ PyModule_AddIntConstant(m, "PF_CAN", PF_CAN);
+#endif
+
+/* Reliable Datagram Sockets */
+#ifdef AF_RDS
+ PyModule_AddIntConstant(m, "AF_RDS", AF_RDS);
+#endif
+#ifdef PF_RDS
+ PyModule_AddIntConstant(m, "PF_RDS", PF_RDS);
+#endif
+
+/* Kernel event messages */
+#ifdef PF_SYSTEM
+ PyModule_AddIntConstant(m, "PF_SYSTEM", PF_SYSTEM);
+#endif
+#ifdef AF_SYSTEM
+ PyModule_AddIntConstant(m, "AF_SYSTEM", AF_SYSTEM);
+#endif
+
#ifdef AF_PACKET
PyModule_AddIntMacro(m, AF_PACKET);
#endif
@@ -4788,6 +5990,18 @@ PyInit__socket(void)
#ifdef SO_SETFIB
PyModule_AddIntConstant(m, "SO_SETFIB", SO_SETFIB);
#endif
+#ifdef SO_PASSCRED
+ PyModule_AddIntConstant(m, "SO_PASSCRED", SO_PASSCRED);
+#endif
+#ifdef SO_PEERCRED
+ PyModule_AddIntConstant(m, "SO_PEERCRED", SO_PEERCRED);
+#endif
+#ifdef LOCAL_PEERCRED
+ PyModule_AddIntConstant(m, "LOCAL_PEERCRED", LOCAL_PEERCRED);
+#endif
+#ifdef SO_BINDTODEVICE
+ PyModule_AddIntMacro(m, SO_BINDTODEVICE);
+#endif
/* Maximum number of connections for "listen" */
#ifdef SOMAXCONN
@@ -4796,6 +6010,17 @@ PyInit__socket(void)
PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */
#endif
+ /* Ancilliary message types */
+#ifdef SCM_RIGHTS
+ PyModule_AddIntConstant(m, "SCM_RIGHTS", SCM_RIGHTS);
+#endif
+#ifdef SCM_CREDENTIALS
+ PyModule_AddIntConstant(m, "SCM_CREDENTIALS", SCM_CREDENTIALS);
+#endif
+#ifdef SCM_CREDS
+ PyModule_AddIntConstant(m, "SCM_CREDS", SCM_CREDS);
+#endif
+
/* Flags for send, recv */
#ifdef MSG_OOB
PyModule_AddIntConstant(m, "MSG_OOB", MSG_OOB);
@@ -4827,6 +6052,33 @@ PyInit__socket(void)
#ifdef MSG_ETAG
PyModule_AddIntConstant(m, "MSG_ETAG", MSG_ETAG);
#endif
+#ifdef MSG_NOSIGNAL
+ PyModule_AddIntConstant(m, "MSG_NOSIGNAL", MSG_NOSIGNAL);
+#endif
+#ifdef MSG_NOTIFICATION
+ PyModule_AddIntConstant(m, "MSG_NOTIFICATION", MSG_NOTIFICATION);
+#endif
+#ifdef MSG_CMSG_CLOEXEC
+ PyModule_AddIntConstant(m, "MSG_CMSG_CLOEXEC", MSG_CMSG_CLOEXEC);
+#endif
+#ifdef MSG_ERRQUEUE
+ PyModule_AddIntConstant(m, "MSG_ERRQUEUE", MSG_ERRQUEUE);
+#endif
+#ifdef MSG_CONFIRM
+ PyModule_AddIntConstant(m, "MSG_CONFIRM", MSG_CONFIRM);
+#endif
+#ifdef MSG_MORE
+ PyModule_AddIntConstant(m, "MSG_MORE", MSG_MORE);
+#endif
+#ifdef MSG_EOF
+ PyModule_AddIntConstant(m, "MSG_EOF", MSG_EOF);
+#endif
+#ifdef MSG_BCAST
+ PyModule_AddIntConstant(m, "MSG_BCAST", MSG_BCAST);
+#endif
+#ifdef MSG_MCAST
+ PyModule_AddIntConstant(m, "MSG_MCAST", MSG_MCAST);
+#endif
/* Protocol level and numbers, usable for [gs]etsockopt */
#ifdef SOL_SOCKET
@@ -4862,6 +6114,49 @@ PyInit__socket(void)
#else
PyModule_AddIntConstant(m, "SOL_UDP", 17);
#endif
+#ifdef SOL_CAN_BASE
+ PyModule_AddIntConstant(m, "SOL_CAN_BASE", SOL_CAN_BASE);
+#endif
+#ifdef SOL_CAN_RAW
+ PyModule_AddIntConstant(m, "SOL_CAN_RAW", SOL_CAN_RAW);
+ PyModule_AddIntConstant(m, "CAN_RAW", CAN_RAW);
+#endif
+#ifdef HAVE_LINUX_CAN_H
+ PyModule_AddIntConstant(m, "CAN_EFF_FLAG", CAN_EFF_FLAG);
+ PyModule_AddIntConstant(m, "CAN_RTR_FLAG", CAN_RTR_FLAG);
+ PyModule_AddIntConstant(m, "CAN_ERR_FLAG", CAN_ERR_FLAG);
+
+ PyModule_AddIntConstant(m, "CAN_SFF_MASK", CAN_SFF_MASK);
+ PyModule_AddIntConstant(m, "CAN_EFF_MASK", CAN_EFF_MASK);
+ PyModule_AddIntConstant(m, "CAN_ERR_MASK", CAN_ERR_MASK);
+#endif
+#ifdef HAVE_LINUX_CAN_RAW_H
+ PyModule_AddIntConstant(m, "CAN_RAW_FILTER", CAN_RAW_FILTER);
+ PyModule_AddIntConstant(m, "CAN_RAW_ERR_FILTER", CAN_RAW_ERR_FILTER);
+ PyModule_AddIntConstant(m, "CAN_RAW_LOOPBACK", CAN_RAW_LOOPBACK);
+ PyModule_AddIntConstant(m, "CAN_RAW_RECV_OWN_MSGS", CAN_RAW_RECV_OWN_MSGS);
+#endif
+#ifdef SOL_RDS
+ PyModule_AddIntConstant(m, "SOL_RDS", SOL_RDS);
+#endif
+#ifdef RDS_CANCEL_SENT_TO
+ PyModule_AddIntConstant(m, "RDS_CANCEL_SENT_TO", RDS_CANCEL_SENT_TO);
+#endif
+#ifdef RDS_GET_MR
+ PyModule_AddIntConstant(m, "RDS_GET_MR", RDS_GET_MR);
+#endif
+#ifdef RDS_FREE_MR
+ PyModule_AddIntConstant(m, "RDS_FREE_MR", RDS_FREE_MR);
+#endif
+#ifdef RDS_RECVERR
+ PyModule_AddIntConstant(m, "RDS_RECVERR", RDS_RECVERR);
+#endif
+#ifdef RDS_CONG_MONITOR
+ PyModule_AddIntConstant(m, "RDS_CONG_MONITOR", RDS_CONG_MONITOR);
+#endif
+#ifdef RDS_GET_MR_FOR_DEST
+ PyModule_AddIntConstant(m, "RDS_GET_MR_FOR_DEST", RDS_GET_MR_FOR_DEST);
+#endif
#ifdef IPPROTO_IP
PyModule_AddIntConstant(m, "IPPROTO_IP", IPPROTO_IP);
#else
@@ -4966,6 +6261,9 @@ PyInit__socket(void)
#ifdef IPPROTO_VRRP
PyModule_AddIntConstant(m, "IPPROTO_VRRP", IPPROTO_VRRP);
#endif
+#ifdef IPPROTO_SCTP
+ PyModule_AddIntConstant(m, "IPPROTO_SCTP", IPPROTO_SCTP);
+#endif
#ifdef IPPROTO_BIP
PyModule_AddIntConstant(m, "IPPROTO_BIP", IPPROTO_BIP);
#endif
@@ -4979,6 +6277,10 @@ PyInit__socket(void)
PyModule_AddIntConstant(m, "IPPROTO_MAX", IPPROTO_MAX);
#endif
+#ifdef SYSPROTO_CONTROL
+ PyModule_AddIntConstant(m, "SYSPROTO_CONTROL", SYSPROTO_CONTROL);
+#endif
+
/* Some port configuration */
#ifdef IPPORT_RESERVED
PyModule_AddIntConstant(m, "IPPORT_RESERVED", IPPORT_RESERVED);
@@ -5081,6 +6383,9 @@ PyInit__socket(void)
#ifdef IP_MAX_MEMBERSHIPS
PyModule_AddIntConstant(m, "IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS);
#endif
+#ifdef IP_TRANSPARENT
+ PyModule_AddIntConstant(m, "IP_TRANSPARENT", IP_TRANSPARENT);
+#endif
/* IPv6 [gs]etsockopt options, defined in RFC2553 */
#ifdef IPV6_JOIN_GROUP
@@ -5211,6 +6516,44 @@ PyInit__socket(void)
PyModule_AddIntConstant(m, "IPX_TYPE", IPX_TYPE);
#endif
+/* Reliable Datagram Sockets */
+#ifdef RDS_CMSG_RDMA_ARGS
+ PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_ARGS", RDS_CMSG_RDMA_ARGS);
+#endif
+#ifdef RDS_CMSG_RDMA_DEST
+ PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_DEST", RDS_CMSG_RDMA_DEST);
+#endif
+#ifdef RDS_CMSG_RDMA_MAP
+ PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_MAP", RDS_CMSG_RDMA_MAP);
+#endif
+#ifdef RDS_CMSG_RDMA_STATUS
+ PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_STATUS", RDS_CMSG_RDMA_STATUS);
+#endif
+#ifdef RDS_CMSG_RDMA_UPDATE
+ PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_UPDATE", RDS_CMSG_RDMA_UPDATE);
+#endif
+#ifdef RDS_RDMA_READWRITE
+ PyModule_AddIntConstant(m, "RDS_RDMA_READWRITE", RDS_RDMA_READWRITE);
+#endif
+#ifdef RDS_RDMA_FENCE
+ PyModule_AddIntConstant(m, "RDS_RDMA_FENCE", RDS_RDMA_FENCE);
+#endif
+#ifdef RDS_RDMA_INVALIDATE
+ PyModule_AddIntConstant(m, "RDS_RDMA_INVALIDATE", RDS_RDMA_INVALIDATE);
+#endif
+#ifdef RDS_RDMA_USE_ONCE
+ PyModule_AddIntConstant(m, "RDS_RDMA_USE_ONCE", RDS_RDMA_USE_ONCE);
+#endif
+#ifdef RDS_RDMA_DONTWAIT
+ PyModule_AddIntConstant(m, "RDS_RDMA_DONTWAIT", RDS_RDMA_DONTWAIT);
+#endif
+#ifdef RDS_RDMA_NOTIFY_ME
+ PyModule_AddIntConstant(m, "RDS_RDMA_NOTIFY_ME", RDS_RDMA_NOTIFY_ME);
+#endif
+#ifdef RDS_RDMA_SILENT
+ PyModule_AddIntConstant(m, "RDS_RDMA_SILENT", RDS_RDMA_SILENT);
+#endif
+
/* get{addr,name}info parameters */
#ifdef EAI_ADDRFAMILY
PyModule_AddIntConstant(m, "EAI_ADDRFAMILY", EAI_ADDRFAMILY);
@@ -5337,7 +6680,7 @@ PyInit__socket(void)
DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS};
const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS"};
int i;
- for(i = 0; i<sizeof(codes)/sizeof(*codes); ++i) {
+ for(i = 0; i<Py_ARRAY_LENGTH(codes); ++i) {
PyObject *tmp;
tmp = PyLong_FromUnsignedLong(codes[i]);
if (tmp == NULL)
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
index f064795b80..0435878721 100644
--- a/Modules/socketmodule.h
+++ b/Modules/socketmodule.h
@@ -59,9 +59,12 @@ typedef int socklen_t;
#include <bluetooth.h>
#endif
+#ifdef HAVE_NET_IF_H
+# include <net/if.h>
+#endif
+
#ifdef HAVE_NETPACKET_PACKET_H
# include <sys/ioctl.h>
-# include <net/if.h>
# include <netpacket/packet.h>
#endif
@@ -69,6 +72,21 @@ typedef int socklen_t;
# include <linux/tipc.h>
#endif
+#ifdef HAVE_LINUX_CAN_H
+#include <linux/can.h>
+#endif
+
+#ifdef HAVE_LINUX_CAN_RAW_H
+#include <linux/can/raw.h>
+#endif
+
+#ifdef HAVE_SYS_SYS_DOMAIN_H
+#include <sys/sys_domain.h>
+#endif
+#ifdef HAVE_SYS_KERN_CONTROL_H
+#include <sys/kern_control.h>
+#endif
+
#ifndef Py__SOCKET_H
#define Py__SOCKET_H
#ifdef __cplusplus
@@ -104,6 +122,7 @@ typedef int SOCKET_T;
/* Socket address */
typedef union sock_addr {
struct sockaddr_in in;
+ struct sockaddr sa;
#ifdef AF_UNIX
struct sockaddr_un un;
#endif
@@ -123,6 +142,12 @@ typedef union sock_addr {
#ifdef HAVE_NETPACKET_PACKET_H
struct sockaddr_ll ll;
#endif
+#ifdef HAVE_LINUX_CAN_H
+ struct sockaddr_can can;
+#endif
+#ifdef HAVE_SYS_KERN_CONTROL_H
+ struct sockaddr_ctl ctl;
+#endif
} sock_addr_t;
/* The object holding a socket. It holds some extra information,
diff --git a/Modules/sre.h b/Modules/sre.h
index 6819698558..0a8f0cfe3d 100644
--- a/Modules/sre.h
+++ b/Modules/sre.h
@@ -19,7 +19,7 @@
#if SIZEOF_SIZE_T > 4
# define SRE_MAXREPEAT (~(SRE_CODE)0)
#else
-# define SRE_MAXREPEAT ((SRE_CODE)PY_SSIZE_T_MAX + 1u)
+# define SRE_MAXREPEAT ((SRE_CODE)PY_SSIZE_T_MAX)
#endif
typedef struct {
@@ -31,7 +31,8 @@ typedef struct {
PyObject* pattern; /* pattern source (or None) */
int flags; /* flags used when compiling pattern source */
PyObject *weakreflist; /* List of weak references */
- int charsize; /* pattern charsize (or -1) */
+ int logical_charsize; /* pattern charsize (or -1) */
+ int charsize;
Py_buffer view;
/* pattern code */
Py_ssize_t codesize;
@@ -73,6 +74,7 @@ typedef struct {
PyObject* string;
Py_ssize_t pos, endpos;
/* character size */
+ int logical_charsize; /* kind of thing: 1 - bytes, 2/4 - unicode */
int charsize;
/* registers */
Py_ssize_t lastindex;
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index 02a81f11dc..37df82d8b0 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -32,7 +32,7 @@ symtable_symtable(PyObject *self, PyObject *args)
st = Py_SymtableString(str, filename, start);
if (st == NULL)
return NULL;
- t = st->st_blocks;
+ t = (PyObject *)st->st_top;
Py_INCREF(t);
PyMem_Free((void *)st->st_future);
PySymtable_Free(st);
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index 5b86963fc8..fc3f37595b 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -70,7 +70,7 @@ syslog_get_argv(void)
Py_ssize_t argv_len, scriptlen;
PyObject *scriptobj;
- Py_UNICODE *atslash, *atstart;
+ Py_ssize_t slash;
PyObject *argv = PySys_GetObject("argv");
if (argv == NULL) {
@@ -90,16 +90,16 @@ syslog_get_argv(void)
if (!PyUnicode_Check(scriptobj)) {
return(NULL);
}
- scriptlen = PyUnicode_GET_SIZE(scriptobj);
+ scriptlen = PyUnicode_GET_LENGTH(scriptobj);
if (scriptlen == 0) {
return(NULL);
}
- atstart = PyUnicode_AS_UNICODE(scriptobj);
- atslash = Py_UNICODE_strrchr(atstart, SEP);
- if (atslash) {
- return(PyUnicode_FromUnicode(atslash + 1,
- scriptlen - (atslash - atstart) - 1));
+ slash = PyUnicode_FindChar(scriptobj, SEP, 0, scriptlen, -1);
+ if (slash == -2)
+ return NULL;
+ if (slash != -1) {
+ return PyUnicode_Substring(scriptobj, slash, scriptlen);
} else {
Py_INCREF(scriptobj);
return(scriptobj);
@@ -197,8 +197,7 @@ syslog_closelog(PyObject *self, PyObject *unused)
{
if (S_log_open) {
closelog();
- Py_XDECREF(S_ident_o);
- S_ident_o = NULL;
+ Py_CLEAR(S_ident_o);
S_log_open = 0;
}
Py_INCREF(Py_None);
@@ -291,6 +290,9 @@ PyInit_syslog(void)
PyModule_AddIntConstant(m, "LOG_PID", LOG_PID);
PyModule_AddIntConstant(m, "LOG_CONS", LOG_CONS);
PyModule_AddIntConstant(m, "LOG_NDELAY", LOG_NDELAY);
+#ifdef LOG_ODELAY
+ PyModule_AddIntConstant(m, "LOG_ODELAY", LOG_ODELAY);
+#endif
#ifdef LOG_NOWAIT
PyModule_AddIntConstant(m, "LOG_NOWAIT", LOG_NOWAIT);
#endif
@@ -331,5 +333,10 @@ PyInit_syslog(void)
PyModule_AddIntConstant(m, "LOG_CRON", LOG_CRON);
PyModule_AddIntConstant(m, "LOG_UUCP", LOG_UUCP);
PyModule_AddIntConstant(m, "LOG_NEWS", LOG_NEWS);
+
+#ifdef LOG_AUTHPRIV
+ PyModule_AddIntConstant(m, "LOG_AUTHPRIV", LOG_AUTHPRIV);
+#endif
+
return m;
}
diff --git a/Modules/termios.c b/Modules/termios.c
index edeb6f5c45..b78d33e688 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -9,11 +9,6 @@
#endif
#include <termios.h>
-#ifdef __osf__
-/* On OSF, sys/ioctl.h requires that struct termio already be defined,
- * so this needs to be included first on that platform. */
-#include <termio.h>
-#endif
#include <sys/ioctl.h>
/* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR,
diff --git a/Modules/testcapi_long.h b/Modules/testcapi_long.h
index fa94fd6bea..6bddad7bb5 100644
--- a/Modules/testcapi_long.h
+++ b/Modules/testcapi_long.h
@@ -33,8 +33,7 @@ TESTNAME(PyObject *error(const char*))
unsigned TYPENAME uin, uout;
/* For 0, 1, 2 use base; for 3, 4, 5 use -base */
- uin = j < 3 ? base
- : (unsigned TYPENAME)(-(TYPENAME)base);
+ uin = j < 3 ? base : 0U - base;
/* For 0 & 3, subtract 1.
* For 1 & 4, leave alone.
@@ -177,6 +176,32 @@ TESTNAME(PyObject *error(const char*))
Py_DECREF(one);
}
+ /* Test F_PY_TO_{S,U} on non-pylong input. This should raise a TypeError. */
+ {
+ TYPENAME out;
+ unsigned TYPENAME uout;
+
+ Py_INCREF(Py_None);
+
+ out = F_PY_TO_S(Py_None);
+ if (out != (TYPENAME)-1 || !PyErr_Occurred())
+ return error("PyLong_AsXXX(None) didn't complain");
+ if (!PyErr_ExceptionMatches(PyExc_TypeError))
+ return error("PyLong_AsXXX(None) raised "
+ "something other than TypeError");
+ PyErr_Clear();
+
+ uout = F_PY_TO_U(Py_None);
+ if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
+ return error("PyLong_AsXXX(None) didn't complain");
+ if (!PyErr_ExceptionMatches(PyExc_TypeError))
+ return error("PyLong_AsXXX(None) raised "
+ "something other than TypeError");
+ PyErr_Clear();
+
+ Py_DECREF(Py_None);
+ }
+
Py_INCREF(Py_None);
return Py_None;
}
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 35162ff133..42ec3662e8 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1,13 +1,20 @@
/* Time module */
#include "Python.h"
-#include "_time.h"
#include <ctype.h>
+#ifdef HAVE_SYS_TIMES_H
+#include <sys/times.h>
+#endif
+
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
-#endif /* HAVE_SYS_TYPES_H */
+#endif
+
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
#ifdef QUICKWIN
#include <io.h>
@@ -21,19 +28,6 @@
#include <windows.h>
#include "pythread.h"
-/* helper to allow us to interrupt sleep() on Windows*/
-static HANDLE hInterruptEvent = NULL;
-static BOOL WINAPI PyCtrlHandler(DWORD dwCtrlType)
-{
- SetEvent(hInterruptEvent);
- /* allow other default handlers to be called.
- Default Python handler will setup the
- KeyboardInterrupt exception.
- */
- return FALSE;
-}
-static long main_thread;
-
#if defined(__BORLANDC__)
/* These overrides not needed for Win32 */
#define timezone _timezone
@@ -43,11 +37,6 @@ static long main_thread;
#endif /* MS_WINDOWS */
#endif /* !__WATCOMC__ || __QNX__ */
-#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
-/* Win32 has better clock replacement; we have our own version below. */
-#undef HAVE_CLOCK
-#endif /* MS_WINDOWS && !defined(__BORLANDC__) */
-
#if defined(PYOS_OS2)
#define INCL_DOS
#define INCL_ERRORS
@@ -58,23 +47,22 @@ static long main_thread;
#include <sys/time.h>
#endif
+#if defined(__APPLE__)
+#include <mach/mach_time.h>
+#endif
+
/* Forward declarations */
static int floatsleep(double);
-static double floattime(void);
+static PyObject* floattime(_Py_clock_info_t *info);
-/* For Y2K check */
-static PyObject *moddict = NULL;
+#ifdef MS_WINDOWS
+static OSVERSIONINFOEX winver;
+#endif
static PyObject *
time_time(PyObject *self, PyObject *unused)
{
- double secs;
- secs = floattime();
- if (secs == 0.0) {
- PyErr_SetFromErrno(PyExc_IOError);
- return NULL;
- }
- return PyFloat_FromDouble(secs);
+ return floattime(NULL);
}
PyDoc_STRVAR(time_doc,
@@ -83,7 +71,7 @@ PyDoc_STRVAR(time_doc,
Return the current time in seconds since the Epoch.\n\
Fractions of a second may be present if the system clock provides them.");
-#ifdef HAVE_CLOCK
+#if defined(HAVE_CLOCK)
#ifndef CLOCKS_PER_SEC
#ifdef CLK_TCK
@@ -94,42 +82,82 @@ Fractions of a second may be present if the system clock provides them.");
#endif
static PyObject *
-time_clock(PyObject *self, PyObject *unused)
+floatclock(_Py_clock_info_t *info)
{
- return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC);
+ clock_t value;
+ value = clock();
+ if (value == (clock_t)-1) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "the processor time used is not available "
+ "or its value cannot be represented");
+ return NULL;
+ }
+ if (info) {
+ info->implementation = "clock()";
+ info->resolution = 1.0 / (double)CLOCKS_PER_SEC;
+ info->monotonic = 1;
+ info->adjustable = 0;
+ }
+ return PyFloat_FromDouble((double)value / CLOCKS_PER_SEC);
}
#endif /* HAVE_CLOCK */
#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
-/* Due to Mark Hammond and Tim Peters */
-static PyObject *
-time_clock(PyObject *self, PyObject *unused)
+#define WIN32_PERF_COUNTER
+/* Win32 has better clock replacement; we have our own version, due to Mark
+ Hammond and Tim Peters */
+static int
+win_perf_counter(_Py_clock_info_t *info, PyObject **result)
{
- static LARGE_INTEGER ctrStart;
- static double divisor = 0.0;
+ static LONGLONG cpu_frequency = 0;
+ static LONGLONG ctrStart;
LARGE_INTEGER now;
double diff;
- if (divisor == 0.0) {
+ if (cpu_frequency == 0) {
LARGE_INTEGER freq;
- QueryPerformanceCounter(&ctrStart);
+ QueryPerformanceCounter(&now);
+ ctrStart = now.QuadPart;
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
/* Unlikely to happen - this works on all intel
machines at least! Revert to clock() */
- return PyFloat_FromDouble(((double)clock()) /
- CLOCKS_PER_SEC);
+ *result = NULL;
+ return -1;
}
- divisor = (double)freq.QuadPart;
+ cpu_frequency = freq.QuadPart;
}
QueryPerformanceCounter(&now);
- diff = (double)(now.QuadPart - ctrStart.QuadPart);
- return PyFloat_FromDouble(diff / divisor);
+ diff = (double)(now.QuadPart - ctrStart);
+ if (info) {
+ info->implementation = "QueryPerformanceCounter()";
+ info->resolution = 1.0 / (double)cpu_frequency;
+ info->monotonic = 1;
+ info->adjustable = 0;
+ }
+ *result = PyFloat_FromDouble(diff / (double)cpu_frequency);
+ return 0;
}
+#endif
-#define HAVE_CLOCK /* So it gets included in the methods */
-#endif /* MS_WINDOWS && !defined(__BORLANDC__) */
+#if defined(WIN32_PERF_COUNTER) || defined(HAVE_CLOCK)
+#define PYCLOCK
+static PyObject*
+pyclock(_Py_clock_info_t *info)
+{
+#ifdef WIN32_PERF_COUNTER
+ PyObject *res;
+ if (win_perf_counter(info, &res) == 0)
+ return res;
+#endif
+ return floatclock(info);
+}
+
+static PyObject *
+time_clock(PyObject *self, PyObject *unused)
+{
+ return pyclock(NULL);
+}
-#ifdef HAVE_CLOCK
PyDoc_STRVAR(clock_doc,
"clock() -> floating point number\n\
\n\
@@ -138,12 +166,97 @@ the first call to clock(). This has as much precision as the system\n\
records.");
#endif
+#ifdef HAVE_CLOCK_GETTIME
+static PyObject *
+time_clock_gettime(PyObject *self, PyObject *args)
+{
+ int ret;
+ int clk_id;
+ struct timespec tp;
+
+ if (!PyArg_ParseTuple(args, "i:clock_gettime", &clk_id))
+ return NULL;
+
+ ret = clock_gettime((clockid_t)clk_id, &tp);
+ if (ret != 0) {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return NULL;
+ }
+ return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9);
+}
+
+PyDoc_STRVAR(clock_gettime_doc,
+"clock_gettime(clk_id) -> floating point number\n\
+\n\
+Return the time of the specified clock clk_id.");
+
+static PyObject *
+time_clock_settime(PyObject *self, PyObject *args)
+{
+ int clk_id;
+ PyObject *obj;
+ time_t tv_sec;
+ long tv_nsec;
+ struct timespec tp;
+ int ret;
+
+ if (!PyArg_ParseTuple(args, "iO:clock_settime", &clk_id, &obj))
+ return NULL;
+
+ if (_PyTime_ObjectToTimespec(obj, &tv_sec, &tv_nsec) == -1)
+ return NULL;
+ tp.tv_sec = tv_sec;
+ tp.tv_nsec = tv_nsec;
+
+ ret = clock_settime((clockid_t)clk_id, &tp);
+ if (ret != 0) {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return NULL;
+ }
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(clock_settime_doc,
+"clock_settime(clk_id, time)\n\
+\n\
+Set the time of the specified clock clk_id.");
+
+static PyObject *
+time_clock_getres(PyObject *self, PyObject *args)
+{
+ int ret;
+ int clk_id;
+ struct timespec tp;
+
+ if (!PyArg_ParseTuple(args, "i:clock_getres", &clk_id))
+ return NULL;
+
+ ret = clock_getres((clockid_t)clk_id, &tp);
+ if (ret != 0) {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return NULL;
+ }
+
+ return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9);
+}
+
+PyDoc_STRVAR(clock_getres_doc,
+"clock_getres(clk_id) -> floating point number\n\
+\n\
+Return the resolution (precision) of the specified clock clk_id.");
+#endif /* HAVE_CLOCK_GETTIME */
+
static PyObject *
time_sleep(PyObject *self, PyObject *args)
{
double secs;
if (!PyArg_ParseTuple(args, "d:sleep", &secs))
return NULL;
+ if (secs < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "sleep length must be non-negative");
+ return NULL;
+ }
if (floatsleep(secs) != 0)
return NULL;
Py_INCREF(Py_None);
@@ -166,6 +279,10 @@ static PyStructSequence_Field struct_time_type_fields[] = {
{"tm_wday", "day of week, range [0, 6], Monday is 0"},
{"tm_yday", "day of year, range [1, 366]"},
{"tm_isdst", "1 if summer time is in effect, 0 if not, and -1 if unknown"},
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ {"tm_zone", "abbreviation of timezone name"},
+ {"tm_gmtoff", "offset from UTC in seconds"},
+#endif /* HAVE_STRUCT_TM_TM_ZONE */
{0}
};
@@ -185,6 +302,7 @@ static PyStructSequence_Desc struct_time_type_desc = {
static int initialized;
static PyTypeObject StructTimeType;
+
static PyObject *
tmtotuple(struct tm *p)
{
@@ -203,6 +321,11 @@ tmtotuple(struct tm *p)
SET(6, (p->tm_wday + 6) % 7); /* Want Monday == 0 */
SET(7, p->tm_yday + 1); /* Want January, 1 == 1 */
SET(8, p->tm_isdst);
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ PyStructSequence_SET_ITEM(v, 9,
+ PyUnicode_DecodeLocale(p->tm_zone, "surrogateescape"));
+ SET(10, p->tm_gmtoff);
+#endif /* HAVE_STRUCT_TM_TM_ZONE */
#undef SET
if (PyErr_Occurred()) {
Py_XDECREF(v);
@@ -212,55 +335,49 @@ tmtotuple(struct tm *p)
return v;
}
-static PyObject *
-time_convert(double when, struct tm * (*function)(const time_t *))
-{
- struct tm *p;
- time_t whent = _PyTime_DoubleToTimet(when);
-
- if (whent == (time_t)-1 && PyErr_Occurred())
- return NULL;
- errno = 0;
- p = function(&whent);
- if (p == NULL) {
-#ifdef EINVAL
- if (errno == 0)
- errno = EINVAL;
-#endif
- return PyErr_SetFromErrno(PyExc_ValueError);
- }
- return tmtotuple(p);
-}
-
/* Parse arg tuple that can contain an optional float-or-None value;
format needs to be "|O:name".
Returns non-zero on success (parallels PyArg_ParseTuple).
*/
static int
-parse_time_double_args(PyObject *args, char *format, double *pwhen)
+parse_time_t_args(PyObject *args, char *format, time_t *pwhen)
{
PyObject *ot = NULL;
+ time_t whent;
if (!PyArg_ParseTuple(args, format, &ot))
return 0;
- if (ot == NULL || ot == Py_None)
- *pwhen = floattime();
+ if (ot == NULL || ot == Py_None) {
+ whent = time(NULL);
+ }
else {
- double when = PyFloat_AsDouble(ot);
- if (PyErr_Occurred())
+ if (_PyTime_ObjectToTime_t(ot, &whent) == -1)
return 0;
- *pwhen = when;
}
+ *pwhen = whent;
return 1;
}
static PyObject *
time_gmtime(PyObject *self, PyObject *args)
{
- double when;
- if (!parse_time_double_args(args, "|O:gmtime", &when))
+ time_t when;
+ struct tm buf, *local;
+
+ if (!parse_time_t_args(args, "|O:gmtime", &when))
return NULL;
- return time_convert(when, gmtime);
+
+ errno = 0;
+ local = gmtime(&when);
+ if (local == NULL) {
+#ifdef EINVAL
+ if (errno == 0)
+ errno = EINVAL;
+#endif
+ return PyErr_SetFromErrno(PyExc_OSError);
+ }
+ buf = *local;
+ return tmtotuple(&buf);
}
PyDoc_STRVAR(gmtime_doc,
@@ -268,15 +385,42 @@ PyDoc_STRVAR(gmtime_doc,
tm_sec, tm_wday, tm_yday, tm_isdst)\n\
\n\
Convert seconds since the Epoch to a time tuple expressing UTC (a.k.a.\n\
-GMT). When 'seconds' is not passed in, convert the current time instead.");
+GMT). When 'seconds' is not passed in, convert the current time instead.\n\
+\n\
+If the platform supports the tm_gmtoff and tm_zone, they are available as\n\
+attributes only.");
+
+static int
+pylocaltime(time_t *timep, struct tm *result)
+{
+ struct tm *local;
+
+ assert (timep != NULL);
+ local = localtime(timep);
+ if (local == NULL) {
+ /* unconvertible time */
+#ifdef EINVAL
+ if (errno == 0)
+ errno = EINVAL;
+#endif
+ PyErr_SetFromErrno(PyExc_OSError);
+ return -1;
+ }
+ *result = *local;
+ return 0;
+}
static PyObject *
time_localtime(PyObject *self, PyObject *args)
{
- double when;
- if (!parse_time_double_args(args, "|O:localtime", &when))
+ time_t when;
+ struct tm buf;
+
+ if (!parse_time_t_args(args, "|O:localtime", &when))
return NULL;
- return time_convert(when, localtime);
+ if (pylocaltime(&when, &buf) == -1)
+ return NULL;
+ return tmtotuple(&buf);
}
PyDoc_STRVAR(localtime_doc,
@@ -307,53 +451,21 @@ gettmarg(PyObject *args, struct tm *p)
&p->tm_hour, &p->tm_min, &p->tm_sec,
&p->tm_wday, &p->tm_yday, &p->tm_isdst))
return 0;
-
- /* If year is specified with less than 4 digits, its interpretation
- * depends on the accept2dyear value.
- *
- * If accept2dyear is true (default), a backward compatibility behavior is
- * invoked as follows:
- *
- * - for 2-digit year, century is guessed according to POSIX rules for
- * %y strptime format: 21st century for y < 69, 20th century
- * otherwise. A deprecation warning is issued when century
- * information is guessed in this way.
- *
- * - for 3-digit or negative year, a ValueError exception is raised.
- *
- * If accept2dyear is false (set by the program or as a result of a
- * non-empty value assigned to PYTHONY2K environment variable) all year
- * values are interpreted as given.
- */
- if (y < 1000) {
- PyObject *accept = PyDict_GetItemString(moddict,
- "accept2dyear");
- if (accept != NULL) {
- int acceptval = PyObject_IsTrue(accept);
- if (acceptval == -1)
- return 0;
- if (acceptval) {
- if (0 <= y && y < 69)
- y += 2000;
- else if (69 <= y && y < 100)
- y += 1900;
- else {
- PyErr_SetString(PyExc_ValueError,
- "year out of range");
- return 0;
- }
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "Century info guessed for a 2-digit year.", 1) != 0)
- return 0;
- }
- }
- else
- return 0;
- }
p->tm_year = y - 1900;
p->tm_mon--;
p->tm_wday = (p->tm_wday + 1) % 7;
p->tm_yday--;
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ if (Py_TYPE(args) == &StructTimeType) {
+ PyObject *item;
+ item = PyTuple_GET_ITEM(args, 9);
+ p->tm_zone = item == Py_None ? NULL : _PyUnicode_AsString(item);
+ item = PyTuple_GET_ITEM(args, 10);
+ p->tm_gmtoff = item == Py_None ? 0 : PyLong_AsLong(item);
+ if (PyErr_Occurred())
+ return 0;
+ }
+#endif /* HAVE_STRUCT_TM_TM_ZONE */
return 1;
}
@@ -470,12 +582,13 @@ time_strftime(PyObject *self, PyObject *args)
if (tup == NULL) {
time_t tt = time(NULL);
- buf = *localtime(&tt);
+ if (pylocaltime(&tt, &buf) == -1)
+ return NULL;
}
else if (!gettmarg(tup, &buf) || !checktm(&buf))
return NULL;
-#if defined(_MSC_VER) || defined(sun)
+#if defined(_MSC_VER) || defined(sun) || defined(_AIX)
if (buf.tm_year + 1900 < 1 || 9999 < buf.tm_year + 1900) {
PyErr_SetString(PyExc_ValueError,
"strftime() requires year in [1; 9999]");
@@ -498,7 +611,7 @@ time_strftime(PyObject *self, PyObject *args)
fmt = format;
#else
/* Convert the unicode string to an ascii one */
- format = PyUnicode_EncodeFSDefault(format_arg);
+ format = PyUnicode_EncodeLocale(format_arg, "surrogateescape");
if (format == NULL)
return NULL;
fmt = PyBytes_AS_STRING(format);
@@ -519,6 +632,13 @@ time_strftime(PyObject *self, PyObject *args)
Py_DECREF(format);
return NULL;
}
+ if ((outbuf[1] == 'y') && buf.tm_year < 0)
+ {
+ PyErr_SetString(PyExc_ValueError,
+ "format %y requires year >= 1900 on Windows");
+ Py_DECREF(format);
+ return NULL;
+ }
}
#endif
@@ -549,7 +669,8 @@ time_strftime(PyObject *self, PyObject *args)
#ifdef HAVE_WCSFTIME
ret = PyUnicode_FromWideChar(outbuf, buflen);
#else
- ret = PyUnicode_DecodeFSDefaultAndSize(outbuf, buflen);
+ ret = PyUnicode_DecodeLocaleAndSize(outbuf, buflen,
+ "surrogateescape");
#endif
PyMem_Free(outbuf);
break;
@@ -587,11 +708,12 @@ time_strptime(PyObject *self, PyObject *args)
{
PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
PyObject *strptime_result;
+ _Py_IDENTIFIER(_strptime_time);
if (!strptime_module)
return NULL;
- strptime_result = PyObject_CallMethod(strptime_module,
- "_strptime_time", "O", args);
+ strptime_result = _PyObject_CallMethodId(strptime_module,
+ &PyId__strptime_time, "O", args);
Py_DECREF(strptime_module);
return strptime_result;
}
@@ -608,31 +730,20 @@ _asctime(struct tm *timeptr)
{
/* Inspired by Open Group reference implementation available at
* http://pubs.opengroup.org/onlinepubs/009695399/functions/asctime.html */
- static char wday_name[7][3] = {
+ static char wday_name[7][4] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
- static char mon_name[12][3] = {
+ static char mon_name[12][4] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
- char buf[20]; /* 'Sun Sep 16 01:03:52\0' */
- int n;
-
- n = PyOS_snprintf(buf, sizeof(buf), "%.3s %.3s%3d %.2d:%.2d:%.2d",
- wday_name[timeptr->tm_wday],
- mon_name[timeptr->tm_mon],
- timeptr->tm_mday, timeptr->tm_hour,
- timeptr->tm_min, timeptr->tm_sec);
- /* XXX: since the fields used by snprintf above are validated in checktm,
- * the following condition should never trigger. We keep the check because
- * historically fixed size buffer used in asctime was the source of
- * crashes. */
- if (n + 1 != sizeof(buf)) {
- PyErr_SetString(PyExc_ValueError, "unconvertible time");
- return NULL;
- }
-
- return PyUnicode_FromFormat("%s %d", buf, 1900 + timeptr->tm_year);
+ return PyUnicode_FromFormat(
+ "%s %s%3d %.2d:%.2d:%.2d %d",
+ wday_name[timeptr->tm_wday],
+ mon_name[timeptr->tm_mon],
+ timeptr->tm_mday, timeptr->tm_hour,
+ timeptr->tm_min, timeptr->tm_sec,
+ 1900 + timeptr->tm_year);
}
static PyObject *
@@ -645,7 +756,9 @@ time_asctime(PyObject *self, PyObject *args)
return NULL;
if (tup == NULL) {
time_t tt = time(NULL);
- buf = *localtime(&tt);
+ if (pylocaltime(&tt, &buf) == -1)
+ return NULL;
+
} else if (!gettmarg(tup, &buf) || !checktm(&buf))
return NULL;
return _asctime(&buf);
@@ -661,28 +774,13 @@ is used.");
static PyObject *
time_ctime(PyObject *self, PyObject *args)
{
- PyObject *ot = NULL;
time_t tt;
- struct tm *timeptr;
-
- if (!PyArg_UnpackTuple(args, "ctime", 0, 1, &ot))
+ struct tm buf;
+ if (!parse_time_t_args(args, "|O:ctime", &tt))
return NULL;
- if (ot == NULL || ot == Py_None)
- tt = time(NULL);
- else {
- double dt = PyFloat_AsDouble(ot);
- if (PyErr_Occurred())
- return NULL;
- tt = _PyTime_DoubleToTimet(dt);
- if (tt == (time_t)-1 && PyErr_Occurred())
- return NULL;
- }
- timeptr = localtime(&tt);
- if (timeptr == NULL) {
- PyErr_SetString(PyExc_ValueError, "unconvertible time");
+ if (pylocaltime(&tt, &buf) == -1)
return NULL;
- }
- return _asctime(timeptr);
+ return _asctime(&buf);
}
PyDoc_STRVAR(ctime_doc,
@@ -715,7 +813,10 @@ time_mktime(PyObject *self, PyObject *tup)
PyDoc_STRVAR(mktime_doc,
"mktime(tuple) -> floating point number\n\
\n\
-Convert a time tuple in local time to seconds since the Epoch.");
+Convert a time tuple in local time to seconds since the Epoch.\n\
+Note that mktime(gmtime(0)) will not generally return zero for most\n\
+time zones; instead the returned value will either be equal to that\n\
+of the timezone or altzone attributes on the time module.");
#endif /* HAVE_MKTIME */
#ifdef HAVE_WORKING_TZSET
@@ -755,6 +856,402 @@ the local timezone used by methods such as localtime, but this behaviour\n\
should not be relied on.");
#endif /* HAVE_WORKING_TZSET */
+#if defined(MS_WINDOWS) || defined(__APPLE__) \
+ || (defined(HAVE_CLOCK_GETTIME) \
+ && (defined(CLOCK_HIGHRES) || defined(CLOCK_MONOTONIC)))
+#define PYMONOTONIC
+#endif
+
+#ifdef PYMONOTONIC
+static PyObject*
+pymonotonic(_Py_clock_info_t *info)
+{
+#if defined(MS_WINDOWS)
+ static ULONGLONG (*GetTickCount64) (void) = NULL;
+ static ULONGLONG (CALLBACK *Py_GetTickCount64)(void);
+ static int has_getickcount64 = -1;
+ double result;
+
+ if (has_getickcount64 == -1) {
+ /* GetTickCount64() was added to Windows Vista */
+ if (winver.dwMajorVersion >= 6) {
+ HINSTANCE hKernel32;
+ hKernel32 = GetModuleHandleW(L"KERNEL32");
+ *(FARPROC*)&Py_GetTickCount64 = GetProcAddress(hKernel32,
+ "GetTickCount64");
+ has_getickcount64 = (Py_GetTickCount64 != NULL);
+ }
+ else
+ has_getickcount64 = 0;
+ }
+
+ if (has_getickcount64) {
+ ULONGLONG ticks;
+ ticks = Py_GetTickCount64();
+ result = (double)ticks * 1e-3;
+ }
+ else {
+ static DWORD last_ticks = 0;
+ static DWORD n_overflow = 0;
+ DWORD ticks;
+
+ ticks = GetTickCount();
+ if (ticks < last_ticks)
+ n_overflow++;
+ last_ticks = ticks;
+
+ result = ldexp(n_overflow, 32);
+ result += ticks;
+ result *= 1e-3;
+ }
+
+ if (info) {
+ DWORD timeAdjustment, timeIncrement;
+ BOOL isTimeAdjustmentDisabled, ok;
+ if (has_getickcount64)
+ info->implementation = "GetTickCount64()";
+ else
+ info->implementation = "GetTickCount()";
+ info->monotonic = 1;
+ ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement,
+ &isTimeAdjustmentDisabled);
+ if (!ok) {
+ PyErr_SetFromWindowsErr(0);
+ return NULL;
+ }
+ info->resolution = timeIncrement * 1e-7;
+ info->adjustable = 0;
+ }
+ return PyFloat_FromDouble(result);
+
+#elif defined(__APPLE__)
+ static mach_timebase_info_data_t timebase;
+ uint64_t time;
+ double secs;
+
+ if (timebase.denom == 0) {
+ /* According to the Technical Q&A QA1398, mach_timebase_info() cannot
+ fail: https://developer.apple.com/library/mac/#qa/qa1398/ */
+ (void)mach_timebase_info(&timebase);
+ }
+
+ time = mach_absolute_time();
+ secs = (double)time * timebase.numer / timebase.denom * 1e-9;
+ if (info) {
+ info->implementation = "mach_absolute_time()";
+ info->resolution = (double)timebase.numer / timebase.denom * 1e-9;
+ info->monotonic = 1;
+ info->adjustable = 0;
+ }
+ return PyFloat_FromDouble(secs);
+
+#elif defined(HAVE_CLOCK_GETTIME) && (defined(CLOCK_HIGHRES) || defined(CLOCK_MONOTONIC))
+ struct timespec tp;
+#ifdef CLOCK_HIGHRES
+ const clockid_t clk_id = CLOCK_HIGHRES;
+ const char *function = "clock_gettime(CLOCK_HIGHRES)";
+#else
+ const clockid_t clk_id = CLOCK_MONOTONIC;
+ const char *function = "clock_gettime(CLOCK_MONOTONIC)";
+#endif
+
+ if (clock_gettime(clk_id, &tp) != 0) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
+
+ if (info) {
+ struct timespec res;
+ info->monotonic = 1;
+ info->implementation = function;
+ info->adjustable = 0;
+ if (clock_getres(clk_id, &res) == 0)
+ info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+ else
+ info->resolution = 1e-9;
+ }
+ return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9);
+#endif
+}
+
+static PyObject *
+time_monotonic(PyObject *self, PyObject *unused)
+{
+ return pymonotonic(NULL);
+}
+
+PyDoc_STRVAR(monotonic_doc,
+"monotonic() -> float\n\
+\n\
+Monotonic clock, cannot go backward.");
+#endif /* PYMONOTONIC */
+
+static PyObject*
+perf_counter(_Py_clock_info_t *info)
+{
+#if defined(WIN32_PERF_COUNTER) || defined(PYMONOTONIC)
+ PyObject *res;
+#endif
+#if defined(WIN32_PERF_COUNTER)
+ static int use_perf_counter = 1;
+#endif
+#ifdef PYMONOTONIC
+ static int use_monotonic = 1;
+#endif
+
+#ifdef WIN32_PERF_COUNTER
+ if (use_perf_counter) {
+ if (win_perf_counter(info, &res) == 0)
+ return res;
+ use_perf_counter = 0;
+ }
+#endif
+
+#ifdef PYMONOTONIC
+ if (use_monotonic) {
+ res = pymonotonic(info);
+ if (res != NULL)
+ return res;
+ use_monotonic = 0;
+ PyErr_Clear();
+ }
+#endif
+
+ return floattime(info);
+}
+
+static PyObject *
+time_perf_counter(PyObject *self, PyObject *unused)
+{
+ return perf_counter(NULL);
+}
+
+PyDoc_STRVAR(perf_counter_doc,
+"perf_counter() -> float\n\
+\n\
+Performance counter for benchmarking.");
+
+static PyObject*
+py_process_time(_Py_clock_info_t *info)
+{
+#if defined(MS_WINDOWS)
+ HANDLE process;
+ FILETIME creation_time, exit_time, kernel_time, user_time;
+ ULARGE_INTEGER large;
+ double total;
+ BOOL ok;
+
+ process = GetCurrentProcess();
+ ok = GetProcessTimes(process, &creation_time, &exit_time, &kernel_time, &user_time);
+ if (!ok)
+ return PyErr_SetFromWindowsErr(0);
+
+ large.u.LowPart = kernel_time.dwLowDateTime;
+ large.u.HighPart = kernel_time.dwHighDateTime;
+ total = (double)large.QuadPart;
+ large.u.LowPart = user_time.dwLowDateTime;
+ large.u.HighPart = user_time.dwHighDateTime;
+ total += (double)large.QuadPart;
+ if (info) {
+ info->implementation = "GetProcessTimes()";
+ info->resolution = 1e-7;
+ info->monotonic = 1;
+ info->adjustable = 0;
+ }
+ return PyFloat_FromDouble(total * 1e-7);
+#else
+
+#if defined(HAVE_SYS_RESOURCE_H)
+ struct rusage ru;
+#endif
+#ifdef HAVE_TIMES
+ struct tms t;
+ static long ticks_per_second = -1;
+#endif
+
+#if defined(HAVE_CLOCK_GETTIME) \
+ && (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF))
+ struct timespec tp;
+#ifdef CLOCK_PROF
+ const clockid_t clk_id = CLOCK_PROF;
+ const char *function = "clock_gettime(CLOCK_PROF)";
+#else
+ const clockid_t clk_id = CLOCK_PROCESS_CPUTIME_ID;
+ const char *function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)";
+#endif
+
+ if (clock_gettime(clk_id, &tp) == 0) {
+ if (info) {
+ struct timespec res;
+ info->implementation = function;
+ info->monotonic = 1;
+ info->adjustable = 0;
+ if (clock_getres(clk_id, &res) == 0)
+ info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+ else
+ info->resolution = 1e-9;
+ }
+ return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9);
+ }
+#endif
+
+#if defined(HAVE_SYS_RESOURCE_H)
+ if (getrusage(RUSAGE_SELF, &ru) == 0) {
+ double total;
+ total = ru.ru_utime.tv_sec + ru.ru_utime.tv_usec * 1e-6;
+ total += ru.ru_stime.tv_sec + ru.ru_stime.tv_usec * 1e-6;
+ if (info) {
+ info->implementation = "getrusage(RUSAGE_SELF)";
+ info->monotonic = 1;
+ info->adjustable = 0;
+ info->resolution = 1e-6;
+ }
+ return PyFloat_FromDouble(total);
+ }
+#endif
+
+#ifdef HAVE_TIMES
+ if (times(&t) != (clock_t)-1) {
+ double total;
+
+ if (ticks_per_second == -1) {
+#if defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)
+ ticks_per_second = sysconf(_SC_CLK_TCK);
+ if (ticks_per_second < 1)
+ ticks_per_second = -1;
+#elif defined(HZ)
+ ticks_per_second = HZ;
+#else
+ ticks_per_second = 60; /* magic fallback value; may be bogus */
+#endif
+ }
+
+ if (ticks_per_second != -1) {
+ total = (double)t.tms_utime / ticks_per_second;
+ total += (double)t.tms_stime / ticks_per_second;
+ if (info) {
+ info->implementation = "times()";
+ info->monotonic = 1;
+ info->adjustable = 0;
+ info->resolution = 1.0 / ticks_per_second;
+ }
+ return PyFloat_FromDouble(total);
+ }
+ }
+#endif
+
+ return floatclock(info);
+#endif
+}
+
+static PyObject *
+time_process_time(PyObject *self, PyObject *unused)
+{
+ return py_process_time(NULL);
+}
+
+PyDoc_STRVAR(process_time_doc,
+"process_time() -> float\n\
+\n\
+Process time for profiling: sum of the kernel and user-space CPU time.");
+
+
+static PyObject *
+time_get_clock_info(PyObject *self, PyObject *args)
+{
+ char *name;
+ _Py_clock_info_t info;
+ PyObject *obj = NULL, *dict, *ns;
+
+ if (!PyArg_ParseTuple(args, "s:get_clock_info", &name))
+ return NULL;
+
+#ifdef Py_DEBUG
+ info.implementation = NULL;
+ info.monotonic = -1;
+ info.adjustable = -1;
+ info.resolution = -1.0;
+#else
+ info.implementation = "";
+ info.monotonic = 0;
+ info.adjustable = 0;
+ info.resolution = 1.0;
+#endif
+
+ if (strcmp(name, "time") == 0)
+ obj = floattime(&info);
+#ifdef PYCLOCK
+ else if (strcmp(name, "clock") == 0)
+ obj = pyclock(&info);
+#endif
+#ifdef PYMONOTONIC
+ else if (strcmp(name, "monotonic") == 0)
+ obj = pymonotonic(&info);
+#endif
+ else if (strcmp(name, "perf_counter") == 0)
+ obj = perf_counter(&info);
+ else if (strcmp(name, "process_time") == 0)
+ obj = py_process_time(&info);
+ else {
+ PyErr_SetString(PyExc_ValueError, "unknown clock");
+ return NULL;
+ }
+ if (obj == NULL)
+ return NULL;
+ Py_DECREF(obj);
+
+ dict = PyDict_New();
+ if (dict == NULL)
+ return NULL;
+
+ assert(info.implementation != NULL);
+ obj = PyUnicode_FromString(info.implementation);
+ if (obj == NULL)
+ goto error;
+ if (PyDict_SetItemString(dict, "implementation", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
+
+ assert(info.monotonic != -1);
+ obj = PyBool_FromLong(info.monotonic);
+ if (obj == NULL)
+ goto error;
+ if (PyDict_SetItemString(dict, "monotonic", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
+
+ assert(info.adjustable != -1);
+ obj = PyBool_FromLong(info.adjustable);
+ if (obj == NULL)
+ goto error;
+ if (PyDict_SetItemString(dict, "adjustable", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
+
+ assert(info.resolution > 0.0);
+ assert(info.resolution <= 1.0);
+ obj = PyFloat_FromDouble(info.resolution);
+ if (obj == NULL)
+ goto error;
+ if (PyDict_SetItemString(dict, "resolution", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
+
+ ns = _PyNamespace_New(dict);
+ Py_DECREF(dict);
+ return ns;
+
+error:
+ Py_DECREF(dict);
+ Py_XDECREF(obj);
+ return NULL;
+}
+
+PyDoc_STRVAR(get_clock_info_doc,
+"get_clock_info(name: str) -> dict\n\
+\n\
+Get information of the specified clock.");
+
static void
PyInit_timezone(PyObject *m) {
/* This code moved from PyInit_time wholesale to allow calling it from
@@ -791,8 +1288,8 @@ PyInit_timezone(PyObject *m) {
#endif /* PYOS_OS2 */
#endif
PyModule_AddIntConstant(m, "daylight", daylight);
- otz0 = PyUnicode_DecodeFSDefaultAndSize(tzname[0], strlen(tzname[0]));
- otz1 = PyUnicode_DecodeFSDefaultAndSize(tzname[1], strlen(tzname[1]));
+ otz0 = PyUnicode_DecodeLocale(tzname[0], "surrogateescape");
+ otz1 = PyUnicode_DecodeLocale(tzname[1], "surrogateescape");
PyModule_AddObject(m, "tzname", Py_BuildValue("(NN)", otz0, otz1));
#else /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
#ifdef HAVE_STRUCT_TM_TM_ZONE
@@ -843,14 +1340,38 @@ PyInit_timezone(PyObject *m) {
Py_BuildValue("(zz)", _tzname[0], _tzname[1]));
#endif /* __CYGWIN__ */
#endif /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
+
+#if defined(HAVE_CLOCK_GETTIME)
+ PyModule_AddIntMacro(m, CLOCK_REALTIME);
+#ifdef CLOCK_MONOTONIC
+ PyModule_AddIntMacro(m, CLOCK_MONOTONIC);
+#endif
+#ifdef CLOCK_MONOTONIC_RAW
+ PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW);
+#endif
+#ifdef CLOCK_HIGHRES
+ PyModule_AddIntMacro(m, CLOCK_HIGHRES);
+#endif
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+ PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID);
+#endif
+#ifdef CLOCK_THREAD_CPUTIME_ID
+ PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID);
+#endif
+#endif /* HAVE_CLOCK_GETTIME */
}
static PyMethodDef time_methods[] = {
{"time", time_time, METH_NOARGS, time_doc},
-#ifdef HAVE_CLOCK
+#ifdef PYCLOCK
{"clock", time_clock, METH_NOARGS, clock_doc},
#endif
+#ifdef HAVE_CLOCK_GETTIME
+ {"clock_gettime", time_clock_gettime, METH_VARARGS, clock_gettime_doc},
+ {"clock_settime", time_clock_settime, METH_VARARGS, clock_settime_doc},
+ {"clock_getres", time_clock_getres, METH_VARARGS, clock_getres_doc},
+#endif
{"sleep", time_sleep, METH_VARARGS, sleep_doc},
{"gmtime", time_gmtime, METH_VARARGS, gmtime_doc},
{"localtime", time_localtime, METH_VARARGS, localtime_doc},
@@ -866,6 +1387,12 @@ static PyMethodDef time_methods[] = {
#ifdef HAVE_WORKING_TZSET
{"tzset", time_tzset, METH_NOARGS, tzset_doc},
#endif
+#ifdef PYMONOTONIC
+ {"monotonic", time_monotonic, METH_NOARGS, monotonic_doc},
+#endif
+ {"process_time", time_process_time, METH_NOARGS, process_time_doc},
+ {"perf_counter", time_perf_counter, METH_NOARGS, perf_counter_doc},
+ {"get_clock_info", time_get_clock_info, METH_VARARGS, get_clock_info_doc},
{NULL, NULL} /* sentinel */
};
@@ -881,7 +1408,7 @@ The actual value can be retrieved by calling gmtime(0).\n\
\n\
The other representation is a tuple of 9 integers giving local time.\n\
The tuple items are:\n\
- year (four digits, e.g. 1998)\n\
+ year (including century, e.g. 1998)\n\
month (1-12)\n\
day (1-31)\n\
hours (0-23)\n\
@@ -933,51 +1460,65 @@ PyMODINIT_FUNC
PyInit_time(void)
{
PyObject *m;
- char *p;
m = PyModule_Create(&timemodule);
if (m == NULL)
return NULL;
- /* Accept 2-digit dates unless PYTHONY2K is set and non-empty */
- p = Py_GETENV("PYTHONY2K");
- PyModule_AddIntConstant(m, "accept2dyear", (long) (!p || !*p));
- /* If an embedded interpreter is shutdown and reinitialized the old
- moddict was not decrefed on shutdown and the next import of this
- module leads to a leak. Conditionally decref here to prevent that.
- */
- Py_XDECREF(moddict);
- /* Squirrel away the module's dictionary for the y2k check */
- moddict = PyModule_GetDict(m);
- Py_INCREF(moddict);
-
/* Set, or reset, module variables like time.timezone */
PyInit_timezone(m);
-#ifdef MS_WINDOWS
- /* Helper to allow interrupts for Windows.
- If Ctrl+C event delivered while not sleeping
- it will be ignored.
- */
- main_thread = PyThread_get_thread_ident();
- hInterruptEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- SetConsoleCtrlHandler( PyCtrlHandler, TRUE);
-#endif /* MS_WINDOWS */
if (!initialized) {
PyStructSequence_InitType(&StructTimeType,
&struct_time_type_desc);
+
+#ifdef MS_WINDOWS
+ winver.dwOSVersionInfoSize = sizeof(winver);
+ if (!GetVersionEx((OSVERSIONINFO*)&winver)) {
+ Py_DECREF(m);
+ PyErr_SetFromWindowsErr(0);
+ return NULL;
+ }
+#endif
}
Py_INCREF(&StructTimeType);
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 11);
+#else
+ PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 9);
+#endif
PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType);
initialized = 1;
return m;
}
-static double
-floattime(void)
+static PyObject*
+floattime(_Py_clock_info_t *info)
{
_PyTime_timeval t;
- _PyTime_gettimeofday(&t);
- return (double)t.tv_sec + t.tv_usec*0.000001;
+#ifdef HAVE_CLOCK_GETTIME
+ struct timespec tp;
+ int ret;
+
+ /* _PyTime_gettimeofday() does not use clock_gettime()
+ because it would require to link Python to the rt (real-time)
+ library, at least on Linux */
+ ret = clock_gettime(CLOCK_REALTIME, &tp);
+ if (ret == 0) {
+ if (info) {
+ struct timespec res;
+ info->implementation = "clock_gettime(CLOCK_REALTIME)";
+ info->monotonic = 0;
+ info->adjustable = 1;
+ if (clock_getres(CLOCK_REALTIME, &res) == 0)
+ info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+ else
+ info->resolution = 1e-9;
+ }
+ return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9);
+ }
+#endif
+ _PyTime_gettimeofday_info(&t, info);
+ return PyFloat_FromDouble((double)t.tv_sec + t.tv_usec * 1e-6);
}
@@ -992,23 +1533,28 @@ floatsleep(double secs)
#if defined(HAVE_SELECT) && !defined(__EMX__)
struct timeval t;
double frac;
+ int err;
+
frac = fmod(secs, 1.0);
secs = floor(secs);
t.tv_sec = (long)secs;
t.tv_usec = (long)(frac*1000000.0);
Py_BEGIN_ALLOW_THREADS
- if (select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t) != 0) {
+ err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t);
+ Py_END_ALLOW_THREADS
+ if (err != 0) {
#ifdef EINTR
- if (errno != EINTR) {
-#else
- if (1) {
+ if (errno == EINTR) {
+ if (PyErr_CheckSignals())
+ return -1;
+ }
+ else
#endif
- Py_BLOCK_THREADS
+ {
PyErr_SetFromErrno(PyExc_IOError);
return -1;
}
}
- Py_END_ALLOW_THREADS
#elif defined(__WATCOMC__) && !defined(__QNX__)
/* XXX Can't interrupt this sleep */
Py_BEGIN_ALLOW_THREADS
@@ -1029,18 +1575,14 @@ floatsleep(double secs)
* by Guido, only the main thread can be interrupted.
*/
ul_millis = (unsigned long)millisecs;
- if (ul_millis == 0 ||
- main_thread != PyThread_get_thread_ident())
+ if (ul_millis == 0 || !_PyOS_IsMainThread())
Sleep(ul_millis);
else {
DWORD rc;
+ HANDLE hInterruptEvent = _PyOS_SigintEvent();
ResetEvent(hInterruptEvent);
rc = WaitForSingleObject(hInterruptEvent, ul_millis);
if (rc == WAIT_OBJECT_0) {
- /* Yield to make sure real Python signal
- * handler called.
- */
- Sleep(1);
Py_BLOCK_THREADS
errno = EINTR;
PyErr_SetFromErrno(PyExc_IOError);
diff --git a/Modules/tkappinit.c b/Modules/tkappinit.c
index c1f97b0a40..2ed85949cb 100644
--- a/Modules/tkappinit.c
+++ b/Modules/tkappinit.c
@@ -26,7 +26,9 @@ static int tk_load_failed;
int
Tcl_AppInit(Tcl_Interp *interp)
{
+#ifdef WITH_MOREBUTTONS
Tk_Window main_window;
+#endif
const char *_tkinter_skip_tk_init;
#ifdef TKINTER_PROTECT_LOADTK
const char *_tkinter_tk_failed;
@@ -111,7 +113,11 @@ Tcl_AppInit(Tcl_Interp *interp)
return TCL_ERROR;
}
+#ifdef WITH_MOREBUTTONS
main_window = Tk_MainWindow(interp);
+#else
+ Tk_MainWindow(interp);
+#endif
#ifdef TK_AQUA
TkMacOSXInitAppleEvents(interp);
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 4db5087f11..f4d3608750 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -93,16 +93,13 @@ new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4)
static Py_UCS4 getuchar(PyUnicodeObject *obj)
{
- Py_UNICODE *v = PyUnicode_AS_UNICODE(obj);
-
- if (PyUnicode_GET_SIZE(obj) == 1)
- return *v;
-#ifndef Py_UNICODE_WIDE
- else if ((PyUnicode_GET_SIZE(obj) == 2) &&
- (0xD800 <= v[0] && v[0] <= 0xDBFF) &&
- (0xDC00 <= v[1] && v[1] <= 0xDFFF))
- return (((v[0] & 0x3FF)<<10) | (v[1] & 0x3FF)) + 0x10000;
-#endif
+ if (PyUnicode_READY(obj))
+ return (Py_UCS4)-1;
+ if (PyUnicode_GET_LENGTH(obj) == 1) {
+ if (PyUnicode_READY(obj))
+ return (Py_UCS4)-1;
+ return PyUnicode_READ_CHAR(obj, 0);
+ }
PyErr_SetString(PyExc_TypeError,
"need a single Unicode character as parameter");
return (Py_UCS4)-1;
@@ -443,7 +440,7 @@ unicodedata_decomposition(PyObject *self, PyObject *args)
from Tools/unicode/makeunicodedata.py, it should not be possible
to overflow decomp_prefix. */
prefix_index = decomp_data[index] & 255;
- assert(prefix_index < (sizeof(decomp_prefix)/sizeof(*decomp_prefix)));
+ assert(prefix_index < Py_ARRAY_LENGTH(decomp_prefix));
/* copy prefix */
i = strlen(decomp_prefix[prefix_index]);
@@ -498,36 +495,47 @@ static PyObject*
nfd_nfkd(PyObject *self, PyObject *input, int k)
{
PyObject *result;
- Py_UNICODE *i, *end, *o;
+ Py_UCS4 *output;
+ Py_ssize_t i, o, osize;
+ int kind;
+ void *data;
/* Longest decomposition in Unicode 3.2: U+FDFA */
- Py_UNICODE stack[20];
+ Py_UCS4 stack[20];
Py_ssize_t space, isize;
int index, prefix, count, stackptr;
unsigned char prev, cur;
stackptr = 0;
- isize = PyUnicode_GET_SIZE(input);
- /* Overallocate atmost 10 characters. */
+ isize = PyUnicode_GET_LENGTH(input);
+ /* Overallocate at most 10 characters. */
space = (isize > 10 ? 10 : isize) + isize;
- result = PyUnicode_FromUnicode(NULL, space);
- if (!result)
+ osize = space;
+ output = PyMem_Malloc(space * sizeof(Py_UCS4));
+ if (!output) {
+ PyErr_NoMemory();
return NULL;
- i = PyUnicode_AS_UNICODE(input);
- end = i + isize;
- o = PyUnicode_AS_UNICODE(result);
+ }
+ i = o = 0;
+ kind = PyUnicode_KIND(input);
+ data = PyUnicode_DATA(input);
- while (i < end) {
- stack[stackptr++] = *i++;
+ while (i < isize) {
+ stack[stackptr++] = PyUnicode_READ(kind, data, i++);
while(stackptr) {
- Py_UNICODE code = stack[--stackptr];
+ Py_UCS4 code = stack[--stackptr];
/* Hangul Decomposition adds three characters in
- a single step, so we need atleast that much room. */
+ a single step, so we need at least that much room. */
if (space < 3) {
- Py_ssize_t newsize = PyUnicode_GET_SIZE(result) + 10;
+ Py_UCS4 *new_output;
+ osize += 10;
space += 10;
- if (PyUnicode_Resize(&result, newsize) == -1)
+ new_output = PyMem_Realloc(output, osize*sizeof(Py_UCS4));
+ if (new_output == NULL) {
+ PyMem_Free(output);
+ PyErr_NoMemory();
return NULL;
- o = PyUnicode_AS_UNICODE(result) + newsize - space;
+ }
+ output = new_output;
}
/* Hangul Decomposition. */
if (SBase <= code && code < (SBase+SCount)) {
@@ -535,11 +543,11 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
int L = LBase + SIndex / NCount;
int V = VBase + (SIndex % NCount) / TCount;
int T = TBase + SIndex % TCount;
- *o++ = L;
- *o++ = V;
+ output[o++] = L;
+ output[o++] = V;
space -= 2;
if (T != TBase) {
- *o++ = T;
+ output[o++] = T;
space --;
}
continue;
@@ -559,7 +567,7 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
/* Copy character if it is not decomposable, or has a
compatibility decomposition, but we do NFD. */
if (!count || (prefix && !k)) {
- *o++ = code;
+ output[o++] = code;
space--;
continue;
}
@@ -572,15 +580,20 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
}
}
- /* Drop overallocation. Cannot fail. */
- PyUnicode_Resize(&result, PyUnicode_GET_SIZE(result) - space);
+ result = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
+ output, o);
+ PyMem_Free(output);
+ if (!result)
+ return NULL;
+ /* result is guaranteed to be ready, as it is compact. */
+ kind = PyUnicode_KIND(result);
+ data = PyUnicode_DATA(result);
/* Sort canonically. */
- i = PyUnicode_AS_UNICODE(result);
- prev = _getrecord_ex(*i)->combining;
- end = i + PyUnicode_GET_SIZE(result);
- for (i++; i < end; i++) {
- cur = _getrecord_ex(*i)->combining;
+ i = 0;
+ prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
+ for (i++; i < PyUnicode_GET_LENGTH(result); i++) {
+ cur = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
if (prev == 0 || cur == 0 || prev <= cur) {
prev = cur;
continue;
@@ -588,31 +601,32 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
/* Non-canonical order. Need to switch *i with previous. */
o = i - 1;
while (1) {
- Py_UNICODE tmp = o[1];
- o[1] = o[0];
- o[0] = tmp;
+ Py_UCS4 tmp = PyUnicode_READ(kind, data, o+1);
+ PyUnicode_WRITE(kind, data, o+1,
+ PyUnicode_READ(kind, data, o));
+ PyUnicode_WRITE(kind, data, o, tmp);
o--;
- if (o < PyUnicode_AS_UNICODE(result))
+ if (o < 0)
break;
- prev = _getrecord_ex(*o)->combining;
+ prev = _getrecord_ex(PyUnicode_READ(kind, data, o))->combining;
if (prev == 0 || prev <= cur)
break;
}
- prev = _getrecord_ex(*i)->combining;
+ prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
}
return result;
}
static int
-find_nfc_index(PyObject *self, struct reindex* nfc, Py_UNICODE code)
+find_nfc_index(PyObject *self, struct reindex* nfc, Py_UCS4 code)
{
- int index;
+ unsigned int index;
for (index = 0; nfc[index].start; index++) {
- int start = nfc[index].start;
+ unsigned int start = nfc[index].start;
if (code < start)
return -1;
if (code <= start + nfc[index].count) {
- int delta = code - start;
+ unsigned int delta = code - start;
return nfc[index].index + delta;
}
}
@@ -623,27 +637,36 @@ static PyObject*
nfc_nfkc(PyObject *self, PyObject *input, int k)
{
PyObject *result;
- Py_UNICODE *i, *i1, *o, *end;
+ int kind;
+ void *data;
+ Py_UCS4 *output;
+ Py_ssize_t i, i1, o, len;
int f,l,index,index1,comb;
- Py_UNICODE code;
- Py_UNICODE *skipped[20];
+ Py_UCS4 code;
+ Py_ssize_t skipped[20];
int cskipped = 0;
result = nfd_nfkd(self, input, k);
if (!result)
return NULL;
-
- /* We are going to modify result in-place.
- If nfd_nfkd is changed to sometimes return the input,
- this code needs to be reviewed. */
- assert(result != input);
-
- i = PyUnicode_AS_UNICODE(result);
- end = i + PyUnicode_GET_SIZE(result);
- o = PyUnicode_AS_UNICODE(result);
+ /* result will be "ready". */
+ kind = PyUnicode_KIND(result);
+ data = PyUnicode_DATA(result);
+ len = PyUnicode_GET_LENGTH(result);
+
+ /* We allocate a buffer for the output.
+ If we find that we made no changes, we still return
+ the NFD result. */
+ output = PyMem_Malloc(len * sizeof(Py_UCS4));
+ if (!output) {
+ PyErr_NoMemory();
+ Py_DECREF(result);
+ return 0;
+ }
+ i = o = 0;
again:
- while (i < end) {
+ while (i < len) {
for (index = 0; index < cskipped; index++) {
if (skipped[index] == i) {
/* *i character is skipped.
@@ -656,33 +679,41 @@ nfc_nfkc(PyObject *self, PyObject *input, int k)
}
/* Hangul Composition. We don't need to check for <LV,T>
pairs, since we always have decomposed data. */
- if (LBase <= *i && *i < (LBase+LCount) &&
- i + 1 < end &&
- VBase <= i[1] && i[1] <= (VBase+VCount)) {
+ code = PyUnicode_READ(kind, data, i);
+ if (LBase <= code && code < (LBase+LCount) &&
+ i + 1 < len &&
+ VBase <= PyUnicode_READ(kind, data, i+1) &&
+ PyUnicode_READ(kind, data, i+1) <= (VBase+VCount)) {
int LIndex, VIndex;
- LIndex = i[0] - LBase;
- VIndex = i[1] - VBase;
+ LIndex = code - LBase;
+ VIndex = PyUnicode_READ(kind, data, i+1) - VBase;
code = SBase + (LIndex*VCount+VIndex)*TCount;
i+=2;
- if (i < end &&
- TBase <= *i && *i <= (TBase+TCount)) {
- code += *i-TBase;
+ if (i < len &&
+ TBase <= PyUnicode_READ(kind, data, i) &&
+ PyUnicode_READ(kind, data, i) <= (TBase+TCount)) {
+ code += PyUnicode_READ(kind, data, i)-TBase;
i++;
}
- *o++ = code;
+ output[o++] = code;
continue;
}
- f = find_nfc_index(self, nfc_first, *i);
+ /* code is still input[i] here */
+ f = find_nfc_index(self, nfc_first, code);
if (f == -1) {
- *o++ = *i++;
+ output[o++] = code;
+ i++;
continue;
}
/* Find next unblocked character. */
i1 = i+1;
comb = 0;
- while (i1 < end) {
- int comb1 = _getrecord_ex(*i1)->combining;
+ /* output base character for now; might be updated later. */
+ output[o] = PyUnicode_READ(kind, data, i);
+ while (i1 < len) {
+ Py_UCS4 code1 = PyUnicode_READ(kind, data, i1);
+ int comb1 = _getrecord_ex(code1)->combining;
if (comb) {
if (comb1 == 0)
break;
@@ -692,8 +723,8 @@ nfc_nfkc(PyObject *self, PyObject *input, int k)
continue;
}
}
- l = find_nfc_index(self, nfc_last, *i1);
- /* *i1 cannot be combined with *i. If *i1
+ l = find_nfc_index(self, nfc_last, code1);
+ /* i1 cannot be combined with i. If i1
is a starter, we don't need to look further.
Otherwise, record the combining class. */
if (l == -1) {
@@ -712,19 +743,28 @@ nfc_nfkc(PyObject *self, PyObject *input, int k)
goto not_combinable;
/* Replace the original character. */
- *i = code;
+ output[o] = code;
/* Mark the second character unused. */
assert(cskipped < 20);
skipped[cskipped++] = i1;
i1++;
- f = find_nfc_index(self, nfc_first, *i);
+ f = find_nfc_index(self, nfc_first, output[o]);
if (f == -1)
break;
}
- *o++ = *i++;
+ /* Output character was already written.
+ Just advance the indices. */
+ o++; i++;
}
- if (o != end)
- PyUnicode_Resize(&result, o - PyUnicode_AS_UNICODE(result));
+ if (o == len) {
+ /* No changes. Return original string. */
+ PyMem_Free(output);
+ return result;
+ }
+ Py_DECREF(result);
+ result = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
+ output, o);
+ PyMem_Free(output);
return result;
}
@@ -732,7 +772,9 @@ nfc_nfkc(PyObject *self, PyObject *input, int k)
static int
is_normalized(PyObject *self, PyObject *input, int nfc, int k)
{
- Py_UNICODE *i, *end;
+ Py_ssize_t i, len;
+ int kind;
+ void *data;
unsigned char prev_combining = 0, quickcheck_mask;
/* An older version of the database is requested, quickchecks must be
@@ -744,10 +786,13 @@ is_normalized(PyObject *self, PyObject *input, int nfc, int k)
as described in http://unicode.org/reports/tr15/#Annex8. */
quickcheck_mask = 3 << ((nfc ? 4 : 0) + (k ? 2 : 0));
- i = PyUnicode_AS_UNICODE(input);
- end = i + PyUnicode_GET_SIZE(input);
- while (i < end) {
- const _PyUnicode_DatabaseRecord *record = _getrecord_ex(*i++);
+ i = 0;
+ kind = PyUnicode_KIND(input);
+ data = PyUnicode_DATA(input);
+ len = PyUnicode_GET_LENGTH(input);
+ while (i < len) {
+ Py_UCS4 ch = PyUnicode_READ(kind, data, i++);
+ const _PyUnicode_DatabaseRecord *record = _getrecord_ex(ch);
unsigned char combining = record->combining;
unsigned char quickcheck = record->normalization_quick_check;
@@ -776,7 +821,10 @@ unicodedata_normalize(PyObject *self, PyObject *args)
&form, &PyUnicode_Type, &input))
return NULL;
- if (PyUnicode_GetSize(input) == 0) {
+ if (PyUnicode_READY(input) == -1)
+ return NULL;
+
+ if (PyUnicode_GET_LENGTH(input) == 0) {
/* Special case empty input strings, since resizing
them later would cause internal errors. */
Py_INCREF(input);
@@ -876,15 +924,25 @@ is_unified_ideograph(Py_UCS4 code)
{
return
(0x3400 <= code && code <= 0x4DB5) || /* CJK Ideograph Extension A */
- (0x4E00 <= code && code <= 0x9FCB) || /* CJK Ideograph */
+ (0x4E00 <= code && code <= 0x9FCC) || /* CJK Ideograph */
(0x20000 <= code && code <= 0x2A6D6) || /* CJK Ideograph Extension B */
(0x2A700 <= code && code <= 0x2B734) || /* CJK Ideograph Extension C */
(0x2B740 <= code && code <= 0x2B81D); /* CJK Ideograph Extension D */
}
+/* macros used to determine if the given codepoint is in the PUA range that
+ * we are using to store aliases and named sequences */
+#define IS_ALIAS(cp) ((cp >= aliases_start) && (cp < aliases_end))
+#define IS_NAMED_SEQ(cp) ((cp >= named_sequences_start) && \
+ (cp < named_sequences_end))
+
static int
-_getucname(PyObject *self, Py_UCS4 code, char* buffer, int buflen)
+_getucname(PyObject *self, Py_UCS4 code, char* buffer, int buflen,
+ int with_alias_and_seq)
{
+ /* Find the name associated with the given codepoint.
+ * If with_alias_and_seq is 1, check for names in the Private Use Area 15
+ * that we are using for aliases and named sequences. */
int offset;
int i;
int word;
@@ -893,8 +951,16 @@ _getucname(PyObject *self, Py_UCS4 code, char* buffer, int buflen)
if (code >= 0x110000)
return 0;
+ /* XXX should we just skip all the codepoints in the PUAs here? */
+ if (!with_alias_and_seq && (IS_ALIAS(code) || IS_NAMED_SEQ(code)))
+ return 0;
+
if (self && UCD_Check(self)) {
- const change_record *old = get_old_record(self, code);
+ /* in 3.2.0 there are no aliases and named sequences */
+ const change_record *old;
+ if (IS_ALIAS(code) || IS_NAMED_SEQ(code))
+ return 0;
+ old = get_old_record(self, code);
if (old->category_changed == 0) {
/* unassigned */
return 0;
@@ -978,7 +1044,7 @@ _cmpname(PyObject *self, int code, const char* name, int namelen)
/* check if code corresponds to the given name */
int i;
char buffer[NAME_MAXLEN];
- if (!_getucname(self, code, buffer, sizeof(buffer)))
+ if (!_getucname(self, code, buffer, sizeof(buffer), 1))
return 0;
for (i = 0; i < namelen; i++) {
if (Py_TOUPPER(Py_CHARMASK(name[i])) != buffer[i])
@@ -994,7 +1060,7 @@ find_syllable(const char *str, int *len, int *pos, int count, int column)
*len = -1;
for (i = 0; i < count; i++) {
char *s = hangul_syllables[i][column];
- len1 = strlen(s);
+ len1 = Py_SAFE_DOWNCAST(strlen(s), size_t, int);
if (len1 <= *len)
continue;
if (strncmp(str, s, len1) == 0) {
@@ -1008,8 +1074,28 @@ find_syllable(const char *str, int *len, int *pos, int count, int column)
}
static int
-_getcode(PyObject* self, const char* name, int namelen, Py_UCS4* code)
+_check_alias_and_seq(unsigned int cp, Py_UCS4* code, int with_named_seq)
+{
+ /* check if named sequences are allowed */
+ if (!with_named_seq && IS_NAMED_SEQ(cp))
+ return 0;
+ /* if the codepoint is in the PUA range that we use for aliases,
+ * convert it to obtain the right codepoint */
+ if (IS_ALIAS(cp))
+ *code = name_aliases[cp-aliases_start];
+ else
+ *code = cp;
+ return 1;
+}
+
+static int
+_getcode(PyObject* self, const char* name, int namelen, Py_UCS4* code,
+ int with_named_seq)
{
+ /* Return the codepoint associated with the given name.
+ * Named aliases are resolved too (unless self != NULL (i.e. we are using
+ * 3.2.0)). If with_named_seq is 1, returns the PUA codepoint that we are
+ * using for the named sequence, and the caller must then convert it. */
unsigned int h, v;
unsigned int mask = code_size-1;
unsigned int i, incr;
@@ -1065,10 +1151,8 @@ _getcode(PyObject* self, const char* name, int namelen, Py_UCS4* code)
v = code_hash[i];
if (!v)
return 0;
- if (_cmpname(self, v, name, namelen)) {
- *code = v;
- return 1;
- }
+ if (_cmpname(self, v, name, namelen))
+ return _check_alias_and_seq(v, code, with_named_seq);
incr = (h ^ (h >> 3)) & mask;
if (!incr)
incr = mask;
@@ -1077,10 +1161,8 @@ _getcode(PyObject* self, const char* name, int namelen, Py_UCS4* code)
v = code_hash[i];
if (!v)
return 0;
- if (_cmpname(self, v, name, namelen)) {
- *code = v;
- return 1;
- }
+ if (_cmpname(self, v, name, namelen))
+ return _check_alias_and_seq(v, code, with_named_seq);
incr = incr << 1;
if (incr > mask)
incr = incr ^ code_poly;
@@ -1118,7 +1200,7 @@ unicodedata_name(PyObject* self, PyObject* args)
if (c == (Py_UCS4)-1)
return NULL;
- if (!_getucname(self, c, name, sizeof(name))) {
+ if (!_getucname(self, c, name, sizeof(name), 0)) {
if (defobj == NULL) {
PyErr_SetString(PyExc_ValueError, "no such name");
return NULL;
@@ -1143,28 +1225,26 @@ static PyObject *
unicodedata_lookup(PyObject* self, PyObject* args)
{
Py_UCS4 code;
- Py_UNICODE str[2];
char* name;
int namelen;
+ unsigned int index;
if (!PyArg_ParseTuple(args, "s#:lookup", &name, &namelen))
return NULL;
- if (!_getcode(self, name, namelen, &code)) {
- PyErr_Format(PyExc_KeyError, "undefined character name '%s'",
- name);
+ if (!_getcode(self, name, namelen, &code, 1)) {
+ PyErr_Format(PyExc_KeyError, "undefined character name '%s'", name);
return NULL;
}
-
-#ifndef Py_UNICODE_WIDE
- if (code >= 0x10000) {
- str[0] = 0xd800 + ((code - 0x10000) >> 10);
- str[1] = 0xdc00 + ((code - 0x10000) & 0x3ff);
- return PyUnicode_FromUnicode(str, 2);
+ /* check if code is in the PUA range that we use for named sequences
+ and convert it */
+ if (IS_NAMED_SEQ(code)) {
+ index = code-named_sequences_start;
+ return PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND,
+ named_sequences[index].seq,
+ named_sequences[index].seqlen);
}
-#endif
- str[0] = (Py_UNICODE) code;
- return PyUnicode_FromUnicode(str, 1);
+ return PyUnicode_FromOrdinal(code);
}
/* XXX Add doc strings. */
@@ -1242,11 +1322,10 @@ PyDoc_STRVAR(unicodedata_docstring,
"This module provides access to the Unicode Character Database which\n\
defines character properties for all Unicode characters. The data in\n\
this database is based on the UnicodeData.txt file version\n\
-6.0.0 which is publically available from ftp://ftp.unicode.org/.\n\
+" UNIDATA_VERSION " which is publically available from ftp://ftp.unicode.org/.\n\
\n\
The module uses the same names and symbols as defined by the\n\
-UnicodeData File Format 6.0.0 (see\n\
-http://www.unicode.org/reports/tr44/tr44-6.html).");
+UnicodeData File Format " UNIDATA_VERSION ".");
static struct PyModuleDef unicodedatamodule = {
diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h
index 8e2e72452a..5d5dca80af 100644
--- a/Modules/unicodedata_db.h
+++ b/Modules/unicodedata_db.h
@@ -1,6 +1,6 @@
/* this file was generated by Tools/unicode/makeunicodedata.py 3.2 */
-#define UNIDATA_VERSION "6.0.0"
+#define UNIDATA_VERSION "6.1.0"
/* a list of unique database records */
const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{0, 0, 0, 0, 0, 0},
@@ -28,12 +28,12 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{26, 0, 19, 0, 4, 0},
{28, 0, 11, 0, 4, 0},
{30, 0, 19, 0, 3, 0},
- {30, 0, 19, 0, 4, 0},
{29, 0, 19, 0, 4, 136},
{30, 0, 19, 0, 5, 0},
- {2, 0, 1, 0, 4, 136},
+ {19, 0, 1, 0, 4, 136},
{24, 0, 19, 1, 5, 0},
{14, 0, 15, 0, 4, 0},
+ {30, 0, 19, 0, 4, 0},
{29, 0, 19, 0, 3, 136},
{30, 0, 11, 0, 4, 0},
{27, 0, 11, 0, 4, 0},
@@ -49,6 +49,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{2, 0, 1, 0, 5, 10},
{1, 0, 1, 0, 5, 0},
{1, 0, 1, 0, 4, 136},
+ {2, 0, 1, 0, 4, 136},
{2, 0, 1, 0, 5, 0},
{19, 0, 1, 0, 5, 0},
{1, 0, 1, 0, 5, 136},
@@ -87,6 +88,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{6, 0, 14, 0, 5, 0},
{26, 0, 1, 0, 5, 0},
{21, 0, 19, 0, 5, 0},
+ {28, 0, 11, 0, 5, 0},
{4, 220, 14, 0, 5, 0},
{4, 222, 14, 0, 5, 0},
{4, 228, 14, 0, 5, 0},
@@ -134,6 +136,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{19, 0, 5, 0, 5, 136},
{7, 0, 9, 0, 5, 0},
{30, 0, 5, 0, 5, 0},
+ {14, 0, 5, 0, 5, 0},
{4, 36, 14, 0, 5, 0},
{4, 0, 14, 0, 5, 0},
{7, 0, 4, 0, 5, 0},
@@ -148,7 +151,6 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{4, 7, 14, 0, 5, 0},
{5, 0, 1, 0, 5, 80},
{5, 0, 1, 0, 5, 10},
- {28, 0, 11, 0, 5, 0},
{9, 0, 1, 0, 5, 0},
{4, 0, 14, 0, 5, 80},
{4, 0, 14, 0, 5, 10},
@@ -175,7 +177,6 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{19, 0, 1, 0, 5, 80},
{10, 0, 18, 0, 5, 0},
{8, 0, 1, 0, 5, 0},
- {14, 0, 1, 0, 5, 0},
{5, 9, 1, 0, 5, 0},
{4, 1, 14, 0, 5, 0},
{4, 234, 14, 0, 5, 0},
@@ -190,6 +191,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{10, 0, 18, 0, 5, 170},
{10, 0, 18, 0, 5, 136},
{14, 0, 15, 0, 5, 0},
+ {14, 0, 1, 0, 5, 0},
{14, 0, 4, 0, 5, 0},
{21, 0, 19, 0, 4, 0},
{21, 0, 19, 0, 5, 136},
@@ -256,7 +258,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{4, 228, 14, 0, 2, 0},
{4, 232, 14, 0, 2, 0},
{4, 222, 14, 0, 2, 0},
- {4, 224, 14, 0, 2, 0},
+ {5, 224, 1, 0, 2, 0},
{8, 0, 1, 0, 2, 136},
{19, 0, 1, 0, 2, 10},
{4, 8, 14, 0, 2, 80},
@@ -266,7 +268,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{30, 0, 1, 0, 2, 0},
{9, 0, 1, 0, 2, 136},
{30, 0, 1, 0, 2, 136},
- {30, 0, 1, 0, 4, 0},
+ {9, 0, 1, 0, 4, 0},
{9, 0, 19, 0, 2, 136},
{29, 0, 1, 0, 5, 0},
{15, 0, 1, 0, 5, 0},
@@ -325,11 +327,12 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
{27, 0, 1, 0, 5, 136},
{7, 0, 9, 0, 5, 136},
{30, 0, 1, 0, 5, 136},
+ {30, 0, 1, 0, 4, 0},
};
/* Reindexing of NFC first characters. */
-#define TOTAL_FIRST 370
-#define TOTAL_LAST 55
+#define TOTAL_FIRST 372
+#define TOTAL_LAST 56
struct reindex{int start;short count,index;};
static struct reindex nfc_first[] = {
{ 60, 2, 0},
@@ -538,6 +541,7 @@ static struct reindex nfc_first[] = {
{ 69785, 0, 367},
{ 69787, 0, 368},
{ 69797, 0, 369},
+ { 69937, 1, 370},
{0,0,0}
};
@@ -574,6 +578,7 @@ static struct reindex nfc_last[] = {
{ 6965, 0, 51},
{ 12441, 1, 52},
{ 69818, 0, 54},
+ { 69927, 0, 55},
{0,0,0}
};
@@ -671,515 +676,515 @@ static unsigned char index1[] = {
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102,
- 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 119,
- 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
- 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 122, 123, 124,
- 125, 126, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 17, 137,
- 138, 139, 140, 141, 17, 17, 17, 17, 17, 17, 142, 17, 143, 17, 144, 17,
- 145, 17, 146, 17, 17, 17, 147, 17, 17, 17, 148, 149, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 150, 17, 151, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 152, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 153, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 154, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78,
- 155, 156, 157, 158, 17, 159, 17, 160, 161, 162, 163, 164, 165, 166, 167,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 168, 169, 170, 171, 172,
- 17, 173, 174, 175, 176, 177, 178, 179, 180, 181, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 182, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 183, 100, 184, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 121,
- 121, 121, 121, 185, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 186, 17, 187,
- 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 189, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 73, 74, 75, 76, 77, 78, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 103, 104, 101, 101, 101, 101, 101, 101, 101, 101, 105, 41, 41, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119,
120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 189,
+ 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 124,
+ 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 84,
+ 138, 139, 140, 141, 142, 84, 84, 84, 84, 84, 84, 143, 84, 144, 145, 146,
+ 84, 147, 84, 148, 84, 84, 84, 149, 84, 84, 84, 150, 151, 152, 153, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 154, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 41, 41, 41, 41, 41, 41, 155, 84, 156,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 41, 41, 41, 41, 41, 41, 41, 41, 157, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 41, 41, 41, 41, 158, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 159, 160, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 161, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 78, 162, 163, 164, 165, 84, 166, 84, 167, 168, 169, 170, 171, 172,
+ 173, 174, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 175, 176, 84, 84, 177, 178, 179,
+ 180, 181, 84, 182, 183, 184, 185, 186, 187, 188, 189, 190, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 191, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 192,
+ 101, 193, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 122, 122, 122, 122, 194, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 195, 84, 196, 197, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 198, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 198,
};
static unsigned short index2[] = {
@@ -1191,1401 +1196,1464 @@ static unsigned short index2[] = {
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 22, 8, 8, 23, 8, 24,
- 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26,
- 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38,
+ 22, 25, 26, 27, 28, 16, 29, 30, 31, 32, 33, 34, 34, 25, 35, 22, 22, 25,
+ 34, 27, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38,
38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38,
38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43,
43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38,
42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38,
42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38,
- 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42,
- 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38,
+ 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 46, 38, 43, 38,
+ 43, 41, 38, 43, 38, 43, 38, 43, 45, 46, 39, 41, 38, 42, 38, 43, 38, 42,
+ 46, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38,
43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38,
43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43,
- 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44,
- 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44,
- 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46,
- 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35,
- 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42,
- 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 38, 43, 38, 43, 38,
+ 35, 47, 44, 44, 47, 44, 47, 44, 44, 47, 44, 44, 44, 47, 47, 44, 44, 44,
+ 44, 47, 44, 44, 47, 44, 44, 44, 47, 47, 47, 44, 44, 47, 44, 38, 43, 44,
+ 47, 44, 47, 44, 44, 47, 44, 47, 47, 44, 47, 44, 38, 43, 44, 44, 44, 47,
+ 44, 47, 44, 44, 47, 47, 48, 44, 47, 47, 47, 48, 48, 48, 48, 49, 50, 35,
+ 49, 50, 35, 49, 50, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42,
+ 38, 42, 38, 42, 47, 38, 43, 38, 43, 38, 43, 44, 47, 38, 43, 38, 43, 38,
+ 43, 38, 43, 38, 43, 43, 49, 50, 35, 38, 43, 44, 44, 38, 43, 38, 43, 38,
43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 44,
- 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44,
- 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53,
- 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53,
- 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53,
- 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58,
- 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61,
- 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64,
- 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68,
- 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59,
- 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44,
- 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 38, 38, 38,
+ 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 47, 38, 43, 44,
+ 47, 44, 47, 44, 47, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
+ 43, 47, 47, 47, 47, 47, 47, 44, 44, 47, 44, 44, 47, 47, 44, 47, 44, 44,
+ 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 41, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 41, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 48, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 53, 53, 53, 53, 53, 53, 53, 54,
+ 54, 55, 54, 52, 56, 52, 56, 56, 56, 52, 56, 52, 52, 57, 53, 54, 54, 54,
+ 54, 54, 54, 25, 25, 25, 25, 58, 25, 54, 55, 51, 51, 51, 51, 51, 54, 54,
+ 54, 54, 54, 54, 54, 52, 54, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 59, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59,
+ 59, 59, 60, 60, 59, 60, 59, 60, 59, 59, 61, 62, 62, 62, 62, 61, 63, 62,
+ 62, 62, 62, 62, 64, 64, 65, 65, 65, 65, 66, 66, 62, 62, 62, 62, 65, 65,
+ 62, 65, 65, 62, 62, 67, 67, 67, 67, 68, 62, 62, 62, 62, 60, 60, 60, 69,
+ 69, 59, 69, 69, 70, 60, 62, 62, 62, 60, 60, 60, 62, 62, 71, 60, 60, 60,
+ 62, 62, 62, 62, 60, 61, 62, 62, 60, 72, 73, 73, 72, 73, 73, 72, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 44, 47, 44, 47, 74, 54, 44,
+ 47, 0, 0, 51, 47, 47, 47, 75, 0, 0, 0, 0, 0, 58, 76, 38, 75, 38, 38, 38,
0, 38, 0, 38, 38, 43, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
39, 39, 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 38, 38, 43, 43, 43, 43,
43, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76,
- 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44,
- 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44,
- 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39,
+ 47, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 49, 77,
+ 77, 35, 35, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 35, 35, 35, 47, 49, 35, 78, 44,
+ 47, 49, 44, 47, 47, 44, 44, 44, 38, 79, 44, 38, 44, 44, 44, 38, 44, 44,
+ 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 79, 39, 39,
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41,
41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42,
- 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80,
- 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46,
- 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46,
- 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
- 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 0, 0, 0,
+ 47, 43, 47, 47, 47, 43, 47, 47, 47, 47, 43, 43, 43, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 38, 43, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 80, 81, 81, 81, 81, 81,
+ 82, 82, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 38, 43, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47,
+ 38, 43, 38, 43, 44, 47, 38, 43, 44, 47, 38, 43, 38, 43, 38, 43, 44, 47,
+ 38, 43, 38, 43, 38, 43, 44, 47, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 44, 47, 38, 43, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 0, 0, 0,
0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35,
- 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84,
- 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85,
- 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0,
- 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106,
- 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80,
- 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 115, 115, 116, 116,
- 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120,
- 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80,
- 80, 84, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126,
- 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116,
- 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 27,
- 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115,
- 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130,
- 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
- 111, 111, 0, 106, 115, 131, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84,
- 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80,
- 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 132, 132, 132, 132, 132, 132, 132, 132,
- 132, 132, 132, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80,
- 80, 80, 80, 80, 80, 84, 80, 134, 134, 27, 135, 135, 135, 134, 0, 0, 0, 0,
- 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 134, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 134, 80, 80, 80, 134, 80, 80, 80, 80, 80, 0, 0,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 84, 84, 84,
- 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132,
- 132, 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 137, 47, 47, 47, 47, 47, 47, 47, 137, 47, 47, 137, 47, 47,
- 47, 47, 47, 132, 136, 138, 47, 136, 136, 136, 132, 132, 132, 132, 132,
- 132, 132, 132, 136, 136, 136, 136, 139, 136, 136, 47, 80, 84, 80, 80,
- 132, 132, 132, 140, 140, 140, 140, 140, 140, 140, 140, 47, 47, 132, 132,
- 82, 82, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 82, 52, 47, 47,
- 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 132, 136, 136, 0, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47,
- 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 142, 47,
- 143, 136, 136, 132, 132, 132, 132, 0, 0, 136, 136, 0, 0, 144, 144, 139,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 140, 140, 0, 140, 47, 47,
- 132, 132, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47,
- 145, 145, 146, 146, 146, 146, 146, 146, 79, 145, 0, 0, 0, 0, 0, 132, 132,
- 136, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 140, 0, 47, 140, 0, 47, 47, 0, 0,
- 142, 0, 136, 136, 136, 132, 132, 0, 0, 0, 0, 132, 132, 0, 0, 132, 132,
- 139, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 140, 140, 140, 47, 0, 140, 0, 0,
- 0, 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 132,
- 132, 47, 47, 47, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 136, 0,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
- 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 142,
- 47, 136, 136, 136, 132, 132, 132, 132, 132, 0, 132, 132, 136, 0, 136,
- 136, 139, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47,
- 132, 132, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 145,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 136, 136, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47,
- 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 142, 47, 143,
- 132, 136, 132, 132, 132, 132, 0, 0, 136, 144, 0, 0, 144, 144, 139, 0, 0,
- 0, 0, 0, 0, 0, 0, 147, 143, 0, 0, 0, 0, 140, 140, 0, 47, 47, 47, 132,
- 132, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 79, 47, 146,
- 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 47, 0, 47,
- 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 137, 47, 0, 0, 0, 47,
- 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 143, 136, 132,
- 136, 136, 0, 0, 0, 136, 136, 136, 0, 144, 144, 144, 139, 0, 0, 47, 0, 0,
- 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 146, 146, 146, 27, 27, 27, 27, 27, 27,
- 145, 27, 0, 0, 0, 0, 0, 0, 136, 136, 136, 0, 47, 47, 47, 47, 47, 47, 47,
- 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 132, 132, 132, 136, 136,
- 136, 136, 0, 132, 132, 148, 0, 132, 132, 132, 139, 0, 0, 0, 0, 0, 0, 0,
- 149, 150, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 132, 132, 0, 0, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 0, 0, 151, 151,
- 151, 151, 151, 151, 151, 79, 0, 0, 136, 136, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 142, 47, 136, 152, 144, 136,
- 143, 136, 136, 0, 152, 144, 144, 0, 144, 144, 132, 139, 0, 0, 0, 0, 0, 0,
- 0, 143, 143, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 132, 132, 0, 0, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 47, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 0, 47, 47, 47, 47, 47, 47, 47, 47,
- 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 44, 44, 44, 44, 44, 44, 0, 0, 53, 83, 83, 83, 83, 83, 83, 0, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 143, 136, 136, 132, 132,
- 132, 132, 0, 136, 136, 136, 0, 144, 144, 144, 139, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 132, 132, 0, 0, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 146, 146, 146, 146, 146, 146, 0, 0, 0,
- 79, 47, 47, 47, 47, 47, 47, 0, 0, 136, 136, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47,
- 47, 47, 47, 47, 0, 0, 0, 153, 0, 0, 0, 0, 143, 136, 136, 132, 132, 132,
- 0, 132, 0, 136, 136, 144, 136, 144, 144, 144, 143, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 132, 47, 154,
- 132, 132, 132, 132, 155, 155, 139, 0, 0, 0, 0, 145, 47, 47, 47, 47, 47,
- 47, 52, 132, 156, 156, 156, 156, 132, 132, 132, 82, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47,
- 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47,
- 0, 0, 47, 47, 0, 47, 47, 47, 47, 132, 47, 154, 132, 132, 132, 132, 157,
- 157, 0, 132, 132, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 158, 158, 158,
- 158, 132, 132, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
- 0, 154, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 79, 79, 79, 82, 82, 82, 82,
- 82, 82, 82, 82, 159, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84,
- 79, 79, 79, 79, 79, 79, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 79, 84, 79, 84, 79,
- 160, 161, 162, 161, 162, 136, 136, 47, 47, 47, 140, 47, 47, 47, 47, 0,
- 47, 47, 47, 47, 140, 47, 47, 47, 47, 140, 47, 47, 47, 47, 140, 47, 47,
- 47, 47, 140, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 140, 47, 47,
- 47, 0, 0, 0, 0, 163, 164, 165, 166, 165, 165, 167, 165, 167, 164, 164,
- 164, 164, 132, 136, 164, 165, 80, 80, 139, 82, 80, 80, 47, 47, 47, 47,
- 47, 132, 132, 132, 132, 132, 132, 165, 132, 132, 132, 132, 0, 132, 132,
- 132, 132, 165, 132, 132, 132, 132, 165, 132, 132, 132, 132, 165, 132,
- 132, 132, 132, 165, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
- 132, 132, 165, 132, 132, 132, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79,
- 79, 79, 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 82,
- 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 47, 47, 47, 47, 136,
- 136, 132, 147, 132, 132, 136, 132, 132, 132, 132, 132, 142, 136, 139,
- 139, 136, 136, 132, 132, 47, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 82, 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 136, 136, 132, 132,
- 47, 47, 47, 47, 132, 132, 132, 47, 136, 136, 136, 47, 47, 136, 136, 136,
- 136, 136, 136, 136, 47, 47, 47, 132, 132, 132, 132, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 132, 136, 136, 132, 132, 136, 136, 136,
- 136, 136, 136, 84, 47, 136, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 136, 136, 136, 132, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 35,
+ 0, 83, 84, 0, 0, 0, 0, 85, 0, 86, 81, 81, 81, 81, 86, 81, 81, 81, 87, 86,
+ 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86, 81, 81, 87,
+ 88, 81, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 104, 81, 86, 104, 97, 0, 0, 0, 0, 0, 0, 0, 0, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0,
+ 0, 107, 107, 107, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108,
+ 108, 108, 108, 0, 78, 78, 109, 110, 110, 111, 112, 113, 26, 26, 81, 81,
+ 81, 81, 81, 81, 81, 81, 114, 115, 116, 113, 0, 0, 113, 113, 117, 117,
+ 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 120,
+ 121, 122, 114, 115, 116, 123, 124, 125, 125, 126, 86, 81, 81, 81, 81, 81,
+ 86, 81, 81, 86, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 110,
+ 128, 128, 113, 117, 117, 129, 117, 117, 117, 117, 130, 130, 130, 130,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 118, 117, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 118, 113, 117, 81, 81, 81, 81, 81, 81, 81,
+ 108, 26, 81, 81, 81, 81, 86, 81, 119, 119, 81, 81, 26, 86, 81, 81, 86,
+ 117, 117, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 117, 117,
+ 117, 132, 132, 117, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 0, 133, 117, 134, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 81, 86, 81, 81, 86, 81, 81,
+ 86, 86, 86, 81, 86, 86, 81, 86, 81, 81, 81, 86, 81, 86, 81, 86, 81, 86,
+ 81, 81, 0, 0, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81,
+ 81, 81, 81, 81, 81, 81, 86, 81, 137, 137, 26, 138, 138, 138, 137, 0, 0,
+ 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 81, 81, 81, 137, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 137, 81, 81, 81, 137, 81, 81, 81, 81, 81, 0,
+ 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 86, 86, 86,
+ 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
+ 81, 86, 81, 81, 86, 81, 81, 81, 86, 86, 86, 120, 121, 122, 81, 81, 81,
+ 86, 81, 81, 86, 86, 81, 81, 81, 81, 0, 135, 135, 135, 139, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48,
+ 48, 48, 48, 48, 48, 48, 140, 48, 48, 140, 48, 48, 48, 48, 48, 135, 139,
+ 141, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 139, 139,
+ 139, 139, 142, 139, 139, 48, 81, 86, 81, 81, 135, 135, 135, 143, 143,
+ 143, 143, 143, 143, 143, 143, 48, 48, 135, 135, 83, 83, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 83, 53, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 48, 48, 48, 48, 48, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0,
+ 48, 0, 0, 0, 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135,
+ 135, 0, 0, 139, 139, 0, 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 0, 0, 0, 0, 143, 143, 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 48, 48, 85, 85, 148, 148, 148, 148,
+ 148, 148, 80, 85, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48,
+ 48, 0, 0, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+ 48, 0, 48, 143, 0, 48, 143, 0, 48, 48, 0, 0, 145, 0, 139, 139, 139, 135,
+ 135, 0, 0, 0, 0, 135, 135, 0, 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0,
+ 0, 0, 0, 143, 143, 143, 48, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135,
+ 135, 135, 0, 135, 135, 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48,
+ 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48,
+ 48, 48, 48, 0, 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139,
+ 147, 0, 0, 147, 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0,
+ 143, 143, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48,
+ 0, 48, 48, 140, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48,
+ 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 0, 0, 146, 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147,
+ 147, 147, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148,
+ 148, 148, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 0, 139, 139,
+ 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0,
+ 0, 0, 48, 135, 135, 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135,
+ 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 0, 0, 0, 0, 0,
+ 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 0, 0, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, 0,
+ 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48,
+ 48, 0, 0, 145, 48, 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, 147,
+ 0, 147, 147, 135, 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0,
+ 0, 48, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139,
+ 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 48, 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, 139, 0,
+ 147, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0,
+ 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, 48, 48,
+ 0, 0, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 155, 0, 0, 0, 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, 147,
+ 139, 147, 147, 147, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, 157,
+ 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 158, 158, 158,
+ 158, 135, 135, 135, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 0, 48, 0, 0, 48, 48,
+ 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
+ 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, 48,
+ 135, 48, 156, 135, 135, 135, 135, 159, 159, 0, 135, 135, 48, 0, 0, 48,
+ 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, 160, 135, 135, 0, 0, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 156, 156, 48, 48, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 161, 83,
+ 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, 80,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, 80, 162, 163, 164, 163,
+ 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, 0, 48, 48, 48, 48, 143,
+ 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 48, 48, 48, 0, 0, 0, 0, 165,
+ 166, 167, 168, 167, 167, 169, 167, 169, 166, 166, 166, 166, 135, 139,
+ 166, 167, 81, 81, 142, 83, 81, 81, 48, 48, 48, 48, 48, 135, 135, 135,
+ 135, 135, 135, 167, 135, 135, 135, 135, 0, 135, 135, 135, 135, 167, 135,
+ 135, 135, 135, 167, 135, 135, 135, 135, 167, 135, 135, 135, 135, 167,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 167, 135,
+ 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, 80, 80, 80, 80, 80,
+ 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, 83, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, 139, 135, 149, 135,
+ 135, 139, 135, 135, 135, 135, 135, 145, 139, 142, 142, 139, 139, 135,
+ 135, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83, 83,
+ 83, 83, 83, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, 48, 48, 48, 48,
+ 135, 135, 135, 48, 139, 139, 139, 48, 48, 139, 139, 139, 139, 139, 139,
+ 139, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 135, 139, 139, 135, 135, 139, 139, 139, 139, 139, 139,
+ 86, 48, 139, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 139, 139,
+ 139, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 82, 50, 0, 0, 0, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 47, 169, 169, 169, 169, 169, 169, 169, 169,
- 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 168, 168, 168, 168, 168, 169, 169, 169, 169,
- 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
- 169, 169, 169, 169, 169, 169, 169, 169, 169, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 168, 168, 168, 168, 168,
- 168, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0,
- 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
- 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 0, 0, 80, 80, 80, 79, 82, 82, 82, 82, 82, 82, 82, 82, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 161,
- 162, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 82, 82, 82, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 0, 47, 47, 47, 47, 132, 132, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 132, 132, 139, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 132, 132, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 0, 47, 47, 47, 0, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 172, 172, 136,
- 132, 132, 132, 132, 132, 132, 132, 136, 136, 136, 136, 136, 136, 136,
- 136, 132, 136, 136, 132, 132, 132, 132, 132, 132, 132, 132, 132, 139,
- 132, 82, 82, 82, 52, 82, 82, 82, 145, 47, 80, 0, 0, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 135, 135,
- 83, 135, 135, 135, 135, 132, 132, 132, 170, 0, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 86, 47, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 0, 0, 0, 132, 132, 132, 136, 136, 136, 136, 132,
- 132, 136, 136, 136, 0, 0, 0, 0, 136, 136, 132, 136, 136, 136, 136, 136,
- 136, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 135, 135, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 0, 0, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 47, 47, 47, 47, 47, 47,
- 47, 136, 136, 0, 0, 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 146, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 136, 136, 136, 0, 0, 82, 82,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136,
- 132, 136, 132, 132, 132, 132, 132, 132, 132, 0, 139, 136, 132, 136, 136,
- 132, 132, 132, 132, 132, 132, 132, 132, 136, 136, 136, 136, 136, 136,
- 132, 132, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82,
- 52, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 83, 51, 48, 48, 48, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 48, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 170, 170, 170, 170, 170, 170,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48,
+ 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0,
+ 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 163, 164, 0,
+ 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 83, 83, 83, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135,
+ 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 139, 135, 135,
+ 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 139, 139, 135,
+ 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, 142, 135, 83, 83,
+ 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 84, 138, 138,
+ 138, 138, 135, 135, 135, 172, 0, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 88, 48,
+ 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 0, 0, 0, 135, 135, 135, 139, 139, 139, 139, 135, 135, 139, 139,
+ 139, 0, 0, 0, 0, 139, 139, 135, 139, 139, 139, 139, 139, 139, 87, 81, 86,
+ 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48,
+ 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 0, 0, 0, 0, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 48, 48, 48, 48, 48, 48, 48, 139, 139,
+ 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148,
+ 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 81, 86, 139, 139, 139, 0, 0, 83, 83, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 139, 135,
+ 135, 135, 135, 135, 135, 135, 0, 142, 139, 135, 139, 139, 135, 135, 135,
+ 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 135, 135, 81, 81,
+ 81, 81, 81, 81, 81, 81, 0, 0, 86, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 53, 83, 83, 83, 83,
+ 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132,
- 132, 136, 47, 137, 47, 137, 47, 137, 47, 137, 47, 137, 47, 47, 47, 137,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 143,
- 132, 132, 132, 132, 132, 144, 132, 144, 136, 136, 144, 144, 132, 144,
- 173, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 0, 0, 0, 132, 132, 136, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 136, 132, 132, 132, 132, 136, 136, 132, 132, 173, 0,
- 0, 0, 47, 47, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 139, 48, 140, 48,
+ 140, 48, 140, 48, 140, 48, 140, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 146, 135, 135, 135, 135, 135,
+ 147, 135, 147, 139, 139, 147, 147, 135, 147, 174, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83,
+ 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 86, 81,
+ 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 135,
+ 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135,
+ 135, 135, 139, 139, 135, 135, 174, 142, 139, 139, 48, 48, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145,
+ 139, 135, 135, 139, 139, 139, 135, 139, 135, 135, 135, 174, 174, 0, 0, 0,
+ 0, 0, 0, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 139, 139, 139, 139, 139,
+ 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 145, 0, 0, 0, 83,
+ 83, 83, 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0,
+ 0, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83,
+ 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 175, 86, 86, 86, 86, 86,
+ 81, 81, 86, 86, 86, 86, 81, 139, 175, 175, 175, 175, 175, 175, 175, 48,
+ 48, 48, 48, 86, 48, 48, 48, 48, 139, 139, 81, 48, 48, 0, 0, 0, 0, 0, 0,
0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 142, 136, 132, 132, 136, 136, 136, 132, 136, 132, 132,
- 132, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 51, 51, 53, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136,
- 136, 136, 136, 136, 136, 132, 132, 132, 132, 132, 132, 132, 132, 136,
- 136, 132, 142, 0, 0, 0, 82, 82, 82, 82, 82, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 0, 0, 0, 47, 47, 47, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52,
- 52, 52, 52, 52, 52, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 82, 174,
- 84, 84, 84, 84, 84, 80, 80, 84, 84, 84, 84, 80, 136, 174, 174, 174, 174,
- 174, 174, 174, 47, 47, 47, 47, 84, 47, 47, 47, 47, 136, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 80,
- 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, 175, 176, 84, 177, 80,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 81, 81, 86, 81,
+ 81, 81, 81, 81, 81, 81, 86, 81, 81, 176, 177, 86, 178, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 86,
+ 81, 86, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 180, 47, 47, 44, 47,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43,
+ 44, 47, 44, 47, 44, 47, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38,
+ 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0,
+ 0, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43,
+ 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43,
+ 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43,
+ 43, 43, 0, 38, 0, 38, 0, 38, 0, 38, 43, 43, 43, 43, 43, 43, 43, 43, 38,
+ 38, 38, 38, 38, 38, 38, 38, 43, 181, 43, 181, 43, 181, 43, 181, 43, 181,
+ 43, 181, 43, 181, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182,
+ 182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182,
+ 182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182,
+ 182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 183,
+ 182, 58, 181, 58, 58, 76, 43, 43, 43, 0, 43, 43, 38, 183, 38, 183, 182,
+ 76, 76, 76, 43, 43, 43, 181, 0, 0, 43, 43, 38, 38, 38, 183, 0, 76, 76,
+ 76, 43, 43, 43, 181, 43, 43, 43, 43, 38, 38, 38, 183, 38, 76, 184, 184,
+ 0, 0, 43, 43, 43, 0, 43, 43, 38, 183, 38, 183, 182, 184, 58, 0, 185, 185,
+ 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 188, 189,
+ 190, 191, 84, 190, 190, 190, 22, 192, 193, 194, 195, 196, 193, 194, 195,
+ 196, 22, 22, 22, 138, 197, 197, 197, 22, 198, 199, 200, 201, 202, 203,
+ 204, 21, 205, 110, 205, 206, 207, 22, 192, 192, 138, 28, 36, 22, 192,
+ 138, 197, 208, 208, 138, 138, 138, 209, 163, 164, 192, 192, 192, 138,
+ 138, 138, 138, 138, 138, 138, 138, 78, 138, 208, 138, 138, 192, 138, 138,
+ 138, 138, 138, 138, 138, 186, 187, 187, 187, 187, 187, 0, 0, 0, 0, 0,
+ 187, 187, 187, 187, 187, 187, 210, 51, 0, 0, 34, 210, 210, 210, 210, 210,
+ 211, 211, 212, 213, 214, 215, 210, 34, 34, 34, 34, 210, 210, 210, 210,
+ 210, 211, 211, 212, 213, 214, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 216, 217, 85, 85,
+ 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 175, 175, 81, 81,
+ 81, 81, 175, 175, 175, 81, 81, 82, 82, 82, 82, 81, 82, 82, 82, 175, 175,
+ 81, 86, 81, 175, 175, 86, 86, 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 218, 218, 49, 219, 26, 219, 218, 49, 26, 219, 35, 49, 49,
+ 49, 35, 35, 49, 49, 49, 46, 26, 49, 219, 26, 78, 49, 49, 49, 49, 49, 26,
+ 26, 218, 219, 219, 26, 49, 26, 220, 26, 49, 26, 183, 220, 49, 49, 221,
+ 35, 49, 49, 44, 49, 35, 156, 156, 156, 156, 35, 26, 218, 35, 35, 49, 49,
+ 222, 78, 78, 78, 78, 49, 35, 35, 35, 35, 26, 78, 26, 26, 47, 80, 223,
+ 223, 223, 37, 37, 223, 223, 223, 223, 223, 223, 37, 37, 37, 37, 223, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225,
+ 225, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225,
+ 225, 225, 225, 173, 173, 173, 44, 47, 173, 173, 173, 173, 37, 0, 0, 0, 0,
+ 0, 0, 40, 40, 40, 40, 40, 30, 30, 30, 30, 30, 226, 226, 26, 26, 26, 26,
+ 78, 26, 26, 78, 26, 26, 78, 26, 26, 26, 26, 26, 26, 26, 226, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 227, 226, 226, 26, 26, 40, 26, 40,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 40, 228, 229, 229, 230, 78, 78, 40, 229, 230,
+ 228, 229, 230, 228, 78, 40, 78, 229, 231, 232, 78, 229, 228, 78, 78, 78,
+ 229, 228, 228, 229, 40, 229, 229, 228, 228, 40, 230, 40, 230, 40, 40, 40,
+ 40, 229, 233, 222, 229, 222, 222, 228, 228, 228, 40, 40, 40, 40, 78, 228,
+ 78, 228, 229, 229, 228, 228, 228, 230, 228, 228, 230, 228, 228, 230, 229,
+ 230, 228, 228, 229, 78, 78, 78, 78, 78, 229, 228, 228, 228, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 228, 234, 40, 230, 78, 229, 229, 229, 229, 228,
+ 228, 229, 229, 78, 226, 234, 234, 230, 230, 228, 228, 230, 230, 228, 228,
+ 230, 230, 228, 228, 228, 228, 228, 228, 230, 230, 229, 229, 230, 230,
+ 229, 229, 230, 230, 228, 228, 228, 78, 78, 228, 228, 228, 228, 78, 78,
+ 40, 78, 78, 228, 40, 78, 78, 78, 78, 78, 78, 78, 78, 228, 228, 78, 40,
+ 228, 228, 228, 228, 228, 228, 230, 230, 230, 230, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 78, 78, 78, 78, 78, 228, 229, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 228, 228, 228, 228, 228, 78, 78, 228, 228, 78, 78,
+ 78, 78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 230, 230, 230,
+ 230, 228, 228, 228, 228, 228, 228, 230, 230, 230, 230, 78, 78, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 26,
+ 26, 26, 26, 26, 26, 26, 26, 228, 228, 228, 228, 26, 26, 26, 26, 26, 26,
+ 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 228, 228, 26, 26,
+ 26, 26, 26, 26, 26, 235, 236, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 178, 84, 80, 84, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 179, 46,
- 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38,
- 43, 38, 43, 44, 46, 44, 46, 44, 46, 43, 43, 43, 43, 43, 43, 43, 43, 38,
- 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38,
- 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38,
- 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43,
- 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43,
- 43, 43, 43, 43, 0, 38, 0, 38, 0, 38, 0, 38, 43, 43, 43, 43, 43, 43, 43,
- 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 180, 43, 180, 43, 180, 43, 180,
- 43, 180, 43, 180, 43, 180, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 181,
- 181, 181, 181, 181, 181, 181, 181, 43, 43, 43, 43, 43, 43, 43, 43, 181,
- 181, 181, 181, 181, 181, 181, 181, 43, 43, 43, 43, 43, 43, 43, 43, 181,
- 181, 181, 181, 181, 181, 181, 181, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38,
- 38, 182, 181, 57, 180, 57, 57, 75, 43, 43, 43, 0, 43, 43, 38, 182, 38,
- 182, 181, 75, 75, 75, 43, 43, 43, 180, 0, 0, 43, 43, 38, 38, 38, 182, 0,
- 75, 75, 75, 43, 43, 43, 180, 43, 43, 43, 43, 38, 38, 38, 182, 38, 75,
- 183, 183, 0, 0, 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 183, 57, 0,
- 184, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186,
- 172, 187, 188, 189, 83, 188, 188, 188, 22, 190, 191, 192, 193, 194, 191,
- 192, 193, 194, 22, 22, 22, 135, 195, 195, 195, 22, 196, 197, 198, 199,
- 200, 201, 202, 21, 203, 108, 203, 204, 205, 22, 190, 190, 135, 29, 36,
- 22, 190, 135, 195, 206, 206, 135, 135, 135, 207, 161, 162, 190, 190, 190,
- 135, 135, 135, 135, 135, 135, 135, 135, 77, 135, 206, 135, 135, 190, 135,
- 135, 135, 135, 135, 135, 135, 185, 186, 186, 186, 186, 186, 0, 0, 0, 0,
- 0, 186, 186, 186, 186, 186, 186, 208, 50, 0, 0, 34, 208, 208, 208, 208,
- 208, 209, 209, 210, 211, 212, 213, 208, 34, 34, 34, 34, 208, 208, 208,
- 208, 208, 209, 209, 210, 211, 212, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 214,
- 215, 145, 145, 23, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 80, 174, 174, 80, 80, 80, 80, 174, 174, 174, 80, 80, 81, 81, 81,
- 81, 80, 81, 81, 81, 174, 174, 80, 84, 80, 174, 174, 84, 84, 84, 84, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 48, 217, 27, 217,
- 216, 48, 27, 217, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 217,
- 27, 77, 48, 48, 48, 48, 48, 27, 27, 216, 217, 217, 27, 48, 27, 218, 27,
- 48, 27, 182, 218, 48, 48, 219, 35, 48, 48, 44, 48, 35, 154, 154, 154,
- 154, 35, 27, 216, 35, 35, 48, 48, 220, 77, 77, 77, 77, 48, 35, 35, 35,
- 35, 27, 77, 27, 27, 46, 79, 221, 221, 221, 37, 37, 221, 221, 221, 221,
- 221, 221, 37, 37, 37, 37, 221, 222, 222, 222, 222, 222, 222, 222, 222,
- 222, 222, 222, 222, 223, 223, 223, 223, 222, 222, 222, 222, 222, 222,
- 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 171, 171, 171, 44, 46,
- 171, 171, 171, 171, 37, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25,
- 25, 25, 224, 224, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27,
- 27, 27, 27, 27, 224, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225,
- 224, 224, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 226, 227,
- 227, 228, 77, 77, 40, 227, 228, 226, 227, 228, 226, 77, 40, 77, 227, 229,
- 230, 77, 227, 226, 77, 77, 77, 227, 226, 226, 227, 40, 227, 227, 226,
- 226, 40, 228, 40, 228, 40, 40, 40, 40, 227, 231, 220, 227, 220, 220, 226,
- 226, 226, 40, 40, 40, 40, 77, 226, 77, 226, 227, 227, 226, 226, 226, 228,
- 226, 226, 228, 226, 226, 228, 227, 228, 226, 226, 227, 77, 77, 77, 77,
- 77, 227, 226, 226, 226, 77, 77, 77, 77, 77, 77, 77, 77, 77, 226, 232, 40,
- 228, 77, 227, 227, 227, 227, 226, 226, 227, 227, 77, 224, 232, 232, 228,
- 228, 226, 226, 228, 228, 226, 226, 228, 228, 226, 226, 226, 226, 226,
- 226, 228, 228, 227, 227, 228, 228, 227, 227, 228, 228, 226, 226, 226, 77,
- 77, 226, 226, 226, 226, 77, 77, 40, 77, 77, 226, 40, 77, 77, 77, 77, 77,
- 77, 77, 77, 226, 226, 77, 40, 226, 226, 226, 226, 226, 226, 228, 228,
- 228, 228, 226, 226, 226, 226, 226, 226, 226, 226, 226, 77, 77, 77, 77,
- 77, 226, 227, 77, 77, 77, 77, 77, 77, 77, 77, 77, 226, 226, 226, 226,
- 226, 77, 77, 226, 226, 77, 77, 77, 77, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 228, 228, 228, 228, 226, 226, 226, 226, 226, 226, 228,
- 228, 228, 228, 77, 77, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 27, 27, 27, 27, 27, 27, 27, 27, 226, 226,
- 226, 226, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 226, 226, 27, 27, 27, 27, 27, 27, 27, 233, 234, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27,
- 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77,
- 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 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, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 78, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37,
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 221, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27,
- 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25,
- 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27,
- 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25,
- 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25,
- 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27,
- 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27,
- 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25,
- 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 27, 25, 27, 27, 27, 27, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 161, 162,
- 161, 162, 161, 162, 161, 162, 161, 162, 161, 162, 161, 162, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 226, 77, 77, 226, 226, 161, 162, 77, 226,
- 226, 77, 0, 226, 0, 77, 77, 77, 77, 77, 226, 226, 226, 226, 77, 77, 77,
- 77, 77, 226, 226, 226, 77, 77, 77, 226, 226, 226, 226, 9, 10, 9, 10, 9,
- 10, 9, 10, 161, 162, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 161, 162, 9, 10, 161, 162, 161,
- 162, 161, 162, 161, 162, 161, 162, 161, 162, 161, 162, 161, 162, 161,
- 162, 77, 77, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 77, 77, 77, 77, 77, 77, 77,
- 77, 226, 77, 77, 77, 77, 77, 77, 77, 226, 226, 226, 226, 226, 226, 77,
- 77, 77, 226, 77, 77, 77, 77, 226, 226, 226, 226, 226, 77, 226, 226, 77,
- 77, 161, 162, 161, 162, 226, 77, 77, 77, 77, 226, 77, 226, 226, 226, 77,
- 77, 226, 226, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 226, 226, 226, 226,
- 226, 226, 77, 77, 161, 162, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 226, 226, 220, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 77, 226, 226, 226, 226, 77, 77, 226, 77, 226,
- 77, 77, 226, 77, 226, 226, 226, 226, 77, 77, 77, 77, 77, 226, 226, 77,
- 77, 77, 77, 77, 77, 226, 226, 226, 77, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 226, 226, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 226, 226, 77, 77, 77, 77, 226,
- 226, 226, 226, 77, 226, 226, 77, 77, 226, 220, 210, 210, 77, 77, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 77,
- 77, 226, 226, 226, 226, 226, 226, 226, 226, 77, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 77, 77, 77, 77, 77, 237, 77, 226, 77,
- 77, 77, 226, 226, 226, 226, 226, 77, 77, 77, 77, 77, 226, 226, 226, 77,
- 77, 77, 77, 226, 77, 77, 77, 226, 226, 226, 226, 226, 77, 226, 77, 77,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77,
- 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46,
- 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46,
- 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80,
- 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 151, 135, 135, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 82, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 139, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47,
- 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47,
- 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0,
- 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 223, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 30, 30, 26, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26,
+ 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26,
+ 26, 26, 30, 30, 30, 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78,
+ 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26,
+ 26, 26, 30, 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26,
+ 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26,
+ 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30,
+ 26, 30, 30, 30, 30, 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30,
+ 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30,
+ 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164,
+ 163, 164, 163, 164, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 228, 78, 78,
+ 228, 228, 163, 164, 78, 228, 228, 78, 228, 228, 228, 78, 78, 78, 78, 78,
+ 228, 228, 228, 228, 78, 78, 78, 78, 78, 228, 228, 228, 78, 78, 78, 228,
+ 228, 228, 228, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 135, 135, 29, 36, 29, 36, 135, 135, 135, 29, 36, 135, 29,
- 36, 135, 135, 135, 135, 135, 135, 135, 135, 135, 83, 135, 135, 83, 135,
- 29, 36, 135, 135, 29, 36, 161, 162, 161, 162, 161, 162, 161, 162, 135,
- 135, 135, 135, 135, 51, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 163, 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163,
+ 164, 163, 164, 163, 164, 163, 164, 78, 78, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 78, 78, 78, 78, 78, 78, 78, 78, 228, 78, 78, 78, 78, 78, 78, 78,
+ 228, 228, 228, 228, 228, 228, 78, 78, 78, 228, 78, 78, 78, 78, 228, 228,
+ 228, 228, 228, 78, 228, 228, 78, 78, 163, 164, 163, 164, 228, 78, 78, 78,
+ 78, 228, 78, 228, 228, 228, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 228, 228, 228, 228, 228, 228, 78, 78, 163, 164, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 228, 228, 222, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 78, 228, 228,
+ 228, 228, 78, 78, 228, 78, 228, 78, 78, 228, 78, 228, 228, 228, 228, 78,
+ 78, 78, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 228, 228, 228, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 228, 228, 78, 78, 78, 78, 228, 228, 228, 228, 78, 228, 228, 78, 78, 228,
+ 222, 212, 212, 78, 78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 78, 78, 228, 228, 228, 228, 228, 228, 228, 228,
+ 78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 78, 78, 78,
+ 78, 78, 239, 78, 228, 78, 78, 78, 228, 228, 228, 228, 228, 78, 78, 78,
+ 78, 78, 228, 228, 228, 78, 78, 78, 78, 228, 78, 78, 78, 228, 228, 228,
+ 228, 228, 78, 228, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 26, 26, 78, 78, 78, 78, 78, 78, 0, 0, 0, 26, 26, 26, 26,
+ 26, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 0, 238, 238, 238, 238, 239, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 240, 241, 241, 241,
- 238, 242, 168, 243, 244, 245, 244, 245, 244, 245, 244, 245, 244, 245,
- 238, 238, 244, 245, 244, 245, 244, 245, 244, 245, 246, 247, 248, 248,
- 238, 243, 243, 243, 243, 243, 243, 243, 243, 243, 249, 250, 251, 252,
- 253, 253, 246, 242, 242, 242, 242, 242, 239, 238, 254, 254, 254, 242,
- 168, 241, 238, 27, 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 255, 168, 255, 168, 255, 168, 255, 168, 255, 168, 255, 168, 255,
- 168, 255, 168, 255, 168, 255, 168, 255, 168, 255, 168, 168, 255, 168,
- 255, 168, 255, 168, 168, 168, 168, 168, 168, 255, 255, 168, 255, 255,
- 168, 255, 255, 168, 255, 255, 168, 255, 255, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 255, 168, 168, 0, 0, 256, 256, 257, 257, 242, 258, 259,
- 246, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 255, 168,
- 255, 168, 255, 168, 255, 168, 255, 168, 255, 168, 255, 168, 255, 168,
- 255, 168, 255, 168, 255, 168, 255, 168, 168, 255, 168, 255, 168, 255,
- 168, 168, 168, 168, 168, 168, 255, 255, 168, 255, 255, 168, 255, 255,
- 168, 255, 255, 168, 255, 255, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 255, 168, 168, 255, 255, 255, 255, 241, 242, 242, 258, 259, 0, 0, 0, 0,
- 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 0, 260, 260, 261, 261,
- 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0, 0,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 239, 239, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261,
- 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 263, 263, 263, 263, 263, 263, 263, 263, 239, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 239,
- 239, 239, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 239, 239, 239, 239, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 0, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 239, 239, 239,
- 239, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 239, 239, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 239, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 242, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52,
- 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 135, 135,
- 135, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 47, 80, 81, 81, 81, 135, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 135, 51,
- 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46,
- 44, 46, 44, 46, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0,
- 0, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44,
- 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44,
- 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44,
- 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44,
- 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44,
- 46, 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46,
- 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 265, 265, 44, 46, 44, 46,
- 0, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44,
- 46, 44, 46, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, 47, 47, 47, 47,
- 132, 47, 47, 47, 139, 47, 47, 47, 47, 132, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136,
- 132, 132, 136, 27, 27, 27, 27, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146,
- 79, 79, 145, 219, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0,
- 136, 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82,
- 47, 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 132, 132, 132, 132, 132, 84, 84, 84, 82,
- 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
- 132, 136, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 132, 132,
- 132, 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 136, 136, 132,
- 132, 132, 132, 136, 136, 132, 136, 136, 136, 173, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 0, 52, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 0, 0, 0, 0, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 132, 132, 132, 132, 132, 132, 136, 136, 132, 132, 136, 136, 132, 132,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 132, 47, 47, 47, 47, 47, 47, 47,
- 47, 132, 136, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
- 0, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 136, 0, 0, 0, 0,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 44, 47, 44, 44, 44, 47, 47, 44,
+ 47, 44, 47, 44, 47, 44, 44, 44, 44, 47, 44, 47, 47, 44, 47, 47, 47, 47,
+ 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 26,
+ 26, 26, 26, 26, 26, 44, 47, 44, 47, 81, 81, 81, 44, 47, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 153, 138, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 47, 80, 80, 84, 47,
- 47, 80, 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 82, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 47, 0,
+ 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
+ 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+ 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+ 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48,
+ 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 138, 138, 28, 36, 28, 36, 138, 138, 138, 28, 36, 138, 28, 36, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 84, 138, 138, 84, 138, 28, 36, 138,
+ 138, 28, 36, 163, 164, 163, 164, 163, 164, 163, 164, 138, 138, 138, 138,
+ 138, 52, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, 84, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 0, 240, 240, 240, 240, 241, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 0, 0, 0, 0, 242, 243, 243, 243,
+ 240, 244, 170, 245, 246, 247, 246, 247, 246, 247, 246, 247, 246, 247,
+ 240, 240, 246, 247, 246, 247, 246, 247, 246, 247, 248, 249, 250, 250,
+ 240, 245, 245, 245, 245, 245, 245, 245, 245, 245, 251, 252, 253, 254,
+ 255, 255, 248, 244, 244, 244, 244, 244, 241, 240, 256, 256, 256, 244,
+ 170, 243, 240, 26, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257,
+ 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 170, 257, 170,
+ 257, 170, 257, 170, 170, 170, 170, 170, 170, 257, 257, 170, 257, 257,
+ 170, 257, 257, 170, 257, 257, 170, 257, 257, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 257, 170, 170, 0, 0, 258, 258, 259, 259, 244, 260, 261,
+ 248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 257, 170,
+ 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170,
+ 257, 170, 257, 170, 257, 170, 257, 170, 170, 257, 170, 257, 170, 257,
+ 170, 170, 170, 170, 170, 170, 257, 257, 170, 257, 257, 170, 257, 257,
+ 170, 257, 257, 170, 257, 257, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 257, 170, 170, 257, 257, 257, 257, 243, 244, 244, 260, 261, 0, 0, 0, 0,
+ 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 262, 262, 263, 263,
+ 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 241, 241, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265, 241, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 241,
+ 241, 241, 262, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 241, 241, 241, 241, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 0, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 241, 241, 241,
+ 241, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 241, 241, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 241, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 244, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 0, 0, 0, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53,
+ 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138,
+ 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 81, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 81, 81, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0,
+ 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+ 44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44,
+ 47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 267, 267, 44, 47, 44,
+ 47, 0, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44,
+ 47, 44, 47, 44, 47, 44, 47, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 47, 48, 48, 48, 48,
+ 48, 48, 48, 135, 48, 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 139, 139, 135, 135, 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148,
+ 148, 148, 148, 80, 80, 85, 221, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0,
+ 0, 0, 0, 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 48, 48, 48, 48, 48, 48,
+ 83, 83, 83, 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86,
+ 86, 86, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 139, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0,
+ 0, 0, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145,
+ 139, 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 174, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47,
- 47, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47,
- 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 139, 139, 135, 135,
+ 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 135, 48, 48,
+ 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 80, 80, 80,
+ 48, 139, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 81,
+ 48, 81, 81, 86, 48, 48, 81, 81, 48, 48, 48, 48, 48, 81, 81, 48, 81, 48,
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, 48, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135,
+ 135, 139, 139, 83, 83, 48, 53, 53, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48,
+ 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0,
+ 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 132, 136, 136, 132,
- 136, 136, 82, 136, 139, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 0, 0, 0, 0, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 168, 168, 268, 168, 268, 168, 168, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 168, 268, 168, 268, 168,
- 168, 268, 268, 168, 168, 168, 268, 268, 268, 268, 0, 0, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, 135, 139, 139, 83, 139,
+ 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0,
+ 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 269, 270, 269,
- 271, 271, 271, 271, 271, 271, 271, 271, 271, 209, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269, 269, 0, 269, 269, 269, 269, 269,
- 0, 269, 0, 269, 269, 0, 269, 269, 0, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 271, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
- 272, 272, 272, 272, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 193, 273, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 274, 27, 0, 0, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 275, 275, 275, 275, 275, 275,
- 275, 276, 277, 275, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 275, 278, 278, 279, 279, 276, 277, 276, 277, 276,
- 277, 276, 277, 276, 277, 276, 277, 276, 277, 276, 277, 241, 241, 276,
- 277, 275, 275, 275, 275, 279, 279, 279, 280, 275, 280, 0, 275, 280, 275,
- 275, 278, 281, 282, 281, 282, 281, 282, 283, 275, 275, 284, 285, 286,
- 286, 287, 0, 275, 288, 283, 275, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 186, 0, 289, 289, 290,
- 291, 290, 289, 289, 292, 293, 289, 294, 295, 296, 295, 295, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297, 295, 289, 298, 299, 298, 289,
- 289, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 292,
- 289, 293, 301, 302, 301, 303, 303, 303, 303, 303, 303, 303, 303, 303,
- 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
- 303, 303, 303, 292, 299, 293, 299, 292, 293, 304, 305, 306, 304, 304,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 308, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 308, 308, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 0, 0, 0, 307, 307, 307, 307, 307, 307, 0, 0,
- 307, 307, 307, 307, 307, 307, 0, 0, 307, 307, 307, 307, 307, 307, 0, 0,
- 307, 307, 307, 0, 0, 0, 291, 291, 299, 301, 309, 291, 291, 0, 310, 311,
- 311, 311, 311, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 312, 312, 27,
- 25, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 82, 135, 79, 0, 0, 0, 0,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 313, 313,
- 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
- 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
- 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
- 313, 313, 313, 313, 313, 313, 313, 313, 313, 151, 151, 151, 151, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 151, 0, 0, 0,
- 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 84, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 170, 170, 270, 170, 270, 170, 170, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 170, 270, 170, 270, 170, 170, 270, 270, 170, 170,
+ 170, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 0, 0,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 271, 272, 271, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 211, 271, 271, 271, 271, 271, 271, 271, 271,
+ 271, 271, 271, 271, 271, 0, 271, 271, 271, 271, 271, 0, 271, 0, 271, 271,
+ 0, 271, 271, 0, 271, 271, 271, 271, 271, 271, 271, 271, 271, 273, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 195, 275, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 276, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 277, 277, 277, 277, 277, 277, 277, 278, 279,
+ 277, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 277, 280, 280, 281, 281, 278, 279, 278, 279, 278, 279, 278, 279,
+ 278, 279, 278, 279, 278, 279, 278, 279, 243, 243, 278, 279, 277, 277,
+ 277, 277, 281, 281, 281, 282, 277, 282, 0, 277, 282, 277, 277, 280, 283,
+ 284, 283, 284, 283, 284, 285, 277, 277, 286, 287, 288, 288, 289, 0, 277,
+ 290, 285, 277, 0, 0, 0, 0, 130, 130, 130, 117, 130, 0, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 0, 187, 0, 291, 291, 292, 293, 292, 291,
+ 291, 294, 295, 291, 296, 297, 298, 297, 297, 299, 299, 299, 299, 299,
+ 299, 299, 299, 299, 299, 297, 291, 300, 301, 300, 291, 291, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 294, 291, 295, 303,
+ 304, 303, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 294, 301, 295, 301, 294, 295, 306, 307, 308, 306, 306, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 310, 309, 309, 309, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 310, 310, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 309, 0, 0, 0, 309, 309, 309, 309, 309, 309, 0, 0, 309, 309, 309,
+ 309, 309, 309, 0, 0, 309, 309, 309, 309, 309, 309, 0, 0, 309, 309, 309,
+ 0, 0, 0, 293, 293, 301, 303, 311, 293, 293, 0, 312, 313, 313, 313, 313,
+ 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 314, 314, 26, 30, 0, 0, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 153, 153, 153, 153, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 0, 0, 0, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 146, 146, 146, 146, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 171, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 86, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 148, 148, 148, 148, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, 48, 173, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 82, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 47, 82, 171, 171, 171, 171, 171, 0, 0, 0,
+ 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 0, 48, 48, 48, 48, 48, 48, 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105,
- 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 0, 102, 314, 314, 314, 314, 314, 314,
- 314, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 314, 314, 314, 314, 314, 314, 0, 0, 0, 135, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 105, 132, 132, 132, 0, 132, 132, 0, 0, 0, 0, 0,
- 132, 84, 132, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 174,
- 84, 0, 0, 0, 0, 139, 314, 314, 314, 314, 314, 314, 314, 314, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0,
- 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 314, 314, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 0, 0, 314, 314, 314, 314, 314, 314, 314, 314,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 314, 314, 314, 314, 314, 314,
- 314, 314, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 315, 315, 315, 315,
- 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
- 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 0, 136, 132,
- 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
- 139, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 136, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 47,
- 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 47, 47,
- 47, 47, 136, 136, 136, 132, 132, 132, 132, 136, 136, 139, 138, 82, 82,
- 172, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
+ 107, 107, 0, 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 0, 104, 316, 316, 316, 316, 316, 316,
+ 316, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 316, 316, 316, 316, 316, 316, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0,
+ 135, 86, 135, 81, 107, 107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 175,
+ 86, 0, 0, 0, 0, 142, 316, 316, 316, 316, 316, 316, 316, 316, 0, 0, 0, 0,
+ 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0,
+ 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 316, 316, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 316, 316, 316, 316, 316, 316,
+ 316, 316, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 317, 317, 317, 317,
+ 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317,
+ 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 0, 139, 135,
+ 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 142, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48,
+ 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48,
+ 48, 48, 139, 139, 139, 135, 135, 135, 135, 139, 139, 142, 141, 83, 83,
+ 188, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 149, 135, 135, 135, 135,
+ 139, 135, 150, 150, 135, 135, 135, 142, 142, 0, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139,
+ 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, 139, 174, 48, 48, 48,
+ 48, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, 135, 135, 135, 135, 135,
+ 174, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 316, 316, 316, 316, 316,
- 316, 316, 317, 317, 174, 174, 174, 79, 79, 79, 318, 317, 317, 317, 317,
- 317, 186, 186, 186, 186, 186, 186, 186, 186, 84, 84, 84, 84, 84, 84, 84,
- 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 316, 316, 316, 316, 316, 316, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48,
- 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35,
- 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 0, 48, 48, 48, 48, 48, 48, 48, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48,
- 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48,
- 48, 48, 48, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83,
+ 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
+ 135, 135, 135, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
+ 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 318, 318, 318, 318, 318, 318, 318, 319, 319,
+ 175, 175, 175, 80, 80, 80, 320, 319, 319, 319, 319, 319, 187, 187, 187,
+ 187, 187, 187, 187, 187, 86, 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81,
+ 81, 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81,
+ 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 318, 318,
+ 318, 318, 318, 318, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81,
+ 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35,
+ 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49,
+ 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0,
+ 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49,
+ 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 49, 49,
+ 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49,
+ 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49,
+ 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 319, 35, 35, 35, 35, 35, 35, 35,
+ 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 220, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 319, 35, 35, 35,
+ 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 222,
+ 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 220, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 319, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 220, 35, 35, 35, 35, 35, 35, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 319, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 220, 35, 35, 35, 35, 35,
- 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 319, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 220, 35,
- 35, 35, 35, 35, 35, 48, 35, 0, 0, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
- 0, 0, 0, 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 321, 0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 263, 263, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 0, 0, 0, 0, 0, 0, 263, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
- 235, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 262, 262, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
- 262, 262, 0, 0, 0, 0, 0, 262, 262, 262, 262, 262, 262, 262, 262, 262, 0,
- 0, 0, 0, 0, 0, 0, 262, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 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, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27,
- 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27,
- 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 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, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 0, 27, 0, 27, 0, 27,
- 0, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 0, 27, 0,
- 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0,
- 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 0, 0,
+ 35, 35, 35, 222, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 321,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 222, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 222, 35, 35, 35, 35, 35, 35,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 222, 35, 35,
+ 35, 35, 35, 35, 49, 35, 0, 0, 322, 322, 322, 322, 322, 322, 322, 322,
+ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ 130, 130, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 0, 130, 130, 0, 130, 0, 0, 130, 0, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 130, 130, 130, 130, 0, 130, 0, 130, 0,
+ 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 130, 0, 130, 0, 130, 0, 130, 130, 130, 0,
+ 130, 130, 0, 130, 0, 0, 130, 0, 130, 0, 130, 0, 130, 0, 130, 0, 130, 130,
+ 0, 130, 0, 0, 130, 130, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130,
+ 0, 130, 130, 130, 130, 0, 130, 130, 130, 130, 0, 130, 0, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 130,
+ 130, 130, 0, 130, 130, 130, 130, 130, 0, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 323, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 324, 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 218, 218, 0, 0, 0, 0, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 237, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 264, 264, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, 0,
+ 0, 0, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, 0, 0, 0, 0, 0,
+ 264, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 0, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 0, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 0, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26,
+ 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
+ 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 0,
+ 0,
};
/* decomposition data */
@@ -3072,321 +3140,322 @@ static unsigned int decomp_data[] = {
50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52,
26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770,
50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49,
- 26085, 778, 103, 97, 108, 259, 42863, 256, 35912, 256, 26356, 256, 36554,
- 256, 36040, 256, 28369, 256, 20018, 256, 21477, 256, 40860, 256, 40860,
- 256, 22865, 256, 37329, 256, 21895, 256, 22856, 256, 25078, 256, 30313,
- 256, 32645, 256, 34367, 256, 34746, 256, 35064, 256, 37007, 256, 27138,
- 256, 27931, 256, 28889, 256, 29662, 256, 33853, 256, 37226, 256, 39409,
- 256, 20098, 256, 21365, 256, 27396, 256, 29211, 256, 34349, 256, 40478,
- 256, 23888, 256, 28651, 256, 34253, 256, 35172, 256, 25289, 256, 33240,
- 256, 34847, 256, 24266, 256, 26391, 256, 28010, 256, 29436, 256, 37070,
- 256, 20358, 256, 20919, 256, 21214, 256, 25796, 256, 27347, 256, 29200,
- 256, 30439, 256, 32769, 256, 34310, 256, 34396, 256, 36335, 256, 38706,
- 256, 39791, 256, 40442, 256, 30860, 256, 31103, 256, 32160, 256, 33737,
- 256, 37636, 256, 40575, 256, 35542, 256, 22751, 256, 24324, 256, 31840,
- 256, 32894, 256, 29282, 256, 30922, 256, 36034, 256, 38647, 256, 22744,
- 256, 23650, 256, 27155, 256, 28122, 256, 28431, 256, 32047, 256, 32311,
- 256, 38475, 256, 21202, 256, 32907, 256, 20956, 256, 20940, 256, 31260,
- 256, 32190, 256, 33777, 256, 38517, 256, 35712, 256, 25295, 256, 27138,
- 256, 35582, 256, 20025, 256, 23527, 256, 24594, 256, 29575, 256, 30064,
- 256, 21271, 256, 30971, 256, 20415, 256, 24489, 256, 19981, 256, 27852,
- 256, 25976, 256, 32034, 256, 21443, 256, 22622, 256, 30465, 256, 33865,
- 256, 35498, 256, 27578, 256, 36784, 256, 27784, 256, 25342, 256, 33509,
- 256, 25504, 256, 30053, 256, 20142, 256, 20841, 256, 20937, 256, 26753,
- 256, 31975, 256, 33391, 256, 35538, 256, 37327, 256, 21237, 256, 21570,
- 256, 22899, 256, 24300, 256, 26053, 256, 28670, 256, 31018, 256, 38317,
- 256, 39530, 256, 40599, 256, 40654, 256, 21147, 256, 26310, 256, 27511,
- 256, 36706, 256, 24180, 256, 24976, 256, 25088, 256, 25754, 256, 28451,
- 256, 29001, 256, 29833, 256, 31178, 256, 32244, 256, 32879, 256, 36646,
- 256, 34030, 256, 36899, 256, 37706, 256, 21015, 256, 21155, 256, 21693,
- 256, 28872, 256, 35010, 256, 35498, 256, 24265, 256, 24565, 256, 25467,
- 256, 27566, 256, 31806, 256, 29557, 256, 20196, 256, 22265, 256, 23527,
- 256, 23994, 256, 24604, 256, 29618, 256, 29801, 256, 32666, 256, 32838,
- 256, 37428, 256, 38646, 256, 38728, 256, 38936, 256, 20363, 256, 31150,
- 256, 37300, 256, 38584, 256, 24801, 256, 20102, 256, 20698, 256, 23534,
- 256, 23615, 256, 26009, 256, 27138, 256, 29134, 256, 30274, 256, 34044,
- 256, 36988, 256, 40845, 256, 26248, 256, 38446, 256, 21129, 256, 26491,
- 256, 26611, 256, 27969, 256, 28316, 256, 29705, 256, 30041, 256, 30827,
- 256, 32016, 256, 39006, 256, 20845, 256, 25134, 256, 38520, 256, 20523,
- 256, 23833, 256, 28138, 256, 36650, 256, 24459, 256, 24900, 256, 26647,
- 256, 29575, 256, 38534, 256, 21033, 256, 21519, 256, 23653, 256, 26131,
- 256, 26446, 256, 26792, 256, 27877, 256, 29702, 256, 30178, 256, 32633,
- 256, 35023, 256, 35041, 256, 37324, 256, 38626, 256, 21311, 256, 28346,
- 256, 21533, 256, 29136, 256, 29848, 256, 34298, 256, 38563, 256, 40023,
- 256, 40607, 256, 26519, 256, 28107, 256, 33256, 256, 31435, 256, 31520,
- 256, 31890, 256, 29376, 256, 28825, 256, 35672, 256, 20160, 256, 33590,
- 256, 21050, 256, 20999, 256, 24230, 256, 25299, 256, 31958, 256, 23429,
- 256, 27934, 256, 26292, 256, 36667, 256, 34892, 256, 38477, 256, 35211,
- 256, 24275, 256, 20800, 256, 21952, 256, 22618, 256, 26228, 256, 20958,
- 256, 29482, 256, 30410, 256, 31036, 256, 31070, 256, 31077, 256, 31119,
- 256, 38742, 256, 31934, 256, 32701, 256, 34322, 256, 35576, 256, 36920,
- 256, 37117, 256, 39151, 256, 39164, 256, 39208, 256, 40372, 256, 20398,
- 256, 20711, 256, 20813, 256, 21193, 256, 21220, 256, 21329, 256, 21917,
- 256, 22022, 256, 22120, 256, 22592, 256, 22696, 256, 23652, 256, 23662,
- 256, 24724, 256, 24936, 256, 24974, 256, 25074, 256, 25935, 256, 26082,
- 256, 26257, 256, 26757, 256, 28023, 256, 28186, 256, 28450, 256, 29038,
- 256, 29227, 256, 29730, 256, 30865, 256, 31038, 256, 31049, 256, 31048,
- 256, 31056, 256, 31062, 256, 31069, 256, 31117, 256, 31118, 256, 31296,
- 256, 31361, 256, 31680, 256, 32244, 256, 32265, 256, 32321, 256, 32626,
- 256, 32773, 256, 33261, 256, 33401, 256, 33401, 256, 33879, 256, 35088,
- 256, 35222, 256, 35585, 256, 35641, 256, 36051, 256, 36104, 256, 36790,
- 256, 36920, 256, 38627, 256, 38911, 256, 38971, 256, 24693, 256, 148206,
- 256, 33304, 256, 20006, 256, 20917, 256, 20840, 256, 20352, 256, 20805,
- 256, 20864, 256, 21191, 256, 21242, 256, 21917, 256, 21845, 256, 21913,
- 256, 21986, 256, 22618, 256, 22707, 256, 22852, 256, 22868, 256, 23138,
- 256, 23336, 256, 24274, 256, 24281, 256, 24425, 256, 24493, 256, 24792,
- 256, 24910, 256, 24840, 256, 24974, 256, 24928, 256, 25074, 256, 25140,
- 256, 25540, 256, 25628, 256, 25682, 256, 25942, 256, 26228, 256, 26391,
- 256, 26395, 256, 26454, 256, 27513, 256, 27578, 256, 27969, 256, 28379,
- 256, 28363, 256, 28450, 256, 28702, 256, 29038, 256, 30631, 256, 29237,
- 256, 29359, 256, 29482, 256, 29809, 256, 29958, 256, 30011, 256, 30237,
- 256, 30239, 256, 30410, 256, 30427, 256, 30452, 256, 30538, 256, 30528,
- 256, 30924, 256, 31409, 256, 31680, 256, 31867, 256, 32091, 256, 32244,
- 256, 32574, 256, 32773, 256, 33618, 256, 33775, 256, 34681, 256, 35137,
- 256, 35206, 256, 35222, 256, 35519, 256, 35576, 256, 35531, 256, 35585,
- 256, 35582, 256, 35565, 256, 35641, 256, 35722, 256, 36104, 256, 36664,
- 256, 36978, 256, 37273, 256, 37494, 256, 38524, 256, 38627, 256, 38742,
- 256, 38875, 256, 38911, 256, 38923, 256, 38971, 256, 39698, 256, 40860,
- 256, 141386, 256, 141380, 256, 144341, 256, 15261, 256, 16408, 256,
- 16441, 256, 152137, 256, 154832, 256, 163539, 256, 40771, 256, 40846,
- 514, 102, 102, 514, 102, 105, 514, 102, 108, 770, 102, 102, 105, 770,
- 102, 102, 108, 514, 383, 116, 514, 115, 116, 514, 1396, 1398, 514, 1396,
- 1381, 514, 1396, 1387, 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 1460,
- 512, 1522, 1463, 262, 1506, 262, 1488, 262, 1491, 262, 1492, 262, 1499,
- 262, 1500, 262, 1501, 262, 1512, 262, 1514, 262, 43, 512, 1513, 1473,
- 512, 1513, 1474, 512, 64329, 1473, 512, 64329, 1474, 512, 1488, 1463,
- 512, 1488, 1464, 512, 1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 512,
- 1491, 1468, 512, 1492, 1468, 512, 1493, 1468, 512, 1494, 1468, 512, 1496,
- 1468, 512, 1497, 1468, 512, 1498, 1468, 512, 1499, 1468, 512, 1500, 1468,
- 512, 1502, 1468, 512, 1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 512,
- 1508, 1468, 512, 1510, 1468, 512, 1511, 1468, 512, 1512, 1468, 512, 1513,
- 1468, 512, 1514, 1468, 512, 1493, 1465, 512, 1489, 1471, 512, 1499, 1471,
- 512, 1508, 1471, 514, 1488, 1500, 267, 1649, 268, 1649, 267, 1659, 268,
- 1659, 269, 1659, 270, 1659, 267, 1662, 268, 1662, 269, 1662, 270, 1662,
- 267, 1664, 268, 1664, 269, 1664, 270, 1664, 267, 1658, 268, 1658, 269,
- 1658, 270, 1658, 267, 1663, 268, 1663, 269, 1663, 270, 1663, 267, 1657,
- 268, 1657, 269, 1657, 270, 1657, 267, 1700, 268, 1700, 269, 1700, 270,
- 1700, 267, 1702, 268, 1702, 269, 1702, 270, 1702, 267, 1668, 268, 1668,
- 269, 1668, 270, 1668, 267, 1667, 268, 1667, 269, 1667, 270, 1667, 267,
- 1670, 268, 1670, 269, 1670, 270, 1670, 267, 1671, 268, 1671, 269, 1671,
- 270, 1671, 267, 1677, 268, 1677, 267, 1676, 268, 1676, 267, 1678, 268,
- 1678, 267, 1672, 268, 1672, 267, 1688, 268, 1688, 267, 1681, 268, 1681,
- 267, 1705, 268, 1705, 269, 1705, 270, 1705, 267, 1711, 268, 1711, 269,
- 1711, 270, 1711, 267, 1715, 268, 1715, 269, 1715, 270, 1715, 267, 1713,
- 268, 1713, 269, 1713, 270, 1713, 267, 1722, 268, 1722, 267, 1723, 268,
- 1723, 269, 1723, 270, 1723, 267, 1728, 268, 1728, 267, 1729, 268, 1729,
- 269, 1729, 270, 1729, 267, 1726, 268, 1726, 269, 1726, 270, 1726, 267,
- 1746, 268, 1746, 267, 1747, 268, 1747, 267, 1709, 268, 1709, 269, 1709,
- 270, 1709, 267, 1735, 268, 1735, 267, 1734, 268, 1734, 267, 1736, 268,
- 1736, 267, 1655, 267, 1739, 268, 1739, 267, 1733, 268, 1733, 267, 1737,
- 268, 1737, 267, 1744, 268, 1744, 269, 1744, 270, 1744, 269, 1609, 270,
- 1609, 523, 1574, 1575, 524, 1574, 1575, 523, 1574, 1749, 524, 1574, 1749,
- 523, 1574, 1608, 524, 1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 523,
- 1574, 1734, 524, 1574, 1734, 523, 1574, 1736, 524, 1574, 1736, 523, 1574,
- 1744, 524, 1574, 1744, 525, 1574, 1744, 523, 1574, 1609, 524, 1574, 1609,
- 525, 1574, 1609, 267, 1740, 268, 1740, 269, 1740, 270, 1740, 523, 1574,
- 1580, 523, 1574, 1581, 523, 1574, 1605, 523, 1574, 1609, 523, 1574, 1610,
- 523, 1576, 1580, 523, 1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 523,
- 1576, 1609, 523, 1576, 1610, 523, 1578, 1580, 523, 1578, 1581, 523, 1578,
- 1582, 523, 1578, 1605, 523, 1578, 1609, 523, 1578, 1610, 523, 1579, 1580,
- 523, 1579, 1605, 523, 1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 523,
- 1580, 1605, 523, 1581, 1580, 523, 1581, 1605, 523, 1582, 1580, 523, 1582,
- 1581, 523, 1582, 1605, 523, 1587, 1580, 523, 1587, 1581, 523, 1587, 1582,
- 523, 1587, 1605, 523, 1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 523,
- 1590, 1581, 523, 1590, 1582, 523, 1590, 1605, 523, 1591, 1581, 523, 1591,
- 1605, 523, 1592, 1605, 523, 1593, 1580, 523, 1593, 1605, 523, 1594, 1580,
- 523, 1594, 1605, 523, 1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 523,
- 1601, 1605, 523, 1601, 1609, 523, 1601, 1610, 523, 1602, 1581, 523, 1602,
- 1605, 523, 1602, 1609, 523, 1602, 1610, 523, 1603, 1575, 523, 1603, 1580,
- 523, 1603, 1581, 523, 1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 523,
- 1603, 1609, 523, 1603, 1610, 523, 1604, 1580, 523, 1604, 1581, 523, 1604,
- 1582, 523, 1604, 1605, 523, 1604, 1609, 523, 1604, 1610, 523, 1605, 1580,
- 523, 1605, 1581, 523, 1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 523,
- 1605, 1610, 523, 1606, 1580, 523, 1606, 1581, 523, 1606, 1582, 523, 1606,
- 1605, 523, 1606, 1609, 523, 1606, 1610, 523, 1607, 1580, 523, 1607, 1605,
- 523, 1607, 1609, 523, 1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 523,
- 1610, 1582, 523, 1610, 1605, 523, 1610, 1609, 523, 1610, 1610, 523, 1584,
- 1648, 523, 1585, 1648, 523, 1609, 1648, 779, 32, 1612, 1617, 779, 32,
- 1613, 1617, 779, 32, 1614, 1617, 779, 32, 1615, 1617, 779, 32, 1616,
- 1617, 779, 32, 1617, 1648, 524, 1574, 1585, 524, 1574, 1586, 524, 1574,
- 1605, 524, 1574, 1606, 524, 1574, 1609, 524, 1574, 1610, 524, 1576, 1585,
- 524, 1576, 1586, 524, 1576, 1605, 524, 1576, 1606, 524, 1576, 1609, 524,
- 1576, 1610, 524, 1578, 1585, 524, 1578, 1586, 524, 1578, 1605, 524, 1578,
- 1606, 524, 1578, 1609, 524, 1578, 1610, 524, 1579, 1585, 524, 1579, 1586,
- 524, 1579, 1605, 524, 1579, 1606, 524, 1579, 1609, 524, 1579, 1610, 524,
- 1601, 1609, 524, 1601, 1610, 524, 1602, 1609, 524, 1602, 1610, 524, 1603,
- 1575, 524, 1603, 1604, 524, 1603, 1605, 524, 1603, 1609, 524, 1603, 1610,
- 524, 1604, 1605, 524, 1604, 1609, 524, 1604, 1610, 524, 1605, 1575, 524,
- 1605, 1605, 524, 1606, 1585, 524, 1606, 1586, 524, 1606, 1605, 524, 1606,
- 1606, 524, 1606, 1609, 524, 1606, 1610, 524, 1609, 1648, 524, 1610, 1585,
- 524, 1610, 1586, 524, 1610, 1605, 524, 1610, 1606, 524, 1610, 1609, 524,
- 1610, 1610, 525, 1574, 1580, 525, 1574, 1581, 525, 1574, 1582, 525, 1574,
- 1605, 525, 1574, 1607, 525, 1576, 1580, 525, 1576, 1581, 525, 1576, 1582,
- 525, 1576, 1605, 525, 1576, 1607, 525, 1578, 1580, 525, 1578, 1581, 525,
- 1578, 1582, 525, 1578, 1605, 525, 1578, 1607, 525, 1579, 1605, 525, 1580,
- 1581, 525, 1580, 1605, 525, 1581, 1580, 525, 1581, 1605, 525, 1582, 1580,
- 525, 1582, 1605, 525, 1587, 1580, 525, 1587, 1581, 525, 1587, 1582, 525,
- 1587, 1605, 525, 1589, 1581, 525, 1589, 1582, 525, 1589, 1605, 525, 1590,
- 1580, 525, 1590, 1581, 525, 1590, 1582, 525, 1590, 1605, 525, 1591, 1581,
- 525, 1592, 1605, 525, 1593, 1580, 525, 1593, 1605, 525, 1594, 1580, 525,
- 1594, 1605, 525, 1601, 1580, 525, 1601, 1581, 525, 1601, 1582, 525, 1601,
- 1605, 525, 1602, 1581, 525, 1602, 1605, 525, 1603, 1580, 525, 1603, 1581,
- 525, 1603, 1582, 525, 1603, 1604, 525, 1603, 1605, 525, 1604, 1580, 525,
- 1604, 1581, 525, 1604, 1582, 525, 1604, 1605, 525, 1604, 1607, 525, 1605,
- 1580, 525, 1605, 1581, 525, 1605, 1582, 525, 1605, 1605, 525, 1606, 1580,
- 525, 1606, 1581, 525, 1606, 1582, 525, 1606, 1605, 525, 1606, 1607, 525,
- 1607, 1580, 525, 1607, 1605, 525, 1607, 1648, 525, 1610, 1580, 525, 1610,
- 1581, 525, 1610, 1582, 525, 1610, 1605, 525, 1610, 1607, 526, 1574, 1605,
- 526, 1574, 1607, 526, 1576, 1605, 526, 1576, 1607, 526, 1578, 1605, 526,
- 1578, 1607, 526, 1579, 1605, 526, 1579, 1607, 526, 1587, 1605, 526, 1587,
- 1607, 526, 1588, 1605, 526, 1588, 1607, 526, 1603, 1604, 526, 1603, 1605,
- 526, 1604, 1605, 526, 1606, 1605, 526, 1606, 1607, 526, 1610, 1605, 526,
- 1610, 1607, 782, 1600, 1614, 1617, 782, 1600, 1615, 1617, 782, 1600,
- 1616, 1617, 523, 1591, 1609, 523, 1591, 1610, 523, 1593, 1609, 523, 1593,
- 1610, 523, 1594, 1609, 523, 1594, 1610, 523, 1587, 1609, 523, 1587, 1610,
- 523, 1588, 1609, 523, 1588, 1610, 523, 1581, 1609, 523, 1581, 1610, 523,
- 1580, 1609, 523, 1580, 1610, 523, 1582, 1609, 523, 1582, 1610, 523, 1589,
- 1609, 523, 1589, 1610, 523, 1590, 1609, 523, 1590, 1610, 523, 1588, 1580,
- 523, 1588, 1581, 523, 1588, 1582, 523, 1588, 1605, 523, 1588, 1585, 523,
- 1587, 1585, 523, 1589, 1585, 523, 1590, 1585, 524, 1591, 1609, 524, 1591,
- 1610, 524, 1593, 1609, 524, 1593, 1610, 524, 1594, 1609, 524, 1594, 1610,
- 524, 1587, 1609, 524, 1587, 1610, 524, 1588, 1609, 524, 1588, 1610, 524,
- 1581, 1609, 524, 1581, 1610, 524, 1580, 1609, 524, 1580, 1610, 524, 1582,
- 1609, 524, 1582, 1610, 524, 1589, 1609, 524, 1589, 1610, 524, 1590, 1609,
- 524, 1590, 1610, 524, 1588, 1580, 524, 1588, 1581, 524, 1588, 1582, 524,
- 1588, 1605, 524, 1588, 1585, 524, 1587, 1585, 524, 1589, 1585, 524, 1590,
- 1585, 525, 1588, 1580, 525, 1588, 1581, 525, 1588, 1582, 525, 1588, 1605,
- 525, 1587, 1607, 525, 1588, 1607, 525, 1591, 1605, 526, 1587, 1580, 526,
- 1587, 1581, 526, 1587, 1582, 526, 1588, 1580, 526, 1588, 1581, 526, 1588,
- 1582, 526, 1591, 1605, 526, 1592, 1605, 524, 1575, 1611, 523, 1575, 1611,
- 781, 1578, 1580, 1605, 780, 1578, 1581, 1580, 781, 1578, 1581, 1580, 781,
- 1578, 1581, 1605, 781, 1578, 1582, 1605, 781, 1578, 1605, 1580, 781,
- 1578, 1605, 1581, 781, 1578, 1605, 1582, 780, 1580, 1605, 1581, 781,
- 1580, 1605, 1581, 780, 1581, 1605, 1610, 780, 1581, 1605, 1609, 781,
- 1587, 1581, 1580, 781, 1587, 1580, 1581, 780, 1587, 1580, 1609, 780,
- 1587, 1605, 1581, 781, 1587, 1605, 1581, 781, 1587, 1605, 1580, 780,
- 1587, 1605, 1605, 781, 1587, 1605, 1605, 780, 1589, 1581, 1581, 781,
- 1589, 1581, 1581, 780, 1589, 1605, 1605, 780, 1588, 1581, 1605, 781,
- 1588, 1581, 1605, 780, 1588, 1580, 1610, 780, 1588, 1605, 1582, 781,
- 1588, 1605, 1582, 780, 1588, 1605, 1605, 781, 1588, 1605, 1605, 780,
- 1590, 1581, 1609, 780, 1590, 1582, 1605, 781, 1590, 1582, 1605, 780,
- 1591, 1605, 1581, 781, 1591, 1605, 1581, 781, 1591, 1605, 1605, 780,
- 1591, 1605, 1610, 780, 1593, 1580, 1605, 780, 1593, 1605, 1605, 781,
- 1593, 1605, 1605, 780, 1593, 1605, 1609, 780, 1594, 1605, 1605, 780,
- 1594, 1605, 1610, 780, 1594, 1605, 1609, 780, 1601, 1582, 1605, 781,
- 1601, 1582, 1605, 780, 1602, 1605, 1581, 780, 1602, 1605, 1605, 780,
- 1604, 1581, 1605, 780, 1604, 1581, 1610, 780, 1604, 1581, 1609, 781,
- 1604, 1580, 1580, 780, 1604, 1580, 1580, 780, 1604, 1582, 1605, 781,
- 1604, 1582, 1605, 780, 1604, 1605, 1581, 781, 1604, 1605, 1581, 781,
- 1605, 1581, 1580, 781, 1605, 1581, 1605, 780, 1605, 1581, 1610, 781,
- 1605, 1580, 1581, 781, 1605, 1580, 1605, 781, 1605, 1582, 1580, 781,
- 1605, 1582, 1605, 781, 1605, 1580, 1582, 781, 1607, 1605, 1580, 781,
- 1607, 1605, 1605, 781, 1606, 1581, 1605, 780, 1606, 1581, 1609, 780,
- 1606, 1580, 1605, 781, 1606, 1580, 1605, 780, 1606, 1580, 1609, 780,
- 1606, 1605, 1610, 780, 1606, 1605, 1609, 780, 1610, 1605, 1605, 781,
- 1610, 1605, 1605, 780, 1576, 1582, 1610, 780, 1578, 1580, 1610, 780,
- 1578, 1580, 1609, 780, 1578, 1582, 1610, 780, 1578, 1582, 1609, 780,
- 1578, 1605, 1610, 780, 1578, 1605, 1609, 780, 1580, 1605, 1610, 780,
- 1580, 1581, 1609, 780, 1580, 1605, 1609, 780, 1587, 1582, 1609, 780,
- 1589, 1581, 1610, 780, 1588, 1581, 1610, 780, 1590, 1581, 1610, 780,
- 1604, 1580, 1610, 780, 1604, 1605, 1610, 780, 1610, 1581, 1610, 780,
- 1610, 1580, 1610, 780, 1610, 1605, 1610, 780, 1605, 1605, 1610, 780,
- 1602, 1605, 1610, 780, 1606, 1581, 1610, 781, 1602, 1605, 1581, 781,
- 1604, 1581, 1605, 780, 1593, 1605, 1610, 780, 1603, 1605, 1610, 781,
- 1606, 1580, 1581, 780, 1605, 1582, 1610, 781, 1604, 1580, 1605, 780,
- 1603, 1605, 1605, 780, 1604, 1580, 1605, 780, 1606, 1580, 1581, 780,
- 1580, 1581, 1610, 780, 1581, 1580, 1610, 780, 1605, 1580, 1610, 780,
- 1601, 1605, 1610, 780, 1576, 1581, 1610, 781, 1603, 1605, 1605, 781,
- 1593, 1580, 1605, 781, 1589, 1605, 1605, 780, 1587, 1582, 1610, 780,
- 1606, 1580, 1610, 779, 1589, 1604, 1746, 779, 1602, 1604, 1746, 1035,
- 1575, 1604, 1604, 1607, 1035, 1575, 1603, 1576, 1585, 1035, 1605, 1581,
- 1605, 1583, 1035, 1589, 1604, 1593, 1605, 1035, 1585, 1587, 1608, 1604,
- 1035, 1593, 1604, 1610, 1607, 1035, 1608, 1587, 1604, 1605, 779, 1589,
- 1604, 1609, 4619, 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593,
- 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, 2059, 1580, 1604, 32, 1580,
- 1604, 1575, 1604, 1607, 1035, 1585, 1740, 1575, 1604, 265, 44, 265,
- 12289, 265, 12290, 265, 58, 265, 59, 265, 33, 265, 63, 265, 12310, 265,
- 12311, 265, 8230, 265, 8229, 265, 8212, 265, 8211, 265, 95, 265, 95, 265,
- 40, 265, 41, 265, 123, 265, 125, 265, 12308, 265, 12309, 265, 12304, 265,
- 12305, 265, 12298, 265, 12299, 265, 12296, 265, 12297, 265, 12300, 265,
- 12301, 265, 12302, 265, 12303, 265, 91, 265, 93, 258, 8254, 258, 8254,
- 258, 8254, 258, 8254, 258, 95, 258, 95, 258, 95, 271, 44, 271, 12289,
- 271, 46, 271, 59, 271, 58, 271, 63, 271, 33, 271, 8212, 271, 40, 271, 41,
- 271, 123, 271, 125, 271, 12308, 271, 12309, 271, 35, 271, 38, 271, 42,
- 271, 43, 271, 45, 271, 60, 271, 62, 271, 61, 271, 92, 271, 36, 271, 37,
- 271, 64, 523, 32, 1611, 526, 1600, 1611, 523, 32, 1612, 523, 32, 1613,
- 523, 32, 1614, 526, 1600, 1614, 523, 32, 1615, 526, 1600, 1615, 523, 32,
- 1616, 526, 1600, 1616, 523, 32, 1617, 526, 1600, 1617, 523, 32, 1618,
- 526, 1600, 1618, 267, 1569, 267, 1570, 268, 1570, 267, 1571, 268, 1571,
- 267, 1572, 268, 1572, 267, 1573, 268, 1573, 267, 1574, 268, 1574, 269,
- 1574, 270, 1574, 267, 1575, 268, 1575, 267, 1576, 268, 1576, 269, 1576,
- 270, 1576, 267, 1577, 268, 1577, 267, 1578, 268, 1578, 269, 1578, 270,
- 1578, 267, 1579, 268, 1579, 269, 1579, 270, 1579, 267, 1580, 268, 1580,
- 269, 1580, 270, 1580, 267, 1581, 268, 1581, 269, 1581, 270, 1581, 267,
- 1582, 268, 1582, 269, 1582, 270, 1582, 267, 1583, 268, 1583, 267, 1584,
- 268, 1584, 267, 1585, 268, 1585, 267, 1586, 268, 1586, 267, 1587, 268,
- 1587, 269, 1587, 270, 1587, 267, 1588, 268, 1588, 269, 1588, 270, 1588,
- 267, 1589, 268, 1589, 269, 1589, 270, 1589, 267, 1590, 268, 1590, 269,
- 1590, 270, 1590, 267, 1591, 268, 1591, 269, 1591, 270, 1591, 267, 1592,
- 268, 1592, 269, 1592, 270, 1592, 267, 1593, 268, 1593, 269, 1593, 270,
- 1593, 267, 1594, 268, 1594, 269, 1594, 270, 1594, 267, 1601, 268, 1601,
- 269, 1601, 270, 1601, 267, 1602, 268, 1602, 269, 1602, 270, 1602, 267,
- 1603, 268, 1603, 269, 1603, 270, 1603, 267, 1604, 268, 1604, 269, 1604,
- 270, 1604, 267, 1605, 268, 1605, 269, 1605, 270, 1605, 267, 1606, 268,
- 1606, 269, 1606, 270, 1606, 267, 1607, 268, 1607, 269, 1607, 270, 1607,
- 267, 1608, 268, 1608, 267, 1609, 268, 1609, 267, 1610, 268, 1610, 269,
- 1610, 270, 1610, 523, 1604, 1570, 524, 1604, 1570, 523, 1604, 1571, 524,
- 1604, 1571, 523, 1604, 1573, 524, 1604, 1573, 523, 1604, 1575, 524, 1604,
- 1575, 264, 33, 264, 34, 264, 35, 264, 36, 264, 37, 264, 38, 264, 39, 264,
- 40, 264, 41, 264, 42, 264, 43, 264, 44, 264, 45, 264, 46, 264, 47, 264,
- 48, 264, 49, 264, 50, 264, 51, 264, 52, 264, 53, 264, 54, 264, 55, 264,
- 56, 264, 57, 264, 58, 264, 59, 264, 60, 264, 61, 264, 62, 264, 63, 264,
- 64, 264, 65, 264, 66, 264, 67, 264, 68, 264, 69, 264, 70, 264, 71, 264,
- 72, 264, 73, 264, 74, 264, 75, 264, 76, 264, 77, 264, 78, 264, 79, 264,
- 80, 264, 81, 264, 82, 264, 83, 264, 84, 264, 85, 264, 86, 264, 87, 264,
- 88, 264, 89, 264, 90, 264, 91, 264, 92, 264, 93, 264, 94, 264, 95, 264,
- 96, 264, 97, 264, 98, 264, 99, 264, 100, 264, 101, 264, 102, 264, 103,
- 264, 104, 264, 105, 264, 106, 264, 107, 264, 108, 264, 109, 264, 110,
- 264, 111, 264, 112, 264, 113, 264, 114, 264, 115, 264, 116, 264, 117,
- 264, 118, 264, 119, 264, 120, 264, 121, 264, 122, 264, 123, 264, 124,
- 264, 125, 264, 126, 264, 10629, 264, 10630, 272, 12290, 272, 12300, 272,
- 12301, 272, 12289, 272, 12539, 272, 12530, 272, 12449, 272, 12451, 272,
- 12453, 272, 12455, 272, 12457, 272, 12515, 272, 12517, 272, 12519, 272,
- 12483, 272, 12540, 272, 12450, 272, 12452, 272, 12454, 272, 12456, 272,
- 12458, 272, 12459, 272, 12461, 272, 12463, 272, 12465, 272, 12467, 272,
- 12469, 272, 12471, 272, 12473, 272, 12475, 272, 12477, 272, 12479, 272,
- 12481, 272, 12484, 272, 12486, 272, 12488, 272, 12490, 272, 12491, 272,
- 12492, 272, 12493, 272, 12494, 272, 12495, 272, 12498, 272, 12501, 272,
- 12504, 272, 12507, 272, 12510, 272, 12511, 272, 12512, 272, 12513, 272,
- 12514, 272, 12516, 272, 12518, 272, 12520, 272, 12521, 272, 12522, 272,
- 12523, 272, 12524, 272, 12525, 272, 12527, 272, 12531, 272, 12441, 272,
- 12442, 272, 12644, 272, 12593, 272, 12594, 272, 12595, 272, 12596, 272,
- 12597, 272, 12598, 272, 12599, 272, 12600, 272, 12601, 272, 12602, 272,
- 12603, 272, 12604, 272, 12605, 272, 12606, 272, 12607, 272, 12608, 272,
- 12609, 272, 12610, 272, 12611, 272, 12612, 272, 12613, 272, 12614, 272,
- 12615, 272, 12616, 272, 12617, 272, 12618, 272, 12619, 272, 12620, 272,
- 12621, 272, 12622, 272, 12623, 272, 12624, 272, 12625, 272, 12626, 272,
- 12627, 272, 12628, 272, 12629, 272, 12630, 272, 12631, 272, 12632, 272,
- 12633, 272, 12634, 272, 12635, 272, 12636, 272, 12637, 272, 12638, 272,
- 12639, 272, 12640, 272, 12641, 272, 12642, 272, 12643, 264, 162, 264,
- 163, 264, 172, 264, 175, 264, 166, 264, 165, 264, 8361, 272, 9474, 272,
- 8592, 272, 8593, 272, 8594, 272, 8595, 272, 9632, 272, 9675, 512, 69785,
- 69818, 512, 69787, 69818, 512, 69797, 69818, 512, 119127, 119141, 512,
- 119128, 119141, 512, 119135, 119150, 512, 119135, 119151, 512, 119135,
- 119152, 512, 119135, 119153, 512, 119135, 119154, 512, 119225, 119141,
- 512, 119226, 119141, 512, 119227, 119150, 512, 119228, 119150, 512,
- 119227, 119151, 512, 119228, 119151, 262, 65, 262, 66, 262, 67, 262, 68,
- 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76,
- 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84,
- 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98,
- 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262,
- 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262,
- 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262,
- 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69,
- 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77,
- 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85,
- 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99,
- 262, 100, 262, 101, 262, 102, 262, 103, 262, 105, 262, 106, 262, 107,
+ 26085, 778, 103, 97, 108, 259, 42863, 259, 294, 259, 339, 256, 35912,
+ 256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477,
+ 256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856,
+ 256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064,
+ 256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853,
+ 256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211,
+ 256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172,
+ 256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010,
+ 256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796,
+ 256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396,
+ 256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103,
+ 256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751,
+ 256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034,
+ 256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431,
+ 256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956,
+ 256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712,
+ 256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594,
+ 256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489,
+ 256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622,
+ 256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784,
+ 256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841,
+ 256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327,
+ 256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670,
+ 256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147,
+ 256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088,
+ 256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244,
+ 256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015,
+ 256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265,
+ 256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196,
+ 256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801,
+ 256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936,
+ 256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102,
+ 256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134,
+ 256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446,
+ 256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705,
+ 256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134,
+ 256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459,
+ 256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519,
+ 256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702,
+ 256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626,
+ 256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298,
+ 256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256,
+ 256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672,
+ 256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299,
+ 256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892,
+ 256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618,
+ 256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070,
+ 256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322,
+ 256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208,
+ 256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813,
+ 256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120,
+ 256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936,
+ 256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757,
+ 256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730,
+ 256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062,
+ 256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680,
+ 256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261,
+ 256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585,
+ 256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627,
+ 256, 38911, 256, 38971, 256, 24693, 256, 148206, 256, 33304, 256, 20006,
+ 256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 21191,
+ 256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 22618,
+ 256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 24274,
+ 256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 24840,
+ 256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 25628,
+ 256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 26454,
+ 256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 28450,
+ 256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 29482,
+ 256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 30410,
+ 256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 31409,
+ 256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 32773,
+ 256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 35222,
+ 256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 35565,
+ 256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 37273,
+ 256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 38911,
+ 256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 141386, 256, 141380,
+ 256, 144341, 256, 15261, 256, 16408, 256, 16441, 256, 152137, 256,
+ 154832, 256, 163539, 256, 40771, 256, 40846, 514, 102, 102, 514, 102,
+ 105, 514, 102, 108, 770, 102, 102, 105, 770, 102, 102, 108, 514, 383,
+ 116, 514, 115, 116, 514, 1396, 1398, 514, 1396, 1381, 514, 1396, 1387,
+ 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 1460, 512, 1522, 1463, 262,
+ 1506, 262, 1488, 262, 1491, 262, 1492, 262, 1499, 262, 1500, 262, 1501,
+ 262, 1512, 262, 1514, 262, 43, 512, 1513, 1473, 512, 1513, 1474, 512,
+ 64329, 1473, 512, 64329, 1474, 512, 1488, 1463, 512, 1488, 1464, 512,
+ 1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 512, 1491, 1468, 512, 1492,
+ 1468, 512, 1493, 1468, 512, 1494, 1468, 512, 1496, 1468, 512, 1497, 1468,
+ 512, 1498, 1468, 512, 1499, 1468, 512, 1500, 1468, 512, 1502, 1468, 512,
+ 1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 512, 1508, 1468, 512, 1510,
+ 1468, 512, 1511, 1468, 512, 1512, 1468, 512, 1513, 1468, 512, 1514, 1468,
+ 512, 1493, 1465, 512, 1489, 1471, 512, 1499, 1471, 512, 1508, 1471, 514,
+ 1488, 1500, 267, 1649, 268, 1649, 267, 1659, 268, 1659, 269, 1659, 270,
+ 1659, 267, 1662, 268, 1662, 269, 1662, 270, 1662, 267, 1664, 268, 1664,
+ 269, 1664, 270, 1664, 267, 1658, 268, 1658, 269, 1658, 270, 1658, 267,
+ 1663, 268, 1663, 269, 1663, 270, 1663, 267, 1657, 268, 1657, 269, 1657,
+ 270, 1657, 267, 1700, 268, 1700, 269, 1700, 270, 1700, 267, 1702, 268,
+ 1702, 269, 1702, 270, 1702, 267, 1668, 268, 1668, 269, 1668, 270, 1668,
+ 267, 1667, 268, 1667, 269, 1667, 270, 1667, 267, 1670, 268, 1670, 269,
+ 1670, 270, 1670, 267, 1671, 268, 1671, 269, 1671, 270, 1671, 267, 1677,
+ 268, 1677, 267, 1676, 268, 1676, 267, 1678, 268, 1678, 267, 1672, 268,
+ 1672, 267, 1688, 268, 1688, 267, 1681, 268, 1681, 267, 1705, 268, 1705,
+ 269, 1705, 270, 1705, 267, 1711, 268, 1711, 269, 1711, 270, 1711, 267,
+ 1715, 268, 1715, 269, 1715, 270, 1715, 267, 1713, 268, 1713, 269, 1713,
+ 270, 1713, 267, 1722, 268, 1722, 267, 1723, 268, 1723, 269, 1723, 270,
+ 1723, 267, 1728, 268, 1728, 267, 1729, 268, 1729, 269, 1729, 270, 1729,
+ 267, 1726, 268, 1726, 269, 1726, 270, 1726, 267, 1746, 268, 1746, 267,
+ 1747, 268, 1747, 267, 1709, 268, 1709, 269, 1709, 270, 1709, 267, 1735,
+ 268, 1735, 267, 1734, 268, 1734, 267, 1736, 268, 1736, 267, 1655, 267,
+ 1739, 268, 1739, 267, 1733, 268, 1733, 267, 1737, 268, 1737, 267, 1744,
+ 268, 1744, 269, 1744, 270, 1744, 269, 1609, 270, 1609, 523, 1574, 1575,
+ 524, 1574, 1575, 523, 1574, 1749, 524, 1574, 1749, 523, 1574, 1608, 524,
+ 1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 523, 1574, 1734, 524, 1574,
+ 1734, 523, 1574, 1736, 524, 1574, 1736, 523, 1574, 1744, 524, 1574, 1744,
+ 525, 1574, 1744, 523, 1574, 1609, 524, 1574, 1609, 525, 1574, 1609, 267,
+ 1740, 268, 1740, 269, 1740, 270, 1740, 523, 1574, 1580, 523, 1574, 1581,
+ 523, 1574, 1605, 523, 1574, 1609, 523, 1574, 1610, 523, 1576, 1580, 523,
+ 1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 523, 1576, 1609, 523, 1576,
+ 1610, 523, 1578, 1580, 523, 1578, 1581, 523, 1578, 1582, 523, 1578, 1605,
+ 523, 1578, 1609, 523, 1578, 1610, 523, 1579, 1580, 523, 1579, 1605, 523,
+ 1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 523, 1580, 1605, 523, 1581,
+ 1580, 523, 1581, 1605, 523, 1582, 1580, 523, 1582, 1581, 523, 1582, 1605,
+ 523, 1587, 1580, 523, 1587, 1581, 523, 1587, 1582, 523, 1587, 1605, 523,
+ 1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 523, 1590, 1581, 523, 1590,
+ 1582, 523, 1590, 1605, 523, 1591, 1581, 523, 1591, 1605, 523, 1592, 1605,
+ 523, 1593, 1580, 523, 1593, 1605, 523, 1594, 1580, 523, 1594, 1605, 523,
+ 1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 523, 1601, 1605, 523, 1601,
+ 1609, 523, 1601, 1610, 523, 1602, 1581, 523, 1602, 1605, 523, 1602, 1609,
+ 523, 1602, 1610, 523, 1603, 1575, 523, 1603, 1580, 523, 1603, 1581, 523,
+ 1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 523, 1603, 1609, 523, 1603,
+ 1610, 523, 1604, 1580, 523, 1604, 1581, 523, 1604, 1582, 523, 1604, 1605,
+ 523, 1604, 1609, 523, 1604, 1610, 523, 1605, 1580, 523, 1605, 1581, 523,
+ 1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 523, 1605, 1610, 523, 1606,
+ 1580, 523, 1606, 1581, 523, 1606, 1582, 523, 1606, 1605, 523, 1606, 1609,
+ 523, 1606, 1610, 523, 1607, 1580, 523, 1607, 1605, 523, 1607, 1609, 523,
+ 1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 523, 1610, 1582, 523, 1610,
+ 1605, 523, 1610, 1609, 523, 1610, 1610, 523, 1584, 1648, 523, 1585, 1648,
+ 523, 1609, 1648, 779, 32, 1612, 1617, 779, 32, 1613, 1617, 779, 32, 1614,
+ 1617, 779, 32, 1615, 1617, 779, 32, 1616, 1617, 779, 32, 1617, 1648, 524,
+ 1574, 1585, 524, 1574, 1586, 524, 1574, 1605, 524, 1574, 1606, 524, 1574,
+ 1609, 524, 1574, 1610, 524, 1576, 1585, 524, 1576, 1586, 524, 1576, 1605,
+ 524, 1576, 1606, 524, 1576, 1609, 524, 1576, 1610, 524, 1578, 1585, 524,
+ 1578, 1586, 524, 1578, 1605, 524, 1578, 1606, 524, 1578, 1609, 524, 1578,
+ 1610, 524, 1579, 1585, 524, 1579, 1586, 524, 1579, 1605, 524, 1579, 1606,
+ 524, 1579, 1609, 524, 1579, 1610, 524, 1601, 1609, 524, 1601, 1610, 524,
+ 1602, 1609, 524, 1602, 1610, 524, 1603, 1575, 524, 1603, 1604, 524, 1603,
+ 1605, 524, 1603, 1609, 524, 1603, 1610, 524, 1604, 1605, 524, 1604, 1609,
+ 524, 1604, 1610, 524, 1605, 1575, 524, 1605, 1605, 524, 1606, 1585, 524,
+ 1606, 1586, 524, 1606, 1605, 524, 1606, 1606, 524, 1606, 1609, 524, 1606,
+ 1610, 524, 1609, 1648, 524, 1610, 1585, 524, 1610, 1586, 524, 1610, 1605,
+ 524, 1610, 1606, 524, 1610, 1609, 524, 1610, 1610, 525, 1574, 1580, 525,
+ 1574, 1581, 525, 1574, 1582, 525, 1574, 1605, 525, 1574, 1607, 525, 1576,
+ 1580, 525, 1576, 1581, 525, 1576, 1582, 525, 1576, 1605, 525, 1576, 1607,
+ 525, 1578, 1580, 525, 1578, 1581, 525, 1578, 1582, 525, 1578, 1605, 525,
+ 1578, 1607, 525, 1579, 1605, 525, 1580, 1581, 525, 1580, 1605, 525, 1581,
+ 1580, 525, 1581, 1605, 525, 1582, 1580, 525, 1582, 1605, 525, 1587, 1580,
+ 525, 1587, 1581, 525, 1587, 1582, 525, 1587, 1605, 525, 1589, 1581, 525,
+ 1589, 1582, 525, 1589, 1605, 525, 1590, 1580, 525, 1590, 1581, 525, 1590,
+ 1582, 525, 1590, 1605, 525, 1591, 1581, 525, 1592, 1605, 525, 1593, 1580,
+ 525, 1593, 1605, 525, 1594, 1580, 525, 1594, 1605, 525, 1601, 1580, 525,
+ 1601, 1581, 525, 1601, 1582, 525, 1601, 1605, 525, 1602, 1581, 525, 1602,
+ 1605, 525, 1603, 1580, 525, 1603, 1581, 525, 1603, 1582, 525, 1603, 1604,
+ 525, 1603, 1605, 525, 1604, 1580, 525, 1604, 1581, 525, 1604, 1582, 525,
+ 1604, 1605, 525, 1604, 1607, 525, 1605, 1580, 525, 1605, 1581, 525, 1605,
+ 1582, 525, 1605, 1605, 525, 1606, 1580, 525, 1606, 1581, 525, 1606, 1582,
+ 525, 1606, 1605, 525, 1606, 1607, 525, 1607, 1580, 525, 1607, 1605, 525,
+ 1607, 1648, 525, 1610, 1580, 525, 1610, 1581, 525, 1610, 1582, 525, 1610,
+ 1605, 525, 1610, 1607, 526, 1574, 1605, 526, 1574, 1607, 526, 1576, 1605,
+ 526, 1576, 1607, 526, 1578, 1605, 526, 1578, 1607, 526, 1579, 1605, 526,
+ 1579, 1607, 526, 1587, 1605, 526, 1587, 1607, 526, 1588, 1605, 526, 1588,
+ 1607, 526, 1603, 1604, 526, 1603, 1605, 526, 1604, 1605, 526, 1606, 1605,
+ 526, 1606, 1607, 526, 1610, 1605, 526, 1610, 1607, 782, 1600, 1614, 1617,
+ 782, 1600, 1615, 1617, 782, 1600, 1616, 1617, 523, 1591, 1609, 523, 1591,
+ 1610, 523, 1593, 1609, 523, 1593, 1610, 523, 1594, 1609, 523, 1594, 1610,
+ 523, 1587, 1609, 523, 1587, 1610, 523, 1588, 1609, 523, 1588, 1610, 523,
+ 1581, 1609, 523, 1581, 1610, 523, 1580, 1609, 523, 1580, 1610, 523, 1582,
+ 1609, 523, 1582, 1610, 523, 1589, 1609, 523, 1589, 1610, 523, 1590, 1609,
+ 523, 1590, 1610, 523, 1588, 1580, 523, 1588, 1581, 523, 1588, 1582, 523,
+ 1588, 1605, 523, 1588, 1585, 523, 1587, 1585, 523, 1589, 1585, 523, 1590,
+ 1585, 524, 1591, 1609, 524, 1591, 1610, 524, 1593, 1609, 524, 1593, 1610,
+ 524, 1594, 1609, 524, 1594, 1610, 524, 1587, 1609, 524, 1587, 1610, 524,
+ 1588, 1609, 524, 1588, 1610, 524, 1581, 1609, 524, 1581, 1610, 524, 1580,
+ 1609, 524, 1580, 1610, 524, 1582, 1609, 524, 1582, 1610, 524, 1589, 1609,
+ 524, 1589, 1610, 524, 1590, 1609, 524, 1590, 1610, 524, 1588, 1580, 524,
+ 1588, 1581, 524, 1588, 1582, 524, 1588, 1605, 524, 1588, 1585, 524, 1587,
+ 1585, 524, 1589, 1585, 524, 1590, 1585, 525, 1588, 1580, 525, 1588, 1581,
+ 525, 1588, 1582, 525, 1588, 1605, 525, 1587, 1607, 525, 1588, 1607, 525,
+ 1591, 1605, 526, 1587, 1580, 526, 1587, 1581, 526, 1587, 1582, 526, 1588,
+ 1580, 526, 1588, 1581, 526, 1588, 1582, 526, 1591, 1605, 526, 1592, 1605,
+ 524, 1575, 1611, 523, 1575, 1611, 781, 1578, 1580, 1605, 780, 1578, 1581,
+ 1580, 781, 1578, 1581, 1580, 781, 1578, 1581, 1605, 781, 1578, 1582,
+ 1605, 781, 1578, 1605, 1580, 781, 1578, 1605, 1581, 781, 1578, 1605,
+ 1582, 780, 1580, 1605, 1581, 781, 1580, 1605, 1581, 780, 1581, 1605,
+ 1610, 780, 1581, 1605, 1609, 781, 1587, 1581, 1580, 781, 1587, 1580,
+ 1581, 780, 1587, 1580, 1609, 780, 1587, 1605, 1581, 781, 1587, 1605,
+ 1581, 781, 1587, 1605, 1580, 780, 1587, 1605, 1605, 781, 1587, 1605,
+ 1605, 780, 1589, 1581, 1581, 781, 1589, 1581, 1581, 780, 1589, 1605,
+ 1605, 780, 1588, 1581, 1605, 781, 1588, 1581, 1605, 780, 1588, 1580,
+ 1610, 780, 1588, 1605, 1582, 781, 1588, 1605, 1582, 780, 1588, 1605,
+ 1605, 781, 1588, 1605, 1605, 780, 1590, 1581, 1609, 780, 1590, 1582,
+ 1605, 781, 1590, 1582, 1605, 780, 1591, 1605, 1581, 781, 1591, 1605,
+ 1581, 781, 1591, 1605, 1605, 780, 1591, 1605, 1610, 780, 1593, 1580,
+ 1605, 780, 1593, 1605, 1605, 781, 1593, 1605, 1605, 780, 1593, 1605,
+ 1609, 780, 1594, 1605, 1605, 780, 1594, 1605, 1610, 780, 1594, 1605,
+ 1609, 780, 1601, 1582, 1605, 781, 1601, 1582, 1605, 780, 1602, 1605,
+ 1581, 780, 1602, 1605, 1605, 780, 1604, 1581, 1605, 780, 1604, 1581,
+ 1610, 780, 1604, 1581, 1609, 781, 1604, 1580, 1580, 780, 1604, 1580,
+ 1580, 780, 1604, 1582, 1605, 781, 1604, 1582, 1605, 780, 1604, 1605,
+ 1581, 781, 1604, 1605, 1581, 781, 1605, 1581, 1580, 781, 1605, 1581,
+ 1605, 780, 1605, 1581, 1610, 781, 1605, 1580, 1581, 781, 1605, 1580,
+ 1605, 781, 1605, 1582, 1580, 781, 1605, 1582, 1605, 781, 1605, 1580,
+ 1582, 781, 1607, 1605, 1580, 781, 1607, 1605, 1605, 781, 1606, 1581,
+ 1605, 780, 1606, 1581, 1609, 780, 1606, 1580, 1605, 781, 1606, 1580,
+ 1605, 780, 1606, 1580, 1609, 780, 1606, 1605, 1610, 780, 1606, 1605,
+ 1609, 780, 1610, 1605, 1605, 781, 1610, 1605, 1605, 780, 1576, 1582,
+ 1610, 780, 1578, 1580, 1610, 780, 1578, 1580, 1609, 780, 1578, 1582,
+ 1610, 780, 1578, 1582, 1609, 780, 1578, 1605, 1610, 780, 1578, 1605,
+ 1609, 780, 1580, 1605, 1610, 780, 1580, 1581, 1609, 780, 1580, 1605,
+ 1609, 780, 1587, 1582, 1609, 780, 1589, 1581, 1610, 780, 1588, 1581,
+ 1610, 780, 1590, 1581, 1610, 780, 1604, 1580, 1610, 780, 1604, 1605,
+ 1610, 780, 1610, 1581, 1610, 780, 1610, 1580, 1610, 780, 1610, 1605,
+ 1610, 780, 1605, 1605, 1610, 780, 1602, 1605, 1610, 780, 1606, 1581,
+ 1610, 781, 1602, 1605, 1581, 781, 1604, 1581, 1605, 780, 1593, 1605,
+ 1610, 780, 1603, 1605, 1610, 781, 1606, 1580, 1581, 780, 1605, 1582,
+ 1610, 781, 1604, 1580, 1605, 780, 1603, 1605, 1605, 780, 1604, 1580,
+ 1605, 780, 1606, 1580, 1581, 780, 1580, 1581, 1610, 780, 1581, 1580,
+ 1610, 780, 1605, 1580, 1610, 780, 1601, 1605, 1610, 780, 1576, 1581,
+ 1610, 781, 1603, 1605, 1605, 781, 1593, 1580, 1605, 781, 1589, 1605,
+ 1605, 780, 1587, 1582, 1610, 780, 1606, 1580, 1610, 779, 1589, 1604,
+ 1746, 779, 1602, 1604, 1746, 1035, 1575, 1604, 1604, 1607, 1035, 1575,
+ 1603, 1576, 1585, 1035, 1605, 1581, 1605, 1583, 1035, 1589, 1604, 1593,
+ 1605, 1035, 1585, 1587, 1608, 1604, 1035, 1593, 1604, 1610, 1607, 1035,
+ 1608, 1587, 1604, 1605, 779, 1589, 1604, 1609, 4619, 1589, 1604, 1609,
+ 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587,
+ 1604, 1605, 2059, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1035,
+ 1585, 1740, 1575, 1604, 265, 44, 265, 12289, 265, 12290, 265, 58, 265,
+ 59, 265, 33, 265, 63, 265, 12310, 265, 12311, 265, 8230, 265, 8229, 265,
+ 8212, 265, 8211, 265, 95, 265, 95, 265, 40, 265, 41, 265, 123, 265, 125,
+ 265, 12308, 265, 12309, 265, 12304, 265, 12305, 265, 12298, 265, 12299,
+ 265, 12296, 265, 12297, 265, 12300, 265, 12301, 265, 12302, 265, 12303,
+ 265, 91, 265, 93, 258, 8254, 258, 8254, 258, 8254, 258, 8254, 258, 95,
+ 258, 95, 258, 95, 271, 44, 271, 12289, 271, 46, 271, 59, 271, 58, 271,
+ 63, 271, 33, 271, 8212, 271, 40, 271, 41, 271, 123, 271, 125, 271, 12308,
+ 271, 12309, 271, 35, 271, 38, 271, 42, 271, 43, 271, 45, 271, 60, 271,
+ 62, 271, 61, 271, 92, 271, 36, 271, 37, 271, 64, 523, 32, 1611, 526,
+ 1600, 1611, 523, 32, 1612, 523, 32, 1613, 523, 32, 1614, 526, 1600, 1614,
+ 523, 32, 1615, 526, 1600, 1615, 523, 32, 1616, 526, 1600, 1616, 523, 32,
+ 1617, 526, 1600, 1617, 523, 32, 1618, 526, 1600, 1618, 267, 1569, 267,
+ 1570, 268, 1570, 267, 1571, 268, 1571, 267, 1572, 268, 1572, 267, 1573,
+ 268, 1573, 267, 1574, 268, 1574, 269, 1574, 270, 1574, 267, 1575, 268,
+ 1575, 267, 1576, 268, 1576, 269, 1576, 270, 1576, 267, 1577, 268, 1577,
+ 267, 1578, 268, 1578, 269, 1578, 270, 1578, 267, 1579, 268, 1579, 269,
+ 1579, 270, 1579, 267, 1580, 268, 1580, 269, 1580, 270, 1580, 267, 1581,
+ 268, 1581, 269, 1581, 270, 1581, 267, 1582, 268, 1582, 269, 1582, 270,
+ 1582, 267, 1583, 268, 1583, 267, 1584, 268, 1584, 267, 1585, 268, 1585,
+ 267, 1586, 268, 1586, 267, 1587, 268, 1587, 269, 1587, 270, 1587, 267,
+ 1588, 268, 1588, 269, 1588, 270, 1588, 267, 1589, 268, 1589, 269, 1589,
+ 270, 1589, 267, 1590, 268, 1590, 269, 1590, 270, 1590, 267, 1591, 268,
+ 1591, 269, 1591, 270, 1591, 267, 1592, 268, 1592, 269, 1592, 270, 1592,
+ 267, 1593, 268, 1593, 269, 1593, 270, 1593, 267, 1594, 268, 1594, 269,
+ 1594, 270, 1594, 267, 1601, 268, 1601, 269, 1601, 270, 1601, 267, 1602,
+ 268, 1602, 269, 1602, 270, 1602, 267, 1603, 268, 1603, 269, 1603, 270,
+ 1603, 267, 1604, 268, 1604, 269, 1604, 270, 1604, 267, 1605, 268, 1605,
+ 269, 1605, 270, 1605, 267, 1606, 268, 1606, 269, 1606, 270, 1606, 267,
+ 1607, 268, 1607, 269, 1607, 270, 1607, 267, 1608, 268, 1608, 267, 1609,
+ 268, 1609, 267, 1610, 268, 1610, 269, 1610, 270, 1610, 523, 1604, 1570,
+ 524, 1604, 1570, 523, 1604, 1571, 524, 1604, 1571, 523, 1604, 1573, 524,
+ 1604, 1573, 523, 1604, 1575, 524, 1604, 1575, 264, 33, 264, 34, 264, 35,
+ 264, 36, 264, 37, 264, 38, 264, 39, 264, 40, 264, 41, 264, 42, 264, 43,
+ 264, 44, 264, 45, 264, 46, 264, 47, 264, 48, 264, 49, 264, 50, 264, 51,
+ 264, 52, 264, 53, 264, 54, 264, 55, 264, 56, 264, 57, 264, 58, 264, 59,
+ 264, 60, 264, 61, 264, 62, 264, 63, 264, 64, 264, 65, 264, 66, 264, 67,
+ 264, 68, 264, 69, 264, 70, 264, 71, 264, 72, 264, 73, 264, 74, 264, 75,
+ 264, 76, 264, 77, 264, 78, 264, 79, 264, 80, 264, 81, 264, 82, 264, 83,
+ 264, 84, 264, 85, 264, 86, 264, 87, 264, 88, 264, 89, 264, 90, 264, 91,
+ 264, 92, 264, 93, 264, 94, 264, 95, 264, 96, 264, 97, 264, 98, 264, 99,
+ 264, 100, 264, 101, 264, 102, 264, 103, 264, 104, 264, 105, 264, 106,
+ 264, 107, 264, 108, 264, 109, 264, 110, 264, 111, 264, 112, 264, 113,
+ 264, 114, 264, 115, 264, 116, 264, 117, 264, 118, 264, 119, 264, 120,
+ 264, 121, 264, 122, 264, 123, 264, 124, 264, 125, 264, 126, 264, 10629,
+ 264, 10630, 272, 12290, 272, 12300, 272, 12301, 272, 12289, 272, 12539,
+ 272, 12530, 272, 12449, 272, 12451, 272, 12453, 272, 12455, 272, 12457,
+ 272, 12515, 272, 12517, 272, 12519, 272, 12483, 272, 12540, 272, 12450,
+ 272, 12452, 272, 12454, 272, 12456, 272, 12458, 272, 12459, 272, 12461,
+ 272, 12463, 272, 12465, 272, 12467, 272, 12469, 272, 12471, 272, 12473,
+ 272, 12475, 272, 12477, 272, 12479, 272, 12481, 272, 12484, 272, 12486,
+ 272, 12488, 272, 12490, 272, 12491, 272, 12492, 272, 12493, 272, 12494,
+ 272, 12495, 272, 12498, 272, 12501, 272, 12504, 272, 12507, 272, 12510,
+ 272, 12511, 272, 12512, 272, 12513, 272, 12514, 272, 12516, 272, 12518,
+ 272, 12520, 272, 12521, 272, 12522, 272, 12523, 272, 12524, 272, 12525,
+ 272, 12527, 272, 12531, 272, 12441, 272, 12442, 272, 12644, 272, 12593,
+ 272, 12594, 272, 12595, 272, 12596, 272, 12597, 272, 12598, 272, 12599,
+ 272, 12600, 272, 12601, 272, 12602, 272, 12603, 272, 12604, 272, 12605,
+ 272, 12606, 272, 12607, 272, 12608, 272, 12609, 272, 12610, 272, 12611,
+ 272, 12612, 272, 12613, 272, 12614, 272, 12615, 272, 12616, 272, 12617,
+ 272, 12618, 272, 12619, 272, 12620, 272, 12621, 272, 12622, 272, 12623,
+ 272, 12624, 272, 12625, 272, 12626, 272, 12627, 272, 12628, 272, 12629,
+ 272, 12630, 272, 12631, 272, 12632, 272, 12633, 272, 12634, 272, 12635,
+ 272, 12636, 272, 12637, 272, 12638, 272, 12639, 272, 12640, 272, 12641,
+ 272, 12642, 272, 12643, 264, 162, 264, 163, 264, 172, 264, 175, 264, 166,
+ 264, 165, 264, 8361, 272, 9474, 272, 8592, 272, 8593, 272, 8594, 272,
+ 8595, 272, 9632, 272, 9675, 512, 69785, 69818, 512, 69787, 69818, 512,
+ 69797, 69818, 512, 69937, 69927, 512, 69938, 69927, 512, 119127, 119141,
+ 512, 119128, 119141, 512, 119135, 119150, 512, 119135, 119151, 512,
+ 119135, 119152, 512, 119135, 119153, 512, 119135, 119154, 512, 119225,
+ 119141, 512, 119226, 119141, 512, 119227, 119150, 512, 119228, 119150,
+ 512, 119227, 119151, 512, 119228, 119151, 262, 65, 262, 66, 262, 67, 262,
+ 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262,
+ 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262,
+ 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262,
+ 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105,
+ 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112,
+ 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119,
+ 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262,
+ 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262,
+ 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262,
+ 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262,
+ 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 105, 262, 106, 262, 107,
262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114,
262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121,
262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71,
@@ -3510,20 +3579,42 @@ static unsigned int decomp_data[] = {
52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262,
50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262,
48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262,
- 56, 262, 57, 514, 48, 46, 514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51,
- 44, 514, 52, 44, 514, 53, 44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514,
- 57, 44, 770, 40, 65, 41, 770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68,
- 41, 770, 40, 69, 41, 770, 40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41,
- 770, 40, 73, 41, 770, 40, 74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770,
- 40, 77, 41, 770, 40, 78, 41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40,
- 81, 41, 770, 40, 82, 41, 770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85,
- 41, 770, 40, 86, 41, 770, 40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41,
- 770, 40, 90, 41, 770, 12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68,
- 519, 87, 90, 266, 65, 266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266,
- 71, 266, 72, 266, 73, 266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266,
- 79, 266, 80, 266, 81, 266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266,
- 87, 266, 88, 266, 89, 266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68,
- 522, 83, 83, 778, 80, 80, 86, 522, 87, 67, 522, 68, 74, 522, 12411,
+ 56, 262, 57, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262,
+ 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1604, 262, 1605,
+ 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262,
+ 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590,
+ 262, 1592, 262, 1594, 262, 1646, 262, 1722, 262, 1697, 262, 1647, 262,
+ 1576, 262, 1580, 262, 1607, 262, 1581, 262, 1610, 262, 1603, 262, 1604,
+ 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262,
+ 1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1594,
+ 262, 1580, 262, 1581, 262, 1610, 262, 1604, 262, 1606, 262, 1587, 262,
+ 1593, 262, 1589, 262, 1602, 262, 1588, 262, 1582, 262, 1590, 262, 1594,
+ 262, 1722, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262,
+ 1591, 262, 1610, 262, 1603, 262, 1605, 262, 1606, 262, 1587, 262, 1593,
+ 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262,
+ 1582, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1697, 262, 1575,
+ 262, 1576, 262, 1580, 262, 1583, 262, 1607, 262, 1608, 262, 1586, 262,
+ 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587,
+ 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262,
+ 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594,
+ 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262,
+ 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593,
+ 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262,
+ 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 514, 48, 46,
+ 514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 44, 514, 52, 44, 514, 53,
+ 44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 57, 44, 770, 40, 65, 41,
+ 770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 41, 770, 40, 69, 41, 770,
+ 40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 770, 40, 73, 41, 770, 40,
+ 74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 40, 77, 41, 770, 40, 78,
+ 41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 81, 41, 770, 40, 82, 41,
+ 770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 41, 770, 40, 86, 41, 770,
+ 40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 770, 40, 90, 41, 770,
+ 12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68, 519, 87, 90, 266, 65,
+ 266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266, 71, 266, 72, 266, 73,
+ 266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266, 79, 266, 80, 266, 81,
+ 266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266, 87, 266, 88, 266, 89,
+ 266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, 778, 80, 80,
+ 86, 522, 87, 67, 515, 77, 67, 515, 77, 68, 522, 68, 74, 522, 12411,
12363, 522, 12467, 12467, 266, 12469, 266, 25163, 266, 23383, 266, 21452,
266, 12487, 266, 20108, 266, 22810, 266, 35299, 266, 22825, 266, 20132,
266, 26144, 266, 28961, 266, 26009, 266, 21069, 266, 24460, 266, 20877,
@@ -3643,7 +3734,7 @@ static unsigned char decomp_index1[] = {
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 36, 37, 38, 39, 40,
- 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 7, 7, 7, 7,
+ 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 43, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@@ -3651,9 +3742,9 @@ static unsigned char decomp_index1[] = {
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45,
- 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 44, 7, 7, 45,
+ 46, 47, 48, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 49, 7, 7, 50, 51, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@@ -3664,7 +3755,7 @@ static unsigned char decomp_index1[] = {
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 52, 53, 54, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@@ -3813,7 +3904,7 @@ static unsigned char decomp_index1[] = {
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
};
static unsigned short decomp_index2[] = {
@@ -4282,761 +4373,789 @@ static unsigned short decomp_index2[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6648, 6650, 6652, 6654, 6656, 6658, 6660, 6662,
- 6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686,
- 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710,
- 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734,
- 6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758,
- 6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782,
- 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806,
- 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830,
- 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854,
- 6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878,
- 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902,
- 6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926,
- 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950,
- 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974,
- 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998,
- 7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022,
- 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046,
- 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070,
- 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094,
- 7096, 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118,
- 7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142,
- 7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166,
- 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 0, 0, 7188,
- 0, 7190, 0, 0, 7192, 7194, 7196, 7198, 7200, 7202, 7204, 7206, 7208,
- 7210, 0, 7212, 0, 7214, 0, 0, 7216, 7218, 0, 0, 0, 7220, 7222, 7224,
- 7226, 0, 0, 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246,
- 7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270,
- 7272, 7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294,
- 7296, 7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318,
- 7320, 7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342,
- 7344, 7346, 7348, 7350, 0, 0, 7352, 7354, 7356, 7358, 7360, 7362, 7364,
- 7366, 7368, 7370, 7372, 7374, 7376, 7378, 7380, 7382, 7384, 7386, 7388,
- 7390, 7392, 7394, 7396, 7398, 7400, 7402, 7404, 7406, 7408, 7410, 7412,
- 7414, 7416, 7418, 7420, 7422, 7424, 7426, 7428, 7430, 7432, 7434, 7436,
- 7438, 7440, 7442, 7444, 7446, 7448, 7450, 7452, 7454, 7456, 7458, 7460,
- 7462, 7464, 7466, 7468, 7470, 7472, 7474, 7476, 7478, 7480, 7482, 7484,
- 7486, 7488, 7490, 7492, 7494, 7496, 7498, 7500, 7502, 7504, 7506, 7508,
- 7510, 7512, 7514, 7516, 7518, 7520, 7522, 7524, 7526, 7528, 7530, 7532,
- 7534, 7536, 7538, 7540, 7542, 7544, 7546, 7548, 7550, 7552, 7554, 7556,
- 7558, 7560, 7562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7564, 7567,
- 7570, 7573, 7577, 7581, 7584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7587,
- 7590, 7593, 7596, 7599, 0, 0, 0, 0, 0, 7602, 0, 7605, 7608, 7610, 7612,
- 7614, 7616, 7618, 7620, 7622, 7624, 7626, 7628, 7631, 7634, 7637, 7640,
- 7643, 7646, 7649, 7652, 7655, 7658, 7661, 7664, 0, 7667, 7670, 7673,
- 7676, 7679, 0, 7682, 0, 7685, 7688, 0, 7691, 7694, 0, 7697, 7700, 7703,
- 7706, 7709, 7712, 7715, 7718, 7721, 7724, 7727, 7729, 7731, 7733, 7735,
- 7737, 7739, 7741, 7743, 7745, 7747, 7749, 7751, 7753, 7755, 7757, 7759,
- 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, 7783,
- 7785, 7787, 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807,
- 7809, 7811, 7813, 7815, 7817, 7819, 7821, 7823, 7825, 7827, 7829, 7831,
- 7833, 7835, 7837, 7839, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855,
- 7857, 7859, 7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879,
- 7881, 7883, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903,
- 7905, 7907, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7923, 7925, 7927, 7929, 7931, 7933, 7935, 7937, 7939, 7941,
- 7943, 7945, 7947, 7949, 7951, 7953, 7955, 7957, 7959, 7961, 7963, 7965,
- 7967, 7969, 7972, 7975, 7978, 7981, 7984, 7987, 7990, 7993, 7996, 7999,
- 8002, 8005, 8008, 8011, 8014, 8017, 8020, 8023, 8025, 8027, 8029, 8031,
- 8034, 8037, 8040, 8043, 8046, 8049, 8052, 8055, 8058, 8061, 8064, 8067,
- 8070, 8073, 8076, 8079, 8082, 8085, 8088, 8091, 8094, 8097, 8100, 8103,
- 8106, 8109, 8112, 8115, 8118, 8121, 8124, 8127, 8130, 8133, 8136, 8139,
- 8142, 8145, 8148, 8151, 8154, 8157, 8160, 8163, 8166, 8169, 8172, 8175,
- 8178, 8181, 8184, 8187, 8190, 8193, 8196, 8199, 8202, 8205, 8208, 8211,
- 8214, 8217, 8220, 8223, 8226, 8229, 8232, 8235, 8238, 8241, 8244, 8247,
- 8250, 8253, 8256, 8259, 8262, 8265, 8268, 8271, 8274, 8277, 8280, 8283,
- 8286, 8289, 8292, 8295, 8298, 8301, 8304, 8307, 8310, 8313, 8317, 8321,
- 8325, 8329, 8333, 8337, 8340, 8343, 8346, 8349, 8352, 8355, 8358, 8361,
- 8364, 8367, 8370, 8373, 8376, 8379, 8382, 8385, 8388, 8391, 8394, 8397,
- 8400, 8403, 8406, 8409, 8412, 8415, 8418, 8421, 8424, 8427, 8430, 8433,
- 8436, 8439, 8442, 8445, 8448, 8451, 8454, 8457, 8460, 8463, 8466, 8469,
- 8472, 8475, 8478, 8481, 8484, 8487, 8490, 8493, 8496, 8499, 8502, 8505,
- 8508, 8511, 8514, 8517, 8520, 8523, 8526, 8529, 8532, 8535, 8538, 8541,
- 8544, 8547, 8550, 8553, 8556, 8559, 8562, 8565, 8568, 8571, 8574, 8577,
- 8580, 8583, 8586, 8589, 8592, 8595, 8598, 8601, 8604, 8607, 8610, 8613,
- 8616, 8619, 8622, 8625, 8628, 8631, 8634, 8637, 8640, 8643, 8646, 8649,
- 8652, 8655, 8658, 8661, 8664, 8667, 8670, 8673, 8676, 8679, 8682, 8685,
- 8688, 8691, 8694, 8697, 8700, 8703, 8706, 8709, 8712, 8715, 8718, 8721,
- 8724, 8727, 8730, 8733, 8736, 8739, 8742, 8745, 8748, 8751, 8754, 8757,
- 8760, 8763, 8767, 8771, 8775, 8778, 8781, 8784, 8787, 8790, 8793, 8796,
- 8799, 8802, 8805, 8808, 8811, 8814, 8817, 8820, 8823, 8826, 8829, 8832,
- 8835, 8838, 8841, 8844, 8847, 8850, 8853, 8856, 8859, 8862, 8865, 8868,
- 8871, 8874, 8877, 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904,
- 8907, 8910, 8913, 8916, 8919, 8922, 8925, 8928, 8931, 8934, 8937, 8940,
- 8943, 8946, 8949, 8952, 8955, 8958, 8961, 8964, 8967, 8970, 8973, 8976,
- 8979, 8982, 8985, 8988, 8991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8994, 8998, 9002, 9006, 9010, 9014, 9018, 9022, 9026, 9030,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6648, 6650, 0, 0, 0, 0, 0, 0, 6652, 6654, 6656, 6658, 6660, 6662, 6664,
+ 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, 6688,
+ 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710, 6712,
+ 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, 6736,
+ 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758, 6760,
+ 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 6784,
+ 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, 6808,
+ 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, 6832,
+ 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, 6856,
+ 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, 6880,
+ 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 6904,
+ 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, 6928,
+ 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, 6952,
+ 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, 6976,
+ 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, 7000,
+ 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, 7024,
+ 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, 7048,
+ 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, 7072,
+ 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, 7096,
+ 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118, 7120,
+ 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142, 7144,
+ 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 7168,
+ 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 7188, 7190, 0, 0,
+ 7192, 0, 7194, 0, 0, 7196, 7198, 7200, 7202, 7204, 7206, 7208, 7210,
+ 7212, 7214, 0, 7216, 0, 7218, 0, 0, 7220, 7222, 0, 0, 0, 7224, 7226,
+ 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, 7248, 7250,
+ 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270, 7272, 7274,
+ 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, 7296, 7298,
+ 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318, 7320, 7322,
+ 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, 7344, 7346,
+ 7348, 7350, 7352, 7354, 7356, 7358, 0, 0, 7360, 7362, 7364, 7366, 7368,
+ 7370, 7372, 7374, 7376, 7378, 7380, 7382, 7384, 7386, 7388, 7390, 7392,
+ 7394, 7396, 7398, 7400, 7402, 7404, 7406, 7408, 7410, 7412, 7414, 7416,
+ 7418, 7420, 7422, 7424, 7426, 7428, 7430, 7432, 7434, 7436, 7438, 7440,
+ 7442, 7444, 7446, 7448, 7450, 7452, 7454, 7456, 7458, 7460, 7462, 7464,
+ 7466, 7468, 7470, 7472, 7474, 7476, 7478, 7480, 7482, 7484, 7486, 7488,
+ 7490, 7492, 7494, 7496, 7498, 7500, 7502, 7504, 7506, 7508, 7510, 7512,
+ 7514, 7516, 7518, 7520, 7522, 7524, 7526, 7528, 7530, 7532, 7534, 7536,
+ 7538, 7540, 7542, 7544, 7546, 7548, 7550, 7552, 7554, 7556, 7558, 7560,
+ 7562, 7564, 7566, 7568, 7570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7572, 7575, 7578, 7581, 7585, 7589, 7592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 7595, 7598, 7601, 7604, 7607, 0, 0, 0, 0, 0, 7610, 0, 7613, 7616,
+ 7618, 7620, 7622, 7624, 7626, 7628, 7630, 7632, 7634, 7636, 7639, 7642,
+ 7645, 7648, 7651, 7654, 7657, 7660, 7663, 7666, 7669, 7672, 0, 7675,
+ 7678, 7681, 7684, 7687, 0, 7690, 0, 7693, 7696, 0, 7699, 7702, 0, 7705,
+ 7708, 7711, 7714, 7717, 7720, 7723, 7726, 7729, 7732, 7735, 7737, 7739,
+ 7741, 7743, 7745, 7747, 7749, 7751, 7753, 7755, 7757, 7759, 7761, 7763,
+ 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, 7783, 7785, 7787,
+ 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807, 7809, 7811,
+ 7813, 7815, 7817, 7819, 7821, 7823, 7825, 7827, 7829, 7831, 7833, 7835,
+ 7837, 7839, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859,
+ 7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 7881, 7883,
+ 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907,
+ 7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 7931, 7933, 7935, 7937, 7939, 7941, 7943, 7945,
+ 7947, 7949, 7951, 7953, 7955, 7957, 7959, 7961, 7963, 7965, 7967, 7969,
+ 7971, 7973, 7975, 7977, 7980, 7983, 7986, 7989, 7992, 7995, 7998, 8001,
+ 8004, 8007, 8010, 8013, 8016, 8019, 8022, 8025, 8028, 8031, 8033, 8035,
+ 8037, 8039, 8042, 8045, 8048, 8051, 8054, 8057, 8060, 8063, 8066, 8069,
+ 8072, 8075, 8078, 8081, 8084, 8087, 8090, 8093, 8096, 8099, 8102, 8105,
+ 8108, 8111, 8114, 8117, 8120, 8123, 8126, 8129, 8132, 8135, 8138, 8141,
+ 8144, 8147, 8150, 8153, 8156, 8159, 8162, 8165, 8168, 8171, 8174, 8177,
+ 8180, 8183, 8186, 8189, 8192, 8195, 8198, 8201, 8204, 8207, 8210, 8213,
+ 8216, 8219, 8222, 8225, 8228, 8231, 8234, 8237, 8240, 8243, 8246, 8249,
+ 8252, 8255, 8258, 8261, 8264, 8267, 8270, 8273, 8276, 8279, 8282, 8285,
+ 8288, 8291, 8294, 8297, 8300, 8303, 8306, 8309, 8312, 8315, 8318, 8321,
+ 8325, 8329, 8333, 8337, 8341, 8345, 8348, 8351, 8354, 8357, 8360, 8363,
+ 8366, 8369, 8372, 8375, 8378, 8381, 8384, 8387, 8390, 8393, 8396, 8399,
+ 8402, 8405, 8408, 8411, 8414, 8417, 8420, 8423, 8426, 8429, 8432, 8435,
+ 8438, 8441, 8444, 8447, 8450, 8453, 8456, 8459, 8462, 8465, 8468, 8471,
+ 8474, 8477, 8480, 8483, 8486, 8489, 8492, 8495, 8498, 8501, 8504, 8507,
+ 8510, 8513, 8516, 8519, 8522, 8525, 8528, 8531, 8534, 8537, 8540, 8543,
+ 8546, 8549, 8552, 8555, 8558, 8561, 8564, 8567, 8570, 8573, 8576, 8579,
+ 8582, 8585, 8588, 8591, 8594, 8597, 8600, 8603, 8606, 8609, 8612, 8615,
+ 8618, 8621, 8624, 8627, 8630, 8633, 8636, 8639, 8642, 8645, 8648, 8651,
+ 8654, 8657, 8660, 8663, 8666, 8669, 8672, 8675, 8678, 8681, 8684, 8687,
+ 8690, 8693, 8696, 8699, 8702, 8705, 8708, 8711, 8714, 8717, 8720, 8723,
+ 8726, 8729, 8732, 8735, 8738, 8741, 8744, 8747, 8750, 8753, 8756, 8759,
+ 8762, 8765, 8768, 8771, 8775, 8779, 8783, 8786, 8789, 8792, 8795, 8798,
+ 8801, 8804, 8807, 8810, 8813, 8816, 8819, 8822, 8825, 8828, 8831, 8834,
+ 8837, 8840, 8843, 8846, 8849, 8852, 8855, 8858, 8861, 8864, 8867, 8870,
+ 8873, 8876, 8879, 8882, 8885, 8888, 8891, 8894, 8897, 8900, 8903, 8906,
+ 8909, 8912, 8915, 8918, 8921, 8924, 8927, 8930, 8933, 8936, 8939, 8942,
+ 8945, 8948, 8951, 8954, 8957, 8960, 8963, 8966, 8969, 8972, 8975, 8978,
+ 8981, 8984, 8987, 8990, 8993, 8996, 8999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9002, 9006, 9010, 9014, 9018, 9022, 9026, 9030,
9034, 9038, 9042, 9046, 9050, 9054, 9058, 9062, 9066, 9070, 9074, 9078,
9082, 9086, 9090, 9094, 9098, 9102, 9106, 9110, 9114, 9118, 9122, 9126,
9130, 9134, 9138, 9142, 9146, 9150, 9154, 9158, 9162, 9166, 9170, 9174,
9178, 9182, 9186, 9190, 9194, 9198, 9202, 9206, 9210, 9214, 9218, 9222,
- 9226, 9230, 9234, 9238, 9242, 9246, 0, 0, 9250, 9254, 9258, 9262, 9266,
+ 9226, 9230, 9234, 9238, 9242, 9246, 9250, 9254, 0, 0, 9258, 9262, 9266,
9270, 9274, 9278, 9282, 9286, 9290, 9294, 9298, 9302, 9306, 9310, 9314,
9318, 9322, 9326, 9330, 9334, 9338, 9342, 9346, 9350, 9354, 9358, 9362,
9366, 9370, 9374, 9378, 9382, 9386, 9390, 9394, 9398, 9402, 9406, 9410,
9414, 9418, 9422, 9426, 9430, 9434, 9438, 9442, 9446, 9450, 9454, 9458,
- 9462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9466, 9470, 9474,
- 9479, 9484, 9489, 9494, 9499, 9504, 9509, 9513, 9532, 9541, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9546, 9548, 9550, 9552,
- 9554, 9556, 9558, 9560, 9562, 9564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9566, 9568, 9570, 9572, 9574, 9576, 9578,
- 9580, 9582, 9584, 9586, 9588, 9590, 9592, 9594, 9596, 9598, 9600, 9602,
- 9604, 9606, 0, 0, 9608, 9610, 9612, 9614, 9616, 9618, 9620, 9622, 9624,
- 9626, 9628, 9630, 0, 9632, 9634, 9636, 9638, 9640, 9642, 9644, 9646,
- 9648, 9650, 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, 9668, 0,
- 9670, 9672, 9674, 9676, 0, 0, 0, 0, 9678, 9681, 9684, 0, 9687, 0, 9690,
- 9693, 9696, 9699, 9702, 9705, 9708, 9711, 9714, 9717, 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, 9957, 9960, 9963, 9966, 9969,
- 9972, 9975, 0, 0, 0, 0, 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, 0, 0, 0, 10358, 10360, 10362, 10364, 10366, 10368, 0, 0, 10370,
- 10372, 10374, 10376, 10378, 10380, 0, 0, 10382, 10384, 10386, 10388,
- 10390, 10392, 0, 0, 10394, 10396, 10398, 0, 0, 0, 10400, 10402, 10404,
- 10406, 10408, 10410, 10412, 0, 10414, 10416, 10418, 10420, 10422, 10424,
- 10426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10428, 0, 10431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10437, 10440, 10443, 10446, 10449,
- 10452, 10455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10458, 10461,
- 10464, 10467, 10470, 10473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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, 0, 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, 0, 10788, 10790, 0, 0, 10792,
- 0, 0, 10794, 10796, 0, 0, 10798, 10800, 10802, 10804, 0, 10806, 10808,
- 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, 0,
- 10830, 0, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 0, 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, 0, 10976, 10978, 10980, 10982, 0, 0, 10984,
- 10986, 10988, 10990, 10992, 10994, 10996, 10998, 0, 11000, 11002, 11004,
- 11006, 11008, 11010, 11012, 0, 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, 0, 11070, 11072, 11074, 11076, 0, 11078, 11080, 11082,
- 11084, 11086, 0, 11088, 0, 0, 0, 11090, 11092, 11094, 11096, 11098,
- 11100, 11102, 0, 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, 11362, 11364, 11366, 11368, 11370, 11372, 11374, 11376, 11378,
- 11380, 11382, 11384, 11386, 11388, 11390, 11392, 11394, 11396, 11398,
- 11400, 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 11418,
- 11420, 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436, 11438,
- 11440, 11442, 11444, 11446, 11448, 11450, 11452, 11454, 11456, 11458,
- 11460, 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476, 11478,
- 11480, 11482, 11484, 11486, 11488, 11490, 11492, 11494, 11496, 11498,
- 11500, 11502, 11504, 11506, 11508, 11510, 11512, 11514, 11516, 11518,
- 11520, 11522, 11524, 11526, 11528, 11530, 11532, 11534, 11536, 11538,
- 11540, 11542, 11544, 11546, 11548, 11550, 11552, 11554, 11556, 11558,
- 11560, 11562, 11564, 11566, 11568, 11570, 11572, 11574, 11576, 11578,
- 11580, 11582, 11584, 11586, 11588, 11590, 11592, 11594, 11596, 11598,
- 11600, 11602, 11604, 11606, 11608, 11610, 11612, 11614, 11616, 11618,
- 11620, 11622, 11624, 11626, 11628, 11630, 11632, 11634, 11636, 11638,
- 11640, 11642, 11644, 11646, 11648, 11650, 11652, 11654, 11656, 11658,
- 11660, 11662, 11664, 11666, 11668, 11670, 11672, 11674, 11676, 11678,
- 11680, 11682, 11684, 11686, 11688, 11690, 11692, 11694, 11696, 11698,
- 11700, 11702, 11704, 11706, 11708, 11710, 11712, 11714, 11716, 11718,
- 11720, 11722, 11724, 11726, 11728, 11730, 11732, 11734, 11736, 11738,
- 11740, 11742, 11744, 11746, 11748, 11750, 11752, 11754, 11756, 11758,
- 11760, 11762, 11764, 11766, 11768, 11770, 11772, 11774, 11776, 11778,
- 11780, 11782, 0, 0, 11784, 11786, 11788, 11790, 11792, 11794, 11796,
- 11798, 11800, 11802, 11804, 11806, 11808, 11810, 11812, 11814, 11816,
- 11818, 11820, 11822, 11824, 11826, 11828, 11830, 11832, 11834, 11836,
- 11838, 11840, 11842, 11844, 11846, 11848, 11850, 11852, 11854, 11856,
- 11858, 11860, 11862, 11864, 11866, 11868, 11870, 11872, 11874, 11876,
- 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896,
- 11898, 11900, 11902, 11904, 11906, 11908, 11910, 11912, 11914, 11916,
- 11918, 11920, 11922, 11924, 11926, 11928, 11930, 11932, 11934, 11936,
- 11938, 11940, 11942, 11944, 11946, 11948, 11950, 11952, 11954, 11956,
- 11958, 11960, 11962, 11964, 11966, 11968, 11970, 11972, 11974, 11976,
- 11978, 11980, 11982, 11984, 11986, 11988, 11990, 11992, 11994, 11996,
- 11998, 12000, 12002, 12004, 12006, 12008, 12010, 12012, 12014, 12016,
- 12018, 12020, 12022, 12024, 12026, 12028, 12030, 12032, 12034, 12036,
- 12038, 12040, 12042, 12044, 12046, 12048, 12050, 12052, 12054, 12056,
- 12058, 12060, 12062, 12064, 12066, 12068, 12070, 12072, 12074, 12076,
- 12078, 12080, 12082, 12084, 12086, 12088, 12090, 12092, 12094, 12096,
- 12098, 12100, 12102, 12104, 12106, 12108, 12110, 12112, 12114, 12116,
- 12118, 12120, 12122, 12124, 12126, 12128, 12130, 12132, 12134, 12136,
- 12138, 12140, 12142, 12144, 12146, 12148, 12150, 12152, 12154, 12156,
- 12158, 12160, 12162, 12164, 12166, 12168, 12170, 12172, 12174, 12176,
- 12178, 12180, 12182, 12184, 12186, 12188, 12190, 12192, 12194, 12196,
- 12198, 12200, 12202, 12204, 12206, 12208, 12210, 12212, 12214, 12216,
- 12218, 12220, 12222, 12224, 12226, 12228, 12230, 12232, 12234, 12236,
- 12238, 12240, 12242, 12244, 12246, 12248, 12250, 12252, 12254, 12256,
- 12258, 12260, 12262, 12264, 12266, 12268, 12270, 12272, 12274, 12276,
- 12278, 12280, 12282, 12284, 12286, 12288, 12290, 12292, 12294, 12296,
- 12298, 12300, 12302, 12304, 12306, 12308, 12310, 12312, 12314, 12316,
- 12318, 12320, 12322, 12324, 12326, 12328, 12330, 12332, 12334, 12336,
- 12338, 12340, 12342, 12344, 12346, 12348, 12350, 12352, 12354, 12356,
- 12358, 12360, 12362, 12364, 12366, 0, 0, 12368, 12370, 12372, 12374,
- 12376, 12378, 12380, 12382, 12384, 12386, 12388, 12390, 12392, 12394,
- 12396, 12398, 12400, 12402, 12404, 12406, 12408, 12410, 12412, 12414,
- 12416, 12418, 12420, 12422, 12424, 12426, 12428, 12430, 12432, 12434,
- 12436, 12438, 12440, 12442, 12444, 12446, 12448, 12450, 12452, 12454,
- 12456, 12458, 12460, 12462, 12464, 12466, 12468, 12471, 12474, 12477,
- 12480, 12483, 12486, 12489, 12492, 12495, 12498, 0, 0, 0, 0, 0, 12501,
- 12505, 12509, 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541,
- 12545, 12549, 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581,
- 12585, 12589, 12593, 12597, 12601, 12605, 12609, 12611, 12613, 12616, 0,
- 12619, 12621, 12623, 12625, 12627, 12629, 12631, 12633, 12635, 12637,
- 12639, 12641, 12643, 12645, 12647, 12649, 12651, 12653, 12655, 12657,
- 12659, 12661, 12663, 12665, 12667, 12669, 12671, 12674, 12677, 12680,
- 12683, 12687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12690, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12693, 12696, 12699, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12701, 12703, 12705, 12707, 12709, 12711,
- 12713, 12715, 12717, 12719, 12721, 12723, 12725, 12727, 12729, 12731,
- 12733, 12735, 12737, 12739, 12741, 12743, 12745, 12747, 12749, 12751,
- 12753, 12755, 12757, 12759, 12761, 12763, 12765, 12767, 12769, 12771,
- 12773, 12775, 12777, 12779, 12781, 12783, 12785, 0, 0, 0, 0, 0, 12787,
- 12791, 12795, 12799, 12803, 12807, 12811, 12815, 12819, 0, 0, 0, 0, 0, 0,
- 0, 12823, 12825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12827, 12829, 12831, 12833, 12835,
- 12837, 12839, 12841, 12843, 12845, 12847, 12849, 12851, 12853, 12855,
- 12857, 12859, 12861, 12863, 12865, 12867, 12869, 12871, 12873, 12875,
- 12877, 12879, 12881, 12883, 12885, 12887, 12889, 12891, 12893, 12895,
- 12897, 12899, 12901, 12903, 12905, 12907, 12909, 12911, 12913, 12915,
- 12917, 12919, 12921, 12923, 12925, 12927, 12929, 12931, 12933, 12935,
- 12937, 12939, 12941, 12943, 12945, 12947, 12949, 12951, 12953, 12955,
- 12957, 12959, 12961, 12963, 12965, 12967, 12969, 12971, 12973, 12975,
- 12977, 12979, 12981, 12983, 12985, 12987, 12989, 12991, 12993, 12995,
- 12997, 12999, 13001, 13003, 13005, 13007, 13009, 13011, 13013, 13015,
- 13017, 13019, 13021, 13023, 13025, 13027, 13029, 13031, 13033, 13035,
- 13037, 13039, 13041, 13043, 13045, 13047, 13049, 13051, 13053, 13055,
- 13057, 13059, 13061, 13063, 13065, 13067, 13069, 13071, 13073, 13075,
- 13077, 13079, 13081, 13083, 13085, 13087, 13089, 13091, 13093, 13095,
- 13097, 13099, 13101, 13103, 13105, 13107, 13109, 13111, 13113, 13115,
- 13117, 13119, 13121, 13123, 13125, 13127, 13129, 13131, 13133, 13135,
- 13137, 13139, 13141, 13143, 13145, 13147, 13149, 13151, 13153, 13155,
- 13157, 13159, 13161, 13163, 13165, 13167, 13169, 13171, 13173, 13175,
- 13177, 13179, 13181, 13183, 13185, 13187, 13189, 13191, 13193, 13195,
- 13197, 13199, 13201, 13203, 13205, 13207, 13209, 13211, 13213, 13215,
- 13217, 13219, 13221, 13223, 13225, 13227, 13229, 13231, 13233, 13235,
- 13237, 13239, 13241, 13243, 13245, 13247, 13249, 13251, 13253, 13255,
- 13257, 13259, 13261, 13263, 13265, 13267, 13269, 13271, 13273, 13275,
- 13277, 13279, 13281, 13283, 13285, 13287, 13289, 13291, 13293, 13295,
- 13297, 13299, 13301, 13303, 13305, 13307, 13309, 13311, 13313, 13315,
- 13317, 13319, 13321, 13323, 13325, 13327, 13329, 13331, 13333, 13335,
- 13337, 13339, 13341, 13343, 13345, 13347, 13349, 13351, 13353, 13355,
- 13357, 13359, 13361, 13363, 13365, 13367, 13369, 13371, 13373, 13375,
- 13377, 13379, 13381, 13383, 13385, 13387, 13389, 13391, 13393, 13395,
- 13397, 13399, 13401, 13403, 13405, 13407, 13409, 13411, 13413, 13415,
- 13417, 13419, 13421, 13423, 13425, 13427, 13429, 13431, 13433, 13435,
- 13437, 13439, 13441, 13443, 13445, 13447, 13449, 13451, 13453, 13455,
- 13457, 13459, 13461, 13463, 13465, 13467, 13469, 13471, 13473, 13475,
- 13477, 13479, 13481, 13483, 13485, 13487, 13489, 13491, 13493, 13495,
- 13497, 13499, 13501, 13503, 13505, 13507, 13509, 13511, 13513, 13515,
- 13517, 13519, 13521, 13523, 13525, 13527, 13529, 13531, 13533, 13535,
- 13537, 13539, 13541, 13543, 13545, 13547, 13549, 13551, 13553, 13555,
- 13557, 13559, 13561, 13563, 13565, 13567, 13569, 13571, 13573, 13575,
- 13577, 13579, 13581, 13583, 13585, 13587, 13589, 13591, 13593, 13595,
- 13597, 13599, 13601, 13603, 13605, 13607, 13609, 13611, 13613, 13615,
- 13617, 13619, 13621, 13623, 13625, 13627, 13629, 13631, 13633, 13635,
- 13637, 13639, 13641, 13643, 13645, 13647, 13649, 13651, 13653, 13655,
- 13657, 13659, 13661, 13663, 13665, 13667, 13669, 13671, 13673, 13675,
- 13677, 13679, 13681, 13683, 13685, 13687, 13689, 13691, 13693, 13695,
- 13697, 13699, 13701, 13703, 13705, 13707, 13709, 13711, 13713, 13715,
- 13717, 13719, 13721, 13723, 13725, 13727, 13729, 13731, 13733, 13735,
- 13737, 13739, 13741, 13743, 13745, 13747, 13749, 13751, 13753, 13755,
- 13757, 13759, 13761, 13763, 13765, 13767, 13769, 13771, 13773, 13775,
- 13777, 13779, 13781, 13783, 13785, 13787, 13789, 13791, 13793, 13795,
- 13797, 13799, 13801, 13803, 13805, 13807, 13809, 13811, 13813, 13815,
- 13817, 13819, 13821, 13823, 13825, 13827, 13829, 13831, 13833, 13835,
- 13837, 13839, 13841, 13843, 13845, 13847, 13849, 13851, 13853, 13855,
- 13857, 13859, 13861, 13863, 13865, 13867, 13869, 13871, 13873, 13875,
- 13877, 13879, 13881, 13883, 13885, 13887, 13889, 13891, 13893, 13895,
- 13897, 13899, 13901, 13903, 13905, 13907, 13909, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,
+ 9462, 9466, 9470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9474,
+ 9478, 9482, 9487, 9492, 9497, 9502, 9507, 9512, 9517, 9521, 9540, 9549,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9554, 9556,
+ 9558, 9560, 9562, 9564, 9566, 9568, 9570, 9572, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9574, 9576, 9578, 9580, 9582,
+ 9584, 9586, 9588, 9590, 9592, 9594, 9596, 9598, 9600, 9602, 9604, 9606,
+ 9608, 9610, 9612, 9614, 0, 0, 9616, 9618, 9620, 9622, 9624, 9626, 9628,
+ 9630, 9632, 9634, 9636, 9638, 0, 9640, 9642, 9644, 9646, 9648, 9650,
+ 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, 9668, 9670, 9672, 9674,
+ 9676, 0, 9678, 9680, 9682, 9684, 0, 0, 0, 0, 9686, 9689, 9692, 0, 9695,
+ 0, 9698, 9701, 9704, 9707, 9710, 9713, 9716, 9719, 9722, 9725, 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, 9965, 9968, 9971,
+ 9974, 9977, 9980, 9983, 0, 0, 0, 0, 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, 0, 0, 0, 10366, 10368, 10370, 10372, 10374,
+ 10376, 0, 0, 10378, 10380, 10382, 10384, 10386, 10388, 0, 0, 10390,
+ 10392, 10394, 10396, 10398, 10400, 0, 0, 10402, 10404, 10406, 0, 0, 0,
+ 10408, 10410, 10412, 10414, 10416, 10418, 10420, 0, 10422, 10424, 10426,
+ 10428, 10430, 10432, 10434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10436, 0, 10439, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10445, 10448, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10451, 10454, 10457, 10460, 10463,
+ 10466, 10469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10472, 10475,
+ 10478, 10481, 10484, 10487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 0, 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, 0, 10802, 10804, 0, 0, 10806,
+ 0, 0, 10808, 10810, 0, 0, 10812, 10814, 10816, 10818, 0, 10820, 10822,
+ 10824, 10826, 10828, 10830, 10832, 10834, 10836, 10838, 10840, 10842, 0,
+ 10844, 0, 10846, 10848, 10850, 10852, 10854, 10856, 10858, 0, 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, 0, 10990, 10992, 10994, 10996, 0, 0, 10998,
+ 11000, 11002, 11004, 11006, 11008, 11010, 11012, 0, 11014, 11016, 11018,
+ 11020, 11022, 11024, 11026, 0, 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, 0, 11084, 11086, 11088, 11090, 0, 11092, 11094, 11096,
+ 11098, 11100, 0, 11102, 0, 0, 0, 11104, 11106, 11108, 11110, 11112,
+ 11114, 11116, 0, 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, 11362, 11364, 11366, 11368, 11370, 11372,
+ 11374, 11376, 11378, 11380, 11382, 11384, 11386, 11388, 11390, 11392,
+ 11394, 11396, 11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412,
+ 11414, 11416, 11418, 11420, 11422, 11424, 11426, 11428, 11430, 11432,
+ 11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 11450, 11452,
+ 11454, 11456, 11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472,
+ 11474, 11476, 11478, 11480, 11482, 11484, 11486, 11488, 11490, 11492,
+ 11494, 11496, 11498, 11500, 11502, 11504, 11506, 11508, 11510, 11512,
+ 11514, 11516, 11518, 11520, 11522, 11524, 11526, 11528, 11530, 11532,
+ 11534, 11536, 11538, 11540, 11542, 11544, 11546, 11548, 11550, 11552,
+ 11554, 11556, 11558, 11560, 11562, 11564, 11566, 11568, 11570, 11572,
+ 11574, 11576, 11578, 11580, 11582, 11584, 11586, 11588, 11590, 11592,
+ 11594, 11596, 11598, 11600, 11602, 11604, 11606, 11608, 11610, 11612,
+ 11614, 11616, 11618, 11620, 11622, 11624, 11626, 11628, 11630, 11632,
+ 11634, 11636, 11638, 11640, 11642, 11644, 11646, 11648, 11650, 11652,
+ 11654, 11656, 11658, 11660, 11662, 11664, 11666, 11668, 11670, 11672,
+ 11674, 11676, 11678, 11680, 11682, 11684, 11686, 11688, 11690, 11692,
+ 11694, 11696, 11698, 11700, 11702, 11704, 11706, 11708, 11710, 11712,
+ 11714, 11716, 11718, 11720, 11722, 11724, 11726, 11728, 11730, 11732,
+ 11734, 11736, 11738, 11740, 11742, 11744, 11746, 11748, 11750, 11752,
+ 11754, 11756, 11758, 11760, 11762, 11764, 11766, 11768, 11770, 11772,
+ 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, 11792,
+ 11794, 11796, 0, 0, 11798, 11800, 11802, 11804, 11806, 11808, 11810,
+ 11812, 11814, 11816, 11818, 11820, 11822, 11824, 11826, 11828, 11830,
+ 11832, 11834, 11836, 11838, 11840, 11842, 11844, 11846, 11848, 11850,
+ 11852, 11854, 11856, 11858, 11860, 11862, 11864, 11866, 11868, 11870,
+ 11872, 11874, 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890,
+ 11892, 11894, 11896, 11898, 11900, 11902, 11904, 11906, 11908, 11910,
+ 11912, 11914, 11916, 11918, 11920, 11922, 11924, 11926, 11928, 11930,
+ 11932, 11934, 11936, 11938, 11940, 11942, 11944, 11946, 11948, 11950,
+ 11952, 11954, 11956, 11958, 11960, 11962, 11964, 11966, 11968, 11970,
+ 11972, 11974, 11976, 11978, 11980, 11982, 11984, 11986, 11988, 11990,
+ 11992, 11994, 11996, 11998, 12000, 12002, 12004, 12006, 12008, 12010,
+ 12012, 12014, 12016, 12018, 12020, 12022, 12024, 12026, 12028, 12030,
+ 12032, 12034, 12036, 12038, 12040, 12042, 12044, 12046, 12048, 12050,
+ 12052, 12054, 12056, 12058, 12060, 12062, 12064, 12066, 12068, 12070,
+ 12072, 12074, 12076, 12078, 12080, 12082, 12084, 12086, 12088, 12090,
+ 12092, 12094, 12096, 12098, 12100, 12102, 12104, 12106, 12108, 12110,
+ 12112, 12114, 12116, 12118, 12120, 12122, 12124, 12126, 12128, 12130,
+ 12132, 12134, 12136, 12138, 12140, 12142, 12144, 12146, 12148, 12150,
+ 12152, 12154, 12156, 12158, 12160, 12162, 12164, 12166, 12168, 12170,
+ 12172, 12174, 12176, 12178, 12180, 12182, 12184, 12186, 12188, 12190,
+ 12192, 12194, 12196, 12198, 12200, 12202, 12204, 12206, 12208, 12210,
+ 12212, 12214, 12216, 12218, 12220, 12222, 12224, 12226, 12228, 12230,
+ 12232, 12234, 12236, 12238, 12240, 12242, 12244, 12246, 12248, 12250,
+ 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268, 12270,
+ 12272, 12274, 12276, 12278, 12280, 12282, 12284, 12286, 12288, 12290,
+ 12292, 12294, 12296, 12298, 12300, 12302, 12304, 12306, 12308, 12310,
+ 12312, 12314, 12316, 12318, 12320, 12322, 12324, 12326, 12328, 12330,
+ 12332, 12334, 12336, 12338, 12340, 12342, 12344, 12346, 12348, 12350,
+ 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370,
+ 12372, 12374, 12376, 12378, 12380, 0, 0, 12382, 12384, 12386, 12388,
+ 12390, 12392, 12394, 12396, 12398, 12400, 12402, 12404, 12406, 12408,
+ 12410, 12412, 12414, 12416, 12418, 12420, 12422, 12424, 12426, 12428,
+ 12430, 12432, 12434, 12436, 12438, 12440, 12442, 12444, 12446, 12448,
+ 12450, 12452, 12454, 12456, 12458, 12460, 12462, 12464, 12466, 12468,
+ 12470, 12472, 12474, 12476, 12478, 12480, 12482, 12484, 12486, 12488, 0,
+ 12490, 12492, 12494, 12496, 12498, 12500, 12502, 12504, 12506, 12508,
+ 12510, 12512, 12514, 12516, 12518, 12520, 12522, 12524, 12526, 12528,
+ 12530, 12532, 12534, 12536, 12538, 12540, 12542, 0, 12544, 12546, 0,
+ 12548, 0, 0, 12550, 0, 12552, 12554, 12556, 12558, 12560, 12562, 12564,
+ 12566, 12568, 12570, 0, 12572, 12574, 12576, 12578, 0, 12580, 0, 12582,
+ 0, 0, 0, 0, 0, 0, 12584, 0, 0, 0, 0, 12586, 0, 12588, 0, 12590, 0, 12592,
+ 12594, 12596, 0, 12598, 12600, 0, 12602, 0, 0, 12604, 0, 12606, 0, 12608,
+ 0, 12610, 0, 12612, 0, 12614, 12616, 0, 12618, 0, 0, 12620, 12622, 12624,
+ 12626, 0, 12628, 12630, 12632, 12634, 12636, 12638, 12640, 0, 12642,
+ 12644, 12646, 12648, 0, 12650, 12652, 12654, 12656, 0, 12658, 0, 12660,
+ 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, 12678, 0, 12680,
+ 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, 12698, 12700,
+ 12702, 12704, 12706, 12708, 12710, 12712, 0, 0, 0, 0, 0, 12714, 12716,
+ 12718, 0, 12720, 12722, 12724, 12726, 12728, 0, 12730, 12732, 12734,
+ 12736, 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754,
+ 12756, 12758, 12760, 12762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12764, 12767, 12770, 12773, 12776, 12779, 12782, 12785,
+ 12788, 12791, 12794, 0, 0, 0, 0, 0, 12797, 12801, 12805, 12809, 12813,
+ 12817, 12821, 12825, 12829, 12833, 12837, 12841, 12845, 12849, 12853,
+ 12857, 12861, 12865, 12869, 12873, 12877, 12881, 12885, 12889, 12893,
+ 12897, 12901, 12905, 12907, 12909, 12912, 0, 12915, 12917, 12919, 12921,
+ 12923, 12925, 12927, 12929, 12931, 12933, 12935, 12937, 12939, 12941,
+ 12943, 12945, 12947, 12949, 12951, 12953, 12955, 12957, 12959, 12961,
+ 12963, 12965, 12967, 12970, 12973, 12976, 12979, 12983, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12986, 12989,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12995, 12998, 13001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13003, 13005, 13007, 13009, 13011, 13013, 13015, 13017, 13019, 13021,
+ 13023, 13025, 13027, 13029, 13031, 13033, 13035, 13037, 13039, 13041,
+ 13043, 13045, 13047, 13049, 13051, 13053, 13055, 13057, 13059, 13061,
+ 13063, 13065, 13067, 13069, 13071, 13073, 13075, 13077, 13079, 13081,
+ 13083, 13085, 13087, 0, 0, 0, 0, 0, 13089, 13093, 13097, 13101, 13105,
+ 13109, 13113, 13117, 13121, 0, 0, 0, 0, 0, 0, 0, 13125, 13127, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13129, 13131, 13133, 13135, 13137, 13139, 13141, 13143, 13145,
+ 13147, 13149, 13151, 13153, 13155, 13157, 13159, 13161, 13163, 13165,
+ 13167, 13169, 13171, 13173, 13175, 13177, 13179, 13181, 13183, 13185,
+ 13187, 13189, 13191, 13193, 13195, 13197, 13199, 13201, 13203, 13205,
+ 13207, 13209, 13211, 13213, 13215, 13217, 13219, 13221, 13223, 13225,
+ 13227, 13229, 13231, 13233, 13235, 13237, 13239, 13241, 13243, 13245,
+ 13247, 13249, 13251, 13253, 13255, 13257, 13259, 13261, 13263, 13265,
+ 13267, 13269, 13271, 13273, 13275, 13277, 13279, 13281, 13283, 13285,
+ 13287, 13289, 13291, 13293, 13295, 13297, 13299, 13301, 13303, 13305,
+ 13307, 13309, 13311, 13313, 13315, 13317, 13319, 13321, 13323, 13325,
+ 13327, 13329, 13331, 13333, 13335, 13337, 13339, 13341, 13343, 13345,
+ 13347, 13349, 13351, 13353, 13355, 13357, 13359, 13361, 13363, 13365,
+ 13367, 13369, 13371, 13373, 13375, 13377, 13379, 13381, 13383, 13385,
+ 13387, 13389, 13391, 13393, 13395, 13397, 13399, 13401, 13403, 13405,
+ 13407, 13409, 13411, 13413, 13415, 13417, 13419, 13421, 13423, 13425,
+ 13427, 13429, 13431, 13433, 13435, 13437, 13439, 13441, 13443, 13445,
+ 13447, 13449, 13451, 13453, 13455, 13457, 13459, 13461, 13463, 13465,
+ 13467, 13469, 13471, 13473, 13475, 13477, 13479, 13481, 13483, 13485,
+ 13487, 13489, 13491, 13493, 13495, 13497, 13499, 13501, 13503, 13505,
+ 13507, 13509, 13511, 13513, 13515, 13517, 13519, 13521, 13523, 13525,
+ 13527, 13529, 13531, 13533, 13535, 13537, 13539, 13541, 13543, 13545,
+ 13547, 13549, 13551, 13553, 13555, 13557, 13559, 13561, 13563, 13565,
+ 13567, 13569, 13571, 13573, 13575, 13577, 13579, 13581, 13583, 13585,
+ 13587, 13589, 13591, 13593, 13595, 13597, 13599, 13601, 13603, 13605,
+ 13607, 13609, 13611, 13613, 13615, 13617, 13619, 13621, 13623, 13625,
+ 13627, 13629, 13631, 13633, 13635, 13637, 13639, 13641, 13643, 13645,
+ 13647, 13649, 13651, 13653, 13655, 13657, 13659, 13661, 13663, 13665,
+ 13667, 13669, 13671, 13673, 13675, 13677, 13679, 13681, 13683, 13685,
+ 13687, 13689, 13691, 13693, 13695, 13697, 13699, 13701, 13703, 13705,
+ 13707, 13709, 13711, 13713, 13715, 13717, 13719, 13721, 13723, 13725,
+ 13727, 13729, 13731, 13733, 13735, 13737, 13739, 13741, 13743, 13745,
+ 13747, 13749, 13751, 13753, 13755, 13757, 13759, 13761, 13763, 13765,
+ 13767, 13769, 13771, 13773, 13775, 13777, 13779, 13781, 13783, 13785,
+ 13787, 13789, 13791, 13793, 13795, 13797, 13799, 13801, 13803, 13805,
+ 13807, 13809, 13811, 13813, 13815, 13817, 13819, 13821, 13823, 13825,
+ 13827, 13829, 13831, 13833, 13835, 13837, 13839, 13841, 13843, 13845,
+ 13847, 13849, 13851, 13853, 13855, 13857, 13859, 13861, 13863, 13865,
+ 13867, 13869, 13871, 13873, 13875, 13877, 13879, 13881, 13883, 13885,
+ 13887, 13889, 13891, 13893, 13895, 13897, 13899, 13901, 13903, 13905,
+ 13907, 13909, 13911, 13913, 13915, 13917, 13919, 13921, 13923, 13925,
+ 13927, 13929, 13931, 13933, 13935, 13937, 13939, 13941, 13943, 13945,
+ 13947, 13949, 13951, 13953, 13955, 13957, 13959, 13961, 13963, 13965,
+ 13967, 13969, 13971, 13973, 13975, 13977, 13979, 13981, 13983, 13985,
+ 13987, 13989, 13991, 13993, 13995, 13997, 13999, 14001, 14003, 14005,
+ 14007, 14009, 14011, 14013, 14015, 14017, 14019, 14021, 14023, 14025,
+ 14027, 14029, 14031, 14033, 14035, 14037, 14039, 14041, 14043, 14045,
+ 14047, 14049, 14051, 14053, 14055, 14057, 14059, 14061, 14063, 14065,
+ 14067, 14069, 14071, 14073, 14075, 14077, 14079, 14081, 14083, 14085,
+ 14087, 14089, 14091, 14093, 14095, 14097, 14099, 14101, 14103, 14105,
+ 14107, 14109, 14111, 14113, 14115, 14117, 14119, 14121, 14123, 14125,
+ 14127, 14129, 14131, 14133, 14135, 14137, 14139, 14141, 14143, 14145,
+ 14147, 14149, 14151, 14153, 14155, 14157, 14159, 14161, 14163, 14165,
+ 14167, 14169, 14171, 14173, 14175, 14177, 14179, 14181, 14183, 14185,
+ 14187, 14189, 14191, 14193, 14195, 14197, 14199, 14201, 14203, 14205,
+ 14207, 14209, 14211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
/* NFC pairs */
#define COMP_SHIFT 2
static unsigned short comp_index[] = {
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
- 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22, 0, 0, 0,
- 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47,
- 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0,
- 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0,
- 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0,
- 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82,
- 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100,
- 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
- 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 107, 108, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 112,
- 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125,
- 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133,
- 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0,
- 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0,
- 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0,
- 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162,
- 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168,
- 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0,
- 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181,
- 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0,
- 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194,
- 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0,
- 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0,
- 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0,
- 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0,
- 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 248, 249, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 252, 253, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 259, 260, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 273, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279,
- 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0,
- 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309,
- 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0,
- 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0,
- 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0,
- 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0,
- 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0,
- 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0,
- 0, 369, 0, 0, 0, 0, 0, 370, 371, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 376, 377, 378, 0, 0,
- 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383,
- 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 390, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 392, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 395, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 399, 400, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404,
- 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 414, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 422, 423, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 455, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13,
+ 14, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, 19, 20, 21, 0, 0,
+ 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 0, 0, 34, 35, 36, 0, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 40, 41, 42, 43, 44,
+ 45, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 0, 49, 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 56, 57,
+ 0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62,
+ 63, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 67, 68, 69, 70, 71, 72, 0, 0, 0,
+ 0, 0, 0, 0, 0, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 77,
+ 78, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 82, 83, 84, 0, 85, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 87, 88, 0, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 92, 93, 94,
+ 95, 96, 97, 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 101, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 109, 110, 111, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 114, 115, 116,
+ 117, 118, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 122, 0, 0,
+ 0, 0, 0, 0, 0, 123, 124, 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127,
+ 128, 0, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, 137,
+ 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 141, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 146, 0, 147,
+ 148, 149, 0, 0, 0, 0, 0, 0, 0, 150, 151, 152, 153, 154, 155, 156, 0, 0,
+ 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160,
+ 0, 161, 162, 163, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 167, 168, 0,
+ 0, 0, 0, 0, 0, 0, 169, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
+ 173, 174, 0, 175, 176, 177, 0, 0, 0, 0, 0, 0, 0, 178, 179, 180, 181, 182,
+ 183, 0, 0, 0, 0, 0, 0, 0, 0, 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 186, 187, 188, 189, 190, 191, 192, 0, 0, 0, 0, 0, 0, 0, 193, 194, 195,
+ 0, 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 199, 0, 200, 201, 202, 0, 0,
+ 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, 0,
+ 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 213, 214, 0, 215, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217,
+ 218, 219, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 223, 0, 224, 0,
+ 225, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0,
+ 228, 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, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245,
+ 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0,
+ 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 266, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0,
+ 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 307,
+ 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 311, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 315, 0, 316,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 322, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0,
+ 0, 0, 0, 0, 328, 329, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0,
+ 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0,
+ 0, 0, 0, 337, 338, 0, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0,
+ 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 344, 345, 0, 346, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349,
+ 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0,
+ 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 355, 0, 0, 0, 0, 0, 0, 356, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 362, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 376, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380,
+ 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 409, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0,
+ 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 441, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 442, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450,
+ 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0,
+ 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0,
0, 0, 0, 461, 0, 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, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0,
- 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 477, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0,
- 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0,
- 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505,
- 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0,
- 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0,
- 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0,
- 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0,
- 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0,
- 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0,
- 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546,
- 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0,
- 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0,
- 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 576, 0, 0, 0, 0, 0, 577, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0,
+ 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0,
+ 0, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484,
+ 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0,
+ 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0,
+ 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0,
+ 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0,
+ 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0,
+ 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0,
+ 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520,
+ 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0,
+ 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0,
+ 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 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,
- 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674,
+ 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 633,
};
static unsigned int comp_data[] = {
- 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 0, 0, 192, 193,
- 194, 195, 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840,
- 0, 7680, 0, 0, 260, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262,
- 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 0, 0, 0,
- 200, 201, 202, 7868, 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, 0, 0,
- 0, 7864, 0, 0, 0, 552, 280, 7704, 0, 7706, 0, 0, 0, 7710, 0, 500, 284, 0,
- 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714,
- 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 0, 0,
- 204, 205, 206, 296, 298, 300, 304, 207, 7880, 0, 0, 463, 520, 522, 0, 0,
- 0, 7882, 0, 0, 0, 0, 302, 0, 0, 7724, 0, 0, 0, 308, 0, 7728, 0, 0, 0, 0,
- 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0,
- 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0,
- 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 0, 504, 323, 0, 209, 0, 0, 7748,
- 0, 0, 0, 0, 327, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 0, 0, 0,
- 210, 211, 212, 213, 332, 334, 558, 214, 7886, 0, 336, 465, 524, 526, 0,
- 0, 416, 7884, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0,
- 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0,
- 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0,
- 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0,
- 7792, 0, 0, 7790, 0, 0, 0, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910,
- 366, 368, 467, 532, 534, 0, 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0,
- 7796, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812,
- 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0,
- 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0,
- 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 224, 225, 226, 227, 257, 259, 551,
- 228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, 7841, 0, 7681, 0, 0, 261, 0,
- 0, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0,
- 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0,
- 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 232, 233, 234, 7869, 275,
- 277, 279, 235, 7867, 0, 0, 283, 517, 519, 0, 0, 0, 7865, 0, 0, 0, 553,
- 281, 7705, 0, 7707, 0, 0, 0, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287,
- 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 0, 0, 293, 0, 0, 0, 7715,
- 7719, 0, 0, 0, 543, 0, 0, 0, 0, 0, 7717, 0, 0, 0, 7721, 0, 0, 7723, 0,
- 7830, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464, 521, 523, 0,
- 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 309, 0, 0, 0, 0, 496,
- 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0,
- 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0,
- 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 0, 0, 505, 324, 0,
- 241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 7751, 0, 0, 0, 326, 0, 7755, 0, 0,
- 7753, 0, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337,
- 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0,
- 7767, 0, 341, 0, 0, 0, 0, 7769, 0, 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771,
- 0, 0, 0, 343, 0, 0, 0, 0, 7775, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0,
- 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0,
- 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 0, 0, 0, 249, 250,
- 251, 361, 363, 365, 0, 252, 7911, 367, 369, 468, 533, 535, 0, 0, 432,
- 7909, 7795, 0, 0, 0, 371, 7799, 0, 7797, 0, 0, 0, 0, 7805, 0, 7807, 0, 0,
- 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0,
- 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927,
- 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0,
- 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0,
- 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0,
- 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874,
- 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0,
- 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0,
- 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0,
- 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689,
- 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0,
- 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0,
- 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0,
- 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855,
- 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703,
- 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0,
- 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802,
- 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0,
- 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903,
- 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0,
- 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0,
- 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0,
- 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0,
- 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0,
- 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140,
- 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0,
- 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0,
- 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911,
- 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0,
- 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118,
- 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0,
- 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0,
- 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0,
- 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971,
- 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0,
- 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0,
- 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0,
- 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024,
- 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0,
- 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0,
- 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272,
- 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0,
- 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0,
- 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263,
- 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0,
- 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0,
- 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572,
- 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0,
- 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888,
- 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0,
- 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0,
- 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0,
- 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0,
- 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0,
- 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772,
- 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0,
- 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897,
- 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943,
- 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0,
- 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947,
- 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076,
- 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955,
- 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970,
- 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0,
- 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0,
- 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983,
- 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0,
- 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987,
- 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998,
- 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0,
- 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022,
- 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0,
- 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0,
- 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101,
- 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0,
- 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0,
- 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0,
- 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0,
- 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0,
- 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0,
- 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0,
- 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0,
- 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0,
- 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0,
- 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0,
- 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0,
- 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0,
- 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0,
- 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0,
- 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0,
- 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0,
- 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406,
- 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0,
- 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0,
- 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0,
- 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485,
- 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0,
- 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508,
- 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0,
- 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803,
+ 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 8800, 0, 0, 0, 8815, 192, 193, 194,
+ 195, 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840, 0,
+ 7680, 0, 0, 260, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 0, 262,
+ 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 0, 7690, 0, 0, 0, 0,
+ 270, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 200, 201, 202, 7868,
+ 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, 0, 0, 0, 7864, 0, 0, 0,
+ 552, 280, 7704, 0, 7706, 0, 0, 0, 0, 7710, 0, 0, 500, 284, 0, 7712, 286,
+ 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 0, 292, 0, 0, 0, 7714, 7718, 0, 0,
+ 0, 542, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 0, 0, 0, 204, 205, 206, 296,
+ 298, 300, 304, 207, 7880, 0, 0, 463, 520, 522, 0, 0, 0, 7882, 0, 0, 0, 0,
+ 302, 0, 0, 7724, 0, 0, 0, 0, 308, 0, 0, 7728, 0, 0, 0, 0, 0, 488, 0,
+ 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 313, 0, 0, 0, 0, 0, 317, 0,
+ 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 7742, 0, 0, 0, 0, 7744, 0,
+ 0, 7746, 0, 0, 504, 323, 0, 209, 0, 0, 7748, 0, 0, 0, 0, 327, 0, 7750, 0,
+ 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 210, 211, 212, 213, 332, 334, 558,
+ 214, 7886, 0, 336, 465, 524, 526, 0, 0, 416, 7884, 0, 0, 0, 0, 490, 0, 0,
+ 7764, 0, 0, 0, 0, 7766, 0, 0, 340, 0, 0, 0, 0, 7768, 0, 0, 0, 0, 344,
+ 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, 0, 0, 7774, 0, 0, 346, 348,
+ 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0,
+ 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, 7792, 0, 0, 7790, 0,
+ 217, 218, 219, 360, 362, 364, 0, 220, 7910, 366, 368, 467, 532, 534, 0,
+ 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0, 7796, 0, 0, 0, 0, 0, 7804, 0,
+ 7806, 0, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0,
+ 7818, 7820, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0,
+ 7924, 0, 0, 0, 377, 7824, 0, 0, 0, 379, 0, 0, 0, 0, 381, 0, 7826, 0, 0,
+ 0, 0, 7828, 0, 224, 225, 226, 227, 257, 259, 551, 228, 7843, 229, 0, 462,
+ 513, 515, 0, 0, 0, 7841, 0, 7681, 0, 0, 261, 0, 0, 0, 7683, 0, 0, 7685,
+ 0, 0, 0, 0, 7687, 0, 0, 263, 265, 0, 0, 0, 267, 0, 0, 0, 0, 269, 0, 231,
+ 0, 0, 0, 0, 7691, 0, 0, 0, 0, 271, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0,
+ 7695, 0, 232, 233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, 517,
+ 519, 0, 0, 0, 7865, 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 0, 0, 7711,
+ 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, 291, 0, 0, 0, 0,
+ 293, 0, 0, 0, 7715, 7719, 0, 0, 0, 543, 0, 7717, 0, 0, 0, 7721, 0, 0,
+ 7723, 0, 7830, 0, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464,
+ 521, 523, 0, 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 0, 309, 0,
+ 0, 0, 0, 496, 0, 7729, 0, 0, 0, 0, 0, 489, 0, 7731, 0, 0, 0, 311, 0, 0,
+ 0, 0, 7733, 0, 0, 314, 0, 0, 0, 0, 0, 318, 0, 7735, 0, 0, 0, 316, 0,
+ 7741, 0, 0, 7739, 0, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 505,
+ 324, 0, 241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 7751, 0, 0, 0, 326, 0, 7755,
+ 0, 0, 7753, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, 466,
+ 525, 527, 0, 0, 417, 7885, 0, 0, 0, 0, 491, 0, 0, 7765, 0, 0, 0, 0, 7767,
+ 0, 0, 341, 0, 0, 0, 0, 7769, 0, 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771, 0,
+ 0, 0, 343, 0, 0, 0, 0, 7775, 0, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0,
+ 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0,
+ 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 249, 250, 251, 361, 363,
+ 365, 0, 252, 7911, 367, 369, 468, 533, 535, 0, 0, 432, 7909, 7795, 0, 0,
+ 0, 371, 7799, 0, 7797, 0, 0, 0, 0, 0, 7805, 0, 7807, 0, 0, 7809, 7811,
+ 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, 0, 0, 0, 7819, 7821,
+ 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, 7833, 0, 0, 0, 7925, 0, 0,
+ 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, 7827, 0, 0, 0, 0, 7829,
+ 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 7846, 7844, 0, 7850, 7848, 0, 0, 0,
+ 478, 0, 0, 0, 0, 506, 0, 0, 0, 508, 0, 0, 482, 0, 0, 0, 0, 7688, 0, 0,
+ 7872, 7870, 0, 7876, 7874, 0, 0, 0, 0, 7726, 0, 0, 7890, 7888, 0, 7894,
+ 7892, 0, 0, 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 554, 0, 0, 0, 0, 510, 0,
+ 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, 0, 0, 473, 7847, 7845, 0, 7851, 7849,
+ 0, 0, 0, 479, 0, 0, 0, 0, 507, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 7689,
+ 0, 0, 7873, 7871, 0, 7877, 7875, 0, 0, 0, 0, 7727, 0, 0, 7891, 7889, 0,
+ 7895, 7893, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 555, 0, 0, 0, 0,
+ 511, 0, 0, 476, 472, 0, 0, 470, 0, 0, 0, 0, 0, 0, 474, 7856, 7854, 0,
+ 7860, 7858, 0, 0, 0, 7857, 7855, 0, 7861, 7859, 0, 0, 0, 7700, 7702, 0,
+ 0, 7701, 7703, 0, 0, 7760, 7762, 0, 0, 7761, 7763, 0, 0, 0, 0, 7780, 0,
+ 0, 0, 7781, 0, 0, 0, 7782, 0, 0, 0, 7783, 0, 0, 7800, 0, 0, 0, 7801, 0,
+ 0, 0, 0, 0, 7802, 0, 0, 0, 7803, 0, 0, 7835, 0, 7900, 7898, 0, 7904,
+ 7902, 0, 0, 0, 0, 7906, 0, 0, 7901, 7899, 0, 7905, 7903, 0, 0, 0, 0,
+ 7907, 0, 0, 7914, 7912, 0, 7918, 7916, 0, 0, 0, 0, 7920, 0, 0, 7915,
+ 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 0, 494, 492, 0, 0, 0,
+ 493, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 7708, 0, 0, 0, 7709, 0, 0,
+ 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 495, 8122, 902, 0, 0, 8121, 8120, 0,
+ 0, 0, 0, 7944, 7945, 0, 8124, 0, 0, 8136, 904, 0, 0, 0, 0, 7960, 7961,
+ 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, 0, 0, 8154, 906, 0, 0, 8153,
+ 8152, 0, 938, 0, 0, 7992, 7993, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0,
+ 0, 8172, 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 8186, 911,
+ 0, 0, 0, 0, 8040, 8041, 0, 8188, 0, 0, 0, 8116, 0, 0, 0, 8132, 0, 0,
+ 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 8118, 8115, 0, 0,
+ 8050, 941, 0, 0, 0, 0, 7952, 7953, 8052, 942, 0, 0, 0, 0, 7968, 7969,
+ 8134, 8131, 0, 0, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 7984, 7985,
+ 8150, 0, 0, 0, 8056, 972, 0, 0, 0, 0, 8000, 8001, 0, 0, 8164, 8165, 8058,
+ 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 8016, 8017, 8166, 0, 0, 0, 8060,
+ 974, 0, 0, 0, 0, 8032, 8033, 8182, 8179, 0, 0, 8146, 912, 0, 0, 8151, 0,
+ 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 0, 8180, 0, 0, 0, 979, 0, 0, 0, 0,
+ 0, 980, 0, 0, 0, 1031, 0, 1232, 0, 1234, 0, 1027, 0, 0, 1024, 0, 0, 0, 0,
+ 1238, 0, 1025, 0, 1217, 0, 1244, 0, 0, 0, 1246, 1037, 0, 0, 0, 1250,
+ 1049, 0, 1252, 0, 1036, 0, 0, 0, 0, 0, 1254, 1262, 1038, 0, 1264, 0, 0,
+ 1266, 0, 0, 0, 0, 1268, 0, 0, 0, 1272, 0, 0, 0, 1260, 0, 1233, 0, 1235,
+ 0, 1107, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 1218, 0, 1245, 0, 0,
+ 0, 1247, 1117, 0, 0, 0, 1251, 1081, 0, 1253, 0, 1116, 0, 0, 0, 0, 0,
+ 1255, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 0, 1269, 0, 0, 0, 1273,
+ 0, 0, 0, 1261, 0, 0, 0, 1111, 1142, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0,
+ 1242, 0, 0, 0, 1243, 0, 0, 0, 1258, 0, 0, 0, 1259, 0, 0, 1570, 1571,
+ 1573, 0, 0, 0, 0, 0, 0, 1572, 0, 0, 0, 1574, 0, 0, 0, 1730, 0, 0, 0,
+ 1747, 0, 0, 0, 1728, 0, 2345, 0, 0, 0, 2353, 0, 0, 0, 2356, 0, 0, 0, 0,
+ 2507, 2508, 2891, 2888, 2892, 0, 2964, 0, 0, 0, 0, 0, 0, 3018, 3020, 0,
+ 0, 0, 0, 0, 0, 3019, 0, 3144, 0, 0, 0, 0, 0, 3264, 0, 0, 3274, 3271,
+ 3272, 0, 0, 0, 0, 0, 0, 3275, 0, 3402, 3404, 0, 0, 3403, 0, 0, 0, 0, 0,
+ 3546, 3548, 3550, 0, 0, 0, 0, 0, 3549, 0, 0, 4134, 0, 0, 0, 0, 6918, 0,
+ 0, 0, 6920, 0, 0, 0, 6922, 0, 0, 0, 6924, 0, 0, 0, 6926, 0, 0, 0, 6930,
+ 0, 0, 0, 6971, 0, 0, 0, 6973, 0, 0, 0, 6976, 0, 0, 0, 6977, 0, 0, 0,
+ 6979, 7736, 0, 0, 0, 7737, 0, 0, 0, 7772, 0, 0, 0, 7773, 0, 0, 0, 0, 0,
+ 7784, 0, 0, 0, 7785, 0, 0, 0, 7852, 0, 0, 7862, 0, 0, 0, 0, 7853, 0, 0,
+ 7863, 0, 0, 0, 0, 7878, 0, 0, 0, 7879, 0, 0, 0, 7896, 0, 0, 0, 7897, 0,
+ 7938, 7940, 0, 0, 7942, 8064, 0, 0, 7939, 7941, 0, 0, 7943, 8065, 0, 0,
+ 0, 8066, 0, 0, 0, 8067, 0, 0, 0, 8068, 0, 0, 0, 8069, 0, 0, 0, 8070, 0,
+ 0, 0, 8071, 0, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 0, 7947, 7949, 0, 0,
+ 7951, 8073, 0, 0, 0, 8074, 0, 0, 0, 8075, 0, 0, 0, 8076, 0, 0, 0, 8077,
+ 0, 0, 0, 8078, 0, 0, 0, 8079, 0, 0, 7954, 7956, 0, 0, 7955, 7957, 0, 0,
+ 7962, 7964, 0, 0, 7963, 7965, 0, 0, 7970, 7972, 0, 0, 7974, 8080, 0, 0,
+ 7971, 7973, 0, 0, 7975, 8081, 0, 0, 0, 8082, 0, 0, 0, 8083, 0, 0, 0,
+ 8084, 0, 0, 0, 8085, 0, 0, 0, 8086, 0, 0, 0, 8087, 0, 0, 7978, 7980, 0,
+ 0, 7982, 8088, 0, 0, 7979, 7981, 0, 0, 7983, 8089, 0, 0, 0, 8090, 0, 0,
+ 0, 8091, 0, 0, 0, 8092, 0, 0, 0, 8093, 0, 0, 0, 8094, 0, 0, 0, 8095, 0,
+ 0, 7986, 7988, 0, 0, 7990, 0, 0, 0, 7987, 7989, 0, 0, 7991, 0, 0, 0,
+ 7994, 7996, 0, 0, 7998, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 8002,
+ 8004, 0, 0, 8003, 8005, 0, 0, 8010, 8012, 0, 0, 8011, 8013, 0, 0, 8018,
+ 8020, 0, 0, 8022, 0, 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 8027, 8029,
+ 0, 0, 8031, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 8035, 8037, 0,
+ 0, 8039, 8097, 0, 0, 0, 8098, 0, 0, 0, 8099, 0, 0, 0, 8100, 0, 0, 0,
+ 8101, 0, 0, 0, 8102, 0, 0, 0, 8103, 0, 0, 8042, 8044, 0, 0, 8046, 8104,
+ 0, 0, 8043, 8045, 0, 0, 8047, 8105, 0, 0, 0, 8106, 0, 0, 0, 8107, 0, 0,
+ 0, 8108, 0, 0, 0, 8109, 0, 0, 0, 8110, 0, 0, 0, 8111, 0, 0, 0, 8114, 0,
+ 0, 0, 8130, 0, 0, 0, 8178, 0, 0, 0, 8119, 0, 0, 8141, 8142, 0, 0, 8143,
+ 0, 0, 0, 0, 8135, 0, 0, 0, 8183, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0,
+ 0, 0, 0, 8602, 0, 0, 0, 8603, 0, 0, 0, 8622, 0, 0, 0, 8653, 0, 0, 0,
+ 8655, 0, 0, 0, 8654, 0, 0, 0, 8708, 0, 0, 0, 8713, 0, 0, 0, 8716, 0, 0,
+ 0, 8740, 0, 0, 0, 8742, 0, 0, 0, 8769, 0, 0, 0, 8772, 0, 0, 0, 8775, 0,
+ 0, 0, 8777, 0, 0, 0, 8813, 0, 0, 0, 8802, 0, 0, 0, 8816, 0, 0, 0, 8817,
+ 0, 0, 0, 8820, 0, 0, 0, 8821, 0, 0, 0, 8824, 0, 0, 0, 8825, 0, 0, 0,
+ 8832, 0, 0, 0, 8833, 0, 0, 0, 8928, 0, 0, 0, 8929, 0, 0, 0, 8836, 0, 0,
+ 0, 8837, 0, 0, 0, 8840, 0, 0, 0, 8841, 0, 0, 0, 8930, 0, 0, 0, 8931, 0,
+ 0, 0, 8876, 0, 0, 0, 8877, 0, 0, 0, 8878, 0, 0, 0, 8879, 0, 0, 0, 8938,
+ 0, 0, 0, 8939, 0, 0, 0, 8940, 0, 0, 0, 8941, 12436, 0, 0, 0, 12364, 0, 0,
+ 0, 12366, 0, 0, 0, 12368, 0, 0, 0, 12370, 0, 0, 0, 12372, 0, 0, 0, 12374,
+ 0, 0, 0, 12376, 0, 0, 0, 12378, 0, 0, 0, 12380, 0, 0, 0, 12382, 0, 0, 0,
+ 12384, 0, 0, 0, 12386, 0, 0, 0, 12389, 0, 0, 0, 12391, 0, 0, 0, 12393, 0,
+ 0, 0, 12400, 12401, 0, 0, 12403, 12404, 0, 0, 12406, 12407, 0, 0, 12409,
+ 12410, 0, 0, 12412, 12413, 0, 0, 12446, 0, 0, 0, 12532, 0, 0, 0, 12460,
+ 0, 0, 0, 12462, 0, 0, 0, 12464, 0, 0, 0, 12466, 0, 0, 0, 12468, 0, 0, 0,
+ 12470, 0, 0, 0, 12472, 0, 0, 0, 12474, 0, 0, 0, 12476, 0, 0, 0, 12478, 0,
+ 0, 0, 12480, 0, 0, 0, 12482, 0, 0, 0, 12485, 0, 0, 0, 12487, 0, 0, 0,
+ 12489, 0, 0, 0, 12496, 12497, 0, 0, 12499, 12500, 0, 0, 12502, 12503, 0,
+ 0, 12505, 12506, 0, 0, 12508, 12509, 0, 0, 12535, 0, 0, 0, 12536, 0, 0,
+ 0, 12537, 0, 0, 0, 12538, 0, 0, 0, 12542, 0, 0, 0, 0, 0, 69786, 0, 0, 0,
+ 69788, 0, 0, 0, 69803, 0, 0, 0, 0, 69934, 0, 0, 0, 69935,
};
static const change_record change_records_3_2_0[] = {
{ 255, 255, 255, 255, 0 },
{ 11, 255, 255, 255, 0 },
{ 10, 255, 255, 255, 0 },
+ { 255, 30, 255, 255, 0 },
+ { 255, 2, 255, 255, 0 },
{ 19, 21, 255, 255, 0 },
{ 255, 255, 2, 255, 0 },
{ 255, 255, 3, 255, 0 },
{ 255, 255, 1, 255, 0 },
{ 255, 0, 255, 255, 0 },
- { 255, 2, 255, 255, 0 },
{ 255, 29, 255, 255, 0 },
{ 255, 26, 255, 255, 0 },
{ 5, 255, 255, 255, 0 },
@@ -5058,7 +5177,7 @@ static const change_record change_records_3_2_0[] = {
{ 255, 7, 7, 255, 0 },
{ 255, 7, 8, 255, 0 },
{ 255, 7, 9, 255, 0 },
- { 255, 5, 255, 255, 0 },
+ { 1, 5, 255, 255, 0 },
{ 15, 14, 255, 255, 0 },
{ 255, 10, 255, 255, 0 },
{ 18, 255, 255, 255, 0 },
@@ -5070,12 +5189,12 @@ static const change_record change_records_3_2_0[] = {
{ 255, 255, 7, 255, 0 },
{ 255, 255, 8, 255, 0 },
{ 255, 255, 9, 255, 0 },
- { 255, 30, 255, 255, 0 },
{ 19, 30, 255, 255, 0 },
{ 255, 8, 255, 255, 0 },
{ 255, 22, 255, 255, 0 },
{ 255, 23, 255, 255, 0 },
{ 9, 255, 255, 255, 0 },
+ { 14, 4, 255, 255, 0 },
{ 255, 20, 255, 255, 0 },
{ 255, 255, 255, 255, 1e+16 },
{ 255, 255, 255, 255, 1e+20 },
@@ -5084,74 +5203,74 @@ static const change_record change_records_3_2_0[] = {
{ 1, 255, 255, 0, 0 },
};
static unsigned char changes_3_2_0_index[] = {
- 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 2, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61,
- 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83,
- 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87,
+ 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 2, 2, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 2, 2, 2, 37, 38, 2, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 2, 52, 2, 2, 53, 54, 55, 56, 57, 2, 2, 58, 59, 60, 2, 2, 61, 62, 63,
+ 64, 65, 65, 2, 2, 2, 2, 66, 2, 67, 68, 69, 70, 71, 2, 2, 2, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 83, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 86,
+ 87, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 90,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48,
- 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 103, 104, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 92, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 95, 2, 2, 2, 2, 2, 2, 2, 2, 96, 50, 50,
+ 97, 98, 50, 99, 100, 101, 102, 103, 104, 105, 106, 107, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 105, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 108, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 106, 107, 108, 109, 110, 111, 2, 2, 2, 112, 113, 2, 114, 115,
- 116, 117, 118, 119, 2, 120, 121, 122, 123, 124, 2, 2, 2, 2, 2, 2, 125, 2,
- 126, 2, 127, 2, 128, 2, 129, 2, 2, 2, 130, 2, 2, 2, 131, 132, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 48, 48, 48, 48, 48, 48, 133, 2, 134, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48,
- 135, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 109, 110, 111, 112, 113, 114, 2, 2, 2, 115, 116, 2, 117, 118,
+ 119, 120, 121, 122, 2, 123, 124, 125, 126, 127, 2, 2, 2, 2, 2, 2, 128, 2,
+ 129, 130, 131, 2, 132, 2, 133, 2, 2, 2, 134, 2, 2, 2, 135, 136, 137, 138,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 140, 2, 141, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50,
+ 50, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 136, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 143, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 144, 145, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 146, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 137, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 147, 2, 148, 2, 149, 2, 2, 150, 2, 2, 2, 151, 152,
+ 153, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 154, 155,
+ 2, 2, 156, 157, 158, 159, 160, 2, 161, 162, 163, 164, 165, 166, 167, 148,
+ 168, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 169, 170, 93, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 171, 2, 172, 173, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 138, 2, 139, 2, 140, 2, 2, 141, 2, 2, 2, 142, 143, 144, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 174, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 175, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 145,
- 146, 147, 148, 149, 2, 150, 151, 152, 153, 154, 155, 156, 139, 157, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 158, 159, 90, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 79, 160, 2, 161, 162, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 163, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 164, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 165, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 177, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 166, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 167, 48, 168, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 179, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 163,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 174, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -5386,7 +5505,7 @@ static unsigned char changes_3_2_0_index[] = {
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 48, 169, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -5450,7 +5569,7 @@ static unsigned char changes_3_2_0_index[] = {
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
};
static unsigned char changes_3_2_0_data[] = {
@@ -5460,8 +5579,9 @@ static unsigned char changes_3_2_0_data[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 4, 0, 0, 5, 0, 0, 0, 0, 6, 7, 0, 0, 3, 0, 0, 8, 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5470,848 +5590,906 @@ static unsigned char changes_3_2_0_data[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 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, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 10, 0, 9, 9, 0, 0, 0, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 9, 0, 7, 7, 0, 0, 0, 7, 7, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 7, 7, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 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, 15, 16, 17, 18, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, 18, 19, 0, 0, 9,
+ 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
- 19, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0,
0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 8, 0,
- 0, 36, 37, 38, 39, 40, 41, 1, 1, 0, 0, 0, 8, 35, 6, 4, 5, 36, 37, 38, 39,
- 40, 41, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 4, 0, 0, 37, 38, 39, 40,
+ 41, 42, 1, 1, 0, 0, 0, 4, 36, 8, 6, 7, 37, 38, 39, 40, 41, 42, 1, 1, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 44, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 45, 46, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,
+ 46, 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, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 7, 7, 7, 0, 7, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0,
- 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0,
+ 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 20, 20, 20, 20, 20, 20, 0, 0, 0, 1, 1, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 13, 13, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7,
- 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
0, 0, 0, 0, 0, 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, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7,
- 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0,
+ 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9,
+ 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 7, 7, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0,
+ 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 0, 7, 0, 7, 0, 7,
- 7, 7, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6319,25 +6497,25 @@ static unsigned char changes_3_2_0_data[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6346,24 +6524,24 @@ static unsigned char changes_3_2_0_data[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
};
static const change_record* get_change_3_2_0(Py_UCS4 n)
diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h
index 8830560c1f..38388822b9 100644
--- a/Modules/unicodename_db.h
+++ b/Modules/unicodename_db.h
@@ -4,337 +4,428 @@
/* lexicon */
static unsigned char lexicon[] = {
- 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89,
- 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204,
- 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65,
- 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195,
- 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69,
- 77, 65, 84, 73, 67, 65, 204, 67, 85, 78, 69, 73, 70, 79, 82, 205, 83, 89,
- 77, 66, 79, 204, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, 73, 65, 206,
- 83, 89, 76, 76, 65, 66, 73, 67, 211, 66, 65, 77, 85, 205, 68, 73, 71, 73,
- 212, 66, 79, 76, 196, 72, 65, 78, 71, 85, 204, 65, 78, 196, 71, 82, 69,
- 69, 203, 76, 73, 71, 65, 84, 85, 82, 197, 77, 85, 83, 73, 67, 65, 204,
- 69, 84, 72, 73, 79, 80, 73, 195, 84, 73, 77, 69, 211, 86, 79, 87, 69,
- 204, 70, 79, 210, 73, 84, 65, 76, 73, 195, 67, 89, 82, 73, 76, 76, 73,
+ 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 89, 76, 76, 65, 66, 76,
+ 197, 83, 77, 65, 76, 204, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204,
+ 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 77,
+ 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, 65,
+ 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 67, 79, 77, 80, 65, 84, 73,
+ 66, 73, 76, 73, 84, 217, 67, 85, 78, 69, 73, 70, 79, 82, 205, 83, 89, 77,
+ 66, 79, 204, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, 73, 65, 206, 83,
+ 89, 76, 76, 65, 66, 73, 67, 211, 66, 65, 77, 85, 205, 68, 73, 71, 73,
+ 212, 65, 78, 196, 66, 79, 76, 196, 72, 65, 78, 71, 85, 204, 86, 79, 87,
+ 69, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, 85, 82, 197, 77, 85,
+ 83, 73, 67, 65, 204, 69, 84, 72, 73, 79, 80, 73, 195, 84, 73, 77, 69,
+ 211, 70, 79, 210, 73, 84, 65, 76, 73, 195, 67, 89, 82, 73, 76, 76, 73,
195, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73,
- 198, 67, 73, 82, 67, 76, 69, 196, 67, 79, 77, 66, 73, 78, 73, 78, 199,
- 84, 65, 201, 86, 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197,
- 76, 69, 70, 212, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, 82, 65, 73, 76,
- 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90,
- 65, 78, 84, 73, 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 65, 66, 79, 86,
- 69, 128, 78, 85, 77, 66, 69, 210, 68, 79, 85, 66, 76, 197, 83, 73, 71,
- 78, 128, 194, 66, 69, 76, 79, 87, 128, 75, 65, 84, 65, 75, 65, 78, 193,
- 75, 65, 78, 71, 88, 201, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73,
- 69, 210, 84, 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69,
- 205, 77, 89, 65, 78, 77, 65, 210, 79, 198, 67, 65, 82, 82, 73, 69, 210,
- 87, 72, 73, 84, 197, 65, 82, 82, 79, 87, 128, 85, 128, 73, 78, 73, 84,
- 73, 65, 204, 86, 69, 82, 84, 73, 67, 65, 204, 73, 128, 89, 69, 200, 79,
- 128, 65, 82, 82, 79, 215, 77, 65, 82, 75, 128, 65, 66, 79, 86, 197, 67,
- 79, 80, 84, 73, 195, 80, 72, 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76,
- 73, 65, 206, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 66, 76, 65, 67,
- 203, 75, 72, 77, 69, 210, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72,
- 69, 83, 73, 90, 69, 196, 83, 89, 77, 66, 79, 76, 128, 84, 72, 65, 205,
- 74, 79, 78, 71, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, 128, 83, 81,
- 85, 65, 82, 69, 196, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, 76, 85,
- 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 68, 82, 65, 87, 73, 78, 71,
+ 198, 84, 65, 77, 73, 204, 67, 73, 82, 67, 76, 69, 196, 67, 79, 77, 66,
+ 73, 78, 73, 78, 199, 84, 65, 201, 70, 73, 78, 65, 204, 86, 65, 201, 83,
+ 81, 85, 65, 82, 197, 76, 69, 70, 212, 82, 73, 71, 72, 212, 86, 65, 82,
+ 73, 65, 84, 73, 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69,
+ 82, 206, 65, 66, 79, 86, 69, 128, 66, 89, 90, 65, 78, 84, 73, 78, 197,
+ 83, 73, 71, 78, 128, 66, 69, 76, 79, 87, 128, 68, 79, 85, 66, 76, 197,
+ 73, 83, 79, 76, 65, 84, 69, 196, 78, 85, 77, 66, 69, 210, 75, 65, 84, 65,
+ 75, 65, 78, 193, 194, 77, 79, 68, 73, 70, 73, 69, 210, 68, 79, 212, 75,
+ 65, 78, 71, 88, 201, 65, 128, 76, 73, 78, 69, 65, 210, 84, 73, 66, 69,
+ 84, 65, 206, 79, 198, 73, 78, 73, 84, 73, 65, 204, 77, 69, 69, 205, 86,
+ 69, 82, 84, 73, 67, 65, 204, 77, 89, 65, 78, 77, 65, 210, 75, 72, 77, 69,
+ 210, 85, 128, 87, 72, 73, 84, 197, 67, 65, 82, 82, 73, 69, 210, 73, 128,
+ 65, 82, 82, 79, 87, 128, 79, 128, 65, 66, 79, 86, 197, 77, 65, 82, 75,
+ 128, 89, 69, 200, 65, 82, 82, 79, 215, 67, 79, 80, 84, 73, 195, 80, 72,
+ 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, 206, 68, 69, 86, 65,
+ 78, 65, 71, 65, 82, 201, 66, 76, 65, 67, 203, 84, 73, 76, 197, 83, 89,
+ 77, 66, 79, 76, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196,
+ 84, 72, 65, 205, 74, 79, 78, 71, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75,
+ 69, 128, 83, 81, 85, 65, 82, 69, 196, 66, 79, 216, 72, 69, 66, 82, 69,
+ 215, 77, 73, 65, 207, 80, 76, 85, 211, 82, 73, 71, 72, 84, 87, 65, 82,
+ 68, 211, 71, 69, 79, 82, 71, 73, 65, 206, 68, 82, 65, 87, 73, 78, 71,
211, 67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, 70, 87, 73, 68, 84,
- 200, 66, 65, 76, 73, 78, 69, 83, 197, 71, 69, 79, 82, 71, 73, 65, 206,
- 72, 79, 79, 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69,
- 45, 196, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 73, 195, 65, 76, 69, 198, 72, 69, 65, 86, 217, 84, 79, 128,
- 84, 87, 79, 128, 79, 86, 69, 210, 213, 66, 82, 65, 72, 77, 201, 83, 67,
- 82, 73, 80, 212, 85, 208, 76, 79, 215, 79, 78, 69, 128, 84, 87, 207, 68,
- 79, 87, 206, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 79, 78,
- 197, 69, 81, 85, 65, 204, 72, 73, 71, 200, 66, 82, 65, 67, 75, 69, 84,
- 128, 84, 65, 199, 68, 79, 77, 73, 78, 207, 78, 85, 77, 69, 82, 73, 195,
- 70, 82, 65, 75, 84, 85, 210, 77, 65, 76, 65, 89, 65, 76, 65, 205, 80, 72,
- 65, 83, 69, 45, 195, 76, 69, 70, 84, 87, 65, 82, 68, 211, 84, 72, 82, 69,
- 197, 66, 65, 82, 128, 74, 85, 78, 71, 83, 69, 79, 78, 199, 71, 76, 65,
- 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, 210, 77, 69,
- 68, 73, 65, 204, 84, 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201,
- 65, 82, 77, 69, 78, 73, 65, 206, 72, 73, 82, 65, 71, 65, 78, 193, 73, 68,
- 69, 79, 71, 82, 65, 80, 200, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69,
- 205, 78, 69, 71, 65, 84, 73, 86, 197, 79, 82, 73, 89, 193, 87, 69, 83,
- 84, 45, 67, 82, 69, 197, 72, 65, 76, 198, 77, 65, 82, 203, 80, 72, 65,
- 83, 69, 45, 193, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 78, 69,
- 215, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 128, 84, 79, 78, 197, 86,
- 79, 67, 65, 76, 73, 195, 67, 72, 65, 205, 70, 79, 85, 82, 128, 71, 85,
- 74, 65, 82, 65, 84, 201, 76, 85, 197, 84, 72, 82, 69, 69, 128, 82, 85,
- 78, 73, 195, 83, 65, 85, 82, 65, 83, 72, 84, 82, 193, 84, 69, 84, 82, 65,
- 71, 82, 65, 205, 68, 69, 83, 69, 82, 69, 212, 83, 73, 78, 72, 65, 76,
- 193, 71, 85, 82, 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206,
- 83, 89, 82, 73, 65, 195, 68, 79, 84, 211, 76, 73, 71, 72, 212, 84, 65,
- 77, 73, 204, 65, 67, 85, 84, 69, 128, 70, 73, 86, 69, 128, 75, 65, 128,
- 76, 69, 80, 67, 72, 193, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 89,
- 65, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 77, 65,
- 128, 83, 73, 88, 128, 86, 73, 69, 212, 72, 65, 77, 90, 193, 80, 65, 128,
- 65, 80, 204, 69, 73, 71, 72, 84, 128, 70, 85, 78, 67, 84, 73, 79, 78, 65,
- 204, 83, 128, 83, 69, 86, 69, 78, 128, 72, 79, 82, 73, 90, 79, 78, 84,
- 65, 204, 78, 73, 78, 69, 128, 84, 69, 76, 69, 71, 82, 65, 80, 200, 66,
- 79, 80, 79, 77, 79, 70, 207, 82, 65, 128, 78, 65, 128, 66, 65, 82, 194,
- 68, 65, 83, 73, 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77,
- 65, 75, 83, 85, 82, 193, 84, 207, 90, 90, 89, 88, 128, 90, 90, 89, 84,
- 128, 90, 90, 89, 82, 88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128,
- 90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90,
- 85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 79, 88, 128,
- 90, 90, 79, 80, 128, 90, 90, 79, 128, 90, 90, 73, 88, 128, 90, 90, 73,
- 84, 128, 90, 90, 73, 80, 128, 90, 90, 73, 69, 88, 128, 90, 90, 73, 69,
- 84, 128, 90, 90, 73, 69, 80, 128, 90, 90, 73, 69, 128, 90, 90, 73, 128,
- 90, 90, 69, 88, 128, 90, 90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90,
- 69, 128, 90, 90, 65, 88, 128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128,
- 90, 90, 65, 65, 128, 90, 90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87,
- 65, 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85,
- 79, 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90,
- 85, 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 82, 65, 128, 90,
- 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, 79, 65, 128,
- 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 69, 128, 90,
- 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 78, 79, 82, 128, 90,
- 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73,
- 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72,
- 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89,
- 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90,
- 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85,
- 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79,
- 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128,
- 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72,
- 79, 79, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 128, 90, 72,
- 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 69, 80, 128,
- 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 65, 88, 128,
- 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72,
- 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90,
- 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 78, 128,
- 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 50,
- 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89,
- 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90,
- 65, 82, 81, 65, 128, 90, 65, 81, 69, 198, 90, 65, 77, 88, 128, 90, 65,
- 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72,
- 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 48, 49, 54,
- 72, 128, 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49,
- 54, 69, 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48,
- 49, 54, 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48,
- 49, 53, 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90,
- 48, 49, 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128,
- 90, 48, 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65,
- 128, 90, 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90,
- 48, 49, 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48,
- 57, 128, 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128,
- 90, 48, 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128,
- 90, 48, 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128,
- 90, 48, 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128,
- 90, 48, 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128,
- 90, 48, 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89,
- 89, 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89,
- 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, 87,
- 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, 89,
- 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, 89,
- 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 84, 128, 89,
- 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, 85,
- 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79,
- 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, 89, 85, 79, 128, 89,
- 85, 78, 128, 89, 85, 77, 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89,
- 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69,
- 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85,
- 45, 85, 128, 89, 85, 45, 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69,
- 79, 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65,
- 128, 89, 85, 128, 89, 213, 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82,
- 82, 79, 73, 128, 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75,
- 82, 73, 83, 73, 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73,
- 128, 89, 79, 89, 128, 89, 79, 88, 128, 89, 79, 85, 84, 72, 70, 85, 76,
- 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, 128,
- 89, 79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89,
- 79, 79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 72,
- 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, 69,
- 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79,
- 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45,
- 65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, 69,
- 84, 128, 89, 73, 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, 73,
- 80, 128, 89, 73, 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, 69,
- 88, 128, 89, 73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128,
- 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89,
- 73, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, 70,
- 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, 69,
- 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, 69,
- 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, 128,
- 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79,
- 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, 83,
- 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, 69,
- 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, 69,
- 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, 73,
- 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, 72,
- 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85,
- 128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78,
- 65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128,
- 89, 69, 76, 76, 79, 215, 89, 69, 72, 128, 89, 69, 69, 128, 89, 69, 65,
- 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, 65, 90, 72, 128, 89, 65,
- 90, 128, 89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87,
- 128, 89, 65, 86, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65,
- 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128,
- 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, 210, 89,
- 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, 89,
- 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75, 75, 65, 78,
- 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72, 128, 89, 65,
- 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128, 89, 65, 74,
- 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 72, 72, 128, 89,
- 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71,
- 72, 128, 89, 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69,
- 77, 77, 65, 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89,
- 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72,
- 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89,
- 65, 65, 68, 79, 128, 89, 65, 65, 128, 89, 65, 45, 89, 79, 128, 89, 65,
- 45, 85, 128, 89, 65, 45, 79, 128, 89, 48, 48, 56, 128, 89, 48, 48, 55,
- 128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48, 52, 128, 89,
- 48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65, 128, 89, 48,
- 48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128,
- 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128,
- 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 128, 88, 89, 69, 128,
- 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, 73, 128, 88,
- 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, 87, 65, 128,
- 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128,
- 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79,
- 88, 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, 128, 88, 79, 65,
- 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206,
- 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69,
- 80, 128, 88, 73, 69, 128, 88, 73, 128, 88, 71, 128, 88, 69, 83, 84, 69,
- 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65, 78, 128, 88,
- 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48, 48, 56, 128,
- 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48, 54, 128, 88,
- 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52, 65, 128, 88,
- 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128, 88, 48, 48,
- 49, 128, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 128,
- 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, 80, 128, 87, 85, 79,
- 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, 76, 85, 128, 87, 85,
- 76, 213, 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85, 65, 69, 78,
- 128, 87, 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84,
- 73, 78, 199, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87,
- 82, 65, 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79,
- 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, 87, 79, 82, 203, 87, 79, 82,
- 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, 80, 128, 87, 79,
- 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, 45, 67, 82, 69,
- 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, 87, 79, 206, 87, 79, 77, 69,
- 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, 65, 78, 211, 87, 79, 77, 65,
- 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, 79, 83, 79, 128, 87, 79, 76,
- 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 84, 72, 79, 85, 212, 87,
- 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 74, 65,
- 128, 87, 73, 78, 71, 83, 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87,
- 73, 78, 68, 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78,
- 128, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, 73,
- 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71,
- 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128, 87, 72, 79, 76, 197, 87,
- 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84,
- 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73,
- 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84,
- 128, 87, 72, 65, 76, 69, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85,
- 88, 128, 87, 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 128, 87, 69, 83,
- 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76, 76,
- 128, 87, 69, 73, 71, 72, 212, 87, 69, 69, 78, 128, 87, 69, 68, 71, 69,
- 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 65,
- 82, 217, 87, 69, 65, 80, 79, 78, 128, 87, 67, 128, 87, 66, 128, 87, 65,
- 89, 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, 128, 87, 65,
- 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, 128, 87, 65,
- 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, 69, 83, 128,
- 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84,
- 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, 84, 69, 82,
- 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87,
- 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87,
- 65, 83, 76, 65, 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77,
- 128, 87, 65, 83, 65, 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87,
- 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81,
- 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76,
- 76, 128, 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78,
- 71, 128, 87, 65, 73, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87, 65,
- 65, 86, 85, 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, 65, 128, 87, 48,
- 50, 52, 128, 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, 87, 48, 50, 49,
- 128, 87, 48, 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, 49, 56, 65, 128,
- 87, 48, 49, 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, 49, 55, 128, 87,
- 48, 49, 54, 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, 65, 128, 87, 48,
- 49, 52, 128, 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, 87, 48, 49, 49,
- 128, 87, 48, 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, 48, 48, 57, 65,
- 128, 87, 48, 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, 48, 55, 128, 87,
- 48, 48, 54, 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, 128, 87, 48, 48,
- 51, 65, 128, 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, 87, 48, 48, 49,
- 128, 86, 90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86, 89,
- 82, 88, 128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87, 65,
- 128, 86, 85, 88, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82,
- 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86,
- 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, 88, 128, 86, 79, 87, 69,
- 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, 128, 86, 79, 85, 128,
- 86, 79, 84, 128, 86, 79, 80, 128, 86, 79, 79, 128, 86, 79, 77, 128, 86,
- 79, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, 67, 65, 78,
- 79, 128, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73,
- 67, 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, 73,
- 90, 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 88,
- 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, 76,
- 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, 73,
- 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, 71,
- 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, 71,
- 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, 82,
- 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, 79,
- 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, 69,
- 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, 69,
- 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65,
- 71, 69, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, 73, 78, 199, 86, 73,
- 69, 87, 68, 65, 84, 193, 86, 73, 69, 84, 128, 86, 73, 69, 80, 128, 86,
- 73, 69, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86,
+ 200, 66, 65, 76, 73, 78, 69, 83, 197, 72, 79, 79, 75, 128, 213, 84, 87,
+ 79, 128, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196,
+ 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 73, 195, 79, 78, 69, 128, 84, 79, 128, 65, 76, 69, 198, 84, 87, 207,
+ 72, 69, 65, 86, 217, 67, 79, 78, 83, 79, 78, 65, 78, 212, 79, 86, 69,
+ 210, 66, 82, 65, 72, 77, 201, 83, 67, 82, 73, 80, 212, 85, 208, 76, 79,
+ 215, 72, 65, 200, 79, 78, 197, 68, 79, 87, 206, 72, 73, 71, 200, 70, 85,
+ 76, 76, 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85,
+ 65, 204, 84, 65, 199, 66, 65, 82, 128, 68, 79, 77, 73, 78, 207, 78, 85,
+ 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 84, 72, 82, 69, 197,
+ 67, 72, 65, 82, 65, 67, 84, 69, 210, 77, 65, 76, 65, 89, 65, 76, 65, 205,
+ 80, 72, 65, 83, 69, 45, 195, 84, 79, 78, 197, 68, 79, 85, 66, 76, 69, 45,
+ 83, 84, 82, 85, 67, 203, 76, 69, 70, 84, 87, 65, 82, 68, 211, 72, 73, 82,
+ 65, 71, 65, 78, 193, 65, 67, 85, 84, 69, 128, 74, 85, 78, 71, 83, 69, 79,
+ 78, 199, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 66, 69, 78, 71, 65, 76,
+ 201, 77, 69, 68, 73, 65, 204, 84, 69, 76, 85, 71, 213, 86, 79, 67, 65,
+ 76, 73, 195, 65, 82, 77, 69, 78, 73, 65, 206, 74, 69, 69, 205, 78, 69,
+ 71, 65, 84, 73, 86, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 74, 65, 86,
+ 65, 78, 69, 83, 197, 79, 82, 73, 89, 193, 84, 72, 82, 69, 69, 128, 87,
+ 69, 83, 84, 45, 67, 82, 69, 197, 70, 79, 85, 82, 128, 72, 65, 128, 72,
+ 65, 76, 198, 77, 65, 82, 203, 75, 65, 78, 78, 65, 68, 193, 78, 69, 215,
+ 80, 72, 65, 83, 69, 45, 193, 84, 72, 65, 201, 67, 72, 69, 82, 79, 75, 69,
+ 197, 68, 79, 84, 211, 71, 85, 74, 65, 82, 65, 84, 201, 67, 72, 65, 205,
+ 76, 85, 197, 83, 72, 65, 82, 65, 68, 193, 83, 73, 78, 72, 65, 76, 193,
+ 75, 65, 128, 82, 85, 78, 73, 195, 83, 65, 85, 82, 65, 83, 72, 84, 82,
+ 193, 84, 69, 84, 82, 65, 71, 82, 65, 205, 68, 69, 83, 69, 82, 69, 212,
+ 84, 73, 76, 68, 69, 128, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 128,
+ 77, 65, 89, 69, 203, 77, 69, 69, 84, 69, 201, 78, 79, 84, 65, 84, 73, 79,
+ 206, 83, 89, 82, 73, 65, 195, 70, 73, 86, 69, 128, 80, 65, 128, 89, 65,
+ 128, 76, 73, 71, 72, 212, 83, 73, 88, 128, 69, 73, 71, 72, 84, 128, 76,
+ 69, 80, 67, 72, 193, 78, 65, 128, 83, 69, 86, 69, 78, 128, 76, 79, 78,
+ 199, 78, 73, 78, 69, 128, 84, 85, 82, 75, 73, 195, 72, 65, 77, 90, 193,
+ 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 79, 80, 69, 206, 82, 65, 128,
+ 83, 65, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 86, 73, 69, 212, 76,
+ 65, 207, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88,
+ 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90,
+ 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85,
+ 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128,
+ 90, 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90,
+ 79, 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128,
+ 90, 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80,
+ 128, 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90,
+ 69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128,
+ 90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90,
+ 65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74,
+ 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 65, 82, 65,
+ 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, 128,
+ 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, 85,
+ 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, 128, 90, 82, 65,
+ 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, 79,
+ 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 69,
+ 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 78, 79, 82,
+ 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128,
+ 90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201,
+ 90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90,
+ 72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69,
+ 128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90,
+ 72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72,
+ 85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72,
+ 85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128,
+ 90, 72, 79, 79, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 128,
+ 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 69,
+ 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 65,
+ 88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128,
+ 90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72,
+ 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69,
+ 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90,
+ 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90,
+ 65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65,
+ 128, 90, 65, 82, 81, 65, 128, 90, 65, 81, 69, 198, 90, 65, 77, 88, 128,
+ 90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90,
+ 65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 48,
+ 49, 54, 72, 128, 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90,
+ 48, 49, 54, 69, 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128,
+ 90, 48, 49, 54, 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128,
+ 90, 48, 49, 53, 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71,
+ 128, 90, 48, 49, 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53,
+ 68, 128, 90, 48, 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49,
+ 53, 65, 128, 90, 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51,
+ 128, 90, 48, 49, 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90,
+ 48, 48, 57, 128, 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48,
+ 54, 128, 90, 48, 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52,
+ 65, 128, 90, 48, 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51,
+ 65, 128, 90, 48, 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50,
+ 67, 128, 90, 48, 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48,
+ 50, 128, 90, 48, 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84,
+ 128, 89, 89, 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69,
+ 128, 89, 89, 65, 65, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79,
+ 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69,
+ 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128,
+ 89, 85, 87, 79, 81, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84,
+ 85, 128, 89, 85, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211,
+ 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89,
+ 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80,
+ 128, 89, 85, 79, 77, 128, 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77,
+ 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85,
+ 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89,
+ 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45,
+ 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69,
+ 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213,
+ 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79,
+ 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80,
+ 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79,
+ 88, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, 85,
+ 84, 72, 70, 85, 204, 89, 79, 84, 128, 89, 79, 82, 73, 128, 89, 79, 81,
+ 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, 89, 79, 77, 79, 128,
+ 89, 79, 71, 72, 128, 89, 79, 68, 72, 128, 89, 79, 68, 128, 89, 79, 196,
+ 89, 79, 65, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, 45, 89, 65, 69,
+ 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, 79, 45, 73, 128,
+ 89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, 128, 89, 79, 45, 65, 128,
+ 89, 79, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89, 73,
+ 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128, 89,
+ 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, 69, 84, 128, 89,
+ 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, 128, 89, 73, 68, 68,
+ 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 70, 69, 83, 73, 83,
+ 128, 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89, 69, 89, 128, 89, 69,
+ 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, 128, 89, 69, 85,
+ 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, 128, 89, 69, 85,
+ 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69,
+ 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85,
+ 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78,
+ 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 72,
+ 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85,
+ 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69,
+ 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45,
+ 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69,
+ 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, 69, 78, 128, 89, 69,
+ 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, 79, 215, 89, 69, 72,
+ 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90,
+ 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 65, 78, 78, 65,
+ 128, 89, 65, 89, 128, 89, 65, 87, 128, 89, 65, 86, 128, 89, 65, 85, 128,
+ 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65, 84, 72, 128, 89, 65,
+ 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128, 89, 65, 83, 128, 89,
+ 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65,
+ 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, 89, 65, 78, 71, 128, 89, 65,
+ 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75,
+ 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72,
+ 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128,
+ 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 73,
+ 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65,
+ 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 213,
+ 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, 69, 128, 89, 65, 68, 72, 128,
+ 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65,
+ 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85,
+ 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, 65, 45, 89, 79,
+ 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, 128, 89, 48, 48, 56, 128, 89,
+ 48, 48, 55, 128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48,
+ 52, 128, 89, 48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65,
+ 128, 89, 48, 48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88,
+ 89, 85, 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88,
+ 89, 80, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 128, 88,
+ 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87,
+ 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88,
+ 87, 65, 128, 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, 88,
+ 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65,
+ 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, 128,
+ 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73,
+ 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128,
+ 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73, 128, 88, 71, 128, 88, 69,
+ 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65,
+ 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48,
+ 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48,
+ 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52,
+ 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128,
+ 88, 48, 48, 49, 128, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206,
+ 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, 80, 128,
+ 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, 76, 85,
+ 128, 87, 85, 76, 213, 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85,
+ 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87,
+ 82, 73, 84, 73, 78, 199, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84,
+ 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128,
+ 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75,
+ 128, 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79,
+ 82, 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87,
+ 79, 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78,
+ 128, 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79,
+ 77, 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79,
+ 76, 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128,
+ 87, 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 78, 84,
+ 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 74, 65, 128, 87,
+ 73, 78, 71, 83, 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78,
+ 68, 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87,
+ 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, 73, 68, 69, 45,
+ 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65,
+ 75, 128, 87, 73, 65, 78, 71, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84,
+ 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87,
+ 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72,
+ 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72,
+ 65, 76, 69, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87,
+ 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69,
+ 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69,
+ 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 69,
+ 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 68,
+ 73, 78, 71, 128, 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128, 87,
+ 67, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 87, 65, 88, 73, 78,
+ 199, 87, 65, 88, 128, 87, 65, 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72,
+ 128, 87, 65, 87, 128, 87, 65, 215, 87, 65, 86, 217, 87, 65, 86, 73, 78,
+ 199, 87, 65, 86, 69, 83, 128, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87,
+ 65, 85, 128, 87, 65, 84, 84, 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79,
+ 78, 128, 87, 65, 84, 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67,
+ 72, 128, 87, 65, 84, 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83,
+ 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83, 76,
+ 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65,
+ 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 80, 128, 87, 65, 78, 73, 78,
+ 199, 87, 65, 78, 71, 75, 85, 79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82,
+ 128, 87, 65, 78, 128, 87, 65, 76, 76, 128, 87, 65, 76, 75, 128, 87, 65,
+ 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, 73, 128, 87, 65, 69,
+ 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128,
+ 87, 48, 50, 52, 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87,
+ 48, 50, 50, 128, 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49,
+ 57, 128, 87, 48, 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55,
+ 65, 128, 87, 48, 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128,
+ 87, 48, 49, 52, 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87,
+ 48, 49, 50, 128, 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48,
+ 49, 48, 128, 87, 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48,
+ 56, 128, 87, 48, 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128,
+ 87, 48, 48, 52, 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87,
+ 48, 48, 50, 128, 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89,
+ 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89,
+ 80, 128, 86, 89, 128, 86, 87, 65, 128, 86, 85, 88, 128, 86, 85, 85, 128,
+ 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, 80, 128,
+ 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86, 84, 83, 128, 86, 84,
+ 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128, 86, 83, 57, 55, 128, 86,
+ 83, 57, 54, 128, 86, 83, 57, 53, 128, 86, 83, 57, 52, 128, 86, 83, 57,
+ 51, 128, 86, 83, 57, 50, 128, 86, 83, 57, 49, 128, 86, 83, 57, 48, 128,
+ 86, 83, 57, 128, 86, 83, 56, 57, 128, 86, 83, 56, 56, 128, 86, 83, 56,
+ 55, 128, 86, 83, 56, 54, 128, 86, 83, 56, 53, 128, 86, 83, 56, 52, 128,
+ 86, 83, 56, 51, 128, 86, 83, 56, 50, 128, 86, 83, 56, 49, 128, 86, 83,
+ 56, 48, 128, 86, 83, 56, 128, 86, 83, 55, 57, 128, 86, 83, 55, 56, 128,
+ 86, 83, 55, 55, 128, 86, 83, 55, 54, 128, 86, 83, 55, 53, 128, 86, 83,
+ 55, 52, 128, 86, 83, 55, 51, 128, 86, 83, 55, 50, 128, 86, 83, 55, 49,
+ 128, 86, 83, 55, 48, 128, 86, 83, 55, 128, 86, 83, 54, 57, 128, 86, 83,
+ 54, 56, 128, 86, 83, 54, 55, 128, 86, 83, 54, 54, 128, 86, 83, 54, 53,
+ 128, 86, 83, 54, 52, 128, 86, 83, 54, 51, 128, 86, 83, 54, 50, 128, 86,
+ 83, 54, 49, 128, 86, 83, 54, 48, 128, 86, 83, 54, 128, 86, 83, 53, 57,
+ 128, 86, 83, 53, 56, 128, 86, 83, 53, 55, 128, 86, 83, 53, 54, 128, 86,
+ 83, 53, 53, 128, 86, 83, 53, 52, 128, 86, 83, 53, 51, 128, 86, 83, 53,
+ 50, 128, 86, 83, 53, 49, 128, 86, 83, 53, 48, 128, 86, 83, 53, 128, 86,
+ 83, 52, 57, 128, 86, 83, 52, 56, 128, 86, 83, 52, 55, 128, 86, 83, 52,
+ 54, 128, 86, 83, 52, 53, 128, 86, 83, 52, 52, 128, 86, 83, 52, 51, 128,
+ 86, 83, 52, 50, 128, 86, 83, 52, 49, 128, 86, 83, 52, 48, 128, 86, 83,
+ 52, 128, 86, 83, 51, 57, 128, 86, 83, 51, 56, 128, 86, 83, 51, 55, 128,
+ 86, 83, 51, 54, 128, 86, 83, 51, 53, 128, 86, 83, 51, 52, 128, 86, 83,
+ 51, 51, 128, 86, 83, 51, 50, 128, 86, 83, 51, 49, 128, 86, 83, 51, 48,
+ 128, 86, 83, 51, 128, 86, 83, 50, 57, 128, 86, 83, 50, 56, 128, 86, 83,
+ 50, 55, 128, 86, 83, 50, 54, 128, 86, 83, 50, 53, 54, 128, 86, 83, 50,
+ 53, 53, 128, 86, 83, 50, 53, 52, 128, 86, 83, 50, 53, 51, 128, 86, 83,
+ 50, 53, 50, 128, 86, 83, 50, 53, 49, 128, 86, 83, 50, 53, 48, 128, 86,
+ 83, 50, 53, 128, 86, 83, 50, 52, 57, 128, 86, 83, 50, 52, 56, 128, 86,
+ 83, 50, 52, 55, 128, 86, 83, 50, 52, 54, 128, 86, 83, 50, 52, 53, 128,
+ 86, 83, 50, 52, 52, 128, 86, 83, 50, 52, 51, 128, 86, 83, 50, 52, 50,
+ 128, 86, 83, 50, 52, 49, 128, 86, 83, 50, 52, 48, 128, 86, 83, 50, 52,
+ 128, 86, 83, 50, 51, 57, 128, 86, 83, 50, 51, 56, 128, 86, 83, 50, 51,
+ 55, 128, 86, 83, 50, 51, 54, 128, 86, 83, 50, 51, 53, 128, 86, 83, 50,
+ 51, 52, 128, 86, 83, 50, 51, 51, 128, 86, 83, 50, 51, 50, 128, 86, 83,
+ 50, 51, 49, 128, 86, 83, 50, 51, 48, 128, 86, 83, 50, 51, 128, 86, 83,
+ 50, 50, 57, 128, 86, 83, 50, 50, 56, 128, 86, 83, 50, 50, 55, 128, 86,
+ 83, 50, 50, 54, 128, 86, 83, 50, 50, 53, 128, 86, 83, 50, 50, 52, 128,
+ 86, 83, 50, 50, 51, 128, 86, 83, 50, 50, 50, 128, 86, 83, 50, 50, 49,
+ 128, 86, 83, 50, 50, 48, 128, 86, 83, 50, 50, 128, 86, 83, 50, 49, 57,
+ 128, 86, 83, 50, 49, 56, 128, 86, 83, 50, 49, 55, 128, 86, 83, 50, 49,
+ 54, 128, 86, 83, 50, 49, 53, 128, 86, 83, 50, 49, 52, 128, 86, 83, 50,
+ 49, 51, 128, 86, 83, 50, 49, 50, 128, 86, 83, 50, 49, 49, 128, 86, 83,
+ 50, 49, 48, 128, 86, 83, 50, 49, 128, 86, 83, 50, 48, 57, 128, 86, 83,
+ 50, 48, 56, 128, 86, 83, 50, 48, 55, 128, 86, 83, 50, 48, 54, 128, 86,
+ 83, 50, 48, 53, 128, 86, 83, 50, 48, 52, 128, 86, 83, 50, 48, 51, 128,
+ 86, 83, 50, 48, 50, 128, 86, 83, 50, 48, 49, 128, 86, 83, 50, 48, 48,
+ 128, 86, 83, 50, 48, 128, 86, 83, 50, 128, 86, 83, 49, 57, 57, 128, 86,
+ 83, 49, 57, 56, 128, 86, 83, 49, 57, 55, 128, 86, 83, 49, 57, 54, 128,
+ 86, 83, 49, 57, 53, 128, 86, 83, 49, 57, 52, 128, 86, 83, 49, 57, 51,
+ 128, 86, 83, 49, 57, 50, 128, 86, 83, 49, 57, 49, 128, 86, 83, 49, 57,
+ 48, 128, 86, 83, 49, 57, 128, 86, 83, 49, 56, 57, 128, 86, 83, 49, 56,
+ 56, 128, 86, 83, 49, 56, 55, 128, 86, 83, 49, 56, 54, 128, 86, 83, 49,
+ 56, 53, 128, 86, 83, 49, 56, 52, 128, 86, 83, 49, 56, 51, 128, 86, 83,
+ 49, 56, 50, 128, 86, 83, 49, 56, 49, 128, 86, 83, 49, 56, 48, 128, 86,
+ 83, 49, 56, 128, 86, 83, 49, 55, 57, 128, 86, 83, 49, 55, 56, 128, 86,
+ 83, 49, 55, 55, 128, 86, 83, 49, 55, 54, 128, 86, 83, 49, 55, 53, 128,
+ 86, 83, 49, 55, 52, 128, 86, 83, 49, 55, 51, 128, 86, 83, 49, 55, 50,
+ 128, 86, 83, 49, 55, 49, 128, 86, 83, 49, 55, 48, 128, 86, 83, 49, 55,
+ 128, 86, 83, 49, 54, 57, 128, 86, 83, 49, 54, 56, 128, 86, 83, 49, 54,
+ 55, 128, 86, 83, 49, 54, 54, 128, 86, 83, 49, 54, 53, 128, 86, 83, 49,
+ 54, 52, 128, 86, 83, 49, 54, 51, 128, 86, 83, 49, 54, 50, 128, 86, 83,
+ 49, 54, 49, 128, 86, 83, 49, 54, 48, 128, 86, 83, 49, 54, 128, 86, 83,
+ 49, 53, 57, 128, 86, 83, 49, 53, 56, 128, 86, 83, 49, 53, 55, 128, 86,
+ 83, 49, 53, 54, 128, 86, 83, 49, 53, 53, 128, 86, 83, 49, 53, 52, 128,
+ 86, 83, 49, 53, 51, 128, 86, 83, 49, 53, 50, 128, 86, 83, 49, 53, 49,
+ 128, 86, 83, 49, 53, 48, 128, 86, 83, 49, 53, 128, 86, 83, 49, 52, 57,
+ 128, 86, 83, 49, 52, 56, 128, 86, 83, 49, 52, 55, 128, 86, 83, 49, 52,
+ 54, 128, 86, 83, 49, 52, 53, 128, 86, 83, 49, 52, 52, 128, 86, 83, 49,
+ 52, 51, 128, 86, 83, 49, 52, 50, 128, 86, 83, 49, 52, 49, 128, 86, 83,
+ 49, 52, 48, 128, 86, 83, 49, 52, 128, 86, 83, 49, 51, 57, 128, 86, 83,
+ 49, 51, 56, 128, 86, 83, 49, 51, 55, 128, 86, 83, 49, 51, 54, 128, 86,
+ 83, 49, 51, 53, 128, 86, 83, 49, 51, 52, 128, 86, 83, 49, 51, 51, 128,
+ 86, 83, 49, 51, 50, 128, 86, 83, 49, 51, 49, 128, 86, 83, 49, 51, 48,
+ 128, 86, 83, 49, 51, 128, 86, 83, 49, 50, 57, 128, 86, 83, 49, 50, 56,
+ 128, 86, 83, 49, 50, 55, 128, 86, 83, 49, 50, 54, 128, 86, 83, 49, 50,
+ 53, 128, 86, 83, 49, 50, 52, 128, 86, 83, 49, 50, 51, 128, 86, 83, 49,
+ 50, 50, 128, 86, 83, 49, 50, 49, 128, 86, 83, 49, 50, 48, 128, 86, 83,
+ 49, 50, 128, 86, 83, 49, 49, 57, 128, 86, 83, 49, 49, 56, 128, 86, 83,
+ 49, 49, 55, 128, 86, 83, 49, 49, 54, 128, 86, 83, 49, 49, 53, 128, 86,
+ 83, 49, 49, 52, 128, 86, 83, 49, 49, 51, 128, 86, 83, 49, 49, 50, 128,
+ 86, 83, 49, 49, 49, 128, 86, 83, 49, 49, 48, 128, 86, 83, 49, 49, 128,
+ 86, 83, 49, 48, 57, 128, 86, 83, 49, 48, 56, 128, 86, 83, 49, 48, 55,
+ 128, 86, 83, 49, 48, 54, 128, 86, 83, 49, 48, 53, 128, 86, 83, 49, 48,
+ 52, 128, 86, 83, 49, 48, 51, 128, 86, 83, 49, 48, 50, 128, 86, 83, 49,
+ 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83, 49, 48, 128, 86, 83, 49,
+ 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, 88, 128, 86, 79,
+ 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, 128, 86, 79, 85,
+ 128, 86, 79, 84, 128, 86, 79, 80, 128, 86, 79, 79, 128, 86, 79, 77, 128,
+ 86, 79, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, 67, 65,
+ 78, 79, 128, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79,
+ 73, 67, 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76,
+ 73, 90, 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73,
+ 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79,
+ 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86,
+ 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82,
+ 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82,
+ 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73,
+ 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73,
+ 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78,
+ 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78,
+ 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76,
+ 65, 71, 69, 128, 86, 73, 73, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87,
+ 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, 84, 128, 86,
+ 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 74, 45, 50, 128, 86, 73,
+ 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86,
73, 68, 69, 207, 86, 73, 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86,
- 73, 66, 82, 65, 84, 73, 79, 206, 86, 73, 128, 86, 69, 88, 128, 86, 69,
- 87, 128, 86, 69, 215, 86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69,
- 85, 65, 69, 80, 69, 78, 128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65,
- 128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67,
- 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45,
- 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45,
- 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45,
- 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45,
- 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45,
- 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45,
- 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45,
- 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
- 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45,
- 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128,
- 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82,
- 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67,
- 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197,
- 86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69,
- 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, 69, 72, 73, 67,
- 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197,
- 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65,
- 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 84, 72, 89,
- 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, 83, 73,
- 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, 128, 86, 65, 82,
- 73, 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82, 73, 193, 86, 65,
- 82, 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65, 80, 79, 85, 82, 83,
- 128, 86, 65, 80, 128, 86, 65, 78, 69, 128, 86, 65, 77, 65, 71, 79, 77,
- 85, 75, 72, 65, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86, 65,
- 76, 76, 69, 89, 128, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48,
+ 73, 66, 82, 65, 84, 73, 79, 206, 86, 73, 128, 86, 70, 65, 128, 86, 69,
+ 88, 128, 86, 69, 87, 128, 86, 69, 215, 86, 69, 85, 88, 128, 86, 69, 85,
+ 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, 128, 86, 69, 85, 65, 69, 128,
+ 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86,
+ 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76,
+ 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48,
+ 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48,
+ 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48,
+ 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48,
+ 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48,
+ 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48,
+ 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48,
+ 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84,
+ 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65,
+ 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48,
+ 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48,
+ 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86,
+ 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86,
+ 69, 82, 83, 197, 86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73,
+ 83, 128, 86, 69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86,
+ 69, 72, 73, 67, 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69,
+ 128, 86, 69, 197, 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65,
+ 89, 65, 78, 78, 65, 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214,
+ 86, 65, 85, 128, 86, 65, 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83,
+ 84, 78, 69, 83, 211, 86, 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86,
+ 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 212, 86, 65, 82, 73, 65,
+ 128, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, 86, 65, 82, 69,
+ 73, 193, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, 128, 86, 65, 78,
+ 69, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 65, 128, 86, 65, 77, 65,
+ 71, 79, 77, 85, 75, 72, 193, 86, 65, 76, 76, 69, 89, 128, 86, 65, 73,
+ 128, 86, 65, 72, 128, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48,
52, 48, 65, 128, 86, 48, 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51,
56, 128, 86, 48, 51, 55, 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54,
128, 86, 48, 51, 53, 128, 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128,
@@ -365,15 +456,16 @@ static unsigned char lexicon[] = {
85, 85, 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, 85, 83,
83, 85, 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, 83, 72,
85, 77, 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, 128,
- 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 85, 82,
- 85, 218, 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68,
- 193, 85, 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69,
- 128, 85, 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128,
- 85, 82, 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80,
- 87, 65, 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 211, 85, 80, 87, 65, 82,
- 68, 128, 85, 80, 87, 65, 82, 196, 85, 80, 84, 85, 82, 78, 128, 85, 80,
- 83, 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71,
- 72, 212, 85, 80, 80, 69, 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65,
+ 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, 128,
+ 85, 83, 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, 218,
+ 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, 85,
+ 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, 85,
+ 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82,
+ 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65,
+ 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 211, 85, 80, 87, 65, 82, 68,
+ 128, 85, 80, 87, 65, 82, 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83,
+ 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72,
+ 212, 85, 80, 80, 69, 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65,
128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85,
78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, 196, 85, 78, 75, 78, 79, 87,
78, 128, 85, 78, 73, 86, 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128,
@@ -388,100 +480,104 @@ static unsigned char lexicon[] = {
128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65,
82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65,
78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, 73, 195,
- 85, 69, 89, 128, 85, 69, 69, 128, 85, 69, 65, 128, 85, 68, 85, 71, 128,
- 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84, 193, 85, 68, 65, 65, 84,
- 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, 128,
- 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66,
- 128, 85, 65, 84, 72, 128, 85, 65, 128, 85, 178, 85, 48, 52, 50, 128, 85,
- 48, 52, 49, 128, 85, 48, 52, 48, 128, 85, 48, 51, 57, 128, 85, 48, 51,
- 56, 128, 85, 48, 51, 55, 128, 85, 48, 51, 54, 128, 85, 48, 51, 53, 128,
- 85, 48, 51, 52, 128, 85, 48, 51, 51, 128, 85, 48, 51, 50, 65, 128, 85,
- 48, 51, 50, 128, 85, 48, 51, 49, 128, 85, 48, 51, 48, 128, 85, 48, 50,
- 57, 65, 128, 85, 48, 50, 57, 128, 85, 48, 50, 56, 128, 85, 48, 50, 55,
- 128, 85, 48, 50, 54, 128, 85, 48, 50, 53, 128, 85, 48, 50, 52, 128, 85,
- 48, 50, 51, 65, 128, 85, 48, 50, 51, 128, 85, 48, 50, 50, 128, 85, 48,
- 50, 49, 128, 85, 48, 50, 48, 128, 85, 48, 49, 57, 128, 85, 48, 49, 56,
- 128, 85, 48, 49, 55, 128, 85, 48, 49, 54, 128, 85, 48, 49, 53, 128, 85,
- 48, 49, 52, 128, 85, 48, 49, 51, 128, 85, 48, 49, 50, 128, 85, 48, 49,
- 49, 128, 85, 48, 49, 48, 128, 85, 48, 48, 57, 128, 85, 48, 48, 56, 128,
- 85, 48, 48, 55, 128, 85, 48, 48, 54, 66, 128, 85, 48, 48, 54, 65, 128,
- 85, 48, 48, 54, 128, 85, 48, 48, 53, 128, 85, 48, 48, 52, 128, 85, 48,
- 48, 51, 128, 85, 48, 48, 50, 128, 85, 48, 48, 49, 128, 85, 45, 73, 45,
- 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 84, 90, 85, 128, 84, 90, 79,
- 65, 128, 84, 90, 79, 128, 84, 90, 73, 210, 84, 90, 73, 128, 84, 90, 69,
- 69, 128, 84, 90, 69, 128, 84, 90, 65, 65, 128, 84, 90, 65, 128, 84, 90,
- 128, 84, 89, 210, 84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 182, 84,
- 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, 179,
- 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, 84,
- 89, 79, 128, 84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 128, 84, 87,
- 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84, 87, 79, 45, 84, 72, 73, 82,
- 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65,
- 68, 69, 196, 84, 87, 73, 83, 84, 69, 196, 84, 87, 73, 73, 128, 84, 87,
- 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 84, 87, 69, 78, 84,
- 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, 45, 83, 73, 88,
- 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, 84, 87, 69, 78,
- 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 78, 73, 78, 69,
- 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, 87, 69, 78, 84,
- 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72,
- 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, 87, 69,
- 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 76, 86, 69, 45, 84,
- 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, 76, 86,
- 197, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, 86, 82,
- 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, 128, 84,
- 85, 85, 77, 85, 128, 84, 85, 84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83,
- 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 128, 84, 85, 82, 85, 128,
- 84, 85, 82, 84, 76, 69, 128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83,
- 84, 73, 76, 69, 128, 84, 85, 82, 78, 69, 196, 84, 85, 82, 206, 84, 85,
- 82, 66, 65, 78, 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88,
- 128, 84, 85, 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85,
- 78, 78, 89, 128, 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69,
- 128, 84, 85, 77, 128, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78,
- 84, 73, 83, 128, 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71,
- 50, 128, 84, 85, 71, 178, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80,
- 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 68, 68, 65, 71, 128, 84,
- 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65,
+ 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, 128, 85,
+ 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84, 193,
+ 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85,
+ 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, 68, 65,
+ 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, 128, 85,
+ 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, 48, 52,
+ 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, 55, 128,
+ 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, 85, 48,
+ 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, 48, 51,
+ 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, 50, 57,
+ 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, 128, 85,
+ 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, 85, 48,
+ 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, 50, 48,
+ 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, 128, 85,
+ 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, 48, 49,
+ 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, 48, 128,
+ 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, 85, 48,
+ 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, 85, 48,
+ 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, 48, 50,
+ 128, 85, 48, 48, 49, 128, 85, 45, 73, 45, 73, 128, 85, 45, 69, 79, 45,
+ 69, 85, 128, 85, 45, 66, 82, 74, 71, 85, 128, 84, 90, 85, 128, 84, 90,
+ 79, 65, 128, 84, 90, 79, 128, 84, 90, 73, 210, 84, 90, 73, 128, 84, 90,
+ 69, 69, 128, 84, 90, 69, 128, 84, 90, 65, 65, 128, 84, 90, 65, 128, 84,
+ 90, 128, 84, 89, 210, 84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 182,
+ 84, 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45,
+ 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197,
+ 84, 89, 79, 128, 84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 128, 84,
+ 87, 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84, 87, 79, 45, 84, 72, 73,
+ 82, 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69,
+ 65, 68, 69, 196, 84, 87, 79, 45, 69, 205, 84, 87, 73, 83, 84, 69, 196,
+ 84, 87, 73, 73, 128, 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87,
+ 79, 128, 84, 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69,
+ 78, 84, 89, 45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86,
+ 69, 78, 128, 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78,
+ 84, 89, 45, 78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85,
+ 82, 128, 84, 87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78,
+ 84, 89, 45, 69, 73, 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73,
+ 71, 72, 84, 128, 84, 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217,
+ 84, 87, 69, 76, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76,
+ 86, 69, 128, 84, 87, 69, 76, 86, 197, 84, 87, 69, 128, 84, 87, 65, 65,
+ 128, 84, 87, 65, 128, 84, 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65,
+ 68, 85, 210, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128,
+ 84, 85, 84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85,
+ 84, 128, 84, 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76,
+ 69, 128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69,
+ 128, 84, 85, 82, 78, 69, 196, 84, 85, 82, 206, 84, 85, 82, 66, 65, 78,
+ 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79,
+ 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128,
+ 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69, 128, 84, 85, 77,
+ 128, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128,
+ 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85,
+ 71, 178, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80, 128, 84, 85, 65,
+ 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, 68, 68, 65, 71, 128,
+ 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65,
128, 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, 84, 84, 83, 79, 128, 84,
84, 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, 83, 69, 128, 84, 84,
- 83, 65, 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85,
- 128, 84, 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128,
- 84, 84, 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128,
- 84, 84, 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200,
- 84, 84, 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65,
- 89, 65, 78, 78, 65, 128, 84, 84, 65, 65, 128, 84, 84, 50, 128, 84, 83,
- 87, 69, 128, 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, 128,
- 84, 83, 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79,
- 79, 203, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72,
- 69, 199, 84, 83, 72, 69, 128, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69,
- 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 65, 68,
- 73, 89, 128, 84, 83, 65, 65, 128, 84, 83, 193, 84, 82, 89, 66, 76, 73,
- 79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, 75, 128, 84, 82, 85,
- 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, 128, 84, 82, 85, 69,
- 128, 84, 82, 85, 67, 75, 128, 84, 82, 79, 80, 73, 67, 65, 204, 84, 82,
- 79, 80, 72, 89, 128, 84, 82, 79, 77, 73, 75, 79, 83, 89, 78, 65, 71, 77,
- 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, 70, 73, 83, 84, 79, 78,
- 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77,
- 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79,
- 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, 84, 82,
- 79, 76, 76, 69, 89, 66, 85, 83, 128, 84, 82, 79, 75, 85, 84, 65, 83, 84,
- 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 85, 77, 80, 72,
- 128, 84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78,
- 128, 84, 82, 73, 83, 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69,
- 128, 84, 82, 73, 80, 79, 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82,
- 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 73, 83, 65, 80, 128,
- 84, 82, 73, 71, 82, 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84,
- 82, 73, 71, 79, 82, 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83,
- 128, 84, 82, 73, 70, 79, 76, 73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84,
- 128, 84, 82, 73, 68, 69, 78, 212, 84, 82, 73, 67, 79, 76, 79, 78, 128,
- 84, 82, 73, 65, 78, 71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69,
- 45, 82, 79, 85, 78, 196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65,
- 68, 69, 196, 84, 82, 73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71,
- 76, 197, 84, 82, 73, 65, 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76,
- 76, 79, 128, 84, 82, 69, 78, 68, 128, 84, 82, 69, 78, 196, 84, 82, 69,
- 77, 79, 76, 79, 45, 51, 128, 84, 82, 69, 77, 79, 76, 79, 45, 50, 128, 84,
- 82, 69, 77, 79, 76, 79, 45, 49, 128, 84, 82, 69, 69, 128, 84, 82, 69,
- 197, 84, 82, 69, 65, 68, 73, 78, 71, 128, 84, 82, 65, 89, 128, 84, 82,
- 65, 80, 69, 90, 73, 85, 77, 128, 84, 82, 65, 78, 83, 86, 69, 82, 83, 65,
- 204, 84, 82, 65, 78, 83, 80, 79, 83, 73, 84, 73, 79, 206, 84, 82, 65, 78,
+ 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, 73, 128, 84, 84, 73, 128,
+ 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, 84, 84, 72, 79, 79, 128,
+ 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 69, 128, 84,
+ 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, 84, 72, 128, 84, 84, 69,
+ 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, 69, 72, 128, 84, 84,
+ 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84,
+ 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, 65, 65, 128, 84, 84, 50,
+ 128, 84, 83, 87, 69, 128, 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83,
+ 83, 69, 128, 84, 83, 83, 65, 128, 84, 83, 72, 85, 71, 83, 128, 84, 83,
+ 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, 69, 83, 128,
+ 84, 83, 72, 69, 71, 128, 84, 83, 72, 69, 199, 84, 83, 72, 69, 128, 84,
+ 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, 65, 68, 73, 128, 84,
+ 83, 65, 68, 201, 84, 83, 65, 65, 68, 73, 89, 128, 84, 83, 65, 65, 128,
+ 84, 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128,
+ 84, 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85,
+ 77, 80, 69, 84, 128, 84, 82, 85, 69, 128, 84, 82, 85, 67, 75, 128, 84,
+ 82, 79, 80, 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77,
+ 73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79,
+ 80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80,
+ 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79,
+ 78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76,
+ 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128,
+ 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73,
+ 65, 206, 84, 82, 73, 85, 77, 80, 72, 128, 84, 82, 73, 84, 79, 211, 84,
+ 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, 73, 77, 79,
+ 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, 82, 73, 80, 79, 68, 128,
+ 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, 197, 84, 82, 73, 79,
+ 206, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, 82, 65, 77, 77, 79,
+ 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, 82, 71, 79, 78,
+ 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 70, 79, 76, 73,
+ 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, 68, 69, 78,
+ 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, 71, 85, 76,
+ 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, 196, 84, 82,
+ 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, 73, 65, 78,
+ 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, 65, 128,
+ 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, 69, 78, 68,
+ 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84,
+ 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49,
+ 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, 73, 78,
+ 71, 128, 84, 82, 65, 89, 128, 84, 82, 65, 80, 69, 90, 73, 85, 77, 128,
+ 84, 82, 65, 78, 83, 86, 69, 82, 83, 65, 204, 84, 82, 65, 78, 83, 80, 79,
+ 83, 73, 84, 73, 79, 206, 84, 82, 65, 78, 83, 77, 73, 212, 84, 82, 65, 78,
83, 77, 73, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83,
73, 79, 206, 84, 82, 65, 77, 87, 65, 89, 128, 84, 82, 65, 77, 128, 84,
82, 65, 205, 84, 82, 65, 73, 78, 128, 84, 82, 65, 73, 206, 84, 82, 65,
@@ -493,16 +589,17 @@ static unsigned char lexicon[] = {
79, 82, 67, 85, 76, 85, 211, 84, 79, 82, 67, 72, 128, 84, 79, 81, 128,
84, 79, 80, 66, 65, 82, 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, 69, 196,
84, 79, 80, 128, 84, 79, 208, 84, 79, 79, 84, 72, 128, 84, 79, 79, 78,
- 128, 84, 79, 79, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69,
- 128, 84, 79, 78, 71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, 69, 45,
- 54, 128, 84, 79, 78, 69, 45, 53, 128, 84, 79, 78, 69, 45, 52, 128, 84,
- 79, 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 45,
- 49, 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204, 84, 79, 77, 80, 73,
- 128, 84, 79, 77, 65, 84, 79, 128, 84, 79, 76, 79, 78, 71, 128, 84, 79,
- 75, 89, 207, 84, 79, 73, 76, 69, 84, 128, 84, 79, 71, 69, 84, 72, 69, 82,
- 128, 84, 79, 68, 207, 84, 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128,
- 84, 79, 65, 128, 84, 78, 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76,
- 79, 128, 84, 76, 73, 128, 84, 76, 72, 87, 69, 128, 84, 76, 72, 85, 128,
+ 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, 78,
+ 71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, 69, 45, 56, 128, 84, 79,
+ 78, 69, 45, 55, 128, 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, 45, 53,
+ 128, 84, 79, 78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79,
+ 78, 69, 45, 50, 128, 84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, 128,
+ 84, 79, 78, 65, 204, 84, 79, 77, 80, 73, 128, 84, 79, 77, 65, 84, 79,
+ 128, 84, 79, 76, 79, 78, 71, 128, 84, 79, 75, 89, 207, 84, 79, 73, 76,
+ 69, 84, 128, 84, 79, 71, 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84,
+ 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128, 84, 79, 65, 128, 84, 78,
+ 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76, 79, 128, 84, 76, 73, 128,
+ 84, 76, 72, 89, 65, 128, 84, 76, 72, 87, 69, 128, 84, 76, 72, 85, 128,
84, 76, 72, 79, 79, 128, 84, 76, 72, 79, 128, 84, 76, 72, 73, 128, 84,
76, 72, 69, 69, 128, 84, 76, 72, 69, 128, 84, 76, 72, 65, 128, 84, 76,
69, 69, 128, 84, 76, 65, 128, 84, 74, 69, 128, 84, 73, 88, 128, 84, 73,
@@ -513,121 +610,123 @@ static unsigned char lexicon[] = {
84, 73, 80, 69, 72, 65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78,
89, 128, 84, 73, 78, 217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84,
85, 82, 69, 128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83,
- 128, 84, 73, 77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 68, 69, 128,
- 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73, 204, 84, 73, 75, 69, 85,
- 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73, 75, 69, 85, 84, 45, 83,
- 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45,
- 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, 128,
- 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 84, 73, 75, 69, 85,
- 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89,
- 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67, 73, 69, 85, 67, 128, 84,
- 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67, 72, 128, 84, 73, 75, 69,
- 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, 72,
- 84, 76, 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84, 73, 71,
- 69, 82, 128, 84, 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71, 200, 84,
- 73, 69, 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 69,
- 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203, 84, 73, 65, 82, 65, 128,
- 84, 72, 90, 128, 84, 72, 89, 79, 79, 205, 84, 72, 87, 79, 79, 128, 84,
- 72, 87, 79, 128, 84, 72, 87, 73, 73, 128, 84, 72, 87, 73, 128, 84, 72,
- 87, 69, 69, 128, 84, 72, 87, 65, 65, 128, 84, 72, 87, 65, 128, 84, 72,
- 85, 82, 211, 84, 72, 85, 82, 73, 83, 65, 218, 84, 72, 85, 78, 71, 128,
- 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, 82, 77, 128, 84, 72, 85, 78, 68,
- 69, 82, 128, 84, 72, 85, 78, 68, 69, 210, 84, 72, 85, 77, 66, 211, 84,
- 72, 82, 79, 87, 73, 78, 199, 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82,
- 79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84,
- 72, 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76,
- 73, 78, 197, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128,
- 84, 72, 79, 85, 83, 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78, 68, 128,
- 84, 72, 79, 85, 83, 65, 78, 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79,
- 85, 128, 84, 72, 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78,
- 71, 128, 84, 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128,
- 84, 72, 73, 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78,
- 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84,
- 217, 84, 72, 73, 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69,
- 206, 84, 72, 73, 82, 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73,
- 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 206, 84, 72, 73, 73, 128,
- 84, 72, 73, 71, 72, 128, 84, 72, 73, 69, 85, 84, 200, 84, 72, 69, 89,
- 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, 84, 72, 69,
- 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, 206, 84,
- 72, 69, 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, 211, 84, 72, 69,
- 211, 84, 72, 69, 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72, 69,
- 82, 69, 70, 79, 82, 69, 128, 84, 72, 69, 82, 197, 84, 72, 69, 206, 84,
- 72, 69, 77, 65, 84, 73, 83, 77, 79, 211, 84, 72, 69, 77, 65, 128, 84, 72,
- 69, 77, 193, 84, 72, 69, 72, 128, 84, 72, 69, 200, 84, 72, 197, 84, 72,
- 65, 87, 128, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, 65,
- 78, 78, 65, 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, 65, 76,
- 128, 84, 72, 65, 204, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78,
- 193, 84, 72, 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69,
- 88, 84, 128, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, 85, 84,
- 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, 78, 128, 84, 69, 85, 84,
- 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, 81, 128, 84, 69, 85, 65,
- 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, 85,
- 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, 76,
- 73, 128, 84, 69, 84, 82, 65, 70, 79, 78, 73, 65, 83, 128, 84, 69, 84, 72,
- 128, 84, 69, 84, 200, 84, 69, 84, 65, 82, 84, 79, 211, 84, 69, 84, 65,
- 82, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 69, 84, 128, 84, 69, 212,
- 84, 69, 83, 83, 69, 82, 65, 128, 84, 69, 83, 83, 69, 82, 193, 84, 69, 83,
- 83, 65, 82, 79, 206, 84, 69, 83, 200, 84, 69, 82, 77, 73, 78, 65, 84, 79,
- 82, 128, 84, 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69, 78, 85,
- 128, 84, 69, 78, 213, 84, 69, 78, 84, 72, 128, 84, 69, 78, 84, 128, 84,
- 69, 78, 211, 84, 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78,
- 45, 84, 72, 73, 82, 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69,
- 77, 80, 85, 211, 84, 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69,
- 76, 76, 69, 210, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83,
- 73, 79, 78, 128, 84, 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69,
- 80, 72, 79, 78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76,
- 69, 73, 65, 128, 84, 69, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84,
- 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 84, 69,
- 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196,
- 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, 84, 69,
- 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65, 82, 45,
- 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, 128, 84, 67, 72,
- 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, 200, 84, 67, 72, 69, 72,
- 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128, 84, 195, 84, 65, 89, 128,
- 84, 65, 88, 73, 128, 84, 65, 88, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69,
- 212, 84, 65, 87, 65, 128, 84, 65, 87, 128, 84, 65, 86, 73, 89, 65, 78,
- 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84,
- 65, 85, 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84,
- 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 128, 84,
- 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128, 84, 65, 82,
- 84, 65, 82, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128, 84, 65, 80,
- 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69, 196, 84, 65,
- 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 199, 84, 65, 78, 65, 66, 65,
- 84, 193, 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, 77, 128,
- 84, 65, 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, 128, 84,
- 65, 76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78,
- 212, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, 69, 128, 84,
- 65, 75, 52, 128, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, 84,
- 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, 84,
- 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, 84, 65, 71,
- 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84, 65, 67, 75, 128,
- 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, 84, 65, 66,
- 83, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65,
- 65, 83, 72, 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128, 84,
- 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128, 84,
- 65, 50, 128, 84, 65, 45, 82, 79, 76, 128, 84, 48, 51, 54, 128, 84, 48,
- 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51, 51, 65, 128, 84, 48, 51,
- 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51, 50, 128, 84, 48, 51, 49,
- 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128, 84, 48, 50, 56, 128, 84,
- 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48, 50, 53, 128, 84, 48, 50,
- 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50, 128, 84, 48, 50, 49, 128,
- 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84, 48, 49, 56, 128, 84, 48,
- 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48, 49, 54, 128, 84, 48, 49,
- 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51, 128, 84, 48, 49, 50, 128,
- 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128, 84, 48, 49, 48, 128, 84,
- 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84, 48, 48, 56, 65, 128, 84,
- 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84, 48, 48, 55, 128, 84, 48,
- 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48, 52, 128, 84, 48, 48, 51,
- 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50, 128, 84, 48, 48, 49, 128,
- 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90, 128, 83, 90, 87, 71, 128,
- 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, 73, 128,
- 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, 90, 65,
- 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 82, 88, 128,
- 83, 89, 82, 77, 65, 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89,
- 82, 73, 78, 71, 69, 128, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79,
- 85, 87, 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83,
- 77, 79, 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65,
- 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, 77, 77, 69, 84, 82, 89,
+ 128, 84, 73, 77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 68, 197, 84,
+ 73, 76, 128, 84, 73, 204, 84, 73, 75, 69, 85, 84, 45, 84, 72, 73, 69, 85,
+ 84, 72, 128, 84, 73, 75, 69, 85, 84, 45, 83, 73, 79, 83, 45, 75, 73, 89,
+ 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 83, 73, 79, 83, 128, 84, 73,
+ 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, 128, 84, 73, 75, 69, 85, 84, 45,
+ 80, 73, 69, 85, 80, 128, 84, 73, 75, 69, 85, 84, 45, 77, 73, 69, 85, 77,
+ 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75,
+ 69, 85, 84, 45, 67, 73, 69, 85, 67, 128, 84, 73, 75, 69, 85, 84, 45, 67,
+ 72, 73, 69, 85, 67, 72, 128, 84, 73, 75, 69, 85, 84, 128, 84, 73, 75, 69,
+ 85, 212, 84, 73, 71, 72, 84, 76, 89, 45, 67, 76, 79, 83, 69, 196, 84, 73,
+ 71, 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 71, 69, 210, 84, 73, 70,
+ 73, 78, 65, 71, 200, 84, 73, 69, 88, 128, 84, 73, 69, 80, 128, 84, 73,
+ 197, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203,
+ 84, 73, 65, 82, 65, 128, 84, 72, 90, 128, 84, 72, 89, 79, 79, 205, 84,
+ 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84, 72, 87, 73, 73, 128, 84,
+ 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84, 72, 87, 65, 65, 128, 84,
+ 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, 73, 83, 65, 218,
+ 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, 82, 77,
+ 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 78, 68, 69, 210, 84,
+ 72, 85, 77, 66, 211, 84, 72, 82, 79, 87, 73, 78, 199, 84, 72, 82, 79, 85,
+ 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 84, 72,
+ 73, 82, 84, 89, 128, 84, 72, 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84,
+ 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, 45, 69, 205, 84,
+ 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83,
+ 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83,
+ 65, 78, 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84, 72,
+ 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84, 72,
+ 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, 84,
+ 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, 73,
+ 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, 82,
+ 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, 68,
+ 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 128, 84, 72, 73,
+ 82, 196, 84, 72, 73, 206, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128,
+ 84, 72, 73, 69, 85, 84, 200, 84, 72, 69, 89, 128, 84, 72, 69, 84, 72, 69,
+ 128, 84, 72, 69, 84, 72, 128, 84, 72, 69, 84, 65, 128, 84, 72, 69, 84,
+ 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, 128,
+ 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, 79, 68,
+ 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84,
+ 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, 83, 77, 79,
+ 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, 84, 72, 69, 72, 128,
+ 84, 72, 69, 200, 84, 72, 197, 84, 72, 65, 87, 128, 84, 72, 65, 78, 84,
+ 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 65, 78,
+ 128, 84, 72, 65, 206, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, 65,
+ 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, 72, 65, 65, 76, 85, 128,
+ 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, 128, 84, 69, 88, 128, 84,
+ 69, 86, 73, 82, 128, 84, 69, 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69,
+ 85, 87, 69, 78, 128, 84, 69, 85, 84, 128, 84, 69, 85, 78, 128, 84, 69,
+ 85, 65, 69, 81, 128, 84, 69, 85, 65, 69, 78, 128, 84, 69, 85, 128, 84,
+ 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77,
+ 69, 128, 84, 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 70, 79,
+ 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84,
+ 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78,
+ 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84,
+ 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83,
+ 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84,
+ 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, 78, 213, 84, 69,
+ 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 211, 84, 69, 78, 78,
+ 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73, 82, 84, 89,
+ 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, 76,
+ 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69, 210, 84, 69, 76,
+ 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78, 128, 84, 69, 76,
+ 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 69, 128, 84,
+ 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, 84, 69, 76,
+ 69, 71, 82, 65, 80, 200, 84, 69, 73, 87, 83, 128, 84, 69, 71, 69, 72,
+ 128, 84, 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128,
+ 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75,
+ 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196,
+ 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65,
+ 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, 128, 84,
+ 69, 45, 50, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69,
+ 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128,
+ 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, 128, 84, 65,
+ 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, 65, 87, 128,
+ 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128, 84, 65, 214, 84,
+ 65, 85, 82, 85, 83, 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128,
+ 84, 65, 84, 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84,
+ 128, 84, 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128,
+ 84, 65, 82, 84, 65, 82, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128,
+ 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69,
+ 196, 84, 65, 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 199, 84, 65,
+ 78, 65, 66, 65, 84, 193, 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128,
+ 84, 65, 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73,
+ 78, 71, 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128,
+ 84, 65, 76, 69, 78, 212, 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76,
+ 85, 83, 128, 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 128,
+ 84, 65, 73, 83, 89, 79, 85, 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65,
+ 73, 76, 128, 84, 65, 73, 204, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71,
+ 66, 65, 78, 87, 193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84,
+ 65, 69, 206, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76,
+ 65, 84, 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65,
+ 66, 83, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84,
+ 65, 65, 83, 72, 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128,
+ 84, 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128,
+ 84, 65, 50, 128, 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, 50, 128, 84,
+ 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51,
+ 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51,
+ 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128,
+ 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48,
+ 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50,
+ 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84,
+ 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48,
+ 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51,
+ 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128,
+ 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84,
+ 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84,
+ 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48,
+ 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50,
+ 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90,
+ 128, 83, 90, 87, 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90,
+ 79, 128, 83, 90, 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90,
+ 65, 65, 128, 83, 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84,
+ 128, 83, 89, 83, 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65,
+ 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69,
+ 128, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128, 83,
+ 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83, 89,
+ 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 77, 193, 83, 89,
+ 78, 65, 70, 73, 128, 83, 89, 78, 128, 83, 89, 77, 77, 69, 84, 82, 89,
128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, 77, 66, 79, 76, 83,
128, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, 56,
128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 54,
@@ -654,223 +753,228 @@ static unsigned char lexicon[] = {
66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83,
89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49,
128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, 45,
- 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 65, 128, 83, 89, 128, 83, 87,
- 90, 128, 83, 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79,
- 82, 68, 128, 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204,
- 83, 87, 73, 77, 77, 73, 78, 71, 128, 83, 87, 73, 77, 77, 69, 82, 128, 83,
- 87, 73, 73, 128, 83, 87, 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84,
- 128, 83, 87, 69, 69, 212, 83, 87, 69, 65, 84, 128, 83, 87, 69, 65, 212,
- 83, 87, 65, 83, 200, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65,
- 128, 83, 87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65,
- 128, 83, 86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83,
- 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 83, 72, 73,
- 128, 83, 85, 82, 88, 128, 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 85,
- 82, 82, 79, 85, 78, 196, 83, 85, 82, 70, 69, 82, 128, 83, 85, 82, 70, 65,
- 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 65, 78, 71, 128, 83, 85, 82,
- 57, 128, 83, 85, 82, 128, 83, 85, 210, 83, 85, 80, 82, 65, 76, 73, 78,
- 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, 83, 69, 128, 83, 85, 80, 69, 82,
- 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83, 85, 80, 69, 82, 83,
- 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80, 79, 83, 69, 196, 83,
- 85, 80, 69, 82, 70, 73, 88, 69, 196, 83, 85, 80, 69, 210, 83, 85, 80,
- 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85,
- 78, 83, 69, 212, 83, 85, 78, 82, 73, 83, 69, 128, 83, 85, 78, 82, 73, 83,
- 197, 83, 85, 78, 71, 76, 65, 83, 83, 69, 83, 128, 83, 85, 78, 71, 128,
- 83, 85, 78, 70, 76, 79, 87, 69, 82, 128, 83, 85, 78, 68, 65, 78, 69, 83,
- 197, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, 69, 82, 128, 83, 85,
- 77, 77, 65, 84, 73, 79, 78, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83,
- 85, 77, 65, 83, 72, 128, 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128,
- 83, 85, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83,
- 85, 75, 213, 83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128,
- 83, 85, 72, 85, 82, 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85,
- 68, 128, 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68,
- 211, 83, 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83,
- 85, 66, 85, 78, 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79,
- 206, 83, 85, 66, 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73,
- 84, 85, 84, 197, 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212,
- 83, 85, 66, 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73,
- 83, 128, 83, 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65,
- 84, 73, 79, 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83,
- 85, 66, 76, 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65,
- 84, 69, 128, 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73,
- 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79,
- 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85,
- 208, 83, 85, 65, 69, 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69,
- 128, 83, 85, 65, 128, 83, 213, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89,
- 128, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 82, 79, 75, 69, 83,
- 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128,
- 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128,
- 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128,
- 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128,
- 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49,
- 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45,
- 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84,
- 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 68, 69,
- 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69,
- 196, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 84, 72, 128, 83,
- 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, 69, 82, 82, 89,
- 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77,
- 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83,
- 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69,
- 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70,
- 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86,
- 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72,
- 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69,
- 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83,
- 84, 79, 67, 75, 128, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204,
- 83, 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 80, 128,
- 83, 84, 69, 77, 128, 83, 84, 69, 205, 83, 84, 69, 65, 77, 73, 78, 199,
- 83, 84, 69, 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85,
- 128, 83, 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83,
- 84, 65, 85, 82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73,
- 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 82, 212, 83,
- 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, 84, 65, 82, 75,
- 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, 78, 68, 83, 84,
- 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, 68,
- 128, 83, 84, 65, 78, 128, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84,
- 65, 70, 70, 128, 83, 84, 65, 70, 198, 83, 84, 65, 67, 67, 65, 84, 79,
- 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50,
- 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128,
- 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85,
- 88, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, 79, 88, 128,
- 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 128, 83, 83, 73,
- 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, 73, 69, 88,
- 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, 83,
- 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69,
- 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128,
- 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83,
- 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83,
- 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72,
- 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73,
- 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69,
- 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79,
- 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82,
- 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71,
- 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83,
- 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69,
- 85, 77, 128, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65,
- 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, 73, 69, 85, 72,
- 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, 69, 85, 72, 128,
- 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, 78, 71, 65, 82,
- 65, 69, 65, 128, 83, 83, 65, 65, 128, 83, 83, 65, 128, 83, 82, 128, 83,
- 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, 71,
- 71, 76, 197, 83, 81, 85, 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83,
- 81, 85, 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 87, 65,
- 128, 83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, 83, 80, 82,
- 73, 78, 71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, 69, 67, 72,
- 71, 69, 83, 65, 78, 199, 83, 80, 79, 85, 84, 73, 78, 199, 83, 80, 79, 84,
- 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83,
- 80, 76, 65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80,
- 73, 82, 73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84,
- 128, 83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73,
- 68, 69, 82, 217, 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65,
- 204, 83, 80, 69, 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84,
- 128, 83, 80, 69, 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69,
- 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 69, 82,
- 128, 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69,
- 86, 73, 204, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 73, 78,
- 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, 82, 75, 76, 69, 82,
- 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, 72, 69, 84, 84, 73,
- 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, 197, 83, 80, 65, 67,
- 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 128, 83, 79, 89, 128, 83, 79,
- 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 83,
- 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 79,
- 85, 82, 67, 69, 128, 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83,
- 79, 85, 78, 65, 80, 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 81,
- 128, 83, 79, 79, 206, 83, 79, 79, 128, 83, 79, 78, 74, 65, 77, 128, 83,
- 79, 78, 71, 128, 83, 79, 78, 128, 83, 79, 77, 128, 83, 79, 76, 73, 68,
- 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 83, 79, 71, 68, 73, 65, 206,
- 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, 83,
- 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79,
- 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128,
- 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79,
- 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87,
- 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 85, 84,
- 128, 83, 78, 79, 85, 212, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, 83,
- 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, 75,
- 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78,
- 199, 83, 77, 73, 76, 69, 128, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83,
- 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85,
- 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 215, 83, 76, 79, 86,
- 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80,
- 69, 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 68, 73, 78, 71, 128, 83,
- 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, 69, 69, 80, 217, 83,
- 76, 69, 69, 80, 73, 78, 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65,
- 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65,
- 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76,
- 76, 128, 83, 75, 85, 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73,
- 78, 128, 83, 75, 73, 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196,
- 83, 75, 65, 84, 69, 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 88, 84,
- 89, 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84,
- 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88,
- 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84,
- 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88,
- 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72,
- 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88,
- 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73,
- 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71,
- 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79,
- 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82,
- 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73,
- 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128,
- 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45,
- 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83,
- 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75,
- 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45,
- 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83,
- 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73,
- 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 75, 73, 78, 71, 128,
- 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128,
- 83, 73, 78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78,
- 197, 83, 73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 80, 76, 73, 70,
- 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, 65,
- 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, 85,
- 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, 75,
- 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, 69,
- 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128,
- 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73,
- 128, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77,
- 193, 83, 73, 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73,
- 71, 128, 83, 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73,
- 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69, 128, 83, 73, 66,
- 197, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 72, 89, 82,
- 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 89, 69, 128,
- 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 128, 83, 72,
- 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 128, 83, 72,
- 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 65, 65, 128, 83, 72, 87,
- 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88,
- 128, 83, 72, 85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128,
- 83, 72, 85, 79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83,
- 72, 85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83,
- 72, 85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 50, 128,
- 83, 72, 85, 178, 83, 72, 85, 128, 83, 72, 213, 83, 72, 84, 65, 80, 73,
- 67, 128, 83, 72, 84, 65, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82,
- 73, 77, 80, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 83, 72, 79,
- 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 72, 79, 84,
- 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 83, 72, 79,
- 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83,
- 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84,
- 45, 84, 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73,
- 71, 45, 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83,
- 211, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72,
- 79, 82, 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84,
- 45, 84, 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45,
- 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45,
- 84, 87, 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82,
- 212, 83, 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 128, 83, 72,
- 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128,
- 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79,
- 197, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65,
- 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72,
- 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72,
- 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 84,
- 207, 83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73,
- 78, 128, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193,
- 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72,
- 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72,
- 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83,
- 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83,
- 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 72,
- 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84,
+ 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 128, 83, 87, 90, 128, 83, 87,
+ 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, 128, 83,
+ 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204, 83, 87, 73, 77,
+ 77, 73, 78, 71, 128, 83, 87, 73, 77, 77, 69, 82, 128, 83, 87, 73, 73,
+ 128, 83, 87, 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87,
+ 69, 69, 212, 83, 87, 69, 65, 84, 128, 83, 87, 69, 65, 212, 83, 87, 65,
+ 83, 200, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83,
+ 87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, 83,
+ 86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, 84,
+ 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 83, 72, 73, 128,
+ 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, 83, 85, 82, 82, 79, 85, 78,
+ 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, 85, 82, 70, 69, 82, 128,
+ 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 65, 78, 71,
+ 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, 83, 85, 210, 83, 85, 80, 82,
+ 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, 83, 69, 128, 83,
+ 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83, 85,
+ 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80, 79,
+ 83, 69, 196, 83, 85, 80, 69, 82, 70, 73, 88, 69, 196, 83, 85, 80, 69,
+ 210, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85,
+ 79, 128, 83, 85, 78, 83, 69, 212, 83, 85, 78, 82, 73, 83, 69, 128, 83,
+ 85, 78, 82, 73, 83, 197, 83, 85, 78, 71, 76, 65, 83, 83, 69, 83, 128, 83,
+ 85, 78, 71, 128, 83, 85, 78, 70, 76, 79, 87, 69, 82, 128, 83, 85, 78,
+ 128, 83, 85, 206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65, 84,
+ 73, 79, 78, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65, 83,
+ 72, 128, 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75, 85,
+ 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83,
+ 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, 72, 85, 82,
+ 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, 83, 85, 67,
+ 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67,
+ 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, 84,
+ 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84,
+ 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85,
+ 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73,
+ 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73,
+ 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, 85,
+ 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, 84,
+ 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, 76,
+ 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74,
+ 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, 128, 83, 85, 66, 71, 82, 79, 85,
+ 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, 128, 83, 85, 65,
+ 69, 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65,
+ 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89,
+ 128, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, 83, 84, 82,
+ 79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69,
+ 45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69,
+ 45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69,
+ 45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69,
+ 45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69,
+ 45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79,
+ 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69,
+ 128, 83, 84, 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82,
+ 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 68, 69, 128,
+ 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, 196, 83,
+ 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69,
+ 65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84,
+ 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84,
+ 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 73,
+ 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83,
+ 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70, 128, 83, 84, 82, 65,
+ 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86, 69, 128, 83, 84, 79,
+ 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72, 128, 83, 84, 79, 80, 80,
+ 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69, 128, 83, 84, 79, 80,
+ 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83, 84, 79, 67, 75, 128,
+ 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, 73, 76, 197,
+ 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 80, 128, 83, 84, 69, 77, 128,
+ 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, 69, 65,
+ 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, 128,
+ 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, 65,
+ 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83,
+ 128, 83, 84, 65, 84, 69, 128, 83, 84, 65, 82, 212, 83, 84, 65, 82, 83,
+ 128, 83, 84, 65, 82, 82, 69, 196, 83, 84, 65, 82, 75, 128, 83, 84, 65,
+ 82, 128, 83, 84, 65, 210, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128,
+ 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, 84, 65, 78,
+ 128, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, 128, 83,
+ 84, 65, 70, 198, 83, 84, 65, 67, 67, 65, 84, 79, 128, 83, 84, 65, 67, 67,
+ 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, 128, 83, 83, 89, 88,
+ 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, 83, 83, 89, 82, 128,
+ 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, 88, 128, 83, 83, 85,
+ 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, 79, 88, 128,
+ 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 79, 128, 83, 83,
+ 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128,
+ 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, 69, 80, 128,
+ 83, 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 72, 69, 128, 83, 83, 69,
+ 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, 83, 83, 65, 88, 128,
+ 83, 83, 65, 85, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83,
+ 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65,
+ 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65,
+ 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69,
+ 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69,
+ 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80,
+ 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128,
+ 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69,
+ 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73,
+ 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65,
+ 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77,
+ 128, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71,
+ 73, 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, 73, 69, 85, 72, 128, 83,
+ 83, 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, 69, 85, 72, 128, 83, 83,
+ 65, 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69,
+ 65, 128, 83, 83, 65, 73, 128, 83, 83, 65, 65, 128, 83, 83, 51, 128, 83,
+ 83, 50, 128, 83, 82, 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82,
+ 82, 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 65, 212, 83,
+ 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, 128, 83, 81, 85,
+ 65, 82, 69, 128, 83, 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, 80,
+ 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, 71, 83, 128, 83, 80, 82, 73, 78,
+ 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 80, 79, 85,
+ 84, 73, 78, 199, 83, 80, 79, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80,
+ 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 65, 83, 72, 73, 78, 199, 83, 80,
+ 73, 82, 73, 84, 85, 211, 83, 80, 73, 82, 73, 84, 128, 83, 80, 73, 82, 73,
+ 212, 83, 80, 73, 82, 65, 78, 84, 128, 83, 80, 73, 82, 65, 76, 128, 83,
+ 80, 73, 82, 65, 204, 83, 80, 73, 68, 69, 82, 217, 83, 80, 73, 67, 69,
+ 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 83, 77, 73, 76,
+ 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, 69, 67, 72,
+ 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80,
+ 69, 65, 82, 128, 83, 80, 69, 65, 75, 69, 82, 128, 83, 80, 69, 65, 75, 69,
+ 210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69, 86, 73, 204, 83, 80, 65, 84,
+ 72, 73, 128, 83, 80, 65, 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76,
+ 69, 83, 128, 83, 80, 65, 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76,
+ 69, 128, 83, 80, 65, 71, 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83,
+ 128, 83, 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67,
+ 197, 83, 80, 65, 128, 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, 79,
+ 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, 76,
+ 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 79, 85, 82, 67, 69, 128, 83,
+ 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83, 79, 85, 78, 65, 80, 128,
+ 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83,
+ 79, 79, 206, 83, 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79,
+ 78, 128, 83, 79, 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 76, 73,
+ 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 83, 79, 72, 128, 83, 79,
+ 71, 68, 73, 65, 206, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67,
+ 84, 73, 79, 206, 83, 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 212,
+ 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210,
+ 83, 79, 65, 80, 128, 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65,
+ 78, 128, 83, 78, 79, 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69,
+ 128, 83, 78, 79, 87, 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87,
+ 128, 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 65, 208, 83,
+ 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83,
+ 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199,
+ 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, 83, 77, 69, 65, 82,
+ 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76,
+ 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79,
+ 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78,
+ 199, 83, 76, 79, 80, 69, 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 68,
+ 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76,
+ 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, 199, 83, 76, 65, 86, 79, 78,
+ 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, 65,
+ 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, 87,
+ 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 76, 204, 83, 75, 76, 73, 82,
+ 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, 69, 82, 128, 83, 75, 201, 83,
+ 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, 128, 83, 75, 128, 83, 74, 69,
+ 128, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89,
+ 128, 83, 73, 88, 84, 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84,
+ 72, 211, 83, 73, 88, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83,
+ 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78,
+ 84, 200, 83, 73, 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206,
+ 83, 73, 88, 45, 84, 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82,
+ 73, 78, 199, 83, 73, 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76,
+ 73, 78, 197, 83, 73, 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83,
+ 73, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84,
+ 72, 128, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83,
+ 73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69,
+ 85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73,
+ 69, 85, 80, 72, 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128,
+ 83, 73, 79, 83, 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73,
+ 69, 85, 77, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83,
+ 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128,
+ 83, 73, 79, 83, 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73,
+ 69, 85, 72, 128, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79,
+ 83, 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 75,
+ 73, 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51,
+ 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73,
+ 78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73,
+ 78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83,
+ 73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 80, 76, 73, 70, 73, 69,
+ 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, 65, 210, 83,
+ 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, 85, 206, 83,
+ 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, 75, 128, 83,
+ 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, 69, 128, 83,
+ 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128, 83, 73, 75,
+ 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 71, 78, 83, 128,
+ 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83,
+ 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69, 128,
+ 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83,
+ 73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 201, 83, 72, 89, 88, 128,
+ 83, 72, 89, 84, 128, 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83,
+ 72, 89, 80, 128, 83, 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89,
+ 128, 83, 72, 87, 79, 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79,
+ 128, 83, 72, 87, 73, 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128,
+ 83, 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83,
+ 72, 85, 85, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72,
+ 85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85,
+ 79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 70,
+ 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69,
+ 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85,
+ 178, 83, 72, 85, 128, 83, 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83,
+ 72, 84, 65, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80,
+ 128, 83, 72, 82, 73, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128,
+ 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83,
+ 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211,
+ 83, 72, 79, 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75,
+ 69, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72,
+ 79, 82, 84, 45, 84, 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45,
+ 84, 87, 73, 71, 45, 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71,
+ 45, 79, 83, 211, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85,
+ 196, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72,
+ 79, 82, 84, 45, 84, 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79,
+ 82, 84, 45, 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79,
+ 82, 84, 45, 84, 87, 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72,
+ 79, 82, 212, 83, 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 128,
+ 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79,
+ 128, 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72,
+ 79, 197, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65,
+ 65, 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83,
+ 72, 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83,
+ 72, 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78,
+ 84, 207, 83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72,
+ 73, 78, 128, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77,
+ 193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83,
+ 72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83,
+ 72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193,
+ 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128,
+ 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83,
+ 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84,
128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69,
83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, 199, 83, 72, 69, 83, 72, 50,
128, 83, 72, 69, 83, 72, 128, 83, 72, 69, 81, 69, 204, 83, 72, 69, 80,
@@ -880,376 +984,384 @@ static unsigned char lexicon[] = {
128, 83, 72, 69, 69, 206, 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79,
65, 84, 128, 83, 72, 197, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128,
83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65,
- 86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 84, 128, 83, 72,
- 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 82, 80, 128, 83, 72,
- 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, 50, 128, 83, 72,
- 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, 65, 80, 69, 83,
- 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, 65, 78, 71, 128,
- 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, 82, 79, 67, 75,
- 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, 65, 75, 84, 73,
- 128, 83, 72, 65, 68, 79, 87, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72,
- 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128, 83,
- 72, 65, 196, 83, 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72, 65,
- 54, 128, 83, 72, 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, 83, 71,
- 79, 210, 83, 71, 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 88, 84,
- 85, 76, 193, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78,
- 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89,
- 128, 83, 69, 86, 69, 78, 84, 217, 83, 69, 86, 69, 78, 84, 72, 128, 83,
- 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206,
- 83, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 83, 69, 86, 69, 206,
- 83, 69, 85, 88, 128, 83, 69, 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69,
- 81, 128, 83, 69, 84, 70, 79, 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85,
- 211, 83, 69, 83, 81, 85, 73, 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69,
- 83, 65, 77, 197, 83, 69, 82, 86, 73, 67, 197, 83, 69, 82, 73, 70, 83,
- 128, 83, 69, 82, 73, 70, 211, 83, 69, 80, 84, 69, 77, 66, 69, 82, 128,
- 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, 79,
- 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, 85,
- 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, 128,
- 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, 212, 83,
- 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, 73, 78,
- 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, 73, 67,
- 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, 77, 73,
- 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, 76, 197,
- 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, 79, 73,
- 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57,
- 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57,
- 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57,
- 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57,
- 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 56,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 53,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 50,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 55, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 52, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 49, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51,
- 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51,
- 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51,
- 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 57,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 54,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53,
- 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52,
- 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 48, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51,
- 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 52, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
- 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 56, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
- 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 49,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
- 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 53,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 57,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48,
- 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 55, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 48,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 52,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 56,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55,
- 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54,
- 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 49, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53,
- 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 53, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 57, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 50,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 54,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, 76, 69,
- 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
- 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50,
- 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 128, 83,
- 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, 67, 84,
- 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49,
- 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 51, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, 69, 76,
- 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82,
- 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 55, 128,
- 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
- 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, 83, 69,
- 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79,
- 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 48,
- 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, 69, 67,
- 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 73, 83,
- 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, 72, 128, 83, 69, 71, 79,
- 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, 77, 69, 78, 84, 128, 83,
- 69, 69, 78, 85, 128, 83, 69, 69, 78, 128, 83, 69, 69, 206, 83, 69, 69,
- 68, 76, 73, 78, 71, 128, 83, 69, 69, 45, 78, 79, 45, 69, 86, 73, 204, 83,
- 69, 67, 84, 79, 82, 128, 83, 69, 67, 84, 73, 79, 78, 128, 83, 69, 67, 84,
- 73, 79, 206, 83, 69, 67, 82, 69, 84, 128, 83, 69, 67, 79, 78, 68, 128,
- 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, 65, 76,
- 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 68, 128, 83,
- 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 79, 76, 76,
- 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67,
- 82, 69, 69, 206, 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80,
- 73, 85, 83, 128, 83, 67, 79, 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83,
- 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79,
- 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79,
- 204, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67,
- 69, 80, 84, 69, 210, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65,
- 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128,
- 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65,
- 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72, 79, 78,
- 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78, 128,
- 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85, 73, 76,
- 128, 83, 65, 84, 85, 82, 78, 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85,
- 128, 83, 65, 84, 75, 65, 65, 78, 128, 83, 65, 84, 69, 76, 76, 73, 84,
- 197, 83, 65, 84, 67, 72, 69, 76, 128, 83, 65, 83, 72, 128, 83, 65, 83,
- 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 128, 83,
- 65, 81, 128, 83, 65, 80, 65, 128, 83, 65, 78, 89, 79, 79, 71, 193, 83,
- 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85, 128, 83, 65, 78,
- 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, 78, 68, 65, 76,
- 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203,
- 83, 65, 77, 80, 73, 128, 83, 65, 77, 80, 72, 65, 79, 128, 83, 65, 77, 75,
- 65, 128, 83, 65, 77, 69, 75, 72, 128, 83, 65, 77, 69, 75, 200, 83, 65,
- 77, 66, 65, 128, 83, 65, 77, 65, 82, 73, 84, 65, 206, 83, 65, 77, 128,
- 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83,
- 65, 76, 84, 45, 50, 128, 83, 65, 76, 84, 128, 83, 65, 76, 212, 83, 65,
- 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65,
- 205, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65, 77, 77, 79, 78, 73, 65, 67,
- 128, 83, 65, 76, 128, 83, 65, 75, 79, 84, 128, 83, 65, 75, 69, 85, 65,
- 69, 128, 83, 65, 75, 197, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76,
- 66, 79, 65, 84, 128, 83, 65, 73, 76, 128, 83, 65, 73, 75, 85, 82, 85,
- 128, 83, 65, 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65,
- 128, 83, 65, 71, 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 68,
- 72, 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65,
- 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68,
- 72, 85, 128, 83, 65, 45, 73, 128, 83, 48, 52, 54, 128, 83, 48, 52, 53,
- 128, 83, 48, 52, 52, 128, 83, 48, 52, 51, 128, 83, 48, 52, 50, 128, 83,
- 48, 52, 49, 128, 83, 48, 52, 48, 128, 83, 48, 51, 57, 128, 83, 48, 51,
- 56, 128, 83, 48, 51, 55, 128, 83, 48, 51, 54, 128, 83, 48, 51, 53, 65,
- 128, 83, 48, 51, 53, 128, 83, 48, 51, 52, 128, 83, 48, 51, 51, 128, 83,
- 48, 51, 50, 128, 83, 48, 51, 49, 128, 83, 48, 51, 48, 128, 83, 48, 50,
- 57, 128, 83, 48, 50, 56, 128, 83, 48, 50, 55, 128, 83, 48, 50, 54, 66,
- 128, 83, 48, 50, 54, 65, 128, 83, 48, 50, 54, 128, 83, 48, 50, 53, 128,
- 83, 48, 50, 52, 128, 83, 48, 50, 51, 128, 83, 48, 50, 50, 128, 83, 48,
- 50, 49, 128, 83, 48, 50, 48, 128, 83, 48, 49, 57, 128, 83, 48, 49, 56,
- 128, 83, 48, 49, 55, 65, 128, 83, 48, 49, 55, 128, 83, 48, 49, 54, 128,
- 83, 48, 49, 53, 128, 83, 48, 49, 52, 66, 128, 83, 48, 49, 52, 65, 128,
- 83, 48, 49, 52, 128, 83, 48, 49, 51, 128, 83, 48, 49, 50, 128, 83, 48,
- 49, 49, 128, 83, 48, 49, 48, 128, 83, 48, 48, 57, 128, 83, 48, 48, 56,
- 128, 83, 48, 48, 55, 128, 83, 48, 48, 54, 65, 128, 83, 48, 48, 54, 128,
- 83, 48, 48, 53, 128, 83, 48, 48, 52, 128, 83, 48, 48, 51, 128, 83, 48,
- 48, 50, 65, 128, 83, 48, 48, 50, 128, 83, 48, 48, 49, 128, 83, 45, 87,
- 128, 83, 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, 82, 89, 88, 128,
- 82, 89, 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, 82, 89, 80, 128,
- 82, 89, 65, 128, 82, 87, 79, 79, 128, 82, 87, 79, 128, 82, 87, 73, 73,
- 128, 82, 87, 73, 128, 82, 87, 69, 69, 128, 82, 87, 69, 128, 82, 87, 65,
- 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82,
- 85, 85, 66, 85, 82, 85, 128, 82, 85, 84, 128, 82, 85, 83, 73, 128, 82,
- 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, 128, 82, 85, 80,
- 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, 79, 80, 128, 82,
- 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, 78, 73, 78, 199,
- 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 128, 82, 85, 77, 201, 82, 85,
- 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, 69, 82, 128, 82,
- 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69, 128, 82,
- 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 71, 66,
- 217, 82, 85, 194, 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82, 84, 65,
- 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82, 89, 84,
- 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89, 80, 128,
- 82, 82, 85, 88, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, 82,
- 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, 82,
- 85, 79, 128, 82, 82, 85, 128, 82, 82, 79, 88, 128, 82, 82, 79, 84, 128,
- 82, 82, 79, 80, 128, 82, 82, 79, 128, 82, 82, 69, 88, 128, 82, 82, 69,
- 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, 82, 69, 200, 82,
- 82, 69, 128, 82, 82, 65, 88, 128, 82, 82, 65, 128, 82, 79, 87, 66, 79,
- 65, 84, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73,
- 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84, 69,
- 196, 82, 79, 83, 72, 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83,
- 69, 128, 82, 79, 79, 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79,
- 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, 77, 65, 206,
- 82, 79, 77, 128, 82, 79, 76, 76, 69, 210, 82, 79, 196, 82, 79, 67, 75,
- 69, 84, 128, 82, 79, 67, 203, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128,
- 82, 79, 65, 83, 84, 69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82,
- 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82,
- 78, 65, 205, 82, 74, 69, 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86,
- 69, 82, 128, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85,
- 128, 82, 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72,
- 128, 82, 73, 82, 65, 128, 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73,
- 78, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66,
- 65, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 82, 73, 71, 86,
- 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71,
- 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70,
- 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83,
- 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69,
- 196, 82, 73, 71, 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71,
- 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78,
- 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, 73, 78, 199, 82, 73, 71, 72, 84,
- 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128, 82, 73,
- 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45, 72, 73,
- 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73,
- 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 45, 72,
- 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 128,
- 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73, 69, 85,
- 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85,
- 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45,
- 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 83,
- 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 83,
- 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 84, 73,
- 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 83,
- 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 80, 72,
- 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45,
- 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 128,
- 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85,
- 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 78, 73,
- 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 83, 73,
- 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75, 73, 89,
- 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 72, 73,
- 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, 82, 73,
- 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128, 82, 73,
- 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72, 128, 82,
- 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45,
- 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85,
- 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73, 69, 85,
- 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, 76, 128, 82, 73, 69, 69, 128,
- 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, 128, 82, 73, 67, 197, 82, 73,
- 66, 66, 79, 78, 128, 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72,
- 79, 128, 82, 72, 207, 82, 72, 65, 128, 82, 71, 89, 73, 78, 71, 83, 128,
- 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78,
- 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65,
- 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82,
- 69, 86, 69, 82, 83, 69, 196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88,
- 128, 82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, 84,
- 82, 79, 70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79,
- 82, 84, 128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82,
- 79, 79, 77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84,
- 128, 82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69,
- 128, 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84,
- 65, 78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83,
- 200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78,
- 128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69,
- 77, 69, 78, 212, 82, 69, 80, 72, 128, 82, 69, 80, 69, 65, 84, 69, 196,
- 82, 69, 80, 69, 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65,
- 128, 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78,
- 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 69, 68, 89, 128, 82,
- 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69,
- 76, 69, 65, 83, 69, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69,
- 76, 65, 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78,
- 199, 82, 69, 73, 196, 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69,
- 71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128,
- 82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71,
- 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71,
- 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, 70, 69, 82, 69, 78,
+ 86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72,
+ 65, 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65,
+ 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65,
+ 82, 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83,
+ 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83,
+ 72, 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65,
+ 77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83,
+ 72, 65, 75, 84, 73, 128, 83, 72, 65, 73, 128, 83, 72, 65, 68, 79, 87, 69,
+ 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65,
+ 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54,
+ 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 51, 128, 83,
+ 72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128, 83, 71,
+ 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 88, 84, 85, 76, 193, 83,
+ 69, 88, 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69,
+ 82, 65, 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69,
+ 78, 84, 217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69,
+ 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45,
+ 84, 72, 73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128,
+ 83, 69, 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84,
+ 70, 79, 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81,
+ 85, 73, 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83,
+ 69, 82, 86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70,
+ 211, 83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82,
+ 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84,
+ 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77,
+ 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75,
+ 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70,
+ 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77,
+ 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77,
+ 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69,
+ 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67,
+ 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86,
+ 79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55,
+ 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55,
+ 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55,
+ 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52,
+ 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51,
+ 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50,
+ 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
+ 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
+ 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50,
+ 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57,
+ 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54,
+ 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53,
+ 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52,
+ 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69,
+ 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79,
+ 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50,
+ 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69,
+ 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45,
+ 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49,
+ 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83,
+ 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84,
+ 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48,
+ 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82,
+ 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128,
+ 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67,
+ 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49,
+ 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76,
+ 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69,
+ 76, 69, 67, 84, 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77,
+ 193, 83, 69, 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128,
+ 83, 69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78,
+ 128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69,
+ 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67,
+ 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84,
+ 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 66, 65, 84, 66, 69, 73, 212,
+ 83, 69, 65, 84, 128, 83, 69, 65, 76, 128, 83, 69, 65, 71, 85, 76, 204,
+ 83, 68, 79, 78, 199, 83, 68, 128, 83, 67, 87, 65, 128, 83, 67, 82, 85,
+ 80, 76, 69, 128, 83, 67, 82, 79, 76, 76, 128, 83, 67, 82, 73, 80, 84,
+ 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, 82,
+ 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 79,
+ 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, 128, 83,
+ 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, 69, 68, 69,
+ 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, 204, 83, 67,
+ 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, 69, 80, 84, 69,
+ 210, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65, 78, 68, 73, 67,
+ 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128, 83, 66, 85, 194,
+ 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65, 89, 65, 78, 78, 65,
+ 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72, 79, 78, 69, 128, 83, 65,
+ 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128,
+ 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85, 73, 76, 128, 83, 65, 84,
+ 85, 82, 78, 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65, 84,
+ 75, 65, 65, 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 197, 83, 65, 84, 67,
+ 72, 69, 76, 128, 83, 65, 84, 65, 78, 71, 65, 128, 83, 65, 83, 72, 128,
+ 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, 83, 65,
+ 82, 128, 83, 65, 81, 128, 83, 65, 80, 65, 128, 83, 65, 78, 89, 79, 79,
+ 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85,
+ 128, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65,
+ 78, 68, 65, 76, 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, 128, 83, 65,
+ 77, 89, 79, 203, 83, 65, 77, 86, 65, 84, 128, 83, 65, 77, 80, 73, 128,
+ 83, 65, 77, 80, 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69,
+ 75, 72, 128, 83, 65, 77, 69, 75, 200, 83, 65, 77, 66, 65, 128, 83, 65,
+ 77, 65, 82, 73, 84, 65, 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, 82, 69,
+ 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 45, 50, 128,
+ 83, 65, 76, 84, 128, 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, 65, 72,
+ 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128,
+ 83, 65, 76, 45, 65, 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83,
+ 65, 75, 79, 84, 128, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197,
+ 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65,
+ 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65,
+ 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71,
+ 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 68, 72, 69, 128, 83,
+ 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65, 67, 82, 73, 70,
+ 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68, 72, 85, 128,
+ 83, 65, 45, 73, 128, 83, 65, 45, 50, 128, 83, 48, 52, 54, 128, 83, 48,
+ 52, 53, 128, 83, 48, 52, 52, 128, 83, 48, 52, 51, 128, 83, 48, 52, 50,
+ 128, 83, 48, 52, 49, 128, 83, 48, 52, 48, 128, 83, 48, 51, 57, 128, 83,
+ 48, 51, 56, 128, 83, 48, 51, 55, 128, 83, 48, 51, 54, 128, 83, 48, 51,
+ 53, 65, 128, 83, 48, 51, 53, 128, 83, 48, 51, 52, 128, 83, 48, 51, 51,
+ 128, 83, 48, 51, 50, 128, 83, 48, 51, 49, 128, 83, 48, 51, 48, 128, 83,
+ 48, 50, 57, 128, 83, 48, 50, 56, 128, 83, 48, 50, 55, 128, 83, 48, 50,
+ 54, 66, 128, 83, 48, 50, 54, 65, 128, 83, 48, 50, 54, 128, 83, 48, 50,
+ 53, 128, 83, 48, 50, 52, 128, 83, 48, 50, 51, 128, 83, 48, 50, 50, 128,
+ 83, 48, 50, 49, 128, 83, 48, 50, 48, 128, 83, 48, 49, 57, 128, 83, 48,
+ 49, 56, 128, 83, 48, 49, 55, 65, 128, 83, 48, 49, 55, 128, 83, 48, 49,
+ 54, 128, 83, 48, 49, 53, 128, 83, 48, 49, 52, 66, 128, 83, 48, 49, 52,
+ 65, 128, 83, 48, 49, 52, 128, 83, 48, 49, 51, 128, 83, 48, 49, 50, 128,
+ 83, 48, 49, 49, 128, 83, 48, 49, 48, 128, 83, 48, 48, 57, 128, 83, 48,
+ 48, 56, 128, 83, 48, 48, 55, 128, 83, 48, 48, 54, 65, 128, 83, 48, 48,
+ 54, 128, 83, 48, 48, 53, 128, 83, 48, 48, 52, 128, 83, 48, 48, 51, 128,
+ 83, 48, 48, 50, 65, 128, 83, 48, 48, 50, 128, 83, 48, 48, 49, 128, 83,
+ 45, 87, 128, 83, 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, 82, 89,
+ 88, 128, 82, 89, 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, 82, 89,
+ 80, 128, 82, 87, 79, 79, 128, 82, 87, 79, 128, 82, 87, 73, 73, 128, 82,
+ 87, 73, 128, 82, 87, 69, 69, 128, 82, 87, 69, 128, 82, 87, 65, 72, 65,
+ 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82, 85, 85,
+ 66, 85, 82, 85, 128, 82, 85, 85, 128, 82, 85, 84, 128, 82, 85, 83, 73,
+ 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, 128, 82,
+ 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, 79, 80,
+ 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, 78, 73,
+ 78, 199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 128, 82, 85, 77, 201,
+ 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, 69, 82,
+ 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69,
+ 128, 82, 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85,
+ 71, 66, 217, 82, 85, 194, 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82,
+ 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82,
+ 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89,
+ 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, 85, 128, 82, 82, 85, 84, 128,
+ 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82,
+ 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 79,
+ 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128,
+ 82, 82, 79, 128, 82, 82, 73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88,
+ 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82,
+ 82, 69, 200, 82, 82, 69, 69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128,
+ 82, 82, 65, 85, 128, 82, 82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 82,
+ 65, 128, 82, 79, 87, 66, 79, 65, 84, 128, 82, 79, 85, 78, 68, 69, 196,
+ 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, 196, 82, 79, 84, 85, 78, 68,
+ 65, 128, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, 128, 82, 79, 83,
+ 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, 84, 128, 82, 79,
+ 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82,
+ 79, 77, 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 69, 210, 82, 79, 72,
+ 73, 78, 71, 89, 193, 82, 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79,
+ 67, 203, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84,
+ 69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 78, 89, 73, 78, 199,
+ 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77,
+ 84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 69, 128, 82, 74, 69,
+ 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84,
+ 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73,
+ 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128,
+ 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 70, 79, 82, 90, 65, 78,
+ 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, 75, 82,
+ 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65,
+ 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84,
+ 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197,
+ 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72,
+ 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, 84, 45, 80, 79, 73, 78,
+ 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, 73,
+ 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, 73,
+ 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, 73,
+ 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72,
+ 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 89,
+ 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84,
+ 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45,
+ 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, 85,
+ 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, 69,
+ 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83,
+ 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128,
+ 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128,
+ 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80,
+ 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45,
+ 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80,
+ 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76,
+ 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76,
+ 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85,
+ 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 82,
+ 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, 77,
+ 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, 73,
+ 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 77,
+ 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 77,
+ 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45,
+ 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45,
+ 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75,
+ 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69,
+ 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69,
+ 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, 76,
+ 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, 128,
+ 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 65, 204, 82, 72,
+ 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, 82, 72, 65, 128, 82, 71,
+ 89, 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82,
+ 69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78,
+ 128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69,
+ 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69, 196, 82, 69, 86, 69, 82,
+ 83, 197, 82, 69, 85, 88, 128, 82, 69, 85, 128, 82, 69, 84, 85, 82, 78,
+ 128, 82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79, 70, 76, 69, 216, 82,
+ 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84, 128, 82, 69, 83, 85,
+ 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79, 77, 128, 82, 69, 83,
+ 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84, 128, 82, 69, 83, 80, 79, 78,
+ 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69, 128, 82, 69, 83, 79, 76, 85,
+ 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84, 65, 78, 67, 69, 128, 82, 69,
+ 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, 200, 82, 69, 82, 69, 78, 71,
+ 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78, 128, 82, 69, 80, 82, 69, 83,
+ 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, 212, 82, 69, 80,
+ 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, 79, 206, 82, 69, 80, 69, 65, 84,
+ 69, 196, 82, 69, 80, 69, 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69,
+ 80, 65, 89, 65, 128, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, 69, 78,
+ 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 206, 82, 69, 77, 85,
+ 128, 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128,
+ 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69,
+ 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82,
+ 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 199, 82, 69, 73, 196, 82, 69,
+ 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128,
+ 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128,
+ 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82,
+ 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71,
+ 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78,
67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69,
67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67,
84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65,
@@ -1265,56 +1377,57 @@ static unsigned char lexicon[] = {
83, 87, 65, 68, 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65,
128, 82, 65, 81, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71,
197, 82, 65, 78, 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77,
- 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 73, 78,
- 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82, 65,
- 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73, 76,
- 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 73, 128, 82,
- 65, 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69,
- 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73, 79,
- 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196,
- 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65, 66, 66,
- 73, 84, 128, 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73,
- 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, 50, 128, 82, 48, 50, 57,
- 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82,
- 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50,
- 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128,
- 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82,
- 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49,
- 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65,
- 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82,
- 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48,
- 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48,
- 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49,
- 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89,
- 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89,
- 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89,
- 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69,
- 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85,
- 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85,
- 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128,
- 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84,
- 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85,
- 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69,
- 83, 83, 69, 78, 67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77,
- 193, 81, 85, 73, 78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85,
- 211, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81,
- 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84,
- 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78,
- 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128,
- 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83,
- 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128,
- 81, 85, 65, 82, 84, 69, 210, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65,
- 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65,
- 68, 82, 65, 78, 212, 81, 85, 65, 68, 128, 81, 85, 65, 196, 81, 85, 65,
- 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, 81, 79, 80,
- 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, 128, 81, 79,
- 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, 128, 81, 78,
- 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, 128, 81, 73,
- 80, 128, 81, 73, 73, 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, 128, 81,
- 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, 128, 81,
- 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, 128, 81,
- 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81,
- 72, 69, 69, 128, 81, 72, 69, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128,
+ 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82,
+ 65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73,
+ 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82, 65, 73, 76, 87, 65, 89,
+ 128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73, 76, 128, 82, 65, 73, 68,
+ 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65,
+ 200, 82, 65, 72, 128, 82, 65, 70, 69, 128, 82, 65, 69, 77, 128, 82, 65,
+ 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73, 79, 128, 82, 65, 68,
+ 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, 67, 81,
+ 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65, 66, 66, 73, 84, 128,
+ 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65,
+ 51, 128, 82, 65, 50, 128, 82, 65, 45, 50, 128, 82, 48, 50, 57, 128, 82,
+ 48, 50, 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, 48, 50,
+ 53, 128, 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, 50, 128,
+ 82, 48, 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, 82, 48,
+ 49, 56, 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, 48, 49,
+ 54, 128, 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, 51, 128,
+ 82, 48, 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, 128, 82,
+ 48, 49, 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, 48, 48,
+ 55, 128, 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, 52, 128,
+ 82, 48, 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, 51, 128,
+ 82, 48, 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, 128, 82,
+ 45, 67, 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, 84, 128,
+ 81, 89, 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, 79, 128,
+ 81, 89, 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, 65, 65,
+ 128, 81, 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, 69, 128,
+ 81, 87, 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, 88, 128,
+ 81, 85, 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, 84, 128,
+ 81, 85, 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82,
+ 128, 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85,
+ 79, 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128,
+ 81, 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78,
+ 67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73,
+ 78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73,
+ 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81, 85, 70, 128, 81,
+ 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84, 73, 79, 78, 128,
+ 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, 128, 81, 85, 69, 69,
+ 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69,
+ 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82,
+ 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128, 81, 85, 65, 82, 84, 69,
+ 210, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76,
+ 197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78,
+ 212, 81, 85, 65, 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128,
+ 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79,
+ 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70,
+ 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88,
+ 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73,
+ 73, 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128,
+ 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69,
+ 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128,
+ 81, 72, 85, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128,
+ 81, 72, 69, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, 128,
81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, 85,
128, 81, 65, 84, 65, 78, 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128,
81, 65, 81, 128, 81, 65, 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81,
@@ -1328,297 +1441,307 @@ static unsigned char lexicon[] = {
87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, 80, 87, 73, 73, 128, 80,
87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, 128, 80, 87, 65, 65, 128,
80, 87, 128, 80, 86, 128, 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85,
- 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85,
- 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65,
- 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83,
- 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 73, 84, 89, 128, 80, 85,
- 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, 80, 128,
- 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, 85, 78,
- 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, 65, 84,
- 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77,
- 80, 128, 80, 85, 77, 128, 80, 85, 69, 128, 80, 85, 66, 76, 73, 195, 80,
- 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80,
- 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73,
- 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73,
- 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73,
- 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73,
- 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 128, 80, 82, 79, 86, 69, 128,
- 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82,
- 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 80, 79,
- 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128,
- 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80,
- 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76,
- 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80,
- 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 71, 82, 69, 83, 83,
- 128, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84,
- 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80,
- 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 83,
- 128, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, 67,
- 69, 83, 83, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82,
- 69, 86, 73, 79, 85, 211, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206,
- 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78,
- 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82,
- 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80,
- 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80,
- 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69,
- 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 77, 45, 80,
- 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85,
- 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66,
- 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45,
- 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65, 77, 128,
- 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128, 80, 80,
- 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82, 211, 80,
- 79, 87, 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69,
- 82, 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85,
- 67, 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197,
- 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83,
- 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80,
- 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 82, 82,
- 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, 85, 211, 80, 79, 80,
- 80, 69, 82, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, 68, 76, 69,
- 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, 80, 79, 76,
- 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76,
- 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79,
- 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79,
- 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80,
- 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80,
- 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, 79, 65, 128,
- 80, 79, 128, 80, 207, 80, 78, 69, 85, 77, 65, 84, 65, 128, 80, 76, 85,
- 84, 79, 128, 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83,
- 128, 80, 76, 85, 82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, 76, 85,
- 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 79, 87, 128,
- 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76,
- 65, 89, 73, 78, 199, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78,
- 69, 128, 80, 76, 65, 78, 197, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75,
- 128, 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69,
- 210, 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65,
- 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82,
- 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79,
- 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69,
- 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128,
- 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 80, 73, 78,
- 71, 128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, 65,
- 69, 77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204,
- 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 78, 65,
- 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, 128, 80, 73, 76, 197, 80,
- 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, 85, 128, 80, 73, 75, 79,
- 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, 88, 128, 80, 73, 69, 85,
- 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, 83,
- 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83,
- 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83,
- 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79,
- 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83,
- 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83,
- 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76,
- 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69,
- 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 128, 80, 73, 69,
- 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, 85, 80, 45, 75, 72, 73,
- 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67, 128, 80,
- 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, 128, 80, 73, 69, 85, 208,
- 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, 73, 69, 69, 84, 128, 80,
- 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 128, 80, 73,
- 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82,
- 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80,
- 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80,
- 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83,
- 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80,
- 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84,
- 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73,
- 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73,
- 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128,
- 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69,
- 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80,
- 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72,
- 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 89, 78,
- 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65,
- 77, 128, 80, 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80,
- 193, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, 72,
- 65, 128, 80, 71, 128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 84,
- 65, 69, 128, 80, 69, 85, 84, 128, 80, 69, 84, 65, 83, 84, 79, 75, 79, 85,
- 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84, 65,
- 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79, 128,
- 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 69, 84, 193, 80,
- 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 86,
- 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80, 69, 82, 83, 79, 78, 128,
- 80, 69, 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 80, 69, 82, 83, 69,
- 86, 69, 82, 73, 78, 199, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65,
- 82, 128, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 210, 80, 69, 82,
- 77, 65, 78, 69, 78, 212, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 73, 128,
- 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 201, 80, 69, 82, 70, 79, 82, 77,
- 73, 78, 199, 80, 69, 82, 70, 69, 67, 84, 85, 205, 80, 69, 82, 70, 69, 67,
- 84, 65, 128, 80, 69, 82, 70, 69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83,
- 73, 86, 69, 128, 80, 69, 82, 67, 69, 78, 212, 80, 69, 80, 69, 84, 128,
- 80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, 79, 80, 76, 69,
- 128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 82,
- 65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85,
- 128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 73,
- 72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76,
- 128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73,
- 76, 128, 80, 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79,
- 206, 80, 69, 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69,
- 200, 80, 69, 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69,
- 83, 72, 73, 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69,
- 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83,
- 84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68,
- 69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 67, 72, 128, 80,
- 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 128, 80, 67, 128, 80,
- 65, 90, 69, 82, 128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78,
- 78, 65, 128, 80, 65, 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80,
- 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 128, 80, 65, 84, 84, 69, 82, 78,
- 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200, 80,
- 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80, 65,
- 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73, 86,
- 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 80, 65,
- 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79, 85,
- 84, 80, 85, 212, 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69,
- 128, 80, 65, 83, 69, 81, 128, 80, 65, 82, 85, 77, 128, 80, 65, 82, 84,
- 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, 84, 73, 65,
- 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, 84, 73, 65,
- 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, 65, 82, 73,
- 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, 78, 79, 206,
- 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73,
- 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, 80, 65, 82, 65, 80,
- 72, 82, 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 82, 65, 77,
- 128, 80, 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 76, 69,
- 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 65, 75,
- 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80,
- 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, 82, 65,
- 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, 128,
- 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67,
- 76, 73, 80, 128, 80, 65, 80, 69, 210, 80, 65, 80, 128, 80, 65, 208, 80,
- 65, 207, 80, 65, 78, 89, 85, 75, 85, 128, 80, 65, 78, 89, 73, 75, 85,
- 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80, 65, 78, 89, 65, 78, 71, 71,
- 65, 128, 80, 65, 78, 89, 65, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128,
- 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 65, 78, 83,
- 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128,
- 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, 128, 80, 65, 78, 79, 76, 79, 78,
- 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, 71, 82, 65,
- 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, 79, 76, 65, 84, 128, 80, 65, 78,
- 71, 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78,
- 71, 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71,
- 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68, 193,
- 80, 65, 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 77,
- 85, 78, 71, 75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65,
- 77, 83, 72, 65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65,
- 77, 73, 78, 71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65,
- 77, 69, 78, 69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65,
- 65, 69, 72, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75,
- 65, 128, 80, 65, 76, 205, 80, 65, 76, 76, 65, 87, 65, 128, 80, 65, 76,
- 76, 65, 83, 128, 80, 65, 76, 69, 84, 84, 69, 128, 80, 65, 76, 65, 85, 78,
- 199, 80, 65, 76, 65, 84, 65, 76, 73, 90, 69, 196, 80, 65, 76, 65, 84, 65,
- 76, 73, 90, 65, 84, 73, 79, 78, 128, 80, 65, 76, 65, 84, 65, 204, 80, 65,
- 75, 80, 65, 203, 80, 65, 73, 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82,
- 84, 72, 82, 65, 128, 80, 65, 73, 82, 69, 196, 80, 65, 72, 76, 65, 86,
- 201, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80,
- 65, 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65,
- 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78,
- 84, 79, 128, 80, 65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65,
- 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128,
- 80, 50, 128, 80, 48, 49, 49, 128, 80, 48, 49, 48, 128, 80, 48, 48, 57,
- 128, 80, 48, 48, 56, 128, 80, 48, 48, 55, 128, 80, 48, 48, 54, 128, 80,
- 48, 48, 53, 128, 80, 48, 48, 52, 128, 80, 48, 48, 51, 65, 128, 80, 48,
- 48, 51, 128, 80, 48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48,
- 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65,
- 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79,
- 88, 69, 73, 193, 79, 86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76,
- 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65,
- 89, 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76,
- 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 204, 79,
- 86, 128, 79, 85, 84, 76, 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69,
- 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73,
- 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79,
- 84, 84, 65, 86, 193, 79, 84, 84, 128, 79, 84, 72, 65, 76, 65, 206, 79,
- 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89, 193, 79, 82, 84, 72, 79, 71,
- 79, 78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84,
- 197, 79, 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78,
- 212, 79, 82, 75, 72, 79, 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82,
- 73, 71, 73, 78, 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65,
- 204, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84,
- 73, 79, 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73,
- 79, 78, 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79,
- 83, 73, 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72,
- 85, 83, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84,
- 79, 210, 79, 80, 69, 78, 73, 78, 199, 79, 80, 69, 78, 45, 80, 128, 79,
- 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, 69, 196, 79, 80, 69, 78, 45, 72,
- 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, 85, 73, 84, 45,
- 79, 85, 84, 80, 85, 212, 79, 80, 69, 206, 79, 79, 90, 69, 128, 79, 79,
- 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 128, 79, 79,
- 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, 85, 128, 79,
- 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 82, 128, 79, 78, 69,
- 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217, 79, 78, 69, 45, 84, 72,
- 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78, 197, 79, 78, 67, 79, 77,
- 73, 78, 199, 79, 78, 65, 80, 128, 79, 77, 73, 83, 83, 73, 79, 206, 79,
- 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 79, 206, 79, 77, 69, 71,
- 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 79, 78, 128, 79, 76, 73,
- 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, 75, 84, 207,
- 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 79, 74, 73, 66, 87, 65,
- 217, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128, 79, 72, 77, 128, 79, 72,
- 205, 79, 72, 128, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, 75, 128, 79,
- 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 67, 69, 82,
- 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 79, 70, 70,
- 128, 79, 69, 75, 128, 79, 68, 69, 78, 128, 79, 68, 196, 79, 67, 84, 79,
- 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 79, 67,
- 76, 79, 67, 75, 128, 79, 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83,
- 84, 82, 85, 67, 84, 73, 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79,
- 204, 79, 66, 79, 70, 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79,
- 66, 74, 69, 67, 212, 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83,
- 128, 79, 66, 128, 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65,
- 70, 73, 76, 73, 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66,
- 128, 79, 48, 53, 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128,
- 79, 48, 52, 56, 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48,
- 52, 53, 128, 79, 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50,
- 128, 79, 48, 52, 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79,
- 48, 51, 56, 128, 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48,
- 51, 54, 67, 128, 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79,
- 48, 51, 54, 128, 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51,
- 51, 65, 128, 79, 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49,
- 128, 79, 48, 51, 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65,
- 128, 79, 48, 50, 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79,
- 48, 50, 54, 128, 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48,
- 50, 52, 65, 128, 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50,
- 50, 128, 79, 48, 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48,
- 128, 79, 48, 49, 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128,
- 79, 48, 49, 55, 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48,
- 49, 52, 128, 79, 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49,
- 128, 79, 48, 49, 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48,
- 65, 128, 79, 48, 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128,
- 79, 48, 48, 55, 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128,
- 79, 48, 48, 54, 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66,
- 128, 79, 48, 48, 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65,
- 128, 79, 48, 48, 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79,
- 48, 48, 50, 128, 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45,
- 89, 69, 128, 79, 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88,
- 128, 78, 90, 89, 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128,
- 78, 90, 89, 80, 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85,
- 82, 88, 128, 78, 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80,
- 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78,
- 90, 85, 128, 78, 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88,
- 128, 78, 90, 73, 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128,
- 78, 90, 73, 69, 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90,
- 69, 88, 128, 78, 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88,
- 128, 78, 90, 65, 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78,
- 90, 65, 128, 78, 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78,
+ 85, 128, 80, 85, 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84,
+ 128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80,
+ 73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80,
+ 85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65,
+ 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, 85,
+ 82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, 85,
+ 79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, 85,
+ 78, 71, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 78, 128, 80, 85, 78,
+ 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80, 128, 80, 85, 77, 128,
+ 80, 85, 69, 128, 80, 85, 66, 76, 73, 195, 80, 85, 65, 81, 128, 80, 85,
+ 65, 69, 128, 80, 85, 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72,
+ 65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73,
+ 83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84,
+ 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73,
+ 83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77,
+ 65, 128, 80, 83, 73, 128, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82,
+ 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84,
+ 69, 67, 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78,
+ 73, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80,
+ 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79,
+ 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78,
+ 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69,
+ 67, 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80,
+ 82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79,
+ 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68,
+ 85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84,
+ 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65,
+ 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 128, 80,
+ 82, 73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 77, 69,
+ 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 80, 82, 69,
+ 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82,
+ 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69,
+ 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70,
+ 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69,
+ 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69,
+ 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69,
+ 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 77, 45, 80, 73, 73,
+ 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89,
+ 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79,
+ 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69,
+ 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82,
+ 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128,
+ 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87,
+ 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82,
+ 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67,
+ 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80,
+ 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84,
+ 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79,
+ 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 82, 82, 69,
+ 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, 85, 211, 80, 79, 80, 80,
+ 69, 82, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, 68, 76, 69, 128,
+ 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, 80, 79, 77, 77,
+ 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 73, 83, 72, 128, 80,
+ 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 76,
+ 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128,
+ 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, 128, 80, 79, 73, 78, 84,
+ 69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80, 79, 73, 78, 84, 128, 80,
+ 79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80, 79, 69, 84, 73, 195, 80,
+ 79, 68, 65, 84, 85, 83, 128, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80,
+ 78, 69, 85, 77, 65, 84, 65, 128, 80, 76, 85, 84, 79, 128, 80, 76, 85, 83,
+ 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, 82, 65, 76,
+ 128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128,
+ 80, 76, 85, 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128, 80, 76, 79,
+ 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76, 68, 128,
+ 80, 76, 65, 89, 73, 78, 199, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76,
+ 65, 78, 69, 128, 80, 76, 65, 78, 197, 80, 76, 65, 78, 67, 203, 80, 76,
+ 65, 75, 128, 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76,
+ 68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90, 90, 73,
+ 67, 65, 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73,
+ 87, 82, 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72,
+ 70, 79, 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73,
+ 83, 69, 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71,
+ 128, 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 80,
+ 73, 78, 71, 128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73,
+ 80, 65, 69, 77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69,
+ 204, 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73,
+ 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, 128, 80, 73, 76,
+ 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, 85, 128, 80, 73,
+ 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, 88, 128, 80, 73,
+ 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45,
+ 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, 80, 45, 83, 73,
+ 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, 80, 45, 83, 73,
+ 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83,
+ 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, 80, 45, 83, 73,
+ 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 83, 73,
+ 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69,
+ 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 82,
+ 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 128, 80,
+ 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, 85, 80, 45, 75,
+ 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67,
+ 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, 128, 80, 73, 69,
+ 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, 73, 69, 69, 84,
+ 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 128,
+ 80, 73, 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84,
+ 79, 82, 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80,
+ 201, 80, 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85,
+ 210, 80, 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79,
+ 78, 69, 83, 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65,
+ 128, 80, 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73,
+ 78, 84, 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80,
+ 72, 73, 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84,
+ 72, 73, 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79,
+ 83, 128, 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72,
+ 73, 69, 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80,
+ 200, 80, 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128,
+ 80, 72, 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80, 72, 65, 82,
+ 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80,
+ 72, 65, 77, 128, 80, 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45,
+ 80, 193, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80,
+ 72, 65, 128, 80, 71, 128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85,
+ 84, 65, 69, 128, 80, 69, 85, 84, 128, 80, 69, 84, 65, 83, 84, 79, 75, 79,
+ 85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84,
+ 65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79,
+ 128, 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 69, 84, 193,
+ 80, 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82, 83, 80, 69, 67, 84, 73,
+ 86, 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80, 69, 82, 83, 79, 78,
+ 128, 80, 69, 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 80, 69, 82,
+ 83, 69, 86, 69, 82, 73, 78, 199, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85,
+ 76, 65, 82, 128, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 210, 80,
+ 69, 82, 77, 73, 84, 84, 69, 196, 80, 69, 82, 77, 65, 78, 69, 78, 212, 80,
+ 69, 82, 73, 83, 80, 79, 77, 69, 78, 73, 128, 80, 69, 82, 73, 83, 80, 79,
+ 77, 69, 78, 201, 80, 69, 82, 70, 79, 82, 77, 73, 78, 199, 80, 69, 82, 70,
+ 69, 67, 84, 85, 205, 80, 69, 82, 70, 69, 67, 84, 65, 128, 80, 69, 82, 70,
+ 69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83, 73, 86, 69, 128, 80, 69, 82,
+ 67, 69, 78, 212, 80, 69, 80, 69, 84, 128, 80, 69, 80, 69, 212, 80, 69,
+ 79, 82, 84, 200, 80, 69, 79, 80, 76, 69, 128, 80, 69, 78, 84, 65, 83, 69,
+ 77, 69, 128, 80, 69, 78, 84, 65, 71, 82, 65, 77, 128, 80, 69, 78, 84, 65,
+ 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 83, 73, 86, 197,
+ 80, 69, 78, 78, 217, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, 85, 73,
+ 78, 128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, 65, 84,
+ 73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 76, 65, 83, 84, 79,
+ 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 73, 84, 72, 128, 80,
+ 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, 72, 128, 80, 69, 200,
+ 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, 128, 80, 69, 69, 80,
+ 128, 80, 69, 69, 77, 128, 80, 69, 69, 128, 80, 69, 68, 69, 83, 84, 82,
+ 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 128, 80, 69,
+ 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69, 83, 84, 65, 204, 80, 69, 68,
+ 65, 204, 80, 69, 65, 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65,
+ 67, 197, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82,
+ 128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128,
+ 80, 65, 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80,
+ 65, 86, 73, 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 84, 84, 69, 82,
+ 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200,
+ 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80,
+ 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73,
+ 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 80,
+ 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79,
+ 85, 84, 80, 85, 212, 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69,
+ 128, 80, 65, 83, 69, 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65,
+ 82, 85, 77, 128, 80, 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72,
+ 73, 208, 80, 65, 82, 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76,
+ 69, 196, 80, 65, 82, 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206,
+ 80, 65, 82, 212, 80, 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83,
+ 84, 73, 71, 77, 69, 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65,
+ 82, 69, 78, 84, 72, 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69,
+ 83, 73, 211, 80, 65, 82, 65, 80, 72, 82, 65, 83, 197, 80, 65, 82, 65, 76,
+ 76, 69, 76, 79, 71, 82, 65, 77, 128, 80, 65, 82, 65, 76, 76, 69, 76, 128,
+ 80, 65, 82, 65, 76, 76, 69, 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75,
+ 73, 128, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75,
+ 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128,
+ 80, 65, 82, 65, 71, 82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80,
+ 200, 80, 65, 82, 65, 128, 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83,
+ 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, 80,
+ 65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, 128,
+ 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80,
+ 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, 65, 128,
+ 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, 69, 85,
+ 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78,
+ 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, 128, 80,
+ 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128,
+ 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, 79, 76,
+ 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, 76, 65,
+ 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, 75, 65,
+ 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, 128, 80,
+ 65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68, 193, 80, 65, 78,
+ 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 77, 85, 78, 71,
+ 75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 77, 83, 72,
+ 65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 77, 73, 78,
+ 71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, 77, 69, 78,
+ 69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, 65, 69, 72,
+ 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, 65, 128,
+ 80, 65, 76, 205, 80, 65, 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83,
+ 128, 80, 65, 76, 69, 84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80,
+ 65, 76, 65, 84, 65, 76, 73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73,
+ 90, 65, 84, 73, 79, 78, 128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80,
+ 65, 203, 80, 65, 73, 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72,
+ 82, 65, 128, 80, 65, 73, 82, 69, 196, 80, 65, 73, 128, 80, 65, 72, 76,
+ 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197,
+ 80, 65, 68, 77, 193, 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80,
+ 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69,
+ 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80,
+ 65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80,
+ 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80,
+ 48, 49, 49, 128, 80, 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48,
+ 56, 128, 80, 48, 48, 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128,
+ 80, 48, 48, 52, 128, 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80,
+ 48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89,
+ 82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65,
+ 128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79,
+ 86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86,
+ 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69,
+ 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79,
+ 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 204, 79, 86, 128, 79, 85, 84,
+ 76, 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69,
+ 210, 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67,
+ 69, 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193,
+ 79, 84, 84, 128, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128,
+ 79, 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79,
+ 78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197,
+ 79, 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79,
+ 82, 75, 72, 79, 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73,
+ 78, 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82,
+ 68, 69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79,
+ 80, 84, 73, 79, 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83,
+ 83, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80,
+ 80, 79, 83, 73, 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85,
+ 67, 72, 85, 83, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82,
+ 65, 84, 79, 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73,
+ 78, 199, 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76,
+ 73, 78, 69, 196, 79, 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69,
+ 78, 45, 67, 73, 82, 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 79,
+ 90, 69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79,
+ 77, 85, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128,
+ 79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65,
+ 82, 128, 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217,
+ 79, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78,
+ 197, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, 77, 73,
+ 83, 83, 73, 79, 206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82,
+ 79, 206, 79, 77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76,
+ 79, 78, 128, 79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76,
+ 68, 128, 79, 75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193,
+ 79, 74, 73, 66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128,
+ 79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69,
+ 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73,
+ 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197,
+ 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, 79, 68, 69, 78, 128,
+ 79, 68, 196, 79, 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82,
+ 128, 79, 67, 84, 69, 212, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, 79,
+ 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, 73,
+ 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, 73,
+ 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, 79,
+ 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, 79,
+ 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128,
+ 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, 48,
+ 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, 128,
+ 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, 48,
+ 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, 49,
+ 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, 79,
+ 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, 79,
+ 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, 79,
+ 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, 48,
+ 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, 48,
+ 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, 57,
+ 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, 79,
+ 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, 79,
+ 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, 50,
+ 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, 57,
+ 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, 128,
+ 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, 48,
+ 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, 48,
+ 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, 49,
+ 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, 128,
+ 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, 68,
+ 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, 54,
+ 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, 53,
+ 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, 79,
+ 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, 45,
+ 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, 84,
+ 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, 128,
+ 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, 90,
+ 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, 79,
+ 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, 90,
+ 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, 84,
+ 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, 80,
+ 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, 90,
+ 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84,
+ 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, 90,
+ 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, 78,
89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, 89,
85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 69, 128, 78, 89, 85,
128, 78, 89, 79, 88, 128, 78, 89, 79, 84, 128, 78, 89, 79, 80, 128, 78,
89, 79, 79, 128, 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65,
128, 78, 89, 73, 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89,
73, 211, 78, 89, 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68,
- 79, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, 128, 78, 89, 73,
- 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 78, 89, 201, 78, 89,
- 69, 84, 128, 78, 89, 69, 212, 78, 89, 69, 72, 128, 78, 89, 69, 200, 78,
- 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67, 65, 128, 78,
- 89, 65, 69, 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, 87, 79, 79, 128,
- 78, 87, 79, 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, 78, 87, 69, 128,
- 78, 87, 65, 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, 86, 128, 78, 85,
- 88, 128, 78, 85, 85, 78, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85,
- 84, 128, 78, 85, 212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80,
- 128, 78, 85, 79, 88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85,
- 78, 85, 90, 128, 78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78,
- 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85,
- 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78,
- 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66,
- 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78,
+ 79, 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69,
+ 84, 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128,
+ 78, 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212,
+ 78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69,
+ 128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65,
+ 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89,
+ 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128,
+ 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128,
+ 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85,
+ 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212,
+ 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88,
+ 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78,
+ 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78,
+ 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69,
+ 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65,
+ 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78,
+ 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78,
85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, 85, 69, 128, 78, 85,
66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, 49, 128, 78, 85, 48,
50, 50, 65, 128, 78, 85, 48, 50, 50, 128, 78, 85, 48, 50, 49, 128, 78,
@@ -1659,470 +1782,493 @@ static unsigned char lexicon[] = {
65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78,
45, 66, 82, 69, 65, 75, 73, 78, 199, 78, 79, 77, 73, 78, 65, 204, 78, 79,
75, 72, 85, 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, 79, 45,
- 66, 82, 69, 65, 203, 78, 78, 79, 128, 78, 78, 78, 65, 128, 78, 78, 71,
+ 66, 82, 69, 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, 78, 79,
+ 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, 85, 128,
+ 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, 73, 128,
+ 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, 128, 78,
+ 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, 65, 128,
+ 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, 78, 71,
79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, 78, 71,
73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, 71, 128,
- 78, 77, 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76,
- 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128,
- 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52,
- 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49,
- 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48,
- 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76,
- 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128,
- 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49,
- 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, 78,
- 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, 128, 78, 74, 89, 84, 128,
- 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, 78, 74, 89, 80, 128, 78,
- 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, 82, 88, 128, 78, 74, 85,
- 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, 80, 128, 78, 74, 85, 79,
- 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, 81, 128, 78, 74, 85, 65,
- 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, 78, 74, 79, 84, 128, 78,
- 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, 79, 128, 78, 74, 73, 88,
- 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, 78, 74, 73, 69, 88, 128,
- 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, 128, 78, 74, 73, 69, 69,
- 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, 74, 201, 78, 74, 69, 85,
- 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, 85, 65, 69, 78, 65, 128,
- 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, 69, 69, 128, 78, 74, 69,
- 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, 74, 65, 81, 128, 78, 74,
- 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, 77, 128,
- 78, 74, 65, 65, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 84, 82, 69,
- 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, 78, 73, 80,
- 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, 78, 73, 78,
- 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, 69, 84, 69,
- 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, 73, 78,
- 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, 73, 77,
- 128, 78, 73, 205, 78, 73, 75, 72, 65, 72, 73, 84, 128, 78, 73, 75, 65,
- 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 73, 128, 78, 73, 72, 83,
- 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 78, 73,
- 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 71, 72,
- 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 128, 78,
- 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 78, 45,
- 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 79, 83,
- 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 85, 78,
- 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 83, 73,
- 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 78, 73,
- 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 67, 73,
- 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 72, 128,
- 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 73, 66,
- 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78, 72, 74,
- 65, 128, 78, 72, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86,
- 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, 71, 85,
- 79, 128, 78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71,
- 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128,
- 78, 71, 79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71,
- 79, 77, 128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207,
- 78, 71, 75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75,
- 85, 80, 128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71,
- 75, 85, 69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73,
- 78, 68, 201, 78, 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128,
- 78, 71, 75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78,
- 71, 75, 69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65,
- 80, 128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71,
- 73, 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71,
- 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85,
- 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, 71,
- 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77,
- 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65,
- 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 128, 78, 71, 71, 79,
- 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, 85,
- 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, 71, 69, 85, 65, 69,
- 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, 78, 71, 71, 69, 69,
- 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, 69, 69, 128, 78,
- 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, 65, 65, 77, 65, 69,
- 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128,
- 78, 71, 69, 85, 82, 69, 85, 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78,
- 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65,
- 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, 65, 80, 128, 78,
- 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78,
- 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69,
- 88, 128, 78, 69, 87, 83, 80, 65, 80, 69, 82, 128, 78, 69, 87, 76, 73, 78,
- 69, 128, 78, 69, 87, 128, 78, 69, 85, 84, 82, 65, 204, 78, 69, 85, 84,
- 69, 82, 128, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, 84, 69, 196, 78,
- 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 80,
- 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 65, 78, 79, 128, 78, 69,
- 78, 128, 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206,
- 78, 69, 71, 65, 84, 69, 196, 78, 69, 69, 128, 78, 69, 67, 75, 84, 73, 69,
- 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88,
- 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128,
- 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88,
- 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78,
- 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78,
- 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73,
- 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68,
- 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85,
- 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69,
- 128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68,
- 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77,
- 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65,
- 128, 78, 68, 65, 193, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, 78, 66,
- 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, 78, 66, 89,
- 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, 82, 88, 128,
- 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, 78, 66, 79,
- 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, 79, 128, 78,
- 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, 78, 66, 73,
- 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, 78, 66, 73,
- 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, 128, 78, 66, 65, 80, 128, 78,
- 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, 128, 78, 65, 89, 128, 78, 65,
- 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, 85, 84, 72, 83, 128, 78, 65,
- 85, 68, 73, 218, 78, 65, 84, 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65,
- 204, 78, 65, 83, 75, 65, 80, 201, 78, 65, 83, 72, 73, 128, 78, 65, 83,
- 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82,
- 128, 78, 65, 81, 128, 78, 65, 79, 211, 78, 65, 78, 83, 65, 78, 65, 81,
- 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, 79, 128, 78, 65, 78, 68, 128,
- 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, 78, 65, 77, 197, 78, 65, 77,
- 50, 128, 78, 65, 77, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65,
- 71, 82, 201, 78, 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71,
- 193, 78, 65, 71, 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65,
- 128, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 75, 83, 73,
- 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 65, 128, 78, 65,
- 193, 78, 65, 50, 128, 78, 48, 52, 50, 128, 78, 48, 52, 49, 128, 78, 48,
- 52, 48, 128, 78, 48, 51, 57, 128, 78, 48, 51, 56, 128, 78, 48, 51, 55,
- 65, 128, 78, 48, 51, 55, 128, 78, 48, 51, 54, 128, 78, 48, 51, 53, 65,
- 128, 78, 48, 51, 53, 128, 78, 48, 51, 52, 65, 128, 78, 48, 51, 52, 128,
- 78, 48, 51, 51, 65, 128, 78, 48, 51, 51, 128, 78, 48, 51, 50, 128, 78,
- 48, 51, 49, 128, 78, 48, 51, 48, 128, 78, 48, 50, 57, 128, 78, 48, 50,
- 56, 128, 78, 48, 50, 55, 128, 78, 48, 50, 54, 128, 78, 48, 50, 53, 65,
- 128, 78, 48, 50, 53, 128, 78, 48, 50, 52, 128, 78, 48, 50, 51, 128, 78,
- 48, 50, 50, 128, 78, 48, 50, 49, 128, 78, 48, 50, 48, 128, 78, 48, 49,
- 57, 128, 78, 48, 49, 56, 66, 128, 78, 48, 49, 56, 65, 128, 78, 48, 49,
- 56, 128, 78, 48, 49, 55, 128, 78, 48, 49, 54, 128, 78, 48, 49, 53, 128,
- 78, 48, 49, 52, 128, 78, 48, 49, 51, 128, 78, 48, 49, 50, 128, 78, 48,
- 49, 49, 128, 78, 48, 49, 48, 128, 78, 48, 48, 57, 128, 78, 48, 48, 56,
- 128, 78, 48, 48, 55, 128, 78, 48, 48, 54, 128, 78, 48, 48, 53, 128, 78,
- 48, 48, 52, 128, 78, 48, 48, 51, 128, 78, 48, 48, 50, 128, 78, 48, 48,
- 49, 128, 78, 45, 67, 82, 69, 197, 78, 45, 65, 82, 217, 77, 89, 88, 128,
- 77, 89, 84, 128, 77, 89, 83, 76, 73, 84, 69, 128, 77, 89, 80, 128, 77,
- 89, 65, 128, 77, 89, 193, 77, 89, 128, 77, 217, 77, 87, 79, 79, 128, 77,
- 87, 79, 128, 77, 87, 73, 73, 128, 77, 87, 73, 128, 77, 87, 69, 69, 128,
- 77, 87, 69, 128, 77, 87, 65, 65, 128, 77, 87, 65, 128, 77, 87, 128, 77,
- 215, 77, 86, 79, 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, 78,
- 71, 65, 77, 128, 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, 83,
- 73, 75, 65, 84, 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77,
- 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83,
- 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179,
- 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 82, 88, 128, 77, 85, 82,
- 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, 68, 65, 128, 77, 85,
- 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, 77, 128, 77, 85, 80,
- 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, 85, 79, 80, 128, 77,
- 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, 78, 83, 85, 66, 128,
- 77, 85, 78, 65, 72, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 77, 85, 76,
- 84, 73, 83, 69, 212, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79,
- 78, 128, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 206, 77, 85,
- 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77,
- 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 75, 80, 72,
- 82, 69, 78, 71, 128, 77, 85, 73, 78, 128, 77, 85, 71, 83, 128, 77, 85,
- 71, 128, 77, 85, 199, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67,
- 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, 85, 65, 69,
- 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77,
- 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, 128, 77, 79, 86, 73,
- 197, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, 79, 85, 84, 200,
- 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, 79, 85, 78, 84, 65, 73,
- 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, 85, 78, 84, 65,
- 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, 128, 77, 79, 85, 78,
- 196, 77, 79, 84, 72, 69, 82, 128, 77, 79, 84, 128, 77, 79, 82, 84, 85,
- 85, 77, 128, 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79,
- 71, 73, 67, 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128,
- 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79,
- 206, 77, 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128,
- 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 69, 78, 128, 77, 79, 78, 84, 72,
- 128, 77, 79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82, 128, 77, 79, 78,
- 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65, 67, 197, 77, 79,
- 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65, 80, 200, 77, 79,
- 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71, 82, 65, 205, 77,
- 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, 67, 85, 76, 65,
- 210, 77, 79, 78, 75, 69, 89, 128, 77, 79, 78, 75, 69, 217, 77, 79, 78,
- 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 81, 128, 77, 79, 78, 69,
- 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, 79, 72, 65, 77,
- 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 69, 83, 84, 89, 128,
- 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69,
- 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65,
- 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, 76,
- 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, 77,
- 73, 212, 77, 73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85,
- 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77,
- 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77,
- 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73,
- 77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85,
- 83, 128, 77, 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79,
- 78, 211, 77, 73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76,
- 204, 77, 73, 76, 75, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78,
- 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78,
- 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, 85,
- 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65,
- 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71,
- 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128,
- 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 77,
- 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, 80,
- 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, 78,
- 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, 77,
- 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, 80,
- 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, 197,
- 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, 197,
- 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82,
- 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82, 207, 77, 72, 90, 128, 77,
- 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82, 88,
- 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88, 128,
- 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77, 71,
- 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79, 128,
- 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, 69,
- 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128, 77,
- 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79,
- 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69,
- 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65,
- 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77,
- 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77,
- 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65,
- 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69,
- 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69,
- 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128,
- 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128,
- 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82,
- 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76,
- 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69,
- 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206,
- 77, 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69,
- 82, 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 68, 73, 65,
- 78, 83, 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82,
- 67, 85, 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77, 69, 78, 68, 85, 84,
- 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83,
- 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210,
- 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 77, 69, 205, 77,
- 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 69, 73, 90, 73,
- 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 72, 79, 78, 69,
- 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 85, 128, 77,
- 69, 69, 84, 69, 201, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77,
- 69, 69, 77, 128, 77, 69, 69, 69, 69, 128, 77, 69, 69, 128, 77, 69, 68,
- 73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69,
- 128, 77, 69, 68, 73, 67, 65, 204, 77, 69, 65, 84, 128, 77, 69, 65, 212,
- 77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69,
- 65, 83, 85, 82, 197, 77, 68, 85, 206, 77, 67, 72, 213, 77, 67, 72, 65,
- 206, 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128,
- 77, 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79,
- 128, 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73,
- 82, 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77,
- 66, 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69,
- 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66,
- 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89,
- 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84,
- 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128,
- 77, 66, 51, 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 65, 89, 69,
- 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, 65, 88, 73,
- 77, 65, 128, 77, 65, 88, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65,
- 84, 82, 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84,
- 128, 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83,
- 65, 71, 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65,
- 83, 72, 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85,
- 76, 73, 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 85, 75, 85, 128, 77,
- 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, 199, 77, 65, 82,
- 82, 73, 65, 71, 197, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52,
- 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128, 77, 65,
- 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 128, 77,
- 65, 82, 67, 65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 77, 65,
- 82, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 83, 73, 84, 69, 128, 77, 65,
- 82, 66, 85, 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128,
- 77, 65, 81, 65, 70, 128, 77, 65, 81, 128, 77, 65, 80, 76, 197, 77, 65,
- 80, 73, 81, 128, 77, 65, 208, 77, 65, 79, 128, 77, 65, 78, 83, 89, 79,
- 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, 218, 77,
- 65, 78, 78, 65, 128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 65, 78, 68,
- 65, 73, 76, 73, 78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72,
- 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197,
- 77, 65, 76, 69, 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 76, 197,
- 77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 77, 65, 73,
- 90, 69, 128, 77, 65, 73, 89, 65, 77, 79, 75, 128, 77, 65, 73, 84, 65, 73,
- 75, 72, 85, 128, 77, 65, 73, 82, 85, 128, 77, 65, 73, 77, 85, 65, 78,
- 128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76, 66, 79, 216,
- 77, 65, 73, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 128, 77, 65, 72,
- 74, 79, 78, 199, 77, 65, 72, 72, 65, 128, 77, 65, 72, 65, 80, 82, 65, 78,
- 65, 128, 77, 65, 72, 65, 80, 65, 75, 72, 128, 77, 65, 72, 65, 65, 80, 82,
- 65, 65, 78, 193, 77, 65, 72, 128, 77, 65, 71, 78, 73, 70, 89, 73, 78,
- 199, 77, 65, 69, 83, 73, 128, 77, 65, 69, 78, 89, 73, 128, 77, 65, 69,
- 78, 74, 69, 84, 128, 77, 65, 69, 77, 86, 69, 85, 88, 128, 77, 65, 69, 77,
- 75, 80, 69, 78, 128, 77, 65, 69, 77, 71, 66, 73, 69, 69, 128, 77, 65, 69,
- 77, 66, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 65, 128, 77, 65, 69,
- 77, 128, 77, 65, 69, 76, 69, 69, 128, 77, 65, 69, 75, 69, 85, 80, 128,
- 77, 65, 68, 89, 65, 128, 77, 65, 68, 85, 128, 77, 65, 68, 68, 65, 200,
- 77, 65, 68, 68, 65, 128, 77, 65, 68, 68, 193, 77, 65, 67, 82, 79, 78, 45,
- 71, 82, 65, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 66, 82, 69, 86, 69,
- 128, 77, 65, 67, 82, 79, 78, 45, 65, 67, 85, 84, 69, 128, 77, 65, 67, 82,
- 79, 78, 128, 77, 65, 67, 82, 79, 206, 77, 65, 67, 72, 73, 78, 69, 128,
- 77, 65, 65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 48, 52, 52,
- 128, 77, 48, 52, 51, 128, 77, 48, 52, 50, 128, 77, 48, 52, 49, 128, 77,
- 48, 52, 48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 51, 57, 128, 77, 48,
- 51, 56, 128, 77, 48, 51, 55, 128, 77, 48, 51, 54, 128, 77, 48, 51, 53,
- 128, 77, 48, 51, 52, 128, 77, 48, 51, 51, 66, 128, 77, 48, 51, 51, 65,
- 128, 77, 48, 51, 51, 128, 77, 48, 51, 50, 128, 77, 48, 51, 49, 65, 128,
- 77, 48, 51, 49, 128, 77, 48, 51, 48, 128, 77, 48, 50, 57, 128, 77, 48,
- 50, 56, 65, 128, 77, 48, 50, 56, 128, 77, 48, 50, 55, 128, 77, 48, 50,
- 54, 128, 77, 48, 50, 53, 128, 77, 48, 50, 52, 65, 128, 77, 48, 50, 52,
- 128, 77, 48, 50, 51, 128, 77, 48, 50, 50, 65, 128, 77, 48, 50, 50, 128,
- 77, 48, 50, 49, 128, 77, 48, 50, 48, 128, 77, 48, 49, 57, 128, 77, 48,
- 49, 56, 128, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 48, 49,
- 54, 65, 128, 77, 48, 49, 54, 128, 77, 48, 49, 53, 65, 128, 77, 48, 49,
- 53, 128, 77, 48, 49, 52, 128, 77, 48, 49, 51, 128, 77, 48, 49, 50, 72,
- 128, 77, 48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77, 48, 49, 50,
- 69, 128, 77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128, 77, 48, 49,
- 50, 66, 128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128, 77, 48, 49,
- 49, 128, 77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, 48, 57,
- 128, 77, 48, 48, 56, 128, 77, 48, 48, 55, 128, 77, 48, 48, 54, 128, 77,
- 48, 48, 53, 128, 77, 48, 48, 52, 128, 77, 48, 48, 51, 65, 128, 77, 48,
- 48, 51, 128, 77, 48, 48, 50, 128, 77, 48, 48, 49, 66, 128, 77, 48, 48,
- 49, 65, 128, 77, 48, 48, 49, 128, 76, 218, 76, 89, 89, 128, 76, 89, 88,
- 128, 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80,
- 128, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, 128, 76,
- 87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, 73, 128,
- 76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, 88, 128,
- 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, 80, 128, 76, 85, 79, 88,
- 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128, 76, 85,
- 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 76, 85, 205, 76, 85, 76,
- 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 128, 76, 85, 72, 128, 76,
- 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65,
- 204, 76, 85, 69, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, 85,
- 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69,
- 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87,
- 69, 210, 76, 79, 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128,
- 76, 79, 85, 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217,
- 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76,
- 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76,
- 79, 79, 84, 128, 76, 79, 79, 80, 128, 76, 79, 79, 78, 128, 76, 79, 79,
- 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, 128, 76, 79, 78, 71, 65,
- 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45,
- 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 83, 79, 204,
- 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, 83, 211, 76, 79, 78,
- 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, 76, 79, 78, 71, 45,
- 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, 76, 79, 78, 71, 45,
- 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, 65, 69, 128, 76, 79,
- 77, 128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, 80, 128, 76, 79, 76,
- 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, 79, 71,
- 79, 71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, 69, 83, 84, 79, 78, 69,
- 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, 76, 79, 67, 203, 76,
- 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79,
- 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, 128, 76, 74, 85, 68,
- 73, 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, 73, 88, 128, 76, 73,
- 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, 76, 197, 76, 73, 84,
- 84, 69, 210, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76,
- 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83,
- 84, 73, 67, 75, 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 203, 76,
- 73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211,
- 76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69,
- 45, 51, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128,
- 76, 73, 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77,
- 213, 76, 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78,
- 128, 76, 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 76, 89, 128,
- 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, 128, 76, 73, 73, 128, 76, 73,
- 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69,
- 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128,
- 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73,
- 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 82,
- 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 128,
- 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 65, 65,
- 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, 86, 69,
- 204, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80, 128, 76, 69, 85, 65,
- 69, 77, 128, 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82,
- 128, 76, 69, 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72,
- 65, 78, 128, 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 128, 76,
- 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67, 85,
- 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 71, 84, 72, 69, 78, 69,
- 82, 128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76, 69, 78,
- 71, 193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76, 69, 76,
- 69, 84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77, 77, 65,
- 128, 76, 69, 73, 77, 77, 193, 76, 69, 71, 83, 128, 76, 69, 71, 73, 79,
- 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 70, 84,
- 87, 65, 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72,
- 212, 76, 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68,
- 197, 76, 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80,
- 79, 73, 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196,
- 76, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73,
- 78, 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76,
- 69, 69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71, 69, 82, 128,
- 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, 76, 69, 65, 198,
- 76, 69, 65, 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, 128, 76, 69, 65,
- 196, 76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76,
- 65, 90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65,
- 87, 128, 76, 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218,
- 76, 65, 84, 73, 78, 65, 84, 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69,
- 82, 65, 204, 76, 65, 84, 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71,
- 69, 65, 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65,
- 82, 71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 80, 128,
- 76, 65, 207, 76, 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71,
- 197, 76, 65, 78, 69, 83, 128, 76, 65, 77, 69, 68, 72, 128, 76, 65, 77,
- 69, 68, 128, 76, 65, 77, 69, 196, 76, 65, 77, 69, 128, 76, 65, 77, 197,
- 76, 65, 77, 68, 65, 128, 76, 65, 77, 68, 128, 76, 65, 77, 66, 68, 193,
- 76, 65, 77, 65, 68, 72, 128, 76, 65, 76, 128, 76, 65, 204, 76, 65, 75,
- 75, 72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65,
- 78, 128, 76, 65, 201, 76, 65, 72, 83, 72, 85, 128, 76, 65, 71, 85, 83,
+ 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 48, 50, 48, 128, 78, 76,
+ 48, 49, 57, 128, 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128,
+ 78, 76, 48, 49, 55, 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53,
+ 128, 78, 76, 48, 49, 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49,
+ 50, 128, 78, 76, 48, 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48,
+ 48, 57, 128, 78, 76, 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76,
+ 48, 48, 54, 128, 78, 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128,
+ 78, 76, 48, 48, 52, 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50,
+ 128, 78, 76, 48, 48, 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75,
+ 207, 78, 75, 73, 78, 68, 73, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78,
+ 74, 89, 88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74,
+ 89, 82, 128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128,
+ 78, 74, 85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128,
+ 78, 74, 85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78,
+ 74, 85, 69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74,
+ 79, 88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79,
+ 128, 78, 74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74,
+ 73, 80, 128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74,
+ 73, 69, 80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74,
+ 73, 128, 78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128,
+ 78, 74, 69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78,
+ 74, 69, 69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74,
+ 69, 128, 78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77,
+ 76, 73, 128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88,
+ 128, 78, 73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85,
+ 71, 85, 128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69,
+ 84, 89, 128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78,
+ 128, 78, 73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82,
+ 84, 89, 128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78,
+ 68, 65, 178, 78, 73, 77, 128, 78, 73, 205, 78, 73, 75, 72, 65, 72, 73,
+ 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73,
+ 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128,
+ 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73,
+ 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88,
+ 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85,
+ 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73,
+ 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69,
+ 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78,
+ 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128,
+ 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45,
+ 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67,
+ 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78,
+ 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78,
+ 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128,
+ 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128,
+ 78, 71, 85, 79, 128, 78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69,
+ 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71,
+ 79, 84, 128, 78, 71, 79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78,
+ 128, 78, 71, 79, 77, 128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200,
+ 78, 71, 207, 78, 71, 75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78,
+ 128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85,
+ 77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85,
+ 197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73, 69, 69, 128, 78, 71,
+ 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85,
+ 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81,
+ 128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71,
+ 75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71,
+ 73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71, 87, 65, 69, 78, 128, 78,
+ 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, 79,
+ 81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, 71,
+ 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, 84,
+ 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69,
+ 206, 78, 71, 71, 85, 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128,
+ 78, 71, 71, 73, 128, 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65,
+ 69, 84, 128, 78, 71, 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78,
+ 71, 71, 69, 78, 128, 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69,
+ 69, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65,
+ 80, 128, 78, 71, 71, 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77,
+ 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85,
+ 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128,
+ 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85,
+ 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71,
+ 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71,
+ 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193,
+ 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65,
+ 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 128, 78,
+ 69, 85, 84, 82, 65, 204, 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 128,
+ 78, 69, 212, 78, 69, 83, 84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128,
+ 78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78,
+ 69, 207, 78, 69, 78, 65, 78, 79, 128, 78, 69, 78, 128, 78, 69, 76, 128,
+ 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71,
+ 65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 66, 69, 78, 83,
+ 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, 128, 78, 68, 85, 84, 128, 78,
+ 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, 78, 68, 85, 80, 128, 78, 68,
+ 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, 128, 78, 68, 79, 84, 128, 78,
+ 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, 68, 79, 78, 128, 78, 68, 79,
+ 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, 78, 68, 73,
+ 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, 80, 128, 78, 68, 73, 69, 88,
+ 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, 65, 128, 78, 68, 73, 65, 81,
+ 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, 88, 128, 78, 68, 69, 85, 84,
+ 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, 69, 80, 128, 78,
+ 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, 65, 88, 128, 78, 68, 65, 84,
+ 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, 128, 78, 68, 65, 65, 78, 71,
+ 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, 128, 78, 68, 65, 193, 78,
+ 66, 89, 88, 128, 78, 66, 89, 84, 128, 78, 66, 89, 82, 88, 128, 78, 66,
+ 89, 82, 128, 78, 66, 89, 80, 128, 78, 66, 89, 128, 78, 66, 85, 88, 128,
+ 78, 66, 85, 84, 128, 78, 66, 85, 82, 88, 128, 78, 66, 85, 82, 128, 78,
+ 66, 85, 80, 128, 78, 66, 85, 128, 78, 66, 79, 88, 128, 78, 66, 79, 84,
+ 128, 78, 66, 79, 80, 128, 78, 66, 79, 128, 78, 66, 73, 88, 128, 78, 66,
+ 73, 84, 128, 78, 66, 73, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 73,
+ 69, 80, 128, 78, 66, 73, 69, 128, 78, 66, 73, 128, 78, 66, 72, 128, 78,
+ 66, 65, 88, 128, 78, 66, 65, 84, 128, 78, 66, 65, 80, 128, 78, 66, 65,
+ 128, 78, 65, 89, 65, 78, 78, 65, 128, 78, 65, 89, 128, 78, 65, 88, 73,
+ 65, 206, 78, 65, 88, 128, 78, 65, 85, 84, 72, 83, 128, 78, 65, 85, 68,
+ 73, 218, 78, 65, 84, 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204,
+ 78, 65, 83, 75, 65, 80, 201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76,
+ 73, 90, 65, 84, 73, 79, 78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73,
+ 79, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78,
+ 65, 79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79,
+ 78, 84, 72, 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65,
+ 77, 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78,
+ 65, 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201,
+ 78, 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65,
+ 71, 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65,
+ 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 75, 83, 73, 75, 89, 65,
+ 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 193, 78, 65, 50, 128, 78, 65,
+ 45, 50, 128, 78, 48, 52, 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48,
+ 128, 78, 48, 51, 57, 128, 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128,
+ 78, 48, 51, 55, 128, 78, 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78,
+ 48, 51, 53, 128, 78, 48, 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48,
+ 51, 51, 65, 128, 78, 48, 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51,
+ 49, 128, 78, 48, 51, 48, 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128,
+ 78, 48, 50, 55, 128, 78, 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78,
+ 48, 50, 53, 128, 78, 48, 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50,
+ 50, 128, 78, 48, 50, 49, 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128,
+ 78, 48, 49, 56, 66, 128, 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128,
+ 78, 48, 49, 55, 128, 78, 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48,
+ 49, 52, 128, 78, 48, 49, 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49,
+ 128, 78, 48, 49, 48, 128, 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78,
+ 48, 48, 55, 128, 78, 48, 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48,
+ 52, 128, 78, 48, 48, 51, 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128,
+ 78, 45, 67, 82, 69, 197, 78, 45, 65, 82, 217, 77, 89, 88, 128, 77, 89,
+ 84, 128, 77, 89, 83, 76, 73, 84, 69, 128, 77, 89, 80, 128, 77, 89, 65,
+ 128, 77, 89, 193, 77, 89, 128, 77, 217, 77, 87, 79, 79, 128, 77, 87, 79,
+ 128, 77, 87, 73, 73, 128, 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87,
+ 69, 128, 77, 87, 65, 65, 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77,
+ 86, 83, 128, 77, 86, 79, 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65,
+ 69, 78, 71, 65, 77, 128, 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85,
+ 85, 83, 73, 75, 65, 84, 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74,
+ 193, 77, 85, 85, 128, 77, 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85,
+ 83, 73, 195, 77, 85, 83, 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51,
+ 128, 77, 85, 83, 72, 179, 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85,
+ 82, 88, 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85,
+ 82, 68, 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68,
+ 65, 77, 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128,
+ 77, 85, 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77,
+ 85, 78, 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 76, 84, 73, 83,
+ 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, 84, 73, 80, 76,
+ 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65,
+ 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79,
+ 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84,
+ 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, 78, 128, 77,
+ 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, 128, 77, 85,
+ 67, 72, 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65,
+ 78, 128, 77, 85, 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193,
+ 77, 213, 77, 83, 128, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79,
+ 88, 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72,
+ 128, 77, 79, 85, 84, 200, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197,
+ 77, 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78,
+ 128, 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85,
+ 78, 68, 128, 77, 79, 85, 78, 196, 77, 79, 84, 72, 69, 82, 128, 77, 79,
+ 84, 128, 77, 79, 82, 84, 85, 85, 77, 128, 77, 79, 82, 84, 65, 82, 128,
+ 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 65, 204, 77, 79, 82, 78, 73,
+ 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 83, 69, 45, 67, 82, 69, 197,
+ 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 79, 79, 77, 80, 85, 81, 128,
+ 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69,
+ 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78,
+ 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78,
+ 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78,
+ 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77,
+ 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128,
+ 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, 128, 77, 79,
+ 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69,
+ 81, 128, 77, 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76,
+ 128, 77, 79, 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79,
+ 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76,
+ 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77,
+ 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 83, 80, 128, 77,
+ 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 128, 77, 75, 80, 65, 82, 65,
+ 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 83, 82, 65, 128, 77, 73,
+ 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68,
+ 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79,
+ 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84,
+ 69, 82, 128, 77, 73, 78, 73, 77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67,
+ 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 73, 77, 69, 128, 77, 73, 77,
+ 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84, 128, 77,
+ 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73, 76, 128,
+ 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82,
+ 73, 128, 77, 73, 73, 78, 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69,
+ 88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69,
+ 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77,
+ 45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45,
+ 82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45,
+ 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77,
+ 73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77,
+ 45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67,
+ 128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69,
+ 85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77,
+ 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200,
+ 77, 73, 68, 68, 76, 197, 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80,
+ 69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82,
+ 207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, 128, 77, 72, 128, 77,
+ 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82, 88, 128, 77, 71,
+ 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88, 128, 77, 71, 85,
+ 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77, 71, 79, 88, 128,
+ 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79, 128, 77, 71, 207,
+ 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, 69, 88, 128, 77,
+ 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128, 77, 71, 66, 79,
+ 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79, 128, 77, 71,
+ 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69, 78, 128, 77,
+ 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65, 83, 65, 81,
+ 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77, 71, 65, 84,
+ 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77, 70, 79, 78,
+ 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65, 81, 128, 77,
+ 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69, 85, 81, 128,
+ 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69, 90, 90, 79,
+ 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128, 77, 69, 85,
+ 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128, 77, 69, 84,
+ 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82, 73, 65,
+ 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76, 85, 83,
+ 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69, 84, 65,
+ 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 77, 69,
+ 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, 197, 77, 69, 83, 79,
+ 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 79, 73, 84,
+ 73, 195, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69,
+ 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69,
+ 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77,
+ 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69,
+ 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69,
+ 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128,
+ 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77,
+ 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80,
+ 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82,
+ 85, 128, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, 69, 69, 77,
+ 128, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68,
+ 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73, 67, 65,
+ 204, 77, 69, 65, 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69,
+ 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77,
+ 68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77,
+ 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128, 77, 66,
+ 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79, 128, 77,
+ 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73, 82, 73,
+ 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77, 66, 69,
+ 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69, 128,
+ 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66, 69, 69,
+ 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89, 73, 128,
+ 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84, 128, 77, 66,
+ 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128, 77, 66, 51,
+ 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 65, 89, 65, 78, 78, 65,
+ 128, 77, 65, 89, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, 128, 77,
+ 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, 73, 88,
+ 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, 77, 65,
+ 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, 69,
+ 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, 70,
+ 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78,
+ 197, 77, 65, 82, 89, 128, 77, 65, 82, 85, 75, 85, 128, 77, 65, 82, 84,
+ 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, 199, 77, 65, 82, 82, 73, 65,
+ 71, 197, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77,
+ 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75, 45,
+ 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67,
+ 65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65,
+ 84, 79, 128, 77, 65, 82, 67, 65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85,
+ 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81,
+ 65, 70, 128, 77, 65, 81, 128, 77, 65, 80, 76, 197, 77, 65, 80, 73, 81,
+ 128, 77, 65, 208, 77, 65, 79, 128, 77, 65, 78, 83, 89, 79, 78, 128, 77,
+ 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, 218, 77, 65, 78, 78, 65,
+ 128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 65, 78, 68, 65, 73, 76, 73,
+ 78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65,
+ 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 77, 65, 76, 69,
+ 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 76, 197, 77, 65, 76, 65,
+ 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 77, 65, 75, 83, 85, 82,
+ 193, 77, 65, 73, 90, 69, 128, 77, 65, 73, 89, 65, 77, 79, 75, 128, 77,
+ 65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 73, 82, 85, 128, 77, 65, 73,
+ 77, 85, 65, 78, 128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76,
+ 66, 79, 216, 77, 65, 73, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78,
+ 128, 77, 65, 73, 128, 77, 65, 72, 74, 79, 78, 199, 77, 65, 72, 72, 65,
+ 128, 77, 65, 72, 65, 80, 82, 65, 78, 65, 128, 77, 65, 72, 65, 80, 65, 75,
+ 72, 128, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 77, 65, 72, 128,
+ 77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 69, 83, 73, 128, 77, 65,
+ 69, 78, 89, 73, 128, 77, 65, 69, 78, 74, 69, 84, 128, 77, 65, 69, 77, 86,
+ 69, 85, 88, 128, 77, 65, 69, 77, 75, 80, 69, 78, 128, 77, 65, 69, 77, 71,
+ 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 71, 66, 73, 69, 69, 128, 77, 65,
+ 69, 77, 66, 65, 128, 77, 65, 69, 77, 128, 77, 65, 69, 76, 69, 69, 128,
+ 77, 65, 69, 75, 69, 85, 80, 128, 77, 65, 68, 89, 65, 128, 77, 65, 68, 85,
+ 128, 77, 65, 68, 68, 65, 200, 77, 65, 68, 68, 65, 128, 77, 65, 68, 68,
+ 193, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, 128, 77, 65, 67, 82,
+ 79, 78, 45, 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 65, 67,
+ 85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 128, 77, 65, 67, 82, 79, 206,
+ 77, 65, 67, 72, 73, 78, 69, 128, 77, 65, 65, 89, 89, 65, 65, 128, 77, 65,
+ 65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 48, 52, 52, 128, 77,
+ 48, 52, 51, 128, 77, 48, 52, 50, 128, 77, 48, 52, 49, 128, 77, 48, 52,
+ 48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 51, 57, 128, 77, 48, 51, 56,
+ 128, 77, 48, 51, 55, 128, 77, 48, 51, 54, 128, 77, 48, 51, 53, 128, 77,
+ 48, 51, 52, 128, 77, 48, 51, 51, 66, 128, 77, 48, 51, 51, 65, 128, 77,
+ 48, 51, 51, 128, 77, 48, 51, 50, 128, 77, 48, 51, 49, 65, 128, 77, 48,
+ 51, 49, 128, 77, 48, 51, 48, 128, 77, 48, 50, 57, 128, 77, 48, 50, 56,
+ 65, 128, 77, 48, 50, 56, 128, 77, 48, 50, 55, 128, 77, 48, 50, 54, 128,
+ 77, 48, 50, 53, 128, 77, 48, 50, 52, 65, 128, 77, 48, 50, 52, 128, 77,
+ 48, 50, 51, 128, 77, 48, 50, 50, 65, 128, 77, 48, 50, 50, 128, 77, 48,
+ 50, 49, 128, 77, 48, 50, 48, 128, 77, 48, 49, 57, 128, 77, 48, 49, 56,
+ 128, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 48, 49, 54, 65,
+ 128, 77, 48, 49, 54, 128, 77, 48, 49, 53, 65, 128, 77, 48, 49, 53, 128,
+ 77, 48, 49, 52, 128, 77, 48, 49, 51, 128, 77, 48, 49, 50, 72, 128, 77,
+ 48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77, 48, 49, 50, 69, 128,
+ 77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128, 77, 48, 49, 50, 66,
+ 128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128, 77, 48, 49, 49, 128,
+ 77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, 48, 57, 128, 77,
+ 48, 48, 56, 128, 77, 48, 48, 55, 128, 77, 48, 48, 54, 128, 77, 48, 48,
+ 53, 128, 77, 48, 48, 52, 128, 77, 48, 48, 51, 65, 128, 77, 48, 48, 51,
+ 128, 77, 48, 48, 50, 128, 77, 48, 48, 49, 66, 128, 77, 48, 48, 49, 65,
+ 128, 77, 48, 48, 49, 128, 76, 218, 76, 89, 89, 128, 76, 89, 88, 128, 76,
+ 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80, 128, 76,
+ 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, 128, 76, 87, 79,
+ 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, 73, 128, 76, 87,
+ 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, 88, 128, 76, 85,
+ 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, 80, 128, 76, 85,
+ 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128,
+ 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 76, 85, 205, 76,
+ 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 128, 76, 85, 72,
+ 128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, 76, 128, 76, 85,
+ 71, 65, 204, 76, 85, 69, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128,
+ 76, 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82,
+ 69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197,
+ 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 69, 210, 76,
+ 79, 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85,
+ 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84,
+ 85, 83, 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82,
+ 65, 73, 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84,
+ 128, 76, 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76,
+ 79, 79, 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85,
+ 77, 128, 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71,
+ 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82,
+ 65, 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67,
+ 72, 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77,
+ 65, 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71,
+ 65, 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76,
+ 79, 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76,
+ 73, 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71,
+ 79, 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128,
+ 76, 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73,
+ 86, 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79,
+ 67, 203, 76, 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79,
+ 206, 76, 79, 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79,
+ 128, 76, 76, 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79,
+ 128, 76, 76, 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128,
+ 76, 76, 76, 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128,
+ 76, 76, 76, 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128,
+ 76, 76, 76, 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76,
+ 74, 128, 76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76,
+ 73, 84, 84, 76, 197, 76, 73, 84, 84, 69, 210, 76, 73, 84, 82, 193, 76,
+ 73, 84, 128, 76, 73, 83, 213, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196,
+ 76, 73, 81, 128, 76, 73, 80, 83, 84, 73, 67, 75, 128, 76, 73, 78, 75, 73,
+ 78, 199, 76, 73, 78, 203, 76, 73, 78, 71, 83, 65, 128, 76, 73, 78, 69,
+ 83, 128, 76, 73, 78, 69, 211, 76, 73, 78, 69, 45, 57, 128, 76, 73, 78,
+ 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 49,
+ 128, 76, 73, 77, 77, 85, 52, 128, 76, 73, 77, 77, 85, 50, 128, 76, 73,
+ 77, 77, 85, 128, 76, 73, 77, 77, 213, 76, 73, 77, 73, 84, 69, 196, 76,
+ 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, 73, 77, 73, 84, 128, 76, 73,
+ 77, 69, 128, 76, 73, 77, 66, 213, 76, 73, 76, 89, 128, 76, 73, 76, 73,
+ 84, 72, 128, 76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128,
+ 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, 71, 72, 84, 128, 76,
+ 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76, 73, 69,
+ 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128, 76, 73,
+ 66, 82, 65, 128, 76, 73, 66, 69, 82, 84, 89, 128, 76, 73, 65, 66, 73, 76,
+ 73, 84, 217, 76, 72, 73, 73, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73,
+ 128, 76, 72, 65, 199, 76, 72, 65, 65, 128, 76, 72, 128, 76, 69, 90, 72,
+ 128, 76, 69, 88, 128, 76, 69, 86, 69, 204, 76, 69, 85, 77, 128, 76, 69,
+ 85, 65, 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76,
+ 69, 213, 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128,
+ 76, 69, 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78,
+ 128, 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 128, 76, 69, 79,
+ 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65,
+ 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82,
+ 128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71,
+ 193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69,
+ 84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128,
+ 76, 69, 73, 77, 77, 193, 76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78,
+ 128, 76, 69, 71, 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 70, 84, 87,
+ 65, 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212,
+ 76, 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197,
+ 76, 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79,
+ 73, 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76,
+ 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78,
+ 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69,
+ 69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71, 69, 82, 128, 76,
+ 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, 76, 69, 65, 198, 76,
+ 69, 65, 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, 128, 76, 69, 65, 196,
+ 76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76, 65,
+ 90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65, 87,
+ 128, 76, 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218, 76,
+ 65, 84, 73, 78, 65, 84, 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82,
+ 65, 204, 76, 65, 84, 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69,
+ 65, 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65, 82,
+ 71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 80, 128, 76,
+ 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78,
+ 69, 83, 128, 76, 65, 77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76,
+ 65, 77, 69, 196, 76, 65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68,
+ 65, 128, 76, 65, 77, 68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65,
+ 68, 72, 128, 76, 65, 76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78,
+ 71, 89, 65, 79, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, 128, 76, 65,
+ 201, 76, 65, 72, 83, 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83,
128, 76, 65, 71, 213, 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76,
65, 71, 65, 66, 128, 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65,
69, 128, 76, 65, 68, 217, 76, 65, 67, 75, 128, 76, 65, 67, 65, 128, 76,
65, 66, 79, 85, 82, 73, 78, 71, 128, 76, 65, 66, 79, 82, 128, 76, 65, 66,
- 73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 76, 65, 66, 65, 84, 128, 76, 65,
- 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76,
- 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 48, 48, 54, 65, 128, 76, 48,
- 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69,
- 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75,
- 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89,
- 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87,
- 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65,
- 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88,
- 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75,
- 88, 65, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, 128, 75, 87,
- 79, 128, 75, 87, 73, 73, 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75,
- 87, 69, 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65,
- 65, 128, 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 85, 72,
- 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, 85, 50,
- 128, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, 79, 128, 75,
- 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, 82, 128, 75,
- 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, 128, 75,
- 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, 78, 71, 128,
- 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, 128, 75, 85,
- 204, 75, 85, 69, 84, 128, 75, 85, 55, 128, 75, 85, 52, 128, 75, 85, 180,
- 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, 83, 65, 128, 75, 83,
- 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, 75, 82, 65, 84, 73, 77, 79,
- 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, 65, 84, 73, 77, 79, 75, 79,
- 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65, 128, 75,
- 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, 75, 80, 79, 81, 128, 75, 80,
- 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 85, 88, 128,
- 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 82, 65, 81, 128, 75,
- 80, 65, 78, 128, 75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85,
- 128, 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79,
- 78, 73, 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195,
- 75, 79, 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80,
- 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, 75, 79,
- 79, 128, 75, 79, 78, 84, 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86, 77,
- 193, 75, 79, 77, 201, 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77, 66,
- 85, 86, 193, 75, 79, 77, 66, 213, 75, 79, 75, 79, 128, 75, 79, 75, 128,
- 75, 79, 203, 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71,
- 72, 79, 77, 128, 75, 79, 69, 84, 128, 75, 79, 65, 76, 65, 128, 75, 79,
- 65, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 78,
- 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76, 73,
- 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 193,
- 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, 75, 75, 79, 128, 75, 75,
- 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, 75, 75, 65, 128, 75, 75,
- 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, 45, 84, 73, 75, 69, 85, 84,
- 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79,
- 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, 69, 85, 76, 128, 75, 73, 89,
- 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, 73, 89, 69, 79, 75, 45, 78,
- 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, 45, 75, 72, 73, 69, 85, 75,
- 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, 73, 69, 85, 67, 72, 128, 75,
- 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, 73, 84, 128, 75, 73, 83, 83,
- 73, 78, 199, 75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77,
- 53, 128, 75, 73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65,
- 76, 128, 75, 73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69,
- 69, 84, 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75,
- 73, 82, 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73,
- 80, 128, 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68,
- 69, 82, 71, 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73,
- 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 75,
- 73, 69, 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75,
- 73, 67, 75, 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 85,
- 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 65, 84, 128,
- 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, 79, 78, 128, 75, 72, 79,
- 77, 85, 84, 128, 75, 72, 79, 128, 75, 72, 207, 75, 72, 73, 84, 128, 75,
- 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 79, 128, 75, 72,
- 72, 65, 128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69,
- 69, 128, 75, 72, 69, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75,
- 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72,
- 65, 78, 68, 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 72,
- 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72,
+ 73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 76, 65, 66, 73, 65, 204, 76, 65,
+ 66, 65, 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76,
+ 65, 65, 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 48,
+ 48, 54, 65, 128, 76, 48, 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76,
+ 45, 83, 72, 65, 80, 69, 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85,
+ 128, 75, 89, 79, 128, 75, 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128,
+ 75, 89, 69, 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75,
+ 89, 65, 128, 75, 88, 87, 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87,
+ 69, 128, 75, 88, 87, 65, 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128,
+ 75, 88, 79, 128, 75, 88, 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128,
+ 75, 88, 65, 65, 128, 75, 88, 65, 128, 75, 87, 85, 51, 49, 56, 128, 75,
+ 87, 79, 79, 128, 75, 87, 79, 128, 75, 87, 73, 73, 128, 75, 87, 73, 128,
+ 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 65, 89, 128, 75, 87, 65,
+ 69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, 75, 86, 128, 75, 85,
+ 88, 128, 75, 85, 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128,
+ 75, 85, 83, 72, 85, 50, 128, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69,
+ 73, 82, 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128,
+ 75, 85, 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75,
+ 85, 79, 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128,
+ 75, 85, 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85,
+ 76, 128, 75, 85, 204, 75, 85, 69, 84, 128, 75, 85, 55, 128, 75, 85, 52,
+ 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, 83,
+ 85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, 128, 75, 83, 83,
+ 79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, 75, 83, 83, 69,
+ 69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, 75, 83, 83, 65,
+ 73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, 75, 83, 83, 128,
+ 75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, 75, 82, 65, 84, 73,
+ 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, 65, 84, 73, 77, 79,
+ 75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65,
+ 128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, 75, 80, 79, 81, 128,
+ 75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 85,
+ 88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 82, 65, 81,
+ 128, 75, 80, 65, 78, 128, 75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86,
+ 85, 85, 128, 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79,
+ 82, 79, 78, 73, 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73,
+ 195, 75, 79, 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79,
+ 80, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, 75,
+ 79, 79, 128, 75, 79, 78, 84, 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86,
+ 77, 193, 75, 79, 77, 201, 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77,
+ 66, 85, 86, 193, 75, 79, 77, 66, 213, 75, 79, 75, 79, 128, 75, 79, 75,
+ 128, 75, 79, 203, 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79,
+ 71, 72, 79, 77, 128, 75, 79, 69, 84, 128, 75, 79, 65, 76, 65, 128, 75,
+ 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75,
+ 78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76,
+ 73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77,
+ 193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, 75, 75, 79, 128, 75,
+ 75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, 75, 75, 65, 128, 75,
+ 75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, 45, 84, 73, 75, 69, 85,
+ 84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69,
+ 79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, 69, 85, 76, 128, 75, 73,
+ 89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, 73, 89, 69, 79, 75, 45,
+ 78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, 45, 75, 72, 73, 69, 85,
+ 75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, 73, 69, 85, 67, 72, 128,
+ 75, 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, 73, 84, 128, 75, 73, 83,
+ 83, 73, 78, 199, 75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73,
+ 77, 53, 128, 75, 73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83,
+ 65, 76, 128, 75, 73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77,
+ 69, 69, 84, 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128,
+ 75, 73, 82, 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75,
+ 73, 80, 128, 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78,
+ 68, 69, 82, 71, 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75,
+ 73, 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128,
+ 75, 73, 69, 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196,
+ 75, 73, 67, 75, 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72,
+ 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 77,
+ 128, 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75,
+ 72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 128, 75, 72,
+ 207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128,
+ 75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 79, 128, 75,
+ 72, 72, 65, 128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72,
+ 69, 69, 128, 75, 72, 69, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201,
+ 75, 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75,
+ 72, 65, 78, 68, 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75,
+ 72, 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72,
128, 75, 72, 65, 200, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67,
65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68,
128, 75, 69, 88, 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83,
@@ -2141,71 +2287,74 @@ static unsigned char lexicon[] = {
69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, 75, 67, 65, 76, 128,
75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128,
75, 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 73, 128, 75, 65, 86,
- 89, 75, 65, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84,
- 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 84, 72, 65, 75,
- 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 65, 86, 193,
- 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 75,
- 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65,
- 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 76, 128, 75,
- 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 65, 82, 83, 72,
- 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 82, 207, 75,
- 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, 82, 65, 78,
- 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, 73, 69, 85,
- 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76, 128, 75, 65,
- 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75, 65, 80, 89,
- 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65, 128, 75, 65,
- 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75, 65, 80, 65,
- 76, 128, 75, 65, 80, 65, 128, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78,
- 71, 128, 75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52,
- 128, 75, 65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65,
- 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82,
- 73, 128, 75, 65, 73, 128, 75, 65, 201, 75, 65, 70, 65, 128, 75, 65, 70,
- 128, 75, 65, 198, 75, 65, 68, 53, 128, 75, 65, 68, 181, 75, 65, 68, 52,
- 128, 75, 65, 68, 51, 128, 75, 65, 68, 179, 75, 65, 68, 50, 128, 75, 65,
- 68, 128, 75, 65, 66, 193, 75, 65, 66, 128, 75, 65, 65, 73, 128, 75, 65,
- 65, 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 50, 128, 75, 65, 178, 75,
- 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, 48, 54, 128, 75, 48, 48,
- 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, 128, 75, 48, 48, 50, 128,
- 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, 85, 128, 74, 85, 84, 128,
- 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, 80,
- 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128, 74,
- 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128,
- 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 79, 85,
- 211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71,
- 128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 69, 68,
- 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 89, 88, 128, 74, 74,
- 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, 128,
- 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, 74,
- 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, 74,
- 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, 84,
- 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, 74,
- 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, 73,
- 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, 73,
- 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, 76,
- 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, 128, 74, 73, 65, 128,
- 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 78, 128, 74, 72, 65,
- 77, 128, 74, 72, 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, 76,
- 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, 128,
- 74, 69, 72, 128, 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, 69,
- 69, 77, 128, 74, 69, 65, 78, 83, 128, 74, 65, 89, 65, 78, 78, 65, 128,
- 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78,
- 69, 83, 197, 74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128,
- 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65,
- 68, 69, 128, 74, 65, 67, 75, 45, 79, 45, 76, 65, 78, 84, 69, 82, 78, 128,
- 74, 65, 67, 203, 74, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 202,
- 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73, 84, 83, 193, 73, 90, 72,
- 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89, 69, 75, 128, 73, 89, 65,
- 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, 211, 73, 84,
- 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82,
- 128, 73, 83, 79, 78, 128, 73, 83, 79, 206, 73, 83, 69, 78, 45, 73, 83,
- 69, 78, 128, 73, 83, 65, 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65,
- 128, 73, 82, 85, 89, 65, 78, 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78,
- 65, 128, 73, 82, 79, 78, 45, 67, 79, 80, 80, 69, 210, 73, 82, 79, 78,
- 128, 73, 79, 84, 73, 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73,
- 79, 84, 65, 128, 73, 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, 65,
- 68, 72, 128, 73, 78, 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84,
- 69, 68, 128, 73, 78, 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83,
- 197, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73,
+ 89, 75, 65, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85,
+ 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65,
+ 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84,
+ 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65,
+ 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65,
+ 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65,
+ 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75,
+ 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65,
+ 82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65,
+ 82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80,
+ 73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76,
+ 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75,
+ 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65,
+ 128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75,
+ 65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, 65, 78, 84, 65, 74, 193,
+ 75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75,
+ 65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79,
+ 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75,
+ 65, 73, 84, 72, 201, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65,
+ 201, 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53,
+ 128, 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65,
+ 68, 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65,
+ 66, 128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 65, 70,
+ 128, 75, 65, 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55,
+ 128, 75, 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75,
+ 48, 48, 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65,
+ 128, 74, 85, 85, 128, 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67,
+ 65, 84, 73, 79, 78, 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84,
+ 128, 74, 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74,
+ 85, 76, 89, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74,
+ 85, 68, 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200,
+ 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79,
+ 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74,
+ 79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74,
+ 89, 88, 128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128,
+ 74, 74, 85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74,
+ 74, 85, 82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74,
+ 85, 79, 80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88,
+ 128, 74, 74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74,
+ 73, 88, 128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69,
+ 88, 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73,
+ 69, 128, 74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74,
+ 65, 128, 74, 73, 76, 128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85,
+ 76, 73, 89, 65, 128, 74, 73, 65, 128, 74, 72, 79, 128, 74, 72, 69, 72,
+ 128, 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74,
+ 72, 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128,
+ 74, 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72,
+ 128, 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128,
+ 74, 69, 65, 78, 83, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73,
+ 89, 65, 78, 73, 128, 74, 65, 85, 128, 74, 65, 82, 128, 74, 65, 80, 65,
+ 78, 69, 83, 197, 74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89,
+ 128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74,
+ 65, 73, 128, 74, 65, 72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 45,
+ 79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73,
+ 77, 80, 76, 73, 70, 73, 69, 196, 202, 73, 90, 72, 73, 84, 83, 65, 128,
+ 73, 90, 72, 73, 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89,
+ 193, 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65,
+ 128, 73, 85, 128, 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73,
+ 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 78, 128, 73,
+ 83, 79, 206, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, 75, 73,
+ 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, 78, 65,
+ 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, 67, 79,
+ 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 79, 84, 73, 70, 73, 69, 196,
+ 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, 79, 84, 193, 73,
+ 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, 86, 73, 83, 73, 66,
+ 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, 86, 69, 82, 84, 69,
+ 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, 68, 85, 67, 69, 82,
+ 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73,
195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, 128, 73, 78, 84, 69,
82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73,
78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, 78, 84, 69,
@@ -2234,1226 +2383,1233 @@ static unsigned char lexicon[] = {
78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45,
65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82,
70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73,
- 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 73, 83, 69, 79, 211, 73, 77,
- 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 73, 77, 73, 70,
- 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, 65, 128, 73,
- 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 82, 71, 79, 78,
- 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, 128, 73, 76,
- 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, 76, 85, 84,
- 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, 51, 128,
- 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, 50, 128,
- 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, 73, 89,
- 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, 87, 83,
- 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, 85, 84,
- 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, 69, 85,
- 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85,
- 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, 73, 69,
- 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, 128, 73,
- 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, 71, 45,
- 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, 69, 85,
- 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, 73, 69,
- 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, 73, 205,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
- 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
- 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67,
- 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53,
- 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55,
- 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53,
- 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70,
- 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56,
- 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50,
- 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
- 45, 52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69,
- 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69,
- 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49,
- 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49,
- 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48,
- 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70,
- 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70,
- 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69,
- 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69,
- 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68,
- 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68,
- 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67,
- 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66,
- 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66,
- 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65,
- 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65,
- 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57,
- 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57,
- 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56,
- 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56,
- 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55,
- 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54,
- 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54,
- 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53,
- 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53,
- 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52,
- 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52,
- 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51,
- 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50,
- 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50,
- 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49,
- 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49,
- 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48,
- 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48,
- 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70,
- 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70,
- 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69,
- 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68,
- 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68,
- 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67,
- 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67,
- 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66,
- 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66,
- 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65,
- 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57,
- 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57,
- 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56,
- 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56,
- 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55,
- 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55,
- 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54,
- 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54,
- 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53,
- 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52,
- 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52,
- 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51,
- 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51,
- 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50,
- 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50,
- 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49,
- 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48,
- 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
- 50, 70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
- 56, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48,
- 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128,
- 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68,
- 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79,
- 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82,
- 65, 80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
- 72, 45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65,
- 84, 73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 72, 79,
- 85, 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83,
- 128, 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67,
- 45, 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65,
- 128, 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73,
- 48, 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48,
- 49, 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48,
- 48, 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54,
- 128, 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128,
- 73, 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45,
- 89, 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89,
- 69, 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45,
- 89, 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85,
- 128, 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73,
- 45, 65, 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90,
- 80, 128, 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90,
- 84, 128, 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72,
- 89, 80, 79, 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78,
- 65, 84, 73, 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128,
- 72, 89, 80, 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71,
- 128, 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79,
- 80, 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128,
- 72, 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73,
- 84, 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69,
- 84, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128,
- 72, 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65,
- 88, 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72,
- 87, 85, 128, 72, 87, 65, 73, 82, 128, 72, 86, 128, 72, 85, 82, 65, 78,
+ 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69,
+ 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206,
+ 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79,
+ 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65,
+ 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65,
+ 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73,
+ 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85,
+ 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76,
+ 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73,
+ 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71,
+ 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69,
+ 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73,
+ 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73,
+ 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80,
+ 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72,
+ 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78,
+ 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73,
+ 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128,
+ 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68,
+ 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68, 55,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54, 68,
+ 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69, 56,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 57,
+ 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 52,
+ 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 49,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 67,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 65,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128, 73,
+ 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+ 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49,
+ 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48,
+ 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70,
+ 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69,
+ 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68,
+ 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67,
+ 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65,
+ 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57,
+ 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56,
+ 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55,
+ 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54,
+ 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53,
+ 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52,
+ 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51,
+ 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49,
+ 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48,
+ 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70,
+ 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69,
+ 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68,
+ 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67,
+ 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66,
+ 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65,
+ 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56,
+ 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56,
+ 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55,
+ 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55,
+ 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54,
+ 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54,
+ 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53,
+ 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53,
+ 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52,
+ 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51,
+ 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51,
+ 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50,
+ 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50,
+ 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49,
+ 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49,
+ 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48,
+ 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55, 128,
+ 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73, 68,
+ 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69, 79,
+ 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71, 82,
+ 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80,
+ 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
+ 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70,
+ 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78,
+ 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 72, 79, 85, 128, 73,
+ 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 73, 67, 72,
+ 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 89, 82, 128,
+ 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 73, 48, 49, 53,
+ 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 49, 50, 128, 73,
+ 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 48, 65, 128, 73,
+ 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 57, 128, 73, 48,
+ 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 73, 48, 48, 53,
+ 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 48, 48, 51, 128,
+ 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 85, 128, 73, 45,
+ 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 128, 73, 45, 89,
+ 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 65, 128, 73, 45,
+ 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 73, 45, 66, 69,
+ 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 128, 72, 90,
+ 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 72, 90, 90,
+ 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 72, 90, 71,
+ 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 68, 73, 65,
+ 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 79, 206, 72,
+ 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 72, 69, 78,
+ 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, 128, 72, 88, 85, 79, 88,
+ 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, 128, 72, 88, 85, 79,
+ 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, 88, 79, 80, 128, 72,
+ 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, 128, 72, 88, 73, 80,
+ 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, 128, 72, 88, 73, 69,
+ 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, 88, 69, 88, 128, 72,
+ 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, 128, 72, 88, 65, 84,
+ 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, 85, 128, 72, 87, 65,
+ 73, 82, 128, 72, 86, 128, 72, 85, 83, 72, 69, 196, 72, 85, 82, 65, 78,
128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78,
68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77, 65, 78, 128, 72, 85, 77,
65, 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 66,
50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, 85, 65, 82, 65, 68, 68,
- 79, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65,
- 128, 72, 80, 128, 72, 79, 85, 83, 197, 72, 79, 85, 82, 71, 76, 65, 83,
- 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 211, 72, 79, 85, 82, 128, 72,
- 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 79, 84, 65, 128, 72, 79, 83,
- 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 128, 72, 79, 82, 83, 197,
- 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217,
- 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72,
- 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79,
- 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82,
- 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73,
- 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90,
- 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79,
- 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78,
- 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84,
- 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
- 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
- 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
- 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
- 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53,
- 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45,
- 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48,
- 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52,
- 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128,
- 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72,
- 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79,
- 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82,
- 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73,
- 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90,
- 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79,
- 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78,
- 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84,
- 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
- 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
- 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
- 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
- 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50,
- 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45,
- 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48,
- 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48,
- 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128,
- 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72,
- 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79,
- 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82,
- 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73,
- 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90,
- 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79,
- 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78,
- 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84,
- 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
- 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
- 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
- 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
- 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79,
- 82, 73, 128, 72, 79, 82, 193, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80,
- 128, 72, 79, 79, 78, 128, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79,
- 78, 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79,
- 84, 72, 69, 84, 73, 195, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78,
- 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128,
- 72, 79, 73, 128, 72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78,
- 85, 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 79, 88, 128, 72, 78, 79,
- 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128,
- 72, 78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128,
- 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78,
- 69, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128,
- 72, 78, 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89,
- 88, 128, 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80,
- 128, 72, 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77,
- 85, 82, 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85,
- 79, 88, 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85,
- 128, 72, 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72,
- 77, 79, 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80,
- 128, 72, 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69,
- 128, 72, 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65,
- 84, 128, 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72,
- 76, 89, 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76,
- 89, 80, 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128,
- 72, 76, 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72,
- 76, 85, 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72,
- 76, 85, 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128,
- 72, 76, 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76,
- 73, 69, 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76,
- 73, 128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72,
- 76, 65, 88, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65,
- 128, 72, 75, 128, 72, 73, 90, 66, 128, 72, 73, 83, 84, 79, 82, 73, 195,
- 72, 73, 82, 73, 81, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, 72, 73,
- 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, 72, 45,
- 72, 69, 69, 76, 69, 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83,
- 73, 79, 83, 128, 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73,
- 69, 85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73,
- 69, 85, 78, 128, 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73,
- 69, 85, 200, 72, 73, 69, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69,
- 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 73, 83, 67, 85, 83, 128, 72,
- 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128,
- 72, 72, 69, 128, 72, 72, 65, 65, 128, 72, 71, 128, 72, 69, 88, 73, 70,
- 79, 82, 205, 72, 69, 88, 65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78,
- 128, 72, 69, 82, 85, 84, 85, 128, 72, 69, 82, 85, 128, 72, 69, 82, 77,
- 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 69, 82,
- 77, 69, 83, 128, 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72,
- 69, 78, 71, 128, 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77,
- 69, 84, 128, 72, 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73,
- 67, 79, 80, 84, 69, 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72,
- 69, 73, 83, 69, 73, 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78,
- 76, 217, 72, 69, 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69,
- 65, 82, 84, 83, 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72,
- 69, 65, 82, 84, 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45,
- 69, 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65,
- 68, 83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69,
- 65, 68, 73, 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72,
- 66, 65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 86, 69, 128,
- 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 84, 72, 73, 128,
- 72, 65, 84, 69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65,
- 198, 72, 65, 83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82,
- 80, 79, 79, 78, 128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78,
- 73, 67, 128, 72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83,
- 83, 128, 72, 65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79,
- 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65,
- 78, 68, 211, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69,
- 128, 72, 65, 78, 68, 66, 65, 71, 128, 72, 65, 78, 68, 128, 72, 65, 78,
- 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 83, 84, 69,
- 210, 72, 65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77,
- 66, 85, 82, 71, 69, 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79,
- 128, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, 68, 128, 72, 65, 76,
- 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72, 65, 73, 82, 67, 85, 84,
- 128, 72, 65, 73, 82, 128, 72, 65, 71, 76, 65, 218, 72, 65, 71, 76, 128,
- 72, 65, 70, 85, 75, 72, 65, 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69,
- 71, 204, 72, 65, 65, 82, 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72,
- 65, 45, 72, 65, 128, 72, 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48,
- 48, 54, 65, 128, 72, 48, 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48,
- 52, 128, 72, 48, 48, 51, 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128,
- 72, 45, 84, 89, 80, 197, 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89,
- 79, 128, 71, 89, 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89,
- 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87,
- 85, 128, 71, 87, 73, 128, 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87,
- 65, 65, 128, 71, 87, 65, 128, 71, 86, 128, 71, 85, 82, 85, 83, 72, 128,
- 71, 85, 82, 85, 78, 128, 71, 85, 82, 65, 77, 85, 84, 79, 78, 128, 71, 85,
- 82, 55, 128, 71, 85, 78, 85, 128, 71, 85, 78, 213, 71, 85, 205, 71, 85,
- 76, 128, 71, 85, 73, 84, 65, 82, 128, 71, 85, 199, 71, 85, 69, 72, 128,
- 71, 85, 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, 65, 82, 68, 83,
- 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85,
- 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83,
- 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199,
- 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84,
- 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65,
- 206, 71, 82, 69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71,
- 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69,
- 82, 45, 84, 72, 65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65,
- 212, 71, 82, 65, 86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65,
- 67, 82, 79, 78, 128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71,
- 82, 65, 86, 69, 128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, 128,
- 71, 82, 65, 83, 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77,
- 197, 71, 82, 65, 80, 69, 83, 128, 71, 82, 65, 77, 77, 193, 71, 82, 65,
- 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82, 65, 67, 69,
- 128, 71, 82, 65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73,
- 75, 79, 206, 71, 79, 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73,
- 128, 71, 79, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79,
- 82, 71, 79, 206, 71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79,
- 79, 196, 71, 79, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71,
- 79, 73, 78, 199, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, 71,
- 79, 65, 204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, 86,
- 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 84, 84,
- 65, 204, 71, 76, 79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, 71,
- 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, 128,
- 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, 128,
- 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, 65,
- 128, 71, 73, 82, 76, 128, 71, 73, 82, 51, 128, 71, 73, 82, 179, 71, 73,
- 82, 50, 128, 71, 73, 82, 178, 71, 73, 80, 128, 71, 73, 78, 73, 73, 128,
- 71, 73, 77, 69, 76, 128, 71, 73, 77, 69, 204, 71, 73, 77, 128, 71, 73,
- 71, 65, 128, 71, 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66,
- 66, 79, 85, 211, 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71,
- 72, 90, 128, 71, 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72,
- 85, 78, 78, 193, 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83,
- 84, 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72,
- 69, 85, 88, 128, 71, 72, 69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85,
- 65, 69, 77, 128, 71, 72, 69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65,
- 69, 82, 65, 69, 128, 71, 72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128,
- 71, 72, 69, 84, 128, 71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197,
- 71, 72, 65, 89, 78, 128, 71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80,
- 128, 71, 72, 65, 78, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73,
- 78, 85, 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65,
- 68, 128, 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 72,
- 65, 128, 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69,
- 128, 71, 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128,
- 71, 71, 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71,
- 71, 85, 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128,
- 71, 71, 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71,
- 79, 80, 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69,
- 88, 128, 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88,
- 128, 71, 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71,
- 71, 65, 84, 128, 71, 71, 65, 65, 128, 71, 69, 84, 193, 71, 69, 83, 84,
- 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, 69, 83, 72, 84, 73, 78,
- 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, 50, 128, 71, 69, 82,
- 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, 206, 71, 69, 82, 69, 83,
- 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, 77, 69, 84, 82, 73, 67, 65,
- 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, 195, 71, 69, 78, 84, 76,
- 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, 69, 78, 73, 75, 201, 71,
- 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, 128, 71, 69, 77, 73, 78,
- 65, 84, 73, 79, 206, 71, 69, 205, 71, 69, 68, 79, 76, 65, 128, 71, 69,
- 68, 69, 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 82, 128, 71,
- 69, 65, 210, 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, 67, 65, 206,
- 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, 88, 128, 71,
- 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, 85, 82, 85, 78,
- 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, 84, 84, 65,
- 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, 65, 85, 78,
- 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, 71, 65, 84,
- 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, 65, 78,
- 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, 128, 71,
- 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, 65, 82, 51,
- 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, 65, 128, 71,
- 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, 50, 128, 71,
- 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, 128, 71, 65,
- 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, 77, 65, 78,
- 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 71, 128, 71,
- 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, 73, 76, 76, 65,
- 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, 196, 71, 65, 66,
- 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, 65, 178, 71, 48,
- 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, 71, 48, 53, 49,
- 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, 52, 56, 128, 71,
- 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, 65, 128, 71, 48,
- 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, 128, 71, 48, 52,
- 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, 48, 52, 48, 128,
- 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, 55, 65, 128, 71,
- 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, 54, 128, 71, 48,
- 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, 71, 48, 51, 50,
- 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, 50, 57, 128, 71,
- 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, 65, 128, 71, 48,
- 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, 71, 48, 50, 51,
- 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, 50, 48, 65, 128,
- 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, 56, 128, 71, 48,
- 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, 71, 48, 49, 52,
- 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, 49, 49, 65, 128,
- 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, 57, 128, 71, 48,
- 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, 65, 128, 71, 48,
- 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, 128, 71, 48, 48,
- 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, 48, 48, 50, 128,
- 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, 70, 89, 80, 128,
- 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, 70, 87, 69, 128,
- 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 85, 88, 128, 70, 85, 84, 128,
- 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, 85, 80,
- 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128,
- 70, 85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 76, 204, 70, 85, 74, 73,
- 128, 70, 85, 69, 84, 128, 70, 85, 69, 204, 70, 85, 69, 128, 70, 84, 72,
- 79, 82, 193, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, 73,
- 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84,
- 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 70, 82, 79,
- 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, 85, 128, 70,
- 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86,
- 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, 69, 78, 67,
- 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 195, 70, 82,
- 65, 77, 69, 128, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, 77,
- 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, 88, 128, 70,
- 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, 206, 70, 79,
- 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, 83, 84, 82,
- 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, 79, 85, 82,
- 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, 73, 78,
- 128, 70, 79, 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 84, 89, 128,
+ 79, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193,
+ 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197,
+ 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83,
+ 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72,
+ 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69,
+ 128, 72, 79, 82, 83, 197, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90,
+ 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
+ 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
+ 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54,
+ 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45,
+ 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48,
+ 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49,
+ 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128,
+ 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72,
+ 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79,
+ 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82,
+ 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73,
+ 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90,
+ 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79,
+ 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78,
+ 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84,
+ 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
+ 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
+ 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
+ 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
+ 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52,
+ 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45,
+ 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48,
+ 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52,
+ 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128,
+ 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72,
+ 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79,
+ 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82,
+ 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73,
+ 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90,
+ 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79,
+ 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78,
+ 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84,
+ 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
+ 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
+ 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
+ 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
+ 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49,
+ 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45,
+ 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48,
+ 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48,
+ 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128,
+ 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72,
+ 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79,
+ 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82,
+ 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73,
+ 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90,
+ 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79,
+ 78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, 193, 72, 79, 79,
+ 82, 85, 128, 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75,
+ 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, 69, 217, 72,
+ 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 72, 69, 84,
+ 73, 195, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76,
+ 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 73, 128,
+ 72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 79, 88, 128,
+ 72, 78, 85, 79, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, 128, 72, 78,
+ 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, 72, 78, 73, 80,
+ 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, 72, 78, 73, 69,
+ 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, 69, 88, 128, 72,
+ 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, 72, 78, 65, 84,
+ 128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 128, 72, 77,
+ 89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 72, 77, 89,
+ 128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 82, 88, 128,
+ 72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 88, 128, 72,
+ 77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 72, 77, 79,
+ 88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 79, 128, 72,
+ 77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 72, 77, 73,
+ 69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 72, 77, 73,
+ 128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 128, 72, 77,
+ 65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 89, 84, 128,
+ 72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 80, 128, 72,
+ 76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 76, 85, 82,
+ 88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 85, 79, 88,
+ 128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 85, 128, 72,
+ 76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 76, 73, 88,
+ 128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 69, 88, 128,
+ 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 128, 72, 76,
+ 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, 88, 128,
+ 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72, 75, 128,
+ 72, 73, 90, 66, 128, 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73, 81,
+ 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, 72, 45, 82, 69,
+ 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69,
+ 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128,
+ 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45,
+ 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128,
+ 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72,
+ 73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68,
+ 73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66,
+ 73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72,
+ 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, 65, 65, 128, 72,
+ 71, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, 65, 71, 82, 65,
+ 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 85, 128, 72,
+ 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 69, 82, 77, 73,
+ 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 82, 69, 128,
+ 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 78, 71, 128,
+ 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 84, 128, 72,
+ 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, 79, 80, 84, 69,
+ 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, 73, 83, 69, 73,
+ 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78, 76, 217, 72, 69,
+ 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69, 65, 82, 84, 83,
+ 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, 65, 82, 84,
+ 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45, 69, 86, 73,
+ 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84,
+ 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, 68, 73,
+ 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 65, 83,
+ 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 86, 69, 128, 72, 65, 85,
+ 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 84, 72, 73, 128, 72, 65, 84,
+ 69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65,
+ 83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78,
+ 128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128,
+ 72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72,
+ 65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65,
+ 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211,
+ 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78,
+ 68, 66, 65, 71, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84,
+ 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77,
+ 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69,
+ 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70,
+ 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82,
+ 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72,
+ 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, 65, 71, 76, 65,
+ 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, 128, 72, 65, 70,
+ 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, 85, 128, 72, 65,
+ 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 48, 48, 56, 128,
+ 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, 48, 54, 128, 72,
+ 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, 128, 72, 48, 48,
+ 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, 71, 89, 85, 128,
+ 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, 71, 89, 70, 213,
+ 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89,
+ 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, 71, 87, 69, 69,
+ 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, 128, 71, 86, 128,
+ 71, 85, 82, 85, 83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 65, 77,
+ 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, 85,
+ 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 73, 84, 65, 82, 128, 71,
+ 85, 199, 71, 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, 128, 71, 85,
+ 196, 71, 85, 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68,
+ 78, 69, 83, 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, 65, 82, 68,
+ 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69,
+ 210, 71, 83, 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87,
+ 73, 78, 199, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83,
+ 77, 65, 84, 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 73, 77, 65,
+ 67, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, 69, 69,
+ 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82,
+ 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206,
+ 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89,
+ 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82,
+ 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82,
+ 65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71,
+ 82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, 65, 80, 69, 83,
+ 128, 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68,
+ 85, 65, 84, 73, 79, 206, 71, 82, 65, 67, 69, 128, 71, 82, 65, 67, 197,
+ 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 71, 79, 82, 84,
+ 128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 71, 79, 83, 89,
+ 78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 71, 79, 82, 71,
+ 73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 78, 71, 128, 71,
+ 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79, 66, 76,
+ 73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, 79, 65, 128, 71,
+ 78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, 128, 71, 76, 79,
+ 87, 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, 79, 66, 197, 71,
+ 76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71,
+ 79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 71, 73, 88, 128, 71,
+ 73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 71, 73, 83, 65, 76,
+ 128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, 128, 71, 73, 82,
+ 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73,
+ 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77,
+ 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 69, 84, 128, 71,
+ 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, 73, 66, 65, 128,
+ 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, 87, 65, 128, 71,
+ 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, 72, 85, 128, 71,
+ 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, 128, 71, 72, 73,
+ 128, 71, 72, 72, 65, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, 78,
+ 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, 71,
+ 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, 85,
+ 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, 69,
+ 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, 65,
+ 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128, 71, 72, 65,
+ 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, 71, 72, 65, 73, 78, 128,
+ 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, 72, 65, 65, 77, 65, 69,
+ 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128,
+ 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71,
+ 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71,
+ 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71,
+ 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79,
+ 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128,
+ 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128,
+ 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71,
+ 65, 88, 128, 71, 71, 65, 84, 128, 71, 71, 65, 65, 128, 71, 69, 84, 193,
+ 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, 69, 83, 72,
+ 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, 50, 128,
+ 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, 206, 71, 69,
+ 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, 77, 69, 84, 82,
+ 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, 195, 71, 69, 78,
+ 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, 69, 78, 73, 75,
+ 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, 128, 71, 69,
+ 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, 71, 69, 68, 79, 76, 65,
+ 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65,
+ 82, 128, 71, 69, 65, 210, 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71,
+ 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85,
+ 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75,
+ 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73,
+ 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71,
+ 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128,
+ 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72,
+ 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78,
+ 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71,
+ 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77,
+ 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78,
+ 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65,
+ 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65,
+ 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65,
+ 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80,
+ 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, 71, 65,
+ 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, 128, 71,
+ 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, 50, 128,
+ 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, 71, 48,
+ 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, 52, 53,
+ 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, 51, 65,
+ 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, 128, 71,
+ 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, 48, 51,
+ 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, 48, 51,
+ 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, 51, 128,
+ 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, 71, 48,
+ 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, 50, 54,
+ 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, 52, 128,
+ 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, 71, 48,
+ 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, 48, 49,
+ 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, 53, 128,
+ 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, 71, 48,
+ 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, 48, 48,
+ 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, 48, 55,
+ 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, 48, 54,
+ 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, 128, 71,
+ 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, 84, 128,
+ 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128,
+ 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 86, 83, 51,
+ 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 85, 88, 128, 70, 85,
+ 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, 128, 70,
+ 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78,
+ 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83,
+ 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70,
+ 85, 69, 204, 70, 85, 69, 128, 70, 84, 72, 79, 82, 193, 70, 82, 79, 87,
+ 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, 73, 78, 199, 70, 82, 79, 87, 78,
+ 128, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84, 69, 196, 70, 82, 79, 78, 84,
+ 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, 205, 70, 82, 79, 71, 128, 70,
+ 82, 79, 199, 70, 82, 73, 84, 85, 128, 70, 82, 73, 69, 83, 128, 70, 82,
+ 73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66,
+ 79, 65, 82, 68, 128, 70, 82, 69, 78, 67, 200, 70, 82, 69, 69, 128, 70,
+ 82, 69, 197, 70, 82, 65, 78, 195, 70, 82, 65, 77, 69, 128, 70, 82, 65,
+ 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65,
+ 67, 84, 73, 79, 206, 70, 79, 88, 128, 70, 79, 85, 82, 84, 69, 69, 78,
+ 128, 70, 79, 85, 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82,
+ 84, 89, 128, 70, 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82,
+ 45, 80, 69, 82, 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79,
+ 85, 210, 70, 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 83, 84, 69, 82, 73,
+ 78, 71, 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, 82, 84, 89, 128,
70, 79, 82, 84, 217, 70, 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70,
79, 82, 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 82, 75, 69, 196, 70, 79,
82, 67, 69, 83, 128, 70, 79, 82, 67, 69, 128, 70, 79, 80, 128, 70, 79,
@@ -3462,384 +3618,389 @@ static unsigned char lexicon[] = {
128, 70, 79, 79, 84, 128, 70, 79, 79, 68, 128, 70, 79, 79, 128, 70, 79,
78, 71, 77, 65, 78, 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70,
79, 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79,
- 76, 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 77, 128, 70, 76, 89, 128,
- 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, 84, 69, 128, 70, 76,
- 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, 70, 76, 79, 87, 69,
- 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69,
- 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79,
- 82, 128, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 69,
- 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 45, 68, 69,
- 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, 84,
- 78, 69, 83, 83, 128, 70, 76, 65, 84, 128, 70, 76, 65, 212, 70, 76, 65,
- 71, 83, 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128,
- 70, 76, 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71,
- 45, 49, 128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70,
- 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70,
- 73, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73,
- 78, 197, 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73,
- 83, 84, 69, 196, 70, 73, 83, 84, 128, 70, 73, 83, 72, 73, 78, 199, 70,
- 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73,
- 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, 73,
- 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83,
- 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, 70, 73, 82,
- 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82,
- 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 65,
- 78, 67, 73, 65, 76, 128, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69,
- 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73,
- 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50,
- 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70,
- 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70,
- 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69,
- 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 72,
- 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128,
- 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73, 86, 65, 76,
- 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77,
- 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69,
- 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73, 78, 197, 70,
- 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69, 76, 76, 79, 87,
- 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213, 70, 69, 72, 128,
- 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 68, 128, 70, 69, 69,
- 196, 70, 69, 69, 128, 70, 69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 65,
- 84, 72, 69, 82, 128, 70, 69, 65, 84, 72, 69, 210, 70, 69, 65, 82, 78,
- 128, 70, 69, 65, 82, 70, 85, 204, 70, 69, 65, 82, 128, 70, 65, 89, 65,
- 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85,
- 69, 128, 70, 65, 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65,
- 84, 72, 65, 84, 65, 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84,
- 72, 65, 128, 70, 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 82, 83, 201,
- 70, 65, 81, 128, 70, 65, 80, 128, 70, 65, 78, 71, 128, 70, 65, 78, 69,
- 82, 79, 83, 73, 211, 70, 65, 78, 128, 70, 65, 77, 73, 76, 89, 128, 70,
- 65, 76, 76, 73, 78, 199, 70, 65, 76, 76, 69, 206, 70, 65, 73, 76, 85, 82,
- 69, 128, 70, 65, 73, 72, 85, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84,
- 128, 70, 65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65,
- 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69,
- 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128,
- 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77,
- 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53,
- 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49,
- 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48,
- 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128,
- 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70,
- 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48,
- 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48,
- 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128,
- 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70,
- 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51,
- 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48,
- 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70,
- 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50,
- 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49,
- 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70,
- 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49,
- 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50,
- 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70,
- 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48,
- 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128,
- 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 200, 69, 90, 69,
- 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, 89, 69, 83, 128, 69, 89, 69,
- 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128,
- 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83,
- 84, 82, 73, 65, 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82,
- 65, 45, 72, 73, 71, 200, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88,
- 84, 69, 78, 68, 69, 196, 69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 79,
- 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128,
- 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65,
- 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88,
- 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69,
- 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 82, 71, 82, 69, 69,
- 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206,
- 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79,
- 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69,
- 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128,
- 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69,
- 84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69, 82, 79,
- 206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 83, 85, 75, 85, 85, 68, 79,
- 128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84,
- 69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72,
- 178, 69, 83, 72, 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 45,
- 84, 69, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 196, 69, 82, 82,
- 128, 69, 82, 73, 78, 50, 128, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69,
- 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 68, 128, 69, 81, 85,
- 73, 65, 78, 71, 85, 76, 65, 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85,
- 65, 76, 211, 69, 81, 85, 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128,
- 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82,
- 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69,
- 78, 84, 72, 69, 84, 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 79,
- 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76,
+ 76, 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 207, 70, 77, 128, 70, 76,
+ 89, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, 84, 69,
+ 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, 70, 76,
+ 79, 87, 69, 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69,
+ 84, 84, 69, 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70,
+ 76, 79, 79, 82, 128, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128,
+ 70, 76, 69, 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82,
+ 45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70,
+ 76, 65, 84, 78, 69, 83, 83, 128, 70, 76, 65, 84, 128, 70, 76, 65, 212,
+ 70, 76, 65, 71, 83, 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45,
+ 52, 128, 70, 76, 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70,
+ 76, 65, 71, 45, 49, 128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76,
+ 65, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73,
+ 88, 128, 70, 73, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69,
+ 45, 76, 73, 78, 197, 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84,
+ 128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 84, 128, 70, 73, 83, 72, 73,
+ 78, 199, 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79,
+ 203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83,
+ 200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79,
+ 82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128,
+ 70, 73, 82, 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78,
+ 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70,
+ 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 76, 76, 69, 82, 128, 70, 73,
+ 76, 76, 69, 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197,
+ 70, 73, 73, 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82,
+ 69, 45, 50, 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82,
+ 197, 70, 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84,
+ 217, 70, 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70,
+ 84, 69, 69, 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68,
+ 128, 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69,
+ 85, 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73,
+ 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70,
+ 69, 82, 77, 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79,
+ 200, 70, 69, 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73,
+ 78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69,
+ 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213,
+ 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 68,
+ 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, 66, 82, 85, 65, 82, 89,
+ 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, 84, 72, 69, 210, 70,
+ 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, 70, 69, 65, 82, 128,
+ 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, 70, 65, 88, 128, 70,
+ 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, 84, 72, 69, 82, 128,
+ 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, 78, 128, 70, 65, 84,
+ 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, 65, 84, 72, 193, 70,
+ 65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, 128, 70, 65, 80, 128, 70,
+ 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128,
+ 70, 65, 77, 73, 76, 89, 128, 70, 65, 76, 76, 73, 78, 199, 70, 65, 76, 76,
+ 69, 206, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70,
+ 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, 79, 82, 89, 128,
+ 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, 197, 70, 65, 67,
+ 69, 45, 54, 128, 70, 65, 67, 69, 45, 53, 128, 70, 65, 67, 69, 45, 52,
+ 128, 70, 65, 67, 69, 45, 51, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65,
+ 67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69, 128, 70, 65, 65, 73, 128,
+ 70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128, 70, 48, 53, 50, 128, 70,
+ 48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128, 70, 48, 53, 49, 65, 128,
+ 70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70, 48, 52, 57, 128, 70, 48,
+ 52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48, 52, 55, 128, 70, 48, 52,
+ 54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52, 53, 65, 128, 70, 48, 52,
+ 53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51, 128, 70, 48, 52, 50, 128,
+ 70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70, 48, 51, 57, 128, 70, 48,
+ 51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48, 51, 55, 65, 128, 70, 48,
+ 51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51, 53, 128, 70, 48, 51, 52,
+ 128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128, 70, 48, 51, 49, 65, 128,
+ 70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70, 48, 50, 57, 128, 70, 48,
+ 50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50, 54, 128, 70, 48, 50, 53,
+ 128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128, 70, 48, 50, 50, 128, 70,
+ 48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70, 48, 50, 48, 128, 70, 48,
+ 49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49, 55, 128, 70, 48, 49, 54,
+ 128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128, 70, 48, 49, 51, 65, 128,
+ 70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70, 48, 49, 49, 128, 70, 48,
+ 49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48, 56, 128, 70, 48, 48, 55,
+ 128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128, 70, 48, 48, 52, 128, 70,
+ 48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48, 48, 49, 65, 128, 70, 48,
+ 48, 49, 128, 69, 90, 200, 69, 90, 69, 78, 128, 69, 90, 69, 206, 69, 90,
+ 128, 69, 89, 69, 83, 128, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128,
+ 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69,
+ 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, 204, 69, 88, 84,
+ 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, 71, 200, 69, 88,
+ 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88,
+ 80, 82, 69, 83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69,
+ 78, 212, 69, 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69,
+ 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88,
+ 67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84,
+ 73, 79, 206, 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83,
+ 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86,
+ 69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82,
+ 79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65,
+ 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82,
+ 207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, 69,
+ 85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, 69,
+ 85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, 69,
+ 84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, 89,
+ 128, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, 69, 83, 84,
+ 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, 196, 69, 83,
+ 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, 178, 69, 83, 72,
+ 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65,
+ 128, 69, 83, 45, 84, 69, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69,
+ 196, 69, 82, 82, 128, 69, 82, 73, 78, 50, 128, 69, 82, 71, 128, 69, 82,
+ 65, 83, 197, 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 68,
+ 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, 210, 69, 81, 85, 65, 76, 83,
+ 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, 65, 76, 128, 69, 80, 83, 73,
+ 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128,
+ 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69,
+ 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, 73, 195, 69, 80, 69, 71, 69, 82,
+ 77, 65, 128, 69, 79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, 88, 128,
+ 69, 79, 76, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76,
79, 80, 69, 128, 69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, 69, 82,
65, 84, 73, 79, 206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, 82, 89,
45, 49, 128, 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84,
72, 85, 83, 73, 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69,
128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78,
- 84, 69, 210, 69, 78, 81, 85, 73, 82, 89, 128, 69, 78, 79, 211, 69, 78,
- 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73,
- 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78,
- 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128,
- 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85,
- 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199, 69, 78, 67, 128, 69,
- 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78, 73, 79, 211, 69, 77,
- 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69, 77, 80, 72, 65, 83, 73,
- 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77,
- 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66,
- 69, 68, 68, 73, 78, 71, 128, 69, 76, 84, 128, 69, 76, 76, 73, 80, 83, 73,
- 83, 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69,
- 76, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69,
- 78, 128, 69, 76, 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128,
- 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69,
- 76, 69, 67, 84, 82, 73, 195, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83,
- 84, 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73,
- 84, 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 74, 69, 67, 212,
- 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 84, 217,
- 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71,
- 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84,
- 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73,
- 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, 84, 79, 76, 79, 71, 73, 67,
- 65, 204, 69, 71, 73, 82, 128, 69, 71, 71, 128, 69, 69, 89, 65, 78, 78,
- 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73,
- 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, 69, 68, 73, 78, 128, 69, 68,
- 68, 128, 69, 66, 69, 70, 73, 76, 73, 128, 69, 65, 83, 84, 69, 82, 206,
- 69, 65, 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128,
- 69, 65, 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65,
- 77, 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65,
- 68, 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69,
- 48, 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51,
- 52, 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50,
- 128, 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69,
- 48, 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48,
- 50, 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51,
- 128, 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128,
- 69, 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48,
- 49, 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48,
- 49, 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51,
- 128, 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69,
- 48, 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69,
- 48, 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48,
- 53, 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128,
- 69, 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 69, 128, 68,
- 90, 87, 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128,
- 68, 90, 73, 128, 68, 90, 72, 69, 128, 68, 90, 72, 65, 128, 68, 90, 69,
- 76, 79, 128, 68, 90, 69, 69, 128, 68, 90, 69, 128, 68, 90, 65, 65, 128,
- 68, 90, 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68,
- 89, 69, 72, 128, 68, 89, 69, 200, 68, 87, 79, 128, 68, 87, 69, 128, 68,
- 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68, 86, 68, 128, 68,
- 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75, 128, 68, 85, 83,
- 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, 82,
- 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85, 79, 88, 128, 68,
- 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128, 68, 85, 78, 179,
- 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85, 71, 85, 68, 128,
- 68, 85, 66, 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68,
- 82, 217, 68, 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 79, 80, 83, 128,
- 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, 68, 79,
- 87, 69, 196, 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69,
- 128, 68, 82, 73, 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68,
- 82, 69, 83, 83, 128, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77,
- 128, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, 206, 68, 82, 65,
- 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, 83, 128, 68, 82, 65, 67,
- 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, 68, 79, 87, 78, 87, 65, 82,
- 68, 83, 128, 68, 79, 87, 78, 87, 65, 82, 68, 211, 68, 79, 87, 78, 45, 80,
- 79, 73, 78, 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128,
- 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, 79, 85,
- 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, 79, 85,
- 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, 68, 79,
- 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, 68, 79,
- 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, 84, 84,
- 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, 128,
- 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, 79, 84,
- 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, 84, 83,
- 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, 53, 55,
- 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, 54, 56,
- 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 53, 54,
- 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, 128,
- 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, 128, 68,
- 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, 128, 68, 79,
- 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 128, 68,
- 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, 128, 68, 79,
- 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 128, 68,
- 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55,
- 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 52,
- 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, 45, 52,
- 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, 56,
- 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56,
- 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 54,
- 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, 53, 56,
- 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53,
- 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51,
- 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, 79, 84,
- 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, 84, 83,
- 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, 79, 84,
- 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, 68, 79,
- 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55,
- 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, 52, 53,
- 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45,
- 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, 68, 79,
- 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53,
- 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45,
- 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, 45, 51,
- 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, 56,
- 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56,
- 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 54,
- 55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 84, 83, 45, 50, 53, 56,
- 128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53,
- 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50,
- 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84,
- 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83,
- 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84,
- 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79,
- 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55,
- 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53,
- 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45,
- 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79,
- 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53,
- 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45,
- 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50,
- 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45,
- 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83,
- 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68,
- 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128,
- 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51,
- 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83,
- 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55,
- 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51,
- 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50,
- 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84,
- 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55,
- 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45,
- 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79,
- 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52,
- 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84,
- 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52,
- 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84,
- 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79,
- 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45,
- 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49,
- 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54,
- 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49,
- 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53,
- 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49,
- 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84,
- 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79,
- 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84,
- 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79,
- 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56,
- 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52,
- 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49,
- 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84,
- 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55,
- 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45,
- 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83,
- 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45,
- 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83,
- 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68,
- 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128,
- 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53,
- 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45,
- 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128,
- 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51,
- 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49,
- 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84,
- 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128,
- 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49,
- 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84,
- 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55,
- 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45,
- 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55,
- 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83,
- 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68,
- 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79,
- 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68,
- 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128,
- 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50,
- 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49,
- 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84,
- 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128,
- 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49,
- 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84,
- 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79,
- 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55,
- 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49,
- 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68,
- 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53,
- 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83,
- 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56,
- 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83,
- 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54,
- 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50,
- 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49,
- 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84,
- 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55,
- 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45,
- 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79,
- 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51,
- 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84,
- 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51,
- 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84,
- 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128,
- 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49,
- 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68,
- 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49,
- 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68,
- 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50,
- 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128,
- 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45,
- 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52,
- 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79,
- 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52,
- 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50,
- 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76,
- 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78,
- 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 68, 79, 76, 80,
- 72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68, 79, 76, 76, 65, 210, 68,
- 79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73, 128, 68, 79, 73, 84,
- 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 68, 79, 68, 69, 75,
- 65, 84, 65, 128, 68, 79, 66, 82, 79, 128, 68, 79, 65, 67, 72, 65, 83, 72,
- 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 197, 68, 79, 65,
- 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 76, 85, 128, 68, 76,
- 79, 128, 68, 76, 73, 128, 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76,
- 128, 68, 75, 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128,
- 68, 74, 69, 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 74, 128,
- 68, 73, 90, 90, 217, 68, 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73,
- 79, 78, 128, 68, 73, 86, 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84,
- 73, 79, 78, 128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69,
- 82, 128, 68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69, 128, 68,
- 73, 86, 73, 68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69, 128, 68, 73,
- 84, 84, 207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128, 68, 73, 83, 84,
- 73, 78, 71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76, 76, 128, 68, 73,
- 83, 83, 79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79, 76, 86, 69, 128,
- 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, 75, 128, 68, 73,
- 83, 73, 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84,
- 73, 78, 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73,
- 78, 84, 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, 193,
- 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65,
- 204, 68, 73, 80, 84, 69, 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80,
- 76, 79, 85, 78, 128, 68, 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68,
- 73, 78, 71, 66, 65, 212, 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128,
- 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78,
- 85, 84, 73, 79, 78, 45, 50, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78,
- 45, 49, 128, 68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73,
- 77, 73, 68, 73, 193, 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73,
- 77, 69, 78, 83, 73, 79, 206, 68, 73, 77, 50, 128, 68, 73, 76, 128, 68,
- 73, 71, 82, 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82,
- 65, 77, 77, 79, 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65,
- 205, 68, 73, 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79,
- 206, 68, 73, 71, 65, 77, 77, 65, 128, 68, 73, 71, 193, 68, 73, 70, 84,
- 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, 65, 83, 128, 68, 73, 70, 70,
- 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, 67, 85, 76, 84, 73, 69, 83,
- 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, 65, 76, 128, 68, 73, 70, 70,
- 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, 128, 68, 73, 69, 83, 73, 83,
- 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73,
- 66, 128, 68, 73, 65, 84, 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75,
- 201, 68, 73, 65, 83, 84, 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83,
- 128, 68, 73, 65, 77, 79, 78, 68, 128, 68, 73, 65, 77, 79, 78, 196, 68,
- 73, 65, 77, 69, 84, 69, 210, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68,
- 73, 65, 76, 89, 84, 73, 75, 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68,
- 73, 65, 71, 79, 78, 65, 76, 128, 68, 73, 65, 71, 79, 78, 65, 204, 68, 73,
- 65, 69, 82, 69, 83, 73, 90, 69, 196, 68, 73, 65, 69, 82, 69, 83, 73, 83,
- 128, 68, 73, 65, 69, 82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, 72,
- 79, 79, 128, 68, 72, 79, 128, 68, 72, 73, 128, 68, 72, 72, 85, 128, 68,
- 72, 72, 79, 79, 128, 68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72,
- 72, 69, 69, 128, 68, 72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69,
- 69, 128, 68, 72, 65, 82, 77, 65, 128, 68, 72, 65, 76, 69, 84, 72, 128,
- 68, 72, 65, 76, 65, 84, 72, 128, 68, 72, 65, 76, 128, 68, 72, 65, 68, 72,
- 69, 128, 68, 72, 65, 65, 76, 85, 128, 68, 72, 65, 128, 68, 69, 90, 200,
+ 84, 69, 210, 69, 78, 81, 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78,
+ 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84,
+ 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78,
+ 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69,
+ 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69,
+ 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199,
+ 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78,
+ 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69,
+ 77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128,
+ 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69,
+ 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 69, 76, 84, 128,
+ 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69,
+ 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69,
+ 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76,
+ 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69,
+ 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82,
+ 73, 195, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, 82, 69, 80, 84,
+ 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, 73, 75, 79, 78,
+ 128, 69, 75, 65, 82, 65, 128, 69, 74, 69, 67, 212, 69, 73, 83, 128, 69,
+ 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 84, 217, 69, 73, 71, 72, 84, 72,
+ 83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71, 72, 84, 72, 128, 69,
+ 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84, 69, 69, 206, 69, 73,
+ 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73, 69, 128, 69, 72, 87,
+ 65, 218, 69, 71, 89, 80, 84, 79, 76, 79, 71, 73, 67, 65, 204, 69, 71, 73,
+ 82, 128, 69, 71, 71, 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, 75,
+ 65, 65, 128, 69, 69, 72, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128,
+ 69, 68, 73, 84, 79, 82, 73, 65, 204, 69, 68, 73, 78, 128, 69, 68, 68,
+ 128, 69, 66, 69, 70, 73, 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69,
+ 65, 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69,
+ 65, 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77,
+ 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68,
+ 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48,
+ 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52,
+ 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128,
+ 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48,
+ 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50,
+ 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128,
+ 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69,
+ 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49,
+ 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49,
+ 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128,
+ 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48,
+ 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48,
+ 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53,
+ 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69,
+ 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 69, 128, 68, 90,
+ 90, 65, 128, 68, 90, 87, 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68,
+ 90, 74, 69, 128, 68, 90, 73, 128, 68, 90, 72, 69, 128, 68, 90, 72, 65,
+ 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 69, 128, 68, 90, 69, 128, 68,
+ 90, 65, 65, 128, 68, 90, 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128,
+ 68, 89, 207, 68, 89, 69, 72, 128, 68, 89, 69, 200, 68, 87, 79, 128, 68,
+ 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68,
+ 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75,
+ 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78,
+ 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85,
+ 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128,
+ 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85,
+ 71, 85, 68, 128, 68, 85, 66, 50, 128, 68, 85, 66, 128, 68, 85, 194, 68,
+ 82, 89, 128, 68, 82, 217, 68, 82, 85, 77, 128, 68, 82, 85, 205, 68, 82,
+ 79, 80, 83, 128, 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83,
+ 72, 65, 68, 79, 87, 69, 196, 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82,
+ 73, 86, 69, 128, 68, 82, 73, 86, 197, 68, 82, 73, 78, 75, 128, 68, 82,
+ 73, 204, 68, 82, 69, 83, 83, 128, 68, 82, 65, 85, 71, 72, 84, 211, 68,
+ 82, 65, 77, 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82,
+ 65, 71, 79, 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77,
+ 65, 83, 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77,
+ 193, 68, 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 87, 65, 82,
+ 68, 211, 68, 79, 87, 78, 45, 80, 79, 73, 78, 84, 73, 78, 199, 68, 79, 87,
+ 78, 128, 68, 79, 86, 69, 128, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68,
+ 79, 85, 66, 84, 128, 68, 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69,
+ 45, 76, 73, 78, 197, 68, 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68,
+ 79, 85, 66, 76, 69, 128, 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84,
+ 84, 69, 68, 45, 78, 128, 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84,
+ 84, 69, 68, 128, 68, 79, 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128,
+ 68, 79, 84, 83, 45, 55, 56, 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84,
+ 83, 45, 54, 56, 128, 68, 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83,
+ 45, 54, 55, 128, 68, 79, 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56,
+ 128, 68, 79, 84, 83, 45, 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55,
+ 128, 68, 79, 84, 83, 45, 53, 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55,
+ 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54,
+ 128, 68, 79, 84, 83, 45, 53, 128, 68, 79, 84, 83, 45, 52, 56, 128, 68,
+ 79, 84, 83, 45, 52, 55, 56, 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79,
+ 84, 83, 45, 52, 54, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68,
+ 79, 84, 83, 45, 52, 54, 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79,
+ 84, 83, 45, 52, 53, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68,
+ 79, 84, 83, 45, 52, 53, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128,
+ 68, 79, 84, 83, 45, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53,
+ 54, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52,
+ 53, 128, 68, 79, 84, 83, 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128,
+ 68, 79, 84, 83, 45, 51, 55, 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68,
+ 79, 84, 83, 45, 51, 54, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128,
+ 68, 79, 84, 83, 45, 51, 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68,
+ 79, 84, 83, 45, 51, 53, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128,
+ 68, 79, 84, 83, 45, 51, 53, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56,
+ 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51,
+ 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45,
+ 51, 53, 128, 68, 79, 84, 83, 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51,
+ 52, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45,
+ 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79,
+ 84, 83, 45, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68,
+ 79, 84, 83, 45, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55,
+ 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51,
+ 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68,
+ 79, 84, 83, 45, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53,
+ 54, 128, 68, 79, 84, 83, 45, 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52,
+ 128, 68, 79, 84, 83, 45, 51, 128, 68, 79, 84, 83, 45, 50, 56, 128, 68,
+ 79, 84, 83, 45, 50, 55, 56, 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79,
+ 84, 83, 45, 50, 54, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68,
+ 79, 84, 83, 45, 50, 54, 55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79,
+ 84, 83, 45, 50, 53, 56, 128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68,
+ 79, 84, 83, 45, 50, 53, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128,
+ 68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53,
+ 54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50,
+ 53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52,
+ 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50,
+ 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84,
+ 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79,
+ 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56,
+ 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52,
+ 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79,
+ 84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54,
+ 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52,
+ 128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55,
+ 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51,
+ 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83,
+ 45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84,
+ 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128,
+ 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53,
+ 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84,
+ 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128,
+ 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56,
+ 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50,
+ 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84,
+ 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54,
+ 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50,
+ 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68,
+ 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52,
+ 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68,
+ 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51,
+ 52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83,
+ 45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45,
+ 50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56,
+ 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56,
+ 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54,
+ 55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56,
+ 128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53,
+ 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49,
+ 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84,
+ 83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83,
+ 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84,
+ 83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79,
+ 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55,
+ 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53,
+ 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45,
+ 49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79,
+ 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53,
+ 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45,
+ 49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49,
+ 51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45,
+ 49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83,
+ 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68,
+ 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128,
+ 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51,
+ 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83,
+ 45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55,
+ 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51,
+ 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49,
+ 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84,
+ 83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55,
+ 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45,
+ 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79,
+ 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52,
+ 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84,
+ 83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52,
+ 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84,
+ 83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79,
+ 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84,
+ 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79,
+ 84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56,
+ 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50,
+ 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49,
+ 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84,
+ 83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55,
+ 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45,
+ 49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83,
+ 45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68,
+ 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54,
+ 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83,
+ 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68,
+ 79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52,
+ 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84,
+ 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53,
+ 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79,
+ 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53,
+ 128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51,
+ 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45,
+ 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79,
+ 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51,
+ 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45,
+ 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128,
+ 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50,
+ 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128,
+ 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49,
+ 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84,
+ 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55,
+ 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45,
+ 49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55,
+ 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83,
+ 45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56,
+ 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83,
+ 45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53,
+ 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68,
+ 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49,
+ 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68,
+ 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128,
+ 68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84,
+ 83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79,
+ 82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65,
+ 73, 206, 68, 79, 76, 80, 72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68,
+ 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73,
+ 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211,
+ 68, 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 66, 82, 79, 128, 68, 79, 65,
+ 67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77,
+ 69, 197, 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68,
+ 76, 85, 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128,
+ 68, 76, 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128,
+ 68, 75, 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68,
+ 74, 69, 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90,
+ 217, 68, 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128,
+ 68, 73, 86, 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78,
+ 128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128,
+ 68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69, 128, 68, 73, 86, 73,
+ 68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84,
+ 207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78,
+ 71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83,
+ 79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73,
+ 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, 75, 128, 68, 73, 83, 73,
+ 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78,
+ 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84,
+ 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73,
+ 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65, 204, 68,
+ 73, 80, 84, 69, 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85,
+ 78, 128, 68, 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71,
+ 66, 65, 212, 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77,
+ 73, 78, 85, 84, 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73,
+ 79, 78, 45, 50, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128,
+ 68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68,
+ 73, 193, 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78,
+ 83, 73, 79, 206, 68, 73, 77, 50, 128, 68, 73, 76, 128, 68, 73, 71, 82,
+ 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, 77, 77,
+ 79, 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, 205, 68,
+ 73, 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, 206, 68, 73,
+ 71, 65, 77, 77, 65, 128, 68, 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79,
+ 211, 68, 73, 70, 79, 78, 73, 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76,
+ 84, 217, 68, 73, 70, 70, 73, 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70,
+ 70, 69, 82, 69, 78, 84, 73, 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78,
+ 67, 197, 68, 73, 70, 65, 84, 128, 68, 73, 69, 83, 73, 83, 128, 68, 73,
+ 69, 83, 73, 211, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68,
+ 73, 65, 84, 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73,
+ 65, 83, 84, 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65,
+ 77, 79, 78, 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84,
+ 69, 210, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84,
+ 73, 75, 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78,
+ 65, 76, 128, 68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83,
+ 73, 90, 69, 196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69,
+ 82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72,
+ 79, 128, 68, 72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128,
+ 68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68,
+ 72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65,
+ 82, 77, 65, 128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, 65, 84,
+ 72, 128, 68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, 72, 65,
+ 65, 76, 85, 128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, 90, 200,
68, 69, 89, 84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, 211, 68, 69,
88, 73, 65, 128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, 76, 79, 80, 77,
69, 78, 84, 128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 203, 68, 69, 83,
@@ -3879,161 +4040,164 @@ static unsigned char lexicon[] = {
68, 65, 89, 65, 78, 78, 65, 128, 68, 68, 65, 88, 128, 68, 68, 65, 84,
128, 68, 68, 65, 80, 128, 68, 68, 65, 76, 128, 68, 68, 65, 204, 68, 68,
65, 72, 65, 76, 128, 68, 68, 65, 72, 65, 204, 68, 68, 65, 65, 128, 68,
- 194, 68, 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 86,
- 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, 65, 84, 197, 68,
- 65, 83, 73, 65, 128, 68, 65, 83, 72, 69, 196, 68, 65, 83, 72, 128, 68,
- 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, 68, 65, 82, 84, 128, 68, 65,
- 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82, 75, 69, 78, 73, 78, 199, 68,
- 65, 82, 203, 68, 65, 82, 71, 65, 128, 68, 65, 82, 65, 52, 128, 68, 65,
- 82, 65, 51, 128, 68, 65, 82, 128, 68, 65, 80, 45, 80, 82, 65, 205, 68,
- 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, 77, 85, 79, 217, 68, 65, 80, 45,
- 66, 85, 79, 206, 68, 65, 80, 45, 66, 69, 201, 68, 65, 208, 68, 65, 78,
- 84, 65, 74, 193, 68, 65, 78, 71, 79, 128, 68, 65, 78, 71, 128, 68, 65,
- 78, 199, 68, 65, 78, 68, 65, 128, 68, 65, 78, 67, 69, 82, 128, 68, 65,
- 77, 80, 128, 68, 65, 77, 208, 68, 65, 77, 77, 65, 84, 65, 78, 128, 68,
- 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, 77, 65, 128, 68, 65, 77, 77,
- 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, 76, 69, 84, 72, 128, 68, 65,
- 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, 68, 65,
- 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, 68, 65, 76, 65, 84, 128,
- 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128, 68, 65, 72, 89, 65, 65, 85,
- 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71,
- 83, 128, 68, 65, 71, 71, 69, 82, 128, 68, 65, 71, 69, 83, 72, 128, 68,
- 65, 71, 69, 83, 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65,
- 71, 65, 218, 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 199, 68, 65, 69,
- 78, 71, 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65,
- 83, 85, 128, 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68,
- 48, 54, 55, 71, 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128,
- 68, 48, 54, 55, 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66,
- 128, 68, 48, 54, 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128,
- 68, 48, 54, 53, 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48,
- 54, 50, 128, 68, 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57,
- 128, 68, 48, 53, 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68,
- 48, 53, 53, 128, 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48,
- 53, 51, 128, 68, 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53,
- 49, 128, 68, 48, 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53,
- 48, 71, 128, 68, 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48,
- 53, 48, 68, 128, 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68,
- 48, 53, 48, 65, 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48,
- 52, 56, 65, 128, 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52,
- 54, 65, 128, 68, 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52,
- 128, 68, 48, 52, 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68,
- 48, 52, 48, 128, 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51,
- 55, 128, 68, 48, 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65,
- 128, 68, 48, 51, 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68,
- 48, 51, 49, 65, 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48,
- 50, 57, 128, 68, 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50,
- 55, 128, 68, 48, 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128,
- 68, 48, 50, 51, 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48,
- 50, 48, 128, 68, 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55,
- 128, 68, 48, 49, 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68,
- 48, 49, 51, 128, 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49,
- 48, 128, 68, 48, 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56,
- 128, 68, 48, 48, 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68,
- 48, 48, 52, 128, 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48,
- 49, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89,
- 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212,
- 67, 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68,
- 82, 73, 67, 73, 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65,
- 128, 67, 89, 128, 67, 87, 79, 79, 128, 67, 87, 79, 128, 67, 87, 73, 73,
- 128, 67, 87, 73, 128, 67, 87, 69, 79, 82, 84, 72, 128, 67, 87, 69, 128,
- 67, 87, 65, 65, 128, 67, 85, 88, 128, 67, 85, 212, 67, 85, 83, 84, 79,
- 77, 83, 128, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, 68,
- 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86,
- 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, 85, 82, 82,
- 217, 67, 85, 82, 82, 69, 78, 84, 128, 67, 85, 82, 82, 69, 78, 212, 67,
- 85, 82, 76, 217, 67, 85, 82, 76, 128, 67, 85, 82, 128, 67, 85, 80, 128,
- 67, 85, 79, 88, 128, 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205,
- 67, 85, 66, 69, 68, 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76,
- 79, 128, 67, 85, 65, 84, 82, 73, 76, 76, 207, 67, 85, 128, 67, 82, 89,
- 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67,
- 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, 82, 207, 67, 82, 85, 67, 73,
- 66, 76, 69, 45, 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67,
- 82, 85, 67, 73, 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69,
- 45, 50, 128, 67, 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78,
- 128, 67, 82, 79, 83, 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78,
- 199, 67, 82, 79, 83, 83, 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68,
- 45, 84, 65, 73, 76, 128, 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83,
- 66, 79, 78, 69, 83, 128, 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211,
- 67, 82, 79, 80, 128, 67, 82, 79, 73, 88, 128, 67, 82, 79, 67, 85, 211,
- 67, 82, 79, 67, 79, 68, 73, 76, 69, 128, 67, 82, 69, 83, 67, 69, 78, 84,
- 128, 67, 82, 69, 83, 67, 69, 78, 212, 67, 82, 69, 68, 73, 212, 67, 82,
- 69, 65, 84, 73, 86, 197, 67, 82, 69, 65, 77, 128, 67, 82, 65, 67, 75, 69,
- 82, 128, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, 79, 86, 69,
- 82, 128, 67, 79, 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, 199, 67,
- 79, 85, 78, 84, 69, 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82,
- 66, 79, 82, 69, 128, 67, 79, 85, 78, 67, 73, 204, 67, 79, 84, 128, 67,
- 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128,
- 67, 79, 82, 80, 83, 69, 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78,
- 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128,
- 67, 79, 82, 78, 69, 82, 128, 67, 79, 82, 78, 69, 210, 67, 79, 80, 89, 82,
- 73, 71, 72, 84, 128, 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89,
- 128, 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, 67, 79, 80, 80, 69, 82, 45,
- 50, 128, 67, 79, 80, 80, 69, 82, 128, 67, 79, 80, 128, 67, 79, 79, 76,
- 128, 67, 79, 79, 75, 73, 78, 71, 128, 67, 79, 79, 75, 73, 69, 128, 67,
- 79, 79, 75, 69, 196, 67, 79, 79, 128, 67, 79, 78, 86, 69, 82, 71, 73, 78,
- 199, 67, 79, 78, 86, 69, 78, 73, 69, 78, 67, 197, 67, 79, 78, 84, 82, 79,
- 76, 128, 67, 79, 78, 84, 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69,
- 84, 89, 128, 67, 79, 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78,
- 84, 79, 85, 82, 69, 196, 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 69,
- 78, 84, 73, 79, 78, 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79,
- 78, 128, 67, 79, 78, 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73,
- 78, 199, 67, 79, 78, 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128,
- 67, 79, 78, 83, 84, 82, 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, 65,
- 78, 84, 128, 67, 79, 78, 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78,
- 67, 89, 128, 67, 79, 78, 83, 79, 78, 65, 78, 212, 67, 79, 78, 83, 69, 67,
- 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, 78, 128, 67,
- 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78, 73, 78, 199,
- 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78, 212, 67, 79,
- 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 70, 79,
- 85, 78, 68, 69, 196, 67, 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70,
- 69, 84, 84, 201, 67, 79, 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67,
- 79, 78, 67, 65, 86, 69, 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, 78, 128,
- 67, 79, 77, 80, 85, 84, 69, 82, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73,
- 79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80,
- 76, 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128,
- 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69,
- 78, 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77, 79, 206,
- 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 128, 67, 79,
- 77, 77, 193, 67, 79, 77, 69, 84, 128, 67, 79, 77, 66, 128, 67, 79, 76,
- 85, 77, 78, 128, 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79,
- 206, 67, 79, 76, 76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128,
- 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, 65, 73,
- 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 79, 128, 67,
- 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, 128,
- 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76,
- 85, 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, 67, 76,
- 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, 128,
- 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, 128, 67,
- 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73,
- 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73,
- 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, 67, 76, 73,
- 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, 76, 73, 70,
- 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, 128, 67, 76,
- 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, 67, 76, 69,
- 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 87, 128, 67, 76,
- 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69, 210, 67, 76, 65, 78,
- 128, 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73, 88, 128, 67, 73, 86,
- 73, 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65, 80, 197, 67, 73, 84,
- 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85, 77, 70, 76, 69, 88,
- 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, 82, 67, 85, 76, 65,
- 84, 73, 79, 206, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, 67, 76, 69,
- 128, 67, 73, 80, 128, 67, 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78,
- 69, 77, 65, 128, 67, 73, 73, 128, 67, 73, 69, 88, 128, 67, 73, 69, 85,
- 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67,
- 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, 71,
- 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73, 69, 80, 128, 67,
- 73, 69, 128, 67, 73, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128, 67,
- 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67, 72,
- 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72, 128, 67,
- 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128, 67, 72,
- 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128, 67, 72,
- 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 89, 83, 65, 78, 84, 72, 69,
- 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85, 128, 67, 72, 82, 79, 78, 79,
- 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, 193, 67, 72, 82, 73,
- 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65, 83, 128, 67, 72, 82, 73, 83,
- 84, 77, 65, 211, 67, 72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72, 79,
- 82, 69, 86, 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, 67,
- 72, 79, 69, 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65,
+ 67, 83, 128, 68, 67, 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67,
+ 49, 128, 68, 194, 68, 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217,
+ 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, 65, 84,
+ 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, 72, 69,
+ 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128,
+ 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82,
+ 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, 128, 68,
+ 65, 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, 68, 65,
+ 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, 77,
+ 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, 69,
+ 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 79, 128,
+ 68, 65, 78, 71, 128, 68, 65, 78, 199, 68, 65, 78, 68, 65, 128, 68, 65,
+ 78, 67, 69, 82, 128, 68, 65, 77, 80, 128, 68, 65, 77, 208, 68, 65, 77,
+ 77, 65, 84, 65, 78, 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, 77,
+ 65, 128, 68, 65, 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, 76,
+ 69, 84, 72, 128, 68, 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65,
+ 76, 68, 65, 128, 68, 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200,
+ 68, 65, 76, 65, 84, 128, 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128,
+ 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65,
+ 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, 82, 128, 68,
+ 65, 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, 71, 69, 83,
+ 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, 65, 218,
+ 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 199, 68, 65, 69, 78, 71, 128,
+ 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, 83, 85, 128,
+ 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68, 48, 54, 55, 71,
+ 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128, 68, 48, 54, 55,
+ 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66, 128, 68, 48, 54,
+ 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128, 68, 48, 54, 53,
+ 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48, 54, 50, 128, 68,
+ 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57, 128, 68, 48, 53,
+ 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68, 48, 53, 53, 128,
+ 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48, 53, 51, 128, 68,
+ 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53, 49, 128, 68, 48,
+ 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53, 48, 71, 128, 68,
+ 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48, 53, 48, 68, 128,
+ 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68, 48, 53, 48, 65,
+ 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48, 52, 56, 65, 128,
+ 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52, 54, 65, 128, 68,
+ 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52, 128, 68, 48, 52,
+ 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68, 48, 52, 48, 128,
+ 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51, 55, 128, 68, 48,
+ 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65, 128, 68, 48, 51,
+ 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68, 48, 51, 49, 65,
+ 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48, 50, 57, 128, 68,
+ 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50, 55, 128, 68, 48,
+ 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128, 68, 48, 50, 51,
+ 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48, 50, 48, 128, 68,
+ 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55, 128, 68, 48, 49,
+ 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68, 48, 49, 51, 128,
+ 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49, 48, 128, 68, 48,
+ 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56, 128, 68, 48, 48,
+ 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68, 48, 48, 52, 128,
+ 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48, 49, 128, 67, 89,
+ 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89, 82, 69, 78, 65,
+ 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212, 67, 89, 80, 69,
+ 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, 67, 73,
+ 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65, 128, 67, 89,
+ 128, 67, 87, 79, 79, 128, 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87,
+ 73, 128, 67, 87, 69, 79, 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65,
+ 65, 128, 67, 85, 88, 128, 67, 85, 85, 128, 67, 85, 212, 67, 85, 83, 84,
+ 79, 77, 83, 128, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82,
+ 68, 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82,
+ 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, 85, 82,
+ 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84, 128,
+ 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, 128,
+ 67, 85, 82, 128, 67, 85, 80, 128, 67, 85, 79, 88, 128, 67, 85, 79, 80,
+ 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 66, 69, 68, 128, 67, 85, 66,
+ 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, 65, 84, 82, 73, 76,
+ 76, 207, 67, 85, 128, 67, 83, 73, 128, 67, 82, 89, 83, 84, 65, 204, 67,
+ 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 89, 73, 78, 199,
+ 67, 82, 85, 90, 69, 73, 82, 207, 67, 82, 85, 67, 73, 66, 76, 69, 45, 53,
+ 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, 66,
+ 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, 82,
+ 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, 83,
+ 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, 72,
+ 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, 67,
+ 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67,
+ 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, 82,
+ 79, 73, 88, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76,
+ 69, 128, 67, 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78,
+ 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82,
+ 69, 65, 77, 128, 67, 82, 65, 67, 75, 69, 82, 128, 67, 82, 128, 67, 79,
+ 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, 79, 86, 69, 82, 128, 67, 79,
+ 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, 199, 67, 79, 85, 78, 84, 69,
+ 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128,
+ 67, 79, 85, 78, 67, 73, 204, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80,
+ 79, 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69,
+ 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78,
+ 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82,
+ 128, 67, 79, 82, 78, 69, 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128,
+ 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82,
+ 79, 68, 85, 67, 84, 128, 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80,
+ 80, 69, 82, 128, 67, 79, 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75,
+ 73, 78, 71, 128, 67, 79, 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196,
+ 67, 79, 79, 128, 67, 79, 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86,
+ 69, 78, 73, 69, 78, 67, 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78,
+ 84, 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79,
+ 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69,
+ 196, 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 69, 78, 84, 73, 79, 78,
+ 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78,
+ 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, 67, 79, 78,
+ 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, 67, 79, 78, 83, 84, 82,
+ 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, 78,
+ 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, 78,
+ 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79,
+ 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78,
+ 73, 78, 199, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78,
+ 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79,
+ 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, 79,
+ 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, 78,
+ 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, 45,
+ 80, 79, 73, 78, 84, 69, 196, 67, 79, 78, 128, 67, 79, 77, 80, 85, 84, 69,
+ 82, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, 80,
+ 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80, 76, 73, 65, 78, 67, 69, 128,
+ 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, 77, 80, 76, 69, 84,
+ 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80,
+ 65, 82, 69, 128, 67, 79, 77, 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73,
+ 65, 204, 67, 79, 77, 77, 65, 78, 68, 128, 67, 79, 77, 77, 65, 128, 67,
+ 79, 77, 77, 193, 67, 79, 77, 69, 84, 128, 67, 79, 77, 66, 128, 67, 79,
+ 76, 85, 77, 78, 128, 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73,
+ 79, 206, 67, 79, 76, 76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78,
+ 128, 67, 79, 69, 78, 71, 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128,
+ 67, 79, 67, 75, 84, 65, 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79,
+ 65, 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210,
+ 67, 76, 85, 66, 83, 128, 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67,
+ 76, 85, 66, 128, 67, 76, 85, 194, 67, 76, 79, 86, 69, 82, 128, 67, 76,
+ 79, 85, 68, 128, 67, 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128,
+ 67, 76, 79, 84, 72, 128, 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69,
+ 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197,
+ 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86,
+ 73, 83, 128, 67, 76, 73, 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75,
+ 73, 78, 199, 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85,
+ 83, 128, 67, 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69,
+ 70, 45, 50, 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67,
+ 76, 69, 198, 67, 76, 69, 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67,
+ 76, 65, 87, 128, 67, 76, 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69,
+ 210, 67, 76, 65, 78, 128, 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73,
+ 88, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65,
+ 80, 197, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85,
+ 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73,
+ 82, 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 69, 83, 128, 67,
+ 73, 82, 67, 76, 69, 128, 67, 73, 80, 128, 67, 73, 78, 78, 65, 66, 65, 82,
+ 128, 67, 73, 78, 69, 77, 65, 128, 67, 73, 73, 128, 67, 73, 69, 88, 128,
+ 67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67,
+ 73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73,
+ 69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73,
+ 69, 80, 128, 67, 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128,
+ 67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67,
+ 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72, 128,
+ 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128, 67,
+ 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128, 67,
+ 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 89, 83, 65, 78, 84, 72,
+ 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85, 128, 67, 72, 82, 79, 78,
+ 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, 193, 67, 72, 82,
+ 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65, 83, 128, 67, 72, 82, 73,
+ 83, 84, 77, 65, 211, 67, 72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72,
+ 79, 82, 69, 86, 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128,
+ 67, 72, 79, 69, 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65,
128, 67, 72, 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83,
73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67,
73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128,
@@ -4051,9075 +4215,9608 @@ static unsigned char lexicon[] = {
211, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82, 82, 73, 69, 83, 128, 67,
72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80, 128, 67, 72, 69, 206,
67, 72, 69, 73, 78, 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73, 128, 67,
- 72, 69, 69, 82, 73, 78, 199, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75,
- 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, 88, 128, 67, 72, 65,
- 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, 87, 65, 128, 67, 72,
- 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, 82, 212, 67, 72, 65,
- 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, 67, 72, 65, 82, 65, 67,
- 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 128, 67, 72, 65,
- 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78,
- 128, 67, 72, 65, 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128,
- 67, 72, 65, 77, 73, 76, 73, 128, 67, 72, 65, 73, 82, 128, 67, 72, 65, 73,
- 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, 65, 65,
- 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, 79,
- 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, 45, 87, 65, 128, 67,
- 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78,
- 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83,
- 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73,
- 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85,
- 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77,
- 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, 67,
- 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, 196, 67, 69,
- 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 128, 67, 69,
- 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78, 128,
- 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, 69,
- 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, 193, 67,
- 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, 67, 69,
- 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, 79, 128,
- 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, 67, 72,
- 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, 67, 72,
- 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, 128, 67,
- 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, 69, 69,
+ 72, 69, 73, 75, 72, 65, 78, 128, 67, 72, 69, 69, 82, 73, 78, 199, 67, 72,
+ 69, 69, 128, 67, 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197,
+ 67, 72, 65, 88, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65,
+ 84, 84, 65, 87, 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128,
+ 67, 72, 65, 82, 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73,
+ 79, 212, 67, 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65,
+ 67, 84, 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72,
+ 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, 77, 75, 79, 128, 67,
+ 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, 76, 73, 128, 67, 72,
+ 65, 75, 77, 193, 67, 72, 65, 73, 82, 128, 67, 72, 65, 73, 78, 83, 128,
+ 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, 65, 65, 128, 67, 71,
+ 74, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, 67, 69, 82, 69, 77,
+ 79, 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, 45, 87, 65, 128,
+ 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65,
+ 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77,
+ 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72,
+ 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69,
+ 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85,
+ 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, 82, 73, 65, 204,
+ 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, 196, 67,
+ 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 128, 67,
+ 69, 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78,
+ 128, 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69,
+ 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, 193,
+ 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, 67,
+ 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, 79,
+ 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, 67,
+ 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, 67,
+ 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, 128,
+ 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, 69, 69,
128, 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 128,
- 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, 65, 65, 128, 67, 67, 65,
- 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65, 128, 67, 65, 88,
- 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206, 67, 65, 85, 76,
- 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 84, 65, 87, 65,
- 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, 83, 84, 76, 69, 128, 67, 65,
- 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 211, 67,
- 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 67, 65,
- 82, 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, 82, 79, 78, 128, 67,
- 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65, 206, 67, 65,
- 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, 65, 82, 68,
- 83, 128, 67, 65, 82, 68, 128, 67, 65, 82, 196, 67, 65, 82, 128, 67, 65,
- 210, 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128, 67, 65, 80,
- 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 79, 128, 67, 65, 80, 73, 84, 65,
- 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78,
- 199, 67, 65, 78, 68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85,
- 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65,
- 128, 67, 65, 78, 68, 82, 193, 67, 65, 78, 67, 69, 82, 128, 67, 65, 78,
- 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, 128, 67, 65,
- 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77,
- 69, 82, 65, 128, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67,
- 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76,
- 69, 78, 68, 65, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, 65, 128,
- 67, 65, 75, 197, 67, 65, 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69,
- 85, 83, 128, 67, 65, 68, 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66,
- 76, 69, 87, 65, 89, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69,
- 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50,
- 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128,
- 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48,
- 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52,
- 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67,
- 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48,
- 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53,
- 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128,
- 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128,
- 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67,
- 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72,
- 201, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65,
- 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69,
- 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83, 72, 128,
- 66, 85, 84, 84, 79, 78, 128, 66, 85, 212, 66, 85, 83, 84, 211, 66, 85,
- 83, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 211, 66, 85, 82,
- 213, 66, 85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, 85, 79,
- 80, 128, 66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, 77, 80, 217,
- 66, 85, 76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, 76, 83, 69, 89,
- 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 69, 84, 128, 66, 85, 76,
- 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, 85, 75, 89,
- 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, 68, 73, 78,
- 71, 128, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, 197, 66, 85,
- 71, 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 67, 75, 76, 69, 128,
- 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, 66,
- 83, 68, 85, 211, 66, 82, 85, 83, 72, 128, 66, 82, 85, 83, 200, 66, 82,
- 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, 66, 82, 79, 65, 196, 66,
- 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, 78, 69, 83, 211, 66,
- 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, 71, 197, 66, 82, 73,
- 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, 86, 73, 83, 128, 66, 82,
- 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, 82, 69, 86, 197, 66, 82,
- 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, 85, 71, 72, 128, 66,
- 82, 69, 65, 68, 128, 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73, 78,
- 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, 200, 66, 82, 65,
- 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, 82, 65, 67,
- 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 89, 128, 66,
- 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78,
- 71, 128, 66, 79, 87, 76, 128, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66,
- 79, 85, 81, 85, 69, 84, 128, 66, 79, 85, 78, 68, 65, 82, 217, 66, 79, 84,
- 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128,
- 66, 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76,
- 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88,
- 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128,
- 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, 128, 66, 79, 79, 77, 69, 82, 65,
- 78, 71, 128, 66, 79, 79, 75, 83, 128, 66, 79, 79, 75, 77, 65, 82, 75,
- 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, 79, 78, 69, 128, 66, 79, 77,
- 66, 128, 66, 79, 76, 84, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, 66,
- 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 85, 197,
- 66, 76, 79, 87, 70, 73, 83, 72, 128, 66, 76, 79, 83, 83, 79, 77, 128, 66,
- 76, 79, 79, 68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, 66,
- 76, 69, 78, 68, 69, 196, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203,
- 66, 76, 65, 68, 197, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67,
- 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84,
- 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73,
- 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, 77, 85, 84,
- 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, 80, 128,
- 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, 66, 73, 82,
- 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65, 128, 66,
- 73, 82, 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 78, 79, 67,
- 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, 128,
- 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73,
- 76, 65, 66, 73, 65, 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128,
- 66, 73, 199, 66, 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66,
- 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69, 83, 128,
- 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128, 66, 73, 66,
- 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201, 66, 72, 85, 128,
- 66, 72, 79, 79, 128, 66, 72, 79, 128, 66, 72, 73, 128, 66, 72, 69, 84,
- 72, 128, 66, 72, 69, 69, 128, 66, 72, 69, 128, 66, 72, 65, 84, 84, 73,
- 80, 82, 79, 76, 213, 66, 72, 65, 77, 128, 66, 72, 65, 128, 66, 69, 89,
- 89, 65, 76, 128, 66, 69, 88, 128, 66, 69, 86, 69, 82, 65, 71, 69, 128,
- 66, 69, 84, 87, 69, 69, 78, 128, 66, 69, 84, 87, 69, 69, 206, 66, 69, 84,
- 72, 128, 66, 69, 84, 65, 128, 66, 69, 84, 193, 66, 69, 212, 66, 69, 83,
- 73, 68, 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, 210,
- 66, 69, 80, 128, 66, 69, 79, 82, 195, 66, 69, 78, 90, 69, 78, 197, 66,
- 69, 78, 84, 207, 66, 69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69,
- 206, 66, 69, 76, 84, 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69,
- 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71, 84, 72, 79, 210, 66, 69,
- 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, 128, 66,
- 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, 78, 78,
- 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73,
- 206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69,
- 84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69,
- 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69,
- 65, 86, 69, 210, 66, 69, 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66,
- 69, 65, 210, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 67, 65,
- 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66,
- 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84,
- 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128,
- 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128,
- 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79,
- 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, 66, 73, 80, 128, 66,
- 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, 66, 73, 69, 80, 128,
- 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, 88, 128, 66, 66, 69,
- 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66,
- 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 65, 128, 66, 66, 65,
- 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 84,
- 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77,
- 65, 83, 65, 84, 128, 66, 65, 84, 72, 128, 66, 65, 84, 200, 66, 65, 84,
- 65, 203, 66, 65, 83, 83, 65, 128, 66, 65, 83, 75, 69, 84, 66, 65, 76,
- 204, 66, 65, 83, 72, 75, 73, 210, 66, 65, 83, 72, 128, 66, 65, 83, 69,
- 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, 65, 82,
- 83, 128, 66, 65, 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, 72,
- 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, 82,
- 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79,
- 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66, 65, 82, 65, 50, 128,
- 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, 84,
- 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, 65,
- 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77,
- 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65,
- 128, 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79,
- 75, 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128,
- 66, 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65,
- 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77,
- 85, 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 71, 71, 65, 71,
- 197, 66, 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68,
- 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, 66, 65, 68, 128, 66, 65, 67,
- 84, 82, 73, 65, 206, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, 65, 67,
- 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 65,
- 67, 75, 72, 65, 78, 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66,
- 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65, 66, 217,
- 66, 65, 65, 82, 69, 82, 85, 128, 66, 51, 48, 53, 128, 66, 50, 53, 57,
- 128, 66, 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, 128, 66,
- 50, 53, 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, 53, 50,
- 128, 66, 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, 128, 66,
- 50, 52, 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, 52, 53,
- 128, 66, 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, 52, 176,
- 66, 50, 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, 50, 51,
- 50, 128, 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, 66, 50,
- 50, 56, 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, 50, 181,
- 66, 50, 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, 50, 49,
- 57, 128, 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, 54, 128,
- 66, 50, 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, 66, 50,
- 49, 50, 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, 48, 57,
- 128, 66, 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, 128, 66,
- 50, 48, 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, 50, 48,
- 50, 128, 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, 177, 66,
- 49, 57, 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, 49, 56,
- 52, 128, 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, 49, 128,
- 66, 49, 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, 66, 49,
- 55, 55, 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, 179, 66,
- 49, 55, 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, 49, 54,
- 57, 128, 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, 54, 128,
- 66, 49, 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, 49, 54,
- 178, 66, 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, 66, 49,
- 53, 56, 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, 53, 128,
- 66, 49, 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, 66, 49,
- 53, 177, 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, 181, 66,
- 49, 52, 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, 181, 66,
- 49, 51, 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, 176, 66,
- 49, 50, 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, 66, 49,
- 50, 178, 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, 66, 49,
- 48, 57, 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, 48, 55,
- 205, 66, 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, 198, 66,
- 49, 48, 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, 48, 180,
- 66, 49, 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, 176, 66,
- 48, 56, 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, 56, 181,
- 66, 48, 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, 48, 56,
- 176, 66, 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, 48, 55,
- 182, 66, 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, 55, 178,
- 66, 48, 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, 184, 66,
- 48, 54, 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, 128, 66,
- 48, 54, 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, 176, 66,
- 48, 53, 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, 128, 66,
- 48, 53, 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, 66, 48,
- 53, 177, 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, 66, 48,
- 52, 55, 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, 66, 48,
- 52, 179, 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, 48, 51,
- 185, 66, 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, 51, 52,
- 128, 66, 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, 51, 176,
- 66, 48, 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, 182, 66,
- 48, 50, 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, 128, 66,
- 48, 50, 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, 56, 128,
- 66, 48, 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, 180, 66,
- 48, 49, 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, 66, 48,
- 48, 57, 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, 48, 184, 66,
- 48, 48, 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, 48, 48, 182,
- 66, 48, 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, 48,
- 48, 52, 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, 66,
- 48, 48, 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, 177,
- 65, 90, 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, 72, 128,
- 65, 88, 69, 128, 65, 87, 69, 128, 65, 86, 69, 83, 84, 65, 206, 65, 86,
- 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65,
- 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65,
- 128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69,
- 128, 65, 85, 84, 79, 77, 65, 84, 69, 196, 65, 85, 83, 84, 82, 65, 204,
- 65, 85, 82, 73, 80, 73, 71, 77, 69, 78, 84, 128, 65, 85, 82, 65, 77, 65,
- 90, 68, 65, 65, 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45,
- 50, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78,
- 128, 65, 85, 71, 85, 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73,
- 79, 206, 65, 85, 69, 128, 65, 85, 66, 69, 82, 71, 73, 78, 69, 128, 65,
- 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, 84, 69, 78,
- 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 79, 205, 65, 84, 78,
- 65, 200, 65, 84, 77, 65, 65, 85, 128, 65, 84, 73, 89, 65, 128, 65, 84,
- 72, 76, 69, 84, 73, 195, 65, 84, 72, 65, 82, 86, 65, 86, 69, 68, 73, 195,
- 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 65, 83, 90, 128, 65, 83, 89, 85,
- 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 65, 83,
- 84, 82, 79, 78, 79, 77, 73, 67, 65, 204, 65, 83, 84, 82, 79, 76, 79, 71,
- 73, 67, 65, 204, 65, 83, 84, 79, 78, 73, 83, 72, 69, 196, 65, 83, 84, 69,
- 82, 73, 83, 77, 128, 65, 83, 84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69,
- 82, 73, 83, 75, 128, 65, 83, 84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82,
- 73, 83, 67, 85, 83, 128, 65, 83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69,
- 82, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69, 196, 65, 83, 80,
- 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, 82, 65, 76, 73, 65, 128,
- 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, 128, 65, 83, 72, 57,
- 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, 84, 128, 65, 83, 67, 69, 78,
- 68, 73, 78, 199, 65, 83, 65, 76, 50, 128, 65, 82, 85, 72, 85, 65, 128,
- 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85, 76, 65, 84, 69, 196, 65,
- 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79,
- 211, 65, 82, 83, 69, 78, 73, 67, 128, 65, 82, 82, 79, 87, 83, 128, 65,
- 82, 82, 79, 87, 211, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128, 65, 82, 82,
- 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, 84, 65, 73, 76, 128, 65,
- 82, 82, 73, 86, 69, 128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71,
- 73, 65, 84, 207, 65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82,
- 193, 65, 82, 79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82,
- 79, 85, 78, 196, 65, 82, 77, 89, 128, 65, 82, 77, 79, 85, 82, 128, 65,
- 82, 205, 65, 82, 76, 65, 85, 199, 65, 82, 75, 84, 73, 75, 207, 65, 82,
- 75, 65, 66, 128, 65, 82, 75, 65, 65, 78, 85, 128, 65, 82, 73, 83, 84, 69,
- 82, 65, 128, 65, 82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, 83, 128,
- 65, 82, 71, 79, 84, 69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, 84, 72,
- 69, 84, 79, 78, 128, 65, 82, 71, 73, 128, 65, 82, 69, 80, 65, 128, 65,
- 82, 68, 72, 65, 86, 73, 83, 65, 82, 71, 65, 128, 65, 82, 67, 72, 65, 73,
- 79, 78, 128, 65, 82, 67, 72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73,
- 195, 65, 82, 67, 200, 65, 82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65,
- 73, 195, 65, 82, 65, 69, 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128,
- 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65,
- 82, 65, 69, 65, 45, 69, 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65,
- 68, 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73,
- 195, 65, 82, 65, 66, 73, 65, 206, 65, 82, 45, 82, 65, 72, 77, 65, 206,
- 65, 82, 45, 82, 65, 72, 69, 69, 77, 128, 65, 81, 85, 65, 82, 73, 85, 83,
- 128, 65, 81, 85, 65, 70, 79, 82, 84, 73, 83, 128, 65, 81, 85, 193, 65,
- 80, 85, 206, 65, 80, 82, 73, 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65,
- 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80,
- 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65,
- 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 80, 79, 84, 72, 69, 83,
- 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84, 82, 79, 80,
- 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, 80, 79, 83,
- 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79, 201, 65, 80,
- 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, 193, 65, 80, 76,
- 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 73, 78, 128, 65, 80, 69, 83,
- 207, 65, 80, 65, 82, 84, 128, 65, 80, 65, 65, 84, 79, 128, 65, 78, 85,
- 83, 86, 65, 82, 65, 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65,
- 78, 85, 83, 86, 65, 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78,
- 85, 68, 65, 84, 84, 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84,
- 73, 79, 78, 128, 65, 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84,
- 73, 77, 79, 78, 89, 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73,
- 77, 79, 78, 73, 65, 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65,
- 128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65,
- 78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75,
- 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76,
- 79, 67, 75, 87, 73, 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84,
- 69, 78, 78, 193, 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65,
- 78, 83, 85, 218, 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65,
- 78, 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79,
- 206, 65, 78, 78, 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 72, 85,
- 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205,
- 65, 78, 71, 82, 217, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78,
- 71, 69, 210, 65, 78, 71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78,
- 68, 65, 80, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82,
- 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 80,
- 128, 65, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65,
- 77, 79, 85, 78, 212, 65, 77, 69, 82, 73, 67, 65, 83, 128, 65, 77, 69, 82,
- 73, 67, 65, 206, 65, 77, 66, 85, 76, 65, 78, 67, 69, 128, 65, 77, 66,
- 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77,
- 65, 84, 73, 79, 206, 65, 77, 65, 76, 71, 65, 77, 128, 65, 76, 86, 69, 79,
- 76, 65, 210, 65, 76, 85, 77, 128, 65, 76, 84, 69, 82, 78, 65, 84, 73, 86,
- 197, 65, 76, 84, 69, 82, 78, 65, 84, 73, 79, 206, 65, 76, 84, 69, 82, 78,
- 65, 84, 197, 65, 76, 84, 65, 128, 65, 76, 80, 72, 65, 128, 65, 76, 80,
- 72, 193, 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, 76, 80, 65, 80, 82,
- 65, 65, 78, 193, 65, 76, 80, 65, 128, 65, 76, 77, 79, 83, 212, 65, 76,
- 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, 76, 76, 201, 65,
- 76, 76, 65, 200, 65, 76, 75, 65, 76, 73, 45, 50, 128, 65, 76, 75, 65, 76,
- 73, 128, 65, 76, 73, 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76,
- 73, 69, 78, 128, 65, 76, 73, 69, 206, 65, 76, 71, 73, 218, 65, 76, 70,
- 65, 128, 65, 76, 69, 85, 212, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77,
- 66, 73, 67, 128, 65, 76, 69, 70, 128, 65, 76, 65, 89, 72, 69, 128, 65,
- 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 128, 65,
- 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83,
- 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195,
- 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 65,
- 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 79,
- 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 78, 78, 128, 65, 73,
- 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128,
- 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 65, 71, 71, 65,
- 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, 65, 71, 79, 71, 201,
- 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 71, 82, 65, 86,
- 65, 84, 69, 196, 65, 71, 65, 73, 78, 128, 65, 70, 84, 69, 210, 65, 70,
- 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65, 206, 65, 70, 79, 82, 69, 77,
- 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70, 71, 72, 65, 78, 201, 65, 70,
- 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 69, 89, 65, 78, 78, 65, 128, 65,
- 69, 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83,
- 67, 128, 65, 69, 83, 128, 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65,
- 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 76, 128, 65, 69, 75,
- 128, 65, 69, 71, 69, 65, 206, 65, 69, 71, 128, 65, 69, 69, 89, 65, 78,
- 78, 65, 128, 65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65,
- 128, 65, 69, 68, 128, 65, 69, 66, 128, 65, 68, 86, 65, 78, 84, 65, 71,
- 69, 128, 65, 68, 86, 65, 78, 67, 69, 128, 65, 68, 69, 71, 128, 65, 68,
- 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, 65, 68, 68, 82, 69, 83,
- 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 69, 45,
- 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69,
- 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, 65, 67, 84, 85, 65, 76,
- 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, 82, 79, 80, 72, 79, 78,
- 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, 69, 128, 65, 67, 67, 85,
- 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, 79, 85, 78, 212, 65, 67,
- 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, 67, 65,
- 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, 212, 65,
- 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, 85, 78, 68,
- 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, 66, 66, 82,
- 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, 128, 65, 66,
- 178, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65, 89, 128, 65, 65, 87, 128,
- 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66, 65, 65, 70, 73, 76, 73,
- 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49, 128, 65, 65, 48, 51,
- 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50, 56, 128, 65, 65, 48,
- 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48, 50, 53, 128, 65, 65,
- 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65, 48, 50, 50, 128, 65,
- 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65, 65, 48, 49, 57, 128,
- 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128, 65, 65, 48, 49, 54,
- 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52, 128, 65, 65, 48, 49,
- 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49, 49, 128, 65, 65, 48,
- 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48, 48, 56, 128, 65, 65,
- 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128, 65, 65, 48, 48, 55,
- 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53, 128, 65, 65, 48, 48,
- 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48, 50, 128, 65, 65, 48,
- 48, 49, 128, 65, 48, 55, 48, 128, 65, 48, 54, 57, 128, 65, 48, 54, 56,
- 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 128, 65, 48, 54, 53, 128, 65,
- 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 48, 54, 50, 128, 65, 48, 54,
- 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 57, 128, 65, 48, 53, 56, 128,
- 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 65, 48, 53, 53, 128, 65, 48,
- 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 53, 50, 128, 65, 48, 53, 49,
- 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 128, 65, 48, 52, 56, 128, 65,
- 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 48, 52, 53, 65, 128, 65, 48,
- 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51, 65, 128, 65, 48, 52,
- 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50, 128, 65, 48, 52, 49,
- 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 48, 128, 65, 48, 51, 57, 128,
- 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, 128, 65, 48,
- 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, 48, 51, 50,
- 65, 128, 65, 48, 49, 55, 65, 128, 65, 48, 49, 52, 65, 128, 65, 48, 48,
- 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53, 65, 128, 65, 45,
- 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 85, 128, 45, 75, 72, 89, 85,
- 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 90, 85, 196, 45, 67, 72, 65,
- 210, 45, 67, 72, 65, 76, 128,
+ 67, 67, 72, 128, 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, 65, 65,
+ 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65,
+ 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206,
+ 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 85,
+ 128, 67, 65, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65,
+ 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84,
+ 128, 67, 65, 82, 211, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80,
+ 69, 78, 84, 82, 217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, 69, 204,
+ 67, 65, 82, 79, 78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, 203, 67,
+ 65, 82, 73, 65, 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67,
+ 65, 82, 197, 67, 65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, 65, 82,
+ 196, 67, 65, 82, 128, 67, 65, 210, 67, 65, 80, 85, 212, 67, 65, 80, 84,
+ 73, 86, 69, 128, 67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 79,
+ 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84,
+ 73, 79, 206, 67, 65, 78, 199, 67, 65, 78, 68, 89, 128, 67, 65, 78, 68,
+ 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68,
+ 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, 68, 82, 193, 67, 65, 78,
+ 67, 69, 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65,
+ 78, 67, 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65,
+ 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, 77, 69, 76, 128,
+ 67, 65, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 88, 128, 67,
+ 65, 76, 76, 128, 67, 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 67,
+ 128, 67, 65, 75, 82, 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65,
+ 72, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83,
+ 128, 67, 65, 68, 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69,
+ 87, 65, 89, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69, 128, 67,
+ 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50, 52, 128,
+ 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128, 67, 48,
+ 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48, 49, 55,
+ 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52, 128, 67,
+ 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67, 48, 49,
+ 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48, 48, 56,
+ 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53, 128, 67,
+ 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128, 67, 48,
+ 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128, 67, 48,
+ 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51,
+ 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, 201, 66,
+ 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75,
+ 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87,
+ 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83,
+ 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 212, 66, 85, 83, 84, 211,
+ 66, 85, 83, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 211, 66,
+ 85, 82, 213, 66, 85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66,
+ 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, 77,
+ 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, 76,
+ 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 69, 84, 128,
+ 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66,
+ 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76,
+ 68, 73, 78, 71, 128, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83,
+ 197, 66, 85, 71, 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 67, 75,
+ 76, 69, 128, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75,
+ 65, 173, 66, 83, 68, 85, 211, 66, 82, 85, 83, 72, 128, 66, 82, 85, 83,
+ 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, 66, 82, 79,
+ 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, 78, 69,
+ 83, 211, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, 71,
+ 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, 86, 73,
+ 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, 82, 69,
+ 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, 85,
+ 71, 72, 128, 66, 82, 69, 65, 68, 128, 66, 82, 68, 193, 66, 82, 65, 78,
+ 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67,
+ 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69,
+ 196, 66, 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128,
+ 66, 80, 72, 128, 66, 79, 89, 128, 66, 79, 87, 84, 73, 69, 128, 66, 79,
+ 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79, 87, 76, 128,
+ 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, 81, 85, 69, 84, 128,
+ 66, 79, 85, 78, 68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 76, 73, 71,
+ 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, 79, 84, 84, 79, 205,
+ 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, 197, 66, 79, 84, 200,
+ 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, 45, 51, 128, 66, 79, 82,
+ 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, 66, 79, 80, 79, 77, 79, 70,
+ 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, 128, 66, 79, 79, 77, 69,
+ 82, 65, 78, 71, 128, 66, 79, 79, 75, 83, 128, 66, 79, 79, 75, 77, 65, 82,
+ 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, 79, 78, 69, 128, 66, 79,
+ 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, 128, 66, 79, 76, 212, 66,
+ 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, 128, 66, 79, 65, 82, 128,
+ 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 85, 197, 66, 76, 79, 87,
+ 70, 73, 83, 72, 128, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, 79, 68,
+ 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, 66, 76, 69, 78, 68,
+ 69, 196, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68,
+ 197, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69,
+ 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69,
+ 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73, 84, 84, 69, 82,
+ 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, 77, 85, 84, 200, 66, 73, 83,
+ 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, 80, 128, 66, 73, 83, 69, 67,
+ 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, 66, 73, 82, 85, 128, 66, 73,
+ 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65, 128, 66, 73, 82, 68, 128,
+ 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 78, 79, 67, 85, 76, 65, 210,
+ 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, 128, 66, 73, 78, 65, 82,
+ 217, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65,
+ 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73,
+ 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79,
+ 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69,
+ 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128,
+ 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201, 66,
+ 72, 85, 128, 66, 72, 79, 79, 128, 66, 72, 79, 128, 66, 72, 73, 128, 66,
+ 72, 69, 84, 72, 128, 66, 72, 69, 69, 128, 66, 72, 69, 128, 66, 72, 65,
+ 84, 84, 73, 80, 82, 79, 76, 213, 66, 72, 65, 77, 128, 66, 72, 65, 65,
+ 128, 66, 72, 65, 128, 66, 69, 89, 89, 65, 76, 128, 66, 69, 88, 128, 66,
+ 69, 86, 69, 82, 65, 71, 69, 128, 66, 69, 84, 87, 69, 69, 78, 128, 66, 69,
+ 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69,
+ 84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78,
+ 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195,
+ 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 68, 69,
+ 128, 66, 69, 78, 68, 128, 66, 69, 206, 66, 69, 76, 84, 128, 66, 69, 76,
+ 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69,
+ 76, 71, 84, 72, 79, 210, 66, 69, 76, 128, 66, 69, 73, 84, 72, 128, 66,
+ 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66,
+ 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66,
+ 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82,
+ 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69, 84, 65, 128, 66, 69, 69,
+ 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, 69, 72, 128, 66, 69, 69,
+ 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, 65, 86, 69, 210, 66, 69,
+ 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66, 69, 65, 210, 66, 69, 65,
+ 78, 128, 66, 69, 65, 77, 69, 196, 66, 67, 65, 68, 128, 66, 67, 65, 196,
+ 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66,
+ 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88,
+ 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128,
+ 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66,
+ 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128,
+ 66, 66, 73, 88, 128, 66, 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66,
+ 66, 73, 69, 84, 128, 66, 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66,
+ 66, 73, 128, 66, 66, 69, 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69,
+ 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66,
+ 65, 80, 128, 66, 66, 65, 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78,
+ 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65,
+ 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66,
+ 65, 84, 72, 128, 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83,
+ 65, 128, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, 73,
+ 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 66, 65, 76, 76, 128, 66, 65,
+ 83, 69, 128, 66, 65, 83, 197, 66, 65, 82, 83, 128, 66, 65, 82, 82, 73,
+ 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69,
+ 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65,
+ 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65,
+ 82, 66, 69, 210, 66, 65, 82, 194, 66, 65, 82, 65, 50, 128, 66, 65, 210,
+ 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, 84, 197, 66, 65, 78,
+ 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, 65, 78, 65, 78, 65,
+ 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, 66, 79, 79, 83,
+ 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, 128, 66, 65,
+ 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196,
+ 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, 66, 65, 76,
+ 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, 73, 77, 65,
+ 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, 85, 75, 72,
+ 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 128, 66, 65, 71, 71,
+ 65, 71, 197, 66, 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66,
+ 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, 66, 65, 68, 128, 66,
+ 65, 67, 84, 82, 73, 65, 206, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65,
+ 67, 75, 83, 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128,
+ 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 72, 65, 78, 196, 66,
+ 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67,
+ 203, 66, 65, 66, 89, 128, 66, 65, 66, 217, 66, 65, 65, 82, 69, 82, 85,
+ 128, 66, 65, 45, 50, 128, 66, 51, 48, 53, 128, 66, 50, 53, 57, 128, 66,
+ 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, 128, 66, 50, 53,
+ 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, 53, 50, 128, 66,
+ 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, 128, 66, 50, 52,
+ 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, 52, 53, 128, 66,
+ 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, 52, 176, 66, 50,
+ 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, 50, 51, 50, 128,
+ 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, 66, 50, 50, 56,
+ 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, 50, 181, 66, 50,
+ 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, 50, 49, 57, 128,
+ 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, 54, 128, 66, 50,
+ 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, 66, 50, 49, 50,
+ 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, 48, 57, 128, 66,
+ 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, 128, 66, 50, 48,
+ 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, 50, 48, 50, 128,
+ 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, 177, 66, 49, 57,
+ 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, 49, 56, 52, 128,
+ 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, 49, 128, 66, 49,
+ 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, 66, 49, 55, 55,
+ 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, 179, 66, 49, 55,
+ 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, 49, 54, 57, 128,
+ 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, 54, 128, 66, 49,
+ 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, 49, 54, 178, 66,
+ 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, 66, 49, 53, 56,
+ 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, 53, 128, 66, 49,
+ 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, 66, 49, 53, 177,
+ 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, 181, 66, 49, 52,
+ 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, 181, 66, 49, 51,
+ 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, 176, 66, 49, 50,
+ 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, 66, 49, 50, 178,
+ 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, 66, 49, 48, 57,
+ 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, 48, 55, 205, 66,
+ 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, 198, 66, 49, 48,
+ 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, 48, 180, 66, 49,
+ 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, 176, 66, 48, 56,
+ 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, 56, 181, 66, 48,
+ 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, 48, 56, 176, 66,
+ 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, 48, 55, 182, 66,
+ 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, 55, 178, 66, 48,
+ 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, 184, 66, 48, 54,
+ 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, 128, 66, 48, 54,
+ 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, 176, 66, 48, 53,
+ 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, 128, 66, 48, 53,
+ 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, 66, 48, 53, 177,
+ 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, 66, 48, 52, 55,
+ 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, 66, 48, 52, 179,
+ 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, 48, 51, 185, 66,
+ 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, 51, 52, 128, 66,
+ 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, 51, 176, 66, 48,
+ 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, 182, 66, 48, 50,
+ 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, 128, 66, 48, 50,
+ 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, 56, 128, 66, 48,
+ 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, 180, 66, 48, 49,
+ 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, 66, 48, 48, 57,
+ 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, 48, 184, 66, 48, 48,
+ 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, 48, 48, 182, 66, 48,
+ 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, 48, 48, 52,
+ 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, 66, 48, 48,
+ 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, 177, 65, 90,
+ 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, 72, 128, 65, 88,
+ 69, 128, 65, 87, 69, 128, 65, 86, 69, 83, 84, 65, 206, 65, 86, 69, 82,
+ 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 65,
+ 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, 128, 65, 85,
+ 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, 128, 65, 85,
+ 84, 79, 77, 65, 84, 69, 196, 65, 85, 83, 84, 82, 65, 204, 65, 85, 82, 73,
+ 80, 73, 71, 77, 69, 78, 84, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65,
+ 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, 50, 128, 65, 85,
+ 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, 128, 65, 85, 71, 85,
+ 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, 79, 206, 65, 85, 69,
+ 128, 65, 85, 66, 69, 82, 71, 73, 78, 69, 128, 65, 84, 84, 73, 195, 65,
+ 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, 84, 69, 78, 84, 73, 79, 78, 128,
+ 65, 84, 84, 65, 203, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77,
+ 65, 65, 85, 128, 65, 84, 73, 89, 65, 128, 65, 84, 72, 76, 69, 84, 73,
+ 195, 65, 84, 72, 65, 82, 86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80,
+ 65, 83, 67, 65, 206, 65, 83, 90, 128, 65, 83, 89, 85, 82, 193, 65, 83,
+ 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 78,
+ 79, 77, 73, 67, 65, 204, 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204,
+ 65, 83, 84, 79, 78, 73, 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77,
+ 128, 65, 83, 84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75,
+ 128, 65, 83, 84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85,
+ 83, 128, 65, 83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79,
+ 78, 128, 65, 83, 80, 73, 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82,
+ 65, 84, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83,
+ 84, 82, 65, 76, 73, 65, 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69,
+ 83, 128, 65, 83, 72, 57, 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, 84,
+ 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, 50, 128, 65,
+ 82, 85, 72, 85, 65, 128, 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85,
+ 76, 65, 84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, 83,
+ 128, 65, 82, 83, 69, 79, 211, 65, 82, 83, 69, 78, 73, 67, 128, 65, 82,
+ 82, 79, 87, 83, 128, 65, 82, 82, 79, 87, 211, 65, 82, 82, 79, 87, 72, 69,
+ 65, 68, 128, 65, 82, 82, 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45,
+ 84, 65, 73, 76, 128, 65, 82, 82, 73, 86, 69, 128, 65, 82, 82, 65, 89,
+ 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, 207, 65, 82, 79, 85, 83, 73, 78,
+ 199, 65, 82, 79, 85, 82, 193, 65, 82, 79, 85, 78, 68, 45, 80, 82, 79, 70,
+ 73, 76, 69, 128, 65, 82, 79, 85, 78, 196, 65, 82, 77, 89, 128, 65, 82,
+ 77, 79, 85, 82, 128, 65, 82, 205, 65, 82, 76, 65, 85, 199, 65, 82, 75,
+ 84, 73, 75, 207, 65, 82, 75, 65, 66, 128, 65, 82, 75, 65, 65, 78, 85,
+ 128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82,
+ 193, 65, 82, 73, 69, 83, 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65,
+ 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128,
+ 65, 82, 69, 80, 65, 128, 65, 82, 69, 65, 128, 65, 82, 68, 72, 65, 86, 73,
+ 83, 65, 82, 71, 65, 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67,
+ 72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65,
+ 82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65, 73, 195, 65, 82, 65, 69,
+ 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73,
+ 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, 69,
+ 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, 65,
+ 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 65, 66, 73,
+ 65, 206, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, 69,
+ 69, 77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, 79,
+ 82, 84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, 73,
+ 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, 80,
+ 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69,
+ 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, 84,
+ 73, 79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, 79,
+ 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83,
+ 84, 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128,
+ 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70,
+ 79, 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77,
+ 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, 80,
+ 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, 84,
+ 128, 65, 80, 65, 65, 84, 79, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, 65,
+ 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, 82,
+ 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 85, 68, 65, 84, 84,
+ 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, 78, 128, 65,
+ 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84, 73, 77, 79, 78, 89,
+ 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73, 77, 79, 78, 73, 65,
+ 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 84, 73,
+ 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, 70, 79,
+ 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 45,
+ 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73,
+ 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78, 193,
+ 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85, 218,
+ 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65, 78,
+ 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78, 78,
+ 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78, 72,
+ 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 85, 73, 83, 72, 69,
+ 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, 217, 65, 78, 71,
+ 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 69, 210, 65, 78, 71, 69, 76,
+ 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, 128, 65, 78, 67, 79,
+ 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, 65, 84, 82, 73, 67, 72,
+ 73, 83, 77, 65, 128, 65, 78, 65, 80, 128, 65, 77, 80, 83, 128, 65, 77,
+ 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, 85, 78, 212, 65, 77, 69, 82,
+ 73, 67, 65, 83, 128, 65, 77, 69, 82, 73, 67, 65, 206, 65, 77, 66, 85, 76,
+ 65, 78, 67, 69, 128, 65, 77, 66, 193, 65, 77, 65, 82, 128, 65, 77, 65,
+ 210, 65, 77, 65, 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 77, 65, 76, 71,
+ 65, 77, 128, 65, 76, 86, 69, 79, 76, 65, 210, 65, 76, 85, 77, 128, 65,
+ 76, 84, 69, 82, 78, 65, 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, 65, 84,
+ 73, 79, 206, 65, 76, 84, 69, 82, 78, 65, 84, 197, 65, 76, 84, 65, 128,
+ 65, 76, 80, 72, 65, 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65,
+ 78, 65, 128, 65, 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65,
+ 128, 65, 76, 77, 79, 83, 212, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65,
+ 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65,
+ 76, 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69,
+ 196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69,
+ 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65,
+ 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67,
+ 128, 65, 76, 69, 70, 128, 65, 76, 65, 89, 72, 69, 128, 65, 76, 65, 89,
+ 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 128, 65, 76, 45, 76,
+ 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83, 75, 65, 66,
+ 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195, 65, 75, 66,
+ 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 65, 73, 89, 65,
+ 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 79, 206, 65,
+ 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 78, 213, 65, 73, 78, 78, 128,
+ 65, 73, 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83,
+ 128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 65, 78, 199,
+ 65, 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71,
+ 128, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78,
+ 128, 65, 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 128,
+ 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65,
+ 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70,
+ 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 69,
+ 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, 85, 76, 65, 80,
+ 73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, 65, 69, 82, 73,
+ 65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128,
+ 65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, 65, 69, 71,
+ 128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, 65, 69, 68,
+ 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, 128, 65,
+ 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, 128, 65,
+ 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196,
+ 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203,
+ 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69,
+ 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197,
+ 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67,
+ 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71,
+ 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67,
+ 79, 85, 78, 212, 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45,
+ 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67,
+ 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65,
+ 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73,
+ 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70,
+ 73, 76, 73, 128, 65, 66, 178, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65,
+ 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66,
+ 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49,
+ 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50,
+ 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48,
+ 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65,
+ 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65,
+ 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128,
+ 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52,
+ 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49,
+ 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48,
+ 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128,
+ 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53,
+ 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48,
+ 50, 128, 65, 65, 48, 48, 49, 128, 65, 48, 55, 48, 128, 65, 48, 54, 57,
+ 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 128, 65,
+ 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 48, 54,
+ 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 57, 128,
+ 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 65, 48,
+ 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 53, 50,
+ 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 128, 65,
+ 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 48, 52,
+ 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51,
+ 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50,
+ 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 48, 128,
+ 65, 48, 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48,
+ 51, 54, 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51,
+ 128, 65, 48, 51, 50, 65, 128, 65, 48, 49, 55, 65, 128, 65, 48, 49, 52,
+ 65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48,
+ 53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 85, 128,
+ 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 90, 85,
+ 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128,
};
static unsigned int lexicon_offset[] = {
- 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108,
- 113, 121, 130, 135, 140, 144, 150, 153, 158, 166, 173, 181, 186, 191,
- 194, 200, 208, 215, 225, 232, 241, 244, 247, 252, 258, 262, 271, 278,
- 285, 290, 299, 307, 313, 319, 325, 141, 330, 331, 337, 345, 351, 357,
- 365, 372, 374, 377, 381, 388, 390, 397, 402, 408, 410, 417, 425, 427,
- 311, 430, 432, 437, 442, 447, 453, 460, 469, 479, 484, 489, 493, 506,
- 513, 517, 526, 533, 540, 543, 549, 553, 563, 571, 579, 588, 596, 604,
- 609, 617, 624, 634, 645, 649, 654, 657, 661, 665, 666, 672, 678, 680,
- 683, 687, 344, 690, 694, 703, 706, 709, 714, 718, 726, 729, 735, 742,
- 749, 758, 765, 774, 779, 783, 792, 802, 811, 817, 823, 830, 838, 846,
- 855, 863, 867, 875, 880, 781, 511, 889, 893, 897, 904, 908, 915, 689,
- 918, 926, 929, 933, 940, 944, 949, 957, 960, 192, 966, 971, 981, 990,
- 997, 1004, 1012, 1020, 1026, 1030, 1035, 1040, 1046, 1051, 1054, 111,
- 1060, 1064, 1070, 1073, 1086, 1089, 1093, 22, 1097, 1102, 1105, 1108,
- 1114, 1124, 1126, 1132, 1142, 1147, 1156, 1164, 328, 1167, 1170, 1174,
- 1179, 1185, 1190, 1197, 1199, 1204, 1209, 1215, 1220, 1225, 1229, 1234,
- 1240, 1245, 1250, 1254, 1259, 1264, 1268, 1273, 1278, 1283, 1289, 1295,
- 1301, 1306, 1310, 1315, 1320, 1325, 1329, 1334, 1339, 1344, 1349, 1200,
- 1205, 1210, 1216, 1221, 1353, 1226, 1359, 1368, 1230, 1372, 1235, 1241,
- 1246, 1376, 1381, 1386, 1390, 1394, 1400, 1404, 1251, 1407, 1411, 1255,
- 1417, 1260, 1421, 1425, 1265, 1429, 1434, 1438, 1441, 1445, 1269, 1274,
- 1450, 1279, 1456, 1462, 1468, 1474, 1284, 1296, 1302, 1478, 1482, 1486,
- 1489, 1307, 1493, 1495, 1500, 1505, 1511, 1516, 1521, 1525, 1530, 1535,
- 1540, 1545, 1551, 1556, 1561, 1567, 1573, 1578, 1582, 1587, 1592, 1597,
- 1602, 1606, 1614, 1618, 1623, 1628, 1633, 1638, 1642, 1645, 1650, 1655,
- 1660, 1665, 1671, 1676, 1680, 1311, 1683, 1688, 1693, 1316, 1697, 1701,
- 1708, 1321, 1715, 1326, 1719, 1721, 1726, 1732, 1330, 1737, 1746, 1335,
- 1751, 1757, 1340, 1762, 1767, 1770, 1775, 1779, 1783, 1787, 1790, 1794,
- 1345, 1350, 1100, 1799, 1805, 1811, 1817, 1823, 1829, 1835, 1841, 1847,
- 1852, 1858, 1864, 1870, 1876, 1882, 1888, 1894, 1900, 1906, 1911, 1916,
- 1921, 1926, 1931, 1936, 1941, 1946, 1951, 1956, 1962, 1967, 1973, 1978,
- 1984, 1990, 1995, 2001, 2007, 2013, 2019, 2024, 2029, 2031, 2032, 2036,
- 2040, 2045, 2049, 2053, 2057, 2061, 2064, 2069, 2073, 2078, 2082, 2086,
- 2091, 2095, 2098, 2102, 2108, 2122, 2126, 2130, 2133, 2138, 2142, 2146,
- 2149, 2153, 2158, 2163, 2168, 2173, 2177, 2181, 2185, 2190, 2194, 2199,
- 2203, 2208, 2214, 2221, 2227, 2232, 2237, 2242, 2248, 2253, 2259, 2264,
- 2267, 1217, 2269, 2276, 2284, 2294, 2303, 2317, 2321, 2325, 2338, 2346,
- 2350, 2355, 2359, 2362, 2366, 2370, 2375, 2380, 2385, 2389, 2392, 2396,
- 2403, 2410, 2416, 2421, 2426, 2432, 2438, 2443, 2446, 1723, 2448, 2454,
- 2458, 2463, 2467, 2471, 1728, 1734, 2476, 2480, 2483, 2488, 2493, 2498,
- 2503, 2507, 2514, 2519, 2522, 2529, 2535, 2539, 2543, 2547, 2552, 2559,
- 2564, 2569, 2576, 2582, 2588, 2594, 2608, 2625, 2640, 2655, 2664, 2669,
- 2673, 2678, 2683, 2687, 2699, 2706, 2712, 2217, 2718, 2725, 2731, 2735,
- 2738, 2745, 2751, 2755, 2759, 2763, 2054, 2767, 2772, 2777, 2781, 2789,
- 2793, 2797, 2801, 2806, 2811, 2816, 2820, 2825, 2830, 2834, 2839, 2843,
- 2846, 2850, 2854, 2859, 2863, 2867, 2873, 2882, 2886, 2890, 2896, 2901,
- 2908, 2912, 2922, 2926, 2931, 2935, 2940, 2946, 2951, 2955, 2959, 2963,
- 2406, 2971, 2976, 2982, 2987, 2991, 2996, 3001, 3005, 3011, 3016, 3022,
- 3026, 3032, 3037, 3042, 3047, 3052, 3057, 3062, 3067, 3072, 3077, 3083,
- 3088, 1227, 80, 3094, 3098, 3102, 3106, 3111, 3115, 3119, 3123, 3127,
- 3132, 3136, 3141, 3145, 3148, 3152, 3157, 3161, 3166, 3170, 3174, 3178,
- 3183, 3187, 3190, 3203, 3207, 3211, 3215, 3219, 3223, 3226, 3230, 3234,
- 3239, 3243, 3248, 3253, 3258, 3262, 3265, 3268, 3274, 3278, 3282, 3285,
- 3289, 3293, 3296, 3302, 3307, 3312, 3318, 3323, 3328, 3334, 3340, 3345,
- 3350, 3355, 1091, 542, 3360, 3363, 3368, 3372, 3375, 3379, 3384, 3389,
- 3393, 3398, 3402, 3407, 3411, 3415, 3421, 3427, 3430, 3433, 3439, 3446,
- 3453, 3459, 3466, 3471, 3475, 3482, 3487, 3491, 3501, 3505, 3509, 3514,
- 3519, 3529, 2065, 3534, 3538, 3541, 3547, 3552, 3558, 3564, 3569, 3576,
- 3580, 3584, 658, 688, 3588, 3595, 3602, 3609, 3615, 3621, 3626, 3630,
- 3636, 3641, 3645, 2074, 3649, 3657, 583, 3663, 3674, 3678, 3688, 2079,
- 3694, 3699, 3714, 3720, 3727, 3737, 3743, 3748, 3754, 3760, 3763, 3767,
- 3772, 3779, 3784, 3788, 3792, 3796, 3800, 3805, 3811, 3153, 3816, 3828,
- 3836, 3841, 1527, 3848, 3851, 3854, 3858, 3861, 3867, 3871, 3885, 3889,
- 3892, 3896, 3902, 3908, 3913, 3917, 3921, 3927, 3938, 3944, 3949, 3955,
- 3959, 3967, 3977, 3983, 3988, 3997, 4005, 4012, 4016, 4022, 4031, 4040,
- 4044, 4049, 4054, 4058, 4066, 4070, 4075, 4079, 2087, 1369, 4085, 4090,
- 4096, 4101, 4106, 4111, 4116, 4121, 4126, 4132, 4137, 4143, 4148, 4153,
- 4158, 4164, 4169, 4174, 4179, 4184, 4190, 4195, 4201, 4206, 4211, 4216,
- 4221, 4226, 4231, 4237, 4242, 4247, 335, 436, 4252, 4258, 4262, 4266,
- 4271, 4275, 4279, 4282, 4286, 4290, 4294, 4299, 4303, 4307, 4313, 4082,
- 4318, 4321, 4328, 4332, 4345, 4349, 4353, 4357, 4361, 4365, 4369, 4375,
- 4382, 4390, 4394, 4402, 4411, 4417, 4429, 4434, 4437, 4441, 4451, 4459,
- 4467, 4473, 4477, 4487, 4497, 4505, 4512, 4519, 4525, 4531, 4538, 4542,
- 4549, 4559, 4569, 4577, 4584, 4589, 4593, 4601, 4606, 4613, 4621, 4626,
- 4631, 4635, 4649, 4654, 4659, 4666, 4675, 4678, 4682, 4686, 4689, 4694,
- 4699, 4708, 4714, 4720, 4726, 4730, 4741, 4751, 4766, 4781, 4796, 4811,
- 4826, 4841, 4856, 4871, 4886, 4901, 4916, 4931, 4946, 4961, 4976, 4991,
- 5006, 5021, 5036, 5051, 5066, 5081, 5096, 5111, 5126, 5141, 5156, 5171,
- 5186, 5201, 5216, 5231, 5246, 5261, 5276, 5291, 5306, 5321, 5336, 5351,
- 5366, 5381, 5396, 5411, 5426, 5441, 5456, 5471, 5486, 5495, 5504, 5509,
- 5515, 5525, 5529, 5534, 5539, 5547, 5551, 5554, 5558, 2917, 5561, 5566,
- 310, 445, 5572, 5580, 5584, 5588, 5591, 5597, 5601, 5609, 5615, 5620,
- 5627, 5634, 5640, 5645, 5652, 5658, 5666, 5670, 5675, 5687, 5698, 5705,
- 5711, 3175, 5715, 5721, 5726, 5731, 5736, 5742, 5747, 5752, 5757, 5762,
- 5768, 5773, 5778, 5784, 5789, 5795, 5800, 5806, 5811, 5817, 5822, 5827,
- 5832, 5837, 5842, 5848, 5853, 5858, 5863, 5869, 5875, 5881, 5887, 5893,
- 5899, 5905, 5911, 5917, 5923, 5929, 5935, 5940, 5945, 5950, 5955, 5960,
- 5965, 5970, 5975, 5981, 5987, 5992, 5998, 6004, 6010, 6015, 6020, 6025,
- 6030, 6036, 6042, 6047, 6052, 6057, 6062, 6067, 6073, 6078, 6084, 6090,
- 6096, 6102, 6108, 6114, 6120, 6126, 6132, 2096, 5590, 6137, 6141, 6145,
- 6148, 6155, 6158, 6166, 6171, 6176, 6167, 6181, 6168, 6185, 6191, 6197,
- 6202, 6207, 6214, 6222, 6227, 6231, 6234, 6238, 2127, 551, 6242, 6246,
- 6251, 6257, 6262, 6266, 6269, 6273, 6279, 6284, 6288, 6295, 6299, 6303,
- 6307, 946, 747, 6310, 6318, 6325, 6332, 6338, 6345, 6353, 6360, 6367,
- 6372, 6384, 1247, 1377, 1382, 6395, 1387, 6399, 6403, 6412, 6420, 6429,
- 6435, 6440, 6444, 6450, 6455, 6462, 6466, 6475, 6484, 6493, 6502, 6507,
- 6512, 6524, 6529, 6537, 2178, 6541, 6543, 6548, 6552, 6561, 6569, 1391,
- 133, 3403, 3408, 6575, 6579, 6588, 6594, 6599, 6602, 6611, 2652, 6617,
- 6625, 6629, 6633, 2191, 6637, 6642, 6649, 6655, 6661, 6664, 6666, 6669,
- 6677, 6685, 6693, 6696, 6701, 6178, 6704, 6706, 6711, 6716, 6721, 6726,
- 6731, 6736, 6741, 6746, 6751, 6756, 6762, 6767, 6772, 6777, 6783, 6788,
- 6793, 6798, 6803, 6808, 6813, 6819, 6824, 6829, 6834, 6839, 6844, 6849,
- 6854, 6859, 6864, 6869, 6874, 6879, 6884, 6889, 6894, 6899, 6904, 6910,
- 6916, 6921, 6926, 6931, 6936, 6941, 2215, 2222, 2228, 6946, 6952, 2254,
- 2260, 6960, 6964, 6969, 6973, 6977, 6981, 6986, 6990, 6995, 6999, 7002,
- 7005, 7011, 7017, 7023, 7029, 7035, 7041, 7047, 7051, 7055, 7059, 7063,
- 7067, 7072, 7079, 7090, 7098, 7108, 7115, 7120, 7124, 7135, 7148, 7159,
- 7172, 7183, 7195, 7207, 7219, 7232, 7245, 7252, 7258, 7272, 7279, 7285,
- 7289, 7294, 7298, 7305, 7313, 7317, 7323, 7329, 7339, 7343, 7348, 7353,
- 7360, 7366, 7376, 6340, 7382, 7386, 7393, 746, 7397, 7401, 7406, 7411,
- 7416, 7420, 7426, 7434, 7440, 7444, 7450, 7460, 7464, 7470, 7475, 7479,
- 7485, 7491, 2119, 7496, 7498, 7506, 7515, 7519, 7525, 7530, 7535, 7540,
- 7545, 7551, 7556, 3923, 7561, 7565, 7571, 7576, 7582, 7587, 7592, 7598,
- 7603, 7520, 7609, 7613, 7620, 7626, 7631, 7635, 4645, 7640, 7649, 6645,
- 6652, 7654, 2803, 7658, 7663, 7668, 7531, 7672, 7536, 7541, 7677, 7684,
- 7691, 7697, 7703, 7709, 7714, 7719, 7724, 7546, 7552, 7730, 7736, 7741,
- 7749, 7557, 7754, 1028, 7757, 7765, 7771, 7777, 7786, 7794, 7799, 7805,
- 7813, 7820, 7835, 7852, 7871, 7880, 7888, 7903, 7914, 7924, 7934, 7942,
- 7948, 7960, 7969, 7977, 7984, 7991, 7997, 8002, 8010, 8020, 8027, 8037,
- 8047, 8057, 8065, 8072, 8081, 8091, 8105, 8120, 8129, 8137, 8142, 8146,
- 8155, 8161, 8166, 8176, 8186, 8196, 8201, 8205, 8214, 8219, 8229, 8240,
- 8253, 8266, 8278, 8286, 8291, 8295, 8301, 8306, 8314, 8322, 8329, 8334,
- 8342, 8348, 8351, 8355, 8361, 8369, 8374, 8378, 8386, 8395, 8403, 8409,
- 8413, 8420, 8431, 8435, 8438, 8444, 8449, 8453, 8459, 8466, 8472, 8477,
- 8484, 8491, 8498, 8505, 8512, 8519, 8524, 7848, 8529, 8535, 8542, 8549,
- 8554, 8561, 8570, 8574, 8586, 8590, 8593, 8597, 8601, 8605, 8609, 8615,
- 8620, 8626, 8631, 8636, 8642, 8647, 8652, 7356, 8657, 8661, 8665, 8669,
- 8674, 8679, 8687, 8693, 8697, 8701, 8708, 8713, 8721, 8726, 8730, 8733,
- 8739, 8746, 8750, 8753, 8758, 8762, 3962, 8768, 8777, 36, 8785, 8791,
- 8796, 7371, 8801, 8807, 8812, 8816, 8819, 8834, 8853, 8865, 8878, 8891,
- 8904, 8918, 8931, 8946, 8953, 8959, 8963, 8977, 8982, 8988, 8993, 9001,
- 9006, 6471, 9011, 9014, 9021, 9026, 9030, 2808, 955, 9036, 9040, 9046,
- 9052, 9057, 9063, 9068, 7566, 9074, 9080, 9085, 9090, 9098, 9104, 9117,
- 9125, 9132, 7572, 9138, 9146, 9154, 9161, 9174, 9186, 9196, 9203, 9210,
- 9219, 9228, 9236, 9243, 9248, 9254, 7577, 9259, 9265, 7583, 9270, 9273,
- 9280, 9286, 9299, 7083, 9310, 9316, 9325, 9333, 9340, 9346, 9352, 9357,
- 9361, 9366, 8826, 9372, 7588, 9379, 9384, 9391, 9397, 9403, 9408, 9416,
- 9424, 9431, 9435, 9449, 9459, 9464, 9468, 9479, 9485, 9490, 9495, 7593,
- 7599, 9499, 9502, 9507, 9519, 9526, 9531, 9535, 9540, 9544, 9551, 9557,
- 7604, 7521, 9564, 2813, 8, 9571, 9576, 9580, 9586, 9594, 9604, 9609,
- 9614, 9621, 9628, 9632, 9643, 9653, 9662, 9674, 9679, 9683, 9691, 9705,
- 9709, 9712, 9720, 9727, 9735, 9739, 9750, 9754, 9761, 9766, 9770, 9776,
- 9781, 9785, 9791, 9796, 9807, 9811, 9814, 9820, 9825, 9831, 9837, 9844,
- 9855, 9865, 9875, 9884, 9891, 7614, 7621, 7627, 7632, 9897, 9903, 7636,
- 9909, 9912, 9919, 9924, 9939, 9955, 9970, 9978, 9984, 1043, 400, 9989,
- 9997, 10004, 10010, 10015, 10020, 7641, 10022, 10026, 10031, 10035,
- 10045, 10050, 10054, 10063, 10067, 10070, 10077, 10081, 10084, 10092,
- 10099, 10107, 10111, 10118, 10127, 10130, 10134, 10138, 10144, 10148,
- 10152, 10156, 10162, 10172, 10176, 10184, 10188, 10195, 10199, 10204,
- 10208, 10215, 10221, 10229, 10235, 10245, 10250, 10255, 10259, 10267,
- 3822, 10275, 10280, 10284, 10288, 10291, 10299, 10306, 10310, 4469,
- 10314, 10319, 10323, 10334, 10339, 10345, 10349, 10352, 10360, 10365,
- 10370, 10377, 10382, 7650, 10387, 10391, 1685, 4619, 10398, 10403, 10408,
- 10413, 10419, 10424, 10430, 10435, 10440, 10445, 10450, 10455, 10460,
- 10465, 10470, 10475, 10480, 10485, 10490, 10495, 10500, 10505, 10510,
- 10516, 10521, 10526, 10531, 10536, 10541, 10547, 10552, 10557, 10563,
- 10568, 10574, 10579, 10585, 10590, 10595, 10600, 10605, 10611, 10616,
- 10621, 10626, 724, 139, 10634, 10638, 10643, 10648, 10652, 10656, 10660,
- 10665, 10669, 10674, 10678, 10681, 10685, 10689, 10694, 10704, 10710,
- 10718, 10722, 10726, 10733, 10741, 10750, 10761, 10768, 10775, 10784,
- 10793, 10801, 10810, 10819, 10828, 10837, 10847, 10857, 10867, 10877,
- 10887, 10896, 10906, 10916, 10926, 10936, 10946, 10956, 10966, 10975,
- 10985, 10995, 11005, 11015, 11025, 11035, 11044, 11054, 11064, 11074,
- 11084, 11094, 11104, 11114, 11124, 11134, 11143, 11153, 11163, 11173,
- 11183, 11193, 11203, 11213, 11223, 11233, 11243, 11252, 11258, 11262,
- 11265, 11269, 11274, 11281, 11287, 11292, 11296, 11301, 11310, 11318,
- 11323, 11327, 11331, 11337, 11342, 11348, 7659, 11353, 11358, 11367,
- 7664, 11372, 11375, 11381, 11389, 7669, 11396, 11400, 11404, 11408,
- 11418, 11424, 11429, 11438, 11446, 11453, 11460, 11465, 11472, 11477,
- 11481, 11484, 11495, 11505, 11514, 11522, 11533, 11545, 11555, 11560,
- 11564, 11569, 11574, 11578, 11584, 11592, 11599, 11610, 11615, 11625,
- 11634, 11638, 11641, 11648, 11658, 11667, 11674, 11678, 11685, 11691,
- 11696, 11701, 11705, 11714, 11719, 11725, 11729, 11734, 11738, 11747,
- 11755, 11763, 11770, 11778, 11790, 11801, 11811, 11818, 11824, 11833,
- 11844, 11853, 11865, 11877, 11889, 11899, 11908, 11917, 11925, 11932,
- 11941, 11949, 11955, 11961, 11966, 6199, 11970, 11972, 11977, 11983,
- 11992, 12000, 12007, 12016, 12025, 12034, 12043, 12052, 12061, 12070,
- 12079, 12089, 12099, 12108, 12114, 12121, 12135, 12142, 12150, 12159,
- 12165, 12174, 12183, 12194, 12204, 12212, 12219, 12227, 12236, 12249,
- 12257, 12264, 12277, 12283, 12289, 12299, 12308, 12317, 12322, 12326,
- 12332, 12338, 12345, 7370, 12350, 12355, 12362, 12367, 12372, 12376,
- 12384, 12390, 12395, 12403, 12411, 12418, 12426, 12432, 12440, 12448,
- 12453, 12459, 12466, 12472, 12477, 12481, 12492, 12500, 12506, 12511,
- 12520, 12526, 12531, 12540, 12554, 3781, 12558, 12563, 12568, 12574,
- 12579, 12584, 12588, 12593, 12598, 6198, 12603, 12608, 12613, 12618,
- 12622, 12627, 12632, 12637, 12643, 12649, 12654, 12658, 12663, 12668,
- 12673, 7673, 12678, 12683, 12688, 12693, 12710, 12728, 12740, 12753,
- 12770, 12786, 12803, 12813, 12832, 12843, 12854, 12865, 12876, 12888,
- 12899, 12910, 12927, 12938, 12949, 12954, 2335, 12958, 12961, 12967,
- 12975, 12983, 12988, 12996, 13004, 13011, 13016, 13022, 13029, 13037,
- 13044, 13056, 13064, 13069, 9933, 13075, 13084, 13093, 13101, 13108,
- 13114, 13122, 13129, 13135, 13142, 13148, 13157, 13165, 13175, 13182,
- 13188, 13196, 13202, 13210, 13217, 13230, 13237, 13246, 13255, 13264,
- 13272, 13282, 13289, 13294, 3495, 13301, 13306, 13309, 12604, 13313,
- 13319, 13323, 13331, 13343, 13348, 13355, 13361, 13366, 13373, 12609,
- 13377, 13381, 12614, 13385, 13389, 13393, 13400, 13405, 13409, 13413,
- 13421, 13428, 13435, 13452, 13461, 13465, 13468, 13476, 13482, 13487,
- 3573, 13491, 13493, 13501, 13508, 13518, 13530, 13535, 13541, 13546,
- 13550, 13556, 13561, 13567, 13570, 13577, 13585, 13592, 13598, 13604,
- 13609, 13616, 13622, 13627, 13634, 13638, 13644, 13648, 13655, 13661,
- 13667, 13675, 13681, 13686, 13692, 13700, 13708, 13714, 13720, 13725,
- 13732, 13737, 13741, 13747, 13752, 13759, 13764, 13770, 13773, 13779,
- 13785, 13788, 13792, 13804, 13810, 13815, 13822, 13828, 13834, 13845,
- 13855, 13864, 13872, 13879, 13890, 13900, 13910, 13918, 13921, 12628,
- 13926, 13931, 12633, 12758, 13939, 13952, 13967, 13978, 12775, 13996,
- 14009, 14022, 14033, 8841, 14044, 14057, 14076, 14087, 14098, 14109,
- 2603, 14122, 14126, 14134, 14145, 14152, 14158, 14166, 14170, 14176,
- 14179, 14189, 14197, 14204, 14212, 14222, 14227, 14234, 14239, 14246,
- 14257, 14267, 14273, 14278, 14283, 14287, 14291, 14297, 14303, 14308,
- 14313, 14318, 14322, 12638, 12644, 14326, 12650, 14331, 14339, 14348,
- 14355, 7542, 14359, 14361, 14366, 14371, 14377, 14382, 14387, 14392,
- 14397, 14401, 14407, 14413, 14418, 14424, 14429, 14434, 14440, 14445,
- 14450, 14455, 14461, 14466, 14471, 14477, 14483, 14488, 14493, 14500,
- 14506, 14517, 14524, 14529, 14533, 14537, 14540, 14548, 14553, 14560,
- 14567, 14572, 14577, 14584, 14594, 14599, 14606, 14612, 14622, 14632,
- 14646, 14660, 14674, 14688, 14703, 14718, 14735, 14753, 14766, 14772,
- 14777, 14782, 14786, 14791, 14799, 14805, 14810, 14815, 14819, 14824,
- 14828, 14833, 14837, 14848, 14854, 14859, 14864, 14871, 14876, 14880,
- 14885, 14890, 14896, 14903, 14909, 14914, 14918, 14924, 14929, 14934,
- 14938, 14944, 14949, 14954, 14961, 14966, 11420, 14970, 14975, 14979,
- 14984, 14990, 14996, 15003, 15013, 15021, 15028, 15033, 15037, 15046,
- 15054, 15061, 15068, 15074, 15080, 15085, 15090, 15096, 15101, 15107,
- 15112, 15118, 15124, 15131, 15137, 15142, 15147, 7715, 15156, 15159,
- 15165, 15170, 15175, 15185, 15192, 15198, 15203, 15209, 15214, 15220,
- 15225, 15231, 15237, 15242, 15250, 15257, 15262, 15267, 15273, 15278,
- 15282, 15291, 15302, 15309, 15317, 15323, 15330, 15336, 15341, 15345,
- 15351, 15356, 15361, 15366, 7720, 6223, 2827, 15370, 15374, 15378, 15382,
- 15386, 15389, 15396, 15404, 12664, 15411, 15421, 15429, 15436, 15444,
- 15454, 15463, 15476, 15481, 15486, 15494, 15501, 11510, 11519, 15508,
- 15518, 15533, 15539, 15546, 15553, 15559, 15569, 15579, 12669, 15588,
- 15594, 15600, 15608, 15616, 15621, 15630, 15638, 15650, 15660, 15670,
- 15680, 15689, 15701, 15711, 15721, 15732, 15737, 15749, 15761, 15773,
- 15785, 15797, 15809, 15821, 15833, 15845, 15857, 15868, 15880, 15892,
- 15904, 15916, 15928, 15940, 15952, 15964, 15976, 15988, 15999, 16011,
- 16023, 16035, 16047, 16059, 16071, 16083, 16095, 16107, 16119, 16130,
- 16142, 16154, 16166, 16178, 16190, 16202, 16214, 16226, 16238, 16250,
- 16261, 16273, 16285, 16297, 16309, 16321, 16333, 16345, 16357, 16369,
- 16381, 16392, 16404, 16416, 16428, 16440, 16452, 16464, 16476, 16488,
- 16500, 16512, 16523, 16535, 16547, 16559, 16571, 16583, 16595, 16607,
- 16619, 16631, 16643, 16654, 16666, 16678, 16690, 16702, 16715, 16728,
- 16741, 16754, 16767, 16780, 16793, 16805, 16818, 16831, 16844, 16857,
- 16870, 16883, 16896, 16909, 16922, 16935, 16947, 16960, 16973, 16986,
- 16999, 17012, 17025, 17038, 17051, 17064, 17077, 17089, 17102, 17115,
- 17128, 17141, 17154, 17167, 17180, 17193, 17206, 17219, 17231, 17244,
- 17257, 17270, 17283, 17296, 17309, 17322, 17335, 17348, 17361, 17373,
- 17386, 17399, 17412, 17425, 17438, 17451, 17464, 17477, 17490, 17503,
- 17515, 17526, 17539, 17552, 17565, 17578, 17591, 17604, 17617, 17630,
- 17643, 17656, 17668, 17681, 17694, 17707, 17720, 17733, 17746, 17759,
- 17772, 17785, 17798, 17810, 17823, 17836, 17849, 17862, 17875, 17888,
- 17901, 17914, 17927, 17940, 17952, 17965, 17978, 17991, 18004, 18017,
- 18030, 18043, 18056, 18069, 18082, 18094, 18107, 18120, 18133, 18146,
- 18159, 18172, 18185, 18198, 18211, 18224, 18236, 18249, 18262, 18275,
- 18288, 18301, 18314, 18327, 18340, 18353, 18366, 18378, 18391, 18404,
- 18417, 18430, 18443, 18456, 18469, 18482, 18495, 18508, 18520, 18533,
- 18546, 18559, 18572, 18585, 18598, 18611, 18624, 18637, 18650, 18662,
- 18675, 18688, 18701, 18714, 18727, 18740, 18753, 18766, 18779, 18792,
- 18804, 18817, 18830, 18843, 18856, 18869, 18882, 18895, 18908, 18921,
- 18934, 18946, 18957, 18965, 18972, 18978, 18982, 18988, 18994, 19002,
- 19008, 19013, 19017, 19026, 7547, 19037, 19044, 19052, 19059, 19066,
- 9293, 19073, 19082, 19087, 19092, 6239, 19099, 19104, 19107, 19112,
- 19120, 19127, 19134, 19141, 19147, 19156, 19165, 19171, 19180, 19186,
- 19191, 19201, 19208, 19214, 19222, 19228, 19235, 19245, 19254, 19258,
- 19265, 19269, 19274, 19280, 19288, 19292, 19302, 12679, 19311, 19317,
- 19321, 19330, 19336, 19343, 19354, 19362, 19371, 7335, 19379, 19384,
- 19390, 19395, 19399, 19403, 19407, 8006, 19412, 19420, 19427, 19436,
- 19443, 19450, 9223, 19457, 19463, 19467, 19473, 19479, 19487, 19493,
- 19500, 19506, 19512, 19521, 19525, 19533, 19542, 19549, 19554, 19558,
- 19569, 19574, 19579, 19584, 19597, 6426, 19601, 19607, 19615, 19619,
- 19626, 19635, 19640, 19648, 19660, 19665, 19669, 19672, 19678, 19684,
- 19689, 19693, 19696, 19707, 19712, 7750, 19719, 7558, 7755, 19724, 19729,
- 19734, 19739, 19744, 19749, 19754, 19759, 19764, 19769, 19774, 19779,
- 19785, 19790, 19795, 19800, 19805, 19810, 19815, 19820, 19825, 19830,
- 19836, 19842, 19847, 19852, 19857, 19862, 19867, 19872, 19877, 19882,
- 19887, 19893, 19898, 19903, 19908, 19914, 19920, 19925, 19930, 19935,
- 19940, 19945, 19950, 19955, 19960, 19966, 19971, 19976, 19981, 19986,
- 19992, 19997, 20002, 20006, 129, 20014, 20018, 20022, 20026, 20031,
- 20035, 20039, 10781, 20043, 20048, 20052, 20057, 20061, 20066, 20070,
- 20076, 20081, 20085, 20089, 20097, 20101, 20106, 20111, 20115, 20121,
- 20126, 20130, 20135, 20140, 20144, 20151, 20158, 20165, 20169, 20173,
- 20178, 20182, 20185, 20191, 20204, 20209, 20218, 20223, 7795, 20228,
- 20231, 2666, 2671, 20235, 20241, 20247, 20252, 20257, 20262, 20268,
- 20273, 12190, 20278, 20283, 20288, 20294, 20299, 20304, 20310, 20315,
- 20319, 20324, 20329, 20334, 20338, 20343, 20348, 20353, 20358, 20362,
- 20366, 20371, 2836, 20320, 20375, 20383, 20390, 8100, 20402, 20410,
- 20325, 20417, 20422, 20430, 20330, 20435, 20440, 20448, 20453, 20458,
- 20462, 20467, 20471, 20477, 20480, 20487, 20491, 20495, 20501, 20508,
- 20513, 7362, 1690, 1695, 20517, 20523, 20529, 20534, 20538, 20542, 20546,
- 20549, 20555, 20562, 20570, 20576, 20582, 20587, 20592, 20596, 13039,
- 13896, 20601, 20613, 20616, 20623, 20630, 20634, 20642, 20653, 20662,
- 20675, 20685, 20699, 20711, 20725, 20737, 20747, 20759, 20765, 20780,
- 20804, 20822, 20841, 20854, 20868, 20886, 20902, 20919, 20937, 20948,
- 20967, 20984, 21004, 21022, 21034, 21048, 21062, 21074, 21091, 21110,
- 21128, 21140, 21158, 21177, 12818, 21190, 21210, 21222, 8872, 21234,
- 21239, 21244, 21249, 21255, 21260, 21264, 21271, 2352, 21275, 21281,
- 21285, 21288, 21292, 21300, 21306, 20339, 21310, 21319, 21330, 21336,
- 21342, 21351, 21359, 21366, 21371, 21378, 21384, 21393, 21401, 21408,
- 21418, 21427, 21437, 21442, 21451, 21460, 21471, 21482, 3880, 21492,
- 21496, 21506, 21514, 21524, 21535, 21540, 21548, 21555, 21561, 21566,
- 20349, 21570, 21579, 21583, 21586, 21591, 21598, 21607, 21615, 21623,
- 21633, 21642, 21648, 21654, 20354, 20359, 21658, 21668, 21678, 21688,
- 21696, 21703, 21713, 21721, 21729, 21735, 962, 21744, 13000, 537, 21758,
- 21767, 21775, 21786, 21797, 21807, 21816, 21828, 21837, 21846, 21852,
- 21861, 21870, 21880, 21888, 21896, 7727, 21902, 21905, 21909, 21914,
- 21919, 8215, 20367, 21927, 21933, 21939, 21944, 21949, 21953, 21961,
- 21967, 21973, 21977, 3467, 21985, 21990, 21995, 21999, 22003, 8287,
- 22010, 22018, 22025, 22031, 8296, 8302, 22039, 22047, 22054, 22059,
- 22064, 22070, 22074, 22085, 22090, 2555, 22095, 22106, 22112, 22117,
- 22121, 22125, 22128, 22135, 22142, 22149, 22155, 22159, 22164, 22168,
- 22172, 979, 22176, 22181, 22186, 22191, 22196, 22201, 22206, 22211,
- 22216, 22221, 22226, 22231, 22236, 22241, 22247, 22252, 22257, 22262,
- 22267, 22272, 22277, 22283, 22288, 22293, 22298, 22303, 22308, 22313,
- 22318, 22324, 22330, 22335, 22341, 22346, 22351, 5, 22357, 22361, 22365,
- 22369, 22374, 22378, 22382, 22386, 22390, 22395, 22399, 22404, 22408,
- 22411, 22415, 22420, 22424, 22429, 22433, 22437, 22441, 22446, 22450,
- 22454, 22464, 22469, 22473, 22477, 22482, 22487, 22496, 22501, 22506,
- 22510, 22514, 22527, 22539, 22548, 22557, 22563, 22568, 22572, 22576,
- 22586, 22595, 22603, 22609, 22614, 22618, 22625, 22635, 22644, 22652,
- 22660, 22667, 22675, 22684, 22693, 22701, 22706, 22710, 22714, 22717,
- 22719, 22723, 22727, 22732, 22737, 22741, 22745, 22748, 22752, 22755,
- 22759, 22762, 22765, 22769, 22775, 22779, 22783, 22787, 22792, 22797,
- 22802, 22806, 22809, 22814, 22820, 22825, 22831, 22836, 22840, 22844,
- 22848, 22853, 22857, 22862, 22866, 22873, 22877, 22880, 22884, 22890,
- 22896, 22900, 22904, 22909, 22916, 22922, 22926, 22935, 22939, 22943,
- 22946, 22952, 22957, 22963, 1452, 1754, 22968, 22973, 22978, 22983,
- 22988, 22993, 22998, 2106, 2148, 23003, 23006, 23010, 23014, 23019,
- 23023, 23027, 23030, 23035, 23040, 23044, 23047, 23052, 23056, 23061,
- 23065, 13012, 23070, 23073, 23076, 23080, 23085, 23098, 23102, 23105,
- 23113, 23122, 23129, 23134, 23140, 23146, 23153, 23160, 23164, 23168,
- 23172, 23177, 23182, 23186, 23194, 23199, 23211, 23222, 23227, 23231,
- 23235, 23241, 23246, 23251, 23255, 23258, 23264, 6346, 2270, 23268,
- 23273, 23289, 7842, 23309, 23318, 23334, 23338, 23341, 23347, 23357,
- 23363, 23378, 23390, 23401, 23409, 23418, 23424, 23433, 23443, 23454,
- 23465, 23474, 23483, 23491, 23498, 23506, 23519, 23526, 23532, 23537,
- 23546, 23552, 23557, 23565, 21516, 23577, 23589, 23603, 23611, 23618,
- 23630, 23639, 23648, 23656, 23664, 23672, 23679, 23688, 23696, 23706,
- 23715, 23725, 23734, 23743, 23751, 23756, 23760, 23763, 23767, 23771,
- 23775, 23779, 23783, 23789, 23795, 23803, 13057, 23810, 23815, 23822,
- 23828, 23835, 13065, 23842, 23845, 23857, 23865, 23871, 23876, 23880,
- 8245, 23891, 23901, 23910, 23917, 23921, 13070, 23924, 23931, 23935,
- 23941, 23944, 23951, 23957, 23961, 23966, 23970, 23979, 23986, 23992,
- 6387, 23999, 24007, 24014, 24020, 24025, 24031, 24037, 24045, 24049,
- 24052, 24054, 23768, 24063, 24069, 24079, 24084, 24091, 24097, 24102,
- 24107, 24112, 24117, 24124, 24133, 24140, 24149, 24155, 24160, 24166,
- 24171, 24178, 24189, 24194, 24198, 24208, 24214, 24218, 24223, 24233,
- 24242, 24246, 24253, 24261, 24268, 24274, 24279, 24287, 24294, 24306,
- 24315, 24319, 11362, 24327, 24337, 24341, 23109, 24352, 24357, 24361,
- 24368, 24375, 20117, 23693, 24380, 24384, 24387, 20954, 24392, 24406,
- 24422, 24440, 24459, 24476, 24494, 20973, 24511, 24531, 20990, 24543,
- 24555, 13983, 24567, 21010, 24581, 24593, 8885, 24607, 24612, 24617,
- 24622, 24628, 24634, 24640, 24644, 24651, 24656, 24666, 24672, 8532,
- 24678, 24680, 24685, 24693, 24697, 24120, 24703, 24710, 9869, 9879,
- 24717, 24727, 24732, 24736, 24739, 24745, 24753, 24765, 24775, 24791,
- 24804, 24818, 14001, 24832, 24839, 24843, 24846, 24851, 24855, 24862,
- 24869, 24879, 24884, 24889, 24894, 24902, 24910, 24919, 24924, 7939,
- 24928, 24931, 24934, 24939, 24946, 24951, 24967, 24975, 24983, 7790,
- 24991, 24996, 25000, 25006, 25012, 25015, 25021, 25033, 25041, 25048,
- 25054, 25061, 25072, 25086, 25099, 25108, 25120, 25131, 25141, 25150,
- 25159, 25167, 25178, 6369, 25185, 25191, 25196, 25202, 25209, 25219,
- 25229, 25238, 25244, 25251, 25256, 25263, 25271, 25279, 25291, 4704,
- 25298, 25307, 25315, 25321, 25327, 25332, 25336, 25339, 25345, 25352,
- 25357, 25362, 25366, 25378, 25389, 25398, 25406, 13197, 25411, 25417,
- 25423, 9862, 7049, 25428, 25431, 25434, 25440, 25448, 25456, 25460,
- 25464, 25469, 25472, 25481, 25489, 25500, 25504, 25510, 25516, 25520,
- 25526, 25534, 25556, 25580, 25587, 25594, 25600, 25606, 25611, 25622,
- 25640, 25647, 25655, 25659, 25668, 25681, 25689, 25701, 25712, 25722,
- 25736, 25745, 25753, 25765, 7859, 25776, 25787, 25799, 25809, 25818,
- 25823, 25827, 25835, 25845, 25850, 25854, 25857, 25860, 25868, 25876,
- 25885, 25895, 25904, 25910, 25924, 2617, 25946, 25957, 25966, 25976,
- 25988, 25997, 26007, 26015, 26023, 26032, 26037, 26048, 26053, 26064,
- 26068, 26078, 26087, 26095, 26105, 26115, 26123, 26132, 26139, 26147,
- 26154, 26163, 26167, 26175, 26182, 26190, 26197, 26208, 26223, 26230,
- 26236, 26246, 26255, 26261, 26268, 12312, 26274, 26278, 26283, 26287,
- 26291, 26299, 26307, 26313, 26322, 26329, 26334, 26339, 26349, 21568,
- 26353, 26356, 26361, 26366, 26371, 26376, 26381, 26386, 26391, 26396,
- 26402, 26407, 26412, 26418, 1223, 679, 26423, 26432, 2318, 26439, 26444,
- 26448, 26454, 1256, 541, 334, 26459, 26468, 26476, 26485, 26493, 26504,
- 26513, 26521, 26525, 26528, 26536, 26544, 26549, 13025, 26555, 26561,
- 26567, 4350, 26572, 26576, 26582, 26586, 26593, 1418, 26599, 7946, 26606,
- 26616, 26624, 26630, 26639, 26647, 26653, 26661, 26668, 9455, 26674,
- 26681, 26688, 1459, 2105, 26694, 26700, 26707, 26718, 26729, 26737,
- 26744, 26754, 26763, 26771, 26778, 26785, 26798, 26809, 26828, 1261,
- 26832, 26837, 26845, 3510, 26849, 26854, 26858, 1422, 22746, 26868,
- 26872, 26877, 26881, 3435, 26887, 26895, 26902, 26913, 26921, 26929,
- 3511, 269, 26934, 26942, 26950, 26957, 26963, 26968, 2170, 26975, 26981,
- 23962, 24184, 26987, 106, 26991, 26995, 27001, 606, 7695, 27006, 27013,
- 27019, 2281, 27023, 27027, 27030, 27033, 27038, 27045, 27051, 27056,
- 27064, 27071, 27077, 20455, 27081, 3581, 14826, 27085, 27090, 27093,
- 27101, 27109, 27112, 27119, 27129, 27141, 27146, 27150, 27158, 27165,
- 27171, 27178, 27185, 27188, 27192, 27196, 1426, 27206, 27208, 27213,
- 27219, 27225, 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27265,
- 27270, 27275, 27280, 27285, 27290, 27295, 27301, 27307, 27313, 27319,
- 27324, 27329, 27334, 27340, 27345, 27350, 27355, 27361, 27366, 27372,
- 27377, 27382, 27387, 27392, 27398, 27403, 27409, 27414, 27419, 27424,
- 27429, 27435, 27440, 27446, 27451, 27456, 27461, 27466, 27471, 27476,
- 27481, 27486, 27491, 27497, 27503, 27509, 27514, 27519, 27524, 27529,
- 27535, 27541, 27547, 27553, 27559, 27565, 27570, 27576, 27581, 27586,
- 27591, 27596, 27602, 2397, 27607, 2404, 2411, 2708, 27612, 2417, 2427,
- 27618, 27622, 27627, 27632, 27638, 27643, 27648, 27652, 27657, 27663,
- 27668, 27673, 27678, 27684, 27689, 27693, 27697, 27702, 27707, 27712,
- 27717, 27722, 27728, 27734, 27739, 27743, 27748, 27754, 27758, 27763,
- 27768, 27773, 27778, 27782, 27785, 27790, 27795, 27800, 27805, 27811,
- 27817, 27822, 27827, 27831, 27836, 27841, 27846, 27851, 27856, 27860,
- 27865, 27870, 27875, 27879, 27883, 27887, 27892, 27900, 27906, 27912,
- 27918, 27923, 27927, 27930, 27935, 27939, 27944, 27948, 27953, 27957,
- 27960, 15489, 27965, 27973, 19439, 26603, 27978, 27983, 27987, 27992,
- 27996, 28000, 28005, 28009, 28012, 28015, 28019, 28024, 28032, 28036,
- 28039, 28044, 28048, 28052, 28057, 28062, 28066, 28072, 28077, 28082,
- 28089, 28096, 28100, 28103, 28109, 28118, 28125, 28133, 28140, 28144,
- 28149, 28153, 28159, 28165, 28169, 28175, 28180, 28185, 28192, 28198,
- 28204, 28210, 28216, 28223, 28229, 28235, 28241, 28247, 28253, 28259,
- 28265, 28272, 28278, 28285, 28291, 28297, 28303, 28309, 28315, 28321,
- 28327, 28333, 28339, 9763, 28345, 28350, 28355, 28358, 28366, 28371,
- 28380, 28386, 28391, 28396, 28401, 28405, 28410, 28415, 28420, 28425,
- 28430, 28437, 28444, 28450, 28456, 28461, 14510, 28468, 28474, 28481,
- 28487, 28493, 28498, 28506, 28511, 14294, 28515, 28520, 28525, 28531,
- 28536, 28541, 28545, 28550, 28555, 28561, 28566, 28571, 28575, 28580,
- 28585, 28589, 28594, 28599, 28604, 28608, 28613, 28618, 28623, 28627,
- 28631, 13531, 28635, 28644, 28650, 28656, 28665, 28673, 28682, 28690,
- 28695, 28699, 28706, 28712, 28716, 28719, 28724, 28733, 28741, 28746,
- 1458, 28752, 28755, 28759, 20524, 20530, 28765, 28769, 28780, 28791,
- 28802, 28814, 28821, 28828, 28833, 28837, 4387, 733, 19438, 28845, 28849,
- 28854, 28860, 28865, 28871, 28876, 28882, 28887, 8764, 2785, 3365, 28891,
- 28894, 28900, 28906, 28912, 28919, 28925, 28931, 28937, 28943, 28949,
- 28955, 28961, 28967, 28973, 28979, 28985, 28991, 28998, 29004, 29010,
- 29016, 29022, 29028, 29033, 29036, 29043, 29051, 29056, 29061, 29067,
- 29072, 29077, 29081, 29086, 29092, 29097, 29103, 29108, 29114, 29119,
- 29125, 29131, 29135, 29140, 29145, 29150, 29155, 29159, 29164, 29169,
- 29174, 29180, 29186, 29192, 29198, 29203, 29207, 29210, 29216, 29222,
- 29231, 29239, 29246, 29251, 29255, 29259, 29264, 13395, 29269, 29277,
- 29283, 3611, 29288, 29291, 29295, 6436, 29301, 29307, 29314, 6445, 29318,
- 29324, 29331, 29337, 29346, 29354, 29366, 29370, 29377, 29383, 29387,
- 29390, 29399, 29407, 29412, 29416, 29426, 29436, 29446, 29452, 29457,
- 29467, 29472, 29485, 29499, 29510, 29522, 29534, 29548, 29561, 29573,
- 29585, 12859, 29599, 29604, 29609, 29613, 29617, 29621, 1743, 25129,
- 29625, 29630, 29635, 29639, 29642, 29647, 29652, 29658, 29664, 8461,
- 29669, 29676, 13935, 29682, 29687, 29692, 29696, 29701, 29706, 28855,
- 29711, 29716, 29721, 29727, 28861, 29732, 29735, 29742, 29750, 29756,
- 29762, 29768, 29779, 29784, 29791, 29798, 29805, 29813, 29822, 29831,
- 29837, 29843, 29851, 28866, 29856, 29862, 29868, 28872, 29873, 29881,
- 29889, 29895, 29902, 29908, 29915, 29922, 29928, 29936, 29946, 29953,
- 29958, 29964, 29969, 29974, 29981, 29990, 29998, 30003, 30009, 30016,
- 30024, 30030, 30035, 30041, 30050, 25890, 30057, 30061, 30066, 30075,
- 30080, 30085, 10714, 30093, 30098, 30103, 30107, 30112, 30117, 30124,
- 30129, 30134, 28877, 28883, 30140, 2473, 239, 30143, 30146, 30150, 30154,
- 30164, 30172, 30176, 30183, 30190, 30194, 30197, 30203, 30211, 30219,
- 30223, 30227, 30230, 30237, 30241, 30248, 30256, 30263, 30267, 30275,
- 684, 297, 30287, 30292, 30297, 30303, 30308, 30313, 3632, 30318, 30321,
- 30326, 30331, 30336, 30341, 30346, 30353, 20609, 30358, 30363, 30368,
- 30373, 30378, 30384, 30389, 30395, 29039, 30401, 30406, 30412, 30418,
- 30428, 30433, 30438, 30442, 30447, 30452, 30457, 30462, 30475, 30480,
- 20406, 14906, 3638, 30484, 30489, 30494, 30500, 30505, 30510, 30514,
- 30519, 30524, 30530, 30535, 30540, 30544, 30549, 30554, 30559, 30563,
- 30568, 30573, 30578, 30584, 30590, 30595, 30599, 30604, 30609, 30614,
- 30618, 30626, 30630, 30636, 30640, 30647, 14699, 30653, 30660, 30668,
- 30675, 30681, 30693, 30699, 30703, 2727, 30707, 30711, 30232, 30720,
- 30731, 30736, 30741, 30746, 30750, 30755, 20535, 30759, 30764, 19459,
- 30768, 30773, 30779, 30784, 30788, 30792, 30795, 30799, 30805, 30816,
- 30828, 30833, 30837, 30840, 343, 30844, 30849, 30854, 30859, 30864,
- 30869, 30875, 30880, 30885, 30891, 30896, 30902, 30907, 30913, 30918,
- 30923, 30928, 30933, 30938, 30943, 30948, 30953, 30959, 30964, 30969,
- 30974, 30979, 30984, 30989, 30994, 31000, 31006, 31011, 31016, 31021,
- 31026, 31031, 31036, 31041, 31046, 31051, 31056, 31061, 31066, 31071,
- 31076, 31081, 31086, 31091, 31096, 31102, 26, 31107, 31111, 31115, 31123,
- 31127, 31131, 31134, 31137, 31139, 31144, 31148, 31153, 31157, 31162,
- 31166, 31171, 31175, 31178, 31180, 31185, 31189, 31200, 31203, 31205,
- 31209, 31221, 31230, 31234, 31240, 31245, 31254, 31260, 31265, 31270,
- 31274, 31279, 31286, 31291, 31297, 31302, 31306, 31313, 23701, 23711,
- 31317, 31322, 31327, 31332, 31339, 31343, 31350, 6544, 31356, 31365,
- 31373, 31388, 31402, 31410, 31421, 31430, 31435, 5681, 31445, 31450,
- 31455, 31459, 31462, 31466, 31471, 31475, 31482, 31487, 31492, 7320,
- 31502, 31504, 31507, 31511, 31517, 31521, 31526, 31531, 31537, 31542,
- 31548, 31553, 31563, 31572, 31580, 31585, 31591, 31596, 31603, 31607,
- 31615, 31622, 31635, 31643, 31647, 31657, 31662, 31666, 31674, 31682,
- 31686, 31695, 31701, 31706, 31714, 31724, 31733, 31742, 31751, 31762,
- 31770, 31781, 31790, 31797, 31803, 31808, 31819, 31824, 31828, 31831,
- 31835, 31843, 31849, 31857, 31864, 31870, 31875, 31881, 2372, 31885,
- 31887, 31892, 31897, 31900, 31902, 31906, 31909, 31916, 31920, 31924,
- 31927, 31933, 31943, 31948, 31954, 31958, 31963, 31976, 24074, 31982,
- 31991, 15654, 31998, 32007, 29432, 32015, 32020, 32024, 32032, 32039,
- 32044, 32048, 32053, 32057, 32065, 32071, 32077, 32082, 32086, 32089,
- 32094, 32107, 32123, 21080, 32140, 32152, 32169, 32181, 32195, 21097,
- 21116, 32207, 32219, 2634, 32233, 32238, 32243, 32248, 32252, 32259,
- 32271, 32277, 32280, 32291, 32302, 29848, 670, 32307, 32311, 32314,
- 32319, 32324, 32330, 32335, 32340, 32346, 32352, 32357, 32361, 32366,
- 32371, 32376, 32380, 32383, 32389, 32394, 32399, 32404, 32408, 32413,
- 32419, 32427, 24299, 32432, 32437, 32444, 32450, 32456, 32461, 32469,
- 20618, 32476, 32481, 32486, 32491, 32495, 32498, 32503, 32507, 32511,
- 32518, 32524, 32530, 32536, 32543, 32548, 32554, 31677, 32558, 32562,
- 32567, 32580, 32585, 32591, 32599, 32606, 32614, 32624, 32630, 32636,
- 32642, 32646, 32655, 32660, 32665, 8787, 32670, 32677, 32683, 32693,
- 32698, 32704, 32712, 3543, 32719, 32726, 3549, 32730, 32735, 32746,
- 32753, 32759, 32768, 32772, 3932, 32775, 32782, 32788, 32794, 32802,
- 32812, 26958, 32819, 32827, 32833, 32838, 32844, 32849, 32855, 32859,
- 32866, 32872, 32881, 24094, 32888, 32893, 32897, 32905, 32913, 7974,
- 4373, 32920, 32924, 32928, 32933, 32939, 32944, 32949, 32956, 30349,
- 32962, 32967, 32971, 32976, 32980, 32989, 32993, 32999, 33006, 33012,
- 33019, 33024, 33033, 33038, 33042, 33047, 33054, 33062, 33070, 33075,
- 19508, 33079, 33082, 33086, 33090, 33094, 33097, 33099, 33104, 33112,
- 33116, 33123, 33127, 33135, 33142, 33152, 33156, 33160, 33168, 33176,
- 33182, 33187, 33196, 11669, 33202, 33211, 33216, 33223, 33231, 33239,
- 33247, 33254, 33261, 33268, 33275, 33282, 33287, 33293, 33310, 33318,
- 33328, 33336, 33343, 385, 33347, 33353, 33357, 33362, 31426, 33368,
- 33371, 33375, 33383, 3554, 33391, 33397, 33403, 33412, 33422, 33429,
- 33435, 3560, 3566, 33444, 33451, 33459, 33464, 33468, 33475, 33483,
- 33489, 33498, 33508, 33514, 33522, 33531, 33538, 33546, 20175, 33553,
- 33560, 33566, 33576, 33585, 33596, 33600, 33610, 33616, 33623, 33631,
- 33640, 33649, 33659, 33670, 33677, 33682, 33689, 2967, 33697, 33703,
- 33708, 33714, 33720, 33725, 33738, 33751, 33764, 33771, 33777, 33785,
- 33790, 33794, 1432, 33798, 33803, 33808, 33813, 33818, 33824, 33829,
- 33834, 33839, 33844, 33849, 33854, 33859, 33865, 33871, 33876, 33881,
- 33887, 33892, 33897, 33902, 33908, 33913, 33918, 33923, 33928, 33934,
- 33939, 33944, 33950, 33955, 33960, 33965, 33970, 33975, 33981, 33986,
- 33992, 33997, 34003, 34008, 34013, 34018, 34024, 34030, 34036, 34042,
- 34048, 34054, 34060, 34066, 34071, 34076, 34082, 34087, 34092, 34097,
- 34102, 34107, 34112, 34117, 34123, 34128, 34133, 34139, 34145, 101,
- 34150, 34152, 34156, 34160, 34164, 34169, 34173, 7895, 34177, 34183,
- 4738, 34189, 34192, 34197, 34201, 34206, 34210, 34214, 34219, 8594,
- 34223, 34227, 34231, 13623, 34236, 34240, 34245, 34250, 34255, 34259,
- 34266, 24098, 34272, 34275, 34279, 34284, 34290, 34294, 34302, 34308,
- 34313, 34317, 34323, 34327, 34331, 3404, 3409, 27144, 34334, 34342,
- 34349, 34353, 34360, 34365, 333, 34370, 34374, 34380, 34392, 34398,
- 34404, 34408, 34414, 34423, 34427, 34431, 34436, 34441, 34446, 34450,
- 34454, 34461, 34467, 34472, 34487, 34502, 34517, 34533, 34551, 8544,
- 34565, 34572, 34576, 34579, 34588, 34593, 34597, 34605, 31628, 34613,
- 34617, 34627, 27114, 34638, 34642, 34651, 34659, 8152, 13163, 34663,
- 34666, 34669, 6557, 3802, 34674, 34682, 34686, 34689, 34693, 34698,
- 34703, 34709, 34715, 34720, 34724, 23946, 34728, 34732, 34738, 34742,
- 7446, 34751, 34758, 34762, 10210, 34769, 34775, 34780, 34787, 34794,
- 34801, 26480, 6480, 34808, 34815, 34822, 34828, 34833, 34840, 34851,
- 34857, 34862, 34867, 34874, 34878, 34882, 34892, 34903, 34909, 34914,
- 34919, 34924, 34929, 34934, 34938, 34942, 34948, 34956, 2273, 828, 8616,
- 8621, 8627, 34965, 8632, 8637, 8643, 34970, 34980, 34984, 8648, 34989,
- 34992, 34997, 35001, 35006, 35011, 35018, 35025, 35033, 8557, 35040,
- 35043, 35049, 35059, 4407, 35068, 35072, 35080, 35084, 35094, 35100,
- 35111, 35117, 35123, 35128, 35134, 35140, 35146, 35151, 35154, 35161,
- 35167, 35172, 35179, 35186, 35190, 35200, 35213, 35222, 35231, 35242,
- 35255, 35266, 35275, 35286, 35291, 35300, 35305, 8653, 35311, 35318,
- 35326, 35331, 35335, 35342, 35349, 3757, 21, 35353, 35358, 14958, 35362,
- 35365, 35368, 26001, 35372, 26489, 35380, 35384, 35388, 35391, 35397,
- 35403, 35411, 35417, 35424, 25993, 35428, 26178, 35432, 35441, 35447,
- 35453, 35458, 35462, 35468, 35472, 35475, 35483, 35491, 24156, 35497,
- 35504, 35510, 35515, 35520, 35524, 35530, 35535, 35541, 3973, 755, 35548,
- 35552, 35555, 13513, 35567, 33527, 35578, 35581, 35588, 35594, 35598,
- 35604, 35609, 35615, 35620, 35625, 35629, 35633, 35638, 35643, 35653,
- 35659, 35672, 35678, 35685, 35690, 35696, 35701, 14844, 1435, 1002,
- 28974, 28980, 35706, 28986, 28999, 29005, 29011, 35712, 29017, 29023,
- 35718, 35724, 14, 35732, 35739, 35743, 35747, 35755, 29737, 35759, 35763,
- 35770, 35775, 35779, 35784, 35790, 35795, 35801, 35806, 35810, 35814,
- 35818, 35823, 35827, 35832, 35836, 35843, 35848, 35852, 35857, 35861,
- 35866, 35870, 35875, 35881, 13733, 13738, 35886, 35890, 35893, 35897,
- 35902, 35906, 35912, 35919, 35924, 35934, 35939, 35947, 35951, 35954,
- 29752, 35958, 4026, 35963, 35968, 35972, 35977, 35981, 35986, 11687,
- 35997, 36001, 36004, 36009, 36013, 36017, 36020, 36024, 6576, 11703,
- 36027, 36030, 36035, 36039, 36048, 36064, 36080, 36090, 25900, 36097,
- 36101, 36106, 36111, 36115, 36119, 33644, 36125, 36130, 36134, 36141,
- 36146, 36150, 36154, 24958, 36160, 19603, 36165, 36172, 36180, 36186,
- 36193, 36201, 36207, 36211, 36217, 36225, 36229, 36238, 7876, 36246,
- 36250, 36258, 36265, 36270, 36275, 36279, 36282, 36286, 36289, 36293,
- 36300, 36305, 36311, 24377, 29034, 36315, 36322, 36328, 36334, 36339,
- 36342, 36344, 36351, 36358, 36364, 36368, 36371, 36375, 36379, 36383,
- 36388, 36392, 36396, 36399, 36403, 36417, 21146, 36436, 36449, 36462,
- 36475, 21164, 36490, 8846, 36505, 36511, 36515, 36519, 36526, 36531,
- 36535, 36542, 36548, 36553, 36559, 36569, 36581, 36592, 36597, 36604,
- 36608, 36612, 36615, 14129, 3605, 36623, 13760, 36636, 36643, 36647,
- 36651, 36656, 36661, 36667, 36671, 36675, 36678, 6188, 13771, 36683,
- 36687, 36693, 36702, 36707, 33504, 36713, 36718, 36722, 36727, 36734,
- 36738, 36741, 12824, 36746, 36753, 1009, 36757, 36762, 36767, 36773,
- 36778, 36783, 36787, 36797, 36802, 36808, 36813, 36819, 36824, 36830,
- 36840, 36845, 36850, 36854, 5683, 5695, 36859, 36862, 36869, 36875,
- 31793, 31800, 36884, 36888, 29800, 36896, 36907, 36915, 33692, 36922,
- 36927, 36932, 36943, 36950, 36961, 29824, 19609, 36969, 722, 36974,
- 36980, 25984, 36986, 36991, 37001, 37010, 37017, 37023, 37027, 37030,
- 37037, 37043, 37050, 37056, 37066, 37074, 37080, 37086, 37091, 37095,
- 37102, 37108, 37115, 36384, 530, 12112, 37121, 37126, 37129, 37135,
- 37143, 1364, 37148, 37152, 37157, 37164, 37170, 37174, 37179, 37188,
- 37195, 37205, 37211, 26019, 37228, 37237, 37245, 37251, 37256, 37263,
- 37269, 37277, 37286, 37294, 37298, 37303, 37311, 29833, 37317, 37336,
- 14062, 37350, 37366, 37380, 37386, 37391, 37396, 37401, 37407, 29839,
- 37412, 37419, 37424, 37428, 341, 2878, 37435, 37440, 37445, 25275, 37266,
- 37449, 37454, 37462, 37466, 37469, 37475, 37479, 26074, 37482, 37487,
- 37491, 37494, 37499, 37503, 37508, 37513, 37517, 37522, 37526, 37530,
- 19346, 19357, 37534, 37539, 37545, 24915, 37550, 37554, 19425, 14280,
- 37557, 37562, 37567, 37572, 37577, 37582, 37587, 37592, 440, 43, 29052,
- 29057, 29062, 29068, 29073, 29078, 37597, 29082, 37601, 37605, 29087,
- 29093, 37609, 29104, 29109, 37617, 37622, 29115, 37627, 37632, 37637,
- 37642, 37648, 37654, 37660, 29132, 37673, 37679, 29136, 37683, 29141,
- 37688, 29146, 29151, 37691, 37696, 37700, 28795, 37706, 11911, 37713,
- 37718, 29156, 37722, 37727, 37732, 37737, 37741, 37746, 37751, 37757,
- 37762, 37767, 37773, 37779, 37784, 37788, 37793, 37798, 37803, 37807,
- 37812, 37817, 37822, 37828, 37834, 37840, 37845, 37849, 37854, 37858,
- 29160, 29165, 29170, 37862, 37866, 29175, 29181, 29187, 29199, 37878,
- 23983, 37882, 37886, 37891, 37896, 37901, 37905, 37909, 37919, 37924,
- 37929, 37933, 37937, 37940, 37948, 29247, 37953, 1442, 37959, 37967,
- 37976, 37980, 37988, 37994, 38002, 38018, 38023, 38038, 29284, 1712,
- 10375, 38042, 2924, 38054, 38055, 38063, 38070, 38075, 38082, 38087,
- 7746, 1090, 8675, 38094, 38099, 38102, 38105, 38114, 1275, 38119, 36532,
- 38126, 38131, 20583, 2511, 38135, 9094, 38145, 38151, 2291, 2301, 38160,
- 38169, 38179, 38190, 3235, 31944, 8727, 3735, 14882, 1280, 38195, 38203,
- 38210, 38215, 38219, 38223, 21930, 8754, 38231, 38240, 38249, 38257,
- 38264, 38269, 38282, 38295, 38307, 38319, 38331, 38344, 38355, 38366,
- 38376, 38384, 38392, 38404, 38416, 38427, 38436, 38444, 38451, 38463,
- 38470, 38479, 38486, 38499, 38504, 38514, 38519, 38525, 38530, 34759,
- 38534, 38541, 38545, 38552, 38560, 2472, 38567, 38578, 38588, 38597,
- 38605, 38615, 38623, 38633, 38642, 38647, 38653, 38659, 38670, 38680,
- 38689, 38698, 38708, 38716, 38725, 38730, 38735, 38740, 1668, 37, 38748,
- 38756, 38767, 38778, 14563, 38788, 38795, 38801, 38806, 38810, 38821,
- 38831, 38840, 38851, 14931, 14936, 38856, 38865, 38870, 38880, 38885,
- 38893, 38901, 38908, 38914, 5536, 1038, 38918, 38924, 38929, 38932, 2075,
- 36648, 38940, 38944, 38947, 1475, 38953, 12261, 1285, 38958, 38971,
- 38985, 2597, 39003, 39015, 39027, 2611, 2628, 39041, 39054, 2643, 39068,
- 39080, 2658, 39094, 1291, 1297, 1303, 9012, 39099, 39104, 39109, 39113,
- 39128, 39143, 39158, 39173, 39188, 39203, 39218, 39233, 39248, 39263,
- 39278, 39293, 39308, 39323, 39338, 39353, 39368, 39383, 39398, 39413,
- 39428, 39443, 39458, 39473, 39488, 39503, 39518, 39533, 39548, 39563,
- 39578, 39593, 39608, 39623, 39638, 39653, 39668, 39683, 39698, 39713,
- 39728, 39743, 39758, 39773, 39788, 39803, 39818, 39833, 39848, 39863,
- 39878, 39893, 39908, 39923, 39938, 39953, 39968, 39983, 39998, 40013,
- 40028, 40043, 40058, 40073, 40088, 40103, 40118, 40133, 40148, 40163,
- 40178, 40193, 40208, 40223, 40238, 40253, 40268, 40283, 40298, 40313,
- 40328, 40343, 40358, 40373, 40388, 40403, 40418, 40433, 40448, 40463,
- 40478, 40493, 40508, 40523, 40538, 40553, 40568, 40583, 40598, 40613,
- 40628, 40643, 40658, 40673, 40688, 40703, 40718, 40733, 40748, 40763,
- 40778, 40793, 40808, 40823, 40838, 40853, 40868, 40883, 40898, 40913,
- 40928, 40943, 40958, 40973, 40988, 41003, 41018, 41033, 41048, 41063,
- 41078, 41093, 41108, 41123, 41138, 41153, 41168, 41183, 41198, 41213,
- 41228, 41243, 41258, 41273, 41288, 41303, 41318, 41333, 41348, 41363,
- 41378, 41393, 41408, 41423, 41438, 41453, 41468, 41483, 41498, 41513,
- 41528, 41543, 41558, 41573, 41588, 41603, 41618, 41633, 41648, 41663,
- 41678, 41693, 41708, 41723, 41738, 41753, 41768, 41783, 41798, 41813,
- 41828, 41843, 41858, 41873, 41888, 41903, 41918, 41933, 41948, 41963,
- 41978, 41993, 42008, 42023, 42038, 42053, 42068, 42083, 42098, 42113,
- 42128, 42143, 42158, 42173, 42188, 42203, 42218, 42233, 42248, 42263,
- 42278, 42293, 42308, 42323, 42338, 42353, 42368, 42383, 42398, 42413,
- 42428, 42443, 42458, 42473, 42488, 42503, 42518, 42533, 42548, 42563,
- 42578, 42593, 42608, 42623, 42638, 42653, 42668, 42683, 42698, 42713,
- 42728, 42743, 42758, 42773, 42788, 42803, 42818, 42833, 42848, 42863,
- 42878, 42893, 42908, 42923, 42938, 42953, 42968, 42983, 42998, 43013,
- 43028, 43043, 43058, 43073, 43088, 43103, 43118, 43133, 43148, 43163,
- 43178, 43193, 43208, 43223, 43238, 43253, 43268, 43283, 43298, 43313,
- 43328, 43343, 43358, 43373, 43388, 43403, 43418, 43433, 43448, 43463,
- 43478, 43493, 43508, 43523, 43538, 43553, 43568, 43583, 43598, 43613,
- 43628, 43643, 43658, 43673, 43688, 43703, 43718, 43733, 43748, 43763,
- 43778, 43793, 43808, 43823, 43838, 43853, 43868, 43883, 43898, 43913,
- 43928, 43943, 43958, 43973, 43988, 44003, 44018, 44033, 44048, 44063,
- 44078, 44093, 44108, 44123, 44138, 44153, 44168, 44183, 44198, 44213,
- 44228, 44243, 44258, 44273, 44288, 44303, 44318, 44333, 44348, 44363,
- 44378, 44393, 44408, 44423, 44438, 44453, 44468, 44483, 44498, 44513,
- 44528, 44543, 44558, 44573, 44588, 44603, 44618, 44633, 44648, 44663,
- 44678, 44693, 44708, 44723, 44738, 44753, 44768, 44783, 44798, 44813,
- 44828, 44843, 44858, 44873, 44888, 44903, 44918, 44933, 44948, 44963,
- 44978, 44993, 45008, 45023, 45038, 45053, 45068, 45083, 45098, 45113,
- 45128, 45143, 45158, 45173, 45188, 45203, 45218, 45233, 45248, 45263,
- 45278, 45293, 45308, 45323, 45338, 45353, 45368, 45383, 45398, 45413,
- 45428, 45443, 45458, 45473, 45488, 45503, 45518, 45533, 45548, 45563,
- 45578, 45593, 45608, 45623, 45638, 45653, 45668, 45683, 45698, 45713,
- 45728, 45743, 45758, 45773, 45788, 45803, 45818, 45833, 45848, 45863,
- 45878, 45893, 45908, 45923, 45938, 45953, 45968, 45983, 45998, 46013,
- 46028, 46043, 46058, 46073, 46088, 46103, 46118, 46133, 46148, 46163,
- 46178, 46193, 46208, 46223, 46238, 46253, 46268, 46283, 46298, 46313,
- 46328, 46343, 46358, 46373, 46388, 46403, 46418, 46433, 46448, 46463,
- 46478, 46493, 46508, 46523, 46538, 46553, 46568, 46583, 46598, 46613,
- 46628, 46643, 46658, 46673, 46688, 46703, 46718, 46733, 46748, 46763,
- 46778, 46793, 46808, 46823, 46838, 46853, 46868, 46883, 46899, 46915,
- 46931, 46947, 46963, 46979, 46995, 47011, 47027, 47043, 47059, 47075,
- 47091, 47107, 47123, 47139, 47155, 47171, 47187, 47203, 47219, 47235,
- 47251, 47267, 47283, 47299, 47315, 47331, 47347, 47363, 47379, 47395,
- 47411, 47427, 47443, 47459, 47475, 47491, 47507, 47523, 47539, 47555,
- 47571, 47587, 47603, 47619, 47635, 47651, 47667, 47683, 47699, 47715,
- 47731, 47747, 47763, 47779, 47795, 47811, 47827, 47843, 47859, 47875,
- 47891, 47907, 47923, 47939, 47955, 47971, 47987, 48003, 48019, 48035,
- 48051, 48067, 48083, 48099, 48115, 48131, 48147, 48163, 48179, 48195,
- 48211, 48227, 48243, 48259, 48275, 48291, 48307, 48323, 48339, 48355,
- 48371, 48387, 48403, 48419, 48435, 48451, 48467, 48483, 48499, 48515,
- 48531, 48547, 48563, 48579, 48595, 48611, 48627, 48643, 48659, 48675,
- 48691, 48707, 48723, 48739, 48755, 48771, 48787, 48803, 48819, 48835,
- 48851, 48867, 48883, 48899, 48915, 48931, 48947, 48963, 48979, 48995,
- 49011, 49027, 49043, 49059, 49075, 49091, 49107, 49123, 49139, 49155,
- 49171, 49187, 49203, 49219, 49235, 49251, 49267, 49283, 49299, 49315,
- 49331, 49347, 49363, 49379, 49395, 49411, 49427, 49443, 49459, 49475,
- 49491, 49507, 49523, 49539, 49555, 49571, 49587, 49603, 49619, 49635,
- 49651, 49667, 49683, 49699, 49715, 49731, 49747, 49763, 49779, 49795,
- 49811, 49827, 49843, 49859, 49875, 49891, 49907, 49923, 49939, 49955,
- 49971, 49987, 50003, 50019, 50035, 50051, 50067, 50083, 50099, 50115,
- 50131, 50147, 50163, 50179, 50195, 50211, 50227, 50243, 50259, 50275,
- 50291, 50307, 50323, 50339, 50355, 50371, 50387, 50403, 50419, 50435,
- 50451, 50467, 50483, 50499, 50515, 50531, 50547, 50563, 50579, 50595,
- 50611, 50627, 50643, 50659, 50675, 50691, 50707, 50723, 50739, 50755,
- 50771, 50787, 50803, 50819, 50835, 50851, 50867, 50883, 50899, 50915,
- 50931, 50947, 50963, 50979, 50995, 51011, 51027, 51043, 51059, 51075,
- 51091, 51107, 51123, 51139, 51155, 51171, 51187, 51203, 51219, 51235,
- 51251, 51267, 51283, 51299, 51315, 51331, 51347, 51363, 51379, 51395,
- 51411, 51427, 51443, 51459, 51475, 51491, 51507, 51523, 51539, 51555,
- 51571, 51587, 51603, 51619, 51635, 51651, 51667, 51683, 51699, 51715,
- 51731, 51747, 51763, 51779, 51795, 51811, 51827, 51843, 51859, 51875,
- 51891, 51907, 51923, 51939, 51955, 51971, 51987, 52003, 52019, 52035,
- 52051, 52067, 52083, 52099, 52115, 52131, 52147, 52163, 52179, 52195,
- 52211, 52227, 52243, 52259, 52275, 52291, 52307, 52323, 52339, 52355,
- 52371, 52387, 52403, 52419, 52435, 52451, 52467, 52483, 52499, 52515,
- 52531, 52547, 52563, 52579, 52595, 52611, 52627, 52643, 52659, 52675,
- 52691, 52707, 52723, 52739, 52755, 52771, 52787, 52803, 52819, 52835,
- 52851, 52867, 52883, 52899, 52915, 52931, 52947, 52963, 52979, 52995,
- 53011, 53027, 53043, 53059, 53075, 53091, 53107, 53123, 53139, 53155,
- 53171, 53187, 53203, 53219, 53235, 53251, 53267, 53283, 53299, 53315,
- 53331, 53347, 53363, 53379, 53395, 53411, 53427, 53443, 53459, 53475,
- 53491, 53507, 53523, 53539, 53555, 53571, 53587, 53603, 53619, 53635,
- 53651, 53667, 53683, 53699, 53715, 53731, 53747, 53763, 53779, 53795,
- 53811, 53827, 53843, 53859, 53875, 53891, 53907, 53923, 53939, 53955,
- 53971, 53987, 54003, 54019, 54035, 54051, 54067, 54083, 54099, 54115,
- 54131, 54147, 54163, 54179, 54195, 54211, 54227, 54243, 54259, 54275,
- 54291, 54307, 54323, 54339, 54355, 54371, 54387, 54403, 54419, 54435,
- 54451, 54467, 54483, 54499, 54515, 54531, 54547, 54563, 54579, 54595,
- 54611, 54627, 54643, 54659, 54675, 54691, 54707, 54723, 54739, 54755,
- 54771, 54787, 54803, 54819, 54835, 54851, 54867, 54883, 54899, 54915,
- 54931, 54947, 54963, 54979, 54995, 55011, 55027, 55043, 55059, 55075,
- 55091, 55107, 55123, 55139, 55155, 55171, 55187, 55203, 55219, 55235,
- 55251, 55267, 55283, 55299, 55315, 55331, 55347, 55363, 55379, 55395,
- 55411, 55427, 55443, 55459, 55475, 55491, 55507, 55523, 55539, 55555,
- 55570, 14963, 55579, 55585, 55591, 55601, 55609, 13144, 13683, 8319,
- 55622, 1483, 55630, 25385, 5637, 55636, 55641, 55646, 55651, 55656,
- 55662, 55667, 55673, 55678, 55684, 55689, 55694, 55699, 55704, 55710,
- 55715, 55720, 55725, 55730, 55735, 55740, 55745, 55751, 55756, 55762,
- 55769, 2515, 55774, 55780, 6948, 55784, 55789, 55796, 55804, 40, 55808,
- 55814, 55819, 55824, 55828, 55833, 55837, 55841, 9037, 55845, 55855,
- 55868, 55879, 55892, 55899, 55905, 55910, 55916, 55922, 55928, 55933,
- 55938, 55943, 55948, 55952, 55957, 55962, 55967, 55973, 55979, 55985,
- 55990, 55994, 55999, 56004, 56008, 56013, 56018, 56023, 56027, 9053,
- 9064, 9069, 1526, 56031, 1531, 56037, 56040, 1562, 56046, 1568, 1574,
- 9099, 56051, 56059, 56066, 56070, 56076, 56081, 28824, 56086, 56093,
- 56098, 56102, 56106, 1579, 14538, 14549, 56115, 56122, 56127, 56131,
- 14568, 1583, 34897, 56134, 56139, 56149, 56158, 56163, 56167, 56173,
- 1588, 36719, 56178, 56187, 56193, 56198, 9249, 9255, 56204, 56216, 56233,
- 56250, 56267, 56284, 56301, 56318, 56335, 56352, 56369, 56386, 56403,
- 56420, 56437, 56454, 56471, 56488, 56505, 56522, 56539, 56556, 56573,
- 56590, 56607, 56624, 56641, 56658, 56675, 56692, 56709, 56726, 56743,
- 56760, 56777, 56794, 56811, 56828, 56845, 56862, 56879, 56896, 56913,
- 56930, 56947, 56964, 56981, 56998, 57015, 57032, 57049, 57060, 57065,
- 1593, 57069, 57075, 57080, 7693, 1598, 57085, 57094, 25664, 57099, 57110,
- 57120, 57125, 57132, 57138, 57143, 57148, 14820, 57152, 9266, 1603, 9271,
- 57158, 57163, 57169, 57174, 57179, 57184, 57189, 57194, 57199, 57204,
- 57210, 57216, 57222, 57227, 57231, 57236, 57241, 57245, 57250, 57255,
- 57260, 57264, 57269, 57275, 57280, 57285, 57289, 57294, 57299, 57305,
- 57310, 57315, 57321, 57327, 57332, 57336, 57341, 57346, 57351, 57355,
- 57360, 57365, 57370, 57376, 57382, 57387, 57391, 57395, 57400, 57405,
- 57410, 27024, 57414, 57419, 57424, 57430, 57435, 57440, 57444, 57449,
- 57454, 57460, 57465, 57470, 57476, 57482, 57487, 57491, 57496, 57501,
- 57505, 57510, 57515, 57520, 57526, 57532, 57537, 57541, 57546, 57551,
- 57555, 57560, 57565, 57570, 57574, 57577, 29395, 57582, 57590, 14886,
- 14910, 9362, 57596, 57606, 57621, 9367, 57632, 57637, 57648, 57660,
- 57672, 57684, 2649, 57696, 57701, 57705, 57711, 57717, 57722, 1615, 1010,
- 57731, 57736, 36758, 57740, 57744, 57749, 57753, 14971, 57758, 57761,
- 57769, 57777, 1619, 9392, 9398, 1624, 57785, 57792, 57797, 57806, 57816,
- 57823, 57828, 1629, 57835, 57840, 15086, 57844, 57849, 57856, 57862,
- 57866, 57877, 57887, 15108, 7616, 7623, 1634, 57894, 57900, 57908, 57915,
- 57921, 57928, 57940, 57946, 57951, 57963, 57974, 57983, 57993, 3668,
- 28660, 28669, 15148, 1639, 1643, 58001, 58012, 58017, 1646, 58025, 58030,
- 58042, 58048, 58053, 58061, 1651, 58066, 58071, 58079, 58087, 58094,
- 58103, 58111, 58120, 1656, 58124, 1661, 58129, 58136, 15268, 58144,
- 58150, 58155, 58163, 58170, 58178, 20658, 58183, 9527, 58192, 58198,
- 58205, 58212, 58218, 58228, 58234, 58239, 58244, 58252, 9536, 9541,
- 58260, 58266, 58274, 3733, 36846, 58279, 58285, 58290, 58298, 58305,
- 10356, 58310, 58316, 1672, 58321, 58324, 1058, 58330, 58335, 58340,
- 58346, 58351, 58356, 58361, 58366, 58371, 58376, 1681, 9, 58382, 58386,
- 58391, 58395, 58399, 58403, 29643, 58408, 58413, 58418, 58422, 58425,
- 58429, 58433, 58438, 58442, 58447, 58451, 32315, 32320, 32325, 58454,
- 58461, 58467, 36585, 58477, 32331, 29891, 29653, 29659, 32347, 29665,
- 58482, 58487, 29924, 58491, 58494, 58498, 58505, 58508, 58513, 58517,
- 58521, 58524, 58534, 58546, 58553, 31282, 58556, 13936, 821, 58559,
- 58563, 58568, 58572, 58575, 11944, 58582, 58589, 58602, 58610, 58619,
- 58624, 58634, 58647, 58659, 58666, 58671, 58680, 58693, 33732, 58711,
- 58716, 58723, 58729, 58734, 58742, 58749, 25224, 613, 58755, 58761,
- 58771, 58777, 58782, 29683, 4481, 29697, 58786, 58796, 58801, 58811,
- 58826, 58832, 58838, 29707, 58843, 28856, 58847, 58852, 58857, 58861,
- 58866, 15151, 58873, 58878, 58882, 4522, 29733, 58886, 58892, 327, 58902,
- 58909, 58916, 58921, 58930, 56143, 58936, 58944, 58948, 58952, 58956,
- 58960, 58965, 58969, 58975, 58983, 58988, 58993, 58997, 59002, 59006,
- 59010, 59016, 59022, 59027, 59031, 29857, 59036, 29863, 29869, 59041,
- 59047, 59054, 59059, 59063, 28873, 14813, 59066, 59070, 59075, 59082,
- 59088, 59092, 59097, 36295, 59103, 59107, 59111, 59116, 59122, 59128,
- 59140, 59149, 59159, 59165, 59172, 59177, 59182, 59186, 59189, 59195,
- 59202, 59207, 59212, 59219, 59226, 59232, 59237, 59242, 59250, 59255,
- 2377, 59259, 59264, 59270, 59275, 59281, 59286, 59291, 59296, 59302,
- 29890, 59307, 59313, 59319, 59325, 29954, 59330, 59335, 59340, 29965,
- 59345, 59350, 59355, 59361, 59367, 29970, 59372, 59377, 59382, 30025,
- 30031, 59387, 59392, 30036, 59397, 25891, 30058, 30062, 59402, 59378,
- 59406, 59414, 59420, 59428, 59435, 59441, 59451, 59457, 59464, 8984,
- 30076, 59470, 59483, 59492, 59498, 59507, 59513, 21575, 59520, 59527,
- 59537, 30026, 59540, 59547, 59552, 59556, 59560, 59565, 4598, 59569,
- 59574, 59579, 32409, 32414, 59583, 32428, 59588, 32433, 59593, 59599,
- 32445, 32451, 32457, 59604, 59610, 20619, 59621, 59624, 59636, 59644,
- 30094, 59648, 59657, 59667, 59676, 30099, 59681, 59688, 59697, 59703,
- 59711, 59718, 4573, 4310, 59723, 30037, 59729, 59732, 59738, 59745,
- 59750, 59755, 21502, 59759, 59765, 59771, 59776, 59781, 59785, 59791,
- 59797, 31196, 826, 33406, 34304, 34310, 59802, 59806, 59810, 59813,
- 59826, 59832, 59836, 59839, 59844, 31495, 59848, 28878, 19446, 59854,
- 4502, 4510, 7472, 59857, 59862, 59867, 59872, 59877, 59882, 59887, 59892,
- 59897, 59902, 59908, 59913, 59918, 59924, 59929, 59934, 59939, 59944,
- 59949, 59954, 59960, 59965, 59971, 59976, 59981, 59986, 59991, 59996,
- 60001, 60006, 60011, 60016, 60021, 60027, 60032, 60037, 60042, 60047,
- 60052, 60057, 60063, 60068, 60073, 60078, 60083, 60088, 60093, 60098,
- 60103, 60108, 60114, 60119, 60124, 60129, 60134, 60140, 60146, 60151,
- 60157, 60162, 60167, 60172, 60177, 60182, 1476, 240, 60187, 60191, 60195,
- 60199, 23157, 60203, 60207, 60212, 60216, 60221, 60225, 60229, 60233,
- 60238, 60242, 11681, 60247, 60251, 60258, 13444, 60267, 60276, 60280,
- 60285, 60290, 60294, 22960, 2957, 60298, 60304, 60313, 60321, 60327,
- 60339, 60351, 60355, 60360, 60364, 60370, 60376, 60381, 60391, 60401,
- 60407, 60412, 60416, 60421, 60427, 60436, 60445, 60453, 13798, 60457,
- 60466, 60474, 60486, 60497, 60508, 60517, 60521, 60530, 60540, 60546,
- 60551, 60557, 60562, 98, 28772, 60573, 24228, 24238, 60579, 60586, 60592,
- 60596, 60606, 60617, 60625, 60634, 60639, 60644, 60648, 15504, 60656,
- 60660, 60666, 60676, 60683, 60689, 32508, 1162, 60695, 60698, 60702,
- 60712, 60718, 60725, 11618, 60732, 60738, 60747, 60756, 60762, 60768,
- 60774, 60779, 60786, 60793, 60799, 60812, 60821, 60830, 60835, 60839,
- 60845, 60852, 60859, 60866, 60873, 60880, 60885, 60889, 60893, 60896,
- 60906, 60910, 60922, 60931, 60935, 60940, 60944, 60950, 60955, 60962,
- 60971, 60979, 60987, 60992, 60996, 61001, 61006, 61016, 61024, 61029,
- 61033, 61037, 61043, 61055, 61063, 61073, 61080, 61086, 61091, 61095,
- 61099, 61103, 61112, 61121, 61130, 61136, 61142, 61148, 61153, 61160,
- 61166, 61174, 61181, 10772, 61187, 61193, 61197, 12523, 61201, 61206,
- 61216, 61225, 61231, 61237, 61245, 61252, 61256, 61260, 61266, 61274,
- 61281, 61287, 61298, 61302, 61306, 61310, 61313, 61319, 61324, 61328,
- 61332, 61341, 61349, 61356, 61362, 61369, 22087, 36337, 61374, 61382,
- 61386, 61389, 61397, 61404, 61410, 61419, 61427, 61433, 61438, 61442,
- 61447, 61451, 61455, 61460, 61469, 61473, 61480, 61487, 61493, 61501,
- 61507, 61518, 61526, 61532, 20753, 61541, 61548, 61555, 61562, 61569,
- 61576, 39288, 11456, 61583, 61590, 61595, 32544, 37484, 61601, 61606,
- 61611, 61617, 61623, 61629, 61634, 61639, 61644, 61649, 61655, 61660,
- 61666, 61671, 61677, 61682, 61687, 61692, 61697, 61702, 61707, 61712,
- 61718, 61723, 61729, 61734, 61739, 61744, 61749, 61754, 61759, 61765,
- 61770, 61775, 61780, 61785, 61790, 61795, 61800, 61805, 61810, 61815,
- 61821, 61826, 61831, 61836, 61841, 61846, 61851, 61856, 61861, 61867,
- 61872, 61877, 61882, 61887, 61892, 61897, 61902, 61907, 61912, 61917,
- 61922, 61927, 61933, 1797, 224, 34993, 61938, 61941, 61946, 61950, 61953,
- 61958, 60983, 61969, 61979, 61986, 62002, 62011, 62021, 62031, 62039,
- 62047, 62051, 62054, 62061, 62067, 62078, 62090, 62101, 62110, 62117,
- 1286, 21391, 62127, 2544, 62131, 62140, 1127, 15477, 35622, 62148, 62156,
- 62170, 62183, 62187, 62192, 62197, 62202, 62208, 62214, 62219, 6957,
- 62224, 62232, 9393, 62237, 62243, 1684, 9405, 723, 62252, 62261, 62271,
- 24992, 62280, 62286, 15063, 62292, 62296, 3881, 9736, 62302, 58007,
- 62309, 3905, 184, 12444, 62315, 62327, 62331, 62337, 25684, 62341, 9724,
- 2684, 4, 62346, 62356, 62362, 62373, 62380, 62386, 62392, 62400, 62407,
- 62413, 62423, 62433, 62443, 1298, 62452, 62458, 2707, 2713, 6954, 2218,
- 62462, 62466, 62475, 62483, 62494, 62502, 62510, 62516, 62521, 62532,
- 62543, 62551, 62557, 8061, 62562, 62570, 62574, 62578, 62590, 26060,
- 62597, 62607, 62613, 62619, 8163, 62629, 62640, 62650, 62659, 62663,
- 62670, 1129, 2537, 62680, 62685, 62693, 62701, 62712, 62719, 62733,
- 12369, 379, 62743, 62747, 62756, 62764, 62770, 62784, 62791, 62797,
- 62806, 62813, 62823, 62831, 3740, 189, 62839, 62850, 62854, 62866, 25882,
- 156, 62872, 62877, 62881, 62888, 62894, 62902, 62909, 7226, 62916, 62925,
- 62933, 3806, 62946, 15109, 62950, 2752, 428, 62955, 62968, 62973, 1796,
- 647, 62977, 3812, 62985, 62991, 963, 63001, 63010, 63015, 13178, 13185,
- 42620, 63019, 3750, 11350, 63027, 63034, 21618, 63038, 63045, 63051,
- 63056, 63061, 13198, 354, 63066, 63078, 63084, 63092, 2764, 1716, 63100,
- 63102, 63107, 63112, 63117, 63123, 63128, 63133, 63138, 63143, 63148,
- 63153, 63159, 63164, 63169, 63174, 63179, 63184, 63189, 63194, 63199,
- 63205, 63210, 63215, 63220, 63226, 63231, 63237, 63242, 63247, 63252,
- 63257, 63262, 63267, 63272, 63278, 63283, 63289, 63294, 63299, 63304,
- 63309, 63314, 63319, 63324, 63329, 63335, 63340, 63345, 63349, 63353,
- 63358, 63362, 63367, 63372, 63378, 63383, 63387, 63392, 63396, 63399,
- 63401, 63405, 63408, 63413, 63417, 63421, 63425, 63429, 63438, 63442,
- 30288, 63445, 30293, 63452, 63457, 30298, 63466, 63475, 30304, 63480,
- 30309, 63489, 63494, 9914, 63498, 63503, 63508, 30314, 63512, 37650,
- 63516, 63519, 63523, 6638, 63529, 63534, 63538, 3633, 30319, 63541,
- 63545, 63548, 63553, 63557, 63563, 63571, 63584, 63593, 63599, 63604,
- 63610, 63614, 63620, 63628, 63633, 63640, 63646, 63654, 63663, 63671,
- 30322, 63678, 63688, 63697, 63710, 63715, 63720, 63729, 63735, 63742,
- 63753, 63765, 63772, 63781, 63790, 63799, 63806, 63812, 63819, 63827,
- 63834, 63842, 63851, 63859, 63866, 63874, 63883, 63891, 63900, 63910,
- 63919, 63927, 63934, 63942, 63951, 63959, 63968, 63978, 63987, 63995,
- 64004, 64014, 64023, 64033, 64044, 64054, 64063, 64071, 64078, 64086,
- 64095, 64103, 64112, 64122, 64131, 64139, 64148, 64158, 64167, 64177,
- 64188, 64198, 64207, 64215, 64224, 64234, 64243, 64253, 64264, 64274,
- 64283, 64293, 64304, 64314, 64325, 64337, 64348, 64358, 64367, 64375,
- 64382, 64390, 64399, 64407, 64416, 64426, 64435, 64443, 64452, 64462,
- 64471, 64481, 64492, 64502, 64511, 64519, 64528, 64538, 64547, 64557,
- 64568, 64578, 64587, 64597, 64608, 64618, 64629, 64641, 64652, 64662,
- 64671, 64679, 64688, 64698, 64707, 64717, 64728, 64738, 64747, 64757,
- 64768, 64778, 64789, 64801, 64812, 64822, 64831, 64841, 64852, 64862,
- 64873, 64885, 64896, 64906, 64917, 64929, 64940, 64952, 64965, 64977,
- 64988, 64998, 65007, 65015, 65022, 65030, 65039, 65047, 65056, 65066,
- 65075, 65083, 65092, 65102, 65111, 65121, 65132, 65142, 65151, 65159,
- 65168, 65178, 65187, 65197, 65208, 65218, 65227, 65237, 65248, 65258,
- 65269, 65281, 65292, 65302, 65311, 65319, 65328, 65338, 65347, 65357,
- 65368, 65378, 65387, 65397, 65408, 65418, 65429, 65441, 65452, 65462,
- 65471, 65481, 65492, 65502, 65513, 65525, 65536, 65546, 65557, 65569,
- 65580, 65592, 65605, 65617, 65628, 65638, 65647, 65655, 65664, 65674,
- 65683, 65693, 65704, 65714, 65723, 65733, 65744, 65754, 65765, 65777,
- 65788, 65798, 65807, 65817, 65828, 65838, 65849, 65861, 65872, 65882,
- 65893, 65905, 65916, 65928, 65941, 65953, 65964, 65974, 65983, 65993,
- 66004, 66014, 66025, 66037, 66048, 66058, 66069, 66081, 66092, 66104,
- 66117, 66129, 66140, 66150, 66161, 66173, 66184, 66196, 66209, 66221,
- 66232, 66244, 66257, 66269, 66282, 66296, 66309, 66321, 66332, 66342,
- 66351, 66359, 66366, 66371, 6489, 66378, 30332, 66383, 66388, 30337,
- 66394, 19100, 30342, 66399, 66405, 66413, 66419, 66425, 66432, 66439,
- 66444, 66448, 66451, 66455, 66464, 66470, 66482, 66493, 66497, 3019,
- 6464, 66502, 66505, 66507, 66511, 66515, 66519, 23927, 66524, 66528,
- 66531, 66536, 66540, 66547, 66553, 66557, 66561, 66564, 30359, 66569,
- 66576, 66585, 66593, 66604, 66612, 66620, 66627, 66634, 66640, 66651,
- 30364, 66656, 66667, 66679, 66687, 66698, 66707, 66718, 66723, 66731,
- 2510, 66736, 32002, 66749, 66753, 66765, 66773, 66778, 66786, 15664,
- 66797, 66803, 66810, 66818, 66824, 30374, 66829, 3831, 55605, 66836,
- 66839, 66847, 66860, 66873, 66886, 66899, 66906, 66917, 66926, 39105,
- 39110, 66931, 66935, 66943, 66950, 66959, 66967, 66973, 66982, 66990,
- 66998, 67002, 67011, 67020, 67030, 67043, 67056, 67066, 30379, 67072,
- 67079, 67085, 30385, 67090, 67093, 67097, 67105, 67114, 38843, 67122,
- 67131, 67139, 67146, 67154, 67164, 67173, 67182, 67191, 67199, 67210,
- 67220, 7733, 19715, 67229, 67234, 67239, 67243, 67247, 67252, 67258,
- 67263, 67268, 67274, 67279, 67284, 19680, 67289, 67296, 67304, 67312,
- 67317, 67324, 67331, 67335, 67339, 67347, 67355, 30402, 67361, 67367,
- 67379, 67385, 67389, 67396, 67401, 67412, 67422, 67432, 67444, 67450,
- 67460, 67470, 30429, 67479, 67488, 67494, 67506, 67517, 67524, 67529,
- 67533, 67541, 67547, 67552, 67557, 67564, 67572, 67584, 67594, 67603,
- 67612, 67619, 31866, 21906, 67625, 67630, 67634, 67638, 67643, 67649,
- 67660, 67673, 67678, 67685, 30434, 67690, 67702, 67711, 67721, 67732,
- 67745, 67752, 67761, 67770, 67778, 67783, 67789, 1465, 67794, 67799,
- 67804, 67809, 67815, 67820, 67825, 67831, 67837, 67842, 67846, 67851,
- 67856, 67861, 56111, 67866, 67871, 67876, 67881, 67887, 67893, 67898,
- 67902, 67907, 67912, 67917, 67923, 67928, 67934, 67939, 67944, 67949,
- 67954, 67958, 67964, 67969, 67978, 67983, 67988, 67993, 67998, 68002,
- 68009, 68015, 15326, 15333, 42875, 68020, 67970, 68022, 68032, 30443,
- 68035, 68044, 68050, 4617, 30448, 68054, 68060, 68066, 68071, 68075,
- 68082, 68087, 68097, 68106, 68110, 68116, 68122, 68128, 68132, 68140,
- 68147, 68155, 68163, 30453, 68170, 68173, 68180, 68186, 68191, 68195,
- 68201, 68208, 68213, 68217, 68226, 68234, 68240, 68245, 30458, 68252,
- 68259, 68265, 68270, 68276, 68283, 68289, 19453, 25408, 68295, 68300,
- 68306, 68318, 68003, 68010, 68328, 68333, 68340, 68347, 68353, 68364,
- 68369, 7502, 68377, 68380, 68386, 68390, 68394, 68397, 68403, 30207,
- 4656, 913, 11731, 68410, 68416, 68422, 68428, 68434, 68440, 68446, 68452,
- 68458, 68463, 68468, 68473, 68478, 68483, 68488, 68493, 68498, 68503,
- 68508, 68513, 68518, 68523, 68529, 68534, 68539, 68545, 68550, 68555,
- 68561, 68567, 68573, 68579, 68585, 68591, 68597, 68603, 68609, 68614,
- 68619, 68625, 68630, 68635, 68641, 68646, 68651, 68656, 68661, 68666,
- 68671, 68676, 68681, 68686, 68691, 68696, 68701, 68707, 68712, 68717,
- 68722, 68728, 68733, 68738, 68743, 68748, 68754, 68759, 68764, 68769,
- 68774, 68779, 68784, 68789, 68794, 68799, 68804, 68809, 68814, 68819,
- 68824, 68829, 68834, 68839, 68844, 68849, 68855, 68860, 68865, 68870,
- 68875, 68880, 68885, 68890, 1827, 143, 68895, 68899, 68903, 68908, 68916,
- 68920, 68927, 68935, 68939, 68952, 68960, 68964, 68967, 68972, 68976,
- 68981, 68985, 68993, 68997, 19108, 69002, 58270, 69006, 69009, 69017,
- 69025, 69033, 69038, 69045, 69051, 69057, 69062, 69067, 69075, 62175,
- 69082, 69087, 69092, 69096, 9981, 69100, 69105, 69110, 69114, 69117,
- 69123, 69127, 69137, 69146, 69149, 69156, 69169, 69175, 69183, 69194,
- 69205, 69216, 69227, 69236, 69242, 69251, 69259, 69269, 69282, 69289,
- 69300, 69306, 69311, 69316, 69322, 69328, 69338, 69347, 67692, 69355,
- 69361, 69369, 69375, 69383, 69387, 69391, 69394, 69400, 69406, 69414,
- 69426, 69438, 69445, 69449, 69460, 69468, 69475, 69487, 69495, 69503,
- 69510, 69516, 69526, 69535, 69540, 69550, 69559, 38184, 69566, 69570,
- 69575, 69583, 69590, 69596, 69600, 69610, 69621, 69629, 69636, 69648,
- 69660, 69669, 66739, 69676, 69687, 69701, 69709, 69719, 69726, 69734,
- 69746, 69755, 69763, 69773, 69782, 69793, 69805, 69814, 69824, 69831,
- 69840, 69855, 69865, 69874, 69882, 69895, 69910, 69914, 69923, 69935,
- 69946, 69957, 69968, 69978, 69989, 69997, 70003, 70013, 70019, 26923,
- 70024, 70030, 70035, 70042, 8075, 15684, 70048, 70057, 70062, 70066,
- 70073, 70079, 70084, 70092, 70100, 70104, 70107, 70110, 70112, 70119,
- 70125, 70136, 70141, 70145, 70152, 70158, 70163, 70171, 62642, 62652,
- 70177, 70184, 70194, 8971, 70201, 70206, 27113, 70215, 70220, 70227,
- 70237, 70245, 70253, 70262, 70268, 70274, 70281, 70288, 70293, 70297,
- 70305, 70310, 70315, 70323, 70330, 70335, 70341, 70344, 70348, 70357,
- 68947, 70366, 70370, 70376, 70387, 70397, 15693, 70408, 70416, 15705,
- 70423, 70427, 70436, 25294, 70443, 70447, 70452, 70469, 70481, 8925,
- 70493, 70498, 70503, 70508, 70512, 70515, 70520, 70525, 70531, 70536,
- 4324, 19181, 70541, 70546, 70552, 70559, 70564, 70569, 70575, 70581,
- 70587, 70592, 70598, 70602, 70616, 70624, 70632, 70638, 70643, 70650,
- 70660, 70669, 70674, 70679, 70687, 70692, 70698, 70703, 70712, 57154,
- 70717, 70720, 70738, 70757, 70770, 70784, 70800, 70807, 70814, 70820,
- 70827, 70832, 70838, 70844, 70852, 70858, 70863, 70868, 70884, 8938,
- 70898, 70905, 70913, 70919, 70923, 70926, 70931, 70936, 70943, 70948,
- 70957, 70962, 70968, 70977, 70986, 70991, 70995, 71003, 10005, 71012,
- 71020, 71025, 71031, 10016, 71036, 71039, 71044, 71054, 71063, 71068,
- 71074, 71079, 71087, 71094, 71105, 71115, 71120, 62103, 71125, 71131,
- 71136, 71143, 71152, 71160, 71166, 71173, 71179, 71183, 15161, 2993,
- 71188, 71192, 71198, 71207, 71213, 71220, 71224, 71245, 71267, 71283,
- 71300, 71319, 71328, 71338, 71345, 71352, 25181, 71358, 71362, 71370,
- 71382, 71388, 71396, 71400, 71408, 71415, 71419, 71425, 71431, 71436,
- 3498, 39305, 71442, 71446, 71450, 71454, 71459, 71464, 71469, 71475,
- 71481, 71487, 71494, 71500, 71507, 71513, 71519, 71524, 71530, 71535,
- 71540, 71544, 71549, 39320, 71553, 71558, 71566, 71570, 71575, 71582,
- 71591, 71597, 71604, 71608, 71611, 71618, 71627, 71632, 71636, 71644,
- 71653, 71657, 71665, 71671, 71676, 71681, 71687, 71693, 71698, 71702,
- 71708, 71713, 71717, 71721, 71724, 71729, 71737, 71747, 71752, 36865,
- 71760, 71772, 71776, 71782, 71794, 71805, 71812, 71818, 71825, 71837,
- 71844, 71850, 19255, 71854, 71860, 71867, 71873, 71879, 71884, 71889,
- 71894, 71903, 5491, 71908, 14627, 71914, 71918, 71926, 71935, 71939,
- 71946, 71955, 71968, 71974, 71545, 27962, 71979, 71981, 71986, 71991,
- 71996, 72001, 72006, 72011, 72016, 72021, 72026, 72031, 72036, 72041,
- 72046, 72051, 72057, 72062, 72067, 72072, 72077, 72082, 72087, 72092,
- 72097, 72103, 72109, 72115, 72120, 72125, 72137, 72142, 1833, 67, 72147,
- 72152, 30485, 30490, 30495, 30501, 30506, 72156, 30511, 20226, 72178,
- 72182, 72186, 72191, 72195, 30515, 72199, 72207, 30520, 72214, 72217,
- 72222, 72226, 7910, 72235, 30525, 20092, 72238, 72242, 1396, 72247,
- 30536, 72250, 72255, 23720, 23730, 32940, 72260, 72265, 72270, 72275,
- 72281, 72286, 72295, 72300, 72307, 72313, 72318, 72323, 72328, 72338,
- 72347, 72352, 72360, 72364, 72372, 30350, 1188, 72379, 72385, 72390,
- 72395, 72400, 72406, 72411, 72418, 72424, 72429, 72437, 72447, 72457,
- 72463, 72468, 72474, 15715, 72481, 33745, 72494, 72499, 72505, 72518,
- 72524, 72528, 72537, 72544, 72550, 72558, 72567, 72574, 72580, 72583,
- 23861, 72587, 72594, 72600, 72608, 72613, 22035, 72619, 72622, 72630,
- 72638, 72652, 72659, 72665, 72672, 72678, 30550, 72682, 72689, 72697,
- 72705, 30555, 72711, 72717, 72722, 72732, 72738, 72747, 28677, 32415,
- 72755, 72760, 72765, 72770, 72774, 13170, 36878, 72779, 72784, 30560,
- 59554, 72788, 72793, 72797, 72806, 72814, 72820, 72825, 72831, 72838,
- 72844, 72849, 72854, 72863, 72875, 72890, 30801, 72896, 14746, 30564,
- 72900, 72907, 22145, 72913, 72920, 72929, 72936, 72945, 72951, 72956,
- 72964, 72970, 30574, 72975, 72984, 71800, 72993, 73000, 73006, 73012,
- 73022, 73030, 73037, 73041, 30579, 73044, 30585, 30591, 73049, 73057,
- 73067, 73076, 73084, 73091, 73101, 30596, 73105, 73107, 73111, 73116,
- 73120, 73124, 73130, 73135, 73139, 73150, 73155, 2998, 73159, 73166,
- 73170, 73179, 73187, 73194, 73199, 73204, 59600, 73208, 73211, 73217,
- 73225, 73231, 73235, 73240, 73247, 73252, 73258, 32446, 73263, 73266,
- 73271, 73275, 73280, 73285, 73289, 73297, 23739, 23748, 73303, 73309,
- 73315, 73320, 73324, 73327, 73337, 73346, 73351, 73357, 73364, 73370,
- 73374, 73382, 73387, 32452, 73391, 73399, 73405, 73412, 73417, 73421,
- 73426, 55791, 32458, 73432, 73437, 73441, 73446, 73451, 73456, 73460,
- 73465, 73470, 73476, 73481, 73486, 73492, 73498, 73503, 73507, 73512,
- 73517, 73522, 73526, 22144, 73531, 73536, 73542, 73548, 73554, 73559,
- 73563, 73568, 73573, 73578, 73582, 73587, 73592, 73597, 73602, 73606,
- 30600, 73614, 73618, 73626, 73634, 73645, 73650, 73654, 20497, 73659,
- 73665, 73675, 73682, 73687, 73696, 73701, 73705, 73710, 73718, 73726,
- 73733, 62321, 73739, 73747, 73754, 73765, 73771, 73777, 30610, 73780,
- 73787, 73795, 73800, 37069, 73804, 73809, 73816, 73821, 7389, 73825,
- 73833, 73840, 73847, 73853, 73867, 60629, 73875, 73881, 73885, 73888,
- 73896, 73903, 73908, 73921, 73928, 73935, 73940, 58174, 73945, 73948,
- 73955, 73961, 73965, 73973, 73983, 73993, 74002, 74010, 74021, 74026,
- 74030, 74035, 74039, 33071, 19509, 33080, 74047, 74052, 74057, 74062,
- 74067, 74072, 74077, 74081, 74086, 74091, 74096, 74101, 74106, 74111,
- 74115, 74120, 74125, 74129, 74133, 74137, 74141, 74146, 74151, 74155,
- 74160, 74164, 74168, 74173, 74178, 74183, 74188, 74192, 74197, 74202,
- 74206, 74211, 74216, 74221, 74226, 74231, 74236, 74241, 74246, 74251,
- 74256, 74261, 74266, 74271, 74276, 74281, 74286, 74291, 74296, 74301,
- 74306, 74310, 74315, 74320, 74325, 74330, 74335, 74340, 74345, 74350,
- 74355, 74360, 74365, 74369, 74374, 74378, 74383, 74388, 74393, 74398,
- 74403, 74408, 74413, 74418, 74423, 74427, 74431, 74436, 74441, 74445,
- 74450, 74455, 74459, 74464, 74469, 74474, 74479, 74483, 74488, 74493,
- 74497, 74502, 74506, 74510, 74514, 74518, 74523, 74527, 74531, 74535,
- 74539, 74543, 74547, 74551, 74555, 74559, 74564, 74569, 74574, 74579,
- 74584, 74589, 74594, 74599, 74604, 74609, 74613, 74617, 74621, 74625,
- 74629, 74633, 74638, 74642, 74647, 74651, 74656, 74661, 74665, 74669,
- 74674, 74678, 74682, 74686, 74690, 74694, 74698, 74702, 74706, 74710,
- 74714, 74718, 74722, 74726, 74730, 74735, 74740, 74744, 74748, 74752,
- 74756, 74760, 74764, 74769, 74773, 74777, 74781, 74785, 74789, 74793,
- 74798, 74802, 74807, 74811, 74815, 74819, 74823, 74827, 74831, 74835,
- 74839, 74843, 74847, 74851, 74856, 74860, 74864, 74868, 74872, 74876,
- 74880, 74884, 74888, 74892, 74896, 74900, 74905, 74909, 74913, 74918,
- 74923, 74927, 74931, 74935, 74939, 74943, 74947, 74951, 74955, 74960,
- 74964, 74969, 74973, 74978, 74982, 74987, 74991, 74997, 75002, 75006,
- 75011, 75015, 75020, 75024, 75029, 75033, 75038, 1484, 75042, 2778, 1722,
- 1727, 75046, 75050, 2782, 75054, 1365, 75059, 1331, 75063, 2794, 75067,
- 75074, 75081, 75095, 2798, 5589, 75104, 75112, 75119, 75130, 75139,
- 75146, 75158, 75171, 75184, 75195, 75200, 75207, 75219, 75223, 3918,
- 10082, 75233, 75238, 75247, 75257, 2802, 75262, 75266, 75271, 75278,
- 75284, 75292, 75304, 1336, 11351, 75314, 75318, 75324, 75338, 75350,
- 75362, 75372, 75381, 75390, 75399, 75407, 75418, 75426, 3968, 75436,
- 75445, 75451, 75466, 75473, 75479, 33197, 75484, 2826, 11355, 75488,
- 75495, 7334, 75504, 2831, 30105, 75510, 57923, 75517, 75523, 75534,
- 75540, 75547, 75553, 75561, 75568, 75574, 75584, 75593, 75604, 75611,
- 75617, 75627, 75635, 75641, 75656, 75662, 75667, 75674, 75677, 75683,
- 75690, 75696, 75704, 75713, 75721, 75727, 75736, 38845, 75750, 75755,
- 13007, 75761, 75774, 75783, 75791, 75798, 75802, 75806, 75809, 75816,
- 75823, 75831, 75839, 75848, 75856, 12943, 75864, 75869, 75873, 75885,
- 75892, 75901, 780, 75911, 75920, 75931, 2847, 75935, 75939, 75945, 75958,
- 75970, 75980, 75989, 24331, 76001, 76009, 76018, 76029, 76040, 76050,
- 76060, 76069, 76077, 9657, 76084, 76088, 76093, 76098, 76104, 1341,
- 10153, 76111, 76122, 76131, 76139, 76148, 76156, 76172, 76183, 76192,
- 76200, 76212, 76223, 76239, 76249, 76270, 76283, 76291, 76298, 13118,
- 76311, 76316, 76322, 4386, 76328, 76331, 76338, 76348, 6607, 76355,
- 76360, 76365, 76373, 76381, 8123, 8132, 76386, 76397, 76402, 76408, 2855,
- 2860, 76414, 9224, 76420, 76427, 76434, 76447, 2205, 50, 76452, 76457,
- 76467, 76473, 76482, 76490, 76500, 76504, 76509, 76513, 76525, 2883,
- 76533, 76541, 76546, 76557, 76568, 76577, 76582, 76588, 76593, 76603,
- 76613, 76618, 76624, 76629, 76638, 19562, 76642, 4045, 12, 76647, 76656,
- 76663, 76670, 76676, 76682, 827, 76687, 76692, 58240, 76697, 76702,
- 76708, 76716, 76721, 76728, 76734, 76739, 35573, 38743, 76745, 2887, 32,
- 76755, 76768, 76773, 76781, 76786, 76792, 2909, 26234, 76797, 76805,
- 76812, 76817, 56033, 59221, 76826, 1667, 1776, 76831, 76836, 76843, 1780,
- 242, 76850, 76856, 76861, 76868, 1784, 76873, 76879, 76884, 76896, 4597,
- 76906, 1791, 76912, 76917, 76924, 76931, 76946, 76953, 76964, 76972,
- 2572, 76976, 76988, 76993, 76997, 77003, 26059, 2210, 77007, 77018,
- 77022, 77026, 77032, 77036, 77045, 77049, 77060, 77064, 2256, 29944,
- 77068, 77078, 3018, 7738, 77086, 77091, 77095, 77104, 77111, 77117, 2988,
- 15343, 77121, 77134, 77152, 77157, 77165, 77173, 77183, 11457, 77195,
- 77208, 77215, 77222, 77238, 77245, 77251, 1024, 77258, 77265, 77275,
- 77284, 77296, 39709, 77304, 3002, 10350, 77307, 77315, 77319, 3006,
- 77323, 19358, 10366, 3684, 77327, 3012, 77331, 77341, 77347, 77353,
- 77359, 77365, 77371, 77377, 77383, 77389, 77395, 77401, 77407, 77413,
- 77419, 77425, 77431, 77437, 77443, 77449, 77455, 77461, 77467, 77473,
- 77479, 77485, 77491, 77498, 77505, 77511, 77517, 77523, 77529, 77535,
- 77541, 1346, 14270, 10388, 77547, 77552, 77557, 77562, 77567, 77572,
- 77577, 77582, 77587, 77592, 77597, 77602, 77607, 77612, 77617, 77622,
- 77627, 77632, 77637, 77642, 77647, 77652, 77657, 77662, 77667, 77672,
- 77678, 77683, 77688, 77694, 77699, 77705, 77710, 77715, 77721, 77726,
- 77731, 77736, 77741, 77746, 77751, 77756, 77761, 77342, 77348, 77354,
- 77360, 77366, 77372, 77378, 77384, 77390, 77396, 77402, 77408, 77414,
- 77420, 77426, 77767, 77432, 77438, 77444, 77773, 77450, 77456, 77462,
- 77468, 77474, 77480, 77486, 77506, 77779, 77785, 77512, 77791, 77518,
- 77524, 77530, 77536, 77542, 3033, 3038, 77797, 77802, 77805, 77811,
- 77817, 77824, 77829, 77834, 2261,
+ 0, 0, 6, 10, 18, 23, 27, 34, 39, 41, 44, 50, 62, 70, 80, 93, 102, 108,
+ 113, 121, 130, 135, 140, 143, 147, 153, 158, 163, 171, 178, 186, 191,
+ 194, 200, 208, 215, 225, 230, 237, 246, 249, 254, 257, 263, 267, 272,
+ 281, 288, 295, 301, 310, 315, 321, 327, 335, 144, 341, 349, 350, 358,
+ 361, 367, 369, 375, 382, 384, 391, 395, 403, 410, 415, 417, 422, 429,
+ 431, 299, 437, 439, 444, 449, 452, 457, 463, 470, 479, 489, 494, 498,
+ 505, 518, 522, 531, 538, 545, 548, 554, 558, 562, 572, 580, 588, 596,
+ 605, 613, 618, 619, 623, 631, 638, 648, 659, 663, 666, 670, 673, 348,
+ 678, 687, 691, 697, 703, 705, 708, 711, 714, 718, 722, 731, 739, 744,
+ 747, 751, 757, 764, 771, 776, 785, 794, 801, 805, 818, 827, 835, 841,
+ 557, 850, 860, 867, 873, 879, 886, 894, 898, 749, 906, 915, 503, 923,
+ 928, 934, 17, 943, 948, 951, 955, 959, 966, 969, 976, 980, 988, 992,
+ 1000, 1004, 1007, 1014, 1021, 192, 1024, 1029, 1039, 1048, 1055, 1061,
+ 1069, 1072, 1077, 1083, 1091, 1097, 1102, 1105, 1108, 111, 1113, 1117,
+ 1123, 1129, 1132, 1138, 1142, 1147, 1153, 1158, 1168, 1172, 1175, 1178,
+ 1187, 1191, 1194, 1199, 1204, 1210, 1215, 1220, 1225, 1229, 1234, 1240,
+ 1245, 1250, 1254, 1260, 1265, 1270, 1275, 1279, 1284, 1289, 1294, 1300,
+ 1306, 1312, 1317, 1321, 1326, 1331, 1336, 1340, 1345, 1350, 1355, 1360,
+ 1195, 1200, 1205, 1211, 1216, 1364, 1226, 1370, 1375, 1380, 1387, 1391,
+ 1400, 1230, 1404, 1235, 1241, 1246, 1408, 1413, 1418, 1422, 1426, 1432,
+ 1436, 1251, 1439, 1261, 1444, 1448, 1266, 1454, 1271, 1458, 1462, 1276,
+ 1466, 1471, 1475, 1478, 1482, 1280, 1285, 1487, 1290, 1493, 1499, 1505,
+ 1511, 1295, 1307, 1313, 1515, 1519, 1523, 1526, 1318, 1530, 1532, 1537,
+ 1542, 1548, 1553, 1558, 1562, 1567, 1572, 1577, 1582, 1588, 1593, 1598,
+ 1604, 1610, 1615, 1619, 1624, 1629, 1634, 1639, 1643, 1651, 1655, 1660,
+ 1665, 1670, 1675, 1679, 1682, 1687, 1692, 1697, 1702, 1708, 1713, 1717,
+ 1322, 1720, 1725, 1730, 1327, 1734, 1738, 1745, 1332, 1752, 1337, 1756,
+ 1758, 1763, 1769, 1341, 1774, 1783, 1346, 1788, 1794, 1351, 1799, 1804,
+ 1807, 1812, 1816, 1820, 1824, 1827, 1831, 1356, 1361, 1156, 1836, 1842,
+ 1848, 1854, 1860, 1866, 1872, 1878, 1884, 1889, 1895, 1901, 1907, 1913,
+ 1919, 1925, 1931, 1937, 1943, 1948, 1953, 1958, 1963, 1968, 1973, 1978,
+ 1983, 1988, 1993, 1999, 2004, 2010, 2015, 2021, 2027, 2032, 2038, 2044,
+ 2050, 2056, 2061, 2066, 2068, 2069, 2073, 2077, 2082, 2086, 2090, 2094,
+ 2099, 2103, 2106, 2111, 2115, 2120, 2124, 2128, 2133, 2137, 2140, 2144,
+ 2150, 2164, 2168, 2172, 2176, 2179, 2184, 2188, 2192, 2195, 2199, 2204,
+ 2209, 2214, 2219, 2223, 2227, 2231, 2236, 2240, 2245, 2249, 2254, 2260,
+ 2267, 2273, 2278, 2283, 2288, 2294, 2299, 2305, 2310, 2313, 1212, 2315,
+ 2322, 2330, 2340, 2349, 2363, 2367, 2371, 2384, 2392, 2396, 2401, 2405,
+ 2408, 2412, 2416, 2421, 2426, 2431, 2435, 2438, 2442, 2449, 2456, 2462,
+ 2467, 2472, 2478, 2484, 2489, 2492, 1760, 2494, 2500, 2504, 2509, 2513,
+ 2517, 1765, 1771, 2522, 2526, 2529, 2534, 2539, 2544, 2549, 2553, 2560,
+ 2565, 2568, 2575, 2581, 2585, 2589, 2593, 2598, 2605, 2610, 2615, 2622,
+ 2628, 2634, 2640, 2654, 2671, 2686, 2701, 2710, 2715, 2719, 2724, 2729,
+ 2733, 2745, 2752, 2758, 2263, 2764, 2771, 2777, 2781, 2784, 2791, 2797,
+ 2801, 2805, 2809, 2091, 2813, 2818, 2823, 2827, 2835, 2839, 2843, 2847,
+ 2851, 2856, 2861, 2866, 2870, 2875, 2880, 2884, 2889, 2893, 2896, 2900,
+ 2904, 2912, 2917, 2921, 2925, 2931, 2940, 2944, 2948, 2954, 2959, 2966,
+ 2970, 2980, 2984, 2988, 2993, 2997, 3002, 3008, 3013, 3017, 3021, 3025,
+ 2452, 3033, 3038, 3044, 3049, 3053, 3058, 3063, 3067, 3073, 3078, 2095,
+ 3084, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, 3135, 3141,
+ 3146, 1227, 92, 3152, 3156, 3160, 3164, 3169, 3173, 3177, 3181, 3185,
+ 3190, 3194, 3199, 3203, 3206, 3210, 3215, 3219, 3224, 3228, 3232, 3236,
+ 3241, 3245, 3248, 3261, 3265, 3269, 3273, 3277, 3281, 3284, 3288, 3292,
+ 3297, 3301, 3306, 3311, 3316, 3320, 3323, 3326, 3332, 3336, 3340, 3343,
+ 3347, 3351, 3354, 3360, 3365, 3370, 3376, 3381, 3386, 3392, 3398, 3403,
+ 3408, 3413, 1115, 547, 3418, 3421, 3426, 3430, 3433, 3437, 3442, 3447,
+ 3451, 3456, 3460, 3465, 3469, 3473, 3479, 3485, 3488, 3491, 3497, 3504,
+ 3511, 3517, 3524, 3529, 3533, 3540, 3547, 3552, 3556, 3566, 3570, 3574,
+ 3579, 3584, 3594, 2107, 3599, 3603, 3606, 3612, 3617, 3623, 3629, 3634,
+ 3641, 3645, 3649, 620, 671, 1388, 3653, 3660, 3667, 3674, 3681, 3687,
+ 3693, 3698, 3702, 3708, 3713, 3717, 2116, 3721, 3729, 600, 3735, 3746,
+ 3750, 3760, 2121, 3766, 3771, 3786, 3792, 3799, 3809, 3815, 3820, 3826,
+ 3832, 3835, 3839, 3844, 3851, 3856, 3860, 3864, 3868, 3872, 3877, 3883,
+ 3894, 3211, 3899, 3911, 3919, 3924, 1564, 3931, 3934, 3937, 3941, 3944,
+ 3950, 3954, 3968, 3972, 3975, 3979, 3985, 3991, 3996, 4000, 4004, 4010,
+ 4021, 4027, 4032, 4038, 4042, 4050, 4060, 4066, 4071, 4080, 4088, 4095,
+ 4099, 4105, 4114, 4123, 4127, 4132, 4137, 4141, 4149, 4153, 4158, 4162,
+ 2129, 1401, 4168, 4173, 4179, 4184, 4189, 4194, 4199, 4204, 4209, 4215,
+ 4220, 4226, 4231, 4236, 4241, 4247, 4252, 4257, 4262, 4267, 4273, 4278,
+ 4284, 4289, 4294, 4299, 4304, 4309, 4314, 4320, 4325, 4330, 319, 456,
+ 4335, 4341, 4345, 4349, 4354, 4358, 4362, 4365, 4369, 4373, 4377, 4381,
+ 4386, 4390, 4394, 4400, 4165, 4405, 4409, 4412, 4417, 4422, 4427, 4432,
+ 4437, 4442, 4447, 4452, 4457, 4462, 4466, 4471, 4476, 4481, 4486, 4491,
+ 4496, 4501, 4506, 4511, 4516, 4520, 4525, 4530, 4535, 4540, 4545, 4550,
+ 4555, 4560, 4565, 4570, 4574, 4579, 4584, 4589, 4594, 4599, 4604, 4609,
+ 4614, 4619, 4624, 4628, 4633, 4638, 4643, 4648, 4653, 4658, 4663, 4668,
+ 4673, 4678, 4682, 4687, 4692, 4697, 4702, 4707, 4712, 4717, 4722, 4727,
+ 4732, 4736, 4741, 4746, 4751, 4756, 4761, 4766, 4771, 4776, 4781, 4786,
+ 4790, 4795, 4800, 4805, 4810, 4816, 4822, 4828, 4834, 4840, 4846, 4852,
+ 4857, 4863, 4869, 4875, 4881, 4887, 4893, 4899, 4905, 4911, 4917, 4922,
+ 4928, 4934, 4940, 4946, 4952, 4958, 4964, 4970, 4976, 4982, 4987, 4993,
+ 4999, 5005, 5011, 5017, 5023, 5029, 5035, 5041, 5047, 5052, 5058, 5064,
+ 5070, 5076, 5082, 5088, 5094, 5100, 5106, 5112, 5117, 5123, 5129, 5135,
+ 5141, 5147, 5153, 5159, 5165, 5171, 5177, 5182, 5186, 5192, 5198, 5204,
+ 5210, 5216, 5222, 5228, 5234, 5240, 5246, 5251, 5257, 5263, 5269, 5275,
+ 5281, 5287, 5293, 5299, 5305, 5311, 5316, 5322, 5328, 5334, 5340, 5346,
+ 5352, 5358, 5364, 5370, 5376, 5381, 5387, 5393, 5399, 5405, 5411, 5417,
+ 5423, 5429, 5435, 5441, 5446, 5452, 5458, 5464, 5470, 5476, 5482, 5488,
+ 5494, 5500, 5506, 5511, 5517, 5523, 5529, 5535, 5541, 5547, 5553, 5559,
+ 5565, 5571, 5576, 5582, 5588, 5594, 5600, 5606, 5612, 5618, 5624, 5630,
+ 5636, 5641, 5647, 5653, 5659, 5665, 5671, 5677, 5683, 5689, 5695, 5701,
+ 5706, 5712, 5718, 5724, 5730, 5736, 5742, 5748, 5754, 5760, 5766, 5771,
+ 5777, 5783, 5789, 5795, 5801, 5807, 5813, 5819, 5825, 5831, 5836, 5840,
+ 5843, 5850, 5854, 5867, 5871, 5875, 5879, 5883, 5887, 5891, 5897, 5904,
+ 5912, 5916, 5924, 5933, 5939, 5951, 5956, 5959, 5963, 5973, 5981, 5989,
+ 5995, 5999, 6009, 6019, 6027, 6034, 6041, 6047, 6053, 6060, 6064, 6071,
+ 6081, 6091, 6099, 6106, 6111, 6115, 6123, 6127, 6132, 6139, 6147, 6152,
+ 6157, 6161, 6168, 6173, 6187, 6192, 6197, 6204, 6213, 6216, 6220, 6224,
+ 6228, 6231, 6236, 6241, 6250, 6256, 6262, 6268, 6272, 6283, 6293, 6308,
+ 6323, 6338, 6353, 6368, 6383, 6398, 6413, 6428, 6443, 6458, 6473, 6488,
+ 6503, 6518, 6533, 6548, 6563, 6578, 6593, 6608, 6623, 6638, 6653, 6668,
+ 6683, 6698, 6713, 6728, 6743, 6758, 6773, 6788, 6803, 6818, 6833, 6848,
+ 6863, 6878, 6893, 6908, 6923, 6938, 6953, 6968, 6983, 6998, 7013, 7028,
+ 7037, 7046, 7051, 7057, 7067, 7071, 7076, 7081, 7089, 7093, 7096, 7100,
+ 2975, 7103, 7108, 298, 442, 7114, 7122, 7126, 7130, 7133, 7137, 7143,
+ 7147, 7155, 7161, 7166, 7173, 7180, 7186, 7191, 7198, 7204, 7212, 7216,
+ 7221, 7233, 7244, 7251, 7255, 7259, 7265, 3233, 7269, 7275, 7280, 7285,
+ 7290, 7296, 7301, 7306, 7311, 7316, 7322, 7327, 7332, 7338, 7343, 7349,
+ 7354, 7360, 7365, 7371, 7376, 7381, 7386, 7391, 7396, 7402, 7407, 7412,
+ 7417, 7423, 7429, 7435, 7441, 7447, 7453, 7459, 7465, 7471, 7477, 7483,
+ 7489, 7494, 7499, 7504, 7509, 7514, 7519, 7524, 7529, 7535, 7541, 7546,
+ 7552, 7558, 7564, 7569, 7574, 7579, 7584, 7590, 7596, 7601, 7606, 7611,
+ 7616, 7621, 7627, 7632, 7638, 7644, 7650, 7656, 7662, 7668, 7674, 7680,
+ 7686, 2138, 7132, 7691, 7695, 7699, 7702, 7709, 7712, 7720, 7725, 7730,
+ 7721, 7735, 2165, 7739, 7745, 7751, 7756, 7761, 7768, 7776, 7781, 7785,
+ 7788, 7792, 7798, 7804, 7808, 2173, 560, 7811, 7815, 7820, 7826, 7831,
+ 7835, 7838, 7842, 7848, 7853, 7857, 7864, 7868, 7872, 7876, 945, 769,
+ 7879, 7887, 7894, 7901, 7907, 7914, 7922, 7929, 7936, 7941, 7953, 1247,
+ 1409, 1414, 7964, 1419, 7968, 7972, 7981, 7989, 7998, 8004, 8009, 8013,
+ 8019, 8024, 2706, 8031, 8035, 8044, 8053, 8062, 8071, 8076, 8081, 8093,
+ 8098, 8106, 2224, 8110, 8112, 8117, 8121, 8130, 8138, 1423, 133, 3461,
+ 3466, 8144, 8148, 8157, 8163, 8168, 8171, 8180, 2698, 8186, 8194, 8198,
+ 8202, 8206, 2237, 8210, 8215, 8222, 8228, 8234, 8237, 8239, 8242, 8250,
+ 8258, 8266, 8269, 8274, 2250, 8279, 7732, 8282, 8284, 8289, 8294, 8299,
+ 8304, 8309, 8314, 8319, 8324, 8329, 8334, 8340, 8345, 8350, 8355, 8361,
+ 8366, 8371, 8376, 8381, 8386, 8391, 8397, 8402, 8407, 8412, 8417, 8422,
+ 8427, 8432, 8437, 8442, 8447, 8452, 8457, 8462, 8467, 8472, 8477, 8482,
+ 8488, 8494, 8499, 8504, 8509, 8514, 8519, 2261, 2268, 2274, 8524, 8530,
+ 8538, 2300, 2306, 8546, 8550, 8555, 8559, 8563, 8567, 8572, 8576, 8581,
+ 8585, 8588, 8591, 8597, 8603, 8609, 8615, 8621, 8627, 8633, 8637, 8641,
+ 8645, 8649, 8653, 8658, 8665, 8676, 8684, 8694, 8700, 8707, 8712, 8716,
+ 8727, 8740, 8751, 8764, 8775, 8787, 8799, 8811, 8824, 8837, 8844, 8850,
+ 8864, 8871, 8877, 8881, 8886, 8890, 8897, 8905, 8909, 8915, 8919, 8925,
+ 8935, 8939, 8944, 8949, 8956, 8962, 8972, 7909, 8978, 8982, 8989, 768,
+ 8993, 8997, 9002, 9007, 9012, 9016, 9022, 9030, 9036, 9040, 9046, 9056,
+ 9060, 9066, 9071, 9075, 9081, 9087, 2161, 9092, 9094, 9099, 9107, 9116,
+ 9120, 9126, 9131, 9136, 9141, 9146, 9152, 9157, 9162, 4006, 9167, 9172,
+ 9176, 9182, 9187, 9193, 9198, 9203, 9209, 9214, 9121, 9220, 9224, 9231,
+ 9237, 9242, 9246, 6183, 9251, 9260, 9265, 9270, 8218, 8225, 9275, 2853,
+ 9279, 9284, 9289, 9132, 9293, 9298, 9137, 9142, 9303, 9310, 9317, 9323,
+ 9329, 9335, 9340, 9345, 9350, 9147, 9153, 9356, 9362, 9367, 9375, 9158,
+ 9380, 990, 9383, 9391, 9397, 9403, 9412, 9420, 9425, 9431, 9439, 9446,
+ 9461, 9478, 9497, 9506, 9514, 9529, 9540, 9550, 9560, 9568, 9574, 9586,
+ 9595, 9603, 9610, 9617, 9623, 9628, 9636, 9646, 9653, 9663, 9673, 9683,
+ 9691, 9698, 9707, 9717, 9731, 9746, 9755, 9763, 9768, 9772, 9781, 9787,
+ 9792, 9802, 9812, 9822, 9827, 9831, 9840, 9845, 9855, 9866, 9879, 9887,
+ 9900, 9912, 9920, 9925, 9929, 9935, 9940, 9948, 9956, 9963, 9968, 9976,
+ 9982, 9985, 9989, 9995, 10003, 10008, 10012, 10020, 10029, 10037, 10043,
+ 10047, 10054, 10065, 10069, 10072, 10078, 9163, 10083, 10089, 10096,
+ 10102, 10107, 10114, 10121, 10128, 10135, 10142, 10149, 10156, 10163,
+ 10168, 9474, 10173, 10179, 10186, 10193, 10198, 10205, 10214, 10218,
+ 10230, 8256, 10234, 10237, 10241, 10245, 10249, 10253, 10259, 10265,
+ 10270, 10276, 10281, 10286, 10292, 10297, 10302, 8952, 10307, 10311,
+ 10315, 10319, 10324, 10329, 10337, 10343, 10347, 10351, 10358, 10363,
+ 10371, 10376, 10380, 10383, 10389, 10396, 10400, 10403, 10408, 10412,
+ 4045, 10418, 10427, 36, 10435, 10441, 10446, 8967, 10451, 10456, 10460,
+ 10463, 10478, 10497, 10509, 10522, 10535, 10548, 10562, 10575, 10590,
+ 10597, 9168, 10603, 10617, 10622, 10628, 10633, 10641, 10646, 8040,
+ 10651, 10654, 10661, 10666, 10670, 2858, 998, 10676, 10680, 10686, 10692,
+ 10697, 10703, 10708, 9177, 10714, 10720, 10725, 10730, 10738, 10744,
+ 10757, 10765, 10772, 9183, 10778, 10786, 10794, 10801, 10814, 10826,
+ 10836, 10844, 10851, 10858, 10867, 10876, 10884, 10891, 10896, 10902,
+ 9188, 10907, 10913, 9194, 10918, 10921, 10928, 10934, 10947, 8669, 10958,
+ 10964, 10973, 10981, 10988, 10994, 11000, 11005, 11009, 11014, 10470,
+ 11020, 9199, 11027, 11032, 11039, 11045, 11051, 11056, 11064, 11072,
+ 11079, 11083, 11097, 11107, 11112, 11116, 11127, 11133, 11138, 11143,
+ 9204, 9210, 11147, 11150, 11155, 11167, 11174, 11179, 11183, 11188,
+ 11192, 11199, 11205, 9215, 9122, 11212, 2863, 8, 11219, 11224, 11228,
+ 11234, 11242, 11252, 11257, 11262, 11269, 11276, 11280, 11291, 11301,
+ 11310, 11322, 11327, 11331, 11339, 11353, 11357, 11360, 11368, 11375,
+ 11383, 11387, 11398, 11402, 11409, 11414, 11418, 11424, 11429, 11433,
+ 11439, 11444, 11455, 11459, 11462, 11468, 11473, 11479, 11485, 11492,
+ 11503, 11513, 11523, 11532, 11539, 11548, 9225, 9232, 9238, 9243, 11554,
+ 11560, 9247, 11566, 11569, 11576, 11581, 11596, 11612, 11627, 11635,
+ 11641, 11646, 838, 420, 11651, 11659, 11666, 11672, 11677, 11682, 9252,
+ 11684, 11688, 11693, 11697, 11707, 11712, 11716, 11725, 11729, 11732,
+ 9261, 11739, 11742, 11750, 11757, 11765, 11769, 11776, 11785, 11788,
+ 11792, 11796, 11802, 11806, 11810, 11814, 11820, 11830, 11834, 11842,
+ 11846, 11853, 11857, 11862, 11866, 11873, 11879, 11887, 11893, 11898,
+ 11908, 11913, 11918, 11922, 11930, 3905, 11938, 11943, 9266, 11947,
+ 11951, 11954, 11962, 11969, 11973, 5991, 11977, 11982, 11986, 11997,
+ 12007, 12012, 12018, 12022, 12025, 12033, 12038, 12043, 12050, 12055,
+ 9271, 12060, 12064, 12071, 1722, 6145, 12076, 12081, 12086, 12091, 12097,
+ 12102, 12108, 12113, 12118, 12123, 12128, 12133, 12138, 12143, 12148,
+ 12153, 12158, 12163, 12168, 12173, 12178, 12183, 12188, 12194, 12199,
+ 12204, 12209, 12214, 12219, 12225, 12230, 12235, 12241, 12246, 12252,
+ 12257, 12263, 12268, 12273, 12278, 12283, 12289, 12294, 12299, 12304,
+ 737, 139, 12312, 12316, 12321, 12326, 12330, 12334, 12338, 12343, 12347,
+ 12352, 12356, 12359, 12363, 12367, 12373, 12378, 12388, 12394, 12402,
+ 12406, 12410, 12417, 12425, 12434, 12445, 12452, 12459, 12463, 12472,
+ 12481, 12489, 12498, 12507, 12516, 12525, 12535, 12545, 12555, 12565,
+ 12575, 12584, 12594, 12604, 12614, 12624, 12634, 12644, 12654, 12663,
+ 12673, 12683, 12693, 12703, 12713, 12723, 12732, 12742, 12752, 12762,
+ 12772, 12782, 12792, 12802, 12812, 12822, 12831, 12841, 12851, 12861,
+ 12871, 12881, 12891, 12901, 12911, 12921, 12931, 12940, 1256, 12946,
+ 12949, 12953, 12958, 12965, 12971, 12976, 12980, 12985, 12994, 13002,
+ 13007, 13011, 13015, 13021, 13026, 13032, 9280, 13037, 13042, 13051,
+ 9285, 13056, 13059, 13065, 13073, 9290, 13080, 13084, 13088, 13092,
+ 13102, 13108, 13114, 13119, 13128, 13136, 13143, 13150, 13155, 13162,
+ 13167, 13171, 13174, 13185, 13195, 13204, 13212, 13223, 13235, 13245,
+ 13250, 13254, 13259, 13264, 13268, 13274, 13282, 13289, 13300, 13305,
+ 13315, 13319, 13322, 13329, 13339, 13348, 13355, 13359, 13366, 13372,
+ 13377, 13382, 13386, 13395, 13400, 13406, 13410, 13415, 13419, 13428,
+ 13436, 13444, 13451, 13459, 13471, 13482, 13492, 13499, 13505, 13514,
+ 13525, 13534, 13546, 13558, 13570, 13580, 13589, 13598, 13606, 13613,
+ 13622, 13630, 13634, 13640, 13646, 13651, 7753, 13655, 13657, 13661,
+ 13666, 13672, 13681, 13685, 13693, 13700, 13709, 13718, 13727, 13736,
+ 13745, 13754, 13763, 13772, 13782, 13792, 13801, 13807, 13814, 13821,
+ 13827, 13841, 13848, 13856, 13865, 13871, 13880, 13889, 13900, 13910,
+ 13918, 13925, 13933, 13942, 13955, 13963, 13970, 13983, 13989, 13995,
+ 14005, 14014, 14023, 14028, 14032, 14038, 14044, 14051, 8966, 14056,
+ 14061, 14068, 14073, 12369, 14078, 14086, 14092, 14097, 14105, 14113,
+ 14120, 14128, 14134, 14142, 14150, 14156, 14161, 14167, 14174, 14180,
+ 14185, 14189, 14200, 14208, 14214, 14219, 14228, 14234, 14239, 14248,
+ 14262, 3853, 14266, 14271, 14276, 14282, 14287, 14292, 14296, 14301,
+ 14306, 14311, 7752, 14316, 14321, 14326, 14331, 14336, 14340, 14345,
+ 14350, 14355, 14360, 14366, 14372, 14377, 14381, 14386, 14391, 14396,
+ 9294, 14401, 14406, 14411, 14416, 14421, 14438, 14456, 14468, 14481,
+ 14498, 14514, 14531, 14541, 14560, 14571, 14582, 14593, 14604, 14616,
+ 14627, 14638, 14655, 14666, 14677, 14682, 9299, 14687, 14691, 2381,
+ 14695, 14698, 14704, 14712, 14720, 14725, 14733, 14741, 14748, 14753,
+ 14759, 14766, 14774, 14781, 14793, 14801, 14806, 11590, 14812, 14821,
+ 14830, 14838, 14845, 14851, 14859, 14866, 14872, 14879, 14885, 14894,
+ 14902, 14912, 14919, 14925, 14933, 14939, 14947, 14954, 14967, 14974,
+ 14983, 14992, 15001, 15009, 15019, 15026, 15031, 3560, 15038, 15043,
+ 1372, 15047, 14317, 15051, 15057, 15061, 15069, 15081, 15086, 15093,
+ 15099, 15104, 15111, 14322, 15115, 15119, 15123, 14327, 15127, 14332,
+ 15131, 15138, 15143, 15147, 15154, 15158, 15166, 15173, 15177, 15184,
+ 15201, 15210, 15214, 15217, 15225, 15231, 15236, 3638, 15240, 15242,
+ 15250, 15257, 15267, 15279, 15284, 15290, 15295, 15299, 15305, 15310,
+ 15316, 15319, 15326, 15334, 15341, 15347, 15353, 15358, 15365, 15371,
+ 15376, 15383, 15387, 15393, 15397, 15404, 15410, 15416, 15424, 15430,
+ 15435, 15441, 15449, 15457, 15463, 15469, 15474, 15481, 15486, 15490,
+ 15496, 15501, 15508, 15513, 15519, 15522, 15528, 15534, 15537, 15541,
+ 15553, 15559, 15564, 15571, 15577, 15583, 15594, 15604, 15613, 15621,
+ 15628, 15639, 15649, 15659, 15667, 15670, 14346, 15675, 15680, 14351,
+ 14486, 15688, 15701, 15716, 15727, 14503, 15745, 15758, 15771, 15782,
+ 10485, 15793, 15806, 15825, 15836, 15847, 15858, 2649, 15871, 15875,
+ 15883, 15898, 15913, 15924, 15931, 15937, 15945, 15949, 15955, 15958,
+ 15968, 15976, 15983, 15991, 16001, 16006, 16013, 16018, 16025, 16036,
+ 16046, 16052, 16057, 16062, 14356, 16066, 16072, 16078, 16083, 16088,
+ 16093, 16097, 14361, 14367, 16101, 14373, 16106, 16114, 16123, 16130,
+ 9143, 16134, 16136, 16141, 16146, 16152, 16157, 16162, 16167, 16172,
+ 16176, 16182, 16188, 16193, 16199, 16204, 16209, 16215, 16220, 16225,
+ 16230, 16235, 16241, 16246, 16251, 16257, 16263, 16268, 16273, 16280,
+ 16286, 16297, 16304, 16309, 16313, 16317, 16320, 16328, 16333, 16340,
+ 16347, 16353, 16358, 16363, 16370, 16380, 16385, 16392, 16398, 16408,
+ 16418, 16432, 16446, 16460, 16474, 16489, 16504, 16521, 16539, 16552,
+ 16558, 16563, 16568, 16572, 16577, 16585, 16591, 16596, 16601, 16605,
+ 16610, 16614, 16619, 16623, 16634, 16640, 16645, 16650, 16657, 16662,
+ 16666, 16671, 16676, 16682, 16689, 16695, 16700, 16704, 16710, 16715,
+ 16720, 16724, 16730, 16735, 16740, 16747, 16752, 13104, 16756, 16761,
+ 16765, 16770, 16776, 16782, 16789, 16799, 16807, 16814, 16819, 16823,
+ 16832, 16840, 16847, 16854, 16860, 16866, 16871, 16876, 16882, 16887,
+ 16893, 16898, 16904, 16910, 16917, 16923, 16928, 16933, 9341, 16942,
+ 16945, 16951, 16956, 16961, 16971, 16978, 16984, 16989, 16994, 17000,
+ 17005, 17011, 17016, 17022, 17028, 17033, 17041, 17048, 17053, 17058,
+ 17064, 17069, 17073, 17082, 17093, 17100, 17105, 17113, 17119, 17126,
+ 17132, 17137, 17141, 17147, 17152, 17157, 17162, 1440, 7777, 2877, 17166,
+ 17170, 17174, 17178, 17182, 17186, 17189, 17196, 17204, 14387, 17211,
+ 17221, 17229, 17236, 17244, 17254, 17263, 17276, 17281, 17286, 17294,
+ 17301, 13200, 13209, 17308, 17318, 17333, 17339, 17346, 17353, 17359,
+ 17367, 17377, 17387, 14392, 17396, 17402, 17408, 17416, 17424, 17429,
+ 17438, 17446, 17458, 17468, 17478, 17488, 17497, 17509, 17519, 17529,
+ 17540, 17545, 17557, 17569, 17581, 17593, 17605, 17617, 17629, 17641,
+ 17653, 17665, 17676, 17688, 17700, 17712, 17724, 17736, 17748, 17760,
+ 17772, 17784, 17796, 17807, 17819, 17831, 17843, 17855, 17867, 17879,
+ 17891, 17903, 17915, 17927, 17938, 17950, 17962, 17974, 17986, 17998,
+ 18010, 18022, 18034, 18046, 18058, 18069, 18081, 18093, 18105, 18117,
+ 18129, 18141, 18153, 18165, 18177, 18189, 18200, 18212, 18224, 18236,
+ 18248, 18260, 18272, 18284, 18296, 18308, 18320, 18331, 18343, 18355,
+ 18367, 18379, 18391, 18403, 18415, 18427, 18439, 18451, 18462, 18474,
+ 18486, 18498, 18510, 18523, 18536, 18549, 18562, 18575, 18588, 18601,
+ 18613, 18626, 18639, 18652, 18665, 18678, 18691, 18704, 18717, 18730,
+ 18743, 18755, 18768, 18781, 18794, 18807, 18820, 18833, 18846, 18859,
+ 18872, 18885, 18897, 18910, 18923, 18936, 18949, 18962, 18975, 18988,
+ 19001, 19014, 19027, 19039, 19052, 19065, 19078, 19091, 19104, 19117,
+ 19130, 19143, 19156, 19169, 19181, 19194, 19207, 19220, 19233, 19246,
+ 19259, 19272, 19285, 19298, 19311, 19323, 19334, 19347, 19360, 19373,
+ 19386, 19399, 19412, 19425, 19438, 19451, 19464, 19476, 19489, 19502,
+ 19515, 19528, 19541, 19554, 19567, 19580, 19593, 19606, 19618, 19631,
+ 19644, 19657, 19670, 19683, 19696, 19709, 19722, 19735, 19748, 19760,
+ 19773, 19786, 19799, 19812, 19825, 19838, 19851, 19864, 19877, 19890,
+ 19902, 19915, 19928, 19941, 19954, 19967, 19980, 19993, 20006, 20019,
+ 20032, 20044, 20057, 20070, 20083, 20096, 20109, 20122, 20135, 20148,
+ 20161, 20174, 20186, 20199, 20212, 20225, 20238, 20251, 20264, 20277,
+ 20290, 20303, 20316, 20328, 20341, 20354, 20367, 20380, 20393, 20406,
+ 20419, 20432, 20445, 20458, 20470, 20483, 20496, 20509, 20522, 20535,
+ 20548, 20561, 20574, 20587, 20600, 20612, 20625, 20638, 20651, 20664,
+ 20677, 20690, 20703, 20716, 20729, 20742, 20754, 20765, 20773, 20781,
+ 20788, 20794, 20798, 20804, 20810, 20818, 20824, 20829, 20833, 20842,
+ 9148, 20853, 20860, 20868, 20875, 20882, 10941, 20889, 20898, 20903,
+ 20908, 7805, 20915, 20920, 20923, 20928, 20936, 20943, 20950, 20957,
+ 20963, 20972, 20981, 20987, 20996, 21000, 21006, 21011, 21021, 21028,
+ 21034, 21042, 21048, 21055, 21065, 21074, 21078, 21085, 21089, 21094,
+ 21100, 21108, 21112, 21122, 14402, 21131, 21137, 21141, 21150, 14407,
+ 21156, 21163, 21174, 21182, 21191, 21199, 8931, 21207, 21212, 21218,
+ 21223, 21227, 21231, 21235, 9632, 21240, 21248, 21255, 21264, 21271,
+ 21278, 10871, 21285, 21291, 21295, 21301, 21308, 21314, 21322, 21328,
+ 21335, 21341, 21347, 21356, 21360, 21368, 21377, 21384, 21389, 21393,
+ 21404, 21409, 21414, 21419, 21432, 7995, 21436, 21442, 21450, 21454,
+ 21461, 21470, 21475, 14678, 21483, 21487, 21499, 21504, 21508, 21511,
+ 21517, 21523, 21528, 21532, 21535, 21546, 21551, 9376, 21558, 21563,
+ 9381, 21568, 21573, 21578, 21583, 21588, 21593, 21598, 21603, 21608,
+ 21613, 21618, 21623, 21629, 21634, 21639, 21644, 21649, 21654, 21659,
+ 21664, 21669, 21674, 21680, 21686, 21691, 21696, 21701, 21706, 21711,
+ 21716, 21721, 21726, 21731, 21737, 21742, 21747, 21752, 21758, 21764,
+ 21769, 21774, 21779, 21784, 21789, 21794, 21799, 21804, 21810, 21815,
+ 21820, 21825, 21830, 21836, 21841, 21846, 21850, 1368, 129, 21858, 21862,
+ 21866, 21870, 21875, 21879, 13110, 12469, 21883, 21888, 21892, 21897,
+ 21901, 21906, 21910, 21916, 21921, 21925, 21929, 21937, 21941, 21945,
+ 21950, 21955, 21959, 21965, 21970, 21974, 21979, 21984, 21988, 21995,
+ 22002, 22009, 22013, 22017, 22022, 22026, 22029, 22035, 22048, 22053,
+ 22062, 22067, 9421, 22072, 22075, 2712, 2717, 22079, 22085, 22091, 7209,
+ 22096, 22101, 22106, 22112, 22117, 13896, 22122, 22127, 22132, 22137,
+ 22143, 22148, 22153, 22159, 22164, 22168, 22173, 22178, 22183, 22188,
+ 22192, 22197, 22201, 22206, 22211, 22216, 22221, 22225, 22230, 22234,
+ 22239, 22244, 22249, 22254, 2886, 22169, 22258, 22266, 22273, 9726,
+ 22285, 22293, 22174, 22300, 22305, 22313, 22179, 22318, 22323, 22331,
+ 22336, 22184, 22341, 22346, 22350, 22356, 22364, 22367, 22374, 22378,
+ 22382, 22388, 22395, 22400, 8958, 1727, 1732, 22404, 22410, 22416, 22421,
+ 22425, 22429, 22433, 22437, 22441, 22445, 22449, 22452, 22458, 22465,
+ 22473, 22479, 22485, 22490, 22495, 22499, 13816, 13823, 22504, 22516,
+ 22519, 22526, 16349, 22533, 22541, 22552, 22561, 22574, 22584, 22598,
+ 22610, 22624, 22636, 22646, 22658, 22664, 22679, 22703, 22721, 22740,
+ 22753, 22767, 22785, 22801, 22818, 22836, 22847, 22866, 22883, 22903,
+ 22921, 22933, 22947, 22961, 22973, 22990, 23009, 23027, 23039, 23057,
+ 23076, 14546, 23089, 23109, 23121, 10516, 23133, 23138, 23143, 23148,
+ 23154, 23159, 23163, 23170, 2398, 23174, 23180, 23184, 23187, 23191,
+ 23199, 23205, 22202, 23209, 23218, 23229, 23235, 23241, 23250, 23258,
+ 23265, 23270, 23274, 23281, 23287, 23296, 23304, 23311, 23321, 23330,
+ 23340, 23345, 23354, 23363, 23374, 23385, 3963, 23395, 23399, 23409,
+ 23417, 23427, 23438, 23443, 23453, 23461, 23468, 23474, 23481, 23486,
+ 22212, 23490, 23499, 23503, 23506, 23511, 23518, 23527, 23535, 23543,
+ 23553, 23562, 23568, 23574, 22217, 22222, 23578, 23588, 23598, 23608,
+ 23616, 23623, 23633, 23641, 23649, 23655, 23663, 930, 23672, 14737, 542,
+ 23686, 23695, 23703, 23714, 23725, 23735, 23744, 23756, 23765, 23774,
+ 23780, 23789, 23798, 23808, 23816, 23824, 9353, 23830, 23833, 23837,
+ 23842, 23847, 9841, 22235, 22240, 23855, 23861, 23867, 23872, 23877,
+ 23881, 23889, 23895, 23901, 23905, 3525, 23913, 23918, 23923, 23927,
+ 23931, 9921, 23938, 23946, 23960, 23967, 23973, 9930, 9936, 23981, 23989,
+ 23996, 24001, 24006, 22245, 24012, 24023, 24027, 24032, 2601, 24037,
+ 24048, 24054, 24059, 24063, 24067, 24070, 24077, 24084, 24091, 24097,
+ 24101, 22250, 24106, 24110, 24114, 1037, 24119, 24124, 24129, 24134,
+ 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184,
+ 24190, 24195, 24200, 24205, 24210, 24215, 24220, 24226, 24231, 24236,
+ 24241, 24246, 24251, 24256, 24261, 24267, 24273, 24278, 24284, 24289,
+ 24294, 5, 24300, 24304, 24308, 24312, 24317, 24321, 24325, 24329, 24333,
+ 24338, 24342, 24347, 24351, 24354, 24358, 24363, 24367, 24372, 24376,
+ 24380, 24384, 24389, 24393, 24397, 24407, 24412, 24416, 24420, 24425,
+ 24430, 24439, 24444, 24449, 24453, 24457, 24470, 24482, 24491, 24500,
+ 24506, 24511, 24515, 24519, 24529, 24538, 24546, 24552, 24557, 24561,
+ 24568, 24578, 24587, 24595, 24603, 24610, 24618, 24627, 24636, 24644,
+ 24649, 24653, 24657, 24660, 24662, 24666, 24670, 24675, 24680, 24684,
+ 24688, 24691, 24695, 24698, 24702, 24705, 24708, 24712, 24718, 24722,
+ 24726, 24730, 24735, 24740, 24745, 24749, 24752, 24757, 24763, 24768,
+ 24774, 24779, 24783, 24787, 24791, 24796, 24800, 24805, 24809, 24813,
+ 24820, 24824, 24827, 24831, 24837, 24843, 24847, 24851, 24856, 24863,
+ 24869, 24873, 24882, 24886, 24890, 24893, 24899, 24904, 24910, 1489,
+ 1791, 24915, 24920, 24925, 24930, 24935, 24940, 24945, 2148, 2194, 24950,
+ 24953, 24957, 24961, 24966, 24970, 24974, 24977, 24982, 24987, 24991,
+ 24994, 24999, 25003, 25008, 25012, 14749, 25017, 25020, 25023, 25027,
+ 25032, 25036, 25049, 25053, 25056, 25064, 25073, 25080, 25085, 25091,
+ 25097, 25105, 25112, 25119, 25123, 25127, 25131, 25136, 25141, 25145,
+ 25153, 25158, 25170, 25181, 25186, 25190, 25194, 25200, 25205, 25210,
+ 25214, 25218, 25221, 25227, 7915, 2316, 25231, 25236, 25252, 9468, 25272,
+ 25281, 25297, 25301, 25304, 25310, 25320, 25326, 25335, 25350, 25362,
+ 25373, 25381, 25390, 25396, 25405, 25415, 25426, 25437, 25446, 25453,
+ 25462, 25470, 25477, 25485, 25492, 25499, 25512, 25519, 25525, 25530,
+ 25539, 25545, 25550, 25558, 25565, 23419, 25577, 25589, 25603, 25611,
+ 25618, 25630, 25639, 25648, 25656, 25664, 25672, 25679, 25688, 25696,
+ 25706, 25715, 25725, 25734, 25743, 25751, 25756, 25760, 25763, 25767,
+ 25771, 25775, 25779, 25783, 25789, 25795, 25803, 14794, 25810, 25815,
+ 25822, 25828, 25835, 14802, 25842, 25845, 25857, 25865, 25871, 25876,
+ 25880, 9871, 25891, 25901, 25910, 25917, 25921, 14807, 25924, 25931,
+ 25935, 25941, 25944, 25951, 25957, 25964, 25970, 25974, 25979, 25983,
+ 25992, 25999, 26005, 7956, 26012, 26020, 26027, 26033, 26038, 26044,
+ 26050, 26058, 26062, 26065, 26067, 25768, 26076, 26082, 26092, 26097,
+ 26104, 26110, 26115, 26120, 26125, 26129, 26134, 26141, 26150, 26154,
+ 26161, 26170, 26176, 26181, 26187, 26192, 26199, 26210, 26215, 26219,
+ 26229, 26235, 26239, 26244, 26254, 26263, 26267, 26274, 26282, 26289,
+ 26295, 26300, 26308, 26315, 26327, 26336, 26340, 13046, 26348, 26358,
+ 26362, 25060, 26373, 26378, 26382, 26389, 26396, 21961, 25693, 26401,
+ 26405, 26408, 22853, 26413, 26427, 26443, 26461, 26480, 26497, 26515,
+ 22872, 26532, 26552, 22889, 26564, 26576, 15732, 26588, 22909, 26602,
+ 26614, 10529, 26628, 26633, 26638, 26643, 26649, 26655, 26661, 26665,
+ 26672, 26677, 26687, 26693, 10176, 26699, 26701, 26706, 26714, 26718,
+ 26137, 26724, 26731, 11517, 11527, 26738, 26748, 26753, 26757, 26760,
+ 26766, 26774, 26786, 26796, 26812, 26825, 26839, 15750, 26853, 26860,
+ 26864, 26867, 26872, 26876, 26883, 26890, 26900, 26905, 26910, 26915,
+ 26923, 26931, 26940, 26945, 9565, 26949, 26952, 26955, 26960, 26967,
+ 26972, 26988, 26996, 27004, 9416, 27012, 27017, 27021, 27027, 27033,
+ 27036, 27042, 27054, 27062, 27069, 27075, 27082, 27093, 27107, 27120,
+ 27129, 27138, 27150, 27161, 27171, 27180, 27189, 27197, 27208, 7938,
+ 27215, 27221, 27226, 27232, 27239, 27249, 27259, 27268, 27274, 27281,
+ 27286, 27293, 27301, 27309, 27321, 6246, 27328, 27337, 27345, 27351,
+ 27357, 27362, 27366, 27369, 27375, 27382, 27387, 27392, 27396, 27408,
+ 27419, 27428, 27436, 14934, 27441, 27447, 27453, 11510, 8635, 27458,
+ 27462, 27465, 27468, 27474, 27482, 27490, 27494, 27498, 27503, 27506,
+ 27515, 27519, 27527, 27538, 27542, 27548, 27554, 27558, 27564, 27572,
+ 27594, 27618, 27625, 27632, 27638, 27646, 27652, 27657, 27668, 27686,
+ 27693, 27701, 27705, 27714, 27727, 27735, 27747, 27758, 27768, 27782,
+ 27791, 27799, 27811, 9485, 27822, 27833, 27845, 27855, 27864, 27869,
+ 27873, 27881, 27891, 27896, 27900, 27903, 27906, 27914, 27922, 27931,
+ 27941, 27950, 27956, 27970, 2663, 27992, 28003, 28012, 28022, 28034,
+ 28043, 28052, 28062, 28070, 28078, 28087, 28092, 28103, 28108, 28119,
+ 28123, 28133, 28142, 28150, 28160, 28170, 28178, 28187, 28194, 28202,
+ 28209, 28218, 28222, 28230, 28237, 28245, 28252, 28263, 28278, 28285,
+ 28291, 28301, 28310, 28316, 28320, 28327, 28331, 14018, 28337, 28341,
+ 28346, 28353, 28357, 28361, 28369, 28377, 28383, 28392, 28399, 28404,
+ 28409, 28419, 23488, 28423, 28426, 28431, 28436, 28441, 28446, 28451,
+ 28456, 28461, 28466, 28472, 28477, 28482, 28488, 1218, 704, 28493, 28502,
+ 2364, 28509, 28514, 28518, 28524, 1267, 546, 318, 28529, 28538, 28546,
+ 28555, 28563, 28574, 28583, 28591, 28595, 28598, 28606, 28614, 28619,
+ 14762, 28625, 28631, 28637, 5872, 28642, 28646, 28652, 28656, 28663,
+ 1455, 28669, 28676, 9572, 28680, 28690, 28698, 28704, 28713, 28721,
+ 28727, 28735, 28742, 11103, 28748, 28755, 28760, 28767, 1496, 2147,
+ 28773, 28779, 28786, 28797, 28808, 28816, 28823, 28833, 28842, 28850,
+ 28859, 28866, 28873, 28886, 28897, 1272, 28916, 28921, 28929, 3575,
+ 28933, 28938, 28942, 1459, 24689, 28952, 28956, 28961, 28965, 3493,
+ 28971, 28979, 28986, 28997, 29005, 29013, 3576, 279, 29018, 29026, 29034,
+ 29041, 29047, 29052, 2216, 29059, 29065, 25975, 26205, 29071, 106, 29075,
+ 29079, 29085, 615, 9321, 29090, 29097, 29103, 2327, 29107, 29111, 15174,
+ 29114, 29119, 29126, 29132, 29137, 29145, 29152, 29158, 22338, 29162,
+ 29166, 3646, 16612, 29170, 29175, 29178, 29186, 29194, 29199, 29202,
+ 29209, 29219, 29231, 29236, 29240, 29248, 29255, 29261, 29268, 29275,
+ 29278, 29282, 29286, 1463, 29296, 29298, 29303, 29309, 29315, 29320,
+ 29325, 29330, 29335, 29340, 29345, 29350, 29355, 29360, 29365, 29370,
+ 29375, 29380, 29385, 29391, 29397, 29403, 29409, 29414, 29419, 29424,
+ 29430, 29435, 29440, 29445, 29451, 29456, 29462, 29467, 29472, 29477,
+ 29482, 29488, 29493, 29499, 29504, 29509, 29514, 29519, 29525, 29530,
+ 29536, 29541, 29546, 29551, 29556, 29561, 29566, 29571, 29576, 29581,
+ 29587, 29593, 29599, 29604, 29609, 29614, 29619, 29625, 29631, 29637,
+ 29643, 29649, 29655, 29660, 29666, 29671, 29676, 29681, 29686, 29692,
+ 2443, 29697, 2450, 2457, 2754, 29702, 2463, 2473, 29708, 29712, 29717,
+ 29722, 29728, 29733, 29738, 29742, 29747, 29753, 29758, 29763, 29768,
+ 29774, 29779, 29783, 29787, 29792, 29797, 29802, 29807, 29812, 29818,
+ 29824, 29829, 29833, 29838, 29844, 29848, 29853, 29858, 29863, 29868,
+ 29872, 29875, 29880, 29885, 29890, 29895, 29900, 29906, 29912, 29917,
+ 29922, 29926, 29931, 29936, 29941, 29946, 29951, 29955, 29960, 29965,
+ 29970, 29974, 29978, 29982, 29987, 29995, 30000, 30006, 30012, 30018,
+ 30023, 30027, 30030, 30035, 30040, 30044, 30049, 30053, 30058, 30062,
+ 30065, 30070, 17289, 30075, 30080, 30085, 30093, 21267, 28673, 9019,
+ 30098, 30103, 30107, 30112, 30116, 30120, 30125, 30129, 30132, 30135,
+ 30139, 30144, 30148, 30156, 30160, 30163, 30168, 30172, 30176, 30181,
+ 30186, 30190, 30196, 30201, 30206, 30213, 30220, 30224, 30227, 30233,
+ 30242, 30249, 30257, 30264, 30268, 30273, 30277, 30281, 30287, 30293,
+ 30297, 30303, 30308, 30313, 30320, 30326, 30332, 30338, 30344, 30351,
+ 30357, 30363, 30369, 30375, 30381, 30387, 30393, 30400, 30406, 30413,
+ 30419, 30425, 30431, 30437, 30443, 30449, 30455, 30461, 30467, 11411,
+ 30473, 30478, 30483, 30486, 30494, 30499, 30508, 30514, 30519, 30524,
+ 30529, 30533, 30538, 30543, 30548, 30553, 30558, 30565, 30572, 30578,
+ 30584, 30589, 16290, 30596, 30602, 30609, 30615, 30621, 30626, 30634,
+ 30639, 16069, 30643, 30648, 30653, 30659, 30664, 30669, 30673, 30678,
+ 30683, 30689, 30694, 30699, 30703, 30708, 30713, 30717, 30722, 30727,
+ 30732, 30736, 30741, 30746, 30751, 30755, 30759, 15280, 30763, 30772,
+ 30778, 30784, 30793, 30801, 30810, 30818, 30823, 30827, 30834, 30840,
+ 30844, 30847, 30852, 30861, 30869, 30874, 1495, 30880, 30883, 30887,
+ 22411, 22417, 30893, 30897, 30908, 30919, 30930, 30942, 30949, 30956,
+ 30961, 30965, 5909, 755, 21266, 30973, 30978, 30982, 30987, 30991, 30997,
+ 31002, 31008, 31013, 31019, 31024, 31030, 31035, 31041, 31047, 31053,
+ 31058, 31014, 31020, 31062, 31067, 31073, 31078, 31084, 31089, 31095,
+ 31100, 31025, 10414, 31104, 31036, 31042, 31048, 2831, 3423, 31110,
+ 31113, 31119, 31125, 31131, 31138, 31144, 31150, 31156, 31162, 31168,
+ 31174, 31180, 31186, 31192, 31198, 31204, 31210, 31217, 31223, 31229,
+ 31235, 31241, 31247, 31250, 31255, 31258, 31265, 31273, 31278, 31283,
+ 31289, 31294, 31299, 31303, 31308, 31314, 31319, 31325, 31330, 31336,
+ 31341, 31347, 31353, 31357, 31362, 31367, 31372, 31377, 31381, 31386,
+ 31391, 31396, 31402, 31408, 31414, 31420, 31425, 31429, 31432, 31438,
+ 31444, 31453, 31461, 31468, 31473, 31477, 31481, 31486, 15133, 31491,
+ 31499, 31505, 3683, 1377, 31510, 31514, 8005, 31520, 31526, 31533, 8014,
+ 31537, 31543, 31550, 31556, 31565, 31573, 31585, 31589, 31596, 31602,
+ 31606, 31609, 31618, 31626, 31015, 31631, 31641, 31651, 31661, 31667,
+ 31672, 31682, 31687, 31700, 31714, 31725, 31737, 31749, 31763, 31776,
+ 31788, 31800, 14587, 31814, 31819, 31824, 31828, 31832, 31836, 1780,
+ 27159, 31840, 31845, 31063, 31850, 31853, 31858, 31863, 31868, 31874,
+ 31880, 10091, 31885, 31892, 15684, 31898, 31903, 31908, 31912, 31917,
+ 31922, 31068, 31927, 31932, 31937, 31943, 31074, 31948, 31951, 31958,
+ 31966, 31972, 31978, 31984, 31995, 32000, 32007, 32014, 32021, 32029,
+ 32038, 32047, 32053, 32059, 32067, 31079, 32072, 32078, 32084, 31085,
+ 32089, 32094, 32102, 32110, 32116, 32123, 32129, 32136, 32143, 32149,
+ 32157, 32167, 32174, 32179, 32185, 32190, 32195, 32202, 32211, 32219,
+ 32224, 32230, 32237, 32245, 32251, 32256, 32262, 32271, 27936, 32278,
+ 32282, 32287, 32296, 32301, 32306, 32311, 12398, 32319, 32324, 32329,
+ 32334, 32338, 32343, 32348, 32355, 32360, 32365, 32370, 31090, 21203,
+ 32376, 2519, 244, 32379, 32382, 32386, 32390, 32400, 32408, 32412, 32419,
+ 32426, 32430, 32433, 32439, 32447, 32455, 32459, 32463, 32466, 32473,
+ 32477, 32481, 32488, 32496, 31026, 32503, 32511, 10151, 660, 308, 32523,
+ 32528, 32533, 32539, 32544, 32549, 3704, 32554, 32557, 32562, 32567,
+ 32572, 32577, 32582, 32589, 22512, 32594, 32599, 32604, 32609, 32614,
+ 32620, 32625, 32631, 31261, 32637, 32642, 32648, 32654, 32664, 32669,
+ 32674, 32678, 32683, 32688, 32693, 32698, 32711, 32716, 22289, 16692,
+ 3710, 32720, 32725, 32730, 32736, 32741, 32746, 32750, 32755, 32760,
+ 32766, 32771, 32776, 1382, 32780, 32785, 32790, 32795, 32799, 32804,
+ 32809, 32814, 32820, 32826, 32831, 32835, 32839, 32844, 32849, 32854,
+ 32858, 32866, 32870, 32876, 32880, 32887, 16485, 31037, 32893, 32900,
+ 32908, 32915, 32921, 32934, 32946, 32952, 32956, 2773, 32960, 32964,
+ 32468, 32973, 32984, 32989, 32994, 32999, 33003, 33008, 22422, 33012,
+ 33016, 33021, 31043, 21287, 33025, 33030, 33036, 33041, 33045, 33049,
+ 33052, 33056, 33062, 33073, 33085, 31049, 33090, 33093, 33097, 347,
+ 33102, 33107, 33112, 33117, 33122, 33127, 33133, 33138, 33143, 33149,
+ 33154, 33160, 33165, 33171, 33176, 33181, 33186, 33191, 33196, 33201,
+ 33206, 33211, 33217, 33222, 33227, 33232, 33237, 33242, 33247, 33252,
+ 33258, 33264, 33269, 33274, 33279, 33284, 33289, 33294, 33299, 33304,
+ 33309, 33314, 33319, 33324, 33329, 33334, 33339, 33344, 33349, 33354,
+ 33360, 313, 26, 33365, 33369, 33373, 33381, 33385, 33389, 33392, 33395,
+ 33397, 33402, 33406, 33411, 33415, 33420, 33424, 33429, 33433, 33436,
+ 33438, 33442, 33447, 33451, 33462, 33465, 33467, 33471, 33483, 33492,
+ 33496, 33500, 33506, 33511, 33520, 33526, 33531, 33536, 33540, 33545,
+ 33552, 33557, 33563, 33568, 33572, 33579, 25701, 25711, 33583, 33588,
+ 33593, 33598, 33605, 33609, 33616, 8113, 33622, 33631, 33639, 33654,
+ 33668, 33676, 33687, 33696, 33701, 7227, 33711, 33716, 33721, 33725,
+ 33728, 33732, 33737, 33741, 33748, 33753, 33758, 8912, 33768, 33770,
+ 33773, 33777, 33783, 33787, 33792, 33797, 33803, 33808, 33814, 33819,
+ 33829, 33838, 33846, 33851, 33857, 33862, 33869, 33873, 33881, 33888,
+ 33901, 33909, 33913, 33923, 33928, 33932, 33940, 33948, 33952, 33961,
+ 33967, 33972, 33980, 33990, 33999, 34008, 34017, 34028, 34036, 34047,
+ 34056, 34063, 34069, 34074, 34085, 34090, 34094, 34097, 34101, 34109,
+ 34115, 34123, 34130, 34136, 34141, 34147, 2418, 34151, 34153, 34158,
+ 34163, 34168, 34171, 34173, 34177, 34180, 34187, 34191, 9884, 34195,
+ 34201, 34211, 34216, 34222, 34226, 34231, 34244, 26087, 34250, 34259,
+ 17462, 34266, 34275, 31647, 34283, 34288, 34292, 34300, 34307, 34312,
+ 34316, 34321, 34325, 34333, 34339, 34345, 34350, 34354, 34357, 34362,
+ 34375, 34391, 22979, 34408, 34420, 34437, 34449, 34463, 22996, 23015,
+ 34475, 34487, 2680, 34501, 34506, 34511, 34516, 34520, 34527, 34539,
+ 34545, 34548, 34559, 34570, 34575, 32064, 695, 34579, 34583, 34587,
+ 34590, 34595, 34600, 34606, 34611, 34616, 34622, 34628, 34633, 34637,
+ 34642, 34647, 34652, 34656, 34659, 34665, 34670, 34675, 34680, 34684,
+ 34689, 34695, 34703, 26320, 34708, 34713, 34720, 34726, 34732, 34737,
+ 34745, 22521, 34752, 34757, 34762, 34767, 34771, 34774, 34779, 34783,
+ 34787, 34794, 34800, 34806, 34812, 34819, 34824, 34830, 33943, 34834,
+ 34838, 34843, 34856, 34861, 34867, 34875, 34882, 34890, 34900, 34906,
+ 34912, 34918, 34922, 34931, 34939, 34946, 34951, 34956, 10437, 34961,
+ 34969, 34976, 34982, 34992, 34997, 35003, 35011, 3608, 35018, 35025,
+ 3614, 35029, 35034, 35045, 35052, 35058, 35067, 35071, 4015, 35074,
+ 35081, 35087, 35093, 35101, 35111, 29042, 35118, 35126, 35131, 35137,
+ 35142, 25947, 35148, 35155, 35161, 35170, 23660, 35177, 35182, 35186,
+ 35194, 35202, 9600, 5895, 35209, 35213, 35215, 35219, 35224, 35226,
+ 35232, 35237, 35242, 35249, 32585, 35255, 35260, 35264, 35269, 35273,
+ 35282, 35286, 35292, 35299, 35305, 35312, 35317, 35326, 35331, 35335,
+ 35340, 35347, 35355, 35363, 35368, 21343, 35372, 35375, 35379, 35383,
+ 35387, 35390, 35392, 35400, 35404, 35411, 35415, 35419, 35427, 35434,
+ 35444, 35448, 35452, 35460, 35468, 35474, 35479, 35488, 13350, 35494,
+ 35503, 35508, 35515, 35523, 35531, 35539, 35546, 35553, 35560, 35567,
+ 35574, 35579, 35585, 35602, 35610, 35620, 35628, 35635, 407, 35639,
+ 35645, 35649, 35654, 33692, 35660, 35663, 35667, 35675, 3619, 35683,
+ 35689, 35695, 35704, 35714, 35721, 35727, 3625, 3631, 35736, 35743,
+ 35751, 35756, 35760, 35767, 35775, 35782, 35788, 35797, 35807, 35813,
+ 35821, 35830, 35837, 35845, 35852, 22019, 35856, 35863, 35869, 35879,
+ 35888, 35899, 35903, 35913, 35919, 35926, 35934, 35943, 35952, 35962,
+ 35973, 35980, 35985, 35992, 3029, 36000, 36006, 36011, 36017, 36023,
+ 36028, 36041, 36054, 36067, 36074, 36080, 36088, 36096, 36101, 36105,
+ 1469, 36109, 36114, 36119, 36124, 36129, 36135, 36140, 36145, 36150,
+ 36155, 36160, 36165, 36170, 36176, 36182, 36187, 36192, 36198, 36203,
+ 36208, 36213, 36219, 36224, 36229, 36234, 36239, 36245, 36250, 36255,
+ 36261, 36266, 36271, 36276, 36281, 36286, 36292, 36297, 36303, 36308,
+ 36314, 36319, 36324, 36329, 36335, 36341, 36347, 36353, 36359, 36365,
+ 36371, 36377, 36382, 36387, 36393, 36398, 36403, 36408, 36413, 36418,
+ 36423, 36428, 36434, 36439, 36444, 36450, 36456, 101, 36461, 36463,
+ 36467, 36471, 36475, 36480, 36484, 9521, 36488, 36494, 1741, 6280, 36500,
+ 36503, 36508, 36512, 36517, 36521, 36525, 36530, 10238, 36534, 36538,
+ 36542, 36546, 15372, 36551, 36555, 36560, 36565, 36570, 36574, 36581,
+ 26111, 36587, 36590, 36594, 36599, 36605, 36609, 36617, 36623, 36628,
+ 36632, 36638, 36642, 36646, 3462, 3467, 29234, 36649, 36653, 36657,
+ 36661, 36669, 36676, 36680, 36687, 36692, 317, 36697, 36701, 36707,
+ 36719, 36725, 36731, 36735, 36741, 36750, 36754, 36758, 36763, 36769,
+ 36774, 36778, 36783, 36787, 36791, 36798, 36804, 36809, 36824, 36839,
+ 36854, 36870, 36888, 10188, 36902, 36909, 36913, 36916, 36925, 36930,
+ 36934, 36942, 33894, 36950, 36954, 36964, 36975, 29204, 36988, 36992,
+ 37001, 37009, 9778, 14900, 37013, 22434, 37016, 30152, 37021, 9777,
+ 37026, 37032, 37037, 37043, 37048, 37054, 37059, 37065, 37070, 37076,
+ 37082, 37088, 37093, 37049, 37055, 37060, 37066, 37071, 37077, 37083,
+ 8126, 3874, 37097, 37105, 37109, 37112, 37116, 37121, 37126, 37132,
+ 37138, 37143, 37147, 25959, 37151, 37155, 37161, 37165, 9042, 37174,
+ 37181, 37185, 11868, 37192, 37198, 37203, 37210, 37217, 37224, 28550,
+ 8049, 37231, 37238, 37245, 37251, 37256, 37263, 37274, 37280, 37285,
+ 37290, 37295, 37302, 37050, 37306, 37316, 37327, 37333, 37338, 37343,
+ 37348, 37353, 37358, 37362, 37366, 37372, 37380, 2319, 865, 10254, 10266,
+ 10271, 10277, 37389, 10282, 10287, 10293, 37394, 37404, 37408, 10298,
+ 37413, 16890, 37416, 37421, 37425, 37430, 37435, 37442, 37449, 37453,
+ 37456, 37464, 10201, 37471, 37474, 37480, 37490, 5929, 37499, 37503,
+ 37511, 37515, 37525, 37531, 37542, 37548, 37554, 37559, 37565, 37571,
+ 37577, 37582, 37585, 37592, 37598, 37603, 37610, 37617, 37621, 37631,
+ 37644, 37653, 37662, 37673, 37686, 37697, 37706, 37717, 37722, 37731,
+ 37736, 10303, 37742, 37749, 37757, 37762, 37766, 37773, 37780, 3829, 16,
+ 37784, 37789, 16744, 37793, 37796, 37799, 28056, 37803, 28559, 37811,
+ 37815, 37819, 37822, 37828, 37072, 37834, 37842, 37848, 37855, 28039,
+ 37859, 28233, 37863, 37872, 37878, 37884, 37889, 37893, 37899, 37903,
+ 37911, 37919, 26177, 37925, 37932, 37938, 37943, 37948, 37952, 37958,
+ 37963, 37969, 4056, 791, 37976, 37980, 37983, 15262, 37995, 35826, 38006,
+ 38009, 38016, 38020, 38026, 38030, 38036, 38041, 38047, 38052, 38057,
+ 38061, 38065, 38070, 38075, 38085, 38091, 38104, 38110, 38116, 38123,
+ 38128, 38134, 38139, 16630, 1472, 1019, 31193, 31199, 38144, 31205,
+ 31218, 31224, 31230, 38150, 31236, 31242, 38156, 38162, 22, 38170, 38177,
+ 38181, 38185, 38193, 31953, 38197, 38201, 38208, 38213, 38217, 38222,
+ 38228, 38233, 38239, 38244, 38248, 38252, 38256, 38261, 38265, 38270,
+ 38274, 38281, 38286, 38290, 38295, 38299, 38304, 38308, 38313, 38319,
+ 15482, 15487, 38324, 38328, 38331, 38335, 21170, 38340, 38344, 38350,
+ 38357, 38362, 38372, 38377, 38385, 38389, 38392, 31968, 38396, 4109,
+ 38401, 38406, 38410, 38415, 38419, 38424, 13368, 38435, 38439, 38442,
+ 38447, 38451, 38455, 38458, 38462, 8145, 13384, 38465, 38468, 38474,
+ 38479, 38485, 38490, 38496, 38501, 38507, 38512, 38518, 38524, 38530,
+ 38535, 38539, 38543, 38552, 38568, 38584, 38594, 27946, 38601, 38605,
+ 38610, 38615, 38619, 38623, 35947, 38629, 38634, 38638, 38645, 38650,
+ 38654, 38658, 26979, 38664, 21438, 38669, 38676, 38684, 38690, 38697,
+ 38705, 38711, 38715, 38721, 38729, 38733, 38742, 9502, 38750, 38754,
+ 38762, 38769, 38774, 38779, 38783, 38786, 38790, 38793, 38797, 38804,
+ 38809, 38815, 26398, 31256, 38819, 38826, 38832, 38838, 38843, 38846,
+ 38848, 38855, 38862, 38868, 38872, 38875, 38879, 38883, 38887, 38892,
+ 38896, 38900, 38903, 38907, 38921, 23045, 38940, 38953, 38966, 38979,
+ 23063, 38994, 10490, 39009, 39015, 39019, 39023, 39030, 39035, 39039,
+ 39046, 39052, 39057, 39063, 39073, 39085, 39096, 39101, 39108, 39112,
+ 39116, 39119, 15878, 3677, 39127, 15509, 39140, 39147, 39151, 39155,
+ 39160, 39165, 39171, 39175, 39179, 39182, 7742, 15520, 39187, 39191,
+ 39197, 39206, 39211, 39218, 35803, 39224, 39229, 39233, 39238, 39245,
+ 39249, 39252, 39256, 39261, 14552, 39268, 39275, 1066, 39279, 39284,
+ 39289, 39295, 39300, 39305, 39309, 39319, 39324, 39330, 39335, 39341,
+ 39346, 39352, 39362, 39367, 39372, 39376, 7229, 7241, 39381, 39384,
+ 39391, 39397, 34059, 34066, 39406, 39410, 32016, 39418, 39429, 39437,
+ 35995, 39444, 39449, 39454, 39465, 39472, 39483, 32040, 21444, 39491,
+ 735, 39496, 39502, 28030, 39508, 39513, 39523, 39532, 39539, 39545,
+ 39549, 39552, 39559, 39565, 39572, 39578, 39588, 39596, 39602, 39608,
+ 39613, 39617, 39624, 39630, 39637, 38888, 535, 13805, 39643, 39648,
+ 39651, 39657, 39665, 1396, 39670, 39674, 39679, 39686, 39692, 39696,
+ 39700, 39705, 39714, 39721, 39731, 39737, 28074, 39754, 39763, 39771,
+ 39777, 39782, 39789, 39795, 39803, 39812, 39820, 39824, 39829, 39837,
+ 32049, 39843, 39862, 15811, 39876, 39892, 39906, 39912, 39917, 39922,
+ 39927, 39933, 32055, 39938, 39945, 39950, 39954, 345, 2936, 39961, 39966,
+ 39971, 27305, 39792, 39975, 39980, 39988, 39992, 39995, 40001, 40007,
+ 40011, 28129, 40014, 40019, 40023, 40026, 40031, 40035, 40040, 40045,
+ 40049, 40054, 40058, 40062, 21166, 21177, 40066, 40071, 40077, 26936,
+ 40082, 40086, 21253, 16059, 40089, 40094, 40099, 40104, 40109, 40114,
+ 40119, 40124, 447, 43, 31274, 31279, 31284, 31290, 31295, 31300, 40129,
+ 31304, 40133, 40137, 40141, 31309, 31315, 40155, 31326, 31331, 40163,
+ 40168, 31337, 40173, 40178, 40183, 40188, 40194, 40200, 40206, 31354,
+ 40219, 40225, 31358, 40229, 31363, 40234, 31368, 31373, 40237, 40242,
+ 40246, 30923, 40252, 13592, 40259, 40264, 31378, 40268, 40273, 40278,
+ 40283, 40287, 40292, 40297, 40303, 40308, 40313, 40319, 40325, 40330,
+ 40334, 40339, 40344, 40349, 40353, 40358, 40363, 40368, 40374, 40380,
+ 40386, 40391, 40395, 40400, 40404, 31382, 31387, 31392, 40408, 40412,
+ 40416, 31397, 31403, 31409, 31421, 40428, 25996, 40432, 40436, 40441,
+ 40446, 40451, 40456, 40460, 40464, 40474, 40479, 40484, 40488, 40492,
+ 40495, 40503, 31469, 40508, 1479, 40514, 40522, 40531, 40535, 40539,
+ 40547, 40553, 40561, 40577, 40581, 40585, 40590, 40605, 31506, 1749,
+ 12048, 40609, 1378, 40621, 40622, 40630, 40637, 40642, 40649, 40654,
+ 9372, 1114, 10325, 40661, 40666, 40669, 40672, 40681, 1286, 40686, 39036,
+ 40693, 40698, 22486, 2557, 40702, 10734, 40712, 40718, 2337, 2347, 40727,
+ 40736, 40746, 40757, 3293, 34212, 10377, 3807, 16668, 1291, 40762, 40770,
+ 40777, 40782, 40786, 40790, 23858, 10404, 40798, 40807, 40816, 40824,
+ 40831, 40842, 40847, 40860, 40873, 40885, 40897, 40909, 40922, 40933,
+ 40944, 40954, 40962, 40970, 40982, 40994, 41005, 41014, 41022, 41029,
+ 41041, 41048, 41057, 41064, 41077, 41082, 41092, 41097, 41103, 41108,
+ 37182, 41112, 41119, 41123, 41130, 41138, 2518, 41145, 41156, 41166,
+ 41175, 41183, 41193, 41201, 41211, 41220, 41225, 41231, 41237, 3709,
+ 41248, 41258, 41267, 41276, 41286, 41294, 41303, 41308, 41313, 41318,
+ 1705, 37, 41326, 41334, 41345, 41356, 16343, 41366, 41370, 41377, 41383,
+ 41388, 41392, 41403, 41413, 41422, 41433, 16717, 16722, 41438, 41447,
+ 41452, 41462, 41467, 41475, 41483, 41490, 41496, 7078, 228, 41500, 41506,
+ 41511, 41514, 2117, 39152, 41522, 41526, 41529, 1512, 41535, 13967, 1296,
+ 41540, 41553, 41567, 2643, 41585, 41597, 41609, 2657, 2674, 41623, 41636,
+ 2689, 41650, 41662, 2704, 41676, 1302, 1308, 1314, 10652, 41681, 41686,
+ 41691, 41695, 41710, 41725, 41740, 41755, 41770, 41785, 41800, 41815,
+ 41830, 41845, 41860, 41875, 41890, 41905, 41920, 41935, 41950, 41965,
+ 41980, 41995, 42010, 42025, 42040, 42055, 42070, 42085, 42100, 42115,
+ 42130, 42145, 42160, 42175, 42190, 42205, 42220, 42235, 42250, 42265,
+ 42280, 42295, 42310, 42325, 42340, 42355, 42370, 42385, 42400, 42415,
+ 42430, 42445, 42460, 42475, 42490, 42505, 42520, 42535, 42550, 42565,
+ 42580, 42595, 42610, 42625, 42640, 42655, 42670, 42685, 42700, 42715,
+ 42730, 42745, 42760, 42775, 42790, 42805, 42820, 42835, 42850, 42865,
+ 42880, 42895, 42910, 42925, 42940, 42955, 42970, 42985, 43000, 43015,
+ 43030, 43045, 43060, 43075, 43090, 43105, 43120, 43135, 43150, 43165,
+ 43180, 43195, 43210, 43225, 43240, 43255, 43270, 43285, 43300, 43315,
+ 43330, 43345, 43360, 43375, 43390, 43405, 43420, 43435, 43450, 43465,
+ 43480, 43495, 43510, 43525, 43540, 43555, 43570, 43585, 43600, 43615,
+ 43630, 43645, 43660, 43675, 43690, 43705, 43720, 43735, 43750, 43765,
+ 43780, 43795, 43810, 43825, 43840, 43855, 43870, 43885, 43900, 43915,
+ 43930, 43945, 43960, 43975, 43990, 44005, 44020, 44035, 44050, 44065,
+ 44080, 44095, 44110, 44125, 44140, 44155, 44170, 44185, 44200, 44215,
+ 44230, 44245, 44260, 44275, 44290, 44305, 44320, 44335, 44350, 44365,
+ 44380, 44395, 44410, 44425, 44440, 44455, 44470, 44485, 44500, 44515,
+ 44530, 44545, 44560, 44575, 44590, 44605, 44620, 44635, 44650, 44665,
+ 44680, 44695, 44710, 44725, 44740, 44755, 44770, 44785, 44800, 44815,
+ 44830, 44845, 44860, 44875, 44890, 44905, 44920, 44935, 44950, 44965,
+ 44980, 44995, 45010, 45025, 45040, 45055, 45070, 45085, 45100, 45115,
+ 45130, 45145, 45160, 45175, 45190, 45205, 45220, 45235, 45250, 45265,
+ 45280, 45295, 45310, 45325, 45340, 45355, 45370, 45385, 45400, 45415,
+ 45430, 45445, 45460, 45475, 45490, 45505, 45520, 45535, 45550, 45565,
+ 45580, 45595, 45610, 45625, 45640, 45655, 45670, 45685, 45700, 45715,
+ 45730, 45745, 45760, 45775, 45790, 45805, 45820, 45835, 45850, 45865,
+ 45880, 45895, 45910, 45925, 45940, 45955, 45970, 45985, 46000, 46015,
+ 46030, 46045, 46060, 46075, 46090, 46105, 46120, 46135, 46150, 46165,
+ 46180, 46195, 46210, 46225, 46240, 46255, 46270, 46285, 46300, 46315,
+ 46330, 46345, 46360, 46375, 46390, 46405, 46420, 46435, 46450, 46465,
+ 46480, 46495, 46510, 46525, 46540, 46555, 46570, 46585, 46600, 46615,
+ 46630, 46645, 46660, 46675, 46690, 46705, 46720, 46735, 46750, 46765,
+ 46780, 46795, 46810, 46825, 46840, 46855, 46870, 46885, 46900, 46915,
+ 46930, 46945, 46960, 46975, 46990, 47005, 47020, 47035, 47050, 47065,
+ 47080, 47095, 47110, 47125, 47140, 47155, 47170, 47185, 47200, 47215,
+ 47230, 47245, 47260, 47275, 47290, 47305, 47320, 47335, 47350, 47365,
+ 47380, 47395, 47410, 47425, 47440, 47455, 47470, 47485, 47500, 47515,
+ 47530, 47545, 47560, 47575, 47590, 47605, 47620, 47635, 47650, 47665,
+ 47680, 47695, 47710, 47725, 47740, 47755, 47770, 47785, 47800, 47815,
+ 47830, 47845, 47860, 47875, 47890, 47905, 47920, 47935, 47950, 47965,
+ 47980, 47995, 48010, 48025, 48040, 48055, 48070, 48085, 48100, 48115,
+ 48130, 48145, 48160, 48175, 48190, 48205, 48220, 48235, 48250, 48265,
+ 48280, 48295, 48310, 48325, 48340, 48355, 48370, 48385, 48400, 48415,
+ 48430, 48445, 48460, 48475, 48490, 48505, 48520, 48535, 48550, 48565,
+ 48580, 48595, 48610, 48625, 48640, 48655, 48670, 48685, 48700, 48715,
+ 48730, 48745, 48760, 48775, 48790, 48805, 48820, 48835, 48850, 48865,
+ 48880, 48895, 48910, 48925, 48940, 48955, 48970, 48985, 49000, 49015,
+ 49030, 49045, 49060, 49075, 49090, 49105, 49120, 49135, 49150, 49165,
+ 49180, 49195, 49210, 49225, 49240, 49255, 49270, 49285, 49300, 49315,
+ 49330, 49345, 49360, 49375, 49390, 49405, 49420, 49435, 49450, 49465,
+ 49480, 49495, 49511, 49527, 49543, 49559, 49575, 49591, 49607, 49623,
+ 49639, 49655, 49671, 49687, 49703, 49719, 49735, 49751, 49767, 49783,
+ 49799, 49815, 49831, 49847, 49863, 49879, 49895, 49911, 49927, 49943,
+ 49959, 49975, 49991, 50007, 50023, 50039, 50055, 50071, 50087, 50103,
+ 50119, 50135, 50151, 50167, 50183, 50199, 50215, 50231, 50247, 50263,
+ 50279, 50295, 50311, 50327, 50343, 50359, 50375, 50391, 50407, 50423,
+ 50439, 50455, 50471, 50487, 50503, 50519, 50535, 50551, 50567, 50583,
+ 50599, 50615, 50631, 50647, 50663, 50679, 50695, 50711, 50727, 50743,
+ 50759, 50775, 50791, 50807, 50823, 50839, 50855, 50871, 50887, 50903,
+ 50919, 50935, 50951, 50967, 50983, 50999, 51015, 51031, 51047, 51063,
+ 51079, 51095, 51111, 51127, 51143, 51159, 51175, 51191, 51207, 51223,
+ 51239, 51255, 51271, 51287, 51303, 51319, 51335, 51351, 51367, 51383,
+ 51399, 51415, 51431, 51447, 51463, 51479, 51495, 51511, 51527, 51543,
+ 51559, 51575, 51591, 51607, 51623, 51639, 51655, 51671, 51687, 51703,
+ 51719, 51735, 51751, 51767, 51783, 51799, 51815, 51831, 51847, 51863,
+ 51879, 51895, 51911, 51927, 51943, 51959, 51975, 51991, 52007, 52023,
+ 52039, 52055, 52071, 52087, 52103, 52119, 52135, 52151, 52167, 52183,
+ 52199, 52215, 52231, 52247, 52263, 52279, 52295, 52311, 52327, 52343,
+ 52359, 52375, 52391, 52407, 52423, 52439, 52455, 52471, 52487, 52503,
+ 52519, 52535, 52551, 52567, 52583, 52599, 52615, 52631, 52647, 52663,
+ 52679, 52695, 52711, 52727, 52743, 52759, 52775, 52791, 52807, 52823,
+ 52839, 52855, 52871, 52887, 52903, 52919, 52935, 52951, 52967, 52983,
+ 52999, 53015, 53031, 53047, 53063, 53079, 53095, 53111, 53127, 53143,
+ 53159, 53175, 53191, 53207, 53223, 53239, 53255, 53271, 53287, 53303,
+ 53319, 53335, 53351, 53367, 53383, 53399, 53415, 53431, 53447, 53463,
+ 53479, 53495, 53511, 53527, 53543, 53559, 53575, 53591, 53607, 53623,
+ 53639, 53655, 53671, 53687, 53703, 53719, 53735, 53751, 53767, 53783,
+ 53799, 53815, 53831, 53847, 53863, 53879, 53895, 53911, 53927, 53943,
+ 53959, 53975, 53991, 54007, 54023, 54039, 54055, 54071, 54087, 54103,
+ 54119, 54135, 54151, 54167, 54183, 54199, 54215, 54231, 54247, 54263,
+ 54279, 54295, 54311, 54327, 54343, 54359, 54375, 54391, 54407, 54423,
+ 54439, 54455, 54471, 54487, 54503, 54519, 54535, 54551, 54567, 54583,
+ 54599, 54615, 54631, 54647, 54663, 54679, 54695, 54711, 54727, 54743,
+ 54759, 54775, 54791, 54807, 54823, 54839, 54855, 54871, 54887, 54903,
+ 54919, 54935, 54951, 54967, 54983, 54999, 55015, 55031, 55047, 55063,
+ 55079, 55095, 55111, 55127, 55143, 55159, 55175, 55191, 55207, 55223,
+ 55239, 55255, 55271, 55287, 55303, 55319, 55335, 55351, 55367, 55383,
+ 55399, 55415, 55431, 55447, 55463, 55479, 55495, 55511, 55527, 55543,
+ 55559, 55575, 55591, 55607, 55623, 55639, 55655, 55671, 55687, 55703,
+ 55719, 55735, 55751, 55767, 55783, 55799, 55815, 55831, 55847, 55863,
+ 55879, 55895, 55911, 55927, 55943, 55959, 55975, 55991, 56007, 56023,
+ 56039, 56055, 56071, 56087, 56103, 56119, 56135, 56151, 56167, 56183,
+ 56199, 56215, 56231, 56247, 56263, 56279, 56295, 56311, 56327, 56343,
+ 56359, 56375, 56391, 56407, 56423, 56439, 56455, 56471, 56487, 56503,
+ 56519, 56535, 56551, 56567, 56583, 56599, 56615, 56631, 56647, 56663,
+ 56679, 56695, 56711, 56727, 56743, 56759, 56775, 56791, 56807, 56823,
+ 56839, 56855, 56871, 56887, 56903, 56919, 56935, 56951, 56967, 56983,
+ 56999, 57015, 57031, 57047, 57063, 57079, 57095, 57111, 57127, 57143,
+ 57159, 57175, 57191, 57207, 57223, 57239, 57255, 57271, 57287, 57303,
+ 57319, 57335, 57351, 57367, 57383, 57399, 57415, 57431, 57447, 57463,
+ 57479, 57495, 57511, 57527, 57543, 57559, 57575, 57591, 57607, 57623,
+ 57639, 57655, 57671, 57687, 57703, 57719, 57735, 57751, 57767, 57783,
+ 57799, 57815, 57831, 57847, 57863, 57879, 57895, 57911, 57927, 57943,
+ 57959, 57975, 57991, 58007, 58023, 58039, 58055, 58071, 58087, 58103,
+ 58119, 58135, 58151, 58167, 58182, 16749, 58191, 58197, 58203, 58213,
+ 58221, 14881, 15432, 9953, 58234, 1520, 58242, 3761, 27415, 7183, 58248,
+ 58253, 58258, 58263, 58268, 58274, 58279, 58285, 58290, 58296, 58301,
+ 58306, 58311, 58316, 58322, 58327, 58332, 58337, 58342, 58347, 58352,
+ 58357, 58363, 58368, 58374, 58381, 2561, 58386, 58392, 8526, 58396,
+ 58401, 58408, 58416, 40, 58420, 58426, 58431, 58436, 58440, 58445, 58449,
+ 58453, 10677, 58457, 58467, 58480, 58491, 58504, 58511, 58517, 58522,
+ 58528, 58534, 58540, 58545, 58550, 58555, 58560, 58564, 58569, 58574,
+ 58579, 58585, 58591, 58597, 58602, 58606, 58611, 58616, 58620, 58625,
+ 58630, 58635, 58639, 10693, 10704, 10709, 1563, 58643, 1568, 58649,
+ 16226, 58652, 58658, 1599, 58664, 1605, 1611, 10739, 58669, 58677, 58684,
+ 58688, 58694, 58699, 30952, 58704, 58711, 58716, 58720, 58724, 1616,
+ 16318, 58733, 58737, 16329, 1120, 58741, 58748, 58753, 58757, 16354,
+ 1620, 37321, 58760, 58765, 58775, 58784, 58789, 58793, 58799, 1625,
+ 39230, 58804, 58813, 58819, 58824, 10897, 10903, 58830, 58842, 58859,
+ 58876, 58893, 58910, 58927, 58944, 58961, 58978, 58995, 59012, 59029,
+ 59046, 59063, 59080, 59097, 59114, 59131, 59148, 59165, 59182, 59199,
+ 59216, 59233, 59250, 59267, 59284, 59301, 59318, 59335, 59352, 59369,
+ 59386, 59403, 59420, 59437, 59454, 59471, 59488, 59505, 59522, 59539,
+ 59556, 59573, 59590, 59607, 59624, 59641, 59658, 59675, 59686, 59691,
+ 1630, 59695, 59701, 59706, 59711, 9319, 1635, 59717, 59726, 27710, 59731,
+ 59742, 59752, 59757, 59764, 59770, 59775, 59780, 16606, 59784, 10914,
+ 1640, 10919, 59790, 59795, 59801, 59806, 59811, 59816, 59821, 59826,
+ 59831, 59836, 59842, 59848, 59854, 59859, 59863, 59868, 59873, 59877,
+ 59882, 59887, 59892, 59896, 59901, 59907, 59912, 59917, 59921, 59926,
+ 59931, 59937, 59942, 59947, 59953, 59959, 59964, 59968, 59973, 59978,
+ 59983, 59987, 59992, 59997, 60002, 60008, 60014, 60019, 60023, 60027,
+ 60032, 60037, 60042, 29108, 60046, 60051, 60056, 60062, 60067, 60072,
+ 60076, 60081, 60086, 60092, 60097, 60102, 60108, 60114, 60119, 60123,
+ 60128, 60133, 60137, 60142, 60147, 60152, 60158, 60164, 60169, 60173,
+ 60178, 60183, 60187, 60192, 60197, 60202, 60206, 60209, 31614, 60214,
+ 60222, 16672, 3663, 11010, 60228, 60238, 60253, 11015, 60264, 60269,
+ 60280, 60292, 60304, 60316, 2695, 60328, 60333, 60345, 60349, 60355,
+ 60361, 60366, 1652, 1067, 60375, 60380, 39280, 60384, 60388, 60393,
+ 60397, 16757, 60402, 60405, 60413, 60421, 1656, 11040, 11046, 1661,
+ 60429, 60436, 60441, 60450, 60460, 60467, 60472, 60477, 1666, 60484,
+ 60489, 16872, 60493, 60498, 60505, 60511, 60515, 60526, 60536, 16894,
+ 9227, 9234, 1671, 60543, 60549, 60557, 60564, 60570, 60577, 60589, 60595,
+ 60600, 60612, 60623, 60632, 60642, 3740, 30788, 30797, 16934, 1676, 1680,
+ 60650, 60661, 60666, 1683, 60674, 60679, 16985, 60691, 60697, 60702,
+ 60710, 1688, 60715, 60720, 60728, 60736, 60743, 60752, 60760, 60769,
+ 1693, 60773, 1698, 60778, 60785, 17059, 60793, 60799, 60804, 60812,
+ 60819, 60827, 22557, 60832, 11175, 60841, 60847, 60854, 60861, 60867,
+ 60877, 60883, 60888, 60899, 60904, 60912, 11184, 11189, 60920, 60926,
+ 60934, 3805, 17101, 39368, 60939, 60945, 60950, 60958, 60965, 12029,
+ 60970, 60976, 1709, 60981, 60984, 1127, 60990, 60995, 61000, 61006,
+ 61011, 61016, 61021, 61026, 61031, 61036, 1718, 9, 61042, 61046, 61051,
+ 61055, 61059, 61063, 31854, 61068, 61073, 61078, 61082, 61085, 61089,
+ 61093, 61098, 61102, 61107, 61111, 34591, 34596, 34601, 61114, 61121,
+ 61127, 39089, 61137, 34607, 32112, 31869, 31875, 34623, 31881, 61142,
+ 61147, 32145, 61151, 61154, 61158, 61165, 61168, 61173, 61177, 61181,
+ 61184, 61194, 61206, 61213, 61219, 61226, 33548, 61229, 8543, 877, 61232,
+ 61236, 61241, 3690, 61245, 61248, 13625, 61255, 61262, 61275, 61283,
+ 61292, 61301, 61306, 61316, 61329, 61341, 61348, 61353, 61362, 61375,
+ 36035, 61393, 61398, 61405, 61411, 652, 61416, 61424, 61431, 27254, 627,
+ 61437, 61443, 61453, 61459, 61464, 31899, 6003, 31913, 61468, 61478,
+ 61483, 61493, 61508, 61514, 61520, 31923, 61525, 31069, 61529, 61534,
+ 61539, 61543, 61548, 16937, 61555, 61560, 61564, 6044, 31949, 61568,
+ 61574, 312, 61584, 61591, 61598, 61603, 61612, 58769, 61618, 61626,
+ 61630, 61634, 61638, 61642, 61647, 61651, 61657, 61665, 61670, 61675,
+ 61679, 61684, 61688, 61692, 61698, 61704, 61709, 61713, 32073, 61718,
+ 32079, 32085, 61723, 61729, 61736, 61741, 61745, 31086, 16599, 61748,
+ 61752, 61757, 61764, 61770, 61774, 61779, 38799, 61785, 61789, 61793,
+ 61798, 61804, 61810, 61822, 61831, 61841, 61847, 61854, 61859, 61864,
+ 61868, 61871, 61877, 61884, 61889, 61894, 61901, 61908, 61914, 61919,
+ 61924, 61932, 32090, 2423, 61937, 61942, 61948, 61953, 61959, 61964,
+ 61969, 61974, 61980, 32111, 61985, 61991, 61997, 62003, 32175, 62008,
+ 62013, 62018, 32186, 62023, 62028, 62033, 62039, 62045, 32191, 62050,
+ 62055, 62060, 32246, 32252, 62065, 62070, 32257, 62075, 27937, 32279,
+ 32283, 62080, 62056, 62084, 62092, 62098, 62106, 62113, 62119, 62129,
+ 62135, 62142, 10624, 32297, 62148, 62161, 62170, 62176, 62185, 62191,
+ 23495, 62198, 62205, 62215, 32247, 62218, 62225, 62230, 62234, 62238,
+ 62243, 6120, 62247, 62252, 62257, 34685, 34690, 62261, 34704, 62266,
+ 34709, 62271, 62277, 34721, 34727, 34733, 62282, 62288, 22522, 62299,
+ 62302, 62314, 62322, 32320, 62326, 62335, 62345, 62354, 32330, 62359,
+ 62366, 62375, 62381, 62389, 62396, 6095, 4397, 62401, 32258, 62407,
+ 62410, 62416, 62423, 62428, 62433, 23405, 62437, 62443, 62449, 62454,
+ 62459, 62463, 62469, 62475, 33458, 863, 35698, 36619, 36625, 32366,
+ 62480, 62484, 62488, 62491, 62504, 62510, 62514, 62517, 62522, 33761,
+ 62526, 31091, 21274, 62532, 6024, 6032, 9068, 62535, 62540, 62545, 62550,
+ 62555, 62560, 62565, 62570, 62575, 62580, 62586, 62591, 62596, 62602,
+ 62607, 62612, 62617, 62622, 62627, 62632, 62638, 62643, 62649, 62654,
+ 62659, 62664, 62669, 62674, 62679, 62684, 62689, 62694, 62699, 62705,
+ 62710, 62715, 62720, 62725, 62730, 62735, 62741, 62746, 62751, 62756,
+ 62761, 62766, 62771, 62776, 62781, 62786, 62792, 62797, 62802, 62807,
+ 62812, 62818, 62824, 62829, 62835, 62840, 62845, 62850, 62855, 62860,
+ 1513, 245, 62865, 62869, 62873, 62877, 25116, 62881, 62885, 62890, 62894,
+ 62899, 62903, 62908, 62913, 62918, 62922, 62926, 62931, 62935, 13362,
+ 62940, 62944, 62951, 62961, 15193, 62970, 62979, 62983, 62988, 62993,
+ 62997, 24907, 3019, 63001, 17350, 63007, 63016, 63024, 63030, 63042,
+ 63054, 63058, 63063, 63067, 63073, 63079, 63084, 63094, 63104, 63110,
+ 63115, 63119, 63124, 63130, 63139, 63148, 63156, 15547, 63160, 63169,
+ 63177, 63189, 63200, 63211, 63220, 63224, 63233, 63243, 63251, 63257,
+ 63262, 63268, 63273, 98, 30900, 63284, 26249, 26259, 63290, 63297, 63303,
+ 63307, 63317, 63328, 63336, 63345, 63350, 63355, 63359, 17304, 63367,
+ 63371, 63377, 63387, 63394, 63400, 34784, 63406, 63408, 63411, 63415,
+ 63425, 63431, 63438, 13308, 63445, 63451, 63460, 63469, 63475, 63481,
+ 63487, 63492, 63499, 63506, 63512, 63525, 63534, 63543, 63548, 63552,
+ 63558, 63565, 63572, 63579, 63586, 63593, 63598, 63602, 63606, 63609,
+ 63619, 63623, 63635, 63644, 63648, 63653, 63657, 63663, 63668, 63675,
+ 63684, 63692, 63700, 63705, 63709, 63714, 63719, 63729, 63737, 63742,
+ 63746, 63750, 63756, 63768, 63776, 63786, 63793, 63799, 63804, 63808,
+ 63812, 63816, 63825, 63834, 63843, 63849, 63855, 63861, 63866, 63873,
+ 63879, 63887, 63894, 12456, 63900, 63906, 63910, 14231, 63914, 63919,
+ 63929, 63938, 63944, 63950, 63958, 63965, 63969, 63973, 63979, 63987,
+ 63994, 64000, 64011, 64015, 64019, 64023, 64026, 64032, 64037, 64041,
+ 64045, 64054, 64062, 64069, 64075, 64082, 24029, 38841, 64087, 64095,
+ 64099, 64103, 64106, 64114, 64121, 64127, 64136, 64144, 64150, 64155,
+ 64159, 64164, 64168, 64172, 64177, 64186, 64190, 64197, 64204, 64210,
+ 64218, 64224, 64235, 64243, 64249, 22652, 64258, 64265, 64272, 64279,
+ 64286, 64293, 41870, 13146, 64300, 64307, 64312, 34820, 6217, 64318,
+ 64323, 64328, 64334, 64340, 64346, 64351, 64356, 64361, 64366, 64372,
+ 64377, 64383, 64388, 64394, 64399, 64404, 64409, 64414, 64419, 64424,
+ 64429, 64435, 64440, 64446, 64451, 64456, 64461, 64466, 64471, 64476,
+ 64482, 64487, 64492, 64497, 64502, 64507, 64512, 64517, 64522, 64527,
+ 64532, 64538, 64543, 64548, 64553, 64558, 64563, 64568, 64573, 64578,
+ 64584, 64589, 64594, 64599, 64604, 64609, 64614, 64619, 64624, 64629,
+ 64634, 64639, 64644, 64650, 1834, 224, 37417, 64655, 64658, 64663, 64667,
+ 64670, 64675, 63696, 64686, 64696, 64703, 64719, 64728, 64738, 64748,
+ 64756, 64770, 64778, 64782, 64785, 64792, 64798, 64809, 64821, 64832,
+ 64841, 64848, 1297, 23294, 64858, 2590, 64862, 64871, 1133, 17277, 38054,
+ 64879, 64887, 64901, 64914, 64918, 64923, 64928, 64933, 64939, 64945,
+ 64950, 8535, 64955, 64959, 64967, 11041, 64972, 64978, 64987, 1721,
+ 11053, 736, 64991, 65000, 65010, 27013, 65019, 65025, 16849, 65031,
+ 65035, 3964, 11384, 65041, 65048, 60656, 65052, 65056, 3988, 189, 14146,
+ 65062, 65074, 65078, 65084, 27730, 65088, 11372, 2730, 4, 65093, 65103,
+ 65109, 65120, 65127, 65133, 65139, 65147, 65154, 65160, 65170, 65180,
+ 65190, 23482, 1309, 65199, 65203, 65207, 65213, 65217, 2753, 2759, 8532,
+ 2264, 65221, 65225, 65234, 65242, 65253, 65261, 65269, 65275, 65280,
+ 65291, 65302, 65310, 65316, 9687, 65321, 65329, 65333, 65337, 65341,
+ 65353, 28115, 65360, 65370, 65376, 65382, 9789, 65392, 65403, 65413,
+ 65422, 65426, 65433, 1135, 1170, 65443, 65448, 65456, 65464, 65475,
+ 65482, 65496, 14075, 393, 65506, 65510, 65518, 65527, 65535, 65541,
+ 65555, 65562, 65568, 65577, 65584, 65594, 65602, 3812, 156, 65610, 65621,
+ 65625, 65637, 27928, 161, 65643, 65648, 65652, 65659, 65665, 65673,
+ 65680, 8818, 65687, 65696, 65704, 3878, 65717, 8199, 65721, 2798, 450,
+ 65726, 65739, 65744, 1833, 668, 65748, 3895, 65756, 65762, 65766, 931,
+ 65776, 65785, 65790, 14915, 14922, 45232, 65794, 3822, 13034, 65802,
+ 65809, 23538, 65813, 65820, 65826, 65831, 65836, 14935, 372, 65841,
+ 65853, 65859, 65867, 2810, 1753, 65875, 65877, 65882, 65887, 65892,
+ 65898, 65903, 65908, 65913, 65918, 65923, 65928, 65934, 65939, 65944,
+ 65949, 65954, 65959, 65964, 65969, 65974, 65980, 65985, 65990, 65995,
+ 66001, 66006, 66012, 66017, 66022, 66027, 66032, 66037, 66042, 66047,
+ 66053, 66058, 66064, 66069, 66074, 66079, 66084, 66089, 66094, 66099,
+ 66104, 66110, 66115, 66120, 66125, 66129, 66133, 66138, 66142, 66147,
+ 66152, 66158, 66163, 66167, 66172, 66176, 66179, 66181, 66185, 66188,
+ 66193, 66197, 66201, 66205, 66209, 66218, 66222, 32524, 66225, 32529,
+ 66232, 66237, 32534, 66246, 66255, 32540, 66260, 32545, 66269, 66274,
+ 11571, 66278, 66283, 66288, 32550, 66292, 40196, 66296, 66299, 66303,
+ 8211, 66309, 66314, 66318, 3705, 32555, 66321, 66325, 66328, 66333,
+ 66337, 66343, 66351, 66364, 66373, 66379, 66384, 66390, 66394, 66400,
+ 66408, 66413, 66417, 66424, 66430, 66438, 66447, 66455, 32558, 66462,
+ 66472, 66481, 66494, 66499, 66504, 66513, 66519, 66526, 66537, 66549,
+ 66556, 66565, 66574, 66583, 66590, 66596, 66603, 66611, 66618, 66626,
+ 66635, 66643, 66650, 66658, 66667, 66675, 66684, 66694, 66703, 66711,
+ 66718, 66726, 66735, 66743, 66752, 66762, 66771, 66779, 66788, 66798,
+ 66807, 66817, 66828, 66838, 66847, 66855, 66862, 66870, 66879, 66887,
+ 66896, 66906, 66915, 66923, 66932, 66942, 66951, 66961, 66972, 66982,
+ 66991, 66999, 67008, 67018, 67027, 67037, 67048, 67058, 67067, 67077,
+ 67088, 67098, 67109, 67121, 67132, 67142, 67151, 67159, 67166, 67174,
+ 67183, 67191, 67200, 67210, 67219, 67227, 67236, 67246, 67255, 67265,
+ 67276, 67286, 67295, 67303, 67312, 67322, 67331, 67341, 67352, 67362,
+ 67371, 67381, 67392, 67402, 67413, 67425, 67436, 67446, 67455, 67463,
+ 67472, 67482, 67491, 67501, 67512, 67522, 67531, 67541, 67552, 67562,
+ 67573, 67585, 67596, 67606, 67615, 67625, 67636, 67646, 67657, 67669,
+ 67680, 67690, 67701, 67713, 67724, 67736, 67749, 67761, 67772, 67782,
+ 67791, 67799, 67806, 67814, 67823, 67831, 67840, 67850, 67859, 67867,
+ 67876, 67886, 67895, 67905, 67916, 67926, 67935, 67943, 67952, 67962,
+ 67971, 67981, 67992, 68002, 68011, 68021, 68032, 68042, 68053, 68065,
+ 68076, 68086, 68095, 68103, 68112, 68122, 68131, 68141, 68152, 68162,
+ 68171, 68181, 68192, 68202, 68213, 68225, 68236, 68246, 68255, 68265,
+ 68276, 68286, 68297, 68309, 68320, 68330, 68341, 68353, 68364, 68376,
+ 68389, 68401, 68412, 68422, 68431, 68439, 68448, 68458, 68467, 68477,
+ 68488, 68498, 68507, 68517, 68528, 68538, 68549, 68561, 68572, 68582,
+ 68591, 68601, 68612, 68622, 68633, 68645, 68656, 68666, 68677, 68689,
+ 68700, 68712, 68725, 68737, 68748, 68758, 68767, 68777, 68788, 68798,
+ 68809, 68821, 68832, 68842, 68853, 68865, 68876, 68888, 68901, 68913,
+ 68924, 68934, 68945, 68957, 68968, 68980, 68993, 69005, 69016, 69028,
+ 69041, 69053, 69066, 69080, 69093, 69105, 69116, 69126, 69135, 69143,
+ 69150, 69155, 8058, 69162, 32568, 69167, 69172, 32573, 69178, 20916,
+ 32578, 69183, 69189, 69197, 69203, 69209, 69216, 69223, 69228, 69232,
+ 69235, 69239, 69248, 69254, 69266, 69277, 69281, 3081, 8033, 69286,
+ 69289, 69291, 69295, 69299, 69303, 69309, 69314, 25927, 69319, 69323,
+ 69326, 69331, 69335, 69342, 69348, 69352, 6170, 69356, 32595, 69361,
+ 69368, 69377, 69385, 69396, 69404, 69412, 69419, 69426, 69432, 69443,
+ 32600, 69448, 69459, 69471, 69479, 69490, 69499, 69510, 69515, 69523,
+ 2556, 69528, 34270, 69541, 69545, 69557, 69565, 69570, 69578, 17472,
+ 69589, 69595, 69602, 69610, 69616, 32610, 69621, 3914, 58217, 69628,
+ 69631, 69639, 69652, 69665, 69678, 69691, 69698, 69709, 69718, 41687,
+ 41692, 69723, 69727, 69735, 69742, 69751, 69759, 69765, 69774, 69782,
+ 69790, 69794, 69803, 69812, 69822, 69835, 69848, 69858, 32615, 69864,
+ 69871, 69877, 32621, 69882, 69885, 69889, 69897, 69906, 41425, 69914,
+ 69923, 69931, 69938, 69946, 69956, 69965, 69974, 69983, 69991, 70002,
+ 70012, 9359, 21554, 70021, 70026, 70031, 70035, 70039, 70044, 70050,
+ 70055, 70060, 70066, 70071, 70076, 21519, 70081, 70088, 70096, 70104,
+ 70109, 70116, 70123, 70128, 70132, 70136, 70144, 70152, 32638, 70158,
+ 70164, 70176, 70182, 70186, 70193, 70198, 70209, 70219, 70229, 70241,
+ 70247, 70257, 70267, 32665, 70276, 70285, 70291, 70303, 70314, 70321,
+ 70326, 70330, 70338, 70344, 70349, 70354, 70361, 70369, 70381, 70391,
+ 70400, 70409, 70416, 34132, 23834, 70422, 70427, 70431, 70435, 70440,
+ 70446, 70457, 70470, 70475, 70482, 32670, 70487, 70499, 70508, 70518,
+ 70529, 70542, 70549, 70558, 70567, 70575, 70580, 70586, 1058, 70591,
+ 70596, 70601, 70606, 70612, 70617, 70622, 70628, 70634, 70639, 70643,
+ 70648, 70653, 70658, 58729, 70663, 70668, 70673, 70678, 70684, 70690,
+ 70695, 70699, 70704, 70709, 70714, 70720, 70725, 70731, 70736, 70741,
+ 70746, 70751, 70755, 70761, 70766, 70775, 70780, 70785, 70790, 70795,
+ 70799, 70806, 70812, 17122, 17129, 70817, 70821, 70825, 70829, 70833,
+ 45487, 70837, 70767, 70839, 70849, 32679, 70852, 70861, 70867, 6143,
+ 32684, 70871, 70877, 70882, 70888, 70893, 70897, 70904, 70909, 70919,
+ 70928, 70932, 70938, 70944, 70950, 70954, 70962, 70969, 70977, 70985,
+ 32689, 70992, 70995, 71002, 71008, 71013, 71017, 71023, 71030, 71035,
+ 71039, 71048, 71056, 71062, 71067, 32694, 71074, 71081, 71087, 71092,
+ 71098, 71105, 71111, 21281, 27438, 71117, 71122, 71128, 71140, 70800,
+ 70807, 21457, 71150, 71155, 71162, 71168, 71175, 71181, 71192, 71197,
+ 9103, 71205, 71208, 71214, 71218, 71222, 71225, 71231, 32443, 6194, 964,
+ 13412, 71238, 71244, 71250, 71256, 71262, 71268, 71274, 71280, 71286,
+ 71291, 71296, 71301, 71306, 71311, 71316, 71321, 71326, 71331, 71336,
+ 71341, 71346, 71351, 71357, 71362, 71367, 71373, 71378, 71383, 71389,
+ 71395, 71401, 71407, 71413, 71419, 71425, 71431, 71437, 71442, 71447,
+ 71453, 71458, 71463, 71469, 71474, 71479, 71484, 71489, 71494, 71499,
+ 71504, 71509, 71514, 71519, 71524, 71529, 71535, 71540, 71545, 71550,
+ 71556, 71561, 71566, 71571, 71576, 71582, 71587, 71592, 71597, 71602,
+ 71607, 71612, 71617, 71622, 71627, 71632, 71637, 71642, 71647, 71652,
+ 71657, 71662, 71667, 71672, 71677, 71683, 71688, 71693, 71698, 71703,
+ 71708, 71713, 71718, 1864, 142, 71723, 71727, 71731, 71736, 71744, 71748,
+ 71755, 71763, 71767, 71780, 71788, 71792, 71795, 71800, 71804, 71809,
+ 71813, 71821, 71825, 20924, 71830, 71834, 60930, 71838, 71841, 71849,
+ 71857, 71865, 71870, 71877, 71883, 71889, 71894, 71901, 71906, 71914,
+ 64906, 71921, 71926, 71931, 71935, 11638, 71939, 71944, 71949, 71953,
+ 71956, 71962, 71966, 71976, 71985, 71988, 71992, 71999, 72012, 72018,
+ 72026, 72037, 72048, 72059, 72070, 72079, 72085, 72094, 72102, 72112,
+ 72125, 72132, 72143, 72149, 72154, 72159, 72165, 72171, 72181, 72190,
+ 70489, 72198, 72204, 72212, 72218, 72226, 72229, 72233, 72237, 72240,
+ 72246, 72252, 72260, 72272, 72284, 72291, 72295, 72306, 72314, 72321,
+ 72333, 72341, 72349, 72356, 72362, 72372, 72381, 72386, 72396, 72405,
+ 40751, 72412, 72416, 72421, 72429, 72436, 72442, 72446, 72456, 72467,
+ 72475, 72482, 72494, 72506, 72515, 69531, 72522, 72533, 72547, 72555,
+ 72565, 72572, 72580, 72592, 72601, 72609, 72619, 72630, 72642, 72651,
+ 72661, 72668, 72677, 72692, 72700, 72710, 72719, 72727, 72740, 72755,
+ 72759, 72768, 72780, 72791, 72802, 72813, 72823, 72834, 72842, 72848,
+ 72858, 72866, 72872, 29007, 72877, 72883, 72888, 72895, 9701, 17492,
+ 72901, 72910, 72915, 72919, 72926, 72932, 72937, 72942, 72950, 72958,
+ 72962, 72965, 72968, 72970, 72977, 72983, 72994, 72999, 73003, 73010,
+ 73016, 73021, 73029, 65405, 65415, 73035, 73042, 73052, 10611, 73059,
+ 73064, 29203, 73073, 73078, 73085, 73095, 73103, 73111, 73120, 73126,
+ 73132, 73139, 73146, 73151, 73155, 73163, 73168, 73173, 73181, 73188,
+ 73193, 73199, 73202, 73206, 73215, 71775, 73224, 73228, 73234, 73245,
+ 73255, 17501, 73266, 73274, 17513, 73281, 73285, 73294, 27324, 73301,
+ 73305, 73310, 73327, 73339, 10569, 73351, 73356, 73361, 73366, 20997,
+ 73370, 73375, 73380, 73386, 73391, 5846, 21001, 73396, 73401, 73407,
+ 73414, 73419, 73424, 73430, 73436, 73442, 73447, 73453, 73457, 73471,
+ 73479, 73487, 73493, 73498, 73505, 73515, 73524, 73529, 73534, 73542,
+ 73547, 73553, 73558, 73567, 59786, 73572, 73575, 73593, 73612, 73625,
+ 73639, 73655, 73662, 73669, 73675, 73682, 73687, 73693, 73699, 73707,
+ 73713, 73718, 73723, 73739, 10582, 73753, 73760, 73768, 73774, 73778,
+ 73781, 73786, 73791, 73798, 73803, 73812, 73817, 73823, 73832, 73841,
+ 73846, 73850, 73858, 73867, 11667, 73876, 73884, 73889, 73895, 11678,
+ 73900, 73903, 73908, 73918, 73927, 73932, 73938, 73943, 73951, 73958,
+ 73969, 73979, 73984, 64834, 73989, 73995, 74000, 74007, 74016, 74024,
+ 74030, 74036, 74043, 74049, 74053, 16947, 3055, 74058, 74062, 74066,
+ 74072, 74081, 74087, 74094, 74098, 74119, 74141, 74157, 74174, 74193,
+ 74202, 74212, 74219, 74226, 27211, 74232, 74236, 74244, 74256, 74262,
+ 74270, 74274, 74282, 74289, 74293, 74299, 74305, 74310, 3563, 41887,
+ 74316, 74320, 74324, 74328, 74333, 74338, 74343, 74349, 74355, 74361,
+ 74368, 74374, 74381, 74387, 74393, 74398, 74404, 74409, 74413, 74418,
+ 74422, 74427, 41902, 74431, 74436, 74444, 74448, 74453, 74460, 74469,
+ 74475, 74479, 74486, 74490, 74493, 74500, 74509, 74514, 74518, 74526,
+ 74535, 74539, 74547, 74553, 74558, 74563, 74569, 74575, 74580, 74584,
+ 74590, 74595, 74599, 74603, 74606, 74611, 74619, 74629, 74634, 39387,
+ 74642, 74654, 74658, 74664, 74676, 74687, 74694, 74700, 74707, 74719,
+ 74726, 74732, 21075, 74736, 74742, 74749, 74755, 74761, 74766, 74771,
+ 74776, 74785, 7033, 74790, 16413, 74796, 74800, 74804, 74808, 74816,
+ 74825, 74829, 74836, 74845, 74858, 74864, 74423, 30067, 74869, 74871,
+ 74876, 74881, 74886, 74891, 74896, 74901, 74906, 74911, 74916, 74921,
+ 74926, 74931, 74936, 74941, 74947, 74952, 74957, 74962, 74967, 74972,
+ 74977, 74982, 74987, 74993, 74999, 75005, 75010, 75015, 75027, 75032,
+ 1870, 49, 75037, 75042, 32721, 75046, 32726, 32731, 32737, 32742, 75050,
+ 32747, 22070, 75072, 75076, 75080, 75085, 75089, 32751, 75093, 75101,
+ 32756, 75108, 75111, 75116, 75120, 9536, 75129, 32761, 21932, 75132,
+ 75136, 1428, 75141, 32772, 75144, 75149, 25720, 25730, 35233, 75154,
+ 75159, 75164, 75169, 75175, 75180, 75189, 75194, 75201, 75207, 75212,
+ 75217, 75222, 75232, 75241, 75246, 75254, 75258, 75266, 32586, 37288,
+ 75273, 75279, 75284, 75289, 12009, 75294, 75300, 75305, 75312, 75318,
+ 75323, 75331, 75341, 75351, 75357, 75362, 75368, 17523, 75375, 36048,
+ 75388, 75393, 75399, 30968, 75412, 75418, 75422, 75431, 75438, 75444,
+ 75452, 75461, 75468, 75474, 75477, 75481, 25861, 75485, 75492, 75498,
+ 75506, 75511, 23977, 75517, 75520, 75528, 75536, 75550, 75557, 75563,
+ 75570, 75576, 32786, 75580, 75587, 75595, 75603, 75609, 32791, 75617,
+ 75623, 75628, 75638, 75644, 75653, 30805, 34691, 75661, 75666, 75671,
+ 75675, 75680, 75684, 75692, 14907, 39400, 75697, 75702, 32796, 62232,
+ 75706, 75711, 75715, 75724, 75732, 75738, 75743, 75749, 75756, 75762,
+ 75767, 75772, 75781, 75793, 75808, 33058, 75814, 16532, 32800, 75818,
+ 75825, 24087, 75831, 75838, 75847, 75854, 75863, 75869, 75874, 75882,
+ 75888, 32810, 75893, 75902, 74682, 75911, 75918, 75924, 75930, 75940,
+ 75948, 75955, 75959, 32815, 75962, 32821, 32827, 75967, 75975, 75983,
+ 75993, 76002, 76010, 76017, 76027, 32832, 76031, 76033, 76037, 76042,
+ 76046, 76050, 76056, 76061, 76065, 76076, 76081, 76086, 3060, 76090,
+ 76097, 76101, 76110, 76118, 76125, 76130, 76135, 62278, 76139, 76142,
+ 76148, 76156, 76162, 76166, 76171, 76178, 76183, 76189, 34722, 76194,
+ 76197, 76202, 76206, 76211, 76216, 76220, 76228, 76232, 25739, 25748,
+ 76238, 76244, 76250, 76255, 76259, 76262, 76272, 76281, 76286, 76292,
+ 76299, 76305, 76309, 76317, 76322, 34728, 76326, 76334, 76340, 76347,
+ 76352, 76356, 76361, 58403, 34734, 76367, 76372, 76376, 76381, 76386,
+ 76391, 76395, 76400, 76405, 76411, 76416, 76421, 76427, 76433, 76438,
+ 76442, 76447, 76452, 76457, 76461, 24086, 76466, 76471, 76477, 76483,
+ 76489, 76494, 76498, 76503, 76508, 76513, 76517, 76522, 76527, 76532,
+ 76537, 76541, 32840, 76549, 76553, 76561, 76569, 76580, 76585, 76589,
+ 22384, 76594, 76600, 76610, 76617, 76622, 76631, 76636, 76640, 76645,
+ 76653, 76661, 76668, 65068, 76674, 76682, 76689, 76700, 76706, 76710,
+ 76716, 32850, 76719, 76726, 76734, 76739, 39591, 76743, 76748, 76755,
+ 76760, 8985, 76764, 76772, 76779, 76786, 76792, 76806, 63340, 76814,
+ 76820, 76824, 76827, 76835, 76842, 76847, 76860, 76867, 76871, 76878,
+ 76883, 60823, 76888, 76891, 76898, 76904, 76908, 76916, 76925, 76935,
+ 76945, 76954, 76962, 76973, 76978, 76982, 76987, 76991, 35364, 76999,
+ 21344, 35373, 77004, 77009, 77014, 77019, 77024, 77029, 77034, 77038,
+ 77043, 77048, 77053, 77058, 77063, 77068, 77072, 77077, 77082, 77086,
+ 77090, 77094, 77098, 77103, 77108, 77112, 77117, 77121, 77125, 77130,
+ 77135, 77140, 77145, 77149, 77154, 77159, 77163, 77168, 77173, 77178,
+ 77183, 77188, 77193, 77198, 77203, 77208, 77213, 77218, 77223, 77228,
+ 77233, 77238, 77243, 77248, 77253, 77258, 77263, 77267, 77272, 77277,
+ 77282, 77287, 77292, 77297, 77302, 77307, 77312, 77317, 77322, 77326,
+ 77331, 77335, 77340, 77345, 77350, 77355, 77360, 77365, 77370, 77375,
+ 77380, 77384, 77388, 77393, 77398, 77402, 77407, 77412, 77416, 77421,
+ 77426, 77431, 77436, 77440, 77445, 77450, 77454, 77459, 77463, 77467,
+ 77471, 77475, 77480, 77484, 77488, 77492, 77496, 77500, 77504, 77508,
+ 77512, 77516, 77521, 77526, 77531, 77536, 77541, 77546, 77551, 77556,
+ 77561, 77566, 77570, 77574, 77578, 77582, 77586, 77590, 77595, 77599,
+ 77604, 77608, 77613, 77618, 77622, 77626, 77631, 77635, 77639, 77643,
+ 77647, 77651, 77655, 77659, 77663, 77667, 77671, 77675, 77679, 77683,
+ 77687, 77692, 77697, 77701, 77705, 77709, 77713, 77717, 77721, 77726,
+ 77730, 77734, 77738, 77742, 77746, 77750, 77755, 77759, 77764, 77768,
+ 77772, 77776, 77780, 77784, 77788, 77792, 77796, 77800, 77804, 77808,
+ 77813, 77817, 77821, 77825, 77829, 77833, 77837, 77841, 77845, 77849,
+ 77853, 77857, 77862, 77866, 77870, 77875, 77880, 77884, 77888, 77892,
+ 77896, 77900, 77904, 77908, 77912, 77917, 77921, 77926, 77930, 77935,
+ 77939, 77944, 77948, 77954, 77959, 77963, 77968, 77972, 77977, 77981,
+ 77986, 77990, 77995, 1521, 77999, 2824, 1759, 1764, 78003, 78007, 2828,
+ 78011, 1397, 78016, 1342, 78020, 2840, 78024, 78031, 78038, 78052, 2844,
+ 7131, 78061, 78069, 78076, 78087, 78096, 78103, 78115, 78128, 78141,
+ 78152, 78157, 78164, 78176, 78180, 2848, 11740, 78190, 78195, 78204,
+ 78214, 2852, 78219, 78223, 78228, 78235, 78241, 78249, 78261, 1347,
+ 13035, 78271, 78275, 78281, 78295, 78307, 78319, 78329, 78338, 78347,
+ 78356, 78364, 78375, 78383, 4051, 78393, 78404, 78413, 78419, 78434,
+ 78441, 78447, 35489, 78452, 2876, 13039, 78456, 78463, 8930, 78472, 2881,
+ 32336, 78478, 60572, 78485, 78491, 78502, 78508, 78515, 78521, 78529,
+ 78536, 78542, 78552, 78561, 78572, 78579, 78585, 78595, 78603, 78609,
+ 78624, 78630, 78635, 78642, 78645, 78651, 78658, 78664, 78672, 78681,
+ 78689, 78695, 78704, 41427, 78718, 78723, 78729, 14744, 78734, 78747,
+ 78756, 78764, 78771, 78775, 78779, 78782, 78789, 78796, 78804, 78812,
+ 78821, 78829, 14671, 78837, 78842, 78846, 78858, 78865, 78874, 748,
+ 78884, 78893, 78904, 2897, 78908, 78912, 78918, 78931, 78943, 78953,
+ 78962, 78974, 26352, 78985, 78993, 79002, 79013, 79024, 79034, 79044,
+ 79053, 79061, 11305, 79068, 79072, 79075, 79080, 79085, 79089, 79095,
+ 1352, 11811, 79102, 79113, 79122, 79130, 79139, 79147, 79163, 79174,
+ 79183, 79191, 79203, 79214, 79230, 79240, 79261, 79274, 79282, 79289,
+ 14855, 79302, 79307, 79313, 5908, 79319, 79322, 79329, 79339, 8176,
+ 79346, 79351, 79356, 79361, 79369, 79378, 79386, 9749, 9758, 79391,
+ 79402, 79407, 79413, 2913, 2918, 79419, 10872, 79425, 79432, 79439,
+ 79452, 2251, 68, 79457, 79462, 79472, 79478, 79487, 79495, 79505, 79509,
+ 79514, 79518, 79530, 2941, 79538, 79546, 79551, 79562, 79573, 79582,
+ 79587, 79593, 79598, 79608, 79618, 79623, 79629, 79634, 79643, 21397,
+ 79647, 4128, 20, 79652, 79661, 79668, 79675, 79681, 79687, 864, 79692,
+ 79697, 60900, 79702, 79707, 79713, 79719, 79727, 79732, 79739, 79745,
+ 79750, 38001, 41321, 79756, 2945, 32, 79766, 79779, 79784, 79792, 79797,
+ 79803, 2967, 28289, 79808, 79816, 79823, 79828, 58645, 61903, 79837,
+ 79841, 1704, 1813, 79846, 79851, 79858, 1817, 247, 79865, 79871, 2989,
+ 79876, 79881, 79888, 1821, 79893, 79899, 79904, 79916, 6119, 79926, 1828,
+ 79932, 79937, 79944, 79951, 79966, 79973, 79984, 79992, 2618, 79996,
+ 80008, 80013, 80017, 80023, 28114, 2256, 80027, 80038, 80042, 80046,
+ 80052, 80056, 80065, 80069, 80080, 80084, 2302, 32165, 80088, 80098,
+ 3080, 9364, 80106, 80111, 80115, 80124, 80131, 80137, 3050, 17139, 80141,
+ 80154, 80172, 80177, 80185, 80193, 80203, 9978, 13147, 80215, 80228,
+ 80235, 80242, 80258, 80265, 80271, 1095, 80278, 80285, 80295, 80304,
+ 80316, 42291, 80324, 3064, 12023, 80327, 80335, 80339, 78231, 3068,
+ 80343, 21178, 12039, 3756, 80347, 3074, 80351, 80361, 80367, 80373,
+ 80379, 80385, 80391, 80397, 80403, 80409, 80415, 80421, 80427, 80433,
+ 80439, 80445, 80451, 80457, 80463, 80469, 80475, 80481, 80487, 80493,
+ 80499, 80505, 80511, 80518, 80525, 80531, 80537, 80543, 80549, 80555,
+ 80561, 1357, 16049, 12061, 80567, 80572, 80577, 80582, 80587, 80592,
+ 80597, 80602, 80607, 80612, 80617, 80622, 80627, 80632, 80637, 80642,
+ 80647, 80652, 80657, 80662, 80667, 80672, 80677, 80682, 80687, 80692,
+ 80698, 80703, 80708, 80714, 80719, 80725, 80730, 80735, 80741, 80746,
+ 80751, 80756, 80761, 80766, 80771, 80776, 80781, 80362, 80368, 80374,
+ 80380, 80386, 80392, 80398, 80404, 80410, 80416, 80422, 80428, 80434,
+ 80440, 80446, 80787, 80452, 80458, 80464, 80793, 80470, 80476, 80482,
+ 80488, 80494, 80500, 80506, 80526, 80799, 80805, 80532, 80811, 80538,
+ 80544, 80550, 80556, 80562, 3091, 3096, 80817, 80822, 80825, 80831,
+ 80837, 80844, 80849, 80854, 2307,
};
/* code->name phrasebook */
#define phrasebook_shift 7
-#define phrasebook_short 211
+#define phrasebook_short 209
static unsigned char phrasebook[] = {
- 0, 219, 206, 244, 254, 77, 224, 143, 77, 50, 52, 247, 86, 52, 226, 57,
- 52, 254, 35, 253, 226, 42, 226, 131, 46, 226, 131, 253, 132, 94, 52, 249,
- 157, 240, 159, 243, 200, 219, 69, 219, 231, 21, 212, 79, 21, 116, 21,
- 109, 21, 166, 21, 163, 21, 180, 21, 189, 21, 198, 21, 195, 21, 200, 249,
- 164, 221, 70, 233, 39, 52, 245, 61, 52, 242, 107, 52, 224, 158, 77, 249,
- 156, 253, 122, 7, 6, 1, 61, 7, 6, 1, 253, 74, 7, 6, 1, 250, 252, 7, 6, 1,
- 249, 3, 7, 6, 1, 74, 7, 6, 1, 244, 230, 7, 6, 1, 243, 177, 7, 6, 1, 242,
- 41, 7, 6, 1, 72, 7, 6, 1, 235, 142, 7, 6, 1, 235, 27, 7, 6, 1, 150, 7, 6,
- 1, 183, 7, 6, 1, 204, 7, 6, 1, 75, 7, 6, 1, 226, 229, 7, 6, 1, 224, 240,
- 7, 6, 1, 149, 7, 6, 1, 197, 7, 6, 1, 218, 99, 7, 6, 1, 69, 7, 6, 1, 215,
- 79, 7, 6, 1, 214, 82, 7, 6, 1, 213, 166, 7, 6, 1, 213, 105, 7, 6, 1, 212,
- 152, 42, 41, 125, 223, 203, 219, 231, 46, 41, 125, 249, 224, 254, 174,
- 115, 232, 242, 242, 114, 254, 174, 7, 3, 1, 61, 7, 3, 1, 253, 74, 7, 3,
- 1, 250, 252, 7, 3, 1, 249, 3, 7, 3, 1, 74, 7, 3, 1, 244, 230, 7, 3, 1,
- 243, 177, 7, 3, 1, 242, 41, 7, 3, 1, 72, 7, 3, 1, 235, 142, 7, 3, 1, 235,
- 27, 7, 3, 1, 150, 7, 3, 1, 183, 7, 3, 1, 204, 7, 3, 1, 75, 7, 3, 1, 226,
- 229, 7, 3, 1, 224, 240, 7, 3, 1, 149, 7, 3, 1, 197, 7, 3, 1, 218, 99, 7,
- 3, 1, 69, 7, 3, 1, 215, 79, 7, 3, 1, 214, 82, 7, 3, 1, 213, 166, 7, 3, 1,
- 213, 105, 7, 3, 1, 212, 152, 42, 249, 40, 125, 71, 232, 242, 46, 249, 40,
- 125, 217, 42, 228, 184, 219, 206, 235, 191, 244, 254, 77, 250, 110, 52,
- 225, 108, 52, 249, 39, 52, 213, 31, 52, 251, 63, 134, 222, 92, 52, 247,
- 209, 249, 102, 52, 244, 105, 227, 21, 235, 235, 233, 66, 51, 254, 19,
- 224, 143, 77, 228, 163, 52, 219, 236, 240, 160, 223, 252, 52, 232, 37,
- 248, 22, 52, 225, 155, 52, 218, 223, 109, 218, 223, 166, 254, 164, 254,
- 174, 231, 41, 52, 225, 200, 52, 231, 37, 247, 74, 250, 117, 218, 223,
- 116, 231, 211, 227, 21, 235, 235, 223, 144, 51, 254, 19, 224, 143, 77,
- 214, 97, 243, 228, 122, 224, 166, 214, 97, 243, 228, 122, 242, 9, 214,
- 97, 243, 228, 133, 224, 164, 235, 191, 224, 158, 77, 7, 6, 1, 118, 2,
- 242, 113, 7, 6, 1, 118, 2, 179, 7, 6, 1, 118, 2, 249, 223, 7, 6, 1, 118,
- 2, 217, 42, 7, 6, 1, 118, 2, 247, 209, 7, 6, 1, 118, 2, 223, 131, 49, 7,
- 6, 1, 254, 148, 7, 6, 1, 250, 253, 2, 250, 117, 7, 6, 1, 191, 2, 242,
- 113, 7, 6, 1, 191, 2, 179, 7, 6, 1, 191, 2, 249, 223, 7, 6, 1, 191, 2,
- 247, 209, 7, 6, 1, 240, 146, 2, 242, 113, 7, 6, 1, 240, 146, 2, 179, 7,
- 6, 1, 240, 146, 2, 249, 223, 7, 6, 1, 240, 146, 2, 247, 209, 7, 6, 1,
- 245, 25, 7, 6, 1, 230, 98, 2, 217, 42, 7, 6, 1, 157, 2, 242, 113, 7, 6,
- 1, 157, 2, 179, 7, 6, 1, 157, 2, 249, 223, 7, 6, 1, 157, 2, 217, 42, 7,
- 6, 1, 157, 2, 247, 209, 230, 154, 52, 7, 6, 1, 157, 2, 90, 7, 6, 1, 111,
- 2, 242, 113, 7, 6, 1, 111, 2, 179, 7, 6, 1, 111, 2, 249, 223, 7, 6, 1,
- 111, 2, 247, 209, 7, 6, 1, 213, 106, 2, 179, 7, 6, 1, 217, 104, 7, 3, 1,
- 220, 255, 197, 7, 3, 1, 118, 2, 242, 113, 7, 3, 1, 118, 2, 179, 7, 3, 1,
- 118, 2, 249, 223, 7, 3, 1, 118, 2, 217, 42, 7, 3, 1, 118, 2, 247, 209, 7,
- 3, 1, 118, 2, 223, 131, 49, 7, 3, 1, 254, 148, 7, 3, 1, 250, 253, 2, 250,
- 117, 7, 3, 1, 191, 2, 242, 113, 7, 3, 1, 191, 2, 179, 7, 3, 1, 191, 2,
- 249, 223, 7, 3, 1, 191, 2, 247, 209, 7, 3, 1, 240, 146, 2, 242, 113, 7,
- 3, 1, 240, 146, 2, 179, 7, 3, 1, 240, 146, 2, 249, 223, 7, 3, 1, 240,
- 146, 2, 247, 209, 7, 3, 1, 245, 25, 7, 3, 1, 230, 98, 2, 217, 42, 7, 3,
- 1, 157, 2, 242, 113, 7, 3, 1, 157, 2, 179, 7, 3, 1, 157, 2, 249, 223, 7,
- 3, 1, 157, 2, 217, 42, 7, 3, 1, 157, 2, 247, 209, 247, 121, 52, 7, 3, 1,
- 157, 2, 90, 7, 3, 1, 111, 2, 242, 113, 7, 3, 1, 111, 2, 179, 7, 3, 1,
- 111, 2, 249, 223, 7, 3, 1, 111, 2, 247, 209, 7, 3, 1, 213, 106, 2, 179,
- 7, 3, 1, 217, 104, 7, 3, 1, 213, 106, 2, 247, 209, 7, 6, 1, 118, 2, 232,
- 37, 7, 3, 1, 118, 2, 232, 37, 7, 6, 1, 118, 2, 251, 74, 7, 3, 1, 118, 2,
- 251, 74, 7, 6, 1, 118, 2, 227, 90, 7, 3, 1, 118, 2, 227, 90, 7, 6, 1,
- 250, 253, 2, 179, 7, 3, 1, 250, 253, 2, 179, 7, 6, 1, 250, 253, 2, 249,
- 223, 7, 3, 1, 250, 253, 2, 249, 223, 7, 6, 1, 250, 253, 2, 62, 49, 7, 3,
- 1, 250, 253, 2, 62, 49, 7, 6, 1, 250, 253, 2, 250, 166, 7, 3, 1, 250,
- 253, 2, 250, 166, 7, 6, 1, 249, 4, 2, 250, 166, 7, 3, 1, 249, 4, 2, 250,
- 166, 7, 6, 1, 249, 4, 2, 90, 7, 3, 1, 249, 4, 2, 90, 7, 6, 1, 191, 2,
- 232, 37, 7, 3, 1, 191, 2, 232, 37, 7, 6, 1, 191, 2, 251, 74, 7, 3, 1,
- 191, 2, 251, 74, 7, 6, 1, 191, 2, 62, 49, 7, 3, 1, 191, 2, 62, 49, 7, 6,
- 1, 191, 2, 227, 90, 7, 3, 1, 191, 2, 227, 90, 7, 6, 1, 191, 2, 250, 166,
- 7, 3, 1, 191, 2, 250, 166, 7, 6, 1, 243, 178, 2, 249, 223, 7, 3, 1, 243,
- 178, 2, 249, 223, 7, 6, 1, 243, 178, 2, 251, 74, 7, 3, 1, 243, 178, 2,
- 251, 74, 7, 6, 1, 243, 178, 2, 62, 49, 7, 3, 1, 243, 178, 2, 62, 49, 7,
- 6, 1, 243, 178, 2, 250, 117, 7, 3, 1, 243, 178, 2, 250, 117, 7, 6, 1,
- 242, 42, 2, 249, 223, 7, 3, 1, 242, 42, 2, 249, 223, 7, 6, 1, 242, 42, 2,
- 90, 7, 3, 1, 242, 42, 2, 90, 7, 6, 1, 240, 146, 2, 217, 42, 7, 3, 1, 240,
- 146, 2, 217, 42, 7, 6, 1, 240, 146, 2, 232, 37, 7, 3, 1, 240, 146, 2,
- 232, 37, 7, 6, 1, 240, 146, 2, 251, 74, 7, 3, 1, 240, 146, 2, 251, 74, 7,
- 6, 1, 240, 146, 2, 227, 90, 7, 3, 1, 240, 146, 2, 227, 90, 7, 6, 1, 240,
- 146, 2, 62, 49, 7, 3, 1, 247, 73, 72, 7, 6, 26, 236, 26, 7, 3, 26, 236,
- 26, 7, 6, 1, 235, 143, 2, 249, 223, 7, 3, 1, 235, 143, 2, 249, 223, 7, 6,
- 1, 235, 28, 2, 250, 117, 7, 3, 1, 235, 28, 2, 250, 117, 7, 3, 1, 233,
- 248, 7, 6, 1, 233, 171, 2, 179, 7, 3, 1, 233, 171, 2, 179, 7, 6, 1, 233,
- 171, 2, 250, 117, 7, 3, 1, 233, 171, 2, 250, 117, 7, 6, 1, 233, 171, 2,
- 250, 166, 7, 3, 1, 233, 171, 2, 250, 166, 7, 6, 1, 233, 171, 2, 231, 37,
- 247, 74, 7, 3, 1, 233, 171, 2, 231, 37, 247, 74, 7, 6, 1, 233, 171, 2,
- 90, 7, 3, 1, 233, 171, 2, 90, 7, 6, 1, 230, 98, 2, 179, 7, 3, 1, 230, 98,
- 2, 179, 7, 6, 1, 230, 98, 2, 250, 117, 7, 3, 1, 230, 98, 2, 250, 117, 7,
- 6, 1, 230, 98, 2, 250, 166, 7, 3, 1, 230, 98, 2, 250, 166, 7, 3, 1, 230,
- 98, 225, 84, 251, 7, 253, 226, 7, 6, 1, 245, 96, 7, 3, 1, 245, 96, 7, 6,
- 1, 157, 2, 232, 37, 7, 3, 1, 157, 2, 232, 37, 7, 6, 1, 157, 2, 251, 74,
- 7, 3, 1, 157, 2, 251, 74, 7, 6, 1, 157, 2, 51, 179, 7, 3, 1, 157, 2, 51,
- 179, 7, 6, 26, 227, 99, 7, 3, 26, 227, 99, 7, 6, 1, 224, 113, 2, 179, 7,
- 3, 1, 224, 113, 2, 179, 7, 6, 1, 224, 113, 2, 250, 117, 7, 3, 1, 224,
- 113, 2, 250, 117, 7, 6, 1, 224, 113, 2, 250, 166, 7, 3, 1, 224, 113, 2,
- 250, 166, 7, 6, 1, 223, 4, 2, 179, 7, 3, 1, 223, 4, 2, 179, 7, 6, 1, 223,
- 4, 2, 249, 223, 7, 3, 1, 223, 4, 2, 249, 223, 7, 6, 1, 223, 4, 2, 250,
- 117, 7, 3, 1, 223, 4, 2, 250, 117, 7, 6, 1, 223, 4, 2, 250, 166, 7, 3, 1,
- 223, 4, 2, 250, 166, 7, 6, 1, 218, 100, 2, 250, 117, 7, 3, 1, 218, 100,
- 2, 250, 117, 7, 6, 1, 218, 100, 2, 250, 166, 7, 3, 1, 218, 100, 2, 250,
- 166, 7, 6, 1, 218, 100, 2, 90, 7, 3, 1, 218, 100, 2, 90, 7, 6, 1, 111, 2,
- 217, 42, 7, 3, 1, 111, 2, 217, 42, 7, 6, 1, 111, 2, 232, 37, 7, 3, 1,
- 111, 2, 232, 37, 7, 6, 1, 111, 2, 251, 74, 7, 3, 1, 111, 2, 251, 74, 7,
- 6, 1, 111, 2, 223, 131, 49, 7, 3, 1, 111, 2, 223, 131, 49, 7, 6, 1, 111,
- 2, 51, 179, 7, 3, 1, 111, 2, 51, 179, 7, 6, 1, 111, 2, 227, 90, 7, 3, 1,
- 111, 2, 227, 90, 7, 6, 1, 214, 83, 2, 249, 223, 7, 3, 1, 214, 83, 2, 249,
- 223, 7, 6, 1, 213, 106, 2, 249, 223, 7, 3, 1, 213, 106, 2, 249, 223, 7,
- 6, 1, 213, 106, 2, 247, 209, 7, 6, 1, 212, 153, 2, 179, 7, 3, 1, 212,
- 153, 2, 179, 7, 6, 1, 212, 153, 2, 62, 49, 7, 3, 1, 212, 153, 2, 62, 49,
- 7, 6, 1, 212, 153, 2, 250, 166, 7, 3, 1, 212, 153, 2, 250, 166, 7, 3, 1,
- 184, 197, 7, 3, 1, 54, 2, 90, 7, 6, 1, 54, 2, 101, 7, 6, 1, 54, 2, 216,
- 224, 7, 3, 1, 54, 2, 216, 224, 7, 6, 1, 160, 189, 7, 3, 1, 160, 189, 7,
- 6, 1, 227, 40, 75, 7, 6, 1, 250, 253, 2, 101, 7, 3, 1, 250, 253, 2, 101,
- 7, 6, 1, 254, 124, 249, 3, 7, 6, 1, 249, 4, 2, 101, 7, 6, 1, 249, 4, 2,
- 216, 224, 7, 3, 1, 249, 4, 2, 216, 224, 7, 3, 1, 216, 58, 248, 5, 7, 6,
- 1, 223, 202, 74, 7, 6, 1, 222, 113, 7, 6, 1, 227, 40, 74, 7, 6, 1, 244,
- 231, 2, 101, 7, 3, 1, 244, 231, 2, 101, 7, 6, 1, 243, 178, 2, 101, 7, 6,
- 1, 243, 83, 7, 3, 1, 240, 193, 7, 6, 1, 235, 183, 7, 6, 1, 240, 146, 2,
- 90, 7, 6, 1, 235, 28, 2, 101, 7, 3, 1, 235, 28, 2, 101, 7, 3, 1, 233,
- 171, 2, 134, 7, 3, 1, 233, 124, 2, 90, 7, 6, 1, 216, 58, 183, 7, 6, 1,
- 230, 98, 2, 42, 101, 7, 3, 1, 230, 98, 2, 184, 46, 233, 60, 7, 6, 1, 157,
- 2, 231, 37, 217, 42, 7, 6, 1, 157, 2, 240, 235, 7, 3, 1, 157, 2, 240,
- 235, 7, 6, 1, 227, 85, 7, 3, 1, 227, 85, 7, 6, 1, 226, 230, 2, 101, 7, 3,
- 1, 226, 230, 2, 101, 7, 1, 212, 205, 7, 6, 1, 160, 109, 7, 3, 1, 160,
- 109, 7, 6, 1, 245, 40, 7, 1, 223, 202, 245, 41, 232, 177, 7, 3, 1, 218,
- 100, 2, 226, 193, 101, 7, 6, 1, 218, 100, 2, 101, 7, 3, 1, 218, 100, 2,
- 101, 7, 6, 1, 218, 100, 2, 223, 207, 101, 7, 6, 1, 111, 2, 240, 235, 7,
- 3, 1, 111, 2, 240, 235, 7, 6, 1, 215, 128, 7, 6, 1, 215, 80, 2, 101, 7,
- 6, 1, 213, 106, 2, 101, 7, 3, 1, 213, 106, 2, 101, 7, 6, 1, 212, 153, 2,
- 90, 7, 3, 1, 212, 153, 2, 90, 7, 6, 1, 244, 232, 7, 6, 1, 244, 233, 223,
- 201, 7, 3, 1, 244, 233, 223, 201, 7, 3, 1, 244, 233, 2, 218, 27, 7, 1,
- 117, 2, 90, 7, 6, 1, 160, 180, 7, 3, 1, 160, 180, 7, 1, 235, 191, 242,
- 156, 219, 70, 2, 90, 7, 1, 213, 169, 7, 1, 247, 254, 249, 204, 7, 1, 233,
- 100, 249, 204, 7, 1, 254, 46, 249, 204, 7, 1, 223, 207, 249, 204, 7, 6,
- 1, 245, 251, 2, 250, 166, 7, 6, 1, 249, 4, 2, 3, 1, 212, 153, 2, 250,
- 166, 7, 3, 1, 245, 251, 2, 250, 166, 7, 6, 1, 232, 217, 7, 6, 1, 233,
- 171, 2, 3, 1, 235, 142, 7, 3, 1, 232, 217, 7, 6, 1, 229, 17, 7, 6, 1,
- 230, 98, 2, 3, 1, 235, 142, 7, 3, 1, 229, 17, 7, 6, 1, 118, 2, 250, 166,
- 7, 3, 1, 118, 2, 250, 166, 7, 6, 1, 240, 146, 2, 250, 166, 7, 3, 1, 240,
- 146, 2, 250, 166, 7, 6, 1, 157, 2, 250, 166, 7, 3, 1, 157, 2, 250, 166,
- 7, 6, 1, 111, 2, 250, 166, 7, 3, 1, 111, 2, 250, 166, 7, 6, 1, 111, 2,
- 247, 210, 24, 232, 37, 7, 3, 1, 111, 2, 247, 210, 24, 232, 37, 7, 6, 1,
- 111, 2, 247, 210, 24, 179, 7, 3, 1, 111, 2, 247, 210, 24, 179, 7, 6, 1,
- 111, 2, 247, 210, 24, 250, 166, 7, 3, 1, 111, 2, 247, 210, 24, 250, 166,
- 7, 6, 1, 111, 2, 247, 210, 24, 242, 113, 7, 3, 1, 111, 2, 247, 210, 24,
- 242, 113, 7, 3, 1, 216, 58, 74, 7, 6, 1, 118, 2, 247, 210, 24, 232, 37,
- 7, 3, 1, 118, 2, 247, 210, 24, 232, 37, 7, 6, 1, 118, 2, 62, 78, 24, 232,
- 37, 7, 3, 1, 118, 2, 62, 78, 24, 232, 37, 7, 6, 1, 254, 149, 2, 232, 37,
- 7, 3, 1, 254, 149, 2, 232, 37, 7, 6, 1, 243, 178, 2, 90, 7, 3, 1, 243,
- 178, 2, 90, 7, 6, 1, 243, 178, 2, 250, 166, 7, 3, 1, 243, 178, 2, 250,
- 166, 7, 6, 1, 235, 28, 2, 250, 166, 7, 3, 1, 235, 28, 2, 250, 166, 7, 6,
- 1, 157, 2, 227, 90, 7, 3, 1, 157, 2, 227, 90, 7, 6, 1, 157, 2, 227, 91,
- 24, 232, 37, 7, 3, 1, 157, 2, 227, 91, 24, 232, 37, 7, 6, 1, 244, 233, 2,
- 250, 166, 7, 3, 1, 244, 233, 2, 250, 166, 7, 3, 1, 235, 143, 2, 250, 166,
- 7, 6, 1, 245, 250, 7, 6, 1, 249, 4, 2, 3, 1, 212, 152, 7, 3, 1, 245, 250,
- 7, 6, 1, 243, 178, 2, 179, 7, 3, 1, 243, 178, 2, 179, 7, 6, 1, 240, 191,
- 7, 6, 1, 213, 169, 7, 6, 1, 230, 98, 2, 242, 113, 7, 3, 1, 230, 98, 2,
- 242, 113, 7, 6, 1, 118, 2, 223, 131, 78, 24, 179, 7, 3, 1, 118, 2, 223,
- 131, 78, 24, 179, 7, 6, 1, 254, 149, 2, 179, 7, 3, 1, 254, 149, 2, 179,
- 7, 6, 1, 157, 2, 219, 45, 24, 179, 7, 3, 1, 157, 2, 219, 45, 24, 179, 7,
- 6, 1, 118, 2, 51, 242, 113, 7, 3, 1, 118, 2, 51, 242, 113, 7, 6, 1, 118,
- 2, 235, 191, 251, 74, 7, 3, 1, 118, 2, 235, 191, 251, 74, 7, 6, 1, 191,
- 2, 51, 242, 113, 7, 3, 1, 191, 2, 51, 242, 113, 7, 6, 1, 191, 2, 235,
- 191, 251, 74, 7, 3, 1, 191, 2, 235, 191, 251, 74, 7, 6, 1, 240, 146, 2,
- 51, 242, 113, 7, 3, 1, 240, 146, 2, 51, 242, 113, 7, 6, 1, 240, 146, 2,
- 235, 191, 251, 74, 7, 3, 1, 240, 146, 2, 235, 191, 251, 74, 7, 6, 1, 157,
- 2, 51, 242, 113, 7, 3, 1, 157, 2, 51, 242, 113, 7, 6, 1, 157, 2, 235,
- 191, 251, 74, 7, 3, 1, 157, 2, 235, 191, 251, 74, 7, 6, 1, 224, 113, 2,
- 51, 242, 113, 7, 3, 1, 224, 113, 2, 51, 242, 113, 7, 6, 1, 224, 113, 2,
- 235, 191, 251, 74, 7, 3, 1, 224, 113, 2, 235, 191, 251, 74, 7, 6, 1, 111,
- 2, 51, 242, 113, 7, 3, 1, 111, 2, 51, 242, 113, 7, 6, 1, 111, 2, 235,
- 191, 251, 74, 7, 3, 1, 111, 2, 235, 191, 251, 74, 7, 6, 1, 223, 4, 2,
- 249, 158, 55, 7, 3, 1, 223, 4, 2, 249, 158, 55, 7, 6, 1, 218, 100, 2,
- 249, 158, 55, 7, 3, 1, 218, 100, 2, 249, 158, 55, 7, 6, 1, 212, 222, 7,
- 3, 1, 212, 222, 7, 6, 1, 242, 42, 2, 250, 166, 7, 3, 1, 242, 42, 2, 250,
- 166, 7, 6, 1, 230, 98, 2, 184, 46, 233, 60, 7, 3, 1, 249, 4, 2, 249, 41,
- 7, 6, 1, 227, 2, 7, 3, 1, 227, 2, 7, 6, 1, 212, 153, 2, 101, 7, 3, 1,
- 212, 153, 2, 101, 7, 6, 1, 118, 2, 62, 49, 7, 3, 1, 118, 2, 62, 49, 7, 6,
- 1, 191, 2, 250, 117, 7, 3, 1, 191, 2, 250, 117, 7, 6, 1, 157, 2, 247,
- 210, 24, 232, 37, 7, 3, 1, 157, 2, 247, 210, 24, 232, 37, 7, 6, 1, 157,
- 2, 217, 43, 24, 232, 37, 7, 3, 1, 157, 2, 217, 43, 24, 232, 37, 7, 6, 1,
- 157, 2, 62, 49, 7, 3, 1, 157, 2, 62, 49, 7, 6, 1, 157, 2, 62, 78, 24,
- 232, 37, 7, 3, 1, 157, 2, 62, 78, 24, 232, 37, 7, 6, 1, 213, 106, 2, 232,
- 37, 7, 3, 1, 213, 106, 2, 232, 37, 7, 3, 1, 233, 171, 2, 249, 41, 7, 3,
- 1, 230, 98, 2, 249, 41, 7, 3, 1, 218, 100, 2, 249, 41, 7, 3, 1, 247, 73,
- 235, 142, 7, 3, 1, 248, 89, 247, 172, 7, 3, 1, 224, 176, 247, 172, 7, 6,
- 1, 118, 2, 90, 7, 6, 1, 250, 253, 2, 90, 7, 3, 1, 250, 253, 2, 90, 7, 6,
- 1, 233, 171, 2, 134, 7, 6, 1, 218, 100, 2, 247, 207, 90, 7, 3, 1, 223, 4,
- 2, 218, 195, 218, 27, 7, 3, 1, 212, 153, 2, 218, 195, 218, 27, 7, 6, 1,
- 242, 156, 219, 69, 7, 3, 1, 242, 156, 219, 69, 7, 6, 1, 54, 2, 90, 7, 6,
- 1, 111, 134, 7, 6, 1, 216, 58, 215, 79, 7, 6, 1, 191, 2, 90, 7, 3, 1,
- 191, 2, 90, 7, 6, 1, 235, 143, 2, 90, 7, 3, 1, 235, 143, 2, 90, 7, 6, 1,
- 3, 224, 241, 2, 241, 38, 218, 27, 7, 3, 1, 224, 241, 2, 241, 38, 218, 27,
- 7, 6, 1, 224, 113, 2, 90, 7, 3, 1, 224, 113, 2, 90, 7, 6, 1, 213, 106, 2,
- 90, 7, 3, 1, 213, 106, 2, 90, 7, 3, 1, 216, 58, 61, 7, 3, 1, 254, 52, 7,
- 3, 1, 216, 58, 254, 52, 7, 3, 1, 54, 2, 101, 7, 3, 1, 227, 40, 75, 7, 3,
- 1, 250, 253, 2, 249, 41, 7, 3, 1, 249, 4, 2, 218, 27, 7, 3, 1, 249, 4, 2,
- 101, 7, 3, 1, 223, 202, 74, 7, 3, 1, 222, 113, 7, 3, 1, 222, 114, 2, 101,
- 7, 3, 1, 227, 40, 74, 7, 3, 1, 223, 202, 227, 40, 74, 7, 3, 1, 223, 202,
- 227, 40, 191, 2, 101, 7, 3, 1, 249, 193, 223, 202, 227, 40, 74, 7, 3, 1,
- 247, 73, 235, 143, 2, 90, 7, 3, 1, 243, 178, 2, 101, 7, 3, 1, 113, 243,
- 177, 7, 1, 3, 6, 243, 177, 7, 3, 1, 243, 83, 7, 3, 1, 224, 43, 240, 235,
- 7, 3, 1, 216, 58, 242, 41, 7, 3, 1, 242, 42, 2, 101, 7, 3, 1, 241, 192,
- 2, 101, 7, 3, 1, 240, 146, 2, 90, 7, 3, 1, 235, 183, 7, 1, 3, 6, 72, 7,
- 3, 1, 233, 171, 2, 231, 37, 217, 42, 7, 3, 1, 233, 171, 2, 251, 218, 7,
- 3, 1, 233, 171, 2, 223, 207, 101, 7, 3, 1, 233, 27, 7, 3, 1, 216, 58,
- 183, 7, 3, 1, 216, 58, 232, 110, 2, 184, 233, 60, 7, 3, 1, 232, 110, 2,
- 101, 7, 3, 1, 230, 98, 2, 42, 101, 7, 3, 1, 230, 98, 2, 223, 207, 101, 7,
- 1, 3, 6, 204, 7, 3, 1, 252, 54, 75, 7, 1, 3, 6, 227, 99, 7, 3, 1, 249,
- 193, 227, 67, 7, 3, 1, 226, 9, 7, 3, 1, 216, 58, 149, 7, 3, 1, 216, 58,
- 224, 113, 2, 184, 233, 60, 7, 3, 1, 216, 58, 224, 113, 2, 101, 7, 3, 1,
- 224, 113, 2, 184, 233, 60, 7, 3, 1, 224, 113, 2, 218, 27, 7, 3, 1, 224,
- 113, 2, 244, 56, 7, 3, 1, 223, 202, 224, 113, 2, 244, 56, 7, 1, 3, 6,
- 149, 7, 1, 3, 6, 235, 191, 149, 7, 3, 1, 223, 4, 2, 101, 7, 3, 1, 245,
- 40, 7, 3, 1, 247, 73, 235, 143, 2, 219, 45, 24, 101, 7, 3, 1, 219, 163,
- 223, 202, 245, 40, 7, 3, 1, 245, 41, 2, 249, 41, 7, 3, 1, 216, 58, 218,
- 99, 7, 3, 1, 218, 100, 2, 223, 207, 101, 7, 3, 1, 111, 134, 7, 3, 1, 215,
- 128, 7, 3, 1, 215, 80, 2, 101, 7, 3, 1, 216, 58, 215, 79, 7, 3, 1, 216,
- 58, 214, 82, 7, 3, 1, 216, 58, 213, 105, 7, 1, 3, 6, 213, 105, 7, 3, 1,
- 212, 153, 2, 223, 207, 101, 7, 3, 1, 212, 153, 2, 249, 41, 7, 3, 1, 244,
- 232, 7, 3, 1, 244, 233, 2, 249, 41, 7, 1, 242, 156, 219, 69, 7, 1, 226,
- 15, 214, 116, 243, 219, 7, 1, 235, 191, 242, 156, 219, 69, 7, 1, 219, 50,
- 250, 252, 7, 1, 251, 169, 249, 204, 7, 1, 3, 6, 253, 74, 7, 3, 1, 249,
- 193, 227, 40, 74, 7, 1, 3, 6, 243, 178, 2, 101, 7, 1, 3, 6, 242, 41, 7,
- 3, 1, 235, 143, 2, 249, 67, 7, 3, 1, 216, 58, 235, 27, 7, 1, 3, 6, 150,
- 7, 3, 1, 224, 241, 2, 101, 7, 1, 242, 156, 219, 70, 2, 90, 7, 1, 223,
- 202, 242, 156, 219, 70, 2, 90, 7, 3, 1, 245, 251, 247, 172, 7, 3, 1, 247,
- 233, 247, 172, 7, 3, 1, 245, 251, 247, 173, 2, 249, 41, 7, 3, 1, 216,
- 143, 247, 172, 7, 3, 1, 217, 188, 247, 172, 7, 3, 1, 217, 236, 247, 173,
- 2, 249, 41, 7, 3, 1, 244, 103, 247, 172, 7, 3, 1, 232, 158, 247, 172, 7,
- 3, 1, 232, 111, 247, 172, 7, 1, 251, 169, 226, 56, 7, 1, 251, 177, 226,
- 56, 7, 3, 1, 216, 58, 242, 42, 2, 244, 56, 7, 3, 1, 216, 58, 242, 42, 2,
- 244, 57, 24, 218, 27, 59, 1, 3, 242, 41, 59, 1, 3, 242, 42, 2, 101, 59,
- 1, 3, 235, 142, 59, 1, 3, 149, 59, 1, 3, 216, 58, 149, 59, 1, 3, 216, 58,
- 224, 113, 2, 101, 59, 1, 3, 6, 235, 191, 149, 59, 1, 3, 214, 82, 59, 1,
- 3, 213, 105, 59, 1, 225, 71, 59, 1, 51, 225, 71, 59, 1, 216, 58, 249,
- 157, 59, 1, 253, 226, 59, 1, 223, 202, 249, 157, 59, 1, 46, 151, 223,
- 130, 59, 1, 42, 151, 223, 130, 59, 1, 242, 156, 219, 69, 59, 1, 223, 202,
- 242, 156, 219, 69, 59, 1, 42, 253, 164, 59, 1, 46, 253, 164, 59, 1, 114,
- 253, 164, 59, 1, 119, 253, 164, 59, 1, 249, 224, 254, 174, 250, 166, 59,
- 1, 71, 232, 242, 59, 1, 232, 37, 59, 1, 254, 164, 254, 174, 59, 1, 242,
- 114, 254, 174, 59, 1, 115, 71, 232, 242, 59, 1, 115, 232, 37, 59, 1, 115,
- 242, 114, 254, 174, 59, 1, 115, 254, 164, 254, 174, 59, 1, 216, 180, 249,
- 164, 59, 1, 151, 216, 180, 249, 164, 59, 1, 250, 107, 46, 151, 223, 130,
- 59, 1, 250, 107, 42, 151, 223, 130, 59, 1, 114, 218, 36, 59, 1, 119, 218,
- 36, 59, 1, 94, 52, 59, 1, 230, 251, 52, 251, 74, 62, 49, 223, 131, 49,
- 227, 90, 3, 217, 42, 51, 254, 164, 254, 174, 59, 1, 223, 189, 101, 59, 1,
- 249, 71, 254, 174, 59, 1, 3, 243, 83, 59, 1, 3, 150, 59, 1, 3, 197, 59,
- 1, 3, 213, 166, 59, 1, 3, 223, 202, 242, 156, 219, 69, 59, 1, 244, 244,
- 160, 134, 59, 1, 124, 160, 134, 59, 1, 231, 38, 160, 134, 59, 1, 115,
- 160, 134, 59, 1, 244, 243, 160, 134, 59, 1, 212, 245, 247, 251, 160, 77,
- 59, 1, 213, 59, 247, 251, 160, 77, 59, 1, 214, 114, 59, 1, 215, 156, 59,
- 1, 51, 253, 226, 59, 1, 115, 119, 253, 164, 59, 1, 115, 114, 253, 164,
- 59, 1, 115, 42, 253, 164, 59, 1, 115, 46, 253, 164, 59, 1, 115, 223, 130,
- 59, 1, 231, 37, 242, 114, 254, 174, 59, 1, 231, 37, 51, 242, 114, 254,
- 174, 59, 1, 231, 37, 51, 254, 164, 254, 174, 59, 1, 115, 217, 42, 59, 1,
- 224, 48, 249, 164, 59, 1, 251, 234, 124, 216, 241, 59, 1, 245, 101, 124,
- 216, 241, 59, 1, 251, 234, 115, 216, 241, 59, 1, 245, 101, 115, 216, 241,
- 59, 1, 220, 234, 59, 1, 227, 40, 220, 234, 59, 1, 115, 42, 68, 37, 242,
- 114, 254, 174, 37, 254, 164, 254, 174, 37, 249, 224, 254, 174, 37, 217,
- 42, 37, 232, 37, 37, 226, 243, 37, 251, 74, 37, 62, 49, 37, 247, 209, 37,
- 241, 38, 49, 37, 223, 131, 49, 37, 51, 254, 164, 254, 174, 37, 250, 166,
- 37, 71, 232, 243, 49, 37, 51, 71, 232, 243, 49, 37, 51, 242, 114, 254,
- 174, 37, 250, 187, 37, 235, 191, 251, 74, 37, 216, 58, 249, 158, 49, 37,
- 249, 158, 49, 37, 223, 202, 249, 158, 49, 37, 249, 158, 78, 223, 148, 37,
- 242, 114, 254, 175, 55, 37, 254, 164, 254, 175, 55, 37, 42, 218, 37, 55,
- 37, 46, 218, 37, 55, 37, 42, 254, 19, 49, 37, 240, 235, 37, 42, 151, 223,
- 131, 55, 37, 114, 218, 37, 55, 37, 119, 218, 37, 55, 37, 94, 5, 55, 37,
- 230, 251, 5, 55, 37, 226, 191, 241, 38, 55, 37, 223, 207, 241, 38, 55,
- 37, 62, 55, 37, 247, 210, 55, 37, 223, 131, 55, 37, 249, 158, 55, 37,
- 250, 117, 37, 227, 90, 37, 71, 232, 243, 55, 37, 251, 68, 55, 37, 235,
- 191, 51, 253, 194, 55, 37, 250, 167, 55, 37, 249, 224, 254, 175, 55, 37,
- 251, 75, 55, 37, 235, 191, 251, 75, 55, 37, 217, 43, 55, 37, 232, 38, 55,
- 37, 115, 232, 242, 37, 51, 115, 232, 242, 37, 217, 43, 226, 244, 37, 220,
- 175, 219, 45, 226, 244, 37, 184, 219, 45, 226, 244, 37, 220, 175, 219,
- 232, 226, 244, 37, 184, 219, 232, 226, 244, 37, 46, 151, 223, 131, 55,
- 37, 235, 191, 251, 68, 55, 37, 41, 55, 37, 222, 99, 55, 37, 213, 167, 49,
- 37, 71, 217, 42, 37, 51, 226, 243, 37, 242, 114, 160, 77, 37, 254, 164,
- 160, 77, 37, 25, 226, 50, 37, 25, 234, 11, 37, 25, 247, 204, 216, 231,
- 37, 25, 212, 210, 37, 251, 68, 49, 37, 245, 61, 5, 55, 37, 51, 71, 232,
- 243, 55, 37, 42, 254, 19, 55, 37, 228, 163, 217, 43, 49, 37, 241, 44, 49,
- 37, 254, 57, 123, 211, 211, 49, 37, 42, 46, 76, 55, 37, 215, 124, 76, 55,
- 37, 242, 118, 235, 66, 37, 46, 253, 165, 49, 37, 42, 151, 223, 131, 49,
- 37, 244, 100, 37, 213, 167, 55, 37, 42, 253, 165, 55, 37, 46, 253, 165,
- 55, 37, 46, 253, 165, 24, 114, 253, 165, 55, 37, 46, 151, 223, 131, 49,
- 37, 62, 78, 223, 148, 37, 253, 133, 55, 37, 51, 223, 131, 55, 37, 212,
- 28, 49, 37, 51, 251, 75, 55, 37, 51, 251, 74, 37, 51, 232, 37, 37, 51,
- 232, 38, 55, 37, 51, 217, 42, 37, 51, 235, 191, 251, 74, 37, 51, 95, 76,
- 55, 37, 7, 3, 1, 61, 37, 7, 3, 1, 74, 37, 7, 3, 1, 72, 37, 7, 3, 1, 75,
- 37, 7, 3, 1, 69, 37, 7, 3, 1, 250, 252, 37, 7, 3, 1, 249, 3, 37, 7, 3, 1,
- 242, 41, 37, 7, 3, 1, 183, 37, 7, 3, 1, 149, 37, 7, 3, 1, 218, 99, 37, 7,
- 3, 1, 215, 79, 37, 7, 3, 1, 213, 166, 25, 6, 1, 241, 181, 25, 3, 1, 241,
- 181, 25, 6, 1, 253, 193, 222, 161, 25, 3, 1, 253, 193, 222, 161, 25, 228,
- 54, 52, 25, 232, 163, 228, 54, 52, 25, 6, 1, 226, 178, 247, 179, 25, 3,
- 1, 226, 178, 247, 179, 25, 212, 210, 25, 3, 223, 202, 232, 141, 220, 104,
- 87, 25, 3, 246, 72, 232, 141, 220, 104, 87, 25, 3, 223, 202, 246, 72,
- 232, 141, 220, 104, 87, 25, 224, 158, 77, 25, 216, 231, 25, 247, 204,
- 216, 231, 25, 6, 1, 254, 53, 2, 216, 231, 25, 254, 8, 217, 211, 25, 6, 1,
- 245, 64, 2, 216, 231, 25, 6, 1, 245, 29, 2, 216, 231, 25, 6, 1, 235, 184,
- 2, 216, 231, 25, 6, 1, 227, 66, 2, 216, 231, 25, 6, 1, 215, 129, 2, 216,
- 231, 25, 6, 1, 227, 68, 2, 216, 231, 25, 3, 1, 235, 184, 2, 247, 204, 24,
- 216, 231, 25, 6, 1, 254, 52, 25, 6, 1, 251, 203, 25, 6, 1, 243, 83, 25,
- 6, 1, 248, 5, 25, 6, 1, 245, 63, 25, 6, 1, 212, 78, 25, 6, 1, 245, 28,
- 25, 6, 1, 217, 132, 25, 6, 1, 235, 183, 25, 6, 1, 234, 227, 25, 6, 1,
- 233, 122, 25, 6, 1, 230, 172, 25, 6, 1, 228, 92, 25, 6, 1, 213, 145, 25,
- 6, 1, 227, 65, 25, 6, 1, 225, 240, 25, 6, 1, 223, 190, 25, 6, 1, 220,
- 103, 25, 6, 1, 217, 248, 25, 6, 1, 215, 128, 25, 6, 1, 226, 9, 25, 6, 1,
- 250, 47, 25, 6, 1, 225, 46, 25, 6, 1, 227, 67, 25, 6, 1, 235, 184, 2,
- 247, 203, 25, 6, 1, 215, 129, 2, 247, 203, 25, 3, 1, 254, 53, 2, 216,
- 231, 25, 3, 1, 245, 64, 2, 216, 231, 25, 3, 1, 245, 29, 2, 216, 231, 25,
- 3, 1, 235, 184, 2, 216, 231, 25, 3, 1, 215, 129, 2, 247, 204, 24, 216,
- 231, 25, 3, 1, 254, 52, 25, 3, 1, 251, 203, 25, 3, 1, 243, 83, 25, 3, 1,
- 248, 5, 25, 3, 1, 245, 63, 25, 3, 1, 212, 78, 25, 3, 1, 245, 28, 25, 3,
- 1, 217, 132, 25, 3, 1, 235, 183, 25, 3, 1, 234, 227, 25, 3, 1, 233, 122,
- 25, 3, 1, 230, 172, 25, 3, 1, 228, 92, 25, 3, 1, 213, 145, 25, 3, 1, 227,
- 65, 25, 3, 1, 225, 240, 25, 3, 1, 223, 190, 25, 3, 1, 40, 220, 103, 25,
- 3, 1, 220, 103, 25, 3, 1, 217, 248, 25, 3, 1, 215, 128, 25, 3, 1, 226, 9,
- 25, 3, 1, 250, 47, 25, 3, 1, 225, 46, 25, 3, 1, 227, 67, 25, 3, 1, 235,
- 184, 2, 247, 203, 25, 3, 1, 215, 129, 2, 247, 203, 25, 3, 1, 227, 66, 2,
- 216, 231, 25, 3, 1, 215, 129, 2, 216, 231, 25, 3, 1, 227, 68, 2, 216,
- 231, 25, 6, 234, 251, 87, 25, 251, 204, 87, 25, 217, 133, 87, 25, 215,
- 129, 2, 241, 38, 87, 25, 215, 129, 2, 254, 164, 24, 241, 38, 87, 25, 215,
- 129, 2, 247, 210, 24, 241, 38, 87, 25, 226, 10, 87, 25, 225, 241, 87, 25,
- 234, 251, 87, 25, 1, 253, 193, 234, 15, 25, 3, 1, 253, 193, 234, 15, 25,
- 1, 219, 77, 25, 3, 1, 219, 77, 25, 1, 247, 179, 25, 3, 1, 247, 179, 25,
- 1, 234, 15, 25, 3, 1, 234, 15, 25, 1, 222, 161, 25, 3, 1, 222, 161, 79,
- 6, 1, 220, 235, 79, 3, 1, 220, 235, 79, 6, 1, 244, 109, 79, 3, 1, 244,
- 109, 79, 6, 1, 234, 123, 79, 3, 1, 234, 123, 79, 6, 1, 241, 32, 79, 3, 1,
- 241, 32, 79, 6, 1, 243, 78, 79, 3, 1, 243, 78, 79, 6, 1, 220, 202, 79, 3,
- 1, 220, 202, 79, 6, 1, 248, 20, 79, 3, 1, 248, 20, 25, 234, 228, 87, 25,
- 223, 191, 87, 25, 232, 141, 220, 104, 87, 25, 1, 212, 215, 25, 6, 217,
- 133, 87, 25, 232, 141, 245, 64, 87, 25, 223, 202, 232, 141, 245, 64, 87,
- 25, 6, 1, 220, 187, 25, 3, 1, 220, 187, 25, 6, 232, 141, 220, 104, 87,
- 25, 6, 1, 222, 159, 25, 3, 1, 222, 159, 25, 223, 191, 2, 219, 45, 87, 25,
- 6, 223, 202, 232, 141, 220, 104, 87, 25, 6, 246, 72, 232, 141, 220, 104,
- 87, 25, 6, 223, 202, 246, 72, 232, 141, 220, 104, 87, 33, 6, 1, 236, 56,
- 2, 242, 113, 33, 6, 1, 235, 187, 33, 6, 1, 247, 114, 33, 6, 1, 242, 163,
- 33, 6, 1, 215, 172, 236, 55, 33, 6, 1, 245, 247, 33, 6, 1, 251, 5, 72,
- 33, 6, 1, 212, 255, 33, 6, 1, 235, 127, 33, 6, 1, 232, 216, 33, 6, 1,
- 229, 9, 33, 6, 1, 216, 132, 33, 6, 1, 234, 57, 33, 6, 1, 240, 146, 2,
- 242, 113, 33, 6, 1, 220, 175, 69, 33, 6, 1, 245, 243, 33, 6, 1, 61, 33,
- 6, 1, 251, 251, 33, 6, 1, 214, 232, 33, 6, 1, 242, 212, 33, 6, 1, 248,
- 41, 33, 6, 1, 236, 55, 33, 6, 1, 212, 67, 33, 6, 1, 212, 87, 33, 6, 1,
- 72, 33, 6, 1, 220, 175, 72, 33, 6, 1, 181, 33, 6, 1, 245, 131, 33, 6, 1,
- 245, 117, 33, 6, 1, 245, 108, 33, 6, 1, 75, 33, 6, 1, 226, 96, 33, 6, 1,
- 245, 55, 33, 6, 1, 245, 45, 33, 6, 1, 217, 229, 33, 6, 1, 69, 33, 6, 1,
- 245, 159, 33, 6, 1, 159, 33, 6, 1, 216, 136, 33, 6, 1, 250, 67, 33, 6, 1,
- 221, 24, 33, 6, 1, 220, 245, 33, 6, 1, 241, 242, 52, 33, 6, 1, 213, 18,
- 33, 6, 1, 219, 236, 52, 33, 6, 1, 74, 33, 6, 1, 212, 203, 33, 6, 1, 186,
- 33, 3, 1, 61, 33, 3, 1, 251, 251, 33, 3, 1, 214, 232, 33, 3, 1, 242, 212,
- 33, 3, 1, 248, 41, 33, 3, 1, 236, 55, 33, 3, 1, 212, 67, 33, 3, 1, 212,
- 87, 33, 3, 1, 72, 33, 3, 1, 220, 175, 72, 33, 3, 1, 181, 33, 3, 1, 245,
- 131, 33, 3, 1, 245, 117, 33, 3, 1, 245, 108, 33, 3, 1, 75, 33, 3, 1, 226,
- 96, 33, 3, 1, 245, 55, 33, 3, 1, 245, 45, 33, 3, 1, 217, 229, 33, 3, 1,
- 69, 33, 3, 1, 245, 159, 33, 3, 1, 159, 33, 3, 1, 216, 136, 33, 3, 1, 250,
- 67, 33, 3, 1, 221, 24, 33, 3, 1, 220, 245, 33, 3, 1, 241, 242, 52, 33, 3,
- 1, 213, 18, 33, 3, 1, 219, 236, 52, 33, 3, 1, 74, 33, 3, 1, 212, 203, 33,
- 3, 1, 186, 33, 3, 1, 236, 56, 2, 242, 113, 33, 3, 1, 235, 187, 33, 3, 1,
- 247, 114, 33, 3, 1, 242, 163, 33, 3, 1, 215, 172, 236, 55, 33, 3, 1, 245,
- 247, 33, 3, 1, 251, 5, 72, 33, 3, 1, 212, 255, 33, 3, 1, 235, 127, 33, 3,
- 1, 232, 216, 33, 3, 1, 229, 9, 33, 3, 1, 216, 132, 33, 3, 1, 234, 57, 33,
- 3, 1, 240, 146, 2, 242, 113, 33, 3, 1, 220, 175, 69, 33, 3, 1, 245, 243,
- 33, 6, 1, 227, 67, 33, 3, 1, 227, 67, 33, 6, 1, 213, 49, 33, 3, 1, 213,
- 49, 33, 6, 1, 235, 181, 74, 33, 3, 1, 235, 181, 74, 33, 6, 1, 232, 221,
- 212, 174, 33, 3, 1, 232, 221, 212, 174, 33, 6, 1, 235, 181, 232, 221,
- 212, 174, 33, 3, 1, 235, 181, 232, 221, 212, 174, 33, 6, 1, 251, 172,
- 212, 174, 33, 3, 1, 251, 172, 212, 174, 33, 6, 1, 235, 181, 251, 172,
- 212, 174, 33, 3, 1, 235, 181, 251, 172, 212, 174, 33, 6, 1, 233, 242, 33,
- 3, 1, 233, 242, 33, 6, 1, 225, 46, 33, 3, 1, 225, 46, 33, 6, 1, 244, 51,
- 33, 3, 1, 244, 51, 33, 6, 1, 235, 144, 33, 3, 1, 235, 144, 33, 6, 1, 235,
- 145, 2, 51, 242, 114, 254, 174, 33, 3, 1, 235, 145, 2, 51, 242, 114, 254,
- 174, 33, 6, 1, 215, 175, 33, 3, 1, 215, 175, 33, 6, 1, 223, 87, 227, 67,
- 33, 3, 1, 223, 87, 227, 67, 33, 6, 1, 227, 68, 2, 217, 18, 33, 3, 1, 227,
- 68, 2, 217, 18, 33, 6, 1, 227, 8, 33, 3, 1, 227, 8, 33, 6, 1, 234, 15,
- 33, 3, 1, 234, 15, 33, 217, 99, 52, 37, 33, 217, 18, 37, 33, 226, 192,
- 37, 33, 207, 225, 152, 37, 33, 225, 40, 225, 152, 37, 33, 225, 137, 37,
- 33, 240, 201, 217, 99, 52, 37, 33, 231, 4, 52, 33, 6, 1, 220, 175, 240,
- 146, 2, 218, 27, 33, 3, 1, 220, 175, 240, 146, 2, 218, 27, 33, 6, 1, 221,
- 66, 52, 33, 3, 1, 221, 66, 52, 33, 6, 1, 245, 56, 2, 217, 68, 33, 3, 1,
- 245, 56, 2, 217, 68, 33, 6, 1, 242, 213, 2, 215, 127, 33, 3, 1, 242, 213,
- 2, 215, 127, 33, 6, 1, 242, 213, 2, 90, 33, 3, 1, 242, 213, 2, 90, 33, 6,
- 1, 242, 213, 2, 231, 37, 101, 33, 3, 1, 242, 213, 2, 231, 37, 101, 33, 6,
- 1, 212, 68, 2, 247, 246, 33, 3, 1, 212, 68, 2, 247, 246, 33, 6, 1, 212,
- 88, 2, 247, 246, 33, 3, 1, 212, 88, 2, 247, 246, 33, 6, 1, 235, 17, 2,
- 247, 246, 33, 3, 1, 235, 17, 2, 247, 246, 33, 6, 1, 235, 17, 2, 71, 90,
- 33, 3, 1, 235, 17, 2, 71, 90, 33, 6, 1, 235, 17, 2, 90, 33, 3, 1, 235,
- 17, 2, 90, 33, 6, 1, 252, 44, 181, 33, 3, 1, 252, 44, 181, 33, 6, 1, 245,
- 109, 2, 247, 246, 33, 3, 1, 245, 109, 2, 247, 246, 33, 6, 26, 245, 109,
- 242, 212, 33, 3, 26, 245, 109, 242, 212, 33, 6, 1, 226, 97, 2, 231, 37,
- 101, 33, 3, 1, 226, 97, 2, 231, 37, 101, 33, 6, 1, 254, 180, 159, 33, 3,
- 1, 254, 180, 159, 33, 6, 1, 245, 46, 2, 247, 246, 33, 3, 1, 245, 46, 2,
- 247, 246, 33, 6, 1, 217, 230, 2, 247, 246, 33, 3, 1, 217, 230, 2, 247,
- 246, 33, 6, 1, 219, 61, 69, 33, 3, 1, 219, 61, 69, 33, 6, 1, 219, 61,
- 111, 2, 90, 33, 3, 1, 219, 61, 111, 2, 90, 33, 6, 1, 242, 30, 2, 247,
- 246, 33, 3, 1, 242, 30, 2, 247, 246, 33, 6, 26, 217, 230, 216, 136, 33,
- 3, 26, 217, 230, 216, 136, 33, 6, 1, 250, 68, 2, 247, 246, 33, 3, 1, 250,
- 68, 2, 247, 246, 33, 6, 1, 250, 68, 2, 71, 90, 33, 3, 1, 250, 68, 2, 71,
- 90, 33, 6, 1, 220, 213, 33, 3, 1, 220, 213, 33, 6, 1, 254, 180, 250, 67,
- 33, 3, 1, 254, 180, 250, 67, 33, 6, 1, 254, 180, 250, 68, 2, 247, 246,
- 33, 3, 1, 254, 180, 250, 68, 2, 247, 246, 33, 1, 226, 185, 33, 6, 1, 212,
- 68, 2, 251, 74, 33, 3, 1, 212, 68, 2, 251, 74, 33, 6, 1, 235, 17, 2, 101,
- 33, 3, 1, 235, 17, 2, 101, 33, 6, 1, 245, 132, 2, 218, 27, 33, 3, 1, 245,
- 132, 2, 218, 27, 33, 6, 1, 245, 109, 2, 101, 33, 3, 1, 245, 109, 2, 101,
- 33, 6, 1, 245, 109, 2, 218, 27, 33, 3, 1, 245, 109, 2, 218, 27, 33, 6, 1,
- 234, 133, 250, 67, 33, 3, 1, 234, 133, 250, 67, 33, 6, 1, 245, 118, 2,
- 218, 27, 33, 3, 1, 245, 118, 2, 218, 27, 33, 3, 1, 226, 185, 33, 6, 1,
- 118, 2, 251, 74, 33, 3, 1, 118, 2, 251, 74, 33, 6, 1, 118, 2, 247, 209,
- 33, 3, 1, 118, 2, 247, 209, 33, 6, 26, 118, 236, 55, 33, 3, 26, 118, 236,
- 55, 33, 6, 1, 236, 56, 2, 251, 74, 33, 3, 1, 236, 56, 2, 251, 74, 33, 6,
- 1, 222, 113, 33, 3, 1, 222, 113, 33, 6, 1, 222, 114, 2, 247, 209, 33, 3,
- 1, 222, 114, 2, 247, 209, 33, 6, 1, 212, 68, 2, 247, 209, 33, 3, 1, 212,
- 68, 2, 247, 209, 33, 6, 1, 212, 88, 2, 247, 209, 33, 3, 1, 212, 88, 2,
- 247, 209, 33, 6, 1, 254, 180, 245, 247, 33, 3, 1, 254, 180, 245, 247, 33,
- 6, 1, 240, 146, 2, 232, 37, 33, 3, 1, 240, 146, 2, 232, 37, 33, 6, 1,
- 240, 146, 2, 247, 209, 33, 3, 1, 240, 146, 2, 247, 209, 33, 6, 1, 157, 2,
- 247, 209, 33, 3, 1, 157, 2, 247, 209, 33, 6, 1, 252, 54, 75, 33, 3, 1,
- 252, 54, 75, 33, 6, 1, 252, 54, 157, 2, 247, 209, 33, 3, 1, 252, 54, 157,
- 2, 247, 209, 33, 6, 1, 191, 2, 247, 209, 33, 3, 1, 191, 2, 247, 209, 33,
- 6, 1, 111, 2, 232, 37, 33, 3, 1, 111, 2, 232, 37, 33, 6, 1, 111, 2, 247,
- 209, 33, 3, 1, 111, 2, 247, 209, 33, 6, 1, 111, 2, 51, 179, 33, 3, 1,
- 111, 2, 51, 179, 33, 6, 1, 250, 68, 2, 247, 209, 33, 3, 1, 250, 68, 2,
- 247, 209, 33, 6, 1, 242, 213, 2, 247, 246, 33, 3, 1, 242, 213, 2, 247,
- 246, 33, 6, 1, 213, 19, 2, 247, 209, 33, 3, 1, 213, 19, 2, 247, 209, 33,
- 6, 1, 242, 213, 2, 219, 45, 24, 101, 33, 3, 1, 242, 213, 2, 219, 45, 24,
- 101, 33, 6, 1, 242, 30, 2, 101, 33, 3, 1, 242, 30, 2, 101, 33, 6, 1, 242,
- 30, 2, 90, 33, 3, 1, 242, 30, 2, 90, 33, 6, 1, 234, 23, 248, 41, 33, 3,
- 1, 234, 23, 248, 41, 33, 6, 1, 234, 23, 247, 114, 33, 3, 1, 234, 23, 247,
- 114, 33, 6, 1, 234, 23, 212, 20, 33, 3, 1, 234, 23, 212, 20, 33, 6, 1,
- 234, 23, 245, 241, 33, 3, 1, 234, 23, 245, 241, 33, 6, 1, 234, 23, 232,
- 216, 33, 3, 1, 234, 23, 232, 216, 33, 6, 1, 234, 23, 229, 9, 33, 3, 1,
- 234, 23, 229, 9, 33, 6, 1, 234, 23, 220, 37, 33, 3, 1, 234, 23, 220, 37,
- 33, 6, 1, 234, 23, 217, 13, 33, 3, 1, 234, 23, 217, 13, 33, 6, 1, 223,
- 202, 212, 87, 33, 3, 1, 223, 202, 212, 87, 33, 6, 1, 245, 132, 2, 101,
- 33, 3, 1, 245, 132, 2, 101, 33, 6, 1, 233, 25, 33, 3, 1, 233, 25, 33, 6,
- 1, 223, 192, 33, 3, 1, 223, 192, 33, 6, 1, 213, 80, 33, 3, 1, 213, 80,
- 33, 6, 1, 224, 232, 33, 3, 1, 224, 232, 33, 6, 1, 214, 6, 33, 3, 1, 214,
- 6, 33, 6, 1, 254, 75, 181, 33, 3, 1, 254, 75, 181, 33, 6, 1, 245, 132, 2,
- 231, 37, 101, 33, 3, 1, 245, 132, 2, 231, 37, 101, 33, 6, 1, 245, 109, 2,
- 231, 37, 101, 33, 3, 1, 245, 109, 2, 231, 37, 101, 33, 6, 1, 226, 97, 2,
- 247, 246, 33, 3, 1, 226, 97, 2, 247, 246, 33, 6, 1, 220, 214, 2, 247,
- 246, 33, 3, 1, 220, 214, 2, 247, 246, 141, 6, 1, 253, 80, 141, 6, 1, 251,
- 216, 141, 6, 1, 242, 179, 141, 6, 1, 248, 164, 141, 6, 1, 245, 169, 141,
- 6, 1, 212, 109, 141, 6, 1, 245, 154, 141, 6, 1, 245, 30, 141, 6, 1, 108,
- 141, 6, 1, 212, 67, 141, 6, 1, 235, 224, 141, 6, 1, 232, 219, 141, 6, 1,
- 213, 148, 141, 6, 1, 250, 219, 141, 6, 1, 234, 171, 141, 6, 1, 241, 54,
- 141, 6, 1, 235, 139, 141, 6, 1, 242, 222, 141, 6, 1, 250, 62, 141, 6, 1,
- 231, 122, 141, 6, 1, 212, 255, 141, 6, 1, 228, 150, 141, 6, 1, 221, 24,
- 141, 6, 1, 214, 119, 141, 6, 1, 250, 92, 141, 6, 1, 226, 80, 141, 6, 1,
- 235, 112, 141, 6, 1, 203, 141, 6, 1, 222, 80, 141, 6, 1, 214, 156, 141,
- 6, 1, 217, 15, 141, 6, 1, 223, 245, 141, 6, 1, 249, 175, 141, 6, 1, 212,
- 240, 141, 6, 1, 225, 178, 141, 6, 1, 234, 182, 141, 6, 1, 227, 88, 141,
- 6, 1, 244, 111, 141, 59, 1, 42, 151, 223, 130, 141, 253, 226, 141, 245,
- 112, 77, 141, 244, 254, 77, 141, 249, 157, 141, 224, 158, 77, 141, 254,
- 181, 77, 141, 3, 1, 253, 80, 141, 3, 1, 251, 216, 141, 3, 1, 242, 179,
- 141, 3, 1, 248, 164, 141, 3, 1, 245, 169, 141, 3, 1, 212, 109, 141, 3, 1,
- 245, 154, 141, 3, 1, 245, 30, 141, 3, 1, 108, 141, 3, 1, 212, 67, 141, 3,
- 1, 235, 224, 141, 3, 1, 232, 219, 141, 3, 1, 213, 148, 141, 3, 1, 250,
- 219, 141, 3, 1, 234, 171, 141, 3, 1, 241, 54, 141, 3, 1, 235, 139, 141,
- 3, 1, 242, 222, 141, 3, 1, 250, 62, 141, 3, 1, 231, 122, 141, 3, 1, 212,
- 255, 141, 3, 1, 228, 150, 141, 3, 1, 221, 24, 141, 3, 1, 214, 119, 141,
- 3, 1, 250, 92, 141, 3, 1, 226, 80, 141, 3, 1, 235, 112, 141, 3, 1, 203,
- 141, 3, 1, 222, 80, 141, 3, 1, 214, 156, 141, 3, 1, 217, 15, 141, 3, 1,
- 223, 245, 141, 3, 1, 249, 175, 141, 3, 1, 212, 240, 141, 3, 1, 225, 178,
- 141, 3, 1, 234, 182, 141, 3, 1, 227, 88, 141, 3, 1, 244, 111, 141, 3, 26,
- 245, 170, 212, 240, 141, 243, 200, 219, 69, 141, 240, 160, 93, 254, 175,
- 245, 23, 93, 254, 175, 222, 81, 93, 254, 175, 221, 11, 93, 254, 175, 212,
- 97, 224, 215, 93, 254, 175, 212, 97, 243, 100, 93, 254, 175, 217, 28, 93,
- 254, 175, 223, 200, 93, 254, 175, 212, 96, 93, 254, 175, 226, 118, 93,
- 254, 175, 213, 11, 93, 254, 175, 217, 167, 93, 254, 175, 243, 17, 93,
- 254, 175, 243, 18, 230, 139, 93, 254, 175, 243, 15, 93, 254, 175, 224,
- 216, 226, 144, 93, 254, 175, 217, 206, 243, 32, 93, 254, 175, 226, 100,
- 93, 254, 175, 253, 116, 242, 22, 93, 254, 175, 230, 149, 93, 254, 175,
- 232, 13, 93, 254, 175, 231, 113, 93, 254, 175, 231, 114, 234, 183, 93,
- 254, 175, 248, 108, 93, 254, 175, 224, 227, 93, 254, 175, 217, 206, 224,
- 211, 93, 254, 175, 213, 21, 251, 217, 212, 221, 93, 254, 175, 227, 73,
- 93, 254, 175, 236, 14, 93, 254, 175, 248, 21, 93, 254, 175, 212, 26, 93,
- 152, 231, 206, 249, 228, 93, 225, 145, 220, 216, 93, 225, 145, 241, 233,
- 222, 81, 93, 225, 145, 241, 233, 226, 112, 93, 225, 145, 241, 233, 224,
- 220, 93, 225, 145, 241, 144, 93, 225, 145, 216, 134, 93, 225, 145, 222,
- 81, 93, 225, 145, 226, 112, 93, 225, 145, 224, 220, 93, 225, 145, 241,
- 47, 93, 225, 145, 241, 48, 241, 235, 31, 214, 236, 93, 225, 145, 224,
- 162, 93, 225, 145, 248, 151, 167, 231, 234, 93, 225, 145, 231, 105, 93,
- 225, 27, 231, 231, 93, 225, 145, 224, 59, 93, 225, 27, 226, 120, 93, 225,
- 145, 220, 201, 247, 74, 93, 225, 145, 220, 85, 247, 74, 93, 225, 27, 219,
- 237, 226, 114, 93, 152, 215, 131, 247, 74, 93, 152, 232, 163, 247, 74,
- 93, 225, 27, 228, 51, 242, 21, 93, 225, 145, 224, 221, 224, 215, 93, 1,
- 254, 78, 93, 1, 251, 205, 93, 1, 242, 177, 93, 1, 248, 134, 93, 1, 241,
- 222, 93, 1, 214, 236, 93, 1, 212, 90, 93, 1, 241, 182, 93, 1, 217, 183,
- 93, 1, 212, 224, 93, 1, 40, 234, 254, 93, 1, 234, 254, 93, 1, 233, 118,
- 93, 1, 40, 231, 129, 93, 1, 231, 129, 93, 1, 40, 228, 50, 93, 1, 228, 50,
- 93, 1, 222, 164, 93, 1, 253, 78, 93, 1, 40, 226, 96, 93, 1, 226, 96, 93,
- 1, 40, 216, 137, 93, 1, 216, 137, 93, 1, 224, 184, 93, 1, 223, 219, 93,
- 1, 220, 200, 93, 1, 217, 245, 93, 26, 212, 253, 51, 214, 236, 93, 26,
- 212, 253, 214, 237, 212, 224, 93, 26, 212, 253, 51, 212, 224, 93, 225,
- 27, 243, 17, 93, 225, 27, 243, 15, 12, 50, 52, 12, 5, 222, 158, 12, 243,
- 255, 231, 217, 12, 5, 222, 192, 253, 207, 249, 50, 223, 95, 253, 207,
- 243, 230, 223, 95, 12, 224, 27, 253, 207, 226, 58, 231, 6, 52, 253, 207,
- 226, 58, 217, 201, 217, 101, 52, 254, 126, 52, 12, 249, 157, 12, 248, 96,
- 221, 57, 12, 225, 147, 214, 218, 52, 12, 5, 230, 243, 12, 5, 222, 174,
- 254, 80, 214, 29, 12, 5, 254, 80, 253, 137, 12, 5, 224, 58, 254, 79, 12,
- 5, 224, 65, 254, 61, 254, 14, 12, 5, 218, 20, 12, 3, 124, 218, 29, 12, 3,
- 124, 26, 106, 2, 233, 127, 2, 213, 34, 12, 3, 124, 212, 101, 12, 3, 244,
- 133, 12, 3, 248, 129, 12, 3, 234, 210, 12, 221, 70, 12, 216, 169, 62,
- 225, 27, 77, 12, 224, 158, 77, 12, 1, 234, 214, 213, 34, 12, 1, 242, 2,
- 12, 1, 106, 2, 232, 33, 49, 12, 1, 106, 2, 192, 49, 12, 1, 214, 15, 2,
- 192, 49, 12, 1, 106, 2, 192, 55, 12, 1, 73, 2, 192, 49, 12, 1, 254, 78,
- 12, 1, 251, 230, 12, 1, 217, 216, 231, 227, 12, 1, 217, 215, 12, 1, 217,
- 145, 12, 1, 235, 124, 12, 1, 242, 18, 12, 1, 234, 135, 12, 1, 248, 140,
- 12, 1, 217, 155, 12, 1, 223, 245, 12, 1, 212, 101, 12, 1, 222, 85, 12, 1,
- 220, 239, 12, 1, 222, 195, 12, 1, 248, 159, 12, 1, 218, 29, 12, 1, 212,
- 104, 12, 1, 254, 103, 12, 1, 242, 220, 12, 1, 234, 181, 2, 117, 176, 49,
- 12, 1, 234, 181, 2, 133, 176, 55, 12, 1, 244, 136, 73, 2, 235, 191, 215,
- 79, 12, 1, 244, 136, 73, 2, 117, 176, 49, 12, 1, 244, 136, 73, 2, 133,
- 176, 49, 12, 217, 250, 12, 1, 244, 111, 12, 1, 224, 225, 12, 1, 234, 254,
- 12, 1, 233, 126, 12, 1, 231, 143, 12, 1, 228, 173, 12, 1, 241, 202, 12,
- 1, 214, 14, 12, 1, 106, 231, 255, 12, 1, 213, 34, 12, 244, 131, 12, 248,
- 127, 12, 234, 208, 12, 244, 133, 12, 248, 129, 12, 234, 210, 12, 221, 15,
- 12, 218, 246, 12, 232, 31, 49, 12, 192, 49, 12, 192, 55, 12, 219, 10,
- 254, 78, 12, 235, 191, 248, 129, 12, 152, 228, 174, 242, 194, 12, 211,
- 250, 12, 30, 5, 3, 215, 80, 49, 12, 30, 5, 235, 191, 3, 215, 80, 49, 12,
- 30, 5, 62, 55, 12, 223, 202, 248, 129, 12, 244, 134, 2, 117, 247, 72, 12,
- 214, 16, 192, 55, 253, 207, 21, 212, 79, 253, 207, 21, 116, 253, 207, 21,
- 109, 253, 207, 21, 166, 253, 207, 21, 163, 253, 207, 21, 180, 253, 207,
- 21, 189, 253, 207, 21, 198, 253, 207, 21, 195, 253, 207, 21, 200, 12,
- 226, 57, 52, 12, 248, 34, 221, 57, 12, 217, 99, 221, 57, 12, 244, 50,
- 225, 143, 219, 95, 12, 1, 247, 73, 251, 230, 12, 1, 247, 73, 224, 225,
- 12, 1, 218, 223, 254, 78, 12, 1, 106, 214, 30, 12, 1, 106, 2, 214, 16,
- 192, 49, 12, 1, 106, 2, 214, 16, 192, 55, 12, 1, 124, 242, 2, 12, 1, 124,
- 192, 254, 78, 12, 1, 124, 192, 214, 14, 12, 1, 111, 2, 192, 49, 12, 1,
- 124, 192, 213, 34, 12, 1, 216, 109, 12, 1, 216, 107, 12, 1, 251, 240, 12,
- 1, 217, 216, 2, 223, 130, 12, 1, 217, 216, 2, 133, 176, 78, 246, 57, 12,
- 1, 226, 80, 12, 1, 217, 213, 12, 1, 251, 228, 12, 1, 121, 2, 192, 49, 12,
- 1, 121, 2, 117, 176, 71, 49, 12, 1, 228, 14, 12, 1, 245, 254, 12, 1, 121,
- 2, 133, 176, 49, 12, 1, 217, 233, 12, 1, 217, 231, 12, 1, 248, 81, 12, 1,
- 248, 141, 2, 223, 130, 12, 1, 248, 141, 2, 62, 55, 12, 1, 248, 141, 2,
- 62, 251, 220, 24, 3, 218, 29, 12, 1, 248, 146, 12, 1, 248, 83, 12, 1,
- 246, 25, 12, 1, 248, 141, 2, 133, 176, 78, 246, 57, 12, 1, 248, 141, 2,
- 243, 237, 176, 49, 12, 1, 223, 77, 12, 1, 223, 246, 2, 3, 215, 79, 12, 1,
- 223, 246, 2, 223, 130, 12, 1, 223, 246, 2, 62, 55, 12, 1, 223, 246, 2, 3,
- 215, 80, 55, 12, 1, 223, 246, 2, 62, 251, 220, 24, 62, 49, 12, 1, 223,
- 246, 2, 117, 176, 49, 12, 1, 235, 121, 12, 1, 223, 246, 2, 243, 237, 176,
- 49, 12, 1, 222, 86, 2, 62, 251, 220, 24, 62, 49, 12, 1, 222, 86, 2, 133,
- 176, 55, 12, 1, 222, 86, 2, 133, 176, 251, 220, 24, 133, 176, 49, 12, 1,
- 222, 196, 2, 117, 176, 55, 12, 1, 222, 196, 2, 133, 176, 49, 12, 1, 218,
- 30, 2, 133, 176, 49, 12, 1, 254, 104, 2, 133, 176, 49, 12, 1, 247, 73,
- 244, 111, 12, 1, 244, 112, 2, 62, 230, 179, 55, 12, 1, 244, 112, 2, 62,
- 55, 12, 1, 214, 225, 12, 1, 244, 112, 2, 133, 176, 55, 12, 1, 226, 78,
- 12, 1, 224, 226, 2, 62, 49, 12, 1, 224, 226, 2, 133, 176, 49, 12, 1, 234,
- 180, 12, 1, 218, 195, 234, 254, 12, 1, 234, 255, 2, 223, 130, 12, 1, 234,
- 255, 2, 62, 49, 12, 1, 229, 161, 12, 1, 234, 255, 2, 133, 176, 55, 12, 1,
- 243, 97, 12, 1, 243, 98, 2, 223, 130, 12, 1, 229, 88, 12, 1, 243, 98, 2,
- 117, 176, 55, 12, 1, 242, 82, 12, 1, 243, 98, 2, 133, 176, 49, 12, 1,
- 233, 127, 2, 3, 215, 79, 12, 1, 233, 127, 2, 62, 49, 12, 1, 233, 127, 2,
- 133, 176, 49, 12, 1, 233, 127, 2, 133, 176, 55, 12, 1, 228, 174, 2, 62,
- 55, 12, 1, 228, 174, 242, 194, 12, 1, 223, 115, 12, 1, 228, 174, 2, 223,
- 130, 12, 1, 228, 174, 2, 133, 176, 49, 12, 1, 241, 203, 247, 95, 12, 1,
- 217, 234, 2, 62, 49, 12, 1, 241, 203, 2, 73, 49, 12, 1, 241, 203, 242,
- 147, 12, 1, 241, 203, 242, 148, 2, 192, 49, 12, 1, 217, 216, 231, 228,
- 242, 147, 12, 1, 214, 15, 2, 223, 130, 12, 1, 234, 82, 227, 99, 12, 1,
- 227, 99, 12, 1, 69, 12, 1, 212, 203, 12, 1, 234, 82, 212, 203, 12, 1,
- 214, 15, 2, 117, 176, 49, 12, 1, 214, 232, 12, 1, 244, 136, 213, 34, 12,
- 1, 73, 2, 218, 27, 12, 1, 73, 2, 3, 215, 79, 12, 1, 214, 15, 2, 62, 49,
- 12, 1, 74, 12, 1, 73, 2, 133, 176, 55, 12, 1, 73, 252, 52, 12, 1, 73,
- 252, 53, 2, 192, 49, 12, 243, 200, 219, 69, 12, 1, 254, 148, 12, 3, 124,
- 26, 222, 196, 2, 233, 127, 2, 106, 231, 255, 12, 3, 124, 26, 224, 226, 2,
- 233, 127, 2, 106, 231, 255, 12, 3, 124, 63, 70, 17, 12, 3, 124, 233, 127,
- 254, 78, 12, 3, 124, 235, 124, 12, 3, 124, 133, 247, 72, 12, 3, 124, 222,
- 85, 12, 245, 101, 65, 253, 82, 12, 219, 91, 65, 223, 49, 245, 132, 241,
- 141, 12, 3, 124, 223, 85, 212, 79, 12, 3, 124, 215, 130, 224, 8, 212, 79,
- 12, 3, 124, 247, 73, 241, 220, 65, 234, 135, 12, 3, 124, 63, 48, 17, 12,
- 3, 115, 222, 85, 12, 3, 124, 232, 32, 12, 3, 214, 14, 12, 3, 213, 34, 12,
- 3, 124, 213, 34, 12, 3, 124, 228, 173, 12, 225, 173, 65, 222, 184, 12,
- 245, 110, 250, 109, 115, 219, 69, 12, 245, 110, 250, 109, 124, 219, 69,
- 12, 223, 85, 124, 219, 70, 2, 244, 73, 250, 108, 12, 3, 115, 231, 143,
- 12, 1, 248, 141, 2, 235, 191, 215, 79, 12, 1, 223, 246, 2, 235, 191, 215,
- 79, 244, 246, 253, 207, 21, 212, 79, 244, 246, 253, 207, 21, 116, 244,
- 246, 253, 207, 21, 109, 244, 246, 253, 207, 21, 166, 244, 246, 253, 207,
- 21, 163, 244, 246, 253, 207, 21, 180, 244, 246, 253, 207, 21, 189, 244,
- 246, 253, 207, 21, 198, 244, 246, 253, 207, 21, 195, 244, 246, 253, 207,
- 21, 200, 12, 1, 220, 240, 2, 62, 55, 12, 1, 248, 160, 2, 62, 55, 12, 1,
- 242, 221, 2, 62, 55, 12, 5, 220, 84, 254, 35, 12, 5, 220, 84, 225, 115,
- 231, 122, 12, 1, 241, 203, 2, 235, 191, 215, 79, 175, 245, 101, 65, 226,
- 142, 175, 218, 219, 243, 200, 219, 69, 175, 219, 12, 243, 200, 219, 69,
- 175, 218, 219, 249, 164, 175, 219, 12, 249, 164, 175, 199, 249, 164, 175,
- 249, 165, 220, 34, 233, 70, 175, 249, 165, 220, 34, 223, 148, 175, 218,
- 219, 249, 165, 220, 34, 233, 70, 175, 219, 12, 249, 165, 220, 34, 223,
- 148, 175, 249, 119, 175, 241, 240, 227, 114, 175, 241, 240, 231, 103,
- 175, 241, 240, 253, 134, 175, 254, 181, 77, 175, 1, 254, 82, 175, 1, 218,
- 223, 254, 82, 175, 1, 251, 202, 175, 1, 243, 89, 175, 1, 243, 90, 243,
- 67, 175, 1, 248, 137, 175, 1, 247, 73, 248, 138, 223, 126, 175, 1, 241,
- 222, 175, 1, 214, 14, 175, 1, 212, 101, 175, 1, 241, 180, 175, 1, 217,
- 179, 175, 1, 217, 180, 243, 67, 175, 1, 212, 190, 175, 1, 212, 191, 241,
- 222, 175, 1, 234, 230, 175, 1, 233, 125, 175, 1, 231, 3, 175, 1, 228, 50,
- 175, 1, 221, 63, 175, 1, 40, 221, 63, 175, 1, 74, 175, 1, 226, 96, 175,
- 1, 223, 202, 226, 96, 175, 1, 222, 193, 175, 1, 224, 219, 175, 1, 223,
- 126, 175, 1, 220, 200, 175, 1, 217, 243, 175, 1, 226, 45, 251, 190, 175,
- 1, 226, 45, 242, 218, 175, 1, 226, 45, 247, 228, 175, 225, 36, 49, 175,
- 225, 36, 55, 175, 225, 36, 246, 71, 175, 212, 10, 49, 175, 212, 10, 55,
- 175, 212, 10, 246, 71, 175, 224, 24, 49, 175, 224, 24, 55, 175, 246, 72,
- 212, 17, 241, 31, 175, 246, 72, 212, 17, 254, 15, 175, 241, 225, 49, 175,
- 241, 225, 55, 175, 241, 224, 246, 71, 175, 245, 43, 49, 175, 245, 43, 55,
- 175, 223, 19, 175, 244, 105, 247, 74, 175, 224, 137, 175, 223, 45, 175,
- 117, 71, 176, 49, 175, 117, 71, 176, 55, 175, 133, 176, 49, 175, 133,
- 176, 55, 175, 227, 112, 232, 243, 49, 175, 227, 112, 232, 243, 55, 175,
- 230, 126, 175, 252, 51, 175, 1, 219, 233, 212, 73, 175, 1, 219, 233, 234,
- 128, 175, 1, 219, 233, 244, 123, 12, 1, 251, 231, 2, 133, 176, 240, 237,
- 55, 12, 1, 251, 231, 2, 62, 251, 220, 24, 133, 176, 49, 12, 1, 251, 231,
- 2, 133, 176, 225, 141, 215, 124, 55, 12, 1, 251, 231, 2, 133, 176, 225,
- 141, 215, 124, 251, 220, 24, 117, 176, 49, 12, 1, 251, 231, 2, 117, 176,
- 251, 220, 24, 62, 49, 12, 1, 251, 231, 2, 235, 191, 3, 215, 80, 55, 12,
- 1, 251, 231, 2, 3, 215, 79, 12, 1, 121, 2, 117, 176, 49, 12, 1, 121, 2,
- 133, 176, 225, 141, 215, 124, 55, 12, 1, 248, 141, 2, 117, 176, 214, 166,
- 251, 220, 24, 3, 218, 29, 12, 1, 248, 141, 2, 235, 191, 3, 215, 80, 55,
- 12, 1, 223, 246, 2, 90, 12, 1, 222, 86, 2, 243, 237, 176, 49, 12, 1, 254,
- 104, 2, 117, 176, 49, 12, 1, 254, 104, 2, 133, 176, 225, 141, 246, 58,
- 49, 12, 1, 254, 104, 2, 117, 176, 214, 166, 49, 12, 1, 244, 112, 2, 117,
- 176, 55, 12, 1, 244, 112, 2, 133, 176, 225, 141, 215, 124, 55, 12, 1,
- 234, 181, 2, 62, 49, 12, 1, 234, 181, 2, 133, 176, 49, 12, 1, 234, 181,
- 2, 133, 176, 225, 141, 215, 124, 55, 12, 1, 63, 2, 62, 49, 12, 1, 63, 2,
- 62, 55, 12, 1, 228, 174, 2, 117, 176, 55, 12, 1, 228, 174, 2, 3, 218, 29,
- 12, 1, 228, 174, 2, 3, 215, 79, 12, 1, 233, 127, 2, 134, 12, 1, 223, 246,
- 2, 117, 176, 214, 166, 49, 12, 1, 223, 246, 2, 192, 49, 12, 1, 222, 86,
- 2, 117, 176, 214, 166, 49, 12, 1, 121, 2, 3, 12, 1, 218, 30, 55, 12, 1,
- 121, 2, 3, 12, 1, 218, 30, 24, 117, 247, 72, 12, 1, 222, 86, 2, 3, 12, 1,
- 218, 30, 24, 117, 247, 72, 12, 1, 223, 246, 2, 3, 12, 1, 218, 30, 24,
- 117, 247, 72, 12, 1, 121, 2, 3, 12, 1, 218, 30, 49, 12, 1, 106, 2, 244,
- 246, 253, 207, 21, 117, 49, 12, 1, 106, 2, 244, 246, 253, 207, 21, 133,
- 49, 12, 1, 244, 136, 73, 2, 244, 246, 253, 207, 21, 117, 49, 12, 1, 244,
- 136, 73, 2, 244, 246, 253, 207, 21, 133, 49, 12, 1, 244, 136, 73, 2, 244,
- 246, 253, 207, 21, 243, 237, 55, 12, 1, 214, 15, 2, 244, 246, 253, 207,
- 21, 117, 49, 12, 1, 214, 15, 2, 244, 246, 253, 207, 21, 133, 49, 12, 1,
- 73, 252, 53, 2, 244, 246, 253, 207, 21, 117, 49, 12, 1, 73, 252, 53, 2,
- 244, 246, 253, 207, 21, 133, 49, 12, 1, 121, 2, 244, 246, 253, 207, 21,
- 243, 237, 55, 12, 1, 222, 86, 2, 244, 246, 253, 207, 21, 243, 237, 49,
- 12, 1, 222, 86, 2, 235, 191, 215, 79, 12, 1, 234, 255, 2, 117, 176, 49,
- 217, 158, 1, 242, 27, 217, 158, 1, 220, 248, 217, 158, 1, 228, 172, 217,
- 158, 1, 224, 74, 217, 158, 1, 252, 106, 217, 158, 1, 233, 22, 217, 158,
- 1, 235, 12, 217, 158, 1, 254, 68, 217, 158, 1, 214, 255, 217, 158, 1,
- 231, 142, 217, 158, 1, 244, 162, 217, 158, 1, 247, 231, 217, 158, 1, 217,
- 160, 217, 158, 1, 233, 153, 217, 158, 1, 243, 106, 217, 158, 1, 242, 153,
- 217, 158, 1, 222, 84, 217, 158, 1, 248, 94, 217, 158, 1, 212, 93, 217,
- 158, 1, 217, 244, 217, 158, 1, 213, 91, 217, 158, 1, 226, 107, 217, 158,
- 1, 235, 129, 217, 158, 1, 250, 70, 217, 158, 1, 216, 114, 217, 158, 1,
- 241, 173, 217, 158, 1, 234, 137, 217, 158, 1, 217, 159, 217, 158, 1, 212,
- 108, 217, 158, 1, 220, 238, 217, 158, 1, 222, 199, 217, 158, 1, 248, 162,
- 217, 158, 1, 108, 217, 158, 1, 212, 16, 217, 158, 1, 254, 101, 217, 158,
- 1, 242, 219, 217, 158, 1, 224, 229, 217, 158, 1, 214, 47, 217, 158, 254,
- 182, 217, 158, 254, 197, 217, 158, 240, 107, 217, 158, 245, 164, 217,
- 158, 215, 191, 217, 158, 227, 48, 217, 158, 245, 172, 217, 158, 244, 240,
- 217, 158, 227, 111, 217, 158, 227, 119, 217, 158, 218, 246, 217, 158, 1,
- 230, 43, 228, 224, 21, 212, 79, 228, 224, 21, 116, 228, 224, 21, 109,
- 228, 224, 21, 166, 228, 224, 21, 163, 228, 224, 21, 180, 228, 224, 21,
- 189, 228, 224, 21, 198, 228, 224, 21, 195, 228, 224, 21, 200, 228, 224,
- 1, 61, 228, 224, 1, 245, 165, 228, 224, 1, 72, 228, 224, 1, 74, 228, 224,
- 1, 69, 228, 224, 1, 227, 49, 228, 224, 1, 75, 228, 224, 1, 248, 152, 228,
- 224, 1, 204, 228, 224, 1, 252, 107, 228, 224, 1, 193, 228, 224, 1, 218,
- 52, 228, 224, 1, 235, 139, 228, 224, 1, 250, 92, 228, 224, 1, 248, 164,
- 228, 224, 1, 203, 228, 224, 1, 223, 81, 228, 224, 1, 222, 202, 228, 224,
- 1, 243, 55, 228, 224, 1, 244, 164, 228, 224, 1, 181, 228, 224, 1, 233,
- 157, 228, 224, 1, 230, 46, 213, 210, 228, 224, 1, 188, 228, 224, 1, 228,
- 23, 228, 224, 1, 205, 228, 224, 1, 159, 228, 224, 1, 214, 49, 228, 224,
- 1, 186, 228, 224, 1, 228, 24, 213, 210, 228, 224, 1, 235, 64, 235, 139,
- 228, 224, 1, 235, 64, 250, 92, 228, 224, 1, 235, 64, 203, 228, 224, 37,
- 220, 175, 124, 216, 241, 228, 224, 37, 220, 175, 115, 216, 241, 228, 224,
- 37, 220, 175, 223, 125, 216, 241, 228, 224, 37, 184, 247, 245, 216, 241,
- 228, 224, 37, 184, 124, 216, 241, 228, 224, 37, 184, 115, 216, 241, 228,
- 224, 37, 184, 223, 125, 216, 241, 228, 224, 37, 230, 13, 77, 228, 224,
- 37, 51, 62, 49, 228, 224, 124, 160, 253, 226, 228, 224, 115, 160, 253,
- 226, 228, 224, 16, 227, 50, 248, 1, 228, 224, 16, 243, 54, 228, 224, 249,
- 157, 228, 224, 244, 254, 77, 228, 224, 233, 132, 222, 167, 1, 254, 84,
- 222, 167, 1, 251, 151, 222, 167, 1, 243, 88, 222, 167, 1, 248, 139, 222,
- 167, 1, 235, 150, 222, 167, 1, 252, 106, 222, 167, 1, 212, 82, 222, 167,
- 1, 235, 158, 222, 167, 1, 217, 20, 222, 167, 1, 212, 173, 222, 167, 1,
- 235, 13, 222, 167, 1, 233, 150, 222, 167, 1, 231, 3, 222, 167, 1, 228,
- 50, 222, 167, 1, 220, 82, 222, 167, 1, 235, 251, 222, 167, 1, 244, 90,
- 222, 167, 1, 216, 139, 222, 167, 1, 224, 155, 222, 167, 1, 223, 126, 222,
- 167, 1, 221, 8, 222, 167, 1, 218, 48, 222, 167, 152, 235, 251, 222, 167,
- 152, 235, 250, 222, 167, 152, 227, 107, 222, 167, 152, 248, 150, 222,
- 167, 59, 1, 245, 68, 212, 173, 222, 167, 152, 245, 68, 212, 173, 222,
- 167, 30, 5, 184, 74, 222, 167, 30, 5, 74, 222, 167, 30, 5, 226, 242, 254,
- 232, 222, 167, 30, 5, 184, 254, 232, 222, 167, 30, 5, 254, 232, 222, 167,
- 30, 5, 226, 242, 61, 222, 167, 30, 5, 184, 61, 222, 167, 30, 5, 61, 222,
- 167, 59, 1, 220, 175, 61, 222, 167, 30, 5, 220, 175, 61, 222, 167, 30, 5,
- 184, 69, 222, 167, 30, 5, 69, 222, 167, 59, 1, 72, 222, 167, 30, 5, 184,
- 72, 222, 167, 30, 5, 72, 222, 167, 30, 5, 75, 222, 167, 30, 5, 218, 246,
- 222, 167, 152, 229, 174, 222, 167, 225, 27, 229, 174, 222, 167, 225, 27,
- 254, 123, 222, 167, 225, 27, 254, 23, 222, 167, 225, 27, 252, 34, 222,
- 167, 225, 27, 253, 117, 222, 167, 225, 27, 220, 188, 222, 167, 254, 181,
- 77, 222, 167, 225, 27, 231, 132, 224, 190, 222, 167, 225, 27, 212, 24,
- 222, 167, 225, 27, 224, 190, 222, 167, 225, 27, 212, 107, 222, 167, 225,
- 27, 216, 54, 222, 167, 225, 27, 253, 180, 222, 167, 225, 27, 219, 237,
- 231, 208, 222, 167, 225, 27, 254, 11, 231, 245, 1, 242, 7, 231, 245, 1,
- 254, 185, 231, 245, 1, 254, 121, 231, 245, 1, 254, 160, 231, 245, 1, 254,
- 114, 231, 245, 1, 215, 98, 231, 245, 1, 253, 76, 231, 245, 1, 235, 158,
- 231, 245, 1, 253, 114, 231, 245, 1, 254, 89, 231, 245, 1, 254, 94, 231,
- 245, 1, 254, 86, 231, 245, 1, 254, 45, 231, 245, 1, 254, 32, 231, 245, 1,
- 253, 152, 231, 245, 1, 235, 251, 231, 245, 1, 253, 239, 231, 245, 1, 253,
- 124, 231, 245, 1, 253, 215, 231, 245, 1, 253, 211, 231, 245, 1, 253, 146,
- 231, 245, 1, 253, 122, 231, 245, 1, 246, 10, 231, 245, 1, 235, 6, 231,
- 245, 1, 254, 103, 231, 245, 254, 127, 77, 231, 245, 214, 117, 77, 231,
- 245, 243, 29, 77, 231, 245, 225, 26, 82, 5, 235, 191, 250, 187, 82, 5,
- 250, 187, 82, 5, 253, 242, 82, 5, 214, 128, 82, 1, 220, 175, 61, 82, 1,
- 61, 82, 1, 254, 232, 82, 1, 72, 82, 1, 236, 28, 82, 1, 69, 82, 1, 215,
- 92, 82, 1, 161, 149, 82, 1, 161, 150, 82, 1, 250, 190, 74, 82, 1, 220,
- 175, 74, 82, 1, 74, 82, 1, 254, 108, 82, 1, 250, 190, 75, 82, 1, 220,
- 175, 75, 82, 1, 75, 82, 1, 253, 108, 82, 1, 181, 82, 1, 234, 138, 82, 1,
- 243, 110, 82, 1, 242, 225, 82, 1, 229, 159, 82, 1, 250, 219, 82, 1, 250,
- 92, 82, 1, 235, 139, 82, 1, 235, 115, 82, 1, 228, 23, 82, 1, 216, 115,
- 82, 1, 216, 105, 82, 1, 248, 86, 82, 1, 248, 70, 82, 1, 228, 198, 82, 1,
- 218, 52, 82, 1, 217, 161, 82, 1, 248, 164, 82, 1, 247, 232, 82, 1, 205,
- 82, 1, 228, 189, 82, 1, 193, 82, 1, 226, 23, 82, 1, 252, 107, 82, 1, 251,
- 195, 82, 1, 188, 82, 1, 186, 82, 1, 203, 82, 1, 223, 81, 82, 1, 233, 157,
- 82, 1, 232, 213, 82, 1, 232, 212, 82, 1, 215, 1, 82, 1, 221, 24, 82, 1,
- 219, 157, 82, 1, 222, 202, 82, 1, 159, 82, 30, 5, 227, 99, 82, 30, 5,
- 227, 47, 82, 5, 228, 60, 82, 5, 253, 91, 82, 30, 5, 254, 232, 82, 30, 5,
- 72, 82, 30, 5, 236, 28, 82, 30, 5, 69, 82, 30, 5, 215, 92, 82, 30, 5,
- 161, 149, 82, 30, 5, 161, 223, 82, 82, 30, 5, 250, 190, 74, 82, 30, 5,
- 220, 175, 74, 82, 30, 5, 74, 82, 30, 5, 254, 108, 82, 30, 5, 250, 190,
- 75, 82, 30, 5, 220, 175, 75, 82, 30, 5, 75, 82, 30, 5, 253, 108, 82, 5,
- 214, 133, 82, 30, 5, 225, 66, 74, 82, 30, 5, 253, 87, 82, 227, 70, 82,
- 219, 51, 5, 215, 185, 82, 219, 51, 5, 253, 244, 82, 242, 114, 254, 174,
- 82, 254, 164, 254, 174, 82, 30, 5, 250, 190, 184, 74, 82, 30, 5, 215,
- 183, 82, 30, 5, 215, 91, 82, 1, 224, 232, 82, 1, 234, 121, 82, 1, 242,
- 202, 82, 1, 212, 109, 82, 1, 248, 75, 82, 1, 223, 192, 82, 1, 244, 164,
- 82, 1, 212, 160, 82, 1, 161, 223, 82, 82, 1, 161, 232, 214, 82, 30, 5,
- 161, 150, 82, 30, 5, 161, 232, 214, 82, 248, 123, 82, 51, 248, 123, 82,
- 21, 212, 79, 82, 21, 116, 82, 21, 109, 82, 21, 166, 82, 21, 163, 82, 21,
- 180, 82, 21, 189, 82, 21, 198, 82, 21, 195, 82, 21, 200, 82, 254, 181,
- 52, 82, 5, 124, 219, 205, 247, 74, 82, 1, 250, 190, 61, 82, 1, 227, 99,
- 82, 1, 227, 47, 82, 1, 253, 87, 82, 1, 215, 183, 82, 1, 215, 91, 82, 1,
- 212, 75, 82, 1, 107, 186, 82, 1, 243, 5, 82, 1, 235, 99, 82, 1, 242, 156,
- 219, 69, 82, 1, 248, 76, 82, 1, 252, 31, 140, 5, 250, 187, 140, 5, 253,
- 242, 140, 5, 214, 128, 140, 1, 61, 140, 1, 254, 232, 140, 1, 72, 140, 1,
- 236, 28, 140, 1, 69, 140, 1, 215, 92, 140, 1, 161, 149, 140, 1, 161, 150,
- 140, 1, 74, 140, 1, 254, 108, 140, 1, 75, 140, 1, 253, 108, 140, 1, 181,
- 140, 1, 234, 138, 140, 1, 243, 110, 140, 1, 242, 225, 140, 1, 229, 159,
- 140, 1, 250, 219, 140, 1, 250, 92, 140, 1, 235, 139, 140, 1, 235, 115,
- 140, 1, 228, 23, 140, 1, 216, 115, 140, 1, 216, 105, 140, 1, 248, 86,
- 140, 1, 248, 70, 140, 1, 228, 198, 140, 1, 218, 52, 140, 1, 217, 161,
- 140, 1, 248, 164, 140, 1, 247, 232, 140, 1, 205, 140, 1, 193, 140, 1,
- 226, 23, 140, 1, 252, 107, 140, 1, 251, 195, 140, 1, 188, 140, 1, 186,
- 140, 1, 203, 140, 1, 233, 157, 140, 1, 221, 24, 140, 1, 219, 157, 140, 1,
- 222, 202, 140, 1, 159, 140, 5, 228, 60, 140, 5, 253, 91, 140, 30, 5, 254,
- 232, 140, 30, 5, 72, 140, 30, 5, 236, 28, 140, 30, 5, 69, 140, 30, 5,
- 215, 92, 140, 30, 5, 161, 149, 140, 30, 5, 161, 223, 82, 140, 30, 5, 74,
- 140, 30, 5, 254, 108, 140, 30, 5, 75, 140, 30, 5, 253, 108, 140, 5, 214,
- 133, 140, 1, 234, 130, 218, 52, 140, 253, 109, 233, 47, 77, 140, 1, 223,
- 81, 140, 1, 223, 192, 140, 1, 212, 160, 140, 1, 161, 223, 82, 140, 1,
- 161, 232, 214, 140, 30, 5, 161, 150, 140, 30, 5, 161, 232, 214, 140, 21,
- 212, 79, 140, 21, 116, 140, 21, 109, 140, 21, 166, 140, 21, 163, 140, 21,
- 180, 140, 21, 189, 140, 21, 198, 140, 21, 195, 140, 21, 200, 140, 1, 224,
- 77, 2, 231, 37, 247, 206, 140, 1, 224, 77, 2, 232, 163, 247, 206, 140,
- 223, 29, 77, 140, 223, 29, 52, 140, 249, 39, 228, 53, 116, 140, 249, 39,
- 228, 53, 109, 140, 249, 39, 228, 53, 166, 140, 249, 39, 228, 53, 163,
- 140, 249, 39, 228, 53, 122, 233, 40, 217, 154, 217, 149, 247, 255, 140,
- 249, 39, 248, 0, 220, 47, 140, 235, 159, 140, 243, 79, 77, 173, 5, 254,
- 159, 251, 166, 173, 5, 251, 166, 173, 5, 214, 128, 173, 1, 61, 173, 1,
- 254, 232, 173, 1, 72, 173, 1, 236, 28, 173, 1, 69, 173, 1, 215, 92, 173,
- 1, 245, 165, 173, 1, 254, 108, 173, 1, 227, 49, 173, 1, 253, 108, 173, 1,
- 181, 173, 1, 234, 138, 173, 1, 243, 110, 173, 1, 242, 225, 173, 1, 229,
- 159, 173, 1, 250, 219, 173, 1, 250, 92, 173, 1, 235, 139, 173, 1, 235,
- 115, 173, 1, 228, 23, 173, 1, 216, 115, 173, 1, 216, 105, 173, 1, 248,
- 86, 173, 1, 248, 70, 173, 1, 228, 198, 173, 1, 218, 52, 173, 1, 217, 161,
- 173, 1, 248, 164, 173, 1, 247, 232, 173, 1, 205, 173, 1, 193, 173, 1,
- 226, 23, 173, 1, 252, 107, 173, 1, 251, 195, 173, 1, 188, 173, 1, 186,
- 173, 1, 203, 173, 1, 233, 157, 173, 1, 232, 213, 173, 1, 215, 1, 173, 1,
- 221, 24, 173, 1, 222, 202, 173, 1, 159, 173, 5, 228, 60, 173, 30, 5, 254,
- 232, 173, 30, 5, 72, 173, 30, 5, 236, 28, 173, 30, 5, 69, 173, 30, 5,
- 215, 92, 173, 30, 5, 245, 165, 173, 30, 5, 254, 108, 173, 30, 5, 227, 49,
- 173, 30, 5, 253, 108, 173, 5, 214, 133, 173, 5, 215, 187, 173, 1, 234,
- 121, 173, 1, 242, 202, 173, 1, 212, 109, 173, 1, 223, 81, 173, 1, 244,
- 164, 173, 21, 212, 79, 173, 21, 116, 173, 21, 109, 173, 21, 166, 173, 21,
- 163, 173, 21, 180, 173, 21, 189, 173, 21, 198, 173, 21, 195, 173, 21,
- 200, 173, 217, 27, 173, 254, 158, 173, 235, 176, 173, 215, 117, 173, 245,
- 138, 227, 54, 173, 5, 213, 67, 164, 5, 250, 187, 164, 5, 253, 242, 164,
- 5, 214, 128, 164, 1, 61, 164, 1, 254, 232, 164, 1, 72, 164, 1, 236, 28,
- 164, 1, 69, 164, 1, 215, 92, 164, 1, 161, 149, 164, 1, 161, 150, 164, 30,
- 250, 190, 74, 164, 1, 74, 164, 1, 254, 108, 164, 30, 250, 190, 75, 164,
- 1, 75, 164, 1, 253, 108, 164, 1, 181, 164, 1, 234, 138, 164, 1, 243, 110,
- 164, 1, 242, 225, 164, 1, 229, 159, 164, 1, 250, 219, 164, 1, 250, 92,
- 164, 1, 235, 139, 164, 1, 235, 115, 164, 1, 228, 23, 164, 1, 216, 115,
- 164, 1, 216, 105, 164, 1, 248, 86, 164, 1, 248, 70, 164, 1, 228, 198,
- 164, 1, 218, 52, 164, 1, 217, 161, 164, 1, 248, 164, 164, 1, 247, 232,
- 164, 1, 205, 164, 1, 193, 164, 1, 226, 23, 164, 1, 252, 107, 164, 1, 251,
- 195, 164, 1, 188, 164, 1, 186, 164, 1, 203, 164, 1, 233, 157, 164, 1,
- 232, 213, 164, 1, 215, 1, 164, 1, 221, 24, 164, 1, 219, 157, 164, 1, 222,
- 202, 164, 1, 159, 164, 5, 228, 60, 164, 5, 253, 91, 164, 30, 5, 254, 232,
- 164, 30, 5, 72, 164, 30, 5, 236, 28, 164, 30, 5, 69, 164, 30, 5, 215, 92,
- 164, 30, 5, 161, 149, 164, 30, 5, 161, 223, 82, 164, 30, 5, 250, 190, 74,
- 164, 30, 5, 74, 164, 30, 5, 254, 108, 164, 30, 5, 250, 190, 75, 164, 30,
- 5, 75, 164, 30, 5, 253, 108, 164, 5, 214, 133, 164, 227, 70, 164, 1, 161,
- 223, 82, 164, 1, 161, 232, 214, 164, 30, 5, 161, 150, 164, 30, 5, 161,
- 232, 214, 164, 21, 212, 79, 164, 21, 116, 164, 21, 109, 164, 21, 166,
- 164, 21, 163, 164, 21, 180, 164, 21, 189, 164, 21, 198, 164, 21, 195,
- 164, 21, 200, 164, 223, 29, 52, 147, 5, 250, 187, 147, 5, 253, 242, 147,
- 5, 214, 128, 147, 1, 61, 147, 1, 254, 232, 147, 1, 72, 147, 1, 236, 28,
- 147, 1, 69, 147, 1, 215, 92, 147, 1, 161, 149, 147, 1, 161, 150, 147, 1,
- 74, 147, 1, 254, 108, 147, 1, 75, 147, 1, 253, 108, 147, 1, 181, 147, 1,
- 234, 138, 147, 1, 243, 110, 147, 1, 242, 225, 147, 1, 229, 159, 147, 1,
- 250, 219, 147, 1, 250, 92, 147, 1, 235, 139, 147, 1, 235, 115, 147, 1,
- 228, 23, 147, 1, 216, 115, 147, 1, 216, 105, 147, 1, 248, 86, 147, 1,
- 248, 70, 147, 1, 228, 198, 147, 1, 218, 52, 147, 1, 217, 161, 147, 1,
- 248, 164, 147, 1, 247, 232, 147, 1, 205, 147, 1, 193, 147, 1, 226, 23,
- 147, 1, 252, 107, 147, 1, 251, 195, 147, 1, 188, 147, 1, 186, 147, 1,
- 203, 147, 1, 233, 157, 147, 1, 232, 213, 147, 1, 215, 1, 147, 1, 221, 24,
- 147, 1, 219, 157, 147, 1, 222, 202, 147, 1, 159, 147, 5, 228, 60, 147, 5,
- 253, 91, 147, 30, 5, 254, 232, 147, 30, 5, 72, 147, 30, 5, 236, 28, 147,
- 30, 5, 69, 147, 30, 5, 215, 92, 147, 30, 5, 161, 149, 147, 30, 5, 161,
- 223, 82, 147, 30, 5, 74, 147, 30, 5, 254, 108, 147, 30, 5, 75, 147, 30,
- 5, 253, 108, 147, 5, 214, 133, 147, 254, 109, 233, 47, 77, 147, 253, 109,
- 233, 47, 77, 147, 1, 223, 81, 147, 1, 223, 192, 147, 1, 212, 160, 147, 1,
- 161, 223, 82, 147, 1, 161, 232, 214, 147, 30, 5, 161, 150, 147, 30, 5,
- 161, 232, 214, 147, 21, 212, 79, 147, 21, 116, 147, 21, 109, 147, 21,
- 166, 147, 21, 163, 147, 21, 180, 147, 21, 189, 147, 21, 198, 147, 21,
- 195, 147, 21, 200, 147, 235, 159, 147, 1, 214, 49, 147, 243, 228, 122,
- 224, 166, 147, 243, 228, 122, 242, 9, 147, 243, 228, 133, 224, 164, 147,
- 243, 228, 122, 220, 45, 147, 243, 228, 122, 245, 145, 147, 243, 228, 133,
- 220, 44, 178, 5, 253, 242, 178, 5, 214, 128, 178, 1, 61, 178, 1, 254,
- 232, 178, 1, 72, 178, 1, 236, 28, 178, 1, 69, 178, 1, 215, 92, 178, 1,
- 74, 178, 1, 245, 165, 178, 1, 254, 108, 178, 1, 75, 178, 1, 227, 49, 178,
- 1, 253, 108, 178, 1, 181, 178, 1, 229, 159, 178, 1, 250, 219, 178, 1,
- 235, 139, 178, 1, 228, 23, 178, 1, 216, 115, 178, 1, 228, 198, 178, 1,
- 218, 52, 178, 1, 205, 178, 1, 228, 189, 178, 1, 193, 178, 1, 188, 178, 1,
- 186, 178, 1, 203, 178, 1, 223, 81, 178, 1, 233, 157, 178, 1, 232, 213,
- 178, 1, 232, 212, 178, 1, 215, 1, 178, 1, 221, 24, 178, 1, 219, 157, 178,
- 1, 222, 202, 178, 1, 159, 178, 30, 5, 254, 232, 178, 30, 5, 72, 178, 30,
- 5, 236, 28, 178, 30, 5, 69, 178, 30, 5, 215, 92, 178, 30, 5, 74, 178, 30,
- 5, 245, 165, 178, 30, 5, 254, 108, 178, 30, 5, 75, 178, 30, 5, 227, 49,
- 178, 30, 5, 253, 108, 178, 5, 214, 133, 178, 227, 70, 178, 253, 109, 233,
- 47, 77, 178, 21, 212, 79, 178, 21, 116, 178, 21, 109, 178, 21, 166, 178,
- 21, 163, 178, 21, 180, 178, 21, 189, 178, 21, 198, 178, 21, 195, 178, 21,
- 200, 178, 50, 217, 200, 178, 50, 122, 240, 200, 178, 50, 122, 217, 100,
- 178, 248, 92, 52, 178, 230, 205, 52, 178, 213, 36, 52, 178, 248, 38, 52,
- 178, 249, 79, 52, 178, 253, 153, 78, 52, 178, 223, 29, 52, 178, 50, 52,
- 139, 5, 250, 187, 139, 5, 253, 242, 139, 5, 214, 128, 139, 1, 61, 139, 1,
- 254, 232, 139, 1, 72, 139, 1, 236, 28, 139, 1, 69, 139, 1, 215, 92, 139,
- 1, 161, 149, 139, 1, 161, 150, 139, 1, 74, 139, 1, 245, 165, 139, 1, 254,
- 108, 139, 1, 75, 139, 1, 227, 49, 139, 1, 253, 108, 139, 1, 181, 139, 1,
- 234, 138, 139, 1, 243, 110, 139, 1, 242, 225, 139, 1, 229, 159, 139, 1,
- 250, 219, 139, 1, 250, 92, 139, 1, 235, 139, 139, 1, 235, 115, 139, 1,
- 228, 23, 139, 1, 216, 115, 139, 1, 216, 105, 139, 1, 248, 86, 139, 1,
- 248, 70, 139, 1, 228, 198, 139, 1, 218, 52, 139, 1, 217, 161, 139, 1,
- 248, 164, 139, 1, 247, 232, 139, 1, 205, 139, 1, 193, 139, 1, 226, 23,
- 139, 1, 252, 107, 139, 1, 251, 195, 139, 1, 188, 139, 1, 186, 139, 1,
- 203, 139, 1, 223, 81, 139, 1, 233, 157, 139, 1, 232, 213, 139, 1, 215, 1,
- 139, 1, 221, 24, 139, 1, 219, 157, 139, 1, 222, 202, 139, 1, 159, 139, 5,
- 253, 91, 139, 30, 5, 254, 232, 139, 30, 5, 72, 139, 30, 5, 236, 28, 139,
- 30, 5, 69, 139, 30, 5, 215, 92, 139, 30, 5, 161, 149, 139, 30, 5, 161,
- 223, 82, 139, 30, 5, 74, 139, 30, 5, 245, 165, 139, 30, 5, 254, 108, 139,
- 30, 5, 75, 139, 30, 5, 227, 49, 139, 30, 5, 253, 108, 139, 5, 214, 133,
- 139, 233, 47, 77, 139, 254, 109, 233, 47, 77, 139, 1, 216, 141, 139, 1,
- 245, 249, 139, 1, 161, 223, 82, 139, 1, 161, 232, 214, 139, 30, 5, 161,
- 150, 139, 30, 5, 161, 232, 214, 139, 21, 212, 79, 139, 21, 116, 139, 21,
- 109, 139, 21, 166, 139, 21, 163, 139, 21, 180, 139, 21, 189, 139, 21,
- 198, 139, 21, 195, 139, 21, 200, 139, 243, 228, 21, 212, 80, 31, 227,
- 102, 225, 103, 65, 163, 139, 243, 228, 21, 122, 31, 227, 102, 225, 103,
- 65, 163, 139, 243, 228, 21, 117, 31, 227, 102, 225, 103, 65, 163, 139,
- 243, 228, 21, 133, 31, 227, 102, 225, 103, 65, 163, 139, 243, 228, 21,
- 122, 31, 245, 9, 225, 103, 65, 163, 139, 243, 228, 21, 117, 31, 245, 9,
- 225, 103, 65, 163, 139, 243, 228, 21, 133, 31, 245, 9, 225, 103, 65, 163,
- 139, 5, 216, 49, 155, 5, 253, 242, 155, 5, 214, 128, 155, 1, 61, 155, 1,
- 254, 232, 155, 1, 72, 155, 1, 236, 28, 155, 1, 69, 155, 1, 215, 92, 155,
- 1, 161, 149, 155, 1, 161, 150, 155, 1, 74, 155, 1, 245, 165, 155, 1, 254,
- 108, 155, 1, 75, 155, 1, 227, 49, 155, 1, 253, 108, 155, 1, 181, 155, 1,
- 234, 138, 155, 1, 243, 110, 155, 1, 242, 225, 155, 1, 229, 159, 155, 1,
- 250, 219, 155, 1, 250, 92, 155, 1, 235, 139, 155, 1, 235, 115, 155, 1,
- 228, 23, 155, 1, 216, 115, 155, 1, 216, 105, 155, 1, 248, 86, 155, 1,
- 248, 70, 155, 1, 228, 198, 155, 1, 218, 52, 155, 1, 217, 161, 155, 1,
- 248, 164, 155, 1, 247, 232, 155, 1, 205, 155, 1, 193, 155, 1, 226, 23,
- 155, 1, 252, 107, 155, 1, 251, 195, 155, 1, 188, 155, 1, 186, 155, 1,
- 203, 155, 1, 223, 81, 155, 1, 233, 157, 155, 1, 232, 213, 155, 1, 215, 1,
- 155, 1, 221, 24, 155, 1, 219, 157, 155, 1, 222, 202, 155, 1, 159, 155, 5,
- 228, 60, 155, 5, 253, 91, 155, 30, 5, 254, 232, 155, 30, 5, 72, 155, 30,
- 5, 236, 28, 155, 30, 5, 69, 155, 30, 5, 215, 92, 155, 30, 5, 161, 149,
- 155, 30, 5, 161, 223, 82, 155, 30, 5, 74, 155, 30, 5, 245, 165, 155, 30,
- 5, 254, 108, 155, 30, 5, 75, 155, 30, 5, 227, 49, 155, 30, 5, 253, 108,
- 155, 5, 214, 133, 155, 233, 47, 77, 155, 254, 109, 233, 47, 77, 155, 1,
- 244, 164, 155, 1, 161, 223, 82, 155, 1, 161, 232, 214, 155, 30, 5, 161,
- 150, 155, 30, 5, 161, 232, 214, 155, 21, 212, 79, 155, 21, 116, 155, 21,
- 109, 155, 21, 166, 155, 21, 163, 155, 21, 180, 155, 21, 189, 155, 21,
- 198, 155, 21, 195, 155, 21, 200, 155, 5, 235, 104, 155, 5, 215, 132, 130,
- 5, 253, 242, 130, 5, 214, 128, 130, 1, 61, 130, 1, 254, 232, 130, 1, 72,
- 130, 1, 236, 28, 130, 1, 69, 130, 1, 215, 92, 130, 1, 161, 149, 130, 1,
- 161, 150, 130, 1, 74, 130, 1, 245, 165, 130, 1, 254, 108, 130, 1, 75,
- 130, 1, 227, 49, 130, 1, 253, 108, 130, 1, 181, 130, 1, 234, 138, 130, 1,
- 243, 110, 130, 1, 242, 225, 130, 1, 229, 159, 130, 1, 250, 219, 130, 1,
- 250, 92, 130, 1, 235, 139, 130, 1, 235, 115, 130, 1, 228, 23, 130, 1,
- 216, 115, 130, 1, 216, 105, 130, 1, 248, 86, 130, 1, 248, 70, 130, 1,
- 228, 198, 130, 1, 218, 52, 130, 1, 217, 161, 130, 1, 248, 164, 130, 1,
- 247, 232, 130, 1, 205, 130, 1, 228, 189, 130, 1, 193, 130, 1, 226, 23,
- 130, 1, 252, 107, 130, 1, 251, 195, 130, 1, 188, 130, 1, 186, 130, 1,
- 203, 130, 1, 223, 81, 130, 1, 233, 157, 130, 1, 232, 213, 130, 1, 232,
- 212, 130, 1, 215, 1, 130, 1, 221, 24, 130, 1, 219, 157, 130, 1, 222, 202,
- 130, 1, 159, 130, 1, 216, 88, 130, 5, 253, 91, 130, 30, 5, 254, 232, 130,
- 30, 5, 72, 130, 30, 5, 236, 28, 130, 30, 5, 69, 130, 30, 5, 215, 92, 130,
- 30, 5, 161, 149, 130, 30, 5, 161, 223, 82, 130, 30, 5, 74, 130, 30, 5,
- 245, 165, 130, 30, 5, 254, 108, 130, 30, 5, 75, 130, 30, 5, 227, 49, 130,
- 30, 5, 253, 108, 130, 5, 214, 133, 130, 1, 62, 223, 225, 130, 253, 109,
- 233, 47, 77, 130, 1, 161, 223, 82, 130, 1, 161, 232, 214, 130, 30, 5,
- 161, 150, 130, 30, 5, 161, 232, 214, 130, 21, 212, 79, 130, 21, 116, 130,
- 21, 109, 130, 21, 166, 130, 21, 163, 130, 21, 180, 130, 21, 189, 130, 21,
- 198, 130, 21, 195, 130, 21, 200, 130, 50, 217, 200, 130, 50, 122, 240,
- 200, 130, 50, 122, 217, 100, 130, 243, 228, 122, 224, 166, 130, 243, 228,
- 122, 242, 9, 130, 243, 228, 133, 224, 164, 130, 248, 96, 77, 130, 1, 250,
- 36, 228, 199, 130, 1, 250, 36, 204, 130, 1, 250, 36, 223, 82, 130, 1,
- 250, 36, 150, 130, 1, 250, 36, 232, 214, 130, 1, 250, 36, 235, 27, 172,
- 5, 253, 241, 172, 5, 214, 127, 172, 1, 253, 81, 172, 1, 254, 187, 172, 1,
- 254, 128, 172, 1, 254, 143, 172, 1, 235, 149, 172, 1, 236, 27, 172, 1,
- 215, 84, 172, 1, 215, 86, 172, 1, 235, 171, 172, 1, 235, 172, 172, 1,
- 236, 13, 172, 1, 236, 15, 172, 1, 244, 241, 172, 1, 245, 161, 172, 1,
- 254, 96, 172, 1, 226, 232, 172, 1, 227, 43, 172, 1, 253, 94, 172, 1, 254,
- 55, 234, 193, 172, 1, 232, 14, 234, 193, 172, 1, 254, 55, 243, 58, 172,
- 1, 232, 14, 243, 58, 172, 1, 234, 234, 230, 40, 172, 1, 222, 152, 243,
- 58, 172, 1, 254, 55, 250, 149, 172, 1, 232, 14, 250, 149, 172, 1, 254,
- 55, 235, 128, 172, 1, 232, 14, 235, 128, 172, 1, 218, 46, 230, 40, 172,
- 1, 218, 46, 222, 151, 230, 41, 172, 1, 222, 152, 235, 128, 172, 1, 254,
- 55, 216, 113, 172, 1, 232, 14, 216, 113, 172, 1, 254, 55, 248, 77, 172,
- 1, 232, 14, 248, 77, 172, 1, 230, 124, 230, 2, 172, 1, 222, 152, 248, 77,
- 172, 1, 254, 55, 217, 237, 172, 1, 232, 14, 217, 237, 172, 1, 254, 55,
- 248, 90, 172, 1, 232, 14, 248, 90, 172, 1, 248, 119, 230, 2, 172, 1, 222,
- 152, 248, 90, 172, 1, 254, 55, 226, 102, 172, 1, 232, 14, 226, 102, 172,
- 1, 254, 55, 252, 32, 172, 1, 232, 14, 252, 32, 172, 1, 231, 195, 172, 1,
- 254, 40, 252, 32, 172, 1, 213, 42, 172, 1, 224, 26, 172, 1, 248, 119,
- 233, 91, 172, 1, 214, 234, 172, 1, 218, 46, 222, 128, 172, 1, 230, 124,
- 222, 128, 172, 1, 248, 119, 222, 128, 172, 1, 241, 226, 172, 1, 230, 124,
- 233, 91, 172, 1, 244, 125, 172, 5, 254, 85, 172, 30, 5, 254, 138, 172,
- 30, 5, 234, 161, 254, 145, 172, 30, 5, 247, 180, 254, 145, 172, 30, 5,
- 234, 161, 235, 168, 172, 30, 5, 247, 180, 235, 168, 172, 30, 5, 234, 161,
- 226, 212, 172, 30, 5, 247, 180, 226, 212, 172, 30, 5, 243, 99, 172, 30,
- 5, 234, 24, 172, 30, 5, 247, 180, 234, 24, 172, 30, 5, 234, 26, 248, 18,
- 172, 30, 5, 234, 25, 242, 28, 254, 138, 172, 30, 5, 234, 25, 242, 28,
- 247, 180, 254, 138, 172, 30, 5, 234, 25, 242, 28, 243, 57, 172, 30, 5,
- 243, 57, 172, 30, 5, 247, 180, 243, 99, 172, 30, 5, 247, 180, 243, 57,
- 172, 225, 27, 233, 228, 154, 137, 234, 38, 234, 250, 154, 137, 234, 114,
- 234, 134, 154, 137, 234, 114, 234, 107, 154, 137, 234, 114, 234, 104,
- 154, 137, 234, 114, 234, 111, 154, 137, 234, 114, 224, 46, 154, 137, 229,
- 91, 229, 78, 154, 137, 250, 24, 250, 83, 154, 137, 250, 24, 250, 32, 154,
- 137, 250, 24, 250, 82, 154, 137, 219, 243, 219, 242, 154, 137, 250, 24,
- 250, 20, 154, 137, 212, 236, 212, 243, 154, 137, 247, 100, 250, 89, 154,
- 137, 211, 211, 226, 111, 154, 137, 217, 110, 217, 153, 154, 137, 217,
- 110, 230, 21, 154, 137, 217, 110, 225, 243, 154, 137, 228, 186, 229, 180,
- 154, 137, 247, 100, 248, 19, 154, 137, 211, 211, 218, 6, 154, 137, 217,
- 110, 217, 85, 154, 137, 217, 110, 217, 157, 154, 137, 217, 110, 217, 107,
- 154, 137, 228, 186, 228, 92, 154, 137, 251, 129, 252, 83, 154, 137, 225,
- 151, 225, 174, 154, 137, 225, 254, 225, 245, 154, 137, 244, 13, 244, 164,
- 154, 137, 225, 254, 226, 17, 154, 137, 244, 13, 244, 141, 154, 137, 225,
- 254, 222, 162, 154, 137, 230, 232, 188, 154, 137, 212, 236, 213, 68, 154,
- 137, 223, 113, 223, 50, 154, 137, 223, 51, 154, 137, 232, 209, 232, 235,
- 154, 137, 232, 156, 154, 137, 213, 215, 214, 45, 154, 137, 219, 243, 222,
- 177, 154, 137, 219, 243, 223, 25, 154, 137, 219, 243, 219, 26, 154, 137,
- 241, 55, 241, 145, 154, 137, 232, 209, 250, 5, 154, 137, 157, 254, 24,
- 154, 137, 241, 55, 228, 181, 154, 137, 226, 195, 154, 137, 222, 146, 61,
- 154, 137, 232, 9, 242, 0, 154, 137, 222, 146, 254, 232, 154, 137, 222,
- 146, 254, 45, 154, 137, 222, 146, 72, 154, 137, 222, 146, 236, 28, 154,
- 137, 222, 146, 215, 183, 154, 137, 222, 146, 215, 181, 154, 137, 222,
- 146, 69, 154, 137, 222, 146, 215, 92, 154, 137, 226, 0, 154, 249, 39, 16,
- 252, 84, 154, 137, 222, 146, 74, 154, 137, 222, 146, 254, 148, 154, 137,
- 222, 146, 75, 154, 137, 222, 146, 254, 109, 232, 4, 154, 137, 222, 146,
- 254, 109, 232, 5, 154, 137, 233, 130, 154, 137, 232, 1, 154, 137, 232, 2,
- 154, 137, 232, 9, 245, 137, 154, 137, 232, 9, 217, 109, 154, 137, 232, 9,
- 216, 186, 154, 137, 232, 9, 250, 71, 154, 137, 217, 151, 154, 137, 229,
- 36, 154, 137, 213, 62, 154, 137, 244, 4, 154, 21, 212, 79, 154, 21, 116,
- 154, 21, 109, 154, 21, 166, 154, 21, 163, 154, 21, 180, 154, 21, 189,
- 154, 21, 198, 154, 21, 195, 154, 21, 200, 154, 137, 254, 20, 154, 137,
- 234, 112, 233, 112, 1, 234, 37, 233, 112, 1, 234, 114, 218, 235, 233,
- 112, 1, 234, 114, 218, 13, 233, 112, 1, 229, 90, 233, 112, 1, 249, 175,
- 233, 112, 1, 219, 243, 218, 13, 233, 112, 1, 227, 253, 233, 112, 1, 247,
- 99, 233, 112, 1, 108, 233, 112, 1, 217, 110, 218, 235, 233, 112, 1, 217,
- 110, 218, 13, 233, 112, 1, 228, 185, 233, 112, 1, 251, 128, 233, 112, 1,
- 225, 150, 233, 112, 1, 225, 254, 218, 235, 233, 112, 1, 244, 13, 218, 13,
- 233, 112, 1, 225, 254, 218, 13, 233, 112, 1, 244, 13, 218, 235, 233, 112,
- 1, 230, 231, 233, 112, 1, 212, 235, 233, 112, 1, 232, 209, 232, 235, 233,
- 112, 1, 232, 209, 232, 176, 233, 112, 1, 213, 214, 233, 112, 1, 219, 243,
- 218, 235, 233, 112, 1, 241, 55, 218, 235, 233, 112, 1, 75, 233, 112, 1,
- 241, 55, 218, 13, 233, 112, 245, 120, 233, 112, 30, 5, 61, 233, 112, 30,
- 5, 232, 9, 234, 239, 233, 112, 30, 5, 254, 232, 233, 112, 30, 5, 254, 45,
- 233, 112, 30, 5, 72, 233, 112, 30, 5, 236, 28, 233, 112, 30, 5, 213, 105,
- 233, 112, 30, 5, 212, 161, 233, 112, 30, 5, 69, 233, 112, 30, 5, 215, 92,
- 233, 112, 30, 5, 232, 9, 234, 22, 233, 112, 221, 65, 5, 232, 208, 233,
- 112, 221, 65, 5, 227, 253, 233, 112, 30, 5, 74, 233, 112, 30, 5, 245,
- 152, 233, 112, 30, 5, 75, 233, 112, 30, 5, 253, 83, 233, 112, 30, 5, 254,
- 108, 233, 112, 234, 38, 233, 157, 233, 112, 160, 232, 9, 245, 137, 233,
- 112, 160, 232, 9, 217, 109, 233, 112, 160, 232, 9, 217, 71, 233, 112,
- 160, 232, 9, 250, 155, 233, 112, 250, 192, 77, 233, 112, 229, 45, 233,
- 112, 21, 212, 79, 233, 112, 21, 116, 233, 112, 21, 109, 233, 112, 21,
- 166, 233, 112, 21, 163, 233, 112, 21, 180, 233, 112, 21, 189, 233, 112,
- 21, 198, 233, 112, 21, 195, 233, 112, 21, 200, 233, 112, 241, 55, 228,
- 185, 233, 112, 241, 55, 230, 231, 60, 4, 227, 70, 60, 152, 242, 94, 212,
- 247, 231, 59, 216, 147, 61, 60, 152, 242, 94, 212, 247, 231, 59, 255, 62,
- 223, 117, 251, 253, 188, 60, 152, 242, 94, 212, 247, 231, 59, 255, 62,
- 242, 94, 216, 131, 188, 60, 152, 70, 212, 247, 231, 59, 231, 158, 188,
- 60, 152, 249, 189, 212, 247, 231, 59, 221, 30, 188, 60, 152, 250, 171,
- 212, 247, 231, 59, 225, 244, 221, 18, 188, 60, 152, 212, 247, 231, 59,
- 216, 131, 221, 18, 188, 60, 152, 222, 126, 221, 17, 60, 152, 251, 57,
- 212, 247, 231, 58, 60, 152, 251, 146, 220, 183, 212, 247, 231, 58, 60,
- 152, 235, 194, 216, 130, 60, 152, 248, 12, 216, 131, 251, 56, 60, 152,
- 221, 17, 60, 152, 228, 2, 221, 17, 60, 152, 216, 131, 221, 17, 60, 152,
- 228, 2, 216, 131, 221, 17, 60, 152, 223, 133, 250, 59, 219, 168, 221, 17,
- 60, 152, 223, 195, 242, 122, 221, 17, 60, 152, 250, 171, 255, 66, 223,
- 55, 231, 157, 184, 250, 195, 60, 152, 242, 94, 216, 130, 60, 232, 197, 5,
- 250, 90, 223, 54, 60, 232, 197, 5, 233, 23, 223, 54, 60, 253, 128, 5,
- 221, 27, 243, 41, 255, 67, 223, 54, 60, 253, 128, 5, 255, 64, 193, 60,
- 253, 128, 5, 222, 101, 216, 126, 60, 5, 224, 23, 247, 111, 243, 40, 60,
- 5, 224, 23, 247, 111, 242, 152, 60, 5, 224, 23, 247, 111, 242, 95, 60, 5,
- 224, 23, 230, 37, 243, 40, 60, 5, 224, 23, 230, 37, 242, 152, 60, 5, 224,
- 23, 247, 111, 224, 23, 230, 36, 60, 21, 212, 79, 60, 21, 116, 60, 21,
- 109, 60, 21, 166, 60, 21, 163, 60, 21, 180, 60, 21, 189, 60, 21, 198, 60,
- 21, 195, 60, 21, 200, 60, 21, 151, 116, 60, 21, 151, 109, 60, 21, 151,
- 166, 60, 21, 151, 163, 60, 21, 151, 180, 60, 21, 151, 189, 60, 21, 151,
- 198, 60, 21, 151, 195, 60, 21, 151, 200, 60, 21, 151, 212, 79, 60, 152,
- 251, 59, 223, 54, 60, 152, 229, 151, 250, 254, 228, 11, 212, 18, 60, 152,
- 250, 171, 255, 66, 223, 55, 250, 255, 231, 15, 250, 195, 60, 152, 229,
- 151, 250, 254, 221, 28, 223, 54, 60, 152, 250, 68, 231, 58, 60, 152, 216,
- 142, 255, 63, 60, 152, 242, 81, 223, 55, 242, 44, 60, 152, 242, 81, 223,
- 55, 242, 50, 60, 152, 254, 25, 234, 129, 242, 44, 60, 152, 254, 25, 234,
- 129, 242, 50, 60, 5, 213, 55, 216, 129, 60, 5, 231, 230, 216, 129, 60, 1,
- 181, 60, 1, 234, 138, 60, 1, 243, 110, 60, 1, 242, 225, 60, 1, 229, 159,
- 60, 1, 250, 219, 60, 1, 250, 92, 60, 1, 235, 139, 60, 1, 228, 23, 60, 1,
- 216, 115, 60, 1, 216, 105, 60, 1, 248, 86, 60, 1, 248, 70, 60, 1, 228,
- 198, 60, 1, 218, 52, 60, 1, 217, 161, 60, 1, 248, 164, 60, 1, 247, 232,
- 60, 1, 205, 60, 1, 193, 60, 1, 226, 23, 60, 1, 252, 107, 60, 1, 251, 195,
- 60, 1, 188, 60, 1, 216, 141, 60, 1, 216, 133, 60, 1, 245, 249, 60, 1,
- 245, 244, 60, 1, 214, 49, 60, 1, 212, 75, 60, 1, 212, 109, 60, 1, 255,
- 69, 60, 1, 186, 60, 1, 203, 60, 1, 233, 157, 60, 1, 221, 24, 60, 1, 219,
- 157, 60, 1, 222, 202, 60, 1, 159, 60, 1, 61, 60, 1, 233, 241, 60, 1, 244,
- 46, 203, 60, 1, 234, 55, 60, 1, 223, 81, 60, 30, 5, 254, 232, 60, 30, 5,
- 72, 60, 30, 5, 236, 28, 60, 30, 5, 69, 60, 30, 5, 215, 92, 60, 30, 5,
- 161, 149, 60, 30, 5, 161, 223, 82, 60, 30, 5, 161, 150, 60, 30, 5, 161,
- 232, 214, 60, 30, 5, 74, 60, 30, 5, 245, 165, 60, 30, 5, 75, 60, 30, 5,
- 227, 49, 60, 5, 223, 118, 219, 28, 229, 160, 223, 112, 60, 5, 223, 117,
- 251, 252, 60, 30, 5, 223, 202, 72, 60, 30, 5, 223, 202, 236, 28, 60, 5,
- 228, 11, 212, 19, 230, 44, 248, 164, 60, 5, 219, 255, 233, 84, 60, 152,
- 242, 11, 60, 152, 226, 184, 60, 5, 233, 87, 223, 54, 60, 5, 213, 59, 223,
- 54, 60, 5, 233, 88, 216, 142, 250, 195, 60, 5, 231, 159, 250, 195, 60, 5,
- 242, 97, 250, 196, 223, 193, 60, 5, 242, 97, 231, 150, 223, 193, 60, 5,
- 235, 191, 231, 159, 250, 195, 60, 219, 18, 5, 233, 88, 216, 142, 250,
- 195, 60, 219, 18, 5, 231, 159, 250, 195, 60, 219, 18, 5, 235, 191, 231,
- 159, 250, 195, 60, 219, 18, 1, 181, 60, 219, 18, 1, 234, 138, 60, 219,
- 18, 1, 243, 110, 60, 219, 18, 1, 242, 225, 60, 219, 18, 1, 229, 159, 60,
- 219, 18, 1, 250, 219, 60, 219, 18, 1, 250, 92, 60, 219, 18, 1, 235, 139,
- 60, 219, 18, 1, 228, 23, 60, 219, 18, 1, 216, 115, 60, 219, 18, 1, 216,
- 105, 60, 219, 18, 1, 248, 86, 60, 219, 18, 1, 248, 70, 60, 219, 18, 1,
- 228, 198, 60, 219, 18, 1, 218, 52, 60, 219, 18, 1, 217, 161, 60, 219, 18,
- 1, 248, 164, 60, 219, 18, 1, 247, 232, 60, 219, 18, 1, 205, 60, 219, 18,
- 1, 193, 60, 219, 18, 1, 226, 23, 60, 219, 18, 1, 252, 107, 60, 219, 18,
- 1, 251, 195, 60, 219, 18, 1, 188, 60, 219, 18, 1, 216, 141, 60, 219, 18,
- 1, 216, 133, 60, 219, 18, 1, 245, 249, 60, 219, 18, 1, 245, 244, 60, 219,
- 18, 1, 214, 49, 60, 219, 18, 1, 212, 75, 60, 219, 18, 1, 212, 109, 60,
- 219, 18, 1, 255, 69, 60, 219, 18, 1, 186, 60, 219, 18, 1, 203, 60, 219,
- 18, 1, 233, 157, 60, 219, 18, 1, 221, 24, 60, 219, 18, 1, 219, 157, 60,
- 219, 18, 1, 222, 202, 60, 219, 18, 1, 159, 60, 219, 18, 1, 61, 60, 219,
- 18, 1, 233, 241, 60, 219, 18, 1, 244, 46, 214, 49, 60, 219, 18, 1, 244,
- 46, 186, 60, 219, 18, 1, 244, 46, 203, 60, 233, 239, 223, 52, 234, 138,
- 60, 233, 239, 223, 52, 234, 139, 250, 255, 231, 15, 250, 195, 60, 250,
- 184, 5, 107, 251, 246, 60, 250, 184, 5, 177, 251, 246, 60, 250, 184, 5,
- 250, 185, 217, 228, 60, 250, 184, 5, 222, 125, 255, 68, 60, 16, 246, 46,
- 251, 54, 60, 16, 224, 22, 223, 119, 60, 16, 226, 202, 243, 39, 60, 16,
- 224, 22, 223, 120, 223, 195, 242, 121, 60, 16, 225, 244, 193, 60, 16,
- 228, 170, 251, 54, 60, 16, 228, 170, 251, 55, 228, 2, 255, 65, 60, 16,
- 228, 170, 251, 55, 242, 96, 255, 65, 60, 16, 228, 170, 251, 55, 250, 255,
- 255, 65, 60, 5, 224, 23, 230, 37, 224, 23, 247, 110, 60, 5, 224, 23, 230,
- 37, 242, 95, 60, 152, 251, 58, 220, 183, 242, 191, 231, 59, 223, 194, 60,
- 152, 230, 233, 212, 247, 242, 191, 231, 59, 223, 194, 60, 152, 228, 2,
- 216, 130, 60, 152, 70, 251, 79, 223, 114, 212, 247, 231, 59, 231, 158,
- 188, 60, 152, 249, 189, 251, 79, 223, 114, 212, 247, 231, 59, 221, 30,
- 188, 223, 147, 218, 200, 52, 233, 69, 218, 200, 52, 223, 147, 218, 200,
- 5, 2, 247, 72, 233, 69, 218, 200, 5, 2, 247, 72, 60, 152, 233, 79, 231,
- 160, 223, 54, 60, 152, 216, 207, 231, 160, 223, 54, 64, 1, 181, 64, 1,
- 234, 138, 64, 1, 243, 110, 64, 1, 242, 225, 64, 1, 229, 159, 64, 1, 250,
- 219, 64, 1, 250, 92, 64, 1, 235, 139, 64, 1, 235, 115, 64, 1, 228, 23,
- 64, 1, 228, 187, 64, 1, 216, 115, 64, 1, 216, 105, 64, 1, 248, 86, 64, 1,
- 248, 70, 64, 1, 228, 198, 64, 1, 218, 52, 64, 1, 217, 161, 64, 1, 248,
- 164, 64, 1, 247, 232, 64, 1, 205, 64, 1, 193, 64, 1, 226, 23, 64, 1, 252,
- 107, 64, 1, 251, 195, 64, 1, 188, 64, 1, 186, 64, 1, 203, 64, 1, 233,
- 157, 64, 1, 214, 49, 64, 1, 222, 202, 64, 1, 159, 64, 1, 232, 213, 64, 1,
- 61, 64, 1, 221, 9, 61, 64, 1, 72, 64, 1, 236, 28, 64, 1, 69, 64, 1, 215,
- 92, 64, 1, 74, 64, 1, 230, 221, 74, 64, 1, 75, 64, 1, 253, 108, 64, 30,
- 5, 218, 15, 254, 232, 64, 30, 5, 254, 232, 64, 30, 5, 72, 64, 30, 5, 236,
- 28, 64, 30, 5, 69, 64, 30, 5, 215, 92, 64, 30, 5, 74, 64, 30, 5, 254,
- 108, 64, 30, 5, 230, 221, 236, 28, 64, 30, 5, 230, 221, 75, 64, 30, 5,
- 191, 49, 64, 5, 253, 242, 64, 5, 62, 55, 64, 5, 214, 128, 64, 5, 214,
- 133, 64, 5, 253, 150, 64, 249, 133, 5, 138, 186, 64, 249, 133, 5, 138,
- 203, 64, 249, 133, 5, 138, 214, 49, 64, 249, 133, 5, 138, 159, 64, 1,
- 242, 109, 222, 202, 64, 21, 212, 79, 64, 21, 116, 64, 21, 109, 64, 21,
- 166, 64, 21, 163, 64, 21, 180, 64, 21, 189, 64, 21, 198, 64, 21, 195, 64,
- 21, 200, 64, 5, 232, 221, 222, 91, 64, 5, 222, 91, 64, 16, 232, 205, 64,
- 16, 249, 152, 64, 16, 254, 125, 64, 16, 243, 24, 64, 1, 221, 24, 64, 1,
- 219, 157, 64, 1, 161, 149, 64, 1, 161, 223, 82, 64, 1, 161, 150, 64, 1,
- 161, 232, 214, 64, 30, 5, 161, 149, 64, 30, 5, 161, 223, 82, 64, 30, 5,
- 161, 150, 64, 30, 5, 161, 232, 214, 64, 1, 230, 221, 229, 159, 64, 1,
- 230, 221, 235, 115, 64, 1, 230, 221, 252, 31, 64, 1, 230, 221, 252, 26,
- 64, 249, 133, 5, 230, 221, 138, 205, 64, 249, 133, 5, 230, 221, 138, 188,
- 64, 249, 133, 5, 230, 221, 138, 233, 157, 64, 1, 221, 29, 234, 218, 221,
- 24, 64, 30, 5, 221, 29, 234, 218, 245, 22, 64, 160, 152, 221, 29, 234,
- 218, 241, 230, 64, 160, 152, 221, 29, 234, 218, 234, 189, 225, 253, 64,
- 1, 213, 248, 224, 252, 234, 218, 217, 161, 64, 1, 213, 248, 224, 252,
- 234, 218, 225, 2, 64, 30, 5, 213, 248, 224, 252, 234, 218, 245, 22, 64,
- 30, 5, 213, 248, 224, 252, 234, 218, 215, 183, 64, 5, 213, 248, 224, 252,
- 234, 218, 216, 240, 64, 5, 213, 248, 224, 252, 234, 218, 216, 239, 64, 5,
- 213, 248, 224, 252, 234, 218, 216, 238, 64, 5, 213, 248, 224, 252, 234,
- 218, 216, 237, 64, 5, 213, 248, 224, 252, 234, 218, 216, 236, 64, 1, 245,
- 175, 224, 252, 234, 218, 228, 198, 64, 1, 245, 175, 224, 252, 234, 218,
- 212, 168, 64, 1, 245, 175, 224, 252, 234, 218, 242, 193, 64, 30, 5, 243,
- 35, 234, 218, 72, 64, 30, 5, 234, 194, 227, 99, 64, 30, 5, 234, 194, 69,
- 64, 30, 5, 234, 194, 245, 165, 64, 1, 221, 9, 181, 64, 1, 221, 9, 234,
- 138, 64, 1, 221, 9, 243, 110, 64, 1, 221, 9, 250, 219, 64, 1, 221, 9,
- 212, 109, 64, 1, 221, 9, 228, 23, 64, 1, 221, 9, 248, 164, 64, 1, 221, 9,
- 205, 64, 1, 221, 9, 226, 23, 64, 1, 221, 9, 244, 164, 64, 1, 221, 9, 252,
- 107, 64, 1, 221, 9, 217, 161, 64, 1, 221, 9, 159, 64, 249, 133, 5, 221,
- 9, 138, 214, 49, 64, 30, 5, 221, 9, 254, 232, 64, 30, 5, 221, 9, 74, 64,
- 30, 5, 221, 9, 191, 49, 64, 30, 5, 221, 9, 40, 213, 105, 64, 5, 221, 9,
- 216, 239, 64, 5, 221, 9, 216, 238, 64, 5, 221, 9, 216, 236, 64, 5, 221,
- 9, 216, 235, 64, 5, 221, 9, 249, 91, 216, 239, 64, 5, 221, 9, 249, 91,
- 216, 238, 64, 5, 221, 9, 249, 91, 245, 111, 216, 241, 64, 1, 223, 39,
- 226, 190, 244, 164, 64, 5, 223, 39, 226, 190, 216, 236, 64, 221, 9, 21,
- 212, 79, 64, 221, 9, 21, 116, 64, 221, 9, 21, 109, 64, 221, 9, 21, 166,
- 64, 221, 9, 21, 163, 64, 221, 9, 21, 180, 64, 221, 9, 21, 189, 64, 221,
- 9, 21, 198, 64, 221, 9, 21, 195, 64, 221, 9, 21, 200, 64, 5, 234, 132,
- 216, 240, 64, 5, 234, 132, 216, 238, 64, 30, 5, 254, 98, 61, 64, 30, 5,
- 254, 98, 254, 108, 64, 16, 221, 9, 116, 64, 16, 221, 9, 244, 253, 100, 6,
- 1, 254, 32, 100, 6, 1, 252, 71, 100, 6, 1, 243, 82, 100, 6, 1, 247, 82,
- 100, 6, 1, 245, 108, 100, 6, 1, 214, 141, 100, 6, 1, 212, 82, 100, 6, 1,
- 218, 11, 100, 6, 1, 235, 251, 100, 6, 1, 234, 239, 100, 6, 1, 233, 104,
- 100, 6, 1, 231, 248, 100, 6, 1, 230, 15, 100, 6, 1, 227, 62, 100, 6, 1,
- 226, 145, 100, 6, 1, 212, 71, 100, 6, 1, 224, 61, 100, 6, 1, 222, 159,
- 100, 6, 1, 218, 1, 100, 6, 1, 215, 160, 100, 6, 1, 226, 16, 100, 6, 1,
- 234, 127, 100, 6, 1, 242, 217, 100, 6, 1, 224, 217, 100, 6, 1, 220, 200,
- 100, 6, 1, 250, 34, 100, 6, 1, 250, 195, 100, 6, 1, 235, 103, 100, 6, 1,
- 249, 233, 100, 6, 1, 250, 79, 100, 6, 1, 213, 151, 100, 6, 1, 235, 113,
- 100, 6, 1, 242, 24, 100, 6, 1, 241, 222, 100, 6, 1, 241, 160, 100, 6, 1,
- 214, 6, 100, 6, 1, 241, 243, 100, 6, 1, 241, 51, 100, 1, 254, 32, 100, 1,
- 252, 71, 100, 1, 243, 82, 100, 1, 247, 82, 100, 1, 245, 108, 100, 1, 214,
- 141, 100, 1, 212, 82, 100, 1, 218, 11, 100, 1, 235, 251, 100, 1, 234,
- 239, 100, 1, 233, 104, 100, 1, 231, 248, 100, 1, 230, 15, 100, 1, 227,
- 62, 100, 1, 226, 145, 100, 1, 212, 71, 100, 1, 224, 61, 100, 1, 222, 159,
- 100, 1, 218, 1, 100, 1, 215, 160, 100, 1, 226, 16, 100, 1, 234, 127, 100,
- 1, 242, 217, 100, 1, 224, 217, 100, 1, 220, 200, 100, 1, 250, 34, 100, 1,
- 250, 195, 100, 1, 235, 103, 100, 1, 249, 233, 100, 1, 250, 79, 100, 1,
- 213, 151, 100, 1, 235, 113, 100, 1, 242, 24, 100, 1, 241, 222, 100, 1,
- 241, 160, 100, 1, 214, 6, 100, 1, 241, 243, 100, 1, 241, 51, 100, 1, 244,
- 90, 100, 1, 212, 237, 100, 1, 245, 122, 100, 1, 216, 58, 243, 82, 100, 1,
- 254, 103, 100, 226, 143, 221, 57, 59, 1, 100, 230, 15, 23, 97, 234, 67,
- 23, 97, 219, 150, 23, 97, 229, 57, 23, 97, 217, 55, 23, 97, 219, 139, 23,
- 97, 223, 179, 23, 97, 231, 30, 23, 97, 225, 227, 23, 97, 219, 147, 23,
- 97, 220, 76, 23, 97, 219, 144, 23, 97, 236, 51, 23, 97, 249, 239, 23, 97,
- 219, 154, 23, 97, 250, 43, 23, 97, 234, 116, 23, 97, 217, 126, 23, 97,
- 226, 7, 23, 97, 241, 158, 23, 97, 229, 53, 23, 97, 219, 148, 23, 97, 229,
- 47, 23, 97, 229, 51, 23, 97, 217, 52, 23, 97, 223, 167, 23, 97, 219, 146,
- 23, 97, 223, 177, 23, 97, 234, 223, 23, 97, 231, 23, 23, 97, 234, 226,
- 23, 97, 225, 222, 23, 97, 225, 220, 23, 97, 225, 208, 23, 97, 225, 216,
- 23, 97, 225, 214, 23, 97, 225, 211, 23, 97, 225, 213, 23, 97, 225, 210,
- 23, 97, 225, 215, 23, 97, 225, 225, 23, 97, 225, 226, 23, 97, 225, 209,
- 23, 97, 225, 219, 23, 97, 234, 224, 23, 97, 234, 222, 23, 97, 220, 69,
- 23, 97, 220, 67, 23, 97, 220, 59, 23, 97, 220, 62, 23, 97, 220, 68, 23,
- 97, 220, 64, 23, 97, 220, 63, 23, 97, 220, 61, 23, 97, 220, 72, 23, 97,
- 220, 74, 23, 97, 220, 75, 23, 97, 220, 70, 23, 97, 220, 60, 23, 97, 220,
- 65, 23, 97, 220, 73, 23, 97, 250, 27, 23, 97, 250, 25, 23, 97, 250, 102,
- 23, 97, 250, 100, 23, 97, 226, 160, 23, 97, 236, 46, 23, 97, 236, 37, 23,
- 97, 236, 45, 23, 97, 236, 42, 23, 97, 236, 40, 23, 97, 236, 44, 23, 97,
- 219, 151, 23, 97, 236, 49, 23, 97, 236, 50, 23, 97, 236, 38, 23, 97, 236,
- 43, 23, 97, 213, 17, 23, 97, 249, 238, 23, 97, 250, 28, 23, 97, 250, 26,
- 23, 97, 250, 103, 23, 97, 250, 101, 23, 97, 250, 41, 23, 97, 250, 42, 23,
- 97, 250, 29, 23, 97, 250, 104, 23, 97, 226, 5, 23, 97, 234, 225, 23, 97,
- 219, 152, 23, 97, 213, 23, 23, 97, 234, 58, 23, 97, 229, 49, 23, 97, 229,
- 55, 23, 97, 229, 54, 23, 97, 217, 49, 23, 97, 244, 72, 23, 135, 244, 72,
- 23, 135, 61, 23, 135, 254, 148, 23, 135, 186, 23, 135, 213, 80, 23, 135,
- 245, 76, 23, 135, 74, 23, 135, 213, 27, 23, 135, 213, 38, 23, 135, 75,
- 23, 135, 214, 49, 23, 135, 214, 46, 23, 135, 227, 99, 23, 135, 212, 235,
- 23, 135, 69, 23, 135, 213, 252, 23, 135, 214, 6, 23, 135, 213, 235, 23,
- 135, 212, 203, 23, 135, 245, 22, 23, 135, 212, 255, 23, 135, 72, 23, 135,
- 255, 60, 23, 135, 255, 59, 23, 135, 213, 94, 23, 135, 213, 92, 23, 135,
- 245, 74, 23, 135, 245, 73, 23, 135, 245, 75, 23, 135, 213, 26, 23, 135,
- 213, 25, 23, 135, 227, 204, 23, 135, 227, 205, 23, 135, 227, 198, 23,
- 135, 227, 203, 23, 135, 227, 201, 23, 135, 212, 229, 23, 135, 212, 228,
- 23, 135, 212, 227, 23, 135, 212, 230, 23, 135, 212, 231, 23, 135, 215,
- 252, 23, 135, 215, 251, 23, 135, 215, 250, 23, 135, 215, 247, 23, 135,
- 215, 248, 23, 135, 212, 202, 23, 135, 212, 199, 23, 135, 212, 200, 23,
- 135, 212, 194, 23, 135, 212, 195, 23, 135, 212, 196, 23, 135, 212, 198,
- 23, 135, 245, 16, 23, 135, 245, 18, 23, 135, 212, 254, 23, 135, 240, 145,
- 23, 135, 240, 137, 23, 135, 240, 140, 23, 135, 240, 138, 23, 135, 240,
- 142, 23, 135, 240, 144, 23, 135, 253, 204, 23, 135, 253, 201, 23, 135,
- 253, 199, 23, 135, 253, 200, 23, 135, 219, 155, 23, 135, 255, 61, 23,
- 135, 213, 93, 23, 135, 213, 24, 23, 135, 227, 200, 23, 135, 227, 199, 23,
- 89, 234, 67, 23, 89, 219, 150, 23, 89, 234, 60, 23, 89, 229, 57, 23, 89,
- 229, 55, 23, 89, 229, 54, 23, 89, 217, 55, 23, 89, 223, 179, 23, 89, 223,
- 174, 23, 89, 223, 171, 23, 89, 223, 164, 23, 89, 223, 159, 23, 89, 223,
- 154, 23, 89, 223, 165, 23, 89, 223, 177, 23, 89, 231, 30, 23, 89, 225,
- 227, 23, 89, 225, 216, 23, 89, 220, 76, 23, 89, 219, 144, 23, 89, 236,
- 51, 23, 89, 249, 239, 23, 89, 250, 43, 23, 89, 234, 116, 23, 89, 217,
- 126, 23, 89, 226, 7, 23, 89, 241, 158, 23, 89, 234, 61, 23, 89, 234, 59,
- 23, 89, 229, 53, 23, 89, 229, 47, 23, 89, 229, 49, 23, 89, 229, 52, 23,
- 89, 229, 48, 23, 89, 217, 52, 23, 89, 217, 49, 23, 89, 223, 172, 23, 89,
- 223, 167, 23, 89, 223, 153, 23, 89, 223, 152, 23, 89, 219, 146, 23, 89,
- 223, 169, 23, 89, 223, 168, 23, 89, 223, 161, 23, 89, 223, 163, 23, 89,
- 223, 176, 23, 89, 223, 156, 23, 89, 223, 166, 23, 89, 223, 175, 23, 89,
- 223, 151, 23, 89, 231, 26, 23, 89, 231, 21, 23, 89, 231, 23, 23, 89, 231,
- 20, 23, 89, 231, 18, 23, 89, 231, 24, 23, 89, 231, 29, 23, 89, 231, 27,
- 23, 89, 234, 226, 23, 89, 225, 218, 23, 89, 225, 219, 23, 89, 225, 224,
- 23, 89, 234, 224, 23, 89, 220, 69, 23, 89, 220, 59, 23, 89, 220, 62, 23,
- 89, 220, 64, 23, 89, 226, 160, 23, 89, 236, 46, 23, 89, 236, 39, 23, 89,
- 219, 151, 23, 89, 236, 47, 23, 89, 213, 17, 23, 89, 213, 13, 23, 89, 213,
- 14, 23, 89, 226, 5, 23, 89, 234, 225, 23, 89, 241, 156, 23, 89, 241, 154,
- 23, 89, 241, 157, 23, 89, 241, 155, 23, 89, 213, 23, 23, 89, 234, 63, 23,
- 89, 234, 62, 23, 89, 234, 66, 23, 89, 234, 64, 23, 89, 234, 65, 23, 89,
- 219, 148, 28, 4, 159, 28, 4, 240, 212, 28, 4, 241, 165, 28, 4, 242, 27,
- 28, 4, 241, 204, 28, 4, 241, 222, 28, 4, 241, 54, 28, 4, 241, 53, 28, 4,
- 233, 157, 28, 4, 232, 156, 28, 4, 233, 13, 28, 4, 233, 156, 28, 4, 233,
- 74, 28, 4, 233, 82, 28, 4, 232, 208, 28, 4, 232, 129, 28, 4, 241, 174,
- 28, 4, 241, 168, 28, 4, 241, 170, 28, 4, 241, 173, 28, 4, 241, 171, 28,
- 4, 241, 172, 28, 4, 241, 169, 28, 4, 241, 167, 28, 4, 188, 28, 4, 230,
- 172, 28, 4, 231, 42, 28, 4, 232, 41, 28, 4, 231, 145, 28, 4, 231, 156,
- 28, 4, 230, 231, 28, 4, 230, 114, 28, 4, 218, 110, 28, 4, 218, 104, 28,
- 4, 218, 106, 28, 4, 218, 109, 28, 4, 218, 107, 28, 4, 218, 108, 28, 4,
- 218, 105, 28, 4, 218, 103, 28, 4, 203, 28, 4, 223, 51, 28, 4, 223, 188,
- 28, 4, 224, 74, 28, 4, 224, 1, 28, 4, 224, 21, 28, 4, 223, 112, 28, 4,
- 223, 21, 28, 4, 222, 202, 28, 4, 219, 27, 28, 4, 220, 117, 28, 4, 222,
- 200, 28, 4, 222, 89, 28, 4, 222, 100, 28, 4, 219, 242, 28, 4, 218, 198,
- 28, 4, 221, 24, 28, 4, 220, 150, 28, 4, 220, 212, 28, 4, 221, 20, 28, 4,
- 220, 241, 28, 4, 220, 243, 28, 4, 220, 187, 28, 4, 220, 134, 28, 4, 224,
- 232, 28, 4, 224, 175, 28, 4, 224, 198, 28, 4, 224, 231, 28, 4, 224, 212,
- 28, 4, 224, 213, 28, 4, 224, 187, 28, 4, 224, 186, 28, 4, 224, 131, 28,
- 4, 224, 127, 28, 4, 224, 130, 28, 4, 224, 128, 28, 4, 224, 129, 28, 4,
- 224, 210, 28, 4, 224, 204, 28, 4, 224, 206, 28, 4, 224, 209, 28, 4, 224,
- 207, 28, 4, 224, 208, 28, 4, 224, 205, 28, 4, 224, 203, 28, 4, 224, 199,
- 28, 4, 224, 202, 28, 4, 224, 200, 28, 4, 224, 201, 28, 4, 252, 107, 28,
- 4, 251, 54, 28, 4, 251, 184, 28, 4, 252, 106, 28, 4, 251, 242, 28, 4,
- 251, 251, 28, 4, 251, 128, 28, 4, 251, 12, 28, 4, 215, 1, 28, 4, 214, 99,
- 28, 4, 214, 154, 28, 4, 215, 0, 28, 4, 214, 227, 28, 4, 214, 232, 28, 4,
- 214, 119, 28, 4, 214, 91, 28, 4, 218, 52, 28, 4, 216, 82, 28, 4, 217, 71,
- 28, 4, 218, 49, 28, 4, 217, 219, 28, 4, 217, 229, 28, 4, 108, 28, 4, 216,
- 45, 28, 4, 250, 219, 28, 4, 249, 53, 28, 4, 249, 244, 28, 4, 250, 218,
- 28, 4, 250, 116, 28, 4, 250, 124, 28, 4, 249, 175, 28, 4, 249, 24, 28, 4,
- 213, 153, 28, 4, 213, 129, 28, 4, 213, 145, 28, 4, 213, 152, 28, 4, 213,
- 149, 28, 4, 213, 150, 28, 4, 213, 136, 28, 4, 213, 135, 28, 4, 213, 124,
- 28, 4, 213, 120, 28, 4, 213, 123, 28, 4, 213, 121, 28, 4, 213, 122, 28,
- 4, 205, 28, 4, 228, 92, 28, 4, 229, 64, 28, 4, 230, 43, 28, 4, 229, 184,
- 28, 4, 229, 187, 28, 4, 228, 185, 28, 4, 228, 31, 28, 4, 228, 23, 28, 4,
- 227, 247, 28, 4, 228, 10, 28, 4, 228, 22, 28, 4, 228, 16, 28, 4, 228, 17,
- 28, 4, 227, 253, 28, 4, 227, 239, 28, 4, 242, 156, 61, 28, 4, 242, 156,
- 69, 28, 4, 242, 156, 72, 28, 4, 242, 156, 254, 232, 28, 4, 242, 156, 245,
- 165, 28, 4, 242, 156, 74, 28, 4, 242, 156, 75, 28, 4, 242, 156, 214, 49,
- 28, 4, 181, 28, 4, 233, 238, 28, 4, 234, 101, 28, 4, 235, 14, 28, 4, 234,
- 187, 28, 4, 234, 188, 28, 4, 234, 37, 28, 4, 234, 36, 28, 4, 233, 204,
- 28, 4, 233, 198, 28, 4, 233, 203, 28, 4, 233, 199, 28, 4, 233, 200, 28,
- 4, 233, 193, 28, 4, 233, 187, 28, 4, 233, 189, 28, 4, 233, 192, 28, 4,
- 233, 190, 28, 4, 233, 191, 28, 4, 233, 188, 28, 4, 233, 186, 28, 4, 233,
- 182, 28, 4, 233, 185, 28, 4, 233, 183, 28, 4, 233, 184, 28, 4, 214, 49,
- 28, 4, 213, 183, 28, 4, 213, 235, 28, 4, 214, 48, 28, 4, 214, 1, 28, 4,
- 214, 6, 28, 4, 213, 214, 28, 4, 213, 213, 28, 4, 226, 15, 61, 28, 4, 226,
- 15, 69, 28, 4, 226, 15, 72, 28, 4, 226, 15, 254, 232, 28, 4, 226, 15,
- 245, 165, 28, 4, 226, 15, 74, 28, 4, 226, 15, 75, 28, 4, 212, 109, 28, 4,
- 212, 8, 28, 4, 212, 37, 28, 4, 212, 108, 28, 4, 212, 85, 28, 4, 212, 87,
- 28, 4, 212, 16, 28, 4, 211, 251, 28, 4, 212, 75, 28, 4, 212, 55, 28, 4,
- 212, 62, 28, 4, 212, 74, 28, 4, 212, 66, 28, 4, 212, 67, 28, 4, 212, 60,
- 28, 4, 212, 46, 28, 4, 186, 28, 4, 212, 203, 28, 4, 212, 255, 28, 4, 213,
- 91, 28, 4, 213, 35, 28, 4, 213, 38, 28, 4, 212, 235, 28, 4, 212, 226, 28,
- 4, 248, 164, 28, 4, 246, 33, 28, 4, 247, 211, 28, 4, 248, 163, 28, 4,
- 248, 28, 28, 4, 248, 41, 28, 4, 247, 99, 28, 4, 246, 2, 28, 4, 248, 86,
- 28, 4, 248, 51, 28, 4, 248, 63, 28, 4, 248, 85, 28, 4, 248, 73, 28, 4,
- 248, 74, 28, 4, 248, 56, 28, 4, 248, 42, 28, 4, 235, 139, 28, 4, 235, 54,
- 28, 4, 235, 110, 28, 4, 235, 138, 28, 4, 235, 125, 28, 4, 235, 127, 28,
- 4, 235, 71, 28, 4, 235, 35, 28, 4, 243, 110, 28, 4, 242, 92, 28, 4, 242,
- 190, 28, 4, 243, 107, 28, 4, 243, 31, 28, 4, 243, 38, 28, 4, 242, 150,
- 28, 4, 242, 149, 28, 4, 242, 59, 28, 4, 242, 55, 28, 4, 242, 58, 28, 4,
- 242, 56, 28, 4, 242, 57, 28, 4, 243, 5, 28, 4, 242, 241, 28, 4, 242, 251,
- 28, 4, 243, 4, 28, 4, 242, 255, 28, 4, 243, 0, 28, 4, 242, 245, 28, 4,
- 242, 230, 28, 4, 217, 161, 28, 4, 217, 90, 28, 4, 217, 128, 28, 4, 217,
- 160, 28, 4, 217, 147, 28, 4, 217, 148, 28, 4, 217, 109, 28, 4, 217, 82,
- 28, 4, 250, 92, 28, 4, 250, 6, 28, 4, 250, 47, 28, 4, 250, 91, 28, 4,
- 250, 64, 28, 4, 250, 67, 28, 4, 250, 23, 28, 4, 249, 251, 28, 4, 226, 23,
- 28, 4, 225, 246, 28, 4, 226, 9, 28, 4, 226, 22, 28, 4, 226, 11, 28, 4,
- 226, 12, 28, 4, 225, 253, 28, 4, 225, 242, 28, 4, 216, 141, 28, 4, 216,
- 122, 28, 4, 216, 125, 28, 4, 216, 140, 28, 4, 216, 135, 28, 4, 216, 136,
- 28, 4, 216, 124, 28, 4, 216, 120, 28, 4, 216, 5, 28, 4, 215, 253, 28, 4,
- 216, 1, 28, 4, 216, 4, 28, 4, 216, 2, 28, 4, 216, 3, 28, 4, 215, 255, 28,
- 4, 215, 254, 28, 4, 244, 164, 28, 4, 243, 205, 28, 4, 244, 90, 28, 4,
- 244, 163, 28, 4, 244, 116, 28, 4, 244, 123, 28, 4, 244, 12, 28, 4, 243,
- 188, 28, 4, 193, 28, 4, 225, 35, 28, 4, 225, 240, 28, 4, 226, 213, 28, 4,
- 226, 86, 28, 4, 226, 96, 28, 4, 225, 150, 28, 4, 225, 2, 28, 4, 223, 11,
- 28, 4, 230, 103, 28, 4, 243, 182, 28, 37, 243, 29, 24, 30, 233, 47, 77,
- 28, 37, 30, 233, 47, 77, 28, 37, 243, 29, 77, 28, 222, 92, 77, 28, 213,
- 195, 28, 243, 200, 219, 69, 28, 249, 157, 28, 221, 70, 28, 249, 164, 28,
- 225, 79, 249, 164, 28, 224, 158, 77, 28, 226, 143, 221, 57, 28, 21, 116,
- 28, 21, 109, 28, 21, 166, 28, 21, 163, 28, 21, 180, 28, 21, 189, 28, 21,
- 198, 28, 21, 195, 28, 21, 200, 28, 50, 217, 200, 28, 50, 216, 38, 28, 50,
- 217, 115, 28, 50, 243, 240, 28, 50, 244, 83, 28, 50, 220, 39, 28, 50,
- 221, 37, 28, 50, 245, 141, 28, 50, 229, 26, 28, 50, 240, 200, 28, 50,
- 217, 201, 217, 100, 28, 4, 222, 96, 230, 114, 28, 4, 230, 110, 28, 4,
- 230, 111, 28, 4, 230, 112, 28, 4, 222, 96, 251, 12, 28, 4, 251, 9, 28, 4,
- 251, 10, 28, 4, 251, 11, 28, 4, 222, 96, 243, 188, 28, 4, 243, 184, 28,
- 4, 243, 185, 28, 4, 243, 186, 28, 4, 222, 96, 225, 2, 28, 4, 224, 254,
- 28, 4, 224, 255, 28, 4, 225, 0, 28, 216, 242, 152, 212, 238, 28, 216,
- 242, 152, 247, 248, 28, 216, 242, 152, 223, 135, 28, 216, 242, 152, 220,
- 175, 223, 135, 28, 216, 242, 152, 247, 187, 28, 216, 242, 152, 234, 170,
- 28, 216, 242, 152, 250, 31, 28, 216, 242, 152, 241, 162, 28, 216, 242,
- 152, 247, 247, 28, 216, 242, 152, 233, 215, 158, 1, 61, 158, 1, 74, 158,
- 1, 72, 158, 1, 75, 158, 1, 69, 158, 1, 215, 79, 158, 1, 243, 110, 158, 1,
- 181, 158, 1, 243, 38, 158, 1, 242, 190, 158, 1, 242, 150, 158, 1, 242,
- 92, 158, 1, 242, 60, 158, 1, 159, 158, 1, 241, 222, 158, 1, 241, 165,
- 158, 1, 241, 54, 158, 1, 240, 212, 158, 1, 240, 193, 158, 1, 233, 157,
- 158, 1, 233, 82, 158, 1, 233, 13, 158, 1, 232, 208, 158, 1, 232, 156,
- 158, 1, 232, 130, 158, 1, 188, 158, 1, 231, 156, 158, 1, 231, 42, 158, 1,
- 230, 231, 158, 1, 230, 172, 158, 1, 205, 158, 1, 241, 76, 158, 1, 230,
- 31, 158, 1, 229, 187, 158, 1, 229, 64, 158, 1, 228, 185, 158, 1, 228, 92,
- 158, 1, 228, 33, 158, 1, 224, 174, 158, 1, 224, 161, 158, 1, 224, 154,
- 158, 1, 224, 146, 158, 1, 224, 135, 158, 1, 224, 133, 158, 1, 222, 202,
- 158, 1, 197, 158, 1, 222, 100, 158, 1, 220, 117, 158, 1, 219, 242, 158,
- 1, 219, 27, 158, 1, 218, 203, 158, 1, 248, 164, 158, 1, 218, 52, 158, 1,
- 248, 41, 158, 1, 217, 229, 158, 1, 247, 211, 158, 1, 217, 71, 158, 1,
- 247, 99, 158, 1, 246, 33, 158, 1, 246, 5, 158, 1, 247, 108, 158, 1, 217,
- 12, 158, 1, 217, 11, 158, 1, 217, 1, 158, 1, 217, 0, 158, 1, 216, 255,
- 158, 1, 216, 254, 158, 1, 216, 141, 158, 1, 216, 136, 158, 1, 216, 125,
- 158, 1, 216, 124, 158, 1, 216, 122, 158, 1, 216, 121, 158, 1, 214, 49,
- 158, 1, 214, 6, 158, 1, 213, 235, 158, 1, 213, 214, 158, 1, 213, 183,
- 158, 1, 213, 171, 158, 1, 186, 158, 1, 213, 38, 158, 1, 212, 255, 158, 1,
- 212, 235, 158, 1, 212, 203, 158, 1, 212, 169, 18, 19, 240, 160, 18, 19,
- 74, 18, 19, 254, 196, 18, 19, 72, 18, 19, 236, 28, 18, 19, 75, 18, 19,
- 227, 49, 18, 19, 213, 104, 227, 49, 18, 19, 66, 245, 165, 18, 19, 66, 72,
- 18, 19, 61, 18, 19, 254, 232, 18, 19, 214, 6, 18, 19, 148, 214, 6, 18,
- 19, 213, 235, 18, 19, 148, 213, 235, 18, 19, 213, 227, 18, 19, 148, 213,
- 227, 18, 19, 213, 214, 18, 19, 148, 213, 214, 18, 19, 213, 202, 18, 19,
- 148, 213, 202, 18, 19, 230, 11, 213, 202, 18, 19, 214, 49, 18, 19, 148,
- 214, 49, 18, 19, 214, 48, 18, 19, 148, 214, 48, 18, 19, 230, 11, 214, 48,
- 18, 19, 254, 108, 18, 19, 213, 104, 214, 82, 18, 19, 242, 156, 219, 69,
- 18, 19, 40, 179, 18, 19, 40, 242, 113, 18, 19, 40, 251, 101, 151, 223,
- 130, 18, 19, 40, 216, 227, 151, 223, 130, 18, 19, 40, 46, 151, 223, 130,
- 18, 19, 40, 223, 130, 18, 19, 40, 51, 179, 18, 19, 40, 51, 220, 175, 71,
- 219, 32, 18, 19, 40, 231, 37, 247, 74, 18, 19, 40, 220, 175, 199, 90, 18,
- 19, 40, 225, 156, 18, 19, 40, 119, 218, 36, 18, 19, 245, 108, 18, 19,
- 235, 251, 18, 19, 227, 62, 18, 19, 254, 32, 18, 19, 226, 96, 18, 19, 226,
- 211, 18, 19, 225, 240, 18, 19, 225, 203, 18, 19, 225, 150, 18, 19, 225,
- 129, 18, 19, 213, 104, 225, 129, 18, 19, 66, 241, 204, 18, 19, 66, 241,
- 165, 18, 19, 193, 18, 19, 226, 213, 18, 19, 225, 0, 18, 19, 148, 225, 0,
- 18, 19, 224, 254, 18, 19, 148, 224, 254, 18, 19, 224, 253, 18, 19, 148,
- 224, 253, 18, 19, 224, 251, 18, 19, 148, 224, 251, 18, 19, 224, 250, 18,
- 19, 148, 224, 250, 18, 19, 225, 2, 18, 19, 148, 225, 2, 18, 19, 225, 1,
- 18, 19, 148, 225, 1, 18, 19, 213, 104, 225, 1, 18, 19, 226, 229, 18, 19,
- 148, 226, 229, 18, 19, 66, 242, 41, 18, 19, 217, 229, 18, 19, 218, 47,
- 18, 19, 217, 71, 18, 19, 217, 57, 18, 19, 108, 18, 19, 216, 230, 18, 19,
- 213, 104, 216, 230, 18, 19, 66, 248, 28, 18, 19, 66, 247, 211, 18, 19,
- 218, 52, 18, 19, 218, 49, 18, 19, 216, 43, 18, 19, 148, 216, 43, 18, 19,
- 216, 27, 18, 19, 148, 216, 27, 18, 19, 216, 26, 18, 19, 148, 216, 26, 18,
- 19, 109, 18, 19, 148, 109, 18, 19, 216, 20, 18, 19, 148, 216, 20, 18, 19,
- 216, 45, 18, 19, 148, 216, 45, 18, 19, 216, 44, 18, 19, 148, 216, 44, 18,
- 19, 230, 11, 216, 44, 18, 19, 218, 99, 18, 19, 216, 112, 18, 19, 216, 96,
- 18, 19, 216, 95, 18, 19, 216, 115, 18, 19, 234, 188, 18, 19, 235, 11, 18,
- 19, 234, 101, 18, 19, 234, 92, 18, 19, 234, 37, 18, 19, 234, 19, 18, 19,
- 213, 104, 234, 19, 18, 19, 181, 18, 19, 235, 14, 18, 19, 233, 200, 18,
- 19, 148, 233, 200, 18, 19, 233, 198, 18, 19, 148, 233, 198, 18, 19, 233,
- 197, 18, 19, 148, 233, 197, 18, 19, 233, 196, 18, 19, 148, 233, 196, 18,
- 19, 233, 195, 18, 19, 148, 233, 195, 18, 19, 233, 204, 18, 19, 148, 233,
- 204, 18, 19, 233, 203, 18, 19, 148, 233, 203, 18, 19, 230, 11, 233, 203,
- 18, 19, 235, 27, 18, 19, 233, 205, 18, 19, 219, 214, 234, 182, 18, 19,
- 219, 214, 234, 93, 18, 19, 219, 214, 234, 32, 18, 19, 219, 214, 234, 252,
- 18, 19, 250, 124, 18, 19, 250, 217, 18, 19, 249, 244, 18, 19, 249, 234,
- 18, 19, 249, 175, 18, 19, 249, 113, 18, 19, 213, 104, 249, 113, 18, 19,
- 250, 219, 18, 19, 250, 218, 18, 19, 249, 22, 18, 19, 148, 249, 22, 18,
- 19, 249, 20, 18, 19, 148, 249, 20, 18, 19, 249, 19, 18, 19, 148, 249, 19,
- 18, 19, 249, 18, 18, 19, 148, 249, 18, 18, 19, 249, 17, 18, 19, 148, 249,
- 17, 18, 19, 249, 24, 18, 19, 148, 249, 24, 18, 19, 249, 23, 18, 19, 148,
- 249, 23, 18, 19, 230, 11, 249, 23, 18, 19, 250, 252, 18, 19, 222, 127,
- 217, 163, 18, 19, 231, 156, 18, 19, 232, 40, 18, 19, 231, 42, 18, 19,
- 231, 14, 18, 19, 230, 231, 18, 19, 230, 202, 18, 19, 213, 104, 230, 202,
- 18, 19, 188, 18, 19, 232, 41, 18, 19, 230, 112, 18, 19, 148, 230, 112,
- 18, 19, 230, 110, 18, 19, 148, 230, 110, 18, 19, 230, 109, 18, 19, 148,
- 230, 109, 18, 19, 230, 108, 18, 19, 148, 230, 108, 18, 19, 230, 107, 18,
- 19, 148, 230, 107, 18, 19, 230, 114, 18, 19, 148, 230, 114, 18, 19, 230,
- 113, 18, 19, 148, 230, 113, 18, 19, 230, 11, 230, 113, 18, 19, 183, 18,
- 19, 148, 183, 18, 19, 231, 45, 18, 19, 253, 121, 183, 18, 19, 222, 127,
- 183, 18, 19, 229, 187, 18, 19, 230, 42, 18, 19, 229, 64, 18, 19, 229, 39,
- 18, 19, 228, 185, 18, 19, 228, 175, 18, 19, 213, 104, 228, 175, 18, 19,
- 205, 18, 19, 230, 43, 18, 19, 228, 29, 18, 19, 148, 228, 29, 18, 19, 228,
- 31, 18, 19, 148, 228, 31, 18, 19, 228, 30, 18, 19, 148, 228, 30, 18, 19,
- 230, 11, 228, 30, 18, 19, 204, 18, 19, 66, 229, 161, 18, 19, 229, 69, 18,
- 19, 233, 82, 18, 19, 233, 155, 18, 19, 233, 13, 18, 19, 232, 255, 18, 19,
- 232, 208, 18, 19, 232, 180, 18, 19, 213, 104, 232, 180, 18, 19, 233, 157,
- 18, 19, 233, 156, 18, 19, 232, 127, 18, 19, 148, 232, 127, 18, 19, 232,
- 126, 18, 19, 148, 232, 126, 18, 19, 232, 125, 18, 19, 148, 232, 125, 18,
- 19, 232, 124, 18, 19, 148, 232, 124, 18, 19, 232, 123, 18, 19, 148, 232,
- 123, 18, 19, 232, 129, 18, 19, 148, 232, 129, 18, 19, 232, 128, 18, 19,
- 148, 232, 128, 18, 19, 150, 18, 19, 148, 150, 18, 19, 138, 150, 18, 19,
- 222, 100, 18, 19, 222, 198, 18, 19, 220, 117, 18, 19, 220, 101, 18, 19,
- 219, 242, 18, 19, 219, 226, 18, 19, 213, 104, 219, 226, 18, 19, 222, 202,
- 18, 19, 222, 200, 18, 19, 218, 194, 18, 19, 148, 218, 194, 18, 19, 218,
- 188, 18, 19, 148, 218, 188, 18, 19, 218, 187, 18, 19, 148, 218, 187, 18,
- 19, 218, 183, 18, 19, 148, 218, 183, 18, 19, 218, 182, 18, 19, 148, 218,
- 182, 18, 19, 218, 198, 18, 19, 148, 218, 198, 18, 19, 218, 197, 18, 19,
- 148, 218, 197, 18, 19, 230, 11, 218, 197, 18, 19, 197, 18, 19, 253, 121,
- 197, 18, 19, 218, 199, 18, 19, 251, 141, 197, 18, 19, 230, 197, 220, 36,
- 18, 19, 230, 11, 220, 27, 18, 19, 230, 11, 223, 2, 18, 19, 230, 11, 219,
- 167, 18, 19, 230, 11, 219, 29, 18, 19, 230, 11, 220, 26, 18, 19, 230, 11,
- 222, 103, 18, 19, 220, 243, 18, 19, 220, 212, 18, 19, 220, 207, 18, 19,
- 220, 187, 18, 19, 220, 181, 18, 19, 221, 24, 18, 19, 221, 20, 18, 19,
- 220, 132, 18, 19, 148, 220, 132, 18, 19, 220, 131, 18, 19, 148, 220, 131,
- 18, 19, 220, 130, 18, 19, 148, 220, 130, 18, 19, 220, 129, 18, 19, 148,
- 220, 129, 18, 19, 220, 128, 18, 19, 148, 220, 128, 18, 19, 220, 134, 18,
- 19, 148, 220, 134, 18, 19, 220, 133, 18, 19, 148, 220, 133, 18, 19, 221,
- 26, 18, 19, 213, 38, 18, 19, 213, 89, 18, 19, 212, 255, 18, 19, 212, 246,
- 18, 19, 212, 235, 18, 19, 212, 220, 18, 19, 213, 104, 212, 220, 18, 19,
- 186, 18, 19, 213, 91, 18, 19, 212, 166, 18, 19, 148, 212, 166, 18, 19,
- 212, 165, 18, 19, 148, 212, 165, 18, 19, 212, 164, 18, 19, 148, 212, 164,
- 18, 19, 212, 163, 18, 19, 148, 212, 163, 18, 19, 212, 162, 18, 19, 148,
- 212, 162, 18, 19, 212, 168, 18, 19, 148, 212, 168, 18, 19, 212, 167, 18,
- 19, 148, 212, 167, 18, 19, 230, 11, 212, 167, 18, 19, 213, 105, 18, 19,
- 251, 182, 213, 105, 18, 19, 148, 213, 105, 18, 19, 222, 127, 212, 255,
- 18, 19, 224, 21, 18, 19, 224, 112, 224, 21, 18, 19, 148, 233, 82, 18, 19,
- 224, 73, 18, 19, 223, 188, 18, 19, 223, 136, 18, 19, 223, 112, 18, 19,
- 223, 99, 18, 19, 148, 232, 208, 18, 19, 203, 18, 19, 224, 74, 18, 19,
- 148, 233, 157, 18, 19, 223, 20, 18, 19, 148, 223, 20, 18, 19, 149, 18,
- 19, 148, 149, 18, 19, 138, 149, 18, 19, 244, 123, 18, 19, 244, 161, 18,
- 19, 244, 90, 18, 19, 244, 77, 18, 19, 244, 12, 18, 19, 244, 3, 18, 19,
- 244, 164, 18, 19, 244, 163, 18, 19, 243, 187, 18, 19, 148, 243, 187, 18,
- 19, 244, 230, 18, 19, 217, 148, 18, 19, 230, 96, 217, 148, 18, 19, 217,
- 128, 18, 19, 230, 96, 217, 128, 18, 19, 217, 124, 18, 19, 230, 96, 217,
- 124, 18, 19, 217, 109, 18, 19, 217, 106, 18, 19, 217, 161, 18, 19, 217,
- 160, 18, 19, 217, 81, 18, 19, 148, 217, 81, 18, 19, 217, 163, 18, 19,
- 216, 103, 18, 19, 216, 101, 18, 19, 216, 100, 18, 19, 216, 105, 18, 19,
- 216, 106, 18, 19, 216, 18, 18, 19, 216, 17, 18, 19, 216, 16, 18, 19, 216,
- 19, 18, 19, 228, 49, 241, 222, 18, 19, 228, 49, 241, 165, 18, 19, 228,
- 49, 241, 147, 18, 19, 228, 49, 241, 54, 18, 19, 228, 49, 241, 39, 18, 19,
- 228, 49, 159, 18, 19, 228, 49, 242, 27, 18, 19, 228, 49, 242, 41, 18, 19,
- 228, 48, 242, 41, 18, 19, 241, 140, 18, 19, 224, 228, 18, 19, 224, 198,
- 18, 19, 224, 193, 18, 19, 224, 187, 18, 19, 224, 182, 18, 19, 224, 232,
- 18, 19, 224, 231, 18, 19, 224, 240, 18, 19, 217, 8, 18, 19, 217, 6, 18,
- 19, 217, 5, 18, 19, 217, 9, 18, 19, 148, 224, 21, 18, 19, 148, 223, 188,
- 18, 19, 148, 223, 112, 18, 19, 148, 203, 18, 19, 229, 157, 18, 19, 229,
- 113, 18, 19, 229, 109, 18, 19, 229, 90, 18, 19, 229, 85, 18, 19, 229,
- 159, 18, 19, 229, 158, 18, 19, 229, 161, 18, 19, 228, 196, 18, 19, 222,
- 127, 220, 243, 18, 19, 222, 127, 220, 212, 18, 19, 222, 127, 220, 187,
- 18, 19, 222, 127, 221, 24, 18, 19, 213, 200, 217, 148, 18, 19, 213, 200,
- 217, 128, 18, 19, 213, 200, 217, 109, 18, 19, 213, 200, 217, 161, 18, 19,
- 213, 200, 217, 163, 18, 19, 233, 19, 18, 19, 233, 18, 18, 19, 233, 17,
- 18, 19, 233, 16, 18, 19, 233, 25, 18, 19, 233, 24, 18, 19, 233, 26, 18,
- 19, 217, 162, 217, 148, 18, 19, 217, 162, 217, 128, 18, 19, 217, 162,
- 217, 124, 18, 19, 217, 162, 217, 109, 18, 19, 217, 162, 217, 106, 18, 19,
- 217, 162, 217, 161, 18, 19, 217, 162, 217, 160, 18, 19, 217, 162, 217,
- 163, 18, 19, 254, 97, 253, 74, 18, 19, 251, 141, 74, 18, 19, 251, 141,
- 72, 18, 19, 251, 141, 75, 18, 19, 251, 141, 61, 18, 19, 251, 141, 214, 6,
- 18, 19, 251, 141, 213, 235, 18, 19, 251, 141, 213, 214, 18, 19, 251, 141,
- 214, 49, 18, 19, 251, 141, 229, 187, 18, 19, 251, 141, 229, 64, 18, 19,
- 251, 141, 228, 185, 18, 19, 251, 141, 205, 18, 19, 251, 141, 234, 188,
- 18, 19, 251, 141, 234, 101, 18, 19, 251, 141, 234, 37, 18, 19, 251, 141,
- 181, 18, 19, 222, 127, 241, 222, 18, 19, 222, 127, 241, 165, 18, 19, 222,
- 127, 241, 54, 18, 19, 222, 127, 159, 18, 19, 66, 242, 196, 18, 19, 66,
- 242, 200, 18, 19, 66, 242, 212, 18, 19, 66, 242, 211, 18, 19, 66, 242,
- 201, 18, 19, 66, 242, 225, 18, 19, 66, 223, 51, 18, 19, 66, 223, 112, 18,
- 19, 66, 224, 21, 18, 19, 66, 224, 1, 18, 19, 66, 223, 188, 18, 19, 66,
- 203, 18, 19, 66, 213, 183, 18, 19, 66, 213, 214, 18, 19, 66, 214, 6, 18,
- 19, 66, 214, 1, 18, 19, 66, 213, 235, 18, 19, 66, 214, 49, 18, 19, 66,
- 240, 186, 18, 19, 66, 240, 187, 18, 19, 66, 240, 190, 18, 19, 66, 240,
- 189, 18, 19, 66, 240, 188, 18, 19, 66, 240, 192, 18, 19, 66, 217, 90, 18,
- 19, 66, 217, 109, 18, 19, 66, 217, 148, 18, 19, 66, 217, 147, 18, 19, 66,
- 217, 128, 18, 19, 66, 217, 161, 18, 19, 66, 216, 86, 18, 19, 66, 216, 95,
- 18, 19, 66, 216, 112, 18, 19, 66, 216, 111, 18, 19, 66, 216, 96, 18, 19,
- 66, 216, 115, 18, 19, 66, 225, 35, 18, 19, 66, 225, 150, 18, 19, 66, 226,
- 96, 18, 19, 66, 226, 86, 18, 19, 66, 225, 240, 18, 19, 66, 193, 18, 19,
- 66, 226, 229, 18, 19, 66, 242, 92, 18, 19, 66, 242, 150, 18, 19, 66, 243,
- 38, 18, 19, 66, 243, 31, 18, 19, 66, 242, 190, 18, 19, 66, 243, 110, 18,
- 19, 66, 234, 108, 18, 19, 66, 234, 113, 18, 19, 66, 234, 125, 18, 19, 66,
- 234, 124, 18, 19, 66, 234, 118, 18, 19, 66, 234, 138, 18, 19, 66, 234,
- 50, 18, 19, 66, 234, 51, 18, 19, 66, 234, 54, 18, 19, 66, 234, 53, 18,
- 19, 66, 234, 52, 18, 19, 66, 234, 55, 18, 19, 66, 234, 56, 18, 19, 66,
- 228, 92, 18, 19, 66, 228, 185, 18, 19, 66, 229, 187, 18, 19, 66, 229,
- 184, 18, 19, 66, 229, 64, 18, 19, 66, 205, 18, 19, 66, 230, 172, 18, 19,
- 66, 230, 231, 18, 19, 66, 231, 156, 18, 19, 66, 231, 145, 18, 19, 66,
- 231, 42, 18, 19, 66, 188, 18, 19, 66, 212, 203, 18, 19, 66, 212, 235, 18,
- 19, 66, 213, 38, 18, 19, 66, 213, 35, 18, 19, 66, 212, 255, 18, 19, 66,
- 186, 18, 19, 66, 235, 54, 18, 19, 222, 127, 235, 54, 18, 19, 66, 235, 71,
- 18, 19, 66, 235, 127, 18, 19, 66, 235, 125, 18, 19, 66, 235, 110, 18, 19,
- 222, 127, 235, 110, 18, 19, 66, 235, 139, 18, 19, 66, 235, 84, 18, 19,
- 66, 235, 88, 18, 19, 66, 235, 98, 18, 19, 66, 235, 97, 18, 19, 66, 235,
- 96, 18, 19, 66, 235, 99, 18, 19, 66, 232, 156, 18, 19, 66, 232, 208, 18,
- 19, 66, 233, 82, 18, 19, 66, 233, 74, 18, 19, 66, 233, 13, 18, 19, 66,
- 233, 157, 18, 19, 66, 247, 103, 18, 19, 66, 247, 104, 18, 19, 66, 247,
- 107, 18, 19, 66, 247, 106, 18, 19, 66, 247, 105, 18, 19, 66, 247, 108,
- 18, 19, 66, 233, 15, 18, 19, 66, 233, 17, 18, 19, 66, 233, 21, 18, 19,
- 66, 233, 20, 18, 19, 66, 233, 19, 18, 19, 66, 233, 25, 18, 19, 66, 217,
- 3, 18, 19, 66, 217, 5, 18, 19, 66, 217, 8, 18, 19, 66, 217, 7, 18, 19,
- 66, 217, 6, 18, 19, 66, 217, 9, 18, 19, 66, 216, 255, 18, 19, 66, 217, 0,
- 18, 19, 66, 217, 11, 18, 19, 66, 217, 10, 18, 19, 66, 217, 1, 18, 19, 66,
- 217, 12, 18, 19, 66, 212, 8, 18, 19, 66, 212, 16, 18, 19, 66, 212, 87,
- 18, 19, 66, 212, 85, 18, 19, 66, 212, 37, 18, 19, 66, 212, 109, 18, 19,
- 66, 212, 152, 18, 19, 66, 70, 212, 152, 18, 19, 66, 245, 239, 18, 19, 66,
- 245, 240, 18, 19, 66, 245, 247, 18, 19, 66, 245, 246, 18, 19, 66, 245,
- 242, 18, 19, 66, 245, 249, 18, 19, 66, 219, 27, 18, 19, 66, 219, 242, 18,
- 19, 66, 222, 100, 18, 19, 66, 222, 89, 18, 19, 66, 220, 117, 18, 19, 66,
- 222, 202, 18, 19, 66, 220, 150, 18, 19, 66, 220, 187, 18, 19, 66, 220,
- 243, 18, 19, 66, 220, 241, 18, 19, 66, 220, 212, 18, 19, 66, 221, 24, 18,
- 19, 66, 221, 26, 18, 19, 66, 216, 122, 18, 19, 66, 216, 124, 18, 19, 66,
- 216, 136, 18, 19, 66, 216, 135, 18, 19, 66, 216, 125, 18, 19, 66, 216,
- 141, 18, 19, 66, 250, 6, 18, 19, 66, 250, 23, 18, 19, 66, 250, 67, 18,
- 19, 66, 250, 64, 18, 19, 66, 250, 47, 18, 19, 66, 250, 92, 18, 19, 66,
- 216, 89, 18, 19, 66, 216, 90, 18, 19, 66, 216, 93, 18, 19, 66, 216, 92,
- 18, 19, 66, 216, 91, 18, 19, 66, 216, 94, 18, 19, 250, 48, 52, 18, 19,
- 243, 200, 219, 69, 18, 19, 224, 224, 18, 19, 229, 156, 18, 19, 228, 193,
- 18, 19, 228, 192, 18, 19, 228, 191, 18, 19, 228, 190, 18, 19, 228, 195,
- 18, 19, 228, 194, 18, 19, 213, 200, 217, 79, 18, 19, 213, 200, 217, 78,
- 18, 19, 213, 200, 217, 77, 18, 19, 213, 200, 217, 76, 18, 19, 213, 200,
- 217, 75, 18, 19, 213, 200, 217, 82, 18, 19, 213, 200, 217, 81, 18, 19,
- 213, 200, 40, 217, 163, 18, 19, 251, 141, 214, 82, 227, 92, 219, 207, 77,
- 227, 92, 1, 251, 224, 227, 92, 1, 232, 145, 227, 92, 1, 244, 120, 227,
- 92, 1, 222, 186, 227, 92, 1, 229, 24, 227, 92, 1, 215, 195, 227, 92, 1,
- 248, 142, 227, 92, 1, 217, 33, 227, 92, 1, 249, 167, 227, 92, 1, 250,
- 114, 227, 92, 1, 230, 161, 227, 92, 1, 242, 132, 227, 92, 1, 229, 147,
- 227, 92, 1, 219, 62, 227, 92, 1, 223, 46, 227, 92, 1, 254, 105, 227, 92,
- 1, 227, 53, 227, 92, 1, 215, 121, 227, 92, 1, 245, 187, 227, 92, 1, 235,
- 186, 227, 92, 1, 245, 188, 227, 92, 1, 227, 24, 227, 92, 1, 215, 176,
- 227, 92, 1, 236, 34, 227, 92, 1, 245, 185, 227, 92, 1, 226, 77, 227, 92,
- 244, 119, 77, 227, 92, 223, 202, 244, 119, 77, 168, 1, 244, 110, 244,
- 102, 244, 124, 244, 230, 168, 1, 215, 79, 168, 1, 215, 106, 215, 122, 69,
- 168, 1, 212, 205, 168, 1, 213, 105, 168, 1, 214, 82, 168, 1, 217, 84,
- 217, 83, 217, 104, 168, 1, 245, 25, 168, 1, 254, 4, 61, 168, 1, 227, 10,
- 75, 168, 1, 254, 177, 61, 168, 1, 254, 132, 168, 1, 232, 186, 75, 168, 1,
- 220, 168, 75, 168, 1, 75, 168, 1, 227, 99, 168, 1, 227, 62, 168, 1, 224,
- 55, 224, 67, 223, 244, 149, 168, 1, 234, 199, 168, 1, 250, 111, 168, 1,
- 234, 200, 235, 27, 168, 1, 243, 177, 168, 1, 245, 96, 168, 1, 243, 34,
- 242, 47, 243, 177, 168, 1, 243, 72, 168, 1, 213, 176, 213, 170, 214, 82,
- 168, 1, 242, 19, 242, 41, 168, 1, 242, 23, 242, 41, 168, 1, 232, 188,
- 242, 41, 168, 1, 220, 171, 242, 41, 168, 1, 230, 7, 228, 18, 230, 8, 204,
- 168, 1, 220, 169, 204, 168, 1, 246, 69, 168, 1, 235, 166, 235, 170, 235,
- 160, 72, 168, 1, 74, 168, 1, 235, 118, 235, 142, 168, 1, 243, 19, 168, 1,
- 232, 189, 254, 148, 168, 1, 220, 173, 61, 168, 1, 235, 152, 245, 72, 168,
- 1, 226, 40, 226, 61, 226, 229, 168, 1, 254, 72, 245, 71, 168, 1, 219,
- 211, 197, 168, 1, 220, 105, 232, 185, 197, 168, 1, 220, 167, 197, 168, 1,
- 250, 252, 168, 1, 212, 152, 168, 1, 217, 16, 217, 26, 216, 7, 218, 99,
- 168, 1, 220, 166, 218, 99, 168, 1, 249, 3, 168, 1, 251, 208, 251, 211,
- 251, 147, 253, 74, 168, 1, 220, 172, 253, 74, 168, 1, 246, 68, 168, 1,
- 227, 36, 168, 1, 245, 153, 245, 155, 74, 168, 1, 231, 241, 231, 249, 183,
- 168, 1, 232, 187, 183, 168, 1, 220, 170, 183, 168, 1, 233, 97, 233, 137,
- 232, 196, 150, 168, 1, 246, 70, 168, 1, 235, 227, 168, 1, 235, 228, 168,
- 1, 248, 153, 248, 158, 249, 3, 168, 1, 227, 6, 245, 24, 75, 168, 1, 245,
- 183, 168, 1, 235, 185, 168, 1, 249, 21, 168, 1, 250, 205, 168, 1, 250,
- 123, 168, 1, 219, 100, 168, 1, 232, 184, 168, 1, 220, 165, 168, 1, 240,
- 103, 168, 1, 224, 240, 168, 1, 213, 166, 168, 220, 81, 225, 26, 168, 230,
- 155, 225, 26, 168, 249, 71, 225, 26, 168, 253, 177, 87, 168, 216, 47, 87,
- 168, 251, 223, 87, 218, 32, 1, 61, 218, 32, 1, 72, 218, 32, 1, 69, 218,
- 32, 1, 181, 218, 32, 1, 243, 110, 218, 32, 1, 229, 159, 218, 32, 1, 218,
- 52, 218, 32, 1, 248, 164, 218, 32, 1, 205, 218, 32, 1, 193, 218, 32, 1,
- 252, 107, 218, 32, 1, 188, 218, 32, 1, 186, 218, 32, 1, 233, 157, 218,
- 32, 1, 214, 49, 218, 32, 1, 222, 202, 218, 32, 1, 159, 218, 32, 30, 5,
- 72, 218, 32, 30, 5, 69, 218, 32, 5, 214, 133, 241, 246, 1, 61, 241, 246,
- 1, 72, 241, 246, 1, 69, 241, 246, 1, 181, 241, 246, 1, 243, 110, 241,
- 246, 1, 229, 159, 241, 246, 1, 218, 52, 241, 246, 1, 248, 164, 241, 246,
- 1, 205, 241, 246, 1, 193, 241, 246, 1, 252, 107, 241, 246, 1, 188, 241,
- 246, 1, 186, 241, 246, 1, 203, 241, 246, 1, 233, 157, 241, 246, 1, 214,
- 49, 241, 246, 1, 222, 202, 241, 246, 1, 159, 241, 246, 30, 5, 72, 241,
- 246, 30, 5, 69, 241, 246, 5, 226, 176, 226, 2, 220, 81, 225, 26, 226, 2,
- 51, 225, 26, 251, 49, 1, 61, 251, 49, 1, 72, 251, 49, 1, 69, 251, 49, 1,
- 181, 251, 49, 1, 243, 110, 251, 49, 1, 229, 159, 251, 49, 1, 218, 52,
- 251, 49, 1, 248, 164, 251, 49, 1, 205, 251, 49, 1, 193, 251, 49, 1, 252,
- 107, 251, 49, 1, 188, 251, 49, 1, 186, 251, 49, 1, 203, 251, 49, 1, 233,
- 157, 251, 49, 1, 214, 49, 251, 49, 1, 222, 202, 251, 49, 1, 159, 251, 49,
- 30, 5, 72, 251, 49, 30, 5, 69, 218, 31, 1, 61, 218, 31, 1, 72, 218, 31,
- 1, 69, 218, 31, 1, 181, 218, 31, 1, 243, 110, 218, 31, 1, 229, 159, 218,
- 31, 1, 218, 52, 218, 31, 1, 248, 164, 218, 31, 1, 205, 218, 31, 1, 193,
- 218, 31, 1, 252, 107, 218, 31, 1, 188, 218, 31, 1, 186, 218, 31, 1, 233,
- 157, 218, 31, 1, 214, 49, 218, 31, 1, 222, 202, 218, 31, 30, 5, 72, 218,
- 31, 30, 5, 69, 84, 1, 181, 84, 1, 234, 138, 84, 1, 234, 37, 84, 1, 234,
- 113, 84, 1, 229, 90, 84, 1, 250, 219, 84, 1, 250, 92, 84, 1, 249, 175,
- 84, 1, 250, 23, 84, 1, 227, 253, 84, 1, 248, 164, 84, 1, 216, 105, 84, 1,
- 247, 99, 84, 1, 216, 100, 84, 1, 228, 188, 84, 1, 218, 52, 84, 1, 217,
- 161, 84, 1, 108, 84, 1, 217, 109, 84, 1, 228, 185, 84, 1, 252, 107, 84,
- 1, 226, 23, 84, 1, 225, 150, 84, 1, 225, 253, 84, 1, 230, 231, 84, 1,
- 212, 235, 84, 1, 223, 112, 84, 1, 232, 208, 84, 1, 214, 119, 84, 1, 221,
- 24, 84, 1, 219, 121, 84, 1, 222, 202, 84, 1, 159, 84, 1, 233, 157, 84, 1,
- 224, 232, 84, 235, 240, 30, 224, 218, 84, 235, 240, 30, 224, 231, 84,
- 235, 240, 30, 224, 198, 84, 235, 240, 30, 224, 193, 84, 235, 240, 30,
- 224, 175, 84, 235, 240, 30, 224, 147, 84, 235, 240, 30, 224, 135, 84,
- 235, 240, 30, 224, 134, 84, 235, 240, 30, 223, 12, 84, 235, 240, 30, 223,
- 5, 84, 235, 240, 30, 232, 121, 84, 235, 240, 30, 232, 112, 84, 235, 240,
- 30, 224, 213, 84, 235, 240, 30, 224, 224, 84, 235, 240, 30, 224, 183,
- 216, 15, 116, 84, 235, 240, 30, 224, 183, 216, 15, 109, 84, 235, 240, 30,
- 224, 214, 84, 30, 235, 226, 253, 215, 84, 30, 235, 226, 254, 232, 84, 30,
- 5, 254, 232, 84, 30, 5, 72, 84, 30, 5, 236, 28, 84, 30, 5, 213, 105, 84,
- 30, 5, 212, 161, 84, 30, 5, 69, 84, 30, 5, 215, 92, 84, 30, 5, 215, 196,
- 84, 30, 5, 227, 99, 84, 30, 5, 186, 84, 30, 5, 236, 55, 84, 30, 5, 74,
- 84, 30, 5, 254, 148, 84, 30, 5, 254, 108, 84, 30, 5, 227, 49, 84, 30, 5,
- 253, 108, 84, 5, 229, 37, 84, 5, 224, 19, 84, 5, 212, 172, 84, 5, 230,
- 123, 84, 5, 216, 171, 84, 5, 252, 62, 84, 5, 223, 107, 84, 5, 216, 251,
- 84, 5, 234, 246, 84, 5, 254, 110, 84, 5, 222, 160, 222, 154, 84, 5, 214,
- 130, 84, 5, 249, 170, 84, 5, 252, 37, 84, 5, 234, 131, 84, 5, 252, 57,
- 84, 5, 250, 197, 225, 204, 233, 209, 84, 5, 233, 54, 216, 230, 84, 5,
- 251, 197, 84, 5, 225, 255, 230, 169, 84, 5, 234, 18, 84, 249, 39, 16,
- 223, 181, 84, 5, 253, 90, 84, 5, 253, 111, 84, 21, 212, 79, 84, 21, 116,
- 84, 21, 109, 84, 21, 166, 84, 21, 163, 84, 21, 180, 84, 21, 189, 84, 21,
- 198, 84, 21, 195, 84, 21, 200, 84, 16, 233, 54, 253, 113, 219, 229, 84,
- 16, 233, 54, 253, 113, 230, 141, 84, 16, 233, 54, 253, 113, 225, 203, 84,
- 16, 233, 54, 253, 113, 251, 225, 84, 16, 233, 54, 253, 113, 251, 32, 84,
- 16, 233, 54, 253, 113, 225, 95, 84, 16, 233, 54, 253, 113, 225, 89, 84,
- 16, 233, 54, 253, 113, 225, 87, 84, 16, 233, 54, 253, 113, 225, 93, 84,
- 16, 233, 54, 253, 113, 225, 91, 81, 251, 159, 81, 245, 120, 81, 249, 157,
- 81, 243, 200, 219, 69, 81, 249, 164, 81, 243, 237, 247, 72, 81, 216, 250,
- 219, 236, 240, 160, 81, 220, 116, 4, 251, 98, 231, 217, 81, 231, 246,
- 249, 157, 81, 231, 246, 243, 200, 219, 69, 81, 229, 22, 81, 243, 223, 43,
- 222, 77, 116, 81, 243, 223, 43, 222, 77, 109, 81, 243, 223, 43, 222, 77,
- 166, 81, 30, 221, 57, 81, 21, 212, 79, 81, 21, 116, 81, 21, 109, 81, 21,
- 166, 81, 21, 163, 81, 21, 180, 81, 21, 189, 81, 21, 198, 81, 21, 195, 81,
- 21, 200, 81, 1, 61, 81, 1, 74, 81, 1, 72, 81, 1, 75, 81, 1, 69, 81, 1,
- 227, 99, 81, 1, 215, 183, 81, 1, 245, 165, 81, 1, 205, 81, 1, 254, 24,
- 81, 1, 252, 107, 81, 1, 193, 81, 1, 224, 232, 81, 1, 243, 110, 81, 1,
- 188, 81, 1, 233, 157, 81, 1, 222, 202, 81, 1, 221, 24, 81, 1, 218, 52,
- 81, 1, 248, 164, 81, 1, 250, 92, 81, 1, 235, 139, 81, 1, 186, 81, 1, 203,
- 81, 1, 214, 49, 81, 1, 244, 164, 81, 1, 181, 81, 1, 234, 138, 81, 1, 216,
- 141, 81, 1, 212, 109, 81, 1, 242, 27, 81, 1, 212, 9, 81, 1, 233, 25, 81,
- 1, 212, 62, 81, 1, 250, 47, 81, 1, 216, 250, 184, 30, 52, 81, 1, 216,
- 250, 74, 81, 1, 216, 250, 72, 81, 1, 216, 250, 75, 81, 1, 216, 250, 69,
- 81, 1, 216, 250, 227, 99, 81, 1, 216, 250, 215, 183, 81, 1, 216, 250,
- 254, 24, 81, 1, 216, 250, 252, 107, 81, 1, 216, 250, 193, 81, 1, 216,
- 250, 224, 232, 81, 1, 216, 250, 243, 110, 81, 1, 216, 250, 188, 81, 1,
- 216, 250, 218, 52, 81, 1, 216, 250, 248, 164, 81, 1, 216, 250, 250, 92,
- 81, 1, 216, 250, 235, 139, 81, 1, 216, 250, 216, 141, 81, 1, 216, 250,
- 186, 81, 1, 216, 250, 214, 49, 81, 1, 216, 250, 181, 81, 1, 216, 250,
- 243, 107, 81, 1, 216, 250, 242, 27, 81, 1, 216, 250, 235, 109, 81, 1,
- 216, 250, 229, 62, 81, 1, 216, 250, 245, 249, 81, 1, 220, 116, 74, 81, 1,
- 220, 116, 72, 81, 1, 220, 116, 235, 150, 81, 1, 220, 116, 215, 183, 81,
- 1, 220, 116, 69, 81, 1, 220, 116, 254, 24, 81, 1, 220, 116, 181, 81, 1,
- 220, 116, 243, 110, 81, 1, 220, 116, 159, 81, 1, 220, 116, 193, 81, 1,
- 220, 116, 221, 24, 81, 1, 220, 116, 218, 52, 81, 1, 220, 116, 248, 164,
- 81, 1, 220, 116, 235, 139, 81, 1, 220, 116, 244, 164, 81, 1, 220, 116,
- 243, 107, 81, 1, 220, 116, 242, 27, 81, 1, 220, 116, 216, 141, 81, 1,
- 220, 116, 212, 109, 81, 1, 220, 116, 224, 74, 81, 1, 220, 116, 250, 92,
- 81, 1, 220, 116, 212, 75, 81, 1, 231, 246, 72, 81, 1, 231, 246, 181, 81,
- 1, 231, 246, 203, 81, 1, 231, 246, 244, 164, 81, 1, 231, 246, 212, 75,
- 81, 1, 254, 71, 243, 92, 253, 243, 116, 81, 1, 254, 71, 243, 92, 214,
- 129, 116, 81, 1, 254, 71, 243, 92, 248, 131, 81, 1, 254, 71, 243, 92,
- 215, 193, 81, 1, 254, 71, 243, 92, 235, 191, 215, 193, 81, 1, 254, 71,
- 243, 92, 252, 74, 81, 1, 254, 71, 243, 92, 133, 252, 74, 81, 1, 254, 71,
- 243, 92, 61, 81, 1, 254, 71, 243, 92, 72, 81, 1, 254, 71, 243, 92, 181,
- 81, 1, 254, 71, 243, 92, 229, 159, 81, 1, 254, 71, 243, 92, 250, 219, 81,
- 1, 254, 71, 243, 92, 216, 115, 81, 1, 254, 71, 243, 92, 216, 105, 81, 1,
- 254, 71, 243, 92, 248, 86, 81, 1, 254, 71, 243, 92, 228, 198, 81, 1, 254,
- 71, 243, 92, 218, 52, 81, 1, 254, 71, 243, 92, 248, 164, 81, 1, 254, 71,
- 243, 92, 193, 81, 1, 254, 71, 243, 92, 226, 23, 81, 1, 254, 71, 243, 92,
- 219, 157, 81, 1, 254, 71, 243, 92, 212, 75, 81, 1, 254, 71, 243, 92, 212,
- 109, 81, 1, 254, 71, 243, 92, 254, 114, 81, 1, 216, 250, 254, 71, 243,
- 92, 218, 52, 81, 1, 216, 250, 254, 71, 243, 92, 212, 75, 81, 1, 231, 246,
- 254, 71, 243, 92, 242, 225, 81, 1, 231, 246, 254, 71, 243, 92, 229, 159,
- 81, 1, 231, 246, 254, 71, 243, 92, 250, 219, 81, 1, 231, 246, 254, 71,
- 243, 92, 235, 115, 81, 1, 231, 246, 254, 71, 243, 92, 216, 115, 81, 1,
- 231, 246, 254, 71, 243, 92, 248, 70, 81, 1, 231, 246, 254, 71, 243, 92,
- 218, 52, 81, 1, 231, 246, 254, 71, 243, 92, 247, 232, 81, 1, 231, 246,
- 254, 71, 243, 92, 219, 157, 81, 1, 231, 246, 254, 71, 243, 92, 249, 15,
- 81, 1, 231, 246, 254, 71, 243, 92, 212, 75, 81, 1, 231, 246, 254, 71,
- 243, 92, 212, 109, 81, 1, 254, 71, 243, 92, 151, 69, 81, 1, 254, 71, 243,
- 92, 151, 186, 81, 1, 231, 246, 254, 71, 243, 92, 251, 195, 81, 1, 254,
- 71, 243, 92, 248, 154, 81, 1, 231, 246, 254, 71, 243, 92, 233, 25, 18,
- 19, 226, 233, 18, 19, 253, 83, 18, 19, 254, 188, 18, 19, 214, 9, 18, 19,
- 225, 101, 18, 19, 226, 103, 18, 19, 224, 249, 18, 19, 217, 238, 18, 19,
- 234, 195, 18, 19, 233, 201, 18, 19, 231, 196, 18, 19, 228, 148, 18, 19,
- 230, 3, 18, 19, 233, 92, 18, 19, 219, 209, 18, 19, 222, 129, 18, 19, 220,
- 156, 18, 19, 220, 246, 18, 19, 220, 127, 18, 19, 212, 211, 18, 19, 213,
- 43, 18, 19, 224, 27, 18, 19, 228, 28, 18, 19, 227, 82, 228, 28, 18, 19,
- 228, 27, 18, 19, 227, 82, 228, 27, 18, 19, 228, 26, 18, 19, 227, 82, 228,
- 26, 18, 19, 228, 25, 18, 19, 227, 82, 228, 25, 18, 19, 223, 17, 18, 19,
- 223, 16, 18, 19, 223, 15, 18, 19, 223, 14, 18, 19, 223, 13, 18, 19, 223,
- 21, 18, 19, 227, 82, 226, 229, 18, 19, 227, 82, 218, 99, 18, 19, 227, 82,
- 235, 27, 18, 19, 227, 82, 250, 252, 18, 19, 227, 82, 183, 18, 19, 227,
- 82, 204, 18, 19, 227, 82, 197, 18, 19, 227, 82, 221, 26, 18, 19, 245,
- 175, 214, 82, 18, 19, 213, 248, 214, 82, 18, 19, 40, 3, 223, 130, 18, 19,
- 40, 224, 48, 247, 74, 18, 19, 224, 112, 223, 18, 18, 19, 148, 232, 180,
- 18, 19, 148, 233, 156, 18, 19, 217, 80, 18, 19, 217, 82, 18, 19, 216, 97,
- 18, 19, 216, 99, 18, 19, 216, 104, 18, 19, 217, 2, 18, 19, 217, 4, 18,
- 19, 222, 127, 220, 132, 18, 19, 222, 127, 220, 181, 18, 19, 222, 127,
- 241, 39, 18, 19, 66, 242, 54, 18, 19, 66, 248, 3, 243, 31, 18, 19, 66,
- 243, 107, 18, 19, 66, 242, 59, 18, 19, 222, 127, 235, 37, 18, 19, 66,
- 235, 35, 18, 19, 251, 244, 248, 3, 150, 18, 19, 251, 244, 248, 3, 149,
- 18, 19, 66, 247, 254, 197, 209, 214, 103, 233, 34, 209, 1, 181, 209, 1,
- 234, 138, 209, 1, 243, 110, 209, 1, 242, 225, 209, 1, 229, 159, 209, 1,
- 250, 219, 209, 1, 250, 92, 209, 1, 235, 139, 209, 1, 235, 115, 209, 1,
- 213, 60, 209, 1, 218, 52, 209, 1, 217, 161, 209, 1, 248, 164, 209, 1,
- 247, 232, 209, 1, 205, 209, 1, 193, 209, 1, 226, 23, 209, 1, 252, 107,
- 209, 1, 251, 195, 209, 1, 188, 209, 1, 186, 209, 1, 203, 209, 1, 233,
- 157, 209, 1, 214, 49, 209, 1, 221, 24, 209, 1, 219, 157, 209, 1, 222,
- 202, 209, 1, 159, 209, 30, 5, 61, 209, 30, 5, 72, 209, 30, 5, 69, 209,
- 30, 5, 245, 165, 209, 30, 5, 254, 108, 209, 30, 5, 227, 49, 209, 30, 5,
- 253, 108, 209, 30, 5, 74, 209, 30, 5, 75, 209, 219, 18, 1, 186, 209, 219,
- 18, 1, 203, 209, 219, 18, 1, 214, 49, 209, 3, 1, 181, 209, 3, 1, 229,
- 159, 209, 3, 1, 253, 242, 209, 3, 1, 218, 52, 209, 3, 1, 205, 209, 3, 1,
- 193, 209, 3, 1, 188, 209, 3, 1, 203, 209, 3, 1, 233, 157, 209, 5, 230,
- 159, 209, 5, 234, 177, 209, 5, 222, 201, 209, 5, 232, 180, 209, 244, 254,
- 77, 209, 224, 158, 77, 209, 21, 212, 79, 209, 21, 116, 209, 21, 109, 209,
- 21, 166, 209, 21, 163, 209, 21, 180, 209, 21, 189, 209, 21, 198, 209, 21,
- 195, 209, 21, 200, 38, 233, 83, 1, 181, 38, 233, 83, 1, 213, 153, 38,
- 233, 83, 1, 229, 159, 38, 233, 83, 1, 216, 141, 38, 233, 83, 1, 222, 202,
- 38, 233, 83, 1, 186, 38, 233, 83, 1, 218, 52, 38, 233, 83, 1, 217, 161,
- 38, 233, 83, 1, 233, 157, 38, 233, 83, 1, 193, 38, 233, 83, 1, 226, 23,
- 38, 233, 83, 1, 188, 38, 233, 83, 1, 244, 164, 38, 233, 83, 1, 215, 1,
- 38, 233, 83, 1, 159, 38, 233, 83, 1, 224, 232, 38, 233, 83, 1, 234, 138,
- 38, 233, 83, 1, 216, 133, 38, 233, 83, 1, 205, 38, 233, 83, 1, 61, 38,
- 233, 83, 1, 72, 38, 233, 83, 1, 245, 165, 38, 233, 83, 1, 245, 154, 38,
- 233, 83, 1, 69, 38, 233, 83, 1, 227, 49, 38, 233, 83, 1, 75, 38, 233, 83,
- 1, 215, 183, 38, 233, 83, 1, 74, 38, 233, 83, 1, 253, 106, 38, 233, 83,
- 1, 254, 108, 38, 233, 83, 1, 216, 239, 38, 233, 83, 1, 216, 238, 38, 233,
- 83, 1, 216, 237, 38, 233, 83, 1, 216, 236, 38, 233, 83, 1, 216, 235, 156,
- 38, 165, 1, 124, 224, 232, 156, 38, 165, 1, 115, 224, 232, 156, 38, 165,
- 1, 124, 181, 156, 38, 165, 1, 124, 213, 153, 156, 38, 165, 1, 124, 229,
- 159, 156, 38, 165, 1, 115, 181, 156, 38, 165, 1, 115, 213, 153, 156, 38,
- 165, 1, 115, 229, 159, 156, 38, 165, 1, 124, 216, 141, 156, 38, 165, 1,
- 124, 222, 202, 156, 38, 165, 1, 124, 186, 156, 38, 165, 1, 115, 216, 141,
- 156, 38, 165, 1, 115, 222, 202, 156, 38, 165, 1, 115, 186, 156, 38, 165,
- 1, 124, 218, 52, 156, 38, 165, 1, 124, 217, 161, 156, 38, 165, 1, 124,
- 205, 156, 38, 165, 1, 115, 218, 52, 156, 38, 165, 1, 115, 217, 161, 156,
- 38, 165, 1, 115, 205, 156, 38, 165, 1, 124, 193, 156, 38, 165, 1, 124,
- 226, 23, 156, 38, 165, 1, 124, 188, 156, 38, 165, 1, 115, 193, 156, 38,
- 165, 1, 115, 226, 23, 156, 38, 165, 1, 115, 188, 156, 38, 165, 1, 124,
- 244, 164, 156, 38, 165, 1, 124, 215, 1, 156, 38, 165, 1, 124, 233, 157,
- 156, 38, 165, 1, 115, 244, 164, 156, 38, 165, 1, 115, 215, 1, 156, 38,
- 165, 1, 115, 233, 157, 156, 38, 165, 1, 124, 159, 156, 38, 165, 1, 124,
- 248, 164, 156, 38, 165, 1, 124, 252, 107, 156, 38, 165, 1, 115, 159, 156,
- 38, 165, 1, 115, 248, 164, 156, 38, 165, 1, 115, 252, 107, 156, 38, 165,
- 1, 124, 233, 206, 156, 38, 165, 1, 124, 213, 126, 156, 38, 165, 1, 115,
- 233, 206, 156, 38, 165, 1, 115, 213, 126, 156, 38, 165, 1, 124, 219, 26,
- 156, 38, 165, 1, 115, 219, 26, 156, 38, 165, 30, 5, 30, 220, 163, 156,
- 38, 165, 30, 5, 254, 232, 156, 38, 165, 30, 5, 236, 28, 156, 38, 165, 30,
- 5, 69, 156, 38, 165, 30, 5, 215, 92, 156, 38, 165, 30, 5, 74, 156, 38,
- 165, 30, 5, 254, 148, 156, 38, 165, 30, 5, 75, 156, 38, 165, 30, 5, 227,
- 120, 156, 38, 165, 30, 5, 215, 183, 156, 38, 165, 30, 5, 253, 83, 156,
- 38, 165, 30, 5, 254, 188, 156, 38, 165, 30, 5, 215, 85, 156, 38, 165, 30,
- 5, 226, 233, 156, 38, 165, 30, 5, 227, 117, 156, 38, 165, 30, 5, 215,
- 180, 156, 38, 165, 30, 5, 235, 150, 156, 38, 165, 1, 40, 215, 79, 156,
- 38, 165, 1, 40, 229, 161, 156, 38, 165, 1, 40, 204, 156, 38, 165, 1, 40,
- 183, 156, 38, 165, 1, 40, 235, 27, 156, 38, 165, 1, 40, 249, 3, 156, 38,
- 165, 1, 40, 253, 74, 156, 38, 165, 160, 231, 221, 156, 38, 165, 160, 231,
- 220, 156, 38, 165, 21, 212, 79, 156, 38, 165, 21, 116, 156, 38, 165, 21,
- 109, 156, 38, 165, 21, 166, 156, 38, 165, 21, 163, 156, 38, 165, 21, 180,
- 156, 38, 165, 21, 189, 156, 38, 165, 21, 198, 156, 38, 165, 21, 195, 156,
- 38, 165, 21, 200, 156, 38, 165, 88, 21, 116, 156, 38, 165, 5, 233, 143,
- 156, 38, 165, 5, 233, 142, 84, 16, 226, 109, 84, 16, 230, 142, 234, 34,
- 84, 16, 225, 204, 234, 34, 84, 16, 251, 226, 234, 34, 84, 16, 251, 33,
- 234, 34, 84, 16, 225, 96, 234, 34, 84, 16, 225, 90, 234, 34, 84, 16, 225,
- 88, 234, 34, 84, 16, 225, 94, 234, 34, 84, 16, 225, 92, 234, 34, 84, 16,
- 248, 118, 234, 34, 84, 16, 248, 114, 234, 34, 84, 16, 248, 113, 234, 34,
- 84, 16, 248, 116, 234, 34, 84, 16, 248, 115, 234, 34, 84, 16, 248, 112,
- 234, 34, 84, 16, 216, 51, 84, 16, 230, 142, 223, 106, 84, 16, 225, 204,
- 223, 106, 84, 16, 251, 226, 223, 106, 84, 16, 251, 33, 223, 106, 84, 16,
- 225, 96, 223, 106, 84, 16, 225, 90, 223, 106, 84, 16, 225, 88, 223, 106,
- 84, 16, 225, 94, 223, 106, 84, 16, 225, 92, 223, 106, 84, 16, 248, 118,
- 223, 106, 84, 16, 248, 114, 223, 106, 84, 16, 248, 113, 223, 106, 84, 16,
- 248, 116, 223, 106, 84, 16, 248, 115, 223, 106, 84, 16, 248, 112, 223,
- 106, 251, 50, 1, 181, 251, 50, 1, 243, 110, 251, 50, 1, 229, 159, 251,
- 50, 1, 229, 108, 251, 50, 1, 193, 251, 50, 1, 252, 107, 251, 50, 1, 188,
- 251, 50, 1, 230, 175, 251, 50, 1, 218, 52, 251, 50, 1, 248, 164, 251, 50,
- 1, 205, 251, 50, 1, 228, 147, 251, 50, 1, 250, 219, 251, 50, 1, 235, 139,
- 251, 50, 1, 228, 23, 251, 50, 1, 228, 19, 251, 50, 1, 186, 251, 50, 1,
- 203, 251, 50, 1, 233, 157, 251, 50, 1, 215, 1, 251, 50, 1, 222, 202, 251,
- 50, 1, 61, 251, 50, 1, 159, 251, 50, 30, 5, 72, 251, 50, 30, 5, 69, 251,
- 50, 30, 5, 74, 251, 50, 30, 5, 75, 251, 50, 30, 5, 254, 148, 251, 50,
- 226, 187, 251, 50, 245, 101, 65, 222, 91, 38, 88, 1, 124, 181, 38, 88, 1,
- 124, 234, 138, 38, 88, 1, 124, 233, 193, 38, 88, 1, 115, 181, 38, 88, 1,
- 115, 233, 193, 38, 88, 1, 115, 234, 138, 38, 88, 1, 229, 159, 38, 88, 1,
- 124, 250, 219, 38, 88, 1, 124, 250, 92, 38, 88, 1, 115, 250, 219, 38, 88,
- 1, 115, 222, 202, 38, 88, 1, 115, 250, 92, 38, 88, 1, 228, 23, 38, 88, 1,
- 224, 32, 38, 88, 1, 124, 224, 30, 38, 88, 1, 248, 164, 38, 88, 1, 115,
- 224, 30, 38, 88, 1, 224, 41, 38, 88, 1, 124, 218, 52, 38, 88, 1, 124,
- 217, 161, 38, 88, 1, 115, 218, 52, 38, 88, 1, 115, 217, 161, 38, 88, 1,
- 205, 38, 88, 1, 252, 107, 38, 88, 1, 124, 193, 38, 88, 1, 124, 226, 23,
- 38, 88, 1, 124, 244, 164, 38, 88, 1, 115, 193, 38, 88, 1, 115, 244, 164,
- 38, 88, 1, 115, 226, 23, 38, 88, 1, 188, 38, 88, 1, 115, 186, 38, 88, 1,
- 124, 186, 38, 88, 1, 203, 38, 88, 1, 223, 48, 38, 88, 1, 233, 157, 38,
- 88, 1, 232, 151, 38, 88, 1, 214, 49, 38, 88, 1, 124, 221, 24, 38, 88, 1,
- 124, 219, 157, 38, 88, 1, 124, 222, 202, 38, 88, 1, 124, 159, 38, 88, 1,
- 232, 213, 38, 88, 1, 61, 38, 88, 1, 115, 159, 38, 88, 1, 72, 38, 88, 1,
- 236, 28, 38, 88, 1, 69, 38, 88, 1, 215, 92, 38, 88, 1, 245, 165, 38, 88,
- 1, 227, 49, 38, 88, 1, 233, 143, 38, 88, 1, 242, 109, 222, 202, 38, 88,
- 249, 133, 5, 138, 203, 38, 88, 249, 133, 5, 138, 233, 157, 38, 88, 249,
- 133, 5, 233, 158, 218, 9, 233, 133, 38, 88, 5, 232, 9, 234, 236, 233,
- 133, 38, 88, 249, 133, 5, 40, 229, 159, 38, 88, 249, 133, 5, 115, 193,
- 38, 88, 249, 133, 5, 124, 224, 31, 167, 115, 193, 38, 88, 249, 133, 5,
- 188, 38, 88, 249, 133, 5, 252, 107, 38, 88, 249, 133, 5, 222, 202, 38,
- 88, 5, 222, 181, 38, 88, 30, 5, 61, 38, 88, 30, 5, 232, 9, 222, 142, 38,
- 88, 30, 5, 254, 232, 38, 88, 30, 5, 218, 15, 254, 232, 38, 88, 30, 5, 72,
- 38, 88, 30, 5, 236, 28, 38, 88, 30, 5, 215, 183, 38, 88, 30, 5, 215, 91,
- 38, 88, 30, 5, 69, 38, 88, 30, 5, 215, 92, 38, 88, 30, 5, 75, 38, 88, 30,
- 5, 227, 121, 55, 38, 88, 30, 5, 226, 233, 38, 88, 30, 5, 74, 38, 88, 30,
- 5, 254, 148, 38, 88, 30, 5, 227, 49, 38, 88, 30, 5, 254, 108, 38, 88, 30,
- 5, 88, 254, 108, 38, 88, 30, 5, 227, 121, 49, 38, 88, 5, 232, 9, 234,
- 235, 38, 88, 5, 216, 240, 38, 88, 5, 216, 239, 38, 88, 5, 234, 106, 216,
- 238, 38, 88, 5, 234, 106, 216, 237, 38, 88, 5, 234, 106, 216, 236, 38,
- 88, 5, 224, 77, 242, 26, 38, 88, 5, 232, 9, 222, 168, 38, 88, 5, 234,
- 105, 234, 220, 38, 88, 37, 249, 55, 247, 74, 38, 88, 241, 33, 21, 212,
- 79, 38, 88, 241, 33, 21, 116, 38, 88, 241, 33, 21, 109, 38, 88, 241, 33,
- 21, 166, 38, 88, 241, 33, 21, 163, 38, 88, 241, 33, 21, 180, 38, 88, 241,
- 33, 21, 189, 38, 88, 241, 33, 21, 198, 38, 88, 241, 33, 21, 195, 38, 88,
- 241, 33, 21, 200, 38, 88, 88, 21, 212, 79, 38, 88, 88, 21, 116, 38, 88,
- 88, 21, 109, 38, 88, 88, 21, 166, 38, 88, 88, 21, 163, 38, 88, 88, 21,
- 180, 38, 88, 88, 21, 189, 38, 88, 88, 21, 198, 38, 88, 88, 21, 195, 38,
- 88, 88, 21, 200, 38, 88, 5, 213, 234, 38, 88, 5, 213, 233, 38, 88, 5,
- 222, 133, 38, 88, 5, 234, 166, 38, 88, 5, 240, 219, 38, 88, 5, 247, 88,
- 38, 88, 5, 223, 202, 223, 89, 224, 41, 38, 88, 5, 232, 9, 213, 61, 38,
- 88, 5, 235, 10, 38, 88, 5, 235, 9, 38, 88, 5, 222, 139, 38, 88, 5, 222,
- 138, 38, 88, 5, 241, 248, 38, 88, 5, 250, 216, 99, 5, 215, 170, 223, 183,
- 99, 5, 215, 170, 250, 189, 99, 5, 250, 120, 99, 5, 218, 215, 99, 5, 251,
- 156, 99, 1, 254, 92, 99, 1, 254, 93, 217, 221, 99, 1, 236, 24, 99, 1,
- 236, 25, 217, 221, 99, 1, 215, 173, 99, 1, 215, 174, 217, 221, 99, 1,
- 224, 77, 223, 229, 99, 1, 224, 77, 223, 230, 217, 221, 99, 1, 233, 158,
- 233, 48, 99, 1, 233, 158, 233, 49, 217, 221, 99, 1, 245, 136, 99, 1, 254,
- 106, 99, 1, 227, 78, 99, 1, 227, 79, 217, 221, 99, 1, 181, 99, 1, 235,
- 17, 232, 12, 99, 1, 243, 110, 99, 1, 243, 111, 242, 137, 99, 1, 229, 159,
- 99, 1, 250, 219, 99, 1, 250, 220, 233, 146, 99, 1, 235, 139, 99, 1, 235,
- 140, 235, 119, 99, 1, 228, 23, 99, 1, 218, 53, 233, 99, 99, 1, 218, 53,
- 230, 137, 232, 12, 99, 1, 248, 165, 230, 137, 254, 54, 99, 1, 248, 165,
- 230, 137, 232, 12, 99, 1, 230, 46, 224, 44, 99, 1, 218, 52, 99, 1, 218,
- 53, 217, 242, 99, 1, 248, 164, 99, 1, 248, 165, 232, 30, 99, 1, 205, 99,
- 1, 193, 99, 1, 226, 214, 234, 231, 99, 1, 252, 107, 99, 1, 252, 108, 234,
- 178, 99, 1, 188, 99, 1, 186, 99, 1, 203, 99, 1, 233, 157, 99, 1, 214, 49,
- 99, 1, 222, 203, 222, 189, 99, 1, 222, 203, 222, 149, 99, 1, 222, 202,
- 99, 1, 159, 99, 5, 223, 222, 99, 30, 5, 217, 221, 99, 30, 5, 215, 169,
- 99, 30, 5, 215, 170, 222, 145, 99, 30, 5, 218, 248, 99, 30, 5, 218, 249,
- 236, 16, 99, 30, 5, 224, 77, 223, 229, 99, 30, 5, 224, 77, 223, 230, 217,
- 221, 99, 30, 5, 233, 158, 233, 48, 99, 30, 5, 233, 158, 233, 49, 217,
- 221, 99, 30, 5, 218, 16, 99, 30, 5, 218, 17, 223, 229, 99, 30, 5, 218,
- 17, 217, 221, 99, 30, 5, 218, 17, 223, 230, 217, 221, 99, 30, 5, 226, 59,
- 99, 30, 5, 226, 60, 217, 221, 99, 254, 155, 254, 154, 99, 1, 234, 255,
- 222, 144, 99, 1, 234, 110, 222, 144, 99, 1, 216, 0, 222, 144, 99, 1, 245,
- 160, 222, 144, 99, 1, 214, 233, 222, 144, 99, 1, 212, 100, 222, 144, 99,
- 1, 253, 125, 222, 144, 99, 21, 212, 79, 99, 21, 116, 99, 21, 109, 99, 21,
- 166, 99, 21, 163, 99, 21, 180, 99, 21, 189, 99, 21, 198, 99, 21, 195, 99,
- 21, 200, 99, 226, 157, 99, 226, 182, 99, 213, 223, 99, 250, 168, 226,
- 175, 99, 250, 168, 220, 98, 99, 250, 168, 226, 130, 99, 226, 181, 99, 27,
- 16, 247, 80, 99, 27, 16, 248, 2, 99, 27, 16, 246, 19, 99, 27, 16, 248,
- 121, 99, 27, 16, 248, 122, 218, 215, 99, 27, 16, 247, 157, 99, 27, 16,
- 248, 157, 99, 27, 16, 247, 240, 99, 27, 16, 248, 143, 99, 27, 16, 248,
- 122, 243, 33, 99, 27, 16, 37, 217, 217, 99, 27, 16, 37, 245, 99, 99, 27,
- 16, 37, 234, 173, 99, 27, 16, 37, 234, 175, 99, 27, 16, 37, 235, 123, 99,
- 27, 16, 37, 234, 174, 2, 235, 123, 99, 27, 16, 37, 234, 176, 2, 235, 123,
- 99, 27, 16, 37, 251, 214, 99, 27, 16, 37, 242, 141, 99, 27, 16, 223, 146,
- 227, 40, 246, 29, 99, 27, 16, 223, 146, 227, 40, 248, 155, 99, 27, 16,
- 223, 146, 249, 193, 216, 75, 99, 27, 16, 223, 146, 249, 193, 218, 23, 99,
- 27, 16, 233, 68, 227, 40, 226, 170, 99, 27, 16, 233, 68, 227, 40, 225,
- 25, 99, 27, 16, 233, 68, 249, 193, 225, 170, 99, 27, 16, 233, 68, 249,
- 193, 225, 160, 99, 27, 16, 233, 68, 227, 40, 225, 193, 218, 237, 5, 226,
- 154, 218, 237, 5, 226, 166, 218, 237, 5, 226, 163, 218, 237, 1, 61, 218,
- 237, 1, 72, 218, 237, 1, 69, 218, 237, 1, 254, 148, 218, 237, 1, 75, 218,
- 237, 1, 74, 218, 237, 1, 245, 22, 218, 237, 1, 181, 218, 237, 1, 224,
- 232, 218, 237, 1, 243, 110, 218, 237, 1, 229, 159, 218, 237, 1, 250, 219,
- 218, 237, 1, 235, 139, 218, 237, 1, 212, 109, 218, 237, 1, 228, 23, 218,
- 237, 1, 218, 52, 218, 237, 1, 248, 164, 218, 237, 1, 205, 218, 237, 1,
- 193, 218, 237, 1, 244, 164, 218, 237, 1, 215, 1, 218, 237, 1, 252, 107,
- 218, 237, 1, 188, 218, 237, 1, 186, 218, 237, 1, 203, 218, 237, 1, 233,
- 157, 218, 237, 1, 214, 49, 218, 237, 1, 222, 202, 218, 237, 1, 213, 153,
- 218, 237, 1, 159, 218, 237, 249, 133, 5, 226, 179, 218, 237, 249, 133, 5,
- 226, 156, 218, 237, 249, 133, 5, 226, 153, 218, 237, 30, 5, 226, 169,
- 218, 237, 30, 5, 226, 152, 218, 237, 30, 5, 226, 173, 218, 237, 30, 5,
- 226, 162, 218, 237, 30, 5, 226, 180, 218, 237, 30, 5, 226, 171, 218, 237,
- 5, 226, 183, 218, 237, 1, 234, 138, 218, 237, 1, 218, 176, 218, 237, 21,
- 212, 79, 218, 237, 21, 116, 218, 237, 21, 109, 218, 237, 21, 166, 218,
- 237, 21, 163, 218, 237, 21, 180, 218, 237, 21, 189, 218, 237, 21, 198,
- 218, 237, 21, 195, 218, 237, 21, 200, 252, 40, 1, 61, 252, 40, 1, 220,
- 90, 61, 252, 40, 1, 159, 252, 40, 1, 220, 90, 159, 252, 40, 1, 231, 244,
- 159, 252, 40, 1, 252, 107, 252, 40, 1, 234, 217, 252, 107, 252, 40, 1,
- 193, 252, 40, 1, 220, 90, 193, 252, 40, 1, 205, 252, 40, 1, 231, 244,
- 205, 252, 40, 1, 214, 49, 252, 40, 1, 220, 90, 214, 49, 252, 40, 1, 226,
- 194, 214, 49, 252, 40, 1, 243, 110, 252, 40, 1, 220, 90, 243, 110, 252,
- 40, 1, 235, 139, 252, 40, 1, 248, 164, 252, 40, 1, 203, 252, 40, 1, 220,
- 90, 203, 252, 40, 1, 188, 252, 40, 1, 220, 90, 188, 252, 40, 1, 219, 213,
- 218, 52, 252, 40, 1, 228, 166, 218, 52, 252, 40, 1, 222, 202, 252, 40, 1,
- 220, 90, 222, 202, 252, 40, 1, 231, 244, 222, 202, 252, 40, 1, 186, 252,
- 40, 1, 220, 90, 186, 252, 40, 1, 229, 159, 252, 40, 1, 233, 157, 252, 40,
- 1, 220, 90, 233, 157, 252, 40, 1, 228, 23, 252, 40, 1, 250, 219, 252, 40,
- 1, 229, 228, 252, 40, 1, 231, 187, 252, 40, 1, 72, 252, 40, 1, 69, 252,
- 40, 5, 216, 244, 252, 40, 30, 5, 74, 252, 40, 30, 5, 226, 194, 74, 252,
- 40, 30, 5, 245, 165, 252, 40, 30, 5, 72, 252, 40, 30, 5, 234, 217, 72,
- 252, 40, 30, 5, 75, 252, 40, 30, 5, 234, 217, 75, 252, 40, 30, 5, 69,
- 252, 40, 30, 5, 111, 31, 220, 90, 222, 202, 252, 40, 249, 133, 5, 229,
- 161, 252, 40, 249, 133, 5, 242, 41, 252, 40, 226, 165, 252, 40, 226, 161,
- 252, 40, 16, 251, 164, 230, 46, 231, 104, 252, 40, 16, 251, 164, 225,
- 196, 252, 40, 16, 251, 164, 235, 51, 252, 40, 16, 251, 164, 226, 165,
- 182, 1, 181, 182, 1, 234, 48, 182, 1, 234, 138, 182, 1, 243, 110, 182, 1,
- 242, 162, 182, 1, 229, 159, 182, 1, 250, 219, 182, 1, 250, 92, 182, 1,
- 235, 139, 182, 1, 228, 23, 182, 1, 218, 52, 182, 1, 217, 161, 182, 1,
- 248, 164, 182, 1, 205, 182, 1, 193, 182, 1, 225, 174, 182, 1, 226, 23,
- 182, 1, 244, 164, 182, 1, 244, 44, 182, 1, 252, 107, 182, 1, 251, 145,
- 182, 1, 188, 182, 1, 230, 237, 182, 1, 216, 141, 182, 1, 216, 133, 182,
- 1, 245, 249, 182, 1, 186, 182, 1, 203, 182, 1, 233, 157, 182, 1, 159,
- 182, 1, 241, 139, 182, 1, 215, 1, 182, 1, 222, 202, 182, 1, 221, 24, 182,
- 1, 214, 49, 182, 1, 61, 182, 219, 18, 1, 186, 182, 219, 18, 1, 203, 182,
- 30, 5, 254, 232, 182, 30, 5, 72, 182, 30, 5, 75, 182, 30, 5, 227, 49,
- 182, 30, 5, 69, 182, 30, 5, 215, 92, 182, 30, 5, 74, 182, 249, 133, 5,
- 235, 27, 182, 249, 133, 5, 183, 182, 249, 133, 5, 150, 182, 249, 133, 5,
- 204, 182, 249, 133, 5, 226, 229, 182, 249, 133, 5, 149, 182, 249, 133, 5,
- 218, 99, 182, 249, 133, 5, 228, 5, 182, 249, 133, 5, 234, 235, 182, 5,
- 224, 42, 182, 5, 228, 60, 182, 225, 27, 218, 51, 182, 225, 27, 228, 13,
- 217, 74, 218, 51, 182, 225, 27, 250, 98, 182, 225, 27, 216, 128, 250, 98,
- 182, 225, 27, 216, 127, 182, 21, 212, 79, 182, 21, 116, 182, 21, 109,
- 182, 21, 166, 182, 21, 163, 182, 21, 180, 182, 21, 189, 182, 21, 198,
- 182, 21, 195, 182, 21, 200, 182, 1, 216, 115, 182, 1, 216, 105, 182, 1,
- 248, 86, 227, 76, 250, 40, 21, 212, 79, 227, 76, 250, 40, 21, 116, 227,
- 76, 250, 40, 21, 109, 227, 76, 250, 40, 21, 166, 227, 76, 250, 40, 21,
- 163, 227, 76, 250, 40, 21, 180, 227, 76, 250, 40, 21, 189, 227, 76, 250,
- 40, 21, 198, 227, 76, 250, 40, 21, 195, 227, 76, 250, 40, 21, 200, 227,
- 76, 250, 40, 1, 233, 157, 227, 76, 250, 40, 1, 253, 122, 227, 76, 250,
- 40, 1, 254, 121, 227, 76, 250, 40, 1, 254, 24, 227, 76, 250, 40, 1, 254,
- 86, 227, 76, 250, 40, 1, 233, 156, 227, 76, 250, 40, 1, 254, 194, 227,
- 76, 250, 40, 1, 254, 195, 227, 76, 250, 40, 1, 254, 193, 227, 76, 250,
- 40, 1, 254, 189, 227, 76, 250, 40, 1, 233, 13, 227, 76, 250, 40, 1, 235,
- 169, 227, 76, 250, 40, 1, 236, 29, 227, 76, 250, 40, 1, 235, 188, 227,
- 76, 250, 40, 1, 235, 177, 227, 76, 250, 40, 1, 232, 156, 227, 76, 250,
- 40, 1, 215, 190, 227, 76, 250, 40, 1, 215, 188, 227, 76, 250, 40, 1, 215,
- 139, 227, 76, 250, 40, 1, 215, 85, 227, 76, 250, 40, 1, 233, 82, 227, 76,
- 250, 40, 1, 245, 70, 227, 76, 250, 40, 1, 245, 168, 227, 76, 250, 40, 1,
- 245, 108, 227, 76, 250, 40, 1, 245, 49, 227, 76, 250, 40, 1, 232, 208,
- 227, 76, 250, 40, 1, 227, 5, 227, 76, 250, 40, 1, 227, 116, 227, 76, 250,
- 40, 1, 226, 249, 227, 76, 250, 40, 1, 227, 88, 227, 76, 250, 40, 230,
- 173, 216, 84, 227, 76, 250, 40, 243, 105, 216, 85, 227, 76, 250, 40, 230,
- 171, 216, 85, 227, 76, 250, 40, 223, 242, 227, 76, 250, 40, 226, 21, 227,
- 76, 250, 40, 254, 113, 227, 76, 250, 40, 225, 27, 230, 168, 227, 76, 250,
- 40, 225, 27, 51, 230, 168, 214, 229, 160, 234, 215, 214, 229, 160, 221,
- 0, 214, 229, 160, 225, 78, 214, 229, 5, 229, 40, 214, 229, 5, 213, 69,
- 231, 35, 218, 201, 214, 229, 160, 213, 69, 254, 118, 235, 240, 218, 201,
- 214, 229, 160, 213, 69, 235, 240, 218, 201, 214, 229, 160, 213, 69, 234,
- 203, 235, 240, 218, 201, 214, 229, 160, 250, 190, 55, 214, 229, 160, 213,
- 69, 234, 203, 235, 240, 218, 202, 222, 115, 214, 229, 160, 51, 218, 201,
- 214, 229, 160, 216, 169, 218, 201, 214, 229, 160, 234, 203, 253, 244,
- 214, 229, 160, 62, 55, 214, 229, 160, 117, 176, 55, 214, 229, 160, 133,
- 176, 55, 214, 229, 160, 223, 137, 234, 214, 235, 240, 218, 201, 214, 229,
- 160, 253, 120, 235, 240, 218, 201, 214, 229, 5, 214, 129, 218, 201, 214,
- 229, 5, 214, 129, 215, 185, 214, 229, 5, 223, 202, 214, 129, 215, 185,
- 214, 229, 5, 214, 129, 253, 244, 214, 229, 5, 223, 202, 214, 129, 253,
- 244, 214, 229, 5, 214, 129, 215, 186, 2, 218, 27, 214, 229, 5, 214, 129,
- 253, 245, 2, 218, 27, 214, 229, 5, 253, 243, 254, 2, 214, 229, 5, 253,
- 243, 252, 85, 214, 229, 5, 253, 243, 214, 252, 214, 229, 5, 253, 243,
- 214, 253, 2, 218, 27, 214, 229, 5, 217, 21, 214, 229, 5, 241, 176, 184,
- 253, 242, 214, 229, 5, 184, 253, 242, 214, 229, 5, 223, 53, 184, 253,
- 242, 214, 229, 5, 253, 243, 215, 192, 230, 160, 214, 229, 5, 253, 190, 7,
- 1, 3, 6, 61, 7, 1, 3, 6, 254, 148, 7, 3, 1, 216, 58, 254, 148, 7, 1, 3,
- 6, 252, 54, 253, 74, 7, 1, 3, 6, 250, 252, 7, 1, 3, 6, 249, 3, 7, 1, 3,
- 6, 245, 25, 7, 1, 3, 6, 74, 7, 3, 1, 216, 58, 227, 40, 74, 7, 3, 1, 216,
- 58, 72, 7, 1, 3, 6, 235, 142, 7, 1, 3, 6, 235, 27, 7, 1, 3, 6, 233, 171,
- 2, 90, 7, 1, 3, 6, 183, 7, 1, 3, 6, 223, 202, 204, 7, 1, 3, 6, 75, 7, 1,
- 3, 6, 227, 40, 75, 7, 3, 1, 220, 113, 75, 7, 3, 1, 220, 113, 227, 40, 75,
- 7, 3, 1, 220, 113, 157, 2, 90, 7, 3, 1, 216, 58, 227, 99, 7, 1, 3, 6,
- 227, 2, 7, 3, 1, 216, 227, 151, 75, 7, 3, 1, 251, 101, 151, 75, 7, 1, 3,
- 6, 226, 229, 7, 1, 3, 6, 223, 202, 149, 7, 1, 3, 6, 216, 58, 149, 7, 1,
- 3, 6, 218, 99, 7, 1, 3, 6, 69, 7, 3, 1, 220, 113, 69, 7, 3, 1, 220, 113,
- 247, 208, 69, 7, 3, 1, 220, 113, 216, 58, 183, 7, 1, 3, 6, 215, 79, 7, 1,
- 3, 6, 214, 82, 7, 1, 3, 6, 212, 152, 7, 1, 3, 6, 244, 232, 7, 1, 214,
- 116, 233, 105, 219, 182, 7, 1, 254, 103, 25, 1, 3, 6, 243, 83, 25, 1, 3,
- 6, 233, 122, 25, 1, 3, 6, 225, 240, 25, 1, 3, 6, 223, 190, 25, 1, 3, 6,
- 225, 46, 33, 1, 3, 6, 245, 131, 59, 1, 6, 61, 59, 1, 6, 254, 148, 59, 1,
- 6, 253, 74, 59, 1, 6, 252, 54, 253, 74, 59, 1, 6, 249, 3, 59, 1, 6, 74,
- 59, 1, 6, 223, 202, 74, 59, 1, 6, 243, 177, 59, 1, 6, 242, 41, 59, 1, 6,
- 72, 59, 1, 6, 235, 142, 59, 1, 6, 235, 27, 59, 1, 6, 150, 59, 1, 6, 183,
- 59, 1, 6, 204, 59, 1, 6, 223, 202, 204, 59, 1, 6, 75, 59, 1, 6, 227, 2,
- 59, 1, 6, 226, 229, 59, 1, 6, 149, 59, 1, 6, 218, 99, 59, 1, 6, 69, 59,
- 1, 6, 214, 82, 59, 1, 3, 61, 59, 1, 3, 216, 58, 61, 59, 1, 3, 254, 52,
- 59, 1, 3, 216, 58, 254, 148, 59, 1, 3, 253, 74, 59, 1, 3, 249, 3, 59, 1,
- 3, 74, 59, 1, 3, 222, 113, 59, 1, 3, 227, 40, 74, 59, 1, 3, 216, 58, 227,
- 40, 74, 59, 1, 3, 243, 177, 59, 1, 3, 216, 58, 72, 59, 1, 3, 235, 27, 59,
- 1, 3, 183, 59, 1, 3, 245, 96, 59, 1, 3, 75, 59, 1, 3, 227, 40, 75, 59, 1,
- 3, 216, 227, 151, 75, 59, 1, 3, 251, 101, 151, 75, 59, 1, 3, 226, 229,
- 59, 1, 3, 218, 99, 59, 1, 3, 69, 59, 1, 3, 220, 113, 69, 59, 1, 3, 216,
- 58, 183, 59, 1, 3, 215, 79, 59, 1, 3, 254, 103, 59, 1, 3, 251, 203, 59,
- 1, 3, 25, 243, 83, 59, 1, 3, 248, 5, 59, 1, 3, 25, 226, 9, 59, 1, 3, 250,
- 47, 7, 219, 10, 3, 1, 72, 7, 219, 10, 3, 1, 149, 7, 219, 10, 3, 1, 69, 7,
- 219, 10, 3, 1, 215, 79, 25, 219, 10, 3, 1, 251, 203, 25, 219, 10, 3, 1,
- 243, 83, 25, 219, 10, 3, 1, 223, 190, 25, 219, 10, 3, 1, 226, 9, 25, 219,
- 10, 3, 1, 250, 47, 7, 3, 1, 215, 183, 7, 3, 1, 54, 2, 231, 37, 217, 42,
- 7, 3, 1, 249, 4, 2, 231, 37, 217, 42, 7, 3, 1, 244, 231, 2, 231, 37, 217,
- 42, 7, 3, 1, 232, 110, 2, 231, 37, 217, 42, 7, 3, 1, 230, 98, 2, 231, 37,
- 217, 42, 7, 3, 1, 226, 230, 2, 231, 37, 217, 42, 7, 3, 1, 224, 113, 2,
- 231, 37, 217, 42, 7, 3, 1, 224, 113, 2, 244, 57, 24, 231, 37, 217, 42, 7,
- 3, 1, 223, 4, 2, 231, 37, 217, 42, 7, 3, 1, 218, 100, 2, 231, 37, 217,
- 42, 7, 3, 1, 212, 153, 2, 231, 37, 217, 42, 7, 3, 1, 216, 58, 243, 177,
- 59, 1, 33, 245, 108, 7, 3, 1, 235, 210, 243, 177, 7, 3, 1, 217, 164, 2,
- 219, 47, 7, 3, 6, 1, 240, 146, 2, 90, 7, 3, 1, 235, 184, 2, 90, 7, 3, 1,
- 226, 230, 2, 90, 7, 3, 6, 1, 111, 2, 90, 7, 3, 1, 215, 129, 2, 90, 7, 3,
- 1, 54, 2, 226, 193, 101, 7, 3, 1, 249, 4, 2, 226, 193, 101, 7, 3, 1, 244,
- 231, 2, 226, 193, 101, 7, 3, 1, 243, 178, 2, 226, 193, 101, 7, 3, 1, 235,
- 28, 2, 226, 193, 101, 7, 3, 1, 233, 171, 2, 226, 193, 101, 7, 3, 1, 232,
- 110, 2, 226, 193, 101, 7, 3, 1, 230, 98, 2, 226, 193, 101, 7, 3, 1, 226,
- 230, 2, 226, 193, 101, 7, 3, 1, 224, 113, 2, 226, 193, 101, 7, 3, 1, 223,
- 4, 2, 226, 193, 101, 7, 3, 1, 245, 41, 2, 226, 193, 101, 7, 3, 1, 215,
- 80, 2, 226, 193, 101, 7, 3, 1, 213, 167, 2, 226, 193, 101, 7, 3, 1, 212,
- 153, 2, 226, 193, 101, 7, 3, 1, 118, 2, 223, 207, 101, 7, 3, 1, 254, 53,
- 2, 223, 207, 101, 7, 3, 1, 249, 4, 2, 241, 38, 24, 218, 27, 7, 3, 1, 191,
- 2, 223, 207, 101, 7, 3, 1, 227, 40, 191, 2, 223, 207, 101, 7, 3, 1, 223,
- 202, 227, 40, 191, 2, 223, 207, 101, 7, 3, 1, 222, 114, 2, 223, 207, 101,
- 7, 3, 1, 240, 146, 2, 223, 207, 101, 7, 3, 1, 227, 40, 157, 2, 223, 207,
- 101, 7, 3, 1, 245, 41, 2, 223, 207, 101, 7, 3, 1, 111, 2, 223, 207, 101,
- 7, 3, 1, 244, 233, 2, 223, 207, 101, 59, 1, 3, 216, 58, 254, 52, 59, 1,
- 3, 250, 252, 59, 1, 3, 250, 253, 2, 249, 41, 59, 1, 3, 245, 25, 59, 1, 3,
- 223, 202, 227, 40, 74, 59, 1, 3, 244, 230, 59, 1, 3, 247, 73, 235, 143,
- 2, 90, 59, 1, 3, 113, 243, 177, 59, 1, 3, 216, 58, 242, 41, 59, 1, 3,
- 240, 146, 2, 90, 59, 1, 3, 235, 183, 59, 1, 3, 6, 72, 59, 1, 3, 6, 240,
- 146, 2, 90, 59, 1, 3, 235, 143, 2, 249, 67, 59, 1, 3, 233, 171, 2, 223,
- 207, 101, 59, 1, 3, 233, 171, 2, 226, 193, 101, 59, 1, 3, 6, 150, 59, 1,
- 3, 232, 110, 2, 101, 59, 1, 3, 216, 58, 232, 110, 2, 184, 233, 60, 59, 1,
- 3, 230, 98, 2, 42, 101, 59, 1, 3, 230, 98, 2, 223, 207, 101, 59, 1, 3, 6,
- 204, 59, 1, 3, 252, 54, 75, 59, 1, 3, 226, 9, 59, 1, 3, 223, 4, 2, 101,
- 59, 1, 3, 245, 40, 59, 1, 3, 218, 100, 2, 226, 193, 101, 59, 1, 3, 111,
- 134, 59, 1, 3, 215, 128, 59, 1, 3, 6, 69, 59, 1, 3, 215, 80, 2, 101, 59,
- 1, 3, 216, 58, 215, 79, 59, 1, 3, 212, 152, 59, 1, 3, 212, 153, 2, 223,
- 207, 101, 59, 1, 3, 212, 153, 2, 249, 41, 59, 1, 3, 244, 232, 59, 1, 3,
- 217, 132, 37, 246, 72, 242, 114, 254, 174, 37, 246, 72, 254, 164, 254,
- 174, 37, 219, 253, 55, 37, 218, 207, 77, 37, 232, 36, 37, 242, 111, 37,
- 232, 34, 37, 254, 162, 37, 242, 112, 37, 254, 163, 37, 7, 3, 1, 224, 113,
- 55, 37, 251, 73, 37, 232, 35, 37, 51, 249, 224, 49, 37, 227, 91, 49, 37,
- 212, 28, 55, 37, 235, 170, 55, 37, 215, 122, 49, 37, 215, 105, 49, 37, 7,
- 3, 1, 244, 32, 227, 40, 118, 49, 37, 7, 3, 1, 254, 148, 37, 7, 3, 1, 253,
- 240, 37, 7, 3, 1, 253, 92, 37, 7, 3, 1, 250, 253, 250, 117, 37, 7, 3, 1,
- 235, 210, 249, 3, 37, 7, 3, 1, 245, 25, 37, 7, 3, 1, 243, 177, 37, 7, 1,
- 3, 6, 243, 177, 37, 7, 3, 1, 235, 27, 37, 7, 3, 1, 150, 37, 7, 1, 3, 6,
- 150, 37, 7, 1, 3, 6, 183, 37, 7, 3, 1, 204, 37, 7, 1, 3, 6, 204, 37, 7,
- 1, 3, 6, 149, 37, 7, 3, 1, 224, 113, 223, 88, 37, 7, 3, 1, 197, 37, 7, 3,
- 1, 184, 197, 37, 7, 3, 1, 212, 152, 37, 51, 235, 191, 251, 75, 55, 37,
- 254, 57, 123, 211, 211, 55, 37, 42, 253, 165, 49, 37, 46, 253, 165, 24,
- 119, 253, 165, 55, 7, 6, 1, 118, 2, 223, 131, 55, 7, 3, 1, 118, 2, 223,
- 131, 55, 7, 6, 1, 54, 2, 62, 49, 7, 3, 1, 54, 2, 62, 49, 7, 6, 1, 54, 2,
- 62, 55, 7, 3, 1, 54, 2, 62, 55, 7, 6, 1, 54, 2, 232, 243, 55, 7, 3, 1,
- 54, 2, 232, 243, 55, 7, 6, 1, 250, 253, 2, 250, 118, 24, 179, 7, 3, 1,
- 250, 253, 2, 250, 118, 24, 179, 7, 6, 1, 249, 4, 2, 62, 49, 7, 3, 1, 249,
- 4, 2, 62, 49, 7, 6, 1, 249, 4, 2, 62, 55, 7, 3, 1, 249, 4, 2, 62, 55, 7,
- 6, 1, 249, 4, 2, 232, 243, 55, 7, 3, 1, 249, 4, 2, 232, 243, 55, 7, 6, 1,
- 249, 4, 2, 250, 117, 7, 3, 1, 249, 4, 2, 250, 117, 7, 6, 1, 249, 4, 2,
- 249, 224, 55, 7, 3, 1, 249, 4, 2, 249, 224, 55, 7, 6, 1, 191, 2, 232, 38,
- 24, 242, 113, 7, 3, 1, 191, 2, 232, 38, 24, 242, 113, 7, 6, 1, 191, 2,
- 232, 38, 24, 179, 7, 3, 1, 191, 2, 232, 38, 24, 179, 7, 6, 1, 191, 2,
- 249, 224, 55, 7, 3, 1, 191, 2, 249, 224, 55, 7, 6, 1, 191, 2, 217, 43,
- 55, 7, 3, 1, 191, 2, 217, 43, 55, 7, 6, 1, 191, 2, 250, 118, 24, 251, 74,
- 7, 3, 1, 191, 2, 250, 118, 24, 251, 74, 7, 6, 1, 244, 231, 2, 62, 49, 7,
- 3, 1, 244, 231, 2, 62, 49, 7, 6, 1, 243, 178, 2, 232, 37, 7, 3, 1, 243,
- 178, 2, 232, 37, 7, 6, 1, 242, 42, 2, 62, 49, 7, 3, 1, 242, 42, 2, 62,
- 49, 7, 6, 1, 242, 42, 2, 62, 55, 7, 3, 1, 242, 42, 2, 62, 55, 7, 6, 1,
- 242, 42, 2, 247, 209, 7, 3, 1, 242, 42, 2, 247, 209, 7, 6, 1, 242, 42, 2,
- 250, 117, 7, 3, 1, 242, 42, 2, 250, 117, 7, 6, 1, 242, 42, 2, 251, 75,
- 55, 7, 3, 1, 242, 42, 2, 251, 75, 55, 7, 6, 1, 240, 146, 2, 217, 43, 55,
- 7, 3, 1, 240, 146, 2, 217, 43, 55, 7, 6, 1, 240, 146, 2, 247, 210, 24,
- 179, 7, 3, 1, 240, 146, 2, 247, 210, 24, 179, 7, 6, 1, 235, 28, 2, 179,
- 7, 3, 1, 235, 28, 2, 179, 7, 6, 1, 235, 28, 2, 62, 55, 7, 3, 1, 235, 28,
- 2, 62, 55, 7, 6, 1, 235, 28, 2, 232, 243, 55, 7, 3, 1, 235, 28, 2, 232,
- 243, 55, 7, 6, 1, 233, 171, 2, 62, 55, 7, 3, 1, 233, 171, 2, 62, 55, 7,
- 6, 1, 233, 171, 2, 62, 251, 220, 24, 232, 37, 7, 3, 1, 233, 171, 2, 62,
- 251, 220, 24, 232, 37, 7, 6, 1, 233, 171, 2, 232, 243, 55, 7, 3, 1, 233,
- 171, 2, 232, 243, 55, 7, 6, 1, 233, 171, 2, 249, 224, 55, 7, 3, 1, 233,
- 171, 2, 249, 224, 55, 7, 6, 1, 232, 110, 2, 179, 7, 3, 1, 232, 110, 2,
- 179, 7, 6, 1, 232, 110, 2, 62, 49, 7, 3, 1, 232, 110, 2, 62, 49, 7, 6, 1,
- 232, 110, 2, 62, 55, 7, 3, 1, 232, 110, 2, 62, 55, 7, 6, 1, 230, 98, 2,
- 62, 49, 7, 3, 1, 230, 98, 2, 62, 49, 7, 6, 1, 230, 98, 2, 62, 55, 7, 3,
- 1, 230, 98, 2, 62, 55, 7, 6, 1, 230, 98, 2, 232, 243, 55, 7, 3, 1, 230,
- 98, 2, 232, 243, 55, 7, 6, 1, 230, 98, 2, 249, 224, 55, 7, 3, 1, 230, 98,
- 2, 249, 224, 55, 7, 6, 1, 157, 2, 217, 43, 24, 179, 7, 3, 1, 157, 2, 217,
- 43, 24, 179, 7, 6, 1, 157, 2, 217, 43, 24, 247, 209, 7, 3, 1, 157, 2,
- 217, 43, 24, 247, 209, 7, 6, 1, 157, 2, 232, 38, 24, 242, 113, 7, 3, 1,
- 157, 2, 232, 38, 24, 242, 113, 7, 6, 1, 157, 2, 232, 38, 24, 179, 7, 3,
- 1, 157, 2, 232, 38, 24, 179, 7, 6, 1, 226, 230, 2, 179, 7, 3, 1, 226,
- 230, 2, 179, 7, 6, 1, 226, 230, 2, 62, 49, 7, 3, 1, 226, 230, 2, 62, 49,
- 7, 6, 1, 224, 113, 2, 62, 49, 7, 3, 1, 224, 113, 2, 62, 49, 7, 6, 1, 224,
- 113, 2, 62, 55, 7, 3, 1, 224, 113, 2, 62, 55, 7, 6, 1, 224, 113, 2, 62,
- 251, 220, 24, 232, 37, 7, 3, 1, 224, 113, 2, 62, 251, 220, 24, 232, 37,
- 7, 6, 1, 224, 113, 2, 232, 243, 55, 7, 3, 1, 224, 113, 2, 232, 243, 55,
- 7, 6, 1, 223, 4, 2, 62, 49, 7, 3, 1, 223, 4, 2, 62, 49, 7, 6, 1, 223, 4,
- 2, 62, 55, 7, 3, 1, 223, 4, 2, 62, 55, 7, 6, 1, 223, 4, 2, 254, 164, 24,
- 62, 49, 7, 3, 1, 223, 4, 2, 254, 164, 24, 62, 49, 7, 6, 1, 223, 4, 2,
- 250, 167, 24, 62, 49, 7, 3, 1, 223, 4, 2, 250, 167, 24, 62, 49, 7, 6, 1,
- 223, 4, 2, 62, 251, 220, 24, 62, 49, 7, 3, 1, 223, 4, 2, 62, 251, 220,
- 24, 62, 49, 7, 6, 1, 218, 100, 2, 62, 49, 7, 3, 1, 218, 100, 2, 62, 49,
- 7, 6, 1, 218, 100, 2, 62, 55, 7, 3, 1, 218, 100, 2, 62, 55, 7, 6, 1, 218,
- 100, 2, 232, 243, 55, 7, 3, 1, 218, 100, 2, 232, 243, 55, 7, 6, 1, 218,
- 100, 2, 249, 224, 55, 7, 3, 1, 218, 100, 2, 249, 224, 55, 7, 6, 1, 111,
- 2, 247, 210, 55, 7, 3, 1, 111, 2, 247, 210, 55, 7, 6, 1, 111, 2, 217, 43,
- 55, 7, 3, 1, 111, 2, 217, 43, 55, 7, 6, 1, 111, 2, 249, 224, 55, 7, 3, 1,
- 111, 2, 249, 224, 55, 7, 6, 1, 111, 2, 217, 43, 24, 179, 7, 3, 1, 111, 2,
- 217, 43, 24, 179, 7, 6, 1, 111, 2, 232, 38, 24, 247, 209, 7, 3, 1, 111,
- 2, 232, 38, 24, 247, 209, 7, 6, 1, 215, 80, 2, 217, 42, 7, 3, 1, 215, 80,
- 2, 217, 42, 7, 6, 1, 215, 80, 2, 62, 55, 7, 3, 1, 215, 80, 2, 62, 55, 7,
- 6, 1, 214, 83, 2, 242, 113, 7, 3, 1, 214, 83, 2, 242, 113, 7, 6, 1, 214,
- 83, 2, 179, 7, 3, 1, 214, 83, 2, 179, 7, 6, 1, 214, 83, 2, 247, 209, 7,
- 3, 1, 214, 83, 2, 247, 209, 7, 6, 1, 214, 83, 2, 62, 49, 7, 3, 1, 214,
- 83, 2, 62, 49, 7, 6, 1, 214, 83, 2, 62, 55, 7, 3, 1, 214, 83, 2, 62, 55,
- 7, 6, 1, 213, 167, 2, 62, 49, 7, 3, 1, 213, 167, 2, 62, 49, 7, 6, 1, 213,
- 167, 2, 247, 209, 7, 3, 1, 213, 167, 2, 247, 209, 7, 6, 1, 213, 106, 2,
- 62, 49, 7, 3, 1, 213, 106, 2, 62, 49, 7, 6, 1, 212, 153, 2, 249, 223, 7,
- 3, 1, 212, 153, 2, 249, 223, 7, 6, 1, 212, 153, 2, 62, 55, 7, 3, 1, 212,
- 153, 2, 62, 55, 7, 6, 1, 212, 153, 2, 232, 243, 55, 7, 3, 1, 212, 153, 2,
- 232, 243, 55, 7, 3, 1, 242, 42, 2, 232, 243, 55, 7, 3, 1, 218, 100, 2,
- 247, 209, 7, 3, 1, 214, 83, 2, 223, 131, 49, 7, 3, 1, 213, 106, 2, 223,
- 131, 49, 7, 3, 1, 118, 2, 46, 151, 223, 130, 7, 3, 1, 184, 223, 4, 2, 62,
- 49, 7, 3, 1, 184, 223, 4, 2, 247, 207, 90, 7, 3, 1, 184, 223, 4, 2, 124,
- 90, 7, 6, 1, 220, 255, 197, 7, 3, 1, 248, 5, 7, 6, 1, 118, 2, 62, 55, 7,
- 3, 1, 118, 2, 62, 55, 7, 6, 1, 118, 2, 241, 38, 49, 7, 3, 1, 118, 2, 241,
- 38, 49, 7, 6, 1, 118, 2, 249, 224, 24, 179, 7, 3, 1, 118, 2, 249, 224,
- 24, 179, 7, 6, 1, 118, 2, 249, 224, 24, 242, 113, 7, 3, 1, 118, 2, 249,
- 224, 24, 242, 113, 7, 6, 1, 118, 2, 249, 224, 24, 241, 38, 49, 7, 3, 1,
- 118, 2, 249, 224, 24, 241, 38, 49, 7, 6, 1, 118, 2, 249, 224, 24, 217,
- 42, 7, 3, 1, 118, 2, 249, 224, 24, 217, 42, 7, 6, 1, 118, 2, 249, 224,
- 24, 62, 55, 7, 3, 1, 118, 2, 249, 224, 24, 62, 55, 7, 6, 1, 118, 2, 251,
- 75, 24, 179, 7, 3, 1, 118, 2, 251, 75, 24, 179, 7, 6, 1, 118, 2, 251, 75,
- 24, 242, 113, 7, 3, 1, 118, 2, 251, 75, 24, 242, 113, 7, 6, 1, 118, 2,
- 251, 75, 24, 241, 38, 49, 7, 3, 1, 118, 2, 251, 75, 24, 241, 38, 49, 7,
- 6, 1, 118, 2, 251, 75, 24, 217, 42, 7, 3, 1, 118, 2, 251, 75, 24, 217,
- 42, 7, 6, 1, 118, 2, 251, 75, 24, 62, 55, 7, 3, 1, 118, 2, 251, 75, 24,
- 62, 55, 7, 6, 1, 191, 2, 62, 55, 7, 3, 1, 191, 2, 62, 55, 7, 6, 1, 191,
- 2, 241, 38, 49, 7, 3, 1, 191, 2, 241, 38, 49, 7, 6, 1, 191, 2, 217, 42,
- 7, 3, 1, 191, 2, 217, 42, 7, 6, 1, 191, 2, 249, 224, 24, 179, 7, 3, 1,
- 191, 2, 249, 224, 24, 179, 7, 6, 1, 191, 2, 249, 224, 24, 242, 113, 7, 3,
- 1, 191, 2, 249, 224, 24, 242, 113, 7, 6, 1, 191, 2, 249, 224, 24, 241,
- 38, 49, 7, 3, 1, 191, 2, 249, 224, 24, 241, 38, 49, 7, 6, 1, 191, 2, 249,
- 224, 24, 217, 42, 7, 3, 1, 191, 2, 249, 224, 24, 217, 42, 7, 6, 1, 191,
- 2, 249, 224, 24, 62, 55, 7, 3, 1, 191, 2, 249, 224, 24, 62, 55, 7, 6, 1,
- 240, 146, 2, 241, 38, 49, 7, 3, 1, 240, 146, 2, 241, 38, 49, 7, 6, 1,
- 240, 146, 2, 62, 55, 7, 3, 1, 240, 146, 2, 62, 55, 7, 6, 1, 157, 2, 62,
- 55, 7, 3, 1, 157, 2, 62, 55, 7, 6, 1, 157, 2, 241, 38, 49, 7, 3, 1, 157,
- 2, 241, 38, 49, 7, 6, 1, 157, 2, 249, 224, 24, 179, 7, 3, 1, 157, 2, 249,
- 224, 24, 179, 7, 6, 1, 157, 2, 249, 224, 24, 242, 113, 7, 3, 1, 157, 2,
- 249, 224, 24, 242, 113, 7, 6, 1, 157, 2, 249, 224, 24, 241, 38, 49, 7, 3,
- 1, 157, 2, 249, 224, 24, 241, 38, 49, 7, 6, 1, 157, 2, 249, 224, 24, 217,
- 42, 7, 3, 1, 157, 2, 249, 224, 24, 217, 42, 7, 6, 1, 157, 2, 249, 224,
- 24, 62, 55, 7, 3, 1, 157, 2, 249, 224, 24, 62, 55, 7, 6, 1, 157, 2, 240,
- 236, 24, 179, 7, 3, 1, 157, 2, 240, 236, 24, 179, 7, 6, 1, 157, 2, 240,
- 236, 24, 242, 113, 7, 3, 1, 157, 2, 240, 236, 24, 242, 113, 7, 6, 1, 157,
- 2, 240, 236, 24, 241, 38, 49, 7, 3, 1, 157, 2, 240, 236, 24, 241, 38, 49,
- 7, 6, 1, 157, 2, 240, 236, 24, 217, 42, 7, 3, 1, 157, 2, 240, 236, 24,
- 217, 42, 7, 6, 1, 157, 2, 240, 236, 24, 62, 55, 7, 3, 1, 157, 2, 240,
- 236, 24, 62, 55, 7, 6, 1, 111, 2, 62, 55, 7, 3, 1, 111, 2, 62, 55, 7, 6,
- 1, 111, 2, 241, 38, 49, 7, 3, 1, 111, 2, 241, 38, 49, 7, 6, 1, 111, 2,
- 240, 236, 24, 179, 7, 3, 1, 111, 2, 240, 236, 24, 179, 7, 6, 1, 111, 2,
- 240, 236, 24, 242, 113, 7, 3, 1, 111, 2, 240, 236, 24, 242, 113, 7, 6, 1,
- 111, 2, 240, 236, 24, 241, 38, 49, 7, 3, 1, 111, 2, 240, 236, 24, 241,
- 38, 49, 7, 6, 1, 111, 2, 240, 236, 24, 217, 42, 7, 3, 1, 111, 2, 240,
- 236, 24, 217, 42, 7, 6, 1, 111, 2, 240, 236, 24, 62, 55, 7, 3, 1, 111, 2,
- 240, 236, 24, 62, 55, 7, 6, 1, 213, 106, 2, 242, 113, 7, 3, 1, 213, 106,
- 2, 242, 113, 7, 6, 1, 213, 106, 2, 62, 55, 7, 3, 1, 213, 106, 2, 62, 55,
- 7, 6, 1, 213, 106, 2, 241, 38, 49, 7, 3, 1, 213, 106, 2, 241, 38, 49, 7,
- 6, 1, 213, 106, 2, 217, 42, 7, 3, 1, 213, 106, 2, 217, 42, 7, 6, 1, 231,
- 36, 232, 214, 7, 3, 1, 231, 36, 232, 214, 7, 6, 1, 231, 36, 215, 79, 7,
- 3, 1, 231, 36, 215, 79, 7, 6, 1, 213, 106, 2, 232, 177, 7, 3, 1, 213,
- 106, 2, 232, 177, 25, 3, 1, 254, 53, 2, 225, 39, 25, 3, 1, 254, 53, 2,
- 248, 99, 25, 3, 1, 254, 53, 2, 225, 40, 24, 214, 245, 25, 3, 1, 254, 53,
- 2, 207, 24, 214, 245, 25, 3, 1, 254, 53, 2, 225, 40, 24, 226, 234, 25, 3,
- 1, 254, 53, 2, 207, 24, 226, 234, 25, 3, 1, 254, 53, 2, 225, 40, 24, 226,
- 50, 25, 3, 1, 254, 53, 2, 207, 24, 226, 50, 25, 6, 1, 254, 53, 2, 225,
- 39, 25, 6, 1, 254, 53, 2, 248, 99, 25, 6, 1, 254, 53, 2, 225, 40, 24,
- 214, 245, 25, 6, 1, 254, 53, 2, 207, 24, 214, 245, 25, 6, 1, 254, 53, 2,
- 225, 40, 24, 226, 234, 25, 6, 1, 254, 53, 2, 207, 24, 226, 234, 25, 6, 1,
- 254, 53, 2, 225, 40, 24, 226, 50, 25, 6, 1, 254, 53, 2, 207, 24, 226, 50,
- 25, 3, 1, 245, 64, 2, 225, 39, 25, 3, 1, 245, 64, 2, 248, 99, 25, 3, 1,
- 245, 64, 2, 225, 40, 24, 214, 245, 25, 3, 1, 245, 64, 2, 207, 24, 214,
- 245, 25, 3, 1, 245, 64, 2, 225, 40, 24, 226, 234, 25, 3, 1, 245, 64, 2,
- 207, 24, 226, 234, 25, 6, 1, 245, 64, 2, 225, 39, 25, 6, 1, 245, 64, 2,
- 248, 99, 25, 6, 1, 245, 64, 2, 225, 40, 24, 214, 245, 25, 6, 1, 245, 64,
- 2, 207, 24, 214, 245, 25, 6, 1, 245, 64, 2, 225, 40, 24, 226, 234, 25, 6,
- 1, 245, 64, 2, 207, 24, 226, 234, 25, 3, 1, 245, 29, 2, 225, 39, 25, 3,
- 1, 245, 29, 2, 248, 99, 25, 3, 1, 245, 29, 2, 225, 40, 24, 214, 245, 25,
- 3, 1, 245, 29, 2, 207, 24, 214, 245, 25, 3, 1, 245, 29, 2, 225, 40, 24,
- 226, 234, 25, 3, 1, 245, 29, 2, 207, 24, 226, 234, 25, 3, 1, 245, 29, 2,
- 225, 40, 24, 226, 50, 25, 3, 1, 245, 29, 2, 207, 24, 226, 50, 25, 6, 1,
- 245, 29, 2, 225, 39, 25, 6, 1, 245, 29, 2, 248, 99, 25, 6, 1, 245, 29, 2,
- 225, 40, 24, 214, 245, 25, 6, 1, 245, 29, 2, 207, 24, 214, 245, 25, 6, 1,
- 245, 29, 2, 225, 40, 24, 226, 234, 25, 6, 1, 245, 29, 2, 207, 24, 226,
- 234, 25, 6, 1, 245, 29, 2, 225, 40, 24, 226, 50, 25, 6, 1, 245, 29, 2,
- 207, 24, 226, 50, 25, 3, 1, 235, 184, 2, 225, 39, 25, 3, 1, 235, 184, 2,
- 248, 99, 25, 3, 1, 235, 184, 2, 225, 40, 24, 214, 245, 25, 3, 1, 235,
- 184, 2, 207, 24, 214, 245, 25, 3, 1, 235, 184, 2, 225, 40, 24, 226, 234,
- 25, 3, 1, 235, 184, 2, 207, 24, 226, 234, 25, 3, 1, 235, 184, 2, 225, 40,
- 24, 226, 50, 25, 3, 1, 235, 184, 2, 207, 24, 226, 50, 25, 6, 1, 235, 184,
- 2, 225, 39, 25, 6, 1, 235, 184, 2, 248, 99, 25, 6, 1, 235, 184, 2, 225,
- 40, 24, 214, 245, 25, 6, 1, 235, 184, 2, 207, 24, 214, 245, 25, 6, 1,
- 235, 184, 2, 225, 40, 24, 226, 234, 25, 6, 1, 235, 184, 2, 207, 24, 226,
- 234, 25, 6, 1, 235, 184, 2, 225, 40, 24, 226, 50, 25, 6, 1, 235, 184, 2,
- 207, 24, 226, 50, 25, 3, 1, 227, 66, 2, 225, 39, 25, 3, 1, 227, 66, 2,
- 248, 99, 25, 3, 1, 227, 66, 2, 225, 40, 24, 214, 245, 25, 3, 1, 227, 66,
- 2, 207, 24, 214, 245, 25, 3, 1, 227, 66, 2, 225, 40, 24, 226, 234, 25, 3,
- 1, 227, 66, 2, 207, 24, 226, 234, 25, 6, 1, 227, 66, 2, 225, 39, 25, 6,
- 1, 227, 66, 2, 248, 99, 25, 6, 1, 227, 66, 2, 225, 40, 24, 214, 245, 25,
- 6, 1, 227, 66, 2, 207, 24, 214, 245, 25, 6, 1, 227, 66, 2, 225, 40, 24,
- 226, 234, 25, 6, 1, 227, 66, 2, 207, 24, 226, 234, 25, 3, 1, 215, 129, 2,
- 225, 39, 25, 3, 1, 215, 129, 2, 248, 99, 25, 3, 1, 215, 129, 2, 225, 40,
- 24, 214, 245, 25, 3, 1, 215, 129, 2, 207, 24, 214, 245, 25, 3, 1, 215,
- 129, 2, 225, 40, 24, 226, 234, 25, 3, 1, 215, 129, 2, 207, 24, 226, 234,
- 25, 3, 1, 215, 129, 2, 225, 40, 24, 226, 50, 25, 3, 1, 215, 129, 2, 207,
- 24, 226, 50, 25, 6, 1, 215, 129, 2, 248, 99, 25, 6, 1, 215, 129, 2, 207,
- 24, 214, 245, 25, 6, 1, 215, 129, 2, 207, 24, 226, 234, 25, 6, 1, 215,
- 129, 2, 207, 24, 226, 50, 25, 3, 1, 227, 68, 2, 225, 39, 25, 3, 1, 227,
- 68, 2, 248, 99, 25, 3, 1, 227, 68, 2, 225, 40, 24, 214, 245, 25, 3, 1,
- 227, 68, 2, 207, 24, 214, 245, 25, 3, 1, 227, 68, 2, 225, 40, 24, 226,
- 234, 25, 3, 1, 227, 68, 2, 207, 24, 226, 234, 25, 3, 1, 227, 68, 2, 225,
- 40, 24, 226, 50, 25, 3, 1, 227, 68, 2, 207, 24, 226, 50, 25, 6, 1, 227,
- 68, 2, 225, 39, 25, 6, 1, 227, 68, 2, 248, 99, 25, 6, 1, 227, 68, 2, 225,
- 40, 24, 214, 245, 25, 6, 1, 227, 68, 2, 207, 24, 214, 245, 25, 6, 1, 227,
- 68, 2, 225, 40, 24, 226, 234, 25, 6, 1, 227, 68, 2, 207, 24, 226, 234,
- 25, 6, 1, 227, 68, 2, 225, 40, 24, 226, 50, 25, 6, 1, 227, 68, 2, 207,
- 24, 226, 50, 25, 3, 1, 254, 53, 2, 214, 245, 25, 3, 1, 254, 53, 2, 226,
- 234, 25, 3, 1, 245, 64, 2, 214, 245, 25, 3, 1, 245, 64, 2, 226, 234, 25,
- 3, 1, 245, 29, 2, 214, 245, 25, 3, 1, 245, 29, 2, 226, 234, 25, 3, 1,
- 235, 184, 2, 214, 245, 25, 3, 1, 235, 184, 2, 226, 234, 25, 3, 1, 227,
- 66, 2, 214, 245, 25, 3, 1, 227, 66, 2, 226, 234, 25, 3, 1, 215, 129, 2,
- 214, 245, 25, 3, 1, 215, 129, 2, 226, 234, 25, 3, 1, 227, 68, 2, 214,
- 245, 25, 3, 1, 227, 68, 2, 226, 234, 25, 3, 1, 254, 53, 2, 225, 40, 24,
- 212, 210, 25, 3, 1, 254, 53, 2, 207, 24, 212, 210, 25, 3, 1, 254, 53, 2,
- 225, 40, 24, 214, 246, 24, 212, 210, 25, 3, 1, 254, 53, 2, 207, 24, 214,
- 246, 24, 212, 210, 25, 3, 1, 254, 53, 2, 225, 40, 24, 226, 235, 24, 212,
- 210, 25, 3, 1, 254, 53, 2, 207, 24, 226, 235, 24, 212, 210, 25, 3, 1,
- 254, 53, 2, 225, 40, 24, 226, 51, 24, 212, 210, 25, 3, 1, 254, 53, 2,
- 207, 24, 226, 51, 24, 212, 210, 25, 6, 1, 254, 53, 2, 225, 40, 24, 225,
- 51, 25, 6, 1, 254, 53, 2, 207, 24, 225, 51, 25, 6, 1, 254, 53, 2, 225,
- 40, 24, 214, 246, 24, 225, 51, 25, 6, 1, 254, 53, 2, 207, 24, 214, 246,
- 24, 225, 51, 25, 6, 1, 254, 53, 2, 225, 40, 24, 226, 235, 24, 225, 51,
- 25, 6, 1, 254, 53, 2, 207, 24, 226, 235, 24, 225, 51, 25, 6, 1, 254, 53,
- 2, 225, 40, 24, 226, 51, 24, 225, 51, 25, 6, 1, 254, 53, 2, 207, 24, 226,
- 51, 24, 225, 51, 25, 3, 1, 245, 29, 2, 225, 40, 24, 212, 210, 25, 3, 1,
- 245, 29, 2, 207, 24, 212, 210, 25, 3, 1, 245, 29, 2, 225, 40, 24, 214,
- 246, 24, 212, 210, 25, 3, 1, 245, 29, 2, 207, 24, 214, 246, 24, 212, 210,
- 25, 3, 1, 245, 29, 2, 225, 40, 24, 226, 235, 24, 212, 210, 25, 3, 1, 245,
- 29, 2, 207, 24, 226, 235, 24, 212, 210, 25, 3, 1, 245, 29, 2, 225, 40,
- 24, 226, 51, 24, 212, 210, 25, 3, 1, 245, 29, 2, 207, 24, 226, 51, 24,
- 212, 210, 25, 6, 1, 245, 29, 2, 225, 40, 24, 225, 51, 25, 6, 1, 245, 29,
- 2, 207, 24, 225, 51, 25, 6, 1, 245, 29, 2, 225, 40, 24, 214, 246, 24,
- 225, 51, 25, 6, 1, 245, 29, 2, 207, 24, 214, 246, 24, 225, 51, 25, 6, 1,
- 245, 29, 2, 225, 40, 24, 226, 235, 24, 225, 51, 25, 6, 1, 245, 29, 2,
- 207, 24, 226, 235, 24, 225, 51, 25, 6, 1, 245, 29, 2, 225, 40, 24, 226,
- 51, 24, 225, 51, 25, 6, 1, 245, 29, 2, 207, 24, 226, 51, 24, 225, 51, 25,
- 3, 1, 227, 68, 2, 225, 40, 24, 212, 210, 25, 3, 1, 227, 68, 2, 207, 24,
- 212, 210, 25, 3, 1, 227, 68, 2, 225, 40, 24, 214, 246, 24, 212, 210, 25,
- 3, 1, 227, 68, 2, 207, 24, 214, 246, 24, 212, 210, 25, 3, 1, 227, 68, 2,
- 225, 40, 24, 226, 235, 24, 212, 210, 25, 3, 1, 227, 68, 2, 207, 24, 226,
- 235, 24, 212, 210, 25, 3, 1, 227, 68, 2, 225, 40, 24, 226, 51, 24, 212,
- 210, 25, 3, 1, 227, 68, 2, 207, 24, 226, 51, 24, 212, 210, 25, 6, 1, 227,
- 68, 2, 225, 40, 24, 225, 51, 25, 6, 1, 227, 68, 2, 207, 24, 225, 51, 25,
- 6, 1, 227, 68, 2, 225, 40, 24, 214, 246, 24, 225, 51, 25, 6, 1, 227, 68,
- 2, 207, 24, 214, 246, 24, 225, 51, 25, 6, 1, 227, 68, 2, 225, 40, 24,
- 226, 235, 24, 225, 51, 25, 6, 1, 227, 68, 2, 207, 24, 226, 235, 24, 225,
- 51, 25, 6, 1, 227, 68, 2, 225, 40, 24, 226, 51, 24, 225, 51, 25, 6, 1,
- 227, 68, 2, 207, 24, 226, 51, 24, 225, 51, 25, 3, 1, 254, 53, 2, 214,
- 101, 25, 3, 1, 254, 53, 2, 232, 37, 25, 3, 1, 254, 53, 2, 214, 246, 24,
- 212, 210, 25, 3, 1, 254, 53, 2, 212, 210, 25, 3, 1, 254, 53, 2, 226, 235,
- 24, 212, 210, 25, 3, 1, 254, 53, 2, 226, 50, 25, 3, 1, 254, 53, 2, 226,
- 51, 24, 212, 210, 25, 6, 1, 254, 53, 2, 214, 101, 25, 6, 1, 254, 53, 2,
- 232, 37, 25, 6, 1, 254, 53, 2, 214, 245, 25, 6, 1, 254, 53, 2, 226, 234,
- 25, 6, 1, 254, 53, 2, 225, 51, 25, 234, 11, 25, 225, 51, 25, 225, 39, 25,
- 226, 50, 25, 247, 204, 24, 226, 50, 25, 3, 1, 245, 29, 2, 214, 246, 24,
- 212, 210, 25, 3, 1, 245, 29, 2, 212, 210, 25, 3, 1, 245, 29, 2, 226, 235,
- 24, 212, 210, 25, 3, 1, 245, 29, 2, 226, 50, 25, 3, 1, 245, 29, 2, 226,
- 51, 24, 212, 210, 25, 6, 1, 245, 64, 2, 214, 245, 25, 6, 1, 245, 64, 2,
- 226, 234, 25, 6, 1, 245, 29, 2, 214, 245, 25, 6, 1, 245, 29, 2, 226, 234,
- 25, 6, 1, 245, 29, 2, 225, 51, 25, 225, 40, 24, 214, 245, 25, 225, 40,
- 24, 226, 234, 25, 225, 40, 24, 226, 50, 25, 3, 1, 235, 184, 2, 214, 101,
- 25, 3, 1, 235, 184, 2, 232, 37, 25, 3, 1, 235, 184, 2, 247, 204, 24, 214,
- 245, 25, 3, 1, 235, 184, 2, 247, 204, 24, 226, 234, 25, 3, 1, 235, 184,
- 2, 226, 50, 25, 3, 1, 235, 184, 2, 247, 204, 24, 226, 50, 25, 6, 1, 235,
- 184, 2, 214, 101, 25, 6, 1, 235, 184, 2, 232, 37, 25, 6, 1, 235, 184, 2,
- 214, 245, 25, 6, 1, 235, 184, 2, 226, 234, 25, 207, 24, 214, 245, 25,
- 207, 24, 226, 234, 25, 207, 24, 226, 50, 25, 3, 1, 215, 129, 2, 214, 101,
- 25, 3, 1, 215, 129, 2, 232, 37, 25, 3, 1, 215, 129, 2, 247, 204, 24, 214,
- 245, 25, 3, 1, 215, 129, 2, 247, 204, 24, 226, 234, 25, 3, 1, 223, 191,
- 2, 225, 39, 25, 3, 1, 223, 191, 2, 248, 99, 25, 3, 1, 215, 129, 2, 226,
- 50, 25, 3, 1, 215, 129, 2, 247, 204, 24, 226, 50, 25, 6, 1, 215, 129, 2,
- 214, 101, 25, 6, 1, 215, 129, 2, 232, 37, 25, 6, 1, 215, 129, 2, 214,
- 245, 25, 6, 1, 215, 129, 2, 226, 234, 25, 6, 1, 223, 191, 2, 248, 99, 25,
- 247, 204, 24, 214, 245, 25, 247, 204, 24, 226, 234, 25, 214, 245, 25, 3,
- 1, 227, 68, 2, 214, 246, 24, 212, 210, 25, 3, 1, 227, 68, 2, 212, 210,
- 25, 3, 1, 227, 68, 2, 226, 235, 24, 212, 210, 25, 3, 1, 227, 68, 2, 226,
- 50, 25, 3, 1, 227, 68, 2, 226, 51, 24, 212, 210, 25, 6, 1, 227, 66, 2,
- 214, 245, 25, 6, 1, 227, 66, 2, 226, 234, 25, 6, 1, 227, 68, 2, 214, 245,
- 25, 6, 1, 227, 68, 2, 226, 234, 25, 6, 1, 227, 68, 2, 225, 51, 25, 226,
- 234, 25, 248, 99, 245, 109, 224, 172, 245, 118, 224, 172, 245, 109, 219,
- 206, 245, 118, 219, 206, 217, 95, 219, 206, 243, 235, 219, 206, 220, 51,
- 219, 206, 244, 81, 219, 206, 225, 27, 219, 206, 217, 123, 219, 206, 242,
- 17, 219, 206, 212, 80, 213, 230, 219, 206, 212, 80, 213, 230, 228, 178,
- 212, 80, 213, 230, 235, 66, 233, 62, 77, 223, 140, 77, 240, 160, 228,
- 179, 240, 160, 244, 81, 248, 101, 245, 109, 248, 101, 245, 118, 248, 101,
- 199, 134, 51, 71, 232, 242, 51, 115, 232, 242, 42, 220, 81, 224, 143, 77,
- 46, 220, 81, 224, 143, 77, 220, 81, 232, 164, 224, 143, 77, 220, 81, 241,
- 149, 224, 143, 77, 42, 51, 224, 143, 77, 46, 51, 224, 143, 77, 51, 232,
- 164, 224, 143, 77, 51, 241, 149, 224, 143, 77, 248, 149, 51, 248, 149,
- 251, 42, 216, 180, 251, 42, 122, 62, 233, 80, 117, 62, 233, 80, 199, 245,
- 120, 240, 158, 225, 144, 232, 243, 221, 57, 226, 143, 221, 57, 233, 62,
- 245, 116, 223, 140, 245, 116, 225, 126, 247, 148, 243, 244, 233, 62, 226,
- 241, 223, 140, 226, 241, 230, 14, 228, 184, 219, 206, 226, 58, 231, 6,
- 52, 226, 58, 217, 201, 217, 101, 52, 225, 71, 51, 225, 71, 216, 169, 225,
- 71, 223, 202, 225, 71, 223, 202, 51, 225, 71, 223, 202, 216, 169, 225,
- 71, 250, 170, 220, 81, 233, 66, 254, 19, 224, 143, 77, 220, 81, 223, 144,
- 254, 19, 224, 143, 77, 224, 0, 77, 51, 244, 254, 77, 235, 198, 226, 243,
- 215, 150, 137, 217, 65, 250, 171, 235, 213, 225, 144, 253, 130, 240, 161,
- 251, 42, 243, 228, 220, 23, 42, 41, 251, 85, 2, 224, 152, 46, 41, 251,
- 85, 2, 224, 152, 51, 224, 158, 77, 224, 158, 244, 254, 77, 244, 254, 224,
- 158, 77, 217, 23, 5, 245, 30, 223, 202, 225, 200, 52, 83, 132, 251, 42,
- 83, 95, 251, 42, 115, 253, 132, 223, 202, 221, 70, 249, 194, 215, 134,
- 117, 253, 131, 254, 67, 214, 165, 249, 156, 230, 251, 52, 218, 179, 248,
- 101, 235, 191, 215, 150, 244, 21, 225, 27, 77, 133, 62, 225, 26, 224,
- 169, 225, 71, 243, 237, 62, 225, 26, 244, 50, 62, 225, 26, 117, 62, 225,
- 26, 243, 237, 62, 77, 246, 72, 249, 70, 216, 179, 71, 243, 237, 247, 72,
- 231, 147, 14, 219, 206, 213, 196, 235, 66, 243, 198, 253, 222, 235, 189,
- 217, 38, 235, 189, 221, 57, 235, 189, 225, 156, 235, 225, 218, 127, 218,
- 196, 254, 166, 218, 127, 218, 196, 235, 225, 12, 243, 245, 221, 3, 254,
- 166, 12, 243, 245, 221, 3, 230, 10, 21, 221, 4, 228, 180, 21, 221, 4,
- 218, 223, 212, 79, 218, 223, 7, 3, 1, 72, 218, 223, 163, 218, 223, 180,
- 218, 223, 189, 218, 223, 198, 218, 223, 195, 218, 223, 200, 218, 223, 94,
- 52, 218, 223, 230, 250, 218, 223, 245, 61, 52, 218, 223, 42, 226, 131,
- 218, 223, 46, 226, 131, 218, 223, 7, 3, 1, 204, 219, 10, 212, 79, 219,
- 10, 116, 219, 10, 109, 219, 10, 166, 219, 10, 163, 219, 10, 180, 219, 10,
- 189, 219, 10, 198, 219, 10, 195, 219, 10, 200, 219, 10, 94, 52, 219, 10,
- 230, 250, 219, 10, 245, 61, 52, 219, 10, 42, 226, 131, 219, 10, 46, 226,
- 131, 7, 219, 10, 3, 1, 61, 7, 219, 10, 3, 1, 74, 7, 219, 10, 3, 1, 75, 7,
- 219, 10, 3, 1, 213, 166, 7, 219, 10, 3, 1, 222, 113, 7, 219, 10, 3, 1,
- 242, 41, 7, 219, 10, 3, 1, 235, 27, 7, 219, 10, 3, 1, 150, 7, 219, 10, 3,
- 1, 183, 7, 219, 10, 3, 1, 204, 7, 219, 10, 3, 1, 226, 229, 7, 219, 10, 3,
- 1, 197, 7, 219, 10, 3, 1, 218, 99, 245, 13, 52, 249, 165, 52, 249, 57,
- 52, 243, 221, 243, 224, 52, 232, 227, 52, 231, 7, 52, 230, 29, 52, 226,
- 38, 52, 223, 29, 52, 213, 204, 52, 156, 220, 229, 52, 247, 81, 52, 245,
- 14, 52, 234, 85, 52, 216, 76, 52, 246, 55, 52, 243, 16, 226, 68, 52, 226,
- 36, 52, 242, 88, 52, 253, 98, 52, 240, 215, 52, 250, 119, 52, 232, 220,
- 216, 216, 52, 219, 188, 52, 217, 198, 52, 235, 238, 223, 29, 52, 37, 42,
- 241, 238, 49, 37, 46, 241, 238, 49, 37, 184, 71, 232, 243, 226, 244, 37,
- 220, 175, 71, 232, 243, 226, 244, 37, 253, 255, 76, 49, 37, 249, 195, 76,
- 49, 37, 42, 76, 49, 37, 46, 76, 49, 37, 223, 131, 226, 244, 37, 249, 195,
- 223, 131, 226, 244, 37, 253, 255, 223, 131, 226, 244, 37, 133, 176, 49,
- 37, 243, 237, 176, 49, 37, 245, 104, 249, 228, 37, 245, 104, 219, 166,
- 37, 245, 104, 247, 200, 37, 245, 104, 249, 229, 252, 97, 37, 42, 46, 76,
- 49, 37, 245, 104, 222, 107, 37, 245, 104, 234, 141, 37, 245, 104, 215,
- 126, 225, 141, 216, 183, 37, 223, 203, 219, 232, 226, 244, 37, 51, 71,
- 219, 45, 226, 244, 37, 254, 9, 87, 37, 216, 169, 215, 152, 37, 213, 232,
- 251, 68, 49, 37, 132, 76, 226, 244, 37, 184, 51, 219, 232, 226, 244, 37,
- 95, 241, 238, 2, 206, 246, 57, 37, 132, 241, 238, 2, 206, 246, 57, 37,
- 42, 76, 55, 37, 46, 76, 55, 37, 253, 133, 49, 254, 171, 227, 97, 254,
- 156, 211, 211, 217, 149, 219, 19, 187, 6, 250, 252, 248, 22, 250, 112,
- 250, 109, 232, 243, 87, 250, 172, 227, 97, 250, 212, 215, 159, 245, 15,
- 249, 130, 222, 104, 248, 22, 244, 147, 113, 3, 243, 177, 113, 6, 242, 41,
- 251, 142, 6, 242, 41, 187, 6, 242, 41, 225, 169, 249, 130, 225, 169, 249,
- 131, 110, 117, 225, 240, 113, 6, 72, 251, 142, 6, 72, 113, 6, 150, 113,
- 3, 150, 233, 171, 54, 252, 60, 87, 187, 6, 204, 228, 52, 52, 219, 218,
- 224, 12, 249, 101, 113, 6, 226, 229, 187, 6, 226, 229, 187, 6, 224, 240,
- 113, 6, 149, 251, 142, 6, 149, 187, 6, 149, 225, 76, 218, 21, 223, 214,
- 221, 53, 77, 217, 210, 52, 216, 210, 152, 52, 214, 217, 187, 6, 212, 152,
- 227, 1, 52, 227, 87, 52, 235, 191, 227, 87, 52, 251, 142, 6, 212, 152,
- 216, 58, 25, 3, 1, 235, 183, 234, 179, 52, 254, 16, 52, 113, 6, 253, 74,
- 251, 142, 6, 250, 252, 245, 33, 87, 113, 3, 74, 113, 6, 74, 113, 6, 244,
- 230, 216, 58, 6, 244, 230, 113, 6, 183, 113, 3, 75, 106, 87, 251, 206,
- 87, 242, 178, 87, 248, 135, 87, 235, 229, 219, 216, 223, 89, 6, 224, 240,
- 244, 150, 52, 187, 3, 225, 240, 187, 3, 243, 83, 187, 6, 243, 83, 187, 6,
- 225, 240, 187, 230, 97, 218, 241, 216, 58, 35, 6, 243, 177, 216, 58, 35,
- 6, 150, 223, 202, 35, 6, 150, 216, 58, 35, 6, 213, 105, 187, 32, 6, 249,
- 3, 187, 32, 3, 249, 3, 187, 32, 3, 74, 187, 32, 3, 72, 187, 32, 3, 235,
- 142, 225, 54, 232, 242, 216, 58, 254, 35, 226, 58, 52, 254, 88, 216, 58,
- 3, 244, 230, 16, 31, 222, 167, 219, 216, 214, 97, 243, 228, 122, 221, 39,
- 214, 97, 243, 228, 122, 229, 25, 214, 97, 243, 228, 122, 217, 194, 214,
- 97, 243, 228, 122, 217, 121, 214, 97, 243, 228, 117, 217, 119, 214, 97,
- 243, 228, 122, 244, 86, 214, 97, 243, 228, 117, 244, 85, 214, 97, 243,
- 228, 133, 244, 85, 214, 97, 243, 228, 243, 237, 244, 85, 214, 97, 243,
- 228, 122, 220, 43, 214, 97, 243, 228, 244, 50, 220, 41, 214, 97, 243,
- 228, 122, 245, 145, 214, 97, 243, 228, 133, 245, 143, 214, 97, 243, 228,
- 244, 50, 245, 143, 214, 97, 243, 228, 221, 43, 245, 143, 243, 228, 228,
- 53, 116, 223, 100, 228, 54, 116, 223, 100, 228, 54, 109, 223, 100, 228,
- 54, 166, 223, 100, 228, 54, 163, 223, 100, 228, 54, 180, 223, 100, 228,
- 54, 189, 223, 100, 228, 54, 198, 223, 100, 228, 54, 195, 223, 100, 228,
- 54, 200, 223, 100, 228, 54, 217, 200, 223, 100, 228, 54, 245, 124, 223,
- 100, 228, 54, 216, 41, 223, 100, 228, 54, 244, 83, 223, 100, 228, 54,
- 122, 240, 200, 223, 100, 228, 54, 244, 50, 240, 200, 223, 100, 228, 54,
- 122, 217, 100, 3, 223, 100, 228, 54, 116, 3, 223, 100, 228, 54, 109, 3,
- 223, 100, 228, 54, 166, 3, 223, 100, 228, 54, 163, 3, 223, 100, 228, 54,
- 180, 3, 223, 100, 228, 54, 189, 3, 223, 100, 228, 54, 198, 3, 223, 100,
- 228, 54, 195, 3, 223, 100, 228, 54, 200, 3, 223, 100, 228, 54, 217, 200,
- 3, 223, 100, 228, 54, 245, 124, 3, 223, 100, 228, 54, 216, 41, 3, 223,
- 100, 228, 54, 244, 83, 3, 223, 100, 228, 54, 122, 240, 200, 3, 223, 100,
- 228, 54, 244, 50, 240, 200, 3, 223, 100, 228, 54, 122, 217, 100, 223,
- 100, 228, 54, 122, 217, 101, 250, 253, 249, 3, 223, 100, 228, 54, 244,
- 50, 217, 100, 223, 100, 228, 54, 217, 201, 217, 100, 223, 100, 228, 54,
- 223, 202, 122, 240, 200, 7, 3, 1, 223, 202, 250, 252, 223, 100, 228, 54,
- 220, 53, 233, 101, 17, 223, 100, 228, 54, 244, 84, 245, 182, 17, 223,
- 100, 228, 54, 244, 84, 217, 100, 223, 100, 228, 54, 122, 240, 201, 217,
- 100, 214, 97, 243, 228, 212, 80, 217, 119, 132, 68, 215, 124, 68, 95, 68,
- 246, 58, 68, 42, 46, 68, 114, 119, 68, 228, 167, 213, 250, 68, 228, 167,
- 245, 176, 68, 219, 215, 245, 176, 68, 219, 215, 213, 250, 68, 132, 76, 2,
- 90, 95, 76, 2, 90, 132, 214, 20, 68, 95, 214, 20, 68, 132, 117, 241, 218,
- 68, 215, 124, 117, 241, 218, 68, 95, 117, 241, 218, 68, 246, 58, 117,
- 241, 218, 68, 132, 76, 2, 218, 27, 95, 76, 2, 218, 27, 132, 76, 243, 213,
- 134, 215, 124, 76, 243, 213, 134, 95, 76, 243, 213, 134, 246, 58, 76,
- 243, 213, 134, 114, 119, 76, 2, 252, 47, 132, 76, 2, 101, 95, 76, 2, 101,
- 132, 76, 2, 232, 177, 95, 76, 2, 232, 177, 42, 46, 214, 20, 68, 42, 46,
- 76, 2, 90, 246, 58, 212, 28, 68, 215, 124, 76, 2, 217, 30, 233, 61, 215,
- 124, 76, 2, 217, 30, 223, 138, 246, 58, 76, 2, 217, 30, 233, 61, 246, 58,
- 76, 2, 217, 30, 223, 138, 95, 76, 2, 249, 100, 246, 57, 246, 58, 76, 2,
- 249, 100, 233, 61, 253, 255, 216, 227, 221, 73, 68, 249, 195, 216, 227,
- 221, 73, 68, 228, 167, 213, 250, 76, 211, 211, 184, 134, 132, 76, 211,
- 211, 252, 60, 110, 95, 76, 211, 211, 134, 253, 255, 227, 40, 249, 229,
- 68, 249, 195, 227, 40, 249, 229, 68, 132, 241, 238, 2, 206, 215, 123,
- 132, 241, 238, 2, 206, 246, 57, 215, 124, 241, 238, 2, 206, 223, 138,
- 215, 124, 241, 238, 2, 206, 233, 61, 95, 241, 238, 2, 206, 215, 123, 95,
- 241, 238, 2, 206, 246, 57, 246, 58, 241, 238, 2, 206, 223, 138, 246, 58,
- 241, 238, 2, 206, 233, 61, 95, 76, 110, 132, 68, 215, 124, 76, 132, 65,
- 246, 58, 68, 132, 76, 110, 95, 68, 132, 226, 197, 253, 162, 215, 124,
- 226, 197, 253, 162, 95, 226, 197, 253, 162, 246, 58, 226, 197, 253, 162,
- 132, 241, 238, 110, 95, 241, 237, 95, 241, 238, 110, 132, 241, 237, 132,
- 51, 76, 2, 90, 42, 46, 51, 76, 2, 90, 95, 51, 76, 2, 90, 132, 51, 68,
- 215, 124, 51, 68, 95, 51, 68, 246, 58, 51, 68, 42, 46, 51, 68, 114, 119,
- 51, 68, 228, 167, 213, 250, 51, 68, 228, 167, 245, 176, 51, 68, 219, 215,
- 245, 176, 51, 68, 219, 215, 213, 250, 51, 68, 132, 216, 169, 68, 95, 216,
- 169, 68, 132, 219, 162, 68, 95, 219, 162, 68, 215, 124, 76, 2, 51, 90,
- 246, 58, 76, 2, 51, 90, 132, 248, 100, 68, 215, 124, 248, 100, 68, 95,
- 248, 100, 68, 246, 58, 248, 100, 68, 132, 76, 211, 211, 134, 95, 76, 211,
- 211, 134, 132, 67, 68, 215, 124, 67, 68, 95, 67, 68, 246, 58, 67, 68,
- 215, 124, 67, 76, 243, 213, 134, 215, 124, 67, 76, 227, 63, 226, 89, 215,
- 124, 67, 76, 227, 63, 226, 90, 2, 199, 134, 215, 124, 67, 76, 227, 63,
- 226, 90, 2, 71, 134, 215, 124, 67, 51, 68, 215, 124, 67, 51, 76, 227, 63,
- 226, 89, 95, 67, 76, 243, 213, 214, 40, 228, 167, 213, 250, 76, 211, 211,
- 249, 99, 219, 215, 245, 176, 76, 211, 211, 249, 99, 114, 119, 67, 68, 46,
- 76, 2, 3, 249, 228, 246, 58, 76, 132, 65, 215, 124, 68, 133, 95, 253,
- 162, 132, 76, 2, 71, 90, 95, 76, 2, 71, 90, 42, 46, 76, 2, 71, 90, 132,
- 76, 2, 51, 71, 90, 95, 76, 2, 51, 71, 90, 42, 46, 76, 2, 51, 71, 90, 132,
- 227, 38, 68, 95, 227, 38, 68, 42, 46, 227, 38, 68, 31, 254, 63, 249, 153,
- 226, 125, 247, 185, 217, 140, 244, 250, 217, 140, 247, 92, 228, 163, 244,
- 251, 245, 110, 221, 48, 235, 241, 230, 39, 245, 127, 227, 97, 228, 163,
- 254, 33, 245, 127, 227, 97, 3, 245, 127, 227, 97, 249, 125, 253, 153,
- 231, 126, 247, 92, 228, 163, 249, 127, 253, 153, 231, 126, 3, 249, 125,
- 253, 153, 231, 126, 245, 101, 65, 225, 56, 230, 97, 225, 63, 230, 97,
- 249, 104, 230, 97, 218, 241, 230, 251, 52, 230, 249, 52, 62, 225, 156,
- 247, 121, 220, 23, 221, 49, 230, 250, 253, 133, 227, 33, 223, 131, 227,
- 33, 251, 43, 227, 33, 41, 223, 95, 249, 50, 223, 95, 243, 230, 223, 95,
- 225, 52, 108, 235, 231, 46, 254, 18, 254, 18, 231, 153, 254, 18, 219,
- 187, 254, 18, 247, 123, 247, 92, 228, 163, 247, 126, 226, 136, 108, 228,
- 163, 226, 136, 108, 232, 199, 254, 27, 232, 199, 227, 24, 235, 195, 215,
- 146, 235, 208, 51, 235, 208, 216, 169, 235, 208, 249, 121, 235, 208, 218,
- 213, 235, 208, 214, 110, 235, 208, 249, 195, 235, 208, 249, 195, 249,
- 121, 235, 208, 253, 255, 249, 121, 235, 208, 217, 139, 251, 243, 224, 29,
- 225, 53, 62, 230, 250, 245, 0, 243, 22, 225, 53, 241, 43, 217, 43, 227,
- 33, 223, 202, 217, 42, 235, 191, 233, 89, 197, 220, 83, 214, 19, 213,
- 188, 225, 63, 228, 163, 217, 42, 230, 251, 217, 42, 253, 126, 123, 108,
- 228, 163, 253, 126, 123, 108, 253, 218, 123, 108, 253, 218, 251, 17, 228,
- 163, 254, 165, 123, 108, 229, 181, 253, 218, 228, 170, 254, 165, 123,
- 108, 254, 57, 123, 108, 228, 163, 254, 57, 123, 108, 254, 57, 123, 167,
- 123, 108, 216, 169, 217, 42, 254, 64, 123, 108, 245, 57, 108, 243, 21,
- 245, 57, 108, 247, 186, 251, 200, 253, 220, 217, 149, 232, 250, 243, 21,
- 123, 108, 253, 218, 123, 211, 211, 167, 217, 149, 236, 10, 227, 97, 236,
- 10, 65, 167, 253, 218, 123, 108, 249, 165, 245, 60, 245, 61, 249, 164,
- 223, 131, 235, 252, 123, 108, 223, 131, 123, 108, 249, 93, 108, 245, 32,
- 245, 59, 108, 219, 96, 245, 60, 248, 6, 123, 108, 123, 211, 211, 251, 7,
- 248, 23, 231, 153, 251, 6, 224, 156, 123, 108, 228, 163, 123, 108, 240,
- 97, 108, 228, 163, 240, 97, 108, 219, 49, 245, 57, 108, 233, 39, 167,
- 123, 108, 242, 107, 167, 123, 108, 233, 39, 110, 123, 108, 242, 107, 110,
- 123, 108, 233, 39, 251, 17, 228, 163, 123, 108, 242, 107, 251, 17, 228,
- 163, 123, 108, 230, 167, 233, 38, 230, 167, 242, 106, 251, 200, 228, 163,
- 245, 57, 108, 228, 163, 233, 38, 228, 163, 242, 106, 229, 181, 233, 39,
- 228, 170, 123, 108, 229, 181, 242, 107, 228, 170, 123, 108, 233, 39, 167,
- 245, 57, 108, 242, 107, 167, 245, 57, 108, 229, 181, 233, 39, 228, 170,
- 245, 57, 108, 229, 181, 242, 107, 228, 170, 245, 57, 108, 233, 39, 167,
- 242, 106, 242, 107, 167, 233, 38, 229, 181, 233, 39, 228, 170, 242, 106,
- 229, 181, 242, 107, 228, 170, 233, 38, 225, 82, 219, 0, 225, 83, 167,
- 123, 108, 219, 1, 167, 123, 108, 225, 83, 167, 245, 57, 108, 219, 1, 167,
- 245, 57, 108, 247, 92, 228, 163, 225, 85, 247, 92, 228, 163, 219, 2, 219,
- 9, 227, 97, 218, 222, 227, 97, 228, 163, 118, 219, 9, 227, 97, 228, 163,
- 118, 218, 222, 227, 97, 219, 9, 65, 167, 123, 108, 218, 222, 65, 167,
- 123, 108, 229, 181, 118, 219, 9, 65, 228, 170, 123, 108, 229, 181, 118,
- 218, 222, 65, 228, 170, 123, 108, 219, 9, 65, 2, 228, 163, 123, 108, 218,
- 222, 65, 2, 228, 163, 123, 108, 230, 151, 230, 152, 230, 153, 230, 152,
- 215, 146, 41, 236, 10, 227, 97, 41, 227, 17, 227, 97, 41, 236, 10, 65,
- 167, 123, 108, 41, 227, 17, 65, 167, 123, 108, 41, 250, 183, 41, 249, 43,
- 36, 225, 156, 36, 230, 250, 36, 217, 38, 36, 247, 121, 220, 23, 36, 62,
- 227, 33, 36, 223, 131, 227, 33, 36, 253, 133, 227, 33, 36, 245, 60, 36,
- 248, 101, 91, 225, 156, 91, 230, 250, 91, 217, 38, 91, 62, 227, 33, 46,
- 218, 36, 42, 218, 36, 119, 218, 36, 114, 218, 36, 253, 136, 230, 226,
- 216, 149, 243, 250, 216, 169, 71, 252, 60, 46, 216, 57, 51, 71, 252, 60,
- 51, 46, 216, 57, 247, 92, 228, 163, 225, 48, 228, 163, 216, 149, 247, 92,
- 228, 163, 243, 251, 229, 183, 51, 71, 252, 60, 51, 46, 216, 57, 225, 83,
- 215, 154, 223, 241, 219, 1, 215, 154, 223, 241, 228, 168, 219, 22, 227,
- 97, 249, 125, 253, 153, 228, 168, 219, 21, 228, 168, 219, 22, 65, 167,
- 123, 108, 249, 125, 253, 153, 228, 168, 219, 22, 167, 123, 108, 227, 17,
- 227, 97, 236, 10, 227, 97, 230, 157, 241, 185, 249, 136, 231, 200, 235,
- 205, 213, 133, 230, 22, 228, 169, 46, 254, 19, 2, 253, 195, 46, 216, 183,
- 230, 97, 232, 199, 254, 27, 230, 97, 232, 199, 227, 24, 230, 97, 235,
- 195, 230, 97, 215, 146, 247, 201, 227, 33, 62, 227, 33, 219, 96, 227, 33,
- 247, 121, 217, 38, 251, 90, 42, 228, 168, 244, 149, 221, 69, 225, 63, 46,
- 228, 168, 244, 149, 221, 69, 225, 63, 42, 221, 69, 225, 63, 46, 221, 69,
- 225, 63, 223, 202, 217, 43, 245, 60, 249, 40, 232, 199, 227, 24, 249, 40,
- 232, 199, 254, 27, 51, 219, 8, 51, 218, 221, 51, 235, 195, 51, 215, 146,
- 225, 179, 123, 24, 226, 136, 108, 233, 39, 2, 247, 74, 242, 107, 2, 247,
- 74, 214, 164, 230, 167, 233, 38, 214, 164, 230, 167, 242, 106, 233, 39,
- 123, 211, 211, 167, 242, 106, 242, 107, 123, 211, 211, 167, 233, 38, 123,
- 211, 211, 167, 233, 38, 123, 211, 211, 167, 242, 106, 123, 211, 211, 167,
- 225, 82, 123, 211, 211, 167, 219, 0, 247, 92, 228, 163, 225, 86, 167,
- 245, 62, 247, 92, 228, 163, 219, 3, 167, 245, 62, 228, 163, 41, 236, 10,
- 65, 167, 123, 108, 228, 163, 41, 227, 17, 65, 167, 123, 108, 41, 236, 10,
- 65, 167, 228, 163, 123, 108, 41, 227, 17, 65, 167, 228, 163, 123, 108,
- 233, 39, 251, 17, 228, 163, 245, 57, 108, 242, 107, 251, 17, 228, 163,
- 245, 57, 108, 225, 83, 251, 17, 228, 163, 245, 57, 108, 219, 1, 251, 17,
- 228, 163, 245, 57, 108, 228, 163, 228, 168, 219, 22, 227, 97, 247, 92,
- 228, 163, 249, 127, 253, 153, 228, 168, 219, 21, 228, 163, 228, 168, 219,
- 22, 65, 167, 123, 108, 247, 92, 228, 163, 249, 127, 253, 153, 228, 168,
- 219, 22, 167, 245, 62, 71, 245, 120, 231, 35, 199, 245, 120, 114, 46,
- 247, 207, 245, 120, 119, 46, 247, 207, 245, 120, 245, 127, 65, 2, 184,
- 199, 90, 245, 127, 65, 2, 71, 252, 60, 253, 123, 245, 101, 65, 199, 90,
- 3, 245, 127, 65, 2, 71, 252, 60, 253, 123, 245, 101, 65, 199, 90, 245,
- 127, 65, 2, 62, 49, 245, 127, 65, 2, 226, 247, 3, 245, 127, 65, 2, 226,
- 247, 245, 127, 65, 2, 215, 153, 245, 127, 65, 2, 117, 199, 219, 32, 249,
- 125, 2, 184, 199, 90, 249, 125, 2, 71, 252, 60, 253, 123, 245, 101, 65,
- 199, 90, 3, 249, 125, 2, 71, 252, 60, 253, 123, 245, 101, 65, 199, 90,
- 249, 125, 2, 226, 247, 3, 249, 125, 2, 226, 247, 212, 153, 174, 252, 91,
- 231, 125, 247, 202, 52, 245, 129, 68, 240, 221, 114, 253, 164, 119, 253,
- 164, 225, 59, 226, 41, 214, 16, 232, 242, 42, 250, 115, 46, 250, 115, 42,
- 244, 26, 46, 244, 26, 251, 101, 46, 249, 72, 251, 101, 42, 249, 72, 216,
- 227, 46, 249, 72, 216, 227, 42, 249, 72, 223, 202, 228, 163, 52, 41, 232,
- 159, 253, 195, 222, 83, 222, 90, 217, 210, 224, 13, 225, 121, 235, 235,
- 214, 145, 219, 166, 225, 173, 65, 235, 204, 52, 216, 58, 228, 163, 52,
- 214, 26, 240, 223, 216, 227, 42, 249, 99, 216, 227, 46, 249, 99, 251,
- 101, 42, 249, 99, 251, 101, 46, 249, 99, 216, 227, 151, 235, 208, 251,
- 101, 151, 235, 208, 243, 210, 220, 3, 114, 253, 165, 251, 201, 117, 199,
- 252, 49, 227, 26, 234, 144, 245, 53, 211, 211, 217, 149, 223, 148, 213,
- 167, 235, 252, 118, 224, 10, 251, 89, 234, 143, 233, 66, 254, 19, 125,
- 223, 144, 254, 19, 125, 245, 53, 211, 211, 217, 149, 233, 70, 251, 212,
- 223, 130, 249, 13, 254, 64, 253, 172, 218, 126, 216, 217, 223, 34, 247,
- 167, 227, 18, 249, 138, 218, 3, 220, 14, 249, 90, 249, 89, 194, 196, 16,
- 240, 143, 194, 196, 16, 219, 160, 224, 172, 194, 196, 16, 224, 173, 245,
- 62, 194, 196, 16, 224, 173, 247, 126, 194, 196, 16, 224, 173, 247, 200,
- 194, 196, 16, 224, 173, 235, 59, 194, 196, 16, 224, 173, 249, 228, 194,
- 196, 16, 249, 229, 219, 75, 194, 196, 16, 249, 229, 235, 59, 194, 196,
- 16, 220, 24, 134, 194, 196, 16, 252, 98, 134, 194, 196, 16, 224, 173,
- 220, 23, 194, 196, 16, 224, 173, 252, 97, 194, 196, 16, 224, 173, 233,
- 38, 194, 196, 16, 224, 173, 242, 106, 194, 196, 16, 132, 214, 251, 194,
- 196, 16, 95, 214, 251, 194, 196, 16, 224, 173, 132, 68, 194, 196, 16,
- 224, 173, 95, 68, 194, 196, 16, 249, 229, 252, 97, 194, 196, 16, 119,
- 218, 37, 215, 153, 194, 196, 16, 248, 6, 219, 75, 194, 196, 16, 224, 173,
- 119, 250, 170, 194, 196, 16, 224, 173, 248, 5, 194, 196, 16, 119, 218,
- 37, 235, 59, 194, 196, 16, 215, 124, 214, 251, 194, 196, 16, 224, 173,
- 215, 124, 68, 194, 196, 16, 114, 218, 37, 226, 247, 194, 196, 16, 248,
- 17, 219, 75, 194, 196, 16, 224, 173, 114, 250, 170, 194, 196, 16, 224,
- 173, 248, 16, 194, 196, 16, 114, 218, 37, 235, 59, 194, 196, 16, 246, 58,
- 214, 251, 194, 196, 16, 224, 173, 246, 58, 68, 194, 196, 16, 224, 142,
- 215, 153, 194, 196, 16, 248, 6, 215, 153, 194, 196, 16, 247, 201, 215,
- 153, 194, 196, 16, 235, 60, 215, 153, 194, 196, 16, 249, 229, 215, 153,
- 194, 196, 16, 114, 220, 185, 235, 59, 194, 196, 16, 224, 142, 224, 172,
- 194, 196, 16, 249, 229, 219, 95, 194, 196, 16, 224, 173, 249, 164, 194,
- 196, 16, 114, 218, 37, 247, 209, 194, 196, 16, 248, 17, 247, 209, 194,
- 196, 16, 219, 96, 247, 209, 194, 196, 16, 235, 60, 247, 209, 194, 196,
- 16, 249, 229, 247, 209, 194, 196, 16, 119, 220, 185, 219, 75, 194, 196,
- 16, 42, 220, 185, 219, 75, 194, 196, 16, 217, 43, 247, 209, 194, 196, 16,
- 242, 107, 247, 209, 194, 196, 16, 249, 158, 134, 194, 196, 16, 248, 17,
- 217, 42, 194, 196, 16, 212, 27, 194, 196, 16, 219, 76, 217, 42, 194, 196,
- 16, 221, 71, 215, 153, 194, 196, 16, 224, 173, 228, 163, 245, 62, 194,
- 196, 16, 224, 173, 224, 157, 194, 196, 16, 119, 250, 171, 217, 42, 194,
- 196, 16, 114, 250, 171, 217, 42, 194, 196, 16, 235, 183, 194, 196, 16,
- 223, 190, 194, 196, 16, 227, 67, 194, 196, 16, 254, 53, 215, 153, 194,
- 196, 16, 245, 64, 215, 153, 194, 196, 16, 235, 184, 215, 153, 194, 196,
- 16, 227, 68, 215, 153, 194, 196, 16, 254, 52, 228, 163, 250, 66, 77, 46,
- 254, 19, 2, 246, 58, 212, 28, 68, 220, 159, 227, 40, 251, 89, 251, 222,
- 87, 71, 232, 243, 2, 231, 37, 247, 74, 235, 213, 87, 249, 122, 215, 151,
- 87, 247, 141, 215, 151, 87, 245, 112, 87, 249, 149, 87, 67, 41, 2, 250,
- 109, 71, 232, 242, 245, 89, 87, 254, 48, 234, 145, 87, 241, 197, 87, 36,
- 199, 252, 60, 2, 228, 161, 36, 216, 184, 246, 60, 251, 63, 249, 229, 2,
- 228, 165, 68, 215, 149, 87, 230, 207, 87, 240, 156, 87, 227, 39, 242, 40,
- 87, 227, 39, 233, 169, 87, 226, 117, 87, 226, 116, 87, 247, 149, 249, 38,
- 16, 243, 245, 109, 219, 234, 87, 194, 196, 16, 224, 172, 248, 34, 221,
- 58, 234, 145, 87, 225, 73, 226, 200, 229, 164, 226, 200, 225, 69, 222,
- 108, 87, 249, 210, 222, 108, 87, 42, 226, 132, 215, 131, 101, 42, 226,
- 132, 244, 245, 42, 226, 132, 232, 163, 101, 46, 226, 132, 215, 131, 101,
- 46, 226, 132, 244, 245, 46, 226, 132, 232, 163, 101, 42, 41, 251, 85,
- 215, 131, 249, 99, 42, 41, 251, 85, 244, 245, 42, 41, 251, 85, 232, 163,
- 249, 99, 46, 41, 251, 85, 215, 131, 249, 99, 46, 41, 251, 85, 244, 245,
- 46, 41, 251, 85, 232, 163, 249, 99, 42, 249, 40, 251, 85, 215, 131, 101,
- 42, 249, 40, 251, 85, 231, 37, 225, 233, 42, 249, 40, 251, 85, 232, 163,
- 101, 249, 40, 251, 85, 244, 245, 46, 249, 40, 251, 85, 215, 131, 101, 46,
- 249, 40, 251, 85, 231, 37, 225, 233, 46, 249, 40, 251, 85, 232, 163, 101,
- 235, 209, 244, 245, 199, 232, 243, 244, 245, 215, 131, 42, 167, 232, 163,
- 46, 249, 40, 251, 85, 222, 91, 215, 131, 46, 167, 232, 163, 42, 249, 40,
- 251, 85, 222, 91, 218, 242, 216, 226, 218, 242, 251, 100, 216, 227, 41,
- 125, 251, 101, 41, 125, 251, 101, 41, 251, 85, 110, 216, 227, 41, 125,
- 34, 16, 251, 100, 42, 71, 92, 232, 242, 46, 71, 92, 232, 242, 199, 222,
- 123, 232, 241, 199, 222, 123, 232, 240, 199, 222, 123, 232, 239, 199,
- 222, 123, 232, 238, 247, 253, 16, 177, 71, 24, 216, 227, 223, 148, 247,
- 253, 16, 177, 71, 24, 251, 101, 223, 148, 247, 253, 16, 177, 71, 2, 249,
- 228, 247, 253, 16, 177, 119, 24, 199, 2, 249, 228, 247, 253, 16, 177,
- 114, 24, 199, 2, 249, 228, 247, 253, 16, 177, 71, 2, 216, 183, 247, 253,
- 16, 177, 119, 24, 199, 2, 216, 183, 247, 253, 16, 177, 114, 24, 199, 2,
- 216, 183, 247, 253, 16, 177, 71, 24, 214, 19, 247, 253, 16, 177, 119, 24,
- 199, 2, 214, 19, 247, 253, 16, 177, 114, 24, 199, 2, 214, 19, 247, 253,
- 16, 177, 119, 24, 241, 31, 247, 253, 16, 177, 114, 24, 241, 31, 247, 253,
- 16, 177, 71, 24, 216, 227, 233, 70, 247, 253, 16, 177, 71, 24, 251, 101,
- 233, 70, 41, 244, 1, 223, 206, 87, 245, 139, 87, 71, 232, 243, 244, 245,
- 231, 100, 251, 74, 231, 100, 184, 110, 220, 174, 231, 100, 220, 175, 110,
- 232, 190, 231, 100, 184, 110, 117, 220, 161, 231, 100, 117, 220, 162,
- 110, 232, 190, 231, 100, 117, 220, 162, 235, 67, 231, 100, 216, 166, 231,
- 100, 217, 176, 231, 100, 226, 63, 245, 180, 242, 100, 243, 191, 216, 227,
- 226, 131, 251, 101, 226, 131, 216, 227, 249, 40, 125, 251, 101, 249, 40,
- 125, 216, 227, 216, 219, 220, 233, 125, 251, 101, 216, 219, 220, 233,
- 125, 67, 216, 197, 251, 212, 223, 131, 2, 249, 228, 219, 60, 244, 33,
- 254, 177, 249, 37, 245, 128, 235, 195, 248, 34, 244, 247, 87, 83, 223,
- 144, 51, 216, 183, 83, 233, 66, 51, 216, 183, 83, 215, 133, 51, 216, 183,
- 83, 246, 59, 51, 216, 183, 83, 223, 144, 51, 216, 184, 2, 71, 134, 83,
- 233, 66, 51, 216, 184, 2, 71, 134, 83, 223, 144, 216, 184, 2, 51, 71,
- 134, 254, 81, 249, 196, 219, 66, 217, 39, 249, 196, 240, 224, 2, 244, 19,
- 222, 157, 16, 31, 228, 58, 16, 31, 219, 91, 65, 241, 217, 16, 31, 219,
- 91, 65, 217, 165, 16, 31, 245, 101, 65, 217, 165, 16, 31, 245, 101, 65,
- 216, 200, 16, 31, 245, 91, 16, 31, 254, 168, 16, 31, 251, 221, 16, 31,
- 252, 96, 16, 31, 199, 218, 38, 16, 31, 232, 243, 244, 114, 16, 31, 71,
- 218, 38, 16, 31, 243, 245, 244, 114, 16, 31, 250, 162, 223, 205, 16, 31,
- 220, 208, 226, 254, 16, 31, 220, 208, 235, 251, 16, 31, 248, 97, 232,
- 233, 245, 42, 16, 31, 247, 238, 249, 117, 116, 16, 31, 247, 238, 249,
- 117, 109, 16, 31, 247, 238, 249, 117, 166, 16, 31, 247, 238, 249, 117,
- 163, 16, 31, 146, 254, 168, 16, 31, 218, 123, 236, 57, 16, 31, 245, 101,
- 65, 216, 201, 251, 136, 16, 31, 250, 193, 16, 31, 245, 101, 65, 231, 146,
- 16, 31, 219, 6, 16, 31, 245, 42, 16, 31, 244, 76, 221, 57, 16, 31, 242,
- 99, 221, 57, 16, 31, 224, 14, 221, 57, 16, 31, 215, 145, 221, 57, 16, 31,
- 219, 206, 16, 31, 248, 14, 251, 139, 87, 227, 40, 251, 89, 16, 31, 229,
- 167, 16, 31, 248, 15, 243, 245, 109, 16, 31, 219, 7, 243, 245, 109, 227,
- 105, 101, 227, 105, 250, 87, 227, 105, 243, 248, 227, 105, 235, 191, 243,
- 248, 227, 105, 251, 219, 251, 53, 227, 105, 251, 96, 217, 65, 227, 105,
- 251, 82, 252, 65, 240, 96, 227, 105, 254, 36, 65, 250, 65, 227, 105, 248,
- 101, 227, 105, 249, 29, 254, 171, 228, 56, 227, 105, 51, 252, 97, 36, 21,
- 116, 36, 21, 109, 36, 21, 166, 36, 21, 163, 36, 21, 180, 36, 21, 189, 36,
- 21, 198, 36, 21, 195, 36, 21, 200, 36, 50, 217, 200, 36, 50, 245, 124,
- 36, 50, 216, 41, 36, 50, 217, 117, 36, 50, 243, 231, 36, 50, 244, 87, 36,
- 50, 220, 47, 36, 50, 221, 40, 36, 50, 245, 147, 36, 50, 229, 28, 36, 50,
- 216, 38, 86, 21, 116, 86, 21, 109, 86, 21, 166, 86, 21, 163, 86, 21, 180,
- 86, 21, 189, 86, 21, 198, 86, 21, 195, 86, 21, 200, 86, 50, 217, 200, 86,
- 50, 245, 124, 86, 50, 216, 41, 86, 50, 217, 117, 86, 50, 243, 231, 86,
- 50, 244, 87, 86, 50, 220, 47, 86, 50, 221, 40, 86, 50, 245, 147, 86, 50,
- 229, 28, 86, 50, 216, 38, 21, 122, 243, 200, 219, 69, 21, 117, 243, 200,
- 219, 69, 21, 133, 243, 200, 219, 69, 21, 243, 237, 243, 200, 219, 69, 21,
- 244, 50, 243, 200, 219, 69, 21, 220, 53, 243, 200, 219, 69, 21, 221, 43,
- 243, 200, 219, 69, 21, 245, 150, 243, 200, 219, 69, 21, 229, 31, 243,
- 200, 219, 69, 50, 217, 201, 243, 200, 219, 69, 50, 245, 125, 243, 200,
- 219, 69, 50, 216, 42, 243, 200, 219, 69, 50, 217, 118, 243, 200, 219, 69,
- 50, 243, 232, 243, 200, 219, 69, 50, 244, 88, 243, 200, 219, 69, 50, 220,
- 48, 243, 200, 219, 69, 50, 221, 41, 243, 200, 219, 69, 50, 245, 148, 243,
- 200, 219, 69, 50, 229, 29, 243, 200, 219, 69, 50, 216, 39, 243, 200, 219,
- 69, 86, 7, 3, 1, 61, 86, 7, 3, 1, 253, 74, 86, 7, 3, 1, 250, 252, 86, 7,
- 3, 1, 249, 3, 86, 7, 3, 1, 74, 86, 7, 3, 1, 244, 230, 86, 7, 3, 1, 243,
- 177, 86, 7, 3, 1, 242, 41, 86, 7, 3, 1, 72, 86, 7, 3, 1, 235, 142, 86, 7,
- 3, 1, 235, 27, 86, 7, 3, 1, 150, 86, 7, 3, 1, 183, 86, 7, 3, 1, 204, 86,
- 7, 3, 1, 75, 86, 7, 3, 1, 226, 229, 86, 7, 3, 1, 224, 240, 86, 7, 3, 1,
- 149, 86, 7, 3, 1, 197, 86, 7, 3, 1, 218, 99, 86, 7, 3, 1, 69, 86, 7, 3,
- 1, 215, 79, 86, 7, 3, 1, 214, 82, 86, 7, 3, 1, 213, 166, 86, 7, 3, 1,
- 213, 105, 86, 7, 3, 1, 212, 152, 36, 7, 6, 1, 61, 36, 7, 6, 1, 253, 74,
- 36, 7, 6, 1, 250, 252, 36, 7, 6, 1, 249, 3, 36, 7, 6, 1, 74, 36, 7, 6, 1,
- 244, 230, 36, 7, 6, 1, 243, 177, 36, 7, 6, 1, 242, 41, 36, 7, 6, 1, 72,
- 36, 7, 6, 1, 235, 142, 36, 7, 6, 1, 235, 27, 36, 7, 6, 1, 150, 36, 7, 6,
- 1, 183, 36, 7, 6, 1, 204, 36, 7, 6, 1, 75, 36, 7, 6, 1, 226, 229, 36, 7,
- 6, 1, 224, 240, 36, 7, 6, 1, 149, 36, 7, 6, 1, 197, 36, 7, 6, 1, 218, 99,
- 36, 7, 6, 1, 69, 36, 7, 6, 1, 215, 79, 36, 7, 6, 1, 214, 82, 36, 7, 6, 1,
- 213, 166, 36, 7, 6, 1, 213, 105, 36, 7, 6, 1, 212, 152, 36, 7, 3, 1, 61,
- 36, 7, 3, 1, 253, 74, 36, 7, 3, 1, 250, 252, 36, 7, 3, 1, 249, 3, 36, 7,
- 3, 1, 74, 36, 7, 3, 1, 244, 230, 36, 7, 3, 1, 243, 177, 36, 7, 3, 1, 242,
- 41, 36, 7, 3, 1, 72, 36, 7, 3, 1, 235, 142, 36, 7, 3, 1, 235, 27, 36, 7,
- 3, 1, 150, 36, 7, 3, 1, 183, 36, 7, 3, 1, 204, 36, 7, 3, 1, 75, 36, 7, 3,
- 1, 226, 229, 36, 7, 3, 1, 224, 240, 36, 7, 3, 1, 149, 36, 7, 3, 1, 197,
- 36, 7, 3, 1, 218, 99, 36, 7, 3, 1, 69, 36, 7, 3, 1, 215, 79, 36, 7, 3, 1,
- 214, 82, 36, 7, 3, 1, 213, 166, 36, 7, 3, 1, 213, 105, 36, 7, 3, 1, 212,
- 152, 36, 21, 212, 79, 146, 36, 50, 245, 124, 146, 36, 50, 216, 41, 146,
- 36, 50, 217, 117, 146, 36, 50, 243, 231, 146, 36, 50, 244, 87, 146, 36,
- 50, 220, 47, 146, 36, 50, 221, 40, 146, 36, 50, 245, 147, 146, 36, 50,
- 229, 28, 146, 36, 50, 216, 38, 51, 36, 21, 116, 51, 36, 21, 109, 51, 36,
- 21, 166, 51, 36, 21, 163, 51, 36, 21, 180, 51, 36, 21, 189, 51, 36, 21,
- 198, 51, 36, 21, 195, 51, 36, 21, 200, 51, 36, 50, 217, 200, 146, 36, 21,
- 212, 79, 92, 96, 177, 241, 31, 92, 96, 107, 241, 31, 92, 96, 177, 214,
- 216, 92, 96, 107, 214, 216, 92, 96, 177, 216, 169, 248, 102, 241, 31, 92,
- 96, 107, 216, 169, 248, 102, 241, 31, 92, 96, 177, 216, 169, 248, 102,
- 214, 216, 92, 96, 107, 216, 169, 248, 102, 214, 216, 92, 96, 177, 224,
- 169, 248, 102, 241, 31, 92, 96, 107, 224, 169, 248, 102, 241, 31, 92, 96,
- 177, 224, 169, 248, 102, 214, 216, 92, 96, 107, 224, 169, 248, 102, 214,
- 216, 92, 96, 177, 119, 24, 223, 148, 92, 96, 119, 177, 24, 46, 241, 205,
- 92, 96, 119, 107, 24, 46, 233, 2, 92, 96, 107, 119, 24, 223, 148, 92, 96,
- 177, 119, 24, 233, 70, 92, 96, 119, 177, 24, 42, 241, 205, 92, 96, 119,
- 107, 24, 42, 233, 2, 92, 96, 107, 119, 24, 233, 70, 92, 96, 177, 114, 24,
- 223, 148, 92, 96, 114, 177, 24, 46, 241, 205, 92, 96, 114, 107, 24, 46,
- 233, 2, 92, 96, 107, 114, 24, 223, 148, 92, 96, 177, 114, 24, 233, 70,
- 92, 96, 114, 177, 24, 42, 241, 205, 92, 96, 114, 107, 24, 42, 233, 2, 92,
- 96, 107, 114, 24, 233, 70, 92, 96, 177, 71, 24, 223, 148, 92, 96, 71,
- 177, 24, 46, 241, 205, 92, 96, 114, 107, 24, 46, 119, 233, 2, 92, 96,
- 119, 107, 24, 46, 114, 233, 2, 92, 96, 71, 107, 24, 46, 233, 2, 92, 96,
- 119, 177, 24, 46, 114, 241, 205, 92, 96, 114, 177, 24, 46, 119, 241, 205,
- 92, 96, 107, 71, 24, 223, 148, 92, 96, 177, 71, 24, 233, 70, 92, 96, 71,
- 177, 24, 42, 241, 205, 92, 96, 114, 107, 24, 42, 119, 233, 2, 92, 96,
- 119, 107, 24, 42, 114, 233, 2, 92, 96, 71, 107, 24, 42, 233, 2, 92, 96,
- 119, 177, 24, 42, 114, 241, 205, 92, 96, 114, 177, 24, 42, 119, 241, 205,
- 92, 96, 107, 71, 24, 233, 70, 92, 96, 177, 119, 24, 241, 31, 92, 96, 42,
- 107, 24, 46, 119, 233, 2, 92, 96, 46, 107, 24, 42, 119, 233, 2, 92, 96,
- 119, 177, 24, 199, 241, 205, 92, 96, 119, 107, 24, 199, 233, 2, 92, 96,
- 46, 177, 24, 42, 119, 241, 205, 92, 96, 42, 177, 24, 46, 119, 241, 205,
- 92, 96, 107, 119, 24, 241, 31, 92, 96, 177, 114, 24, 241, 31, 92, 96, 42,
- 107, 24, 46, 114, 233, 2, 92, 96, 46, 107, 24, 42, 114, 233, 2, 92, 96,
- 114, 177, 24, 199, 241, 205, 92, 96, 114, 107, 24, 199, 233, 2, 92, 96,
- 46, 177, 24, 42, 114, 241, 205, 92, 96, 42, 177, 24, 46, 114, 241, 205,
- 92, 96, 107, 114, 24, 241, 31, 92, 96, 177, 71, 24, 241, 31, 92, 96, 42,
- 107, 24, 46, 71, 233, 2, 92, 96, 46, 107, 24, 42, 71, 233, 2, 92, 96, 71,
- 177, 24, 199, 241, 205, 92, 96, 114, 107, 24, 119, 199, 233, 2, 92, 96,
- 119, 107, 24, 114, 199, 233, 2, 92, 96, 71, 107, 24, 199, 233, 2, 92, 96,
- 42, 114, 107, 24, 46, 119, 233, 2, 92, 96, 46, 114, 107, 24, 42, 119,
- 233, 2, 92, 96, 42, 119, 107, 24, 46, 114, 233, 2, 92, 96, 46, 119, 107,
- 24, 42, 114, 233, 2, 92, 96, 119, 177, 24, 114, 199, 241, 205, 92, 96,
- 114, 177, 24, 119, 199, 241, 205, 92, 96, 46, 177, 24, 42, 71, 241, 205,
- 92, 96, 42, 177, 24, 46, 71, 241, 205, 92, 96, 107, 71, 24, 241, 31, 92,
- 96, 177, 51, 248, 102, 241, 31, 92, 96, 107, 51, 248, 102, 241, 31, 92,
- 96, 177, 51, 248, 102, 214, 216, 92, 96, 107, 51, 248, 102, 214, 216, 92,
- 96, 51, 241, 31, 92, 96, 51, 214, 216, 92, 96, 119, 220, 81, 24, 46, 246,
- 67, 92, 96, 119, 51, 24, 46, 220, 80, 92, 96, 51, 119, 24, 223, 148, 92,
- 96, 119, 220, 81, 24, 42, 246, 67, 92, 96, 119, 51, 24, 42, 220, 80, 92,
- 96, 51, 119, 24, 233, 70, 92, 96, 114, 220, 81, 24, 46, 246, 67, 92, 96,
- 114, 51, 24, 46, 220, 80, 92, 96, 51, 114, 24, 223, 148, 92, 96, 114,
- 220, 81, 24, 42, 246, 67, 92, 96, 114, 51, 24, 42, 220, 80, 92, 96, 51,
- 114, 24, 233, 70, 92, 96, 71, 220, 81, 24, 46, 246, 67, 92, 96, 71, 51,
- 24, 46, 220, 80, 92, 96, 51, 71, 24, 223, 148, 92, 96, 71, 220, 81, 24,
- 42, 246, 67, 92, 96, 71, 51, 24, 42, 220, 80, 92, 96, 51, 71, 24, 233,
- 70, 92, 96, 119, 220, 81, 24, 199, 246, 67, 92, 96, 119, 51, 24, 199,
- 220, 80, 92, 96, 51, 119, 24, 241, 31, 92, 96, 114, 220, 81, 24, 199,
- 246, 67, 92, 96, 114, 51, 24, 199, 220, 80, 92, 96, 51, 114, 24, 241, 31,
- 92, 96, 71, 220, 81, 24, 199, 246, 67, 92, 96, 71, 51, 24, 199, 220, 80,
- 92, 96, 51, 71, 24, 241, 31, 92, 96, 177, 253, 196, 119, 24, 223, 148,
- 92, 96, 177, 253, 196, 119, 24, 233, 70, 92, 96, 177, 253, 196, 114, 24,
- 233, 70, 92, 96, 177, 253, 196, 114, 24, 223, 148, 92, 96, 177, 247, 207,
- 215, 131, 46, 211, 211, 232, 163, 233, 70, 92, 96, 177, 247, 207, 215,
- 131, 42, 211, 211, 232, 163, 223, 148, 92, 96, 177, 247, 207, 249, 70,
- 92, 96, 177, 233, 70, 92, 96, 177, 215, 134, 92, 96, 177, 223, 148, 92,
- 96, 177, 246, 60, 92, 96, 107, 233, 70, 92, 96, 107, 215, 134, 92, 96,
- 107, 223, 148, 92, 96, 107, 246, 60, 92, 96, 177, 42, 24, 107, 223, 148,
- 92, 96, 177, 114, 24, 107, 246, 60, 92, 96, 107, 42, 24, 177, 223, 148,
- 92, 96, 107, 114, 24, 177, 246, 60, 215, 131, 151, 251, 136, 232, 163,
- 122, 245, 146, 251, 136, 232, 163, 122, 224, 167, 251, 136, 232, 163,
- 133, 245, 144, 251, 136, 232, 163, 151, 251, 136, 232, 163, 244, 50, 245,
- 144, 251, 136, 232, 163, 133, 224, 165, 251, 136, 232, 163, 221, 43, 245,
- 144, 251, 136, 243, 200, 251, 136, 42, 221, 43, 245, 144, 251, 136, 42,
- 133, 224, 165, 251, 136, 42, 244, 50, 245, 144, 251, 136, 42, 151, 251,
- 136, 42, 133, 245, 144, 251, 136, 42, 122, 224, 167, 251, 136, 42, 122,
- 245, 146, 251, 136, 46, 151, 251, 136, 177, 221, 14, 231, 147, 221, 14,
- 248, 107, 221, 14, 215, 131, 122, 245, 146, 251, 136, 46, 122, 245, 146,
- 251, 136, 224, 171, 232, 163, 233, 70, 224, 171, 232, 163, 223, 148, 224,
- 171, 215, 131, 233, 70, 224, 171, 215, 131, 42, 24, 232, 163, 42, 24,
- 232, 163, 223, 148, 224, 171, 215, 131, 42, 24, 232, 163, 223, 148, 224,
- 171, 215, 131, 42, 24, 215, 131, 46, 24, 232, 163, 233, 70, 224, 171,
- 215, 131, 42, 24, 215, 131, 46, 24, 232, 163, 223, 148, 224, 171, 215,
- 131, 223, 148, 224, 171, 215, 131, 46, 24, 232, 163, 233, 70, 224, 171,
- 215, 131, 46, 24, 232, 163, 42, 24, 232, 163, 223, 148, 83, 219, 166, 67,
- 219, 166, 67, 41, 2, 223, 85, 249, 98, 67, 41, 249, 126, 83, 3, 219, 166,
- 41, 2, 199, 244, 74, 41, 2, 71, 244, 74, 41, 2, 227, 11, 249, 66, 244,
- 74, 41, 2, 215, 131, 42, 211, 211, 232, 163, 46, 244, 74, 41, 2, 215,
- 131, 46, 211, 211, 232, 163, 42, 244, 74, 41, 2, 247, 207, 249, 66, 244,
- 74, 83, 3, 219, 166, 67, 3, 219, 166, 83, 224, 9, 67, 224, 9, 83, 71,
- 224, 9, 67, 71, 224, 9, 83, 226, 134, 67, 226, 134, 83, 215, 133, 216,
- 183, 67, 215, 133, 216, 183, 83, 215, 133, 3, 216, 183, 67, 215, 133, 3,
- 216, 183, 83, 223, 144, 216, 183, 67, 223, 144, 216, 183, 83, 223, 144,
- 3, 216, 183, 67, 223, 144, 3, 216, 183, 83, 223, 144, 225, 142, 67, 223,
- 144, 225, 142, 83, 246, 59, 216, 183, 67, 246, 59, 216, 183, 83, 246, 59,
- 3, 216, 183, 67, 246, 59, 3, 216, 183, 83, 233, 66, 216, 183, 67, 233,
- 66, 216, 183, 83, 233, 66, 3, 216, 183, 67, 233, 66, 3, 216, 183, 83,
- 233, 66, 225, 142, 67, 233, 66, 225, 142, 83, 247, 200, 67, 247, 200, 67,
- 247, 201, 249, 126, 83, 3, 247, 200, 244, 58, 232, 159, 67, 249, 228,
- 246, 72, 249, 228, 249, 229, 2, 71, 244, 74, 251, 40, 83, 249, 228, 249,
- 229, 2, 42, 151, 251, 144, 249, 229, 2, 46, 151, 251, 144, 249, 229, 2,
- 232, 163, 151, 251, 144, 249, 229, 2, 215, 131, 151, 251, 144, 249, 229,
- 2, 215, 131, 46, 224, 171, 251, 144, 249, 229, 2, 254, 64, 251, 17, 215,
- 131, 42, 224, 171, 251, 144, 42, 151, 83, 249, 228, 46, 151, 83, 249,
- 228, 235, 192, 251, 42, 235, 192, 67, 249, 228, 215, 131, 151, 235, 192,
- 67, 249, 228, 232, 163, 151, 235, 192, 67, 249, 228, 215, 131, 42, 224,
- 171, 249, 226, 253, 195, 215, 131, 46, 224, 171, 249, 226, 253, 195, 232,
- 163, 46, 224, 171, 249, 226, 253, 195, 232, 163, 42, 224, 171, 249, 226,
- 253, 195, 215, 131, 151, 249, 228, 232, 163, 151, 249, 228, 83, 232, 163,
- 46, 216, 183, 83, 232, 163, 42, 216, 183, 83, 215, 131, 42, 216, 183, 83,
- 215, 131, 46, 216, 183, 67, 251, 42, 41, 2, 42, 151, 251, 144, 41, 2, 46,
- 151, 251, 144, 41, 2, 215, 131, 42, 247, 207, 151, 251, 144, 41, 2, 232,
- 163, 46, 247, 207, 151, 251, 144, 67, 41, 2, 71, 251, 155, 232, 242, 67,
- 215, 133, 216, 184, 2, 247, 74, 215, 133, 216, 184, 2, 42, 151, 251, 144,
- 215, 133, 216, 184, 2, 46, 151, 251, 144, 233, 108, 249, 228, 67, 41, 2,
- 215, 131, 42, 224, 170, 67, 41, 2, 232, 163, 42, 224, 170, 67, 41, 2,
- 232, 163, 46, 224, 170, 67, 41, 2, 215, 131, 46, 224, 170, 67, 249, 229,
- 2, 215, 131, 42, 224, 170, 67, 249, 229, 2, 232, 163, 42, 224, 170, 67,
- 249, 229, 2, 232, 163, 46, 224, 170, 67, 249, 229, 2, 215, 131, 46, 224,
- 170, 215, 131, 42, 216, 183, 215, 131, 46, 216, 183, 232, 163, 42, 216,
- 183, 67, 231, 147, 219, 166, 83, 231, 147, 219, 166, 67, 231, 147, 3,
- 219, 166, 83, 231, 147, 3, 219, 166, 232, 163, 46, 216, 183, 83, 218,
- 239, 2, 224, 25, 249, 184, 215, 164, 219, 244, 249, 160, 83, 219, 95, 67,
- 219, 95, 233, 0, 217, 86, 218, 238, 253, 149, 228, 182, 247, 245, 228,
- 182, 249, 135, 227, 29, 83, 217, 209, 67, 217, 209, 252, 75, 251, 89,
- 252, 75, 92, 2, 250, 65, 252, 75, 92, 2, 213, 166, 222, 169, 215, 165, 2,
- 224, 51, 246, 39, 240, 230, 251, 199, 67, 220, 182, 225, 233, 83, 220,
- 182, 225, 233, 221, 10, 223, 202, 223, 89, 244, 24, 241, 212, 251, 42,
- 83, 42, 225, 141, 235, 239, 83, 46, 225, 141, 235, 239, 67, 42, 225, 141,
- 235, 239, 67, 114, 225, 141, 235, 239, 67, 46, 225, 141, 235, 239, 67,
- 119, 225, 141, 235, 239, 220, 29, 24, 249, 69, 250, 152, 52, 224, 62, 52,
- 251, 162, 52, 250, 211, 254, 13, 227, 12, 249, 70, 250, 48, 223, 190,
- 249, 71, 65, 232, 173, 249, 71, 65, 235, 117, 219, 96, 24, 249, 76, 244,
- 136, 87, 254, 153, 221, 12, 242, 5, 24, 220, 115, 226, 95, 87, 212, 245,
- 213, 58, 216, 173, 31, 241, 207, 216, 173, 31, 233, 131, 216, 173, 31,
- 244, 65, 216, 173, 31, 217, 87, 216, 173, 31, 213, 224, 216, 173, 31,
- 214, 24, 216, 173, 31, 230, 185, 216, 173, 31, 245, 179, 213, 242, 65,
- 247, 226, 67, 243, 209, 244, 158, 67, 220, 2, 244, 158, 83, 220, 2, 244,
- 158, 67, 218, 239, 2, 224, 25, 244, 61, 224, 167, 230, 198, 233, 103,
- 224, 167, 230, 198, 231, 118, 244, 107, 52, 245, 179, 231, 253, 52, 235,
- 41, 222, 137, 215, 116, 229, 175, 225, 154, 253, 183, 217, 247, 243, 28,
- 250, 191, 233, 43, 214, 131, 233, 10, 222, 110, 222, 188, 250, 180, 253,
- 212, 225, 184, 67, 250, 54, 234, 87, 67, 250, 54, 224, 159, 67, 250, 54,
- 223, 97, 67, 250, 54, 251, 154, 67, 250, 54, 234, 39, 67, 250, 54, 226,
- 105, 83, 250, 54, 234, 87, 83, 250, 54, 224, 159, 83, 250, 54, 223, 97,
- 83, 250, 54, 251, 154, 83, 250, 54, 234, 39, 83, 250, 54, 226, 105, 83,
- 219, 204, 218, 251, 67, 241, 212, 218, 251, 67, 247, 201, 218, 251, 83,
- 249, 182, 218, 251, 67, 219, 204, 218, 251, 83, 241, 212, 218, 251, 83,
- 247, 201, 218, 251, 67, 249, 182, 218, 251, 240, 230, 219, 170, 224, 167,
- 228, 158, 245, 146, 228, 158, 251, 249, 245, 146, 228, 153, 251, 249,
- 220, 46, 228, 153, 230, 127, 244, 35, 52, 230, 127, 230, 9, 52, 230, 127,
- 220, 255, 52, 213, 250, 175, 249, 70, 245, 176, 175, 249, 70, 215, 142,
- 224, 5, 87, 224, 5, 16, 31, 216, 14, 225, 166, 224, 5, 16, 31, 216, 13,
- 225, 166, 224, 5, 16, 31, 216, 12, 225, 166, 224, 5, 16, 31, 216, 11,
- 225, 166, 224, 5, 16, 31, 216, 10, 225, 166, 224, 5, 16, 31, 216, 9, 225,
- 166, 224, 5, 16, 31, 216, 8, 225, 166, 224, 5, 16, 31, 243, 26, 231, 201,
- 83, 215, 142, 224, 5, 87, 224, 6, 226, 148, 87, 226, 124, 226, 148, 87,
- 226, 49, 226, 148, 52, 213, 240, 87, 247, 193, 244, 157, 247, 193, 244,
- 156, 247, 193, 244, 155, 247, 193, 244, 154, 247, 193, 244, 153, 247,
- 193, 244, 152, 67, 249, 229, 2, 62, 223, 148, 67, 249, 229, 2, 117, 247,
- 72, 83, 249, 229, 2, 67, 62, 223, 148, 83, 249, 229, 2, 117, 67, 247, 72,
- 230, 212, 31, 213, 58, 230, 212, 31, 212, 244, 247, 176, 31, 242, 108,
- 213, 58, 247, 176, 31, 233, 37, 212, 244, 247, 176, 31, 233, 37, 213, 58,
- 247, 176, 31, 242, 108, 212, 244, 67, 244, 42, 83, 244, 42, 242, 5, 24,
- 225, 236, 254, 29, 249, 68, 218, 180, 219, 103, 65, 254, 131, 222, 124,
- 254, 77, 244, 20, 243, 36, 219, 103, 65, 241, 187, 253, 115, 87, 244, 31,
- 226, 250, 67, 219, 95, 133, 232, 237, 249, 114, 223, 148, 133, 232, 237,
- 249, 114, 233, 70, 214, 34, 52, 124, 214, 111, 52, 246, 64, 244, 107, 52,
- 246, 64, 231, 253, 52, 235, 200, 244, 107, 24, 231, 253, 52, 231, 253,
- 24, 244, 107, 52, 231, 253, 2, 219, 45, 52, 231, 253, 2, 219, 45, 24,
- 231, 253, 24, 244, 107, 52, 71, 231, 253, 2, 219, 45, 52, 199, 231, 253,
- 2, 219, 45, 52, 231, 147, 67, 249, 228, 231, 147, 83, 249, 228, 231, 147,
- 3, 67, 249, 228, 231, 216, 87, 247, 119, 87, 215, 140, 226, 123, 87, 249,
- 169, 243, 196, 215, 112, 229, 170, 250, 95, 226, 188, 235, 47, 214, 162,
- 250, 30, 83, 230, 199, 232, 253, 221, 33, 221, 67, 224, 150, 221, 51,
- 219, 239, 252, 78, 252, 46, 91, 234, 144, 67, 246, 48, 231, 248, 67, 246,
- 48, 234, 87, 83, 246, 48, 231, 248, 83, 246, 48, 234, 87, 219, 245, 213,
- 216, 219, 248, 218, 239, 251, 227, 249, 184, 224, 50, 83, 219, 244, 217,
- 88, 249, 185, 24, 224, 50, 216, 58, 67, 220, 182, 225, 233, 216, 58, 83,
- 220, 182, 225, 233, 67, 247, 201, 235, 252, 219, 166, 249, 65, 233, 115,
- 247, 145, 250, 176, 227, 32, 225, 236, 250, 177, 220, 16, 241, 196, 2,
- 67, 249, 70, 36, 249, 65, 233, 115, 250, 88, 228, 186, 245, 83, 254, 50,
- 227, 57, 42, 214, 10, 216, 208, 83, 216, 21, 42, 214, 10, 216, 208, 67,
- 216, 21, 42, 214, 10, 216, 208, 83, 42, 233, 116, 231, 117, 67, 42, 233,
- 116, 231, 117, 246, 44, 220, 10, 52, 107, 67, 246, 59, 216, 183, 42, 249,
- 193, 245, 83, 91, 222, 169, 244, 143, 247, 207, 235, 252, 67, 249, 229,
- 235, 252, 83, 219, 166, 83, 216, 150, 223, 212, 42, 245, 82, 223, 212,
- 42, 245, 81, 253, 127, 16, 31, 215, 116, 107, 249, 229, 2, 219, 45, 24,
- 117, 176, 49, 226, 64, 223, 145, 235, 202, 226, 64, 233, 67, 235, 202,
- 226, 64, 235, 191, 226, 64, 83, 249, 71, 227, 63, 220, 209, 220, 197,
- 220, 154, 249, 254, 250, 158, 241, 143, 220, 54, 243, 37, 213, 216, 240,
- 210, 243, 37, 2, 241, 251, 231, 236, 16, 31, 233, 1, 230, 185, 215, 165,
- 227, 63, 242, 100, 243, 238, 244, 43, 235, 252, 241, 45, 244, 98, 222,
- 185, 41, 243, 237, 249, 98, 220, 32, 240, 105, 220, 35, 226, 44, 2, 252,
- 78, 217, 195, 235, 131, 252, 65, 87, 241, 215, 242, 110, 87, 243, 203,
- 225, 28, 249, 44, 227, 63, 83, 219, 166, 67, 244, 43, 2, 199, 231, 37,
- 83, 219, 46, 215, 131, 251, 140, 222, 112, 83, 222, 112, 232, 163, 251,
- 140, 222, 112, 67, 222, 112, 67, 107, 250, 66, 77, 217, 210, 232, 206,
- 52, 218, 4, 246, 43, 254, 99, 245, 78, 224, 48, 244, 54, 224, 48, 241,
- 254, 214, 152, 241, 254, 213, 186, 241, 254, 232, 163, 46, 226, 73, 226,
- 73, 215, 131, 46, 226, 73, 67, 229, 61, 83, 229, 61, 250, 66, 77, 107,
- 250, 66, 77, 230, 154, 213, 166, 107, 230, 154, 213, 166, 252, 75, 213,
- 166, 107, 252, 75, 213, 166, 226, 250, 25, 249, 70, 107, 25, 249, 70,
- 227, 40, 250, 109, 249, 70, 107, 227, 40, 250, 109, 249, 70, 7, 249, 70,
- 221, 13, 67, 7, 249, 70, 226, 250, 7, 249, 70, 231, 250, 249, 70, 219,
- 96, 65, 248, 95, 243, 237, 217, 223, 253, 132, 243, 237, 252, 76, 253,
- 132, 107, 243, 237, 252, 76, 253, 132, 243, 237, 249, 180, 253, 132, 83,
- 243, 237, 225, 143, 219, 95, 67, 243, 237, 225, 143, 219, 95, 219, 199,
- 219, 51, 226, 250, 67, 219, 95, 36, 67, 219, 95, 227, 40, 250, 109, 83,
- 219, 95, 83, 250, 109, 67, 219, 95, 226, 250, 83, 219, 95, 107, 226, 250,
- 83, 219, 95, 225, 192, 219, 95, 221, 13, 67, 219, 95, 107, 253, 132, 227,
- 40, 250, 109, 253, 132, 245, 150, 219, 176, 253, 132, 245, 150, 225, 143,
- 83, 219, 95, 245, 150, 225, 143, 225, 192, 219, 95, 220, 53, 225, 143,
- 83, 219, 95, 245, 150, 225, 143, 224, 7, 83, 219, 95, 107, 245, 150, 225,
- 143, 224, 7, 83, 219, 95, 216, 42, 225, 143, 83, 219, 95, 220, 48, 225,
- 143, 253, 132, 217, 223, 253, 132, 227, 40, 250, 109, 217, 223, 253, 132,
- 107, 217, 223, 253, 132, 220, 53, 226, 33, 83, 24, 67, 244, 23, 83, 244,
- 23, 67, 244, 23, 245, 150, 226, 33, 226, 250, 83, 244, 23, 36, 227, 40,
- 250, 109, 245, 150, 225, 143, 219, 95, 107, 217, 223, 225, 192, 253, 132,
- 219, 246, 217, 59, 216, 176, 219, 246, 107, 250, 51, 219, 246, 219, 201,
- 107, 219, 201, 252, 76, 253, 132, 245, 150, 217, 223, 225, 55, 253, 132,
- 107, 245, 150, 217, 223, 225, 55, 253, 132, 249, 71, 77, 221, 13, 67,
- 249, 228, 146, 91, 249, 71, 77, 232, 163, 46, 246, 41, 67, 219, 166, 215,
- 131, 46, 246, 41, 67, 219, 166, 232, 163, 46, 221, 13, 67, 219, 166, 215,
- 131, 46, 221, 13, 67, 219, 166, 83, 224, 158, 152, 227, 14, 67, 224, 158,
- 152, 227, 14, 67, 244, 254, 152, 227, 14, 83, 247, 201, 230, 251, 67,
- 213, 166, 107, 244, 254, 152, 87, 177, 71, 134, 231, 147, 71, 134, 107,
- 71, 134, 107, 220, 81, 216, 58, 249, 158, 224, 143, 152, 227, 14, 107,
- 220, 81, 249, 158, 224, 143, 152, 227, 14, 107, 51, 216, 58, 249, 158,
- 224, 143, 152, 227, 14, 107, 51, 249, 158, 224, 143, 152, 227, 14, 107,
- 115, 220, 81, 249, 158, 224, 143, 152, 227, 14, 107, 115, 51, 249, 158,
- 224, 143, 152, 227, 14, 249, 33, 219, 80, 226, 143, 5, 227, 14, 107, 244,
- 254, 152, 227, 14, 107, 241, 212, 244, 254, 152, 227, 14, 107, 83, 241,
- 211, 223, 89, 107, 83, 241, 212, 251, 42, 244, 24, 241, 211, 223, 89,
- 244, 24, 241, 212, 251, 42, 231, 147, 42, 226, 132, 227, 14, 231, 147,
- 46, 226, 132, 227, 14, 231, 147, 244, 32, 42, 226, 132, 227, 14, 231,
- 147, 244, 32, 46, 226, 132, 227, 14, 231, 147, 233, 66, 254, 19, 251, 85,
- 227, 14, 231, 147, 223, 144, 254, 19, 251, 85, 227, 14, 107, 233, 66,
- 254, 19, 224, 143, 152, 227, 14, 107, 223, 144, 254, 19, 224, 143, 152,
- 227, 14, 107, 233, 66, 254, 19, 251, 85, 227, 14, 107, 223, 144, 254, 19,
- 251, 85, 227, 14, 177, 42, 216, 219, 220, 233, 251, 85, 227, 14, 177, 46,
- 216, 219, 220, 233, 251, 85, 227, 14, 231, 147, 42, 249, 40, 251, 85,
- 227, 14, 231, 147, 46, 249, 40, 251, 85, 227, 14, 247, 156, 146, 36, 21,
- 116, 247, 156, 146, 36, 21, 109, 247, 156, 146, 36, 21, 166, 247, 156,
- 146, 36, 21, 163, 247, 156, 146, 36, 21, 180, 247, 156, 146, 36, 21, 189,
- 247, 156, 146, 36, 21, 198, 247, 156, 146, 36, 21, 195, 247, 156, 146,
- 36, 21, 200, 247, 156, 146, 36, 50, 217, 200, 247, 156, 36, 35, 21, 116,
- 247, 156, 36, 35, 21, 109, 247, 156, 36, 35, 21, 166, 247, 156, 36, 35,
- 21, 163, 247, 156, 36, 35, 21, 180, 247, 156, 36, 35, 21, 189, 247, 156,
- 36, 35, 21, 198, 247, 156, 36, 35, 21, 195, 247, 156, 36, 35, 21, 200,
- 247, 156, 36, 35, 50, 217, 200, 247, 156, 146, 36, 35, 21, 116, 247, 156,
- 146, 36, 35, 21, 109, 247, 156, 146, 36, 35, 21, 166, 247, 156, 146, 36,
- 35, 21, 163, 247, 156, 146, 36, 35, 21, 180, 247, 156, 146, 36, 35, 21,
- 189, 247, 156, 146, 36, 35, 21, 198, 247, 156, 146, 36, 35, 21, 195, 247,
- 156, 146, 36, 35, 21, 200, 247, 156, 146, 36, 35, 50, 217, 200, 107, 213,
- 231, 95, 68, 107, 94, 52, 107, 230, 251, 52, 107, 247, 121, 52, 107, 219,
- 215, 245, 176, 68, 107, 95, 68, 107, 228, 167, 245, 176, 68, 246, 52,
- 225, 145, 95, 68, 107, 223, 86, 95, 68, 216, 182, 95, 68, 107, 216, 182,
- 95, 68, 248, 100, 216, 182, 95, 68, 107, 248, 100, 216, 182, 95, 68, 83,
- 95, 68, 217, 97, 216, 225, 95, 253, 164, 217, 97, 251, 99, 95, 253, 164,
- 83, 95, 253, 164, 107, 83, 249, 33, 246, 58, 24, 95, 68, 107, 83, 249,
- 33, 215, 124, 24, 95, 68, 219, 163, 83, 95, 68, 107, 249, 145, 83, 95,
- 68, 223, 143, 67, 95, 68, 233, 65, 67, 95, 68, 252, 100, 221, 13, 67, 95,
- 68, 243, 211, 221, 13, 67, 95, 68, 107, 232, 163, 223, 142, 67, 95, 68,
- 107, 215, 131, 223, 142, 67, 95, 68, 228, 160, 232, 163, 223, 142, 67,
- 95, 68, 249, 40, 232, 177, 228, 160, 215, 131, 223, 142, 67, 95, 68, 36,
- 107, 67, 95, 68, 213, 237, 95, 68, 251, 143, 219, 215, 245, 176, 68, 251,
- 143, 95, 68, 251, 143, 228, 167, 245, 176, 68, 107, 251, 143, 219, 215,
- 245, 176, 68, 107, 251, 143, 95, 68, 107, 251, 143, 228, 167, 245, 176,
- 68, 217, 225, 95, 68, 107, 217, 224, 95, 68, 214, 2, 95, 68, 107, 214, 2,
- 95, 68, 227, 37, 95, 68, 51, 249, 40, 232, 177, 133, 247, 166, 254, 18,
- 67, 216, 184, 249, 126, 3, 67, 216, 183, 226, 47, 227, 40, 219, 8, 227,
- 40, 218, 221, 42, 223, 3, 252, 91, 248, 11, 46, 223, 3, 252, 91, 248, 11,
- 167, 2, 62, 235, 212, 223, 203, 219, 232, 225, 81, 219, 8, 218, 222, 225,
- 81, 219, 231, 71, 252, 60, 2, 199, 90, 184, 247, 120, 91, 232, 199, 254,
- 27, 91, 232, 199, 227, 24, 67, 247, 201, 2, 250, 107, 247, 74, 24, 2,
- 247, 74, 245, 127, 65, 227, 35, 215, 123, 232, 163, 46, 249, 100, 2, 247,
- 74, 215, 131, 42, 249, 100, 2, 247, 74, 42, 226, 252, 235, 69, 46, 226,
- 252, 235, 69, 243, 200, 226, 252, 235, 69, 233, 108, 114, 218, 36, 233,
- 108, 119, 218, 36, 42, 24, 46, 51, 216, 57, 42, 24, 46, 218, 36, 42, 230,
- 157, 184, 46, 218, 36, 184, 42, 218, 36, 114, 218, 37, 2, 249, 229, 49,
- 232, 160, 247, 125, 251, 7, 199, 223, 44, 67, 249, 144, 247, 200, 67,
- 249, 144, 247, 201, 2, 132, 217, 68, 67, 249, 144, 247, 201, 2, 95, 217,
- 68, 67, 41, 2, 132, 217, 68, 67, 41, 2, 95, 217, 68, 14, 42, 67, 41, 125,
- 14, 46, 67, 41, 125, 14, 42, 254, 19, 125, 14, 46, 254, 19, 125, 14, 42,
- 51, 254, 19, 125, 14, 46, 51, 254, 19, 125, 14, 42, 67, 216, 219, 220,
- 233, 125, 14, 46, 67, 216, 219, 220, 233, 125, 14, 42, 244, 32, 226, 131,
- 14, 46, 244, 32, 226, 131, 215, 124, 224, 169, 68, 246, 58, 224, 169, 68,
- 253, 255, 243, 74, 249, 229, 68, 249, 195, 243, 74, 249, 229, 68, 46, 76,
- 2, 36, 225, 156, 184, 132, 68, 184, 95, 68, 184, 42, 46, 68, 184, 132,
- 51, 68, 184, 95, 51, 68, 184, 42, 46, 51, 68, 184, 132, 76, 243, 213,
- 134, 184, 95, 76, 243, 213, 134, 184, 132, 51, 76, 243, 213, 134, 184,
- 95, 51, 76, 243, 213, 134, 184, 95, 219, 162, 68, 44, 45, 251, 138, 44,
- 45, 247, 71, 44, 45, 246, 199, 44, 45, 247, 70, 44, 45, 246, 135, 44, 45,
- 247, 6, 44, 45, 246, 198, 44, 45, 247, 69, 44, 45, 246, 103, 44, 45, 246,
- 230, 44, 45, 246, 166, 44, 45, 247, 37, 44, 45, 246, 134, 44, 45, 247, 5,
- 44, 45, 246, 197, 44, 45, 247, 68, 44, 45, 246, 87, 44, 45, 246, 214, 44,
- 45, 246, 150, 44, 45, 247, 21, 44, 45, 246, 118, 44, 45, 246, 245, 44,
- 45, 246, 181, 44, 45, 247, 52, 44, 45, 246, 102, 44, 45, 246, 229, 44,
- 45, 246, 165, 44, 45, 247, 36, 44, 45, 246, 133, 44, 45, 247, 4, 44, 45,
- 246, 196, 44, 45, 247, 67, 44, 45, 246, 79, 44, 45, 246, 206, 44, 45,
- 246, 142, 44, 45, 247, 13, 44, 45, 246, 110, 44, 45, 246, 237, 44, 45,
- 246, 173, 44, 45, 247, 44, 44, 45, 246, 94, 44, 45, 246, 221, 44, 45,
- 246, 157, 44, 45, 247, 28, 44, 45, 246, 125, 44, 45, 246, 252, 44, 45,
- 246, 188, 44, 45, 247, 59, 44, 45, 246, 86, 44, 45, 246, 213, 44, 45,
- 246, 149, 44, 45, 247, 20, 44, 45, 246, 117, 44, 45, 246, 244, 44, 45,
- 246, 180, 44, 45, 247, 51, 44, 45, 246, 101, 44, 45, 246, 228, 44, 45,
- 246, 164, 44, 45, 247, 35, 44, 45, 246, 132, 44, 45, 247, 3, 44, 45, 246,
- 195, 44, 45, 247, 66, 44, 45, 246, 75, 44, 45, 246, 202, 44, 45, 246,
- 138, 44, 45, 247, 9, 44, 45, 246, 106, 44, 45, 246, 233, 44, 45, 246,
- 169, 44, 45, 247, 40, 44, 45, 246, 90, 44, 45, 246, 217, 44, 45, 246,
- 153, 44, 45, 247, 24, 44, 45, 246, 121, 44, 45, 246, 248, 44, 45, 246,
- 184, 44, 45, 247, 55, 44, 45, 246, 82, 44, 45, 246, 209, 44, 45, 246,
- 145, 44, 45, 247, 16, 44, 45, 246, 113, 44, 45, 246, 240, 44, 45, 246,
- 176, 44, 45, 247, 47, 44, 45, 246, 97, 44, 45, 246, 224, 44, 45, 246,
- 160, 44, 45, 247, 31, 44, 45, 246, 128, 44, 45, 246, 255, 44, 45, 246,
- 191, 44, 45, 247, 62, 44, 45, 246, 78, 44, 45, 246, 205, 44, 45, 246,
- 141, 44, 45, 247, 12, 44, 45, 246, 109, 44, 45, 246, 236, 44, 45, 246,
- 172, 44, 45, 247, 43, 44, 45, 246, 93, 44, 45, 246, 220, 44, 45, 246,
- 156, 44, 45, 247, 27, 44, 45, 246, 124, 44, 45, 246, 251, 44, 45, 246,
- 187, 44, 45, 247, 58, 44, 45, 246, 85, 44, 45, 246, 212, 44, 45, 246,
- 148, 44, 45, 247, 19, 44, 45, 246, 116, 44, 45, 246, 243, 44, 45, 246,
- 179, 44, 45, 247, 50, 44, 45, 246, 100, 44, 45, 246, 227, 44, 45, 246,
- 163, 44, 45, 247, 34, 44, 45, 246, 131, 44, 45, 247, 2, 44, 45, 246, 194,
- 44, 45, 247, 65, 44, 45, 246, 73, 44, 45, 246, 200, 44, 45, 246, 136, 44,
- 45, 247, 7, 44, 45, 246, 104, 44, 45, 246, 231, 44, 45, 246, 167, 44, 45,
- 247, 38, 44, 45, 246, 88, 44, 45, 246, 215, 44, 45, 246, 151, 44, 45,
- 247, 22, 44, 45, 246, 119, 44, 45, 246, 246, 44, 45, 246, 182, 44, 45,
- 247, 53, 44, 45, 246, 80, 44, 45, 246, 207, 44, 45, 246, 143, 44, 45,
- 247, 14, 44, 45, 246, 111, 44, 45, 246, 238, 44, 45, 246, 174, 44, 45,
- 247, 45, 44, 45, 246, 95, 44, 45, 246, 222, 44, 45, 246, 158, 44, 45,
- 247, 29, 44, 45, 246, 126, 44, 45, 246, 253, 44, 45, 246, 189, 44, 45,
- 247, 60, 44, 45, 246, 76, 44, 45, 246, 203, 44, 45, 246, 139, 44, 45,
- 247, 10, 44, 45, 246, 107, 44, 45, 246, 234, 44, 45, 246, 170, 44, 45,
- 247, 41, 44, 45, 246, 91, 44, 45, 246, 218, 44, 45, 246, 154, 44, 45,
- 247, 25, 44, 45, 246, 122, 44, 45, 246, 249, 44, 45, 246, 185, 44, 45,
- 247, 56, 44, 45, 246, 83, 44, 45, 246, 210, 44, 45, 246, 146, 44, 45,
- 247, 17, 44, 45, 246, 114, 44, 45, 246, 241, 44, 45, 246, 177, 44, 45,
- 247, 48, 44, 45, 246, 98, 44, 45, 246, 225, 44, 45, 246, 161, 44, 45,
- 247, 32, 44, 45, 246, 129, 44, 45, 247, 0, 44, 45, 246, 192, 44, 45, 247,
- 63, 44, 45, 246, 74, 44, 45, 246, 201, 44, 45, 246, 137, 44, 45, 247, 8,
- 44, 45, 246, 105, 44, 45, 246, 232, 44, 45, 246, 168, 44, 45, 247, 39,
- 44, 45, 246, 89, 44, 45, 246, 216, 44, 45, 246, 152, 44, 45, 247, 23, 44,
- 45, 246, 120, 44, 45, 246, 247, 44, 45, 246, 183, 44, 45, 247, 54, 44,
- 45, 246, 81, 44, 45, 246, 208, 44, 45, 246, 144, 44, 45, 247, 15, 44, 45,
- 246, 112, 44, 45, 246, 239, 44, 45, 246, 175, 44, 45, 247, 46, 44, 45,
- 246, 96, 44, 45, 246, 223, 44, 45, 246, 159, 44, 45, 247, 30, 44, 45,
- 246, 127, 44, 45, 246, 254, 44, 45, 246, 190, 44, 45, 247, 61, 44, 45,
- 246, 77, 44, 45, 246, 204, 44, 45, 246, 140, 44, 45, 247, 11, 44, 45,
- 246, 108, 44, 45, 246, 235, 44, 45, 246, 171, 44, 45, 247, 42, 44, 45,
- 246, 92, 44, 45, 246, 219, 44, 45, 246, 155, 44, 45, 247, 26, 44, 45,
- 246, 123, 44, 45, 246, 250, 44, 45, 246, 186, 44, 45, 247, 57, 44, 45,
- 246, 84, 44, 45, 246, 211, 44, 45, 246, 147, 44, 45, 247, 18, 44, 45,
- 246, 115, 44, 45, 246, 242, 44, 45, 246, 178, 44, 45, 247, 49, 44, 45,
- 246, 99, 44, 45, 246, 226, 44, 45, 246, 162, 44, 45, 247, 33, 44, 45,
- 246, 130, 44, 45, 247, 1, 44, 45, 246, 193, 44, 45, 247, 64, 95, 216, 24,
- 76, 2, 71, 90, 95, 216, 24, 76, 2, 51, 71, 90, 132, 51, 76, 2, 71, 90,
- 95, 51, 76, 2, 71, 90, 42, 46, 51, 76, 2, 71, 90, 95, 216, 24, 76, 243,
- 213, 134, 132, 51, 76, 243, 213, 134, 95, 51, 76, 243, 213, 134, 246, 58,
- 76, 2, 199, 90, 215, 124, 76, 2, 199, 90, 215, 124, 216, 169, 68, 246,
- 58, 216, 169, 68, 132, 51, 248, 102, 68, 95, 51, 248, 102, 68, 132, 216,
- 169, 248, 102, 68, 95, 216, 169, 248, 102, 68, 95, 216, 24, 216, 169,
- 248, 102, 68, 95, 76, 2, 246, 72, 219, 79, 215, 124, 76, 211, 211, 134,
- 246, 58, 76, 211, 211, 134, 95, 76, 2, 218, 28, 2, 71, 90, 95, 76, 2,
- 218, 28, 2, 51, 71, 90, 95, 216, 24, 76, 2, 218, 27, 95, 216, 24, 76, 2,
- 218, 28, 2, 71, 90, 95, 216, 24, 76, 2, 218, 28, 2, 51, 71, 90, 132, 253,
- 166, 95, 253, 166, 132, 51, 253, 166, 95, 51, 253, 166, 132, 76, 211,
- 211, 83, 247, 200, 95, 76, 211, 211, 83, 247, 200, 132, 76, 243, 213,
- 252, 60, 211, 211, 83, 247, 200, 95, 76, 243, 213, 252, 60, 211, 211, 83,
- 247, 200, 228, 167, 213, 250, 24, 219, 215, 245, 176, 68, 228, 167, 245,
- 176, 24, 219, 215, 213, 250, 68, 228, 167, 213, 250, 76, 2, 101, 228,
- 167, 245, 176, 76, 2, 101, 219, 215, 245, 176, 76, 2, 101, 219, 215, 213,
- 250, 76, 2, 101, 228, 167, 213, 250, 76, 24, 228, 167, 245, 176, 68, 228,
- 167, 245, 176, 76, 24, 219, 215, 245, 176, 68, 219, 215, 245, 176, 76,
- 24, 219, 215, 213, 250, 68, 219, 215, 213, 250, 76, 24, 228, 167, 213,
- 250, 68, 223, 125, 247, 207, 249, 65, 244, 143, 247, 206, 244, 143, 247,
- 207, 249, 65, 223, 125, 247, 206, 219, 215, 245, 176, 76, 249, 65, 228,
- 167, 245, 176, 68, 228, 167, 245, 176, 76, 249, 65, 219, 215, 245, 176,
- 68, 244, 143, 247, 207, 249, 65, 228, 167, 245, 176, 68, 223, 125, 247,
- 207, 249, 65, 219, 215, 245, 176, 68, 228, 167, 245, 176, 76, 249, 65,
- 228, 167, 213, 250, 68, 228, 167, 213, 250, 76, 249, 65, 228, 167, 245,
- 176, 68, 214, 20, 76, 225, 141, 247, 147, 223, 148, 76, 225, 141, 95,
- 217, 141, 249, 32, 215, 123, 76, 225, 141, 95, 217, 141, 249, 32, 246,
- 57, 76, 225, 141, 246, 58, 217, 141, 249, 32, 233, 61, 76, 225, 141, 246,
- 58, 217, 141, 249, 32, 223, 138, 223, 141, 253, 196, 249, 195, 68, 233,
- 64, 253, 196, 253, 255, 68, 216, 227, 253, 196, 253, 255, 68, 251, 101,
- 253, 196, 253, 255, 68, 216, 227, 253, 196, 249, 195, 76, 2, 230, 250,
- 216, 227, 253, 196, 253, 255, 76, 2, 225, 156, 232, 163, 46, 221, 72,
- 249, 195, 68, 232, 163, 42, 221, 72, 253, 255, 68, 253, 255, 249, 193,
- 249, 229, 68, 249, 195, 249, 193, 249, 229, 68, 95, 76, 78, 220, 175,
- 132, 68, 132, 76, 78, 220, 175, 95, 68, 220, 175, 95, 76, 78, 132, 68,
- 95, 76, 2, 94, 55, 132, 76, 2, 94, 55, 95, 76, 217, 93, 213, 166, 42, 46,
- 76, 217, 93, 3, 249, 228, 215, 124, 216, 24, 76, 243, 213, 3, 249, 228,
- 42, 206, 114, 46, 206, 119, 241, 237, 42, 206, 119, 46, 206, 114, 241,
- 237, 114, 206, 46, 119, 206, 42, 241, 237, 114, 206, 42, 119, 206, 46,
- 241, 237, 42, 206, 114, 46, 206, 114, 241, 237, 114, 206, 46, 119, 206,
- 46, 241, 237, 42, 206, 119, 46, 206, 119, 241, 237, 114, 206, 42, 119,
- 206, 42, 241, 237, 132, 241, 238, 2, 206, 114, 211, 211, 134, 95, 241,
- 238, 2, 206, 114, 211, 211, 134, 215, 124, 241, 238, 2, 206, 46, 211,
- 211, 134, 246, 58, 241, 238, 2, 206, 46, 211, 211, 134, 132, 241, 238, 2,
- 206, 119, 211, 211, 134, 95, 241, 238, 2, 206, 119, 211, 211, 134, 215,
- 124, 241, 238, 2, 206, 42, 211, 211, 134, 246, 58, 241, 238, 2, 206, 42,
- 211, 211, 134, 132, 241, 238, 2, 206, 114, 243, 213, 134, 95, 241, 238,
- 2, 206, 114, 243, 213, 134, 215, 124, 241, 238, 2, 206, 46, 243, 213,
- 134, 246, 58, 241, 238, 2, 206, 46, 243, 213, 134, 132, 241, 238, 2, 206,
- 119, 243, 213, 134, 95, 241, 238, 2, 206, 119, 243, 213, 134, 215, 124,
- 241, 238, 2, 206, 42, 243, 213, 134, 246, 58, 241, 238, 2, 206, 42, 243,
- 213, 134, 132, 241, 238, 2, 206, 114, 78, 132, 241, 238, 2, 206, 246, 60,
- 215, 124, 241, 238, 2, 206, 42, 251, 207, 215, 124, 241, 238, 2, 206,
- 223, 148, 95, 241, 238, 2, 206, 114, 78, 95, 241, 238, 2, 206, 246, 60,
- 246, 58, 241, 238, 2, 206, 42, 251, 207, 246, 58, 241, 238, 2, 206, 223,
- 148, 132, 241, 238, 2, 206, 114, 78, 95, 241, 238, 2, 206, 215, 134, 132,
- 241, 238, 2, 206, 119, 78, 95, 241, 238, 2, 206, 246, 60, 95, 241, 238,
- 2, 206, 114, 78, 132, 241, 238, 2, 206, 215, 134, 95, 241, 238, 2, 206,
- 119, 78, 132, 241, 238, 2, 206, 246, 60, 132, 241, 238, 2, 206, 114, 78,
- 184, 248, 101, 132, 241, 238, 2, 206, 119, 251, 220, 184, 248, 101, 95,
- 241, 238, 2, 206, 114, 78, 184, 248, 101, 95, 241, 238, 2, 206, 119, 251,
- 220, 184, 248, 101, 215, 124, 241, 238, 2, 206, 42, 251, 207, 246, 58,
- 241, 238, 2, 206, 223, 148, 246, 58, 241, 238, 2, 206, 42, 251, 207, 215,
- 124, 241, 238, 2, 206, 223, 148, 46, 51, 76, 2, 223, 85, 241, 219, 245,
- 61, 5, 78, 95, 68, 217, 43, 227, 34, 78, 95, 68, 132, 76, 78, 217, 43,
- 227, 33, 95, 76, 78, 217, 43, 227, 33, 95, 76, 78, 254, 57, 123, 108,
- 233, 39, 78, 132, 68, 132, 76, 217, 93, 233, 38, 242, 107, 78, 95, 68,
- 219, 9, 78, 95, 68, 132, 76, 217, 93, 219, 8, 218, 222, 78, 132, 68, 42,
- 244, 60, 218, 27, 46, 244, 60, 218, 27, 114, 244, 60, 218, 27, 119, 244,
- 60, 218, 27, 216, 169, 71, 252, 60, 248, 11, 212, 153, 174, 219, 174,
- 212, 153, 174, 216, 15, 249, 164, 42, 67, 249, 40, 125, 46, 67, 249, 40,
- 125, 42, 67, 226, 131, 46, 67, 226, 131, 212, 153, 174, 42, 236, 10, 125,
- 212, 153, 174, 46, 236, 10, 125, 212, 153, 174, 42, 251, 165, 125, 212,
- 153, 174, 46, 251, 165, 125, 42, 41, 251, 85, 2, 215, 153, 46, 41, 251,
- 85, 2, 215, 153, 42, 41, 251, 85, 2, 217, 69, 235, 252, 216, 227, 249,
- 99, 46, 41, 251, 85, 2, 217, 69, 235, 252, 251, 101, 249, 99, 42, 41,
- 251, 85, 2, 217, 69, 235, 252, 251, 101, 249, 99, 46, 41, 251, 85, 2,
- 217, 69, 235, 252, 216, 227, 249, 99, 42, 254, 19, 251, 85, 2, 247, 74,
- 46, 254, 19, 251, 85, 2, 247, 74, 42, 253, 196, 233, 39, 125, 46, 253,
- 196, 242, 107, 125, 51, 42, 253, 196, 242, 107, 125, 51, 46, 253, 196,
- 233, 39, 125, 42, 83, 216, 219, 220, 233, 125, 46, 83, 216, 219, 220,
- 233, 125, 246, 72, 244, 104, 71, 212, 28, 232, 242, 231, 153, 254, 19,
- 227, 35, 233, 70, 46, 254, 19, 214, 244, 2, 219, 166, 231, 153, 46, 254,
- 19, 2, 247, 74, 254, 19, 2, 223, 4, 235, 212, 254, 164, 254, 18, 219,
- 187, 254, 19, 227, 35, 233, 70, 219, 187, 254, 19, 227, 35, 215, 134,
- 216, 58, 254, 18, 223, 202, 254, 18, 254, 19, 2, 215, 153, 223, 202, 254,
- 19, 2, 215, 153, 227, 112, 254, 19, 227, 35, 215, 134, 227, 112, 254, 19,
- 227, 35, 246, 60, 231, 153, 254, 19, 2, 227, 40, 253, 176, 245, 98, 235,
- 252, 76, 225, 141, 114, 24, 223, 148, 231, 153, 254, 19, 2, 227, 40, 253,
- 176, 245, 98, 235, 252, 76, 225, 141, 114, 24, 233, 70, 231, 153, 254,
- 19, 2, 227, 40, 253, 176, 245, 98, 235, 252, 76, 225, 141, 119, 24, 223,
- 148, 231, 153, 254, 19, 2, 227, 40, 253, 176, 245, 98, 235, 252, 76, 225,
- 141, 119, 24, 233, 70, 231, 153, 254, 19, 2, 227, 40, 253, 176, 245, 98,
- 235, 252, 76, 225, 141, 46, 24, 215, 134, 231, 153, 254, 19, 2, 227, 40,
- 253, 176, 245, 98, 235, 252, 76, 225, 141, 42, 24, 215, 134, 231, 153,
- 254, 19, 2, 227, 40, 253, 176, 245, 98, 235, 252, 76, 225, 141, 46, 24,
- 246, 60, 231, 153, 254, 19, 2, 227, 40, 253, 176, 245, 98, 235, 252, 76,
- 225, 141, 42, 24, 246, 60, 223, 202, 245, 110, 221, 48, 245, 110, 221,
- 49, 2, 226, 247, 245, 110, 221, 49, 2, 3, 249, 229, 49, 245, 110, 221,
- 49, 2, 46, 76, 49, 245, 110, 221, 49, 2, 42, 76, 49, 249, 229, 2, 199,
- 134, 36, 71, 134, 36, 226, 135, 36, 223, 203, 219, 231, 36, 226, 47, 249,
- 229, 247, 125, 251, 7, 199, 252, 60, 24, 216, 227, 151, 247, 125, 251, 7,
- 71, 134, 249, 229, 2, 218, 224, 213, 166, 36, 253, 254, 247, 121, 52,
- 114, 76, 217, 93, 249, 228, 36, 67, 251, 42, 36, 251, 42, 36, 233, 38,
- 36, 242, 106, 249, 229, 2, 3, 249, 229, 211, 211, 217, 149, 223, 148,
- 249, 229, 2, 117, 199, 219, 33, 211, 211, 217, 149, 223, 148, 91, 223,
- 125, 247, 207, 220, 23, 91, 244, 143, 247, 207, 220, 23, 91, 253, 132,
- 91, 3, 249, 228, 91, 219, 166, 117, 235, 68, 219, 164, 216, 184, 2, 62,
- 49, 216, 184, 2, 215, 153, 223, 4, 235, 252, 216, 183, 216, 184, 2, 221,
- 55, 253, 123, 251, 100, 46, 216, 184, 78, 42, 216, 183, 42, 216, 184,
- 251, 207, 71, 134, 71, 252, 60, 251, 207, 46, 216, 183, 251, 91, 2, 42,
- 151, 251, 144, 251, 91, 2, 46, 151, 251, 144, 83, 251, 90, 29, 2, 42,
- 151, 251, 144, 29, 2, 46, 151, 251, 144, 67, 240, 223, 83, 240, 223, 42,
- 213, 229, 244, 104, 46, 213, 229, 244, 104, 42, 51, 213, 229, 244, 104,
- 46, 51, 213, 229, 244, 104, 235, 244, 235, 231, 217, 66, 110, 235, 231,
- 235, 232, 229, 183, 2, 71, 134, 246, 66, 230, 157, 41, 2, 249, 120, 226,
- 251, 235, 242, 253, 152, 220, 144, 225, 63, 245, 61, 5, 24, 220, 25, 226,
- 135, 245, 61, 5, 24, 220, 25, 226, 136, 2, 217, 43, 49, 240, 97, 211,
- 211, 24, 220, 25, 226, 135, 242, 159, 219, 94, 217, 138, 246, 59, 216,
- 184, 2, 42, 151, 251, 144, 246, 59, 216, 184, 2, 46, 151, 251, 144, 83,
- 247, 201, 2, 119, 68, 83, 232, 159, 67, 249, 229, 2, 119, 68, 83, 249,
- 229, 2, 119, 68, 245, 48, 67, 219, 166, 245, 48, 83, 219, 166, 245, 48,
- 67, 247, 200, 245, 48, 83, 247, 200, 245, 48, 67, 249, 228, 245, 48, 83,
- 249, 228, 223, 43, 223, 203, 219, 232, 227, 33, 219, 232, 2, 226, 247,
- 223, 203, 219, 232, 2, 199, 90, 251, 172, 219, 231, 251, 172, 223, 203,
- 219, 231, 51, 225, 156, 216, 169, 225, 156, 233, 66, 249, 33, 254, 19,
- 125, 223, 144, 249, 33, 254, 19, 125, 217, 31, 230, 248, 230, 97, 36, 62,
- 227, 33, 230, 97, 36, 94, 227, 33, 230, 97, 36, 29, 227, 33, 230, 97,
- 215, 147, 227, 34, 2, 247, 74, 230, 97, 215, 147, 227, 34, 2, 225, 156,
- 230, 97, 41, 235, 196, 227, 33, 230, 97, 41, 215, 147, 227, 33, 117, 232,
- 199, 24, 227, 33, 117, 232, 199, 167, 227, 33, 230, 97, 29, 227, 33, 230,
- 224, 117, 218, 244, 218, 242, 2, 235, 208, 224, 169, 235, 209, 227, 33,
- 244, 68, 226, 127, 235, 208, 235, 209, 2, 51, 90, 235, 209, 253, 89, 2,
- 220, 23, 249, 225, 243, 197, 253, 255, 235, 206, 232, 243, 235, 207, 2,
- 224, 8, 226, 110, 253, 173, 225, 135, 232, 243, 235, 207, 2, 221, 72,
- 226, 110, 253, 173, 225, 135, 232, 243, 235, 207, 228, 163, 235, 246,
- 217, 149, 225, 135, 235, 209, 253, 173, 118, 225, 145, 227, 33, 224, 163,
- 235, 209, 227, 33, 235, 209, 2, 132, 76, 2, 101, 235, 209, 2, 29, 52,
- 235, 209, 2, 235, 195, 235, 209, 2, 215, 146, 235, 209, 2, 226, 247, 235,
- 209, 2, 215, 153, 235, 69, 233, 108, 42, 216, 184, 227, 33, 212, 153,
- 174, 222, 119, 249, 148, 212, 153, 174, 222, 119, 225, 188, 212, 153,
- 174, 222, 119, 225, 60, 94, 5, 2, 3, 249, 229, 49, 94, 5, 2, 249, 224,
- 254, 175, 49, 94, 5, 2, 217, 43, 49, 94, 5, 2, 62, 55, 94, 5, 2, 217, 43,
- 55, 94, 5, 2, 219, 10, 109, 94, 5, 2, 83, 216, 183, 230, 251, 5, 2, 249,
- 158, 49, 230, 251, 5, 2, 62, 55, 230, 251, 5, 2, 244, 143, 247, 72, 230,
- 251, 5, 2, 223, 125, 247, 72, 94, 5, 235, 252, 42, 151, 249, 228, 94, 5,
- 235, 252, 46, 151, 249, 228, 214, 231, 167, 249, 71, 225, 63, 230, 154,
- 5, 2, 62, 49, 230, 154, 5, 2, 215, 153, 221, 69, 225, 64, 2, 251, 101,
- 249, 192, 220, 5, 225, 63, 230, 154, 5, 235, 252, 42, 151, 249, 228, 230,
- 154, 5, 235, 252, 46, 151, 249, 228, 36, 230, 154, 5, 2, 249, 224, 254,
- 174, 230, 154, 5, 235, 252, 51, 249, 228, 36, 247, 121, 52, 94, 5, 235,
- 252, 216, 183, 230, 251, 5, 235, 252, 216, 183, 230, 154, 5, 235, 252,
- 216, 183, 235, 203, 225, 63, 223, 139, 235, 203, 225, 63, 212, 153, 174,
- 223, 240, 249, 148, 254, 43, 167, 249, 104, 235, 196, 2, 247, 74, 215,
- 147, 2, 230, 251, 52, 215, 147, 2, 226, 247, 235, 196, 2, 226, 247, 235,
- 196, 2, 232, 199, 254, 27, 215, 147, 2, 232, 199, 227, 24, 215, 147, 78,
- 235, 195, 235, 196, 78, 215, 146, 215, 147, 78, 252, 60, 78, 235, 195,
- 235, 196, 78, 252, 60, 78, 215, 146, 215, 147, 251, 207, 24, 235, 68, 2,
- 215, 146, 235, 196, 251, 207, 24, 235, 68, 2, 235, 195, 249, 193, 215,
- 147, 2, 221, 54, 249, 193, 235, 196, 2, 221, 54, 51, 41, 235, 195, 51,
- 41, 215, 146, 249, 193, 215, 147, 2, 221, 55, 24, 220, 5, 225, 63, 232,
- 199, 24, 2, 62, 49, 232, 199, 167, 2, 62, 49, 51, 232, 199, 254, 27, 51,
- 232, 199, 227, 24, 117, 235, 197, 232, 199, 254, 27, 117, 235, 197, 232,
- 199, 227, 24, 220, 13, 233, 108, 227, 24, 220, 13, 233, 108, 254, 27,
- 232, 199, 167, 226, 245, 232, 199, 254, 27, 232, 199, 24, 2, 231, 37,
- 219, 79, 232, 199, 167, 2, 231, 37, 219, 79, 232, 199, 24, 2, 199, 248,
- 101, 232, 199, 167, 2, 199, 248, 101, 232, 199, 24, 2, 51, 226, 247, 232,
- 199, 24, 2, 215, 153, 232, 199, 24, 2, 51, 215, 153, 3, 214, 228, 2, 215,
- 153, 232, 199, 167, 2, 51, 226, 247, 232, 199, 167, 2, 51, 215, 153, 212,
- 153, 174, 247, 83, 253, 246, 212, 153, 174, 224, 40, 253, 246, 245, 61,
- 5, 2, 62, 55, 240, 97, 2, 62, 49, 216, 169, 199, 252, 60, 2, 51, 71, 90,
- 216, 169, 199, 252, 60, 2, 216, 169, 71, 90, 217, 43, 227, 34, 2, 62, 49,
- 217, 43, 227, 34, 2, 223, 125, 247, 72, 220, 88, 230, 251, 220, 87, 249,
- 139, 2, 62, 49, 245, 61, 2, 253, 132, 254, 57, 123, 211, 211, 2, 249,
- 224, 254, 174, 253, 218, 123, 167, 123, 108, 245, 61, 5, 78, 94, 52, 94,
- 5, 78, 245, 61, 52, 245, 61, 5, 78, 217, 43, 227, 33, 51, 249, 165, 245,
- 62, 117, 249, 134, 245, 61, 220, 102, 133, 249, 134, 245, 61, 220, 102,
- 245, 61, 5, 2, 117, 176, 78, 24, 117, 176, 55, 245, 57, 2, 243, 237, 176,
- 49, 233, 39, 2, 249, 229, 235, 212, 242, 107, 2, 249, 229, 235, 212, 233,
- 39, 2, 224, 158, 152, 49, 242, 107, 2, 224, 158, 152, 49, 233, 39, 167,
- 220, 25, 123, 108, 242, 107, 167, 220, 25, 123, 108, 233, 39, 167, 220,
- 25, 123, 211, 211, 2, 62, 235, 212, 242, 107, 167, 220, 25, 123, 211,
- 211, 2, 62, 235, 212, 233, 39, 167, 220, 25, 123, 211, 211, 2, 62, 49,
- 242, 107, 167, 220, 25, 123, 211, 211, 2, 62, 49, 233, 39, 167, 220, 25,
- 123, 211, 211, 2, 62, 78, 223, 148, 242, 107, 167, 220, 25, 123, 211,
- 211, 2, 62, 78, 233, 70, 233, 39, 167, 253, 219, 242, 107, 167, 253, 219,
- 233, 39, 24, 220, 79, 228, 163, 123, 108, 242, 107, 24, 220, 79, 228,
- 163, 123, 108, 233, 39, 24, 228, 163, 253, 219, 242, 107, 24, 228, 163,
- 253, 219, 233, 39, 78, 246, 65, 123, 78, 242, 106, 242, 107, 78, 246, 65,
- 123, 78, 233, 38, 233, 39, 78, 220, 88, 167, 245, 62, 242, 107, 78, 220,
- 88, 167, 245, 62, 233, 39, 78, 220, 88, 78, 242, 106, 242, 107, 78, 220,
- 88, 78, 233, 38, 233, 39, 78, 242, 107, 78, 246, 65, 245, 62, 242, 107,
- 78, 233, 39, 78, 246, 65, 245, 62, 233, 39, 78, 220, 25, 123, 78, 242,
- 107, 78, 220, 25, 245, 62, 242, 107, 78, 220, 25, 123, 78, 233, 39, 78,
- 220, 25, 245, 62, 220, 25, 123, 211, 211, 167, 233, 38, 220, 25, 123,
- 211, 211, 167, 242, 106, 220, 25, 123, 211, 211, 167, 233, 39, 2, 62,
- 235, 212, 220, 25, 123, 211, 211, 167, 242, 107, 2, 62, 235, 212, 246,
- 65, 123, 211, 211, 167, 233, 38, 246, 65, 123, 211, 211, 167, 242, 106,
- 246, 65, 220, 25, 123, 211, 211, 167, 233, 38, 246, 65, 220, 25, 123,
- 211, 211, 167, 242, 106, 220, 88, 167, 233, 38, 220, 88, 167, 242, 106,
- 220, 88, 78, 233, 39, 78, 245, 61, 52, 220, 88, 78, 242, 107, 78, 245,
- 61, 52, 51, 229, 173, 233, 38, 51, 229, 173, 242, 106, 51, 229, 173, 233,
- 39, 2, 215, 153, 242, 107, 226, 245, 233, 38, 242, 107, 251, 207, 233,
- 38, 233, 39, 249, 193, 251, 7, 249, 34, 242, 107, 249, 193, 251, 7, 249,
- 34, 233, 39, 249, 193, 251, 7, 249, 35, 78, 220, 25, 245, 62, 242, 107,
- 249, 193, 251, 7, 249, 35, 78, 220, 25, 245, 62, 220, 6, 217, 153, 233,
- 106, 217, 153, 220, 6, 217, 154, 167, 123, 108, 233, 106, 217, 154, 167,
- 123, 108, 245, 61, 5, 2, 251, 37, 49, 225, 83, 78, 220, 79, 245, 61, 52,
- 219, 1, 78, 220, 79, 245, 61, 52, 225, 83, 78, 220, 79, 228, 163, 123,
- 108, 219, 1, 78, 220, 79, 228, 163, 123, 108, 225, 83, 78, 245, 61, 52,
- 219, 1, 78, 245, 61, 52, 225, 83, 78, 228, 163, 123, 108, 219, 1, 78,
- 228, 163, 123, 108, 225, 83, 78, 254, 57, 123, 108, 219, 1, 78, 254, 57,
- 123, 108, 225, 83, 78, 228, 163, 254, 57, 123, 108, 219, 1, 78, 228, 163,
- 254, 57, 123, 108, 51, 225, 82, 51, 219, 0, 219, 9, 2, 247, 74, 218, 222,
- 2, 247, 74, 219, 9, 2, 94, 5, 55, 218, 222, 2, 94, 5, 55, 219, 9, 2, 230,
- 154, 5, 55, 218, 222, 2, 230, 154, 5, 55, 219, 9, 65, 167, 123, 211, 211,
- 2, 62, 49, 218, 222, 65, 167, 123, 211, 211, 2, 62, 49, 219, 9, 65, 78,
- 245, 61, 52, 218, 222, 65, 78, 245, 61, 52, 219, 9, 65, 78, 217, 43, 227,
- 33, 218, 222, 65, 78, 217, 43, 227, 33, 219, 9, 65, 78, 254, 57, 123,
- 108, 218, 222, 65, 78, 254, 57, 123, 108, 219, 9, 65, 78, 228, 163, 123,
- 108, 218, 222, 65, 78, 228, 163, 123, 108, 41, 42, 227, 40, 92, 227, 33,
- 41, 46, 227, 40, 92, 227, 33, 249, 193, 219, 8, 249, 193, 218, 221, 249,
- 193, 219, 9, 167, 123, 108, 249, 193, 218, 222, 167, 123, 108, 219, 9,
- 78, 218, 221, 218, 222, 78, 219, 8, 219, 9, 78, 219, 8, 218, 222, 78,
- 218, 221, 218, 222, 251, 207, 219, 8, 218, 222, 251, 207, 24, 235, 68,
- 251, 7, 248, 102, 2, 219, 8, 245, 127, 65, 227, 35, 246, 57, 225, 180, 2,
- 217, 220, 216, 226, 216, 198, 235, 195, 243, 246, 228, 176, 220, 175, 42,
- 218, 36, 220, 175, 119, 218, 36, 220, 175, 114, 218, 36, 226, 48, 2, 197,
- 71, 252, 60, 216, 169, 46, 216, 57, 51, 71, 252, 60, 42, 216, 57, 71,
- 252, 60, 51, 42, 216, 57, 51, 71, 252, 60, 51, 42, 216, 57, 184, 248,
- 102, 243, 213, 42, 231, 127, 65, 51, 214, 216, 220, 175, 119, 218, 37, 2,
- 226, 247, 220, 175, 114, 218, 37, 2, 215, 153, 220, 175, 114, 218, 37,
- 78, 220, 175, 119, 218, 36, 51, 119, 218, 36, 51, 114, 218, 36, 51, 219,
- 45, 228, 163, 52, 223, 202, 51, 219, 45, 228, 163, 52, 247, 92, 228, 163,
- 247, 127, 2, 223, 202, 229, 182, 220, 23, 71, 232, 243, 2, 249, 229, 49,
- 71, 232, 243, 2, 249, 229, 55, 119, 218, 37, 2, 249, 229, 55, 226, 136,
- 2, 199, 90, 226, 136, 2, 217, 43, 227, 33, 216, 169, 71, 252, 60, 251,
- 167, 223, 241, 216, 169, 71, 252, 60, 2, 199, 90, 216, 169, 249, 165,
- 227, 33, 216, 169, 229, 173, 233, 38, 216, 169, 229, 173, 242, 106, 246,
- 65, 220, 25, 233, 39, 167, 123, 108, 246, 65, 220, 25, 242, 107, 167,
- 123, 108, 216, 169, 219, 232, 251, 167, 223, 241, 233, 108, 216, 169, 71,
- 252, 60, 227, 33, 51, 219, 232, 227, 33, 67, 71, 134, 230, 97, 67, 71,
- 134, 228, 167, 245, 176, 67, 68, 228, 167, 213, 250, 67, 68, 219, 215,
- 245, 176, 67, 68, 219, 215, 213, 250, 67, 68, 42, 46, 67, 68, 132, 83,
- 68, 215, 124, 83, 68, 246, 58, 83, 68, 228, 167, 245, 176, 83, 68, 228,
- 167, 213, 250, 83, 68, 219, 215, 245, 176, 83, 68, 219, 215, 213, 250,
- 83, 68, 42, 46, 83, 68, 114, 119, 83, 68, 95, 76, 2, 217, 30, 246, 57,
- 95, 76, 2, 217, 30, 215, 123, 132, 76, 2, 217, 30, 246, 57, 132, 76, 2,
- 217, 30, 215, 123, 41, 2, 216, 227, 151, 251, 144, 41, 2, 251, 101, 151,
- 251, 144, 41, 2, 215, 131, 46, 247, 207, 151, 251, 144, 41, 2, 232, 163,
- 42, 247, 207, 151, 251, 144, 247, 201, 2, 42, 151, 251, 144, 247, 201, 2,
- 46, 151, 251, 144, 247, 201, 2, 216, 227, 151, 251, 144, 247, 201, 2,
- 251, 101, 151, 251, 144, 246, 72, 219, 166, 83, 233, 108, 219, 166, 67,
- 233, 108, 219, 166, 83, 214, 164, 3, 219, 166, 67, 214, 164, 3, 219, 166,
- 83, 226, 65, 67, 226, 65, 67, 241, 178, 83, 241, 178, 199, 83, 241, 178,
- 83, 233, 108, 249, 228, 83, 231, 147, 247, 200, 67, 231, 147, 247, 200,
- 83, 231, 147, 232, 159, 67, 231, 147, 232, 159, 83, 3, 247, 200, 83, 3,
- 232, 159, 67, 3, 232, 159, 83, 199, 245, 121, 67, 199, 245, 121, 83, 71,
- 245, 121, 67, 71, 245, 121, 42, 76, 2, 3, 249, 228, 133, 132, 253, 162,
- 42, 76, 2, 36, 225, 156, 184, 132, 219, 162, 68, 132, 216, 24, 76, 2, 71,
- 90, 132, 216, 24, 76, 2, 51, 71, 90, 132, 216, 24, 76, 243, 213, 134,
- 132, 216, 24, 216, 169, 248, 102, 68, 132, 76, 2, 246, 72, 219, 79, 132,
- 76, 2, 218, 28, 2, 71, 90, 132, 76, 2, 218, 28, 2, 51, 71, 90, 132, 216,
- 24, 76, 2, 218, 27, 132, 216, 24, 76, 2, 218, 28, 2, 71, 90, 132, 216,
- 24, 76, 2, 218, 28, 2, 51, 71, 90, 132, 76, 217, 93, 213, 166, 214, 20,
- 76, 225, 141, 247, 147, 233, 70, 245, 61, 5, 78, 132, 68, 223, 203, 217,
- 43, 227, 34, 78, 132, 68, 132, 76, 78, 223, 203, 254, 57, 123, 108, 95,
- 76, 217, 93, 242, 106, 95, 76, 217, 93, 218, 221, 132, 224, 169, 68, 95,
- 224, 169, 68, 223, 203, 217, 43, 227, 34, 78, 95, 68, 95, 76, 78, 223,
- 203, 254, 57, 123, 108, 217, 43, 227, 34, 78, 132, 68, 132, 76, 78, 254,
- 57, 123, 108, 132, 76, 78, 223, 203, 217, 43, 227, 33, 95, 76, 78, 223,
- 203, 217, 43, 227, 33, 67, 231, 147, 219, 95, 83, 3, 219, 95, 67, 3, 219,
- 95, 83, 223, 144, 226, 65, 67, 223, 144, 226, 65, 107, 233, 108, 249,
- 228, 107, 226, 248, 2, 226, 248, 235, 212, 107, 249, 229, 2, 249, 229,
- 235, 212, 107, 249, 228, 107, 36, 222, 169, 136, 6, 1, 253, 75, 136, 6,
- 1, 251, 46, 136, 6, 1, 214, 230, 136, 6, 1, 242, 161, 136, 6, 1, 247, 94,
- 136, 6, 1, 213, 12, 136, 6, 1, 212, 61, 136, 6, 1, 245, 245, 136, 6, 1,
- 212, 84, 136, 6, 1, 235, 146, 136, 6, 1, 70, 235, 146, 136, 6, 1, 72,
- 136, 6, 1, 247, 112, 136, 6, 1, 234, 245, 136, 6, 1, 232, 215, 136, 6, 1,
- 230, 101, 136, 6, 1, 230, 12, 136, 6, 1, 227, 51, 136, 6, 1, 225, 138,
- 136, 6, 1, 223, 124, 136, 6, 1, 220, 11, 136, 6, 1, 216, 46, 136, 6, 1,
- 215, 171, 136, 6, 1, 243, 216, 136, 6, 1, 241, 184, 136, 6, 1, 227, 3,
- 136, 6, 1, 226, 96, 136, 6, 1, 220, 153, 136, 6, 1, 216, 125, 136, 6, 1,
- 250, 12, 136, 6, 1, 221, 24, 136, 6, 1, 213, 18, 136, 6, 1, 213, 20, 136,
- 6, 1, 213, 47, 136, 6, 1, 219, 185, 159, 136, 6, 1, 212, 203, 136, 6, 1,
- 3, 212, 174, 136, 6, 1, 3, 212, 175, 2, 218, 27, 136, 6, 1, 212, 235,
- 136, 6, 1, 235, 182, 3, 212, 174, 136, 6, 1, 251, 172, 212, 174, 136, 6,
- 1, 235, 182, 251, 172, 212, 174, 136, 6, 1, 244, 51, 136, 6, 1, 235, 144,
- 136, 6, 1, 220, 152, 136, 6, 1, 216, 160, 61, 136, 6, 1, 233, 98, 230,
- 101, 136, 3, 1, 253, 75, 136, 3, 1, 251, 46, 136, 3, 1, 214, 230, 136, 3,
- 1, 242, 161, 136, 3, 1, 247, 94, 136, 3, 1, 213, 12, 136, 3, 1, 212, 61,
- 136, 3, 1, 245, 245, 136, 3, 1, 212, 84, 136, 3, 1, 235, 146, 136, 3, 1,
- 70, 235, 146, 136, 3, 1, 72, 136, 3, 1, 247, 112, 136, 3, 1, 234, 245,
- 136, 3, 1, 232, 215, 136, 3, 1, 230, 101, 136, 3, 1, 230, 12, 136, 3, 1,
- 227, 51, 136, 3, 1, 225, 138, 136, 3, 1, 223, 124, 136, 3, 1, 220, 11,
- 136, 3, 1, 216, 46, 136, 3, 1, 215, 171, 136, 3, 1, 243, 216, 136, 3, 1,
- 241, 184, 136, 3, 1, 227, 3, 136, 3, 1, 226, 96, 136, 3, 1, 220, 153,
- 136, 3, 1, 216, 125, 136, 3, 1, 250, 12, 136, 3, 1, 221, 24, 136, 3, 1,
- 213, 18, 136, 3, 1, 213, 20, 136, 3, 1, 213, 47, 136, 3, 1, 219, 185,
- 159, 136, 3, 1, 212, 203, 136, 3, 1, 3, 212, 174, 136, 3, 1, 3, 212, 175,
- 2, 218, 27, 136, 3, 1, 212, 235, 136, 3, 1, 235, 182, 3, 212, 174, 136,
- 3, 1, 251, 172, 212, 174, 136, 3, 1, 235, 182, 251, 172, 212, 174, 136,
- 3, 1, 244, 51, 136, 3, 1, 235, 144, 136, 3, 1, 220, 152, 136, 3, 1, 216,
- 160, 61, 136, 3, 1, 233, 98, 230, 101, 7, 6, 1, 233, 171, 2, 51, 134, 7,
- 3, 1, 233, 171, 2, 51, 134, 7, 6, 1, 233, 171, 2, 231, 37, 217, 42, 7, 6,
- 1, 226, 230, 2, 90, 7, 6, 1, 224, 113, 2, 218, 27, 7, 3, 1, 118, 2, 90,
- 7, 3, 1, 218, 100, 2, 247, 207, 90, 7, 6, 1, 242, 42, 2, 247, 246, 7, 3,
- 1, 242, 42, 2, 247, 246, 7, 6, 1, 235, 28, 2, 247, 246, 7, 3, 1, 235, 28,
- 2, 247, 246, 7, 6, 1, 212, 153, 2, 247, 246, 7, 3, 1, 212, 153, 2, 247,
- 246, 7, 6, 1, 254, 52, 7, 6, 1, 232, 110, 2, 101, 7, 6, 1, 216, 58, 61,
- 7, 6, 1, 216, 58, 254, 52, 7, 3, 1, 215, 80, 2, 46, 101, 7, 6, 1, 214,
- 83, 2, 101, 7, 3, 1, 214, 83, 2, 101, 7, 3, 1, 215, 80, 2, 249, 41, 7, 6,
- 1, 151, 242, 41, 7, 3, 1, 151, 242, 41, 7, 3, 1, 218, 25, 226, 9, 7, 3,
- 1, 191, 2, 228, 161, 7, 3, 1, 216, 58, 224, 113, 2, 218, 27, 7, 3, 1,
- 157, 2, 115, 223, 131, 235, 212, 7, 1, 3, 6, 216, 58, 74, 7, 219, 10, 3,
- 1, 235, 142, 59, 1, 6, 215, 79, 7, 6, 1, 223, 4, 2, 218, 195, 218, 27, 7,
- 6, 1, 212, 153, 2, 218, 195, 218, 27, 79, 6, 1, 254, 73, 79, 3, 1, 254,
- 73, 79, 6, 1, 214, 151, 79, 3, 1, 214, 151, 79, 6, 1, 243, 83, 79, 3, 1,
- 243, 83, 79, 6, 1, 248, 136, 79, 3, 1, 248, 136, 79, 6, 1, 245, 151, 79,
- 3, 1, 245, 151, 79, 6, 1, 219, 220, 79, 3, 1, 219, 220, 79, 6, 1, 212,
- 94, 79, 3, 1, 212, 94, 79, 6, 1, 241, 231, 79, 3, 1, 241, 231, 79, 6, 1,
- 217, 130, 79, 3, 1, 217, 130, 79, 6, 1, 240, 109, 79, 3, 1, 240, 109, 79,
- 6, 1, 234, 232, 79, 3, 1, 234, 232, 79, 6, 1, 233, 96, 79, 3, 1, 233, 96,
- 79, 6, 1, 231, 42, 79, 3, 1, 231, 42, 79, 6, 1, 229, 64, 79, 3, 1, 229,
- 64, 79, 6, 1, 233, 242, 79, 3, 1, 233, 242, 79, 6, 1, 75, 79, 3, 1, 75,
- 79, 6, 1, 225, 240, 79, 3, 1, 225, 240, 79, 6, 1, 223, 112, 79, 3, 1,
- 223, 112, 79, 6, 1, 220, 91, 79, 3, 1, 220, 91, 79, 6, 1, 217, 248, 79,
- 3, 1, 217, 248, 79, 6, 1, 215, 196, 79, 3, 1, 215, 196, 79, 6, 1, 244,
- 90, 79, 3, 1, 244, 90, 79, 6, 1, 234, 118, 79, 3, 1, 234, 118, 79, 6, 1,
- 225, 46, 79, 3, 1, 225, 46, 79, 6, 1, 227, 44, 79, 3, 1, 227, 44, 79, 6,
- 1, 247, 205, 254, 78, 79, 3, 1, 247, 205, 254, 78, 79, 6, 1, 53, 79, 254,
- 103, 79, 3, 1, 53, 79, 254, 103, 79, 6, 1, 249, 55, 245, 151, 79, 3, 1,
- 249, 55, 245, 151, 79, 6, 1, 247, 205, 234, 232, 79, 3, 1, 247, 205, 234,
- 232, 79, 6, 1, 247, 205, 229, 64, 79, 3, 1, 247, 205, 229, 64, 79, 6, 1,
- 249, 55, 229, 64, 79, 3, 1, 249, 55, 229, 64, 79, 6, 1, 53, 79, 227, 44,
- 79, 3, 1, 53, 79, 227, 44, 79, 6, 1, 222, 161, 79, 3, 1, 222, 161, 79, 6,
- 1, 249, 68, 220, 235, 79, 3, 1, 249, 68, 220, 235, 79, 6, 1, 53, 79, 220,
- 235, 79, 3, 1, 53, 79, 220, 235, 79, 6, 1, 53, 79, 245, 40, 79, 3, 1, 53,
- 79, 245, 40, 79, 6, 1, 254, 90, 234, 123, 79, 3, 1, 254, 90, 234, 123,
- 79, 6, 1, 247, 205, 241, 32, 79, 3, 1, 247, 205, 241, 32, 79, 6, 1, 53,
- 79, 241, 32, 79, 3, 1, 53, 79, 241, 32, 79, 6, 1, 53, 79, 159, 79, 3, 1,
- 53, 79, 159, 79, 6, 1, 233, 170, 159, 79, 3, 1, 233, 170, 159, 79, 6, 1,
- 53, 79, 241, 201, 79, 3, 1, 53, 79, 241, 201, 79, 6, 1, 53, 79, 241, 234,
- 79, 3, 1, 53, 79, 241, 234, 79, 6, 1, 53, 79, 243, 78, 79, 3, 1, 53, 79,
- 243, 78, 79, 6, 1, 53, 79, 247, 115, 79, 3, 1, 53, 79, 247, 115, 79, 6,
- 1, 53, 79, 220, 202, 79, 3, 1, 53, 79, 220, 202, 79, 6, 1, 53, 228, 63,
- 220, 202, 79, 3, 1, 53, 228, 63, 220, 202, 79, 6, 1, 53, 228, 63, 229,
- 113, 79, 3, 1, 53, 228, 63, 229, 113, 79, 6, 1, 53, 228, 63, 228, 10, 79,
- 3, 1, 53, 228, 63, 228, 10, 79, 6, 1, 53, 228, 63, 214, 21, 79, 3, 1, 53,
- 228, 63, 214, 21, 79, 16, 234, 250, 79, 16, 231, 43, 223, 112, 79, 16,
- 225, 241, 223, 112, 79, 16, 219, 87, 79, 16, 217, 249, 223, 112, 79, 16,
- 234, 119, 223, 112, 79, 16, 220, 203, 220, 91, 79, 6, 1, 249, 55, 220,
- 235, 79, 3, 1, 249, 55, 220, 235, 79, 6, 1, 249, 55, 243, 78, 79, 3, 1,
- 249, 55, 243, 78, 79, 37, 229, 65, 49, 79, 37, 219, 179, 253, 139, 79,
- 37, 219, 179, 233, 45, 79, 53, 228, 63, 243, 200, 219, 69, 79, 53, 228,
- 63, 247, 149, 224, 158, 77, 79, 53, 228, 63, 235, 234, 224, 158, 77, 79,
- 53, 228, 63, 214, 218, 247, 124, 79, 243, 228, 122, 242, 9, 79, 243, 200,
- 219, 69, 79, 230, 194, 247, 124, 100, 3, 1, 254, 32, 100, 3, 1, 252, 71,
- 100, 3, 1, 243, 82, 100, 3, 1, 247, 82, 100, 3, 1, 245, 108, 100, 3, 1,
- 214, 141, 100, 3, 1, 212, 82, 100, 3, 1, 218, 11, 100, 3, 1, 235, 251,
- 100, 3, 1, 234, 239, 100, 3, 1, 233, 104, 100, 3, 1, 231, 248, 100, 3, 1,
- 230, 15, 100, 3, 1, 227, 62, 100, 3, 1, 226, 145, 100, 3, 1, 212, 71,
- 100, 3, 1, 224, 61, 100, 3, 1, 222, 159, 100, 3, 1, 218, 1, 100, 3, 1,
- 215, 160, 100, 3, 1, 226, 16, 100, 3, 1, 234, 127, 100, 3, 1, 242, 217,
- 100, 3, 1, 224, 217, 100, 3, 1, 220, 200, 100, 3, 1, 250, 34, 100, 3, 1,
- 250, 195, 100, 3, 1, 235, 103, 100, 3, 1, 249, 233, 100, 3, 1, 250, 79,
- 100, 3, 1, 213, 151, 100, 3, 1, 235, 113, 100, 3, 1, 242, 24, 100, 3, 1,
- 241, 222, 100, 3, 1, 241, 160, 100, 3, 1, 214, 6, 100, 3, 1, 241, 243,
- 100, 3, 1, 241, 51, 217, 62, 1, 186, 217, 62, 1, 213, 87, 217, 62, 1,
- 213, 86, 217, 62, 1, 213, 76, 217, 62, 1, 213, 74, 217, 62, 1, 251, 209,
- 254, 176, 213, 70, 217, 62, 1, 213, 70, 217, 62, 1, 213, 84, 217, 62, 1,
- 213, 81, 217, 62, 1, 213, 83, 217, 62, 1, 213, 82, 217, 62, 1, 213, 3,
- 217, 62, 1, 213, 78, 217, 62, 1, 213, 68, 217, 62, 1, 216, 79, 213, 68,
- 217, 62, 1, 213, 65, 217, 62, 1, 213, 72, 217, 62, 1, 251, 209, 254, 176,
- 213, 72, 217, 62, 1, 216, 79, 213, 72, 217, 62, 1, 213, 71, 217, 62, 1,
- 213, 91, 217, 62, 1, 213, 66, 217, 62, 1, 216, 79, 213, 66, 217, 62, 1,
- 213, 56, 217, 62, 1, 216, 79, 213, 56, 217, 62, 1, 212, 255, 217, 62, 1,
- 213, 40, 217, 62, 1, 254, 112, 213, 40, 217, 62, 1, 216, 79, 213, 40,
- 217, 62, 1, 213, 64, 217, 62, 1, 213, 63, 217, 62, 1, 213, 60, 217, 62,
- 1, 216, 79, 213, 73, 217, 62, 1, 216, 79, 213, 58, 217, 62, 1, 213, 57,
- 217, 62, 1, 212, 203, 217, 62, 1, 213, 54, 217, 62, 1, 213, 53, 217, 62,
- 1, 213, 75, 217, 62, 1, 216, 79, 213, 75, 217, 62, 1, 253, 79, 213, 75,
- 217, 62, 1, 213, 52, 217, 62, 1, 213, 50, 217, 62, 1, 213, 51, 217, 62,
- 1, 213, 49, 217, 62, 1, 213, 48, 217, 62, 1, 213, 85, 217, 62, 1, 213,
- 46, 217, 62, 1, 213, 45, 217, 62, 1, 213, 44, 217, 62, 1, 213, 43, 217,
- 62, 1, 213, 41, 217, 62, 1, 217, 241, 213, 41, 217, 62, 1, 213, 39, 217,
- 62, 59, 1, 233, 149, 77, 217, 62, 221, 58, 77, 217, 62, 249, 133, 235,
- 66, 28, 4, 232, 207, 28, 4, 230, 230, 28, 4, 223, 110, 28, 4, 219, 241,
- 28, 4, 220, 186, 28, 4, 251, 127, 28, 4, 216, 252, 28, 4, 249, 174, 28,
- 4, 228, 183, 28, 4, 227, 252, 28, 4, 242, 156, 227, 120, 28, 4, 212, 15,
- 28, 4, 247, 97, 28, 4, 248, 55, 28, 4, 235, 70, 28, 4, 217, 108, 28, 4,
- 250, 22, 28, 4, 225, 252, 28, 4, 225, 149, 28, 4, 242, 231, 28, 4, 242,
- 227, 28, 4, 242, 228, 28, 4, 242, 229, 28, 4, 219, 157, 28, 4, 219, 117,
- 28, 4, 219, 128, 28, 4, 219, 156, 28, 4, 219, 132, 28, 4, 219, 133, 28,
- 4, 219, 121, 28, 4, 250, 146, 28, 4, 250, 126, 28, 4, 250, 128, 28, 4,
- 250, 145, 28, 4, 250, 143, 28, 4, 250, 144, 28, 4, 250, 127, 28, 4, 211,
- 242, 28, 4, 211, 222, 28, 4, 211, 233, 28, 4, 211, 241, 28, 4, 211, 236,
- 28, 4, 211, 237, 28, 4, 211, 225, 28, 4, 250, 142, 28, 4, 250, 129, 28,
- 4, 250, 131, 28, 4, 250, 141, 28, 4, 250, 139, 28, 4, 250, 140, 28, 4,
- 250, 130, 28, 4, 224, 125, 28, 4, 224, 115, 28, 4, 224, 121, 28, 4, 224,
- 124, 28, 4, 224, 122, 28, 4, 224, 123, 28, 4, 224, 120, 28, 4, 233, 181,
- 28, 4, 233, 173, 28, 4, 233, 176, 28, 4, 233, 180, 28, 4, 233, 177, 28,
- 4, 233, 178, 28, 4, 233, 174, 28, 4, 213, 118, 28, 4, 213, 108, 28, 4,
- 213, 114, 28, 4, 213, 117, 28, 4, 213, 115, 28, 4, 213, 116, 28, 4, 213,
- 113, 28, 4, 242, 52, 28, 4, 242, 43, 28, 4, 242, 46, 28, 4, 242, 51, 28,
- 4, 242, 48, 28, 4, 242, 49, 28, 4, 242, 45, 37, 33, 1, 251, 251, 37, 33,
- 1, 214, 232, 37, 33, 1, 242, 212, 37, 33, 1, 248, 41, 37, 33, 1, 212, 67,
- 37, 33, 1, 212, 87, 37, 33, 1, 181, 37, 33, 1, 245, 131, 37, 33, 1, 245,
- 117, 37, 33, 1, 245, 108, 37, 33, 1, 75, 37, 33, 1, 226, 96, 37, 33, 1,
- 245, 55, 37, 33, 1, 245, 45, 37, 33, 1, 217, 229, 37, 33, 1, 159, 37, 33,
- 1, 216, 136, 37, 33, 1, 250, 67, 37, 33, 1, 221, 24, 37, 33, 1, 220, 245,
- 37, 33, 1, 244, 51, 37, 33, 1, 245, 44, 37, 33, 1, 61, 37, 33, 1, 236,
- 55, 37, 33, 1, 247, 113, 37, 33, 1, 230, 210, 215, 175, 37, 33, 1, 213,
- 49, 37, 33, 1, 212, 203, 37, 33, 1, 235, 181, 61, 37, 33, 1, 232, 221,
- 212, 174, 37, 33, 1, 251, 172, 212, 174, 37, 33, 1, 235, 181, 251, 172,
- 212, 174, 46, 254, 19, 219, 5, 231, 217, 46, 254, 19, 246, 72, 219, 5,
- 231, 217, 42, 219, 5, 125, 46, 219, 5, 125, 42, 246, 72, 219, 5, 125, 46,
- 246, 72, 219, 5, 125, 224, 48, 235, 199, 231, 217, 224, 48, 246, 72, 235,
- 199, 231, 217, 246, 72, 216, 199, 231, 217, 42, 216, 199, 125, 46, 216,
- 199, 125, 224, 48, 219, 166, 42, 224, 48, 227, 64, 125, 46, 224, 48, 227,
- 64, 125, 245, 166, 249, 97, 226, 141, 243, 247, 226, 141, 223, 202, 243,
- 247, 226, 141, 240, 157, 246, 72, 227, 115, 246, 58, 254, 28, 215, 124,
- 254, 28, 246, 72, 223, 144, 254, 18, 51, 227, 112, 240, 160, 235, 191,
- 235, 198, 226, 186, 251, 81, 240, 161, 2, 247, 209, 217, 43, 2, 223, 131,
- 49, 42, 115, 226, 133, 125, 46, 115, 226, 133, 125, 217, 43, 2, 62, 49,
- 217, 43, 2, 62, 55, 42, 71, 252, 60, 2, 224, 152, 46, 71, 252, 60, 2,
- 224, 152, 216, 227, 42, 151, 125, 216, 227, 46, 151, 125, 251, 101, 42,
- 151, 125, 251, 101, 46, 151, 125, 42, 220, 113, 111, 125, 46, 220, 113,
- 111, 125, 42, 51, 226, 131, 46, 51, 226, 131, 117, 176, 110, 122, 62,
- 225, 26, 122, 62, 110, 117, 176, 225, 26, 91, 243, 237, 62, 225, 26, 244,
- 50, 62, 77, 223, 202, 224, 158, 77, 71, 217, 42, 223, 131, 225, 144, 213,
- 196, 221, 58, 231, 37, 247, 74, 9, 34, 223, 227, 9, 34, 249, 203, 9, 34,
- 222, 95, 116, 9, 34, 222, 95, 109, 9, 34, 222, 95, 166, 9, 34, 226, 43,
- 9, 34, 251, 89, 9, 34, 218, 40, 9, 34, 234, 42, 116, 9, 34, 234, 42, 109,
- 9, 34, 247, 122, 9, 34, 222, 98, 9, 34, 3, 116, 9, 34, 3, 109, 9, 34,
- 233, 121, 116, 9, 34, 233, 121, 109, 9, 34, 233, 121, 166, 9, 34, 233,
- 121, 163, 9, 34, 219, 252, 9, 34, 217, 98, 9, 34, 219, 250, 116, 9, 34,
- 219, 250, 109, 9, 34, 241, 212, 116, 9, 34, 241, 212, 109, 9, 34, 241,
- 254, 9, 34, 224, 39, 9, 34, 250, 19, 9, 34, 218, 238, 9, 34, 230, 198, 9,
- 34, 248, 39, 9, 34, 230, 190, 9, 34, 249, 218, 9, 34, 214, 25, 116, 9,
- 34, 214, 25, 109, 9, 34, 244, 65, 9, 34, 226, 106, 116, 9, 34, 226, 106,
- 109, 9, 34, 220, 86, 151, 216, 194, 216, 146, 9, 34, 249, 84, 9, 34, 247,
- 90, 9, 34, 235, 135, 9, 34, 251, 122, 65, 249, 187, 9, 34, 244, 239, 9,
- 34, 219, 181, 116, 9, 34, 219, 181, 109, 9, 34, 252, 73, 9, 34, 220, 93,
- 9, 34, 250, 249, 220, 93, 9, 34, 229, 172, 116, 9, 34, 229, 172, 109, 9,
- 34, 229, 172, 166, 9, 34, 229, 172, 163, 9, 34, 231, 111, 9, 34, 220,
- 237, 9, 34, 224, 45, 9, 34, 245, 4, 9, 34, 227, 75, 9, 34, 251, 61, 116,
- 9, 34, 251, 61, 109, 9, 34, 231, 151, 9, 34, 230, 193, 9, 34, 242, 117,
- 116, 9, 34, 242, 117, 109, 9, 34, 242, 117, 166, 9, 34, 217, 60, 9, 34,
- 249, 186, 9, 34, 213, 250, 116, 9, 34, 213, 250, 109, 9, 34, 250, 249,
- 222, 89, 9, 34, 220, 86, 240, 235, 9, 34, 240, 235, 9, 34, 250, 249, 219,
- 190, 9, 34, 250, 249, 220, 232, 9, 34, 244, 1, 9, 34, 250, 249, 250, 160,
- 9, 34, 220, 86, 214, 41, 9, 34, 214, 42, 116, 9, 34, 214, 42, 109, 9, 34,
- 249, 220, 9, 34, 250, 249, 242, 142, 9, 34, 184, 116, 9, 34, 184, 109, 9,
- 34, 250, 249, 232, 190, 9, 34, 250, 249, 243, 64, 9, 34, 230, 189, 116,
- 9, 34, 230, 189, 109, 9, 34, 224, 50, 9, 34, 251, 130, 9, 34, 250, 249,
- 218, 7, 233, 76, 9, 34, 250, 249, 233, 77, 9, 34, 250, 249, 213, 224, 9,
- 34, 250, 249, 244, 15, 9, 34, 245, 174, 116, 9, 34, 245, 174, 109, 9, 34,
- 245, 174, 166, 9, 34, 250, 249, 245, 173, 9, 34, 241, 219, 9, 34, 250,
- 249, 240, 232, 9, 34, 251, 119, 9, 34, 242, 198, 9, 34, 250, 249, 244,
- 59, 9, 34, 250, 249, 251, 160, 9, 34, 250, 249, 222, 172, 9, 34, 220, 86,
- 213, 243, 9, 34, 220, 86, 213, 32, 9, 34, 250, 249, 243, 214, 9, 34, 235,
- 141, 245, 8, 9, 34, 250, 249, 245, 8, 9, 34, 235, 141, 216, 228, 9, 34,
- 250, 249, 216, 228, 9, 34, 235, 141, 246, 50, 9, 34, 250, 249, 246, 50,
- 9, 34, 216, 55, 9, 34, 235, 141, 216, 55, 9, 34, 250, 249, 216, 55, 57,
- 34, 116, 57, 34, 232, 242, 57, 34, 247, 74, 57, 34, 220, 23, 57, 34, 222,
- 94, 57, 34, 101, 57, 34, 109, 57, 34, 233, 9, 57, 34, 231, 248, 57, 34,
- 233, 57, 57, 34, 245, 88, 57, 34, 195, 57, 34, 119, 251, 89, 57, 34, 249,
- 86, 57, 34, 240, 104, 57, 34, 218, 40, 57, 34, 227, 40, 251, 89, 57, 34,
- 234, 41, 57, 34, 225, 104, 57, 34, 213, 190, 57, 34, 219, 175, 57, 34,
- 46, 227, 40, 251, 89, 57, 34, 241, 161, 245, 103, 57, 34, 217, 200, 57,
- 34, 247, 122, 57, 34, 222, 98, 57, 34, 249, 203, 57, 34, 225, 65, 57, 34,
- 254, 120, 57, 34, 230, 180, 57, 34, 245, 103, 57, 34, 245, 179, 57, 34,
- 222, 118, 57, 34, 242, 150, 57, 34, 242, 151, 220, 9, 57, 34, 245, 7, 57,
- 34, 251, 171, 57, 34, 213, 208, 57, 34, 250, 38, 57, 34, 223, 98, 57, 34,
- 235, 247, 57, 34, 220, 7, 57, 34, 233, 120, 57, 34, 249, 95, 57, 34, 219,
- 169, 57, 34, 230, 185, 57, 34, 223, 121, 57, 34, 213, 193, 57, 34, 227,
- 56, 57, 34, 216, 61, 57, 34, 246, 35, 57, 34, 220, 175, 217, 98, 57, 34,
- 246, 72, 249, 203, 57, 34, 184, 219, 48, 57, 34, 117, 241, 249, 57, 34,
- 220, 180, 57, 34, 251, 95, 57, 34, 219, 249, 57, 34, 251, 65, 57, 34,
- 219, 78, 57, 34, 241, 211, 57, 34, 242, 10, 57, 34, 247, 77, 57, 34, 241,
- 254, 57, 34, 251, 81, 57, 34, 224, 39, 57, 34, 222, 106, 57, 34, 247,
- 151, 57, 34, 253, 84, 57, 34, 219, 166, 57, 34, 228, 162, 57, 34, 218,
- 238, 57, 34, 222, 129, 57, 34, 230, 198, 57, 34, 216, 193, 57, 34, 233,
- 145, 57, 34, 219, 69, 57, 34, 248, 39, 57, 34, 214, 5, 57, 34, 247, 100,
- 228, 162, 57, 34, 249, 154, 57, 34, 243, 194, 57, 34, 249, 214, 57, 34,
- 219, 82, 57, 34, 214, 24, 57, 34, 244, 65, 57, 34, 249, 211, 57, 34, 244,
- 129, 57, 34, 51, 213, 166, 57, 34, 151, 216, 194, 216, 146, 57, 34, 220,
- 17, 57, 34, 244, 139, 57, 34, 249, 84, 57, 34, 247, 90, 57, 34, 225, 62,
- 57, 34, 235, 135, 57, 34, 231, 131, 57, 34, 217, 41, 57, 34, 218, 190,
- 57, 34, 233, 3, 57, 34, 215, 103, 57, 34, 244, 89, 57, 34, 251, 122, 65,
- 249, 187, 57, 34, 220, 114, 57, 34, 246, 72, 217, 195, 57, 34, 213, 238,
- 57, 34, 220, 31, 57, 34, 247, 139, 57, 34, 244, 239, 57, 34, 219, 193,
- 57, 34, 68, 57, 34, 219, 71, 57, 34, 219, 180, 57, 34, 216, 212, 57, 34,
- 242, 123, 57, 34, 250, 151, 57, 34, 219, 99, 57, 34, 252, 73, 57, 34,
- 223, 184, 57, 34, 220, 93, 57, 34, 235, 130, 57, 34, 229, 171, 57, 34,
- 220, 237, 57, 34, 244, 118, 57, 34, 227, 75, 57, 34, 254, 27, 57, 34,
- 225, 162, 57, 34, 245, 183, 57, 34, 251, 60, 57, 34, 231, 151, 57, 34,
- 230, 252, 57, 34, 221, 76, 57, 34, 253, 167, 57, 34, 230, 193, 57, 34,
- 216, 232, 57, 34, 227, 31, 57, 34, 251, 124, 57, 34, 219, 67, 57, 34,
- 249, 163, 57, 34, 242, 116, 57, 34, 217, 60, 57, 34, 235, 214, 57, 34,
- 251, 134, 57, 34, 214, 42, 245, 103, 57, 34, 249, 186, 57, 34, 213, 249,
- 57, 34, 222, 89, 57, 34, 240, 235, 57, 34, 219, 190, 57, 34, 214, 254,
- 57, 34, 251, 248, 57, 34, 225, 205, 57, 34, 252, 92, 57, 34, 220, 232,
- 57, 34, 224, 3, 57, 34, 223, 37, 57, 34, 244, 1, 57, 34, 251, 123, 57,
- 34, 250, 160, 57, 34, 251, 149, 57, 34, 230, 195, 57, 34, 214, 41, 57,
- 34, 249, 220, 57, 34, 213, 221, 57, 34, 247, 132, 57, 34, 214, 142, 57,
- 34, 242, 142, 57, 34, 232, 190, 57, 34, 243, 64, 57, 34, 230, 188, 57,
- 34, 220, 22, 57, 34, 220, 175, 218, 26, 251, 160, 57, 34, 224, 50, 57,
- 34, 251, 130, 57, 34, 213, 185, 57, 34, 244, 158, 57, 34, 233, 76, 57,
- 34, 218, 7, 233, 76, 57, 34, 233, 72, 57, 34, 219, 217, 57, 34, 233, 77,
- 57, 34, 213, 224, 57, 34, 244, 15, 57, 34, 245, 173, 57, 34, 241, 219,
- 57, 34, 243, 226, 57, 34, 240, 232, 57, 34, 251, 119, 57, 34, 218, 14,
- 57, 34, 242, 16, 57, 34, 244, 82, 57, 34, 222, 197, 213, 221, 57, 34,
- 250, 153, 57, 34, 242, 198, 57, 34, 244, 59, 57, 34, 251, 160, 57, 34,
- 222, 172, 57, 34, 248, 25, 57, 34, 213, 243, 57, 34, 241, 194, 57, 34,
- 213, 32, 57, 34, 231, 5, 57, 34, 251, 144, 57, 34, 245, 113, 57, 34, 243,
- 214, 57, 34, 216, 167, 57, 34, 246, 37, 57, 34, 224, 33, 57, 34, 228,
- 164, 57, 34, 245, 8, 57, 34, 216, 228, 57, 34, 246, 50, 57, 34, 216, 55,
- 57, 34, 244, 17, 105, 247, 244, 137, 42, 211, 211, 223, 148, 105, 247,
- 244, 137, 78, 211, 211, 55, 105, 247, 244, 137, 42, 211, 211, 231, 37,
- 24, 223, 148, 105, 247, 244, 137, 78, 211, 211, 231, 37, 24, 55, 105,
- 247, 244, 137, 243, 200, 218, 210, 105, 247, 244, 137, 218, 211, 243,
- 213, 49, 105, 247, 244, 137, 218, 211, 243, 213, 55, 105, 247, 244, 137,
- 218, 211, 243, 213, 233, 70, 105, 247, 244, 137, 218, 211, 243, 213, 215,
- 131, 233, 70, 105, 247, 244, 137, 218, 211, 243, 213, 215, 131, 223, 148,
- 105, 247, 244, 137, 218, 211, 243, 213, 232, 163, 233, 70, 105, 247, 244,
- 137, 226, 246, 105, 219, 206, 105, 249, 157, 105, 243, 200, 219, 69, 247,
- 129, 77, 235, 131, 235, 233, 219, 98, 87, 105, 235, 156, 77, 105, 249,
- 189, 77, 105, 50, 212, 79, 42, 254, 19, 125, 46, 254, 19, 125, 42, 51,
- 254, 19, 125, 46, 51, 254, 19, 125, 42, 249, 100, 125, 46, 249, 100, 125,
- 42, 67, 249, 100, 125, 46, 67, 249, 100, 125, 42, 83, 233, 44, 125, 46,
- 83, 233, 44, 125, 225, 117, 77, 243, 8, 77, 42, 216, 219, 220, 233, 125,
- 46, 216, 219, 220, 233, 125, 42, 67, 233, 44, 125, 46, 67, 233, 44, 125,
- 42, 67, 216, 219, 220, 233, 125, 46, 67, 216, 219, 220, 233, 125, 42, 67,
- 41, 125, 46, 67, 41, 125, 214, 20, 248, 101, 223, 202, 51, 225, 72, 224,
- 143, 77, 51, 225, 72, 224, 143, 77, 115, 51, 225, 72, 224, 143, 77, 225,
- 117, 152, 244, 158, 241, 247, 228, 54, 116, 241, 247, 228, 54, 109, 241,
- 247, 228, 54, 166, 241, 247, 228, 54, 163, 241, 247, 228, 54, 180, 241,
- 247, 228, 54, 189, 241, 247, 228, 54, 198, 241, 247, 228, 54, 195, 241,
- 247, 228, 54, 200, 105, 233, 29, 160, 77, 105, 223, 125, 160, 77, 105,
- 247, 251, 160, 77, 105, 245, 87, 160, 77, 23, 220, 81, 62, 160, 77, 23,
- 51, 62, 160, 77, 214, 16, 248, 101, 71, 234, 238, 223, 228, 77, 71, 234,
- 238, 223, 228, 2, 214, 116, 219, 218, 77, 71, 234, 238, 223, 228, 152,
- 215, 131, 242, 9, 71, 234, 238, 223, 228, 2, 214, 116, 219, 218, 152,
- 215, 131, 242, 9, 71, 234, 238, 223, 228, 152, 232, 163, 242, 9, 36, 225,
- 117, 77, 105, 201, 232, 243, 244, 115, 221, 58, 87, 241, 247, 228, 54,
- 217, 200, 241, 247, 228, 54, 216, 38, 241, 247, 228, 54, 217, 115, 71,
- 105, 235, 156, 77, 231, 203, 77, 226, 127, 254, 49, 77, 105, 43, 235,
- 235, 105, 151, 244, 75, 219, 206, 142, 1, 3, 61, 142, 1, 61, 142, 1, 3,
- 72, 142, 1, 72, 142, 1, 3, 69, 142, 1, 69, 142, 1, 3, 74, 142, 1, 74,
- 142, 1, 3, 75, 142, 1, 75, 142, 1, 181, 142, 1, 243, 110, 142, 1, 234,
- 101, 142, 1, 242, 190, 142, 1, 233, 238, 142, 1, 242, 92, 142, 1, 234,
- 188, 142, 1, 243, 38, 142, 1, 234, 37, 142, 1, 242, 150, 142, 1, 222,
- 202, 142, 1, 212, 109, 142, 1, 220, 117, 142, 1, 212, 37, 142, 1, 219,
- 27, 142, 1, 212, 8, 142, 1, 222, 100, 142, 1, 212, 87, 142, 1, 219, 242,
- 142, 1, 212, 16, 142, 1, 218, 52, 142, 1, 248, 164, 142, 1, 217, 71, 142,
- 1, 247, 211, 142, 1, 3, 216, 82, 142, 1, 216, 82, 142, 1, 246, 33, 142,
- 1, 217, 229, 142, 1, 248, 41, 142, 1, 108, 142, 1, 247, 99, 142, 1, 205,
- 142, 1, 229, 64, 142, 1, 228, 92, 142, 1, 229, 187, 142, 1, 228, 185,
- 142, 1, 159, 142, 1, 252, 107, 142, 1, 193, 142, 1, 241, 165, 142, 1,
- 251, 184, 142, 1, 225, 240, 142, 1, 240, 212, 142, 1, 251, 54, 142, 1,
- 225, 35, 142, 1, 241, 222, 142, 1, 251, 251, 142, 1, 226, 96, 142, 1,
- 241, 54, 142, 1, 251, 128, 142, 1, 225, 150, 142, 1, 188, 142, 1, 231,
- 42, 142, 1, 230, 172, 142, 1, 231, 156, 142, 1, 230, 231, 142, 1, 3, 186,
- 142, 1, 186, 142, 1, 3, 212, 203, 142, 1, 212, 203, 142, 1, 3, 212, 235,
- 142, 1, 212, 235, 142, 1, 203, 142, 1, 223, 188, 142, 1, 223, 51, 142, 1,
- 224, 21, 142, 1, 223, 112, 142, 1, 3, 214, 49, 142, 1, 214, 49, 142, 1,
- 213, 235, 142, 1, 214, 6, 142, 1, 213, 214, 142, 1, 204, 142, 1, 214, 99,
- 142, 1, 3, 181, 142, 1, 3, 234, 188, 37, 234, 206, 214, 116, 219, 218,
- 77, 37, 234, 206, 221, 75, 219, 218, 77, 234, 206, 214, 116, 219, 218,
- 77, 234, 206, 221, 75, 219, 218, 77, 142, 235, 156, 77, 142, 214, 116,
- 235, 156, 77, 142, 247, 173, 212, 216, 234, 206, 51, 240, 160, 56, 1, 3,
- 61, 56, 1, 61, 56, 1, 3, 72, 56, 1, 72, 56, 1, 3, 69, 56, 1, 69, 56, 1,
- 3, 74, 56, 1, 74, 56, 1, 3, 75, 56, 1, 75, 56, 1, 181, 56, 1, 243, 110,
- 56, 1, 234, 101, 56, 1, 242, 190, 56, 1, 233, 238, 56, 1, 242, 92, 56, 1,
- 234, 188, 56, 1, 243, 38, 56, 1, 234, 37, 56, 1, 242, 150, 56, 1, 222,
- 202, 56, 1, 212, 109, 56, 1, 220, 117, 56, 1, 212, 37, 56, 1, 219, 27,
- 56, 1, 212, 8, 56, 1, 222, 100, 56, 1, 212, 87, 56, 1, 219, 242, 56, 1,
- 212, 16, 56, 1, 218, 52, 56, 1, 248, 164, 56, 1, 217, 71, 56, 1, 247,
- 211, 56, 1, 3, 216, 82, 56, 1, 216, 82, 56, 1, 246, 33, 56, 1, 217, 229,
- 56, 1, 248, 41, 56, 1, 108, 56, 1, 247, 99, 56, 1, 205, 56, 1, 229, 64,
- 56, 1, 228, 92, 56, 1, 229, 187, 56, 1, 228, 185, 56, 1, 159, 56, 1, 252,
- 107, 56, 1, 193, 56, 1, 241, 165, 56, 1, 251, 184, 56, 1, 225, 240, 56,
- 1, 240, 212, 56, 1, 251, 54, 56, 1, 225, 35, 56, 1, 241, 222, 56, 1, 251,
- 251, 56, 1, 226, 96, 56, 1, 241, 54, 56, 1, 251, 128, 56, 1, 225, 150,
- 56, 1, 188, 56, 1, 231, 42, 56, 1, 230, 172, 56, 1, 231, 156, 56, 1, 230,
- 231, 56, 1, 3, 186, 56, 1, 186, 56, 1, 3, 212, 203, 56, 1, 212, 203, 56,
- 1, 3, 212, 235, 56, 1, 212, 235, 56, 1, 203, 56, 1, 223, 188, 56, 1, 223,
- 51, 56, 1, 224, 21, 56, 1, 223, 112, 56, 1, 3, 214, 49, 56, 1, 214, 49,
- 56, 1, 213, 235, 56, 1, 214, 6, 56, 1, 213, 214, 56, 1, 204, 56, 1, 214,
- 99, 56, 1, 3, 181, 56, 1, 3, 234, 188, 56, 1, 215, 1, 56, 1, 214, 154,
- 56, 1, 214, 232, 56, 1, 214, 119, 56, 231, 37, 247, 74, 234, 206, 225,
- 57, 219, 218, 77, 56, 235, 156, 77, 56, 214, 116, 235, 156, 77, 56, 247,
- 173, 234, 8, 202, 1, 253, 74, 202, 1, 226, 229, 202, 1, 183, 202, 1, 244,
- 230, 202, 1, 249, 3, 202, 1, 218, 99, 202, 1, 204, 202, 1, 150, 202, 1,
- 243, 177, 202, 1, 235, 27, 202, 1, 242, 41, 202, 1, 235, 142, 202, 1,
- 224, 240, 202, 1, 213, 166, 202, 1, 212, 76, 202, 1, 250, 93, 202, 1,
- 221, 26, 202, 1, 149, 202, 1, 212, 152, 202, 1, 250, 252, 202, 1, 197,
- 202, 1, 61, 202, 1, 75, 202, 1, 74, 202, 1, 245, 154, 202, 1, 254, 108,
- 202, 1, 245, 152, 202, 1, 253, 108, 202, 1, 227, 2, 202, 1, 254, 32, 202,
- 1, 245, 108, 202, 1, 254, 24, 202, 1, 245, 96, 202, 1, 245, 55, 202, 1,
- 72, 202, 1, 69, 202, 1, 235, 154, 202, 1, 215, 79, 202, 1, 229, 161, 202,
- 1, 242, 154, 202, 1, 236, 29, 23, 1, 234, 67, 23, 1, 219, 150, 23, 1,
- 234, 60, 23, 1, 229, 57, 23, 1, 229, 55, 23, 1, 229, 54, 23, 1, 217, 55,
- 23, 1, 219, 139, 23, 1, 223, 179, 23, 1, 223, 174, 23, 1, 223, 171, 23,
- 1, 223, 164, 23, 1, 223, 159, 23, 1, 223, 154, 23, 1, 223, 165, 23, 1,
- 223, 177, 23, 1, 231, 30, 23, 1, 225, 227, 23, 1, 219, 147, 23, 1, 225,
- 216, 23, 1, 220, 76, 23, 1, 219, 144, 23, 1, 236, 51, 23, 1, 249, 239,
- 23, 1, 219, 154, 23, 1, 250, 43, 23, 1, 234, 116, 23, 1, 217, 126, 23, 1,
- 226, 7, 23, 1, 241, 158, 23, 1, 61, 23, 1, 254, 148, 23, 1, 186, 23, 1,
- 213, 80, 23, 1, 245, 76, 23, 1, 74, 23, 1, 213, 27, 23, 1, 213, 38, 23,
- 1, 75, 23, 1, 214, 49, 23, 1, 214, 46, 23, 1, 227, 99, 23, 1, 212, 235,
- 23, 1, 69, 23, 1, 213, 252, 23, 1, 214, 6, 23, 1, 213, 235, 23, 1, 212,
- 203, 23, 1, 245, 22, 23, 1, 212, 255, 23, 1, 72, 23, 244, 72, 23, 1, 219,
- 148, 23, 1, 229, 47, 23, 1, 229, 49, 23, 1, 229, 52, 23, 1, 223, 172, 23,
- 1, 223, 153, 23, 1, 223, 161, 23, 1, 223, 166, 23, 1, 223, 151, 23, 1,
- 231, 23, 23, 1, 231, 20, 23, 1, 231, 24, 23, 1, 234, 226, 23, 1, 225,
- 222, 23, 1, 225, 208, 23, 1, 225, 214, 23, 1, 225, 211, 23, 1, 225, 225,
- 23, 1, 225, 209, 23, 1, 234, 224, 23, 1, 234, 222, 23, 1, 220, 69, 23, 1,
- 220, 67, 23, 1, 220, 59, 23, 1, 220, 64, 23, 1, 220, 74, 23, 1, 226, 160,
- 23, 1, 219, 151, 23, 1, 213, 17, 23, 1, 213, 13, 23, 1, 213, 14, 23, 1,
- 234, 225, 23, 1, 219, 152, 23, 1, 213, 23, 23, 1, 212, 229, 23, 1, 212,
- 228, 23, 1, 212, 231, 23, 1, 212, 194, 23, 1, 212, 195, 23, 1, 212, 198,
- 23, 1, 253, 204, 23, 1, 253, 198, 105, 254, 10, 232, 232, 77, 105, 254,
- 10, 223, 203, 77, 105, 254, 10, 122, 77, 105, 254, 10, 117, 77, 105, 254,
- 10, 133, 77, 105, 254, 10, 243, 237, 77, 105, 254, 10, 216, 227, 77, 105,
- 254, 10, 231, 37, 77, 105, 254, 10, 251, 101, 77, 105, 254, 10, 244, 61,
- 77, 105, 254, 10, 222, 95, 77, 105, 254, 10, 217, 122, 77, 105, 254, 10,
- 243, 230, 77, 105, 254, 10, 241, 208, 77, 105, 254, 10, 245, 180, 77,
- 105, 254, 10, 231, 249, 77, 202, 1, 251, 54, 202, 1, 212, 37, 202, 1,
- 235, 110, 202, 1, 242, 92, 202, 1, 245, 165, 202, 1, 245, 93, 202, 1,
- 227, 49, 202, 1, 227, 53, 202, 1, 235, 177, 202, 1, 254, 12, 202, 1, 235,
- 221, 202, 1, 215, 139, 202, 1, 236, 11, 202, 1, 229, 142, 202, 1, 254,
- 102, 202, 1, 253, 103, 202, 1, 254, 45, 202, 1, 227, 70, 202, 1, 227, 55,
- 202, 1, 235, 218, 202, 40, 1, 226, 229, 202, 40, 1, 218, 99, 202, 40, 1,
- 235, 27, 202, 40, 1, 242, 41, 202, 1, 242, 226, 202, 1, 233, 26, 202, 1,
- 211, 249, 9, 219, 45, 218, 99, 9, 219, 45, 213, 245, 9, 219, 45, 213,
- 146, 9, 219, 45, 251, 8, 9, 219, 45, 218, 199, 9, 219, 45, 240, 150, 9,
- 219, 45, 240, 154, 9, 219, 45, 240, 218, 9, 219, 45, 240, 151, 9, 219,
- 45, 218, 102, 9, 219, 45, 240, 153, 9, 219, 45, 240, 149, 9, 219, 45,
- 240, 216, 9, 219, 45, 240, 152, 9, 219, 45, 240, 148, 9, 219, 45, 204, 9,
- 219, 45, 242, 41, 9, 219, 45, 197, 9, 219, 45, 226, 229, 9, 219, 45, 219,
- 208, 9, 219, 45, 249, 3, 9, 219, 45, 240, 155, 9, 219, 45, 241, 175, 9,
- 219, 45, 218, 111, 9, 219, 45, 218, 178, 9, 219, 45, 219, 107, 9, 219,
- 45, 221, 31, 9, 219, 45, 226, 98, 9, 219, 45, 224, 242, 9, 219, 45, 216,
- 253, 9, 219, 45, 218, 101, 9, 219, 45, 218, 189, 9, 219, 45, 240, 162, 9,
- 219, 45, 240, 147, 9, 219, 45, 226, 25, 9, 219, 45, 224, 240, 56, 1, 3,
- 233, 238, 56, 1, 3, 220, 117, 56, 1, 3, 219, 27, 56, 1, 3, 108, 56, 1, 3,
- 228, 92, 56, 1, 3, 159, 56, 1, 3, 241, 165, 56, 1, 3, 240, 212, 56, 1, 3,
- 241, 222, 56, 1, 3, 241, 54, 56, 1, 3, 230, 172, 56, 1, 3, 203, 56, 1, 3,
- 223, 188, 56, 1, 3, 223, 51, 56, 1, 3, 224, 21, 56, 1, 3, 223, 112, 86,
- 23, 234, 67, 86, 23, 229, 57, 86, 23, 217, 55, 86, 23, 223, 179, 86, 23,
- 231, 30, 86, 23, 225, 227, 86, 23, 220, 76, 86, 23, 236, 51, 86, 23, 249,
- 239, 86, 23, 250, 43, 86, 23, 234, 116, 86, 23, 217, 126, 86, 23, 226, 7,
- 86, 23, 241, 158, 86, 23, 234, 68, 61, 86, 23, 229, 58, 61, 86, 23, 217,
- 56, 61, 86, 23, 223, 180, 61, 86, 23, 231, 31, 61, 86, 23, 225, 228, 61,
- 86, 23, 220, 77, 61, 86, 23, 236, 52, 61, 86, 23, 249, 240, 61, 86, 23,
- 250, 44, 61, 86, 23, 234, 117, 61, 86, 23, 217, 127, 61, 86, 23, 226, 8,
- 61, 86, 23, 241, 159, 61, 86, 23, 249, 240, 69, 86, 234, 12, 137, 227,
- 83, 86, 234, 12, 137, 157, 240, 212, 86, 143, 116, 86, 143, 109, 86, 143,
- 166, 86, 143, 163, 86, 143, 180, 86, 143, 189, 86, 143, 198, 86, 143,
- 195, 86, 143, 200, 86, 143, 217, 200, 86, 143, 230, 198, 86, 143, 244,
- 65, 86, 143, 214, 24, 86, 143, 213, 201, 86, 143, 231, 106, 86, 143, 245,
- 179, 86, 143, 218, 238, 86, 143, 219, 72, 86, 143, 241, 228, 86, 143,
- 219, 238, 86, 143, 230, 24, 86, 143, 219, 192, 86, 143, 244, 71, 86, 143,
- 249, 140, 86, 143, 233, 148, 86, 143, 223, 223, 86, 143, 250, 203, 86,
- 143, 219, 30, 86, 143, 218, 220, 86, 143, 245, 86, 86, 143, 223, 215, 86,
- 143, 254, 59, 86, 143, 244, 97, 86, 143, 223, 213, 86, 143, 221, 76, 86,
- 143, 224, 20, 36, 143, 224, 157, 36, 143, 234, 89, 36, 143, 222, 116, 36,
- 143, 234, 8, 36, 50, 217, 201, 227, 63, 83, 219, 166, 36, 50, 216, 39,
- 227, 63, 83, 219, 166, 36, 50, 217, 116, 227, 63, 83, 219, 166, 36, 50,
- 243, 241, 227, 63, 83, 219, 166, 36, 50, 244, 84, 227, 63, 83, 219, 166,
- 36, 50, 220, 40, 227, 63, 83, 219, 166, 36, 50, 221, 38, 227, 63, 83,
- 219, 166, 36, 50, 245, 142, 227, 63, 83, 219, 166, 226, 123, 52, 36, 50,
- 216, 39, 116, 36, 50, 216, 39, 109, 36, 50, 216, 39, 166, 36, 50, 216,
- 39, 163, 36, 50, 216, 39, 180, 36, 50, 216, 39, 189, 36, 50, 216, 39,
- 198, 36, 50, 216, 39, 195, 36, 50, 216, 39, 200, 36, 50, 217, 115, 36,
- 50, 217, 116, 116, 36, 50, 217, 116, 109, 36, 50, 217, 116, 166, 36, 50,
- 217, 116, 163, 36, 50, 217, 116, 180, 36, 23, 234, 67, 36, 23, 229, 57,
- 36, 23, 217, 55, 36, 23, 223, 179, 36, 23, 231, 30, 36, 23, 225, 227, 36,
- 23, 220, 76, 36, 23, 236, 51, 36, 23, 249, 239, 36, 23, 250, 43, 36, 23,
- 234, 116, 36, 23, 217, 126, 36, 23, 226, 7, 36, 23, 241, 158, 36, 23,
- 234, 68, 61, 36, 23, 229, 58, 61, 36, 23, 217, 56, 61, 36, 23, 223, 180,
- 61, 36, 23, 231, 31, 61, 36, 23, 225, 228, 61, 36, 23, 220, 77, 61, 36,
- 23, 236, 52, 61, 36, 23, 249, 240, 61, 36, 23, 250, 44, 61, 36, 23, 234,
- 117, 61, 36, 23, 217, 127, 61, 36, 23, 226, 8, 61, 36, 23, 241, 159, 61,
- 36, 234, 12, 137, 250, 84, 36, 234, 12, 137, 235, 50, 36, 23, 236, 52,
- 69, 234, 12, 219, 98, 87, 36, 143, 116, 36, 143, 109, 36, 143, 166, 36,
- 143, 163, 36, 143, 180, 36, 143, 189, 36, 143, 198, 36, 143, 195, 36,
- 143, 200, 36, 143, 217, 200, 36, 143, 230, 198, 36, 143, 244, 65, 36,
- 143, 214, 24, 36, 143, 213, 201, 36, 143, 231, 106, 36, 143, 245, 179,
- 36, 143, 218, 238, 36, 143, 219, 72, 36, 143, 241, 228, 36, 143, 219,
- 238, 36, 143, 230, 24, 36, 143, 219, 192, 36, 143, 244, 71, 36, 143, 249,
- 140, 36, 143, 233, 148, 36, 143, 222, 93, 36, 143, 231, 252, 36, 143,
- 244, 106, 36, 143, 218, 250, 36, 143, 245, 1, 36, 143, 225, 68, 36, 143,
- 253, 112, 36, 143, 235, 157, 36, 143, 223, 213, 36, 143, 249, 103, 36,
- 143, 249, 94, 36, 143, 241, 151, 36, 143, 250, 108, 36, 143, 232, 165,
- 36, 143, 233, 70, 36, 143, 223, 148, 36, 143, 231, 148, 36, 143, 223,
- 237, 36, 143, 219, 30, 36, 143, 218, 220, 36, 143, 245, 86, 36, 143, 223,
- 215, 36, 143, 254, 59, 36, 143, 229, 43, 36, 50, 217, 116, 189, 36, 50,
- 217, 116, 198, 36, 50, 217, 116, 195, 36, 50, 217, 116, 200, 36, 50, 243,
- 240, 36, 50, 243, 241, 116, 36, 50, 243, 241, 109, 36, 50, 243, 241, 166,
- 36, 50, 243, 241, 163, 36, 50, 243, 241, 180, 36, 50, 243, 241, 189, 36,
- 50, 243, 241, 198, 36, 50, 243, 241, 195, 36, 50, 243, 241, 200, 36, 50,
- 244, 83, 105, 201, 16, 31, 235, 133, 105, 201, 16, 31, 244, 117, 105,
- 201, 16, 31, 231, 223, 105, 201, 16, 31, 253, 217, 105, 201, 16, 31, 231,
- 196, 105, 201, 16, 31, 235, 48, 105, 201, 16, 31, 235, 49, 105, 201, 16,
- 31, 253, 104, 105, 201, 16, 31, 221, 56, 105, 201, 16, 31, 227, 104, 105,
- 201, 16, 31, 228, 151, 105, 201, 16, 31, 248, 36, 41, 241, 175, 41, 245,
- 51, 41, 245, 10, 232, 248, 233, 12, 52, 36, 56, 61, 36, 56, 72, 36, 56,
- 69, 36, 56, 74, 36, 56, 75, 36, 56, 181, 36, 56, 234, 101, 36, 56, 233,
- 238, 36, 56, 234, 188, 36, 56, 234, 37, 36, 56, 222, 202, 36, 56, 220,
- 117, 36, 56, 219, 27, 36, 56, 222, 100, 36, 56, 219, 242, 36, 56, 218,
- 52, 36, 56, 217, 71, 36, 56, 216, 82, 36, 56, 217, 229, 36, 56, 108, 36,
- 56, 205, 36, 56, 229, 64, 36, 56, 228, 92, 36, 56, 229, 187, 36, 56, 228,
- 185, 36, 56, 159, 36, 56, 241, 165, 36, 56, 240, 212, 36, 56, 241, 222,
- 36, 56, 241, 54, 36, 56, 188, 36, 56, 231, 42, 36, 56, 230, 172, 36, 56,
- 231, 156, 36, 56, 230, 231, 36, 56, 186, 36, 56, 212, 203, 36, 56, 212,
- 235, 36, 56, 203, 36, 56, 223, 188, 36, 56, 223, 51, 36, 56, 224, 21, 36,
- 56, 223, 112, 36, 56, 214, 49, 36, 56, 213, 235, 36, 56, 214, 6, 36, 56,
- 213, 214, 41, 253, 238, 41, 253, 154, 41, 254, 6, 41, 254, 190, 41, 235,
- 223, 41, 235, 193, 41, 215, 137, 41, 245, 31, 41, 245, 163, 41, 227, 52,
- 41, 227, 46, 41, 234, 249, 41, 234, 219, 41, 234, 216, 41, 243, 68, 41,
- 243, 77, 41, 242, 180, 41, 242, 176, 41, 233, 172, 41, 242, 169, 41, 234,
- 81, 41, 234, 80, 41, 234, 79, 41, 234, 78, 41, 242, 67, 41, 242, 66, 41,
- 233, 214, 41, 233, 216, 41, 234, 184, 41, 234, 10, 41, 234, 17, 41, 222,
- 187, 41, 222, 153, 41, 220, 57, 41, 221, 61, 41, 221, 60, 41, 248, 161,
- 41, 247, 243, 41, 247, 75, 41, 216, 243, 41, 230, 20, 41, 228, 152, 41,
- 242, 14, 41, 226, 208, 41, 226, 207, 41, 252, 105, 41, 225, 237, 41, 225,
- 201, 41, 225, 202, 41, 251, 157, 41, 240, 211, 41, 240, 207, 41, 251, 20,
- 41, 240, 194, 41, 241, 199, 41, 226, 35, 41, 226, 69, 41, 241, 183, 41,
- 226, 66, 41, 226, 82, 41, 251, 237, 41, 225, 140, 41, 251, 106, 41, 241,
- 42, 41, 225, 130, 41, 241, 35, 41, 241, 37, 41, 232, 7, 41, 232, 3, 41,
- 232, 11, 41, 231, 213, 41, 231, 238, 41, 231, 10, 41, 230, 245, 41, 230,
- 244, 41, 231, 138, 41, 231, 135, 41, 231, 139, 41, 213, 90, 41, 213, 88,
- 41, 212, 192, 41, 223, 123, 41, 223, 127, 41, 223, 28, 41, 223, 23, 41,
- 223, 235, 41, 223, 232, 41, 214, 22, 105, 201, 16, 31, 240, 226, 212, 79,
- 105, 201, 16, 31, 240, 226, 116, 105, 201, 16, 31, 240, 226, 109, 105,
- 201, 16, 31, 240, 226, 166, 105, 201, 16, 31, 240, 226, 163, 105, 201,
- 16, 31, 240, 226, 180, 105, 201, 16, 31, 240, 226, 189, 105, 201, 16, 31,
- 240, 226, 198, 105, 201, 16, 31, 240, 226, 195, 105, 201, 16, 31, 240,
- 226, 200, 105, 201, 16, 31, 240, 226, 217, 200, 105, 201, 16, 31, 240,
- 226, 245, 124, 105, 201, 16, 31, 240, 226, 216, 41, 105, 201, 16, 31,
- 240, 226, 217, 117, 105, 201, 16, 31, 240, 226, 243, 231, 105, 201, 16,
- 31, 240, 226, 244, 87, 105, 201, 16, 31, 240, 226, 220, 47, 105, 201, 16,
- 31, 240, 226, 221, 40, 105, 201, 16, 31, 240, 226, 245, 147, 105, 201,
- 16, 31, 240, 226, 229, 28, 105, 201, 16, 31, 240, 226, 216, 38, 105, 201,
- 16, 31, 240, 226, 216, 32, 105, 201, 16, 31, 240, 226, 216, 28, 105, 201,
- 16, 31, 240, 226, 216, 29, 105, 201, 16, 31, 240, 226, 216, 34, 41, 240,
- 217, 41, 248, 164, 41, 253, 108, 41, 134, 41, 226, 249, 41, 226, 99, 41,
- 247, 101, 41, 247, 102, 219, 165, 41, 247, 102, 249, 49, 41, 235, 154,
- 41, 245, 54, 230, 25, 241, 200, 41, 245, 54, 230, 25, 218, 120, 41, 245,
- 54, 230, 25, 218, 24, 41, 245, 54, 230, 25, 231, 134, 41, 249, 96, 41,
- 226, 214, 254, 34, 41, 205, 41, 230, 173, 61, 41, 188, 41, 181, 41, 234,
- 191, 41, 231, 192, 41, 243, 56, 41, 250, 206, 41, 234, 190, 41, 226, 26,
- 41, 229, 163, 41, 230, 173, 244, 230, 41, 230, 173, 243, 177, 41, 231,
- 82, 41, 234, 140, 41, 240, 155, 41, 234, 103, 41, 231, 44, 41, 242, 192,
- 41, 217, 73, 41, 230, 173, 150, 41, 230, 238, 41, 247, 109, 41, 234, 49,
- 41, 244, 14, 41, 228, 200, 41, 230, 173, 183, 41, 230, 235, 41, 249, 176,
- 41, 234, 43, 41, 230, 236, 219, 165, 41, 249, 177, 219, 165, 41, 232,
- 110, 219, 165, 41, 234, 44, 219, 165, 41, 230, 236, 249, 49, 41, 249,
- 177, 249, 49, 41, 232, 110, 249, 49, 41, 234, 44, 249, 49, 41, 232, 110,
- 110, 197, 41, 232, 110, 110, 223, 4, 219, 165, 41, 193, 41, 234, 4, 41,
- 230, 175, 41, 242, 127, 41, 224, 66, 41, 224, 67, 110, 197, 41, 224, 67,
- 110, 223, 4, 219, 165, 41, 225, 47, 41, 228, 124, 41, 230, 173, 197, 41,
- 230, 174, 41, 225, 4, 41, 228, 33, 41, 230, 173, 215, 79, 41, 230, 120,
- 41, 233, 207, 41, 230, 121, 231, 138, 41, 225, 3, 41, 228, 32, 41, 230,
- 173, 214, 82, 41, 230, 115, 41, 233, 205, 41, 230, 116, 231, 138, 41,
- 235, 28, 227, 86, 41, 232, 110, 227, 86, 41, 254, 45, 41, 251, 87, 41,
- 250, 147, 41, 250, 125, 41, 250, 253, 110, 234, 140, 41, 249, 175, 41,
- 248, 88, 41, 242, 53, 41, 159, 41, 240, 218, 41, 235, 251, 41, 234, 56,
- 41, 234, 44, 250, 182, 41, 233, 240, 41, 232, 211, 41, 232, 210, 41, 232,
- 200, 41, 232, 122, 41, 231, 193, 220, 7, 41, 231, 9, 41, 230, 222, 41,
- 226, 24, 41, 225, 153, 41, 225, 99, 41, 225, 97, 41, 219, 159, 41, 218,
- 203, 41, 214, 8, 41, 215, 80, 110, 183, 41, 118, 110, 183, 105, 201, 16,
- 31, 248, 92, 116, 105, 201, 16, 31, 248, 92, 109, 105, 201, 16, 31, 248,
- 92, 166, 105, 201, 16, 31, 248, 92, 163, 105, 201, 16, 31, 248, 92, 180,
- 105, 201, 16, 31, 248, 92, 189, 105, 201, 16, 31, 248, 92, 198, 105, 201,
- 16, 31, 248, 92, 195, 105, 201, 16, 31, 248, 92, 200, 105, 201, 16, 31,
- 248, 92, 217, 200, 105, 201, 16, 31, 248, 92, 245, 124, 105, 201, 16, 31,
- 248, 92, 216, 41, 105, 201, 16, 31, 248, 92, 217, 117, 105, 201, 16, 31,
- 248, 92, 243, 231, 105, 201, 16, 31, 248, 92, 244, 87, 105, 201, 16, 31,
- 248, 92, 220, 47, 105, 201, 16, 31, 248, 92, 221, 40, 105, 201, 16, 31,
- 248, 92, 245, 147, 105, 201, 16, 31, 248, 92, 229, 28, 105, 201, 16, 31,
- 248, 92, 216, 38, 105, 201, 16, 31, 248, 92, 216, 32, 105, 201, 16, 31,
- 248, 92, 216, 28, 105, 201, 16, 31, 248, 92, 216, 29, 105, 201, 16, 31,
- 248, 92, 216, 34, 105, 201, 16, 31, 248, 92, 216, 35, 105, 201, 16, 31,
- 248, 92, 216, 30, 105, 201, 16, 31, 248, 92, 216, 31, 105, 201, 16, 31,
- 248, 92, 216, 37, 105, 201, 16, 31, 248, 92, 216, 33, 105, 201, 16, 31,
- 248, 92, 217, 115, 105, 201, 16, 31, 248, 92, 217, 114, 41, 243, 94, 241,
- 177, 31, 217, 149, 249, 80, 241, 207, 241, 177, 31, 217, 149, 224, 15,
- 245, 179, 241, 177, 31, 247, 183, 253, 123, 217, 149, 251, 232, 241, 177,
- 31, 212, 214, 244, 7, 241, 177, 31, 214, 43, 241, 177, 31, 249, 142, 241,
- 177, 31, 217, 149, 253, 174, 241, 177, 31, 241, 46, 216, 249, 241, 177,
- 31, 3, 218, 12, 241, 177, 31, 216, 195, 241, 177, 31, 226, 94, 241, 177,
- 31, 219, 97, 241, 177, 31, 244, 108, 241, 177, 31, 242, 109, 225, 120,
- 241, 177, 31, 230, 225, 241, 177, 31, 245, 85, 241, 177, 31, 244, 8, 241,
- 177, 31, 213, 194, 227, 63, 217, 149, 248, 37, 241, 177, 31, 253, 221,
- 241, 177, 31, 249, 124, 241, 177, 31, 251, 150, 217, 92, 241, 177, 31,
- 242, 125, 241, 177, 31, 219, 177, 253, 237, 241, 177, 31, 223, 205, 241,
- 177, 31, 235, 217, 241, 177, 31, 242, 109, 218, 12, 241, 177, 31, 230,
- 181, 249, 98, 241, 177, 31, 242, 109, 225, 77, 241, 177, 31, 217, 149,
- 254, 178, 214, 24, 241, 177, 31, 217, 149, 249, 201, 244, 65, 241, 177,
- 31, 235, 230, 241, 177, 31, 246, 12, 241, 177, 31, 223, 208, 241, 177,
- 31, 242, 109, 225, 104, 241, 177, 31, 225, 61, 241, 177, 31, 248, 106,
- 65, 217, 149, 233, 2, 241, 177, 31, 217, 149, 244, 142, 241, 177, 31,
- 227, 29, 241, 177, 31, 227, 108, 241, 177, 31, 248, 10, 241, 177, 31,
- 248, 30, 241, 177, 31, 235, 243, 241, 177, 31, 251, 77, 241, 177, 31,
- 249, 159, 211, 211, 231, 141, 241, 177, 31, 243, 63, 216, 249, 241, 177,
- 31, 225, 12, 215, 125, 241, 177, 31, 227, 28, 241, 177, 31, 217, 149,
- 213, 254, 241, 177, 31, 223, 198, 241, 177, 31, 217, 149, 250, 153, 241,
- 177, 31, 217, 149, 253, 170, 217, 87, 241, 177, 31, 217, 149, 234, 185,
- 219, 74, 230, 185, 241, 177, 31, 247, 239, 241, 177, 31, 217, 149, 231,
- 215, 232, 8, 241, 177, 31, 254, 179, 241, 177, 31, 217, 149, 214, 38,
- 241, 177, 31, 217, 149, 243, 23, 213, 224, 241, 177, 31, 217, 149, 235,
- 55, 233, 131, 241, 177, 31, 247, 136, 241, 177, 31, 232, 249, 241, 177,
- 31, 235, 220, 216, 145, 241, 177, 31, 3, 225, 77, 241, 177, 31, 254, 122,
- 249, 151, 241, 177, 31, 251, 235, 249, 151, 8, 4, 235, 158, 8, 4, 235,
- 151, 8, 4, 72, 8, 4, 235, 180, 8, 4, 236, 53, 8, 4, 236, 36, 8, 4, 236,
- 55, 8, 4, 236, 54, 8, 4, 253, 122, 8, 4, 253, 85, 8, 4, 61, 8, 4, 253,
- 239, 8, 4, 215, 135, 8, 4, 215, 138, 8, 4, 215, 136, 8, 4, 227, 8, 8, 4,
- 226, 238, 8, 4, 75, 8, 4, 227, 41, 8, 4, 245, 2, 8, 4, 74, 8, 4, 213,
- 183, 8, 4, 251, 151, 8, 4, 251, 148, 8, 4, 251, 184, 8, 4, 251, 161, 8,
- 4, 251, 174, 8, 4, 251, 173, 8, 4, 251, 176, 8, 4, 251, 175, 8, 4, 252,
- 41, 8, 4, 252, 33, 8, 4, 252, 107, 8, 4, 252, 61, 8, 4, 251, 30, 8, 4,
- 251, 34, 8, 4, 251, 31, 8, 4, 251, 105, 8, 4, 251, 89, 8, 4, 251, 128, 8,
- 4, 251, 110, 8, 4, 251, 198, 8, 4, 251, 251, 8, 4, 251, 210, 8, 4, 251,
- 16, 8, 4, 251, 13, 8, 4, 251, 54, 8, 4, 251, 29, 8, 4, 251, 23, 8, 4,
- 251, 27, 8, 4, 251, 1, 8, 4, 251, 0, 8, 4, 251, 6, 8, 4, 251, 4, 8, 4,
- 251, 2, 8, 4, 251, 3, 8, 4, 225, 181, 8, 4, 225, 177, 8, 4, 225, 240, 8,
- 4, 225, 191, 8, 4, 225, 207, 8, 4, 225, 234, 8, 4, 225, 230, 8, 4, 226,
- 113, 8, 4, 226, 104, 8, 4, 193, 8, 4, 226, 149, 8, 4, 225, 21, 8, 4, 225,
- 23, 8, 4, 225, 22, 8, 4, 225, 113, 8, 4, 225, 102, 8, 4, 225, 150, 8, 4,
- 225, 125, 8, 4, 225, 8, 8, 4, 225, 5, 8, 4, 225, 35, 8, 4, 225, 20, 8, 4,
- 225, 13, 8, 4, 225, 18, 8, 4, 224, 244, 8, 4, 224, 243, 8, 4, 224, 248,
- 8, 4, 224, 247, 8, 4, 224, 245, 8, 4, 224, 246, 8, 4, 252, 16, 8, 4, 252,
- 15, 8, 4, 252, 22, 8, 4, 252, 17, 8, 4, 252, 19, 8, 4, 252, 18, 8, 4,
- 252, 21, 8, 4, 252, 20, 8, 4, 252, 28, 8, 4, 252, 27, 8, 4, 252, 31, 8,
- 4, 252, 29, 8, 4, 252, 7, 8, 4, 252, 9, 8, 4, 252, 8, 8, 4, 252, 12, 8,
- 4, 252, 11, 8, 4, 252, 14, 8, 4, 252, 13, 8, 4, 252, 23, 8, 4, 252, 26,
- 8, 4, 252, 24, 8, 4, 252, 3, 8, 4, 252, 2, 8, 4, 252, 10, 8, 4, 252, 6,
- 8, 4, 252, 4, 8, 4, 252, 5, 8, 4, 251, 255, 8, 4, 251, 254, 8, 4, 252, 1,
- 8, 4, 252, 0, 8, 4, 229, 248, 8, 4, 229, 247, 8, 4, 229, 253, 8, 4, 229,
- 249, 8, 4, 229, 250, 8, 4, 229, 252, 8, 4, 229, 251, 8, 4, 229, 255, 8,
- 4, 229, 254, 8, 4, 230, 1, 8, 4, 230, 0, 8, 4, 229, 244, 8, 4, 229, 243,
- 8, 4, 229, 246, 8, 4, 229, 245, 8, 4, 229, 238, 8, 4, 229, 237, 8, 4,
- 229, 242, 8, 4, 229, 241, 8, 4, 229, 239, 8, 4, 229, 240, 8, 4, 229, 232,
- 8, 4, 229, 231, 8, 4, 229, 236, 8, 4, 229, 235, 8, 4, 229, 233, 8, 4,
- 229, 234, 8, 4, 241, 96, 8, 4, 241, 95, 8, 4, 241, 101, 8, 4, 241, 97, 8,
- 4, 241, 98, 8, 4, 241, 100, 8, 4, 241, 99, 8, 4, 241, 104, 8, 4, 241,
- 103, 8, 4, 241, 106, 8, 4, 241, 105, 8, 4, 241, 87, 8, 4, 241, 89, 8, 4,
- 241, 88, 8, 4, 241, 92, 8, 4, 241, 91, 8, 4, 241, 94, 8, 4, 241, 93, 8,
- 4, 241, 83, 8, 4, 241, 82, 8, 4, 241, 90, 8, 4, 241, 86, 8, 4, 241, 84,
- 8, 4, 241, 85, 8, 4, 241, 77, 8, 4, 241, 81, 8, 4, 241, 80, 8, 4, 241,
- 78, 8, 4, 241, 79, 8, 4, 230, 241, 8, 4, 230, 240, 8, 4, 231, 42, 8, 4,
- 230, 247, 8, 4, 231, 16, 8, 4, 231, 34, 8, 4, 231, 32, 8, 4, 231, 202, 8,
- 4, 231, 198, 8, 4, 188, 8, 4, 231, 235, 8, 4, 230, 144, 8, 4, 230, 143,
- 8, 4, 230, 147, 8, 4, 230, 145, 8, 4, 230, 191, 8, 4, 230, 177, 8, 4,
- 230, 231, 8, 4, 230, 196, 8, 4, 231, 93, 8, 4, 231, 156, 8, 4, 230, 125,
- 8, 4, 230, 122, 8, 4, 230, 172, 8, 4, 230, 140, 8, 4, 230, 133, 8, 4,
- 230, 138, 8, 4, 230, 100, 8, 4, 230, 99, 8, 4, 230, 105, 8, 4, 230, 102,
- 8, 4, 244, 52, 8, 4, 244, 47, 8, 4, 244, 90, 8, 4, 244, 67, 8, 4, 244,
- 135, 8, 4, 244, 126, 8, 4, 244, 164, 8, 4, 244, 138, 8, 4, 243, 229, 8,
- 4, 244, 12, 8, 4, 243, 252, 8, 4, 243, 190, 8, 4, 243, 189, 8, 4, 243,
- 205, 8, 4, 243, 195, 8, 4, 243, 193, 8, 4, 243, 194, 8, 4, 243, 180, 8,
- 4, 243, 179, 8, 4, 243, 183, 8, 4, 243, 181, 8, 4, 214, 125, 8, 4, 214,
- 120, 8, 4, 214, 154, 8, 4, 214, 134, 8, 4, 214, 146, 8, 4, 214, 143, 8,
- 4, 214, 148, 8, 4, 214, 147, 8, 4, 214, 239, 8, 4, 214, 235, 8, 4, 215,
- 1, 8, 4, 214, 250, 8, 4, 214, 106, 8, 4, 214, 102, 8, 4, 214, 119, 8, 4,
- 214, 107, 8, 4, 214, 155, 8, 4, 214, 221, 8, 4, 214, 93, 8, 4, 214, 92,
- 8, 4, 214, 99, 8, 4, 214, 96, 8, 4, 214, 94, 8, 4, 214, 95, 8, 4, 214,
- 86, 8, 4, 214, 85, 8, 4, 214, 90, 8, 4, 214, 89, 8, 4, 214, 87, 8, 4,
- 214, 88, 8, 4, 247, 130, 8, 4, 247, 118, 8, 4, 247, 211, 8, 4, 247, 155,
- 8, 4, 247, 188, 8, 4, 247, 192, 8, 4, 247, 191, 8, 4, 248, 98, 8, 4, 248,
- 93, 8, 4, 248, 164, 8, 4, 248, 117, 8, 4, 246, 17, 8, 4, 246, 18, 8, 4,
- 247, 74, 8, 4, 246, 56, 8, 4, 247, 99, 8, 4, 247, 76, 8, 4, 247, 237, 8,
- 4, 248, 41, 8, 4, 247, 252, 8, 4, 246, 8, 8, 4, 246, 6, 8, 4, 246, 33, 8,
- 4, 246, 16, 8, 4, 246, 11, 8, 4, 246, 14, 8, 4, 217, 20, 8, 4, 217, 14,
- 8, 4, 217, 71, 8, 4, 217, 29, 8, 4, 217, 63, 8, 4, 217, 65, 8, 4, 217,
- 64, 8, 4, 217, 253, 8, 4, 217, 240, 8, 4, 218, 52, 8, 4, 218, 5, 8, 4,
- 216, 66, 8, 4, 216, 65, 8, 4, 216, 68, 8, 4, 216, 67, 8, 4, 216, 218, 8,
- 4, 216, 214, 8, 4, 108, 8, 4, 216, 226, 8, 4, 217, 166, 8, 4, 217, 229,
- 8, 4, 217, 190, 8, 4, 216, 52, 8, 4, 216, 48, 8, 4, 216, 82, 8, 4, 216,
- 64, 8, 4, 216, 53, 8, 4, 216, 62, 8, 4, 248, 58, 8, 4, 248, 57, 8, 4,
- 248, 63, 8, 4, 248, 59, 8, 4, 248, 60, 8, 4, 248, 62, 8, 4, 248, 61, 8,
- 4, 248, 79, 8, 4, 248, 78, 8, 4, 248, 86, 8, 4, 248, 80, 8, 4, 248, 48,
- 8, 4, 248, 50, 8, 4, 248, 49, 8, 4, 248, 53, 8, 4, 248, 52, 8, 4, 248,
- 56, 8, 4, 248, 54, 8, 4, 248, 71, 8, 4, 248, 74, 8, 4, 248, 72, 8, 4,
- 248, 44, 8, 4, 248, 43, 8, 4, 248, 51, 8, 4, 248, 47, 8, 4, 248, 45, 8,
- 4, 248, 46, 8, 4, 229, 206, 8, 4, 229, 205, 8, 4, 229, 213, 8, 4, 229,
- 208, 8, 4, 229, 209, 8, 4, 229, 210, 8, 4, 229, 222, 8, 4, 229, 221, 8,
- 4, 229, 228, 8, 4, 229, 223, 8, 4, 229, 198, 8, 4, 229, 197, 8, 4, 229,
- 204, 8, 4, 229, 199, 8, 4, 229, 214, 8, 4, 229, 220, 8, 4, 229, 218, 8,
- 4, 229, 190, 8, 4, 229, 189, 8, 4, 229, 195, 8, 4, 229, 193, 8, 4, 229,
- 191, 8, 4, 229, 192, 8, 4, 241, 63, 8, 4, 241, 62, 8, 4, 241, 69, 8, 4,
- 241, 64, 8, 4, 241, 66, 8, 4, 241, 65, 8, 4, 241, 68, 8, 4, 241, 67, 8,
- 4, 241, 74, 8, 4, 241, 73, 8, 4, 241, 76, 8, 4, 241, 75, 8, 4, 241, 57,
- 8, 4, 241, 58, 8, 4, 241, 60, 8, 4, 241, 59, 8, 4, 241, 61, 8, 4, 241,
- 70, 8, 4, 241, 72, 8, 4, 241, 71, 8, 4, 241, 56, 8, 4, 229, 20, 8, 4,
- 229, 18, 8, 4, 229, 64, 8, 4, 229, 23, 8, 4, 229, 46, 8, 4, 229, 60, 8,
- 4, 229, 59, 8, 4, 230, 5, 8, 4, 205, 8, 4, 230, 17, 8, 4, 228, 42, 8, 4,
- 228, 44, 8, 4, 228, 43, 8, 4, 228, 162, 8, 4, 228, 149, 8, 4, 228, 185,
- 8, 4, 228, 171, 8, 4, 229, 165, 8, 4, 229, 187, 8, 4, 229, 176, 8, 4,
- 228, 37, 8, 4, 228, 34, 8, 4, 228, 92, 8, 4, 228, 41, 8, 4, 228, 39, 8,
- 4, 228, 40, 8, 4, 241, 127, 8, 4, 241, 126, 8, 4, 241, 132, 8, 4, 241,
- 128, 8, 4, 241, 129, 8, 4, 241, 131, 8, 4, 241, 130, 8, 4, 241, 137, 8,
- 4, 241, 136, 8, 4, 241, 139, 8, 4, 241, 138, 8, 4, 241, 119, 8, 4, 241,
- 121, 8, 4, 241, 120, 8, 4, 241, 123, 8, 4, 241, 125, 8, 4, 241, 124, 8,
- 4, 241, 133, 8, 4, 241, 135, 8, 4, 241, 134, 8, 4, 241, 115, 8, 4, 241,
- 114, 8, 4, 241, 122, 8, 4, 241, 118, 8, 4, 241, 116, 8, 4, 241, 117, 8,
- 4, 241, 109, 8, 4, 241, 108, 8, 4, 241, 113, 8, 4, 241, 112, 8, 4, 241,
- 110, 8, 4, 241, 111, 8, 4, 232, 224, 8, 4, 232, 218, 8, 4, 233, 13, 8, 4,
- 232, 231, 8, 4, 233, 5, 8, 4, 233, 4, 8, 4, 233, 8, 8, 4, 233, 6, 8, 4,
- 233, 102, 8, 4, 233, 93, 8, 4, 233, 157, 8, 4, 233, 111, 8, 4, 232, 137,
- 8, 4, 232, 136, 8, 4, 232, 139, 8, 4, 232, 138, 8, 4, 232, 171, 8, 4,
- 232, 161, 8, 4, 232, 208, 8, 4, 232, 175, 8, 4, 233, 28, 8, 4, 233, 82,
- 8, 4, 233, 41, 8, 4, 232, 132, 8, 4, 232, 131, 8, 4, 232, 156, 8, 4, 232,
- 135, 8, 4, 232, 133, 8, 4, 232, 134, 8, 4, 232, 114, 8, 4, 232, 113, 8,
- 4, 232, 121, 8, 4, 232, 117, 8, 4, 232, 115, 8, 4, 232, 116, 8, 4, 242,
- 165, 8, 4, 242, 164, 8, 4, 242, 190, 8, 4, 242, 175, 8, 4, 242, 182, 8,
- 4, 242, 181, 8, 4, 242, 184, 8, 4, 242, 183, 8, 4, 243, 65, 8, 4, 243,
- 60, 8, 4, 243, 110, 8, 4, 243, 75, 8, 4, 242, 72, 8, 4, 242, 71, 8, 4,
- 242, 74, 8, 4, 242, 73, 8, 4, 242, 130, 8, 4, 242, 128, 8, 4, 242, 150,
- 8, 4, 242, 138, 8, 4, 243, 9, 8, 4, 243, 7, 8, 4, 243, 38, 8, 4, 243, 20,
- 8, 4, 242, 62, 8, 4, 242, 61, 8, 4, 242, 92, 8, 4, 242, 70, 8, 4, 242,
- 63, 8, 4, 242, 69, 8, 4, 234, 70, 8, 4, 234, 69, 8, 4, 234, 101, 8, 4,
- 234, 84, 8, 4, 234, 94, 8, 4, 234, 97, 8, 4, 234, 95, 8, 4, 234, 207, 8,
- 4, 234, 196, 8, 4, 181, 8, 4, 234, 233, 8, 4, 233, 221, 8, 4, 233, 226,
- 8, 4, 233, 223, 8, 4, 234, 9, 8, 4, 234, 5, 8, 4, 234, 37, 8, 4, 234, 16,
- 8, 4, 234, 162, 8, 4, 234, 146, 8, 4, 234, 188, 8, 4, 234, 165, 8, 4,
- 233, 210, 8, 4, 233, 208, 8, 4, 233, 238, 8, 4, 233, 220, 8, 4, 233, 213,
- 8, 4, 233, 217, 8, 4, 242, 247, 8, 4, 242, 246, 8, 4, 242, 251, 8, 4,
- 242, 248, 8, 4, 242, 250, 8, 4, 242, 249, 8, 4, 243, 2, 8, 4, 243, 1, 8,
- 4, 243, 5, 8, 4, 243, 3, 8, 4, 242, 238, 8, 4, 242, 237, 8, 4, 242, 240,
- 8, 4, 242, 239, 8, 4, 242, 243, 8, 4, 242, 242, 8, 4, 242, 245, 8, 4,
- 242, 244, 8, 4, 242, 253, 8, 4, 242, 252, 8, 4, 243, 0, 8, 4, 242, 254,
- 8, 4, 242, 233, 8, 4, 242, 232, 8, 4, 242, 241, 8, 4, 242, 236, 8, 4,
- 242, 234, 8, 4, 242, 235, 8, 4, 231, 60, 8, 4, 231, 61, 8, 4, 231, 79, 8,
- 4, 231, 78, 8, 4, 231, 81, 8, 4, 231, 80, 8, 4, 231, 51, 8, 4, 231, 53,
- 8, 4, 231, 52, 8, 4, 231, 56, 8, 4, 231, 55, 8, 4, 231, 58, 8, 4, 231,
- 57, 8, 4, 231, 62, 8, 4, 231, 64, 8, 4, 231, 63, 8, 4, 231, 47, 8, 4,
- 231, 46, 8, 4, 231, 54, 8, 4, 231, 50, 8, 4, 231, 48, 8, 4, 231, 49, 8,
- 4, 240, 172, 8, 4, 240, 171, 8, 4, 240, 178, 8, 4, 240, 173, 8, 4, 240,
- 175, 8, 4, 240, 174, 8, 4, 240, 177, 8, 4, 240, 176, 8, 4, 240, 183, 8,
- 4, 240, 182, 8, 4, 240, 185, 8, 4, 240, 184, 8, 4, 240, 164, 8, 4, 240,
- 163, 8, 4, 240, 166, 8, 4, 240, 165, 8, 4, 240, 168, 8, 4, 240, 167, 8,
- 4, 240, 170, 8, 4, 240, 169, 8, 4, 240, 179, 8, 4, 240, 181, 8, 4, 240,
- 180, 8, 4, 229, 110, 8, 4, 229, 112, 8, 4, 229, 111, 8, 4, 229, 150, 8,
- 4, 229, 149, 8, 4, 229, 159, 8, 4, 229, 153, 8, 4, 229, 73, 8, 4, 229,
- 72, 8, 4, 229, 74, 8, 4, 229, 82, 8, 4, 229, 79, 8, 4, 229, 90, 8, 4,
- 229, 84, 8, 4, 229, 143, 8, 4, 229, 148, 8, 4, 229, 145, 8, 4, 241, 142,
- 8, 4, 241, 152, 8, 4, 241, 160, 8, 4, 241, 234, 8, 4, 241, 227, 8, 4,
- 159, 8, 4, 241, 245, 8, 4, 240, 196, 8, 4, 240, 195, 8, 4, 240, 198, 8,
- 4, 240, 197, 8, 4, 240, 229, 8, 4, 240, 220, 8, 4, 241, 54, 8, 4, 241,
- 34, 8, 4, 241, 179, 8, 4, 241, 222, 8, 4, 241, 190, 8, 4, 214, 27, 8, 4,
- 214, 12, 8, 4, 214, 49, 8, 4, 214, 35, 8, 4, 213, 173, 8, 4, 213, 175, 8,
- 4, 213, 174, 8, 4, 213, 191, 8, 4, 213, 214, 8, 4, 213, 197, 8, 4, 213,
- 246, 8, 4, 214, 6, 8, 4, 213, 251, 8, 4, 212, 23, 8, 4, 212, 22, 8, 4,
- 212, 37, 8, 4, 212, 25, 8, 4, 212, 30, 8, 4, 212, 32, 8, 4, 212, 31, 8,
- 4, 212, 95, 8, 4, 212, 92, 8, 4, 212, 109, 8, 4, 212, 98, 8, 4, 212, 1,
- 8, 4, 212, 3, 8, 4, 212, 2, 8, 4, 212, 12, 8, 4, 212, 11, 8, 4, 212, 16,
- 8, 4, 212, 13, 8, 4, 212, 77, 8, 4, 212, 87, 8, 4, 212, 81, 8, 4, 211,
- 253, 8, 4, 211, 252, 8, 4, 212, 8, 8, 4, 212, 0, 8, 4, 211, 254, 8, 4,
- 211, 255, 8, 4, 211, 244, 8, 4, 211, 243, 8, 4, 211, 249, 8, 4, 211, 247,
- 8, 4, 211, 245, 8, 4, 211, 246, 8, 4, 249, 221, 8, 4, 249, 217, 8, 4,
- 249, 244, 8, 4, 249, 230, 8, 4, 249, 241, 8, 4, 249, 235, 8, 4, 249, 243,
- 8, 4, 249, 242, 8, 4, 250, 156, 8, 4, 250, 150, 8, 4, 250, 219, 8, 4,
- 250, 183, 8, 4, 249, 45, 8, 4, 249, 47, 8, 4, 249, 46, 8, 4, 249, 92, 8,
- 4, 249, 83, 8, 4, 249, 175, 8, 4, 249, 108, 8, 4, 250, 94, 8, 4, 250,
- 124, 8, 4, 250, 99, 8, 4, 249, 26, 8, 4, 249, 25, 8, 4, 249, 53, 8, 4,
- 249, 43, 8, 4, 249, 31, 8, 4, 249, 42, 8, 4, 249, 6, 8, 4, 249, 5, 8, 4,
- 249, 16, 8, 4, 249, 12, 8, 4, 249, 7, 8, 4, 249, 9, 8, 4, 211, 227, 8, 4,
- 211, 226, 8, 4, 211, 233, 8, 4, 211, 228, 8, 4, 211, 230, 8, 4, 211, 229,
- 8, 4, 211, 232, 8, 4, 211, 231, 8, 4, 211, 239, 8, 4, 211, 238, 8, 4,
- 211, 242, 8, 4, 211, 240, 8, 4, 211, 223, 8, 4, 211, 225, 8, 4, 211, 224,
- 8, 4, 211, 234, 8, 4, 211, 237, 8, 4, 211, 235, 8, 4, 211, 218, 8, 4,
- 211, 222, 8, 4, 211, 221, 8, 4, 211, 219, 8, 4, 211, 220, 8, 4, 211, 213,
- 8, 4, 211, 212, 8, 4, 211, 217, 8, 4, 211, 216, 8, 4, 211, 214, 8, 4,
- 211, 215, 8, 4, 227, 224, 8, 4, 227, 223, 8, 4, 227, 229, 8, 4, 227, 225,
- 8, 4, 227, 226, 8, 4, 227, 228, 8, 4, 227, 227, 8, 4, 227, 234, 8, 4,
- 227, 233, 8, 4, 227, 237, 8, 4, 227, 236, 8, 4, 227, 217, 8, 4, 227, 218,
- 8, 4, 227, 221, 8, 4, 227, 222, 8, 4, 227, 230, 8, 4, 227, 232, 8, 4,
- 227, 212, 8, 4, 227, 220, 8, 4, 227, 216, 8, 4, 227, 213, 8, 4, 227, 214,
- 8, 4, 227, 207, 8, 4, 227, 206, 8, 4, 227, 211, 8, 4, 227, 210, 8, 4,
- 227, 208, 8, 4, 227, 209, 8, 4, 220, 55, 8, 4, 189, 8, 4, 220, 117, 8, 4,
- 220, 58, 8, 4, 220, 109, 8, 4, 220, 112, 8, 4, 220, 110, 8, 4, 222, 142,
- 8, 4, 222, 132, 8, 4, 222, 202, 8, 4, 222, 150, 8, 4, 218, 228, 8, 4,
- 218, 230, 8, 4, 218, 229, 8, 4, 219, 221, 8, 4, 219, 210, 8, 4, 219, 242,
- 8, 4, 219, 224, 8, 4, 221, 35, 8, 4, 222, 100, 8, 4, 221, 59, 8, 4, 218,
- 206, 8, 4, 218, 204, 8, 4, 219, 27, 8, 4, 218, 227, 8, 4, 218, 209, 8, 4,
- 218, 217, 8, 4, 218, 113, 8, 4, 218, 112, 8, 4, 218, 177, 8, 4, 218, 119,
- 8, 4, 218, 114, 8, 4, 218, 118, 8, 4, 219, 123, 8, 4, 219, 122, 8, 4,
- 219, 128, 8, 4, 219, 124, 8, 4, 219, 125, 8, 4, 219, 127, 8, 4, 219, 126,
- 8, 4, 219, 135, 8, 4, 219, 134, 8, 4, 219, 157, 8, 4, 219, 136, 8, 4,
- 219, 119, 8, 4, 219, 118, 8, 4, 219, 121, 8, 4, 219, 120, 8, 4, 219, 130,
- 8, 4, 219, 133, 8, 4, 219, 131, 8, 4, 219, 115, 8, 4, 219, 114, 8, 4,
- 219, 117, 8, 4, 219, 116, 8, 4, 219, 109, 8, 4, 219, 108, 8, 4, 219, 113,
- 8, 4, 219, 112, 8, 4, 219, 110, 8, 4, 219, 111, 8, 4, 212, 70, 8, 4, 212,
- 69, 8, 4, 212, 75, 8, 4, 212, 72, 8, 4, 212, 52, 8, 4, 212, 54, 8, 4,
- 212, 53, 8, 4, 212, 57, 8, 4, 212, 56, 8, 4, 212, 60, 8, 4, 212, 58, 8,
- 4, 212, 64, 8, 4, 212, 63, 8, 4, 212, 67, 8, 4, 212, 65, 8, 4, 212, 48,
- 8, 4, 212, 47, 8, 4, 212, 55, 8, 4, 212, 51, 8, 4, 212, 49, 8, 4, 212,
- 50, 8, 4, 212, 40, 8, 4, 212, 39, 8, 4, 212, 44, 8, 4, 212, 43, 8, 4,
- 212, 41, 8, 4, 212, 42, 8, 4, 250, 72, 8, 4, 250, 69, 8, 4, 250, 92, 8,
- 4, 250, 80, 8, 4, 250, 2, 8, 4, 250, 1, 8, 4, 250, 4, 8, 4, 250, 3, 8, 4,
- 250, 16, 8, 4, 250, 15, 8, 4, 250, 23, 8, 4, 250, 18, 8, 4, 250, 52, 8,
- 4, 250, 50, 8, 4, 250, 67, 8, 4, 250, 58, 8, 4, 249, 252, 8, 4, 250, 6,
- 8, 4, 250, 0, 8, 4, 249, 253, 8, 4, 249, 255, 8, 4, 249, 246, 8, 4, 249,
- 245, 8, 4, 249, 250, 8, 4, 249, 249, 8, 4, 249, 247, 8, 4, 249, 248, 8,
- 4, 223, 80, 8, 4, 223, 81, 8, 4, 223, 67, 8, 4, 223, 68, 8, 4, 223, 71,
- 8, 4, 223, 70, 8, 4, 223, 73, 8, 4, 223, 72, 8, 4, 223, 75, 8, 4, 223,
- 74, 8, 4, 223, 79, 8, 4, 223, 76, 8, 4, 223, 63, 8, 4, 223, 62, 8, 4,
- 223, 69, 8, 4, 223, 66, 8, 4, 223, 64, 8, 4, 223, 65, 8, 4, 223, 57, 8,
- 4, 223, 56, 8, 4, 223, 61, 8, 4, 223, 60, 8, 4, 223, 58, 8, 4, 223, 59,
- 8, 4, 228, 145, 8, 4, 228, 144, 8, 4, 228, 147, 8, 4, 228, 146, 8, 4,
- 228, 137, 8, 4, 228, 139, 8, 4, 228, 138, 8, 4, 228, 141, 8, 4, 228, 140,
- 8, 4, 228, 143, 8, 4, 228, 142, 8, 4, 228, 132, 8, 4, 228, 131, 8, 4,
- 228, 136, 8, 4, 228, 135, 8, 4, 228, 133, 8, 4, 228, 134, 8, 4, 228, 126,
- 8, 4, 228, 125, 8, 4, 228, 130, 8, 4, 228, 129, 8, 4, 228, 127, 8, 4,
- 228, 128, 8, 4, 220, 251, 8, 4, 220, 247, 8, 4, 221, 24, 8, 4, 221, 6, 8,
- 4, 220, 140, 8, 4, 220, 142, 8, 4, 220, 141, 8, 4, 220, 160, 8, 4, 220,
- 157, 8, 4, 220, 187, 8, 4, 220, 178, 8, 4, 220, 222, 8, 4, 220, 215, 8,
- 4, 220, 243, 8, 4, 220, 230, 8, 4, 220, 136, 8, 4, 220, 135, 8, 4, 220,
- 150, 8, 4, 220, 139, 8, 4, 220, 137, 8, 4, 220, 138, 8, 4, 220, 120, 8,
- 4, 220, 119, 8, 4, 220, 126, 8, 4, 220, 123, 8, 4, 220, 121, 8, 4, 220,
- 122, 8, 4, 224, 33, 8, 4, 224, 28, 8, 4, 203, 8, 4, 224, 39, 8, 4, 223,
- 31, 8, 4, 223, 33, 8, 4, 223, 32, 8, 4, 223, 90, 8, 4, 223, 83, 8, 4,
- 223, 112, 8, 4, 223, 94, 8, 4, 223, 196, 8, 4, 224, 21, 8, 4, 223, 231,
- 8, 4, 223, 24, 8, 4, 223, 22, 8, 4, 223, 51, 8, 4, 223, 30, 8, 4, 223,
- 26, 8, 4, 223, 27, 8, 4, 223, 7, 8, 4, 223, 6, 8, 4, 223, 12, 8, 4, 223,
- 10, 8, 4, 223, 8, 8, 4, 223, 9, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4,
- 235, 110, 8, 4, 235, 102, 8, 4, 235, 106, 8, 4, 235, 105, 8, 4, 235, 108,
- 8, 4, 235, 107, 8, 4, 235, 44, 8, 4, 235, 43, 8, 4, 235, 46, 8, 4, 235,
- 45, 8, 4, 235, 59, 8, 4, 235, 57, 8, 4, 235, 71, 8, 4, 235, 61, 8, 4,
- 235, 38, 8, 4, 235, 36, 8, 4, 235, 54, 8, 4, 235, 42, 8, 4, 235, 39, 8,
- 4, 235, 40, 8, 4, 235, 30, 8, 4, 235, 29, 8, 4, 235, 34, 8, 4, 235, 33,
- 8, 4, 235, 31, 8, 4, 235, 32, 8, 4, 224, 191, 8, 4, 224, 189, 8, 4, 224,
- 198, 8, 4, 224, 192, 8, 4, 224, 195, 8, 4, 224, 194, 8, 4, 224, 197, 8,
- 4, 224, 196, 8, 4, 224, 144, 8, 4, 224, 141, 8, 4, 224, 146, 8, 4, 224,
- 145, 8, 4, 224, 178, 8, 4, 224, 177, 8, 4, 224, 187, 8, 4, 224, 181, 8,
- 4, 224, 136, 8, 4, 224, 132, 8, 4, 224, 175, 8, 4, 224, 140, 8, 4, 224,
- 138, 8, 4, 224, 139, 8, 4, 224, 116, 8, 4, 224, 114, 8, 4, 224, 126, 8,
- 4, 224, 119, 8, 4, 224, 117, 8, 4, 224, 118, 8, 4, 235, 90, 8, 4, 235,
- 89, 8, 4, 235, 96, 8, 4, 235, 91, 8, 4, 235, 93, 8, 4, 235, 92, 8, 4,
- 235, 95, 8, 4, 235, 94, 8, 4, 235, 81, 8, 4, 235, 83, 8, 4, 235, 82, 8,
- 4, 235, 86, 8, 4, 235, 85, 8, 4, 235, 88, 8, 4, 235, 87, 8, 4, 235, 77,
- 8, 4, 235, 76, 8, 4, 235, 84, 8, 4, 235, 80, 8, 4, 235, 78, 8, 4, 235,
- 79, 8, 4, 235, 73, 8, 4, 235, 72, 8, 4, 235, 75, 8, 4, 235, 74, 8, 4,
- 228, 249, 8, 4, 228, 248, 8, 4, 229, 0, 8, 4, 228, 250, 8, 4, 228, 252,
- 8, 4, 228, 251, 8, 4, 228, 255, 8, 4, 228, 253, 8, 4, 228, 238, 8, 4,
- 228, 239, 8, 4, 228, 244, 8, 4, 228, 243, 8, 4, 228, 247, 8, 4, 228, 245,
- 8, 4, 228, 233, 8, 4, 228, 242, 8, 4, 228, 237, 8, 4, 228, 234, 8, 4,
- 228, 235, 8, 4, 228, 228, 8, 4, 228, 227, 8, 4, 228, 232, 8, 4, 228, 231,
- 8, 4, 228, 229, 8, 4, 228, 230, 8, 4, 228, 0, 8, 4, 227, 255, 8, 4, 228,
- 10, 8, 4, 228, 4, 8, 4, 228, 7, 8, 4, 228, 6, 8, 4, 228, 9, 8, 4, 228, 8,
- 8, 4, 227, 243, 8, 4, 227, 245, 8, 4, 227, 244, 8, 4, 227, 249, 8, 4,
- 227, 248, 8, 4, 227, 253, 8, 4, 227, 250, 8, 4, 227, 241, 8, 4, 227, 240,
- 8, 4, 227, 247, 8, 4, 227, 242, 8, 4, 213, 138, 8, 4, 213, 137, 8, 4,
- 213, 145, 8, 4, 213, 140, 8, 4, 213, 142, 8, 4, 213, 141, 8, 4, 213, 144,
- 8, 4, 213, 143, 8, 4, 213, 127, 8, 4, 213, 128, 8, 4, 213, 132, 8, 4,
- 213, 131, 8, 4, 213, 136, 8, 4, 213, 134, 8, 4, 213, 109, 8, 4, 213, 107,
- 8, 4, 213, 119, 8, 4, 213, 112, 8, 4, 213, 110, 8, 4, 213, 111, 8, 4,
- 212, 241, 8, 4, 212, 239, 8, 4, 212, 255, 8, 4, 212, 242, 8, 4, 212, 249,
- 8, 4, 212, 248, 8, 4, 212, 252, 8, 4, 212, 250, 8, 4, 212, 182, 8, 4,
- 212, 181, 8, 4, 212, 185, 8, 4, 212, 183, 8, 4, 212, 215, 8, 4, 212, 212,
- 8, 4, 212, 235, 8, 4, 212, 219, 8, 4, 212, 173, 8, 4, 212, 170, 8, 4,
- 212, 203, 8, 4, 212, 180, 8, 4, 212, 176, 8, 4, 212, 177, 8, 4, 212, 155,
- 8, 4, 212, 154, 8, 4, 212, 161, 8, 4, 212, 158, 8, 4, 212, 156, 8, 4,
- 212, 157, 8, 34, 224, 178, 8, 34, 233, 13, 8, 34, 234, 70, 8, 34, 228, 4,
- 8, 34, 249, 12, 8, 34, 219, 128, 8, 34, 242, 244, 8, 34, 243, 20, 8, 34,
- 231, 42, 8, 34, 240, 172, 8, 34, 232, 116, 8, 34, 252, 3, 8, 34, 230,
- 196, 8, 34, 212, 235, 8, 34, 225, 8, 8, 34, 240, 166, 8, 34, 217, 253, 8,
- 34, 243, 110, 8, 34, 212, 0, 8, 34, 249, 6, 8, 34, 248, 46, 8, 34, 251,
- 27, 8, 34, 242, 240, 8, 34, 227, 250, 8, 34, 216, 82, 8, 34, 227, 41, 8,
- 34, 235, 77, 8, 34, 212, 12, 8, 34, 224, 244, 8, 34, 241, 94, 8, 34, 212,
- 241, 8, 34, 214, 95, 8, 34, 220, 126, 8, 34, 214, 221, 8, 34, 212, 109,
- 8, 34, 235, 71, 8, 34, 227, 216, 8, 34, 235, 75, 8, 34, 242, 130, 8, 34,
- 235, 95, 8, 34, 213, 214, 8, 34, 246, 33, 8, 34, 220, 138, 8, 34, 233, 8,
- 8, 34, 249, 16, 8, 34, 249, 46, 8, 34, 249, 230, 8, 34, 240, 169, 8, 34,
- 220, 251, 8, 34, 211, 255, 8, 34, 220, 178, 8, 34, 250, 67, 8, 34, 211,
- 230, 8, 34, 229, 252, 8, 34, 234, 188, 232, 225, 1, 252, 107, 232, 225,
- 1, 193, 232, 225, 1, 226, 23, 232, 225, 1, 248, 164, 232, 225, 1, 218,
- 52, 232, 225, 1, 217, 161, 232, 225, 1, 243, 110, 232, 225, 1, 181, 232,
- 225, 1, 234, 138, 232, 225, 1, 235, 139, 232, 225, 1, 250, 219, 232, 225,
- 1, 250, 92, 232, 225, 1, 245, 249, 232, 225, 1, 216, 141, 232, 225, 1,
- 216, 133, 232, 225, 1, 188, 232, 225, 1, 205, 232, 225, 1, 233, 157, 232,
- 225, 1, 222, 202, 232, 225, 1, 212, 75, 232, 225, 1, 212, 109, 232, 225,
- 1, 229, 159, 232, 225, 1, 159, 232, 225, 1, 213, 153, 232, 225, 1, 241,
- 174, 232, 225, 1, 244, 164, 232, 225, 1, 214, 49, 232, 225, 1, 221, 24,
- 232, 225, 1, 186, 232, 225, 1, 242, 225, 232, 225, 1, 61, 232, 225, 1,
- 254, 148, 232, 225, 1, 74, 232, 225, 1, 245, 22, 232, 225, 1, 72, 232,
- 225, 1, 75, 232, 225, 1, 69, 232, 225, 1, 215, 183, 232, 225, 1, 215,
- 178, 232, 225, 1, 227, 99, 232, 225, 1, 160, 230, 104, 217, 71, 232, 225,
- 1, 160, 230, 46, 225, 150, 232, 225, 1, 160, 230, 104, 249, 15, 232, 225,
- 1, 160, 230, 104, 251, 128, 232, 225, 1, 160, 230, 104, 205, 232, 225, 1,
- 160, 230, 104, 235, 116, 232, 225, 225, 27, 249, 157, 232, 225, 225, 27,
- 243, 200, 219, 69, 39, 4, 245, 165, 39, 4, 245, 162, 39, 4, 241, 204, 39,
- 4, 214, 1, 39, 4, 214, 0, 39, 4, 226, 86, 39, 4, 251, 191, 39, 4, 251,
- 242, 39, 4, 231, 179, 39, 4, 234, 0, 39, 4, 231, 73, 39, 4, 243, 51, 39,
- 4, 244, 116, 39, 4, 214, 227, 39, 4, 217, 219, 39, 4, 217, 147, 39, 4,
- 247, 224, 39, 4, 247, 221, 39, 4, 233, 74, 39, 4, 224, 1, 39, 4, 248, 28,
- 39, 4, 229, 219, 39, 4, 222, 89, 39, 4, 220, 241, 39, 4, 212, 85, 39, 4,
- 212, 66, 39, 4, 250, 116, 39, 4, 235, 125, 39, 4, 229, 7, 39, 4, 213, 35,
- 39, 4, 234, 187, 39, 4, 229, 136, 39, 4, 243, 31, 39, 4, 231, 145, 39, 4,
- 229, 184, 39, 4, 228, 16, 39, 4, 72, 39, 4, 235, 251, 39, 4, 241, 165,
- 39, 4, 241, 146, 39, 4, 213, 235, 39, 4, 213, 226, 39, 4, 225, 240, 39,
- 4, 251, 189, 39, 4, 251, 184, 39, 4, 231, 172, 39, 4, 233, 253, 39, 4,
- 231, 70, 39, 4, 243, 47, 39, 4, 244, 90, 39, 4, 214, 154, 39, 4, 217, 71,
- 39, 4, 217, 128, 39, 4, 247, 216, 39, 4, 247, 220, 39, 4, 233, 13, 39, 4,
- 223, 188, 39, 4, 247, 211, 39, 4, 229, 213, 39, 4, 220, 117, 39, 4, 220,
- 212, 39, 4, 212, 37, 39, 4, 212, 62, 39, 4, 249, 244, 39, 4, 235, 110,
- 39, 4, 229, 0, 39, 4, 212, 255, 39, 4, 234, 101, 39, 4, 229, 128, 39, 4,
- 242, 190, 39, 4, 231, 42, 39, 4, 229, 64, 39, 4, 228, 10, 39, 4, 61, 39,
- 4, 254, 32, 39, 4, 229, 155, 39, 4, 159, 39, 4, 242, 1, 39, 4, 214, 49,
- 39, 4, 214, 39, 39, 4, 193, 39, 4, 251, 195, 39, 4, 252, 107, 39, 4, 231,
- 187, 39, 4, 234, 4, 39, 4, 234, 3, 39, 4, 231, 77, 39, 4, 243, 55, 39, 4,
- 244, 164, 39, 4, 215, 1, 39, 4, 218, 52, 39, 4, 217, 161, 39, 4, 247,
- 232, 39, 4, 247, 223, 39, 4, 233, 157, 39, 4, 203, 39, 4, 248, 164, 39,
- 4, 229, 228, 39, 4, 222, 202, 39, 4, 221, 24, 39, 4, 212, 109, 39, 4,
- 212, 75, 39, 4, 250, 219, 39, 4, 235, 139, 39, 4, 229, 16, 39, 4, 186,
- 39, 4, 181, 39, 4, 234, 239, 39, 4, 229, 141, 39, 4, 243, 110, 39, 4,
- 188, 39, 4, 205, 39, 4, 228, 23, 39, 4, 227, 49, 39, 4, 227, 45, 39, 4,
- 241, 39, 39, 4, 213, 202, 39, 4, 213, 198, 39, 4, 225, 129, 39, 4, 251,
- 187, 39, 4, 251, 118, 39, 4, 231, 167, 39, 4, 233, 251, 39, 4, 231, 66,
- 39, 4, 243, 43, 39, 4, 244, 3, 39, 4, 214, 108, 39, 4, 216, 230, 39, 4,
- 217, 106, 39, 4, 247, 214, 39, 4, 247, 218, 39, 4, 232, 180, 39, 4, 223,
- 99, 39, 4, 247, 79, 39, 4, 229, 200, 39, 4, 219, 226, 39, 4, 220, 181,
- 39, 4, 212, 14, 39, 4, 212, 59, 39, 4, 249, 113, 39, 4, 235, 62, 39, 4,
- 228, 246, 39, 4, 212, 220, 39, 4, 234, 19, 39, 4, 229, 126, 39, 4, 242,
- 140, 39, 4, 230, 202, 39, 4, 228, 175, 39, 4, 227, 251, 39, 4, 69, 39, 4,
- 215, 160, 39, 4, 240, 212, 39, 4, 240, 202, 39, 4, 213, 183, 39, 4, 213,
- 177, 39, 4, 225, 35, 39, 4, 251, 186, 39, 4, 251, 54, 39, 4, 231, 166,
- 39, 4, 233, 249, 39, 4, 231, 65, 39, 4, 243, 42, 39, 4, 243, 205, 39, 4,
- 214, 99, 39, 4, 216, 82, 39, 4, 217, 90, 39, 4, 247, 212, 39, 4, 247,
- 217, 39, 4, 232, 156, 39, 4, 223, 51, 39, 4, 246, 33, 39, 4, 229, 195,
- 39, 4, 219, 27, 39, 4, 220, 150, 39, 4, 212, 8, 39, 4, 212, 55, 39, 4,
- 249, 53, 39, 4, 235, 54, 39, 4, 228, 242, 39, 4, 212, 203, 39, 4, 233,
- 238, 39, 4, 229, 125, 39, 4, 242, 92, 39, 4, 230, 172, 39, 4, 228, 92,
- 39, 4, 227, 247, 39, 4, 75, 39, 4, 227, 62, 39, 4, 229, 86, 39, 4, 241,
- 54, 39, 4, 241, 42, 39, 4, 213, 214, 39, 4, 213, 203, 39, 4, 225, 150,
- 39, 4, 251, 188, 39, 4, 251, 128, 39, 4, 231, 168, 39, 4, 233, 252, 39,
- 4, 231, 68, 39, 4, 243, 45, 39, 4, 243, 44, 39, 4, 244, 12, 39, 4, 214,
- 119, 39, 4, 108, 39, 4, 217, 109, 39, 4, 247, 215, 39, 4, 247, 219, 39,
- 4, 232, 208, 39, 4, 223, 112, 39, 4, 247, 99, 39, 4, 229, 204, 39, 4,
- 219, 242, 39, 4, 220, 187, 39, 4, 212, 16, 39, 4, 212, 60, 39, 4, 249,
- 175, 39, 4, 235, 71, 39, 4, 228, 247, 39, 4, 212, 235, 39, 4, 234, 37,
- 39, 4, 229, 127, 39, 4, 242, 150, 39, 4, 230, 231, 39, 4, 228, 185, 39,
- 4, 227, 253, 39, 4, 74, 39, 4, 245, 108, 39, 4, 229, 146, 39, 4, 241,
- 222, 39, 4, 241, 193, 39, 4, 214, 6, 39, 4, 213, 253, 39, 4, 226, 96, 39,
- 4, 251, 192, 39, 4, 251, 251, 39, 4, 231, 180, 39, 4, 234, 1, 39, 4, 233,
- 255, 39, 4, 231, 74, 39, 4, 243, 52, 39, 4, 243, 50, 39, 4, 244, 123, 39,
- 4, 214, 232, 39, 4, 217, 229, 39, 4, 217, 148, 39, 4, 247, 225, 39, 4,
- 247, 222, 39, 4, 233, 82, 39, 4, 224, 21, 39, 4, 248, 41, 39, 4, 229,
- 220, 39, 4, 222, 100, 39, 4, 220, 243, 39, 4, 212, 87, 39, 4, 212, 67,
- 39, 4, 250, 124, 39, 4, 235, 127, 39, 4, 229, 9, 39, 4, 213, 38, 39, 4,
- 234, 188, 39, 4, 229, 137, 39, 4, 229, 133, 39, 4, 243, 38, 39, 4, 243,
- 27, 39, 4, 231, 156, 39, 4, 229, 187, 39, 4, 228, 17, 39, 4, 229, 161,
- 39, 4, 233, 46, 39, 249, 157, 39, 243, 200, 219, 69, 39, 224, 158, 77,
- 39, 4, 229, 203, 244, 164, 39, 4, 229, 203, 181, 39, 4, 229, 203, 219,
- 226, 39, 16, 244, 113, 39, 16, 234, 186, 39, 16, 217, 34, 39, 16, 229,
- 39, 39, 16, 252, 66, 39, 16, 244, 163, 39, 16, 218, 49, 39, 16, 248, 121,
- 39, 16, 247, 78, 39, 16, 233, 227, 39, 16, 216, 234, 39, 16, 247, 98, 39,
- 16, 235, 63, 39, 21, 212, 79, 39, 21, 116, 39, 21, 109, 39, 21, 166, 39,
- 21, 163, 39, 21, 180, 39, 21, 189, 39, 21, 198, 39, 21, 195, 39, 21, 200,
- 39, 4, 229, 203, 188, 39, 4, 229, 203, 247, 99, 33, 6, 1, 212, 83, 33, 3,
- 1, 212, 83, 33, 6, 1, 245, 245, 33, 3, 1, 245, 245, 33, 6, 1, 223, 202,
- 245, 247, 33, 3, 1, 223, 202, 245, 247, 33, 6, 1, 235, 183, 33, 3, 1,
- 235, 183, 33, 6, 1, 247, 113, 33, 3, 1, 247, 113, 33, 6, 1, 230, 210,
- 215, 175, 33, 3, 1, 230, 210, 215, 175, 33, 6, 1, 251, 64, 227, 67, 33,
- 3, 1, 251, 64, 227, 67, 33, 6, 1, 229, 169, 213, 22, 33, 3, 1, 229, 169,
- 213, 22, 33, 6, 1, 213, 19, 2, 252, 102, 213, 22, 33, 3, 1, 213, 19, 2,
- 252, 102, 213, 22, 33, 6, 1, 235, 181, 213, 49, 33, 3, 1, 235, 181, 213,
- 49, 33, 6, 1, 223, 202, 212, 203, 33, 3, 1, 223, 202, 212, 203, 33, 6, 1,
- 235, 181, 61, 33, 3, 1, 235, 181, 61, 33, 6, 1, 249, 193, 232, 221, 212,
- 174, 33, 3, 1, 249, 193, 232, 221, 212, 174, 33, 6, 1, 251, 137, 212,
- 174, 33, 3, 1, 251, 137, 212, 174, 33, 6, 1, 235, 181, 249, 193, 232,
- 221, 212, 174, 33, 3, 1, 235, 181, 249, 193, 232, 221, 212, 174, 33, 6,
- 1, 212, 237, 33, 3, 1, 212, 237, 33, 6, 1, 223, 202, 216, 136, 33, 3, 1,
- 223, 202, 216, 136, 33, 6, 1, 219, 236, 248, 41, 33, 3, 1, 219, 236, 248,
- 41, 33, 6, 1, 219, 236, 245, 131, 33, 3, 1, 219, 236, 245, 131, 33, 6, 1,
- 219, 236, 245, 117, 33, 3, 1, 219, 236, 245, 117, 33, 6, 1, 230, 214, 75,
- 33, 3, 1, 230, 214, 75, 33, 6, 1, 251, 163, 75, 33, 3, 1, 251, 163, 75,
- 33, 6, 1, 51, 230, 214, 75, 33, 3, 1, 51, 230, 214, 75, 33, 1, 230, 156,
- 75, 37, 33, 214, 84, 37, 33, 217, 201, 231, 4, 52, 37, 33, 240, 201, 231,
- 4, 52, 37, 33, 217, 101, 231, 4, 52, 220, 21, 253, 132, 37, 33, 234, 198,
- 37, 33, 226, 101, 33, 234, 198, 33, 226, 101, 33, 6, 1, 246, 1, 33, 3, 1,
- 246, 1, 33, 6, 1, 245, 238, 33, 3, 1, 245, 238, 33, 6, 1, 212, 45, 33, 3,
- 1, 212, 45, 33, 6, 1, 250, 140, 33, 3, 1, 250, 140, 33, 6, 1, 245, 237,
- 33, 3, 1, 245, 237, 33, 6, 1, 217, 230, 2, 231, 37, 101, 33, 3, 1, 217,
- 230, 2, 231, 37, 101, 33, 6, 1, 216, 43, 33, 3, 1, 216, 43, 33, 6, 1,
- 216, 119, 33, 3, 1, 216, 119, 33, 6, 1, 216, 123, 33, 3, 1, 216, 123, 33,
- 6, 1, 217, 235, 33, 3, 1, 217, 235, 33, 6, 1, 240, 190, 33, 3, 1, 240,
- 190, 33, 6, 1, 220, 132, 33, 3, 1, 220, 132, 20, 1, 61, 20, 1, 181, 20,
- 1, 69, 20, 1, 233, 238, 20, 1, 245, 165, 20, 1, 224, 1, 20, 1, 218, 35,
- 20, 1, 75, 20, 1, 228, 10, 20, 1, 72, 20, 1, 233, 157, 20, 1, 193, 20, 1,
- 223, 136, 20, 1, 223, 182, 20, 1, 233, 73, 20, 1, 231, 144, 20, 1, 218,
- 49, 20, 1, 229, 226, 20, 1, 229, 14, 20, 1, 183, 20, 1, 218, 205, 20, 1,
- 230, 172, 20, 1, 220, 207, 20, 1, 220, 117, 20, 1, 220, 217, 20, 1, 221,
- 44, 20, 1, 233, 177, 20, 1, 234, 162, 20, 1, 228, 64, 20, 1, 228, 92, 20,
- 1, 228, 241, 20, 1, 212, 217, 20, 1, 220, 150, 20, 1, 212, 178, 20, 1,
- 186, 20, 1, 228, 120, 20, 1, 234, 148, 20, 1, 226, 27, 20, 1, 229, 7, 20,
- 1, 228, 101, 20, 1, 225, 30, 20, 1, 213, 180, 20, 1, 226, 86, 20, 1, 244,
- 116, 20, 1, 223, 51, 20, 1, 232, 156, 20, 1, 231, 42, 20, 1, 229, 64, 20,
- 1, 223, 204, 20, 1, 224, 61, 20, 1, 234, 171, 20, 1, 229, 93, 20, 1, 229,
- 141, 20, 1, 229, 159, 20, 1, 220, 187, 20, 1, 225, 33, 20, 1, 243, 205,
- 20, 1, 244, 6, 20, 1, 214, 49, 20, 1, 205, 20, 1, 233, 13, 20, 1, 225,
- 240, 20, 1, 232, 174, 20, 1, 234, 37, 20, 1, 231, 177, 20, 1, 223, 233,
- 20, 1, 231, 122, 20, 1, 188, 20, 1, 217, 71, 20, 1, 234, 101, 20, 1, 230,
- 231, 20, 1, 231, 185, 20, 1, 217, 183, 20, 1, 234, 4, 20, 1, 217, 200,
- 20, 1, 228, 93, 20, 1, 222, 166, 20, 1, 244, 160, 20, 1, 234, 6, 20, 1,
- 234, 33, 20, 37, 152, 234, 14, 20, 37, 152, 216, 74, 20, 229, 13, 20,
- 243, 200, 219, 69, 20, 249, 164, 20, 249, 157, 20, 221, 70, 20, 224, 158,
- 77, 59, 1, 250, 33, 160, 212, 245, 225, 193, 59, 1, 250, 33, 160, 213,
- 59, 225, 193, 59, 1, 250, 33, 160, 212, 245, 221, 7, 59, 1, 250, 33, 160,
- 213, 59, 221, 7, 59, 1, 250, 33, 160, 212, 245, 224, 175, 59, 1, 250, 33,
- 160, 213, 59, 224, 175, 59, 1, 250, 33, 160, 212, 245, 223, 51, 59, 1,
- 250, 33, 160, 213, 59, 223, 51, 59, 1, 244, 244, 246, 72, 160, 134, 59,
- 1, 124, 246, 72, 160, 134, 59, 1, 231, 38, 246, 72, 160, 134, 59, 1, 115,
- 246, 72, 160, 134, 59, 1, 244, 243, 246, 72, 160, 134, 59, 1, 244, 244,
- 246, 72, 233, 63, 160, 134, 59, 1, 124, 246, 72, 233, 63, 160, 134, 59,
- 1, 231, 38, 246, 72, 233, 63, 160, 134, 59, 1, 115, 246, 72, 233, 63,
- 160, 134, 59, 1, 244, 243, 246, 72, 233, 63, 160, 134, 59, 1, 244, 244,
- 233, 63, 160, 134, 59, 1, 124, 233, 63, 160, 134, 59, 1, 231, 38, 233,
- 63, 160, 134, 59, 1, 115, 233, 63, 160, 134, 59, 1, 244, 243, 233, 63,
- 160, 134, 59, 1, 62, 71, 134, 59, 1, 62, 220, 23, 59, 1, 62, 199, 134,
- 59, 1, 232, 163, 46, 249, 100, 254, 18, 59, 1, 224, 48, 114, 68, 59, 1,
- 224, 48, 119, 68, 59, 1, 224, 48, 244, 254, 77, 59, 1, 224, 48, 235, 191,
- 244, 254, 77, 59, 1, 115, 235, 191, 244, 254, 77, 59, 1, 219, 51, 24,
- 124, 216, 241, 59, 1, 219, 51, 24, 115, 216, 241, 7, 6, 1, 245, 156, 254,
- 78, 7, 3, 1, 245, 156, 254, 78, 7, 6, 1, 245, 156, 254, 103, 7, 3, 1,
- 245, 156, 254, 103, 7, 6, 1, 241, 191, 7, 3, 1, 241, 191, 7, 6, 1, 216,
- 6, 7, 3, 1, 216, 6, 7, 6, 1, 216, 187, 7, 3, 1, 216, 187, 7, 6, 1, 249,
- 51, 7, 3, 1, 249, 51, 7, 6, 1, 249, 52, 2, 249, 157, 7, 3, 1, 249, 52, 2,
- 249, 157, 7, 1, 3, 6, 244, 230, 7, 1, 3, 6, 197, 7, 6, 1, 254, 232, 7, 3,
- 1, 254, 232, 7, 6, 1, 253, 240, 7, 3, 1, 253, 240, 7, 6, 1, 253, 108, 7,
- 3, 1, 253, 108, 7, 6, 1, 253, 92, 7, 3, 1, 253, 92, 7, 6, 1, 253, 93, 2,
- 199, 134, 7, 3, 1, 253, 93, 2, 199, 134, 7, 6, 1, 253, 83, 7, 3, 1, 253,
- 83, 7, 6, 1, 223, 202, 250, 253, 2, 247, 74, 7, 3, 1, 223, 202, 250, 253,
- 2, 247, 74, 7, 6, 1, 235, 28, 2, 90, 7, 3, 1, 235, 28, 2, 90, 7, 6, 1,
- 235, 28, 2, 247, 207, 90, 7, 3, 1, 235, 28, 2, 247, 207, 90, 7, 6, 1,
- 235, 28, 2, 219, 45, 24, 247, 207, 90, 7, 3, 1, 235, 28, 2, 219, 45, 24,
- 247, 207, 90, 7, 6, 1, 251, 63, 150, 7, 3, 1, 251, 63, 150, 7, 6, 1, 233,
- 171, 2, 124, 90, 7, 3, 1, 233, 171, 2, 124, 90, 7, 6, 1, 157, 2, 184,
- 219, 45, 226, 244, 7, 3, 1, 157, 2, 184, 219, 45, 226, 244, 7, 6, 1, 157,
- 2, 232, 177, 7, 3, 1, 157, 2, 232, 177, 7, 6, 1, 227, 49, 7, 3, 1, 227,
- 49, 7, 6, 1, 226, 230, 2, 219, 45, 217, 93, 247, 246, 7, 3, 1, 226, 230,
- 2, 219, 45, 217, 93, 247, 246, 7, 6, 1, 226, 230, 2, 244, 22, 7, 3, 1,
- 226, 230, 2, 244, 22, 7, 6, 1, 226, 230, 2, 219, 161, 218, 27, 7, 3, 1,
- 226, 230, 2, 219, 161, 218, 27, 7, 6, 1, 224, 241, 2, 219, 45, 217, 93,
- 247, 246, 7, 3, 1, 224, 241, 2, 219, 45, 217, 93, 247, 246, 7, 6, 1, 224,
- 241, 2, 247, 207, 90, 7, 3, 1, 224, 241, 2, 247, 207, 90, 7, 6, 1, 224,
- 113, 223, 88, 7, 3, 1, 224, 113, 223, 88, 7, 6, 1, 223, 41, 223, 88, 7,
- 3, 1, 223, 41, 223, 88, 7, 6, 1, 215, 80, 2, 247, 207, 90, 7, 3, 1, 215,
- 80, 2, 247, 207, 90, 7, 6, 1, 214, 90, 7, 3, 1, 214, 90, 7, 6, 1, 214,
- 126, 212, 152, 7, 3, 1, 214, 126, 212, 152, 7, 6, 1, 217, 105, 2, 90, 7,
- 3, 1, 217, 105, 2, 90, 7, 6, 1, 217, 105, 2, 219, 45, 217, 93, 247, 246,
- 7, 3, 1, 217, 105, 2, 219, 45, 217, 93, 247, 246, 7, 6, 1, 214, 222, 7,
- 3, 1, 214, 222, 7, 6, 1, 245, 30, 7, 3, 1, 245, 30, 7, 6, 1, 235, 169, 7,
- 3, 1, 235, 169, 7, 6, 1, 249, 146, 7, 3, 1, 249, 146, 59, 1, 215, 104, 7,
- 3, 1, 246, 24, 7, 3, 1, 232, 142, 7, 3, 1, 230, 150, 7, 3, 1, 228, 57, 7,
- 3, 1, 223, 40, 7, 1, 3, 6, 223, 40, 7, 3, 1, 216, 72, 7, 3, 1, 215, 167,
- 7, 6, 1, 235, 210, 249, 3, 7, 3, 1, 235, 210, 249, 3, 7, 6, 1, 235, 210,
- 244, 230, 7, 3, 1, 235, 210, 244, 230, 7, 6, 1, 235, 210, 243, 177, 7, 6,
- 1, 216, 58, 235, 210, 243, 177, 7, 3, 1, 216, 58, 235, 210, 243, 177, 7,
- 6, 1, 216, 58, 150, 7, 3, 1, 216, 58, 150, 7, 6, 1, 235, 210, 149, 7, 3,
- 1, 235, 210, 149, 7, 6, 1, 235, 210, 197, 7, 3, 1, 235, 210, 197, 7, 6,
- 1, 235, 210, 218, 99, 7, 3, 1, 235, 210, 218, 99, 59, 1, 115, 249, 224,
- 254, 174, 59, 1, 249, 164, 59, 1, 220, 175, 245, 61, 52, 7, 6, 1, 222,
- 170, 7, 3, 1, 222, 170, 7, 6, 1, 216, 58, 242, 41, 7, 3, 1, 233, 171, 2,
- 223, 207, 241, 38, 24, 251, 218, 7, 6, 1, 230, 98, 2, 247, 246, 7, 3, 1,
- 230, 98, 2, 247, 246, 7, 6, 1, 243, 178, 2, 227, 112, 90, 7, 3, 1, 243,
- 178, 2, 227, 112, 90, 7, 6, 1, 235, 28, 2, 227, 112, 90, 7, 3, 1, 235,
- 28, 2, 227, 112, 90, 7, 6, 1, 230, 98, 2, 227, 112, 90, 7, 3, 1, 230, 98,
- 2, 227, 112, 90, 7, 6, 1, 224, 113, 2, 227, 112, 90, 7, 3, 1, 224, 113,
- 2, 227, 112, 90, 7, 6, 1, 223, 4, 2, 227, 112, 90, 7, 3, 1, 223, 4, 2,
- 227, 112, 90, 7, 1, 3, 6, 216, 58, 183, 7, 245, 66, 1, 223, 202, 244,
- 230, 7, 245, 66, 1, 223, 202, 226, 229, 7, 245, 66, 1, 235, 191, 183, 7,
- 245, 66, 1, 240, 146, 232, 182, 7, 245, 66, 1, 253, 193, 183, 218, 175,
- 230, 32, 1, 61, 218, 175, 230, 32, 1, 72, 218, 175, 230, 32, 5, 246, 3,
- 218, 175, 230, 32, 1, 69, 218, 175, 230, 32, 1, 74, 218, 175, 230, 32, 1,
- 75, 218, 175, 230, 32, 5, 241, 236, 218, 175, 230, 32, 1, 234, 37, 218,
- 175, 230, 32, 1, 234, 113, 218, 175, 230, 32, 1, 242, 150, 218, 175, 230,
- 32, 1, 242, 200, 218, 175, 230, 32, 5, 253, 242, 218, 175, 230, 32, 1,
- 249, 175, 218, 175, 230, 32, 1, 250, 23, 218, 175, 230, 32, 1, 235, 71,
- 218, 175, 230, 32, 1, 235, 111, 218, 175, 230, 32, 1, 216, 95, 218, 175,
- 230, 32, 1, 216, 100, 218, 175, 230, 32, 1, 248, 56, 218, 175, 230, 32,
- 1, 248, 65, 218, 175, 230, 32, 1, 108, 218, 175, 230, 32, 1, 217, 109,
- 218, 175, 230, 32, 1, 247, 99, 218, 175, 230, 32, 1, 247, 215, 218, 175,
- 230, 32, 1, 228, 185, 218, 175, 230, 32, 1, 225, 150, 218, 175, 230, 32,
- 1, 225, 253, 218, 175, 230, 32, 1, 251, 128, 218, 175, 230, 32, 1, 251,
- 188, 218, 175, 230, 32, 1, 230, 231, 218, 175, 230, 32, 1, 223, 112, 218,
- 175, 230, 32, 1, 232, 208, 218, 175, 230, 32, 1, 223, 73, 218, 175, 230,
- 32, 1, 219, 242, 218, 175, 230, 32, 1, 241, 54, 218, 175, 230, 32, 30, 5,
- 61, 218, 175, 230, 32, 30, 5, 72, 218, 175, 230, 32, 30, 5, 69, 218, 175,
- 230, 32, 30, 5, 74, 218, 175, 230, 32, 30, 5, 227, 49, 218, 175, 230, 32,
- 225, 146, 231, 221, 218, 175, 230, 32, 225, 146, 231, 220, 218, 175, 230,
- 32, 225, 146, 231, 219, 218, 175, 230, 32, 225, 146, 231, 218, 228, 167,
- 235, 237, 243, 228, 122, 224, 166, 228, 167, 235, 237, 243, 228, 122,
- 242, 9, 228, 167, 235, 237, 243, 228, 133, 224, 164, 228, 167, 235, 237,
- 243, 228, 122, 220, 45, 228, 167, 235, 237, 243, 228, 122, 245, 145, 228,
- 167, 235, 237, 243, 228, 133, 220, 44, 228, 167, 235, 237, 224, 167, 77,
- 228, 167, 235, 237, 225, 172, 77, 228, 167, 235, 237, 223, 29, 77, 228,
- 167, 235, 237, 224, 168, 77, 226, 20, 1, 181, 226, 20, 1, 234, 138, 226,
- 20, 1, 243, 110, 226, 20, 1, 229, 159, 226, 20, 1, 250, 219, 226, 20, 1,
- 250, 92, 226, 20, 1, 235, 139, 226, 20, 1, 228, 23, 226, 20, 1, 218, 52,
- 226, 20, 1, 217, 161, 226, 20, 1, 248, 164, 226, 20, 1, 205, 226, 20, 1,
- 193, 226, 20, 1, 226, 23, 226, 20, 1, 252, 107, 226, 20, 1, 188, 226, 20,
- 1, 216, 141, 226, 20, 1, 216, 133, 226, 20, 1, 245, 249, 226, 20, 1, 214,
- 49, 226, 20, 1, 212, 75, 226, 20, 1, 212, 109, 226, 20, 1, 3, 61, 226,
- 20, 1, 186, 226, 20, 1, 203, 226, 20, 1, 233, 157, 226, 20, 1, 221, 24,
- 226, 20, 1, 222, 202, 226, 20, 1, 159, 226, 20, 1, 61, 226, 20, 1, 72,
- 226, 20, 1, 69, 226, 20, 1, 74, 226, 20, 1, 75, 226, 20, 1, 224, 232,
- 226, 20, 1, 213, 153, 226, 20, 1, 244, 164, 226, 20, 1, 243, 5, 226, 20,
- 1, 245, 165, 226, 20, 219, 18, 1, 214, 49, 226, 20, 219, 18, 1, 186, 226,
- 20, 1, 216, 115, 226, 20, 1, 216, 105, 226, 20, 1, 248, 86, 226, 20, 1,
- 228, 198, 226, 20, 1, 254, 50, 186, 226, 20, 1, 214, 115, 221, 24, 226,
- 20, 1, 214, 116, 159, 226, 20, 1, 253, 138, 244, 164, 226, 20, 219, 18,
- 1, 203, 226, 20, 218, 225, 1, 203, 226, 20, 1, 250, 187, 226, 20, 220,
- 81, 241, 220, 77, 226, 20, 51, 241, 220, 77, 226, 20, 152, 221, 17, 226,
- 20, 152, 51, 221, 17, 169, 5, 253, 242, 169, 5, 214, 128, 169, 1, 61,
- 169, 1, 254, 232, 169, 1, 72, 169, 1, 236, 28, 169, 1, 69, 169, 1, 215,
- 92, 169, 1, 161, 149, 169, 1, 161, 223, 82, 169, 1, 161, 150, 169, 1,
- 161, 232, 214, 169, 1, 74, 169, 1, 245, 165, 169, 1, 254, 108, 169, 1,
- 75, 169, 1, 227, 49, 169, 1, 253, 108, 169, 1, 181, 169, 1, 234, 138,
- 169, 1, 243, 110, 169, 1, 242, 225, 169, 1, 229, 159, 169, 1, 250, 219,
- 169, 1, 250, 92, 169, 1, 235, 139, 169, 1, 235, 115, 169, 1, 228, 23,
- 169, 1, 216, 115, 169, 1, 216, 105, 169, 1, 248, 86, 169, 1, 248, 70,
- 169, 1, 228, 198, 169, 1, 218, 52, 169, 1, 217, 161, 169, 1, 248, 164,
- 169, 1, 247, 232, 169, 1, 205, 169, 1, 193, 169, 1, 226, 23, 169, 1, 252,
- 107, 169, 1, 251, 195, 169, 1, 188, 169, 1, 186, 169, 1, 203, 169, 1,
- 233, 157, 169, 1, 215, 1, 169, 1, 221, 24, 169, 1, 219, 157, 169, 1, 222,
- 202, 169, 1, 159, 169, 1, 232, 213, 169, 249, 133, 5, 242, 25, 169, 30,
- 5, 254, 232, 169, 30, 5, 72, 169, 30, 5, 236, 28, 169, 30, 5, 69, 169,
- 30, 5, 215, 92, 169, 30, 5, 161, 149, 169, 30, 5, 161, 223, 82, 169, 30,
- 5, 161, 150, 169, 30, 5, 161, 232, 214, 169, 30, 5, 74, 169, 30, 5, 245,
- 165, 169, 30, 5, 254, 108, 169, 30, 5, 75, 169, 30, 5, 227, 49, 169, 30,
- 5, 253, 108, 169, 5, 214, 133, 169, 248, 123, 169, 51, 248, 123, 169, 21,
- 212, 79, 169, 21, 116, 169, 21, 109, 169, 21, 166, 169, 21, 163, 169, 21,
- 180, 169, 21, 189, 169, 21, 198, 169, 21, 195, 169, 21, 200, 37, 82, 21,
- 212, 79, 37, 82, 21, 116, 37, 82, 21, 109, 37, 82, 21, 166, 37, 82, 21,
- 163, 37, 82, 21, 180, 37, 82, 21, 189, 37, 82, 21, 198, 37, 82, 21, 195,
- 37, 82, 21, 200, 37, 82, 1, 61, 37, 82, 1, 69, 37, 82, 1, 181, 37, 82, 1,
- 205, 37, 82, 1, 193, 37, 82, 1, 203, 37, 82, 1, 214, 154, 37, 82, 5, 253,
- 91, 82, 5, 219, 205, 250, 187, 82, 5, 250, 188, 214, 133, 82, 5, 51, 250,
- 188, 214, 133, 82, 5, 250, 188, 109, 82, 5, 250, 188, 166, 82, 5, 250,
- 188, 253, 91, 82, 5, 225, 11, 82, 243, 76, 244, 72, 82, 250, 170, 82,
- 241, 214, 234, 194, 233, 14, 21, 212, 79, 234, 194, 233, 14, 21, 116,
- 234, 194, 233, 14, 21, 109, 234, 194, 233, 14, 21, 166, 234, 194, 233,
- 14, 21, 163, 234, 194, 233, 14, 21, 180, 234, 194, 233, 14, 21, 189, 234,
- 194, 233, 14, 21, 198, 234, 194, 233, 14, 21, 195, 234, 194, 233, 14, 21,
- 200, 234, 194, 233, 14, 1, 181, 234, 194, 233, 14, 1, 234, 138, 234, 194,
- 233, 14, 1, 243, 110, 234, 194, 233, 14, 1, 229, 159, 234, 194, 233, 14,
- 1, 222, 202, 234, 194, 233, 14, 1, 221, 24, 234, 194, 233, 14, 1, 212,
- 109, 234, 194, 233, 14, 1, 228, 23, 234, 194, 233, 14, 1, 218, 52, 234,
- 194, 233, 14, 1, 240, 214, 234, 194, 233, 14, 1, 205, 234, 194, 233, 14,
- 1, 193, 234, 194, 233, 14, 1, 226, 23, 234, 194, 233, 14, 1, 188, 234,
- 194, 233, 14, 1, 248, 164, 234, 194, 233, 14, 1, 252, 107, 234, 194, 233,
- 14, 1, 203, 234, 194, 233, 14, 1, 186, 234, 194, 233, 14, 1, 233, 157,
- 234, 194, 233, 14, 1, 214, 49, 234, 194, 233, 14, 1, 217, 161, 234, 194,
- 233, 14, 1, 159, 234, 194, 233, 14, 1, 215, 1, 234, 194, 233, 14, 1, 250,
- 219, 234, 194, 233, 14, 1, 61, 234, 194, 233, 14, 1, 227, 99, 234, 194,
- 233, 14, 1, 72, 234, 194, 233, 14, 1, 227, 49, 234, 194, 233, 14, 30,
- 215, 183, 234, 194, 233, 14, 30, 74, 234, 194, 233, 14, 30, 69, 234, 194,
- 233, 14, 30, 245, 165, 234, 194, 233, 14, 30, 75, 234, 194, 233, 14, 160,
- 225, 163, 234, 194, 233, 14, 160, 250, 200, 234, 194, 233, 14, 160, 250,
- 201, 225, 163, 234, 194, 233, 14, 5, 249, 20, 234, 194, 233, 14, 5, 220,
- 125, 223, 243, 1, 181, 223, 243, 1, 243, 110, 223, 243, 1, 229, 159, 223,
- 243, 1, 218, 52, 223, 243, 1, 248, 164, 223, 243, 1, 205, 223, 243, 1,
- 193, 223, 243, 1, 252, 107, 223, 243, 1, 188, 223, 243, 1, 250, 219, 223,
- 243, 1, 235, 139, 223, 243, 1, 228, 23, 223, 243, 1, 222, 202, 223, 243,
- 1, 203, 223, 243, 1, 233, 157, 223, 243, 1, 186, 223, 243, 1, 214, 49,
- 223, 243, 1, 159, 223, 243, 1, 231, 187, 223, 243, 1, 229, 141, 223, 243,
- 1, 229, 228, 223, 243, 1, 227, 254, 223, 243, 1, 61, 223, 243, 30, 5, 72,
- 223, 243, 30, 5, 69, 223, 243, 30, 5, 74, 223, 243, 30, 5, 254, 108, 223,
- 243, 30, 5, 75, 223, 243, 30, 5, 253, 108, 223, 243, 30, 5, 245, 22, 223,
- 243, 30, 5, 245, 189, 223, 243, 249, 133, 5, 229, 161, 223, 243, 249,
- 133, 5, 204, 223, 243, 249, 133, 5, 149, 223, 243, 249, 133, 5, 242, 41,
- 223, 243, 214, 133, 223, 243, 222, 92, 77, 23, 97, 217, 51, 23, 97, 217,
- 50, 23, 97, 217, 48, 23, 97, 217, 53, 23, 97, 223, 174, 23, 97, 223, 158,
- 23, 97, 223, 153, 23, 97, 223, 155, 23, 97, 223, 171, 23, 97, 223, 164,
- 23, 97, 223, 157, 23, 97, 223, 176, 23, 97, 223, 159, 23, 97, 223, 178,
- 23, 97, 223, 175, 23, 97, 231, 26, 23, 97, 231, 17, 23, 97, 231, 20, 23,
- 97, 225, 212, 23, 97, 225, 223, 23, 97, 225, 224, 23, 97, 219, 142, 23,
- 97, 236, 41, 23, 97, 236, 48, 23, 97, 219, 153, 23, 97, 219, 140, 23, 97,
- 226, 6, 23, 97, 241, 153, 23, 97, 219, 137, 144, 5, 226, 155, 144, 5,
- 250, 121, 144, 5, 233, 90, 144, 5, 213, 228, 144, 1, 61, 144, 1, 240,
- 146, 234, 197, 144, 1, 72, 144, 1, 236, 28, 144, 1, 69, 144, 1, 226, 214,
- 250, 97, 144, 1, 229, 160, 233, 52, 144, 1, 229, 160, 233, 53, 224, 34,
- 144, 1, 74, 144, 1, 254, 108, 144, 1, 75, 144, 1, 181, 144, 1, 235, 17,
- 222, 144, 144, 1, 235, 17, 230, 136, 144, 1, 243, 110, 144, 1, 243, 111,
- 230, 136, 144, 1, 229, 159, 144, 1, 250, 219, 144, 1, 250, 220, 230, 136,
- 144, 1, 235, 139, 144, 1, 228, 24, 230, 136, 144, 1, 235, 140, 232, 12,
- 144, 1, 228, 23, 144, 1, 216, 115, 144, 1, 216, 116, 232, 12, 144, 1,
- 248, 86, 144, 1, 248, 87, 232, 12, 144, 1, 230, 46, 230, 136, 144, 1,
- 218, 52, 144, 1, 218, 53, 230, 136, 144, 1, 248, 164, 144, 1, 248, 165,
- 232, 12, 144, 1, 205, 144, 1, 193, 144, 1, 226, 214, 230, 136, 144, 1,
- 252, 107, 144, 1, 252, 108, 230, 136, 144, 1, 188, 144, 1, 186, 144, 1,
- 203, 144, 1, 224, 77, 254, 115, 144, 1, 233, 157, 144, 1, 214, 49, 144,
- 1, 222, 203, 230, 136, 144, 1, 222, 203, 232, 12, 144, 1, 222, 202, 144,
- 1, 159, 144, 5, 250, 122, 217, 203, 144, 30, 5, 217, 254, 144, 30, 5,
- 216, 246, 144, 30, 5, 213, 178, 144, 30, 5, 213, 179, 231, 133, 144, 30,
- 5, 218, 248, 144, 30, 5, 218, 249, 231, 121, 144, 30, 5, 218, 16, 144,
- 30, 5, 247, 146, 230, 135, 144, 30, 5, 226, 59, 144, 249, 133, 5, 234,
- 164, 144, 249, 133, 5, 226, 71, 144, 249, 133, 5, 250, 207, 144, 226,
- 167, 144, 42, 223, 221, 144, 46, 223, 221, 144, 226, 203, 254, 26, 144,
- 226, 203, 232, 29, 144, 226, 203, 232, 146, 144, 226, 203, 213, 223, 144,
- 226, 203, 226, 168, 144, 226, 203, 232, 234, 144, 226, 203, 232, 140,
- 144, 226, 203, 254, 154, 144, 226, 203, 254, 155, 254, 154, 144, 226,
- 203, 225, 183, 144, 216, 58, 226, 203, 225, 183, 144, 226, 164, 144, 21,
- 212, 79, 144, 21, 116, 144, 21, 109, 144, 21, 166, 144, 21, 163, 144, 21,
- 180, 144, 21, 189, 144, 21, 198, 144, 21, 195, 144, 21, 200, 144, 226,
- 203, 217, 22, 216, 70, 144, 226, 203, 235, 165, 162, 1, 61, 162, 1, 72,
- 162, 1, 69, 162, 1, 74, 162, 1, 254, 108, 162, 1, 75, 162, 1, 181, 162,
- 1, 234, 138, 162, 1, 243, 110, 162, 1, 242, 225, 162, 1, 229, 75, 162, 1,
- 229, 159, 162, 1, 250, 92, 162, 1, 250, 49, 162, 1, 235, 139, 162, 1,
- 235, 115, 162, 1, 229, 66, 162, 1, 229, 68, 162, 1, 229, 67, 162, 1, 218,
- 52, 162, 1, 217, 161, 162, 1, 248, 164, 162, 1, 247, 232, 162, 1, 228,
- 62, 162, 1, 205, 162, 1, 248, 86, 162, 1, 193, 162, 1, 225, 100, 162, 1,
- 226, 23, 162, 1, 252, 107, 162, 1, 251, 195, 162, 1, 230, 165, 162, 1,
- 188, 162, 1, 252, 31, 162, 1, 186, 162, 1, 203, 162, 1, 233, 157, 162, 1,
- 215, 1, 162, 1, 219, 157, 162, 1, 222, 202, 162, 1, 159, 162, 30, 5, 254,
- 232, 162, 30, 5, 72, 162, 30, 5, 236, 28, 162, 30, 5, 245, 152, 162, 30,
- 5, 69, 162, 30, 5, 227, 99, 162, 30, 5, 75, 162, 30, 5, 254, 108, 162,
- 30, 5, 253, 108, 162, 30, 5, 215, 183, 162, 249, 133, 5, 186, 162, 249,
- 133, 5, 203, 162, 249, 133, 5, 233, 157, 162, 249, 133, 5, 214, 49, 162,
- 1, 40, 235, 27, 162, 1, 40, 243, 177, 162, 1, 40, 229, 161, 162, 249,
- 133, 5, 40, 229, 161, 162, 1, 40, 250, 93, 162, 1, 40, 218, 99, 162, 1,
- 40, 204, 162, 1, 40, 226, 229, 162, 1, 40, 213, 105, 162, 1, 40, 149,
- 162, 1, 40, 150, 162, 1, 40, 219, 158, 162, 249, 133, 5, 40, 183, 162,
- 249, 133, 5, 40, 242, 41, 162, 21, 212, 79, 162, 21, 116, 162, 21, 109,
- 162, 21, 166, 162, 21, 163, 162, 21, 180, 162, 21, 189, 162, 21, 198,
- 162, 21, 195, 162, 21, 200, 162, 225, 27, 219, 183, 162, 225, 27, 248,
- 123, 162, 225, 27, 51, 248, 123, 162, 225, 27, 216, 169, 248, 123, 64, 1,
- 234, 132, 243, 110, 64, 1, 234, 132, 250, 219, 64, 1, 234, 132, 250, 92,
- 64, 1, 234, 132, 235, 139, 64, 1, 234, 132, 235, 115, 64, 1, 234, 132,
- 228, 23, 64, 1, 234, 132, 216, 115, 64, 1, 234, 132, 216, 105, 64, 1,
- 234, 132, 248, 86, 64, 1, 234, 132, 248, 70, 64, 1, 234, 132, 247, 232,
- 64, 1, 234, 132, 205, 64, 1, 234, 132, 222, 202, 64, 1, 234, 132, 159,
- 64, 1, 234, 132, 241, 174, 64, 1, 234, 132, 244, 164, 64, 59, 1, 234,
- 132, 224, 2, 64, 1, 234, 132, 213, 153, 64, 1, 234, 132, 212, 109, 64, 1,
- 234, 132, 203, 64, 232, 198, 234, 132, 227, 117, 64, 232, 198, 234, 132,
- 224, 188, 64, 232, 198, 234, 132, 241, 107, 64, 16, 254, 98, 244, 253,
- 64, 16, 254, 98, 116, 64, 16, 254, 98, 109, 64, 1, 254, 98, 203, 64, 5,
- 226, 151, 234, 218, 216, 241, 38, 190, 1, 115, 234, 37, 38, 190, 1, 124,
- 234, 37, 38, 190, 1, 115, 234, 113, 38, 190, 1, 124, 234, 113, 38, 190,
- 1, 115, 234, 120, 38, 190, 1, 124, 234, 120, 38, 190, 1, 115, 242, 150,
- 38, 190, 1, 124, 242, 150, 38, 190, 1, 115, 229, 90, 38, 190, 1, 124,
- 229, 90, 38, 190, 1, 115, 249, 175, 38, 190, 1, 124, 249, 175, 38, 190,
- 1, 115, 250, 23, 38, 190, 1, 124, 250, 23, 38, 190, 1, 115, 219, 242, 38,
- 190, 1, 124, 219, 242, 38, 190, 1, 115, 227, 253, 38, 190, 1, 124, 227,
- 253, 38, 190, 1, 115, 247, 99, 38, 190, 1, 124, 247, 99, 38, 190, 1, 115,
- 108, 38, 190, 1, 124, 108, 38, 190, 1, 115, 217, 109, 38, 190, 1, 124,
- 217, 109, 38, 190, 1, 115, 228, 185, 38, 190, 1, 124, 228, 185, 38, 190,
- 1, 115, 251, 128, 38, 190, 1, 124, 251, 128, 38, 190, 1, 115, 225, 150,
- 38, 190, 1, 124, 225, 150, 38, 190, 1, 115, 225, 253, 38, 190, 1, 124,
- 225, 253, 38, 190, 1, 115, 244, 12, 38, 190, 1, 124, 244, 12, 38, 190, 1,
- 115, 230, 231, 38, 190, 1, 124, 230, 231, 38, 190, 1, 115, 212, 235, 38,
- 190, 1, 124, 212, 235, 38, 190, 1, 115, 223, 112, 38, 190, 1, 124, 223,
- 112, 38, 190, 1, 115, 232, 208, 38, 190, 1, 124, 232, 208, 38, 190, 1,
- 115, 214, 119, 38, 190, 1, 124, 214, 119, 38, 190, 1, 115, 241, 54, 38,
- 190, 1, 124, 241, 54, 38, 190, 1, 115, 75, 38, 190, 1, 124, 75, 38, 190,
- 232, 9, 234, 235, 38, 190, 30, 254, 232, 38, 190, 30, 72, 38, 190, 30,
- 215, 183, 38, 190, 30, 69, 38, 190, 30, 74, 38, 190, 30, 75, 38, 190,
- 232, 9, 234, 115, 38, 190, 30, 240, 111, 38, 190, 30, 215, 182, 38, 190,
- 30, 215, 196, 38, 190, 30, 253, 106, 38, 190, 30, 253, 83, 38, 190, 30,
- 254, 32, 38, 190, 30, 254, 45, 38, 190, 160, 232, 9, 245, 137, 38, 190,
- 160, 232, 9, 228, 61, 38, 190, 160, 232, 9, 217, 109, 38, 190, 160, 232,
- 9, 219, 228, 38, 190, 16, 234, 22, 38, 190, 16, 228, 61, 38, 190, 16,
- 222, 168, 38, 190, 16, 241, 55, 241, 50, 38, 190, 16, 234, 31, 234, 30,
- 28, 4, 216, 98, 28, 4, 216, 101, 28, 4, 216, 104, 28, 4, 216, 102, 28, 4,
- 216, 103, 28, 4, 216, 100, 28, 4, 248, 64, 28, 4, 248, 66, 28, 4, 248,
- 69, 28, 4, 248, 67, 28, 4, 248, 68, 28, 4, 248, 65, 28, 4, 245, 239, 28,
- 4, 245, 242, 28, 4, 245, 248, 28, 4, 245, 246, 28, 4, 245, 247, 28, 4,
- 245, 240, 28, 4, 250, 138, 28, 4, 250, 132, 28, 4, 250, 134, 28, 4, 250,
- 137, 28, 4, 250, 135, 28, 4, 250, 136, 28, 4, 250, 133, 28, 4, 252, 31,
- 28, 4, 252, 10, 28, 4, 252, 22, 28, 4, 252, 30, 28, 4, 252, 25, 28, 4,
- 252, 26, 28, 4, 252, 14, 231, 140, 231, 194, 1, 234, 28, 231, 140, 231,
- 194, 1, 222, 168, 231, 140, 231, 194, 1, 233, 133, 231, 140, 231, 194, 1,
- 230, 241, 231, 140, 231, 194, 1, 193, 231, 140, 231, 194, 1, 205, 231,
- 140, 231, 194, 1, 250, 39, 231, 140, 231, 194, 1, 217, 44, 231, 140, 231,
- 194, 1, 234, 109, 231, 140, 231, 194, 1, 229, 80, 231, 140, 231, 194, 1,
- 217, 103, 231, 140, 231, 194, 1, 214, 44, 231, 140, 231, 194, 1, 213, 58,
- 231, 140, 231, 194, 1, 240, 206, 231, 140, 231, 194, 1, 215, 160, 231,
- 140, 231, 194, 1, 72, 231, 140, 231, 194, 1, 226, 18, 231, 140, 231, 194,
- 1, 253, 118, 231, 140, 231, 194, 1, 242, 143, 231, 140, 231, 194, 1, 235,
- 114, 231, 140, 231, 194, 1, 224, 57, 231, 140, 231, 194, 1, 252, 107,
- 231, 140, 231, 194, 1, 235, 103, 231, 140, 231, 194, 1, 247, 171, 231,
- 140, 231, 194, 1, 242, 197, 231, 140, 231, 194, 1, 247, 213, 231, 140,
- 231, 194, 1, 251, 194, 231, 140, 231, 194, 1, 234, 29, 232, 181, 231,
- 140, 231, 194, 1, 233, 134, 232, 181, 231, 140, 231, 194, 1, 230, 242,
- 232, 181, 231, 140, 231, 194, 1, 226, 214, 232, 181, 231, 140, 231, 194,
- 1, 230, 46, 232, 181, 231, 140, 231, 194, 1, 217, 45, 232, 181, 231, 140,
- 231, 194, 1, 229, 81, 232, 181, 231, 140, 231, 194, 1, 240, 146, 232,
- 181, 231, 140, 231, 194, 30, 5, 227, 61, 231, 140, 231, 194, 30, 5, 235,
- 249, 231, 140, 231, 194, 30, 5, 254, 31, 231, 140, 231, 194, 30, 5, 213,
- 29, 231, 140, 231, 194, 30, 5, 219, 219, 231, 140, 231, 194, 30, 5, 215,
- 157, 231, 140, 231, 194, 30, 5, 250, 60, 231, 140, 231, 194, 30, 5, 228,
- 47, 231, 140, 231, 194, 250, 61, 231, 140, 231, 194, 232, 143, 235, 148,
- 231, 140, 231, 194, 253, 216, 235, 148, 231, 140, 231, 194, 21, 212, 79,
- 231, 140, 231, 194, 21, 116, 231, 140, 231, 194, 21, 109, 231, 140, 231,
- 194, 21, 166, 231, 140, 231, 194, 21, 163, 231, 140, 231, 194, 21, 180,
- 231, 140, 231, 194, 21, 189, 231, 140, 231, 194, 21, 198, 231, 140, 231,
- 194, 21, 195, 231, 140, 231, 194, 21, 200, 23, 135, 227, 197, 23, 135,
- 227, 202, 23, 135, 212, 234, 23, 135, 212, 233, 23, 135, 212, 232, 23,
- 135, 215, 246, 23, 135, 215, 249, 23, 135, 212, 201, 23, 135, 212, 197,
- 23, 135, 245, 21, 23, 135, 245, 19, 23, 135, 245, 20, 23, 135, 245, 17,
- 23, 135, 240, 136, 23, 135, 240, 135, 23, 135, 240, 133, 23, 135, 240,
- 134, 23, 135, 240, 139, 23, 135, 240, 132, 23, 135, 240, 131, 23, 135,
- 240, 141, 23, 135, 253, 203, 23, 135, 253, 202, 23, 89, 229, 50, 23, 89,
- 229, 56, 23, 89, 219, 139, 23, 89, 219, 138, 23, 89, 217, 50, 23, 89,
- 217, 48, 23, 89, 217, 47, 23, 89, 217, 53, 23, 89, 217, 54, 23, 89, 217,
- 46, 23, 89, 223, 158, 23, 89, 223, 173, 23, 89, 219, 145, 23, 89, 223,
- 170, 23, 89, 223, 160, 23, 89, 223, 162, 23, 89, 223, 149, 23, 89, 223,
- 150, 23, 89, 234, 223, 23, 89, 231, 25, 23, 89, 231, 19, 23, 89, 219,
- 149, 23, 89, 231, 22, 23, 89, 231, 28, 23, 89, 225, 208, 23, 89, 225,
- 217, 23, 89, 225, 221, 23, 89, 219, 147, 23, 89, 225, 211, 23, 89, 225,
- 225, 23, 89, 225, 226, 23, 89, 220, 68, 23, 89, 220, 71, 23, 89, 219,
- 143, 23, 89, 219, 141, 23, 89, 220, 66, 23, 89, 220, 74, 23, 89, 220, 75,
- 23, 89, 220, 60, 23, 89, 220, 73, 23, 89, 226, 158, 23, 89, 226, 159, 23,
- 89, 213, 15, 23, 89, 213, 16, 23, 89, 249, 237, 23, 89, 249, 236, 23, 89,
- 219, 154, 23, 89, 226, 4, 23, 89, 226, 3, 9, 13, 238, 17, 9, 13, 238, 16,
- 9, 13, 238, 15, 9, 13, 238, 14, 9, 13, 238, 13, 9, 13, 238, 12, 9, 13,
- 238, 11, 9, 13, 238, 10, 9, 13, 238, 9, 9, 13, 238, 8, 9, 13, 238, 7, 9,
- 13, 238, 6, 9, 13, 238, 5, 9, 13, 238, 4, 9, 13, 238, 3, 9, 13, 238, 2,
- 9, 13, 238, 1, 9, 13, 238, 0, 9, 13, 237, 255, 9, 13, 237, 254, 9, 13,
- 237, 253, 9, 13, 237, 252, 9, 13, 237, 251, 9, 13, 237, 250, 9, 13, 237,
- 249, 9, 13, 237, 248, 9, 13, 237, 247, 9, 13, 237, 246, 9, 13, 237, 245,
- 9, 13, 237, 244, 9, 13, 237, 243, 9, 13, 237, 242, 9, 13, 237, 241, 9,
- 13, 237, 240, 9, 13, 237, 239, 9, 13, 237, 238, 9, 13, 237, 237, 9, 13,
- 237, 236, 9, 13, 237, 235, 9, 13, 237, 234, 9, 13, 237, 233, 9, 13, 237,
- 232, 9, 13, 237, 231, 9, 13, 237, 230, 9, 13, 237, 229, 9, 13, 237, 228,
- 9, 13, 237, 227, 9, 13, 237, 226, 9, 13, 237, 225, 9, 13, 237, 224, 9,
- 13, 237, 223, 9, 13, 237, 222, 9, 13, 237, 221, 9, 13, 237, 220, 9, 13,
- 237, 219, 9, 13, 237, 218, 9, 13, 237, 217, 9, 13, 237, 216, 9, 13, 237,
- 215, 9, 13, 237, 214, 9, 13, 237, 213, 9, 13, 237, 212, 9, 13, 237, 211,
- 9, 13, 237, 210, 9, 13, 237, 209, 9, 13, 237, 208, 9, 13, 237, 207, 9,
- 13, 237, 206, 9, 13, 237, 205, 9, 13, 237, 204, 9, 13, 237, 203, 9, 13,
- 237, 202, 9, 13, 237, 201, 9, 13, 237, 200, 9, 13, 237, 199, 9, 13, 237,
- 198, 9, 13, 237, 197, 9, 13, 237, 196, 9, 13, 237, 195, 9, 13, 237, 194,
- 9, 13, 237, 193, 9, 13, 237, 192, 9, 13, 237, 191, 9, 13, 237, 190, 9,
- 13, 237, 189, 9, 13, 237, 188, 9, 13, 237, 187, 9, 13, 237, 186, 9, 13,
- 237, 185, 9, 13, 237, 184, 9, 13, 237, 183, 9, 13, 237, 182, 9, 13, 237,
- 181, 9, 13, 237, 180, 9, 13, 237, 179, 9, 13, 237, 178, 9, 13, 237, 177,
- 9, 13, 237, 176, 9, 13, 237, 175, 9, 13, 237, 174, 9, 13, 237, 173, 9,
- 13, 237, 172, 9, 13, 237, 171, 9, 13, 237, 170, 9, 13, 237, 169, 9, 13,
- 237, 168, 9, 13, 237, 167, 9, 13, 237, 166, 9, 13, 237, 165, 9, 13, 237,
- 164, 9, 13, 237, 163, 9, 13, 237, 162, 9, 13, 237, 161, 9, 13, 237, 160,
- 9, 13, 237, 159, 9, 13, 237, 158, 9, 13, 237, 157, 9, 13, 237, 156, 9,
- 13, 237, 155, 9, 13, 237, 154, 9, 13, 237, 153, 9, 13, 237, 152, 9, 13,
- 237, 151, 9, 13, 237, 150, 9, 13, 237, 149, 9, 13, 237, 148, 9, 13, 237,
- 147, 9, 13, 237, 146, 9, 13, 237, 145, 9, 13, 237, 144, 9, 13, 237, 143,
- 9, 13, 237, 142, 9, 13, 237, 141, 9, 13, 237, 140, 9, 13, 237, 139, 9,
- 13, 237, 138, 9, 13, 237, 137, 9, 13, 237, 136, 9, 13, 237, 135, 9, 13,
- 237, 134, 9, 13, 237, 133, 9, 13, 237, 132, 9, 13, 237, 131, 9, 13, 237,
- 130, 9, 13, 237, 129, 9, 13, 237, 128, 9, 13, 237, 127, 9, 13, 237, 126,
- 9, 13, 237, 125, 9, 13, 237, 124, 9, 13, 237, 123, 9, 13, 237, 122, 9,
- 13, 237, 121, 9, 13, 237, 120, 9, 13, 237, 119, 9, 13, 237, 118, 9, 13,
- 237, 117, 9, 13, 237, 116, 9, 13, 237, 115, 9, 13, 237, 114, 9, 13, 237,
- 113, 9, 13, 237, 112, 9, 13, 237, 111, 9, 13, 237, 110, 9, 13, 237, 109,
- 9, 13, 237, 108, 9, 13, 237, 107, 9, 13, 237, 106, 9, 13, 237, 105, 9,
- 13, 237, 104, 9, 13, 237, 103, 9, 13, 237, 102, 9, 13, 237, 101, 9, 13,
- 237, 100, 9, 13, 237, 99, 9, 13, 237, 98, 9, 13, 237, 97, 9, 13, 237, 96,
- 9, 13, 237, 95, 9, 13, 237, 94, 9, 13, 237, 93, 9, 13, 237, 92, 9, 13,
- 237, 91, 9, 13, 237, 90, 9, 13, 237, 89, 9, 13, 237, 88, 9, 13, 237, 87,
- 9, 13, 237, 86, 9, 13, 237, 85, 9, 13, 237, 84, 9, 13, 237, 83, 9, 13,
- 237, 82, 9, 13, 237, 81, 9, 13, 237, 80, 9, 13, 237, 79, 9, 13, 237, 78,
- 9, 13, 237, 77, 9, 13, 237, 76, 9, 13, 237, 75, 9, 13, 237, 74, 9, 13,
- 237, 73, 9, 13, 237, 72, 9, 13, 237, 71, 9, 13, 237, 70, 9, 13, 237, 69,
- 9, 13, 237, 68, 9, 13, 237, 67, 9, 13, 237, 66, 9, 13, 237, 65, 9, 13,
- 237, 64, 9, 13, 237, 63, 9, 13, 237, 62, 9, 13, 237, 61, 9, 13, 237, 60,
- 9, 13, 237, 59, 9, 13, 237, 58, 9, 13, 237, 57, 9, 13, 237, 56, 9, 13,
- 237, 55, 9, 13, 237, 54, 9, 13, 237, 53, 9, 13, 237, 52, 9, 13, 237, 51,
- 9, 13, 237, 50, 9, 13, 237, 49, 9, 13, 237, 48, 9, 13, 237, 47, 9, 13,
- 237, 46, 9, 13, 237, 45, 9, 13, 237, 44, 9, 13, 237, 43, 9, 13, 237, 42,
- 9, 13, 237, 41, 9, 13, 237, 40, 9, 13, 237, 39, 9, 13, 237, 38, 9, 13,
- 237, 37, 9, 13, 237, 36, 9, 13, 237, 35, 9, 13, 237, 34, 9, 13, 237, 33,
- 9, 13, 237, 32, 9, 13, 237, 31, 9, 13, 237, 30, 9, 13, 237, 29, 9, 13,
- 237, 28, 9, 13, 237, 27, 9, 13, 237, 26, 9, 13, 237, 25, 9, 13, 237, 24,
- 9, 13, 237, 23, 9, 13, 237, 22, 9, 13, 237, 21, 9, 13, 237, 20, 9, 13,
- 237, 19, 9, 13, 237, 18, 9, 13, 237, 17, 9, 13, 237, 16, 9, 13, 237, 15,
- 9, 13, 237, 14, 9, 13, 237, 13, 9, 13, 237, 12, 9, 13, 237, 11, 9, 13,
- 237, 10, 9, 13, 237, 9, 9, 13, 237, 8, 9, 13, 237, 7, 9, 13, 237, 6, 9,
- 13, 237, 5, 9, 13, 237, 4, 9, 13, 237, 3, 9, 13, 237, 2, 9, 13, 237, 1,
- 9, 13, 237, 0, 9, 13, 236, 255, 9, 13, 236, 254, 9, 13, 236, 253, 9, 13,
- 236, 252, 9, 13, 236, 251, 9, 13, 236, 250, 9, 13, 236, 249, 9, 13, 236,
- 248, 9, 13, 236, 247, 9, 13, 236, 246, 9, 13, 236, 245, 9, 13, 236, 244,
- 9, 13, 236, 243, 9, 13, 236, 242, 9, 13, 236, 241, 9, 13, 236, 240, 9,
- 13, 236, 239, 9, 13, 236, 238, 9, 13, 236, 237, 9, 13, 236, 236, 9, 13,
- 236, 235, 9, 13, 236, 234, 9, 13, 236, 233, 9, 13, 236, 232, 9, 13, 236,
- 231, 9, 13, 236, 230, 9, 13, 236, 229, 9, 13, 236, 228, 9, 13, 236, 227,
- 9, 13, 236, 226, 9, 13, 236, 225, 9, 13, 236, 224, 9, 13, 236, 223, 9,
- 13, 236, 222, 9, 13, 236, 221, 9, 13, 236, 220, 9, 13, 236, 219, 9, 13,
- 236, 218, 9, 13, 236, 217, 9, 13, 236, 216, 9, 13, 236, 215, 9, 13, 236,
- 214, 9, 13, 236, 213, 9, 13, 236, 212, 9, 13, 236, 211, 9, 13, 236, 210,
- 9, 13, 236, 209, 9, 13, 236, 208, 9, 13, 236, 207, 9, 13, 236, 206, 9,
- 13, 236, 205, 9, 13, 236, 204, 9, 13, 236, 203, 9, 13, 236, 202, 9, 13,
- 236, 201, 9, 13, 236, 200, 9, 13, 236, 199, 9, 13, 236, 198, 9, 13, 236,
- 197, 9, 13, 236, 196, 9, 13, 236, 195, 9, 13, 236, 194, 9, 13, 236, 193,
- 9, 13, 236, 192, 9, 13, 236, 191, 9, 13, 236, 190, 9, 13, 236, 189, 9,
- 13, 236, 188, 9, 13, 236, 187, 9, 13, 236, 186, 9, 13, 236, 185, 9, 13,
- 236, 184, 9, 13, 236, 183, 9, 13, 236, 182, 9, 13, 236, 181, 9, 13, 236,
- 180, 9, 13, 236, 179, 9, 13, 236, 178, 9, 13, 236, 177, 9, 13, 236, 176,
- 9, 13, 236, 175, 9, 13, 236, 174, 9, 13, 236, 173, 9, 13, 236, 172, 9,
- 13, 236, 171, 9, 13, 236, 170, 9, 13, 236, 169, 9, 13, 236, 168, 9, 13,
- 236, 167, 9, 13, 236, 166, 9, 13, 236, 165, 9, 13, 236, 164, 9, 13, 236,
- 163, 9, 13, 236, 162, 9, 13, 236, 161, 9, 13, 236, 160, 9, 13, 236, 159,
- 9, 13, 236, 158, 9, 13, 236, 157, 9, 13, 236, 156, 9, 13, 236, 155, 9,
- 13, 236, 154, 9, 13, 236, 153, 9, 13, 236, 152, 9, 13, 236, 151, 9, 13,
- 236, 150, 9, 13, 236, 149, 9, 13, 236, 148, 9, 13, 236, 147, 9, 13, 236,
- 146, 9, 13, 236, 145, 9, 13, 236, 144, 9, 13, 236, 143, 9, 13, 236, 142,
- 9, 13, 236, 141, 9, 13, 236, 140, 9, 13, 236, 139, 9, 13, 236, 138, 9,
- 13, 236, 137, 9, 13, 236, 136, 9, 13, 236, 135, 9, 13, 236, 134, 9, 13,
- 236, 133, 9, 13, 236, 132, 9, 13, 236, 131, 9, 13, 236, 130, 9, 13, 236,
- 129, 9, 13, 236, 128, 9, 13, 236, 127, 9, 13, 236, 126, 9, 13, 236, 125,
- 9, 13, 236, 124, 9, 13, 236, 123, 9, 13, 236, 122, 9, 13, 236, 121, 9,
- 13, 236, 120, 9, 13, 236, 119, 9, 13, 236, 118, 9, 13, 236, 117, 9, 13,
- 236, 116, 9, 13, 236, 115, 9, 13, 236, 114, 9, 13, 236, 113, 9, 13, 236,
- 112, 9, 13, 236, 111, 9, 13, 236, 110, 9, 13, 236, 109, 9, 13, 236, 108,
- 9, 13, 236, 107, 9, 13, 236, 106, 9, 13, 236, 105, 9, 13, 236, 104, 9,
- 13, 236, 103, 9, 13, 236, 102, 9, 13, 236, 101, 9, 13, 236, 100, 9, 13,
- 236, 99, 9, 13, 236, 98, 9, 13, 236, 97, 9, 13, 236, 96, 9, 13, 236, 95,
- 9, 13, 236, 94, 9, 13, 236, 93, 9, 13, 236, 92, 9, 13, 236, 91, 9, 13,
- 236, 90, 9, 13, 236, 89, 9, 13, 236, 88, 9, 13, 236, 87, 9, 13, 236, 86,
- 9, 13, 236, 85, 9, 13, 236, 84, 9, 13, 236, 83, 9, 13, 236, 82, 9, 13,
- 236, 81, 9, 13, 236, 80, 9, 13, 236, 79, 9, 13, 236, 78, 9, 13, 236, 77,
- 9, 13, 236, 76, 9, 13, 236, 75, 9, 13, 236, 74, 9, 13, 236, 73, 9, 13,
- 236, 72, 9, 13, 236, 71, 9, 13, 236, 70, 9, 13, 236, 69, 9, 13, 236, 68,
- 9, 13, 236, 67, 9, 13, 236, 66, 9, 13, 236, 65, 9, 13, 236, 64, 9, 13,
- 236, 63, 9, 13, 236, 62, 9, 13, 236, 61, 9, 13, 236, 60, 7, 3, 26, 244,
- 94, 7, 3, 26, 244, 90, 7, 3, 26, 244, 45, 7, 3, 26, 244, 93, 7, 3, 26,
- 244, 92, 7, 3, 26, 184, 223, 4, 218, 99, 7, 3, 26, 219, 107, 141, 3, 26,
- 231, 123, 228, 150, 141, 3, 26, 231, 123, 245, 169, 141, 3, 26, 231, 123,
- 235, 224, 141, 3, 26, 214, 157, 228, 150, 141, 3, 26, 231, 123, 213, 148,
- 93, 1, 212, 225, 2, 241, 144, 93, 225, 145, 235, 53, 214, 243, 93, 26,
- 212, 253, 212, 225, 212, 225, 226, 112, 93, 1, 254, 48, 253, 78, 93, 1,
- 213, 232, 254, 78, 93, 1, 213, 232, 248, 134, 93, 1, 213, 232, 241, 222,
- 93, 1, 213, 232, 234, 254, 93, 1, 213, 232, 233, 118, 93, 1, 213, 232,
- 40, 231, 129, 93, 1, 213, 232, 223, 219, 93, 1, 213, 232, 217, 245, 93,
- 1, 254, 48, 94, 52, 93, 1, 220, 201, 2, 220, 201, 247, 74, 93, 1, 220,
- 201, 2, 220, 85, 247, 74, 93, 1, 220, 201, 2, 248, 151, 24, 220, 201,
- 247, 74, 93, 1, 220, 201, 2, 248, 151, 24, 220, 85, 247, 74, 93, 1, 106,
- 2, 226, 112, 93, 1, 106, 2, 224, 220, 93, 1, 106, 2, 231, 234, 93, 1,
- 251, 206, 2, 248, 150, 93, 1, 242, 178, 2, 248, 150, 93, 1, 248, 135, 2,
- 248, 150, 93, 1, 241, 223, 2, 231, 234, 93, 1, 214, 237, 2, 248, 150, 93,
- 1, 212, 91, 2, 248, 150, 93, 1, 217, 184, 2, 248, 150, 93, 1, 212, 225,
- 2, 248, 150, 93, 1, 40, 234, 255, 2, 248, 150, 93, 1, 234, 255, 2, 248,
- 150, 93, 1, 233, 119, 2, 248, 150, 93, 1, 231, 130, 2, 248, 150, 93, 1,
- 228, 51, 2, 248, 150, 93, 1, 222, 165, 2, 248, 150, 93, 1, 40, 226, 97,
- 2, 248, 150, 93, 1, 226, 97, 2, 248, 150, 93, 1, 216, 138, 2, 248, 150,
- 93, 1, 224, 185, 2, 248, 150, 93, 1, 223, 220, 2, 248, 150, 93, 1, 220,
- 201, 2, 248, 150, 93, 1, 217, 246, 2, 248, 150, 93, 1, 214, 237, 2, 241,
- 47, 93, 1, 251, 206, 2, 224, 59, 93, 1, 234, 255, 2, 224, 59, 93, 1, 226,
- 97, 2, 224, 59, 93, 26, 106, 233, 118, 12, 1, 106, 214, 31, 48, 17, 12,
- 1, 106, 214, 31, 40, 17, 12, 1, 251, 241, 48, 17, 12, 1, 251, 241, 40,
- 17, 12, 1, 251, 241, 70, 17, 12, 1, 251, 241, 138, 17, 12, 1, 226, 81,
- 48, 17, 12, 1, 226, 81, 40, 17, 12, 1, 226, 81, 70, 17, 12, 1, 226, 81,
- 138, 17, 12, 1, 251, 229, 48, 17, 12, 1, 251, 229, 40, 17, 12, 1, 251,
- 229, 70, 17, 12, 1, 251, 229, 138, 17, 12, 1, 216, 108, 48, 17, 12, 1,
- 216, 108, 40, 17, 12, 1, 216, 108, 70, 17, 12, 1, 216, 108, 138, 17, 12,
- 1, 217, 214, 48, 17, 12, 1, 217, 214, 40, 17, 12, 1, 217, 214, 70, 17,
- 12, 1, 217, 214, 138, 17, 12, 1, 216, 110, 48, 17, 12, 1, 216, 110, 40,
- 17, 12, 1, 216, 110, 70, 17, 12, 1, 216, 110, 138, 17, 12, 1, 214, 226,
- 48, 17, 12, 1, 214, 226, 40, 17, 12, 1, 214, 226, 70, 17, 12, 1, 214,
- 226, 138, 17, 12, 1, 226, 79, 48, 17, 12, 1, 226, 79, 40, 17, 12, 1, 226,
- 79, 70, 17, 12, 1, 226, 79, 138, 17, 12, 1, 245, 255, 48, 17, 12, 1, 245,
- 255, 40, 17, 12, 1, 245, 255, 70, 17, 12, 1, 245, 255, 138, 17, 12, 1,
- 228, 15, 48, 17, 12, 1, 228, 15, 40, 17, 12, 1, 228, 15, 70, 17, 12, 1,
- 228, 15, 138, 17, 12, 1, 217, 234, 48, 17, 12, 1, 217, 234, 40, 17, 12,
- 1, 217, 234, 70, 17, 12, 1, 217, 234, 138, 17, 12, 1, 217, 232, 48, 17,
- 12, 1, 217, 232, 40, 17, 12, 1, 217, 232, 70, 17, 12, 1, 217, 232, 138,
- 17, 12, 1, 248, 84, 48, 17, 12, 1, 248, 84, 40, 17, 12, 1, 248, 147, 48,
- 17, 12, 1, 248, 147, 40, 17, 12, 1, 246, 26, 48, 17, 12, 1, 246, 26, 40,
- 17, 12, 1, 248, 82, 48, 17, 12, 1, 248, 82, 40, 17, 12, 1, 235, 122, 48,
- 17, 12, 1, 235, 122, 40, 17, 12, 1, 223, 78, 48, 17, 12, 1, 223, 78, 40,
- 17, 12, 1, 234, 181, 48, 17, 12, 1, 234, 181, 40, 17, 12, 1, 234, 181,
- 70, 17, 12, 1, 234, 181, 138, 17, 12, 1, 243, 98, 48, 17, 12, 1, 243, 98,
- 40, 17, 12, 1, 243, 98, 70, 17, 12, 1, 243, 98, 138, 17, 12, 1, 242, 83,
- 48, 17, 12, 1, 242, 83, 40, 17, 12, 1, 242, 83, 70, 17, 12, 1, 242, 83,
- 138, 17, 12, 1, 229, 89, 48, 17, 12, 1, 229, 89, 40, 17, 12, 1, 229, 89,
- 70, 17, 12, 1, 229, 89, 138, 17, 12, 1, 228, 174, 242, 195, 48, 17, 12,
- 1, 228, 174, 242, 195, 40, 17, 12, 1, 223, 116, 48, 17, 12, 1, 223, 116,
- 40, 17, 12, 1, 223, 116, 70, 17, 12, 1, 223, 116, 138, 17, 12, 1, 241,
- 203, 2, 73, 78, 48, 17, 12, 1, 241, 203, 2, 73, 78, 40, 17, 12, 1, 241,
- 203, 242, 148, 48, 17, 12, 1, 241, 203, 242, 148, 40, 17, 12, 1, 241,
- 203, 242, 148, 70, 17, 12, 1, 241, 203, 242, 148, 138, 17, 12, 1, 241,
- 203, 247, 96, 48, 17, 12, 1, 241, 203, 247, 96, 40, 17, 12, 1, 241, 203,
- 247, 96, 70, 17, 12, 1, 241, 203, 247, 96, 138, 17, 12, 1, 73, 252, 53,
- 48, 17, 12, 1, 73, 252, 53, 40, 17, 12, 1, 73, 252, 53, 2, 192, 78, 48,
- 17, 12, 1, 73, 252, 53, 2, 192, 78, 40, 17, 12, 16, 62, 49, 12, 16, 62,
- 55, 12, 16, 117, 176, 49, 12, 16, 117, 176, 55, 12, 16, 133, 176, 49, 12,
- 16, 133, 176, 55, 12, 16, 133, 176, 225, 141, 246, 58, 49, 12, 16, 133,
- 176, 225, 141, 246, 58, 55, 12, 16, 243, 237, 176, 49, 12, 16, 243, 237,
- 176, 55, 12, 16, 51, 71, 252, 60, 55, 12, 16, 117, 176, 214, 166, 49, 12,
- 16, 117, 176, 214, 166, 55, 12, 16, 223, 130, 12, 16, 3, 218, 30, 49, 12,
- 16, 3, 218, 30, 55, 12, 1, 229, 162, 48, 17, 12, 1, 229, 162, 40, 17, 12,
- 1, 229, 162, 70, 17, 12, 1, 229, 162, 138, 17, 12, 1, 111, 48, 17, 12, 1,
- 111, 40, 17, 12, 1, 227, 100, 48, 17, 12, 1, 227, 100, 40, 17, 12, 1,
- 212, 204, 48, 17, 12, 1, 212, 204, 40, 17, 12, 1, 111, 2, 192, 78, 48,
- 17, 12, 1, 214, 233, 48, 17, 12, 1, 214, 233, 40, 17, 12, 1, 234, 82,
- 227, 100, 48, 17, 12, 1, 234, 82, 227, 100, 40, 17, 12, 1, 234, 82, 212,
- 204, 48, 17, 12, 1, 234, 82, 212, 204, 40, 17, 12, 1, 191, 48, 17, 12, 1,
- 191, 40, 17, 12, 1, 191, 70, 17, 12, 1, 191, 138, 17, 12, 1, 215, 177,
- 234, 192, 234, 82, 106, 210, 70, 17, 12, 1, 215, 177, 234, 192, 234, 82,
- 106, 210, 138, 17, 12, 26, 73, 2, 192, 78, 2, 106, 48, 17, 12, 26, 73, 2,
- 192, 78, 2, 106, 40, 17, 12, 26, 73, 2, 192, 78, 2, 254, 149, 48, 17, 12,
- 26, 73, 2, 192, 78, 2, 254, 149, 40, 17, 12, 26, 73, 2, 192, 78, 2, 214,
- 15, 48, 17, 12, 26, 73, 2, 192, 78, 2, 214, 15, 40, 17, 12, 26, 73, 2,
- 192, 78, 2, 111, 48, 17, 12, 26, 73, 2, 192, 78, 2, 111, 40, 17, 12, 26,
- 73, 2, 192, 78, 2, 227, 100, 48, 17, 12, 26, 73, 2, 192, 78, 2, 227, 100,
- 40, 17, 12, 26, 73, 2, 192, 78, 2, 212, 204, 48, 17, 12, 26, 73, 2, 192,
- 78, 2, 212, 204, 40, 17, 12, 26, 73, 2, 192, 78, 2, 191, 48, 17, 12, 26,
- 73, 2, 192, 78, 2, 191, 40, 17, 12, 26, 73, 2, 192, 78, 2, 191, 70, 17,
- 12, 26, 215, 177, 234, 82, 73, 2, 192, 78, 2, 106, 210, 48, 17, 12, 26,
- 215, 177, 234, 82, 73, 2, 192, 78, 2, 106, 210, 40, 17, 12, 26, 215, 177,
- 234, 82, 73, 2, 192, 78, 2, 106, 210, 70, 17, 12, 1, 244, 136, 73, 48,
- 17, 12, 1, 244, 136, 73, 40, 17, 12, 1, 244, 136, 73, 70, 17, 12, 1, 244,
- 136, 73, 138, 17, 12, 26, 73, 2, 192, 78, 2, 145, 48, 17, 12, 26, 73, 2,
- 192, 78, 2, 121, 48, 17, 12, 26, 73, 2, 192, 78, 2, 63, 48, 17, 12, 26,
- 73, 2, 192, 78, 2, 106, 210, 48, 17, 12, 26, 73, 2, 192, 78, 2, 73, 48,
- 17, 12, 26, 251, 231, 2, 145, 48, 17, 12, 26, 251, 231, 2, 121, 48, 17,
- 12, 26, 251, 231, 2, 234, 136, 48, 17, 12, 26, 251, 231, 2, 63, 48, 17,
- 12, 26, 251, 231, 2, 106, 210, 48, 17, 12, 26, 251, 231, 2, 73, 48, 17,
- 12, 26, 217, 216, 2, 145, 48, 17, 12, 26, 217, 216, 2, 121, 48, 17, 12,
- 26, 217, 216, 2, 234, 136, 48, 17, 12, 26, 217, 216, 2, 63, 48, 17, 12,
- 26, 217, 216, 2, 106, 210, 48, 17, 12, 26, 217, 216, 2, 73, 48, 17, 12,
- 26, 217, 146, 2, 145, 48, 17, 12, 26, 217, 146, 2, 63, 48, 17, 12, 26,
- 217, 146, 2, 106, 210, 48, 17, 12, 26, 217, 146, 2, 73, 48, 17, 12, 26,
- 145, 2, 121, 48, 17, 12, 26, 145, 2, 63, 48, 17, 12, 26, 121, 2, 145, 48,
- 17, 12, 26, 121, 2, 63, 48, 17, 12, 26, 234, 136, 2, 145, 48, 17, 12, 26,
- 234, 136, 2, 121, 48, 17, 12, 26, 234, 136, 2, 63, 48, 17, 12, 26, 222,
- 86, 2, 145, 48, 17, 12, 26, 222, 86, 2, 121, 48, 17, 12, 26, 222, 86, 2,
- 234, 136, 48, 17, 12, 26, 222, 86, 2, 63, 48, 17, 12, 26, 222, 196, 2,
- 121, 48, 17, 12, 26, 222, 196, 2, 63, 48, 17, 12, 26, 248, 160, 2, 145,
- 48, 17, 12, 26, 248, 160, 2, 121, 48, 17, 12, 26, 248, 160, 2, 234, 136,
- 48, 17, 12, 26, 248, 160, 2, 63, 48, 17, 12, 26, 218, 30, 2, 121, 48, 17,
- 12, 26, 218, 30, 2, 63, 48, 17, 12, 26, 212, 105, 2, 63, 48, 17, 12, 26,
- 254, 104, 2, 145, 48, 17, 12, 26, 254, 104, 2, 63, 48, 17, 12, 26, 242,
- 221, 2, 145, 48, 17, 12, 26, 242, 221, 2, 63, 48, 17, 12, 26, 244, 112,
- 2, 145, 48, 17, 12, 26, 244, 112, 2, 121, 48, 17, 12, 26, 244, 112, 2,
- 234, 136, 48, 17, 12, 26, 244, 112, 2, 63, 48, 17, 12, 26, 244, 112, 2,
- 106, 210, 48, 17, 12, 26, 244, 112, 2, 73, 48, 17, 12, 26, 224, 226, 2,
- 121, 48, 17, 12, 26, 224, 226, 2, 63, 48, 17, 12, 26, 224, 226, 2, 106,
- 210, 48, 17, 12, 26, 224, 226, 2, 73, 48, 17, 12, 26, 234, 255, 2, 106,
- 48, 17, 12, 26, 234, 255, 2, 145, 48, 17, 12, 26, 234, 255, 2, 121, 48,
- 17, 12, 26, 234, 255, 2, 234, 136, 48, 17, 12, 26, 234, 255, 2, 233, 127,
- 48, 17, 12, 26, 234, 255, 2, 63, 48, 17, 12, 26, 234, 255, 2, 106, 210,
- 48, 17, 12, 26, 234, 255, 2, 73, 48, 17, 12, 26, 233, 127, 2, 145, 48,
- 17, 12, 26, 233, 127, 2, 121, 48, 17, 12, 26, 233, 127, 2, 234, 136, 48,
- 17, 12, 26, 233, 127, 2, 63, 48, 17, 12, 26, 233, 127, 2, 106, 210, 48,
- 17, 12, 26, 233, 127, 2, 73, 48, 17, 12, 26, 63, 2, 145, 48, 17, 12, 26,
- 63, 2, 121, 48, 17, 12, 26, 63, 2, 234, 136, 48, 17, 12, 26, 63, 2, 63,
- 48, 17, 12, 26, 63, 2, 106, 210, 48, 17, 12, 26, 63, 2, 73, 48, 17, 12,
- 26, 228, 174, 2, 145, 48, 17, 12, 26, 228, 174, 2, 121, 48, 17, 12, 26,
- 228, 174, 2, 234, 136, 48, 17, 12, 26, 228, 174, 2, 63, 48, 17, 12, 26,
- 228, 174, 2, 106, 210, 48, 17, 12, 26, 228, 174, 2, 73, 48, 17, 12, 26,
- 241, 203, 2, 145, 48, 17, 12, 26, 241, 203, 2, 63, 48, 17, 12, 26, 241,
- 203, 2, 106, 210, 48, 17, 12, 26, 241, 203, 2, 73, 48, 17, 12, 26, 73, 2,
- 145, 48, 17, 12, 26, 73, 2, 121, 48, 17, 12, 26, 73, 2, 234, 136, 48, 17,
- 12, 26, 73, 2, 63, 48, 17, 12, 26, 73, 2, 106, 210, 48, 17, 12, 26, 73,
- 2, 73, 48, 17, 12, 26, 217, 156, 2, 218, 223, 106, 48, 17, 12, 26, 223,
- 246, 2, 218, 223, 106, 48, 17, 12, 26, 106, 210, 2, 218, 223, 106, 48,
- 17, 12, 26, 221, 16, 2, 248, 128, 48, 17, 12, 26, 221, 16, 2, 234, 209,
- 48, 17, 12, 26, 221, 16, 2, 244, 134, 48, 17, 12, 26, 221, 16, 2, 248,
- 130, 48, 17, 12, 26, 221, 16, 2, 234, 211, 48, 17, 12, 26, 221, 16, 2,
- 218, 223, 106, 48, 17, 12, 26, 73, 2, 192, 78, 2, 223, 246, 40, 17, 12,
- 26, 73, 2, 192, 78, 2, 212, 102, 40, 17, 12, 26, 73, 2, 192, 78, 2, 63,
- 40, 17, 12, 26, 73, 2, 192, 78, 2, 228, 174, 40, 17, 12, 26, 73, 2, 192,
- 78, 2, 106, 210, 40, 17, 12, 26, 73, 2, 192, 78, 2, 73, 40, 17, 12, 26,
- 251, 231, 2, 223, 246, 40, 17, 12, 26, 251, 231, 2, 212, 102, 40, 17, 12,
- 26, 251, 231, 2, 63, 40, 17, 12, 26, 251, 231, 2, 228, 174, 40, 17, 12,
- 26, 251, 231, 2, 106, 210, 40, 17, 12, 26, 251, 231, 2, 73, 40, 17, 12,
- 26, 217, 216, 2, 223, 246, 40, 17, 12, 26, 217, 216, 2, 212, 102, 40, 17,
- 12, 26, 217, 216, 2, 63, 40, 17, 12, 26, 217, 216, 2, 228, 174, 40, 17,
- 12, 26, 217, 216, 2, 106, 210, 40, 17, 12, 26, 217, 216, 2, 73, 40, 17,
- 12, 26, 217, 146, 2, 223, 246, 40, 17, 12, 26, 217, 146, 2, 212, 102, 40,
- 17, 12, 26, 217, 146, 2, 63, 40, 17, 12, 26, 217, 146, 2, 228, 174, 40,
- 17, 12, 26, 217, 146, 2, 106, 210, 40, 17, 12, 26, 217, 146, 2, 73, 40,
- 17, 12, 26, 244, 112, 2, 106, 210, 40, 17, 12, 26, 244, 112, 2, 73, 40,
- 17, 12, 26, 224, 226, 2, 106, 210, 40, 17, 12, 26, 224, 226, 2, 73, 40,
- 17, 12, 26, 234, 255, 2, 106, 40, 17, 12, 26, 234, 255, 2, 233, 127, 40,
- 17, 12, 26, 234, 255, 2, 63, 40, 17, 12, 26, 234, 255, 2, 106, 210, 40,
- 17, 12, 26, 234, 255, 2, 73, 40, 17, 12, 26, 233, 127, 2, 63, 40, 17, 12,
- 26, 233, 127, 2, 106, 210, 40, 17, 12, 26, 233, 127, 2, 73, 40, 17, 12,
- 26, 63, 2, 106, 40, 17, 12, 26, 63, 2, 63, 40, 17, 12, 26, 228, 174, 2,
- 223, 246, 40, 17, 12, 26, 228, 174, 2, 212, 102, 40, 17, 12, 26, 228,
- 174, 2, 63, 40, 17, 12, 26, 228, 174, 2, 228, 174, 40, 17, 12, 26, 228,
- 174, 2, 106, 210, 40, 17, 12, 26, 228, 174, 2, 73, 40, 17, 12, 26, 106,
- 210, 2, 218, 223, 106, 40, 17, 12, 26, 73, 2, 223, 246, 40, 17, 12, 26,
- 73, 2, 212, 102, 40, 17, 12, 26, 73, 2, 63, 40, 17, 12, 26, 73, 2, 228,
- 174, 40, 17, 12, 26, 73, 2, 106, 210, 40, 17, 12, 26, 73, 2, 73, 40, 17,
- 12, 26, 73, 2, 192, 78, 2, 145, 70, 17, 12, 26, 73, 2, 192, 78, 2, 121,
- 70, 17, 12, 26, 73, 2, 192, 78, 2, 234, 136, 70, 17, 12, 26, 73, 2, 192,
- 78, 2, 63, 70, 17, 12, 26, 73, 2, 192, 78, 2, 241, 203, 70, 17, 12, 26,
- 251, 231, 2, 145, 70, 17, 12, 26, 251, 231, 2, 121, 70, 17, 12, 26, 251,
- 231, 2, 234, 136, 70, 17, 12, 26, 251, 231, 2, 63, 70, 17, 12, 26, 251,
- 231, 2, 241, 203, 70, 17, 12, 26, 217, 216, 2, 145, 70, 17, 12, 26, 217,
- 216, 2, 121, 70, 17, 12, 26, 217, 216, 2, 234, 136, 70, 17, 12, 26, 217,
- 216, 2, 63, 70, 17, 12, 26, 217, 216, 2, 241, 203, 70, 17, 12, 26, 217,
- 146, 2, 63, 70, 17, 12, 26, 145, 2, 121, 70, 17, 12, 26, 145, 2, 63, 70,
- 17, 12, 26, 121, 2, 145, 70, 17, 12, 26, 121, 2, 63, 70, 17, 12, 26, 234,
- 136, 2, 145, 70, 17, 12, 26, 234, 136, 2, 63, 70, 17, 12, 26, 222, 86, 2,
- 145, 70, 17, 12, 26, 222, 86, 2, 121, 70, 17, 12, 26, 222, 86, 2, 234,
- 136, 70, 17, 12, 26, 222, 86, 2, 63, 70, 17, 12, 26, 222, 196, 2, 121,
- 70, 17, 12, 26, 222, 196, 2, 234, 136, 70, 17, 12, 26, 222, 196, 2, 63,
- 70, 17, 12, 26, 248, 160, 2, 145, 70, 17, 12, 26, 248, 160, 2, 121, 70,
- 17, 12, 26, 248, 160, 2, 234, 136, 70, 17, 12, 26, 248, 160, 2, 63, 70,
- 17, 12, 26, 218, 30, 2, 121, 70, 17, 12, 26, 212, 105, 2, 63, 70, 17, 12,
- 26, 254, 104, 2, 145, 70, 17, 12, 26, 254, 104, 2, 63, 70, 17, 12, 26,
- 242, 221, 2, 145, 70, 17, 12, 26, 242, 221, 2, 63, 70, 17, 12, 26, 244,
- 112, 2, 145, 70, 17, 12, 26, 244, 112, 2, 121, 70, 17, 12, 26, 244, 112,
- 2, 234, 136, 70, 17, 12, 26, 244, 112, 2, 63, 70, 17, 12, 26, 224, 226,
- 2, 121, 70, 17, 12, 26, 224, 226, 2, 63, 70, 17, 12, 26, 234, 255, 2,
- 145, 70, 17, 12, 26, 234, 255, 2, 121, 70, 17, 12, 26, 234, 255, 2, 234,
- 136, 70, 17, 12, 26, 234, 255, 2, 233, 127, 70, 17, 12, 26, 234, 255, 2,
- 63, 70, 17, 12, 26, 233, 127, 2, 145, 70, 17, 12, 26, 233, 127, 2, 121,
- 70, 17, 12, 26, 233, 127, 2, 234, 136, 70, 17, 12, 26, 233, 127, 2, 63,
- 70, 17, 12, 26, 233, 127, 2, 241, 203, 70, 17, 12, 26, 63, 2, 145, 70,
- 17, 12, 26, 63, 2, 121, 70, 17, 12, 26, 63, 2, 234, 136, 70, 17, 12, 26,
- 63, 2, 63, 70, 17, 12, 26, 228, 174, 2, 145, 70, 17, 12, 26, 228, 174, 2,
- 121, 70, 17, 12, 26, 228, 174, 2, 234, 136, 70, 17, 12, 26, 228, 174, 2,
- 63, 70, 17, 12, 26, 228, 174, 2, 241, 203, 70, 17, 12, 26, 241, 203, 2,
- 145, 70, 17, 12, 26, 241, 203, 2, 63, 70, 17, 12, 26, 241, 203, 2, 218,
- 223, 106, 70, 17, 12, 26, 73, 2, 145, 70, 17, 12, 26, 73, 2, 121, 70, 17,
- 12, 26, 73, 2, 234, 136, 70, 17, 12, 26, 73, 2, 63, 70, 17, 12, 26, 73,
- 2, 241, 203, 70, 17, 12, 26, 73, 2, 192, 78, 2, 63, 138, 17, 12, 26, 73,
- 2, 192, 78, 2, 241, 203, 138, 17, 12, 26, 251, 231, 2, 63, 138, 17, 12,
- 26, 251, 231, 2, 241, 203, 138, 17, 12, 26, 217, 216, 2, 63, 138, 17, 12,
- 26, 217, 216, 2, 241, 203, 138, 17, 12, 26, 217, 146, 2, 63, 138, 17, 12,
- 26, 217, 146, 2, 241, 203, 138, 17, 12, 26, 222, 86, 2, 63, 138, 17, 12,
- 26, 222, 86, 2, 241, 203, 138, 17, 12, 26, 220, 240, 2, 63, 138, 17, 12,
- 26, 220, 240, 2, 241, 203, 138, 17, 12, 26, 234, 255, 2, 233, 127, 138,
- 17, 12, 26, 234, 255, 2, 63, 138, 17, 12, 26, 233, 127, 2, 63, 138, 17,
- 12, 26, 228, 174, 2, 63, 138, 17, 12, 26, 228, 174, 2, 241, 203, 138, 17,
- 12, 26, 73, 2, 63, 138, 17, 12, 26, 73, 2, 241, 203, 138, 17, 12, 26,
- 221, 16, 2, 244, 134, 138, 17, 12, 26, 221, 16, 2, 248, 130, 138, 17, 12,
- 26, 221, 16, 2, 234, 211, 138, 17, 12, 26, 218, 30, 2, 106, 210, 48, 17,
- 12, 26, 218, 30, 2, 73, 48, 17, 12, 26, 254, 104, 2, 106, 210, 48, 17,
- 12, 26, 254, 104, 2, 73, 48, 17, 12, 26, 242, 221, 2, 106, 210, 48, 17,
- 12, 26, 242, 221, 2, 73, 48, 17, 12, 26, 222, 86, 2, 106, 210, 48, 17,
- 12, 26, 222, 86, 2, 73, 48, 17, 12, 26, 220, 240, 2, 106, 210, 48, 17,
- 12, 26, 220, 240, 2, 73, 48, 17, 12, 26, 121, 2, 106, 210, 48, 17, 12,
- 26, 121, 2, 73, 48, 17, 12, 26, 145, 2, 106, 210, 48, 17, 12, 26, 145, 2,
- 73, 48, 17, 12, 26, 234, 136, 2, 106, 210, 48, 17, 12, 26, 234, 136, 2,
- 73, 48, 17, 12, 26, 222, 196, 2, 106, 210, 48, 17, 12, 26, 222, 196, 2,
- 73, 48, 17, 12, 26, 248, 160, 2, 106, 210, 48, 17, 12, 26, 248, 160, 2,
- 73, 48, 17, 12, 26, 220, 240, 2, 145, 48, 17, 12, 26, 220, 240, 2, 121,
- 48, 17, 12, 26, 220, 240, 2, 234, 136, 48, 17, 12, 26, 220, 240, 2, 63,
- 48, 17, 12, 26, 220, 240, 2, 223, 246, 48, 17, 12, 26, 222, 86, 2, 223,
- 246, 48, 17, 12, 26, 222, 196, 2, 223, 246, 48, 17, 12, 26, 248, 160, 2,
- 223, 246, 48, 17, 12, 26, 218, 30, 2, 106, 210, 40, 17, 12, 26, 218, 30,
- 2, 73, 40, 17, 12, 26, 254, 104, 2, 106, 210, 40, 17, 12, 26, 254, 104,
- 2, 73, 40, 17, 12, 26, 242, 221, 2, 106, 210, 40, 17, 12, 26, 242, 221,
- 2, 73, 40, 17, 12, 26, 222, 86, 2, 106, 210, 40, 17, 12, 26, 222, 86, 2,
- 73, 40, 17, 12, 26, 220, 240, 2, 106, 210, 40, 17, 12, 26, 220, 240, 2,
- 73, 40, 17, 12, 26, 121, 2, 106, 210, 40, 17, 12, 26, 121, 2, 73, 40, 17,
- 12, 26, 145, 2, 106, 210, 40, 17, 12, 26, 145, 2, 73, 40, 17, 12, 26,
- 234, 136, 2, 106, 210, 40, 17, 12, 26, 234, 136, 2, 73, 40, 17, 12, 26,
- 222, 196, 2, 106, 210, 40, 17, 12, 26, 222, 196, 2, 73, 40, 17, 12, 26,
- 248, 160, 2, 106, 210, 40, 17, 12, 26, 248, 160, 2, 73, 40, 17, 12, 26,
- 220, 240, 2, 145, 40, 17, 12, 26, 220, 240, 2, 121, 40, 17, 12, 26, 220,
- 240, 2, 234, 136, 40, 17, 12, 26, 220, 240, 2, 63, 40, 17, 12, 26, 220,
- 240, 2, 223, 246, 40, 17, 12, 26, 222, 86, 2, 223, 246, 40, 17, 12, 26,
- 222, 196, 2, 223, 246, 40, 17, 12, 26, 248, 160, 2, 223, 246, 40, 17, 12,
- 26, 220, 240, 2, 145, 70, 17, 12, 26, 220, 240, 2, 121, 70, 17, 12, 26,
- 220, 240, 2, 234, 136, 70, 17, 12, 26, 220, 240, 2, 63, 70, 17, 12, 26,
- 222, 86, 2, 241, 203, 70, 17, 12, 26, 220, 240, 2, 241, 203, 70, 17, 12,
- 26, 218, 30, 2, 63, 70, 17, 12, 26, 222, 86, 2, 145, 138, 17, 12, 26,
- 222, 86, 2, 121, 138, 17, 12, 26, 222, 86, 2, 234, 136, 138, 17, 12, 26,
- 220, 240, 2, 145, 138, 17, 12, 26, 220, 240, 2, 121, 138, 17, 12, 26,
- 220, 240, 2, 234, 136, 138, 17, 12, 26, 218, 30, 2, 63, 138, 17, 12, 26,
- 212, 105, 2, 63, 138, 17, 12, 26, 106, 2, 244, 132, 40, 17, 12, 26, 106,
- 2, 244, 132, 48, 17, 227, 13, 42, 226, 131, 227, 13, 46, 226, 131, 12,
- 26, 217, 216, 2, 145, 2, 63, 70, 17, 12, 26, 217, 216, 2, 121, 2, 145,
- 40, 17, 12, 26, 217, 216, 2, 121, 2, 145, 70, 17, 12, 26, 217, 216, 2,
- 121, 2, 63, 70, 17, 12, 26, 217, 216, 2, 234, 136, 2, 63, 70, 17, 12, 26,
- 217, 216, 2, 63, 2, 145, 70, 17, 12, 26, 217, 216, 2, 63, 2, 121, 70, 17,
- 12, 26, 217, 216, 2, 63, 2, 234, 136, 70, 17, 12, 26, 145, 2, 63, 2, 121,
- 40, 17, 12, 26, 145, 2, 63, 2, 121, 70, 17, 12, 26, 121, 2, 63, 2, 73,
- 40, 17, 12, 26, 121, 2, 63, 2, 106, 210, 40, 17, 12, 26, 222, 86, 2, 121,
- 2, 145, 70, 17, 12, 26, 222, 86, 2, 145, 2, 121, 70, 17, 12, 26, 222, 86,
- 2, 145, 2, 106, 210, 40, 17, 12, 26, 222, 86, 2, 63, 2, 121, 40, 17, 12,
- 26, 222, 86, 2, 63, 2, 121, 70, 17, 12, 26, 222, 86, 2, 63, 2, 145, 70,
- 17, 12, 26, 222, 86, 2, 63, 2, 63, 40, 17, 12, 26, 222, 86, 2, 63, 2, 63,
- 70, 17, 12, 26, 222, 196, 2, 121, 2, 121, 40, 17, 12, 26, 222, 196, 2,
- 121, 2, 121, 70, 17, 12, 26, 222, 196, 2, 63, 2, 63, 40, 17, 12, 26, 220,
- 240, 2, 121, 2, 63, 40, 17, 12, 26, 220, 240, 2, 121, 2, 63, 70, 17, 12,
- 26, 220, 240, 2, 145, 2, 73, 40, 17, 12, 26, 220, 240, 2, 63, 2, 234,
- 136, 40, 17, 12, 26, 220, 240, 2, 63, 2, 234, 136, 70, 17, 12, 26, 220,
- 240, 2, 63, 2, 63, 40, 17, 12, 26, 220, 240, 2, 63, 2, 63, 70, 17, 12,
- 26, 248, 160, 2, 121, 2, 106, 210, 40, 17, 12, 26, 248, 160, 2, 234, 136,
- 2, 63, 40, 17, 12, 26, 248, 160, 2, 234, 136, 2, 63, 70, 17, 12, 26, 218,
- 30, 2, 63, 2, 121, 40, 17, 12, 26, 218, 30, 2, 63, 2, 121, 70, 17, 12,
- 26, 218, 30, 2, 63, 2, 63, 70, 17, 12, 26, 218, 30, 2, 63, 2, 73, 40, 17,
- 12, 26, 254, 104, 2, 145, 2, 63, 40, 17, 12, 26, 254, 104, 2, 63, 2, 63,
- 40, 17, 12, 26, 254, 104, 2, 63, 2, 63, 70, 17, 12, 26, 254, 104, 2, 63,
- 2, 106, 210, 40, 17, 12, 26, 242, 221, 2, 63, 2, 63, 40, 17, 12, 26, 242,
- 221, 2, 63, 2, 73, 40, 17, 12, 26, 242, 221, 2, 63, 2, 106, 210, 40, 17,
- 12, 26, 244, 112, 2, 234, 136, 2, 63, 40, 17, 12, 26, 244, 112, 2, 234,
- 136, 2, 63, 70, 17, 12, 26, 224, 226, 2, 63, 2, 121, 40, 17, 12, 26, 224,
- 226, 2, 63, 2, 63, 40, 17, 12, 26, 233, 127, 2, 121, 2, 63, 40, 17, 12,
- 26, 233, 127, 2, 121, 2, 73, 40, 17, 12, 26, 233, 127, 2, 121, 2, 106,
- 210, 40, 17, 12, 26, 233, 127, 2, 145, 2, 145, 70, 17, 12, 26, 233, 127,
- 2, 145, 2, 145, 40, 17, 12, 26, 233, 127, 2, 234, 136, 2, 63, 40, 17, 12,
- 26, 233, 127, 2, 234, 136, 2, 63, 70, 17, 12, 26, 233, 127, 2, 63, 2,
- 121, 40, 17, 12, 26, 233, 127, 2, 63, 2, 121, 70, 17, 12, 26, 63, 2, 121,
- 2, 145, 70, 17, 12, 26, 63, 2, 121, 2, 63, 70, 17, 12, 26, 63, 2, 121, 2,
- 73, 40, 17, 12, 26, 63, 2, 145, 2, 121, 70, 17, 12, 26, 63, 2, 145, 2,
- 63, 70, 17, 12, 26, 63, 2, 234, 136, 2, 145, 70, 17, 12, 26, 63, 2, 234,
- 136, 2, 63, 70, 17, 12, 26, 63, 2, 145, 2, 234, 136, 70, 17, 12, 26, 241,
- 203, 2, 63, 2, 145, 70, 17, 12, 26, 241, 203, 2, 63, 2, 63, 70, 17, 12,
- 26, 228, 174, 2, 121, 2, 63, 70, 17, 12, 26, 228, 174, 2, 121, 2, 106,
- 210, 40, 17, 12, 26, 228, 174, 2, 145, 2, 63, 40, 17, 12, 26, 228, 174,
- 2, 145, 2, 63, 70, 17, 12, 26, 228, 174, 2, 145, 2, 106, 210, 40, 17, 12,
- 26, 228, 174, 2, 63, 2, 73, 40, 17, 12, 26, 228, 174, 2, 63, 2, 106, 210,
- 40, 17, 12, 26, 73, 2, 63, 2, 63, 40, 17, 12, 26, 73, 2, 63, 2, 63, 70,
- 17, 12, 26, 251, 231, 2, 234, 136, 2, 73, 40, 17, 12, 26, 217, 216, 2,
- 145, 2, 73, 40, 17, 12, 26, 217, 216, 2, 145, 2, 106, 210, 40, 17, 12,
- 26, 217, 216, 2, 234, 136, 2, 73, 40, 17, 12, 26, 217, 216, 2, 234, 136,
- 2, 106, 210, 40, 17, 12, 26, 217, 216, 2, 63, 2, 73, 40, 17, 12, 26, 217,
- 216, 2, 63, 2, 106, 210, 40, 17, 12, 26, 145, 2, 63, 2, 73, 40, 17, 12,
- 26, 145, 2, 121, 2, 106, 210, 40, 17, 12, 26, 145, 2, 63, 2, 106, 210,
- 40, 17, 12, 26, 222, 86, 2, 234, 136, 2, 106, 210, 40, 17, 12, 26, 222,
- 196, 2, 121, 2, 73, 40, 17, 12, 26, 220, 240, 2, 121, 2, 73, 40, 17, 12,
- 26, 248, 160, 2, 121, 2, 73, 40, 17, 12, 26, 233, 127, 2, 145, 2, 73, 40,
- 17, 12, 26, 233, 127, 2, 63, 2, 73, 40, 17, 12, 26, 73, 2, 121, 2, 73,
- 40, 17, 12, 26, 73, 2, 145, 2, 73, 40, 17, 12, 26, 73, 2, 63, 2, 73, 40,
- 17, 12, 26, 63, 2, 63, 2, 73, 40, 17, 12, 26, 224, 226, 2, 63, 2, 73, 40,
- 17, 12, 26, 228, 174, 2, 121, 2, 73, 40, 17, 12, 26, 224, 226, 2, 63, 2,
- 121, 70, 17, 12, 26, 233, 127, 2, 121, 2, 63, 70, 17, 12, 26, 254, 104,
- 2, 63, 2, 73, 40, 17, 12, 26, 234, 255, 2, 63, 2, 73, 40, 17, 12, 26,
- 228, 174, 2, 145, 2, 121, 70, 17, 12, 26, 63, 2, 234, 136, 2, 73, 40, 17,
- 12, 26, 233, 127, 2, 145, 2, 63, 70, 17, 12, 26, 234, 255, 2, 63, 2, 63,
- 40, 17, 12, 26, 233, 127, 2, 145, 2, 63, 40, 17, 12, 26, 228, 174, 2,
- 145, 2, 121, 40, 17, 12, 26, 145, 2, 121, 2, 73, 40, 17, 12, 26, 121, 2,
- 145, 2, 73, 40, 17, 12, 26, 63, 2, 145, 2, 73, 40, 17, 12, 26, 244, 112,
- 2, 63, 2, 73, 40, 17, 12, 26, 251, 231, 2, 121, 2, 73, 40, 17, 12, 26,
- 234, 255, 2, 63, 2, 63, 70, 17, 12, 26, 254, 104, 2, 145, 2, 63, 70, 17,
- 12, 26, 222, 196, 2, 63, 2, 63, 70, 17, 12, 26, 222, 86, 2, 234, 136, 2,
- 73, 40, 17, 12, 26, 228, 174, 2, 145, 2, 73, 40, 17, 12, 26, 222, 175,
- 215, 102, 253, 153, 234, 13, 219, 70, 5, 48, 17, 12, 26, 224, 222, 215,
- 102, 253, 153, 234, 13, 219, 70, 5, 48, 17, 12, 26, 254, 62, 48, 17, 12,
- 26, 254, 91, 48, 17, 12, 26, 230, 223, 48, 17, 12, 26, 222, 176, 48, 17,
- 12, 26, 224, 35, 48, 17, 12, 26, 254, 80, 48, 17, 12, 26, 214, 33, 48,
- 17, 12, 26, 222, 175, 48, 17, 12, 26, 222, 174, 254, 80, 214, 32, 12, 26,
- 235, 134, 223, 187, 52, 12, 26, 251, 153, 253, 209, 253, 210, 43, 222,
- 76, 43, 221, 221, 43, 221, 153, 43, 221, 142, 43, 221, 131, 43, 221, 120,
- 43, 221, 109, 43, 221, 98, 43, 221, 87, 43, 222, 75, 43, 222, 64, 43,
- 222, 53, 43, 222, 42, 43, 222, 31, 43, 222, 20, 43, 222, 9, 225, 74, 243,
- 245, 31, 71, 249, 157, 225, 74, 243, 245, 31, 71, 105, 249, 157, 225, 74,
- 243, 245, 31, 71, 105, 243, 200, 219, 69, 225, 74, 243, 245, 31, 71, 249,
- 164, 225, 74, 243, 245, 31, 71, 221, 70, 225, 74, 243, 245, 31, 71, 244,
- 254, 77, 225, 74, 243, 245, 31, 71, 224, 158, 77, 225, 74, 243, 245, 31,
- 71, 42, 67, 233, 44, 125, 225, 74, 243, 245, 31, 71, 46, 67, 233, 44,
- 251, 83, 225, 74, 243, 245, 31, 71, 199, 245, 120, 37, 26, 42, 242, 9,
- 37, 26, 46, 242, 9, 37, 51, 217, 43, 42, 242, 9, 37, 51, 217, 43, 46,
- 242, 9, 37, 232, 38, 42, 242, 9, 37, 232, 38, 46, 242, 9, 37, 249, 137,
- 232, 37, 225, 74, 243, 245, 31, 71, 117, 62, 233, 80, 225, 74, 243, 245,
- 31, 71, 245, 118, 248, 101, 225, 74, 243, 245, 31, 71, 245, 109, 248,
- 101, 225, 74, 243, 245, 31, 71, 115, 232, 242, 225, 74, 243, 245, 31, 71,
- 214, 16, 115, 232, 242, 225, 74, 243, 245, 31, 71, 42, 226, 131, 225, 74,
- 243, 245, 31, 71, 46, 226, 131, 225, 74, 243, 245, 31, 71, 42, 249, 40,
- 125, 225, 74, 243, 245, 31, 71, 46, 249, 40, 125, 225, 74, 243, 245, 31,
- 71, 42, 216, 219, 220, 233, 125, 225, 74, 243, 245, 31, 71, 46, 216, 219,
- 220, 233, 125, 225, 74, 243, 245, 31, 71, 42, 83, 233, 44, 125, 225, 74,
- 243, 245, 31, 71, 46, 83, 233, 44, 125, 225, 74, 243, 245, 31, 71, 42,
- 51, 254, 19, 125, 225, 74, 243, 245, 31, 71, 46, 51, 254, 19, 125, 225,
- 74, 243, 245, 31, 71, 42, 254, 19, 125, 225, 74, 243, 245, 31, 71, 46,
- 254, 19, 125, 225, 74, 243, 245, 31, 71, 42, 249, 100, 125, 225, 74, 243,
- 245, 31, 71, 46, 249, 100, 125, 225, 74, 243, 245, 31, 71, 42, 67, 249,
- 100, 125, 225, 74, 243, 245, 31, 71, 46, 67, 249, 100, 125, 221, 52, 247,
- 74, 67, 221, 52, 247, 74, 225, 74, 243, 245, 31, 71, 42, 41, 125, 225,
- 74, 243, 245, 31, 71, 46, 41, 125, 248, 100, 226, 243, 250, 106, 226,
- 243, 214, 16, 226, 243, 51, 214, 16, 226, 243, 248, 100, 115, 232, 242,
- 250, 106, 115, 232, 242, 214, 16, 115, 232, 242, 3, 249, 157, 3, 105,
- 249, 157, 3, 243, 200, 219, 69, 3, 221, 70, 3, 249, 164, 3, 224, 158, 77,
- 3, 244, 254, 77, 3, 245, 118, 248, 101, 3, 42, 226, 131, 3, 46, 226, 131,
- 3, 42, 249, 40, 125, 3, 46, 249, 40, 125, 3, 42, 216, 219, 220, 233, 125,
- 3, 46, 216, 219, 220, 233, 125, 3, 50, 52, 3, 254, 35, 3, 253, 132, 3,
- 94, 52, 3, 240, 159, 3, 233, 39, 52, 3, 242, 107, 52, 3, 245, 61, 52, 3,
- 223, 203, 219, 231, 3, 247, 86, 52, 3, 226, 57, 52, 3, 249, 156, 253,
- 122, 12, 244, 132, 48, 17, 12, 217, 251, 2, 244, 132, 49, 12, 248, 128,
- 48, 17, 12, 218, 28, 243, 227, 12, 234, 209, 48, 17, 12, 244, 134, 48,
- 17, 12, 244, 134, 138, 17, 12, 248, 130, 48, 17, 12, 248, 130, 138, 17,
- 12, 234, 211, 48, 17, 12, 234, 211, 138, 17, 12, 221, 16, 48, 17, 12,
- 221, 16, 138, 17, 12, 218, 247, 48, 17, 12, 218, 247, 138, 17, 12, 1,
- 192, 48, 17, 12, 1, 106, 2, 232, 33, 78, 48, 17, 12, 1, 106, 2, 232, 33,
- 78, 40, 17, 12, 1, 106, 2, 192, 78, 48, 17, 12, 1, 106, 2, 192, 78, 40,
- 17, 12, 1, 214, 15, 2, 192, 78, 48, 17, 12, 1, 214, 15, 2, 192, 78, 40,
- 17, 12, 1, 106, 2, 192, 251, 220, 48, 17, 12, 1, 106, 2, 192, 251, 220,
- 40, 17, 12, 1, 73, 2, 192, 78, 48, 17, 12, 1, 73, 2, 192, 78, 40, 17, 12,
- 1, 73, 2, 192, 78, 70, 17, 12, 1, 73, 2, 192, 78, 138, 17, 12, 1, 106,
- 48, 17, 12, 1, 106, 40, 17, 12, 1, 251, 231, 48, 17, 12, 1, 251, 231, 40,
- 17, 12, 1, 251, 231, 70, 17, 12, 1, 251, 231, 138, 17, 12, 1, 217, 216,
- 231, 228, 48, 17, 12, 1, 217, 216, 231, 228, 40, 17, 12, 1, 217, 216, 48,
- 17, 12, 1, 217, 216, 40, 17, 12, 1, 217, 216, 70, 17, 12, 1, 217, 216,
- 138, 17, 12, 1, 217, 146, 48, 17, 12, 1, 217, 146, 40, 17, 12, 1, 217,
- 146, 70, 17, 12, 1, 217, 146, 138, 17, 12, 1, 145, 48, 17, 12, 1, 145,
- 40, 17, 12, 1, 145, 70, 17, 12, 1, 145, 138, 17, 12, 1, 121, 48, 17, 12,
- 1, 121, 40, 17, 12, 1, 121, 70, 17, 12, 1, 121, 138, 17, 12, 1, 234, 136,
- 48, 17, 12, 1, 234, 136, 40, 17, 12, 1, 234, 136, 70, 17, 12, 1, 234,
- 136, 138, 17, 12, 1, 248, 141, 48, 17, 12, 1, 248, 141, 40, 17, 12, 1,
- 217, 156, 48, 17, 12, 1, 217, 156, 40, 17, 12, 1, 223, 246, 48, 17, 12,
- 1, 223, 246, 40, 17, 12, 1, 212, 102, 48, 17, 12, 1, 212, 102, 40, 17,
- 12, 1, 222, 86, 48, 17, 12, 1, 222, 86, 40, 17, 12, 1, 222, 86, 70, 17,
- 12, 1, 222, 86, 138, 17, 12, 1, 220, 240, 48, 17, 12, 1, 220, 240, 40,
- 17, 12, 1, 220, 240, 70, 17, 12, 1, 220, 240, 138, 17, 12, 1, 222, 196,
- 48, 17, 12, 1, 222, 196, 40, 17, 12, 1, 222, 196, 70, 17, 12, 1, 222,
- 196, 138, 17, 12, 1, 248, 160, 48, 17, 12, 1, 248, 160, 40, 17, 12, 1,
- 248, 160, 70, 17, 12, 1, 248, 160, 138, 17, 12, 1, 218, 30, 48, 17, 12,
- 1, 218, 30, 40, 17, 12, 1, 218, 30, 70, 17, 12, 1, 218, 30, 138, 17, 12,
- 1, 212, 105, 48, 17, 12, 1, 212, 105, 40, 17, 12, 1, 212, 105, 70, 17,
- 12, 1, 212, 105, 138, 17, 12, 1, 254, 104, 48, 17, 12, 1, 254, 104, 40,
- 17, 12, 1, 254, 104, 70, 17, 12, 1, 254, 104, 138, 17, 12, 1, 242, 221,
- 48, 17, 12, 1, 242, 221, 40, 17, 12, 1, 242, 221, 70, 17, 12, 1, 242,
- 221, 138, 17, 12, 1, 244, 112, 48, 17, 12, 1, 244, 112, 40, 17, 12, 1,
- 244, 112, 70, 17, 12, 1, 244, 112, 138, 17, 12, 1, 224, 226, 48, 17, 12,
- 1, 224, 226, 40, 17, 12, 1, 224, 226, 70, 17, 12, 1, 224, 226, 138, 17,
- 12, 1, 234, 255, 48, 17, 12, 1, 234, 255, 40, 17, 12, 1, 234, 255, 70,
- 17, 12, 1, 234, 255, 138, 17, 12, 1, 233, 127, 48, 17, 12, 1, 233, 127,
- 40, 17, 12, 1, 233, 127, 70, 17, 12, 1, 233, 127, 138, 17, 12, 1, 63, 48,
- 17, 12, 1, 63, 40, 17, 12, 1, 63, 70, 17, 12, 1, 63, 138, 17, 12, 1, 228,
- 174, 48, 17, 12, 1, 228, 174, 40, 17, 12, 1, 228, 174, 70, 17, 12, 1,
- 228, 174, 138, 17, 12, 1, 241, 203, 48, 17, 12, 1, 241, 203, 40, 17, 12,
- 1, 241, 203, 70, 17, 12, 1, 241, 203, 138, 17, 12, 1, 214, 15, 48, 17,
- 12, 1, 214, 15, 40, 17, 12, 1, 106, 210, 48, 17, 12, 1, 106, 210, 40, 17,
- 12, 1, 73, 48, 17, 12, 1, 73, 40, 17, 12, 1, 73, 70, 17, 12, 1, 73, 138,
- 17, 12, 26, 233, 127, 2, 106, 2, 232, 33, 78, 48, 17, 12, 26, 233, 127,
- 2, 106, 2, 232, 33, 78, 40, 17, 12, 26, 233, 127, 2, 106, 2, 192, 78, 48,
- 17, 12, 26, 233, 127, 2, 106, 2, 192, 78, 40, 17, 12, 26, 233, 127, 2,
- 106, 2, 192, 251, 220, 48, 17, 12, 26, 233, 127, 2, 106, 2, 192, 251,
- 220, 40, 17, 12, 26, 233, 127, 2, 106, 48, 17, 12, 26, 233, 127, 2, 106,
- 40, 17, 212, 80, 213, 230, 228, 184, 219, 206, 120, 244, 254, 77, 120,
- 224, 143, 77, 120, 50, 52, 120, 247, 86, 52, 120, 226, 57, 52, 120, 254,
- 35, 120, 253, 226, 120, 42, 226, 131, 120, 46, 226, 131, 120, 253, 132,
- 120, 94, 52, 120, 249, 157, 120, 240, 159, 120, 243, 200, 219, 69, 120,
- 219, 231, 120, 21, 212, 79, 120, 21, 116, 120, 21, 109, 120, 21, 166,
- 120, 21, 163, 120, 21, 180, 120, 21, 189, 120, 21, 198, 120, 21, 195,
- 120, 21, 200, 120, 249, 164, 120, 221, 70, 120, 233, 39, 52, 120, 245,
- 61, 52, 120, 242, 107, 52, 120, 224, 158, 77, 120, 249, 156, 253, 122,
- 120, 7, 6, 1, 61, 120, 7, 6, 1, 253, 74, 120, 7, 6, 1, 250, 252, 120, 7,
- 6, 1, 249, 3, 120, 7, 6, 1, 74, 120, 7, 6, 1, 244, 230, 120, 7, 6, 1,
- 243, 177, 120, 7, 6, 1, 242, 41, 120, 7, 6, 1, 72, 120, 7, 6, 1, 235,
- 142, 120, 7, 6, 1, 235, 27, 120, 7, 6, 1, 150, 120, 7, 6, 1, 183, 120, 7,
- 6, 1, 204, 120, 7, 6, 1, 75, 120, 7, 6, 1, 226, 229, 120, 7, 6, 1, 224,
- 240, 120, 7, 6, 1, 149, 120, 7, 6, 1, 197, 120, 7, 6, 1, 218, 99, 120, 7,
- 6, 1, 69, 120, 7, 6, 1, 215, 79, 120, 7, 6, 1, 214, 82, 120, 7, 6, 1,
- 213, 166, 120, 7, 6, 1, 213, 105, 120, 7, 6, 1, 212, 152, 120, 42, 41,
- 125, 120, 223, 203, 219, 231, 120, 46, 41, 125, 120, 249, 224, 254, 174,
- 120, 115, 232, 242, 120, 242, 114, 254, 174, 120, 7, 3, 1, 61, 120, 7, 3,
- 1, 253, 74, 120, 7, 3, 1, 250, 252, 120, 7, 3, 1, 249, 3, 120, 7, 3, 1,
- 74, 120, 7, 3, 1, 244, 230, 120, 7, 3, 1, 243, 177, 120, 7, 3, 1, 242,
- 41, 120, 7, 3, 1, 72, 120, 7, 3, 1, 235, 142, 120, 7, 3, 1, 235, 27, 120,
- 7, 3, 1, 150, 120, 7, 3, 1, 183, 120, 7, 3, 1, 204, 120, 7, 3, 1, 75,
- 120, 7, 3, 1, 226, 229, 120, 7, 3, 1, 224, 240, 120, 7, 3, 1, 149, 120,
- 7, 3, 1, 197, 120, 7, 3, 1, 218, 99, 120, 7, 3, 1, 69, 120, 7, 3, 1, 215,
- 79, 120, 7, 3, 1, 214, 82, 120, 7, 3, 1, 213, 166, 120, 7, 3, 1, 213,
- 105, 120, 7, 3, 1, 212, 152, 120, 42, 249, 40, 125, 120, 71, 232, 242,
- 120, 46, 249, 40, 125, 120, 217, 42, 120, 42, 67, 226, 131, 120, 46, 67,
- 226, 131, 98, 105, 243, 200, 219, 69, 98, 42, 249, 100, 125, 98, 46, 249,
- 100, 125, 98, 105, 249, 157, 98, 56, 231, 37, 247, 74, 98, 56, 1, 213,
- 214, 98, 56, 1, 3, 61, 98, 56, 1, 3, 72, 98, 56, 1, 3, 69, 98, 56, 1, 3,
- 74, 98, 56, 1, 3, 75, 98, 56, 1, 3, 186, 98, 56, 1, 3, 212, 203, 98, 56,
- 1, 3, 212, 235, 98, 56, 1, 3, 216, 82, 98, 234, 206, 225, 57, 219, 218,
- 77, 98, 56, 1, 61, 98, 56, 1, 72, 98, 56, 1, 69, 98, 56, 1, 74, 98, 56,
- 1, 75, 98, 56, 1, 181, 98, 56, 1, 234, 101, 98, 56, 1, 233, 238, 98, 56,
- 1, 234, 188, 98, 56, 1, 234, 37, 98, 56, 1, 222, 202, 98, 56, 1, 220,
- 117, 98, 56, 1, 219, 27, 98, 56, 1, 222, 100, 98, 56, 1, 219, 242, 98,
- 56, 1, 218, 52, 98, 56, 1, 217, 71, 98, 56, 1, 216, 82, 98, 56, 1, 217,
- 229, 98, 56, 1, 108, 98, 56, 1, 205, 98, 56, 1, 229, 64, 98, 56, 1, 228,
- 92, 98, 56, 1, 229, 187, 98, 56, 1, 228, 185, 98, 56, 1, 159, 98, 56, 1,
- 241, 165, 98, 56, 1, 240, 212, 98, 56, 1, 241, 222, 98, 56, 1, 241, 54,
- 98, 56, 1, 188, 98, 56, 1, 231, 42, 98, 56, 1, 230, 172, 98, 56, 1, 231,
- 156, 98, 56, 1, 230, 231, 98, 56, 1, 186, 98, 56, 1, 212, 203, 98, 56, 1,
- 212, 235, 98, 56, 1, 203, 98, 56, 1, 223, 188, 98, 56, 1, 223, 51, 98,
- 56, 1, 224, 21, 98, 56, 1, 223, 112, 98, 56, 1, 214, 49, 98, 56, 1, 204,
- 98, 56, 214, 116, 219, 218, 77, 98, 56, 221, 75, 219, 218, 77, 98, 23,
- 244, 72, 98, 23, 1, 234, 67, 98, 23, 1, 219, 150, 98, 23, 1, 234, 60, 98,
- 23, 1, 229, 57, 98, 23, 1, 229, 55, 98, 23, 1, 229, 54, 98, 23, 1, 217,
- 55, 98, 23, 1, 219, 139, 98, 23, 1, 223, 179, 98, 23, 1, 223, 174, 98,
- 23, 1, 223, 171, 98, 23, 1, 223, 164, 98, 23, 1, 223, 159, 98, 23, 1,
- 223, 154, 98, 23, 1, 223, 165, 98, 23, 1, 223, 177, 98, 23, 1, 231, 30,
- 98, 23, 1, 225, 227, 98, 23, 1, 219, 147, 98, 23, 1, 225, 216, 98, 23, 1,
- 220, 76, 98, 23, 1, 219, 144, 98, 23, 1, 236, 51, 98, 23, 1, 249, 239,
- 98, 23, 1, 219, 154, 98, 23, 1, 250, 43, 98, 23, 1, 234, 116, 98, 23, 1,
- 217, 126, 98, 23, 1, 226, 7, 98, 23, 1, 241, 158, 98, 23, 1, 61, 98, 23,
- 1, 254, 148, 98, 23, 1, 186, 98, 23, 1, 213, 80, 98, 23, 1, 245, 76, 98,
- 23, 1, 74, 98, 23, 1, 213, 27, 98, 23, 1, 213, 38, 98, 23, 1, 75, 98, 23,
- 1, 214, 49, 98, 23, 1, 214, 46, 98, 23, 1, 227, 99, 98, 23, 1, 212, 235,
- 98, 23, 1, 69, 98, 23, 1, 213, 252, 98, 23, 1, 214, 6, 98, 23, 1, 213,
- 235, 98, 23, 1, 212, 203, 98, 23, 1, 245, 22, 98, 23, 1, 212, 255, 98,
- 23, 1, 72, 120, 250, 110, 52, 120, 225, 108, 52, 120, 228, 163, 52, 120,
- 232, 37, 120, 251, 63, 134, 120, 213, 31, 52, 120, 213, 204, 52, 98, 243,
- 243, 177, 214, 216, 98, 132, 68, 98, 215, 124, 68, 98, 95, 68, 98, 246,
- 58, 68, 98, 83, 219, 166, 98, 67, 249, 228, 235, 201, 254, 10, 254, 29,
- 235, 201, 254, 10, 221, 57, 235, 201, 254, 10, 217, 189, 227, 113, 223,
- 224, 250, 78, 223, 224, 250, 78, 58, 54, 4, 253, 58, 61, 58, 54, 4, 253,
- 27, 74, 58, 54, 4, 253, 36, 72, 58, 54, 4, 253, 4, 75, 58, 54, 4, 253,
- 54, 69, 58, 54, 4, 253, 73, 248, 164, 58, 54, 4, 253, 20, 248, 41, 58,
- 54, 4, 253, 60, 247, 211, 58, 54, 4, 253, 50, 247, 99, 58, 54, 4, 253,
- 14, 246, 33, 58, 54, 4, 253, 8, 235, 139, 58, 54, 4, 253, 19, 235, 127,
- 58, 54, 4, 253, 29, 235, 71, 58, 54, 4, 253, 0, 235, 54, 58, 54, 4, 252,
- 244, 181, 58, 54, 4, 253, 21, 234, 188, 58, 54, 4, 252, 254, 234, 101,
- 58, 54, 4, 252, 251, 234, 37, 58, 54, 4, 252, 240, 233, 238, 58, 54, 4,
- 252, 241, 188, 58, 54, 4, 253, 51, 231, 156, 58, 54, 4, 252, 248, 231,
- 42, 58, 54, 4, 253, 49, 230, 231, 58, 54, 4, 253, 41, 230, 172, 58, 54,
- 4, 253, 62, 205, 58, 54, 4, 253, 40, 229, 187, 58, 54, 4, 253, 34, 229,
- 64, 58, 54, 4, 253, 13, 228, 185, 58, 54, 4, 253, 10, 228, 92, 58, 54, 4,
- 253, 69, 193, 58, 54, 4, 252, 249, 226, 96, 58, 54, 4, 253, 26, 225, 240,
- 58, 54, 4, 253, 53, 225, 150, 58, 54, 4, 253, 15, 225, 35, 58, 54, 4,
- 253, 48, 224, 232, 58, 54, 4, 252, 243, 224, 213, 58, 54, 4, 253, 43,
- 224, 198, 58, 54, 4, 253, 32, 224, 187, 58, 54, 4, 253, 5, 203, 58, 54,
- 4, 253, 37, 224, 21, 58, 54, 4, 253, 12, 223, 188, 58, 54, 4, 253, 71,
- 223, 112, 58, 54, 4, 253, 38, 223, 51, 58, 54, 4, 253, 33, 222, 202, 58,
- 54, 4, 253, 56, 222, 100, 58, 54, 4, 253, 24, 220, 117, 58, 54, 4, 253,
- 52, 219, 242, 58, 54, 4, 253, 7, 219, 27, 58, 54, 4, 253, 6, 218, 52, 58,
- 54, 4, 253, 67, 217, 229, 58, 54, 4, 253, 28, 217, 71, 58, 54, 4, 253,
- 65, 108, 58, 54, 4, 252, 252, 216, 82, 58, 54, 4, 253, 11, 214, 49, 58,
- 54, 4, 252, 246, 214, 6, 58, 54, 4, 253, 25, 213, 235, 58, 54, 4, 253,
- 23, 213, 214, 58, 54, 4, 253, 47, 212, 109, 58, 54, 4, 252, 247, 212, 87,
- 58, 54, 4, 253, 44, 212, 16, 58, 54, 4, 253, 39, 254, 234, 58, 54, 4,
- 253, 22, 254, 233, 58, 54, 4, 252, 237, 253, 108, 58, 54, 4, 252, 250,
- 246, 1, 58, 54, 4, 252, 233, 246, 0, 58, 54, 4, 253, 17, 228, 31, 58, 54,
- 4, 253, 35, 225, 34, 58, 54, 4, 253, 3, 225, 37, 58, 54, 4, 252, 245,
- 224, 76, 58, 54, 4, 253, 31, 224, 75, 58, 54, 4, 252, 253, 223, 111, 58,
- 54, 4, 252, 255, 218, 50, 58, 54, 4, 252, 235, 216, 43, 58, 54, 4, 252,
- 232, 109, 58, 54, 16, 253, 46, 58, 54, 16, 253, 45, 58, 54, 16, 253, 42,
- 58, 54, 16, 253, 30, 58, 54, 16, 253, 18, 58, 54, 16, 253, 16, 58, 54,
- 16, 253, 9, 58, 54, 16, 253, 2, 58, 54, 16, 253, 1, 58, 54, 16, 252, 242,
- 58, 54, 16, 252, 239, 58, 54, 16, 252, 238, 58, 54, 16, 252, 236, 58, 54,
- 16, 252, 234, 58, 54, 102, 252, 231, 231, 248, 58, 54, 102, 252, 230,
- 213, 208, 58, 54, 102, 252, 229, 248, 25, 58, 54, 102, 252, 228, 245, 58,
- 58, 54, 102, 252, 227, 231, 222, 58, 54, 102, 252, 226, 219, 101, 58, 54,
- 102, 252, 225, 245, 4, 58, 54, 102, 252, 224, 224, 45, 58, 54, 102, 252,
- 223, 220, 242, 58, 54, 102, 252, 222, 241, 221, 58, 54, 102, 252, 221,
- 219, 212, 58, 54, 102, 252, 220, 251, 126, 58, 54, 102, 252, 219, 249,
- 84, 58, 54, 102, 252, 218, 251, 44, 58, 54, 102, 252, 217, 213, 243, 58,
- 54, 102, 252, 216, 252, 56, 58, 54, 102, 252, 215, 227, 71, 58, 54, 102,
- 252, 214, 219, 186, 58, 54, 102, 252, 213, 249, 11, 58, 54, 230, 212,
- 252, 212, 234, 229, 58, 54, 230, 212, 252, 211, 234, 237, 58, 54, 102,
- 252, 210, 227, 84, 58, 54, 102, 252, 209, 213, 221, 58, 54, 102, 252,
- 208, 58, 54, 230, 212, 252, 207, 253, 188, 58, 54, 230, 212, 252, 206,
- 231, 116, 58, 54, 102, 252, 205, 251, 62, 58, 54, 102, 252, 204, 242,
- 142, 58, 54, 102, 252, 203, 58, 54, 102, 252, 202, 213, 199, 58, 54, 102,
- 252, 201, 58, 54, 102, 252, 200, 58, 54, 102, 252, 199, 240, 235, 58, 54,
- 102, 252, 198, 58, 54, 102, 252, 197, 58, 54, 102, 252, 196, 58, 54, 230,
- 212, 252, 194, 216, 56, 58, 54, 102, 252, 193, 58, 54, 102, 252, 192, 58,
- 54, 102, 252, 191, 249, 187, 58, 54, 102, 252, 190, 58, 54, 102, 252,
- 189, 58, 54, 102, 252, 188, 243, 69, 58, 54, 102, 252, 187, 253, 175, 58,
- 54, 102, 252, 186, 58, 54, 102, 252, 185, 58, 54, 102, 252, 184, 58, 54,
- 102, 252, 183, 58, 54, 102, 252, 182, 58, 54, 102, 252, 181, 58, 54, 102,
- 252, 180, 58, 54, 102, 252, 179, 58, 54, 102, 252, 178, 58, 54, 102, 252,
- 177, 230, 204, 58, 54, 102, 252, 176, 58, 54, 102, 252, 175, 216, 193,
- 58, 54, 102, 252, 174, 58, 54, 102, 252, 173, 58, 54, 102, 252, 172, 58,
- 54, 102, 252, 171, 58, 54, 102, 252, 170, 58, 54, 102, 252, 169, 58, 54,
- 102, 252, 168, 58, 54, 102, 252, 167, 58, 54, 102, 252, 166, 58, 54, 102,
- 252, 165, 58, 54, 102, 252, 164, 58, 54, 102, 252, 163, 241, 195, 58, 54,
- 102, 252, 142, 243, 253, 58, 54, 102, 252, 139, 252, 36, 58, 54, 102,
- 252, 134, 219, 193, 58, 54, 102, 252, 133, 68, 58, 54, 102, 252, 132, 58,
- 54, 102, 252, 131, 218, 181, 58, 54, 102, 252, 130, 58, 54, 102, 252,
- 129, 58, 54, 102, 252, 128, 213, 239, 250, 75, 58, 54, 102, 252, 127,
- 250, 75, 58, 54, 102, 252, 126, 250, 76, 243, 225, 58, 54, 102, 252, 125,
- 213, 241, 58, 54, 102, 252, 124, 58, 54, 102, 252, 123, 58, 54, 230, 212,
- 252, 122, 247, 150, 58, 54, 102, 252, 121, 58, 54, 102, 252, 120, 58, 54,
- 102, 252, 118, 58, 54, 102, 252, 117, 58, 54, 102, 252, 116, 58, 54, 102,
- 252, 115, 248, 104, 58, 54, 102, 252, 114, 58, 54, 102, 252, 113, 58, 54,
- 102, 252, 112, 58, 54, 102, 252, 111, 58, 54, 102, 252, 110, 58, 54, 102,
- 214, 163, 252, 195, 58, 54, 102, 214, 163, 252, 162, 58, 54, 102, 214,
- 163, 252, 161, 58, 54, 102, 214, 163, 252, 160, 58, 54, 102, 214, 163,
- 252, 159, 58, 54, 102, 214, 163, 252, 158, 58, 54, 102, 214, 163, 252,
- 157, 58, 54, 102, 214, 163, 252, 156, 58, 54, 102, 214, 163, 252, 155,
- 58, 54, 102, 214, 163, 252, 154, 58, 54, 102, 214, 163, 252, 153, 58, 54,
- 102, 214, 163, 252, 152, 58, 54, 102, 214, 163, 252, 151, 58, 54, 102,
- 214, 163, 252, 150, 58, 54, 102, 214, 163, 252, 149, 58, 54, 102, 214,
- 163, 252, 148, 58, 54, 102, 214, 163, 252, 147, 58, 54, 102, 214, 163,
- 252, 146, 58, 54, 102, 214, 163, 252, 145, 58, 54, 102, 214, 163, 252,
- 144, 58, 54, 102, 214, 163, 252, 143, 58, 54, 102, 214, 163, 252, 141,
- 58, 54, 102, 214, 163, 252, 140, 58, 54, 102, 214, 163, 252, 138, 58, 54,
- 102, 214, 163, 252, 137, 58, 54, 102, 214, 163, 252, 136, 58, 54, 102,
- 214, 163, 252, 135, 58, 54, 102, 214, 163, 252, 119, 58, 54, 102, 214,
- 163, 252, 109, 254, 141, 213, 196, 221, 58, 232, 242, 254, 141, 213, 196,
- 221, 58, 247, 74, 254, 141, 250, 66, 77, 254, 141, 50, 116, 254, 141, 50,
- 109, 254, 141, 50, 166, 254, 141, 50, 163, 254, 141, 50, 180, 254, 141,
- 50, 189, 254, 141, 50, 198, 254, 141, 50, 195, 254, 141, 50, 200, 254,
- 141, 50, 217, 200, 254, 141, 50, 216, 38, 254, 141, 50, 217, 115, 254,
- 141, 50, 243, 240, 254, 141, 50, 244, 83, 254, 141, 50, 220, 39, 254,
- 141, 50, 221, 37, 254, 141, 50, 245, 141, 254, 141, 50, 229, 26, 254,
- 141, 50, 122, 240, 200, 254, 141, 50, 117, 240, 200, 254, 141, 50, 133,
- 240, 200, 254, 141, 50, 243, 237, 240, 200, 254, 141, 50, 244, 50, 240,
- 200, 254, 141, 50, 220, 53, 240, 200, 254, 141, 50, 221, 43, 240, 200,
- 254, 141, 50, 245, 150, 240, 200, 254, 141, 50, 229, 31, 240, 200, 254,
- 141, 50, 122, 217, 100, 254, 141, 50, 117, 217, 100, 254, 141, 50, 133,
- 217, 100, 254, 141, 50, 243, 237, 217, 100, 254, 141, 50, 244, 50, 217,
- 100, 254, 141, 50, 220, 53, 217, 100, 254, 141, 50, 221, 43, 217, 100,
- 254, 141, 50, 245, 150, 217, 100, 254, 141, 50, 229, 31, 217, 100, 254,
- 141, 50, 217, 201, 217, 100, 254, 141, 50, 216, 39, 217, 100, 254, 141,
- 50, 217, 116, 217, 100, 254, 141, 50, 243, 241, 217, 100, 254, 141, 50,
- 244, 84, 217, 100, 254, 141, 50, 220, 40, 217, 100, 254, 141, 50, 221,
- 38, 217, 100, 254, 141, 50, 245, 142, 217, 100, 254, 141, 50, 229, 27,
- 217, 100, 254, 141, 213, 255, 252, 48, 215, 144, 254, 141, 213, 255, 244,
- 61, 219, 4, 254, 141, 213, 255, 222, 95, 219, 4, 254, 141, 213, 255, 217,
- 122, 219, 4, 254, 141, 213, 255, 243, 230, 219, 4, 254, 141, 246, 36,
- 231, 155, 244, 61, 219, 4, 254, 141, 232, 228, 231, 155, 244, 61, 219, 4,
- 254, 141, 231, 155, 222, 95, 219, 4, 254, 141, 231, 155, 217, 122, 219,
- 4, 25, 254, 167, 253, 110, 122, 224, 166, 25, 254, 167, 253, 110, 122,
- 242, 9, 25, 254, 167, 253, 110, 122, 246, 54, 25, 254, 167, 253, 110,
- 180, 25, 254, 167, 253, 110, 244, 83, 25, 254, 167, 253, 110, 244, 50,
- 240, 200, 25, 254, 167, 253, 110, 244, 50, 217, 100, 25, 254, 167, 253,
- 110, 244, 84, 217, 100, 25, 254, 167, 253, 110, 244, 50, 218, 18, 25,
- 254, 167, 253, 110, 217, 201, 218, 18, 25, 254, 167, 253, 110, 244, 84,
- 218, 18, 25, 254, 167, 253, 110, 122, 240, 201, 218, 18, 25, 254, 167,
- 253, 110, 244, 50, 240, 201, 218, 18, 25, 254, 167, 253, 110, 122, 217,
- 101, 218, 18, 25, 254, 167, 253, 110, 244, 50, 217, 101, 218, 18, 25,
- 254, 167, 253, 110, 244, 50, 219, 90, 25, 254, 167, 253, 110, 217, 201,
- 219, 90, 25, 254, 167, 253, 110, 244, 84, 219, 90, 25, 254, 167, 253,
- 110, 122, 240, 201, 219, 90, 25, 254, 167, 253, 110, 244, 50, 240, 201,
- 219, 90, 25, 254, 167, 253, 110, 122, 217, 101, 219, 90, 25, 254, 167,
- 253, 110, 217, 201, 217, 101, 219, 90, 25, 254, 167, 253, 110, 244, 84,
- 217, 101, 219, 90, 25, 254, 167, 253, 110, 217, 201, 230, 234, 25, 254,
- 167, 241, 189, 122, 225, 164, 25, 254, 167, 217, 134, 116, 25, 254, 167,
- 241, 186, 116, 25, 254, 167, 245, 67, 109, 25, 254, 167, 217, 134, 109,
- 25, 254, 167, 249, 8, 117, 246, 53, 25, 254, 167, 245, 67, 117, 246, 53,
- 25, 254, 167, 216, 161, 180, 25, 254, 167, 216, 161, 217, 200, 25, 254,
- 167, 216, 161, 217, 201, 254, 50, 17, 25, 254, 167, 241, 186, 217, 200,
- 25, 254, 167, 231, 108, 217, 200, 25, 254, 167, 217, 134, 217, 200, 25,
- 254, 167, 217, 134, 217, 115, 25, 254, 167, 216, 161, 244, 83, 25, 254,
- 167, 216, 161, 244, 84, 254, 50, 17, 25, 254, 167, 241, 186, 244, 83, 25,
- 254, 167, 217, 134, 244, 83, 25, 254, 167, 217, 134, 122, 240, 200, 25,
- 254, 167, 217, 134, 133, 240, 200, 25, 254, 167, 245, 67, 244, 50, 240,
- 200, 25, 254, 167, 216, 161, 244, 50, 240, 200, 25, 254, 167, 217, 134,
- 244, 50, 240, 200, 25, 254, 167, 250, 159, 244, 50, 240, 200, 25, 254,
- 167, 230, 4, 244, 50, 240, 200, 25, 254, 167, 217, 134, 122, 217, 100,
- 25, 254, 167, 217, 134, 244, 50, 217, 100, 25, 254, 167, 248, 8, 244, 50,
- 230, 234, 25, 254, 167, 219, 58, 244, 84, 230, 234, 25, 122, 151, 52, 25,
- 122, 151, 5, 254, 50, 17, 25, 117, 217, 120, 52, 25, 133, 224, 165, 52,
- 25, 213, 36, 52, 25, 218, 19, 52, 25, 246, 55, 52, 25, 227, 110, 52, 25,
- 117, 227, 109, 52, 25, 133, 227, 109, 52, 25, 243, 237, 227, 109, 52, 25,
- 244, 50, 227, 109, 52, 25, 231, 102, 52, 25, 233, 179, 252, 48, 52, 25,
- 232, 223, 52, 25, 226, 255, 52, 25, 213, 147, 52, 25, 253, 158, 52, 25,
- 253, 171, 52, 25, 242, 120, 52, 25, 216, 144, 252, 48, 52, 25, 212, 80,
- 52, 223, 100, 221, 34, 52, 223, 100, 215, 155, 52, 223, 100, 221, 62, 52,
- 223, 100, 221, 32, 52, 223, 100, 247, 165, 221, 32, 52, 223, 100, 220,
- 94, 52, 223, 100, 248, 4, 52, 223, 100, 224, 151, 52, 223, 100, 221, 50,
- 52, 223, 100, 246, 15, 52, 223, 100, 253, 153, 52, 223, 100, 250, 105,
- 52, 226, 19, 247, 143, 5, 226, 88, 226, 19, 247, 143, 5, 225, 158, 241,
- 219, 226, 19, 247, 143, 5, 217, 252, 241, 219, 226, 19, 247, 143, 5, 250,
- 179, 226, 19, 247, 143, 5, 250, 38, 226, 19, 247, 143, 5, 213, 208, 226,
- 19, 247, 143, 5, 241, 195, 226, 19, 247, 143, 5, 243, 61, 226, 19, 247,
- 143, 5, 217, 70, 226, 19, 247, 143, 5, 68, 226, 19, 247, 143, 5, 251, 95,
- 226, 19, 247, 143, 5, 220, 209, 226, 19, 247, 143, 5, 249, 181, 226, 19,
- 247, 143, 5, 231, 247, 226, 19, 247, 143, 5, 231, 199, 226, 19, 247, 143,
- 5, 222, 134, 226, 19, 247, 143, 5, 233, 9, 226, 19, 247, 143, 5, 251,
- 113, 226, 19, 247, 143, 5, 250, 163, 225, 167, 226, 19, 247, 143, 5, 247,
- 87, 226, 19, 247, 143, 5, 249, 161, 226, 19, 247, 143, 5, 220, 15, 226,
- 19, 247, 143, 5, 249, 162, 226, 19, 247, 143, 5, 251, 239, 226, 19, 247,
- 143, 5, 220, 196, 226, 19, 247, 143, 5, 240, 235, 226, 19, 247, 143, 5,
- 241, 163, 226, 19, 247, 143, 5, 251, 41, 233, 60, 226, 19, 247, 143, 5,
- 250, 156, 226, 19, 247, 143, 5, 224, 45, 226, 19, 247, 143, 5, 245, 186,
- 226, 19, 247, 143, 5, 246, 61, 226, 19, 247, 143, 5, 216, 69, 226, 19,
- 247, 143, 5, 251, 242, 226, 19, 247, 143, 5, 225, 168, 216, 193, 226, 19,
- 247, 143, 5, 214, 140, 226, 19, 247, 143, 5, 226, 146, 226, 19, 247, 143,
- 5, 223, 92, 226, 19, 247, 143, 5, 232, 252, 226, 19, 247, 143, 5, 226,
- 239, 252, 101, 226, 19, 247, 143, 5, 244, 17, 226, 19, 247, 143, 5, 242,
- 115, 226, 19, 247, 143, 5, 219, 59, 226, 19, 247, 143, 5, 3, 253, 84,
- 226, 19, 247, 143, 5, 214, 16, 252, 67, 226, 19, 247, 143, 5, 37, 227,
- 112, 90, 232, 120, 1, 61, 232, 120, 1, 74, 232, 120, 1, 253, 74, 232,
- 120, 1, 251, 196, 232, 120, 1, 243, 177, 232, 120, 1, 249, 3, 232, 120,
- 1, 72, 232, 120, 1, 214, 82, 232, 120, 1, 212, 152, 232, 120, 1, 217,
- 163, 232, 120, 1, 235, 142, 232, 120, 1, 235, 27, 232, 120, 1, 224, 240,
- 232, 120, 1, 150, 232, 120, 1, 183, 232, 120, 1, 204, 232, 120, 1, 230,
- 235, 232, 120, 1, 228, 199, 232, 120, 1, 69, 232, 120, 1, 226, 229, 232,
- 120, 1, 234, 56, 232, 120, 1, 149, 232, 120, 1, 197, 232, 120, 1, 218,
- 99, 232, 120, 1, 216, 118, 232, 120, 1, 254, 32, 232, 120, 1, 245, 108,
- 232, 120, 1, 242, 41, 232, 120, 1, 213, 166, 250, 169, 1, 61, 250, 169,
- 1, 226, 215, 250, 169, 1, 249, 3, 250, 169, 1, 150, 250, 169, 1, 215, 90,
- 250, 169, 1, 149, 250, 169, 1, 233, 86, 250, 169, 1, 254, 234, 250, 169,
- 1, 224, 240, 250, 169, 1, 253, 74, 250, 169, 1, 183, 250, 169, 1, 75,
- 250, 169, 1, 248, 166, 250, 169, 1, 218, 99, 250, 169, 1, 221, 26, 250,
- 169, 1, 221, 25, 250, 169, 1, 197, 250, 169, 1, 250, 251, 250, 169, 1,
- 69, 250, 169, 1, 228, 199, 250, 169, 1, 213, 166, 250, 169, 1, 204, 250,
- 169, 1, 216, 117, 250, 169, 1, 226, 229, 250, 169, 1, 219, 158, 250, 169,
- 1, 72, 250, 169, 1, 74, 250, 169, 1, 215, 87, 250, 169, 1, 235, 27, 250,
- 169, 1, 235, 18, 250, 169, 1, 229, 230, 250, 169, 1, 215, 92, 250, 169,
- 1, 243, 177, 250, 169, 1, 243, 112, 250, 169, 1, 219, 107, 250, 169, 1,
- 219, 106, 250, 169, 1, 229, 161, 250, 169, 1, 236, 28, 250, 169, 1, 250,
- 250, 250, 169, 1, 216, 118, 250, 169, 1, 215, 89, 250, 169, 1, 223, 82,
- 250, 169, 1, 231, 192, 250, 169, 1, 231, 191, 250, 169, 1, 231, 190, 250,
- 169, 1, 231, 189, 250, 169, 1, 233, 85, 250, 169, 1, 245, 190, 250, 169,
- 1, 215, 88, 53, 32, 1, 61, 53, 32, 1, 251, 251, 53, 32, 1, 234, 188, 53,
- 32, 1, 248, 41, 53, 32, 1, 74, 53, 32, 1, 214, 232, 53, 32, 1, 212, 87,
- 53, 32, 1, 241, 222, 53, 32, 1, 217, 148, 53, 32, 1, 72, 53, 32, 1, 181,
- 53, 32, 1, 245, 131, 53, 32, 1, 245, 117, 53, 32, 1, 245, 108, 53, 32, 1,
- 245, 40, 53, 32, 1, 75, 53, 32, 1, 226, 96, 53, 32, 1, 220, 243, 53, 32,
- 1, 233, 238, 53, 32, 1, 245, 55, 53, 32, 1, 245, 45, 53, 32, 1, 217, 229,
- 53, 32, 1, 69, 53, 32, 1, 245, 134, 53, 32, 1, 226, 12, 53, 32, 1, 234,
- 125, 53, 32, 1, 245, 159, 53, 32, 1, 245, 47, 53, 32, 1, 250, 67, 53, 32,
- 1, 236, 28, 53, 32, 1, 215, 92, 53, 32, 228, 54, 116, 53, 32, 228, 54,
- 180, 53, 32, 228, 54, 217, 200, 53, 32, 228, 54, 244, 83, 242, 129, 1,
- 254, 111, 242, 129, 1, 252, 82, 242, 129, 1, 242, 187, 242, 129, 1, 248,
- 148, 242, 129, 1, 254, 107, 242, 129, 1, 224, 223, 242, 129, 1, 235, 153,
- 242, 129, 1, 242, 20, 242, 129, 1, 217, 111, 242, 129, 1, 245, 140, 242,
- 129, 1, 233, 211, 242, 129, 1, 233, 136, 242, 129, 1, 231, 242, 242, 129,
- 1, 230, 6, 242, 129, 1, 235, 120, 242, 129, 1, 215, 107, 242, 129, 1,
- 226, 196, 242, 129, 1, 229, 26, 242, 129, 1, 224, 56, 242, 129, 1, 222,
- 136, 242, 129, 1, 217, 212, 242, 129, 1, 213, 219, 242, 129, 1, 244, 146,
- 242, 129, 1, 236, 32, 242, 129, 1, 240, 191, 242, 129, 1, 227, 7, 242,
- 129, 1, 229, 31, 240, 200, 215, 179, 1, 254, 56, 215, 179, 1, 251, 203,
- 215, 179, 1, 243, 84, 215, 179, 1, 234, 138, 215, 179, 1, 248, 5, 215,
- 179, 1, 241, 54, 215, 179, 1, 213, 214, 215, 179, 1, 212, 78, 215, 179,
- 1, 240, 228, 215, 179, 1, 217, 183, 215, 179, 1, 212, 224, 215, 179, 1,
- 234, 254, 215, 179, 1, 220, 200, 215, 179, 1, 233, 122, 215, 179, 1, 231,
- 129, 215, 179, 1, 247, 229, 215, 179, 1, 228, 50, 215, 179, 1, 212, 8,
- 215, 179, 1, 222, 163, 215, 179, 1, 254, 103, 215, 179, 1, 225, 35, 215,
- 179, 1, 222, 194, 215, 179, 1, 224, 180, 215, 179, 1, 224, 36, 215, 179,
- 1, 217, 152, 215, 179, 1, 242, 220, 215, 179, 1, 108, 215, 179, 1, 72,
- 215, 179, 1, 69, 215, 179, 1, 219, 117, 215, 179, 213, 196, 247, 124, 53,
- 226, 45, 5, 61, 53, 226, 45, 5, 72, 53, 226, 45, 5, 69, 53, 226, 45, 5,
- 181, 53, 226, 45, 5, 233, 238, 53, 226, 45, 5, 243, 110, 53, 226, 45, 5,
- 242, 92, 53, 226, 45, 5, 213, 153, 53, 226, 45, 5, 250, 219, 53, 226, 45,
- 5, 235, 139, 53, 226, 45, 5, 235, 110, 53, 226, 45, 5, 218, 52, 53, 226,
- 45, 5, 216, 82, 53, 226, 45, 5, 248, 164, 53, 226, 45, 5, 247, 211, 53,
- 226, 45, 5, 246, 33, 53, 226, 45, 5, 217, 161, 53, 226, 45, 5, 193, 53,
- 226, 45, 5, 252, 107, 53, 226, 45, 5, 244, 164, 53, 226, 45, 5, 205, 53,
- 226, 45, 5, 228, 92, 53, 226, 45, 5, 188, 53, 226, 45, 5, 231, 42, 53,
- 226, 45, 5, 230, 172, 53, 226, 45, 5, 186, 53, 226, 45, 5, 215, 1, 53,
- 226, 45, 5, 214, 154, 53, 226, 45, 5, 203, 53, 226, 45, 5, 223, 51, 53,
- 226, 45, 5, 233, 157, 53, 226, 45, 5, 222, 202, 53, 226, 45, 5, 212, 109,
- 53, 226, 45, 5, 221, 24, 53, 226, 45, 5, 219, 157, 53, 226, 45, 5, 159,
- 53, 226, 45, 5, 253, 102, 53, 226, 45, 5, 253, 101, 53, 226, 45, 5, 253,
- 100, 53, 226, 45, 5, 213, 130, 53, 226, 45, 5, 248, 145, 53, 226, 45, 5,
- 248, 144, 53, 226, 45, 5, 252, 88, 53, 226, 45, 5, 251, 14, 53, 226, 45,
- 213, 196, 247, 124, 53, 226, 45, 50, 116, 53, 226, 45, 50, 109, 53, 226,
- 45, 50, 217, 200, 53, 226, 45, 50, 216, 38, 53, 226, 45, 50, 240, 200,
- 171, 6, 1, 184, 72, 171, 6, 1, 184, 74, 171, 6, 1, 184, 61, 171, 6, 1,
- 184, 254, 114, 171, 6, 1, 184, 75, 171, 6, 1, 184, 227, 49, 171, 6, 1,
- 220, 175, 72, 171, 6, 1, 220, 175, 74, 171, 6, 1, 220, 175, 61, 171, 6,
- 1, 220, 175, 254, 114, 171, 6, 1, 220, 175, 75, 171, 6, 1, 220, 175, 227,
- 49, 171, 6, 1, 253, 83, 171, 6, 1, 226, 240, 171, 6, 1, 213, 183, 171, 6,
- 1, 213, 35, 171, 6, 1, 242, 41, 171, 6, 1, 226, 86, 171, 6, 1, 251, 242,
- 171, 6, 1, 217, 219, 171, 6, 1, 248, 28, 171, 6, 1, 250, 64, 171, 6, 1,
- 235, 125, 171, 6, 1, 234, 195, 171, 6, 1, 243, 59, 171, 6, 1, 245, 159,
- 171, 6, 1, 214, 227, 171, 6, 1, 245, 25, 171, 6, 1, 217, 147, 171, 6, 1,
- 245, 45, 171, 6, 1, 212, 85, 171, 6, 1, 245, 40, 171, 6, 1, 212, 66, 171,
- 6, 1, 245, 55, 171, 6, 1, 245, 131, 171, 6, 1, 245, 117, 171, 6, 1, 245,
- 108, 171, 6, 1, 245, 96, 171, 6, 1, 227, 85, 171, 6, 1, 245, 5, 171, 3,
- 1, 184, 72, 171, 3, 1, 184, 74, 171, 3, 1, 184, 61, 171, 3, 1, 184, 254,
- 114, 171, 3, 1, 184, 75, 171, 3, 1, 184, 227, 49, 171, 3, 1, 220, 175,
- 72, 171, 3, 1, 220, 175, 74, 171, 3, 1, 220, 175, 61, 171, 3, 1, 220,
- 175, 254, 114, 171, 3, 1, 220, 175, 75, 171, 3, 1, 220, 175, 227, 49,
- 171, 3, 1, 253, 83, 171, 3, 1, 226, 240, 171, 3, 1, 213, 183, 171, 3, 1,
- 213, 35, 171, 3, 1, 242, 41, 171, 3, 1, 226, 86, 171, 3, 1, 251, 242,
- 171, 3, 1, 217, 219, 171, 3, 1, 248, 28, 171, 3, 1, 250, 64, 171, 3, 1,
- 235, 125, 171, 3, 1, 234, 195, 171, 3, 1, 243, 59, 171, 3, 1, 245, 159,
- 171, 3, 1, 214, 227, 171, 3, 1, 245, 25, 171, 3, 1, 217, 147, 171, 3, 1,
- 245, 45, 171, 3, 1, 212, 85, 171, 3, 1, 245, 40, 171, 3, 1, 212, 66, 171,
- 3, 1, 245, 55, 171, 3, 1, 245, 131, 171, 3, 1, 245, 117, 171, 3, 1, 245,
- 108, 171, 3, 1, 245, 96, 171, 3, 1, 227, 85, 171, 3, 1, 245, 5, 220, 249,
- 1, 226, 84, 220, 249, 1, 216, 218, 220, 249, 1, 234, 100, 220, 249, 1,
- 244, 116, 220, 249, 1, 217, 125, 220, 249, 1, 219, 242, 220, 249, 1, 218,
- 214, 220, 249, 1, 249, 254, 220, 249, 1, 213, 37, 220, 249, 1, 240, 199,
- 220, 249, 1, 251, 183, 220, 249, 1, 248, 40, 220, 249, 1, 243, 96, 220,
- 249, 1, 214, 104, 220, 249, 1, 217, 129, 220, 249, 1, 212, 14, 220, 249,
- 1, 231, 154, 220, 249, 1, 235, 52, 220, 249, 1, 213, 212, 220, 249, 1,
- 242, 29, 220, 249, 1, 232, 195, 220, 249, 1, 231, 2, 220, 249, 1, 236,
- 35, 220, 249, 1, 245, 158, 220, 249, 1, 253, 146, 220, 249, 1, 254, 152,
- 220, 249, 1, 227, 62, 220, 249, 1, 213, 199, 220, 249, 1, 226, 254, 220,
- 249, 1, 254, 114, 220, 249, 1, 223, 109, 220, 249, 1, 228, 50, 220, 249,
- 1, 245, 173, 220, 249, 1, 254, 119, 220, 249, 1, 240, 104, 220, 249, 1,
- 215, 134, 220, 249, 1, 227, 118, 220, 249, 1, 227, 42, 220, 249, 1, 227,
- 84, 220, 249, 1, 253, 86, 220, 249, 1, 253, 189, 220, 249, 1, 227, 24,
- 220, 249, 1, 254, 100, 220, 249, 1, 245, 49, 220, 249, 1, 253, 168, 220,
- 249, 1, 245, 183, 220, 249, 1, 240, 110, 220, 249, 1, 213, 4, 227, 9, 1,
- 254, 78, 227, 9, 1, 252, 107, 227, 9, 1, 218, 52, 227, 9, 1, 235, 139,
- 227, 9, 1, 213, 153, 227, 9, 1, 234, 138, 227, 9, 1, 248, 27, 227, 9, 1,
- 203, 227, 9, 1, 222, 202, 227, 9, 1, 220, 206, 227, 9, 1, 247, 232, 227,
- 9, 1, 250, 148, 227, 9, 1, 243, 110, 227, 9, 1, 244, 164, 227, 9, 1, 224,
- 230, 227, 9, 1, 235, 13, 227, 9, 1, 233, 152, 227, 9, 1, 231, 13, 227, 9,
- 1, 228, 35, 227, 9, 1, 214, 14, 227, 9, 1, 159, 227, 9, 1, 186, 227, 9,
- 1, 61, 227, 9, 1, 74, 227, 9, 1, 72, 227, 9, 1, 75, 227, 9, 1, 69, 227,
- 9, 1, 254, 232, 227, 9, 1, 245, 165, 227, 9, 1, 227, 49, 227, 9, 21, 212,
- 79, 227, 9, 21, 116, 227, 9, 21, 109, 227, 9, 21, 166, 227, 9, 21, 163,
- 227, 9, 21, 180, 227, 9, 21, 189, 227, 9, 21, 198, 227, 9, 21, 195, 227,
- 9, 21, 200, 249, 10, 4, 61, 249, 10, 4, 74, 249, 10, 4, 72, 249, 10, 4,
- 75, 249, 10, 4, 69, 249, 10, 4, 235, 139, 249, 10, 4, 235, 71, 249, 10,
- 4, 181, 249, 10, 4, 234, 188, 249, 10, 4, 234, 101, 249, 10, 4, 234, 37,
- 249, 10, 4, 233, 238, 249, 10, 4, 233, 157, 249, 10, 4, 233, 82, 249, 10,
- 4, 233, 13, 249, 10, 4, 232, 208, 249, 10, 4, 232, 156, 249, 10, 4, 188,
- 249, 10, 4, 231, 156, 249, 10, 4, 231, 42, 249, 10, 4, 230, 231, 249, 10,
- 4, 230, 172, 249, 10, 4, 205, 249, 10, 4, 229, 187, 249, 10, 4, 229, 64,
- 249, 10, 4, 228, 185, 249, 10, 4, 228, 92, 249, 10, 4, 193, 249, 10, 4,
- 226, 96, 249, 10, 4, 225, 240, 249, 10, 4, 225, 150, 249, 10, 4, 225, 35,
- 249, 10, 4, 203, 249, 10, 4, 224, 21, 249, 10, 4, 223, 188, 249, 10, 4,
- 223, 112, 249, 10, 4, 223, 51, 249, 10, 4, 222, 202, 249, 10, 4, 222,
- 100, 249, 10, 4, 220, 117, 249, 10, 4, 219, 242, 249, 10, 4, 219, 27,
- 249, 10, 4, 218, 52, 249, 10, 4, 217, 229, 249, 10, 4, 217, 71, 249, 10,
- 4, 108, 249, 10, 4, 216, 82, 249, 10, 4, 214, 49, 249, 10, 4, 214, 6,
- 249, 10, 4, 213, 235, 249, 10, 4, 213, 214, 249, 10, 4, 213, 153, 249,
- 10, 4, 213, 150, 249, 10, 4, 212, 109, 249, 10, 4, 212, 16, 235, 253,
- 253, 197, 1, 254, 76, 235, 253, 253, 197, 1, 251, 202, 235, 253, 253,
- 197, 1, 242, 177, 235, 253, 253, 197, 1, 248, 133, 235, 253, 253, 197, 1,
- 241, 222, 235, 253, 253, 197, 1, 214, 14, 235, 253, 253, 197, 1, 212, 90,
- 235, 253, 253, 197, 1, 241, 180, 235, 253, 253, 197, 1, 217, 179, 235,
- 253, 253, 197, 1, 212, 223, 235, 253, 253, 197, 1, 234, 230, 235, 253,
- 253, 197, 1, 233, 117, 235, 253, 253, 197, 1, 231, 129, 235, 253, 253,
- 197, 1, 228, 50, 235, 253, 253, 197, 1, 222, 164, 235, 253, 253, 197, 1,
- 253, 78, 235, 253, 253, 197, 1, 226, 96, 235, 253, 253, 197, 1, 222, 193,
- 235, 253, 253, 197, 1, 224, 179, 235, 253, 253, 197, 1, 223, 219, 235,
- 253, 253, 197, 1, 220, 200, 235, 253, 253, 197, 1, 217, 243, 235, 253,
- 253, 197, 222, 92, 52, 235, 253, 253, 197, 50, 116, 235, 253, 253, 197,
- 50, 109, 235, 253, 253, 197, 50, 166, 235, 253, 253, 197, 50, 217, 200,
- 235, 253, 253, 197, 50, 216, 38, 235, 253, 253, 197, 50, 122, 240, 200,
- 235, 253, 253, 197, 50, 122, 217, 100, 235, 253, 253, 197, 50, 217, 201,
- 217, 100, 225, 251, 1, 254, 74, 225, 251, 1, 251, 205, 225, 251, 1, 243,
- 85, 225, 251, 1, 248, 7, 225, 251, 1, 241, 222, 225, 251, 1, 214, 21,
- 225, 251, 1, 212, 103, 225, 251, 1, 241, 182, 225, 251, 1, 217, 183, 225,
- 251, 1, 212, 224, 225, 251, 1, 234, 254, 225, 251, 1, 233, 123, 225, 251,
- 1, 231, 129, 225, 251, 1, 228, 50, 225, 251, 1, 221, 64, 225, 251, 1,
- 254, 103, 225, 251, 1, 226, 96, 225, 251, 1, 222, 194, 225, 251, 1, 224,
- 184, 225, 251, 1, 223, 91, 225, 251, 1, 220, 200, 225, 251, 1, 217, 248,
- 225, 251, 50, 116, 225, 251, 50, 217, 200, 225, 251, 50, 216, 38, 225,
- 251, 50, 122, 240, 200, 225, 251, 50, 109, 225, 251, 50, 166, 225, 251,
- 213, 196, 221, 57, 232, 119, 1, 61, 232, 119, 1, 253, 74, 232, 119, 1,
- 243, 177, 232, 119, 1, 249, 3, 232, 119, 1, 74, 232, 119, 1, 215, 79,
- 232, 119, 1, 72, 232, 119, 1, 213, 105, 232, 119, 1, 235, 27, 232, 119,
- 1, 150, 232, 119, 1, 183, 232, 119, 1, 204, 232, 119, 1, 75, 232, 119, 1,
- 149, 232, 119, 1, 219, 158, 232, 119, 1, 218, 99, 232, 119, 1, 69, 232,
- 119, 1, 244, 230, 232, 119, 1, 224, 240, 232, 119, 1, 197, 232, 119, 1,
- 216, 118, 232, 119, 1, 254, 32, 232, 119, 1, 245, 108, 232, 119, 1, 232,
- 121, 232, 119, 1, 228, 199, 232, 119, 1, 250, 252, 232, 119, 216, 180,
- 77, 234, 126, 1, 61, 234, 126, 30, 5, 72, 234, 126, 30, 5, 69, 234, 126,
- 30, 5, 161, 149, 234, 126, 30, 5, 74, 234, 126, 30, 5, 75, 234, 126, 30,
- 233, 47, 77, 234, 126, 5, 51, 223, 131, 55, 234, 126, 5, 253, 242, 234,
- 126, 5, 214, 128, 234, 126, 1, 181, 234, 126, 1, 234, 138, 234, 126, 1,
- 243, 110, 234, 126, 1, 242, 225, 234, 126, 1, 250, 219, 234, 126, 1, 250,
- 92, 234, 126, 1, 235, 139, 234, 126, 1, 228, 23, 234, 126, 1, 216, 115,
- 234, 126, 1, 216, 105, 234, 126, 1, 248, 86, 234, 126, 1, 248, 70, 234,
- 126, 1, 228, 198, 234, 126, 1, 218, 52, 234, 126, 1, 217, 161, 234, 126,
- 1, 248, 164, 234, 126, 1, 247, 232, 234, 126, 1, 205, 234, 126, 1, 193,
- 234, 126, 1, 226, 23, 234, 126, 1, 252, 107, 234, 126, 1, 251, 195, 234,
- 126, 1, 188, 234, 126, 1, 186, 234, 126, 1, 203, 234, 126, 1, 233, 157,
- 234, 126, 1, 215, 1, 234, 126, 1, 221, 24, 234, 126, 1, 219, 157, 234,
- 126, 1, 222, 202, 234, 126, 1, 212, 109, 234, 126, 1, 159, 234, 126, 1,
- 234, 55, 234, 126, 1, 216, 87, 234, 126, 5, 252, 60, 49, 234, 126, 5,
- 250, 154, 234, 126, 5, 62, 55, 234, 126, 214, 133, 234, 126, 21, 116,
- 234, 126, 21, 109, 234, 126, 21, 166, 234, 126, 21, 163, 234, 126, 50,
- 217, 200, 234, 126, 50, 216, 38, 234, 126, 50, 122, 240, 200, 234, 126,
- 50, 122, 217, 100, 234, 126, 225, 27, 247, 74, 234, 126, 225, 27, 3, 249,
- 228, 234, 126, 225, 27, 249, 228, 234, 126, 225, 27, 249, 77, 134, 234,
- 126, 225, 27, 231, 243, 234, 126, 225, 27, 232, 170, 234, 126, 225, 27,
- 248, 123, 234, 126, 225, 27, 51, 248, 123, 234, 126, 225, 27, 232, 236,
- 53, 219, 215, 253, 208, 1, 241, 222, 53, 219, 215, 253, 208, 1, 233, 117,
- 53, 219, 215, 253, 208, 1, 241, 180, 53, 219, 215, 253, 208, 1, 231, 129,
- 53, 219, 215, 253, 208, 1, 224, 179, 53, 219, 215, 253, 208, 1, 214, 14,
- 53, 219, 215, 253, 208, 1, 220, 200, 53, 219, 215, 253, 208, 1, 223, 219,
- 53, 219, 215, 253, 208, 1, 251, 202, 53, 219, 215, 253, 208, 1, 217, 243,
- 53, 219, 215, 253, 208, 1, 222, 142, 53, 219, 215, 253, 208, 1, 234, 230,
- 53, 219, 215, 253, 208, 1, 228, 50, 53, 219, 215, 253, 208, 1, 234, 122,
- 53, 219, 215, 253, 208, 1, 222, 193, 53, 219, 215, 253, 208, 1, 222, 164,
- 53, 219, 215, 253, 208, 1, 244, 123, 53, 219, 215, 253, 208, 1, 254, 78,
- 53, 219, 215, 253, 208, 1, 253, 77, 53, 219, 215, 253, 208, 1, 247, 230,
- 53, 219, 215, 253, 208, 1, 242, 177, 53, 219, 215, 253, 208, 1, 248, 133,
- 53, 219, 215, 253, 208, 1, 242, 214, 53, 219, 215, 253, 208, 1, 217, 179,
- 53, 219, 215, 253, 208, 1, 212, 89, 53, 219, 215, 253, 208, 1, 247, 227,
- 53, 219, 215, 253, 208, 1, 212, 223, 53, 219, 215, 253, 208, 1, 217, 150,
- 53, 219, 215, 253, 208, 1, 217, 131, 53, 219, 215, 253, 208, 50, 116, 53,
- 219, 215, 253, 208, 50, 244, 83, 53, 219, 215, 253, 208, 128, 235, 235,
- 253, 88, 1, 61, 253, 88, 1, 254, 232, 253, 88, 1, 253, 240, 253, 88, 1,
- 254, 191, 253, 88, 1, 254, 32, 253, 88, 1, 254, 192, 253, 88, 1, 254,
- 148, 253, 88, 1, 254, 144, 253, 88, 1, 74, 253, 88, 1, 245, 165, 253, 88,
- 1, 75, 253, 88, 1, 227, 49, 253, 88, 1, 72, 253, 88, 1, 236, 28, 253, 88,
- 1, 69, 253, 88, 1, 215, 92, 253, 88, 1, 234, 188, 253, 88, 1, 213, 150,
- 253, 88, 1, 213, 116, 253, 88, 1, 213, 125, 253, 88, 1, 243, 38, 253, 88,
- 1, 243, 0, 253, 88, 1, 242, 212, 253, 88, 1, 250, 124, 253, 88, 1, 235,
- 127, 253, 88, 1, 217, 229, 253, 88, 1, 217, 148, 253, 88, 1, 248, 41,
- 253, 88, 1, 247, 225, 253, 88, 1, 216, 112, 253, 88, 1, 226, 96, 253, 88,
- 1, 244, 123, 253, 88, 1, 251, 251, 253, 88, 1, 251, 192, 253, 88, 1, 229,
- 148, 253, 88, 1, 229, 70, 253, 88, 1, 229, 71, 253, 88, 1, 229, 187, 253,
- 88, 1, 228, 17, 253, 88, 1, 228, 197, 253, 88, 1, 231, 156, 253, 88, 1,
- 241, 102, 253, 88, 1, 212, 159, 253, 88, 1, 213, 38, 253, 88, 1, 214,
- 232, 253, 88, 1, 224, 21, 253, 88, 1, 233, 82, 253, 88, 1, 222, 100, 253,
- 88, 1, 212, 87, 253, 88, 1, 220, 243, 253, 88, 1, 212, 67, 253, 88, 1,
- 220, 124, 253, 88, 1, 219, 129, 253, 88, 1, 241, 222, 253, 88, 254, 181,
- 77, 217, 32, 117, 176, 110, 122, 62, 225, 26, 3, 117, 176, 110, 122, 62,
- 225, 26, 233, 108, 117, 176, 110, 122, 62, 225, 26, 233, 108, 122, 62,
- 110, 117, 176, 225, 26, 233, 108, 117, 223, 129, 110, 122, 223, 131, 225,
- 26, 233, 108, 122, 223, 131, 110, 117, 223, 129, 225, 26, 235, 215, 226,
- 126, 1, 254, 76, 235, 215, 226, 126, 1, 251, 202, 235, 215, 226, 126, 1,
- 242, 177, 235, 215, 226, 126, 1, 248, 133, 235, 215, 226, 126, 1, 241,
- 222, 235, 215, 226, 126, 1, 214, 14, 235, 215, 226, 126, 1, 212, 90, 235,
- 215, 226, 126, 1, 241, 180, 235, 215, 226, 126, 1, 217, 179, 235, 215,
- 226, 126, 1, 212, 223, 235, 215, 226, 126, 1, 234, 230, 235, 215, 226,
- 126, 1, 233, 117, 235, 215, 226, 126, 1, 231, 129, 235, 215, 226, 126, 1,
- 228, 50, 235, 215, 226, 126, 1, 222, 164, 235, 215, 226, 126, 1, 253, 78,
- 235, 215, 226, 126, 1, 226, 96, 235, 215, 226, 126, 1, 222, 193, 235,
- 215, 226, 126, 1, 224, 179, 235, 215, 226, 126, 1, 223, 219, 235, 215,
- 226, 126, 1, 220, 200, 235, 215, 226, 126, 1, 217, 243, 235, 215, 226,
- 126, 50, 116, 235, 215, 226, 126, 50, 109, 235, 215, 226, 126, 50, 166,
- 235, 215, 226, 126, 50, 163, 235, 215, 226, 126, 50, 217, 200, 235, 215,
- 226, 126, 50, 216, 38, 235, 215, 226, 126, 50, 122, 240, 200, 235, 215,
- 226, 126, 50, 122, 217, 100, 235, 215, 226, 198, 1, 254, 76, 235, 215,
- 226, 198, 1, 251, 202, 235, 215, 226, 198, 1, 242, 177, 235, 215, 226,
- 198, 1, 248, 133, 235, 215, 226, 198, 1, 241, 222, 235, 215, 226, 198, 1,
- 214, 13, 235, 215, 226, 198, 1, 212, 90, 235, 215, 226, 198, 1, 241, 180,
- 235, 215, 226, 198, 1, 217, 179, 235, 215, 226, 198, 1, 212, 223, 235,
- 215, 226, 198, 1, 234, 230, 235, 215, 226, 198, 1, 233, 117, 235, 215,
- 226, 198, 1, 231, 128, 235, 215, 226, 198, 1, 228, 50, 235, 215, 226,
- 198, 1, 222, 164, 235, 215, 226, 198, 1, 226, 96, 235, 215, 226, 198, 1,
- 222, 193, 235, 215, 226, 198, 1, 220, 200, 235, 215, 226, 198, 1, 217,
- 243, 235, 215, 226, 198, 50, 116, 235, 215, 226, 198, 50, 109, 235, 215,
- 226, 198, 50, 166, 235, 215, 226, 198, 50, 163, 235, 215, 226, 198, 50,
- 217, 200, 235, 215, 226, 198, 50, 216, 38, 235, 215, 226, 198, 50, 122,
- 240, 200, 235, 215, 226, 198, 50, 122, 217, 100, 53, 185, 1, 227, 16, 61,
- 53, 185, 1, 213, 28, 61, 53, 185, 1, 213, 28, 254, 148, 53, 185, 1, 227,
- 16, 72, 53, 185, 1, 213, 28, 72, 53, 185, 1, 213, 28, 74, 53, 185, 1,
- 227, 16, 75, 53, 185, 1, 227, 16, 227, 99, 53, 185, 1, 213, 28, 227, 99,
- 53, 185, 1, 227, 16, 254, 185, 53, 185, 1, 213, 28, 254, 185, 53, 185, 1,
- 227, 16, 254, 147, 53, 185, 1, 213, 28, 254, 147, 53, 185, 1, 227, 16,
- 254, 121, 53, 185, 1, 213, 28, 254, 121, 53, 185, 1, 227, 16, 254, 142,
- 53, 185, 1, 213, 28, 254, 142, 53, 185, 1, 227, 16, 254, 160, 53, 185, 1,
- 213, 28, 254, 160, 53, 185, 1, 227, 16, 254, 146, 53, 185, 1, 227, 16,
- 244, 236, 53, 185, 1, 213, 28, 244, 236, 53, 185, 1, 227, 16, 253, 83,
- 53, 185, 1, 213, 28, 253, 83, 53, 185, 1, 227, 16, 254, 129, 53, 185, 1,
- 213, 28, 254, 129, 53, 185, 1, 227, 16, 254, 140, 53, 185, 1, 213, 28,
- 254, 140, 53, 185, 1, 227, 16, 227, 98, 53, 185, 1, 213, 28, 227, 98, 53,
- 185, 1, 227, 16, 254, 86, 53, 185, 1, 213, 28, 254, 86, 53, 185, 1, 227,
- 16, 254, 139, 53, 185, 1, 227, 16, 245, 119, 53, 185, 1, 227, 16, 245,
- 117, 53, 185, 1, 227, 16, 254, 32, 53, 185, 1, 227, 16, 254, 137, 53,
- 185, 1, 213, 28, 254, 137, 53, 185, 1, 227, 16, 245, 90, 53, 185, 1, 213,
- 28, 245, 90, 53, 185, 1, 227, 16, 245, 105, 53, 185, 1, 213, 28, 245,
- 105, 53, 185, 1, 227, 16, 245, 77, 53, 185, 1, 213, 28, 245, 77, 53, 185,
- 1, 213, 28, 254, 24, 53, 185, 1, 227, 16, 245, 96, 53, 185, 1, 213, 28,
- 254, 136, 53, 185, 1, 227, 16, 245, 70, 53, 185, 1, 227, 16, 227, 41, 53,
- 185, 1, 227, 16, 240, 106, 53, 185, 1, 227, 16, 245, 171, 53, 185, 1,
- 213, 28, 245, 171, 53, 185, 1, 227, 16, 253, 215, 53, 185, 1, 213, 28,
- 253, 215, 53, 185, 1, 227, 16, 235, 179, 53, 185, 1, 213, 28, 235, 179,
- 53, 185, 1, 227, 16, 227, 25, 53, 185, 1, 213, 28, 227, 25, 53, 185, 1,
- 227, 16, 253, 211, 53, 185, 1, 213, 28, 253, 211, 53, 185, 1, 227, 16,
- 254, 135, 53, 185, 1, 227, 16, 253, 152, 53, 185, 1, 227, 16, 254, 133,
- 53, 185, 1, 227, 16, 253, 146, 53, 185, 1, 213, 28, 253, 146, 53, 185, 1,
- 227, 16, 245, 40, 53, 185, 1, 213, 28, 245, 40, 53, 185, 1, 227, 16, 253,
- 122, 53, 185, 1, 213, 28, 253, 122, 53, 185, 1, 227, 16, 254, 130, 53,
- 185, 1, 213, 28, 254, 130, 53, 185, 1, 227, 16, 227, 8, 53, 185, 1, 227,
- 16, 252, 45, 223, 38, 21, 116, 223, 38, 21, 109, 223, 38, 21, 166, 223,
- 38, 21, 163, 223, 38, 21, 180, 223, 38, 21, 189, 223, 38, 21, 198, 223,
- 38, 21, 195, 223, 38, 21, 200, 223, 38, 50, 217, 200, 223, 38, 50, 216,
- 38, 223, 38, 50, 217, 115, 223, 38, 50, 243, 240, 223, 38, 50, 244, 83,
- 223, 38, 50, 220, 39, 223, 38, 50, 221, 37, 223, 38, 50, 245, 141, 223,
- 38, 50, 229, 26, 223, 38, 50, 122, 240, 200, 223, 38, 50, 117, 240, 200,
- 223, 38, 50, 133, 240, 200, 223, 38, 50, 243, 237, 240, 200, 223, 38, 50,
- 244, 50, 240, 200, 223, 38, 50, 220, 53, 240, 200, 223, 38, 50, 221, 43,
- 240, 200, 223, 38, 50, 245, 150, 240, 200, 223, 38, 50, 229, 31, 240,
- 200, 223, 38, 243, 228, 122, 242, 9, 223, 38, 243, 228, 122, 224, 166,
- 223, 38, 243, 228, 122, 217, 121, 223, 38, 243, 228, 117, 217, 119, 112,
- 5, 250, 187, 112, 5, 253, 242, 112, 5, 214, 128, 112, 5, 235, 104, 112,
- 5, 215, 132, 112, 1, 61, 112, 1, 254, 232, 112, 1, 72, 112, 1, 236, 28,
- 112, 1, 69, 112, 1, 215, 92, 112, 1, 161, 149, 112, 1, 161, 223, 82, 112,
- 1, 161, 150, 112, 1, 161, 232, 214, 112, 1, 74, 112, 1, 254, 108, 112, 1,
- 75, 112, 1, 253, 108, 112, 1, 181, 112, 1, 234, 138, 112, 1, 243, 110,
- 112, 1, 242, 225, 112, 1, 229, 159, 112, 1, 250, 219, 112, 1, 250, 92,
- 112, 1, 235, 139, 112, 1, 235, 115, 112, 1, 228, 23, 112, 1, 216, 115,
- 112, 1, 216, 105, 112, 1, 248, 86, 112, 1, 248, 70, 112, 1, 228, 198,
- 112, 1, 218, 52, 112, 1, 217, 161, 112, 1, 248, 164, 112, 1, 247, 232,
- 112, 1, 205, 112, 1, 193, 112, 1, 226, 23, 112, 1, 252, 107, 112, 1, 251,
- 195, 112, 1, 188, 112, 1, 186, 112, 1, 203, 112, 1, 233, 157, 112, 1,
- 215, 1, 112, 1, 221, 24, 112, 1, 219, 157, 112, 1, 222, 202, 112, 1, 159,
- 112, 1, 232, 213, 112, 1, 53, 178, 232, 212, 112, 1, 53, 178, 223, 81,
- 112, 1, 53, 178, 228, 189, 112, 30, 5, 254, 232, 112, 30, 5, 251, 193,
- 254, 232, 112, 30, 5, 72, 112, 30, 5, 236, 28, 112, 30, 5, 69, 112, 30,
- 5, 215, 92, 112, 30, 5, 161, 149, 112, 30, 5, 161, 223, 82, 112, 30, 5,
- 161, 150, 112, 30, 5, 161, 232, 214, 112, 30, 5, 74, 112, 30, 5, 254,
- 108, 112, 30, 5, 75, 112, 30, 5, 253, 108, 112, 214, 133, 112, 248, 123,
- 112, 51, 248, 123, 112, 225, 27, 247, 74, 112, 225, 27, 51, 247, 74, 112,
- 225, 27, 232, 242, 112, 225, 27, 249, 77, 134, 112, 225, 27, 232, 170,
- 112, 50, 116, 112, 50, 109, 112, 50, 166, 112, 50, 163, 112, 50, 180,
- 112, 50, 189, 112, 50, 198, 112, 50, 195, 112, 50, 200, 112, 50, 217,
- 200, 112, 50, 216, 38, 112, 50, 217, 115, 112, 50, 243, 240, 112, 50,
- 244, 83, 112, 50, 220, 39, 112, 50, 221, 37, 112, 50, 245, 141, 112, 50,
- 229, 26, 112, 50, 122, 240, 200, 112, 50, 122, 217, 100, 112, 21, 212,
- 79, 112, 21, 116, 112, 21, 109, 112, 21, 166, 112, 21, 163, 112, 21, 180,
- 112, 21, 189, 112, 21, 198, 112, 21, 195, 112, 21, 200, 208, 5, 250, 187,
- 208, 5, 253, 242, 208, 5, 214, 128, 208, 1, 61, 208, 1, 254, 232, 208, 1,
- 72, 208, 1, 236, 28, 208, 1, 69, 208, 1, 215, 92, 208, 1, 74, 208, 1,
- 254, 108, 208, 1, 75, 208, 1, 253, 108, 208, 1, 181, 208, 1, 234, 138,
- 208, 1, 243, 110, 208, 1, 242, 225, 208, 1, 229, 159, 208, 1, 250, 219,
- 208, 1, 250, 92, 208, 1, 235, 139, 208, 1, 235, 115, 208, 1, 228, 23,
- 208, 1, 216, 115, 208, 1, 216, 105, 208, 1, 248, 86, 208, 1, 248, 75,
- 208, 1, 248, 70, 208, 1, 223, 192, 208, 1, 228, 198, 208, 1, 218, 52,
- 208, 1, 217, 161, 208, 1, 248, 164, 208, 1, 247, 232, 208, 1, 205, 208,
- 1, 193, 208, 1, 226, 23, 208, 1, 252, 107, 208, 1, 251, 195, 208, 1, 188,
- 208, 1, 186, 208, 1, 203, 208, 1, 233, 157, 208, 1, 215, 1, 208, 1, 221,
- 24, 208, 1, 219, 157, 208, 1, 222, 202, 208, 1, 159, 208, 30, 5, 254,
- 232, 208, 30, 5, 72, 208, 30, 5, 236, 28, 208, 30, 5, 69, 208, 30, 5,
- 215, 92, 208, 30, 5, 74, 208, 30, 5, 254, 108, 208, 30, 5, 75, 208, 30,
- 5, 253, 108, 208, 5, 214, 133, 208, 5, 228, 60, 208, 254, 181, 52, 208,
- 245, 80, 52, 208, 50, 52, 208, 222, 92, 77, 208, 51, 222, 92, 77, 208,
- 248, 123, 208, 51, 248, 123, 15, 5, 61, 15, 5, 118, 29, 61, 15, 5, 118,
- 29, 252, 94, 15, 5, 118, 29, 243, 81, 217, 192, 15, 5, 118, 29, 159, 15,
- 5, 118, 29, 236, 30, 15, 5, 118, 29, 233, 139, 242, 75, 15, 5, 118, 29,
- 230, 131, 15, 5, 118, 29, 222, 190, 15, 5, 254, 234, 15, 5, 254, 185, 15,
- 5, 254, 186, 29, 253, 144, 15, 5, 254, 186, 29, 246, 22, 242, 75, 15, 5,
- 254, 186, 29, 243, 94, 15, 5, 254, 186, 29, 243, 81, 217, 192, 15, 5,
- 254, 186, 29, 159, 15, 5, 254, 186, 29, 236, 31, 242, 75, 15, 5, 254,
- 186, 29, 236, 4, 15, 5, 254, 186, 29, 233, 140, 15, 5, 254, 186, 29, 220,
- 228, 15, 5, 254, 186, 29, 111, 94, 111, 94, 69, 15, 5, 254, 186, 242, 75,
- 15, 5, 254, 183, 15, 5, 254, 184, 29, 252, 79, 15, 5, 254, 184, 29, 243,
- 81, 217, 192, 15, 5, 254, 184, 29, 231, 157, 94, 245, 108, 15, 5, 254,
- 184, 29, 221, 22, 15, 5, 254, 184, 29, 218, 22, 15, 5, 254, 160, 15, 5,
- 254, 94, 15, 5, 254, 95, 29, 245, 50, 15, 5, 254, 95, 29, 220, 190, 94,
- 242, 166, 15, 5, 254, 86, 15, 5, 254, 87, 29, 254, 86, 15, 5, 254, 87,
- 29, 247, 168, 15, 5, 254, 87, 29, 242, 166, 15, 5, 254, 87, 29, 159, 15,
- 5, 254, 87, 29, 235, 3, 15, 5, 254, 87, 29, 234, 101, 15, 5, 254, 87, 29,
- 220, 243, 15, 5, 254, 87, 29, 215, 100, 15, 5, 254, 83, 15, 5, 254, 76,
- 15, 5, 254, 41, 15, 5, 254, 42, 29, 220, 243, 15, 5, 254, 32, 15, 5, 254,
- 33, 110, 254, 32, 15, 5, 254, 33, 133, 217, 38, 15, 5, 254, 33, 94, 230,
- 35, 227, 30, 254, 33, 94, 230, 34, 15, 5, 254, 33, 94, 230, 35, 219, 165,
- 15, 5, 254, 5, 15, 5, 253, 235, 15, 5, 253, 205, 15, 5, 253, 206, 29,
- 233, 217, 15, 5, 253, 179, 15, 5, 253, 151, 15, 5, 253, 146, 15, 5, 253,
- 147, 212, 33, 217, 192, 15, 5, 253, 147, 235, 7, 217, 192, 15, 5, 253,
- 147, 110, 253, 147, 216, 78, 110, 216, 78, 216, 78, 110, 216, 78, 226,
- 149, 15, 5, 253, 147, 110, 253, 147, 110, 253, 146, 15, 5, 253, 147, 110,
- 253, 147, 110, 253, 147, 249, 65, 253, 147, 110, 253, 147, 110, 253, 146,
- 15, 5, 253, 144, 15, 5, 253, 141, 15, 5, 252, 107, 15, 5, 252, 94, 15, 5,
- 252, 89, 15, 5, 252, 86, 15, 5, 252, 80, 15, 5, 252, 81, 110, 252, 80,
- 15, 5, 252, 79, 15, 5, 134, 15, 5, 252, 59, 15, 5, 251, 184, 15, 5, 251,
- 185, 29, 61, 15, 5, 251, 185, 29, 243, 72, 15, 5, 251, 185, 29, 236, 31,
- 242, 75, 15, 5, 251, 54, 15, 5, 251, 55, 110, 251, 55, 254, 185, 15, 5,
- 251, 55, 110, 251, 55, 215, 160, 15, 5, 251, 55, 249, 65, 251, 54, 15, 5,
- 251, 38, 15, 5, 251, 39, 110, 251, 38, 15, 5, 251, 27, 15, 5, 251, 26,
- 15, 5, 248, 164, 15, 5, 248, 155, 15, 5, 248, 156, 234, 75, 29, 118, 94,
- 231, 210, 15, 5, 248, 156, 234, 75, 29, 254, 41, 15, 5, 248, 156, 234,
- 75, 29, 252, 79, 15, 5, 248, 156, 234, 75, 29, 251, 184, 15, 5, 248, 156,
- 234, 75, 29, 243, 110, 15, 5, 248, 156, 234, 75, 29, 243, 111, 94, 231,
- 210, 15, 5, 248, 156, 234, 75, 29, 242, 190, 15, 5, 248, 156, 234, 75,
- 29, 242, 173, 15, 5, 248, 156, 234, 75, 29, 242, 84, 15, 5, 248, 156,
- 234, 75, 29, 159, 15, 5, 248, 156, 234, 75, 29, 235, 177, 15, 5, 248,
- 156, 234, 75, 29, 235, 178, 94, 232, 156, 15, 5, 248, 156, 234, 75, 29,
- 234, 247, 15, 5, 248, 156, 234, 75, 29, 233, 157, 15, 5, 248, 156, 234,
- 75, 29, 232, 156, 15, 5, 248, 156, 234, 75, 29, 232, 157, 94, 231, 209,
- 15, 5, 248, 156, 234, 75, 29, 232, 142, 15, 5, 248, 156, 234, 75, 29,
- 229, 187, 15, 5, 248, 156, 234, 75, 29, 226, 150, 94, 226, 149, 15, 5,
- 248, 156, 234, 75, 29, 220, 117, 15, 5, 248, 156, 234, 75, 29, 218, 22,
- 15, 5, 248, 156, 234, 75, 29, 215, 198, 94, 242, 173, 15, 5, 248, 156,
- 234, 75, 29, 215, 100, 15, 5, 248, 132, 15, 5, 248, 111, 15, 5, 248, 110,
- 15, 5, 248, 109, 15, 5, 247, 211, 15, 5, 247, 194, 15, 5, 247, 169, 15,
- 5, 247, 170, 29, 220, 243, 15, 5, 247, 168, 15, 5, 247, 158, 15, 5, 247,
- 159, 234, 213, 111, 242, 76, 247, 139, 15, 5, 247, 139, 15, 5, 246, 33,
- 15, 5, 246, 34, 110, 246, 33, 15, 5, 246, 34, 242, 75, 15, 5, 246, 34,
- 220, 225, 15, 5, 246, 31, 15, 5, 246, 32, 29, 245, 37, 15, 5, 246, 30,
- 15, 5, 246, 29, 15, 5, 246, 28, 15, 5, 246, 27, 15, 5, 246, 23, 15, 5,
- 246, 21, 15, 5, 246, 22, 242, 75, 15, 5, 246, 22, 242, 76, 242, 75, 15,
- 5, 246, 20, 15, 5, 246, 13, 15, 5, 74, 15, 5, 191, 29, 226, 149, 15, 5,
- 191, 110, 191, 228, 51, 110, 228, 50, 15, 5, 245, 190, 15, 5, 245, 191,
- 29, 118, 94, 242, 30, 94, 248, 164, 15, 5, 245, 191, 29, 243, 72, 15, 5,
- 245, 191, 29, 231, 42, 15, 5, 245, 191, 29, 222, 179, 15, 5, 245, 191,
- 29, 220, 243, 15, 5, 245, 191, 29, 69, 15, 5, 245, 167, 15, 5, 245, 157,
- 15, 5, 245, 131, 15, 5, 245, 108, 15, 5, 245, 109, 29, 243, 80, 15, 5,
- 245, 109, 29, 243, 81, 217, 192, 15, 5, 245, 109, 29, 231, 156, 15, 5,
- 245, 109, 249, 65, 245, 108, 15, 5, 245, 109, 227, 30, 245, 108, 15, 5,
- 245, 109, 219, 165, 15, 5, 245, 52, 15, 5, 245, 50, 15, 5, 245, 37, 15,
- 5, 244, 234, 15, 5, 244, 235, 29, 61, 15, 5, 244, 235, 29, 118, 94, 233,
- 128, 15, 5, 244, 235, 29, 118, 94, 233, 129, 29, 233, 128, 15, 5, 244,
- 235, 29, 254, 32, 15, 5, 244, 235, 29, 252, 94, 15, 5, 244, 235, 29, 246,
- 22, 242, 75, 15, 5, 244, 235, 29, 246, 22, 242, 76, 242, 75, 15, 5, 244,
- 235, 29, 159, 15, 5, 244, 235, 29, 242, 30, 242, 75, 15, 5, 244, 235, 29,
- 236, 31, 242, 75, 15, 5, 244, 235, 29, 234, 212, 15, 5, 244, 235, 29,
- 234, 213, 219, 165, 15, 5, 244, 235, 29, 233, 236, 15, 5, 244, 235, 29,
- 233, 157, 15, 5, 244, 235, 29, 233, 129, 29, 233, 128, 15, 5, 244, 235,
- 29, 233, 13, 15, 5, 244, 235, 29, 232, 156, 15, 5, 244, 235, 29, 215,
- 197, 15, 5, 244, 235, 29, 215, 188, 15, 5, 243, 110, 15, 5, 243, 111,
- 242, 75, 15, 5, 243, 108, 15, 5, 243, 109, 29, 118, 94, 248, 165, 94,
- 159, 15, 5, 243, 109, 29, 118, 94, 159, 15, 5, 243, 109, 29, 118, 94,
- 236, 30, 15, 5, 243, 109, 29, 254, 184, 217, 193, 94, 218, 41, 15, 5,
- 243, 109, 29, 254, 32, 15, 5, 243, 109, 29, 253, 146, 15, 5, 243, 109,
- 29, 253, 145, 94, 243, 94, 15, 5, 243, 109, 29, 252, 94, 15, 5, 243, 109,
- 29, 252, 60, 94, 203, 15, 5, 243, 109, 29, 251, 27, 15, 5, 243, 109, 29,
- 251, 28, 94, 203, 15, 5, 243, 109, 29, 248, 164, 15, 5, 243, 109, 29,
- 247, 211, 15, 5, 243, 109, 29, 247, 170, 29, 220, 243, 15, 5, 243, 109,
- 29, 246, 31, 15, 5, 243, 109, 29, 245, 131, 15, 5, 243, 109, 29, 245,
- 132, 94, 233, 157, 15, 5, 243, 109, 29, 245, 108, 15, 5, 243, 109, 29,
- 245, 109, 29, 243, 81, 217, 192, 15, 5, 243, 109, 29, 243, 81, 217, 192,
- 15, 5, 243, 109, 29, 243, 72, 15, 5, 243, 109, 29, 242, 190, 15, 5, 243,
- 109, 29, 242, 188, 15, 5, 243, 109, 29, 242, 189, 94, 61, 15, 5, 243,
- 109, 29, 242, 174, 94, 219, 27, 15, 5, 243, 109, 29, 242, 30, 94, 232,
- 157, 94, 245, 37, 15, 5, 243, 109, 29, 242, 12, 15, 5, 243, 109, 29, 242,
- 13, 94, 233, 157, 15, 5, 243, 109, 29, 241, 166, 94, 233, 13, 15, 5, 243,
- 109, 29, 240, 208, 15, 5, 243, 109, 29, 236, 31, 242, 75, 15, 5, 243,
- 109, 29, 235, 164, 94, 240, 213, 94, 253, 146, 15, 5, 243, 109, 29, 234,
- 247, 15, 5, 243, 109, 29, 234, 212, 15, 5, 243, 109, 29, 234, 98, 15, 5,
- 243, 109, 29, 234, 99, 94, 233, 128, 15, 5, 243, 109, 29, 233, 237, 94,
- 254, 32, 15, 5, 243, 109, 29, 233, 157, 15, 5, 243, 109, 29, 231, 157,
- 94, 245, 108, 15, 5, 243, 109, 29, 231, 42, 15, 5, 243, 109, 29, 228, 50,
- 15, 5, 243, 109, 29, 228, 51, 110, 228, 50, 15, 5, 243, 109, 29, 193, 15,
- 5, 243, 109, 29, 222, 179, 15, 5, 243, 109, 29, 222, 147, 15, 5, 243,
- 109, 29, 220, 243, 15, 5, 243, 109, 29, 220, 244, 94, 216, 62, 15, 5,
- 243, 109, 29, 220, 210, 15, 5, 243, 109, 29, 218, 244, 15, 5, 243, 109,
- 29, 218, 22, 15, 5, 243, 109, 29, 69, 15, 5, 243, 109, 29, 215, 188, 15,
- 5, 243, 109, 29, 215, 189, 94, 246, 33, 15, 5, 243, 109, 110, 243, 108,
- 15, 5, 243, 103, 15, 5, 243, 104, 249, 65, 243, 103, 15, 5, 243, 101, 15,
- 5, 243, 102, 110, 243, 102, 243, 73, 110, 243, 72, 15, 5, 243, 94, 15, 5,
- 243, 95, 243, 102, 110, 243, 102, 243, 73, 110, 243, 72, 15, 5, 243, 93,
- 15, 5, 243, 91, 15, 5, 243, 82, 15, 5, 243, 80, 15, 5, 243, 81, 217, 192,
- 15, 5, 243, 81, 110, 243, 80, 15, 5, 243, 81, 249, 65, 243, 80, 15, 5,
- 243, 72, 15, 5, 243, 71, 15, 5, 243, 66, 15, 5, 243, 12, 15, 5, 243, 13,
- 29, 233, 217, 15, 5, 242, 190, 15, 5, 242, 191, 29, 74, 15, 5, 242, 191,
- 29, 69, 15, 5, 242, 191, 249, 65, 242, 190, 15, 5, 242, 188, 15, 5, 242,
- 189, 110, 242, 188, 15, 5, 242, 189, 249, 65, 242, 188, 15, 5, 242, 185,
- 15, 5, 242, 173, 15, 5, 242, 174, 242, 75, 15, 5, 242, 171, 15, 5, 242,
- 172, 29, 118, 94, 236, 30, 15, 5, 242, 172, 29, 243, 81, 217, 192, 15, 5,
- 242, 172, 29, 236, 30, 15, 5, 242, 172, 29, 232, 157, 94, 236, 30, 15, 5,
- 242, 172, 29, 193, 15, 5, 242, 168, 15, 5, 242, 166, 15, 5, 242, 167,
- 249, 65, 242, 166, 15, 5, 242, 167, 29, 252, 94, 15, 5, 242, 167, 29,
- 218, 22, 15, 5, 242, 167, 217, 192, 15, 5, 242, 92, 15, 5, 242, 93, 249,
- 65, 242, 92, 15, 5, 242, 90, 15, 5, 242, 91, 29, 234, 247, 15, 5, 242,
- 91, 29, 234, 248, 29, 236, 31, 242, 75, 15, 5, 242, 91, 29, 228, 50, 15,
- 5, 242, 91, 29, 222, 180, 94, 216, 77, 15, 5, 242, 91, 242, 75, 15, 5,
- 242, 84, 15, 5, 242, 85, 29, 118, 94, 233, 217, 15, 5, 242, 85, 29, 233,
- 217, 15, 5, 242, 85, 110, 242, 85, 232, 149, 15, 5, 242, 79, 15, 5, 242,
- 77, 15, 5, 242, 78, 29, 220, 243, 15, 5, 242, 69, 15, 5, 242, 68, 15, 5,
- 242, 65, 15, 5, 242, 64, 15, 5, 159, 15, 5, 242, 30, 217, 192, 15, 5,
- 242, 30, 242, 75, 15, 5, 242, 12, 15, 5, 241, 165, 15, 5, 241, 166, 29,
- 253, 146, 15, 5, 241, 166, 29, 253, 144, 15, 5, 241, 166, 29, 252, 94,
- 15, 5, 241, 166, 29, 247, 139, 15, 5, 241, 166, 29, 243, 101, 15, 5, 241,
- 166, 29, 234, 90, 15, 5, 241, 166, 29, 228, 50, 15, 5, 241, 166, 29, 220,
- 243, 15, 5, 241, 166, 29, 69, 15, 5, 240, 212, 15, 5, 240, 208, 15, 5,
- 240, 209, 29, 254, 32, 15, 5, 240, 209, 29, 242, 12, 15, 5, 240, 209, 29,
- 234, 212, 15, 5, 240, 209, 29, 232, 226, 15, 5, 240, 209, 29, 215, 188,
- 15, 5, 240, 205, 15, 5, 72, 15, 5, 240, 146, 61, 15, 5, 240, 108, 15, 5,
- 236, 58, 15, 5, 236, 59, 110, 236, 59, 251, 27, 15, 5, 236, 59, 110, 236,
- 59, 219, 165, 15, 5, 236, 33, 15, 5, 236, 30, 15, 5, 236, 31, 247, 194,
- 15, 5, 236, 31, 223, 188, 15, 5, 236, 31, 110, 236, 31, 220, 194, 110,
- 220, 194, 215, 189, 110, 215, 188, 15, 5, 236, 31, 242, 75, 15, 5, 236,
- 22, 15, 5, 236, 23, 29, 243, 81, 217, 192, 15, 5, 236, 21, 15, 5, 236,
- 11, 15, 5, 236, 12, 29, 218, 22, 15, 5, 236, 12, 249, 65, 236, 11, 15, 5,
- 236, 12, 227, 30, 236, 11, 15, 5, 236, 12, 219, 165, 15, 5, 236, 4, 15,
- 5, 235, 251, 15, 5, 235, 177, 15, 5, 235, 163, 15, 5, 181, 15, 5, 235,
- 17, 29, 61, 15, 5, 235, 17, 29, 254, 160, 15, 5, 235, 17, 29, 254, 161,
- 94, 233, 236, 15, 5, 235, 17, 29, 253, 144, 15, 5, 235, 17, 29, 252, 94,
- 15, 5, 235, 17, 29, 252, 79, 15, 5, 235, 17, 29, 134, 15, 5, 235, 17, 29,
- 251, 184, 15, 5, 235, 17, 29, 245, 50, 15, 5, 235, 17, 29, 245, 37, 15,
- 5, 235, 17, 29, 243, 110, 15, 5, 235, 17, 29, 243, 94, 15, 5, 235, 17,
- 29, 243, 81, 217, 192, 15, 5, 235, 17, 29, 243, 72, 15, 5, 235, 17, 29,
- 243, 73, 94, 221, 23, 94, 61, 15, 5, 235, 17, 29, 242, 190, 15, 5, 235,
- 17, 29, 242, 173, 15, 5, 235, 17, 29, 242, 167, 94, 222, 147, 15, 5, 235,
- 17, 29, 242, 167, 249, 65, 242, 166, 15, 5, 235, 17, 29, 242, 92, 15, 5,
- 235, 17, 29, 242, 68, 15, 5, 235, 17, 29, 236, 30, 15, 5, 235, 17, 29,
- 236, 11, 15, 5, 235, 17, 29, 234, 247, 15, 5, 235, 17, 29, 234, 101, 15,
- 5, 235, 17, 29, 234, 98, 15, 5, 235, 17, 29, 233, 13, 15, 5, 235, 17, 29,
- 232, 156, 15, 5, 235, 17, 29, 231, 156, 15, 5, 235, 17, 29, 231, 157, 94,
- 246, 33, 15, 5, 235, 17, 29, 231, 157, 94, 242, 190, 15, 5, 235, 17, 29,
- 231, 157, 94, 217, 229, 15, 5, 235, 17, 29, 231, 42, 15, 5, 235, 17, 29,
- 231, 43, 94, 228, 45, 15, 5, 235, 17, 29, 229, 187, 15, 5, 235, 17, 29,
- 228, 50, 15, 5, 235, 17, 29, 225, 240, 15, 5, 235, 17, 29, 223, 51, 15,
- 5, 235, 17, 29, 222, 202, 15, 5, 235, 17, 29, 222, 147, 15, 5, 235, 17,
- 29, 221, 24, 15, 5, 235, 17, 29, 220, 243, 15, 5, 235, 17, 29, 220, 210,
- 15, 5, 235, 17, 29, 220, 150, 15, 5, 235, 17, 29, 220, 108, 15, 5, 235,
- 17, 29, 218, 252, 15, 5, 235, 17, 29, 218, 1, 15, 5, 235, 17, 29, 69, 15,
- 5, 235, 17, 29, 215, 197, 15, 5, 235, 17, 29, 215, 188, 15, 5, 235, 17,
- 29, 215, 163, 29, 193, 15, 5, 235, 17, 29, 215, 100, 15, 5, 235, 17, 29,
- 212, 37, 15, 5, 235, 15, 15, 5, 235, 16, 249, 65, 235, 15, 15, 5, 235, 8,
- 15, 5, 235, 5, 15, 5, 235, 3, 15, 5, 235, 2, 15, 5, 235, 0, 15, 5, 235,
- 1, 110, 235, 0, 15, 5, 234, 247, 15, 5, 234, 248, 29, 236, 31, 242, 75,
- 15, 5, 234, 243, 15, 5, 234, 244, 29, 252, 94, 15, 5, 234, 244, 249, 65,
- 234, 243, 15, 5, 234, 241, 15, 5, 234, 240, 15, 5, 234, 212, 15, 5, 234,
- 213, 233, 141, 29, 111, 110, 233, 141, 29, 69, 15, 5, 234, 213, 110, 234,
- 213, 233, 141, 29, 111, 110, 233, 141, 29, 69, 15, 5, 234, 163, 15, 5,
- 234, 101, 15, 5, 234, 102, 29, 252, 94, 15, 5, 234, 102, 29, 69, 15, 5,
- 234, 102, 29, 215, 188, 15, 5, 234, 98, 15, 5, 234, 90, 15, 5, 234, 77,
- 15, 5, 234, 76, 15, 5, 234, 74, 15, 5, 234, 75, 110, 234, 74, 15, 5, 233,
- 238, 15, 5, 233, 239, 110, 241, 166, 29, 253, 145, 233, 239, 110, 241,
- 166, 29, 253, 144, 15, 5, 233, 236, 15, 5, 233, 234, 15, 5, 233, 235,
- 214, 244, 17, 15, 5, 233, 233, 15, 5, 233, 230, 15, 5, 233, 231, 242, 75,
- 15, 5, 233, 229, 15, 5, 233, 217, 15, 5, 233, 218, 227, 30, 233, 217, 15,
- 5, 233, 212, 15, 5, 233, 194, 15, 5, 233, 157, 15, 5, 233, 140, 15, 5,
- 233, 141, 29, 61, 15, 5, 233, 141, 29, 118, 94, 248, 165, 94, 159, 15, 5,
- 233, 141, 29, 118, 94, 243, 72, 15, 5, 233, 141, 29, 118, 94, 233, 128,
- 15, 5, 233, 141, 29, 254, 86, 15, 5, 233, 141, 29, 254, 32, 15, 5, 233,
- 141, 29, 253, 147, 212, 33, 217, 192, 15, 5, 233, 141, 29, 252, 94, 15,
- 5, 233, 141, 29, 251, 184, 15, 5, 233, 141, 29, 248, 111, 15, 5, 233,
- 141, 29, 245, 108, 15, 5, 233, 141, 29, 243, 110, 15, 5, 233, 141, 29,
- 243, 72, 15, 5, 233, 141, 29, 242, 84, 15, 5, 233, 141, 29, 242, 85, 94,
- 242, 84, 15, 5, 233, 141, 29, 159, 15, 5, 233, 141, 29, 242, 12, 15, 5,
- 233, 141, 29, 241, 166, 29, 228, 50, 15, 5, 233, 141, 29, 236, 31, 242,
- 75, 15, 5, 233, 141, 29, 236, 11, 15, 5, 233, 141, 29, 236, 12, 94, 159,
- 15, 5, 233, 141, 29, 236, 12, 94, 232, 156, 15, 5, 233, 141, 29, 234,
- 101, 15, 5, 233, 141, 29, 234, 90, 15, 5, 233, 141, 29, 233, 236, 15, 5,
- 233, 141, 29, 233, 230, 15, 5, 233, 141, 29, 233, 231, 94, 241, 166, 94,
- 61, 15, 5, 233, 141, 29, 233, 140, 15, 5, 233, 141, 29, 232, 226, 15, 5,
- 233, 141, 29, 232, 156, 15, 5, 233, 141, 29, 232, 144, 15, 5, 233, 141,
- 29, 231, 156, 15, 5, 233, 141, 29, 231, 157, 94, 245, 108, 15, 5, 233,
- 141, 29, 230, 131, 15, 5, 233, 141, 29, 229, 187, 15, 5, 233, 141, 29,
- 220, 244, 94, 218, 244, 15, 5, 233, 141, 29, 220, 190, 94, 242, 167, 94,
- 245, 50, 15, 5, 233, 141, 29, 220, 190, 94, 242, 167, 217, 192, 15, 5,
- 233, 141, 29, 220, 148, 15, 5, 233, 141, 29, 220, 149, 94, 220, 148, 15,
- 5, 233, 141, 29, 218, 244, 15, 5, 233, 141, 29, 218, 33, 15, 5, 233, 141,
- 29, 218, 22, 15, 5, 233, 141, 29, 217, 230, 94, 118, 94, 219, 28, 94,
- 205, 15, 5, 233, 141, 29, 69, 15, 5, 233, 141, 29, 111, 94, 61, 15, 5,
- 233, 141, 29, 111, 94, 111, 94, 69, 15, 5, 233, 141, 29, 215, 198, 94,
- 253, 146, 15, 5, 233, 141, 29, 215, 188, 15, 5, 233, 141, 29, 215, 100,
- 15, 5, 233, 141, 219, 165, 15, 5, 233, 138, 15, 5, 233, 139, 29, 220,
- 243, 15, 5, 233, 139, 29, 220, 244, 94, 218, 244, 15, 5, 233, 139, 242,
- 75, 15, 5, 233, 139, 242, 76, 110, 233, 139, 242, 76, 220, 243, 15, 5,
- 233, 135, 15, 5, 233, 128, 15, 5, 233, 129, 29, 233, 128, 15, 5, 233,
- 126, 15, 5, 233, 127, 29, 233, 217, 15, 5, 233, 127, 29, 233, 218, 94,
- 223, 51, 15, 5, 233, 13, 15, 5, 232, 254, 15, 5, 232, 245, 15, 5, 232,
- 226, 15, 5, 232, 156, 15, 5, 232, 157, 29, 252, 94, 15, 5, 232, 154, 15,
- 5, 232, 155, 29, 254, 86, 15, 5, 232, 155, 29, 252, 94, 15, 5, 232, 155,
- 29, 245, 37, 15, 5, 232, 155, 29, 245, 38, 217, 192, 15, 5, 232, 155, 29,
- 243, 81, 217, 192, 15, 5, 232, 155, 29, 241, 166, 29, 252, 94, 15, 5,
- 232, 155, 29, 236, 11, 15, 5, 232, 155, 29, 235, 5, 15, 5, 232, 155, 29,
- 235, 3, 15, 5, 232, 155, 29, 235, 4, 94, 253, 146, 15, 5, 232, 155, 29,
- 234, 101, 15, 5, 232, 155, 29, 233, 158, 94, 253, 146, 15, 5, 232, 155,
- 29, 233, 140, 15, 5, 232, 155, 29, 231, 157, 94, 245, 108, 15, 5, 232,
- 155, 29, 229, 187, 15, 5, 232, 155, 29, 228, 92, 15, 5, 232, 155, 29,
- 220, 118, 94, 253, 146, 15, 5, 232, 155, 29, 220, 100, 94, 251, 54, 15,
- 5, 232, 155, 29, 216, 77, 15, 5, 232, 155, 217, 192, 15, 5, 232, 155,
- 249, 65, 232, 154, 15, 5, 232, 155, 227, 30, 232, 154, 15, 5, 232, 155,
- 219, 165, 15, 5, 232, 155, 220, 225, 15, 5, 232, 153, 15, 5, 232, 149,
- 15, 5, 232, 150, 110, 232, 149, 15, 5, 232, 150, 227, 30, 232, 149, 15,
- 5, 232, 150, 220, 225, 15, 5, 232, 147, 15, 5, 232, 144, 15, 5, 232, 142,
- 15, 5, 232, 143, 110, 232, 142, 15, 5, 232, 143, 110, 232, 143, 243, 73,
- 110, 243, 72, 15, 5, 188, 15, 5, 232, 43, 29, 218, 22, 15, 5, 232, 43,
- 242, 75, 15, 5, 232, 42, 15, 5, 232, 15, 15, 5, 231, 229, 15, 5, 231,
- 210, 15, 5, 231, 209, 15, 5, 231, 156, 15, 5, 231, 112, 15, 5, 231, 42,
- 15, 5, 231, 1, 15, 5, 230, 172, 15, 5, 230, 173, 110, 230, 172, 15, 5,
- 230, 163, 15, 5, 230, 164, 242, 75, 15, 5, 230, 148, 15, 5, 230, 134, 15,
- 5, 230, 131, 15, 5, 230, 132, 29, 61, 15, 5, 230, 132, 29, 233, 217, 15,
- 5, 230, 132, 29, 212, 109, 15, 5, 230, 132, 110, 230, 131, 15, 5, 230,
- 132, 110, 230, 132, 29, 118, 94, 205, 15, 5, 230, 132, 249, 65, 230, 131,
- 15, 5, 230, 129, 15, 5, 230, 130, 29, 61, 15, 5, 230, 130, 29, 118, 94,
- 247, 211, 15, 5, 230, 130, 29, 247, 211, 15, 5, 230, 130, 242, 75, 15, 5,
- 205, 15, 5, 230, 45, 15, 5, 230, 34, 15, 5, 230, 35, 235, 190, 15, 5,
- 230, 35, 29, 220, 151, 217, 192, 15, 5, 230, 35, 227, 30, 230, 34, 15, 5,
- 230, 33, 15, 5, 230, 28, 228, 36, 15, 5, 230, 27, 15, 5, 230, 26, 15, 5,
- 229, 187, 15, 5, 229, 188, 29, 61, 15, 5, 229, 188, 29, 215, 188, 15, 5,
- 229, 188, 220, 225, 15, 5, 229, 64, 15, 5, 229, 65, 29, 74, 15, 5, 229,
- 63, 15, 5, 229, 34, 15, 5, 229, 35, 29, 243, 81, 217, 192, 15, 5, 229,
- 35, 29, 243, 73, 94, 243, 81, 217, 192, 15, 5, 229, 32, 15, 5, 229, 33,
- 29, 254, 32, 15, 5, 229, 33, 29, 253, 146, 15, 5, 229, 33, 29, 253, 147,
- 94, 253, 146, 15, 5, 229, 33, 29, 242, 84, 15, 5, 229, 33, 29, 231, 157,
- 94, 243, 81, 217, 192, 15, 5, 229, 33, 29, 229, 187, 15, 5, 229, 33, 29,
- 228, 50, 15, 5, 229, 33, 29, 220, 243, 15, 5, 229, 33, 29, 220, 244, 94,
- 118, 254, 32, 15, 5, 229, 33, 29, 220, 244, 94, 253, 146, 15, 5, 229, 33,
- 29, 220, 244, 94, 253, 147, 94, 253, 146, 15, 5, 229, 33, 29, 215, 198,
- 94, 253, 146, 15, 5, 229, 33, 29, 215, 100, 15, 5, 229, 21, 15, 5, 228,
- 92, 15, 5, 228, 65, 15, 5, 228, 50, 15, 5, 228, 51, 233, 139, 29, 243,
- 72, 15, 5, 228, 51, 233, 139, 29, 231, 210, 15, 5, 228, 51, 233, 139, 29,
- 222, 179, 15, 5, 228, 51, 233, 139, 29, 222, 180, 110, 228, 51, 233, 139,
- 29, 222, 179, 15, 5, 228, 51, 233, 139, 29, 215, 100, 15, 5, 228, 51,
- 217, 192, 15, 5, 228, 51, 110, 228, 50, 15, 5, 228, 51, 249, 65, 228, 50,
- 15, 5, 228, 51, 249, 65, 228, 51, 233, 139, 110, 233, 138, 15, 5, 228,
- 45, 15, 5, 228, 46, 254, 184, 29, 253, 141, 15, 5, 228, 46, 254, 184, 29,
- 251, 184, 15, 5, 228, 46, 254, 184, 29, 246, 29, 15, 5, 228, 46, 254,
- 184, 29, 242, 84, 15, 5, 228, 46, 254, 184, 29, 236, 31, 242, 75, 15, 5,
- 228, 46, 254, 184, 29, 235, 3, 15, 5, 228, 46, 254, 184, 29, 233, 157,
- 15, 5, 228, 46, 254, 184, 29, 229, 187, 15, 5, 228, 46, 254, 184, 29,
- 220, 97, 15, 5, 228, 46, 254, 184, 29, 215, 197, 15, 5, 228, 46, 234, 75,
- 29, 251, 184, 15, 5, 228, 46, 234, 75, 29, 251, 185, 69, 15, 5, 193, 15,
- 5, 226, 204, 15, 5, 226, 174, 15, 5, 226, 149, 15, 5, 226, 37, 15, 5,
- 225, 240, 15, 5, 225, 241, 29, 61, 15, 5, 225, 241, 29, 254, 185, 15, 5,
- 225, 241, 29, 251, 184, 15, 5, 225, 241, 29, 251, 54, 15, 5, 225, 241,
- 29, 74, 15, 5, 225, 241, 29, 72, 15, 5, 225, 241, 29, 240, 108, 15, 5,
- 225, 241, 29, 69, 15, 5, 225, 241, 29, 215, 197, 15, 5, 225, 241, 249,
- 65, 225, 240, 15, 5, 225, 185, 15, 5, 225, 186, 29, 234, 243, 15, 5, 225,
- 186, 29, 215, 188, 15, 5, 225, 186, 29, 212, 109, 15, 5, 225, 186, 227,
- 30, 225, 185, 15, 5, 203, 15, 5, 224, 72, 15, 5, 223, 188, 15, 5, 223,
- 51, 15, 5, 222, 202, 15, 5, 222, 191, 228, 36, 15, 5, 222, 190, 15, 5,
- 222, 191, 29, 61, 15, 5, 222, 191, 29, 246, 33, 15, 5, 222, 191, 29, 246,
- 31, 15, 5, 222, 191, 29, 159, 15, 5, 222, 191, 29, 234, 247, 15, 5, 222,
- 191, 29, 233, 217, 15, 5, 222, 191, 29, 232, 142, 15, 5, 222, 191, 29,
- 231, 42, 15, 5, 222, 191, 29, 228, 50, 15, 5, 222, 191, 29, 222, 179, 15,
- 5, 222, 191, 29, 220, 210, 15, 5, 222, 191, 29, 218, 41, 15, 5, 222, 191,
- 29, 215, 197, 15, 5, 222, 191, 29, 215, 194, 15, 5, 222, 191, 29, 215,
- 167, 15, 5, 222, 191, 29, 215, 121, 15, 5, 222, 191, 29, 215, 100, 15, 5,
- 222, 191, 110, 222, 190, 15, 5, 222, 191, 242, 75, 15, 5, 222, 179, 15,
- 5, 222, 180, 233, 141, 29, 253, 144, 15, 5, 222, 155, 15, 5, 222, 147,
- 15, 5, 221, 24, 15, 5, 221, 22, 15, 5, 221, 23, 29, 61, 15, 5, 221, 23,
- 29, 252, 94, 15, 5, 221, 23, 29, 242, 166, 15, 5, 221, 23, 29, 229, 187,
- 15, 5, 221, 23, 29, 220, 148, 15, 5, 221, 23, 29, 216, 62, 15, 5, 221,
- 23, 29, 69, 15, 5, 221, 23, 29, 111, 94, 61, 15, 5, 221, 21, 15, 5, 221,
- 19, 15, 5, 221, 1, 15, 5, 220, 243, 15, 5, 220, 244, 240, 212, 15, 5,
- 220, 244, 110, 220, 244, 243, 102, 110, 243, 102, 243, 73, 110, 243, 72,
- 15, 5, 220, 244, 110, 220, 244, 218, 42, 110, 218, 42, 243, 73, 110, 243,
- 72, 15, 5, 220, 236, 15, 5, 220, 231, 15, 5, 220, 228, 15, 5, 220, 227,
- 15, 5, 220, 224, 15, 5, 220, 210, 15, 5, 220, 211, 29, 61, 15, 5, 220,
- 211, 29, 236, 11, 15, 5, 220, 204, 15, 5, 220, 205, 29, 61, 15, 5, 220,
- 205, 29, 252, 80, 15, 5, 220, 205, 29, 251, 38, 15, 5, 220, 205, 29, 247,
- 158, 15, 5, 220, 205, 29, 243, 72, 15, 5, 220, 205, 29, 236, 30, 15, 5,
- 220, 205, 29, 236, 31, 242, 75, 15, 5, 220, 205, 29, 233, 212, 15, 5,
- 220, 205, 29, 232, 144, 15, 5, 220, 205, 29, 230, 163, 15, 5, 220, 205,
- 29, 222, 179, 15, 5, 220, 198, 15, 5, 220, 193, 15, 5, 220, 194, 217,
- 192, 15, 5, 220, 194, 110, 220, 194, 251, 28, 110, 251, 27, 15, 5, 220,
- 189, 15, 5, 220, 150, 15, 5, 220, 151, 110, 235, 191, 220, 150, 15, 5,
- 220, 148, 15, 5, 220, 147, 15, 5, 220, 117, 15, 5, 220, 118, 242, 75, 15,
- 5, 220, 108, 15, 5, 220, 106, 15, 5, 220, 107, 110, 220, 107, 220, 148,
- 15, 5, 220, 99, 15, 5, 220, 97, 15, 5, 219, 27, 15, 5, 219, 28, 110, 219,
- 27, 15, 5, 218, 255, 15, 5, 218, 254, 15, 5, 218, 252, 15, 5, 218, 244,
- 15, 5, 218, 243, 15, 5, 218, 217, 15, 5, 218, 216, 15, 5, 218, 52, 15, 5,
- 218, 53, 253, 132, 15, 5, 218, 53, 29, 241, 165, 15, 5, 218, 53, 29, 231,
- 42, 15, 5, 218, 53, 242, 75, 15, 5, 218, 41, 15, 5, 218, 42, 110, 218,
- 42, 229, 65, 110, 229, 65, 247, 140, 110, 247, 139, 15, 5, 218, 42, 219,
- 165, 15, 5, 218, 33, 15, 5, 126, 29, 251, 184, 15, 5, 126, 29, 242, 84,
- 15, 5, 126, 29, 220, 243, 15, 5, 126, 29, 220, 150, 15, 5, 126, 29, 216,
- 77, 15, 5, 126, 29, 215, 188, 15, 5, 218, 22, 15, 5, 218, 1, 15, 5, 217,
- 229, 15, 5, 217, 230, 242, 75, 15, 5, 217, 71, 15, 5, 217, 72, 217, 192,
- 15, 5, 217, 44, 15, 5, 217, 25, 15, 5, 217, 26, 29, 218, 22, 15, 5, 217,
- 26, 110, 217, 25, 15, 5, 217, 26, 110, 217, 26, 243, 102, 110, 243, 102,
- 243, 73, 110, 243, 72, 15, 5, 216, 82, 15, 5, 216, 77, 15, 5, 216, 75,
- 15, 5, 216, 72, 15, 5, 216, 62, 15, 5, 216, 63, 110, 216, 63, 212, 110,
- 110, 212, 109, 15, 5, 69, 15, 5, 111, 242, 84, 15, 5, 111, 111, 69, 15,
- 5, 111, 110, 111, 226, 214, 110, 226, 214, 243, 73, 110, 243, 72, 15, 5,
- 111, 110, 111, 218, 218, 110, 218, 217, 15, 5, 111, 110, 111, 111, 223,
- 202, 110, 111, 223, 201, 15, 5, 215, 197, 15, 5, 215, 194, 15, 5, 215,
- 188, 15, 5, 215, 189, 233, 212, 15, 5, 215, 189, 29, 252, 94, 15, 5, 215,
- 189, 29, 231, 42, 15, 5, 215, 189, 29, 111, 94, 111, 94, 69, 15, 5, 215,
- 189, 29, 111, 94, 111, 94, 111, 242, 75, 15, 5, 215, 189, 242, 75, 15, 5,
- 215, 189, 220, 225, 15, 5, 215, 189, 220, 226, 29, 252, 94, 15, 5, 215,
- 184, 15, 5, 215, 167, 15, 5, 215, 168, 29, 233, 140, 15, 5, 215, 168, 29,
- 231, 157, 94, 248, 164, 15, 5, 215, 168, 29, 221, 22, 15, 5, 215, 168,
- 29, 69, 15, 5, 215, 166, 15, 5, 215, 162, 15, 5, 215, 163, 29, 234, 212,
- 15, 5, 215, 163, 29, 193, 15, 5, 215, 160, 15, 5, 215, 161, 242, 75, 15,
- 5, 215, 121, 15, 5, 215, 122, 249, 65, 215, 121, 15, 5, 215, 122, 220,
- 225, 15, 5, 215, 119, 15, 5, 215, 120, 29, 118, 94, 159, 15, 5, 215, 120,
- 29, 118, 94, 205, 15, 5, 215, 120, 29, 254, 86, 15, 5, 215, 120, 29, 159,
- 15, 5, 215, 120, 29, 228, 50, 15, 5, 215, 120, 29, 215, 197, 15, 5, 215,
- 120, 29, 215, 198, 94, 253, 146, 15, 5, 215, 120, 29, 215, 198, 94, 251,
- 184, 15, 5, 215, 118, 15, 5, 215, 115, 15, 5, 215, 114, 15, 5, 215, 110,
- 15, 5, 215, 111, 29, 61, 15, 5, 215, 111, 29, 253, 141, 15, 5, 215, 111,
- 29, 134, 15, 5, 215, 111, 29, 246, 23, 15, 5, 215, 111, 29, 243, 110, 15,
- 5, 215, 111, 29, 243, 94, 15, 5, 215, 111, 29, 243, 81, 217, 192, 15, 5,
- 215, 111, 29, 243, 72, 15, 5, 215, 111, 29, 242, 92, 15, 5, 215, 111, 29,
- 159, 15, 5, 215, 111, 29, 236, 30, 15, 5, 215, 111, 29, 236, 11, 15, 5,
- 215, 111, 29, 235, 163, 15, 5, 215, 111, 29, 234, 101, 15, 5, 215, 111,
- 29, 232, 142, 15, 5, 215, 111, 29, 231, 1, 15, 5, 215, 111, 29, 193, 15,
- 5, 215, 111, 29, 220, 243, 15, 5, 215, 111, 29, 220, 106, 15, 5, 215,
- 111, 29, 216, 82, 15, 5, 215, 111, 29, 111, 94, 242, 84, 15, 5, 215, 111,
- 29, 215, 188, 15, 5, 215, 111, 29, 215, 108, 15, 5, 215, 108, 15, 5, 215,
- 109, 29, 69, 15, 5, 215, 100, 15, 5, 215, 101, 29, 61, 15, 5, 215, 101,
- 29, 233, 238, 15, 5, 215, 101, 29, 233, 217, 15, 5, 215, 101, 29, 218,
- 22, 15, 5, 215, 96, 15, 5, 215, 99, 15, 5, 215, 97, 15, 5, 215, 93, 15,
- 5, 215, 82, 15, 5, 215, 83, 29, 234, 212, 15, 5, 215, 81, 15, 5, 212,
- 109, 15, 5, 212, 110, 217, 192, 15, 5, 212, 110, 91, 29, 233, 217, 15, 5,
- 212, 106, 15, 5, 212, 99, 15, 5, 212, 86, 15, 5, 212, 37, 15, 5, 212, 38,
- 110, 212, 37, 15, 5, 212, 36, 15, 5, 212, 34, 15, 5, 212, 35, 235, 7,
- 217, 192, 15, 5, 212, 29, 15, 5, 212, 21, 15, 5, 212, 8, 15, 5, 212, 6,
- 15, 5, 212, 7, 29, 61, 15, 5, 212, 5, 15, 5, 212, 4, 15, 128, 5, 117,
- 253, 146, 15, 128, 5, 133, 253, 146, 15, 128, 5, 243, 237, 253, 146, 15,
- 128, 5, 244, 50, 253, 146, 15, 128, 5, 220, 53, 253, 146, 15, 128, 5,
- 221, 43, 253, 146, 15, 128, 5, 245, 150, 253, 146, 15, 128, 5, 229, 31,
- 253, 146, 15, 128, 5, 133, 247, 139, 15, 128, 5, 243, 237, 247, 139, 15,
- 128, 5, 244, 50, 247, 139, 15, 128, 5, 220, 53, 247, 139, 15, 128, 5,
- 221, 43, 247, 139, 15, 128, 5, 245, 150, 247, 139, 15, 128, 5, 229, 31,
- 247, 139, 15, 128, 5, 243, 237, 69, 15, 128, 5, 244, 50, 69, 15, 128, 5,
- 220, 53, 69, 15, 128, 5, 221, 43, 69, 15, 128, 5, 245, 150, 69, 15, 128,
- 5, 229, 31, 69, 15, 128, 5, 122, 243, 14, 15, 128, 5, 117, 243, 14, 15,
- 128, 5, 133, 243, 14, 15, 128, 5, 243, 237, 243, 14, 15, 128, 5, 244, 50,
- 243, 14, 15, 128, 5, 220, 53, 243, 14, 15, 128, 5, 221, 43, 243, 14, 15,
- 128, 5, 245, 150, 243, 14, 15, 128, 5, 229, 31, 243, 14, 15, 128, 5, 122,
- 243, 11, 15, 128, 5, 117, 243, 11, 15, 128, 5, 133, 243, 11, 15, 128, 5,
- 243, 237, 243, 11, 15, 128, 5, 244, 50, 243, 11, 15, 128, 5, 117, 221, 1,
- 15, 128, 5, 133, 221, 1, 15, 128, 5, 133, 221, 2, 214, 244, 17, 15, 128,
- 5, 243, 237, 221, 1, 15, 128, 5, 244, 50, 221, 1, 15, 128, 5, 220, 53,
- 221, 1, 15, 128, 5, 221, 43, 221, 1, 15, 128, 5, 245, 150, 221, 1, 15,
- 128, 5, 229, 31, 221, 1, 15, 128, 5, 122, 220, 252, 15, 128, 5, 117, 220,
- 252, 15, 128, 5, 133, 220, 252, 15, 128, 5, 133, 220, 253, 214, 244, 17,
- 15, 128, 5, 243, 237, 220, 252, 15, 128, 5, 244, 50, 220, 252, 15, 128,
- 5, 221, 2, 29, 243, 95, 94, 247, 139, 15, 128, 5, 221, 2, 29, 243, 95,
- 94, 231, 1, 15, 128, 5, 122, 251, 24, 15, 128, 5, 117, 251, 24, 15, 128,
- 5, 133, 251, 24, 15, 128, 5, 133, 251, 25, 214, 244, 17, 15, 128, 5, 243,
- 237, 251, 24, 15, 128, 5, 244, 50, 251, 24, 15, 128, 5, 133, 214, 244,
- 243, 245, 245, 39, 15, 128, 5, 133, 214, 244, 243, 245, 245, 36, 15, 128,
- 5, 243, 237, 214, 244, 243, 245, 232, 246, 15, 128, 5, 243, 237, 214,
- 244, 243, 245, 232, 244, 15, 128, 5, 243, 237, 214, 244, 243, 245, 232,
- 247, 61, 15, 128, 5, 243, 237, 214, 244, 243, 245, 232, 247, 253, 74, 15,
- 128, 5, 220, 53, 214, 244, 243, 245, 253, 143, 15, 128, 5, 221, 43, 214,
- 244, 243, 245, 236, 3, 15, 128, 5, 221, 43, 214, 244, 243, 245, 236, 5,
- 61, 15, 128, 5, 221, 43, 214, 244, 243, 245, 236, 5, 253, 74, 15, 128, 5,
- 245, 150, 214, 244, 243, 245, 215, 95, 15, 128, 5, 245, 150, 214, 244,
- 243, 245, 215, 94, 15, 128, 5, 229, 31, 214, 244, 243, 245, 236, 19, 15,
- 128, 5, 229, 31, 214, 244, 243, 245, 236, 18, 15, 128, 5, 229, 31, 214,
- 244, 243, 245, 236, 17, 15, 128, 5, 229, 31, 214, 244, 243, 245, 236, 20,
- 61, 15, 128, 5, 117, 253, 147, 217, 192, 15, 128, 5, 133, 253, 147, 217,
- 192, 15, 128, 5, 243, 237, 253, 147, 217, 192, 15, 128, 5, 244, 50, 253,
- 147, 217, 192, 15, 128, 5, 220, 53, 253, 147, 217, 192, 15, 128, 5, 122,
- 252, 69, 15, 128, 5, 117, 252, 69, 15, 128, 5, 133, 252, 69, 15, 128, 5,
- 243, 237, 252, 69, 15, 128, 5, 243, 237, 252, 70, 214, 244, 17, 15, 128,
- 5, 244, 50, 252, 69, 15, 128, 5, 244, 50, 252, 70, 214, 244, 17, 15, 128,
- 5, 229, 41, 15, 128, 5, 229, 42, 15, 128, 5, 122, 245, 35, 15, 128, 5,
- 117, 245, 35, 15, 128, 5, 122, 217, 122, 247, 139, 15, 128, 5, 117, 217,
- 120, 247, 139, 15, 128, 5, 244, 50, 220, 42, 247, 139, 15, 128, 5, 122,
- 217, 122, 214, 244, 243, 245, 61, 15, 128, 5, 117, 217, 120, 214, 244,
- 243, 245, 61, 15, 128, 5, 122, 245, 146, 253, 146, 15, 128, 5, 122, 224,
- 167, 253, 146, 15, 128, 5, 53, 253, 135, 122, 220, 43, 15, 128, 5, 53,
- 253, 135, 122, 224, 166, 15, 225, 27, 5, 53, 253, 135, 213, 196, 247,
- 124, 15, 225, 27, 5, 71, 249, 164, 15, 225, 27, 5, 247, 207, 249, 164,
- 15, 225, 27, 5, 247, 207, 216, 179, 10, 11, 255, 58, 10, 11, 255, 57, 10,
- 11, 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11,
- 255, 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255,
- 48, 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44,
- 10, 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10,
- 11, 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11,
- 255, 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255,
- 31, 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27,
- 10, 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 10, 11, 255, 23, 10,
- 11, 255, 22, 10, 11, 255, 21, 10, 11, 255, 20, 10, 11, 255, 19, 10, 11,
- 255, 18, 10, 11, 255, 17, 10, 11, 255, 16, 10, 11, 255, 15, 10, 11, 255,
- 14, 10, 11, 255, 13, 10, 11, 255, 12, 10, 11, 255, 11, 10, 11, 255, 10,
- 10, 11, 255, 9, 10, 11, 255, 8, 10, 11, 255, 7, 10, 11, 255, 6, 10, 11,
- 255, 5, 10, 11, 255, 4, 10, 11, 255, 3, 10, 11, 255, 2, 10, 11, 255, 1,
- 10, 11, 255, 0, 10, 11, 254, 255, 10, 11, 254, 254, 10, 11, 254, 253, 10,
- 11, 254, 252, 10, 11, 254, 251, 10, 11, 254, 250, 10, 11, 254, 249, 10,
- 11, 254, 248, 10, 11, 254, 247, 10, 11, 254, 246, 10, 11, 254, 245, 10,
- 11, 254, 244, 10, 11, 254, 243, 10, 11, 254, 242, 10, 11, 254, 241, 10,
- 11, 254, 240, 10, 11, 254, 239, 10, 11, 254, 238, 10, 11, 254, 237, 10,
- 11, 254, 236, 10, 11, 254, 235, 10, 11, 253, 72, 10, 11, 253, 70, 10, 11,
- 253, 68, 10, 11, 253, 66, 10, 11, 253, 64, 10, 11, 253, 63, 10, 11, 253,
- 61, 10, 11, 253, 59, 10, 11, 253, 57, 10, 11, 253, 55, 10, 11, 250, 248,
- 10, 11, 250, 247, 10, 11, 250, 246, 10, 11, 250, 245, 10, 11, 250, 244,
- 10, 11, 250, 243, 10, 11, 250, 242, 10, 11, 250, 241, 10, 11, 250, 240,
- 10, 11, 250, 239, 10, 11, 250, 238, 10, 11, 250, 237, 10, 11, 250, 236,
- 10, 11, 250, 235, 10, 11, 250, 234, 10, 11, 250, 233, 10, 11, 250, 232,
- 10, 11, 250, 231, 10, 11, 250, 230, 10, 11, 250, 229, 10, 11, 250, 228,
- 10, 11, 250, 227, 10, 11, 250, 226, 10, 11, 250, 225, 10, 11, 250, 224,
- 10, 11, 250, 223, 10, 11, 250, 222, 10, 11, 250, 221, 10, 11, 249, 2, 10,
- 11, 249, 1, 10, 11, 249, 0, 10, 11, 248, 255, 10, 11, 248, 254, 10, 11,
- 248, 253, 10, 11, 248, 252, 10, 11, 248, 251, 10, 11, 248, 250, 10, 11,
- 248, 249, 10, 11, 248, 248, 10, 11, 248, 247, 10, 11, 248, 246, 10, 11,
- 248, 245, 10, 11, 248, 244, 10, 11, 248, 243, 10, 11, 248, 242, 10, 11,
- 248, 241, 10, 11, 248, 240, 10, 11, 248, 239, 10, 11, 248, 238, 10, 11,
- 248, 237, 10, 11, 248, 236, 10, 11, 248, 235, 10, 11, 248, 234, 10, 11,
- 248, 233, 10, 11, 248, 232, 10, 11, 248, 231, 10, 11, 248, 230, 10, 11,
- 248, 229, 10, 11, 248, 228, 10, 11, 248, 227, 10, 11, 248, 226, 10, 11,
- 248, 225, 10, 11, 248, 224, 10, 11, 248, 223, 10, 11, 248, 222, 10, 11,
- 248, 221, 10, 11, 248, 220, 10, 11, 248, 219, 10, 11, 248, 218, 10, 11,
- 248, 217, 10, 11, 248, 216, 10, 11, 248, 215, 10, 11, 248, 214, 10, 11,
- 248, 213, 10, 11, 248, 212, 10, 11, 248, 211, 10, 11, 248, 210, 10, 11,
- 248, 209, 10, 11, 248, 208, 10, 11, 248, 207, 10, 11, 248, 206, 10, 11,
- 248, 205, 10, 11, 248, 204, 10, 11, 248, 203, 10, 11, 248, 202, 10, 11,
- 248, 201, 10, 11, 248, 200, 10, 11, 248, 199, 10, 11, 248, 198, 10, 11,
- 248, 197, 10, 11, 248, 196, 10, 11, 248, 195, 10, 11, 248, 194, 10, 11,
- 248, 193, 10, 11, 248, 192, 10, 11, 248, 191, 10, 11, 248, 190, 10, 11,
- 248, 189, 10, 11, 248, 188, 10, 11, 248, 187, 10, 11, 248, 186, 10, 11,
- 248, 185, 10, 11, 248, 184, 10, 11, 248, 183, 10, 11, 248, 182, 10, 11,
- 248, 181, 10, 11, 248, 180, 10, 11, 248, 179, 10, 11, 248, 178, 10, 11,
- 248, 177, 10, 11, 248, 176, 10, 11, 248, 175, 10, 11, 248, 174, 10, 11,
- 248, 173, 10, 11, 248, 172, 10, 11, 248, 171, 10, 11, 248, 170, 10, 11,
- 248, 169, 10, 11, 248, 168, 10, 11, 248, 167, 10, 11, 245, 235, 10, 11,
- 245, 234, 10, 11, 245, 233, 10, 11, 245, 232, 10, 11, 245, 231, 10, 11,
- 245, 230, 10, 11, 245, 229, 10, 11, 245, 228, 10, 11, 245, 227, 10, 11,
- 245, 226, 10, 11, 245, 225, 10, 11, 245, 224, 10, 11, 245, 223, 10, 11,
- 245, 222, 10, 11, 245, 221, 10, 11, 245, 220, 10, 11, 245, 219, 10, 11,
- 245, 218, 10, 11, 245, 217, 10, 11, 245, 216, 10, 11, 245, 215, 10, 11,
- 245, 214, 10, 11, 245, 213, 10, 11, 245, 212, 10, 11, 245, 211, 10, 11,
- 245, 210, 10, 11, 245, 209, 10, 11, 245, 208, 10, 11, 245, 207, 10, 11,
- 245, 206, 10, 11, 245, 205, 10, 11, 245, 204, 10, 11, 245, 203, 10, 11,
- 245, 202, 10, 11, 245, 201, 10, 11, 245, 200, 10, 11, 245, 199, 10, 11,
- 245, 198, 10, 11, 245, 197, 10, 11, 245, 196, 10, 11, 245, 195, 10, 11,
- 245, 194, 10, 11, 245, 193, 10, 11, 245, 192, 10, 11, 244, 229, 10, 11,
- 244, 228, 10, 11, 244, 227, 10, 11, 244, 226, 10, 11, 244, 225, 10, 11,
- 244, 224, 10, 11, 244, 223, 10, 11, 244, 222, 10, 11, 244, 221, 10, 11,
- 244, 220, 10, 11, 244, 219, 10, 11, 244, 218, 10, 11, 244, 217, 10, 11,
- 244, 216, 10, 11, 244, 215, 10, 11, 244, 214, 10, 11, 244, 213, 10, 11,
- 244, 212, 10, 11, 244, 211, 10, 11, 244, 210, 10, 11, 244, 209, 10, 11,
- 244, 208, 10, 11, 244, 207, 10, 11, 244, 206, 10, 11, 244, 205, 10, 11,
- 244, 204, 10, 11, 244, 203, 10, 11, 244, 202, 10, 11, 244, 201, 10, 11,
- 244, 200, 10, 11, 244, 199, 10, 11, 244, 198, 10, 11, 244, 197, 10, 11,
- 244, 196, 10, 11, 244, 195, 10, 11, 244, 194, 10, 11, 244, 193, 10, 11,
- 244, 192, 10, 11, 244, 191, 10, 11, 244, 190, 10, 11, 244, 189, 10, 11,
- 244, 188, 10, 11, 244, 187, 10, 11, 244, 186, 10, 11, 244, 185, 10, 11,
- 244, 184, 10, 11, 244, 183, 10, 11, 244, 182, 10, 11, 244, 181, 10, 11,
- 244, 180, 10, 11, 244, 179, 10, 11, 244, 178, 10, 11, 244, 177, 10, 11,
- 244, 176, 10, 11, 244, 175, 10, 11, 244, 174, 10, 11, 244, 173, 10, 11,
- 244, 172, 10, 11, 244, 171, 10, 11, 244, 170, 10, 11, 244, 169, 10, 11,
- 244, 168, 10, 11, 244, 167, 10, 11, 244, 166, 10, 11, 244, 165, 10, 11,
- 243, 176, 10, 11, 243, 175, 10, 11, 243, 174, 10, 11, 243, 173, 10, 11,
- 243, 172, 10, 11, 243, 171, 10, 11, 243, 170, 10, 11, 243, 169, 10, 11,
- 243, 168, 10, 11, 243, 167, 10, 11, 243, 166, 10, 11, 243, 165, 10, 11,
- 243, 164, 10, 11, 243, 163, 10, 11, 243, 162, 10, 11, 243, 161, 10, 11,
- 243, 160, 10, 11, 243, 159, 10, 11, 243, 158, 10, 11, 243, 157, 10, 11,
- 243, 156, 10, 11, 243, 155, 10, 11, 243, 154, 10, 11, 243, 153, 10, 11,
- 243, 152, 10, 11, 243, 151, 10, 11, 243, 150, 10, 11, 243, 149, 10, 11,
- 243, 148, 10, 11, 243, 147, 10, 11, 243, 146, 10, 11, 243, 145, 10, 11,
- 243, 144, 10, 11, 243, 143, 10, 11, 243, 142, 10, 11, 243, 141, 10, 11,
- 243, 140, 10, 11, 243, 139, 10, 11, 243, 138, 10, 11, 243, 137, 10, 11,
- 243, 136, 10, 11, 243, 135, 10, 11, 243, 134, 10, 11, 243, 133, 10, 11,
- 243, 132, 10, 11, 243, 131, 10, 11, 243, 130, 10, 11, 243, 129, 10, 11,
- 243, 128, 10, 11, 243, 127, 10, 11, 243, 126, 10, 11, 243, 125, 10, 11,
- 243, 124, 10, 11, 243, 123, 10, 11, 243, 122, 10, 11, 243, 121, 10, 11,
- 243, 120, 10, 11, 243, 119, 10, 11, 243, 118, 10, 11, 243, 117, 10, 11,
- 243, 116, 10, 11, 243, 115, 10, 11, 243, 114, 10, 11, 243, 113, 10, 11,
- 242, 39, 10, 11, 242, 38, 10, 11, 242, 37, 10, 11, 242, 36, 10, 11, 242,
- 35, 10, 11, 242, 34, 10, 11, 242, 33, 10, 11, 242, 32, 10, 11, 242, 31,
- 10, 11, 240, 130, 10, 11, 240, 129, 10, 11, 240, 128, 10, 11, 240, 127,
- 10, 11, 240, 126, 10, 11, 240, 125, 10, 11, 240, 124, 10, 11, 240, 123,
- 10, 11, 240, 122, 10, 11, 240, 121, 10, 11, 240, 120, 10, 11, 240, 119,
- 10, 11, 240, 118, 10, 11, 240, 117, 10, 11, 240, 116, 10, 11, 240, 115,
- 10, 11, 240, 114, 10, 11, 240, 113, 10, 11, 240, 112, 10, 11, 235, 26,
- 10, 11, 235, 25, 10, 11, 235, 24, 10, 11, 235, 23, 10, 11, 235, 22, 10,
- 11, 235, 21, 10, 11, 235, 20, 10, 11, 235, 19, 10, 11, 233, 168, 10, 11,
- 233, 167, 10, 11, 233, 166, 10, 11, 233, 165, 10, 11, 233, 164, 10, 11,
- 233, 163, 10, 11, 233, 162, 10, 11, 233, 161, 10, 11, 233, 160, 10, 11,
- 233, 159, 10, 11, 232, 109, 10, 11, 232, 108, 10, 11, 232, 107, 10, 11,
- 232, 106, 10, 11, 232, 105, 10, 11, 232, 104, 10, 11, 232, 103, 10, 11,
- 232, 102, 10, 11, 232, 101, 10, 11, 232, 100, 10, 11, 232, 99, 10, 11,
- 232, 98, 10, 11, 232, 97, 10, 11, 232, 96, 10, 11, 232, 95, 10, 11, 232,
- 94, 10, 11, 232, 93, 10, 11, 232, 92, 10, 11, 232, 91, 10, 11, 232, 90,
- 10, 11, 232, 89, 10, 11, 232, 88, 10, 11, 232, 87, 10, 11, 232, 86, 10,
- 11, 232, 85, 10, 11, 232, 84, 10, 11, 232, 83, 10, 11, 232, 82, 10, 11,
- 232, 81, 10, 11, 232, 80, 10, 11, 232, 79, 10, 11, 232, 78, 10, 11, 232,
- 77, 10, 11, 232, 76, 10, 11, 232, 75, 10, 11, 232, 74, 10, 11, 232, 73,
- 10, 11, 232, 72, 10, 11, 232, 71, 10, 11, 232, 70, 10, 11, 232, 69, 10,
- 11, 232, 68, 10, 11, 232, 67, 10, 11, 232, 66, 10, 11, 232, 65, 10, 11,
- 232, 64, 10, 11, 232, 63, 10, 11, 232, 62, 10, 11, 232, 61, 10, 11, 232,
- 60, 10, 11, 232, 59, 10, 11, 232, 58, 10, 11, 232, 57, 10, 11, 232, 56,
- 10, 11, 232, 55, 10, 11, 232, 54, 10, 11, 232, 53, 10, 11, 232, 52, 10,
- 11, 232, 51, 10, 11, 232, 50, 10, 11, 232, 49, 10, 11, 232, 48, 10, 11,
- 232, 47, 10, 11, 232, 46, 10, 11, 232, 45, 10, 11, 232, 44, 10, 11, 230,
- 95, 10, 11, 230, 94, 10, 11, 230, 93, 10, 11, 230, 92, 10, 11, 230, 91,
- 10, 11, 230, 90, 10, 11, 230, 89, 10, 11, 230, 88, 10, 11, 230, 87, 10,
- 11, 230, 86, 10, 11, 230, 85, 10, 11, 230, 84, 10, 11, 230, 83, 10, 11,
- 230, 82, 10, 11, 230, 81, 10, 11, 230, 80, 10, 11, 230, 79, 10, 11, 230,
- 78, 10, 11, 230, 77, 10, 11, 230, 76, 10, 11, 230, 75, 10, 11, 230, 74,
- 10, 11, 230, 73, 10, 11, 230, 72, 10, 11, 230, 71, 10, 11, 230, 70, 10,
- 11, 230, 69, 10, 11, 230, 68, 10, 11, 230, 67, 10, 11, 230, 66, 10, 11,
- 230, 65, 10, 11, 230, 64, 10, 11, 230, 63, 10, 11, 230, 62, 10, 11, 230,
- 61, 10, 11, 230, 60, 10, 11, 230, 59, 10, 11, 230, 58, 10, 11, 230, 57,
- 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, 10, 11, 230, 53, 10,
- 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, 11, 230, 49, 10, 11,
- 230, 48, 10, 11, 230, 47, 10, 11, 228, 222, 10, 11, 228, 221, 10, 11,
- 228, 220, 10, 11, 228, 219, 10, 11, 228, 218, 10, 11, 228, 217, 10, 11,
- 228, 216, 10, 11, 228, 215, 10, 11, 228, 214, 10, 11, 228, 213, 10, 11,
- 228, 212, 10, 11, 228, 211, 10, 11, 228, 210, 10, 11, 228, 209, 10, 11,
- 228, 208, 10, 11, 228, 207, 10, 11, 228, 206, 10, 11, 228, 205, 10, 11,
- 228, 204, 10, 11, 228, 203, 10, 11, 228, 202, 10, 11, 228, 201, 10, 11,
- 228, 91, 10, 11, 228, 90, 10, 11, 228, 89, 10, 11, 228, 88, 10, 11, 228,
- 87, 10, 11, 228, 86, 10, 11, 228, 85, 10, 11, 228, 84, 10, 11, 228, 83,
- 10, 11, 228, 82, 10, 11, 228, 81, 10, 11, 228, 80, 10, 11, 228, 79, 10,
- 11, 228, 78, 10, 11, 228, 77, 10, 11, 228, 76, 10, 11, 228, 75, 10, 11,
- 228, 74, 10, 11, 228, 73, 10, 11, 228, 72, 10, 11, 228, 71, 10, 11, 228,
- 70, 10, 11, 228, 69, 10, 11, 228, 68, 10, 11, 228, 67, 10, 11, 228, 66,
- 10, 11, 227, 196, 10, 11, 227, 195, 10, 11, 227, 194, 10, 11, 227, 193,
- 10, 11, 227, 192, 10, 11, 227, 191, 10, 11, 227, 190, 10, 11, 227, 189,
- 10, 11, 227, 188, 10, 11, 227, 187, 10, 11, 227, 186, 10, 11, 227, 185,
- 10, 11, 227, 184, 10, 11, 227, 183, 10, 11, 227, 182, 10, 11, 227, 181,
- 10, 11, 227, 180, 10, 11, 227, 179, 10, 11, 227, 178, 10, 11, 227, 177,
- 10, 11, 227, 176, 10, 11, 227, 175, 10, 11, 227, 174, 10, 11, 227, 173,
- 10, 11, 227, 172, 10, 11, 227, 171, 10, 11, 227, 170, 10, 11, 227, 169,
- 10, 11, 227, 168, 10, 11, 227, 167, 10, 11, 227, 166, 10, 11, 227, 165,
- 10, 11, 227, 164, 10, 11, 227, 163, 10, 11, 227, 162, 10, 11, 227, 161,
- 10, 11, 227, 160, 10, 11, 227, 159, 10, 11, 227, 158, 10, 11, 227, 157,
- 10, 11, 227, 156, 10, 11, 227, 155, 10, 11, 227, 154, 10, 11, 227, 153,
- 10, 11, 227, 152, 10, 11, 227, 151, 10, 11, 227, 150, 10, 11, 227, 149,
- 10, 11, 227, 148, 10, 11, 227, 147, 10, 11, 227, 146, 10, 11, 227, 145,
- 10, 11, 227, 144, 10, 11, 227, 143, 10, 11, 227, 142, 10, 11, 227, 141,
- 10, 11, 227, 140, 10, 11, 227, 139, 10, 11, 227, 138, 10, 11, 227, 137,
- 10, 11, 227, 136, 10, 11, 227, 135, 10, 11, 227, 134, 10, 11, 227, 133,
- 10, 11, 227, 132, 10, 11, 227, 131, 10, 11, 227, 130, 10, 11, 227, 129,
- 10, 11, 227, 128, 10, 11, 227, 127, 10, 11, 227, 126, 10, 11, 227, 125,
- 10, 11, 227, 124, 10, 11, 227, 123, 10, 11, 227, 122, 10, 11, 226, 228,
- 10, 11, 226, 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224,
- 10, 11, 226, 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220,
- 10, 11, 226, 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216,
- 10, 11, 224, 239, 10, 11, 224, 238, 10, 11, 224, 237, 10, 11, 224, 236,
- 10, 11, 224, 235, 10, 11, 224, 234, 10, 11, 224, 233, 10, 11, 224, 111,
- 10, 11, 224, 110, 10, 11, 224, 109, 10, 11, 224, 108, 10, 11, 224, 107,
- 10, 11, 224, 106, 10, 11, 224, 105, 10, 11, 224, 104, 10, 11, 224, 103,
- 10, 11, 224, 102, 10, 11, 224, 101, 10, 11, 224, 100, 10, 11, 224, 99,
- 10, 11, 224, 98, 10, 11, 224, 97, 10, 11, 224, 96, 10, 11, 224, 95, 10,
- 11, 224, 94, 10, 11, 224, 93, 10, 11, 224, 92, 10, 11, 224, 91, 10, 11,
- 224, 90, 10, 11, 224, 89, 10, 11, 224, 88, 10, 11, 224, 87, 10, 11, 224,
- 86, 10, 11, 224, 85, 10, 11, 224, 84, 10, 11, 224, 83, 10, 11, 224, 82,
- 10, 11, 224, 81, 10, 11, 224, 80, 10, 11, 224, 79, 10, 11, 224, 78, 10,
- 11, 223, 1, 10, 11, 223, 0, 10, 11, 222, 255, 10, 11, 222, 254, 10, 11,
- 222, 253, 10, 11, 222, 252, 10, 11, 222, 251, 10, 11, 222, 250, 10, 11,
- 222, 249, 10, 11, 222, 248, 10, 11, 222, 247, 10, 11, 222, 246, 10, 11,
- 222, 245, 10, 11, 222, 244, 10, 11, 222, 243, 10, 11, 222, 242, 10, 11,
- 222, 241, 10, 11, 222, 240, 10, 11, 222, 239, 10, 11, 222, 238, 10, 11,
- 222, 237, 10, 11, 222, 236, 10, 11, 222, 235, 10, 11, 222, 234, 10, 11,
- 222, 233, 10, 11, 222, 232, 10, 11, 222, 231, 10, 11, 222, 230, 10, 11,
- 222, 229, 10, 11, 222, 228, 10, 11, 222, 227, 10, 11, 222, 226, 10, 11,
- 222, 225, 10, 11, 222, 224, 10, 11, 222, 223, 10, 11, 222, 222, 10, 11,
- 222, 221, 10, 11, 222, 220, 10, 11, 222, 219, 10, 11, 222, 218, 10, 11,
- 222, 217, 10, 11, 222, 216, 10, 11, 222, 215, 10, 11, 222, 214, 10, 11,
- 222, 213, 10, 11, 222, 212, 10, 11, 222, 211, 10, 11, 222, 210, 10, 11,
- 222, 209, 10, 11, 222, 208, 10, 11, 222, 207, 10, 11, 222, 206, 10, 11,
- 222, 205, 10, 11, 222, 204, 10, 11, 218, 97, 10, 11, 218, 96, 10, 11,
- 218, 95, 10, 11, 218, 94, 10, 11, 218, 93, 10, 11, 218, 92, 10, 11, 218,
- 91, 10, 11, 218, 90, 10, 11, 218, 89, 10, 11, 218, 88, 10, 11, 218, 87,
- 10, 11, 218, 86, 10, 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10,
- 11, 218, 82, 10, 11, 218, 81, 10, 11, 218, 80, 10, 11, 218, 79, 10, 11,
- 218, 78, 10, 11, 218, 77, 10, 11, 218, 76, 10, 11, 218, 75, 10, 11, 218,
- 74, 10, 11, 218, 73, 10, 11, 218, 72, 10, 11, 218, 71, 10, 11, 218, 70,
- 10, 11, 218, 69, 10, 11, 218, 68, 10, 11, 218, 67, 10, 11, 218, 66, 10,
- 11, 218, 65, 10, 11, 218, 64, 10, 11, 218, 63, 10, 11, 218, 62, 10, 11,
- 218, 61, 10, 11, 218, 60, 10, 11, 218, 59, 10, 11, 218, 58, 10, 11, 218,
- 57, 10, 11, 218, 56, 10, 11, 218, 55, 10, 11, 218, 54, 10, 11, 215, 245,
- 10, 11, 215, 244, 10, 11, 215, 243, 10, 11, 215, 242, 10, 11, 215, 241,
- 10, 11, 215, 240, 10, 11, 215, 239, 10, 11, 215, 238, 10, 11, 215, 237,
- 10, 11, 215, 236, 10, 11, 215, 235, 10, 11, 215, 234, 10, 11, 215, 233,
- 10, 11, 215, 232, 10, 11, 215, 231, 10, 11, 215, 230, 10, 11, 215, 229,
- 10, 11, 215, 228, 10, 11, 215, 227, 10, 11, 215, 226, 10, 11, 215, 225,
- 10, 11, 215, 224, 10, 11, 215, 223, 10, 11, 215, 222, 10, 11, 215, 221,
- 10, 11, 215, 220, 10, 11, 215, 219, 10, 11, 215, 218, 10, 11, 215, 217,
- 10, 11, 215, 216, 10, 11, 215, 215, 10, 11, 215, 214, 10, 11, 215, 213,
- 10, 11, 215, 212, 10, 11, 215, 211, 10, 11, 215, 210, 10, 11, 215, 209,
- 10, 11, 215, 208, 10, 11, 215, 207, 10, 11, 215, 206, 10, 11, 215, 205,
- 10, 11, 215, 204, 10, 11, 215, 203, 10, 11, 215, 202, 10, 11, 215, 201,
- 10, 11, 215, 200, 10, 11, 215, 199, 10, 11, 215, 78, 10, 11, 215, 77, 10,
- 11, 215, 76, 10, 11, 215, 75, 10, 11, 215, 74, 10, 11, 215, 73, 10, 11,
- 215, 72, 10, 11, 215, 71, 10, 11, 215, 70, 10, 11, 215, 69, 10, 11, 215,
- 68, 10, 11, 215, 67, 10, 11, 215, 66, 10, 11, 215, 65, 10, 11, 215, 64,
- 10, 11, 215, 63, 10, 11, 215, 62, 10, 11, 215, 61, 10, 11, 215, 60, 10,
- 11, 215, 59, 10, 11, 215, 58, 10, 11, 215, 57, 10, 11, 215, 56, 10, 11,
- 215, 55, 10, 11, 215, 54, 10, 11, 215, 53, 10, 11, 215, 52, 10, 11, 215,
- 51, 10, 11, 215, 50, 10, 11, 215, 49, 10, 11, 215, 48, 10, 11, 215, 47,
- 10, 11, 215, 46, 10, 11, 215, 45, 10, 11, 215, 44, 10, 11, 215, 43, 10,
- 11, 215, 42, 10, 11, 215, 41, 10, 11, 215, 40, 10, 11, 215, 39, 10, 11,
- 215, 38, 10, 11, 215, 37, 10, 11, 215, 36, 10, 11, 215, 35, 10, 11, 215,
- 34, 10, 11, 215, 33, 10, 11, 215, 32, 10, 11, 215, 31, 10, 11, 215, 30,
- 10, 11, 215, 29, 10, 11, 215, 28, 10, 11, 215, 27, 10, 11, 215, 26, 10,
- 11, 215, 25, 10, 11, 215, 24, 10, 11, 215, 23, 10, 11, 215, 22, 10, 11,
- 215, 21, 10, 11, 215, 20, 10, 11, 215, 19, 10, 11, 215, 18, 10, 11, 215,
- 17, 10, 11, 215, 16, 10, 11, 215, 15, 10, 11, 215, 14, 10, 11, 215, 13,
- 10, 11, 215, 12, 10, 11, 215, 11, 10, 11, 215, 10, 10, 11, 215, 9, 10,
- 11, 215, 8, 10, 11, 215, 7, 10, 11, 215, 6, 10, 11, 215, 5, 10, 11, 215,
- 4, 10, 11, 215, 3, 10, 11, 215, 2, 10, 11, 214, 81, 10, 11, 214, 80, 10,
- 11, 214, 79, 10, 11, 214, 78, 10, 11, 214, 77, 10, 11, 214, 76, 10, 11,
- 214, 75, 10, 11, 214, 74, 10, 11, 214, 73, 10, 11, 214, 72, 10, 11, 214,
- 71, 10, 11, 214, 70, 10, 11, 214, 69, 10, 11, 214, 68, 10, 11, 214, 67,
- 10, 11, 214, 66, 10, 11, 214, 65, 10, 11, 214, 64, 10, 11, 214, 63, 10,
- 11, 214, 62, 10, 11, 214, 61, 10, 11, 214, 60, 10, 11, 214, 59, 10, 11,
- 214, 58, 10, 11, 214, 57, 10, 11, 214, 56, 10, 11, 214, 55, 10, 11, 214,
- 54, 10, 11, 214, 53, 10, 11, 214, 52, 10, 11, 214, 51, 10, 11, 214, 50,
- 10, 11, 213, 165, 10, 11, 213, 164, 10, 11, 213, 163, 10, 11, 213, 162,
- 10, 11, 213, 161, 10, 11, 213, 160, 10, 11, 213, 159, 10, 11, 213, 158,
- 10, 11, 213, 157, 10, 11, 213, 156, 10, 11, 213, 155, 10, 11, 213, 154,
- 10, 11, 213, 103, 10, 11, 213, 102, 10, 11, 213, 101, 10, 11, 213, 100,
- 10, 11, 213, 99, 10, 11, 213, 98, 10, 11, 213, 97, 10, 11, 213, 96, 10,
- 11, 213, 95, 10, 11, 212, 151, 10, 11, 212, 150, 10, 11, 212, 149, 10,
- 11, 212, 148, 10, 11, 212, 147, 10, 11, 212, 146, 10, 11, 212, 145, 10,
- 11, 212, 144, 10, 11, 212, 143, 10, 11, 212, 142, 10, 11, 212, 141, 10,
- 11, 212, 140, 10, 11, 212, 139, 10, 11, 212, 138, 10, 11, 212, 137, 10,
- 11, 212, 136, 10, 11, 212, 135, 10, 11, 212, 134, 10, 11, 212, 133, 10,
- 11, 212, 132, 10, 11, 212, 131, 10, 11, 212, 130, 10, 11, 212, 129, 10,
- 11, 212, 128, 10, 11, 212, 127, 10, 11, 212, 126, 10, 11, 212, 125, 10,
- 11, 212, 124, 10, 11, 212, 123, 10, 11, 212, 122, 10, 11, 212, 121, 10,
- 11, 212, 120, 10, 11, 212, 119, 10, 11, 212, 118, 10, 11, 212, 117, 10,
- 11, 212, 116, 10, 11, 212, 115, 10, 11, 212, 114, 10, 11, 212, 113, 10,
- 11, 212, 112, 10, 11, 212, 111, 10, 11, 254, 231, 10, 11, 254, 230, 10,
- 11, 254, 229, 10, 11, 254, 228, 10, 11, 254, 227, 10, 11, 254, 226, 10,
- 11, 254, 225, 10, 11, 254, 224, 10, 11, 254, 223, 10, 11, 254, 222, 10,
- 11, 254, 221, 10, 11, 254, 220, 10, 11, 254, 219, 10, 11, 254, 218, 10,
- 11, 254, 217, 10, 11, 254, 216, 10, 11, 254, 215, 10, 11, 254, 214, 10,
- 11, 254, 213, 10, 11, 254, 212, 10, 11, 254, 211, 10, 11, 254, 210, 10,
- 11, 254, 209, 10, 11, 254, 208, 10, 11, 254, 207, 10, 11, 254, 206, 10,
- 11, 254, 205, 10, 11, 254, 204, 10, 11, 254, 203, 10, 11, 254, 202, 10,
- 11, 254, 201, 10, 11, 254, 200, 10, 11, 254, 199, 10, 11, 254, 198, 20,
- 1, 153, 229, 98, 231, 83, 20, 1, 153, 243, 46, 244, 5, 20, 1, 153, 225,
- 131, 231, 84, 225, 189, 20, 1, 153, 225, 131, 231, 84, 225, 190, 20, 1,
- 153, 230, 44, 231, 83, 20, 1, 153, 220, 146, 20, 1, 153, 217, 19, 231,
- 83, 20, 1, 153, 227, 238, 231, 83, 20, 1, 153, 220, 199, 226, 214, 229,
- 0, 20, 1, 153, 225, 131, 226, 214, 229, 1, 225, 189, 20, 1, 153, 225,
- 131, 226, 214, 229, 1, 225, 190, 20, 1, 153, 232, 23, 20, 1, 153, 216,
- 83, 232, 24, 20, 1, 153, 229, 154, 20, 1, 153, 232, 20, 20, 1, 153, 231,
- 239, 20, 1, 153, 230, 119, 20, 1, 153, 221, 45, 20, 1, 153, 228, 96, 20,
- 1, 153, 234, 155, 20, 1, 153, 228, 225, 20, 1, 153, 218, 205, 20, 1, 153,
- 229, 97, 20, 1, 153, 233, 110, 20, 1, 153, 233, 36, 233, 210, 20, 1, 153,
- 228, 103, 231, 91, 20, 1, 153, 232, 27, 20, 1, 153, 226, 119, 20, 1, 153,
- 242, 207, 20, 1, 153, 226, 177, 20, 1, 153, 230, 221, 229, 130, 20, 1,
- 153, 227, 219, 231, 94, 20, 1, 153, 111, 212, 179, 230, 38, 20, 1, 153,
- 242, 208, 20, 1, 153, 228, 103, 228, 104, 20, 1, 153, 220, 56, 20, 1,
- 153, 231, 76, 20, 1, 153, 231, 97, 20, 1, 153, 230, 200, 20, 1, 153, 234,
- 253, 20, 1, 153, 226, 214, 233, 71, 20, 1, 153, 229, 229, 233, 71, 20, 1,
- 153, 226, 34, 20, 1, 153, 232, 21, 20, 1, 153, 229, 38, 20, 1, 153, 225,
- 20, 20, 1, 153, 216, 80, 20, 1, 153, 232, 152, 20, 1, 153, 219, 227, 20,
- 1, 153, 217, 169, 20, 1, 153, 232, 18, 20, 1, 153, 234, 162, 20, 1, 153,
- 229, 225, 20, 1, 153, 233, 222, 20, 1, 153, 230, 201, 20, 1, 153, 220,
- 143, 20, 1, 153, 232, 191, 20, 1, 153, 244, 62, 20, 1, 153, 223, 101, 20,
- 1, 153, 233, 250, 20, 1, 153, 219, 223, 20, 1, 153, 231, 236, 225, 231,
- 20, 1, 153, 220, 192, 20, 1, 153, 228, 102, 20, 1, 153, 220, 177, 228,
- 113, 212, 187, 20, 1, 153, 228, 1, 230, 218, 20, 1, 153, 226, 209, 20, 1,
- 153, 228, 226, 20, 1, 153, 215, 141, 20, 1, 153, 229, 133, 20, 1, 153,
- 232, 17, 20, 1, 153, 229, 12, 20, 1, 153, 231, 182, 20, 1, 153, 228, 12,
- 20, 1, 153, 217, 173, 20, 1, 153, 219, 221, 20, 1, 153, 226, 210, 20, 1,
- 153, 228, 117, 20, 1, 153, 232, 25, 20, 1, 153, 228, 10, 20, 1, 153, 234,
- 221, 20, 1, 153, 228, 120, 20, 1, 153, 214, 227, 20, 1, 153, 232, 156,
- 20, 1, 153, 229, 180, 20, 1, 153, 230, 16, 20, 1, 153, 231, 181, 20, 1,
- 226, 14, 228, 115, 20, 1, 226, 14, 216, 83, 232, 22, 20, 1, 226, 14, 220,
- 111, 20, 1, 226, 14, 221, 49, 216, 82, 20, 1, 226, 14, 232, 193, 228, 99,
- 20, 1, 226, 14, 231, 188, 232, 26, 20, 1, 226, 14, 234, 96, 20, 1, 226,
- 14, 213, 6, 20, 1, 226, 14, 231, 183, 20, 1, 226, 14, 234, 242, 20, 1,
- 226, 14, 226, 83, 20, 1, 226, 14, 213, 77, 233, 71, 20, 1, 226, 14, 233,
- 127, 228, 113, 228, 20, 20, 1, 226, 14, 228, 97, 220, 218, 20, 1, 226,
- 14, 229, 196, 229, 15, 20, 1, 226, 14, 242, 205, 20, 1, 226, 14, 225,
- 181, 20, 1, 226, 14, 216, 83, 228, 111, 20, 1, 226, 14, 220, 223, 229,
- 10, 20, 1, 226, 14, 220, 219, 20, 1, 226, 14, 231, 84, 217, 172, 20, 1,
- 226, 14, 231, 170, 231, 184, 20, 1, 226, 14, 228, 11, 228, 99, 20, 1,
- 226, 14, 234, 151, 20, 1, 226, 14, 242, 206, 20, 1, 226, 14, 234, 147,
- 20, 1, 226, 14, 233, 151, 20, 1, 226, 14, 226, 121, 20, 1, 226, 14, 214,
- 159, 20, 1, 226, 14, 229, 99, 230, 117, 20, 1, 226, 14, 229, 132, 231,
- 166, 20, 1, 226, 14, 213, 181, 20, 1, 226, 14, 222, 182, 20, 1, 226, 14,
- 218, 45, 20, 1, 226, 14, 231, 96, 20, 1, 226, 14, 229, 117, 20, 1, 226,
- 14, 229, 118, 233, 107, 20, 1, 226, 14, 231, 86, 20, 1, 226, 14, 218,
- 253, 20, 1, 226, 14, 231, 174, 20, 1, 226, 14, 230, 203, 20, 1, 226, 14,
- 228, 21, 20, 1, 226, 14, 225, 24, 20, 1, 226, 14, 231, 95, 229, 134, 20,
- 1, 226, 14, 244, 95, 20, 1, 226, 14, 231, 161, 20, 1, 226, 14, 244, 116,
- 20, 1, 226, 14, 234, 159, 20, 1, 226, 14, 232, 43, 229, 4, 20, 1, 226,
- 14, 232, 43, 228, 236, 20, 1, 226, 14, 233, 35, 20, 1, 226, 14, 229, 140,
- 20, 1, 226, 14, 228, 122, 20, 1, 226, 14, 188, 20, 1, 226, 14, 234, 83,
- 20, 1, 226, 14, 229, 87, 20, 1, 131, 229, 98, 232, 24, 20, 1, 131, 227,
- 237, 20, 1, 131, 212, 187, 20, 1, 131, 214, 37, 20, 1, 131, 229, 133, 20,
- 1, 131, 229, 217, 20, 1, 131, 229, 105, 20, 1, 131, 242, 215, 20, 1, 131,
- 231, 178, 20, 1, 131, 243, 53, 20, 1, 131, 228, 3, 230, 239, 231, 98, 20,
- 1, 131, 228, 95, 231, 169, 20, 1, 131, 231, 175, 20, 1, 131, 225, 187,
- 20, 1, 131, 229, 202, 20, 1, 131, 231, 186, 250, 215, 20, 1, 131, 234,
- 149, 20, 1, 131, 242, 216, 20, 1, 131, 234, 156, 20, 1, 131, 212, 204,
- 230, 146, 20, 1, 131, 227, 231, 20, 1, 131, 231, 163, 20, 1, 131, 228,
- 121, 20, 1, 131, 231, 169, 20, 1, 131, 213, 7, 20, 1, 131, 234, 2, 20, 1,
- 131, 235, 14, 20, 1, 131, 221, 44, 20, 1, 131, 229, 211, 20, 1, 131, 218,
- 43, 20, 1, 131, 228, 240, 20, 1, 131, 217, 19, 212, 189, 20, 1, 131, 219,
- 23, 20, 1, 131, 229, 124, 228, 20, 20, 1, 131, 214, 158, 20, 1, 131, 230,
- 19, 20, 1, 131, 232, 43, 234, 158, 20, 1, 131, 228, 104, 20, 1, 131, 229,
- 119, 20, 1, 131, 233, 111, 20, 1, 131, 231, 171, 20, 1, 131, 231, 75, 20,
- 1, 131, 228, 98, 20, 1, 131, 217, 168, 20, 1, 131, 229, 121, 20, 1, 131,
- 243, 204, 20, 1, 131, 229, 216, 20, 1, 131, 228, 123, 20, 1, 131, 228,
- 119, 20, 1, 131, 251, 36, 20, 1, 131, 214, 160, 20, 1, 131, 231, 176, 20,
- 1, 131, 223, 51, 20, 1, 131, 229, 14, 20, 1, 131, 233, 126, 20, 1, 131,
- 217, 17, 20, 1, 131, 228, 105, 229, 87, 20, 1, 131, 229, 6, 20, 1, 131,
- 234, 162, 20, 1, 131, 229, 125, 20, 1, 131, 232, 17, 20, 1, 131, 231,
- 164, 20, 1, 131, 232, 156, 20, 1, 131, 233, 210, 20, 1, 131, 229, 12, 20,
- 1, 131, 229, 87, 20, 1, 131, 213, 172, 20, 1, 131, 229, 122, 20, 1, 131,
- 228, 108, 20, 1, 131, 228, 100, 20, 1, 131, 233, 224, 228, 226, 20, 1,
- 131, 228, 106, 20, 1, 131, 229, 224, 20, 1, 131, 232, 43, 228, 111, 20,
- 1, 131, 213, 91, 20, 1, 131, 229, 223, 20, 1, 131, 220, 145, 20, 1, 131,
- 221, 47, 20, 1, 131, 231, 172, 20, 1, 131, 232, 24, 20, 1, 131, 231, 182,
- 20, 1, 131, 234, 150, 20, 1, 131, 231, 173, 20, 1, 131, 234, 154, 20, 1,
- 131, 231, 186, 225, 235, 20, 1, 131, 212, 171, 20, 1, 131, 229, 2, 20, 1,
- 131, 231, 33, 20, 1, 131, 230, 170, 20, 1, 131, 220, 195, 20, 1, 131,
- 234, 172, 233, 94, 20, 1, 131, 234, 172, 244, 128, 20, 1, 131, 229, 152,
- 20, 1, 131, 230, 16, 20, 1, 131, 232, 229, 20, 1, 131, 225, 197, 20, 1,
- 131, 226, 74, 20, 1, 131, 217, 183, 20, 1, 103, 231, 162, 20, 1, 103,
- 214, 35, 20, 1, 103, 229, 0, 20, 1, 103, 231, 83, 20, 1, 103, 228, 254,
- 20, 1, 103, 233, 7, 20, 1, 103, 229, 3, 20, 1, 103, 228, 118, 20, 1, 103,
- 229, 139, 20, 1, 103, 228, 20, 20, 1, 103, 213, 182, 20, 1, 103, 229, 95,
- 20, 1, 103, 220, 241, 20, 1, 103, 229, 106, 20, 1, 103, 234, 157, 20, 1,
- 103, 217, 170, 20, 1, 103, 220, 221, 20, 1, 103, 229, 11, 20, 1, 103,
- 218, 253, 20, 1, 103, 234, 162, 20, 1, 103, 213, 79, 20, 1, 103, 233,
- 225, 20, 1, 103, 222, 150, 20, 1, 103, 231, 88, 20, 1, 103, 229, 215, 20,
- 1, 103, 231, 251, 20, 1, 103, 231, 94, 20, 1, 103, 221, 46, 20, 1, 103,
- 213, 30, 20, 1, 103, 229, 5, 20, 1, 103, 234, 153, 231, 165, 20, 1, 103,
- 229, 102, 20, 1, 103, 216, 82, 20, 1, 103, 242, 224, 20, 1, 103, 229, 92,
- 20, 1, 103, 244, 96, 20, 1, 103, 229, 219, 20, 1, 103, 231, 67, 20, 1,
- 103, 233, 31, 20, 1, 103, 229, 201, 20, 1, 103, 230, 217, 20, 1, 103,
- 231, 71, 20, 1, 103, 225, 6, 20, 1, 103, 231, 69, 20, 1, 103, 231, 85,
- 20, 1, 103, 232, 142, 20, 1, 103, 228, 110, 20, 1, 103, 231, 185, 20, 1,
- 103, 233, 202, 20, 1, 103, 228, 12, 20, 1, 103, 217, 173, 20, 1, 103,
- 219, 221, 20, 1, 103, 212, 171, 20, 1, 103, 234, 154, 20, 1, 103, 224,
- 60, 20, 1, 103, 217, 218, 20, 1, 103, 229, 103, 20, 1, 103, 231, 90, 20,
- 1, 103, 228, 109, 20, 1, 103, 234, 152, 20, 1, 103, 225, 191, 20, 1, 103,
- 226, 28, 20, 1, 103, 227, 246, 20, 1, 103, 233, 35, 20, 1, 103, 229, 140,
- 20, 1, 103, 231, 87, 20, 1, 103, 229, 114, 20, 1, 103, 212, 184, 20, 1,
- 103, 226, 149, 20, 1, 103, 212, 183, 20, 1, 103, 229, 224, 20, 1, 103,
- 228, 99, 20, 1, 103, 219, 25, 20, 1, 103, 233, 229, 20, 1, 103, 229, 129,
- 20, 1, 103, 229, 100, 20, 1, 103, 216, 66, 20, 1, 103, 231, 98, 20, 1,
- 103, 233, 219, 20, 1, 103, 228, 107, 20, 1, 103, 217, 171, 20, 1, 103,
- 232, 19, 20, 1, 103, 229, 138, 20, 1, 103, 233, 30, 20, 1, 103, 229, 120,
- 20, 1, 103, 228, 112, 20, 1, 103, 228, 240, 20, 1, 103, 242, 209, 20, 1,
- 103, 233, 238, 20, 1, 103, 223, 234, 227, 75, 20, 1, 103, 218, 35, 20, 1,
- 103, 216, 223, 20, 1, 103, 228, 10, 20, 1, 103, 223, 136, 20, 1, 103,
- 233, 73, 20, 1, 103, 231, 144, 20, 1, 103, 183, 20, 1, 103, 218, 205, 20,
- 1, 103, 230, 172, 20, 1, 103, 220, 207, 20, 1, 103, 220, 217, 20, 1, 103,
- 233, 177, 20, 1, 103, 228, 92, 20, 1, 103, 220, 150, 20, 1, 103, 228,
- 101, 20, 1, 103, 226, 86, 20, 1, 103, 229, 64, 20, 1, 103, 220, 176, 20,
- 1, 103, 225, 19, 20, 1, 103, 230, 117, 20, 1, 103, 232, 174, 20, 1, 103,
- 223, 234, 230, 166, 20, 1, 103, 217, 71, 20, 1, 103, 228, 93, 20, 1, 103,
- 231, 186, 198, 20, 1, 103, 222, 148, 20, 1, 103, 244, 163, 20, 1, 80,
- 229, 223, 20, 1, 80, 216, 229, 20, 1, 80, 231, 175, 20, 1, 80, 233, 111,
- 20, 1, 80, 214, 109, 20, 1, 80, 232, 178, 20, 1, 80, 226, 213, 20, 1, 80,
- 219, 230, 20, 1, 80, 224, 37, 20, 1, 80, 228, 114, 20, 1, 80, 229, 194,
- 20, 1, 80, 225, 33, 20, 1, 80, 218, 13, 20, 1, 80, 229, 108, 20, 1, 80,
- 233, 254, 20, 1, 80, 213, 175, 20, 1, 80, 222, 89, 20, 1, 80, 229, 130,
- 20, 1, 80, 226, 210, 20, 1, 80, 216, 230, 20, 1, 80, 233, 223, 20, 1, 80,
- 232, 192, 20, 1, 80, 228, 117, 20, 1, 80, 229, 84, 20, 1, 80, 232, 25,
- 20, 1, 80, 229, 101, 20, 1, 80, 229, 83, 20, 1, 80, 228, 116, 20, 1, 80,
- 223, 134, 20, 1, 80, 229, 2, 20, 1, 80, 226, 85, 20, 1, 80, 222, 200, 20,
- 1, 80, 229, 115, 20, 1, 80, 231, 77, 20, 1, 80, 242, 203, 20, 1, 80, 229,
- 104, 20, 1, 80, 229, 13, 20, 1, 80, 231, 235, 20, 1, 80, 232, 176, 20, 1,
- 80, 229, 135, 20, 1, 80, 229, 207, 20, 1, 80, 218, 34, 228, 99, 20, 1,
- 80, 221, 48, 20, 1, 80, 225, 29, 20, 1, 80, 229, 227, 219, 235, 20, 1,
- 80, 229, 123, 228, 20, 20, 1, 80, 212, 251, 20, 1, 80, 242, 204, 20, 1,
- 80, 216, 81, 20, 1, 80, 213, 10, 20, 1, 80, 225, 150, 20, 1, 80, 216, 71,
- 20, 1, 80, 234, 160, 20, 1, 80, 219, 24, 20, 1, 80, 217, 172, 20, 1, 80,
- 214, 161, 20, 1, 80, 213, 247, 20, 1, 80, 233, 154, 20, 1, 80, 225, 35,
- 20, 1, 80, 218, 44, 20, 1, 80, 242, 223, 20, 1, 80, 229, 144, 20, 1, 80,
- 220, 220, 20, 1, 80, 231, 72, 20, 1, 80, 231, 179, 20, 1, 80, 227, 235,
- 20, 1, 80, 228, 223, 20, 1, 80, 243, 49, 20, 1, 80, 216, 72, 20, 1, 80,
- 233, 232, 20, 1, 80, 213, 57, 20, 1, 80, 228, 11, 249, 209, 20, 1, 80,
- 212, 241, 20, 1, 80, 231, 89, 20, 1, 80, 229, 212, 20, 1, 80, 225, 232,
- 20, 1, 80, 212, 188, 20, 1, 80, 233, 32, 20, 1, 80, 243, 204, 20, 1, 80,
- 243, 48, 20, 1, 80, 229, 94, 20, 1, 80, 234, 162, 20, 1, 80, 232, 28, 20,
- 1, 80, 229, 107, 20, 1, 80, 242, 210, 20, 1, 80, 244, 164, 20, 1, 80,
- 228, 94, 20, 1, 80, 226, 29, 20, 1, 80, 213, 8, 20, 1, 80, 229, 131, 20,
- 1, 80, 228, 11, 251, 200, 20, 1, 80, 227, 215, 20, 1, 80, 225, 127, 20,
- 1, 80, 231, 33, 20, 1, 80, 243, 202, 20, 1, 80, 230, 38, 20, 1, 80, 230,
- 170, 20, 1, 80, 242, 209, 20, 1, 80, 243, 206, 72, 20, 1, 80, 230, 118,
- 20, 1, 80, 225, 32, 20, 1, 80, 229, 96, 20, 1, 80, 233, 210, 20, 1, 80,
- 225, 229, 20, 1, 80, 228, 102, 20, 1, 80, 213, 9, 20, 1, 80, 229, 116,
- 20, 1, 80, 226, 214, 226, 62, 20, 1, 80, 243, 206, 250, 203, 20, 1, 80,
- 244, 6, 20, 1, 80, 229, 7, 20, 1, 80, 61, 20, 1, 80, 216, 223, 20, 1, 80,
- 75, 20, 1, 80, 72, 20, 1, 80, 233, 109, 20, 1, 80, 226, 214, 225, 157,
- 20, 1, 80, 218, 49, 20, 1, 80, 218, 2, 20, 1, 80, 229, 227, 230, 106,
- 240, 221, 20, 1, 80, 220, 195, 20, 1, 80, 213, 5, 20, 1, 80, 229, 77, 20,
- 1, 80, 212, 193, 20, 1, 80, 212, 218, 218, 185, 20, 1, 80, 212, 218, 249,
- 86, 20, 1, 80, 212, 178, 20, 1, 80, 212, 186, 20, 1, 80, 234, 148, 20, 1,
- 80, 226, 27, 20, 1, 80, 229, 8, 245, 65, 20, 1, 80, 225, 30, 20, 1, 80,
- 213, 180, 20, 1, 80, 244, 116, 20, 1, 80, 214, 227, 20, 1, 80, 232, 156,
- 20, 1, 80, 231, 42, 20, 1, 80, 223, 204, 20, 1, 80, 224, 61, 20, 1, 80,
- 229, 76, 20, 1, 80, 229, 159, 20, 1, 80, 220, 187, 20, 1, 80, 220, 176,
- 20, 1, 80, 243, 206, 223, 236, 20, 1, 80, 205, 20, 1, 80, 225, 240, 20,
- 1, 80, 232, 174, 20, 1, 80, 234, 37, 20, 1, 80, 231, 122, 20, 1, 80, 188,
- 20, 1, 80, 231, 232, 20, 1, 80, 217, 174, 20, 1, 80, 234, 101, 20, 1, 80,
- 230, 220, 20, 1, 80, 217, 200, 20, 1, 80, 244, 137, 20, 1, 80, 242, 199,
- 20, 1, 226, 13, 181, 20, 1, 226, 13, 69, 20, 1, 226, 13, 233, 238, 20, 1,
- 226, 13, 245, 165, 20, 1, 226, 13, 224, 1, 20, 1, 226, 13, 218, 35, 20,
- 1, 226, 13, 228, 10, 20, 1, 226, 13, 233, 157, 20, 1, 226, 13, 223, 136,
- 20, 1, 226, 13, 223, 182, 20, 1, 226, 13, 231, 144, 20, 1, 226, 13, 218,
- 49, 20, 1, 226, 13, 229, 226, 20, 1, 226, 13, 229, 14, 20, 1, 226, 13,
- 183, 20, 1, 226, 13, 218, 205, 20, 1, 226, 13, 220, 207, 20, 1, 226, 13,
- 220, 117, 20, 1, 226, 13, 221, 44, 20, 1, 226, 13, 233, 177, 20, 1, 226,
- 13, 234, 162, 20, 1, 226, 13, 228, 64, 20, 1, 226, 13, 228, 92, 20, 1,
- 226, 13, 228, 241, 20, 1, 226, 13, 212, 217, 20, 1, 226, 13, 220, 150,
- 20, 1, 226, 13, 186, 20, 1, 226, 13, 228, 120, 20, 1, 226, 13, 226, 27,
- 20, 1, 226, 13, 228, 101, 20, 1, 226, 13, 213, 180, 20, 1, 226, 13, 226,
- 86, 20, 1, 226, 13, 223, 51, 20, 1, 226, 13, 229, 64, 20, 1, 226, 13,
- 223, 204, 20, 1, 226, 13, 234, 171, 20, 1, 226, 13, 229, 93, 20, 1, 226,
- 13, 229, 141, 20, 1, 226, 13, 220, 187, 20, 1, 226, 13, 225, 33, 20, 1,
- 226, 13, 244, 6, 20, 1, 226, 13, 214, 49, 20, 1, 226, 13, 233, 13, 20, 1,
- 226, 13, 232, 174, 20, 1, 226, 13, 234, 37, 20, 1, 226, 13, 231, 177, 20,
- 1, 226, 13, 223, 233, 20, 1, 226, 13, 188, 20, 1, 226, 13, 230, 231, 20,
- 1, 226, 13, 231, 185, 20, 1, 226, 13, 217, 183, 20, 1, 226, 13, 234, 4,
- 20, 1, 226, 13, 222, 166, 20, 1, 226, 13, 214, 98, 56, 1, 253, 193, 74,
- 142, 1, 253, 193, 213, 38, 47, 27, 16, 225, 39, 47, 27, 16, 248, 103, 47,
- 27, 16, 226, 50, 47, 27, 16, 226, 237, 245, 135, 47, 27, 16, 226, 237,
- 247, 153, 47, 27, 16, 214, 248, 245, 135, 47, 27, 16, 214, 248, 247, 153,
- 47, 27, 16, 234, 202, 47, 27, 16, 218, 115, 47, 27, 16, 226, 137, 47, 27,
- 16, 212, 208, 47, 27, 16, 212, 209, 247, 153, 47, 27, 16, 233, 243, 47,
- 27, 16, 253, 236, 245, 135, 47, 27, 16, 244, 249, 245, 135, 47, 27, 16,
- 217, 211, 47, 27, 16, 234, 167, 47, 27, 16, 253, 227, 47, 27, 16, 253,
- 228, 247, 153, 47, 27, 16, 218, 121, 47, 27, 16, 217, 112, 47, 27, 16,
- 227, 72, 253, 191, 47, 27, 16, 242, 135, 253, 191, 47, 27, 16, 225, 38,
- 47, 27, 16, 250, 85, 47, 27, 16, 214, 238, 47, 27, 16, 235, 162, 253,
- 191, 47, 27, 16, 234, 169, 253, 191, 47, 27, 16, 234, 168, 253, 191, 47,
- 27, 16, 222, 131, 47, 27, 16, 226, 128, 47, 27, 16, 219, 86, 253, 230,
- 47, 27, 16, 226, 236, 253, 191, 47, 27, 16, 214, 247, 253, 191, 47, 27,
- 16, 253, 231, 253, 191, 47, 27, 16, 253, 225, 47, 27, 16, 234, 46, 47,
- 27, 16, 223, 199, 47, 27, 16, 225, 238, 253, 191, 47, 27, 16, 217, 36,
- 47, 27, 16, 254, 30, 47, 27, 16, 222, 78, 47, 27, 16, 218, 124, 253, 191,
- 47, 27, 16, 218, 124, 231, 107, 219, 84, 47, 27, 16, 226, 231, 253, 191,
- 47, 27, 16, 217, 143, 47, 27, 16, 233, 51, 47, 27, 16, 245, 252, 47, 27,
- 16, 216, 185, 47, 27, 16, 217, 185, 47, 27, 16, 233, 246, 47, 27, 16,
- 253, 236, 244, 249, 229, 177, 47, 27, 16, 243, 207, 253, 191, 47, 27, 16,
- 236, 7, 47, 27, 16, 216, 157, 253, 191, 47, 27, 16, 234, 205, 216, 156,
- 47, 27, 16, 226, 75, 47, 27, 16, 225, 43, 47, 27, 16, 234, 20, 47, 27,
- 16, 250, 17, 253, 191, 47, 27, 16, 224, 38, 47, 27, 16, 226, 140, 253,
- 191, 47, 27, 16, 226, 138, 253, 191, 47, 27, 16, 240, 102, 47, 27, 16,
- 230, 23, 47, 27, 16, 226, 32, 47, 27, 16, 234, 21, 254, 58, 47, 27, 16,
- 216, 157, 254, 58, 47, 27, 16, 219, 63, 47, 27, 16, 242, 101, 47, 27, 16,
- 235, 162, 229, 177, 47, 27, 16, 227, 72, 229, 177, 47, 27, 16, 226, 237,
- 229, 177, 47, 27, 16, 226, 31, 47, 27, 16, 234, 7, 47, 27, 16, 226, 30,
- 47, 27, 16, 233, 245, 47, 27, 16, 226, 76, 229, 177, 47, 27, 16, 234,
- 168, 229, 178, 254, 7, 47, 27, 16, 234, 169, 229, 178, 254, 7, 47, 27,
- 16, 212, 206, 47, 27, 16, 253, 228, 229, 177, 47, 27, 16, 253, 229, 218,
- 122, 229, 177, 47, 27, 16, 212, 207, 47, 27, 16, 233, 244, 47, 27, 16,
- 245, 130, 47, 27, 16, 250, 86, 47, 27, 16, 231, 11, 235, 161, 47, 27, 16,
- 214, 248, 229, 177, 47, 27, 16, 225, 238, 229, 177, 47, 27, 16, 225, 44,
- 229, 177, 47, 27, 16, 227, 69, 47, 27, 16, 253, 251, 47, 27, 16, 232,
- 118, 47, 27, 16, 226, 138, 229, 177, 47, 27, 16, 226, 140, 229, 177, 47,
- 27, 16, 245, 26, 226, 139, 47, 27, 16, 233, 175, 47, 27, 16, 253, 252,
- 47, 27, 16, 216, 157, 229, 177, 47, 27, 16, 245, 133, 47, 27, 16, 218,
- 124, 229, 177, 47, 27, 16, 218, 116, 47, 27, 16, 250, 17, 229, 177, 47,
- 27, 16, 245, 69, 47, 27, 16, 222, 79, 229, 177, 47, 27, 16, 213, 139,
- 234, 46, 47, 27, 16, 216, 154, 47, 27, 16, 225, 45, 47, 27, 16, 216, 158,
- 47, 27, 16, 216, 155, 47, 27, 16, 225, 42, 47, 27, 16, 216, 153, 47, 27,
- 16, 225, 41, 47, 27, 16, 242, 134, 47, 27, 16, 253, 185, 47, 27, 16, 245,
- 26, 253, 185, 47, 27, 16, 226, 231, 229, 177, 47, 27, 16, 217, 142, 245,
- 34, 47, 27, 16, 217, 142, 244, 248, 47, 27, 16, 217, 144, 253, 232, 47,
- 27, 16, 217, 137, 234, 251, 253, 224, 47, 27, 16, 234, 204, 47, 27, 16,
- 245, 97, 47, 27, 16, 213, 2, 234, 201, 47, 27, 16, 213, 2, 254, 7, 47,
- 27, 16, 219, 85, 47, 27, 16, 234, 47, 254, 7, 47, 27, 16, 247, 154, 253,
- 191, 47, 27, 16, 233, 247, 253, 191, 47, 27, 16, 233, 247, 254, 58, 47,
- 27, 16, 233, 247, 229, 177, 47, 27, 16, 253, 231, 229, 177, 47, 27, 16,
- 253, 233, 47, 27, 16, 247, 153, 47, 27, 16, 216, 168, 47, 27, 16, 217,
- 177, 47, 27, 16, 234, 11, 47, 27, 16, 233, 56, 245, 92, 250, 8, 47, 27,
- 16, 233, 56, 245, 253, 250, 9, 47, 27, 16, 233, 56, 216, 170, 250, 9, 47,
- 27, 16, 233, 56, 217, 187, 250, 9, 47, 27, 16, 233, 56, 236, 2, 250, 8,
- 47, 27, 16, 242, 135, 229, 178, 254, 7, 47, 27, 16, 242, 135, 226, 129,
- 253, 181, 47, 27, 16, 242, 135, 226, 129, 247, 236, 47, 27, 16, 247, 177,
- 47, 27, 16, 247, 178, 226, 129, 253, 182, 234, 201, 47, 27, 16, 247, 178,
- 226, 129, 253, 182, 254, 7, 47, 27, 16, 247, 178, 226, 129, 247, 236, 47,
- 27, 16, 216, 174, 47, 27, 16, 253, 186, 47, 27, 16, 236, 9, 47, 27, 16,
- 247, 198, 47, 27, 16, 254, 116, 225, 134, 253, 187, 47, 27, 16, 254, 116,
- 253, 184, 47, 27, 16, 254, 116, 253, 187, 47, 27, 16, 254, 116, 231, 101,
- 47, 27, 16, 254, 116, 231, 110, 47, 27, 16, 254, 116, 242, 136, 47, 27,
- 16, 254, 116, 242, 133, 47, 27, 16, 254, 116, 225, 134, 242, 136, 47, 27,
- 16, 231, 214, 225, 50, 240, 100, 47, 27, 16, 231, 214, 254, 60, 225, 50,
- 240, 100, 47, 27, 16, 231, 214, 247, 235, 240, 100, 47, 27, 16, 231, 214,
- 254, 60, 247, 235, 240, 100, 47, 27, 16, 231, 214, 216, 163, 240, 100,
- 47, 27, 16, 231, 214, 216, 175, 47, 27, 16, 231, 214, 217, 181, 240, 100,
- 47, 27, 16, 231, 214, 217, 181, 233, 59, 240, 100, 47, 27, 16, 231, 214,
- 233, 59, 240, 100, 47, 27, 16, 231, 214, 225, 171, 240, 100, 47, 27, 16,
- 235, 167, 217, 204, 240, 101, 47, 27, 16, 253, 229, 217, 204, 240, 101,
- 47, 27, 16, 244, 140, 217, 178, 47, 27, 16, 244, 140, 230, 213, 47, 27,
- 16, 244, 140, 247, 182, 47, 27, 16, 231, 214, 214, 242, 240, 100, 47, 27,
- 16, 231, 214, 225, 49, 240, 100, 47, 27, 16, 231, 214, 225, 171, 217,
- 181, 240, 100, 47, 27, 16, 242, 131, 230, 98, 253, 232, 47, 27, 16, 242,
- 131, 230, 98, 247, 152, 47, 27, 16, 245, 106, 234, 251, 243, 207, 214,
- 105, 47, 27, 16, 236, 8, 47, 27, 16, 236, 6, 47, 27, 16, 243, 207, 253,
- 192, 247, 234, 240, 99, 47, 27, 16, 243, 207, 247, 196, 193, 47, 27, 16,
- 243, 207, 247, 196, 230, 23, 47, 27, 16, 243, 207, 230, 18, 240, 100, 47,
- 27, 16, 243, 207, 247, 196, 247, 211, 47, 27, 16, 243, 207, 220, 30, 247,
- 195, 247, 211, 47, 27, 16, 243, 207, 247, 196, 234, 188, 47, 27, 16, 243,
- 207, 247, 196, 212, 16, 47, 27, 16, 243, 207, 247, 196, 229, 65, 234,
- 201, 47, 27, 16, 243, 207, 247, 196, 229, 65, 254, 7, 47, 27, 16, 243,
- 207, 231, 254, 250, 10, 247, 182, 47, 27, 16, 243, 207, 231, 254, 250,
- 10, 230, 213, 47, 27, 16, 244, 91, 220, 30, 250, 10, 214, 241, 47, 27,
- 16, 243, 207, 220, 30, 250, 10, 218, 125, 47, 27, 16, 243, 207, 229, 179,
- 47, 27, 16, 250, 11, 211, 248, 47, 27, 16, 250, 11, 234, 45, 47, 27, 16,
- 250, 11, 219, 197, 47, 27, 16, 243, 207, 240, 146, 213, 1, 217, 182, 47,
- 27, 16, 243, 207, 245, 107, 253, 253, 47, 27, 16, 213, 1, 216, 164, 47,
- 27, 16, 247, 190, 216, 164, 47, 27, 16, 247, 190, 217, 182, 47, 27, 16,
- 247, 190, 253, 234, 245, 253, 247, 93, 47, 27, 16, 247, 190, 230, 211,
- 217, 186, 247, 93, 47, 27, 16, 247, 190, 247, 174, 245, 3, 247, 93, 47,
- 27, 16, 247, 190, 216, 172, 227, 77, 247, 93, 47, 27, 16, 213, 1, 253,
- 234, 245, 253, 247, 93, 47, 27, 16, 213, 1, 230, 211, 217, 186, 247, 93,
- 47, 27, 16, 213, 1, 247, 174, 245, 3, 247, 93, 47, 27, 16, 213, 1, 216,
- 172, 227, 77, 247, 93, 47, 27, 16, 243, 25, 247, 189, 47, 27, 16, 243,
- 25, 213, 0, 47, 27, 16, 247, 197, 253, 234, 231, 12, 47, 27, 16, 247,
- 197, 253, 234, 231, 137, 47, 27, 16, 247, 197, 247, 153, 47, 27, 16, 247,
- 197, 217, 135, 47, 27, 16, 220, 89, 217, 135, 47, 27, 16, 220, 89, 217,
- 136, 247, 138, 47, 27, 16, 220, 89, 217, 136, 216, 165, 47, 27, 16, 220,
- 89, 217, 136, 217, 175, 47, 27, 16, 220, 89, 253, 159, 47, 27, 16, 220,
- 89, 253, 160, 247, 138, 47, 27, 16, 220, 89, 253, 160, 216, 165, 47, 27,
- 16, 220, 89, 253, 160, 217, 175, 47, 27, 16, 247, 175, 243, 6, 47, 27,
- 16, 247, 181, 227, 2, 47, 27, 16, 219, 77, 47, 27, 16, 253, 178, 193, 47,
- 27, 16, 253, 178, 214, 105, 47, 27, 16, 253, 178, 243, 110, 47, 27, 16,
- 253, 178, 247, 211, 47, 27, 16, 253, 178, 234, 188, 47, 27, 16, 253, 178,
- 212, 16, 47, 27, 16, 253, 178, 229, 64, 47, 27, 16, 234, 168, 229, 178,
- 231, 109, 47, 27, 16, 234, 169, 229, 178, 231, 109, 47, 27, 16, 234, 168,
- 229, 178, 234, 201, 47, 27, 16, 234, 169, 229, 178, 234, 201, 47, 27, 16,
- 234, 47, 234, 201, 47, 27, 16, 242, 135, 229, 178, 234, 201, 27, 16, 220,
- 81, 252, 55, 27, 16, 51, 252, 55, 27, 16, 40, 252, 55, 27, 16, 223, 203,
- 40, 252, 55, 27, 16, 248, 100, 252, 55, 27, 16, 220, 175, 252, 55, 27,
- 16, 42, 223, 228, 52, 27, 16, 46, 223, 228, 52, 27, 16, 223, 228, 247,
- 72, 27, 16, 248, 141, 222, 82, 27, 16, 248, 165, 250, 181, 27, 16, 222,
- 82, 27, 16, 249, 171, 27, 16, 223, 226, 244, 80, 27, 16, 223, 226, 244,
- 79, 27, 16, 223, 226, 244, 78, 27, 16, 244, 100, 27, 16, 244, 101, 55,
- 27, 16, 251, 76, 77, 27, 16, 250, 210, 27, 16, 251, 86, 27, 16, 125, 27,
- 16, 227, 59, 219, 102, 27, 16, 216, 23, 219, 102, 27, 16, 217, 96, 219,
- 102, 27, 16, 243, 236, 219, 102, 27, 16, 244, 49, 219, 102, 27, 16, 220,
- 52, 219, 102, 27, 16, 220, 50, 243, 220, 27, 16, 243, 234, 243, 220, 27,
- 16, 243, 178, 249, 207, 27, 16, 243, 178, 249, 208, 227, 4, 254, 51, 27,
- 16, 243, 178, 249, 208, 227, 4, 252, 42, 27, 16, 250, 253, 249, 207, 27,
- 16, 244, 231, 249, 207, 27, 16, 244, 231, 249, 208, 227, 4, 254, 51, 27,
- 16, 244, 231, 249, 208, 227, 4, 252, 42, 27, 16, 246, 38, 249, 206, 27,
- 16, 246, 38, 249, 205, 27, 16, 230, 155, 231, 155, 223, 213, 27, 16, 51,
- 220, 254, 27, 16, 51, 244, 34, 27, 16, 244, 35, 215, 134, 27, 16, 244,
- 35, 246, 60, 27, 16, 230, 9, 215, 134, 27, 16, 230, 9, 246, 60, 27, 16,
- 220, 255, 215, 134, 27, 16, 220, 255, 246, 60, 27, 16, 224, 167, 160,
- 220, 254, 27, 16, 224, 167, 160, 244, 34, 27, 16, 249, 155, 217, 40, 27,
- 16, 249, 27, 217, 40, 27, 16, 227, 4, 254, 51, 27, 16, 227, 4, 252, 42,
- 27, 16, 224, 149, 254, 51, 27, 16, 224, 149, 252, 42, 27, 16, 230, 158,
- 223, 213, 27, 16, 213, 236, 223, 213, 27, 16, 151, 223, 213, 27, 16, 224,
- 167, 223, 213, 27, 16, 245, 146, 223, 213, 27, 16, 220, 46, 223, 213, 27,
- 16, 217, 113, 223, 213, 27, 16, 220, 38, 223, 213, 27, 16, 122, 240, 201,
- 216, 36, 223, 213, 27, 16, 213, 167, 228, 154, 27, 16, 94, 228, 154, 27,
- 16, 249, 229, 213, 167, 228, 154, 27, 16, 41, 228, 155, 213, 238, 27, 16,
- 41, 228, 155, 251, 144, 27, 16, 216, 184, 228, 155, 114, 213, 238, 27,
- 16, 216, 184, 228, 155, 114, 251, 144, 27, 16, 216, 184, 228, 155, 42,
- 213, 238, 27, 16, 216, 184, 228, 155, 42, 251, 144, 27, 16, 216, 184,
- 228, 155, 46, 213, 238, 27, 16, 216, 184, 228, 155, 46, 251, 144, 27, 16,
- 216, 184, 228, 155, 119, 213, 238, 27, 16, 216, 184, 228, 155, 119, 251,
- 144, 27, 16, 216, 184, 228, 155, 114, 46, 213, 238, 27, 16, 216, 184,
- 228, 155, 114, 46, 251, 144, 27, 16, 230, 199, 228, 155, 213, 238, 27,
- 16, 230, 199, 228, 155, 251, 144, 27, 16, 216, 181, 228, 155, 119, 213,
- 238, 27, 16, 216, 181, 228, 155, 119, 251, 144, 27, 16, 226, 132, 228,
- 154, 27, 16, 214, 113, 228, 154, 27, 16, 228, 155, 251, 144, 27, 16, 228,
- 59, 228, 154, 27, 16, 249, 178, 228, 155, 213, 238, 27, 16, 249, 178,
- 228, 155, 251, 144, 27, 16, 251, 74, 27, 16, 213, 236, 228, 158, 27, 16,
- 151, 228, 158, 27, 16, 224, 167, 228, 158, 27, 16, 245, 146, 228, 158,
- 27, 16, 220, 46, 228, 158, 27, 16, 217, 113, 228, 158, 27, 16, 220, 38,
- 228, 158, 27, 16, 122, 240, 201, 216, 36, 228, 158, 27, 16, 37, 219, 79,
- 27, 16, 37, 219, 172, 219, 79, 27, 16, 37, 216, 192, 27, 16, 37, 216,
- 191, 27, 16, 37, 216, 190, 27, 16, 244, 70, 216, 192, 27, 16, 244, 70,
- 216, 191, 27, 16, 244, 70, 216, 190, 27, 16, 37, 253, 105, 247, 74, 27,
- 16, 37, 244, 41, 27, 16, 37, 244, 40, 27, 16, 37, 244, 39, 27, 16, 37,
- 244, 38, 27, 16, 37, 244, 37, 27, 16, 251, 234, 251, 250, 27, 16, 245,
- 101, 251, 250, 27, 16, 251, 234, 217, 65, 27, 16, 245, 101, 217, 65, 27,
- 16, 251, 234, 220, 8, 27, 16, 245, 101, 220, 8, 27, 16, 251, 234, 225,
- 247, 27, 16, 245, 101, 225, 247, 27, 16, 37, 254, 174, 27, 16, 37, 219,
- 104, 27, 16, 37, 217, 191, 27, 16, 37, 219, 105, 27, 16, 37, 231, 225,
- 27, 16, 37, 231, 224, 27, 16, 37, 254, 173, 27, 16, 37, 232, 167, 27, 16,
- 253, 169, 215, 134, 27, 16, 253, 169, 246, 60, 27, 16, 37, 247, 89, 27,
- 16, 37, 223, 128, 27, 16, 37, 244, 27, 27, 16, 37, 220, 4, 27, 16, 37,
- 251, 215, 27, 16, 37, 51, 216, 232, 27, 16, 37, 216, 169, 216, 232, 27,
- 16, 223, 132, 27, 16, 219, 20, 27, 16, 212, 152, 27, 16, 225, 239, 27,
- 16, 231, 92, 27, 16, 243, 242, 27, 16, 249, 78, 27, 16, 248, 29, 27, 16,
- 242, 126, 228, 159, 220, 23, 27, 16, 242, 126, 228, 159, 228, 186, 220,
- 23, 27, 16, 216, 213, 27, 16, 216, 59, 27, 16, 235, 191, 216, 59, 27, 16,
- 216, 60, 220, 23, 27, 16, 216, 60, 215, 134, 27, 16, 227, 15, 219, 44,
- 27, 16, 227, 15, 219, 41, 27, 16, 227, 15, 219, 40, 27, 16, 227, 15, 219,
- 39, 27, 16, 227, 15, 219, 38, 27, 16, 227, 15, 219, 37, 27, 16, 227, 15,
- 219, 36, 27, 16, 227, 15, 219, 35, 27, 16, 227, 15, 219, 34, 27, 16, 227,
- 15, 219, 43, 27, 16, 227, 15, 219, 42, 27, 16, 241, 229, 27, 16, 229,
- 186, 27, 16, 245, 101, 65, 219, 73, 27, 16, 248, 22, 220, 23, 27, 16, 37,
- 119, 251, 95, 27, 16, 37, 114, 251, 95, 27, 16, 37, 241, 239, 27, 16, 37,
- 219, 251, 225, 175, 27, 16, 226, 91, 77, 27, 16, 226, 91, 114, 77, 27,
- 16, 151, 226, 91, 77, 27, 16, 242, 158, 215, 134, 27, 16, 242, 158, 246,
- 60, 27, 16, 2, 244, 69, 27, 16, 248, 125, 27, 16, 248, 126, 254, 63, 27,
- 16, 231, 197, 27, 16, 232, 182, 27, 16, 251, 71, 27, 16, 221, 74, 213,
- 238, 27, 16, 221, 74, 251, 144, 27, 16, 230, 253, 27, 16, 230, 254, 251,
- 144, 27, 16, 221, 68, 213, 238, 27, 16, 221, 68, 251, 144, 27, 16, 243,
- 192, 213, 238, 27, 16, 243, 192, 251, 144, 27, 16, 232, 183, 226, 55,
- 223, 213, 27, 16, 232, 183, 236, 0, 223, 213, 27, 16, 251, 72, 223, 213,
- 27, 16, 221, 74, 223, 213, 27, 16, 230, 254, 223, 213, 27, 16, 221, 68,
- 223, 213, 27, 16, 217, 202, 226, 53, 249, 48, 225, 58, 226, 54, 27, 16,
- 217, 202, 226, 53, 249, 48, 225, 58, 235, 255, 27, 16, 217, 202, 226, 53,
- 249, 48, 225, 58, 226, 55, 247, 163, 27, 16, 217, 202, 235, 254, 249, 48,
- 225, 58, 226, 54, 27, 16, 217, 202, 235, 254, 249, 48, 225, 58, 235, 255,
- 27, 16, 217, 202, 235, 254, 249, 48, 225, 58, 236, 0, 247, 163, 27, 16,
- 217, 202, 235, 254, 249, 48, 225, 58, 236, 0, 247, 162, 27, 16, 217, 202,
- 235, 254, 249, 48, 225, 58, 236, 0, 247, 161, 27, 16, 249, 73, 27, 16,
- 242, 103, 250, 253, 249, 207, 27, 16, 242, 103, 244, 231, 249, 207, 27,
- 16, 41, 253, 74, 27, 16, 214, 132, 27, 16, 225, 148, 27, 16, 249, 198,
- 27, 16, 222, 121, 27, 16, 249, 202, 27, 16, 216, 220, 27, 16, 225, 122,
- 27, 16, 225, 123, 244, 29, 27, 16, 222, 122, 244, 29, 27, 16, 216, 221,
- 223, 210, 27, 16, 226, 39, 219, 11, 25, 214, 118, 174, 218, 174, 25, 214,
- 118, 174, 218, 163, 25, 214, 118, 174, 218, 153, 25, 214, 118, 174, 218,
- 146, 25, 214, 118, 174, 218, 138, 25, 214, 118, 174, 218, 132, 25, 214,
- 118, 174, 218, 131, 25, 214, 118, 174, 218, 130, 25, 214, 118, 174, 218,
- 129, 25, 214, 118, 174, 218, 173, 25, 214, 118, 174, 218, 172, 25, 214,
- 118, 174, 218, 171, 25, 214, 118, 174, 218, 170, 25, 214, 118, 174, 218,
- 169, 25, 214, 118, 174, 218, 168, 25, 214, 118, 174, 218, 167, 25, 214,
- 118, 174, 218, 166, 25, 214, 118, 174, 218, 165, 25, 214, 118, 174, 218,
- 164, 25, 214, 118, 174, 218, 162, 25, 214, 118, 174, 218, 161, 25, 214,
- 118, 174, 218, 160, 25, 214, 118, 174, 218, 159, 25, 214, 118, 174, 218,
- 158, 25, 214, 118, 174, 218, 137, 25, 214, 118, 174, 218, 136, 25, 214,
- 118, 174, 218, 135, 25, 214, 118, 174, 218, 134, 25, 214, 118, 174, 218,
- 133, 25, 235, 211, 174, 218, 174, 25, 235, 211, 174, 218, 163, 25, 235,
- 211, 174, 218, 146, 25, 235, 211, 174, 218, 138, 25, 235, 211, 174, 218,
- 131, 25, 235, 211, 174, 218, 130, 25, 235, 211, 174, 218, 172, 25, 235,
- 211, 174, 218, 171, 25, 235, 211, 174, 218, 170, 25, 235, 211, 174, 218,
- 169, 25, 235, 211, 174, 218, 166, 25, 235, 211, 174, 218, 165, 25, 235,
- 211, 174, 218, 164, 25, 235, 211, 174, 218, 159, 25, 235, 211, 174, 218,
- 158, 25, 235, 211, 174, 218, 157, 25, 235, 211, 174, 218, 156, 25, 235,
- 211, 174, 218, 155, 25, 235, 211, 174, 218, 154, 25, 235, 211, 174, 218,
- 152, 25, 235, 211, 174, 218, 151, 25, 235, 211, 174, 218, 150, 25, 235,
- 211, 174, 218, 149, 25, 235, 211, 174, 218, 148, 25, 235, 211, 174, 218,
- 147, 25, 235, 211, 174, 218, 145, 25, 235, 211, 174, 218, 144, 25, 235,
- 211, 174, 218, 143, 25, 235, 211, 174, 218, 142, 25, 235, 211, 174, 218,
- 141, 25, 235, 211, 174, 218, 140, 25, 235, 211, 174, 218, 139, 25, 235,
- 211, 174, 218, 137, 25, 235, 211, 174, 218, 136, 25, 235, 211, 174, 218,
- 135, 25, 235, 211, 174, 218, 134, 25, 235, 211, 174, 218, 133, 37, 25,
- 27, 216, 166, 37, 25, 27, 217, 176, 37, 25, 27, 226, 63, 25, 27, 233, 55,
- 230, 212, 31, 245, 179, 247, 176, 31, 241, 206, 245, 179, 247, 176, 31,
- 240, 204, 245, 179, 247, 176, 31, 245, 178, 241, 207, 247, 176, 31, 245,
- 178, 240, 203, 247, 176, 31, 245, 179, 170, 31, 250, 108, 170, 31, 243,
- 200, 249, 228, 170, 31, 230, 246, 170, 31, 252, 50, 170, 31, 234, 185,
- 220, 7, 170, 31, 249, 118, 170, 31, 253, 148, 170, 31, 227, 29, 170, 31,
- 251, 80, 226, 254, 170, 31, 248, 24, 167, 247, 131, 170, 31, 247, 128,
- 170, 31, 212, 213, 170, 31, 235, 243, 170, 31, 226, 72, 170, 31, 224, 20,
- 170, 31, 249, 128, 170, 31, 241, 46, 252, 101, 170, 31, 214, 43, 170, 31,
- 244, 8, 170, 31, 254, 151, 170, 31, 223, 239, 170, 31, 223, 217, 170, 31,
- 245, 177, 170, 31, 235, 56, 170, 31, 249, 123, 170, 31, 245, 100, 170,
- 31, 246, 7, 170, 31, 250, 81, 170, 31, 248, 33, 170, 31, 22, 223, 216,
- 170, 31, 226, 205, 170, 31, 233, 58, 170, 31, 249, 191, 170, 31, 234, 86,
- 170, 31, 243, 62, 170, 31, 219, 52, 170, 31, 225, 16, 170, 31, 243, 199,
- 170, 31, 223, 218, 170, 31, 233, 95, 167, 230, 227, 170, 31, 223, 214,
- 170, 31, 242, 144, 211, 211, 231, 141, 170, 31, 245, 102, 170, 31, 219,
- 64, 170, 31, 242, 105, 170, 31, 245, 94, 170, 31, 226, 108, 170, 31, 223,
- 122, 170, 31, 244, 28, 170, 31, 214, 240, 167, 214, 28, 170, 31, 249,
- 132, 170, 31, 231, 154, 170, 31, 245, 27, 170, 31, 215, 143, 170, 31,
- 247, 164, 170, 31, 249, 193, 230, 180, 170, 31, 242, 87, 170, 31, 243,
- 63, 235, 251, 170, 31, 231, 204, 170, 31, 254, 170, 170, 31, 245, 115,
- 170, 31, 246, 63, 170, 31, 214, 26, 170, 31, 220, 78, 170, 31, 235, 219,
- 170, 31, 247, 249, 170, 31, 248, 105, 170, 31, 247, 160, 170, 31, 244,
- 252, 170, 31, 221, 36, 170, 31, 219, 68, 170, 31, 241, 241, 170, 31, 249,
- 151, 170, 31, 249, 188, 170, 31, 244, 145, 170, 31, 254, 117, 170, 31,
- 249, 150, 170, 31, 227, 63, 217, 149, 214, 219, 170, 31, 247, 184, 170,
- 31, 233, 147, 170, 31, 243, 239, 249, 88, 223, 103, 215, 145, 21, 116,
- 249, 88, 223, 103, 215, 145, 21, 109, 249, 88, 223, 103, 215, 145, 21,
- 166, 249, 88, 223, 103, 215, 145, 21, 163, 249, 88, 223, 103, 215, 145,
- 21, 180, 249, 88, 223, 103, 215, 145, 21, 189, 249, 88, 223, 103, 215,
- 145, 21, 198, 249, 88, 223, 103, 215, 145, 21, 195, 249, 88, 223, 103,
- 215, 145, 21, 200, 249, 88, 223, 103, 217, 196, 21, 116, 249, 88, 223,
- 103, 217, 196, 21, 109, 249, 88, 223, 103, 217, 196, 21, 166, 249, 88,
- 223, 103, 217, 196, 21, 163, 249, 88, 223, 103, 217, 196, 21, 180, 249,
- 88, 223, 103, 217, 196, 21, 189, 249, 88, 223, 103, 217, 196, 21, 198,
- 249, 88, 223, 103, 217, 196, 21, 195, 249, 88, 223, 103, 217, 196, 21,
- 200, 14, 22, 6, 61, 14, 22, 6, 253, 74, 14, 22, 6, 250, 252, 14, 22, 6,
- 249, 3, 14, 22, 6, 74, 14, 22, 6, 244, 230, 14, 22, 6, 243, 177, 14, 22,
- 6, 242, 41, 14, 22, 6, 72, 14, 22, 6, 235, 142, 14, 22, 6, 235, 27, 14,
- 22, 6, 150, 14, 22, 6, 183, 14, 22, 6, 204, 14, 22, 6, 75, 14, 22, 6,
- 226, 229, 14, 22, 6, 224, 240, 14, 22, 6, 149, 14, 22, 6, 197, 14, 22, 6,
- 218, 99, 14, 22, 6, 69, 14, 22, 6, 215, 79, 14, 22, 6, 214, 82, 14, 22,
- 6, 213, 166, 14, 22, 6, 213, 105, 14, 22, 6, 212, 152, 14, 22, 3, 61, 14,
- 22, 3, 253, 74, 14, 22, 3, 250, 252, 14, 22, 3, 249, 3, 14, 22, 3, 74,
- 14, 22, 3, 244, 230, 14, 22, 3, 243, 177, 14, 22, 3, 242, 41, 14, 22, 3,
- 72, 14, 22, 3, 235, 142, 14, 22, 3, 235, 27, 14, 22, 3, 150, 14, 22, 3,
- 183, 14, 22, 3, 204, 14, 22, 3, 75, 14, 22, 3, 226, 229, 14, 22, 3, 224,
- 240, 14, 22, 3, 149, 14, 22, 3, 197, 14, 22, 3, 218, 99, 14, 22, 3, 69,
- 14, 22, 3, 215, 79, 14, 22, 3, 214, 82, 14, 22, 3, 213, 166, 14, 22, 3,
- 213, 105, 14, 22, 3, 212, 152, 14, 32, 6, 61, 14, 32, 6, 253, 74, 14, 32,
- 6, 250, 252, 14, 32, 6, 249, 3, 14, 32, 6, 74, 14, 32, 6, 244, 230, 14,
- 32, 6, 243, 177, 14, 32, 6, 242, 41, 14, 32, 6, 72, 14, 32, 6, 235, 142,
- 14, 32, 6, 235, 27, 14, 32, 6, 150, 14, 32, 6, 183, 14, 32, 6, 204, 14,
- 32, 6, 75, 14, 32, 6, 226, 229, 14, 32, 6, 224, 240, 14, 32, 6, 149, 14,
- 32, 6, 197, 14, 32, 6, 218, 99, 14, 32, 6, 69, 14, 32, 6, 215, 79, 14,
- 32, 6, 214, 82, 14, 32, 6, 213, 166, 14, 32, 6, 213, 105, 14, 32, 6, 212,
- 152, 14, 32, 3, 61, 14, 32, 3, 253, 74, 14, 32, 3, 250, 252, 14, 32, 3,
- 249, 3, 14, 32, 3, 74, 14, 32, 3, 244, 230, 14, 32, 3, 243, 177, 14, 32,
- 3, 72, 14, 32, 3, 235, 142, 14, 32, 3, 235, 27, 14, 32, 3, 150, 14, 32,
- 3, 183, 14, 32, 3, 204, 14, 32, 3, 75, 14, 32, 3, 226, 229, 14, 32, 3,
- 224, 240, 14, 32, 3, 149, 14, 32, 3, 197, 14, 32, 3, 218, 99, 14, 32, 3,
- 69, 14, 32, 3, 215, 79, 14, 32, 3, 214, 82, 14, 32, 3, 213, 166, 14, 32,
- 3, 213, 105, 14, 32, 3, 212, 152, 14, 22, 32, 6, 61, 14, 22, 32, 6, 253,
- 74, 14, 22, 32, 6, 250, 252, 14, 22, 32, 6, 249, 3, 14, 22, 32, 6, 74,
- 14, 22, 32, 6, 244, 230, 14, 22, 32, 6, 243, 177, 14, 22, 32, 6, 242, 41,
- 14, 22, 32, 6, 72, 14, 22, 32, 6, 235, 142, 14, 22, 32, 6, 235, 27, 14,
- 22, 32, 6, 150, 14, 22, 32, 6, 183, 14, 22, 32, 6, 204, 14, 22, 32, 6,
- 75, 14, 22, 32, 6, 226, 229, 14, 22, 32, 6, 224, 240, 14, 22, 32, 6, 149,
- 14, 22, 32, 6, 197, 14, 22, 32, 6, 218, 99, 14, 22, 32, 6, 69, 14, 22,
- 32, 6, 215, 79, 14, 22, 32, 6, 214, 82, 14, 22, 32, 6, 213, 166, 14, 22,
- 32, 6, 213, 105, 14, 22, 32, 6, 212, 152, 14, 22, 32, 3, 61, 14, 22, 32,
- 3, 253, 74, 14, 22, 32, 3, 250, 252, 14, 22, 32, 3, 249, 3, 14, 22, 32,
- 3, 74, 14, 22, 32, 3, 244, 230, 14, 22, 32, 3, 243, 177, 14, 22, 32, 3,
- 242, 41, 14, 22, 32, 3, 72, 14, 22, 32, 3, 235, 142, 14, 22, 32, 3, 235,
- 27, 14, 22, 32, 3, 150, 14, 22, 32, 3, 183, 14, 22, 32, 3, 204, 14, 22,
- 32, 3, 75, 14, 22, 32, 3, 226, 229, 14, 22, 32, 3, 224, 240, 14, 22, 32,
- 3, 149, 14, 22, 32, 3, 197, 14, 22, 32, 3, 218, 99, 14, 22, 32, 3, 69,
- 14, 22, 32, 3, 215, 79, 14, 22, 32, 3, 214, 82, 14, 22, 32, 3, 213, 166,
- 14, 22, 32, 3, 213, 105, 14, 22, 32, 3, 212, 152, 14, 113, 6, 61, 14,
- 113, 6, 250, 252, 14, 113, 6, 249, 3, 14, 113, 6, 243, 177, 14, 113, 6,
- 235, 142, 14, 113, 6, 235, 27, 14, 113, 6, 204, 14, 113, 6, 75, 14, 113,
- 6, 226, 229, 14, 113, 6, 224, 240, 14, 113, 6, 197, 14, 113, 6, 218, 99,
- 14, 113, 6, 69, 14, 113, 6, 215, 79, 14, 113, 6, 214, 82, 14, 113, 6,
- 213, 166, 14, 113, 6, 213, 105, 14, 113, 6, 212, 152, 14, 113, 3, 61, 14,
- 113, 3, 253, 74, 14, 113, 3, 250, 252, 14, 113, 3, 249, 3, 14, 113, 3,
- 244, 230, 14, 113, 3, 242, 41, 14, 113, 3, 72, 14, 113, 3, 235, 142, 14,
- 113, 3, 235, 27, 14, 113, 3, 150, 14, 113, 3, 183, 14, 113, 3, 204, 14,
- 113, 3, 226, 229, 14, 113, 3, 224, 240, 14, 113, 3, 149, 14, 113, 3, 197,
- 14, 113, 3, 218, 99, 14, 113, 3, 69, 14, 113, 3, 215, 79, 14, 113, 3,
- 214, 82, 14, 113, 3, 213, 166, 14, 113, 3, 213, 105, 14, 113, 3, 212,
- 152, 14, 22, 113, 6, 61, 14, 22, 113, 6, 253, 74, 14, 22, 113, 6, 250,
- 252, 14, 22, 113, 6, 249, 3, 14, 22, 113, 6, 74, 14, 22, 113, 6, 244,
- 230, 14, 22, 113, 6, 243, 177, 14, 22, 113, 6, 242, 41, 14, 22, 113, 6,
- 72, 14, 22, 113, 6, 235, 142, 14, 22, 113, 6, 235, 27, 14, 22, 113, 6,
- 150, 14, 22, 113, 6, 183, 14, 22, 113, 6, 204, 14, 22, 113, 6, 75, 14,
- 22, 113, 6, 226, 229, 14, 22, 113, 6, 224, 240, 14, 22, 113, 6, 149, 14,
- 22, 113, 6, 197, 14, 22, 113, 6, 218, 99, 14, 22, 113, 6, 69, 14, 22,
- 113, 6, 215, 79, 14, 22, 113, 6, 214, 82, 14, 22, 113, 6, 213, 166, 14,
- 22, 113, 6, 213, 105, 14, 22, 113, 6, 212, 152, 14, 22, 113, 3, 61, 14,
- 22, 113, 3, 253, 74, 14, 22, 113, 3, 250, 252, 14, 22, 113, 3, 249, 3,
- 14, 22, 113, 3, 74, 14, 22, 113, 3, 244, 230, 14, 22, 113, 3, 243, 177,
- 14, 22, 113, 3, 242, 41, 14, 22, 113, 3, 72, 14, 22, 113, 3, 235, 142,
- 14, 22, 113, 3, 235, 27, 14, 22, 113, 3, 150, 14, 22, 113, 3, 183, 14,
- 22, 113, 3, 204, 14, 22, 113, 3, 75, 14, 22, 113, 3, 226, 229, 14, 22,
- 113, 3, 224, 240, 14, 22, 113, 3, 149, 14, 22, 113, 3, 197, 14, 22, 113,
- 3, 218, 99, 14, 22, 113, 3, 69, 14, 22, 113, 3, 215, 79, 14, 22, 113, 3,
- 214, 82, 14, 22, 113, 3, 213, 166, 14, 22, 113, 3, 213, 105, 14, 22, 113,
- 3, 212, 152, 14, 129, 6, 61, 14, 129, 6, 253, 74, 14, 129, 6, 249, 3, 14,
- 129, 6, 74, 14, 129, 6, 244, 230, 14, 129, 6, 243, 177, 14, 129, 6, 235,
- 142, 14, 129, 6, 235, 27, 14, 129, 6, 150, 14, 129, 6, 183, 14, 129, 6,
- 204, 14, 129, 6, 75, 14, 129, 6, 226, 229, 14, 129, 6, 224, 240, 14, 129,
- 6, 197, 14, 129, 6, 218, 99, 14, 129, 6, 69, 14, 129, 6, 215, 79, 14,
- 129, 6, 214, 82, 14, 129, 6, 213, 166, 14, 129, 6, 213, 105, 14, 129, 3,
- 61, 14, 129, 3, 253, 74, 14, 129, 3, 250, 252, 14, 129, 3, 249, 3, 14,
- 129, 3, 74, 14, 129, 3, 244, 230, 14, 129, 3, 243, 177, 14, 129, 3, 242,
- 41, 14, 129, 3, 72, 14, 129, 3, 235, 142, 14, 129, 3, 235, 27, 14, 129,
- 3, 150, 14, 129, 3, 183, 14, 129, 3, 204, 14, 129, 3, 75, 14, 129, 3,
- 226, 229, 14, 129, 3, 224, 240, 14, 129, 3, 149, 14, 129, 3, 197, 14,
- 129, 3, 218, 99, 14, 129, 3, 69, 14, 129, 3, 215, 79, 14, 129, 3, 214,
- 82, 14, 129, 3, 213, 166, 14, 129, 3, 213, 105, 14, 129, 3, 212, 152, 14,
- 187, 6, 61, 14, 187, 6, 253, 74, 14, 187, 6, 249, 3, 14, 187, 6, 74, 14,
- 187, 6, 244, 230, 14, 187, 6, 243, 177, 14, 187, 6, 72, 14, 187, 6, 235,
- 142, 14, 187, 6, 235, 27, 14, 187, 6, 150, 14, 187, 6, 183, 14, 187, 6,
- 75, 14, 187, 6, 197, 14, 187, 6, 218, 99, 14, 187, 6, 69, 14, 187, 6,
- 215, 79, 14, 187, 6, 214, 82, 14, 187, 6, 213, 166, 14, 187, 6, 213, 105,
- 14, 187, 3, 61, 14, 187, 3, 253, 74, 14, 187, 3, 250, 252, 14, 187, 3,
- 249, 3, 14, 187, 3, 74, 14, 187, 3, 244, 230, 14, 187, 3, 243, 177, 14,
- 187, 3, 242, 41, 14, 187, 3, 72, 14, 187, 3, 235, 142, 14, 187, 3, 235,
- 27, 14, 187, 3, 150, 14, 187, 3, 183, 14, 187, 3, 204, 14, 187, 3, 75,
- 14, 187, 3, 226, 229, 14, 187, 3, 224, 240, 14, 187, 3, 149, 14, 187, 3,
- 197, 14, 187, 3, 218, 99, 14, 187, 3, 69, 14, 187, 3, 215, 79, 14, 187,
- 3, 214, 82, 14, 187, 3, 213, 166, 14, 187, 3, 213, 105, 14, 187, 3, 212,
- 152, 14, 22, 129, 6, 61, 14, 22, 129, 6, 253, 74, 14, 22, 129, 6, 250,
- 252, 14, 22, 129, 6, 249, 3, 14, 22, 129, 6, 74, 14, 22, 129, 6, 244,
- 230, 14, 22, 129, 6, 243, 177, 14, 22, 129, 6, 242, 41, 14, 22, 129, 6,
- 72, 14, 22, 129, 6, 235, 142, 14, 22, 129, 6, 235, 27, 14, 22, 129, 6,
- 150, 14, 22, 129, 6, 183, 14, 22, 129, 6, 204, 14, 22, 129, 6, 75, 14,
- 22, 129, 6, 226, 229, 14, 22, 129, 6, 224, 240, 14, 22, 129, 6, 149, 14,
- 22, 129, 6, 197, 14, 22, 129, 6, 218, 99, 14, 22, 129, 6, 69, 14, 22,
- 129, 6, 215, 79, 14, 22, 129, 6, 214, 82, 14, 22, 129, 6, 213, 166, 14,
- 22, 129, 6, 213, 105, 14, 22, 129, 6, 212, 152, 14, 22, 129, 3, 61, 14,
- 22, 129, 3, 253, 74, 14, 22, 129, 3, 250, 252, 14, 22, 129, 3, 249, 3,
- 14, 22, 129, 3, 74, 14, 22, 129, 3, 244, 230, 14, 22, 129, 3, 243, 177,
- 14, 22, 129, 3, 242, 41, 14, 22, 129, 3, 72, 14, 22, 129, 3, 235, 142,
- 14, 22, 129, 3, 235, 27, 14, 22, 129, 3, 150, 14, 22, 129, 3, 183, 14,
- 22, 129, 3, 204, 14, 22, 129, 3, 75, 14, 22, 129, 3, 226, 229, 14, 22,
- 129, 3, 224, 240, 14, 22, 129, 3, 149, 14, 22, 129, 3, 197, 14, 22, 129,
- 3, 218, 99, 14, 22, 129, 3, 69, 14, 22, 129, 3, 215, 79, 14, 22, 129, 3,
- 214, 82, 14, 22, 129, 3, 213, 166, 14, 22, 129, 3, 213, 105, 14, 22, 129,
- 3, 212, 152, 14, 35, 6, 61, 14, 35, 6, 253, 74, 14, 35, 6, 250, 252, 14,
- 35, 6, 249, 3, 14, 35, 6, 74, 14, 35, 6, 244, 230, 14, 35, 6, 243, 177,
- 14, 35, 6, 242, 41, 14, 35, 6, 72, 14, 35, 6, 235, 142, 14, 35, 6, 235,
- 27, 14, 35, 6, 150, 14, 35, 6, 183, 14, 35, 6, 204, 14, 35, 6, 75, 14,
- 35, 6, 226, 229, 14, 35, 6, 224, 240, 14, 35, 6, 149, 14, 35, 6, 197, 14,
- 35, 6, 218, 99, 14, 35, 6, 69, 14, 35, 6, 215, 79, 14, 35, 6, 214, 82,
- 14, 35, 6, 213, 166, 14, 35, 6, 213, 105, 14, 35, 6, 212, 152, 14, 35, 3,
- 61, 14, 35, 3, 253, 74, 14, 35, 3, 250, 252, 14, 35, 3, 249, 3, 14, 35,
- 3, 74, 14, 35, 3, 244, 230, 14, 35, 3, 243, 177, 14, 35, 3, 242, 41, 14,
- 35, 3, 72, 14, 35, 3, 235, 142, 14, 35, 3, 235, 27, 14, 35, 3, 150, 14,
- 35, 3, 183, 14, 35, 3, 204, 14, 35, 3, 75, 14, 35, 3, 226, 229, 14, 35,
- 3, 224, 240, 14, 35, 3, 149, 14, 35, 3, 197, 14, 35, 3, 218, 99, 14, 35,
- 3, 69, 14, 35, 3, 215, 79, 14, 35, 3, 214, 82, 14, 35, 3, 213, 166, 14,
- 35, 3, 213, 105, 14, 35, 3, 212, 152, 14, 35, 22, 6, 61, 14, 35, 22, 6,
- 253, 74, 14, 35, 22, 6, 250, 252, 14, 35, 22, 6, 249, 3, 14, 35, 22, 6,
- 74, 14, 35, 22, 6, 244, 230, 14, 35, 22, 6, 243, 177, 14, 35, 22, 6, 242,
- 41, 14, 35, 22, 6, 72, 14, 35, 22, 6, 235, 142, 14, 35, 22, 6, 235, 27,
- 14, 35, 22, 6, 150, 14, 35, 22, 6, 183, 14, 35, 22, 6, 204, 14, 35, 22,
- 6, 75, 14, 35, 22, 6, 226, 229, 14, 35, 22, 6, 224, 240, 14, 35, 22, 6,
- 149, 14, 35, 22, 6, 197, 14, 35, 22, 6, 218, 99, 14, 35, 22, 6, 69, 14,
- 35, 22, 6, 215, 79, 14, 35, 22, 6, 214, 82, 14, 35, 22, 6, 213, 166, 14,
- 35, 22, 6, 213, 105, 14, 35, 22, 6, 212, 152, 14, 35, 22, 3, 61, 14, 35,
- 22, 3, 253, 74, 14, 35, 22, 3, 250, 252, 14, 35, 22, 3, 249, 3, 14, 35,
- 22, 3, 74, 14, 35, 22, 3, 244, 230, 14, 35, 22, 3, 243, 177, 14, 35, 22,
- 3, 242, 41, 14, 35, 22, 3, 72, 14, 35, 22, 3, 235, 142, 14, 35, 22, 3,
- 235, 27, 14, 35, 22, 3, 150, 14, 35, 22, 3, 183, 14, 35, 22, 3, 204, 14,
- 35, 22, 3, 75, 14, 35, 22, 3, 226, 229, 14, 35, 22, 3, 224, 240, 14, 35,
- 22, 3, 149, 14, 35, 22, 3, 197, 14, 35, 22, 3, 218, 99, 14, 35, 22, 3,
- 69, 14, 35, 22, 3, 215, 79, 14, 35, 22, 3, 214, 82, 14, 35, 22, 3, 213,
- 166, 14, 35, 22, 3, 213, 105, 14, 35, 22, 3, 212, 152, 14, 35, 32, 6, 61,
- 14, 35, 32, 6, 253, 74, 14, 35, 32, 6, 250, 252, 14, 35, 32, 6, 249, 3,
- 14, 35, 32, 6, 74, 14, 35, 32, 6, 244, 230, 14, 35, 32, 6, 243, 177, 14,
- 35, 32, 6, 242, 41, 14, 35, 32, 6, 72, 14, 35, 32, 6, 235, 142, 14, 35,
- 32, 6, 235, 27, 14, 35, 32, 6, 150, 14, 35, 32, 6, 183, 14, 35, 32, 6,
- 204, 14, 35, 32, 6, 75, 14, 35, 32, 6, 226, 229, 14, 35, 32, 6, 224, 240,
- 14, 35, 32, 6, 149, 14, 35, 32, 6, 197, 14, 35, 32, 6, 218, 99, 14, 35,
- 32, 6, 69, 14, 35, 32, 6, 215, 79, 14, 35, 32, 6, 214, 82, 14, 35, 32, 6,
- 213, 166, 14, 35, 32, 6, 213, 105, 14, 35, 32, 6, 212, 152, 14, 35, 32,
- 3, 61, 14, 35, 32, 3, 253, 74, 14, 35, 32, 3, 250, 252, 14, 35, 32, 3,
- 249, 3, 14, 35, 32, 3, 74, 14, 35, 32, 3, 244, 230, 14, 35, 32, 3, 243,
- 177, 14, 35, 32, 3, 242, 41, 14, 35, 32, 3, 72, 14, 35, 32, 3, 235, 142,
- 14, 35, 32, 3, 235, 27, 14, 35, 32, 3, 150, 14, 35, 32, 3, 183, 14, 35,
- 32, 3, 204, 14, 35, 32, 3, 75, 14, 35, 32, 3, 226, 229, 14, 35, 32, 3,
- 224, 240, 14, 35, 32, 3, 149, 14, 35, 32, 3, 197, 14, 35, 32, 3, 218, 99,
- 14, 35, 32, 3, 69, 14, 35, 32, 3, 215, 79, 14, 35, 32, 3, 214, 82, 14,
- 35, 32, 3, 213, 166, 14, 35, 32, 3, 213, 105, 14, 35, 32, 3, 212, 152,
- 14, 35, 22, 32, 6, 61, 14, 35, 22, 32, 6, 253, 74, 14, 35, 22, 32, 6,
- 250, 252, 14, 35, 22, 32, 6, 249, 3, 14, 35, 22, 32, 6, 74, 14, 35, 22,
- 32, 6, 244, 230, 14, 35, 22, 32, 6, 243, 177, 14, 35, 22, 32, 6, 242, 41,
- 14, 35, 22, 32, 6, 72, 14, 35, 22, 32, 6, 235, 142, 14, 35, 22, 32, 6,
- 235, 27, 14, 35, 22, 32, 6, 150, 14, 35, 22, 32, 6, 183, 14, 35, 22, 32,
- 6, 204, 14, 35, 22, 32, 6, 75, 14, 35, 22, 32, 6, 226, 229, 14, 35, 22,
- 32, 6, 224, 240, 14, 35, 22, 32, 6, 149, 14, 35, 22, 32, 6, 197, 14, 35,
- 22, 32, 6, 218, 99, 14, 35, 22, 32, 6, 69, 14, 35, 22, 32, 6, 215, 79,
- 14, 35, 22, 32, 6, 214, 82, 14, 35, 22, 32, 6, 213, 166, 14, 35, 22, 32,
- 6, 213, 105, 14, 35, 22, 32, 6, 212, 152, 14, 35, 22, 32, 3, 61, 14, 35,
- 22, 32, 3, 253, 74, 14, 35, 22, 32, 3, 250, 252, 14, 35, 22, 32, 3, 249,
- 3, 14, 35, 22, 32, 3, 74, 14, 35, 22, 32, 3, 244, 230, 14, 35, 22, 32, 3,
- 243, 177, 14, 35, 22, 32, 3, 242, 41, 14, 35, 22, 32, 3, 72, 14, 35, 22,
- 32, 3, 235, 142, 14, 35, 22, 32, 3, 235, 27, 14, 35, 22, 32, 3, 150, 14,
- 35, 22, 32, 3, 183, 14, 35, 22, 32, 3, 204, 14, 35, 22, 32, 3, 75, 14,
- 35, 22, 32, 3, 226, 229, 14, 35, 22, 32, 3, 224, 240, 14, 35, 22, 32, 3,
- 149, 14, 35, 22, 32, 3, 197, 14, 35, 22, 32, 3, 218, 99, 14, 35, 22, 32,
- 3, 69, 14, 35, 22, 32, 3, 215, 79, 14, 35, 22, 32, 3, 214, 82, 14, 35,
- 22, 32, 3, 213, 166, 14, 35, 22, 32, 3, 213, 105, 14, 35, 22, 32, 3, 212,
- 152, 14, 230, 208, 6, 61, 14, 230, 208, 6, 253, 74, 14, 230, 208, 6, 250,
- 252, 14, 230, 208, 6, 249, 3, 14, 230, 208, 6, 74, 14, 230, 208, 6, 244,
- 230, 14, 230, 208, 6, 243, 177, 14, 230, 208, 6, 242, 41, 14, 230, 208,
- 6, 72, 14, 230, 208, 6, 235, 142, 14, 230, 208, 6, 235, 27, 14, 230, 208,
- 6, 150, 14, 230, 208, 6, 183, 14, 230, 208, 6, 204, 14, 230, 208, 6, 75,
- 14, 230, 208, 6, 226, 229, 14, 230, 208, 6, 224, 240, 14, 230, 208, 6,
- 149, 14, 230, 208, 6, 197, 14, 230, 208, 6, 218, 99, 14, 230, 208, 6, 69,
- 14, 230, 208, 6, 215, 79, 14, 230, 208, 6, 214, 82, 14, 230, 208, 6, 213,
- 166, 14, 230, 208, 6, 213, 105, 14, 230, 208, 6, 212, 152, 14, 230, 208,
- 3, 61, 14, 230, 208, 3, 253, 74, 14, 230, 208, 3, 250, 252, 14, 230, 208,
- 3, 249, 3, 14, 230, 208, 3, 74, 14, 230, 208, 3, 244, 230, 14, 230, 208,
- 3, 243, 177, 14, 230, 208, 3, 242, 41, 14, 230, 208, 3, 72, 14, 230, 208,
- 3, 235, 142, 14, 230, 208, 3, 235, 27, 14, 230, 208, 3, 150, 14, 230,
- 208, 3, 183, 14, 230, 208, 3, 204, 14, 230, 208, 3, 75, 14, 230, 208, 3,
- 226, 229, 14, 230, 208, 3, 224, 240, 14, 230, 208, 3, 149, 14, 230, 208,
- 3, 197, 14, 230, 208, 3, 218, 99, 14, 230, 208, 3, 69, 14, 230, 208, 3,
- 215, 79, 14, 230, 208, 3, 214, 82, 14, 230, 208, 3, 213, 166, 14, 230,
- 208, 3, 213, 105, 14, 230, 208, 3, 212, 152, 14, 32, 3, 247, 73, 72, 14,
- 32, 3, 247, 73, 235, 142, 14, 22, 6, 254, 52, 14, 22, 6, 251, 203, 14,
- 22, 6, 243, 83, 14, 22, 6, 248, 5, 14, 22, 6, 245, 63, 14, 22, 6, 212,
- 78, 14, 22, 6, 245, 28, 14, 22, 6, 217, 132, 14, 22, 6, 235, 183, 14, 22,
- 6, 234, 227, 14, 22, 6, 233, 122, 14, 22, 6, 230, 172, 14, 22, 6, 228,
- 92, 14, 22, 6, 213, 145, 14, 22, 6, 227, 65, 14, 22, 6, 225, 240, 14, 22,
- 6, 223, 190, 14, 22, 6, 217, 133, 87, 14, 22, 6, 220, 103, 14, 22, 6,
- 217, 248, 14, 22, 6, 215, 128, 14, 22, 6, 226, 9, 14, 22, 6, 250, 47, 14,
- 22, 6, 225, 46, 14, 22, 6, 227, 67, 14, 22, 230, 39, 14, 22, 3, 254, 52,
- 14, 22, 3, 251, 203, 14, 22, 3, 243, 83, 14, 22, 3, 248, 5, 14, 22, 3,
- 245, 63, 14, 22, 3, 212, 78, 14, 22, 3, 245, 28, 14, 22, 3, 217, 132, 14,
- 22, 3, 235, 183, 14, 22, 3, 234, 227, 14, 22, 3, 233, 122, 14, 22, 3,
- 230, 172, 14, 22, 3, 228, 92, 14, 22, 3, 213, 145, 14, 22, 3, 227, 65,
- 14, 22, 3, 225, 240, 14, 22, 3, 223, 190, 14, 22, 3, 40, 220, 103, 14,
- 22, 3, 220, 103, 14, 22, 3, 217, 248, 14, 22, 3, 215, 128, 14, 22, 3,
- 226, 9, 14, 22, 3, 250, 47, 14, 22, 3, 225, 46, 14, 22, 3, 227, 67, 14,
- 22, 226, 125, 247, 185, 14, 22, 245, 64, 87, 14, 22, 217, 133, 87, 14,
- 22, 234, 228, 87, 14, 22, 226, 10, 87, 14, 22, 223, 191, 87, 14, 22, 225,
- 241, 87, 14, 32, 6, 254, 52, 14, 32, 6, 251, 203, 14, 32, 6, 243, 83, 14,
- 32, 6, 248, 5, 14, 32, 6, 245, 63, 14, 32, 6, 212, 78, 14, 32, 6, 245,
- 28, 14, 32, 6, 217, 132, 14, 32, 6, 235, 183, 14, 32, 6, 234, 227, 14,
- 32, 6, 233, 122, 14, 32, 6, 230, 172, 14, 32, 6, 228, 92, 14, 32, 6, 213,
- 145, 14, 32, 6, 227, 65, 14, 32, 6, 225, 240, 14, 32, 6, 223, 190, 14,
- 32, 6, 217, 133, 87, 14, 32, 6, 220, 103, 14, 32, 6, 217, 248, 14, 32, 6,
- 215, 128, 14, 32, 6, 226, 9, 14, 32, 6, 250, 47, 14, 32, 6, 225, 46, 14,
- 32, 6, 227, 67, 14, 32, 230, 39, 14, 32, 3, 254, 52, 14, 32, 3, 251, 203,
- 14, 32, 3, 243, 83, 14, 32, 3, 248, 5, 14, 32, 3, 245, 63, 14, 32, 3,
- 212, 78, 14, 32, 3, 245, 28, 14, 32, 3, 217, 132, 14, 32, 3, 235, 183,
- 14, 32, 3, 234, 227, 14, 32, 3, 233, 122, 14, 32, 3, 230, 172, 14, 32, 3,
- 228, 92, 14, 32, 3, 213, 145, 14, 32, 3, 227, 65, 14, 32, 3, 225, 240,
- 14, 32, 3, 223, 190, 14, 32, 3, 40, 220, 103, 14, 32, 3, 220, 103, 14,
- 32, 3, 217, 248, 14, 32, 3, 215, 128, 14, 32, 3, 226, 9, 14, 32, 3, 250,
- 47, 14, 32, 3, 225, 46, 14, 32, 3, 227, 67, 14, 32, 226, 125, 247, 185,
- 14, 32, 245, 64, 87, 14, 32, 217, 133, 87, 14, 32, 234, 228, 87, 14, 32,
- 226, 10, 87, 14, 32, 223, 191, 87, 14, 32, 225, 241, 87, 14, 22, 32, 6,
- 254, 52, 14, 22, 32, 6, 251, 203, 14, 22, 32, 6, 243, 83, 14, 22, 32, 6,
- 248, 5, 14, 22, 32, 6, 245, 63, 14, 22, 32, 6, 212, 78, 14, 22, 32, 6,
- 245, 28, 14, 22, 32, 6, 217, 132, 14, 22, 32, 6, 235, 183, 14, 22, 32, 6,
- 234, 227, 14, 22, 32, 6, 233, 122, 14, 22, 32, 6, 230, 172, 14, 22, 32,
- 6, 228, 92, 14, 22, 32, 6, 213, 145, 14, 22, 32, 6, 227, 65, 14, 22, 32,
- 6, 225, 240, 14, 22, 32, 6, 223, 190, 14, 22, 32, 6, 217, 133, 87, 14,
- 22, 32, 6, 220, 103, 14, 22, 32, 6, 217, 248, 14, 22, 32, 6, 215, 128,
- 14, 22, 32, 6, 226, 9, 14, 22, 32, 6, 250, 47, 14, 22, 32, 6, 225, 46,
- 14, 22, 32, 6, 227, 67, 14, 22, 32, 230, 39, 14, 22, 32, 3, 254, 52, 14,
- 22, 32, 3, 251, 203, 14, 22, 32, 3, 243, 83, 14, 22, 32, 3, 248, 5, 14,
- 22, 32, 3, 245, 63, 14, 22, 32, 3, 212, 78, 14, 22, 32, 3, 245, 28, 14,
- 22, 32, 3, 217, 132, 14, 22, 32, 3, 235, 183, 14, 22, 32, 3, 234, 227,
- 14, 22, 32, 3, 233, 122, 14, 22, 32, 3, 230, 172, 14, 22, 32, 3, 228, 92,
- 14, 22, 32, 3, 213, 145, 14, 22, 32, 3, 227, 65, 14, 22, 32, 3, 225, 240,
- 14, 22, 32, 3, 223, 190, 14, 22, 32, 3, 40, 220, 103, 14, 22, 32, 3, 220,
- 103, 14, 22, 32, 3, 217, 248, 14, 22, 32, 3, 215, 128, 14, 22, 32, 3,
- 226, 9, 14, 22, 32, 3, 250, 47, 14, 22, 32, 3, 225, 46, 14, 22, 32, 3,
- 227, 67, 14, 22, 32, 226, 125, 247, 185, 14, 22, 32, 245, 64, 87, 14, 22,
- 32, 217, 133, 87, 14, 22, 32, 234, 228, 87, 14, 22, 32, 226, 10, 87, 14,
- 22, 32, 223, 191, 87, 14, 22, 32, 225, 241, 87, 14, 35, 22, 6, 254, 52,
- 14, 35, 22, 6, 251, 203, 14, 35, 22, 6, 243, 83, 14, 35, 22, 6, 248, 5,
- 14, 35, 22, 6, 245, 63, 14, 35, 22, 6, 212, 78, 14, 35, 22, 6, 245, 28,
- 14, 35, 22, 6, 217, 132, 14, 35, 22, 6, 235, 183, 14, 35, 22, 6, 234,
- 227, 14, 35, 22, 6, 233, 122, 14, 35, 22, 6, 230, 172, 14, 35, 22, 6,
- 228, 92, 14, 35, 22, 6, 213, 145, 14, 35, 22, 6, 227, 65, 14, 35, 22, 6,
- 225, 240, 14, 35, 22, 6, 223, 190, 14, 35, 22, 6, 217, 133, 87, 14, 35,
- 22, 6, 220, 103, 14, 35, 22, 6, 217, 248, 14, 35, 22, 6, 215, 128, 14,
- 35, 22, 6, 226, 9, 14, 35, 22, 6, 250, 47, 14, 35, 22, 6, 225, 46, 14,
- 35, 22, 6, 227, 67, 14, 35, 22, 230, 39, 14, 35, 22, 3, 254, 52, 14, 35,
- 22, 3, 251, 203, 14, 35, 22, 3, 243, 83, 14, 35, 22, 3, 248, 5, 14, 35,
- 22, 3, 245, 63, 14, 35, 22, 3, 212, 78, 14, 35, 22, 3, 245, 28, 14, 35,
- 22, 3, 217, 132, 14, 35, 22, 3, 235, 183, 14, 35, 22, 3, 234, 227, 14,
- 35, 22, 3, 233, 122, 14, 35, 22, 3, 230, 172, 14, 35, 22, 3, 228, 92, 14,
- 35, 22, 3, 213, 145, 14, 35, 22, 3, 227, 65, 14, 35, 22, 3, 225, 240, 14,
- 35, 22, 3, 223, 190, 14, 35, 22, 3, 40, 220, 103, 14, 35, 22, 3, 220,
- 103, 14, 35, 22, 3, 217, 248, 14, 35, 22, 3, 215, 128, 14, 35, 22, 3,
- 226, 9, 14, 35, 22, 3, 250, 47, 14, 35, 22, 3, 225, 46, 14, 35, 22, 3,
- 227, 67, 14, 35, 22, 226, 125, 247, 185, 14, 35, 22, 245, 64, 87, 14, 35,
- 22, 217, 133, 87, 14, 35, 22, 234, 228, 87, 14, 35, 22, 226, 10, 87, 14,
- 35, 22, 223, 191, 87, 14, 35, 22, 225, 241, 87, 14, 35, 22, 32, 6, 254,
- 52, 14, 35, 22, 32, 6, 251, 203, 14, 35, 22, 32, 6, 243, 83, 14, 35, 22,
- 32, 6, 248, 5, 14, 35, 22, 32, 6, 245, 63, 14, 35, 22, 32, 6, 212, 78,
- 14, 35, 22, 32, 6, 245, 28, 14, 35, 22, 32, 6, 217, 132, 14, 35, 22, 32,
- 6, 235, 183, 14, 35, 22, 32, 6, 234, 227, 14, 35, 22, 32, 6, 233, 122,
- 14, 35, 22, 32, 6, 230, 172, 14, 35, 22, 32, 6, 228, 92, 14, 35, 22, 32,
- 6, 213, 145, 14, 35, 22, 32, 6, 227, 65, 14, 35, 22, 32, 6, 225, 240, 14,
- 35, 22, 32, 6, 223, 190, 14, 35, 22, 32, 6, 217, 133, 87, 14, 35, 22, 32,
- 6, 220, 103, 14, 35, 22, 32, 6, 217, 248, 14, 35, 22, 32, 6, 215, 128,
- 14, 35, 22, 32, 6, 226, 9, 14, 35, 22, 32, 6, 250, 47, 14, 35, 22, 32, 6,
- 225, 46, 14, 35, 22, 32, 6, 227, 67, 14, 35, 22, 32, 230, 39, 14, 35, 22,
- 32, 3, 254, 52, 14, 35, 22, 32, 3, 251, 203, 14, 35, 22, 32, 3, 243, 83,
- 14, 35, 22, 32, 3, 248, 5, 14, 35, 22, 32, 3, 245, 63, 14, 35, 22, 32, 3,
- 212, 78, 14, 35, 22, 32, 3, 245, 28, 14, 35, 22, 32, 3, 217, 132, 14, 35,
- 22, 32, 3, 235, 183, 14, 35, 22, 32, 3, 234, 227, 14, 35, 22, 32, 3, 233,
- 122, 14, 35, 22, 32, 3, 230, 172, 14, 35, 22, 32, 3, 228, 92, 14, 35, 22,
- 32, 3, 213, 145, 14, 35, 22, 32, 3, 227, 65, 14, 35, 22, 32, 3, 225, 240,
- 14, 35, 22, 32, 3, 223, 190, 14, 35, 22, 32, 3, 40, 220, 103, 14, 35, 22,
- 32, 3, 220, 103, 14, 35, 22, 32, 3, 217, 248, 14, 35, 22, 32, 3, 215,
- 128, 14, 35, 22, 32, 3, 226, 9, 14, 35, 22, 32, 3, 250, 47, 14, 35, 22,
- 32, 3, 225, 46, 14, 35, 22, 32, 3, 227, 67, 14, 35, 22, 32, 226, 125,
- 247, 185, 14, 35, 22, 32, 245, 64, 87, 14, 35, 22, 32, 217, 133, 87, 14,
- 35, 22, 32, 234, 228, 87, 14, 35, 22, 32, 226, 10, 87, 14, 35, 22, 32,
- 223, 191, 87, 14, 35, 22, 32, 225, 241, 87, 14, 22, 6, 247, 179, 14, 22,
- 3, 247, 179, 14, 22, 21, 212, 79, 14, 22, 21, 116, 14, 22, 21, 109, 14,
- 22, 21, 166, 14, 22, 21, 163, 14, 22, 21, 180, 14, 22, 21, 189, 14, 22,
- 21, 198, 14, 22, 21, 195, 14, 22, 21, 200, 14, 187, 21, 212, 79, 14, 187,
- 21, 116, 14, 187, 21, 109, 14, 187, 21, 166, 14, 187, 21, 163, 14, 187,
- 21, 180, 14, 187, 21, 189, 14, 187, 21, 198, 14, 187, 21, 195, 14, 187,
- 21, 200, 14, 35, 21, 212, 79, 14, 35, 21, 116, 14, 35, 21, 109, 14, 35,
- 21, 166, 14, 35, 21, 163, 14, 35, 21, 180, 14, 35, 21, 189, 14, 35, 21,
- 198, 14, 35, 21, 195, 14, 35, 21, 200, 14, 35, 22, 21, 212, 79, 14, 35,
- 22, 21, 116, 14, 35, 22, 21, 109, 14, 35, 22, 21, 166, 14, 35, 22, 21,
- 163, 14, 35, 22, 21, 180, 14, 35, 22, 21, 189, 14, 35, 22, 21, 198, 14,
- 35, 22, 21, 195, 14, 35, 22, 21, 200, 14, 230, 208, 21, 212, 79, 14, 230,
- 208, 21, 116, 14, 230, 208, 21, 109, 14, 230, 208, 21, 166, 14, 230, 208,
- 21, 163, 14, 230, 208, 21, 180, 14, 230, 208, 21, 189, 14, 230, 208, 21,
- 198, 14, 230, 208, 21, 195, 14, 230, 208, 21, 200, 232, 10, 85, 245, 176,
- 213, 224, 232, 10, 85, 219, 215, 213, 224, 232, 10, 85, 213, 250, 213,
- 224, 232, 10, 85, 228, 167, 213, 224, 232, 10, 85, 224, 4, 246, 50, 232,
- 10, 85, 242, 104, 246, 50, 232, 10, 85, 67, 246, 50, 232, 10, 85, 122,
- 65, 250, 77, 232, 10, 85, 117, 65, 250, 77, 232, 10, 85, 133, 65, 250,
- 77, 232, 10, 85, 243, 237, 65, 250, 77, 232, 10, 85, 244, 50, 65, 250,
- 77, 232, 10, 85, 220, 53, 65, 250, 77, 232, 10, 85, 221, 43, 65, 250, 77,
- 232, 10, 85, 245, 150, 65, 250, 77, 232, 10, 85, 229, 31, 65, 250, 77,
- 232, 10, 85, 122, 65, 252, 72, 232, 10, 85, 117, 65, 252, 72, 232, 10,
- 85, 133, 65, 252, 72, 232, 10, 85, 243, 237, 65, 252, 72, 232, 10, 85,
- 244, 50, 65, 252, 72, 232, 10, 85, 220, 53, 65, 252, 72, 232, 10, 85,
- 221, 43, 65, 252, 72, 232, 10, 85, 245, 150, 65, 252, 72, 232, 10, 85,
- 229, 31, 65, 252, 72, 232, 10, 85, 122, 65, 249, 227, 232, 10, 85, 117,
- 65, 249, 227, 232, 10, 85, 133, 65, 249, 227, 232, 10, 85, 243, 237, 65,
- 249, 227, 232, 10, 85, 244, 50, 65, 249, 227, 232, 10, 85, 220, 53, 65,
- 249, 227, 232, 10, 85, 221, 43, 65, 249, 227, 232, 10, 85, 245, 150, 65,
- 249, 227, 232, 10, 85, 229, 31, 65, 249, 227, 232, 10, 85, 225, 159, 232,
- 10, 85, 227, 22, 232, 10, 85, 252, 73, 232, 10, 85, 250, 7, 232, 10, 85,
- 219, 171, 232, 10, 85, 218, 240, 232, 10, 85, 253, 95, 232, 10, 85, 213,
- 217, 232, 10, 85, 235, 65, 232, 10, 85, 252, 101, 127, 85, 199, 252, 101,
- 127, 85, 241, 30, 127, 85, 241, 29, 127, 85, 241, 28, 127, 85, 241, 27,
- 127, 85, 241, 26, 127, 85, 241, 25, 127, 85, 241, 24, 127, 85, 241, 23,
- 127, 85, 241, 22, 127, 85, 241, 21, 127, 85, 241, 20, 127, 85, 241, 19,
- 127, 85, 241, 18, 127, 85, 241, 17, 127, 85, 241, 16, 127, 85, 241, 15,
- 127, 85, 241, 14, 127, 85, 241, 13, 127, 85, 241, 12, 127, 85, 241, 11,
- 127, 85, 241, 10, 127, 85, 241, 9, 127, 85, 241, 8, 127, 85, 241, 7, 127,
- 85, 241, 6, 127, 85, 241, 5, 127, 85, 241, 4, 127, 85, 241, 3, 127, 85,
- 241, 2, 127, 85, 241, 1, 127, 85, 241, 0, 127, 85, 240, 255, 127, 85,
- 240, 254, 127, 85, 240, 253, 127, 85, 240, 252, 127, 85, 240, 251, 127,
- 85, 240, 250, 127, 85, 240, 249, 127, 85, 240, 248, 127, 85, 240, 247,
- 127, 85, 240, 246, 127, 85, 240, 245, 127, 85, 240, 244, 127, 85, 240,
- 243, 127, 85, 240, 242, 127, 85, 240, 241, 127, 85, 240, 240, 127, 85,
- 240, 239, 127, 85, 240, 238, 127, 85, 71, 252, 101, 127, 85, 214, 215,
- 127, 85, 214, 214, 127, 85, 214, 213, 127, 85, 214, 212, 127, 85, 214,
- 211, 127, 85, 214, 210, 127, 85, 214, 209, 127, 85, 214, 208, 127, 85,
- 214, 207, 127, 85, 214, 206, 127, 85, 214, 205, 127, 85, 214, 204, 127,
- 85, 214, 203, 127, 85, 214, 202, 127, 85, 214, 201, 127, 85, 214, 200,
- 127, 85, 214, 199, 127, 85, 214, 198, 127, 85, 214, 197, 127, 85, 214,
- 196, 127, 85, 214, 195, 127, 85, 214, 194, 127, 85, 214, 193, 127, 85,
- 214, 192, 127, 85, 214, 191, 127, 85, 214, 190, 127, 85, 214, 189, 127,
- 85, 214, 188, 127, 85, 214, 187, 127, 85, 214, 186, 127, 85, 214, 185,
- 127, 85, 214, 184, 127, 85, 214, 183, 127, 85, 214, 182, 127, 85, 214,
- 181, 127, 85, 214, 180, 127, 85, 214, 179, 127, 85, 214, 178, 127, 85,
- 214, 177, 127, 85, 214, 176, 127, 85, 214, 175, 127, 85, 214, 174, 127,
- 85, 214, 173, 127, 85, 214, 172, 127, 85, 214, 171, 127, 85, 214, 170,
- 127, 85, 214, 169, 127, 85, 214, 168, 127, 85, 214, 167, 225, 165, 250,
- 175, 252, 101, 225, 165, 250, 175, 254, 169, 65, 219, 203, 225, 165, 250,
- 175, 117, 65, 219, 203, 225, 165, 250, 175, 133, 65, 219, 203, 225, 165,
- 250, 175, 243, 237, 65, 219, 203, 225, 165, 250, 175, 244, 50, 65, 219,
- 203, 225, 165, 250, 175, 220, 53, 65, 219, 203, 225, 165, 250, 175, 221,
- 43, 65, 219, 203, 225, 165, 250, 175, 245, 150, 65, 219, 203, 225, 165,
- 250, 175, 229, 31, 65, 219, 203, 225, 165, 250, 175, 217, 201, 65, 219,
- 203, 225, 165, 250, 175, 235, 137, 65, 219, 203, 225, 165, 250, 175, 234,
- 40, 65, 219, 203, 225, 165, 250, 175, 224, 160, 65, 219, 203, 225, 165,
- 250, 175, 234, 88, 65, 219, 203, 225, 165, 250, 175, 254, 169, 65, 241,
- 209, 225, 165, 250, 175, 117, 65, 241, 209, 225, 165, 250, 175, 133, 65,
- 241, 209, 225, 165, 250, 175, 243, 237, 65, 241, 209, 225, 165, 250, 175,
- 244, 50, 65, 241, 209, 225, 165, 250, 175, 220, 53, 65, 241, 209, 225,
- 165, 250, 175, 221, 43, 65, 241, 209, 225, 165, 250, 175, 245, 150, 65,
- 241, 209, 225, 165, 250, 175, 229, 31, 65, 241, 209, 225, 165, 250, 175,
- 217, 201, 65, 241, 209, 225, 165, 250, 175, 235, 137, 65, 241, 209, 225,
- 165, 250, 175, 234, 40, 65, 241, 209, 225, 165, 250, 175, 224, 160, 65,
- 241, 209, 225, 165, 250, 175, 234, 88, 65, 241, 209, 225, 165, 250, 175,
- 254, 169, 65, 247, 199, 225, 165, 250, 175, 117, 65, 247, 199, 225, 165,
- 250, 175, 133, 65, 247, 199, 225, 165, 250, 175, 243, 237, 65, 247, 199,
- 225, 165, 250, 175, 244, 50, 65, 247, 199, 225, 165, 250, 175, 220, 53,
- 65, 247, 199, 225, 165, 250, 175, 221, 43, 65, 247, 199, 225, 165, 250,
- 175, 245, 150, 65, 247, 199, 225, 165, 250, 175, 229, 31, 65, 247, 199,
- 225, 165, 250, 175, 217, 201, 65, 247, 199, 225, 165, 250, 175, 235, 137,
- 65, 247, 199, 225, 165, 250, 175, 234, 40, 65, 247, 199, 225, 165, 250,
- 175, 224, 160, 65, 247, 199, 225, 165, 250, 175, 234, 88, 65, 247, 199,
- 225, 165, 250, 175, 83, 235, 65, 225, 165, 250, 175, 254, 169, 65, 249,
- 179, 225, 165, 250, 175, 117, 65, 249, 179, 225, 165, 250, 175, 133, 65,
- 249, 179, 225, 165, 250, 175, 243, 237, 65, 249, 179, 225, 165, 250, 175,
- 244, 50, 65, 249, 179, 225, 165, 250, 175, 220, 53, 65, 249, 179, 225,
- 165, 250, 175, 221, 43, 65, 249, 179, 225, 165, 250, 175, 245, 150, 65,
- 249, 179, 225, 165, 250, 175, 229, 31, 65, 249, 179, 225, 165, 250, 175,
- 217, 201, 65, 249, 179, 225, 165, 250, 175, 235, 137, 65, 249, 179, 225,
- 165, 250, 175, 234, 40, 65, 249, 179, 225, 165, 250, 175, 224, 160, 65,
- 249, 179, 225, 165, 250, 175, 234, 88, 65, 249, 179, 225, 165, 250, 175,
- 67, 235, 65, 21, 212, 80, 243, 200, 219, 69, 21, 212, 80, 249, 157, 21,
- 122, 249, 157, 21, 117, 249, 157, 21, 133, 249, 157, 21, 243, 237, 249,
- 157, 21, 244, 50, 249, 157, 21, 220, 53, 249, 157, 21, 221, 43, 249, 157,
- 21, 245, 150, 249, 157, 21, 229, 31, 249, 157, 86, 7, 6, 1, 61, 86, 7, 6,
- 1, 253, 74, 86, 7, 6, 1, 250, 252, 86, 7, 6, 1, 249, 3, 86, 7, 6, 1, 74,
- 86, 7, 6, 1, 244, 230, 86, 7, 6, 1, 243, 177, 86, 7, 6, 1, 242, 41, 86,
- 7, 6, 1, 72, 86, 7, 6, 1, 235, 142, 86, 7, 6, 1, 235, 27, 86, 7, 6, 1,
- 150, 86, 7, 6, 1, 183, 86, 7, 6, 1, 204, 86, 7, 6, 1, 75, 86, 7, 6, 1,
- 226, 229, 86, 7, 6, 1, 224, 240, 86, 7, 6, 1, 149, 86, 7, 6, 1, 197, 86,
- 7, 6, 1, 218, 99, 86, 7, 6, 1, 69, 86, 7, 6, 1, 215, 79, 86, 7, 6, 1,
- 214, 82, 86, 7, 6, 1, 213, 166, 86, 7, 6, 1, 213, 105, 86, 7, 6, 1, 212,
- 152, 216, 219, 220, 233, 251, 84, 7, 6, 1, 197, 36, 32, 7, 6, 1, 250,
- 252, 36, 32, 7, 6, 1, 149, 36, 250, 125, 36, 213, 168, 91, 7, 6, 1, 61,
- 91, 7, 6, 1, 253, 74, 91, 7, 6, 1, 250, 252, 91, 7, 6, 1, 249, 3, 91, 7,
- 6, 1, 74, 91, 7, 6, 1, 244, 230, 91, 7, 6, 1, 243, 177, 91, 7, 6, 1, 242,
- 41, 91, 7, 6, 1, 72, 91, 7, 6, 1, 235, 142, 91, 7, 6, 1, 235, 27, 91, 7,
- 6, 1, 150, 91, 7, 6, 1, 183, 91, 7, 6, 1, 204, 91, 7, 6, 1, 75, 91, 7, 6,
- 1, 226, 229, 91, 7, 6, 1, 224, 240, 91, 7, 6, 1, 149, 91, 7, 6, 1, 197,
- 91, 7, 6, 1, 218, 99, 91, 7, 6, 1, 69, 91, 7, 6, 1, 215, 79, 91, 7, 6, 1,
- 214, 82, 91, 7, 6, 1, 213, 166, 91, 7, 6, 1, 213, 105, 91, 7, 6, 1, 212,
- 152, 91, 240, 193, 91, 230, 120, 91, 222, 102, 91, 219, 158, 91, 225, 98,
- 91, 214, 7, 146, 36, 7, 6, 1, 61, 146, 36, 7, 6, 1, 253, 74, 146, 36, 7,
- 6, 1, 250, 252, 146, 36, 7, 6, 1, 249, 3, 146, 36, 7, 6, 1, 74, 146, 36,
- 7, 6, 1, 244, 230, 146, 36, 7, 6, 1, 243, 177, 146, 36, 7, 6, 1, 242, 41,
- 146, 36, 7, 6, 1, 72, 146, 36, 7, 6, 1, 235, 142, 146, 36, 7, 6, 1, 235,
- 27, 146, 36, 7, 6, 1, 150, 146, 36, 7, 6, 1, 183, 146, 36, 7, 6, 1, 204,
- 146, 36, 7, 6, 1, 75, 146, 36, 7, 6, 1, 226, 229, 146, 36, 7, 6, 1, 224,
- 240, 146, 36, 7, 6, 1, 149, 146, 36, 7, 6, 1, 197, 146, 36, 7, 6, 1, 218,
- 99, 146, 36, 7, 6, 1, 69, 146, 36, 7, 6, 1, 215, 79, 146, 36, 7, 6, 1,
- 214, 82, 146, 36, 7, 6, 1, 213, 166, 146, 36, 7, 6, 1, 213, 105, 146, 36,
- 7, 6, 1, 212, 152, 146, 91, 7, 6, 1, 61, 146, 91, 7, 6, 1, 253, 74, 146,
- 91, 7, 6, 1, 250, 252, 146, 91, 7, 6, 1, 249, 3, 146, 91, 7, 6, 1, 74,
- 146, 91, 7, 6, 1, 244, 230, 146, 91, 7, 6, 1, 243, 177, 146, 91, 7, 6, 1,
- 242, 41, 146, 91, 7, 6, 1, 72, 146, 91, 7, 6, 1, 235, 142, 146, 91, 7, 6,
- 1, 235, 27, 146, 91, 7, 6, 1, 150, 146, 91, 7, 6, 1, 183, 146, 91, 7, 6,
- 1, 204, 146, 91, 7, 6, 1, 75, 146, 91, 7, 6, 1, 226, 229, 146, 91, 7, 6,
- 1, 224, 240, 146, 91, 7, 6, 1, 149, 146, 91, 7, 6, 1, 197, 146, 91, 7, 6,
- 1, 218, 99, 146, 91, 7, 6, 1, 69, 146, 91, 7, 6, 1, 215, 79, 146, 91, 7,
- 6, 1, 214, 82, 146, 91, 7, 6, 1, 213, 166, 146, 91, 7, 6, 1, 213, 105,
- 146, 91, 7, 6, 1, 212, 152, 249, 68, 146, 91, 7, 6, 1, 226, 229, 146, 91,
- 240, 106, 146, 91, 193, 146, 91, 222, 202, 146, 91, 254, 185, 146, 91,
- 214, 7, 41, 247, 116, 91, 249, 216, 91, 249, 109, 91, 243, 222, 91, 240,
- 98, 91, 229, 168, 91, 229, 161, 91, 227, 80, 91, 219, 222, 91, 114, 2,
- 244, 254, 77, 91, 214, 100, 223, 253, 235, 236, 16, 1, 61, 223, 253, 235,
- 236, 16, 1, 253, 74, 223, 253, 235, 236, 16, 1, 250, 252, 223, 253, 235,
- 236, 16, 1, 249, 3, 223, 253, 235, 236, 16, 1, 74, 223, 253, 235, 236,
- 16, 1, 244, 230, 223, 253, 235, 236, 16, 1, 243, 177, 223, 253, 235, 236,
- 16, 1, 242, 41, 223, 253, 235, 236, 16, 1, 72, 223, 253, 235, 236, 16, 1,
- 235, 142, 223, 253, 235, 236, 16, 1, 235, 27, 223, 253, 235, 236, 16, 1,
- 150, 223, 253, 235, 236, 16, 1, 183, 223, 253, 235, 236, 16, 1, 204, 223,
- 253, 235, 236, 16, 1, 75, 223, 253, 235, 236, 16, 1, 226, 229, 223, 253,
- 235, 236, 16, 1, 224, 240, 223, 253, 235, 236, 16, 1, 149, 223, 253, 235,
- 236, 16, 1, 197, 223, 253, 235, 236, 16, 1, 218, 99, 223, 253, 235, 236,
- 16, 1, 69, 223, 253, 235, 236, 16, 1, 215, 79, 223, 253, 235, 236, 16, 1,
- 214, 82, 223, 253, 235, 236, 16, 1, 213, 166, 223, 253, 235, 236, 16, 1,
- 213, 105, 223, 253, 235, 236, 16, 1, 212, 152, 41, 142, 241, 49, 91, 56,
- 234, 27, 91, 56, 222, 202, 91, 9, 215, 148, 238, 43, 91, 9, 215, 148,
- 238, 47, 91, 9, 215, 148, 238, 55, 91, 56, 248, 41, 91, 9, 215, 148, 238,
- 62, 91, 9, 215, 148, 238, 49, 91, 9, 215, 148, 238, 21, 91, 9, 215, 148,
- 238, 48, 91, 9, 215, 148, 238, 61, 91, 9, 215, 148, 238, 35, 91, 9, 215,
- 148, 238, 28, 91, 9, 215, 148, 238, 37, 91, 9, 215, 148, 238, 58, 91, 9,
- 215, 148, 238, 44, 91, 9, 215, 148, 238, 60, 91, 9, 215, 148, 238, 36,
- 91, 9, 215, 148, 238, 59, 91, 9, 215, 148, 238, 22, 91, 9, 215, 148, 238,
- 27, 91, 9, 215, 148, 238, 20, 91, 9, 215, 148, 238, 50, 91, 9, 215, 148,
- 238, 52, 91, 9, 215, 148, 238, 30, 91, 9, 215, 148, 238, 41, 91, 9, 215,
- 148, 238, 39, 91, 9, 215, 148, 238, 65, 91, 9, 215, 148, 238, 64, 91, 9,
- 215, 148, 238, 18, 91, 9, 215, 148, 238, 45, 91, 9, 215, 148, 238, 63,
- 91, 9, 215, 148, 238, 54, 91, 9, 215, 148, 238, 40, 91, 9, 215, 148, 238,
- 19, 91, 9, 215, 148, 238, 42, 91, 9, 215, 148, 238, 24, 91, 9, 215, 148,
- 238, 23, 91, 9, 215, 148, 238, 53, 91, 9, 215, 148, 238, 31, 91, 9, 215,
- 148, 238, 33, 91, 9, 215, 148, 238, 34, 91, 9, 215, 148, 238, 26, 91, 9,
- 215, 148, 238, 57, 91, 9, 215, 148, 238, 51, 216, 219, 220, 233, 251, 84,
- 9, 215, 148, 238, 32, 216, 219, 220, 233, 251, 84, 9, 215, 148, 238, 64,
- 216, 219, 220, 233, 251, 84, 9, 215, 148, 238, 62, 216, 219, 220, 233,
- 251, 84, 9, 215, 148, 238, 46, 216, 219, 220, 233, 251, 84, 9, 215, 148,
- 238, 29, 216, 219, 220, 233, 251, 84, 9, 215, 148, 238, 42, 216, 219,
- 220, 233, 251, 84, 9, 215, 148, 238, 25, 216, 219, 220, 233, 251, 84, 9,
- 215, 148, 238, 56, 216, 219, 220, 233, 251, 84, 9, 215, 148, 238, 38, 36,
- 143, 254, 150, 36, 143, 254, 172, 249, 14, 244, 11, 249, 193, 215, 164,
- 229, 44, 2, 219, 92, 218, 233, 110, 230, 184, 218, 232, 249, 219, 253,
- 123, 246, 9, 218, 231, 110, 251, 47, 224, 49, 251, 68, 253, 123, 229, 43,
- 214, 25, 214, 19, 214, 112, 231, 8, 214, 9, 245, 180, 242, 157, 245, 12,
- 245, 180, 242, 157, 254, 37, 245, 180, 242, 157, 253, 140, 242, 157, 2,
- 231, 115, 156, 230, 199, 87, 214, 11, 249, 77, 230, 199, 87, 244, 61,
- 224, 167, 230, 199, 87, 214, 11, 242, 186, 230, 199, 87, 243, 200, 230,
- 199, 87, 214, 36, 242, 186, 230, 199, 87, 233, 103, 224, 167, 230, 199,
- 87, 214, 36, 249, 77, 230, 199, 87, 249, 77, 230, 198, 156, 230, 199, 2,
- 244, 158, 244, 61, 224, 167, 230, 199, 2, 244, 158, 233, 103, 224, 167,
- 230, 199, 2, 244, 158, 243, 200, 230, 199, 2, 244, 158, 218, 239, 2, 244,
- 158, 242, 155, 219, 95, 220, 179, 219, 95, 250, 53, 222, 87, 245, 6, 216,
- 193, 248, 35, 216, 193, 226, 186, 216, 193, 250, 213, 216, 73, 250, 55,
- 251, 133, 223, 93, 241, 164, 218, 236, 251, 133, 245, 184, 65, 232, 0,
- 245, 184, 65, 223, 184, 241, 188, 243, 237, 233, 78, 249, 183, 231, 233,
- 233, 77, 244, 144, 233, 77, 233, 78, 244, 16, 235, 252, 213, 224, 230,
- 128, 216, 245, 253, 107, 242, 119, 231, 131, 214, 23, 218, 8, 233, 50,
- 252, 68, 225, 194, 224, 4, 253, 223, 242, 104, 253, 223, 226, 92, 226,
- 93, 250, 56, 219, 54, 242, 6, 220, 18, 65, 225, 176, 231, 152, 227, 63,
- 251, 119, 225, 109, 233, 60, 223, 185, 249, 82, 223, 185, 252, 78, 249,
- 112, 223, 184, 249, 36, 24, 223, 184, 219, 81, 251, 93, 219, 202, 251,
- 78, 243, 221, 243, 217, 223, 108, 218, 191, 225, 111, 248, 120, 227, 101,
- 218, 208, 243, 218, 220, 155, 244, 60, 250, 209, 2, 218, 184, 247, 242,
- 219, 236, 240, 105, 249, 81, 220, 250, 240, 104, 240, 105, 249, 81, 246,
- 62, 249, 111, 250, 21, 134, 250, 186, 232, 194, 249, 30, 241, 41, 225,
- 113, 220, 164, 251, 213, 251, 89, 225, 114, 65, 244, 2, 249, 110, 243,
- 249, 24, 234, 41, 217, 227, 213, 216, 241, 252, 222, 183, 251, 103, 24,
- 249, 43, 213, 222, 242, 160, 249, 172, 242, 160, 216, 151, 246, 45, 251,
- 238, 230, 163, 249, 200, 251, 238, 230, 162, 252, 104, 251, 102, 223,
- 186, 213, 189, 225, 75, 251, 158, 250, 208, 235, 136, 250, 14, 216, 193,
- 244, 130, 250, 13, 244, 63, 244, 64, 219, 200, 252, 77, 226, 122, 225,
- 124, 249, 143, 252, 78, 218, 10, 216, 193, 249, 68, 244, 36, 225, 195,
- 248, 32, 235, 131, 247, 85, 250, 164, 219, 53, 213, 225, 250, 35, 230,
- 199, 214, 144, 250, 96, 222, 117, 222, 141, 242, 124, 250, 183, 250, 165,
- 240, 232, 244, 99, 213, 241, 223, 102, 249, 173, 244, 55, 225, 136, 24,
- 244, 59, 231, 40, 230, 178, 250, 198, 249, 232, 241, 216, 253, 156, 226,
- 189, 216, 227, 241, 234, 249, 222, 217, 195, 217, 67, 249, 213, 251, 125,
- 226, 52, 253, 155, 214, 150, 243, 86, 247, 149, 241, 142, 220, 12, 232,
- 39, 251, 168, 243, 87, 247, 192, 251, 92, 244, 21, 225, 165, 250, 173,
- 27, 228, 158, 230, 155, 27, 228, 153, 222, 130, 242, 80, 27, 234, 143,
- 216, 148, 214, 135, 27, 222, 111, 223, 35, 220, 191, 2, 222, 143, 217,
- 197, 224, 68, 24, 252, 78, 220, 33, 24, 220, 33, 251, 112, 252, 43, 24,
- 241, 36, 250, 57, 244, 42, 219, 247, 223, 36, 218, 212, 216, 152, 240,
- 233, 224, 69, 254, 38, 244, 0, 223, 47, 244, 0, 218, 186, 240, 222, 251,
- 48, 240, 222, 2, 243, 70, 227, 95, 251, 48, 235, 131, 225, 119, 227, 94,
- 245, 11, 225, 119, 227, 94, 240, 231, 252, 64, 253, 97, 217, 205, 232,
- 39, 240, 227, 232, 166, 240, 227, 249, 115, 219, 65, 222, 116, 247, 250,
- 219, 65, 244, 148, 235, 147, 233, 113, 235, 131, 250, 158, 245, 11, 250,
- 158, 224, 33, 230, 182, 226, 238, 214, 25, 251, 52, 249, 84, 217, 60,
- 233, 42, 224, 70, 250, 156, 246, 50, 249, 75, 213, 244, 219, 254, 219,
- 252, 240, 232, 224, 45, 242, 146, 220, 237, 230, 215, 223, 96, 250, 45,
- 247, 90, 225, 205, 251, 126, 245, 126, 227, 103, 219, 184, 220, 232, 251,
- 51, 254, 3, 241, 40, 233, 144, 251, 236, 244, 59, 216, 151, 244, 59, 251,
- 132, 216, 55, 241, 232, 250, 46, 252, 104, 250, 46, 243, 212, 252, 104,
- 250, 46, 251, 160, 226, 70, 234, 35, 225, 128, 246, 42, 250, 199, 252,
- 95, 250, 199, 247, 84, 230, 183, 244, 158, 249, 85, 244, 158, 217, 61,
- 244, 158, 224, 71, 244, 158, 250, 157, 244, 158, 246, 51, 244, 158, 219,
- 173, 213, 244, 240, 233, 244, 158, 230, 216, 244, 158, 247, 91, 244, 158,
- 225, 206, 244, 158, 243, 215, 244, 158, 242, 3, 244, 158, 213, 211, 244,
- 158, 251, 247, 244, 158, 226, 172, 244, 158, 225, 206, 228, 164, 226,
- 106, 225, 67, 244, 237, 245, 183, 228, 164, 230, 180, 216, 232, 67, 114,
- 225, 141, 252, 99, 235, 239, 67, 119, 225, 141, 252, 99, 235, 239, 67,
- 42, 225, 141, 252, 99, 235, 239, 67, 46, 225, 141, 252, 99, 235, 239,
- 244, 53, 241, 255, 52, 214, 17, 241, 255, 52, 227, 81, 241, 255, 52, 217,
- 89, 114, 52, 217, 89, 119, 52, 249, 212, 241, 250, 52, 227, 40, 241, 250,
- 52, 249, 63, 213, 207, 241, 234, 244, 238, 229, 185, 218, 98, 235, 126,
- 246, 47, 234, 91, 251, 170, 213, 207, 249, 186, 225, 14, 241, 253, 225,
- 110, 231, 240, 220, 184, 253, 119, 220, 184, 241, 150, 220, 184, 213,
- 207, 222, 156, 213, 207, 251, 111, 243, 254, 251, 19, 235, 252, 220, 95,
- 251, 18, 235, 252, 220, 95, 251, 88, 242, 170, 231, 248, 213, 208, 244,
- 142, 231, 249, 24, 213, 209, 241, 46, 241, 249, 117, 231, 123, 241, 46,
- 241, 249, 117, 213, 206, 241, 46, 241, 249, 225, 133, 227, 93, 213, 209,
- 2, 251, 35, 245, 181, 251, 69, 2, 214, 223, 226, 44, 2, 251, 135, 242,
- 16, 231, 249, 2, 242, 89, 225, 241, 231, 237, 231, 249, 2, 216, 61, 227,
- 74, 231, 248, 227, 74, 213, 208, 252, 103, 249, 129, 213, 192, 225, 70,
- 235, 131, 227, 89, 235, 131, 242, 145, 242, 198, 252, 104, 254, 22, 244,
- 242, 254, 69, 254, 70, 230, 206, 236, 1, 220, 28, 235, 229, 247, 241,
- 226, 43, 242, 86, 248, 124, 232, 230, 230, 30, 225, 132, 244, 159, 231,
- 205, 242, 15, 252, 58, 225, 135, 218, 117, 225, 198, 234, 73, 77, 232,
- 166, 233, 34, 223, 130, 243, 30, 219, 71, 234, 72, 251, 97, 249, 87, 2,
- 241, 211, 214, 3, 251, 245, 241, 211, 251, 63, 241, 211, 117, 241, 209,
- 219, 198, 241, 211, 242, 98, 241, 211, 241, 212, 2, 68, 251, 131, 241,
- 211, 242, 104, 241, 211, 213, 33, 241, 211, 225, 15, 241, 211, 241, 212,
- 2, 223, 186, 223, 197, 241, 209, 241, 212, 248, 32, 247, 201, 221, 5, 2,
- 118, 62, 235, 212, 245, 129, 177, 251, 45, 254, 21, 87, 251, 120, 220,
- 20, 87, 249, 166, 87, 219, 178, 218, 193, 87, 246, 40, 248, 102, 87, 225,
- 199, 65, 225, 129, 244, 30, 251, 181, 247, 117, 87, 219, 191, 252, 77,
- 217, 102, 252, 77, 67, 244, 20, 240, 201, 225, 139, 87, 230, 219, 252,
- 90, 249, 39, 244, 255, 107, 247, 86, 52, 249, 79, 250, 174, 252, 63, 2,
- 213, 31, 52, 252, 63, 2, 247, 86, 52, 252, 63, 2, 245, 14, 52, 252, 63,
- 2, 225, 108, 52, 230, 219, 2, 213, 220, 250, 74, 2, 215, 124, 216, 189,
- 24, 213, 31, 52, 222, 97, 226, 42, 249, 147, 251, 67, 230, 255, 244, 25,
- 247, 137, 227, 27, 247, 142, 246, 4, 244, 76, 244, 9, 227, 40, 244, 76,
- 244, 9, 226, 201, 2, 249, 41, 226, 201, 244, 151, 215, 134, 250, 204,
- 217, 226, 250, 204, 250, 175, 235, 239, 250, 74, 2, 215, 124, 216, 188,
- 250, 74, 2, 246, 58, 216, 188, 252, 60, 250, 73, 249, 199, 225, 10, 223,
- 87, 225, 10, 226, 147, 219, 61, 223, 42, 216, 180, 223, 42, 251, 116,
- 218, 39, 233, 75, 228, 156, 228, 157, 2, 248, 31, 249, 86, 249, 193, 251,
- 117, 227, 40, 251, 117, 242, 104, 251, 117, 251, 131, 251, 117, 227, 23,
- 251, 117, 251, 114, 230, 25, 252, 93, 222, 105, 231, 124, 217, 210, 224,
- 16, 226, 199, 244, 127, 232, 39, 222, 140, 254, 0, 225, 31, 254, 157,
- 232, 168, 250, 63, 231, 136, 226, 253, 216, 196, 235, 248, 216, 196, 226,
- 206, 245, 236, 87, 235, 245, 245, 78, 245, 79, 2, 246, 58, 76, 49, 249,
- 193, 232, 6, 2, 232, 162, 244, 42, 249, 193, 232, 6, 2, 224, 48, 244, 42,
- 227, 40, 232, 6, 2, 224, 48, 244, 42, 227, 40, 232, 6, 2, 232, 162, 244,
- 42, 225, 116, 225, 117, 240, 235, 229, 166, 230, 229, 225, 249, 230, 229,
- 225, 250, 2, 95, 76, 253, 123, 233, 70, 214, 153, 230, 228, 230, 229,
- 225, 250, 227, 96, 228, 186, 230, 229, 225, 248, 254, 1, 2, 252, 49, 250,
- 198, 214, 150, 250, 198, 217, 207, 224, 63, 214, 149, 216, 25, 95, 253,
- 162, 249, 195, 95, 24, 132, 227, 40, 249, 229, 253, 162, 249, 195, 95,
- 24, 132, 227, 40, 249, 229, 253, 163, 2, 36, 122, 226, 244, 249, 195,
- 246, 58, 24, 215, 124, 227, 40, 249, 229, 253, 162, 253, 255, 246, 58,
- 24, 215, 124, 227, 40, 249, 229, 253, 162, 115, 251, 66, 87, 124, 251,
- 66, 87, 219, 195, 2, 250, 192, 90, 219, 194, 219, 195, 2, 122, 219, 218,
- 214, 19, 219, 195, 2, 133, 219, 218, 214, 18, 252, 35, 245, 129, 225,
- 161, 233, 66, 232, 16, 242, 160, 223, 144, 232, 16, 242, 160, 232, 204,
- 2, 235, 222, 226, 74, 249, 193, 232, 204, 2, 234, 144, 234, 144, 232,
- 203, 227, 40, 232, 203, 251, 221, 251, 222, 2, 250, 192, 90, 251, 115,
- 232, 233, 87, 224, 64, 251, 15, 252, 102, 2, 132, 76, 49, 245, 101, 2,
- 132, 76, 49, 227, 63, 2, 244, 254, 152, 2, 42, 46, 76, 49, 219, 225, 2,
- 95, 76, 49, 216, 227, 2, 215, 124, 76, 49, 228, 186, 122, 215, 154, 245,
- 148, 87, 234, 142, 217, 200, 235, 216, 16, 31, 7, 6, 233, 33, 235, 216,
- 16, 31, 7, 3, 233, 33, 235, 216, 16, 31, 228, 55, 235, 216, 16, 31, 218,
- 128, 235, 216, 16, 31, 7, 233, 33, 244, 65, 245, 129, 216, 222, 213, 187,
- 242, 4, 228, 38, 24, 251, 121, 241, 52, 225, 182, 231, 39, 217, 208, 249,
- 54, 252, 78, 220, 53, 225, 143, 219, 96, 2, 231, 37, 247, 74, 235, 131,
- 16, 31, 251, 233, 216, 178, 245, 114, 83, 41, 251, 15, 67, 41, 251, 15,
- 233, 108, 224, 4, 249, 228, 233, 108, 251, 131, 249, 228, 233, 108, 227,
- 23, 247, 200, 233, 108, 251, 131, 247, 200, 3, 227, 23, 247, 200, 3, 251,
- 131, 247, 200, 215, 133, 224, 4, 216, 183, 246, 59, 224, 4, 216, 183,
- 215, 133, 3, 224, 4, 216, 183, 246, 59, 3, 224, 4, 216, 183, 249, 197,
- 244, 159, 122, 227, 106, 249, 197, 244, 159, 117, 227, 106, 249, 197,
- 244, 159, 133, 227, 106, 249, 197, 244, 159, 243, 237, 227, 106, 249,
- 197, 244, 159, 244, 50, 227, 106, 249, 197, 244, 159, 220, 53, 227, 106,
- 249, 197, 244, 159, 221, 43, 227, 106, 249, 197, 244, 159, 245, 150, 227,
- 106, 249, 197, 244, 159, 229, 31, 227, 106, 249, 197, 244, 159, 217, 201,
- 227, 106, 249, 197, 244, 159, 245, 125, 227, 106, 249, 197, 244, 159,
- 216, 42, 227, 106, 249, 197, 244, 159, 227, 58, 249, 197, 244, 159, 216,
- 22, 249, 197, 244, 159, 217, 94, 249, 197, 244, 159, 243, 233, 249, 197,
- 244, 159, 244, 48, 249, 197, 244, 159, 220, 49, 249, 197, 244, 159, 221,
- 42, 249, 197, 244, 159, 245, 149, 249, 197, 244, 159, 229, 30, 249, 197,
- 244, 159, 217, 199, 249, 197, 244, 159, 245, 123, 249, 197, 244, 159,
- 216, 40, 230, 187, 243, 201, 216, 247, 216, 215, 219, 88, 65, 233, 11,
- 220, 96, 65, 235, 132, 230, 176, 242, 102, 244, 159, 2, 220, 2, 244, 237,
- 244, 159, 2, 217, 222, 65, 235, 56, 220, 2, 244, 159, 2, 227, 40, 230,
- 180, 220, 2, 244, 159, 2, 227, 40, 230, 181, 24, 220, 2, 244, 237, 220,
- 2, 244, 159, 2, 227, 40, 230, 181, 24, 249, 168, 218, 192, 220, 2, 244,
- 159, 2, 227, 40, 230, 181, 24, 217, 58, 244, 237, 220, 2, 244, 159, 2,
- 242, 8, 220, 2, 244, 159, 2, 240, 234, 213, 218, 244, 158, 220, 2, 244,
- 159, 2, 220, 2, 244, 237, 244, 159, 222, 135, 248, 13, 244, 2, 223, 238,
- 244, 158, 220, 2, 244, 159, 2, 241, 210, 244, 237, 220, 2, 244, 159, 2,
- 218, 234, 220, 1, 244, 158, 229, 169, 244, 158, 215, 158, 244, 158, 244,
- 159, 2, 249, 168, 218, 192, 226, 67, 244, 158, 249, 141, 244, 158, 244,
- 159, 217, 91, 118, 234, 72, 234, 71, 244, 159, 2, 249, 193, 244, 237,
- 244, 159, 2, 219, 31, 216, 233, 24, 213, 218, 244, 239, 244, 159, 2, 219,
- 31, 216, 233, 24, 217, 58, 244, 237, 247, 144, 244, 158, 254, 17, 244,
- 158, 225, 107, 244, 158, 249, 56, 244, 158, 226, 46, 244, 158, 244, 159,
- 2, 232, 179, 65, 216, 162, 247, 144, 251, 17, 223, 238, 244, 158, 244,
- 121, 244, 158, 214, 4, 244, 158, 220, 19, 244, 158, 217, 24, 244, 158,
- 232, 169, 249, 56, 244, 158, 244, 159, 2, 227, 40, 230, 181, 24, 249,
- 168, 218, 192, 244, 159, 222, 109, 235, 252, 244, 122, 253, 129, 244,
- 158, 244, 18, 244, 158, 247, 117, 244, 158, 244, 159, 213, 216, 230, 180,
- 244, 159, 2, 231, 149, 231, 207, 242, 102, 250, 157, 244, 159, 2, 220, 2,
- 244, 237, 250, 157, 244, 159, 2, 217, 222, 65, 235, 56, 220, 2, 250, 157,
- 244, 159, 2, 227, 40, 230, 180, 220, 2, 250, 157, 244, 159, 2, 241, 210,
- 244, 237, 250, 157, 244, 159, 2, 213, 184, 220, 3, 234, 71, 250, 157,
- 244, 159, 2, 249, 193, 244, 237, 225, 107, 250, 157, 244, 158, 249, 56,
- 250, 157, 244, 158, 214, 4, 250, 157, 244, 158, 244, 159, 2, 228, 186,
- 242, 139, 243, 10, 244, 159, 2, 227, 81, 243, 10, 226, 44, 251, 94, 248,
- 26, 222, 88, 230, 215, 241, 213, 230, 215, 219, 196, 230, 215, 241, 244,
- 226, 44, 224, 47, 122, 241, 254, 226, 44, 224, 47, 251, 104, 241, 250,
- 235, 252, 250, 113, 226, 44, 243, 208, 226, 44, 2, 225, 107, 244, 158,
- 226, 44, 2, 244, 10, 241, 249, 223, 104, 241, 198, 219, 83, 232, 202,
- 224, 53, 250, 176, 241, 148, 216, 205, 241, 148, 216, 206, 2, 251, 43,
- 228, 164, 216, 205, 231, 99, 177, 224, 54, 219, 89, 216, 203, 216, 204,
- 250, 176, 251, 21, 227, 60, 251, 21, 216, 159, 251, 22, 219, 69, 231, 0,
- 254, 39, 244, 66, 245, 95, 225, 133, 250, 176, 227, 60, 225, 133, 250,
- 176, 217, 239, 227, 60, 217, 239, 253, 96, 227, 60, 253, 96, 224, 11,
- 214, 224, 248, 9, 216, 150, 253, 157, 232, 172, 216, 211, 230, 209, 230,
- 186, 224, 52, 218, 207, 224, 52, 230, 186, 250, 214, 254, 134, 216, 202,
- 220, 196, 223, 84, 219, 189, 199, 216, 209, 233, 2, 71, 216, 209, 233, 2,
- 249, 129, 52, 225, 133, 250, 161, 223, 197, 233, 2, 216, 180, 244, 43,
- 227, 63, 225, 118, 247, 77, 228, 186, 245, 84, 52, 220, 0, 87, 228, 186,
- 220, 0, 87, 225, 9, 232, 222, 235, 252, 235, 155, 225, 173, 87, 247, 100,
- 228, 163, 232, 222, 87, 225, 112, 214, 25, 87, 228, 177, 214, 25, 87,
- 251, 180, 228, 186, 251, 179, 251, 178, 230, 186, 251, 178, 226, 88, 228,
- 186, 226, 87, 250, 37, 249, 64, 231, 120, 87, 213, 205, 87, 223, 211,
- 252, 104, 87, 216, 248, 214, 25, 249, 190, 220, 158, 252, 38, 252, 36,
- 226, 115, 249, 116, 249, 28, 252, 87, 249, 215, 42, 232, 148, 104, 16,
- 31, 224, 148, 104, 16, 31, 254, 100, 104, 16, 31, 244, 65, 104, 16, 31,
- 245, 179, 104, 16, 31, 214, 24, 104, 16, 31, 253, 213, 104, 16, 31, 253,
- 214, 223, 255, 104, 16, 31, 253, 214, 223, 254, 104, 16, 31, 253, 214,
- 214, 124, 104, 16, 31, 253, 214, 214, 123, 104, 16, 31, 214, 138, 104,
- 16, 31, 214, 137, 104, 16, 31, 214, 136, 104, 16, 31, 218, 245, 104, 16,
- 31, 226, 1, 218, 245, 104, 16, 31, 83, 218, 245, 104, 16, 31, 231, 119,
- 219, 16, 104, 16, 31, 231, 119, 219, 15, 104, 16, 31, 231, 119, 219, 14,
- 104, 16, 31, 249, 231, 104, 16, 31, 222, 172, 104, 16, 31, 229, 19, 104,
- 16, 31, 214, 122, 104, 16, 31, 214, 121, 104, 16, 31, 223, 105, 222, 172,
- 104, 16, 31, 223, 105, 222, 171, 104, 16, 31, 242, 142, 104, 16, 31, 220,
- 92, 104, 16, 31, 235, 175, 227, 20, 104, 16, 31, 235, 175, 227, 19, 104,
- 16, 31, 249, 74, 65, 235, 174, 104, 16, 31, 223, 251, 65, 235, 174, 104,
- 16, 31, 249, 107, 227, 20, 104, 16, 31, 235, 173, 227, 20, 104, 16, 31,
- 219, 17, 65, 249, 106, 104, 16, 31, 249, 74, 65, 249, 106, 104, 16, 31,
- 249, 74, 65, 249, 105, 104, 16, 31, 249, 107, 253, 250, 104, 16, 31, 222,
- 173, 65, 249, 107, 253, 250, 104, 16, 31, 219, 17, 65, 222, 173, 65, 249,
- 106, 104, 16, 31, 214, 220, 104, 16, 31, 217, 37, 227, 20, 104, 16, 31,
- 233, 81, 227, 20, 104, 16, 31, 253, 249, 227, 20, 104, 16, 31, 219, 17,
- 65, 253, 248, 104, 16, 31, 222, 173, 65, 253, 248, 104, 16, 31, 219, 17,
- 65, 222, 173, 65, 253, 248, 104, 16, 31, 214, 139, 65, 253, 248, 104, 16,
- 31, 223, 251, 65, 253, 248, 104, 16, 31, 223, 251, 65, 253, 247, 104, 16,
- 31, 223, 250, 104, 16, 31, 223, 249, 104, 16, 31, 223, 248, 104, 16, 31,
- 223, 247, 104, 16, 31, 254, 66, 104, 16, 31, 254, 65, 104, 16, 31, 231,
- 226, 104, 16, 31, 222, 178, 104, 16, 31, 253, 161, 104, 16, 31, 224, 18,
- 104, 16, 31, 224, 17, 104, 16, 31, 253, 99, 104, 16, 31, 251, 152, 227,
- 20, 104, 16, 31, 218, 0, 104, 16, 31, 217, 255, 104, 16, 31, 224, 153,
- 232, 251, 104, 16, 31, 251, 109, 104, 16, 31, 251, 108, 104, 16, 31, 251,
- 107, 104, 16, 31, 254, 47, 104, 16, 31, 227, 84, 104, 16, 31, 219, 180,
- 104, 16, 31, 217, 35, 104, 16, 31, 242, 77, 104, 16, 31, 214, 12, 104,
- 16, 31, 225, 106, 104, 16, 31, 250, 202, 104, 16, 31, 216, 50, 104, 16,
- 31, 250, 178, 230, 192, 104, 16, 31, 222, 120, 65, 235, 58, 104, 16, 31,
- 250, 211, 104, 16, 31, 216, 177, 104, 16, 31, 219, 93, 216, 177, 104, 16,
- 31, 232, 201, 104, 16, 31, 219, 240, 104, 16, 31, 215, 113, 104, 16, 31,
- 240, 233, 246, 19, 104, 16, 31, 253, 142, 104, 16, 31, 225, 114, 253,
- 142, 104, 16, 31, 251, 70, 104, 16, 31, 225, 105, 251, 70, 104, 16, 31,
- 254, 44, 104, 16, 31, 219, 57, 218, 226, 219, 56, 104, 16, 31, 219, 57,
- 218, 226, 219, 55, 104, 16, 31, 219, 13, 104, 16, 31, 225, 80, 104, 16,
- 31, 247, 133, 104, 16, 31, 247, 135, 104, 16, 31, 247, 134, 104, 16, 31,
- 225, 17, 104, 16, 31, 225, 7, 104, 16, 31, 249, 62, 104, 16, 31, 249, 61,
- 104, 16, 31, 249, 60, 104, 16, 31, 249, 59, 104, 16, 31, 249, 58, 104,
- 16, 31, 254, 77, 104, 16, 31, 252, 39, 65, 231, 212, 104, 16, 31, 252,
- 39, 65, 214, 249, 104, 16, 31, 223, 209, 104, 16, 31, 240, 225, 104, 16,
- 31, 229, 43, 104, 16, 31, 248, 91, 104, 16, 31, 230, 204, 104, 16, 31,
- 151, 246, 49, 104, 16, 31, 151, 227, 0, 9, 13, 240, 95, 9, 13, 240, 94,
- 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, 240, 90, 9, 13,
- 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, 9, 13, 240, 85,
- 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, 240, 81, 9, 13,
- 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, 9, 13, 240, 76,
- 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, 240, 72, 9, 13,
- 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, 9, 13, 240, 67,
- 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, 240, 63, 9, 13,
- 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, 9, 13, 240, 58,
- 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, 240, 54, 9, 13,
- 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, 9, 13, 240, 49,
- 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, 240, 45, 9, 13,
- 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, 9, 13, 240, 40,
- 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, 240, 36, 9, 13,
- 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, 9, 13, 240, 31,
- 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 9, 13, 240, 27, 9, 13,
- 240, 26, 9, 13, 240, 25, 9, 13, 240, 24, 9, 13, 240, 23, 9, 13, 240, 22,
- 9, 13, 240, 21, 9, 13, 240, 20, 9, 13, 240, 19, 9, 13, 240, 18, 9, 13,
- 240, 17, 9, 13, 240, 16, 9, 13, 240, 15, 9, 13, 240, 14, 9, 13, 240, 13,
- 9, 13, 240, 12, 9, 13, 240, 11, 9, 13, 240, 10, 9, 13, 240, 9, 9, 13,
- 240, 8, 9, 13, 240, 7, 9, 13, 240, 6, 9, 13, 240, 5, 9, 13, 240, 4, 9,
- 13, 240, 3, 9, 13, 240, 2, 9, 13, 240, 1, 9, 13, 240, 0, 9, 13, 239, 255,
- 9, 13, 239, 254, 9, 13, 239, 253, 9, 13, 239, 252, 9, 13, 239, 251, 9,
- 13, 239, 250, 9, 13, 239, 249, 9, 13, 239, 248, 9, 13, 239, 247, 9, 13,
- 239, 246, 9, 13, 239, 245, 9, 13, 239, 244, 9, 13, 239, 243, 9, 13, 239,
- 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, 9, 13, 239, 238,
- 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, 13, 239, 234, 9,
- 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, 239, 230, 9, 13,
- 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, 226, 9, 13, 239,
- 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, 9, 13, 239, 221,
- 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, 13, 239, 217, 9,
- 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, 239, 213, 9, 13,
- 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, 209, 9, 13, 239,
- 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, 9, 13, 239, 204,
- 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, 13, 239, 200, 9,
- 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, 239, 196, 9, 13,
- 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, 192, 9, 13, 239,
- 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, 9, 13, 239, 187,
- 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, 13, 239, 183, 9,
- 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, 239, 179, 9, 13,
- 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, 175, 9, 13, 239,
- 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, 9, 13, 239, 170,
- 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, 13, 239, 166, 9,
- 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, 239, 162, 9, 13,
- 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, 158, 9, 13, 239,
- 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, 9, 13, 239, 153,
- 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, 13, 239, 149, 9,
- 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, 239, 145, 9, 13,
- 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, 141, 9, 13, 239,
- 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, 9, 13, 239, 136,
- 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, 13, 239, 132, 9,
- 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, 239, 128, 9, 13,
- 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, 124, 9, 13, 239,
- 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, 9, 13, 239, 119,
- 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, 13, 239, 115, 9,
- 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, 239, 111, 9, 13,
- 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, 107, 9, 13, 239,
- 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, 9, 13, 239, 102,
- 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, 239, 98, 9, 13,
- 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, 9, 13, 239, 93,
- 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, 239, 89, 9, 13,
- 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, 9, 13, 239, 84,
- 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, 239, 80, 9, 13,
- 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, 9, 13, 239, 75,
- 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, 239, 71, 9, 13,
- 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, 9, 13, 239, 66,
- 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, 239, 62, 9, 13,
- 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, 9, 13, 239, 57,
- 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, 239, 53, 9, 13,
- 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, 9, 13, 239, 48,
- 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, 239, 44, 9, 13,
- 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, 9, 13, 239, 39,
- 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, 239, 35, 9, 13,
- 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, 9, 13, 239, 30,
- 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, 239, 26, 9, 13,
- 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, 9, 13, 239, 21,
- 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, 239, 17, 9, 13,
- 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, 9, 13, 239, 12,
- 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, 239, 8, 9, 13, 239,
- 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, 13, 239, 3, 9, 13,
- 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, 9, 13, 238, 254,
- 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, 13, 238, 250, 9,
- 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, 238, 246, 9, 13,
- 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, 242, 9, 13, 238,
- 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, 9, 13, 238, 237,
- 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, 13, 238, 233, 9,
- 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, 238, 229, 9, 13,
- 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, 225, 9, 13, 238,
- 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, 9, 13, 238, 220,
- 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, 13, 238, 216, 9,
- 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, 238, 212, 9, 13,
- 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, 208, 9, 13, 238,
- 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, 9, 13, 238, 203,
- 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, 13, 238, 199, 9,
- 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, 238, 195, 9, 13,
- 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, 191, 9, 13, 238,
- 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, 9, 13, 238, 186,
- 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, 13, 238, 182, 9,
- 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, 238, 178, 9, 13,
- 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, 174, 9, 13, 238,
- 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, 9, 13, 238, 169,
- 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, 13, 238, 165, 9,
- 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, 238, 161, 9, 13,
- 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, 157, 9, 13, 238,
- 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, 9, 13, 238, 152,
- 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, 13, 238, 148, 9,
- 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, 238, 144, 9, 13,
- 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, 140, 9, 13, 238,
- 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, 9, 13, 238, 135,
- 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, 13, 238, 131, 9,
- 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, 238, 127, 9, 13,
- 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, 123, 9, 13, 238,
- 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, 9, 13, 238, 118,
- 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, 13, 238, 114, 9,
- 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, 238, 110, 9, 13,
- 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, 106, 9, 13, 238,
- 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, 9, 13, 238, 101,
- 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, 238, 97, 9, 13,
- 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, 9, 13, 238, 92,
- 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, 238, 88, 9, 13,
- 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, 9, 13, 238, 83,
- 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, 238, 79, 9, 13,
- 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, 9, 13, 238, 74,
- 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, 238, 70, 9, 13,
- 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, 233, 114, 218,
- 33, 126, 219, 206, 126, 244, 254, 77, 126, 224, 143, 77, 126, 50, 52,
- 126, 247, 86, 52, 126, 226, 57, 52, 126, 254, 35, 126, 253, 226, 126, 42,
- 226, 131, 126, 46, 226, 131, 126, 253, 132, 126, 94, 52, 126, 249, 157,
- 126, 240, 159, 126, 243, 200, 219, 69, 126, 219, 231, 126, 21, 212, 79,
- 126, 21, 116, 126, 21, 109, 126, 21, 166, 126, 21, 163, 126, 21, 180,
- 126, 21, 189, 126, 21, 198, 126, 21, 195, 126, 21, 200, 126, 249, 164,
- 126, 221, 70, 126, 233, 39, 52, 126, 245, 61, 52, 126, 242, 107, 52, 126,
- 224, 158, 77, 126, 249, 156, 253, 122, 126, 7, 6, 1, 61, 126, 7, 6, 1,
- 253, 74, 126, 7, 6, 1, 250, 252, 126, 7, 6, 1, 249, 3, 126, 7, 6, 1, 74,
- 126, 7, 6, 1, 244, 230, 126, 7, 6, 1, 243, 177, 126, 7, 6, 1, 242, 41,
- 126, 7, 6, 1, 72, 126, 7, 6, 1, 235, 142, 126, 7, 6, 1, 235, 27, 126, 7,
- 6, 1, 150, 126, 7, 6, 1, 183, 126, 7, 6, 1, 204, 126, 7, 6, 1, 75, 126,
- 7, 6, 1, 226, 229, 126, 7, 6, 1, 224, 240, 126, 7, 6, 1, 149, 126, 7, 6,
- 1, 197, 126, 7, 6, 1, 218, 99, 126, 7, 6, 1, 69, 126, 7, 6, 1, 215, 79,
- 126, 7, 6, 1, 214, 82, 126, 7, 6, 1, 213, 166, 126, 7, 6, 1, 213, 105,
- 126, 7, 6, 1, 212, 152, 126, 42, 41, 125, 126, 223, 203, 219, 231, 126,
- 46, 41, 125, 126, 249, 224, 254, 174, 126, 115, 232, 242, 126, 242, 114,
- 254, 174, 126, 7, 3, 1, 61, 126, 7, 3, 1, 253, 74, 126, 7, 3, 1, 250,
- 252, 126, 7, 3, 1, 249, 3, 126, 7, 3, 1, 74, 126, 7, 3, 1, 244, 230, 126,
- 7, 3, 1, 243, 177, 126, 7, 3, 1, 242, 41, 126, 7, 3, 1, 72, 126, 7, 3, 1,
- 235, 142, 126, 7, 3, 1, 235, 27, 126, 7, 3, 1, 150, 126, 7, 3, 1, 183,
- 126, 7, 3, 1, 204, 126, 7, 3, 1, 75, 126, 7, 3, 1, 226, 229, 126, 7, 3,
- 1, 224, 240, 126, 7, 3, 1, 149, 126, 7, 3, 1, 197, 126, 7, 3, 1, 218, 99,
- 126, 7, 3, 1, 69, 126, 7, 3, 1, 215, 79, 126, 7, 3, 1, 214, 82, 126, 7,
- 3, 1, 213, 166, 126, 7, 3, 1, 213, 105, 126, 7, 3, 1, 212, 152, 126, 42,
- 249, 40, 125, 126, 71, 232, 242, 126, 46, 249, 40, 125, 126, 217, 42,
- 250, 194, 218, 33, 43, 221, 254, 43, 221, 243, 43, 221, 232, 43, 221,
- 220, 43, 221, 209, 43, 221, 198, 43, 221, 187, 43, 221, 176, 43, 221,
- 165, 43, 221, 157, 43, 221, 156, 43, 221, 155, 43, 221, 154, 43, 221,
- 152, 43, 221, 151, 43, 221, 150, 43, 221, 149, 43, 221, 148, 43, 221,
- 147, 43, 221, 146, 43, 221, 145, 43, 221, 144, 43, 221, 143, 43, 221,
- 141, 43, 221, 140, 43, 221, 139, 43, 221, 138, 43, 221, 137, 43, 221,
- 136, 43, 221, 135, 43, 221, 134, 43, 221, 133, 43, 221, 132, 43, 221,
- 130, 43, 221, 129, 43, 221, 128, 43, 221, 127, 43, 221, 126, 43, 221,
- 125, 43, 221, 124, 43, 221, 123, 43, 221, 122, 43, 221, 121, 43, 221,
- 119, 43, 221, 118, 43, 221, 117, 43, 221, 116, 43, 221, 115, 43, 221,
- 114, 43, 221, 113, 43, 221, 112, 43, 221, 111, 43, 221, 110, 43, 221,
- 108, 43, 221, 107, 43, 221, 106, 43, 221, 105, 43, 221, 104, 43, 221,
- 103, 43, 221, 102, 43, 221, 101, 43, 221, 100, 43, 221, 99, 43, 221, 97,
- 43, 221, 96, 43, 221, 95, 43, 221, 94, 43, 221, 93, 43, 221, 92, 43, 221,
- 91, 43, 221, 90, 43, 221, 89, 43, 221, 88, 43, 221, 86, 43, 221, 85, 43,
- 221, 84, 43, 221, 83, 43, 221, 82, 43, 221, 81, 43, 221, 80, 43, 221, 79,
- 43, 221, 78, 43, 221, 77, 43, 222, 74, 43, 222, 73, 43, 222, 72, 43, 222,
- 71, 43, 222, 70, 43, 222, 69, 43, 222, 68, 43, 222, 67, 43, 222, 66, 43,
- 222, 65, 43, 222, 63, 43, 222, 62, 43, 222, 61, 43, 222, 60, 43, 222, 59,
- 43, 222, 58, 43, 222, 57, 43, 222, 56, 43, 222, 55, 43, 222, 54, 43, 222,
- 52, 43, 222, 51, 43, 222, 50, 43, 222, 49, 43, 222, 48, 43, 222, 47, 43,
- 222, 46, 43, 222, 45, 43, 222, 44, 43, 222, 43, 43, 222, 41, 43, 222, 40,
- 43, 222, 39, 43, 222, 38, 43, 222, 37, 43, 222, 36, 43, 222, 35, 43, 222,
- 34, 43, 222, 33, 43, 222, 32, 43, 222, 30, 43, 222, 29, 43, 222, 28, 43,
- 222, 27, 43, 222, 26, 43, 222, 25, 43, 222, 24, 43, 222, 23, 43, 222, 22,
- 43, 222, 21, 43, 222, 19, 43, 222, 18, 43, 222, 17, 43, 222, 16, 43, 222,
- 15, 43, 222, 14, 43, 222, 13, 43, 222, 12, 43, 222, 11, 43, 222, 10, 43,
- 222, 8, 43, 222, 7, 43, 222, 6, 43, 222, 5, 43, 222, 4, 43, 222, 3, 43,
- 222, 2, 43, 222, 1, 43, 222, 0, 43, 221, 255, 43, 221, 253, 43, 221, 252,
- 43, 221, 251, 43, 221, 250, 43, 221, 249, 43, 221, 248, 43, 221, 247, 43,
- 221, 246, 43, 221, 245, 43, 221, 244, 43, 221, 242, 43, 221, 241, 43,
- 221, 240, 43, 221, 239, 43, 221, 238, 43, 221, 237, 43, 221, 236, 43,
- 221, 235, 43, 221, 234, 43, 221, 233, 43, 221, 231, 43, 221, 230, 43,
- 221, 229, 43, 221, 228, 43, 221, 227, 43, 221, 226, 43, 221, 225, 43,
- 221, 224, 43, 221, 223, 43, 221, 222, 43, 221, 219, 43, 221, 218, 43,
- 221, 217, 43, 221, 216, 43, 221, 215, 43, 221, 214, 43, 221, 213, 43,
- 221, 212, 43, 221, 211, 43, 221, 210, 43, 221, 208, 43, 221, 207, 43,
- 221, 206, 43, 221, 205, 43, 221, 204, 43, 221, 203, 43, 221, 202, 43,
- 221, 201, 43, 221, 200, 43, 221, 199, 43, 221, 197, 43, 221, 196, 43,
- 221, 195, 43, 221, 194, 43, 221, 193, 43, 221, 192, 43, 221, 191, 43,
- 221, 190, 43, 221, 189, 43, 221, 188, 43, 221, 186, 43, 221, 185, 43,
- 221, 184, 43, 221, 183, 43, 221, 182, 43, 221, 181, 43, 221, 180, 43,
- 221, 179, 43, 221, 178, 43, 221, 177, 43, 221, 175, 43, 221, 174, 43,
- 221, 173, 43, 221, 172, 43, 221, 171, 43, 221, 170, 43, 221, 169, 43,
- 221, 168, 43, 221, 167, 43, 221, 166, 43, 221, 164, 43, 221, 163, 43,
- 221, 162, 43, 221, 161, 43, 221, 160, 43, 221, 159, 43, 221, 158,
+ 0, 219, 18, 245, 31, 78, 223, 254, 78, 54, 50, 247, 132, 50, 225, 182,
+ 50, 254, 126, 254, 57, 43, 226, 3, 44, 226, 3, 253, 216, 96, 50, 249,
+ 219, 240, 167, 243, 229, 218, 129, 219, 46, 21, 210, 86, 21, 110, 21,
+ 105, 21, 158, 21, 161, 21, 189, 21, 194, 21, 198, 21, 195, 21, 200, 249,
+ 226, 220, 150, 233, 15, 50, 245, 98, 50, 242, 130, 50, 224, 13, 78, 249,
+ 217, 253, 206, 7, 6, 1, 61, 7, 6, 1, 253, 158, 7, 6, 1, 251, 66, 7, 6, 1,
+ 249, 60, 7, 6, 1, 75, 7, 6, 1, 245, 6, 7, 6, 1, 243, 202, 7, 6, 1, 242,
+ 60, 7, 6, 1, 73, 7, 6, 1, 235, 144, 7, 6, 1, 235, 23, 7, 6, 1, 156, 7, 6,
+ 1, 193, 7, 6, 1, 230, 25, 7, 6, 1, 76, 7, 6, 1, 226, 105, 7, 6, 1, 224,
+ 96, 7, 6, 1, 153, 7, 6, 1, 222, 91, 7, 6, 1, 217, 152, 7, 6, 1, 70, 7, 6,
+ 1, 214, 105, 7, 6, 1, 212, 98, 7, 6, 1, 211, 178, 7, 6, 1, 211, 117, 7,
+ 6, 1, 210, 159, 43, 42, 127, 223, 50, 219, 46, 44, 42, 127, 250, 31, 255,
+ 14, 121, 232, 213, 242, 137, 255, 14, 7, 4, 1, 61, 7, 4, 1, 253, 158, 7,
+ 4, 1, 251, 66, 7, 4, 1, 249, 60, 7, 4, 1, 75, 7, 4, 1, 245, 6, 7, 4, 1,
+ 243, 202, 7, 4, 1, 242, 60, 7, 4, 1, 73, 7, 4, 1, 235, 144, 7, 4, 1, 235,
+ 23, 7, 4, 1, 156, 7, 4, 1, 193, 7, 4, 1, 230, 25, 7, 4, 1, 76, 7, 4, 1,
+ 226, 105, 7, 4, 1, 224, 96, 7, 4, 1, 153, 7, 4, 1, 222, 91, 7, 4, 1, 217,
+ 152, 7, 4, 1, 70, 7, 4, 1, 214, 105, 7, 4, 1, 212, 98, 7, 4, 1, 211, 178,
+ 7, 4, 1, 211, 117, 7, 4, 1, 210, 159, 43, 249, 99, 127, 67, 232, 213, 44,
+ 249, 99, 127, 182, 228, 73, 219, 18, 235, 193, 245, 31, 78, 250, 176, 50,
+ 224, 228, 50, 249, 98, 50, 211, 40, 50, 251, 135, 130, 221, 173, 50, 248,
+ 1, 249, 163, 50, 244, 136, 226, 154, 235, 238, 233, 42, 52, 254, 110,
+ 223, 254, 78, 228, 52, 50, 219, 52, 240, 168, 223, 102, 50, 231, 232,
+ 248, 71, 50, 225, 21, 50, 218, 23, 105, 218, 23, 158, 255, 3, 255, 14,
+ 230, 228, 50, 225, 68, 50, 230, 224, 247, 120, 250, 183, 218, 23, 110,
+ 231, 148, 226, 154, 235, 238, 222, 247, 52, 254, 110, 223, 254, 78, 212,
+ 114, 244, 2, 123, 224, 21, 212, 114, 244, 2, 123, 242, 27, 212, 114, 244,
+ 2, 134, 224, 19, 235, 193, 224, 13, 78, 7, 6, 1, 115, 2, 242, 136, 7, 6,
+ 1, 115, 2, 142, 7, 6, 1, 115, 2, 250, 30, 7, 6, 1, 115, 2, 182, 7, 6, 1,
+ 115, 2, 248, 1, 7, 6, 1, 115, 2, 222, 234, 48, 7, 6, 1, 254, 243, 7, 6,
+ 1, 251, 67, 2, 250, 183, 7, 6, 1, 160, 2, 242, 136, 7, 6, 1, 160, 2, 142,
+ 7, 6, 1, 160, 2, 250, 30, 7, 6, 1, 160, 2, 248, 1, 7, 6, 1, 240, 154, 2,
+ 242, 136, 7, 6, 1, 240, 154, 2, 142, 7, 6, 1, 240, 154, 2, 250, 30, 7, 6,
+ 1, 240, 154, 2, 248, 1, 7, 6, 1, 245, 59, 7, 6, 1, 230, 26, 2, 182, 7, 6,
+ 1, 144, 2, 242, 136, 7, 6, 1, 144, 2, 142, 7, 6, 1, 144, 2, 250, 30, 7,
+ 6, 1, 144, 2, 182, 7, 6, 1, 144, 2, 248, 1, 230, 84, 50, 7, 6, 1, 144, 2,
+ 91, 7, 6, 1, 104, 2, 242, 136, 7, 6, 1, 104, 2, 142, 7, 6, 1, 104, 2,
+ 250, 30, 7, 6, 1, 104, 2, 248, 1, 7, 6, 1, 211, 118, 2, 142, 7, 6, 1,
+ 216, 151, 7, 4, 1, 220, 76, 222, 91, 7, 4, 1, 115, 2, 242, 136, 7, 4, 1,
+ 115, 2, 142, 7, 4, 1, 115, 2, 250, 30, 7, 4, 1, 115, 2, 182, 7, 4, 1,
+ 115, 2, 248, 1, 7, 4, 1, 115, 2, 222, 234, 48, 7, 4, 1, 254, 243, 7, 4,
+ 1, 251, 67, 2, 250, 183, 7, 4, 1, 160, 2, 242, 136, 7, 4, 1, 160, 2, 142,
+ 7, 4, 1, 160, 2, 250, 30, 7, 4, 1, 160, 2, 248, 1, 7, 4, 1, 240, 154, 2,
+ 242, 136, 7, 4, 1, 240, 154, 2, 142, 7, 4, 1, 240, 154, 2, 250, 30, 7, 4,
+ 1, 240, 154, 2, 248, 1, 7, 4, 1, 245, 59, 7, 4, 1, 230, 26, 2, 182, 7, 4,
+ 1, 144, 2, 242, 136, 7, 4, 1, 144, 2, 142, 7, 4, 1, 144, 2, 250, 30, 7,
+ 4, 1, 144, 2, 182, 7, 4, 1, 144, 2, 248, 1, 247, 169, 50, 7, 4, 1, 144,
+ 2, 91, 7, 4, 1, 104, 2, 242, 136, 7, 4, 1, 104, 2, 142, 7, 4, 1, 104, 2,
+ 250, 30, 7, 4, 1, 104, 2, 248, 1, 7, 4, 1, 211, 118, 2, 142, 7, 4, 1,
+ 216, 151, 7, 4, 1, 211, 118, 2, 248, 1, 7, 6, 1, 115, 2, 231, 232, 7, 4,
+ 1, 115, 2, 231, 232, 7, 6, 1, 115, 2, 251, 146, 7, 4, 1, 115, 2, 251,
+ 146, 7, 6, 1, 115, 2, 226, 224, 7, 4, 1, 115, 2, 226, 224, 7, 6, 1, 251,
+ 67, 2, 142, 7, 4, 1, 251, 67, 2, 142, 7, 6, 1, 251, 67, 2, 250, 30, 7, 4,
+ 1, 251, 67, 2, 250, 30, 7, 6, 1, 251, 67, 2, 59, 48, 7, 4, 1, 251, 67, 2,
+ 59, 48, 7, 6, 1, 251, 67, 2, 250, 234, 7, 4, 1, 251, 67, 2, 250, 234, 7,
+ 6, 1, 249, 61, 2, 250, 234, 7, 4, 1, 249, 61, 2, 250, 234, 7, 6, 1, 249,
+ 61, 2, 91, 7, 4, 1, 249, 61, 2, 91, 7, 6, 1, 160, 2, 231, 232, 7, 4, 1,
+ 160, 2, 231, 232, 7, 6, 1, 160, 2, 251, 146, 7, 4, 1, 160, 2, 251, 146,
+ 7, 6, 1, 160, 2, 59, 48, 7, 4, 1, 160, 2, 59, 48, 7, 6, 1, 160, 2, 226,
+ 224, 7, 4, 1, 160, 2, 226, 224, 7, 6, 1, 160, 2, 250, 234, 7, 4, 1, 160,
+ 2, 250, 234, 7, 6, 1, 243, 203, 2, 250, 30, 7, 4, 1, 243, 203, 2, 250,
+ 30, 7, 6, 1, 243, 203, 2, 251, 146, 7, 4, 1, 243, 203, 2, 251, 146, 7, 6,
+ 1, 243, 203, 2, 59, 48, 7, 4, 1, 243, 203, 2, 59, 48, 7, 6, 1, 243, 203,
+ 2, 250, 183, 7, 4, 1, 243, 203, 2, 250, 183, 7, 6, 1, 242, 61, 2, 250,
+ 30, 7, 4, 1, 242, 61, 2, 250, 30, 7, 6, 1, 242, 61, 2, 91, 7, 4, 1, 242,
+ 61, 2, 91, 7, 6, 1, 240, 154, 2, 182, 7, 4, 1, 240, 154, 2, 182, 7, 6, 1,
+ 240, 154, 2, 231, 232, 7, 4, 1, 240, 154, 2, 231, 232, 7, 6, 1, 240, 154,
+ 2, 251, 146, 7, 4, 1, 240, 154, 2, 251, 146, 7, 6, 1, 240, 154, 2, 226,
+ 224, 7, 4, 1, 240, 154, 2, 226, 224, 7, 6, 1, 240, 154, 2, 59, 48, 7, 4,
+ 1, 247, 119, 73, 7, 6, 27, 236, 31, 7, 4, 27, 236, 31, 7, 6, 1, 235, 145,
+ 2, 250, 30, 7, 4, 1, 235, 145, 2, 250, 30, 7, 6, 1, 235, 24, 2, 250, 183,
+ 7, 4, 1, 235, 24, 2, 250, 183, 7, 4, 1, 233, 239, 7, 6, 1, 233, 149, 2,
+ 142, 7, 4, 1, 233, 149, 2, 142, 7, 6, 1, 233, 149, 2, 250, 183, 7, 4, 1,
+ 233, 149, 2, 250, 183, 7, 6, 1, 233, 149, 2, 250, 234, 7, 4, 1, 233, 149,
+ 2, 250, 234, 7, 6, 1, 233, 149, 2, 230, 224, 247, 120, 7, 4, 1, 233, 149,
+ 2, 230, 224, 247, 120, 7, 6, 1, 233, 149, 2, 91, 7, 4, 1, 233, 149, 2,
+ 91, 7, 6, 1, 230, 26, 2, 142, 7, 4, 1, 230, 26, 2, 142, 7, 6, 1, 230, 26,
+ 2, 250, 183, 7, 4, 1, 230, 26, 2, 250, 183, 7, 6, 1, 230, 26, 2, 250,
+ 234, 7, 4, 1, 230, 26, 2, 250, 234, 7, 4, 1, 230, 26, 224, 204, 251, 78,
+ 254, 57, 7, 6, 1, 245, 138, 7, 4, 1, 245, 138, 7, 6, 1, 144, 2, 231, 232,
+ 7, 4, 1, 144, 2, 231, 232, 7, 6, 1, 144, 2, 251, 146, 7, 4, 1, 144, 2,
+ 251, 146, 7, 6, 1, 144, 2, 52, 142, 7, 4, 1, 144, 2, 52, 142, 7, 6, 27,
+ 226, 234, 7, 4, 27, 226, 234, 7, 6, 1, 223, 224, 2, 142, 7, 4, 1, 223,
+ 224, 2, 142, 7, 6, 1, 223, 224, 2, 250, 183, 7, 4, 1, 223, 224, 2, 250,
+ 183, 7, 6, 1, 223, 224, 2, 250, 234, 7, 4, 1, 223, 224, 2, 250, 234, 7,
+ 6, 1, 222, 92, 2, 142, 7, 4, 1, 222, 92, 2, 142, 7, 6, 1, 222, 92, 2,
+ 250, 30, 7, 4, 1, 222, 92, 2, 250, 30, 7, 6, 1, 222, 92, 2, 250, 183, 7,
+ 4, 1, 222, 92, 2, 250, 183, 7, 6, 1, 222, 92, 2, 250, 234, 7, 4, 1, 222,
+ 92, 2, 250, 234, 7, 6, 1, 217, 153, 2, 250, 183, 7, 4, 1, 217, 153, 2,
+ 250, 183, 7, 6, 1, 217, 153, 2, 250, 234, 7, 4, 1, 217, 153, 2, 250, 234,
+ 7, 6, 1, 217, 153, 2, 91, 7, 4, 1, 217, 153, 2, 91, 7, 6, 1, 104, 2, 182,
+ 7, 4, 1, 104, 2, 182, 7, 6, 1, 104, 2, 231, 232, 7, 4, 1, 104, 2, 231,
+ 232, 7, 6, 1, 104, 2, 251, 146, 7, 4, 1, 104, 2, 251, 146, 7, 6, 1, 104,
+ 2, 222, 234, 48, 7, 4, 1, 104, 2, 222, 234, 48, 7, 6, 1, 104, 2, 52, 142,
+ 7, 4, 1, 104, 2, 52, 142, 7, 6, 1, 104, 2, 226, 224, 7, 4, 1, 104, 2,
+ 226, 224, 7, 6, 1, 212, 99, 2, 250, 30, 7, 4, 1, 212, 99, 2, 250, 30, 7,
+ 6, 1, 211, 118, 2, 250, 30, 7, 4, 1, 211, 118, 2, 250, 30, 7, 6, 1, 211,
+ 118, 2, 248, 1, 7, 6, 1, 210, 160, 2, 142, 7, 4, 1, 210, 160, 2, 142, 7,
+ 6, 1, 210, 160, 2, 59, 48, 7, 4, 1, 210, 160, 2, 59, 48, 7, 6, 1, 210,
+ 160, 2, 250, 234, 7, 4, 1, 210, 160, 2, 250, 234, 7, 4, 1, 199, 222, 91,
+ 7, 4, 1, 57, 2, 91, 7, 6, 1, 57, 2, 103, 7, 6, 1, 57, 2, 216, 11, 7, 4,
+ 1, 57, 2, 216, 11, 7, 6, 1, 138, 194, 7, 4, 1, 138, 194, 7, 6, 1, 204,
+ 76, 7, 6, 1, 251, 67, 2, 103, 7, 4, 1, 251, 67, 2, 103, 7, 6, 1, 254,
+ 219, 249, 60, 7, 6, 1, 249, 61, 2, 103, 7, 6, 1, 249, 61, 2, 216, 11, 7,
+ 4, 1, 249, 61, 2, 216, 11, 7, 4, 1, 215, 94, 248, 54, 7, 6, 1, 223, 49,
+ 75, 7, 6, 1, 221, 195, 7, 6, 1, 204, 75, 7, 6, 1, 245, 7, 2, 103, 7, 4,
+ 1, 245, 7, 2, 103, 7, 6, 1, 243, 203, 2, 103, 7, 6, 1, 243, 107, 7, 4, 1,
+ 240, 201, 7, 6, 1, 235, 185, 7, 6, 1, 240, 154, 2, 91, 7, 6, 1, 235, 24,
+ 2, 103, 7, 4, 1, 235, 24, 2, 103, 7, 4, 1, 233, 149, 2, 130, 7, 4, 1,
+ 233, 100, 2, 91, 7, 6, 1, 215, 94, 193, 7, 6, 1, 230, 26, 2, 43, 103, 7,
+ 4, 1, 230, 26, 2, 199, 44, 233, 36, 7, 6, 1, 144, 2, 230, 224, 182, 7, 6,
+ 1, 144, 2, 240, 248, 7, 4, 1, 144, 2, 240, 248, 7, 6, 1, 226, 219, 7, 4,
+ 1, 226, 219, 7, 6, 1, 226, 106, 2, 103, 7, 4, 1, 226, 106, 2, 103, 7, 1,
+ 210, 214, 7, 6, 1, 138, 105, 7, 4, 1, 138, 105, 7, 6, 1, 245, 75, 7, 1,
+ 223, 49, 245, 76, 232, 123, 7, 4, 1, 217, 153, 2, 226, 66, 103, 7, 6, 1,
+ 217, 153, 2, 103, 7, 4, 1, 217, 153, 2, 103, 7, 6, 1, 217, 153, 2, 223,
+ 55, 103, 7, 6, 1, 104, 2, 240, 248, 7, 4, 1, 104, 2, 240, 248, 7, 6, 1,
+ 214, 157, 7, 6, 1, 214, 106, 2, 103, 7, 6, 1, 211, 118, 2, 103, 7, 4, 1,
+ 211, 118, 2, 103, 7, 6, 1, 210, 160, 2, 91, 7, 4, 1, 210, 160, 2, 91, 7,
+ 6, 1, 245, 8, 7, 6, 1, 245, 9, 223, 48, 7, 4, 1, 245, 9, 223, 48, 7, 4,
+ 1, 245, 9, 2, 217, 77, 7, 1, 113, 2, 91, 7, 6, 1, 138, 189, 7, 4, 1, 138,
+ 189, 7, 1, 235, 193, 242, 180, 218, 130, 2, 91, 7, 1, 211, 181, 7, 1,
+ 248, 47, 250, 11, 7, 1, 233, 77, 250, 11, 7, 1, 254, 137, 250, 11, 7, 1,
+ 223, 55, 250, 11, 7, 6, 1, 246, 40, 2, 250, 234, 7, 6, 1, 249, 61, 2, 4,
+ 1, 210, 160, 2, 250, 234, 7, 4, 1, 246, 40, 2, 250, 234, 7, 6, 1, 232,
+ 188, 7, 6, 1, 233, 149, 2, 4, 1, 235, 144, 7, 4, 1, 232, 188, 7, 6, 1,
+ 228, 186, 7, 6, 1, 230, 26, 2, 4, 1, 235, 144, 7, 4, 1, 228, 186, 7, 6,
+ 1, 115, 2, 250, 234, 7, 4, 1, 115, 2, 250, 234, 7, 6, 1, 240, 154, 2,
+ 250, 234, 7, 4, 1, 240, 154, 2, 250, 234, 7, 6, 1, 144, 2, 250, 234, 7,
+ 4, 1, 144, 2, 250, 234, 7, 6, 1, 104, 2, 250, 234, 7, 4, 1, 104, 2, 250,
+ 234, 7, 6, 1, 104, 2, 248, 2, 22, 231, 232, 7, 4, 1, 104, 2, 248, 2, 22,
+ 231, 232, 7, 6, 1, 104, 2, 248, 2, 22, 142, 7, 4, 1, 104, 2, 248, 2, 22,
+ 142, 7, 6, 1, 104, 2, 248, 2, 22, 250, 234, 7, 4, 1, 104, 2, 248, 2, 22,
+ 250, 234, 7, 6, 1, 104, 2, 248, 2, 22, 242, 136, 7, 4, 1, 104, 2, 248, 2,
+ 22, 242, 136, 7, 4, 1, 215, 94, 75, 7, 6, 1, 115, 2, 248, 2, 22, 231,
+ 232, 7, 4, 1, 115, 2, 248, 2, 22, 231, 232, 7, 6, 1, 115, 2, 59, 77, 22,
+ 231, 232, 7, 4, 1, 115, 2, 59, 77, 22, 231, 232, 7, 6, 1, 254, 244, 2,
+ 231, 232, 7, 4, 1, 254, 244, 2, 231, 232, 7, 6, 1, 243, 203, 2, 91, 7, 4,
+ 1, 243, 203, 2, 91, 7, 6, 1, 243, 203, 2, 250, 234, 7, 4, 1, 243, 203, 2,
+ 250, 234, 7, 6, 1, 235, 24, 2, 250, 234, 7, 4, 1, 235, 24, 2, 250, 234,
+ 7, 6, 1, 144, 2, 226, 224, 7, 4, 1, 144, 2, 226, 224, 7, 6, 1, 144, 2,
+ 226, 225, 22, 231, 232, 7, 4, 1, 144, 2, 226, 225, 22, 231, 232, 7, 6, 1,
+ 245, 9, 2, 250, 234, 7, 4, 1, 245, 9, 2, 250, 234, 7, 4, 1, 235, 145, 2,
+ 250, 234, 7, 6, 1, 246, 39, 7, 6, 1, 249, 61, 2, 4, 1, 210, 159, 7, 4, 1,
+ 246, 39, 7, 6, 1, 243, 203, 2, 142, 7, 4, 1, 243, 203, 2, 142, 7, 6, 1,
+ 240, 199, 7, 6, 1, 211, 181, 7, 6, 1, 230, 26, 2, 242, 136, 7, 4, 1, 230,
+ 26, 2, 242, 136, 7, 6, 1, 115, 2, 222, 234, 77, 22, 142, 7, 4, 1, 115, 2,
+ 222, 234, 77, 22, 142, 7, 6, 1, 254, 244, 2, 142, 7, 4, 1, 254, 244, 2,
+ 142, 7, 6, 1, 144, 2, 218, 103, 22, 142, 7, 4, 1, 144, 2, 218, 103, 22,
+ 142, 7, 6, 1, 115, 2, 52, 242, 136, 7, 4, 1, 115, 2, 52, 242, 136, 7, 6,
+ 1, 115, 2, 235, 193, 251, 146, 7, 4, 1, 115, 2, 235, 193, 251, 146, 7, 6,
+ 1, 160, 2, 52, 242, 136, 7, 4, 1, 160, 2, 52, 242, 136, 7, 6, 1, 160, 2,
+ 235, 193, 251, 146, 7, 4, 1, 160, 2, 235, 193, 251, 146, 7, 6, 1, 240,
+ 154, 2, 52, 242, 136, 7, 4, 1, 240, 154, 2, 52, 242, 136, 7, 6, 1, 240,
+ 154, 2, 235, 193, 251, 146, 7, 4, 1, 240, 154, 2, 235, 193, 251, 146, 7,
+ 6, 1, 144, 2, 52, 242, 136, 7, 4, 1, 144, 2, 52, 242, 136, 7, 6, 1, 144,
+ 2, 235, 193, 251, 146, 7, 4, 1, 144, 2, 235, 193, 251, 146, 7, 6, 1, 223,
+ 224, 2, 52, 242, 136, 7, 4, 1, 223, 224, 2, 52, 242, 136, 7, 6, 1, 223,
+ 224, 2, 235, 193, 251, 146, 7, 4, 1, 223, 224, 2, 235, 193, 251, 146, 7,
+ 6, 1, 104, 2, 52, 242, 136, 7, 4, 1, 104, 2, 52, 242, 136, 7, 6, 1, 104,
+ 2, 235, 193, 251, 146, 7, 4, 1, 104, 2, 235, 193, 251, 146, 7, 6, 1, 222,
+ 92, 2, 249, 220, 51, 7, 4, 1, 222, 92, 2, 249, 220, 51, 7, 6, 1, 217,
+ 153, 2, 249, 220, 51, 7, 4, 1, 217, 153, 2, 249, 220, 51, 7, 6, 1, 210,
+ 231, 7, 4, 1, 210, 231, 7, 6, 1, 242, 61, 2, 250, 234, 7, 4, 1, 242, 61,
+ 2, 250, 234, 7, 6, 1, 230, 26, 2, 199, 44, 233, 36, 7, 4, 1, 249, 61, 2,
+ 249, 100, 7, 6, 1, 226, 134, 7, 4, 1, 226, 134, 7, 6, 1, 210, 160, 2,
+ 103, 7, 4, 1, 210, 160, 2, 103, 7, 6, 1, 115, 2, 59, 48, 7, 4, 1, 115, 2,
+ 59, 48, 7, 6, 1, 160, 2, 250, 183, 7, 4, 1, 160, 2, 250, 183, 7, 6, 1,
+ 144, 2, 248, 2, 22, 231, 232, 7, 4, 1, 144, 2, 248, 2, 22, 231, 232, 7,
+ 6, 1, 144, 2, 216, 89, 22, 231, 232, 7, 4, 1, 144, 2, 216, 89, 22, 231,
+ 232, 7, 6, 1, 144, 2, 59, 48, 7, 4, 1, 144, 2, 59, 48, 7, 6, 1, 144, 2,
+ 59, 77, 22, 231, 232, 7, 4, 1, 144, 2, 59, 77, 22, 231, 232, 7, 6, 1,
+ 211, 118, 2, 231, 232, 7, 4, 1, 211, 118, 2, 231, 232, 7, 4, 1, 233, 149,
+ 2, 249, 100, 7, 4, 1, 230, 26, 2, 249, 100, 7, 4, 1, 217, 153, 2, 249,
+ 100, 7, 4, 1, 247, 119, 235, 144, 7, 4, 1, 248, 143, 247, 220, 7, 4, 1,
+ 224, 31, 247, 220, 7, 6, 1, 115, 2, 91, 7, 6, 1, 251, 67, 2, 91, 7, 4, 1,
+ 251, 67, 2, 91, 7, 6, 1, 233, 149, 2, 130, 7, 6, 1, 217, 153, 2, 247,
+ 255, 91, 7, 4, 1, 222, 92, 2, 217, 250, 217, 77, 7, 4, 1, 210, 160, 2,
+ 217, 250, 217, 77, 7, 6, 1, 242, 180, 218, 129, 7, 4, 1, 242, 180, 218,
+ 129, 7, 6, 1, 57, 2, 91, 7, 6, 1, 104, 130, 7, 6, 1, 215, 94, 214, 105,
+ 7, 6, 1, 160, 2, 91, 7, 4, 1, 160, 2, 91, 7, 6, 1, 235, 145, 2, 91, 7, 4,
+ 1, 235, 145, 2, 91, 7, 6, 1, 4, 224, 97, 2, 241, 52, 217, 77, 7, 4, 1,
+ 224, 97, 2, 241, 52, 217, 77, 7, 6, 1, 223, 224, 2, 91, 7, 4, 1, 223,
+ 224, 2, 91, 7, 6, 1, 211, 118, 2, 91, 7, 4, 1, 211, 118, 2, 91, 7, 4, 1,
+ 215, 94, 61, 7, 4, 1, 254, 143, 7, 4, 1, 215, 94, 254, 143, 7, 4, 1, 57,
+ 2, 103, 7, 4, 1, 204, 76, 7, 4, 1, 251, 67, 2, 249, 100, 7, 4, 1, 249,
+ 61, 2, 217, 77, 7, 4, 1, 249, 61, 2, 103, 7, 4, 1, 223, 49, 75, 7, 4, 1,
+ 221, 195, 7, 4, 1, 221, 196, 2, 103, 7, 4, 1, 204, 75, 7, 4, 1, 223, 49,
+ 204, 75, 7, 4, 1, 223, 49, 204, 160, 2, 103, 7, 4, 1, 250, 0, 223, 49,
+ 204, 75, 7, 4, 1, 247, 119, 235, 145, 2, 91, 7, 4, 1, 243, 203, 2, 103,
+ 7, 4, 1, 119, 243, 202, 7, 1, 4, 6, 243, 202, 7, 4, 1, 243, 107, 7, 4, 1,
+ 223, 151, 240, 248, 7, 4, 1, 215, 94, 242, 60, 7, 4, 1, 242, 61, 2, 103,
+ 7, 4, 1, 241, 208, 2, 103, 7, 4, 1, 240, 154, 2, 91, 7, 4, 1, 235, 185,
+ 7, 1, 4, 6, 73, 7, 4, 1, 233, 149, 2, 230, 224, 182, 7, 4, 1, 233, 149,
+ 2, 252, 41, 7, 4, 1, 233, 149, 2, 223, 55, 103, 7, 4, 1, 233, 1, 7, 4, 1,
+ 215, 94, 193, 7, 4, 1, 215, 94, 232, 50, 2, 199, 233, 36, 7, 4, 1, 232,
+ 50, 2, 103, 7, 4, 1, 230, 26, 2, 43, 103, 7, 4, 1, 230, 26, 2, 223, 55,
+ 103, 7, 1, 4, 6, 230, 25, 7, 4, 1, 252, 134, 76, 7, 1, 4, 6, 226, 234, 7,
+ 4, 1, 250, 0, 226, 201, 7, 4, 1, 225, 133, 7, 4, 1, 215, 94, 153, 7, 4,
+ 1, 215, 94, 223, 224, 2, 199, 233, 36, 7, 4, 1, 215, 94, 223, 224, 2,
+ 103, 7, 4, 1, 223, 224, 2, 199, 233, 36, 7, 4, 1, 223, 224, 2, 217, 77,
+ 7, 4, 1, 223, 224, 2, 244, 87, 7, 4, 1, 223, 49, 223, 224, 2, 244, 87, 7,
+ 1, 4, 6, 153, 7, 1, 4, 6, 235, 193, 153, 7, 4, 1, 222, 92, 2, 103, 7, 4,
+ 1, 245, 75, 7, 4, 1, 247, 119, 235, 145, 2, 218, 103, 22, 103, 7, 4, 1,
+ 218, 231, 223, 49, 245, 75, 7, 4, 1, 245, 76, 2, 249, 100, 7, 4, 1, 215,
+ 94, 217, 152, 7, 4, 1, 217, 153, 2, 223, 55, 103, 7, 4, 1, 104, 130, 7,
+ 4, 1, 214, 157, 7, 4, 1, 214, 106, 2, 103, 7, 4, 1, 215, 94, 214, 105, 7,
+ 4, 1, 215, 94, 212, 98, 7, 4, 1, 215, 94, 211, 117, 7, 1, 4, 6, 211, 117,
+ 7, 4, 1, 210, 160, 2, 223, 55, 103, 7, 4, 1, 210, 160, 2, 249, 100, 7, 4,
+ 1, 245, 8, 7, 4, 1, 245, 9, 2, 249, 100, 7, 1, 242, 180, 218, 129, 7, 1,
+ 225, 139, 213, 135, 243, 249, 7, 1, 235, 193, 242, 180, 218, 129, 7, 1,
+ 218, 110, 251, 66, 7, 1, 251, 246, 250, 11, 7, 1, 4, 6, 253, 158, 7, 4,
+ 1, 250, 0, 204, 75, 7, 1, 4, 6, 243, 203, 2, 103, 7, 1, 4, 6, 242, 60, 7,
+ 4, 1, 235, 145, 2, 249, 127, 7, 4, 1, 215, 94, 235, 23, 7, 1, 4, 6, 156,
+ 7, 4, 1, 224, 97, 2, 103, 7, 1, 242, 180, 218, 130, 2, 91, 7, 1, 223, 49,
+ 242, 180, 218, 130, 2, 91, 7, 4, 1, 246, 40, 247, 220, 7, 4, 1, 248, 26,
+ 247, 220, 7, 4, 1, 246, 40, 247, 221, 2, 249, 100, 7, 4, 1, 215, 185,
+ 247, 220, 7, 4, 1, 216, 235, 247, 220, 7, 4, 1, 217, 29, 247, 221, 2,
+ 249, 100, 7, 4, 1, 244, 134, 247, 220, 7, 4, 1, 232, 100, 247, 220, 7, 4,
+ 1, 232, 51, 247, 220, 7, 1, 251, 246, 225, 181, 7, 1, 251, 254, 225, 181,
+ 7, 4, 1, 215, 94, 242, 61, 2, 244, 87, 7, 4, 1, 215, 94, 242, 61, 2, 244,
+ 88, 22, 217, 77, 58, 1, 4, 242, 60, 58, 1, 4, 242, 61, 2, 103, 58, 1, 4,
+ 235, 144, 58, 1, 4, 153, 58, 1, 4, 215, 94, 153, 58, 1, 4, 215, 94, 223,
+ 224, 2, 103, 58, 1, 4, 6, 235, 193, 153, 58, 1, 4, 212, 98, 58, 1, 4,
+ 211, 117, 58, 1, 224, 190, 58, 1, 52, 224, 190, 58, 1, 215, 94, 249, 219,
+ 58, 1, 254, 57, 58, 1, 223, 49, 249, 219, 58, 1, 44, 163, 222, 233, 58,
+ 1, 43, 163, 222, 233, 58, 1, 242, 180, 218, 129, 58, 1, 223, 49, 242,
+ 180, 218, 129, 58, 1, 43, 253, 249, 58, 1, 44, 253, 249, 58, 1, 120, 253,
+ 249, 58, 1, 124, 253, 249, 58, 1, 250, 31, 255, 14, 250, 234, 58, 1, 67,
+ 232, 213, 58, 1, 231, 232, 58, 1, 255, 3, 255, 14, 58, 1, 242, 137, 255,
+ 14, 58, 1, 121, 67, 232, 213, 58, 1, 121, 231, 232, 58, 1, 121, 242, 137,
+ 255, 14, 58, 1, 121, 255, 3, 255, 14, 58, 1, 215, 222, 249, 226, 58, 1,
+ 163, 215, 222, 249, 226, 58, 1, 250, 173, 44, 163, 222, 233, 58, 1, 250,
+ 173, 43, 163, 222, 233, 58, 1, 120, 217, 87, 58, 1, 124, 217, 87, 58, 1,
+ 96, 50, 58, 1, 230, 182, 50, 251, 146, 59, 48, 222, 234, 48, 226, 224, 4,
+ 182, 52, 255, 3, 255, 14, 58, 1, 223, 36, 103, 58, 1, 249, 131, 255, 14,
+ 58, 1, 4, 243, 107, 58, 1, 4, 156, 58, 1, 4, 222, 91, 58, 1, 4, 211, 178,
+ 58, 1, 4, 223, 49, 242, 180, 218, 129, 58, 1, 245, 20, 138, 130, 58, 1,
+ 125, 138, 130, 58, 1, 230, 225, 138, 130, 58, 1, 121, 138, 130, 58, 1,
+ 245, 19, 138, 130, 58, 1, 210, 254, 248, 44, 138, 78, 58, 1, 211, 70,
+ 248, 44, 138, 78, 58, 1, 213, 133, 58, 1, 214, 186, 58, 1, 52, 254, 57,
+ 58, 1, 121, 124, 253, 249, 58, 1, 121, 120, 253, 249, 58, 1, 121, 43,
+ 253, 249, 58, 1, 121, 44, 253, 249, 58, 1, 121, 222, 233, 58, 1, 230,
+ 224, 242, 137, 255, 14, 58, 1, 230, 224, 52, 242, 137, 255, 14, 58, 1,
+ 230, 224, 52, 255, 3, 255, 14, 58, 1, 121, 182, 58, 1, 223, 157, 249,
+ 226, 58, 1, 252, 58, 125, 216, 30, 58, 1, 245, 143, 125, 216, 30, 58, 1,
+ 252, 58, 121, 216, 30, 58, 1, 245, 143, 121, 216, 30, 58, 1, 220, 54, 58,
+ 1, 204, 220, 54, 58, 1, 121, 43, 74, 38, 242, 137, 255, 14, 38, 255, 3,
+ 255, 14, 38, 250, 31, 255, 14, 38, 182, 38, 231, 232, 38, 226, 119, 38,
+ 251, 146, 38, 59, 48, 38, 248, 1, 38, 241, 52, 48, 38, 222, 234, 48, 38,
+ 52, 255, 3, 255, 14, 38, 250, 234, 38, 67, 232, 214, 48, 38, 52, 67, 232,
+ 214, 48, 38, 52, 242, 137, 255, 14, 38, 250, 255, 38, 235, 193, 251, 146,
+ 38, 215, 94, 249, 220, 48, 38, 249, 220, 48, 38, 223, 49, 249, 220, 48,
+ 38, 249, 220, 77, 222, 251, 38, 242, 137, 255, 15, 51, 38, 255, 3, 255,
+ 15, 51, 38, 43, 217, 88, 51, 38, 44, 217, 88, 51, 38, 43, 254, 110, 48,
+ 38, 240, 248, 38, 43, 163, 222, 234, 51, 38, 120, 217, 88, 51, 38, 124,
+ 217, 88, 51, 38, 96, 5, 51, 38, 230, 182, 5, 51, 38, 226, 64, 241, 52,
+ 51, 38, 223, 55, 241, 52, 51, 38, 59, 51, 38, 248, 2, 51, 38, 222, 234,
+ 51, 38, 249, 220, 51, 38, 250, 183, 38, 226, 224, 38, 67, 232, 214, 51,
+ 38, 251, 140, 51, 38, 235, 193, 52, 254, 24, 51, 38, 250, 235, 51, 38,
+ 250, 31, 255, 15, 51, 38, 251, 147, 51, 38, 235, 193, 251, 147, 51, 38,
+ 216, 89, 51, 38, 231, 233, 51, 38, 121, 232, 213, 38, 52, 121, 232, 213,
+ 38, 216, 89, 226, 120, 38, 219, 251, 218, 103, 226, 120, 38, 199, 218,
+ 103, 226, 120, 38, 219, 251, 219, 47, 226, 120, 38, 199, 219, 47, 226,
+ 120, 38, 44, 163, 222, 234, 51, 38, 235, 193, 251, 140, 51, 38, 42, 51,
+ 38, 221, 180, 51, 38, 211, 179, 48, 38, 67, 182, 38, 52, 226, 119, 38,
+ 242, 137, 138, 78, 38, 255, 3, 138, 78, 38, 26, 225, 175, 38, 26, 234, 2,
+ 38, 26, 247, 252, 216, 18, 38, 26, 210, 219, 38, 251, 140, 48, 38, 245,
+ 98, 5, 51, 38, 52, 67, 232, 214, 51, 38, 43, 254, 110, 51, 38, 228, 52,
+ 216, 89, 48, 38, 241, 58, 48, 38, 254, 148, 128, 216, 42, 48, 38, 43, 44,
+ 80, 51, 38, 214, 153, 80, 51, 38, 242, 142, 235, 63, 38, 44, 253, 250,
+ 48, 38, 43, 163, 222, 234, 48, 38, 244, 131, 38, 211, 179, 51, 38, 43,
+ 253, 250, 51, 38, 44, 253, 250, 51, 38, 44, 253, 250, 22, 120, 253, 250,
+ 51, 38, 44, 163, 222, 234, 48, 38, 59, 77, 222, 251, 38, 253, 217, 51,
+ 38, 52, 222, 234, 51, 38, 210, 35, 48, 38, 52, 251, 147, 51, 38, 52, 251,
+ 146, 38, 52, 231, 232, 38, 52, 231, 233, 51, 38, 52, 182, 38, 52, 235,
+ 193, 251, 146, 38, 52, 97, 80, 51, 38, 7, 4, 1, 61, 38, 7, 4, 1, 75, 38,
+ 7, 4, 1, 73, 38, 7, 4, 1, 76, 38, 7, 4, 1, 70, 38, 7, 4, 1, 251, 66, 38,
+ 7, 4, 1, 249, 60, 38, 7, 4, 1, 242, 60, 38, 7, 4, 1, 193, 38, 7, 4, 1,
+ 153, 38, 7, 4, 1, 217, 152, 38, 7, 4, 1, 214, 105, 38, 7, 4, 1, 211, 178,
+ 26, 6, 1, 241, 196, 26, 4, 1, 241, 196, 26, 6, 1, 254, 23, 221, 246, 26,
+ 4, 1, 254, 23, 221, 246, 26, 227, 198, 50, 26, 232, 108, 227, 198, 50,
+ 26, 6, 1, 226, 51, 247, 227, 26, 4, 1, 226, 51, 247, 227, 26, 210, 219,
+ 26, 4, 223, 49, 232, 83, 219, 178, 87, 26, 4, 246, 118, 232, 83, 219,
+ 178, 87, 26, 4, 223, 49, 246, 118, 232, 83, 219, 178, 87, 26, 224, 13,
+ 78, 26, 216, 18, 26, 247, 252, 216, 18, 26, 6, 1, 254, 144, 2, 216, 18,
+ 26, 254, 97, 217, 2, 26, 6, 1, 245, 101, 2, 216, 18, 26, 6, 1, 245, 64,
+ 2, 216, 18, 26, 6, 1, 235, 186, 2, 216, 18, 26, 6, 1, 226, 200, 2, 216,
+ 18, 26, 6, 1, 214, 158, 2, 216, 18, 26, 6, 1, 226, 202, 2, 216, 18, 26,
+ 4, 1, 235, 186, 2, 247, 252, 22, 216, 18, 26, 6, 1, 254, 143, 26, 6, 1,
+ 252, 26, 26, 6, 1, 243, 107, 26, 6, 1, 248, 54, 26, 6, 1, 245, 100, 26,
+ 6, 1, 210, 85, 26, 6, 1, 245, 63, 26, 6, 1, 216, 179, 26, 6, 1, 235, 185,
+ 26, 6, 1, 234, 222, 26, 6, 1, 233, 98, 26, 6, 1, 230, 102, 26, 6, 1, 227,
+ 237, 26, 6, 1, 211, 157, 26, 6, 1, 226, 199, 26, 6, 1, 225, 108, 26, 6,
+ 1, 223, 37, 26, 6, 1, 219, 177, 26, 6, 1, 217, 41, 26, 6, 1, 214, 157,
+ 26, 6, 1, 225, 133, 26, 6, 1, 250, 110, 26, 6, 1, 224, 161, 26, 6, 1,
+ 226, 201, 26, 6, 1, 235, 186, 2, 247, 251, 26, 6, 1, 214, 158, 2, 247,
+ 251, 26, 4, 1, 254, 144, 2, 216, 18, 26, 4, 1, 245, 101, 2, 216, 18, 26,
+ 4, 1, 245, 64, 2, 216, 18, 26, 4, 1, 235, 186, 2, 216, 18, 26, 4, 1, 214,
+ 158, 2, 247, 252, 22, 216, 18, 26, 4, 1, 254, 143, 26, 4, 1, 252, 26, 26,
+ 4, 1, 243, 107, 26, 4, 1, 248, 54, 26, 4, 1, 245, 100, 26, 4, 1, 210, 85,
+ 26, 4, 1, 245, 63, 26, 4, 1, 216, 179, 26, 4, 1, 235, 185, 26, 4, 1, 234,
+ 222, 26, 4, 1, 233, 98, 26, 4, 1, 230, 102, 26, 4, 1, 227, 237, 26, 4, 1,
+ 211, 157, 26, 4, 1, 226, 199, 26, 4, 1, 225, 108, 26, 4, 1, 223, 37, 26,
+ 4, 1, 40, 219, 177, 26, 4, 1, 219, 177, 26, 4, 1, 217, 41, 26, 4, 1, 214,
+ 157, 26, 4, 1, 225, 133, 26, 4, 1, 250, 110, 26, 4, 1, 224, 161, 26, 4,
+ 1, 226, 201, 26, 4, 1, 235, 186, 2, 247, 251, 26, 4, 1, 214, 158, 2, 247,
+ 251, 26, 4, 1, 226, 200, 2, 216, 18, 26, 4, 1, 214, 158, 2, 216, 18, 26,
+ 4, 1, 226, 202, 2, 216, 18, 26, 6, 234, 247, 87, 26, 252, 27, 87, 26,
+ 216, 180, 87, 26, 214, 158, 2, 241, 52, 87, 26, 214, 158, 2, 255, 3, 22,
+ 241, 52, 87, 26, 214, 158, 2, 248, 2, 22, 241, 52, 87, 26, 225, 134, 87,
+ 26, 225, 109, 87, 26, 234, 247, 87, 26, 1, 254, 23, 234, 6, 26, 4, 1,
+ 254, 23, 234, 6, 26, 1, 218, 137, 26, 4, 1, 218, 137, 26, 1, 247, 227,
+ 26, 4, 1, 247, 227, 26, 1, 234, 6, 26, 4, 1, 234, 6, 26, 1, 221, 246, 26,
+ 4, 1, 221, 246, 81, 6, 1, 220, 55, 81, 4, 1, 220, 55, 81, 6, 1, 244, 140,
+ 81, 4, 1, 244, 140, 81, 6, 1, 234, 117, 81, 4, 1, 234, 117, 81, 6, 1,
+ 241, 45, 81, 4, 1, 241, 45, 81, 6, 1, 243, 102, 81, 4, 1, 243, 102, 81,
+ 6, 1, 220, 22, 81, 4, 1, 220, 22, 81, 6, 1, 248, 69, 81, 4, 1, 248, 69,
+ 26, 234, 223, 87, 26, 223, 38, 87, 26, 232, 83, 219, 178, 87, 26, 1, 210,
+ 224, 26, 6, 216, 180, 87, 26, 232, 83, 245, 101, 87, 26, 223, 49, 232,
+ 83, 245, 101, 87, 26, 6, 1, 220, 7, 26, 4, 1, 220, 7, 26, 6, 232, 83,
+ 219, 178, 87, 26, 6, 1, 221, 243, 26, 4, 1, 221, 243, 26, 223, 38, 2,
+ 218, 103, 87, 26, 6, 223, 49, 232, 83, 219, 178, 87, 26, 6, 246, 118,
+ 232, 83, 219, 178, 87, 26, 6, 223, 49, 246, 118, 232, 83, 219, 178, 87,
+ 33, 6, 1, 236, 61, 2, 242, 136, 33, 6, 1, 235, 189, 33, 6, 1, 247, 162,
+ 33, 6, 1, 242, 187, 33, 6, 1, 214, 202, 236, 60, 33, 6, 1, 246, 36, 33,
+ 6, 1, 251, 76, 73, 33, 6, 1, 211, 8, 33, 6, 1, 235, 126, 33, 6, 1, 232,
+ 187, 33, 6, 1, 228, 178, 33, 6, 1, 215, 174, 33, 6, 1, 234, 48, 33, 6, 1,
+ 240, 154, 2, 242, 136, 33, 6, 1, 219, 251, 70, 33, 6, 1, 246, 32, 33, 6,
+ 1, 61, 33, 6, 1, 252, 75, 33, 6, 1, 213, 255, 33, 6, 1, 242, 236, 33, 6,
+ 1, 248, 90, 33, 6, 1, 236, 60, 33, 6, 1, 210, 74, 33, 6, 1, 210, 94, 33,
+ 6, 1, 73, 33, 6, 1, 219, 251, 73, 33, 6, 1, 176, 33, 6, 1, 245, 174, 33,
+ 6, 1, 245, 159, 33, 6, 1, 245, 150, 33, 6, 1, 76, 33, 6, 1, 225, 221, 33,
+ 6, 1, 245, 92, 33, 6, 1, 245, 82, 33, 6, 1, 217, 22, 33, 6, 1, 70, 33, 6,
+ 1, 245, 202, 33, 6, 1, 162, 33, 6, 1, 215, 178, 33, 6, 1, 250, 131, 33,
+ 6, 1, 220, 102, 33, 6, 1, 220, 65, 33, 6, 1, 242, 3, 50, 33, 6, 1, 211,
+ 27, 33, 6, 1, 219, 52, 50, 33, 6, 1, 75, 33, 6, 1, 210, 212, 33, 6, 1,
+ 191, 33, 4, 1, 61, 33, 4, 1, 252, 75, 33, 4, 1, 213, 255, 33, 4, 1, 242,
+ 236, 33, 4, 1, 248, 90, 33, 4, 1, 236, 60, 33, 4, 1, 210, 74, 33, 4, 1,
+ 210, 94, 33, 4, 1, 73, 33, 4, 1, 219, 251, 73, 33, 4, 1, 176, 33, 4, 1,
+ 245, 174, 33, 4, 1, 245, 159, 33, 4, 1, 245, 150, 33, 4, 1, 76, 33, 4, 1,
+ 225, 221, 33, 4, 1, 245, 92, 33, 4, 1, 245, 82, 33, 4, 1, 217, 22, 33, 4,
+ 1, 70, 33, 4, 1, 245, 202, 33, 4, 1, 162, 33, 4, 1, 215, 178, 33, 4, 1,
+ 250, 131, 33, 4, 1, 220, 102, 33, 4, 1, 220, 65, 33, 4, 1, 242, 3, 50,
+ 33, 4, 1, 211, 27, 33, 4, 1, 219, 52, 50, 33, 4, 1, 75, 33, 4, 1, 210,
+ 212, 33, 4, 1, 191, 33, 4, 1, 236, 61, 2, 242, 136, 33, 4, 1, 235, 189,
+ 33, 4, 1, 247, 162, 33, 4, 1, 242, 187, 33, 4, 1, 214, 202, 236, 60, 33,
+ 4, 1, 246, 36, 33, 4, 1, 251, 76, 73, 33, 4, 1, 211, 8, 33, 4, 1, 235,
+ 126, 33, 4, 1, 232, 187, 33, 4, 1, 228, 178, 33, 4, 1, 215, 174, 33, 4,
+ 1, 234, 48, 33, 4, 1, 240, 154, 2, 242, 136, 33, 4, 1, 219, 251, 70, 33,
+ 4, 1, 246, 32, 33, 6, 1, 226, 201, 33, 4, 1, 226, 201, 33, 6, 1, 211, 59,
+ 33, 4, 1, 211, 59, 33, 6, 1, 235, 183, 75, 33, 4, 1, 235, 183, 75, 33, 6,
+ 1, 232, 192, 210, 183, 33, 4, 1, 232, 192, 210, 183, 33, 6, 1, 235, 183,
+ 232, 192, 210, 183, 33, 4, 1, 235, 183, 232, 192, 210, 183, 33, 6, 1,
+ 251, 249, 210, 183, 33, 4, 1, 251, 249, 210, 183, 33, 6, 1, 235, 183,
+ 251, 249, 210, 183, 33, 4, 1, 235, 183, 251, 249, 210, 183, 33, 6, 1,
+ 233, 233, 33, 4, 1, 233, 233, 33, 6, 1, 224, 161, 33, 4, 1, 224, 161, 33,
+ 6, 1, 244, 82, 33, 4, 1, 244, 82, 33, 6, 1, 235, 146, 33, 4, 1, 235, 146,
+ 33, 6, 1, 235, 147, 2, 52, 242, 137, 255, 14, 33, 4, 1, 235, 147, 2, 52,
+ 242, 137, 255, 14, 33, 6, 1, 214, 205, 33, 4, 1, 214, 205, 33, 6, 1, 222,
+ 185, 226, 201, 33, 4, 1, 222, 185, 226, 201, 33, 6, 1, 226, 202, 2, 216,
+ 65, 33, 4, 1, 226, 202, 2, 216, 65, 33, 6, 1, 226, 140, 33, 4, 1, 226,
+ 140, 33, 6, 1, 234, 6, 33, 4, 1, 234, 6, 33, 216, 146, 50, 38, 33, 216,
+ 65, 38, 33, 226, 65, 38, 33, 248, 154, 225, 18, 38, 33, 224, 155, 225,
+ 18, 38, 33, 225, 3, 38, 33, 240, 211, 216, 146, 50, 38, 33, 230, 191, 50,
+ 33, 6, 1, 219, 251, 240, 154, 2, 217, 77, 33, 4, 1, 219, 251, 240, 154,
+ 2, 217, 77, 33, 6, 1, 220, 146, 50, 33, 4, 1, 220, 146, 50, 33, 6, 1,
+ 245, 93, 2, 216, 114, 33, 4, 1, 245, 93, 2, 216, 114, 33, 6, 1, 242, 237,
+ 2, 214, 156, 33, 4, 1, 242, 237, 2, 214, 156, 33, 6, 1, 242, 237, 2, 91,
+ 33, 4, 1, 242, 237, 2, 91, 33, 6, 1, 242, 237, 2, 230, 224, 103, 33, 4,
+ 1, 242, 237, 2, 230, 224, 103, 33, 6, 1, 210, 75, 2, 248, 39, 33, 4, 1,
+ 210, 75, 2, 248, 39, 33, 6, 1, 210, 95, 2, 248, 39, 33, 4, 1, 210, 95, 2,
+ 248, 39, 33, 6, 1, 235, 13, 2, 248, 39, 33, 4, 1, 235, 13, 2, 248, 39,
+ 33, 6, 1, 235, 13, 2, 67, 91, 33, 4, 1, 235, 13, 2, 67, 91, 33, 6, 1,
+ 235, 13, 2, 91, 33, 4, 1, 235, 13, 2, 91, 33, 6, 1, 252, 124, 176, 33, 4,
+ 1, 252, 124, 176, 33, 6, 1, 245, 151, 2, 248, 39, 33, 4, 1, 245, 151, 2,
+ 248, 39, 33, 6, 27, 245, 151, 242, 236, 33, 4, 27, 245, 151, 242, 236,
+ 33, 6, 1, 225, 222, 2, 230, 224, 103, 33, 4, 1, 225, 222, 2, 230, 224,
+ 103, 33, 6, 1, 255, 20, 162, 33, 4, 1, 255, 20, 162, 33, 6, 1, 245, 83,
+ 2, 248, 39, 33, 4, 1, 245, 83, 2, 248, 39, 33, 6, 1, 217, 23, 2, 248, 39,
+ 33, 4, 1, 217, 23, 2, 248, 39, 33, 6, 1, 218, 121, 70, 33, 4, 1, 218,
+ 121, 70, 33, 6, 1, 218, 121, 104, 2, 91, 33, 4, 1, 218, 121, 104, 2, 91,
+ 33, 6, 1, 242, 49, 2, 248, 39, 33, 4, 1, 242, 49, 2, 248, 39, 33, 6, 27,
+ 217, 23, 215, 178, 33, 4, 27, 217, 23, 215, 178, 33, 6, 1, 250, 132, 2,
+ 248, 39, 33, 4, 1, 250, 132, 2, 248, 39, 33, 6, 1, 250, 132, 2, 67, 91,
+ 33, 4, 1, 250, 132, 2, 67, 91, 33, 6, 1, 220, 33, 33, 4, 1, 220, 33, 33,
+ 6, 1, 255, 20, 250, 131, 33, 4, 1, 255, 20, 250, 131, 33, 6, 1, 255, 20,
+ 250, 132, 2, 248, 39, 33, 4, 1, 255, 20, 250, 132, 2, 248, 39, 33, 1,
+ 226, 58, 33, 6, 1, 210, 75, 2, 251, 146, 33, 4, 1, 210, 75, 2, 251, 146,
+ 33, 6, 1, 235, 13, 2, 103, 33, 4, 1, 235, 13, 2, 103, 33, 6, 1, 245, 175,
+ 2, 217, 77, 33, 4, 1, 245, 175, 2, 217, 77, 33, 6, 1, 245, 151, 2, 103,
+ 33, 4, 1, 245, 151, 2, 103, 33, 6, 1, 245, 151, 2, 217, 77, 33, 4, 1,
+ 245, 151, 2, 217, 77, 33, 6, 1, 234, 127, 250, 131, 33, 4, 1, 234, 127,
+ 250, 131, 33, 6, 1, 245, 160, 2, 217, 77, 33, 4, 1, 245, 160, 2, 217, 77,
+ 33, 4, 1, 226, 58, 33, 6, 1, 115, 2, 251, 146, 33, 4, 1, 115, 2, 251,
+ 146, 33, 6, 1, 115, 2, 248, 1, 33, 4, 1, 115, 2, 248, 1, 33, 6, 27, 115,
+ 236, 60, 33, 4, 27, 115, 236, 60, 33, 6, 1, 236, 61, 2, 251, 146, 33, 4,
+ 1, 236, 61, 2, 251, 146, 33, 6, 1, 221, 195, 33, 4, 1, 221, 195, 33, 6,
+ 1, 221, 196, 2, 248, 1, 33, 4, 1, 221, 196, 2, 248, 1, 33, 6, 1, 210, 75,
+ 2, 248, 1, 33, 4, 1, 210, 75, 2, 248, 1, 33, 6, 1, 210, 95, 2, 248, 1,
+ 33, 4, 1, 210, 95, 2, 248, 1, 33, 6, 1, 255, 20, 246, 36, 33, 4, 1, 255,
+ 20, 246, 36, 33, 6, 1, 240, 154, 2, 231, 232, 33, 4, 1, 240, 154, 2, 231,
+ 232, 33, 6, 1, 240, 154, 2, 248, 1, 33, 4, 1, 240, 154, 2, 248, 1, 33, 6,
+ 1, 144, 2, 248, 1, 33, 4, 1, 144, 2, 248, 1, 33, 6, 1, 252, 134, 76, 33,
+ 4, 1, 252, 134, 76, 33, 6, 1, 252, 134, 144, 2, 248, 1, 33, 4, 1, 252,
+ 134, 144, 2, 248, 1, 33, 6, 1, 160, 2, 248, 1, 33, 4, 1, 160, 2, 248, 1,
+ 33, 6, 1, 104, 2, 231, 232, 33, 4, 1, 104, 2, 231, 232, 33, 6, 1, 104, 2,
+ 248, 1, 33, 4, 1, 104, 2, 248, 1, 33, 6, 1, 104, 2, 52, 142, 33, 4, 1,
+ 104, 2, 52, 142, 33, 6, 1, 250, 132, 2, 248, 1, 33, 4, 1, 250, 132, 2,
+ 248, 1, 33, 6, 1, 242, 237, 2, 248, 39, 33, 4, 1, 242, 237, 2, 248, 39,
+ 33, 6, 1, 211, 28, 2, 248, 1, 33, 4, 1, 211, 28, 2, 248, 1, 33, 6, 1,
+ 242, 237, 2, 218, 103, 22, 103, 33, 4, 1, 242, 237, 2, 218, 103, 22, 103,
+ 33, 6, 1, 242, 49, 2, 103, 33, 4, 1, 242, 49, 2, 103, 33, 6, 1, 242, 49,
+ 2, 91, 33, 4, 1, 242, 49, 2, 91, 33, 6, 1, 234, 14, 248, 90, 33, 4, 1,
+ 234, 14, 248, 90, 33, 6, 1, 234, 14, 247, 162, 33, 4, 1, 234, 14, 247,
+ 162, 33, 6, 1, 234, 14, 210, 27, 33, 4, 1, 234, 14, 210, 27, 33, 6, 1,
+ 234, 14, 246, 30, 33, 4, 1, 234, 14, 246, 30, 33, 6, 1, 234, 14, 232,
+ 187, 33, 4, 1, 234, 14, 232, 187, 33, 6, 1, 234, 14, 228, 178, 33, 4, 1,
+ 234, 14, 228, 178, 33, 6, 1, 234, 14, 219, 109, 33, 4, 1, 234, 14, 219,
+ 109, 33, 6, 1, 234, 14, 216, 60, 33, 4, 1, 234, 14, 216, 60, 33, 6, 1,
+ 223, 49, 210, 94, 33, 4, 1, 223, 49, 210, 94, 33, 6, 1, 245, 175, 2, 103,
+ 33, 4, 1, 245, 175, 2, 103, 33, 6, 1, 232, 254, 33, 4, 1, 232, 254, 33,
+ 6, 1, 223, 39, 33, 4, 1, 223, 39, 33, 6, 1, 211, 92, 33, 4, 1, 211, 92,
+ 33, 6, 1, 224, 88, 33, 4, 1, 224, 88, 33, 6, 1, 212, 22, 33, 4, 1, 212,
+ 22, 33, 6, 1, 254, 166, 176, 33, 4, 1, 254, 166, 176, 33, 6, 1, 245, 175,
+ 2, 230, 224, 103, 33, 4, 1, 245, 175, 2, 230, 224, 103, 33, 6, 1, 245,
+ 151, 2, 230, 224, 103, 33, 4, 1, 245, 151, 2, 230, 224, 103, 33, 6, 1,
+ 225, 222, 2, 248, 39, 33, 4, 1, 225, 222, 2, 248, 39, 33, 6, 1, 220, 34,
+ 2, 248, 39, 33, 4, 1, 220, 34, 2, 248, 39, 150, 6, 1, 253, 164, 150, 6,
+ 1, 252, 39, 150, 6, 1, 242, 203, 150, 6, 1, 248, 221, 150, 6, 1, 245,
+ 213, 150, 6, 1, 210, 116, 150, 6, 1, 245, 197, 150, 6, 1, 245, 65, 150,
+ 6, 1, 111, 150, 6, 1, 210, 74, 150, 6, 1, 235, 227, 150, 6, 1, 232, 190,
+ 150, 6, 1, 211, 160, 150, 6, 1, 251, 33, 150, 6, 1, 234, 165, 150, 6, 1,
+ 241, 68, 150, 6, 1, 235, 141, 150, 6, 1, 242, 246, 150, 6, 1, 250, 126,
+ 150, 6, 1, 231, 58, 150, 6, 1, 211, 8, 150, 6, 1, 228, 39, 150, 6, 1,
+ 220, 102, 150, 6, 1, 213, 138, 150, 6, 1, 250, 157, 150, 6, 1, 225, 205,
+ 150, 6, 1, 235, 110, 150, 6, 1, 205, 150, 6, 1, 221, 161, 150, 6, 1, 213,
+ 179, 150, 6, 1, 216, 62, 150, 6, 1, 223, 95, 150, 6, 1, 249, 238, 150, 6,
+ 1, 210, 249, 150, 6, 1, 225, 46, 150, 6, 1, 234, 176, 150, 6, 1, 226,
+ 222, 150, 6, 1, 244, 142, 150, 58, 1, 43, 163, 222, 233, 150, 254, 57,
+ 150, 245, 154, 78, 150, 245, 31, 78, 150, 249, 219, 150, 224, 13, 78,
+ 150, 255, 21, 78, 150, 4, 1, 253, 164, 150, 4, 1, 252, 39, 150, 4, 1,
+ 242, 203, 150, 4, 1, 248, 221, 150, 4, 1, 245, 213, 150, 4, 1, 210, 116,
+ 150, 4, 1, 245, 197, 150, 4, 1, 245, 65, 150, 4, 1, 111, 150, 4, 1, 210,
+ 74, 150, 4, 1, 235, 227, 150, 4, 1, 232, 190, 150, 4, 1, 211, 160, 150,
+ 4, 1, 251, 33, 150, 4, 1, 234, 165, 150, 4, 1, 241, 68, 150, 4, 1, 235,
+ 141, 150, 4, 1, 242, 246, 150, 4, 1, 250, 126, 150, 4, 1, 231, 58, 150,
+ 4, 1, 211, 8, 150, 4, 1, 228, 39, 150, 4, 1, 220, 102, 150, 4, 1, 213,
+ 138, 150, 4, 1, 250, 157, 150, 4, 1, 225, 205, 150, 4, 1, 235, 110, 150,
+ 4, 1, 205, 150, 4, 1, 221, 161, 150, 4, 1, 213, 179, 150, 4, 1, 216, 62,
+ 150, 4, 1, 223, 95, 150, 4, 1, 249, 238, 150, 4, 1, 210, 249, 150, 4, 1,
+ 225, 46, 150, 4, 1, 234, 176, 150, 4, 1, 226, 222, 150, 4, 1, 244, 142,
+ 150, 4, 27, 245, 214, 210, 249, 150, 243, 229, 218, 129, 150, 240, 168,
+ 150, 246, 95, 50, 94, 255, 15, 245, 57, 94, 255, 15, 221, 162, 94, 255,
+ 15, 220, 88, 94, 255, 15, 210, 104, 224, 71, 94, 255, 15, 210, 104, 243,
+ 125, 94, 255, 15, 216, 75, 94, 255, 15, 223, 47, 94, 255, 15, 210, 103,
+ 94, 255, 15, 225, 245, 94, 255, 15, 211, 20, 94, 255, 15, 216, 214, 94,
+ 255, 15, 243, 41, 94, 255, 15, 243, 42, 230, 69, 94, 255, 15, 243, 39,
+ 94, 255, 15, 224, 72, 226, 16, 94, 255, 15, 216, 253, 243, 56, 94, 255,
+ 15, 225, 226, 94, 255, 15, 253, 200, 242, 41, 94, 255, 15, 230, 79, 94,
+ 255, 15, 231, 208, 94, 255, 15, 231, 49, 94, 255, 15, 231, 50, 234, 177,
+ 94, 255, 15, 248, 163, 94, 255, 15, 224, 83, 94, 255, 15, 216, 253, 224,
+ 67, 94, 255, 15, 211, 30, 252, 40, 210, 230, 94, 255, 15, 226, 207, 94,
+ 255, 15, 236, 19, 94, 255, 15, 248, 70, 94, 255, 15, 210, 33, 94, 164,
+ 231, 143, 250, 35, 94, 225, 11, 220, 36, 94, 225, 11, 241, 250, 221, 162,
+ 94, 225, 11, 241, 250, 225, 239, 94, 225, 11, 241, 250, 224, 76, 94, 225,
+ 11, 241, 158, 94, 225, 11, 215, 176, 94, 225, 11, 221, 162, 94, 225, 11,
+ 225, 239, 94, 225, 11, 224, 76, 94, 225, 11, 241, 61, 94, 225, 11, 241,
+ 62, 241, 252, 31, 214, 3, 94, 225, 11, 224, 17, 94, 225, 11, 248, 208,
+ 177, 231, 171, 94, 225, 11, 231, 38, 94, 224, 141, 231, 168, 94, 225, 11,
+ 223, 169, 94, 224, 141, 225, 247, 94, 225, 11, 220, 21, 247, 120, 94,
+ 225, 11, 219, 159, 247, 120, 94, 224, 141, 219, 53, 225, 241, 94, 164,
+ 214, 160, 247, 120, 94, 164, 232, 108, 247, 120, 94, 224, 141, 227, 195,
+ 242, 40, 94, 225, 11, 224, 77, 224, 71, 94, 1, 254, 170, 94, 1, 252, 28,
+ 94, 1, 242, 201, 94, 1, 248, 189, 94, 1, 241, 238, 94, 1, 214, 3, 94, 1,
+ 210, 97, 94, 1, 241, 197, 94, 1, 216, 230, 94, 1, 210, 233, 94, 1, 40,
+ 234, 250, 94, 1, 234, 250, 94, 1, 233, 94, 94, 1, 40, 231, 65, 94, 1,
+ 231, 65, 94, 1, 40, 227, 194, 94, 1, 227, 194, 94, 1, 221, 249, 94, 1,
+ 253, 162, 94, 1, 40, 225, 221, 94, 1, 225, 221, 94, 1, 40, 215, 179, 94,
+ 1, 215, 179, 94, 1, 224, 39, 94, 1, 223, 67, 94, 1, 220, 20, 94, 1, 217,
+ 38, 94, 27, 211, 6, 52, 214, 3, 94, 27, 211, 6, 214, 4, 210, 233, 94, 27,
+ 211, 6, 52, 210, 233, 94, 224, 141, 243, 41, 94, 224, 141, 243, 39, 10,
+ 54, 50, 10, 5, 221, 242, 10, 244, 30, 231, 154, 10, 5, 222, 23, 10, 5,
+ 221, 245, 254, 37, 249, 109, 222, 193, 254, 37, 244, 4, 222, 193, 10,
+ 223, 134, 254, 37, 225, 183, 230, 193, 50, 254, 37, 225, 183, 216, 248,
+ 216, 148, 50, 254, 221, 50, 10, 249, 219, 10, 248, 150, 220, 137, 10,
+ 225, 13, 213, 241, 50, 10, 5, 230, 174, 10, 5, 222, 3, 254, 172, 212, 45,
+ 10, 5, 254, 172, 253, 221, 10, 5, 223, 167, 254, 171, 10, 5, 223, 175,
+ 254, 152, 254, 104, 10, 5, 217, 70, 10, 4, 125, 217, 80, 10, 4, 125, 27,
+ 112, 2, 233, 103, 2, 211, 43, 10, 4, 125, 210, 108, 10, 4, 244, 165, 10,
+ 4, 248, 184, 10, 4, 234, 205, 10, 220, 150, 10, 215, 211, 59, 224, 141,
+ 78, 10, 224, 13, 78, 10, 1, 234, 209, 211, 43, 10, 1, 242, 19, 10, 1,
+ 112, 2, 231, 228, 48, 10, 1, 112, 2, 202, 48, 10, 1, 212, 31, 2, 202, 48,
+ 10, 1, 112, 2, 202, 51, 10, 1, 79, 2, 202, 48, 10, 1, 254, 170, 10, 1,
+ 252, 54, 10, 1, 217, 8, 231, 164, 10, 1, 217, 7, 10, 1, 216, 192, 10, 1,
+ 235, 123, 10, 1, 242, 37, 10, 1, 234, 129, 10, 1, 248, 195, 10, 1, 216,
+ 202, 10, 1, 223, 95, 10, 1, 210, 108, 10, 1, 221, 166, 10, 1, 220, 59,
+ 10, 1, 222, 26, 10, 1, 248, 216, 10, 1, 217, 80, 10, 1, 210, 111, 10, 1,
+ 254, 196, 10, 1, 242, 244, 10, 1, 234, 175, 2, 113, 170, 48, 10, 1, 234,
+ 175, 2, 134, 170, 51, 10, 1, 244, 168, 79, 2, 235, 193, 214, 105, 10, 1,
+ 244, 168, 79, 2, 113, 170, 48, 10, 1, 244, 168, 79, 2, 134, 170, 48, 10,
+ 217, 43, 10, 1, 244, 142, 10, 1, 224, 81, 10, 1, 234, 250, 10, 1, 233,
+ 102, 10, 1, 231, 78, 10, 1, 228, 62, 10, 1, 241, 218, 10, 1, 212, 30, 10,
+ 1, 112, 231, 192, 10, 1, 211, 43, 10, 244, 163, 10, 248, 182, 10, 234,
+ 203, 10, 244, 165, 10, 248, 184, 10, 234, 205, 10, 220, 93, 10, 218, 45,
+ 10, 231, 226, 48, 10, 202, 48, 10, 202, 51, 10, 218, 65, 254, 170, 10,
+ 235, 193, 248, 184, 10, 164, 228, 63, 242, 218, 10, 209, 255, 10, 25, 5,
+ 4, 214, 106, 48, 10, 25, 5, 235, 193, 4, 214, 106, 48, 10, 25, 5, 59, 51,
+ 10, 223, 49, 248, 184, 10, 244, 166, 2, 113, 247, 118, 10, 212, 32, 202,
+ 51, 254, 37, 21, 210, 86, 254, 37, 21, 110, 254, 37, 21, 105, 254, 37,
+ 21, 158, 254, 37, 21, 161, 254, 37, 21, 189, 254, 37, 21, 194, 254, 37,
+ 21, 198, 254, 37, 21, 195, 254, 37, 21, 200, 10, 225, 182, 50, 10, 248,
+ 83, 220, 137, 10, 216, 146, 220, 137, 10, 244, 81, 225, 9, 218, 156, 10,
+ 1, 247, 119, 252, 54, 10, 1, 247, 119, 224, 81, 10, 1, 218, 23, 254, 170,
+ 10, 1, 112, 212, 46, 10, 1, 112, 2, 212, 32, 202, 48, 10, 1, 112, 2, 212,
+ 32, 202, 51, 10, 1, 125, 242, 19, 10, 1, 125, 202, 254, 170, 10, 1, 125,
+ 202, 212, 30, 10, 1, 104, 2, 202, 48, 10, 1, 125, 202, 211, 43, 10, 1,
+ 215, 148, 10, 1, 215, 146, 10, 1, 252, 64, 10, 1, 217, 8, 2, 222, 233,
+ 10, 1, 217, 8, 2, 134, 170, 77, 246, 103, 10, 1, 225, 205, 10, 1, 217, 5,
+ 10, 1, 252, 52, 10, 1, 122, 2, 202, 48, 10, 1, 122, 2, 113, 170, 67, 48,
+ 10, 1, 227, 153, 10, 1, 246, 43, 10, 1, 122, 2, 134, 170, 48, 10, 1, 217,
+ 26, 10, 1, 217, 24, 10, 1, 248, 130, 10, 1, 248, 196, 2, 222, 233, 10, 1,
+ 248, 196, 2, 59, 51, 10, 1, 248, 196, 2, 59, 252, 43, 22, 4, 217, 80, 10,
+ 1, 248, 201, 10, 1, 248, 132, 10, 1, 246, 70, 10, 1, 248, 196, 2, 134,
+ 170, 77, 246, 103, 10, 1, 248, 196, 2, 244, 11, 170, 48, 10, 1, 222, 171,
+ 10, 1, 223, 96, 2, 4, 214, 105, 10, 1, 223, 96, 2, 222, 233, 10, 1, 223,
+ 96, 2, 59, 51, 10, 1, 223, 96, 2, 4, 214, 106, 51, 10, 1, 223, 96, 2, 59,
+ 252, 43, 22, 59, 48, 10, 1, 223, 96, 2, 113, 170, 48, 10, 1, 235, 120,
+ 10, 1, 223, 96, 2, 244, 11, 170, 48, 10, 1, 221, 167, 2, 59, 252, 43, 22,
+ 59, 48, 10, 1, 221, 167, 2, 134, 170, 51, 10, 1, 221, 167, 2, 134, 170,
+ 252, 43, 22, 134, 170, 48, 10, 1, 222, 27, 2, 113, 170, 51, 10, 1, 222,
+ 27, 2, 134, 170, 48, 10, 1, 217, 81, 2, 134, 170, 48, 10, 1, 254, 197, 2,
+ 134, 170, 48, 10, 1, 247, 119, 244, 142, 10, 1, 244, 143, 2, 59, 230,
+ 109, 51, 10, 1, 244, 143, 2, 59, 51, 10, 1, 213, 248, 10, 1, 244, 143, 2,
+ 134, 170, 51, 10, 1, 225, 203, 10, 1, 224, 82, 2, 59, 48, 10, 1, 224, 82,
+ 2, 134, 170, 48, 10, 1, 234, 174, 10, 1, 217, 250, 234, 250, 10, 1, 234,
+ 251, 2, 222, 233, 10, 1, 234, 251, 2, 59, 48, 10, 1, 229, 79, 10, 1, 234,
+ 251, 2, 134, 170, 51, 10, 1, 243, 122, 10, 1, 243, 123, 2, 222, 233, 10,
+ 1, 229, 2, 10, 1, 243, 123, 2, 113, 170, 51, 10, 1, 242, 101, 10, 1, 243,
+ 123, 2, 134, 170, 48, 10, 1, 233, 103, 2, 4, 214, 105, 10, 1, 233, 103,
+ 2, 59, 48, 10, 1, 233, 103, 2, 134, 170, 48, 10, 1, 233, 103, 2, 134,
+ 170, 51, 10, 1, 228, 63, 2, 59, 51, 10, 1, 228, 63, 242, 218, 10, 1, 222,
+ 214, 10, 1, 228, 63, 2, 222, 233, 10, 1, 228, 63, 2, 134, 170, 48, 10, 1,
+ 241, 219, 247, 141, 10, 1, 217, 27, 2, 59, 48, 10, 1, 241, 219, 2, 79,
+ 48, 10, 1, 241, 219, 242, 171, 10, 1, 241, 219, 242, 172, 2, 202, 48, 10,
+ 1, 217, 8, 231, 165, 242, 171, 10, 1, 212, 31, 2, 222, 233, 10, 1, 234,
+ 73, 226, 234, 10, 1, 226, 234, 10, 1, 70, 10, 1, 210, 212, 10, 1, 234,
+ 73, 210, 212, 10, 1, 212, 31, 2, 113, 170, 48, 10, 1, 213, 255, 10, 1,
+ 244, 168, 211, 43, 10, 1, 79, 2, 217, 77, 10, 1, 79, 2, 4, 214, 105, 10,
+ 1, 212, 31, 2, 59, 48, 10, 1, 75, 10, 1, 79, 2, 134, 170, 51, 10, 1, 79,
+ 252, 132, 10, 1, 79, 252, 133, 2, 202, 48, 10, 243, 229, 218, 129, 10, 1,
+ 254, 243, 10, 4, 125, 27, 222, 27, 2, 233, 103, 2, 112, 231, 192, 10, 4,
+ 125, 27, 224, 82, 2, 233, 103, 2, 112, 231, 192, 10, 4, 125, 66, 65, 17,
+ 10, 4, 125, 233, 103, 254, 170, 10, 4, 125, 235, 123, 10, 4, 125, 134,
+ 247, 118, 10, 4, 125, 221, 166, 10, 245, 143, 64, 253, 166, 10, 218, 152,
+ 64, 222, 138, 245, 175, 241, 155, 10, 4, 125, 222, 183, 210, 86, 10, 4,
+ 125, 214, 159, 223, 115, 210, 86, 10, 4, 125, 247, 119, 241, 236, 64,
+ 234, 129, 10, 4, 125, 66, 53, 17, 10, 4, 121, 221, 166, 10, 4, 125, 231,
+ 227, 10, 4, 212, 30, 10, 4, 211, 43, 10, 4, 125, 211, 43, 10, 4, 125,
+ 228, 62, 10, 225, 41, 64, 222, 13, 10, 245, 152, 250, 175, 121, 218, 129,
+ 10, 245, 152, 250, 175, 125, 218, 129, 10, 222, 183, 125, 218, 130, 2,
+ 244, 104, 250, 174, 10, 4, 121, 231, 78, 10, 1, 248, 196, 2, 235, 193,
+ 214, 105, 10, 1, 223, 96, 2, 235, 193, 214, 105, 245, 22, 254, 37, 21,
+ 210, 86, 245, 22, 254, 37, 21, 110, 245, 22, 254, 37, 21, 105, 245, 22,
+ 254, 37, 21, 158, 245, 22, 254, 37, 21, 161, 245, 22, 254, 37, 21, 189,
+ 245, 22, 254, 37, 21, 194, 245, 22, 254, 37, 21, 198, 245, 22, 254, 37,
+ 21, 195, 245, 22, 254, 37, 21, 200, 10, 1, 220, 60, 2, 59, 51, 10, 1,
+ 248, 217, 2, 59, 51, 10, 1, 242, 245, 2, 59, 51, 10, 5, 219, 158, 254,
+ 126, 10, 5, 219, 158, 224, 235, 231, 58, 10, 1, 241, 219, 2, 235, 193,
+ 214, 105, 188, 245, 143, 64, 226, 14, 188, 218, 19, 243, 229, 218, 129,
+ 188, 218, 67, 243, 229, 218, 129, 188, 218, 19, 249, 226, 188, 218, 67,
+ 249, 226, 188, 203, 249, 226, 188, 249, 227, 219, 106, 233, 46, 188, 249,
+ 227, 219, 106, 222, 251, 188, 218, 19, 249, 227, 219, 106, 233, 46, 188,
+ 218, 67, 249, 227, 219, 106, 222, 251, 188, 249, 180, 188, 242, 1, 226,
+ 250, 188, 242, 1, 231, 36, 188, 242, 1, 253, 218, 188, 255, 21, 78, 188,
+ 1, 254, 174, 188, 1, 218, 23, 254, 174, 188, 1, 252, 25, 188, 1, 243,
+ 113, 188, 1, 243, 114, 243, 91, 188, 1, 248, 192, 188, 1, 247, 119, 248,
+ 193, 222, 229, 188, 1, 241, 238, 188, 1, 212, 30, 188, 1, 210, 108, 188,
+ 1, 241, 195, 188, 1, 216, 226, 188, 1, 216, 227, 243, 91, 188, 1, 210,
+ 199, 188, 1, 210, 200, 241, 238, 188, 1, 234, 225, 188, 1, 233, 101, 188,
+ 1, 230, 190, 188, 1, 227, 194, 188, 1, 220, 143, 188, 1, 40, 220, 143,
+ 188, 1, 75, 188, 1, 225, 221, 188, 1, 223, 49, 225, 221, 188, 1, 222, 24,
+ 188, 1, 224, 75, 188, 1, 222, 229, 188, 1, 220, 20, 188, 1, 217, 36, 188,
+ 1, 225, 169, 252, 12, 188, 1, 225, 169, 242, 242, 188, 1, 225, 169, 248,
+ 20, 188, 224, 151, 48, 188, 224, 151, 51, 188, 224, 151, 246, 117, 188,
+ 210, 17, 48, 188, 210, 17, 51, 188, 210, 17, 246, 117, 188, 223, 131, 48,
+ 188, 223, 131, 51, 188, 246, 118, 210, 24, 241, 44, 188, 246, 118, 210,
+ 24, 254, 105, 188, 241, 241, 48, 188, 241, 241, 51, 188, 241, 240, 246,
+ 117, 188, 245, 79, 48, 188, 245, 79, 51, 188, 222, 107, 188, 244, 136,
+ 247, 120, 188, 223, 248, 188, 222, 134, 188, 113, 67, 170, 48, 188, 113,
+ 67, 170, 51, 188, 134, 170, 48, 188, 134, 170, 51, 188, 226, 248, 232,
+ 214, 48, 188, 226, 248, 232, 214, 51, 188, 230, 56, 188, 252, 131, 188,
+ 1, 219, 49, 210, 80, 188, 1, 219, 49, 234, 122, 188, 1, 219, 49, 244,
+ 154, 10, 1, 252, 55, 2, 134, 170, 240, 250, 51, 10, 1, 252, 55, 2, 59,
+ 252, 43, 22, 134, 170, 48, 10, 1, 252, 55, 2, 134, 170, 225, 7, 214, 153,
+ 51, 10, 1, 252, 55, 2, 134, 170, 225, 7, 214, 153, 252, 43, 22, 113, 170,
+ 48, 10, 1, 252, 55, 2, 113, 170, 252, 43, 22, 59, 48, 10, 1, 252, 55, 2,
+ 235, 193, 4, 214, 106, 51, 10, 1, 252, 55, 2, 4, 214, 105, 10, 1, 122, 2,
+ 113, 170, 48, 10, 1, 122, 2, 134, 170, 225, 7, 214, 153, 51, 10, 1, 248,
+ 196, 2, 113, 170, 213, 189, 252, 43, 22, 4, 217, 80, 10, 1, 248, 196, 2,
+ 235, 193, 4, 214, 106, 51, 10, 1, 223, 96, 2, 91, 10, 1, 221, 167, 2,
+ 244, 11, 170, 48, 10, 1, 254, 197, 2, 113, 170, 48, 10, 1, 254, 197, 2,
+ 134, 170, 225, 7, 246, 104, 48, 10, 1, 254, 197, 2, 113, 170, 213, 189,
+ 48, 10, 1, 244, 143, 2, 113, 170, 51, 10, 1, 244, 143, 2, 134, 170, 225,
+ 7, 214, 153, 51, 10, 1, 234, 175, 2, 59, 48, 10, 1, 234, 175, 2, 134,
+ 170, 48, 10, 1, 234, 175, 2, 134, 170, 225, 7, 214, 153, 51, 10, 1, 66,
+ 2, 59, 48, 10, 1, 66, 2, 59, 51, 10, 1, 228, 63, 2, 113, 170, 51, 10, 1,
+ 228, 63, 2, 4, 217, 80, 10, 1, 228, 63, 2, 4, 214, 105, 10, 1, 233, 103,
+ 2, 130, 10, 1, 223, 96, 2, 113, 170, 213, 189, 48, 10, 1, 223, 96, 2,
+ 202, 48, 10, 1, 221, 167, 2, 113, 170, 213, 189, 48, 10, 1, 122, 2, 4,
+ 10, 1, 217, 81, 51, 10, 1, 122, 2, 4, 10, 1, 217, 81, 22, 113, 247, 118,
+ 10, 1, 221, 167, 2, 4, 10, 1, 217, 81, 22, 113, 247, 118, 10, 1, 223, 96,
+ 2, 4, 10, 1, 217, 81, 22, 113, 247, 118, 10, 1, 122, 2, 4, 10, 1, 217,
+ 81, 48, 10, 1, 112, 2, 245, 22, 254, 37, 21, 113, 48, 10, 1, 112, 2, 245,
+ 22, 254, 37, 21, 134, 48, 10, 1, 244, 168, 79, 2, 245, 22, 254, 37, 21,
+ 113, 48, 10, 1, 244, 168, 79, 2, 245, 22, 254, 37, 21, 134, 48, 10, 1,
+ 244, 168, 79, 2, 245, 22, 254, 37, 21, 244, 11, 51, 10, 1, 212, 31, 2,
+ 245, 22, 254, 37, 21, 113, 48, 10, 1, 212, 31, 2, 245, 22, 254, 37, 21,
+ 134, 48, 10, 1, 79, 252, 133, 2, 245, 22, 254, 37, 21, 113, 48, 10, 1,
+ 79, 252, 133, 2, 245, 22, 254, 37, 21, 134, 48, 10, 1, 122, 2, 245, 22,
+ 254, 37, 21, 244, 11, 51, 10, 1, 221, 167, 2, 245, 22, 254, 37, 21, 244,
+ 11, 48, 10, 1, 221, 167, 2, 235, 193, 214, 105, 10, 1, 234, 251, 2, 113,
+ 170, 48, 216, 205, 1, 242, 46, 216, 205, 1, 220, 68, 216, 205, 1, 228,
+ 61, 216, 205, 1, 223, 184, 216, 205, 1, 252, 189, 216, 205, 1, 232, 251,
+ 216, 205, 1, 235, 8, 216, 205, 1, 254, 159, 216, 205, 1, 214, 25, 216,
+ 205, 1, 231, 77, 216, 205, 1, 244, 194, 216, 205, 1, 248, 23, 216, 205,
+ 1, 216, 207, 216, 205, 1, 233, 131, 216, 205, 1, 243, 131, 216, 205, 1,
+ 242, 177, 216, 205, 1, 221, 165, 216, 205, 1, 248, 148, 216, 205, 1, 210,
+ 100, 216, 205, 1, 217, 37, 216, 205, 1, 211, 103, 216, 205, 1, 225, 233,
+ 216, 205, 1, 235, 128, 216, 205, 1, 250, 134, 216, 205, 1, 215, 155, 216,
+ 205, 1, 241, 188, 216, 205, 1, 234, 131, 216, 205, 1, 216, 206, 216, 205,
+ 1, 210, 115, 216, 205, 1, 220, 58, 216, 205, 1, 222, 30, 216, 205, 1,
+ 248, 219, 216, 205, 1, 111, 216, 205, 1, 210, 23, 216, 205, 1, 254, 193,
+ 216, 205, 1, 242, 243, 216, 205, 1, 224, 85, 216, 205, 1, 212, 63, 216,
+ 205, 255, 22, 216, 205, 255, 38, 216, 205, 240, 114, 216, 205, 245, 208,
+ 216, 205, 214, 222, 216, 205, 226, 182, 216, 205, 245, 216, 216, 205,
+ 245, 16, 216, 205, 226, 247, 216, 205, 226, 255, 216, 205, 218, 45, 216,
+ 205, 1, 229, 225, 228, 137, 21, 210, 86, 228, 137, 21, 110, 228, 137, 21,
+ 105, 228, 137, 21, 158, 228, 137, 21, 161, 228, 137, 21, 189, 228, 137,
+ 21, 194, 228, 137, 21, 198, 228, 137, 21, 195, 228, 137, 21, 200, 228,
+ 137, 1, 61, 228, 137, 1, 245, 209, 228, 137, 1, 73, 228, 137, 1, 75, 228,
+ 137, 1, 70, 228, 137, 1, 226, 183, 228, 137, 1, 76, 228, 137, 1, 248,
+ 209, 228, 137, 1, 230, 25, 228, 137, 1, 252, 191, 228, 137, 1, 190, 228,
+ 137, 1, 217, 105, 228, 137, 1, 235, 141, 228, 137, 1, 250, 157, 228, 137,
+ 1, 248, 221, 228, 137, 1, 205, 228, 137, 1, 222, 179, 228, 137, 1, 206,
+ 228, 137, 1, 243, 79, 228, 137, 1, 244, 196, 228, 137, 1, 176, 228, 137,
+ 1, 233, 135, 228, 137, 1, 229, 229, 211, 223, 228, 137, 1, 184, 228, 137,
+ 1, 227, 165, 228, 137, 1, 197, 228, 137, 1, 162, 228, 137, 1, 212, 65,
+ 228, 137, 1, 191, 228, 137, 1, 227, 166, 211, 223, 228, 137, 1, 235, 61,
+ 235, 141, 228, 137, 1, 235, 61, 250, 157, 228, 137, 1, 235, 61, 205, 228,
+ 137, 38, 219, 251, 125, 216, 30, 228, 137, 38, 219, 251, 121, 216, 30,
+ 228, 137, 38, 219, 251, 222, 228, 216, 30, 228, 137, 38, 199, 248, 38,
+ 216, 30, 228, 137, 38, 199, 125, 216, 30, 228, 137, 38, 199, 121, 216,
+ 30, 228, 137, 38, 199, 222, 228, 216, 30, 228, 137, 38, 229, 193, 78,
+ 228, 137, 38, 52, 59, 48, 228, 137, 125, 138, 254, 57, 228, 137, 121,
+ 138, 254, 57, 228, 137, 16, 226, 184, 248, 50, 228, 137, 16, 243, 78,
+ 228, 137, 249, 219, 228, 137, 245, 31, 78, 228, 137, 233, 108, 221, 252,
+ 1, 254, 176, 221, 252, 1, 251, 228, 221, 252, 1, 243, 112, 221, 252, 1,
+ 248, 194, 221, 252, 1, 235, 152, 221, 252, 1, 252, 189, 221, 252, 1, 210,
+ 89, 221, 252, 1, 235, 160, 221, 252, 1, 216, 67, 221, 252, 1, 210, 182,
+ 221, 252, 1, 235, 9, 221, 252, 1, 233, 128, 221, 252, 1, 230, 190, 221,
+ 252, 1, 227, 194, 221, 252, 1, 219, 156, 221, 252, 1, 235, 255, 221, 252,
+ 1, 244, 121, 221, 252, 1, 215, 181, 221, 252, 1, 224, 10, 221, 252, 1,
+ 222, 229, 221, 252, 1, 220, 85, 221, 252, 1, 217, 100, 221, 252, 164,
+ 235, 255, 221, 252, 164, 235, 254, 221, 252, 164, 226, 243, 221, 252,
+ 164, 248, 207, 221, 252, 58, 1, 245, 105, 210, 182, 221, 252, 164, 245,
+ 105, 210, 182, 221, 252, 25, 5, 199, 75, 221, 252, 25, 5, 75, 221, 252,
+ 25, 5, 226, 118, 255, 73, 221, 252, 25, 5, 199, 255, 73, 221, 252, 25, 5,
+ 255, 73, 221, 252, 25, 5, 226, 118, 61, 221, 252, 25, 5, 199, 61, 221,
+ 252, 25, 5, 61, 221, 252, 58, 1, 219, 251, 61, 221, 252, 25, 5, 219, 251,
+ 61, 221, 252, 25, 5, 199, 70, 221, 252, 25, 5, 70, 221, 252, 58, 1, 73,
+ 221, 252, 25, 5, 199, 73, 221, 252, 25, 5, 73, 221, 252, 25, 5, 76, 221,
+ 252, 25, 5, 218, 45, 221, 252, 164, 229, 92, 221, 252, 224, 141, 229, 92,
+ 221, 252, 224, 141, 254, 218, 221, 252, 224, 141, 254, 114, 221, 252,
+ 224, 141, 252, 114, 221, 252, 224, 141, 253, 201, 221, 252, 224, 141,
+ 220, 8, 221, 252, 255, 21, 78, 221, 252, 224, 141, 231, 68, 224, 45, 221,
+ 252, 224, 141, 210, 31, 221, 252, 224, 141, 224, 45, 221, 252, 224, 141,
+ 210, 114, 221, 252, 224, 141, 215, 90, 221, 252, 224, 141, 254, 9, 221,
+ 252, 224, 141, 219, 53, 231, 145, 221, 252, 224, 141, 254, 100, 231, 182,
+ 1, 242, 24, 231, 182, 1, 255, 25, 231, 182, 1, 254, 216, 231, 182, 1,
+ 254, 255, 231, 182, 1, 254, 209, 231, 182, 1, 214, 124, 231, 182, 1, 253,
+ 160, 231, 182, 1, 235, 160, 231, 182, 1, 253, 198, 231, 182, 1, 254, 181,
+ 231, 182, 1, 254, 186, 231, 182, 1, 254, 178, 231, 182, 1, 254, 136, 231,
+ 182, 1, 254, 123, 231, 182, 1, 253, 237, 231, 182, 1, 235, 255, 231, 182,
+ 1, 254, 72, 231, 182, 1, 253, 208, 231, 182, 1, 254, 45, 231, 182, 1,
+ 254, 41, 231, 182, 1, 253, 231, 231, 182, 1, 253, 206, 231, 182, 1, 246,
+ 55, 231, 182, 1, 235, 2, 231, 182, 1, 254, 196, 231, 182, 254, 222, 78,
+ 231, 182, 213, 136, 78, 231, 182, 243, 53, 78, 231, 182, 224, 140, 10, 1,
+ 252, 55, 2, 4, 214, 106, 51, 10, 1, 151, 2, 113, 170, 48, 10, 1, 217, 81,
+ 2, 113, 170, 48, 10, 1, 244, 143, 2, 59, 252, 43, 22, 134, 170, 48, 10,
+ 1, 224, 82, 2, 59, 51, 10, 1, 233, 103, 2, 52, 130, 10, 1, 66, 2, 134,
+ 170, 48, 10, 1, 79, 2, 113, 170, 252, 43, 22, 202, 48, 10, 1, 79, 2, 113,
+ 170, 252, 43, 22, 59, 48, 10, 1, 223, 96, 2, 232, 123, 10, 1, 212, 31, 2,
+ 59, 211, 231, 10, 1, 222, 201, 211, 43, 10, 249, 99, 244, 165, 10, 249,
+ 99, 248, 184, 10, 249, 99, 234, 205, 10, 249, 99, 244, 163, 10, 249, 99,
+ 248, 182, 10, 249, 99, 234, 203, 10, 138, 123, 59, 48, 10, 138, 113, 170,
+ 48, 10, 138, 232, 124, 48, 10, 138, 123, 59, 51, 10, 138, 113, 170, 51,
+ 10, 138, 232, 124, 51, 10, 204, 244, 163, 10, 204, 248, 182, 10, 204,
+ 234, 203, 10, 4, 125, 212, 30, 10, 244, 166, 2, 222, 233, 10, 244, 166,
+ 2, 59, 48, 10, 234, 206, 2, 59, 51, 10, 43, 253, 250, 48, 10, 44, 253,
+ 250, 48, 10, 43, 253, 250, 51, 10, 44, 253, 250, 51, 10, 52, 44, 253,
+ 250, 48, 10, 52, 44, 253, 250, 77, 2, 247, 120, 10, 44, 253, 250, 77, 2,
+ 247, 120, 10, 248, 185, 2, 247, 120, 84, 5, 235, 193, 250, 255, 84, 5,
+ 250, 255, 84, 5, 254, 75, 84, 5, 213, 147, 84, 1, 219, 251, 61, 84, 1,
+ 61, 84, 1, 255, 73, 84, 1, 73, 84, 1, 236, 33, 84, 1, 70, 84, 1, 214,
+ 118, 84, 1, 149, 153, 84, 1, 149, 156, 84, 1, 251, 2, 75, 84, 1, 219,
+ 251, 75, 84, 1, 75, 84, 1, 254, 201, 84, 1, 251, 2, 76, 84, 1, 219, 251,
+ 76, 84, 1, 76, 84, 1, 253, 192, 84, 1, 176, 84, 1, 234, 132, 84, 1, 243,
+ 135, 84, 1, 242, 249, 84, 1, 229, 77, 84, 1, 251, 33, 84, 1, 250, 157,
+ 84, 1, 235, 141, 84, 1, 235, 114, 84, 1, 227, 165, 84, 1, 215, 156, 84,
+ 1, 215, 144, 84, 1, 248, 135, 84, 1, 248, 119, 84, 1, 228, 110, 84, 1,
+ 217, 105, 84, 1, 216, 208, 84, 1, 248, 221, 84, 1, 248, 25, 84, 1, 197,
+ 84, 1, 228, 92, 84, 1, 190, 84, 1, 225, 147, 84, 1, 252, 191, 84, 1, 252,
+ 18, 84, 1, 184, 84, 1, 191, 84, 1, 205, 84, 1, 222, 179, 84, 1, 233, 135,
+ 84, 1, 232, 184, 84, 1, 232, 175, 84, 1, 214, 27, 84, 1, 220, 102, 84, 1,
+ 218, 223, 84, 1, 206, 84, 1, 162, 84, 25, 5, 226, 234, 84, 25, 5, 226,
+ 181, 84, 5, 227, 205, 84, 5, 253, 175, 84, 25, 5, 255, 73, 84, 25, 5, 73,
+ 84, 25, 5, 236, 33, 84, 25, 5, 70, 84, 25, 5, 214, 118, 84, 25, 5, 149,
+ 153, 84, 25, 5, 149, 222, 180, 84, 25, 5, 251, 2, 75, 84, 25, 5, 219,
+ 251, 75, 84, 25, 5, 75, 84, 25, 5, 254, 201, 84, 25, 5, 251, 2, 76, 84,
+ 25, 5, 219, 251, 76, 84, 25, 5, 76, 84, 25, 5, 253, 192, 84, 5, 213, 152,
+ 84, 25, 5, 224, 185, 75, 84, 25, 5, 253, 171, 84, 226, 204, 84, 218, 111,
+ 5, 214, 216, 84, 218, 111, 5, 254, 77, 84, 242, 137, 255, 14, 84, 255, 3,
+ 255, 14, 84, 25, 5, 251, 2, 199, 75, 84, 25, 5, 214, 214, 84, 25, 5, 214,
+ 117, 84, 1, 224, 88, 84, 1, 234, 115, 84, 1, 242, 226, 84, 1, 210, 116,
+ 84, 1, 248, 124, 84, 1, 223, 39, 84, 1, 244, 196, 84, 1, 210, 168, 84, 1,
+ 149, 222, 180, 84, 1, 149, 232, 185, 84, 25, 5, 149, 156, 84, 25, 5, 149,
+ 232, 185, 84, 248, 178, 84, 52, 248, 178, 84, 21, 210, 86, 84, 21, 110,
+ 84, 21, 105, 84, 21, 158, 84, 21, 161, 84, 21, 189, 84, 21, 194, 84, 21,
+ 198, 84, 21, 195, 84, 21, 200, 84, 255, 21, 50, 84, 5, 125, 219, 17, 247,
+ 120, 84, 1, 251, 2, 61, 84, 1, 226, 234, 84, 1, 226, 181, 84, 1, 253,
+ 171, 84, 1, 214, 214, 84, 1, 214, 117, 84, 1, 210, 82, 84, 1, 114, 191,
+ 84, 1, 243, 29, 84, 1, 235, 96, 84, 1, 242, 180, 218, 129, 84, 1, 248,
+ 125, 84, 1, 252, 111, 146, 5, 250, 255, 146, 5, 254, 75, 146, 5, 213,
+ 147, 146, 1, 61, 146, 1, 255, 73, 146, 1, 73, 146, 1, 236, 33, 146, 1,
+ 70, 146, 1, 214, 118, 146, 1, 149, 153, 146, 1, 149, 156, 146, 1, 75,
+ 146, 1, 254, 201, 146, 1, 76, 146, 1, 253, 192, 146, 1, 176, 146, 1, 234,
+ 132, 146, 1, 243, 135, 146, 1, 242, 249, 146, 1, 229, 77, 146, 1, 251,
+ 33, 146, 1, 250, 157, 146, 1, 235, 141, 146, 1, 235, 114, 146, 1, 227,
+ 165, 146, 1, 215, 156, 146, 1, 215, 144, 146, 1, 248, 135, 146, 1, 248,
+ 119, 146, 1, 228, 110, 146, 1, 217, 105, 146, 1, 216, 208, 146, 1, 248,
+ 221, 146, 1, 248, 25, 146, 1, 197, 146, 1, 190, 146, 1, 225, 147, 146, 1,
+ 252, 191, 146, 1, 252, 18, 146, 1, 184, 146, 1, 191, 146, 1, 205, 146, 1,
+ 233, 135, 146, 1, 220, 102, 146, 1, 218, 223, 146, 1, 206, 146, 1, 162,
+ 146, 5, 227, 205, 146, 5, 253, 175, 146, 25, 5, 255, 73, 146, 25, 5, 73,
+ 146, 25, 5, 236, 33, 146, 25, 5, 70, 146, 25, 5, 214, 118, 146, 25, 5,
+ 149, 153, 146, 25, 5, 149, 222, 180, 146, 25, 5, 75, 146, 25, 5, 254,
+ 201, 146, 25, 5, 76, 146, 25, 5, 253, 192, 146, 5, 213, 152, 146, 1, 234,
+ 124, 217, 105, 146, 253, 193, 233, 23, 78, 146, 1, 222, 179, 146, 1, 223,
+ 39, 146, 1, 210, 168, 146, 1, 149, 222, 180, 146, 1, 149, 232, 185, 146,
+ 25, 5, 149, 156, 146, 25, 5, 149, 232, 185, 146, 21, 210, 86, 146, 21,
+ 110, 146, 21, 105, 146, 21, 158, 146, 21, 161, 146, 21, 189, 146, 21,
+ 194, 146, 21, 198, 146, 21, 195, 146, 21, 200, 146, 1, 223, 188, 2, 230,
+ 224, 247, 254, 146, 1, 223, 188, 2, 232, 108, 247, 254, 146, 222, 118,
+ 78, 146, 222, 118, 50, 146, 249, 98, 227, 197, 110, 146, 249, 98, 227,
+ 197, 105, 146, 249, 98, 227, 197, 158, 146, 249, 98, 227, 197, 161, 146,
+ 249, 98, 227, 197, 123, 233, 16, 216, 201, 216, 196, 248, 48, 146, 249,
+ 98, 248, 49, 219, 119, 146, 235, 161, 146, 243, 103, 78, 183, 5, 254,
+ 254, 251, 243, 183, 5, 251, 243, 183, 5, 213, 147, 183, 1, 61, 183, 1,
+ 255, 73, 183, 1, 73, 183, 1, 236, 33, 183, 1, 70, 183, 1, 214, 118, 183,
+ 1, 245, 209, 183, 1, 254, 201, 183, 1, 226, 183, 183, 1, 253, 192, 183,
+ 1, 176, 183, 1, 234, 132, 183, 1, 243, 135, 183, 1, 242, 249, 183, 1,
+ 229, 77, 183, 1, 251, 33, 183, 1, 250, 157, 183, 1, 235, 141, 183, 1,
+ 235, 114, 183, 1, 227, 165, 183, 1, 215, 156, 183, 1, 215, 144, 183, 1,
+ 248, 135, 183, 1, 248, 119, 183, 1, 228, 110, 183, 1, 217, 105, 183, 1,
+ 216, 208, 183, 1, 248, 221, 183, 1, 248, 25, 183, 1, 197, 183, 1, 190,
+ 183, 1, 225, 147, 183, 1, 252, 191, 183, 1, 252, 18, 183, 1, 184, 183, 1,
+ 191, 183, 1, 205, 183, 1, 233, 135, 183, 1, 232, 184, 183, 1, 214, 27,
+ 183, 1, 220, 102, 183, 1, 206, 183, 1, 162, 183, 5, 227, 205, 183, 25, 5,
+ 255, 73, 183, 25, 5, 73, 183, 25, 5, 236, 33, 183, 25, 5, 70, 183, 25, 5,
+ 214, 118, 183, 25, 5, 245, 209, 183, 25, 5, 254, 201, 183, 25, 5, 226,
+ 183, 183, 25, 5, 253, 192, 183, 5, 213, 152, 183, 5, 214, 218, 183, 1,
+ 234, 115, 183, 1, 242, 226, 183, 1, 210, 116, 183, 1, 222, 179, 183, 1,
+ 244, 196, 183, 21, 210, 86, 183, 21, 110, 183, 21, 105, 183, 21, 158,
+ 183, 21, 161, 183, 21, 189, 183, 21, 194, 183, 21, 198, 183, 21, 195,
+ 183, 21, 200, 183, 216, 74, 183, 254, 253, 183, 235, 178, 183, 214, 146,
+ 183, 245, 181, 226, 188, 183, 5, 211, 78, 171, 5, 250, 255, 171, 5, 254,
+ 75, 171, 5, 213, 147, 171, 1, 61, 171, 1, 255, 73, 171, 1, 73, 171, 1,
+ 236, 33, 171, 1, 70, 171, 1, 214, 118, 171, 1, 149, 153, 171, 1, 149,
+ 156, 171, 25, 251, 2, 75, 171, 1, 75, 171, 1, 254, 201, 171, 25, 251, 2,
+ 76, 171, 1, 76, 171, 1, 253, 192, 171, 1, 176, 171, 1, 234, 132, 171, 1,
+ 243, 135, 171, 1, 242, 249, 171, 1, 229, 77, 171, 1, 251, 33, 171, 1,
+ 250, 157, 171, 1, 235, 141, 171, 1, 235, 114, 171, 1, 227, 165, 171, 1,
+ 215, 156, 171, 1, 215, 144, 171, 1, 248, 135, 171, 1, 248, 119, 171, 1,
+ 228, 110, 171, 1, 217, 105, 171, 1, 216, 208, 171, 1, 248, 221, 171, 1,
+ 248, 25, 171, 1, 197, 171, 1, 190, 171, 1, 225, 147, 171, 1, 252, 191,
+ 171, 1, 252, 18, 171, 1, 184, 171, 1, 191, 171, 1, 205, 171, 1, 233, 135,
+ 171, 1, 232, 184, 171, 1, 214, 27, 171, 1, 220, 102, 171, 1, 218, 223,
+ 171, 1, 206, 171, 1, 162, 171, 5, 227, 205, 171, 5, 253, 175, 171, 25, 5,
+ 255, 73, 171, 25, 5, 73, 171, 25, 5, 236, 33, 171, 25, 5, 70, 171, 25, 5,
+ 214, 118, 171, 25, 5, 149, 153, 171, 25, 5, 149, 222, 180, 171, 25, 5,
+ 251, 2, 75, 171, 25, 5, 75, 171, 25, 5, 254, 201, 171, 25, 5, 251, 2, 76,
+ 171, 25, 5, 76, 171, 25, 5, 253, 192, 171, 5, 213, 152, 171, 226, 204,
+ 171, 1, 149, 222, 180, 171, 1, 149, 232, 185, 171, 25, 5, 149, 156, 171,
+ 25, 5, 149, 232, 185, 171, 21, 210, 86, 171, 21, 110, 171, 21, 105, 171,
+ 21, 158, 171, 21, 161, 171, 21, 189, 171, 21, 194, 171, 21, 198, 171, 21,
+ 195, 171, 21, 200, 171, 255, 21, 50, 171, 222, 118, 50, 157, 5, 250, 255,
+ 157, 5, 254, 75, 157, 5, 213, 147, 157, 1, 61, 157, 1, 255, 73, 157, 1,
+ 73, 157, 1, 236, 33, 157, 1, 70, 157, 1, 214, 118, 157, 1, 149, 153, 157,
+ 1, 149, 156, 157, 1, 75, 157, 1, 254, 201, 157, 1, 76, 157, 1, 253, 192,
+ 157, 1, 176, 157, 1, 234, 132, 157, 1, 243, 135, 157, 1, 242, 249, 157,
+ 1, 229, 77, 157, 1, 251, 33, 157, 1, 250, 157, 157, 1, 235, 141, 157, 1,
+ 235, 114, 157, 1, 227, 165, 157, 1, 215, 156, 157, 1, 215, 144, 157, 1,
+ 248, 135, 157, 1, 248, 119, 157, 1, 228, 110, 157, 1, 217, 105, 157, 1,
+ 216, 208, 157, 1, 248, 221, 157, 1, 248, 25, 157, 1, 197, 157, 1, 190,
+ 157, 1, 225, 147, 157, 1, 252, 191, 157, 1, 252, 18, 157, 1, 184, 157, 1,
+ 191, 157, 1, 205, 157, 1, 233, 135, 157, 1, 232, 184, 157, 1, 214, 27,
+ 157, 1, 220, 102, 157, 1, 218, 223, 157, 1, 206, 157, 1, 162, 157, 5,
+ 227, 205, 157, 5, 253, 175, 157, 25, 5, 255, 73, 157, 25, 5, 73, 157, 25,
+ 5, 236, 33, 157, 25, 5, 70, 157, 25, 5, 214, 118, 157, 25, 5, 149, 153,
+ 157, 25, 5, 149, 222, 180, 157, 25, 5, 75, 157, 25, 5, 254, 201, 157, 25,
+ 5, 76, 157, 25, 5, 253, 192, 157, 5, 213, 152, 157, 254, 202, 233, 23,
+ 78, 157, 253, 193, 233, 23, 78, 157, 1, 222, 179, 157, 1, 223, 39, 157,
+ 1, 210, 168, 157, 1, 149, 222, 180, 157, 1, 149, 232, 185, 157, 25, 5,
+ 149, 156, 157, 25, 5, 149, 232, 185, 157, 21, 210, 86, 157, 21, 110, 157,
+ 21, 105, 157, 21, 158, 157, 21, 161, 157, 21, 189, 157, 21, 194, 157, 21,
+ 198, 157, 21, 195, 157, 21, 200, 157, 235, 161, 157, 1, 212, 65, 157,
+ 244, 2, 123, 224, 21, 157, 244, 2, 123, 242, 27, 157, 244, 2, 134, 224,
+ 19, 157, 244, 2, 123, 219, 117, 157, 244, 2, 123, 245, 188, 157, 244, 2,
+ 134, 219, 116, 36, 5, 254, 75, 36, 5, 213, 147, 36, 1, 61, 36, 1, 255,
+ 73, 36, 1, 73, 36, 1, 236, 33, 36, 1, 70, 36, 1, 214, 118, 36, 1, 75, 36,
+ 1, 245, 209, 36, 1, 254, 201, 36, 1, 76, 36, 1, 226, 183, 36, 1, 253,
+ 192, 36, 1, 176, 36, 1, 229, 77, 36, 1, 251, 33, 36, 1, 235, 141, 36, 1,
+ 227, 165, 36, 1, 215, 156, 36, 1, 228, 110, 36, 1, 217, 105, 36, 1, 197,
+ 36, 1, 228, 92, 36, 1, 190, 36, 1, 184, 36, 1, 191, 36, 1, 205, 36, 1,
+ 222, 179, 36, 1, 233, 135, 36, 1, 232, 184, 36, 1, 232, 175, 36, 1, 214,
+ 27, 36, 1, 220, 102, 36, 1, 218, 223, 36, 1, 206, 36, 1, 162, 36, 25, 5,
+ 255, 73, 36, 25, 5, 73, 36, 25, 5, 236, 33, 36, 25, 5, 70, 36, 25, 5,
+ 214, 118, 36, 25, 5, 75, 36, 25, 5, 245, 209, 36, 25, 5, 254, 201, 36,
+ 25, 5, 76, 36, 25, 5, 226, 183, 36, 25, 5, 253, 192, 36, 5, 213, 152, 36,
+ 226, 204, 36, 253, 193, 233, 23, 78, 36, 21, 210, 86, 36, 21, 110, 36,
+ 21, 105, 36, 21, 158, 36, 21, 161, 36, 21, 189, 36, 21, 194, 36, 21, 198,
+ 36, 21, 195, 36, 21, 200, 36, 54, 216, 247, 36, 54, 123, 240, 210, 36,
+ 54, 123, 216, 147, 36, 248, 146, 50, 36, 230, 135, 50, 36, 211, 45, 50,
+ 36, 248, 87, 50, 36, 249, 139, 50, 36, 253, 238, 77, 50, 36, 222, 118,
+ 50, 36, 54, 50, 148, 5, 250, 255, 148, 5, 254, 75, 148, 5, 213, 147, 148,
+ 1, 61, 148, 1, 255, 73, 148, 1, 73, 148, 1, 236, 33, 148, 1, 70, 148, 1,
+ 214, 118, 148, 1, 149, 153, 148, 1, 149, 156, 148, 1, 75, 148, 1, 245,
+ 209, 148, 1, 254, 201, 148, 1, 76, 148, 1, 226, 183, 148, 1, 253, 192,
+ 148, 1, 176, 148, 1, 234, 132, 148, 1, 243, 135, 148, 1, 242, 249, 148,
+ 1, 229, 77, 148, 1, 251, 33, 148, 1, 250, 157, 148, 1, 235, 141, 148, 1,
+ 235, 114, 148, 1, 227, 165, 148, 1, 215, 156, 148, 1, 215, 144, 148, 1,
+ 248, 135, 148, 1, 248, 119, 148, 1, 228, 110, 148, 1, 217, 105, 148, 1,
+ 216, 208, 148, 1, 248, 221, 148, 1, 248, 25, 148, 1, 197, 148, 1, 190,
+ 148, 1, 225, 147, 148, 1, 252, 191, 148, 1, 252, 18, 148, 1, 184, 148, 1,
+ 191, 148, 1, 205, 148, 1, 222, 179, 148, 1, 233, 135, 148, 1, 232, 184,
+ 148, 1, 214, 27, 148, 1, 220, 102, 148, 1, 218, 223, 148, 1, 206, 148, 1,
+ 162, 148, 5, 253, 175, 148, 25, 5, 255, 73, 148, 25, 5, 73, 148, 25, 5,
+ 236, 33, 148, 25, 5, 70, 148, 25, 5, 214, 118, 148, 25, 5, 149, 153, 148,
+ 25, 5, 149, 222, 180, 148, 25, 5, 75, 148, 25, 5, 245, 209, 148, 25, 5,
+ 254, 201, 148, 25, 5, 76, 148, 25, 5, 226, 183, 148, 25, 5, 253, 192,
+ 148, 5, 213, 152, 148, 233, 23, 78, 148, 254, 202, 233, 23, 78, 148, 1,
+ 215, 183, 148, 1, 246, 38, 148, 1, 149, 222, 180, 148, 1, 149, 232, 185,
+ 148, 25, 5, 149, 156, 148, 25, 5, 149, 232, 185, 148, 21, 210, 86, 148,
+ 21, 110, 148, 21, 105, 148, 21, 158, 148, 21, 161, 148, 21, 189, 148, 21,
+ 194, 148, 21, 198, 148, 21, 195, 148, 21, 200, 148, 244, 2, 21, 210, 87,
+ 31, 226, 237, 224, 223, 64, 161, 148, 244, 2, 21, 123, 31, 226, 237, 224,
+ 223, 64, 161, 148, 244, 2, 21, 113, 31, 226, 237, 224, 223, 64, 161, 148,
+ 244, 2, 21, 134, 31, 226, 237, 224, 223, 64, 161, 148, 244, 2, 21, 123,
+ 31, 245, 42, 224, 223, 64, 161, 148, 244, 2, 21, 113, 31, 245, 42, 224,
+ 223, 64, 161, 148, 244, 2, 21, 134, 31, 245, 42, 224, 223, 64, 161, 148,
+ 5, 215, 84, 165, 5, 254, 75, 165, 5, 213, 147, 165, 1, 61, 165, 1, 255,
+ 73, 165, 1, 73, 165, 1, 236, 33, 165, 1, 70, 165, 1, 214, 118, 165, 1,
+ 149, 153, 165, 1, 149, 156, 165, 1, 75, 165, 1, 245, 209, 165, 1, 254,
+ 201, 165, 1, 76, 165, 1, 226, 183, 165, 1, 253, 192, 165, 1, 176, 165, 1,
+ 234, 132, 165, 1, 243, 135, 165, 1, 242, 249, 165, 1, 229, 77, 165, 1,
+ 251, 33, 165, 1, 250, 157, 165, 1, 235, 141, 165, 1, 235, 114, 165, 1,
+ 227, 165, 165, 1, 215, 156, 165, 1, 215, 144, 165, 1, 248, 135, 165, 1,
+ 248, 119, 165, 1, 228, 110, 165, 1, 217, 105, 165, 1, 216, 208, 165, 1,
+ 248, 221, 165, 1, 248, 25, 165, 1, 197, 165, 1, 190, 165, 1, 225, 147,
+ 165, 1, 252, 191, 165, 1, 252, 18, 165, 1, 184, 165, 1, 191, 165, 1, 205,
+ 165, 1, 222, 179, 165, 1, 233, 135, 165, 1, 232, 184, 165, 1, 214, 27,
+ 165, 1, 220, 102, 165, 1, 218, 223, 165, 1, 206, 165, 1, 162, 165, 5,
+ 227, 205, 165, 5, 253, 175, 165, 25, 5, 255, 73, 165, 25, 5, 73, 165, 25,
+ 5, 236, 33, 165, 25, 5, 70, 165, 25, 5, 214, 118, 165, 25, 5, 149, 153,
+ 165, 25, 5, 149, 222, 180, 165, 25, 5, 75, 165, 25, 5, 245, 209, 165, 25,
+ 5, 254, 201, 165, 25, 5, 76, 165, 25, 5, 226, 183, 165, 25, 5, 253, 192,
+ 165, 5, 213, 152, 165, 233, 23, 78, 165, 254, 202, 233, 23, 78, 165, 1,
+ 244, 196, 165, 1, 149, 222, 180, 165, 1, 149, 232, 185, 165, 25, 5, 149,
+ 156, 165, 25, 5, 149, 232, 185, 165, 21, 210, 86, 165, 21, 110, 165, 21,
+ 105, 165, 21, 158, 165, 21, 161, 165, 21, 189, 165, 21, 194, 165, 21,
+ 198, 165, 21, 195, 165, 21, 200, 165, 5, 235, 102, 165, 5, 214, 161, 136,
+ 5, 254, 75, 136, 5, 213, 147, 136, 1, 61, 136, 1, 255, 73, 136, 1, 73,
+ 136, 1, 236, 33, 136, 1, 70, 136, 1, 214, 118, 136, 1, 149, 153, 136, 1,
+ 149, 156, 136, 1, 75, 136, 1, 245, 209, 136, 1, 254, 201, 136, 1, 76,
+ 136, 1, 226, 183, 136, 1, 253, 192, 136, 1, 176, 136, 1, 234, 132, 136,
+ 1, 243, 135, 136, 1, 242, 249, 136, 1, 229, 77, 136, 1, 251, 33, 136, 1,
+ 250, 157, 136, 1, 235, 141, 136, 1, 235, 114, 136, 1, 227, 165, 136, 1,
+ 215, 156, 136, 1, 215, 144, 136, 1, 248, 135, 136, 1, 248, 119, 136, 1,
+ 228, 110, 136, 1, 217, 105, 136, 1, 216, 208, 136, 1, 248, 221, 136, 1,
+ 248, 25, 136, 1, 197, 136, 1, 228, 92, 136, 1, 190, 136, 1, 225, 147,
+ 136, 1, 252, 191, 136, 1, 252, 18, 136, 1, 184, 136, 1, 191, 136, 1, 205,
+ 136, 1, 222, 179, 136, 1, 233, 135, 136, 1, 232, 184, 136, 1, 232, 175,
+ 136, 1, 214, 27, 136, 1, 220, 102, 136, 1, 218, 223, 136, 1, 206, 136, 1,
+ 162, 136, 1, 215, 125, 136, 5, 253, 175, 136, 25, 5, 255, 73, 136, 25, 5,
+ 73, 136, 25, 5, 236, 33, 136, 25, 5, 70, 136, 25, 5, 214, 118, 136, 25,
+ 5, 149, 153, 136, 25, 5, 149, 222, 180, 136, 25, 5, 75, 136, 25, 5, 245,
+ 209, 136, 25, 5, 254, 201, 136, 25, 5, 76, 136, 25, 5, 226, 183, 136, 25,
+ 5, 253, 192, 136, 5, 213, 152, 136, 1, 59, 223, 73, 136, 253, 193, 233,
+ 23, 78, 136, 1, 149, 222, 180, 136, 1, 149, 232, 185, 136, 25, 5, 149,
+ 156, 136, 25, 5, 149, 232, 185, 136, 21, 210, 86, 136, 21, 110, 136, 21,
+ 105, 136, 21, 158, 136, 21, 161, 136, 21, 189, 136, 21, 194, 136, 21,
+ 198, 136, 21, 195, 136, 21, 200, 136, 54, 216, 247, 136, 54, 123, 240,
+ 210, 136, 54, 123, 216, 147, 136, 244, 2, 123, 224, 21, 136, 244, 2, 123,
+ 242, 27, 136, 244, 2, 134, 224, 19, 136, 248, 150, 78, 136, 1, 250, 99,
+ 228, 111, 136, 1, 250, 99, 230, 25, 136, 1, 250, 99, 222, 180, 136, 1,
+ 250, 99, 156, 136, 1, 250, 99, 232, 185, 136, 1, 250, 99, 235, 23, 175,
+ 5, 254, 74, 175, 5, 213, 146, 175, 1, 253, 165, 175, 1, 255, 27, 175, 1,
+ 254, 223, 175, 1, 254, 238, 175, 1, 235, 151, 175, 1, 236, 32, 175, 1,
+ 214, 110, 175, 1, 214, 112, 175, 1, 235, 173, 175, 1, 235, 174, 175, 1,
+ 236, 18, 175, 1, 236, 20, 175, 1, 245, 17, 175, 1, 245, 204, 175, 1, 254,
+ 188, 175, 1, 226, 108, 175, 1, 226, 177, 175, 1, 253, 178, 175, 1, 254,
+ 146, 234, 187, 175, 1, 231, 209, 234, 187, 175, 1, 254, 146, 243, 82,
+ 175, 1, 231, 209, 243, 82, 175, 1, 234, 229, 229, 222, 175, 1, 221, 236,
+ 243, 82, 175, 1, 254, 146, 250, 216, 175, 1, 231, 209, 250, 216, 175, 1,
+ 254, 146, 235, 127, 175, 1, 231, 209, 235, 127, 175, 1, 217, 98, 229,
+ 222, 175, 1, 217, 98, 221, 235, 229, 223, 175, 1, 221, 236, 235, 127,
+ 175, 1, 254, 146, 215, 152, 175, 1, 231, 209, 215, 152, 175, 1, 254, 146,
+ 248, 126, 175, 1, 231, 209, 248, 126, 175, 1, 230, 53, 229, 180, 175, 1,
+ 221, 236, 248, 126, 175, 1, 254, 146, 217, 30, 175, 1, 231, 209, 217, 30,
+ 175, 1, 254, 146, 248, 144, 175, 1, 231, 209, 248, 144, 175, 1, 248, 174,
+ 229, 180, 175, 1, 221, 236, 248, 144, 175, 1, 254, 146, 225, 228, 175, 1,
+ 231, 209, 225, 228, 175, 1, 254, 146, 252, 112, 175, 1, 231, 209, 252,
+ 112, 175, 1, 231, 131, 175, 1, 254, 131, 252, 112, 175, 1, 211, 51, 175,
+ 1, 223, 133, 175, 1, 248, 174, 233, 67, 175, 1, 214, 1, 175, 1, 217, 98,
+ 221, 210, 175, 1, 230, 53, 221, 210, 175, 1, 248, 174, 221, 210, 175, 1,
+ 241, 242, 175, 1, 230, 53, 233, 67, 175, 1, 244, 156, 175, 5, 254, 177,
+ 175, 25, 5, 254, 233, 175, 25, 5, 234, 155, 254, 240, 175, 25, 5, 247,
+ 228, 254, 240, 175, 25, 5, 234, 155, 235, 170, 175, 25, 5, 247, 228, 235,
+ 170, 175, 25, 5, 234, 155, 226, 88, 175, 25, 5, 247, 228, 226, 88, 175,
+ 25, 5, 243, 124, 175, 25, 5, 234, 15, 175, 25, 5, 247, 228, 234, 15, 175,
+ 25, 5, 234, 17, 248, 67, 175, 25, 5, 234, 16, 242, 47, 254, 233, 175, 25,
+ 5, 234, 16, 242, 47, 247, 228, 254, 233, 175, 25, 5, 234, 16, 242, 47,
+ 243, 81, 175, 25, 5, 243, 81, 175, 25, 5, 247, 228, 243, 124, 175, 25, 5,
+ 247, 228, 243, 81, 175, 224, 141, 233, 207, 168, 135, 234, 29, 234, 246,
+ 168, 135, 234, 106, 234, 128, 168, 135, 234, 106, 234, 99, 168, 135, 234,
+ 106, 234, 95, 168, 135, 234, 106, 234, 103, 168, 135, 234, 106, 223, 154,
+ 168, 135, 229, 5, 228, 248, 168, 135, 250, 87, 250, 147, 168, 135, 250,
+ 87, 250, 95, 168, 135, 250, 87, 250, 146, 168, 135, 219, 59, 219, 58,
+ 168, 135, 250, 87, 250, 83, 168, 135, 210, 245, 210, 252, 168, 135, 247,
+ 146, 250, 154, 168, 135, 216, 42, 225, 238, 168, 135, 216, 157, 216, 200,
+ 168, 135, 216, 157, 229, 201, 168, 135, 216, 157, 225, 111, 168, 135,
+ 228, 75, 229, 98, 168, 135, 247, 146, 248, 68, 168, 135, 216, 42, 217,
+ 55, 168, 135, 216, 157, 216, 131, 168, 135, 216, 157, 216, 204, 168, 135,
+ 216, 157, 216, 154, 168, 135, 228, 75, 227, 237, 168, 135, 251, 206, 252,
+ 164, 168, 135, 225, 17, 225, 42, 168, 135, 225, 122, 225, 113, 168, 135,
+ 244, 44, 244, 196, 168, 135, 225, 122, 225, 141, 168, 135, 244, 44, 244,
+ 173, 168, 135, 225, 122, 221, 247, 168, 135, 230, 162, 184, 168, 135,
+ 210, 245, 211, 79, 168, 135, 222, 212, 222, 139, 168, 135, 222, 140, 168,
+ 135, 232, 157, 232, 206, 168, 135, 232, 98, 168, 135, 211, 228, 212, 61,
+ 168, 135, 219, 59, 222, 6, 168, 135, 219, 59, 222, 114, 168, 135, 219,
+ 59, 218, 82, 168, 135, 241, 69, 241, 159, 168, 135, 232, 157, 250, 68,
+ 168, 135, 144, 254, 115, 168, 135, 241, 69, 228, 70, 168, 135, 226, 68,
+ 168, 135, 221, 230, 61, 168, 135, 231, 204, 242, 17, 168, 135, 221, 230,
+ 255, 73, 168, 135, 221, 230, 254, 136, 168, 135, 221, 230, 73, 168, 135,
+ 221, 230, 236, 33, 168, 135, 221, 230, 214, 214, 168, 135, 221, 230, 214,
+ 212, 168, 135, 221, 230, 70, 168, 135, 221, 230, 214, 118, 168, 135, 225,
+ 124, 168, 249, 98, 16, 252, 165, 168, 135, 221, 230, 75, 168, 135, 221,
+ 230, 254, 243, 168, 135, 221, 230, 76, 168, 135, 221, 230, 254, 202, 231,
+ 198, 168, 135, 221, 230, 254, 202, 231, 199, 168, 135, 233, 106, 168,
+ 135, 231, 195, 168, 135, 231, 196, 168, 135, 231, 204, 245, 180, 168,
+ 135, 231, 204, 216, 156, 168, 135, 231, 204, 215, 228, 168, 135, 231,
+ 204, 250, 135, 168, 135, 216, 198, 168, 135, 228, 205, 168, 135, 211, 73,
+ 168, 135, 244, 35, 168, 21, 210, 86, 168, 21, 110, 168, 21, 105, 168, 21,
+ 158, 168, 21, 161, 168, 21, 189, 168, 21, 194, 168, 21, 198, 168, 21,
+ 195, 168, 21, 200, 168, 135, 254, 111, 168, 135, 234, 104, 209, 209, 1,
+ 234, 28, 209, 209, 1, 234, 106, 218, 35, 209, 209, 1, 234, 106, 217, 62,
+ 209, 209, 1, 229, 4, 209, 209, 1, 249, 238, 209, 209, 1, 219, 59, 217,
+ 62, 209, 209, 1, 227, 134, 209, 209, 1, 247, 145, 209, 209, 1, 111, 209,
+ 209, 1, 216, 157, 218, 35, 209, 209, 1, 216, 157, 217, 62, 209, 209, 1,
+ 228, 74, 209, 209, 1, 251, 205, 209, 209, 1, 225, 16, 209, 209, 1, 225,
+ 122, 218, 35, 209, 209, 1, 244, 44, 217, 62, 209, 209, 1, 225, 122, 217,
+ 62, 209, 209, 1, 244, 44, 218, 35, 209, 209, 1, 230, 161, 209, 209, 1,
+ 210, 244, 209, 209, 1, 232, 157, 232, 206, 209, 209, 1, 232, 157, 232,
+ 121, 209, 209, 1, 211, 227, 209, 209, 1, 219, 59, 218, 35, 209, 209, 1,
+ 241, 69, 218, 35, 209, 209, 1, 76, 209, 209, 1, 241, 69, 217, 62, 209,
+ 209, 245, 163, 209, 209, 25, 5, 61, 209, 209, 25, 5, 231, 204, 234, 234,
+ 209, 209, 25, 5, 255, 73, 209, 209, 25, 5, 254, 136, 209, 209, 25, 5, 73,
+ 209, 209, 25, 5, 236, 33, 209, 209, 25, 5, 211, 117, 209, 209, 25, 5,
+ 210, 169, 209, 209, 25, 5, 70, 209, 209, 25, 5, 214, 118, 209, 209, 25,
+ 5, 231, 204, 234, 13, 209, 209, 220, 145, 5, 232, 156, 209, 209, 220,
+ 145, 5, 227, 134, 209, 209, 25, 5, 75, 209, 209, 25, 5, 245, 195, 209,
+ 209, 25, 5, 76, 209, 209, 25, 5, 253, 167, 209, 209, 25, 5, 254, 201,
+ 209, 209, 234, 29, 233, 135, 209, 209, 138, 231, 204, 245, 180, 209, 209,
+ 138, 231, 204, 216, 156, 209, 209, 138, 231, 204, 216, 117, 209, 209,
+ 138, 231, 204, 250, 223, 209, 209, 251, 4, 78, 209, 209, 228, 214, 209,
+ 209, 21, 210, 86, 209, 209, 21, 110, 209, 209, 21, 105, 209, 209, 21,
+ 158, 209, 209, 21, 161, 209, 209, 21, 189, 209, 209, 21, 194, 209, 209,
+ 21, 198, 209, 209, 21, 195, 209, 209, 21, 200, 209, 209, 241, 69, 228,
+ 74, 209, 209, 241, 69, 230, 161, 209, 209, 1, 234, 107, 242, 174, 209,
+ 209, 1, 234, 107, 227, 134, 63, 3, 226, 204, 63, 164, 242, 115, 211, 0,
+ 230, 248, 215, 189, 61, 63, 164, 242, 115, 211, 0, 230, 248, 255, 159,
+ 222, 216, 252, 77, 184, 63, 164, 242, 115, 211, 0, 230, 248, 255, 159,
+ 242, 115, 215, 173, 184, 63, 164, 65, 211, 0, 230, 248, 231, 93, 184, 63,
+ 164, 249, 252, 211, 0, 230, 248, 220, 109, 184, 63, 164, 250, 239, 211,
+ 0, 230, 248, 225, 112, 220, 96, 184, 63, 164, 211, 0, 230, 248, 215, 173,
+ 220, 96, 184, 63, 164, 221, 208, 220, 95, 63, 164, 251, 128, 211, 0, 230,
+ 247, 63, 164, 251, 223, 220, 3, 211, 0, 230, 247, 63, 164, 235, 197, 215,
+ 172, 63, 164, 248, 61, 215, 173, 251, 127, 63, 164, 220, 95, 63, 164,
+ 227, 139, 220, 95, 63, 164, 215, 173, 220, 95, 63, 164, 227, 139, 215,
+ 173, 220, 95, 63, 164, 222, 236, 250, 122, 218, 236, 220, 95, 63, 164,
+ 223, 42, 242, 146, 220, 95, 63, 164, 250, 239, 255, 163, 222, 144, 231,
+ 92, 199, 251, 7, 63, 164, 242, 115, 215, 172, 63, 232, 144, 5, 250, 155,
+ 222, 143, 63, 232, 144, 5, 232, 252, 222, 143, 63, 253, 212, 5, 220, 105,
+ 243, 65, 255, 164, 222, 143, 63, 253, 212, 5, 255, 161, 190, 63, 253,
+ 212, 5, 221, 182, 215, 168, 63, 5, 223, 130, 247, 159, 243, 64, 63, 5,
+ 223, 130, 247, 159, 242, 176, 63, 5, 223, 130, 247, 159, 242, 116, 63, 5,
+ 223, 130, 229, 219, 243, 64, 63, 5, 223, 130, 229, 219, 242, 176, 63, 5,
+ 223, 130, 247, 159, 223, 130, 229, 218, 63, 21, 210, 86, 63, 21, 110, 63,
+ 21, 105, 63, 21, 158, 63, 21, 161, 63, 21, 189, 63, 21, 194, 63, 21, 198,
+ 63, 21, 195, 63, 21, 200, 63, 21, 163, 110, 63, 21, 163, 105, 63, 21,
+ 163, 158, 63, 21, 163, 161, 63, 21, 163, 189, 63, 21, 163, 194, 63, 21,
+ 163, 198, 63, 21, 163, 195, 63, 21, 163, 200, 63, 21, 163, 210, 86, 63,
+ 164, 251, 130, 222, 143, 63, 164, 229, 68, 251, 68, 227, 149, 210, 25,
+ 63, 164, 250, 239, 255, 163, 222, 144, 251, 69, 230, 202, 251, 7, 63,
+ 164, 229, 68, 251, 68, 220, 106, 222, 143, 63, 164, 250, 132, 230, 247,
+ 63, 164, 215, 184, 255, 160, 63, 164, 242, 100, 222, 144, 242, 63, 63,
+ 164, 242, 100, 222, 144, 242, 69, 63, 164, 254, 116, 234, 123, 242, 63,
+ 63, 164, 254, 116, 234, 123, 242, 69, 63, 5, 211, 65, 215, 171, 63, 5,
+ 231, 167, 215, 171, 63, 1, 176, 63, 1, 234, 132, 63, 1, 243, 135, 63, 1,
+ 242, 249, 63, 1, 229, 77, 63, 1, 251, 33, 63, 1, 250, 157, 63, 1, 235,
+ 141, 63, 1, 227, 165, 63, 1, 215, 156, 63, 1, 215, 144, 63, 1, 248, 135,
+ 63, 1, 248, 119, 63, 1, 228, 110, 63, 1, 217, 105, 63, 1, 216, 208, 63,
+ 1, 248, 221, 63, 1, 248, 25, 63, 1, 197, 63, 1, 190, 63, 1, 225, 147, 63,
+ 1, 252, 191, 63, 1, 252, 18, 63, 1, 184, 63, 1, 215, 183, 63, 1, 215,
+ 175, 63, 1, 246, 38, 63, 1, 246, 33, 63, 1, 212, 65, 63, 1, 210, 82, 63,
+ 1, 210, 116, 63, 1, 255, 166, 63, 1, 191, 63, 1, 205, 63, 1, 233, 135,
+ 63, 1, 220, 102, 63, 1, 218, 223, 63, 1, 206, 63, 1, 162, 63, 1, 61, 63,
+ 1, 233, 231, 63, 1, 244, 77, 205, 63, 1, 234, 46, 63, 1, 222, 179, 63,
+ 25, 5, 255, 73, 63, 25, 5, 73, 63, 25, 5, 236, 33, 63, 25, 5, 70, 63, 25,
+ 5, 214, 118, 63, 25, 5, 149, 153, 63, 25, 5, 149, 222, 180, 63, 25, 5,
+ 149, 156, 63, 25, 5, 149, 232, 185, 63, 25, 5, 75, 63, 25, 5, 245, 209,
+ 63, 25, 5, 76, 63, 25, 5, 226, 183, 63, 5, 222, 221, 218, 84, 229, 78,
+ 222, 211, 63, 5, 222, 216, 252, 76, 63, 25, 5, 223, 49, 73, 63, 25, 5,
+ 223, 49, 236, 33, 63, 5, 227, 149, 210, 26, 229, 226, 248, 221, 63, 5,
+ 219, 71, 233, 60, 63, 164, 242, 29, 63, 164, 226, 57, 63, 5, 233, 63,
+ 222, 143, 63, 5, 211, 70, 222, 143, 63, 5, 233, 64, 215, 184, 251, 7, 63,
+ 5, 231, 95, 251, 7, 63, 5, 242, 119, 251, 8, 223, 40, 63, 5, 242, 119,
+ 231, 85, 223, 40, 63, 5, 235, 193, 231, 95, 251, 7, 63, 218, 73, 5, 233,
+ 64, 215, 184, 251, 7, 63, 218, 73, 5, 231, 95, 251, 7, 63, 218, 73, 5,
+ 235, 193, 231, 95, 251, 7, 63, 218, 73, 1, 176, 63, 218, 73, 1, 234, 132,
+ 63, 218, 73, 1, 243, 135, 63, 218, 73, 1, 242, 249, 63, 218, 73, 1, 229,
+ 77, 63, 218, 73, 1, 251, 33, 63, 218, 73, 1, 250, 157, 63, 218, 73, 1,
+ 235, 141, 63, 218, 73, 1, 227, 165, 63, 218, 73, 1, 215, 156, 63, 218,
+ 73, 1, 215, 144, 63, 218, 73, 1, 248, 135, 63, 218, 73, 1, 248, 119, 63,
+ 218, 73, 1, 228, 110, 63, 218, 73, 1, 217, 105, 63, 218, 73, 1, 216, 208,
+ 63, 218, 73, 1, 248, 221, 63, 218, 73, 1, 248, 25, 63, 218, 73, 1, 197,
+ 63, 218, 73, 1, 190, 63, 218, 73, 1, 225, 147, 63, 218, 73, 1, 252, 191,
+ 63, 218, 73, 1, 252, 18, 63, 218, 73, 1, 184, 63, 218, 73, 1, 215, 183,
+ 63, 218, 73, 1, 215, 175, 63, 218, 73, 1, 246, 38, 63, 218, 73, 1, 246,
+ 33, 63, 218, 73, 1, 212, 65, 63, 218, 73, 1, 210, 82, 63, 218, 73, 1,
+ 210, 116, 63, 218, 73, 1, 255, 166, 63, 218, 73, 1, 191, 63, 218, 73, 1,
+ 205, 63, 218, 73, 1, 233, 135, 63, 218, 73, 1, 220, 102, 63, 218, 73, 1,
+ 218, 223, 63, 218, 73, 1, 206, 63, 218, 73, 1, 162, 63, 218, 73, 1, 61,
+ 63, 218, 73, 1, 233, 231, 63, 218, 73, 1, 244, 77, 212, 65, 63, 218, 73,
+ 1, 244, 77, 191, 63, 218, 73, 1, 244, 77, 205, 63, 233, 218, 222, 141,
+ 234, 132, 63, 233, 218, 222, 141, 234, 133, 251, 69, 230, 202, 251, 7,
+ 63, 250, 252, 5, 114, 252, 70, 63, 250, 252, 5, 192, 252, 70, 63, 250,
+ 252, 5, 250, 253, 217, 20, 63, 250, 252, 5, 221, 207, 255, 165, 63, 16,
+ 246, 91, 251, 125, 63, 16, 223, 129, 222, 222, 63, 16, 226, 77, 243, 63,
+ 63, 16, 223, 129, 222, 223, 223, 42, 242, 145, 63, 16, 225, 112, 190, 63,
+ 16, 228, 59, 251, 125, 63, 16, 228, 59, 251, 126, 227, 139, 255, 162, 63,
+ 16, 228, 59, 251, 126, 242, 117, 255, 162, 63, 16, 228, 59, 251, 126,
+ 251, 69, 255, 162, 63, 5, 223, 130, 229, 219, 223, 130, 247, 158, 63, 5,
+ 223, 130, 229, 219, 242, 116, 63, 164, 251, 129, 220, 3, 242, 215, 230,
+ 248, 223, 41, 63, 164, 230, 163, 211, 0, 242, 215, 230, 248, 223, 41, 63,
+ 164, 227, 139, 215, 172, 63, 164, 65, 251, 152, 222, 213, 211, 0, 230,
+ 248, 231, 93, 184, 63, 164, 249, 252, 251, 152, 222, 213, 211, 0, 230,
+ 248, 220, 109, 184, 222, 250, 217, 255, 50, 233, 45, 217, 255, 50, 222,
+ 250, 217, 255, 5, 2, 247, 118, 233, 45, 217, 255, 5, 2, 247, 118, 63,
+ 164, 233, 55, 231, 96, 222, 143, 63, 164, 215, 250, 231, 96, 222, 143,
+ 68, 1, 176, 68, 1, 234, 132, 68, 1, 243, 135, 68, 1, 242, 249, 68, 1,
+ 229, 77, 68, 1, 251, 33, 68, 1, 250, 157, 68, 1, 235, 141, 68, 1, 235,
+ 114, 68, 1, 227, 165, 68, 1, 228, 76, 68, 1, 215, 156, 68, 1, 215, 144,
+ 68, 1, 248, 135, 68, 1, 248, 119, 68, 1, 228, 110, 68, 1, 217, 105, 68,
+ 1, 216, 208, 68, 1, 248, 221, 68, 1, 248, 25, 68, 1, 197, 68, 1, 190, 68,
+ 1, 225, 147, 68, 1, 252, 191, 68, 1, 252, 18, 68, 1, 184, 68, 1, 191, 68,
+ 1, 205, 68, 1, 233, 135, 68, 1, 212, 65, 68, 1, 206, 68, 1, 162, 68, 1,
+ 232, 184, 68, 1, 61, 68, 1, 220, 86, 61, 68, 1, 73, 68, 1, 236, 33, 68,
+ 1, 70, 68, 1, 214, 118, 68, 1, 75, 68, 1, 230, 151, 75, 68, 1, 76, 68, 1,
+ 253, 192, 68, 25, 5, 217, 64, 255, 73, 68, 25, 5, 255, 73, 68, 25, 5, 73,
+ 68, 25, 5, 236, 33, 68, 25, 5, 70, 68, 25, 5, 214, 118, 68, 25, 5, 75,
+ 68, 25, 5, 254, 201, 68, 25, 5, 230, 151, 236, 33, 68, 25, 5, 230, 151,
+ 76, 68, 25, 5, 160, 48, 68, 5, 254, 75, 68, 5, 59, 51, 68, 5, 213, 147,
+ 68, 5, 213, 152, 68, 5, 253, 235, 68, 116, 5, 147, 191, 68, 116, 5, 147,
+ 205, 68, 116, 5, 147, 212, 65, 68, 116, 5, 147, 162, 68, 1, 242, 132,
+ 206, 68, 21, 210, 86, 68, 21, 110, 68, 21, 105, 68, 21, 158, 68, 21, 161,
+ 68, 21, 189, 68, 21, 194, 68, 21, 198, 68, 21, 195, 68, 21, 200, 68, 5,
+ 232, 192, 221, 172, 68, 5, 221, 172, 68, 16, 232, 153, 68, 16, 249, 213,
+ 68, 16, 254, 220, 68, 16, 243, 48, 68, 1, 220, 102, 68, 1, 218, 223, 68,
+ 1, 149, 153, 68, 1, 149, 222, 180, 68, 1, 149, 156, 68, 1, 149, 232, 185,
+ 68, 25, 5, 149, 153, 68, 25, 5, 149, 222, 180, 68, 25, 5, 149, 156, 68,
+ 25, 5, 149, 232, 185, 68, 1, 230, 151, 229, 77, 68, 1, 230, 151, 235,
+ 114, 68, 1, 230, 151, 252, 111, 68, 1, 230, 151, 252, 106, 68, 116, 5,
+ 230, 151, 147, 197, 68, 116, 5, 230, 151, 147, 184, 68, 116, 5, 230, 151,
+ 147, 233, 135, 68, 1, 220, 108, 234, 213, 220, 102, 68, 25, 5, 220, 108,
+ 234, 213, 245, 55, 68, 138, 164, 220, 108, 234, 213, 241, 247, 68, 138,
+ 164, 220, 108, 234, 213, 234, 183, 225, 121, 68, 1, 212, 7, 224, 108,
+ 234, 213, 216, 208, 68, 1, 212, 7, 224, 108, 234, 213, 224, 114, 68, 25,
+ 5, 212, 7, 224, 108, 234, 213, 245, 55, 68, 25, 5, 212, 7, 224, 108, 234,
+ 213, 214, 214, 68, 5, 212, 7, 224, 108, 234, 213, 216, 29, 68, 5, 212, 7,
+ 224, 108, 234, 213, 216, 28, 68, 5, 212, 7, 224, 108, 234, 213, 216, 27,
+ 68, 5, 212, 7, 224, 108, 234, 213, 216, 26, 68, 5, 212, 7, 224, 108, 234,
+ 213, 216, 25, 68, 1, 245, 219, 224, 108, 234, 213, 228, 110, 68, 1, 245,
+ 219, 224, 108, 234, 213, 210, 176, 68, 1, 245, 219, 224, 108, 234, 213,
+ 242, 217, 68, 25, 5, 243, 59, 234, 213, 73, 68, 25, 5, 234, 188, 226,
+ 234, 68, 25, 5, 234, 188, 70, 68, 25, 5, 234, 188, 245, 209, 68, 1, 220,
+ 86, 176, 68, 1, 220, 86, 234, 132, 68, 1, 220, 86, 243, 135, 68, 1, 220,
+ 86, 251, 33, 68, 1, 220, 86, 210, 116, 68, 1, 220, 86, 227, 165, 68, 1,
+ 220, 86, 248, 221, 68, 1, 220, 86, 197, 68, 1, 220, 86, 225, 147, 68, 1,
+ 220, 86, 244, 196, 68, 1, 220, 86, 252, 191, 68, 1, 220, 86, 216, 208,
+ 68, 1, 220, 86, 162, 68, 116, 5, 220, 86, 147, 212, 65, 68, 25, 5, 220,
+ 86, 255, 73, 68, 25, 5, 220, 86, 75, 68, 25, 5, 220, 86, 160, 48, 68, 25,
+ 5, 220, 86, 40, 211, 117, 68, 5, 220, 86, 216, 28, 68, 5, 220, 86, 216,
+ 27, 68, 5, 220, 86, 216, 25, 68, 5, 220, 86, 216, 24, 68, 5, 220, 86,
+ 249, 152, 216, 28, 68, 5, 220, 86, 249, 152, 216, 27, 68, 5, 220, 86,
+ 249, 152, 245, 153, 216, 30, 68, 1, 222, 128, 226, 63, 244, 196, 68, 5,
+ 222, 128, 226, 63, 216, 25, 68, 220, 86, 21, 210, 86, 68, 220, 86, 21,
+ 110, 68, 220, 86, 21, 105, 68, 220, 86, 21, 158, 68, 220, 86, 21, 161,
+ 68, 220, 86, 21, 189, 68, 220, 86, 21, 194, 68, 220, 86, 21, 198, 68,
+ 220, 86, 21, 195, 68, 220, 86, 21, 200, 68, 5, 234, 126, 216, 29, 68, 5,
+ 234, 126, 216, 27, 68, 25, 5, 254, 190, 61, 68, 25, 5, 254, 190, 254,
+ 201, 68, 16, 220, 86, 110, 68, 16, 220, 86, 245, 30, 98, 6, 1, 254, 123,
+ 98, 6, 1, 252, 152, 98, 6, 1, 243, 106, 98, 6, 1, 247, 128, 98, 6, 1,
+ 245, 150, 98, 6, 1, 213, 160, 98, 6, 1, 210, 89, 98, 6, 1, 217, 60, 98,
+ 6, 1, 235, 255, 98, 6, 1, 234, 234, 98, 6, 1, 233, 81, 98, 6, 1, 231,
+ 185, 98, 6, 1, 229, 195, 98, 6, 1, 226, 196, 98, 6, 1, 226, 17, 98, 6, 1,
+ 210, 78, 98, 6, 1, 223, 171, 98, 6, 1, 221, 243, 98, 6, 1, 217, 50, 98,
+ 6, 1, 214, 190, 98, 6, 1, 225, 140, 98, 6, 1, 234, 121, 98, 6, 1, 242,
+ 241, 98, 6, 1, 224, 73, 98, 6, 1, 220, 20, 98, 6, 1, 250, 97, 98, 6, 1,
+ 251, 7, 98, 6, 1, 235, 100, 98, 6, 1, 250, 40, 98, 6, 1, 250, 143, 98, 6,
+ 1, 211, 163, 98, 6, 1, 235, 111, 98, 6, 1, 242, 43, 98, 6, 1, 241, 238,
+ 98, 6, 1, 241, 175, 98, 6, 1, 212, 22, 98, 6, 1, 242, 4, 98, 6, 1, 241,
+ 65, 98, 6, 1, 210, 246, 98, 6, 1, 254, 232, 98, 1, 254, 123, 98, 1, 252,
+ 152, 98, 1, 243, 106, 98, 1, 247, 128, 98, 1, 245, 150, 98, 1, 213, 160,
+ 98, 1, 210, 89, 98, 1, 217, 60, 98, 1, 235, 255, 98, 1, 234, 234, 98, 1,
+ 233, 81, 98, 1, 231, 185, 98, 1, 229, 195, 98, 1, 226, 196, 98, 1, 226,
+ 17, 98, 1, 210, 78, 98, 1, 223, 171, 98, 1, 221, 243, 98, 1, 217, 50, 98,
+ 1, 214, 190, 98, 1, 225, 140, 98, 1, 234, 121, 98, 1, 242, 241, 98, 1,
+ 224, 73, 98, 1, 220, 20, 98, 1, 250, 97, 98, 1, 251, 7, 98, 1, 235, 100,
+ 98, 1, 250, 40, 98, 1, 250, 143, 98, 1, 211, 163, 98, 1, 235, 111, 98, 1,
+ 242, 43, 98, 1, 241, 238, 98, 1, 241, 175, 98, 1, 212, 22, 98, 1, 242, 4,
+ 98, 1, 241, 65, 98, 1, 244, 121, 98, 1, 210, 246, 98, 1, 245, 165, 98, 1,
+ 215, 94, 243, 106, 98, 1, 254, 196, 98, 226, 15, 220, 137, 58, 1, 98,
+ 229, 195, 98, 1, 254, 232, 98, 1, 242, 3, 50, 98, 1, 233, 127, 50, 24,
+ 100, 234, 58, 24, 100, 218, 215, 24, 100, 228, 226, 24, 100, 216, 101,
+ 24, 100, 218, 204, 24, 100, 223, 26, 24, 100, 230, 217, 24, 100, 225, 95,
+ 24, 100, 218, 212, 24, 100, 219, 148, 24, 100, 218, 209, 24, 100, 236,
+ 56, 24, 100, 250, 46, 24, 100, 218, 219, 24, 100, 250, 106, 24, 100, 234,
+ 110, 24, 100, 216, 173, 24, 100, 225, 131, 24, 100, 241, 172, 24, 100,
+ 228, 222, 24, 100, 218, 213, 24, 100, 228, 216, 24, 100, 228, 220, 24,
+ 100, 216, 98, 24, 100, 223, 14, 24, 100, 218, 211, 24, 100, 223, 24, 24,
+ 100, 234, 218, 24, 100, 230, 210, 24, 100, 234, 221, 24, 100, 225, 90,
+ 24, 100, 225, 88, 24, 100, 225, 76, 24, 100, 225, 84, 24, 100, 225, 82,
+ 24, 100, 225, 79, 24, 100, 225, 81, 24, 100, 225, 78, 24, 100, 225, 83,
+ 24, 100, 225, 93, 24, 100, 225, 94, 24, 100, 225, 77, 24, 100, 225, 87,
+ 24, 100, 234, 219, 24, 100, 234, 217, 24, 100, 219, 141, 24, 100, 219,
+ 139, 24, 100, 219, 131, 24, 100, 219, 134, 24, 100, 219, 140, 24, 100,
+ 219, 136, 24, 100, 219, 135, 24, 100, 219, 133, 24, 100, 219, 144, 24,
+ 100, 219, 146, 24, 100, 219, 147, 24, 100, 219, 142, 24, 100, 219, 132,
+ 24, 100, 219, 137, 24, 100, 219, 145, 24, 100, 250, 90, 24, 100, 250, 88,
+ 24, 100, 250, 168, 24, 100, 250, 166, 24, 100, 226, 32, 24, 100, 236, 51,
+ 24, 100, 236, 42, 24, 100, 236, 50, 24, 100, 236, 47, 24, 100, 236, 45,
+ 24, 100, 236, 49, 24, 100, 218, 216, 24, 100, 236, 54, 24, 100, 236, 55,
+ 24, 100, 236, 43, 24, 100, 236, 48, 24, 100, 211, 26, 24, 100, 250, 45,
+ 24, 100, 250, 91, 24, 100, 250, 89, 24, 100, 250, 169, 24, 100, 250, 167,
+ 24, 100, 250, 104, 24, 100, 250, 105, 24, 100, 250, 92, 24, 100, 250,
+ 170, 24, 100, 225, 129, 24, 100, 234, 220, 24, 100, 218, 217, 24, 100,
+ 211, 32, 24, 100, 234, 49, 24, 100, 228, 218, 24, 100, 228, 224, 24, 100,
+ 228, 223, 24, 100, 216, 95, 24, 100, 244, 103, 24, 143, 244, 103, 24,
+ 143, 61, 24, 143, 254, 243, 24, 143, 191, 24, 143, 211, 92, 24, 143, 245,
+ 117, 24, 143, 75, 24, 143, 211, 36, 24, 143, 211, 47, 24, 143, 76, 24,
+ 143, 212, 65, 24, 143, 212, 62, 24, 143, 226, 234, 24, 143, 210, 244, 24,
+ 143, 70, 24, 143, 212, 11, 24, 143, 212, 22, 24, 143, 211, 250, 24, 143,
+ 210, 212, 24, 143, 245, 55, 24, 143, 211, 8, 24, 143, 73, 24, 143, 255,
+ 157, 24, 143, 255, 156, 24, 143, 211, 106, 24, 143, 211, 104, 24, 143,
+ 245, 115, 24, 143, 245, 114, 24, 143, 245, 116, 24, 143, 211, 35, 24,
+ 143, 211, 34, 24, 143, 227, 84, 24, 143, 227, 85, 24, 143, 227, 78, 24,
+ 143, 227, 83, 24, 143, 227, 81, 24, 143, 210, 238, 24, 143, 210, 237, 24,
+ 143, 210, 236, 24, 143, 210, 239, 24, 143, 210, 240, 24, 143, 215, 30,
+ 24, 143, 215, 29, 24, 143, 215, 27, 24, 143, 215, 24, 24, 143, 215, 25,
+ 24, 143, 210, 211, 24, 143, 210, 208, 24, 143, 210, 209, 24, 143, 210,
+ 203, 24, 143, 210, 204, 24, 143, 210, 205, 24, 143, 210, 207, 24, 143,
+ 245, 49, 24, 143, 245, 51, 24, 143, 211, 7, 24, 143, 240, 153, 24, 143,
+ 240, 145, 24, 143, 240, 148, 24, 143, 240, 146, 24, 143, 240, 150, 24,
+ 143, 240, 152, 24, 143, 254, 34, 24, 143, 254, 31, 24, 143, 254, 29, 24,
+ 143, 254, 30, 24, 143, 218, 220, 24, 143, 255, 158, 24, 143, 211, 105,
+ 24, 143, 211, 33, 24, 143, 227, 80, 24, 143, 227, 79, 24, 90, 234, 58,
+ 24, 90, 218, 215, 24, 90, 234, 51, 24, 90, 228, 226, 24, 90, 228, 224,
+ 24, 90, 228, 223, 24, 90, 216, 101, 24, 90, 223, 26, 24, 90, 223, 21, 24,
+ 90, 223, 18, 24, 90, 223, 11, 24, 90, 223, 6, 24, 90, 223, 1, 24, 90,
+ 223, 12, 24, 90, 223, 24, 24, 90, 230, 217, 24, 90, 225, 95, 24, 90, 225,
+ 84, 24, 90, 219, 148, 24, 90, 218, 209, 24, 90, 236, 56, 24, 90, 250, 46,
+ 24, 90, 250, 106, 24, 90, 234, 110, 24, 90, 216, 173, 24, 90, 225, 131,
+ 24, 90, 241, 172, 24, 90, 234, 52, 24, 90, 234, 50, 24, 90, 228, 222, 24,
+ 90, 228, 216, 24, 90, 228, 218, 24, 90, 228, 221, 24, 90, 228, 217, 24,
+ 90, 216, 98, 24, 90, 216, 95, 24, 90, 223, 19, 24, 90, 223, 14, 24, 90,
+ 223, 0, 24, 90, 222, 255, 24, 90, 218, 211, 24, 90, 223, 16, 24, 90, 223,
+ 15, 24, 90, 223, 8, 24, 90, 223, 10, 24, 90, 223, 23, 24, 90, 223, 3, 24,
+ 90, 223, 13, 24, 90, 223, 22, 24, 90, 222, 254, 24, 90, 230, 213, 24, 90,
+ 230, 208, 24, 90, 230, 210, 24, 90, 230, 207, 24, 90, 230, 205, 24, 90,
+ 230, 211, 24, 90, 230, 216, 24, 90, 230, 214, 24, 90, 234, 221, 24, 90,
+ 225, 86, 24, 90, 225, 87, 24, 90, 225, 92, 24, 90, 234, 219, 24, 90, 219,
+ 141, 24, 90, 219, 131, 24, 90, 219, 134, 24, 90, 219, 136, 24, 90, 226,
+ 32, 24, 90, 236, 51, 24, 90, 236, 44, 24, 90, 218, 216, 24, 90, 236, 52,
+ 24, 90, 211, 26, 24, 90, 211, 22, 24, 90, 211, 23, 24, 90, 225, 129, 24,
+ 90, 234, 220, 24, 90, 241, 170, 24, 90, 241, 168, 24, 90, 241, 171, 24,
+ 90, 241, 169, 24, 90, 211, 32, 24, 90, 234, 54, 24, 90, 234, 53, 24, 90,
+ 234, 57, 24, 90, 234, 55, 24, 90, 234, 56, 24, 90, 218, 213, 29, 3, 162,
+ 29, 3, 240, 222, 29, 3, 241, 180, 29, 3, 242, 46, 29, 3, 241, 220, 29, 3,
+ 241, 238, 29, 3, 241, 68, 29, 3, 241, 67, 29, 3, 233, 135, 29, 3, 232,
+ 98, 29, 3, 232, 241, 29, 3, 233, 134, 29, 3, 233, 50, 29, 3, 233, 58, 29,
+ 3, 232, 156, 29, 3, 232, 70, 29, 3, 241, 189, 29, 3, 241, 183, 29, 3,
+ 241, 185, 29, 3, 241, 188, 29, 3, 241, 186, 29, 3, 241, 187, 29, 3, 241,
+ 184, 29, 3, 241, 182, 29, 3, 184, 29, 3, 230, 102, 29, 3, 230, 230, 29,
+ 3, 231, 237, 29, 3, 231, 80, 29, 3, 231, 91, 29, 3, 230, 161, 29, 3, 230,
+ 42, 29, 3, 217, 163, 29, 3, 217, 157, 29, 3, 217, 159, 29, 3, 217, 162,
+ 29, 3, 217, 160, 29, 3, 217, 161, 29, 3, 217, 158, 29, 3, 217, 156, 29,
+ 3, 205, 29, 3, 222, 140, 29, 3, 223, 35, 29, 3, 223, 184, 29, 3, 223,
+ 108, 29, 3, 223, 128, 29, 3, 222, 211, 29, 3, 222, 109, 29, 3, 206, 29,
+ 3, 218, 83, 29, 3, 219, 191, 29, 3, 222, 31, 29, 3, 221, 170, 29, 3, 221,
+ 181, 29, 3, 219, 58, 29, 3, 217, 253, 29, 3, 220, 102, 29, 3, 219, 225,
+ 29, 3, 220, 32, 29, 3, 220, 98, 29, 3, 220, 61, 29, 3, 220, 63, 29, 3,
+ 220, 7, 29, 3, 219, 208, 29, 3, 224, 88, 29, 3, 224, 30, 29, 3, 224, 53,
+ 29, 3, 224, 87, 29, 3, 224, 68, 29, 3, 224, 69, 29, 3, 224, 42, 29, 3,
+ 224, 41, 29, 3, 223, 242, 29, 3, 223, 238, 29, 3, 223, 241, 29, 3, 223,
+ 239, 29, 3, 223, 240, 29, 3, 224, 65, 29, 3, 224, 59, 29, 3, 224, 61, 29,
+ 3, 224, 64, 29, 3, 224, 62, 29, 3, 224, 63, 29, 3, 224, 60, 29, 3, 224,
+ 58, 29, 3, 224, 54, 29, 3, 224, 57, 29, 3, 224, 55, 29, 3, 224, 56, 29,
+ 3, 252, 191, 29, 3, 251, 125, 29, 3, 252, 6, 29, 3, 252, 189, 29, 3, 252,
+ 66, 29, 3, 252, 75, 29, 3, 251, 205, 29, 3, 251, 83, 29, 3, 214, 27, 29,
+ 3, 212, 116, 29, 3, 213, 176, 29, 3, 214, 26, 29, 3, 213, 250, 29, 3,
+ 213, 255, 29, 3, 213, 138, 29, 3, 212, 107, 29, 3, 217, 105, 29, 3, 215,
+ 118, 29, 3, 216, 117, 29, 3, 217, 101, 29, 3, 217, 11, 29, 3, 217, 22,
+ 29, 3, 111, 29, 3, 215, 80, 29, 3, 251, 33, 29, 3, 249, 112, 29, 3, 250,
+ 51, 29, 3, 251, 32, 29, 3, 250, 182, 29, 3, 250, 190, 29, 3, 249, 238,
+ 29, 3, 249, 81, 29, 3, 211, 165, 29, 3, 211, 141, 29, 3, 211, 157, 29, 3,
+ 211, 164, 29, 3, 211, 161, 29, 3, 211, 162, 29, 3, 211, 148, 29, 3, 211,
+ 147, 29, 3, 211, 136, 29, 3, 211, 132, 29, 3, 211, 135, 29, 3, 211, 133,
+ 29, 3, 211, 134, 29, 3, 197, 29, 3, 227, 237, 29, 3, 228, 233, 29, 3,
+ 229, 225, 29, 3, 229, 103, 29, 3, 229, 107, 29, 3, 228, 74, 29, 3, 227,
+ 174, 29, 3, 227, 165, 29, 3, 227, 128, 29, 3, 227, 148, 29, 3, 227, 164,
+ 29, 3, 227, 155, 29, 3, 227, 156, 29, 3, 227, 134, 29, 3, 227, 119, 29,
+ 3, 242, 180, 61, 29, 3, 242, 180, 70, 29, 3, 242, 180, 73, 29, 3, 242,
+ 180, 255, 73, 29, 3, 242, 180, 245, 209, 29, 3, 242, 180, 75, 29, 3, 242,
+ 180, 76, 29, 3, 242, 180, 212, 65, 29, 3, 176, 29, 3, 233, 217, 29, 3,
+ 234, 92, 29, 3, 235, 10, 29, 3, 234, 181, 29, 3, 234, 182, 29, 3, 234,
+ 28, 29, 3, 234, 27, 29, 3, 233, 182, 29, 3, 233, 176, 29, 3, 233, 181,
+ 29, 3, 233, 177, 29, 3, 233, 178, 29, 3, 233, 171, 29, 3, 233, 165, 29,
+ 3, 233, 167, 29, 3, 233, 170, 29, 3, 233, 168, 29, 3, 233, 169, 29, 3,
+ 233, 166, 29, 3, 233, 164, 29, 3, 233, 160, 29, 3, 233, 163, 29, 3, 233,
+ 161, 29, 3, 233, 162, 29, 3, 212, 65, 29, 3, 211, 195, 29, 3, 211, 250,
+ 29, 3, 212, 64, 29, 3, 212, 17, 29, 3, 212, 22, 29, 3, 211, 227, 29, 3,
+ 211, 226, 29, 3, 225, 139, 61, 29, 3, 225, 139, 70, 29, 3, 225, 139, 73,
+ 29, 3, 225, 139, 255, 73, 29, 3, 225, 139, 245, 209, 29, 3, 225, 139, 75,
+ 29, 3, 225, 139, 76, 29, 3, 210, 116, 29, 3, 210, 13, 29, 3, 210, 44, 29,
+ 3, 210, 115, 29, 3, 210, 92, 29, 3, 210, 94, 29, 3, 210, 23, 29, 3, 210,
+ 0, 29, 3, 210, 82, 29, 3, 210, 62, 29, 3, 210, 69, 29, 3, 210, 81, 29, 3,
+ 210, 73, 29, 3, 210, 74, 29, 3, 210, 67, 29, 3, 210, 53, 29, 3, 191, 29,
+ 3, 210, 212, 29, 3, 211, 8, 29, 3, 211, 103, 29, 3, 211, 44, 29, 3, 211,
+ 47, 29, 3, 210, 244, 29, 3, 210, 235, 29, 3, 248, 221, 29, 3, 246, 78,
+ 29, 3, 248, 3, 29, 3, 248, 220, 29, 3, 248, 77, 29, 3, 248, 90, 29, 3,
+ 247, 145, 29, 3, 246, 47, 29, 3, 248, 135, 29, 3, 248, 100, 29, 3, 248,
+ 112, 29, 3, 248, 134, 29, 3, 248, 122, 29, 3, 248, 123, 29, 3, 248, 105,
+ 29, 3, 248, 91, 29, 3, 235, 141, 29, 3, 235, 51, 29, 3, 235, 108, 29, 3,
+ 235, 140, 29, 3, 235, 124, 29, 3, 235, 126, 29, 3, 235, 68, 29, 3, 235,
+ 31, 29, 3, 243, 135, 29, 3, 242, 113, 29, 3, 242, 214, 29, 3, 243, 132,
+ 29, 3, 243, 55, 29, 3, 243, 62, 29, 3, 242, 174, 29, 3, 242, 173, 29, 3,
+ 242, 78, 29, 3, 242, 74, 29, 3, 242, 77, 29, 3, 242, 75, 29, 3, 242, 76,
+ 29, 3, 243, 29, 29, 3, 243, 9, 29, 3, 243, 19, 29, 3, 243, 28, 29, 3,
+ 243, 23, 29, 3, 243, 24, 29, 3, 243, 13, 29, 3, 242, 254, 29, 3, 216,
+ 208, 29, 3, 216, 136, 29, 3, 216, 175, 29, 3, 216, 207, 29, 3, 216, 194,
+ 29, 3, 216, 195, 29, 3, 216, 156, 29, 3, 216, 128, 29, 3, 250, 157, 29,
+ 3, 250, 69, 29, 3, 250, 110, 29, 3, 250, 156, 29, 3, 250, 128, 29, 3,
+ 250, 131, 29, 3, 250, 86, 29, 3, 250, 58, 29, 3, 225, 147, 29, 3, 225,
+ 114, 29, 3, 225, 133, 29, 3, 225, 146, 29, 3, 225, 135, 29, 3, 225, 136,
+ 29, 3, 225, 121, 29, 3, 225, 110, 29, 3, 215, 183, 29, 3, 215, 163, 29,
+ 3, 215, 167, 29, 3, 215, 182, 29, 3, 215, 177, 29, 3, 215, 178, 29, 3,
+ 215, 166, 29, 3, 215, 161, 29, 3, 215, 39, 29, 3, 215, 31, 29, 3, 215,
+ 35, 29, 3, 215, 38, 29, 3, 215, 36, 29, 3, 215, 37, 29, 3, 215, 33, 29,
+ 3, 215, 32, 29, 3, 244, 196, 29, 3, 243, 234, 29, 3, 244, 121, 29, 3,
+ 244, 195, 29, 3, 244, 147, 29, 3, 244, 154, 29, 3, 244, 43, 29, 3, 243,
+ 213, 29, 3, 190, 29, 3, 224, 150, 29, 3, 225, 108, 29, 3, 226, 89, 29, 3,
+ 225, 211, 29, 3, 225, 221, 29, 3, 225, 16, 29, 3, 224, 114, 29, 3, 222,
+ 99, 29, 3, 230, 31, 29, 3, 243, 207, 29, 38, 243, 53, 22, 25, 233, 23,
+ 78, 29, 38, 25, 233, 23, 78, 29, 38, 243, 53, 78, 29, 221, 173, 78, 29,
+ 211, 208, 29, 243, 229, 218, 129, 29, 249, 219, 29, 220, 150, 29, 249,
+ 226, 29, 224, 199, 249, 226, 29, 224, 13, 78, 29, 226, 15, 220, 137, 29,
+ 21, 110, 29, 21, 105, 29, 21, 158, 29, 21, 161, 29, 21, 189, 29, 21, 194,
+ 29, 21, 198, 29, 21, 195, 29, 21, 200, 29, 54, 216, 247, 29, 54, 215, 73,
+ 29, 54, 216, 162, 29, 54, 244, 15, 29, 54, 244, 114, 29, 54, 219, 111,
+ 29, 54, 220, 116, 29, 54, 245, 184, 29, 54, 228, 195, 29, 54, 240, 210,
+ 29, 54, 216, 248, 216, 147, 29, 3, 221, 177, 230, 42, 29, 3, 230, 38, 29,
+ 3, 230, 39, 29, 3, 230, 40, 29, 3, 221, 177, 251, 83, 29, 3, 251, 80, 29,
+ 3, 251, 81, 29, 3, 251, 82, 29, 3, 221, 177, 243, 213, 29, 3, 243, 209,
+ 29, 3, 243, 210, 29, 3, 243, 211, 29, 3, 221, 177, 224, 114, 29, 3, 224,
+ 110, 29, 3, 224, 111, 29, 3, 224, 112, 29, 216, 31, 164, 210, 247, 29,
+ 216, 31, 164, 248, 41, 29, 216, 31, 164, 222, 238, 29, 216, 31, 164, 219,
+ 251, 222, 238, 29, 216, 31, 164, 247, 235, 29, 216, 31, 164, 234, 164,
+ 29, 216, 31, 164, 250, 94, 29, 216, 31, 164, 241, 177, 29, 216, 31, 164,
+ 248, 40, 29, 216, 31, 164, 233, 194, 169, 1, 61, 169, 1, 75, 169, 1, 73,
+ 169, 1, 76, 169, 1, 70, 169, 1, 214, 105, 169, 1, 243, 135, 169, 1, 176,
+ 169, 1, 243, 62, 169, 1, 242, 214, 169, 1, 242, 174, 169, 1, 242, 113,
+ 169, 1, 242, 79, 169, 1, 162, 169, 1, 241, 238, 169, 1, 241, 180, 169, 1,
+ 241, 68, 169, 1, 240, 222, 169, 1, 240, 201, 169, 1, 233, 135, 169, 1,
+ 233, 58, 169, 1, 232, 241, 169, 1, 232, 156, 169, 1, 232, 98, 169, 1,
+ 232, 71, 169, 1, 184, 169, 1, 231, 91, 169, 1, 230, 230, 169, 1, 230,
+ 161, 169, 1, 230, 102, 169, 1, 197, 169, 1, 241, 90, 169, 1, 229, 213,
+ 169, 1, 229, 107, 169, 1, 228, 233, 169, 1, 228, 74, 169, 1, 227, 237,
+ 169, 1, 227, 176, 169, 1, 224, 29, 169, 1, 224, 16, 169, 1, 224, 9, 169,
+ 1, 224, 1, 169, 1, 223, 246, 169, 1, 223, 244, 169, 1, 206, 169, 1, 222,
+ 91, 169, 1, 221, 181, 169, 1, 219, 191, 169, 1, 219, 58, 169, 1, 218, 83,
+ 169, 1, 218, 2, 169, 1, 248, 221, 169, 1, 217, 105, 169, 1, 248, 90, 169,
+ 1, 217, 22, 169, 1, 248, 3, 169, 1, 216, 117, 169, 1, 247, 145, 169, 1,
+ 246, 78, 169, 1, 246, 50, 169, 1, 247, 156, 169, 1, 216, 59, 169, 1, 216,
+ 58, 169, 1, 216, 47, 169, 1, 216, 46, 169, 1, 216, 45, 169, 1, 216, 44,
+ 169, 1, 215, 183, 169, 1, 215, 178, 169, 1, 215, 167, 169, 1, 215, 166,
+ 169, 1, 215, 163, 169, 1, 215, 162, 169, 1, 212, 65, 169, 1, 212, 22,
+ 169, 1, 211, 250, 169, 1, 211, 227, 169, 1, 211, 195, 169, 1, 211, 183,
+ 169, 1, 191, 169, 1, 211, 47, 169, 1, 211, 8, 169, 1, 210, 244, 169, 1,
+ 210, 212, 169, 1, 210, 177, 18, 19, 240, 168, 18, 19, 75, 18, 19, 255,
+ 37, 18, 19, 73, 18, 19, 236, 33, 18, 19, 76, 18, 19, 226, 183, 18, 19,
+ 211, 116, 226, 183, 18, 19, 72, 245, 209, 18, 19, 72, 73, 18, 19, 61, 18,
+ 19, 255, 73, 18, 19, 212, 22, 18, 19, 159, 212, 22, 18, 19, 211, 250, 18,
+ 19, 159, 211, 250, 18, 19, 211, 242, 18, 19, 159, 211, 242, 18, 19, 211,
+ 227, 18, 19, 159, 211, 227, 18, 19, 211, 215, 18, 19, 159, 211, 215, 18,
+ 19, 229, 190, 211, 215, 18, 19, 212, 65, 18, 19, 159, 212, 65, 18, 19,
+ 212, 64, 18, 19, 159, 212, 64, 18, 19, 229, 190, 212, 64, 18, 19, 254,
+ 201, 18, 19, 211, 116, 212, 98, 18, 19, 242, 180, 218, 129, 18, 19, 40,
+ 142, 18, 19, 40, 242, 136, 18, 19, 40, 251, 175, 163, 222, 233, 18, 19,
+ 40, 216, 14, 163, 222, 233, 18, 19, 40, 44, 163, 222, 233, 18, 19, 40,
+ 222, 233, 18, 19, 40, 52, 142, 18, 19, 40, 52, 219, 251, 67, 218, 90, 18,
+ 19, 40, 230, 224, 247, 120, 18, 19, 40, 219, 251, 203, 91, 18, 19, 40,
+ 225, 22, 18, 19, 40, 124, 217, 87, 18, 19, 245, 150, 18, 19, 235, 255,
+ 18, 19, 226, 196, 18, 19, 254, 123, 18, 19, 225, 221, 18, 19, 226, 87,
+ 18, 19, 225, 108, 18, 19, 225, 71, 18, 19, 225, 16, 18, 19, 224, 249, 18,
+ 19, 211, 116, 224, 249, 18, 19, 72, 241, 220, 18, 19, 72, 241, 180, 18,
+ 19, 190, 18, 19, 226, 89, 18, 19, 224, 112, 18, 19, 159, 224, 112, 18,
+ 19, 224, 110, 18, 19, 159, 224, 110, 18, 19, 224, 109, 18, 19, 159, 224,
+ 109, 18, 19, 224, 107, 18, 19, 159, 224, 107, 18, 19, 224, 106, 18, 19,
+ 159, 224, 106, 18, 19, 224, 114, 18, 19, 159, 224, 114, 18, 19, 224, 113,
+ 18, 19, 159, 224, 113, 18, 19, 211, 116, 224, 113, 18, 19, 226, 105, 18,
+ 19, 159, 226, 105, 18, 19, 72, 242, 60, 18, 19, 217, 22, 18, 19, 217, 99,
+ 18, 19, 216, 117, 18, 19, 216, 103, 18, 19, 111, 18, 19, 216, 17, 18, 19,
+ 211, 116, 216, 17, 18, 19, 72, 248, 77, 18, 19, 72, 248, 3, 18, 19, 217,
+ 105, 18, 19, 217, 101, 18, 19, 215, 78, 18, 19, 159, 215, 78, 18, 19,
+ 215, 62, 18, 19, 159, 215, 62, 18, 19, 215, 61, 18, 19, 159, 215, 61, 18,
+ 19, 105, 18, 19, 159, 105, 18, 19, 215, 54, 18, 19, 159, 215, 54, 18, 19,
+ 215, 80, 18, 19, 159, 215, 80, 18, 19, 215, 79, 18, 19, 159, 215, 79, 18,
+ 19, 229, 190, 215, 79, 18, 19, 217, 152, 18, 19, 215, 151, 18, 19, 215,
+ 135, 18, 19, 215, 133, 18, 19, 215, 156, 18, 19, 234, 182, 18, 19, 235,
+ 7, 18, 19, 234, 92, 18, 19, 234, 83, 18, 19, 234, 28, 18, 19, 234, 10,
+ 18, 19, 211, 116, 234, 10, 18, 19, 176, 18, 19, 235, 10, 18, 19, 233,
+ 178, 18, 19, 159, 233, 178, 18, 19, 233, 176, 18, 19, 159, 233, 176, 18,
+ 19, 233, 175, 18, 19, 159, 233, 175, 18, 19, 233, 174, 18, 19, 159, 233,
+ 174, 18, 19, 233, 173, 18, 19, 159, 233, 173, 18, 19, 233, 182, 18, 19,
+ 159, 233, 182, 18, 19, 233, 181, 18, 19, 159, 233, 181, 18, 19, 229, 190,
+ 233, 181, 18, 19, 235, 23, 18, 19, 233, 183, 18, 19, 219, 27, 234, 176,
+ 18, 19, 219, 27, 234, 84, 18, 19, 219, 27, 234, 23, 18, 19, 219, 27, 234,
+ 248, 18, 19, 250, 190, 18, 19, 251, 31, 18, 19, 250, 51, 18, 19, 250, 41,
+ 18, 19, 249, 238, 18, 19, 249, 174, 18, 19, 211, 116, 249, 174, 18, 19,
+ 251, 33, 18, 19, 251, 32, 18, 19, 249, 79, 18, 19, 159, 249, 79, 18, 19,
+ 249, 77, 18, 19, 159, 249, 77, 18, 19, 249, 76, 18, 19, 159, 249, 76, 18,
+ 19, 249, 75, 18, 19, 159, 249, 75, 18, 19, 249, 74, 18, 19, 159, 249, 74,
+ 18, 19, 249, 81, 18, 19, 159, 249, 81, 18, 19, 249, 80, 18, 19, 159, 249,
+ 80, 18, 19, 229, 190, 249, 80, 18, 19, 251, 66, 18, 19, 221, 209, 216,
+ 210, 18, 19, 231, 91, 18, 19, 231, 236, 18, 19, 230, 230, 18, 19, 230,
+ 201, 18, 19, 230, 161, 18, 19, 230, 132, 18, 19, 211, 116, 230, 132, 18,
+ 19, 184, 18, 19, 231, 237, 18, 19, 230, 40, 18, 19, 159, 230, 40, 18, 19,
+ 230, 38, 18, 19, 159, 230, 38, 18, 19, 230, 37, 18, 19, 159, 230, 37, 18,
+ 19, 230, 36, 18, 19, 159, 230, 36, 18, 19, 230, 35, 18, 19, 159, 230, 35,
+ 18, 19, 230, 42, 18, 19, 159, 230, 42, 18, 19, 230, 41, 18, 19, 159, 230,
+ 41, 18, 19, 229, 190, 230, 41, 18, 19, 193, 18, 19, 159, 193, 18, 19,
+ 230, 234, 18, 19, 253, 205, 193, 18, 19, 221, 209, 193, 18, 19, 229, 107,
+ 18, 19, 229, 224, 18, 19, 228, 233, 18, 19, 228, 208, 18, 19, 228, 74,
+ 18, 19, 228, 64, 18, 19, 211, 116, 228, 64, 18, 19, 197, 18, 19, 229,
+ 225, 18, 19, 227, 172, 18, 19, 159, 227, 172, 18, 19, 227, 174, 18, 19,
+ 159, 227, 174, 18, 19, 227, 173, 18, 19, 159, 227, 173, 18, 19, 229, 190,
+ 227, 173, 18, 19, 230, 25, 18, 19, 72, 229, 79, 18, 19, 228, 238, 18, 19,
+ 233, 58, 18, 19, 233, 133, 18, 19, 232, 241, 18, 19, 232, 227, 18, 19,
+ 232, 156, 18, 19, 232, 127, 18, 19, 211, 116, 232, 127, 18, 19, 233, 135,
+ 18, 19, 233, 134, 18, 19, 232, 68, 18, 19, 159, 232, 68, 18, 19, 232, 67,
+ 18, 19, 159, 232, 67, 18, 19, 232, 66, 18, 19, 159, 232, 66, 18, 19, 232,
+ 65, 18, 19, 159, 232, 65, 18, 19, 232, 64, 18, 19, 159, 232, 64, 18, 19,
+ 232, 70, 18, 19, 159, 232, 70, 18, 19, 232, 69, 18, 19, 159, 232, 69, 18,
+ 19, 156, 18, 19, 159, 156, 18, 19, 147, 156, 18, 19, 221, 181, 18, 19,
+ 222, 29, 18, 19, 219, 191, 18, 19, 219, 175, 18, 19, 219, 58, 18, 19,
+ 219, 40, 18, 19, 211, 116, 219, 40, 18, 19, 206, 18, 19, 222, 31, 18, 19,
+ 217, 249, 18, 19, 159, 217, 249, 18, 19, 217, 243, 18, 19, 159, 217, 243,
+ 18, 19, 217, 242, 18, 19, 159, 217, 242, 18, 19, 217, 238, 18, 19, 159,
+ 217, 238, 18, 19, 217, 237, 18, 19, 159, 217, 237, 18, 19, 217, 253, 18,
+ 19, 159, 217, 253, 18, 19, 217, 252, 18, 19, 159, 217, 252, 18, 19, 229,
+ 190, 217, 252, 18, 19, 222, 91, 18, 19, 253, 205, 222, 91, 18, 19, 217,
+ 254, 18, 19, 251, 218, 222, 91, 18, 19, 230, 127, 219, 108, 18, 19, 229,
+ 190, 219, 99, 18, 19, 229, 190, 222, 89, 18, 19, 229, 190, 218, 235, 18,
+ 19, 229, 190, 218, 86, 18, 19, 229, 190, 219, 98, 18, 19, 229, 190, 221,
+ 184, 18, 19, 220, 63, 18, 19, 220, 32, 18, 19, 220, 27, 18, 19, 220, 7,
+ 18, 19, 220, 1, 18, 19, 220, 102, 18, 19, 220, 98, 18, 19, 219, 206, 18,
+ 19, 159, 219, 206, 18, 19, 219, 205, 18, 19, 159, 219, 205, 18, 19, 219,
+ 204, 18, 19, 159, 219, 204, 18, 19, 219, 203, 18, 19, 159, 219, 203, 18,
+ 19, 219, 202, 18, 19, 159, 219, 202, 18, 19, 219, 208, 18, 19, 159, 219,
+ 208, 18, 19, 219, 207, 18, 19, 159, 219, 207, 18, 19, 220, 104, 18, 19,
+ 211, 47, 18, 19, 211, 101, 18, 19, 211, 8, 18, 19, 210, 255, 18, 19, 210,
+ 244, 18, 19, 210, 229, 18, 19, 211, 116, 210, 229, 18, 19, 191, 18, 19,
+ 211, 103, 18, 19, 210, 174, 18, 19, 159, 210, 174, 18, 19, 210, 173, 18,
+ 19, 159, 210, 173, 18, 19, 210, 172, 18, 19, 159, 210, 172, 18, 19, 210,
+ 171, 18, 19, 159, 210, 171, 18, 19, 210, 170, 18, 19, 159, 210, 170, 18,
+ 19, 210, 176, 18, 19, 159, 210, 176, 18, 19, 210, 175, 18, 19, 159, 210,
+ 175, 18, 19, 229, 190, 210, 175, 18, 19, 211, 117, 18, 19, 252, 4, 211,
+ 117, 18, 19, 159, 211, 117, 18, 19, 221, 209, 211, 8, 18, 19, 223, 128,
+ 18, 19, 223, 223, 223, 128, 18, 19, 159, 233, 58, 18, 19, 223, 183, 18,
+ 19, 223, 35, 18, 19, 222, 239, 18, 19, 222, 211, 18, 19, 222, 197, 18,
+ 19, 159, 232, 156, 18, 19, 205, 18, 19, 223, 184, 18, 19, 159, 233, 135,
+ 18, 19, 222, 108, 18, 19, 159, 222, 108, 18, 19, 153, 18, 19, 159, 153,
+ 18, 19, 147, 153, 18, 19, 244, 154, 18, 19, 244, 193, 18, 19, 244, 121,
+ 18, 19, 244, 108, 18, 19, 244, 43, 18, 19, 244, 34, 18, 19, 244, 196, 18,
+ 19, 244, 195, 18, 19, 243, 212, 18, 19, 159, 243, 212, 18, 19, 245, 6,
+ 18, 19, 216, 195, 18, 19, 230, 23, 216, 195, 18, 19, 216, 175, 18, 19,
+ 230, 23, 216, 175, 18, 19, 216, 171, 18, 19, 230, 23, 216, 171, 18, 19,
+ 216, 156, 18, 19, 216, 153, 18, 19, 216, 208, 18, 19, 216, 207, 18, 19,
+ 216, 127, 18, 19, 159, 216, 127, 18, 19, 216, 210, 18, 19, 215, 142, 18,
+ 19, 215, 140, 18, 19, 215, 139, 18, 19, 215, 144, 18, 19, 215, 145, 18,
+ 19, 215, 52, 18, 19, 215, 51, 18, 19, 215, 50, 18, 19, 215, 53, 18, 19,
+ 227, 193, 241, 238, 18, 19, 227, 193, 241, 180, 18, 19, 227, 193, 241,
+ 161, 18, 19, 227, 193, 241, 68, 18, 19, 227, 193, 241, 53, 18, 19, 227,
+ 193, 162, 18, 19, 227, 193, 242, 46, 18, 19, 227, 193, 242, 60, 18, 19,
+ 227, 192, 242, 60, 18, 19, 241, 154, 18, 19, 224, 84, 18, 19, 224, 53,
+ 18, 19, 224, 48, 18, 19, 224, 42, 18, 19, 224, 37, 18, 19, 224, 88, 18,
+ 19, 224, 87, 18, 19, 224, 96, 18, 19, 216, 55, 18, 19, 216, 53, 18, 19,
+ 216, 52, 18, 19, 216, 56, 18, 19, 159, 223, 128, 18, 19, 159, 223, 35,
+ 18, 19, 159, 222, 211, 18, 19, 159, 205, 18, 19, 229, 75, 18, 19, 229,
+ 27, 18, 19, 229, 23, 18, 19, 229, 4, 18, 19, 228, 255, 18, 19, 229, 77,
+ 18, 19, 229, 76, 18, 19, 229, 79, 18, 19, 228, 103, 18, 19, 221, 209,
+ 220, 63, 18, 19, 221, 209, 220, 32, 18, 19, 221, 209, 220, 7, 18, 19,
+ 221, 209, 220, 102, 18, 19, 211, 213, 216, 195, 18, 19, 211, 213, 216,
+ 175, 18, 19, 211, 213, 216, 156, 18, 19, 211, 213, 216, 208, 18, 19, 211,
+ 213, 216, 210, 18, 19, 232, 248, 18, 19, 232, 247, 18, 19, 232, 246, 18,
+ 19, 232, 245, 18, 19, 232, 254, 18, 19, 232, 253, 18, 19, 232, 255, 18,
+ 19, 216, 209, 216, 195, 18, 19, 216, 209, 216, 175, 18, 19, 216, 209,
+ 216, 171, 18, 19, 216, 209, 216, 156, 18, 19, 216, 209, 216, 153, 18, 19,
+ 216, 209, 216, 208, 18, 19, 216, 209, 216, 207, 18, 19, 216, 209, 216,
+ 210, 18, 19, 254, 189, 253, 158, 18, 19, 251, 218, 75, 18, 19, 251, 218,
+ 73, 18, 19, 251, 218, 76, 18, 19, 251, 218, 61, 18, 19, 251, 218, 212,
+ 22, 18, 19, 251, 218, 211, 250, 18, 19, 251, 218, 211, 227, 18, 19, 251,
+ 218, 212, 65, 18, 19, 251, 218, 229, 107, 18, 19, 251, 218, 228, 233, 18,
+ 19, 251, 218, 228, 74, 18, 19, 251, 218, 197, 18, 19, 251, 218, 234, 182,
+ 18, 19, 251, 218, 234, 92, 18, 19, 251, 218, 234, 28, 18, 19, 251, 218,
+ 176, 18, 19, 221, 209, 241, 238, 18, 19, 221, 209, 241, 180, 18, 19, 221,
+ 209, 241, 68, 18, 19, 221, 209, 162, 18, 19, 72, 242, 220, 18, 19, 72,
+ 242, 224, 18, 19, 72, 242, 236, 18, 19, 72, 242, 235, 18, 19, 72, 242,
+ 225, 18, 19, 72, 242, 249, 18, 19, 72, 222, 140, 18, 19, 72, 222, 211,
+ 18, 19, 72, 223, 128, 18, 19, 72, 223, 108, 18, 19, 72, 223, 35, 18, 19,
+ 72, 205, 18, 19, 72, 211, 195, 18, 19, 72, 211, 227, 18, 19, 72, 212, 22,
+ 18, 19, 72, 212, 17, 18, 19, 72, 211, 250, 18, 19, 72, 212, 65, 18, 19,
+ 72, 240, 194, 18, 19, 72, 240, 195, 18, 19, 72, 240, 198, 18, 19, 72,
+ 240, 197, 18, 19, 72, 240, 196, 18, 19, 72, 240, 200, 18, 19, 72, 216,
+ 136, 18, 19, 72, 216, 156, 18, 19, 72, 216, 195, 18, 19, 72, 216, 194,
+ 18, 19, 72, 216, 175, 18, 19, 72, 216, 208, 18, 19, 72, 215, 123, 18, 19,
+ 72, 215, 133, 18, 19, 72, 215, 151, 18, 19, 72, 215, 150, 18, 19, 72,
+ 215, 135, 18, 19, 72, 215, 156, 18, 19, 72, 224, 150, 18, 19, 72, 225,
+ 16, 18, 19, 72, 225, 221, 18, 19, 72, 225, 211, 18, 19, 72, 225, 108, 18,
+ 19, 72, 190, 18, 19, 72, 226, 105, 18, 19, 72, 242, 113, 18, 19, 72, 242,
+ 174, 18, 19, 72, 243, 62, 18, 19, 72, 243, 55, 18, 19, 72, 242, 214, 18,
+ 19, 72, 243, 135, 18, 19, 72, 234, 100, 18, 19, 72, 234, 105, 18, 19, 72,
+ 234, 119, 18, 19, 72, 234, 118, 18, 19, 72, 234, 112, 18, 19, 72, 234,
+ 132, 18, 19, 72, 234, 41, 18, 19, 72, 234, 42, 18, 19, 72, 234, 45, 18,
+ 19, 72, 234, 44, 18, 19, 72, 234, 43, 18, 19, 72, 234, 46, 18, 19, 72,
+ 234, 47, 18, 19, 72, 227, 237, 18, 19, 72, 228, 74, 18, 19, 72, 229, 107,
+ 18, 19, 72, 229, 103, 18, 19, 72, 228, 233, 18, 19, 72, 197, 18, 19, 72,
+ 230, 102, 18, 19, 72, 230, 161, 18, 19, 72, 231, 91, 18, 19, 72, 231, 80,
+ 18, 19, 72, 230, 230, 18, 19, 72, 184, 18, 19, 72, 210, 212, 18, 19, 72,
+ 210, 244, 18, 19, 72, 211, 47, 18, 19, 72, 211, 44, 18, 19, 72, 211, 8,
+ 18, 19, 72, 191, 18, 19, 72, 235, 51, 18, 19, 221, 209, 235, 51, 18, 19,
+ 72, 235, 68, 18, 19, 72, 235, 126, 18, 19, 72, 235, 124, 18, 19, 72, 235,
+ 108, 18, 19, 221, 209, 235, 108, 18, 19, 72, 235, 141, 18, 19, 72, 235,
+ 81, 18, 19, 72, 235, 85, 18, 19, 72, 235, 95, 18, 19, 72, 235, 94, 18,
+ 19, 72, 235, 93, 18, 19, 72, 235, 96, 18, 19, 72, 232, 98, 18, 19, 72,
+ 232, 156, 18, 19, 72, 233, 58, 18, 19, 72, 233, 50, 18, 19, 72, 232, 241,
+ 18, 19, 72, 233, 135, 18, 19, 72, 247, 149, 18, 19, 72, 247, 150, 18, 19,
+ 72, 247, 155, 18, 19, 72, 247, 154, 18, 19, 72, 247, 151, 18, 19, 72,
+ 247, 156, 18, 19, 72, 232, 244, 18, 19, 72, 232, 246, 18, 19, 72, 232,
+ 250, 18, 19, 72, 232, 249, 18, 19, 72, 232, 248, 18, 19, 72, 232, 254,
+ 18, 19, 72, 216, 50, 18, 19, 72, 216, 52, 18, 19, 72, 216, 55, 18, 19,
+ 72, 216, 54, 18, 19, 72, 216, 53, 18, 19, 72, 216, 56, 18, 19, 72, 216,
+ 45, 18, 19, 72, 216, 46, 18, 19, 72, 216, 58, 18, 19, 72, 216, 57, 18,
+ 19, 72, 216, 47, 18, 19, 72, 216, 59, 18, 19, 72, 210, 13, 18, 19, 72,
+ 210, 23, 18, 19, 72, 210, 94, 18, 19, 72, 210, 92, 18, 19, 72, 210, 44,
+ 18, 19, 72, 210, 116, 18, 19, 72, 210, 159, 18, 19, 72, 65, 210, 159, 18,
+ 19, 72, 246, 28, 18, 19, 72, 246, 29, 18, 19, 72, 246, 36, 18, 19, 72,
+ 246, 35, 18, 19, 72, 246, 31, 18, 19, 72, 246, 38, 18, 19, 72, 218, 83,
+ 18, 19, 72, 219, 58, 18, 19, 72, 221, 181, 18, 19, 72, 221, 170, 18, 19,
+ 72, 219, 191, 18, 19, 72, 206, 18, 19, 72, 219, 225, 18, 19, 72, 220, 7,
+ 18, 19, 72, 220, 63, 18, 19, 72, 220, 61, 18, 19, 72, 220, 32, 18, 19,
+ 72, 220, 102, 18, 19, 72, 220, 104, 18, 19, 72, 215, 163, 18, 19, 72,
+ 215, 166, 18, 19, 72, 215, 178, 18, 19, 72, 215, 177, 18, 19, 72, 215,
+ 167, 18, 19, 72, 215, 183, 18, 19, 72, 250, 69, 18, 19, 72, 250, 86, 18,
+ 19, 72, 250, 131, 18, 19, 72, 250, 128, 18, 19, 72, 250, 110, 18, 19, 72,
+ 250, 157, 18, 19, 72, 215, 126, 18, 19, 72, 215, 127, 18, 19, 72, 215,
+ 130, 18, 19, 72, 215, 129, 18, 19, 72, 215, 128, 18, 19, 72, 215, 131,
+ 18, 19, 250, 111, 50, 18, 19, 243, 229, 218, 129, 18, 19, 224, 80, 18,
+ 19, 229, 73, 18, 19, 228, 100, 18, 19, 228, 99, 18, 19, 228, 98, 18, 19,
+ 228, 97, 18, 19, 228, 102, 18, 19, 228, 101, 18, 19, 211, 213, 216, 125,
+ 18, 19, 211, 213, 216, 124, 18, 19, 211, 213, 216, 123, 18, 19, 211, 213,
+ 216, 122, 18, 19, 211, 213, 216, 121, 18, 19, 211, 213, 216, 128, 18, 19,
+ 211, 213, 216, 127, 18, 19, 211, 213, 40, 216, 210, 18, 19, 251, 218,
+ 212, 98, 226, 226, 219, 19, 78, 226, 226, 1, 252, 48, 226, 226, 1, 232,
+ 87, 226, 226, 1, 244, 151, 226, 226, 1, 222, 15, 226, 226, 1, 228, 193,
+ 226, 226, 1, 214, 226, 226, 226, 1, 248, 197, 226, 226, 1, 216, 80, 226,
+ 226, 1, 249, 229, 226, 226, 1, 250, 180, 226, 226, 1, 230, 91, 226, 226,
+ 1, 242, 156, 226, 226, 1, 229, 63, 226, 226, 1, 218, 122, 226, 226, 1,
+ 222, 135, 226, 226, 1, 254, 198, 226, 226, 1, 226, 187, 226, 226, 1, 214,
+ 150, 226, 226, 1, 245, 231, 226, 226, 1, 235, 188, 226, 226, 1, 245, 232,
+ 226, 226, 1, 226, 158, 226, 226, 1, 214, 206, 226, 226, 1, 236, 39, 226,
+ 226, 1, 245, 229, 226, 226, 1, 225, 202, 226, 226, 244, 150, 78, 226,
+ 226, 223, 49, 244, 150, 78, 178, 1, 244, 141, 244, 133, 244, 155, 245, 6,
+ 178, 1, 214, 105, 178, 1, 214, 135, 214, 151, 70, 178, 1, 210, 214, 178,
+ 1, 211, 117, 178, 1, 212, 98, 178, 1, 216, 130, 216, 129, 216, 151, 178,
+ 1, 245, 59, 178, 1, 254, 93, 61, 178, 1, 226, 143, 76, 178, 1, 255, 17,
+ 61, 178, 1, 254, 227, 178, 1, 232, 133, 76, 178, 1, 219, 244, 76, 178, 1,
+ 76, 178, 1, 226, 234, 178, 1, 226, 196, 178, 1, 223, 164, 223, 177, 223,
+ 94, 153, 178, 1, 234, 193, 178, 1, 250, 177, 178, 1, 234, 194, 235, 23,
+ 178, 1, 243, 202, 178, 1, 245, 138, 178, 1, 243, 58, 242, 66, 243, 202,
+ 178, 1, 243, 96, 178, 1, 211, 188, 211, 182, 212, 98, 178, 1, 242, 38,
+ 242, 60, 178, 1, 242, 42, 242, 60, 178, 1, 232, 135, 242, 60, 178, 1,
+ 219, 247, 242, 60, 178, 1, 229, 185, 227, 157, 229, 186, 230, 25, 178, 1,
+ 219, 245, 230, 25, 178, 1, 246, 115, 178, 1, 235, 168, 235, 172, 235,
+ 162, 73, 178, 1, 75, 178, 1, 235, 117, 235, 144, 178, 1, 243, 43, 178, 1,
+ 232, 136, 254, 243, 178, 1, 219, 249, 61, 178, 1, 235, 154, 245, 113,
+ 178, 1, 225, 164, 225, 186, 226, 105, 178, 1, 254, 163, 245, 111, 178, 1,
+ 219, 24, 222, 91, 178, 1, 219, 179, 232, 132, 222, 91, 178, 1, 219, 243,
+ 222, 91, 178, 1, 251, 66, 178, 1, 210, 159, 178, 1, 216, 63, 216, 73,
+ 215, 41, 217, 152, 178, 1, 219, 242, 217, 152, 178, 1, 249, 60, 178, 1,
+ 252, 31, 252, 34, 251, 224, 253, 158, 178, 1, 219, 248, 253, 158, 178, 1,
+ 246, 114, 178, 1, 226, 171, 178, 1, 245, 196, 245, 198, 75, 178, 1, 231,
+ 178, 231, 186, 193, 178, 1, 232, 134, 193, 178, 1, 219, 246, 193, 178, 1,
+ 233, 73, 233, 114, 232, 143, 156, 178, 1, 246, 116, 178, 1, 235, 230,
+ 178, 1, 235, 231, 178, 1, 248, 210, 248, 215, 249, 60, 178, 1, 226, 138,
+ 245, 58, 76, 178, 1, 245, 227, 178, 1, 235, 187, 178, 1, 249, 78, 178, 1,
+ 251, 17, 178, 1, 250, 189, 178, 1, 218, 161, 178, 1, 232, 131, 178, 1,
+ 219, 241, 178, 1, 240, 110, 178, 1, 224, 96, 178, 1, 211, 178, 178, 219,
+ 155, 224, 140, 178, 230, 85, 224, 140, 178, 249, 131, 224, 140, 178, 254,
+ 6, 87, 178, 215, 82, 87, 178, 252, 46, 87, 217, 83, 1, 61, 217, 83, 1,
+ 73, 217, 83, 1, 70, 217, 83, 1, 176, 217, 83, 1, 243, 135, 217, 83, 1,
+ 229, 77, 217, 83, 1, 217, 105, 217, 83, 1, 248, 221, 217, 83, 1, 197,
+ 217, 83, 1, 190, 217, 83, 1, 252, 191, 217, 83, 1, 184, 217, 83, 1, 191,
+ 217, 83, 1, 233, 135, 217, 83, 1, 212, 65, 217, 83, 1, 206, 217, 83, 1,
+ 162, 217, 83, 25, 5, 73, 217, 83, 25, 5, 70, 217, 83, 5, 213, 152, 242,
+ 7, 1, 61, 242, 7, 1, 73, 242, 7, 1, 70, 242, 7, 1, 176, 242, 7, 1, 243,
+ 135, 242, 7, 1, 229, 77, 242, 7, 1, 217, 105, 242, 7, 1, 248, 221, 242,
+ 7, 1, 197, 242, 7, 1, 190, 242, 7, 1, 252, 191, 242, 7, 1, 184, 242, 7,
+ 1, 191, 242, 7, 1, 205, 242, 7, 1, 233, 135, 242, 7, 1, 212, 65, 242, 7,
+ 1, 206, 242, 7, 1, 162, 242, 7, 25, 5, 73, 242, 7, 25, 5, 70, 242, 7, 5,
+ 226, 49, 225, 126, 219, 155, 224, 140, 225, 126, 52, 224, 140, 251, 120,
+ 1, 61, 251, 120, 1, 73, 251, 120, 1, 70, 251, 120, 1, 176, 251, 120, 1,
+ 243, 135, 251, 120, 1, 229, 77, 251, 120, 1, 217, 105, 251, 120, 1, 248,
+ 221, 251, 120, 1, 197, 251, 120, 1, 190, 251, 120, 1, 252, 191, 251, 120,
+ 1, 184, 251, 120, 1, 191, 251, 120, 1, 205, 251, 120, 1, 233, 135, 251,
+ 120, 1, 212, 65, 251, 120, 1, 206, 251, 120, 1, 162, 251, 120, 25, 5, 73,
+ 251, 120, 25, 5, 70, 217, 82, 1, 61, 217, 82, 1, 73, 217, 82, 1, 70, 217,
+ 82, 1, 176, 217, 82, 1, 243, 135, 217, 82, 1, 229, 77, 217, 82, 1, 217,
+ 105, 217, 82, 1, 248, 221, 217, 82, 1, 197, 217, 82, 1, 190, 217, 82, 1,
+ 252, 191, 217, 82, 1, 184, 217, 82, 1, 191, 217, 82, 1, 233, 135, 217,
+ 82, 1, 212, 65, 217, 82, 1, 206, 217, 82, 25, 5, 73, 217, 82, 25, 5, 70,
+ 69, 1, 176, 69, 1, 234, 132, 69, 1, 234, 28, 69, 1, 234, 105, 69, 1, 229,
+ 4, 69, 1, 251, 33, 69, 1, 250, 157, 69, 1, 249, 238, 69, 1, 250, 86, 69,
+ 1, 227, 134, 69, 1, 248, 221, 69, 1, 215, 144, 69, 1, 247, 145, 69, 1,
+ 215, 139, 69, 1, 228, 80, 69, 1, 217, 105, 69, 1, 216, 208, 69, 1, 111,
+ 69, 1, 216, 156, 69, 1, 228, 74, 69, 1, 252, 191, 69, 1, 225, 147, 69, 1,
+ 225, 16, 69, 1, 225, 121, 69, 1, 230, 161, 69, 1, 210, 244, 69, 1, 222,
+ 211, 69, 1, 232, 156, 69, 1, 213, 138, 69, 1, 220, 102, 69, 1, 218, 184,
+ 69, 1, 206, 69, 1, 162, 69, 1, 233, 135, 69, 1, 224, 88, 69, 235, 243,
+ 25, 224, 74, 69, 235, 243, 25, 224, 87, 69, 235, 243, 25, 224, 53, 69,
+ 235, 243, 25, 224, 48, 69, 235, 243, 25, 224, 30, 69, 235, 243, 25, 224,
+ 2, 69, 235, 243, 25, 223, 246, 69, 235, 243, 25, 223, 245, 69, 235, 243,
+ 25, 222, 100, 69, 235, 243, 25, 222, 93, 69, 235, 243, 25, 232, 62, 69,
+ 235, 243, 25, 232, 52, 69, 235, 243, 25, 224, 69, 69, 235, 243, 25, 224,
+ 80, 69, 235, 243, 25, 224, 38, 215, 49, 110, 69, 235, 243, 25, 224, 38,
+ 215, 49, 105, 69, 235, 243, 25, 224, 70, 69, 25, 235, 229, 254, 45, 69,
+ 25, 235, 229, 255, 73, 69, 25, 5, 255, 73, 69, 25, 5, 73, 69, 25, 5, 236,
+ 33, 69, 25, 5, 211, 117, 69, 25, 5, 210, 169, 69, 25, 5, 70, 69, 25, 5,
+ 214, 118, 69, 25, 5, 214, 229, 69, 25, 5, 226, 234, 69, 25, 5, 191, 69,
+ 25, 5, 236, 60, 69, 25, 5, 75, 69, 25, 5, 254, 243, 69, 25, 5, 254, 201,
+ 69, 25, 5, 226, 183, 69, 25, 5, 253, 192, 69, 5, 228, 206, 69, 5, 223,
+ 126, 69, 5, 210, 180, 69, 5, 230, 52, 69, 5, 215, 213, 69, 5, 252, 143,
+ 69, 5, 222, 206, 69, 5, 216, 40, 69, 5, 234, 241, 69, 5, 254, 203, 69, 5,
+ 221, 244, 221, 238, 69, 5, 213, 149, 69, 5, 249, 232, 69, 5, 252, 117,
+ 69, 5, 234, 125, 69, 5, 252, 137, 69, 5, 251, 9, 225, 72, 233, 187, 69,
+ 5, 233, 30, 216, 17, 69, 5, 252, 20, 69, 5, 225, 123, 230, 99, 69, 5,
+ 234, 9, 69, 249, 98, 16, 223, 28, 69, 5, 253, 174, 69, 5, 253, 195, 69,
+ 21, 210, 86, 69, 21, 110, 69, 21, 105, 69, 21, 158, 69, 21, 161, 69, 21,
+ 189, 69, 21, 194, 69, 21, 198, 69, 21, 195, 69, 21, 200, 69, 16, 233, 30,
+ 253, 197, 219, 43, 69, 16, 233, 30, 253, 197, 230, 71, 69, 16, 233, 30,
+ 253, 197, 225, 71, 69, 16, 233, 30, 253, 197, 252, 49, 69, 16, 233, 30,
+ 253, 197, 251, 103, 69, 16, 233, 30, 253, 197, 224, 215, 69, 16, 233, 30,
+ 253, 197, 224, 209, 69, 16, 233, 30, 253, 197, 224, 207, 69, 16, 233, 30,
+ 253, 197, 224, 213, 69, 16, 233, 30, 253, 197, 224, 211, 83, 251, 236,
+ 83, 245, 163, 83, 249, 219, 83, 243, 229, 218, 129, 83, 249, 226, 83,
+ 244, 11, 247, 118, 83, 216, 39, 219, 52, 240, 168, 83, 219, 190, 3, 251,
+ 172, 231, 154, 83, 231, 183, 249, 219, 83, 231, 183, 243, 229, 218, 129,
+ 83, 228, 191, 83, 243, 253, 45, 221, 157, 110, 83, 243, 253, 45, 221,
+ 157, 105, 83, 243, 253, 45, 221, 157, 158, 83, 25, 220, 137, 83, 21, 210,
+ 86, 83, 21, 110, 83, 21, 105, 83, 21, 158, 83, 21, 161, 83, 21, 189, 83,
+ 21, 194, 83, 21, 198, 83, 21, 195, 83, 21, 200, 83, 1, 61, 83, 1, 75, 83,
+ 1, 73, 83, 1, 76, 83, 1, 70, 83, 1, 226, 234, 83, 1, 214, 214, 83, 1,
+ 245, 209, 83, 1, 197, 83, 1, 254, 115, 83, 1, 252, 191, 83, 1, 190, 83,
+ 1, 224, 88, 83, 1, 243, 135, 83, 1, 184, 83, 1, 233, 135, 83, 1, 206, 83,
+ 1, 220, 102, 83, 1, 217, 105, 83, 1, 248, 221, 83, 1, 250, 157, 83, 1,
+ 235, 141, 83, 1, 191, 83, 1, 205, 83, 1, 212, 65, 83, 1, 244, 196, 83, 1,
+ 176, 83, 1, 234, 132, 83, 1, 215, 183, 83, 1, 210, 116, 83, 1, 242, 46,
+ 83, 1, 210, 16, 83, 1, 232, 254, 83, 1, 210, 69, 83, 1, 250, 110, 83, 1,
+ 216, 39, 199, 25, 50, 83, 1, 216, 39, 75, 83, 1, 216, 39, 73, 83, 1, 216,
+ 39, 76, 83, 1, 216, 39, 70, 83, 1, 216, 39, 226, 234, 83, 1, 216, 39,
+ 214, 214, 83, 1, 216, 39, 254, 115, 83, 1, 216, 39, 252, 191, 83, 1, 216,
+ 39, 190, 83, 1, 216, 39, 224, 88, 83, 1, 216, 39, 243, 135, 83, 1, 216,
+ 39, 184, 83, 1, 216, 39, 217, 105, 83, 1, 216, 39, 248, 221, 83, 1, 216,
+ 39, 250, 157, 83, 1, 216, 39, 235, 141, 83, 1, 216, 39, 215, 183, 83, 1,
+ 216, 39, 191, 83, 1, 216, 39, 212, 65, 83, 1, 216, 39, 176, 83, 1, 216,
+ 39, 243, 132, 83, 1, 216, 39, 242, 46, 83, 1, 216, 39, 235, 107, 83, 1,
+ 216, 39, 228, 231, 83, 1, 216, 39, 246, 38, 83, 1, 219, 190, 75, 83, 1,
+ 219, 190, 73, 83, 1, 219, 190, 235, 152, 83, 1, 219, 190, 214, 214, 83,
+ 1, 219, 190, 70, 83, 1, 219, 190, 254, 115, 83, 1, 219, 190, 176, 83, 1,
+ 219, 190, 243, 135, 83, 1, 219, 190, 162, 83, 1, 219, 190, 190, 83, 1,
+ 219, 190, 220, 102, 83, 1, 219, 190, 217, 105, 83, 1, 219, 190, 248, 221,
+ 83, 1, 219, 190, 235, 141, 83, 1, 219, 190, 244, 196, 83, 1, 219, 190,
+ 243, 132, 83, 1, 219, 190, 242, 46, 83, 1, 219, 190, 215, 183, 83, 1,
+ 219, 190, 210, 116, 83, 1, 219, 190, 223, 184, 83, 1, 219, 190, 250, 157,
+ 83, 1, 219, 190, 210, 82, 83, 1, 231, 183, 73, 83, 1, 231, 183, 176, 83,
+ 1, 231, 183, 205, 83, 1, 231, 183, 244, 196, 83, 1, 231, 183, 210, 82,
+ 83, 1, 254, 162, 243, 116, 254, 76, 110, 83, 1, 254, 162, 243, 116, 213,
+ 148, 110, 83, 1, 254, 162, 243, 116, 248, 186, 83, 1, 254, 162, 243, 116,
+ 214, 224, 83, 1, 254, 162, 243, 116, 235, 193, 214, 224, 83, 1, 254, 162,
+ 243, 116, 252, 155, 83, 1, 254, 162, 243, 116, 134, 252, 155, 83, 1, 254,
+ 162, 243, 116, 61, 83, 1, 254, 162, 243, 116, 73, 83, 1, 254, 162, 243,
+ 116, 176, 83, 1, 254, 162, 243, 116, 229, 77, 83, 1, 254, 162, 243, 116,
+ 251, 33, 83, 1, 254, 162, 243, 116, 215, 156, 83, 1, 254, 162, 243, 116,
+ 215, 144, 83, 1, 254, 162, 243, 116, 248, 135, 83, 1, 254, 162, 243, 116,
+ 228, 110, 83, 1, 254, 162, 243, 116, 217, 105, 83, 1, 254, 162, 243, 116,
+ 248, 221, 83, 1, 254, 162, 243, 116, 190, 83, 1, 254, 162, 243, 116, 225,
+ 147, 83, 1, 254, 162, 243, 116, 218, 223, 83, 1, 254, 162, 243, 116, 210,
+ 82, 83, 1, 254, 162, 243, 116, 210, 116, 83, 1, 254, 162, 243, 116, 254,
+ 209, 83, 1, 216, 39, 254, 162, 243, 116, 217, 105, 83, 1, 216, 39, 254,
+ 162, 243, 116, 210, 82, 83, 1, 231, 183, 254, 162, 243, 116, 242, 249,
+ 83, 1, 231, 183, 254, 162, 243, 116, 229, 77, 83, 1, 231, 183, 254, 162,
+ 243, 116, 251, 33, 83, 1, 231, 183, 254, 162, 243, 116, 235, 114, 83, 1,
+ 231, 183, 254, 162, 243, 116, 215, 156, 83, 1, 231, 183, 254, 162, 243,
+ 116, 248, 119, 83, 1, 231, 183, 254, 162, 243, 116, 217, 105, 83, 1, 231,
+ 183, 254, 162, 243, 116, 248, 25, 83, 1, 231, 183, 254, 162, 243, 116,
+ 218, 223, 83, 1, 231, 183, 254, 162, 243, 116, 249, 72, 83, 1, 231, 183,
+ 254, 162, 243, 116, 210, 82, 83, 1, 231, 183, 254, 162, 243, 116, 210,
+ 116, 83, 1, 254, 162, 243, 116, 163, 70, 83, 1, 254, 162, 243, 116, 163,
+ 191, 83, 1, 231, 183, 254, 162, 243, 116, 252, 18, 83, 1, 254, 162, 243,
+ 116, 248, 211, 83, 1, 231, 183, 254, 162, 243, 116, 232, 254, 18, 19,
+ 226, 109, 18, 19, 253, 167, 18, 19, 255, 28, 18, 19, 212, 25, 18, 19,
+ 224, 221, 18, 19, 225, 229, 18, 19, 224, 105, 18, 19, 217, 31, 18, 19,
+ 234, 189, 18, 19, 233, 179, 18, 19, 231, 132, 18, 19, 228, 37, 18, 19,
+ 229, 181, 18, 19, 233, 68, 18, 19, 219, 22, 18, 19, 221, 211, 18, 19,
+ 219, 232, 18, 19, 220, 66, 18, 19, 219, 201, 18, 19, 210, 220, 18, 19,
+ 211, 52, 18, 19, 223, 134, 18, 19, 227, 171, 18, 19, 226, 216, 227, 171,
+ 18, 19, 227, 170, 18, 19, 226, 216, 227, 170, 18, 19, 227, 169, 18, 19,
+ 226, 216, 227, 169, 18, 19, 227, 168, 18, 19, 226, 216, 227, 168, 18, 19,
+ 222, 105, 18, 19, 222, 104, 18, 19, 222, 103, 18, 19, 222, 102, 18, 19,
+ 222, 101, 18, 19, 222, 109, 18, 19, 226, 216, 226, 105, 18, 19, 226, 216,
+ 217, 152, 18, 19, 226, 216, 235, 23, 18, 19, 226, 216, 251, 66, 18, 19,
+ 226, 216, 193, 18, 19, 226, 216, 230, 25, 18, 19, 226, 216, 222, 91, 18,
+ 19, 226, 216, 220, 104, 18, 19, 245, 219, 212, 98, 18, 19, 212, 7, 212,
+ 98, 18, 19, 40, 4, 222, 233, 18, 19, 40, 223, 157, 247, 120, 18, 19, 223,
+ 223, 222, 106, 18, 19, 159, 232, 127, 18, 19, 159, 233, 134, 18, 19, 216,
+ 126, 18, 19, 216, 128, 18, 19, 215, 136, 18, 19, 215, 138, 18, 19, 215,
+ 143, 18, 19, 216, 49, 18, 19, 216, 51, 18, 19, 221, 209, 219, 206, 18,
+ 19, 221, 209, 220, 1, 18, 19, 221, 209, 241, 53, 18, 19, 72, 242, 73, 18,
+ 19, 72, 248, 52, 243, 55, 18, 19, 72, 243, 132, 18, 19, 72, 242, 78, 18,
+ 19, 221, 209, 235, 33, 18, 19, 72, 235, 31, 18, 19, 252, 68, 248, 52,
+ 156, 18, 19, 252, 68, 248, 52, 153, 18, 19, 72, 248, 47, 222, 91, 232,
+ 223, 213, 122, 233, 10, 232, 223, 1, 176, 232, 223, 1, 234, 132, 232,
+ 223, 1, 243, 135, 232, 223, 1, 242, 249, 232, 223, 1, 229, 77, 232, 223,
+ 1, 251, 33, 232, 223, 1, 250, 157, 232, 223, 1, 235, 141, 232, 223, 1,
+ 235, 114, 232, 223, 1, 211, 71, 232, 223, 1, 217, 105, 232, 223, 1, 216,
+ 208, 232, 223, 1, 248, 221, 232, 223, 1, 248, 25, 232, 223, 1, 197, 232,
+ 223, 1, 190, 232, 223, 1, 225, 147, 232, 223, 1, 252, 191, 232, 223, 1,
+ 252, 18, 232, 223, 1, 184, 232, 223, 1, 191, 232, 223, 1, 205, 232, 223,
+ 1, 233, 135, 232, 223, 1, 212, 65, 232, 223, 1, 220, 102, 232, 223, 1,
+ 218, 223, 232, 223, 1, 206, 232, 223, 1, 162, 232, 223, 25, 5, 61, 232,
+ 223, 25, 5, 73, 232, 223, 25, 5, 70, 232, 223, 25, 5, 245, 209, 232, 223,
+ 25, 5, 254, 201, 232, 223, 25, 5, 226, 183, 232, 223, 25, 5, 253, 192,
+ 232, 223, 25, 5, 75, 232, 223, 25, 5, 76, 232, 223, 218, 73, 1, 191, 232,
+ 223, 218, 73, 1, 205, 232, 223, 218, 73, 1, 212, 65, 232, 223, 4, 1, 176,
+ 232, 223, 4, 1, 229, 77, 232, 223, 4, 1, 254, 75, 232, 223, 4, 1, 217,
+ 105, 232, 223, 4, 1, 197, 232, 223, 4, 1, 190, 232, 223, 4, 1, 184, 232,
+ 223, 4, 1, 205, 232, 223, 4, 1, 233, 135, 232, 223, 5, 230, 89, 232, 223,
+ 5, 234, 171, 232, 223, 5, 222, 32, 232, 223, 5, 232, 127, 232, 223, 245,
+ 31, 78, 232, 223, 224, 13, 78, 232, 223, 21, 210, 86, 232, 223, 21, 110,
+ 232, 223, 21, 105, 232, 223, 21, 158, 232, 223, 21, 161, 232, 223, 21,
+ 189, 232, 223, 21, 194, 232, 223, 21, 198, 232, 223, 21, 195, 232, 223,
+ 21, 200, 39, 233, 59, 1, 176, 39, 233, 59, 1, 211, 165, 39, 233, 59, 1,
+ 229, 77, 39, 233, 59, 1, 215, 183, 39, 233, 59, 1, 206, 39, 233, 59, 1,
+ 191, 39, 233, 59, 1, 217, 105, 39, 233, 59, 1, 216, 208, 39, 233, 59, 1,
+ 233, 135, 39, 233, 59, 1, 190, 39, 233, 59, 1, 225, 147, 39, 233, 59, 1,
+ 184, 39, 233, 59, 1, 244, 196, 39, 233, 59, 1, 214, 27, 39, 233, 59, 1,
+ 162, 39, 233, 59, 1, 224, 88, 39, 233, 59, 1, 234, 132, 39, 233, 59, 1,
+ 215, 175, 39, 233, 59, 1, 197, 39, 233, 59, 1, 61, 39, 233, 59, 1, 73,
+ 39, 233, 59, 1, 245, 209, 39, 233, 59, 1, 245, 197, 39, 233, 59, 1, 70,
+ 39, 233, 59, 1, 226, 183, 39, 233, 59, 1, 76, 39, 233, 59, 1, 214, 214,
+ 39, 233, 59, 1, 75, 39, 233, 59, 1, 253, 190, 39, 233, 59, 1, 254, 201,
+ 39, 233, 59, 1, 216, 28, 39, 233, 59, 1, 216, 27, 39, 233, 59, 1, 216,
+ 26, 39, 233, 59, 1, 216, 25, 39, 233, 59, 1, 216, 24, 166, 39, 173, 1,
+ 125, 224, 88, 166, 39, 173, 1, 121, 224, 88, 166, 39, 173, 1, 125, 176,
+ 166, 39, 173, 1, 125, 211, 165, 166, 39, 173, 1, 125, 229, 77, 166, 39,
+ 173, 1, 121, 176, 166, 39, 173, 1, 121, 211, 165, 166, 39, 173, 1, 121,
+ 229, 77, 166, 39, 173, 1, 125, 215, 183, 166, 39, 173, 1, 125, 206, 166,
+ 39, 173, 1, 125, 191, 166, 39, 173, 1, 121, 215, 183, 166, 39, 173, 1,
+ 121, 206, 166, 39, 173, 1, 121, 191, 166, 39, 173, 1, 125, 217, 105, 166,
+ 39, 173, 1, 125, 216, 208, 166, 39, 173, 1, 125, 197, 166, 39, 173, 1,
+ 121, 217, 105, 166, 39, 173, 1, 121, 216, 208, 166, 39, 173, 1, 121, 197,
+ 166, 39, 173, 1, 125, 190, 166, 39, 173, 1, 125, 225, 147, 166, 39, 173,
+ 1, 125, 184, 166, 39, 173, 1, 121, 190, 166, 39, 173, 1, 121, 225, 147,
+ 166, 39, 173, 1, 121, 184, 166, 39, 173, 1, 125, 244, 196, 166, 39, 173,
+ 1, 125, 214, 27, 166, 39, 173, 1, 125, 233, 135, 166, 39, 173, 1, 121,
+ 244, 196, 166, 39, 173, 1, 121, 214, 27, 166, 39, 173, 1, 121, 233, 135,
+ 166, 39, 173, 1, 125, 162, 166, 39, 173, 1, 125, 248, 221, 166, 39, 173,
+ 1, 125, 252, 191, 166, 39, 173, 1, 121, 162, 166, 39, 173, 1, 121, 248,
+ 221, 166, 39, 173, 1, 121, 252, 191, 166, 39, 173, 1, 125, 233, 184, 166,
+ 39, 173, 1, 125, 211, 138, 166, 39, 173, 1, 121, 233, 184, 166, 39, 173,
+ 1, 121, 211, 138, 166, 39, 173, 1, 125, 218, 82, 166, 39, 173, 1, 121,
+ 218, 82, 166, 39, 173, 25, 5, 25, 219, 239, 166, 39, 173, 25, 5, 255, 73,
+ 166, 39, 173, 25, 5, 236, 33, 166, 39, 173, 25, 5, 70, 166, 39, 173, 25,
+ 5, 214, 118, 166, 39, 173, 25, 5, 75, 166, 39, 173, 25, 5, 254, 243, 166,
+ 39, 173, 25, 5, 76, 166, 39, 173, 25, 5, 227, 0, 166, 39, 173, 25, 5,
+ 214, 214, 166, 39, 173, 25, 5, 253, 167, 166, 39, 173, 25, 5, 255, 28,
+ 166, 39, 173, 25, 5, 214, 111, 166, 39, 173, 25, 5, 226, 109, 166, 39,
+ 173, 25, 5, 226, 253, 166, 39, 173, 25, 5, 214, 210, 166, 39, 173, 25, 5,
+ 235, 152, 166, 39, 173, 1, 40, 214, 105, 166, 39, 173, 1, 40, 229, 79,
+ 166, 39, 173, 1, 40, 230, 25, 166, 39, 173, 1, 40, 193, 166, 39, 173, 1,
+ 40, 235, 23, 166, 39, 173, 1, 40, 249, 60, 166, 39, 173, 1, 40, 253, 158,
+ 166, 39, 173, 138, 231, 158, 166, 39, 173, 138, 231, 157, 166, 39, 173,
+ 21, 210, 86, 166, 39, 173, 21, 110, 166, 39, 173, 21, 105, 166, 39, 173,
+ 21, 158, 166, 39, 173, 21, 161, 166, 39, 173, 21, 189, 166, 39, 173, 21,
+ 194, 166, 39, 173, 21, 198, 166, 39, 173, 21, 195, 166, 39, 173, 21, 200,
+ 166, 39, 173, 89, 21, 110, 166, 39, 173, 5, 233, 120, 166, 39, 173, 5,
+ 233, 119, 69, 16, 225, 236, 69, 16, 230, 72, 234, 25, 69, 16, 225, 72,
+ 234, 25, 69, 16, 252, 50, 234, 25, 69, 16, 251, 104, 234, 25, 69, 16,
+ 224, 216, 234, 25, 69, 16, 224, 210, 234, 25, 69, 16, 224, 208, 234, 25,
+ 69, 16, 224, 214, 234, 25, 69, 16, 224, 212, 234, 25, 69, 16, 248, 173,
+ 234, 25, 69, 16, 248, 169, 234, 25, 69, 16, 248, 168, 234, 25, 69, 16,
+ 248, 171, 234, 25, 69, 16, 248, 170, 234, 25, 69, 16, 248, 167, 234, 25,
+ 69, 16, 215, 87, 69, 16, 230, 72, 222, 205, 69, 16, 225, 72, 222, 205,
+ 69, 16, 252, 50, 222, 205, 69, 16, 251, 104, 222, 205, 69, 16, 224, 216,
+ 222, 205, 69, 16, 224, 210, 222, 205, 69, 16, 224, 208, 222, 205, 69, 16,
+ 224, 214, 222, 205, 69, 16, 224, 212, 222, 205, 69, 16, 248, 173, 222,
+ 205, 69, 16, 248, 169, 222, 205, 69, 16, 248, 168, 222, 205, 69, 16, 248,
+ 171, 222, 205, 69, 16, 248, 170, 222, 205, 69, 16, 248, 167, 222, 205,
+ 251, 121, 1, 176, 251, 121, 1, 243, 135, 251, 121, 1, 229, 77, 251, 121,
+ 1, 229, 22, 251, 121, 1, 190, 251, 121, 1, 252, 191, 251, 121, 1, 184,
+ 251, 121, 1, 230, 105, 251, 121, 1, 217, 105, 251, 121, 1, 248, 221, 251,
+ 121, 1, 197, 251, 121, 1, 228, 36, 251, 121, 1, 251, 33, 251, 121, 1,
+ 235, 141, 251, 121, 1, 227, 165, 251, 121, 1, 227, 158, 251, 121, 1, 191,
+ 251, 121, 1, 205, 251, 121, 1, 233, 135, 251, 121, 1, 214, 27, 251, 121,
+ 1, 206, 251, 121, 1, 61, 251, 121, 1, 162, 251, 121, 25, 5, 73, 251, 121,
+ 25, 5, 70, 251, 121, 25, 5, 75, 251, 121, 25, 5, 76, 251, 121, 25, 5,
+ 254, 243, 251, 121, 226, 60, 251, 121, 245, 143, 64, 221, 172, 39, 89, 1,
+ 125, 176, 39, 89, 1, 125, 234, 132, 39, 89, 1, 125, 233, 171, 39, 89, 1,
+ 121, 176, 39, 89, 1, 121, 233, 171, 39, 89, 1, 121, 234, 132, 39, 89, 1,
+ 229, 77, 39, 89, 1, 125, 251, 33, 39, 89, 1, 125, 250, 157, 39, 89, 1,
+ 121, 251, 33, 39, 89, 1, 121, 206, 39, 89, 1, 121, 250, 157, 39, 89, 1,
+ 227, 165, 39, 89, 1, 223, 140, 39, 89, 1, 125, 223, 138, 39, 89, 1, 248,
+ 221, 39, 89, 1, 121, 223, 138, 39, 89, 1, 223, 149, 39, 89, 1, 125, 217,
+ 105, 39, 89, 1, 125, 216, 208, 39, 89, 1, 121, 217, 105, 39, 89, 1, 121,
+ 216, 208, 39, 89, 1, 197, 39, 89, 1, 252, 191, 39, 89, 1, 125, 190, 39,
+ 89, 1, 125, 225, 147, 39, 89, 1, 125, 244, 196, 39, 89, 1, 121, 190, 39,
+ 89, 1, 121, 244, 196, 39, 89, 1, 121, 225, 147, 39, 89, 1, 184, 39, 89,
+ 1, 121, 191, 39, 89, 1, 125, 191, 39, 89, 1, 205, 39, 89, 1, 222, 137,
+ 39, 89, 1, 233, 135, 39, 89, 1, 232, 93, 39, 89, 1, 212, 65, 39, 89, 1,
+ 125, 220, 102, 39, 89, 1, 125, 218, 223, 39, 89, 1, 125, 206, 39, 89, 1,
+ 125, 162, 39, 89, 1, 232, 184, 39, 89, 1, 61, 39, 89, 1, 121, 162, 39,
+ 89, 1, 73, 39, 89, 1, 236, 33, 39, 89, 1, 70, 39, 89, 1, 214, 118, 39,
+ 89, 1, 245, 209, 39, 89, 1, 226, 183, 39, 89, 1, 233, 120, 39, 89, 1,
+ 242, 132, 206, 39, 89, 116, 5, 147, 205, 39, 89, 116, 5, 147, 233, 135,
+ 39, 89, 116, 5, 233, 136, 217, 58, 233, 109, 39, 89, 5, 231, 204, 234,
+ 231, 233, 109, 39, 89, 116, 5, 40, 229, 77, 39, 89, 116, 5, 121, 190, 39,
+ 89, 116, 5, 125, 223, 139, 177, 121, 190, 39, 89, 116, 5, 184, 39, 89,
+ 116, 5, 252, 191, 39, 89, 116, 5, 206, 39, 89, 5, 222, 10, 39, 89, 25, 5,
+ 61, 39, 89, 25, 5, 231, 204, 221, 226, 39, 89, 25, 5, 255, 73, 39, 89,
+ 25, 5, 217, 64, 255, 73, 39, 89, 25, 5, 73, 39, 89, 25, 5, 236, 33, 39,
+ 89, 25, 5, 214, 214, 39, 89, 25, 5, 214, 117, 39, 89, 25, 5, 70, 39, 89,
+ 25, 5, 214, 118, 39, 89, 25, 5, 76, 39, 89, 25, 5, 227, 1, 51, 39, 89,
+ 25, 5, 226, 109, 39, 89, 25, 5, 75, 39, 89, 25, 5, 254, 243, 39, 89, 25,
+ 5, 226, 183, 39, 89, 25, 5, 254, 201, 39, 89, 25, 5, 89, 254, 201, 39,
+ 89, 25, 5, 227, 1, 48, 39, 89, 5, 231, 204, 234, 230, 39, 89, 5, 216, 29,
+ 39, 89, 5, 216, 28, 39, 89, 5, 234, 97, 216, 27, 39, 89, 5, 234, 97, 216,
+ 26, 39, 89, 5, 234, 97, 216, 25, 39, 89, 5, 223, 188, 242, 45, 39, 89, 5,
+ 231, 204, 221, 253, 39, 89, 5, 234, 96, 234, 215, 39, 89, 38, 249, 115,
+ 247, 120, 39, 89, 241, 46, 21, 210, 86, 39, 89, 241, 46, 21, 110, 39, 89,
+ 241, 46, 21, 105, 39, 89, 241, 46, 21, 158, 39, 89, 241, 46, 21, 161, 39,
+ 89, 241, 46, 21, 189, 39, 89, 241, 46, 21, 194, 39, 89, 241, 46, 21, 198,
+ 39, 89, 241, 46, 21, 195, 39, 89, 241, 46, 21, 200, 39, 89, 89, 21, 210,
+ 86, 39, 89, 89, 21, 110, 39, 89, 89, 21, 105, 39, 89, 89, 21, 158, 39,
+ 89, 89, 21, 161, 39, 89, 89, 21, 189, 39, 89, 89, 21, 194, 39, 89, 89,
+ 21, 198, 39, 89, 89, 21, 195, 39, 89, 89, 21, 200, 39, 89, 5, 211, 249,
+ 39, 89, 5, 211, 248, 39, 89, 5, 221, 215, 39, 89, 5, 234, 160, 39, 89, 5,
+ 240, 232, 39, 89, 5, 247, 134, 39, 89, 5, 223, 49, 222, 187, 223, 149,
+ 39, 89, 5, 231, 204, 211, 72, 39, 89, 5, 235, 6, 39, 89, 5, 235, 5, 39,
+ 89, 5, 221, 222, 39, 89, 5, 221, 221, 39, 89, 5, 242, 9, 39, 89, 5, 251,
+ 30, 102, 5, 214, 200, 223, 30, 102, 5, 214, 200, 251, 1, 102, 5, 250,
+ 186, 102, 5, 218, 15, 102, 5, 251, 233, 102, 1, 254, 184, 102, 1, 254,
+ 185, 217, 13, 102, 1, 236, 29, 102, 1, 236, 30, 217, 13, 102, 1, 214,
+ 203, 102, 1, 214, 204, 217, 13, 102, 1, 223, 188, 223, 79, 102, 1, 223,
+ 188, 223, 80, 217, 13, 102, 1, 233, 136, 233, 24, 102, 1, 233, 136, 233,
+ 25, 217, 13, 102, 1, 245, 179, 102, 1, 254, 199, 102, 1, 226, 212, 102,
+ 1, 226, 213, 217, 13, 102, 1, 176, 102, 1, 235, 13, 231, 207, 102, 1,
+ 243, 135, 102, 1, 243, 136, 242, 161, 102, 1, 229, 77, 102, 1, 251, 33,
+ 102, 1, 251, 34, 233, 123, 102, 1, 235, 141, 102, 1, 235, 142, 235, 118,
+ 102, 1, 227, 165, 102, 1, 217, 106, 233, 76, 102, 1, 217, 106, 230, 67,
+ 231, 207, 102, 1, 248, 222, 230, 67, 254, 145, 102, 1, 248, 222, 230, 67,
+ 231, 207, 102, 1, 229, 229, 223, 152, 102, 1, 217, 105, 102, 1, 217, 106,
+ 217, 35, 102, 1, 248, 221, 102, 1, 248, 222, 231, 225, 102, 1, 197, 102,
+ 1, 190, 102, 1, 226, 90, 234, 226, 102, 1, 252, 191, 102, 1, 252, 192,
+ 234, 172, 102, 1, 184, 102, 1, 191, 102, 1, 205, 102, 1, 233, 135, 102,
+ 1, 212, 65, 102, 1, 222, 34, 222, 20, 102, 1, 222, 34, 221, 233, 102, 1,
+ 206, 102, 1, 162, 102, 5, 223, 70, 102, 25, 5, 217, 13, 102, 25, 5, 214,
+ 199, 102, 25, 5, 214, 200, 221, 229, 102, 25, 5, 218, 47, 102, 25, 5,
+ 218, 48, 236, 21, 102, 25, 5, 223, 188, 223, 79, 102, 25, 5, 223, 188,
+ 223, 80, 217, 13, 102, 25, 5, 233, 136, 233, 24, 102, 25, 5, 233, 136,
+ 233, 25, 217, 13, 102, 25, 5, 217, 65, 102, 25, 5, 217, 66, 223, 79, 102,
+ 25, 5, 217, 66, 217, 13, 102, 25, 5, 217, 66, 223, 80, 217, 13, 102, 25,
+ 5, 225, 184, 102, 25, 5, 225, 185, 217, 13, 102, 254, 250, 254, 249, 102,
+ 1, 234, 251, 221, 228, 102, 1, 234, 102, 221, 228, 102, 1, 215, 34, 221,
+ 228, 102, 1, 245, 203, 221, 228, 102, 1, 214, 0, 221, 228, 102, 1, 210,
+ 107, 221, 228, 102, 1, 253, 209, 221, 228, 102, 21, 210, 86, 102, 21,
+ 110, 102, 21, 105, 102, 21, 158, 102, 21, 161, 102, 21, 189, 102, 21,
+ 194, 102, 21, 198, 102, 21, 195, 102, 21, 200, 102, 226, 29, 102, 226,
+ 55, 102, 211, 238, 102, 250, 236, 226, 48, 102, 250, 236, 219, 172, 102,
+ 250, 236, 226, 2, 102, 226, 54, 102, 28, 16, 247, 126, 102, 28, 16, 248,
+ 51, 102, 28, 16, 246, 64, 102, 28, 16, 248, 176, 102, 28, 16, 248, 177,
+ 218, 15, 102, 28, 16, 247, 205, 102, 28, 16, 248, 214, 102, 28, 16, 248,
+ 33, 102, 28, 16, 248, 198, 102, 28, 16, 248, 177, 243, 57, 102, 28, 16,
+ 38, 217, 9, 102, 28, 16, 38, 245, 141, 102, 28, 16, 38, 234, 167, 102,
+ 28, 16, 38, 234, 169, 102, 28, 16, 38, 235, 122, 102, 28, 16, 38, 234,
+ 168, 2, 235, 122, 102, 28, 16, 38, 234, 170, 2, 235, 122, 102, 28, 16,
+ 38, 252, 37, 102, 28, 16, 38, 242, 165, 102, 28, 16, 222, 249, 204, 246,
+ 74, 102, 28, 16, 222, 249, 204, 248, 212, 102, 28, 16, 222, 249, 250, 0,
+ 215, 111, 102, 28, 16, 222, 249, 250, 0, 217, 73, 102, 28, 16, 233, 44,
+ 204, 226, 43, 102, 28, 16, 233, 44, 204, 224, 139, 102, 28, 16, 233, 44,
+ 250, 0, 225, 38, 102, 28, 16, 233, 44, 250, 0, 225, 26, 102, 28, 16, 233,
+ 44, 204, 225, 61, 207, 5, 226, 26, 207, 5, 226, 39, 207, 5, 226, 35, 207,
+ 1, 61, 207, 1, 73, 207, 1, 70, 207, 1, 254, 243, 207, 1, 76, 207, 1, 75,
+ 207, 1, 245, 55, 207, 1, 176, 207, 1, 224, 88, 207, 1, 243, 135, 207, 1,
+ 229, 77, 207, 1, 251, 33, 207, 1, 235, 141, 207, 1, 210, 116, 207, 1,
+ 227, 165, 207, 1, 217, 105, 207, 1, 248, 221, 207, 1, 197, 207, 1, 190,
+ 207, 1, 244, 196, 207, 1, 214, 27, 207, 1, 252, 191, 207, 1, 184, 207, 1,
+ 191, 207, 1, 205, 207, 1, 233, 135, 207, 1, 212, 65, 207, 1, 206, 207, 1,
+ 211, 165, 207, 1, 162, 207, 116, 5, 226, 52, 207, 116, 5, 226, 28, 207,
+ 116, 5, 226, 25, 207, 25, 5, 226, 42, 207, 25, 5, 226, 24, 207, 25, 5,
+ 226, 46, 207, 25, 5, 226, 34, 207, 25, 5, 226, 53, 207, 25, 5, 226, 44,
+ 207, 5, 226, 56, 207, 5, 213, 152, 207, 116, 5, 225, 248, 184, 207, 116,
+ 5, 225, 248, 212, 65, 207, 1, 234, 132, 207, 1, 217, 231, 207, 21, 210,
+ 86, 207, 21, 110, 207, 21, 105, 207, 21, 158, 207, 21, 161, 207, 21, 189,
+ 207, 21, 194, 207, 21, 198, 207, 21, 195, 207, 21, 200, 207, 253, 175,
+ 207, 1, 223, 52, 207, 1, 233, 7, 207, 1, 252, 18, 207, 1, 40, 235, 23,
+ 207, 1, 40, 193, 252, 120, 1, 61, 252, 120, 1, 219, 164, 61, 252, 120, 1,
+ 162, 252, 120, 1, 219, 164, 162, 252, 120, 1, 231, 181, 162, 252, 120, 1,
+ 252, 191, 252, 120, 1, 234, 212, 252, 191, 252, 120, 1, 190, 252, 120, 1,
+ 219, 164, 190, 252, 120, 1, 197, 252, 120, 1, 231, 181, 197, 252, 120, 1,
+ 212, 65, 252, 120, 1, 219, 164, 212, 65, 252, 120, 1, 226, 67, 212, 65,
+ 252, 120, 1, 243, 135, 252, 120, 1, 219, 164, 243, 135, 252, 120, 1, 235,
+ 141, 252, 120, 1, 248, 221, 252, 120, 1, 205, 252, 120, 1, 219, 164, 205,
+ 252, 120, 1, 184, 252, 120, 1, 219, 164, 184, 252, 120, 1, 219, 26, 217,
+ 105, 252, 120, 1, 228, 55, 217, 105, 252, 120, 1, 206, 252, 120, 1, 219,
+ 164, 206, 252, 120, 1, 231, 181, 206, 252, 120, 1, 191, 252, 120, 1, 219,
+ 164, 191, 252, 120, 1, 229, 77, 252, 120, 1, 233, 135, 252, 120, 1, 219,
+ 164, 233, 135, 252, 120, 1, 227, 165, 252, 120, 1, 251, 33, 252, 120, 1,
+ 229, 148, 252, 120, 1, 231, 124, 252, 120, 1, 73, 252, 120, 1, 70, 252,
+ 120, 5, 216, 33, 252, 120, 25, 5, 75, 252, 120, 25, 5, 226, 67, 75, 252,
+ 120, 25, 5, 245, 209, 252, 120, 25, 5, 73, 252, 120, 25, 5, 234, 212, 73,
+ 252, 120, 25, 5, 76, 252, 120, 25, 5, 234, 212, 76, 252, 120, 25, 5, 70,
+ 252, 120, 25, 5, 104, 31, 219, 164, 206, 252, 120, 116, 5, 229, 79, 252,
+ 120, 116, 5, 242, 60, 252, 120, 226, 37, 252, 120, 226, 33, 252, 120, 16,
+ 251, 241, 229, 229, 231, 37, 252, 120, 16, 251, 241, 225, 64, 252, 120,
+ 16, 251, 241, 235, 48, 252, 120, 16, 251, 241, 226, 37, 196, 1, 176, 196,
+ 1, 234, 39, 196, 1, 234, 132, 196, 1, 243, 135, 196, 1, 242, 186, 196, 1,
+ 229, 77, 196, 1, 251, 33, 196, 1, 250, 157, 196, 1, 235, 141, 196, 1,
+ 227, 165, 196, 1, 217, 105, 196, 1, 216, 208, 196, 1, 248, 221, 196, 1,
+ 197, 196, 1, 190, 196, 1, 225, 42, 196, 1, 225, 147, 196, 1, 244, 196,
+ 196, 1, 244, 75, 196, 1, 252, 191, 196, 1, 251, 222, 196, 1, 184, 196, 1,
+ 230, 168, 196, 1, 215, 183, 196, 1, 215, 175, 196, 1, 246, 38, 196, 1,
+ 191, 196, 1, 205, 196, 1, 233, 135, 196, 1, 162, 196, 1, 241, 153, 196,
+ 1, 214, 27, 196, 1, 206, 196, 1, 220, 102, 196, 1, 212, 65, 196, 1, 61,
+ 196, 218, 73, 1, 191, 196, 218, 73, 1, 205, 196, 25, 5, 255, 73, 196, 25,
+ 5, 73, 196, 25, 5, 76, 196, 25, 5, 226, 183, 196, 25, 5, 70, 196, 25, 5,
+ 214, 118, 196, 25, 5, 75, 196, 116, 5, 235, 23, 196, 116, 5, 193, 196,
+ 116, 5, 156, 196, 116, 5, 230, 25, 196, 116, 5, 226, 105, 196, 116, 5,
+ 153, 196, 116, 5, 217, 152, 196, 116, 5, 227, 142, 196, 116, 5, 234, 230,
+ 196, 5, 223, 150, 196, 5, 227, 205, 196, 224, 141, 217, 103, 196, 224,
+ 141, 227, 152, 216, 120, 217, 103, 196, 224, 141, 250, 164, 196, 224,
+ 141, 215, 170, 250, 164, 196, 224, 141, 215, 169, 196, 21, 210, 86, 196,
+ 21, 110, 196, 21, 105, 196, 21, 158, 196, 21, 161, 196, 21, 189, 196, 21,
+ 194, 196, 21, 198, 196, 21, 195, 196, 21, 200, 196, 1, 215, 156, 196, 1,
+ 215, 144, 196, 1, 248, 135, 226, 210, 250, 103, 21, 210, 86, 226, 210,
+ 250, 103, 21, 110, 226, 210, 250, 103, 21, 105, 226, 210, 250, 103, 21,
+ 158, 226, 210, 250, 103, 21, 161, 226, 210, 250, 103, 21, 189, 226, 210,
+ 250, 103, 21, 194, 226, 210, 250, 103, 21, 198, 226, 210, 250, 103, 21,
+ 195, 226, 210, 250, 103, 21, 200, 226, 210, 250, 103, 1, 233, 135, 226,
+ 210, 250, 103, 1, 253, 206, 226, 210, 250, 103, 1, 254, 216, 226, 210,
+ 250, 103, 1, 254, 115, 226, 210, 250, 103, 1, 254, 178, 226, 210, 250,
+ 103, 1, 233, 134, 226, 210, 250, 103, 1, 255, 35, 226, 210, 250, 103, 1,
+ 255, 36, 226, 210, 250, 103, 1, 255, 34, 226, 210, 250, 103, 1, 255, 29,
+ 226, 210, 250, 103, 1, 232, 241, 226, 210, 250, 103, 1, 235, 171, 226,
+ 210, 250, 103, 1, 236, 34, 226, 210, 250, 103, 1, 235, 190, 226, 210,
+ 250, 103, 1, 235, 179, 226, 210, 250, 103, 1, 232, 98, 226, 210, 250,
+ 103, 1, 214, 221, 226, 210, 250, 103, 1, 214, 219, 226, 210, 250, 103, 1,
+ 214, 168, 226, 210, 250, 103, 1, 214, 111, 226, 210, 250, 103, 1, 233,
+ 58, 226, 210, 250, 103, 1, 245, 108, 226, 210, 250, 103, 1, 245, 212,
+ 226, 210, 250, 103, 1, 245, 150, 226, 210, 250, 103, 1, 245, 86, 226,
+ 210, 250, 103, 1, 232, 156, 226, 210, 250, 103, 1, 226, 137, 226, 210,
+ 250, 103, 1, 226, 252, 226, 210, 250, 103, 1, 226, 125, 226, 210, 250,
+ 103, 1, 226, 222, 226, 210, 250, 103, 230, 103, 215, 121, 226, 210, 250,
+ 103, 243, 130, 215, 122, 226, 210, 250, 103, 230, 101, 215, 122, 226,
+ 210, 250, 103, 223, 92, 226, 210, 250, 103, 225, 145, 226, 210, 250, 103,
+ 254, 208, 226, 210, 250, 103, 224, 141, 230, 98, 226, 210, 250, 103, 224,
+ 141, 52, 230, 98, 207, 224, 141, 251, 241, 218, 8, 207, 224, 141, 251,
+ 241, 226, 38, 207, 224, 141, 251, 241, 224, 129, 207, 224, 141, 251, 241,
+ 251, 19, 207, 224, 141, 251, 241, 233, 8, 221, 225, 207, 224, 141, 251,
+ 241, 235, 13, 221, 225, 207, 224, 141, 251, 241, 248, 222, 221, 225, 207,
+ 224, 141, 251, 241, 252, 192, 221, 225, 213, 252, 138, 234, 210, 213,
+ 252, 138, 220, 77, 213, 252, 138, 224, 198, 213, 252, 5, 228, 209, 213,
+ 252, 5, 211, 80, 230, 222, 218, 0, 213, 252, 138, 211, 80, 254, 213, 235,
+ 243, 218, 0, 213, 252, 138, 211, 80, 235, 243, 218, 0, 213, 252, 138,
+ 211, 80, 234, 198, 235, 243, 218, 0, 213, 252, 138, 251, 2, 51, 213, 252,
+ 138, 211, 80, 234, 198, 235, 243, 218, 1, 221, 197, 213, 252, 138, 52,
+ 218, 0, 213, 252, 138, 215, 211, 218, 0, 213, 252, 138, 234, 198, 254,
+ 77, 213, 252, 138, 59, 51, 213, 252, 138, 113, 170, 51, 213, 252, 138,
+ 134, 170, 51, 213, 252, 138, 222, 240, 234, 209, 235, 243, 218, 0, 213,
+ 252, 138, 253, 204, 235, 243, 218, 0, 213, 252, 5, 213, 148, 218, 0, 213,
+ 252, 5, 213, 148, 214, 216, 213, 252, 5, 223, 49, 213, 148, 214, 216,
+ 213, 252, 5, 213, 148, 254, 77, 213, 252, 5, 223, 49, 213, 148, 254, 77,
+ 213, 252, 5, 213, 148, 214, 217, 2, 217, 77, 213, 252, 5, 213, 148, 254,
+ 78, 2, 217, 77, 213, 252, 5, 254, 76, 254, 91, 213, 252, 5, 254, 76, 252,
+ 166, 213, 252, 5, 254, 76, 214, 20, 213, 252, 5, 254, 76, 214, 21, 2,
+ 217, 77, 213, 252, 5, 216, 68, 213, 252, 5, 241, 191, 199, 254, 75, 213,
+ 252, 5, 199, 254, 75, 213, 252, 5, 222, 142, 199, 254, 75, 213, 252, 5,
+ 254, 76, 214, 223, 230, 90, 213, 252, 5, 254, 20, 213, 252, 5, 222, 187,
+ 254, 20, 213, 252, 138, 251, 2, 48, 213, 252, 5, 235, 102, 213, 252, 5,
+ 214, 161, 7, 1, 4, 6, 61, 7, 1, 4, 6, 254, 243, 7, 4, 1, 215, 94, 254,
+ 243, 7, 1, 4, 6, 252, 134, 253, 158, 7, 1, 4, 6, 251, 66, 7, 1, 4, 6,
+ 249, 60, 7, 1, 4, 6, 245, 59, 7, 1, 4, 6, 75, 7, 4, 1, 215, 94, 204, 75,
+ 7, 4, 1, 215, 94, 73, 7, 1, 4, 6, 235, 144, 7, 1, 4, 6, 235, 23, 7, 1, 4,
+ 6, 233, 149, 2, 91, 7, 1, 4, 6, 193, 7, 1, 4, 6, 223, 49, 230, 25, 7, 1,
+ 4, 6, 76, 7, 1, 4, 6, 204, 76, 7, 4, 1, 219, 187, 76, 7, 4, 1, 219, 187,
+ 204, 76, 7, 4, 1, 219, 187, 144, 2, 91, 7, 4, 1, 215, 94, 226, 234, 7, 1,
+ 4, 6, 226, 134, 7, 4, 1, 216, 14, 163, 76, 7, 4, 1, 251, 175, 163, 76, 7,
+ 1, 4, 6, 226, 105, 7, 1, 4, 6, 223, 49, 153, 7, 1, 4, 6, 215, 94, 153, 7,
+ 1, 4, 6, 217, 152, 7, 1, 4, 6, 70, 7, 4, 1, 219, 187, 70, 7, 4, 1, 219,
+ 187, 248, 0, 70, 7, 4, 1, 219, 187, 215, 94, 193, 7, 1, 4, 6, 214, 105,
+ 7, 1, 4, 6, 212, 98, 7, 1, 4, 6, 210, 159, 7, 1, 4, 6, 245, 8, 7, 1, 213,
+ 135, 233, 82, 218, 250, 7, 1, 254, 196, 26, 1, 4, 6, 243, 107, 26, 1, 4,
+ 6, 233, 98, 26, 1, 4, 6, 225, 108, 26, 1, 4, 6, 223, 37, 26, 1, 4, 6,
+ 224, 161, 33, 1, 4, 6, 245, 174, 58, 1, 6, 61, 58, 1, 6, 254, 243, 58, 1,
+ 6, 253, 158, 58, 1, 6, 252, 134, 253, 158, 58, 1, 6, 249, 60, 58, 1, 6,
+ 75, 58, 1, 6, 223, 49, 75, 58, 1, 6, 243, 202, 58, 1, 6, 242, 60, 58, 1,
+ 6, 73, 58, 1, 6, 235, 144, 58, 1, 6, 235, 23, 58, 1, 6, 156, 58, 1, 6,
+ 193, 58, 1, 6, 230, 25, 58, 1, 6, 223, 49, 230, 25, 58, 1, 6, 76, 58, 1,
+ 6, 226, 134, 58, 1, 6, 226, 105, 58, 1, 6, 153, 58, 1, 6, 217, 152, 58,
+ 1, 6, 70, 58, 1, 6, 212, 98, 58, 1, 4, 61, 58, 1, 4, 215, 94, 61, 58, 1,
+ 4, 254, 143, 58, 1, 4, 215, 94, 254, 243, 58, 1, 4, 253, 158, 58, 1, 4,
+ 249, 60, 58, 1, 4, 75, 58, 1, 4, 221, 195, 58, 1, 4, 204, 75, 58, 1, 4,
+ 215, 94, 204, 75, 58, 1, 4, 243, 202, 58, 1, 4, 215, 94, 73, 58, 1, 4,
+ 235, 23, 58, 1, 4, 193, 58, 1, 4, 245, 138, 58, 1, 4, 76, 58, 1, 4, 204,
+ 76, 58, 1, 4, 216, 14, 163, 76, 58, 1, 4, 251, 175, 163, 76, 58, 1, 4,
+ 226, 105, 58, 1, 4, 217, 152, 58, 1, 4, 70, 58, 1, 4, 219, 187, 70, 58,
+ 1, 4, 215, 94, 193, 58, 1, 4, 214, 105, 58, 1, 4, 254, 196, 58, 1, 4,
+ 252, 26, 58, 1, 4, 26, 243, 107, 58, 1, 4, 248, 54, 58, 1, 4, 26, 225,
+ 133, 58, 1, 4, 250, 110, 7, 218, 65, 4, 1, 73, 7, 218, 65, 4, 1, 153, 7,
+ 218, 65, 4, 1, 70, 7, 218, 65, 4, 1, 214, 105, 26, 218, 65, 4, 1, 252,
+ 26, 26, 218, 65, 4, 1, 243, 107, 26, 218, 65, 4, 1, 223, 37, 26, 218, 65,
+ 4, 1, 225, 133, 26, 218, 65, 4, 1, 250, 110, 7, 4, 1, 214, 214, 7, 4, 1,
+ 57, 2, 230, 224, 182, 7, 4, 1, 249, 61, 2, 230, 224, 182, 7, 4, 1, 245,
+ 7, 2, 230, 224, 182, 7, 4, 1, 232, 50, 2, 230, 224, 182, 7, 4, 1, 230,
+ 26, 2, 230, 224, 182, 7, 4, 1, 226, 106, 2, 230, 224, 182, 7, 4, 1, 223,
+ 224, 2, 230, 224, 182, 7, 4, 1, 223, 224, 2, 244, 88, 22, 230, 224, 182,
+ 7, 4, 1, 222, 92, 2, 230, 224, 182, 7, 4, 1, 217, 153, 2, 230, 224, 182,
+ 7, 4, 1, 210, 160, 2, 230, 224, 182, 7, 4, 1, 215, 94, 243, 202, 58, 1,
+ 33, 245, 150, 7, 4, 1, 235, 213, 243, 202, 7, 4, 1, 216, 211, 2, 218,
+ 107, 7, 4, 6, 1, 240, 154, 2, 91, 7, 4, 1, 235, 186, 2, 91, 7, 4, 1, 226,
+ 106, 2, 91, 7, 4, 6, 1, 104, 2, 91, 7, 4, 1, 214, 158, 2, 91, 7, 4, 1,
+ 57, 2, 226, 66, 103, 7, 4, 1, 249, 61, 2, 226, 66, 103, 7, 4, 1, 245, 7,
+ 2, 226, 66, 103, 7, 4, 1, 243, 203, 2, 226, 66, 103, 7, 4, 1, 235, 24, 2,
+ 226, 66, 103, 7, 4, 1, 233, 149, 2, 226, 66, 103, 7, 4, 1, 232, 50, 2,
+ 226, 66, 103, 7, 4, 1, 230, 26, 2, 226, 66, 103, 7, 4, 1, 226, 106, 2,
+ 226, 66, 103, 7, 4, 1, 223, 224, 2, 226, 66, 103, 7, 4, 1, 222, 92, 2,
+ 226, 66, 103, 7, 4, 1, 245, 76, 2, 226, 66, 103, 7, 4, 1, 214, 106, 2,
+ 226, 66, 103, 7, 4, 1, 211, 179, 2, 226, 66, 103, 7, 4, 1, 210, 160, 2,
+ 226, 66, 103, 7, 4, 1, 115, 2, 223, 55, 103, 7, 4, 1, 254, 144, 2, 223,
+ 55, 103, 7, 4, 1, 249, 61, 2, 241, 52, 22, 217, 77, 7, 4, 1, 160, 2, 223,
+ 55, 103, 7, 4, 1, 204, 160, 2, 223, 55, 103, 7, 4, 1, 223, 49, 204, 160,
+ 2, 223, 55, 103, 7, 4, 1, 221, 196, 2, 223, 55, 103, 7, 4, 1, 240, 154,
+ 2, 223, 55, 103, 7, 4, 1, 204, 144, 2, 223, 55, 103, 7, 4, 1, 245, 76, 2,
+ 223, 55, 103, 7, 4, 1, 104, 2, 223, 55, 103, 7, 4, 1, 245, 9, 2, 223, 55,
+ 103, 58, 1, 4, 215, 94, 254, 143, 58, 1, 4, 251, 66, 58, 1, 4, 251, 67,
+ 2, 249, 100, 58, 1, 4, 245, 59, 58, 1, 4, 223, 49, 204, 75, 58, 1, 4,
+ 245, 6, 58, 1, 4, 247, 119, 235, 145, 2, 91, 58, 1, 4, 119, 243, 202, 58,
+ 1, 4, 215, 94, 242, 60, 58, 1, 4, 240, 154, 2, 91, 58, 1, 4, 235, 185,
+ 58, 1, 4, 6, 73, 58, 1, 4, 6, 240, 154, 2, 91, 58, 1, 4, 235, 145, 2,
+ 249, 127, 58, 1, 4, 233, 149, 2, 223, 55, 103, 58, 1, 4, 233, 149, 2,
+ 226, 66, 103, 58, 1, 4, 6, 156, 58, 1, 4, 232, 50, 2, 103, 58, 1, 4, 215,
+ 94, 232, 50, 2, 199, 233, 36, 58, 1, 4, 230, 26, 2, 43, 103, 58, 1, 4,
+ 230, 26, 2, 223, 55, 103, 58, 1, 4, 6, 230, 25, 58, 1, 4, 252, 134, 76,
+ 58, 1, 4, 225, 133, 58, 1, 4, 222, 92, 2, 103, 58, 1, 4, 245, 75, 58, 1,
+ 4, 217, 153, 2, 226, 66, 103, 58, 1, 4, 104, 130, 58, 1, 4, 214, 157, 58,
+ 1, 4, 6, 70, 58, 1, 4, 214, 106, 2, 103, 58, 1, 4, 215, 94, 214, 105, 58,
+ 1, 4, 210, 159, 58, 1, 4, 210, 160, 2, 223, 55, 103, 58, 1, 4, 210, 160,
+ 2, 249, 100, 58, 1, 4, 245, 8, 58, 1, 4, 216, 179, 38, 246, 118, 242,
+ 137, 255, 14, 38, 246, 118, 255, 3, 255, 14, 38, 219, 69, 51, 38, 218, 6,
+ 78, 38, 231, 231, 38, 242, 134, 38, 231, 229, 38, 255, 1, 38, 242, 135,
+ 38, 255, 2, 38, 7, 4, 1, 223, 224, 51, 38, 251, 145, 38, 231, 230, 38,
+ 52, 250, 31, 48, 38, 226, 225, 48, 38, 210, 35, 51, 38, 235, 172, 51, 38,
+ 214, 151, 48, 38, 214, 134, 48, 38, 7, 4, 1, 244, 63, 204, 115, 48, 38,
+ 7, 4, 1, 254, 243, 38, 7, 4, 1, 254, 73, 38, 7, 4, 1, 253, 176, 38, 7, 4,
+ 1, 251, 67, 250, 183, 38, 7, 4, 1, 235, 213, 249, 60, 38, 7, 4, 1, 245,
+ 59, 38, 7, 4, 1, 243, 202, 38, 7, 1, 4, 6, 243, 202, 38, 7, 4, 1, 235,
+ 23, 38, 7, 4, 1, 156, 38, 7, 1, 4, 6, 156, 38, 7, 1, 4, 6, 193, 38, 7, 4,
+ 1, 230, 25, 38, 7, 1, 4, 6, 230, 25, 38, 7, 1, 4, 6, 153, 38, 7, 4, 1,
+ 223, 224, 222, 186, 38, 7, 4, 1, 222, 91, 38, 7, 4, 1, 199, 222, 91, 38,
+ 7, 4, 1, 210, 159, 38, 52, 235, 193, 251, 147, 51, 38, 254, 148, 128,
+ 216, 42, 51, 38, 43, 253, 250, 48, 38, 44, 253, 250, 22, 124, 253, 250,
+ 51, 7, 6, 1, 115, 2, 222, 234, 51, 7, 4, 1, 115, 2, 222, 234, 51, 7, 6,
+ 1, 57, 2, 59, 48, 7, 4, 1, 57, 2, 59, 48, 7, 6, 1, 57, 2, 59, 51, 7, 4,
+ 1, 57, 2, 59, 51, 7, 6, 1, 57, 2, 232, 214, 51, 7, 4, 1, 57, 2, 232, 214,
+ 51, 7, 6, 1, 251, 67, 2, 250, 184, 22, 142, 7, 4, 1, 251, 67, 2, 250,
+ 184, 22, 142, 7, 6, 1, 249, 61, 2, 59, 48, 7, 4, 1, 249, 61, 2, 59, 48,
+ 7, 6, 1, 249, 61, 2, 59, 51, 7, 4, 1, 249, 61, 2, 59, 51, 7, 6, 1, 249,
+ 61, 2, 232, 214, 51, 7, 4, 1, 249, 61, 2, 232, 214, 51, 7, 6, 1, 249, 61,
+ 2, 250, 183, 7, 4, 1, 249, 61, 2, 250, 183, 7, 6, 1, 249, 61, 2, 250, 31,
+ 51, 7, 4, 1, 249, 61, 2, 250, 31, 51, 7, 6, 1, 160, 2, 231, 233, 22, 242,
+ 136, 7, 4, 1, 160, 2, 231, 233, 22, 242, 136, 7, 6, 1, 160, 2, 231, 233,
+ 22, 142, 7, 4, 1, 160, 2, 231, 233, 22, 142, 7, 6, 1, 160, 2, 250, 31,
+ 51, 7, 4, 1, 160, 2, 250, 31, 51, 7, 6, 1, 160, 2, 216, 89, 51, 7, 4, 1,
+ 160, 2, 216, 89, 51, 7, 6, 1, 160, 2, 250, 184, 22, 251, 146, 7, 4, 1,
+ 160, 2, 250, 184, 22, 251, 146, 7, 6, 1, 245, 7, 2, 59, 48, 7, 4, 1, 245,
+ 7, 2, 59, 48, 7, 6, 1, 243, 203, 2, 231, 232, 7, 4, 1, 243, 203, 2, 231,
+ 232, 7, 6, 1, 242, 61, 2, 59, 48, 7, 4, 1, 242, 61, 2, 59, 48, 7, 6, 1,
+ 242, 61, 2, 59, 51, 7, 4, 1, 242, 61, 2, 59, 51, 7, 6, 1, 242, 61, 2,
+ 248, 1, 7, 4, 1, 242, 61, 2, 248, 1, 7, 6, 1, 242, 61, 2, 250, 183, 7, 4,
+ 1, 242, 61, 2, 250, 183, 7, 6, 1, 242, 61, 2, 251, 147, 51, 7, 4, 1, 242,
+ 61, 2, 251, 147, 51, 7, 6, 1, 240, 154, 2, 216, 89, 51, 7, 4, 1, 240,
+ 154, 2, 216, 89, 51, 7, 6, 1, 240, 154, 2, 248, 2, 22, 142, 7, 4, 1, 240,
+ 154, 2, 248, 2, 22, 142, 7, 6, 1, 235, 24, 2, 142, 7, 4, 1, 235, 24, 2,
+ 142, 7, 6, 1, 235, 24, 2, 59, 51, 7, 4, 1, 235, 24, 2, 59, 51, 7, 6, 1,
+ 235, 24, 2, 232, 214, 51, 7, 4, 1, 235, 24, 2, 232, 214, 51, 7, 6, 1,
+ 233, 149, 2, 59, 51, 7, 4, 1, 233, 149, 2, 59, 51, 7, 6, 1, 233, 149, 2,
+ 59, 252, 43, 22, 231, 232, 7, 4, 1, 233, 149, 2, 59, 252, 43, 22, 231,
+ 232, 7, 6, 1, 233, 149, 2, 232, 214, 51, 7, 4, 1, 233, 149, 2, 232, 214,
+ 51, 7, 6, 1, 233, 149, 2, 250, 31, 51, 7, 4, 1, 233, 149, 2, 250, 31, 51,
+ 7, 6, 1, 232, 50, 2, 142, 7, 4, 1, 232, 50, 2, 142, 7, 6, 1, 232, 50, 2,
+ 59, 48, 7, 4, 1, 232, 50, 2, 59, 48, 7, 6, 1, 232, 50, 2, 59, 51, 7, 4,
+ 1, 232, 50, 2, 59, 51, 7, 6, 1, 230, 26, 2, 59, 48, 7, 4, 1, 230, 26, 2,
+ 59, 48, 7, 6, 1, 230, 26, 2, 59, 51, 7, 4, 1, 230, 26, 2, 59, 51, 7, 6,
+ 1, 230, 26, 2, 232, 214, 51, 7, 4, 1, 230, 26, 2, 232, 214, 51, 7, 6, 1,
+ 230, 26, 2, 250, 31, 51, 7, 4, 1, 230, 26, 2, 250, 31, 51, 7, 6, 1, 144,
+ 2, 216, 89, 22, 142, 7, 4, 1, 144, 2, 216, 89, 22, 142, 7, 6, 1, 144, 2,
+ 216, 89, 22, 248, 1, 7, 4, 1, 144, 2, 216, 89, 22, 248, 1, 7, 6, 1, 144,
+ 2, 231, 233, 22, 242, 136, 7, 4, 1, 144, 2, 231, 233, 22, 242, 136, 7, 6,
+ 1, 144, 2, 231, 233, 22, 142, 7, 4, 1, 144, 2, 231, 233, 22, 142, 7, 6,
+ 1, 226, 106, 2, 142, 7, 4, 1, 226, 106, 2, 142, 7, 6, 1, 226, 106, 2, 59,
+ 48, 7, 4, 1, 226, 106, 2, 59, 48, 7, 6, 1, 223, 224, 2, 59, 48, 7, 4, 1,
+ 223, 224, 2, 59, 48, 7, 6, 1, 223, 224, 2, 59, 51, 7, 4, 1, 223, 224, 2,
+ 59, 51, 7, 6, 1, 223, 224, 2, 59, 252, 43, 22, 231, 232, 7, 4, 1, 223,
+ 224, 2, 59, 252, 43, 22, 231, 232, 7, 6, 1, 223, 224, 2, 232, 214, 51, 7,
+ 4, 1, 223, 224, 2, 232, 214, 51, 7, 6, 1, 222, 92, 2, 59, 48, 7, 4, 1,
+ 222, 92, 2, 59, 48, 7, 6, 1, 222, 92, 2, 59, 51, 7, 4, 1, 222, 92, 2, 59,
+ 51, 7, 6, 1, 222, 92, 2, 255, 3, 22, 59, 48, 7, 4, 1, 222, 92, 2, 255, 3,
+ 22, 59, 48, 7, 6, 1, 222, 92, 2, 250, 235, 22, 59, 48, 7, 4, 1, 222, 92,
+ 2, 250, 235, 22, 59, 48, 7, 6, 1, 222, 92, 2, 59, 252, 43, 22, 59, 48, 7,
+ 4, 1, 222, 92, 2, 59, 252, 43, 22, 59, 48, 7, 6, 1, 217, 153, 2, 59, 48,
+ 7, 4, 1, 217, 153, 2, 59, 48, 7, 6, 1, 217, 153, 2, 59, 51, 7, 4, 1, 217,
+ 153, 2, 59, 51, 7, 6, 1, 217, 153, 2, 232, 214, 51, 7, 4, 1, 217, 153, 2,
+ 232, 214, 51, 7, 6, 1, 217, 153, 2, 250, 31, 51, 7, 4, 1, 217, 153, 2,
+ 250, 31, 51, 7, 6, 1, 104, 2, 248, 2, 51, 7, 4, 1, 104, 2, 248, 2, 51, 7,
+ 6, 1, 104, 2, 216, 89, 51, 7, 4, 1, 104, 2, 216, 89, 51, 7, 6, 1, 104, 2,
+ 250, 31, 51, 7, 4, 1, 104, 2, 250, 31, 51, 7, 6, 1, 104, 2, 216, 89, 22,
+ 142, 7, 4, 1, 104, 2, 216, 89, 22, 142, 7, 6, 1, 104, 2, 231, 233, 22,
+ 248, 1, 7, 4, 1, 104, 2, 231, 233, 22, 248, 1, 7, 6, 1, 214, 106, 2, 182,
+ 7, 4, 1, 214, 106, 2, 182, 7, 6, 1, 214, 106, 2, 59, 51, 7, 4, 1, 214,
+ 106, 2, 59, 51, 7, 6, 1, 212, 99, 2, 242, 136, 7, 4, 1, 212, 99, 2, 242,
+ 136, 7, 6, 1, 212, 99, 2, 142, 7, 4, 1, 212, 99, 2, 142, 7, 6, 1, 212,
+ 99, 2, 248, 1, 7, 4, 1, 212, 99, 2, 248, 1, 7, 6, 1, 212, 99, 2, 59, 48,
+ 7, 4, 1, 212, 99, 2, 59, 48, 7, 6, 1, 212, 99, 2, 59, 51, 7, 4, 1, 212,
+ 99, 2, 59, 51, 7, 6, 1, 211, 179, 2, 59, 48, 7, 4, 1, 211, 179, 2, 59,
+ 48, 7, 6, 1, 211, 179, 2, 248, 1, 7, 4, 1, 211, 179, 2, 248, 1, 7, 6, 1,
+ 211, 118, 2, 59, 48, 7, 4, 1, 211, 118, 2, 59, 48, 7, 6, 1, 210, 160, 2,
+ 250, 30, 7, 4, 1, 210, 160, 2, 250, 30, 7, 6, 1, 210, 160, 2, 59, 51, 7,
+ 4, 1, 210, 160, 2, 59, 51, 7, 6, 1, 210, 160, 2, 232, 214, 51, 7, 4, 1,
+ 210, 160, 2, 232, 214, 51, 7, 4, 1, 242, 61, 2, 232, 214, 51, 7, 4, 1,
+ 217, 153, 2, 248, 1, 7, 4, 1, 212, 99, 2, 222, 234, 48, 7, 4, 1, 211,
+ 118, 2, 222, 234, 48, 7, 4, 1, 115, 2, 44, 163, 222, 233, 7, 4, 1, 199,
+ 222, 92, 2, 59, 48, 7, 4, 1, 199, 222, 92, 2, 247, 255, 91, 7, 4, 1, 199,
+ 222, 92, 2, 125, 91, 7, 6, 1, 220, 76, 222, 91, 7, 4, 1, 248, 54, 7, 6,
+ 1, 115, 2, 59, 51, 7, 4, 1, 115, 2, 59, 51, 7, 6, 1, 115, 2, 241, 52, 48,
+ 7, 4, 1, 115, 2, 241, 52, 48, 7, 6, 1, 115, 2, 250, 31, 22, 142, 7, 4, 1,
+ 115, 2, 250, 31, 22, 142, 7, 6, 1, 115, 2, 250, 31, 22, 242, 136, 7, 4,
+ 1, 115, 2, 250, 31, 22, 242, 136, 7, 6, 1, 115, 2, 250, 31, 22, 241, 52,
+ 48, 7, 4, 1, 115, 2, 250, 31, 22, 241, 52, 48, 7, 6, 1, 115, 2, 250, 31,
+ 22, 182, 7, 4, 1, 115, 2, 250, 31, 22, 182, 7, 6, 1, 115, 2, 250, 31, 22,
+ 59, 51, 7, 4, 1, 115, 2, 250, 31, 22, 59, 51, 7, 6, 1, 115, 2, 251, 147,
+ 22, 142, 7, 4, 1, 115, 2, 251, 147, 22, 142, 7, 6, 1, 115, 2, 251, 147,
+ 22, 242, 136, 7, 4, 1, 115, 2, 251, 147, 22, 242, 136, 7, 6, 1, 115, 2,
+ 251, 147, 22, 241, 52, 48, 7, 4, 1, 115, 2, 251, 147, 22, 241, 52, 48, 7,
+ 6, 1, 115, 2, 251, 147, 22, 182, 7, 4, 1, 115, 2, 251, 147, 22, 182, 7,
+ 6, 1, 115, 2, 251, 147, 22, 59, 51, 7, 4, 1, 115, 2, 251, 147, 22, 59,
+ 51, 7, 6, 1, 160, 2, 59, 51, 7, 4, 1, 160, 2, 59, 51, 7, 6, 1, 160, 2,
+ 241, 52, 48, 7, 4, 1, 160, 2, 241, 52, 48, 7, 6, 1, 160, 2, 182, 7, 4, 1,
+ 160, 2, 182, 7, 6, 1, 160, 2, 250, 31, 22, 142, 7, 4, 1, 160, 2, 250, 31,
+ 22, 142, 7, 6, 1, 160, 2, 250, 31, 22, 242, 136, 7, 4, 1, 160, 2, 250,
+ 31, 22, 242, 136, 7, 6, 1, 160, 2, 250, 31, 22, 241, 52, 48, 7, 4, 1,
+ 160, 2, 250, 31, 22, 241, 52, 48, 7, 6, 1, 160, 2, 250, 31, 22, 182, 7,
+ 4, 1, 160, 2, 250, 31, 22, 182, 7, 6, 1, 160, 2, 250, 31, 22, 59, 51, 7,
+ 4, 1, 160, 2, 250, 31, 22, 59, 51, 7, 6, 1, 240, 154, 2, 241, 52, 48, 7,
+ 4, 1, 240, 154, 2, 241, 52, 48, 7, 6, 1, 240, 154, 2, 59, 51, 7, 4, 1,
+ 240, 154, 2, 59, 51, 7, 6, 1, 144, 2, 59, 51, 7, 4, 1, 144, 2, 59, 51, 7,
+ 6, 1, 144, 2, 241, 52, 48, 7, 4, 1, 144, 2, 241, 52, 48, 7, 6, 1, 144, 2,
+ 250, 31, 22, 142, 7, 4, 1, 144, 2, 250, 31, 22, 142, 7, 6, 1, 144, 2,
+ 250, 31, 22, 242, 136, 7, 4, 1, 144, 2, 250, 31, 22, 242, 136, 7, 6, 1,
+ 144, 2, 250, 31, 22, 241, 52, 48, 7, 4, 1, 144, 2, 250, 31, 22, 241, 52,
+ 48, 7, 6, 1, 144, 2, 250, 31, 22, 182, 7, 4, 1, 144, 2, 250, 31, 22, 182,
+ 7, 6, 1, 144, 2, 250, 31, 22, 59, 51, 7, 4, 1, 144, 2, 250, 31, 22, 59,
+ 51, 7, 6, 1, 144, 2, 240, 249, 22, 142, 7, 4, 1, 144, 2, 240, 249, 22,
+ 142, 7, 6, 1, 144, 2, 240, 249, 22, 242, 136, 7, 4, 1, 144, 2, 240, 249,
+ 22, 242, 136, 7, 6, 1, 144, 2, 240, 249, 22, 241, 52, 48, 7, 4, 1, 144,
+ 2, 240, 249, 22, 241, 52, 48, 7, 6, 1, 144, 2, 240, 249, 22, 182, 7, 4,
+ 1, 144, 2, 240, 249, 22, 182, 7, 6, 1, 144, 2, 240, 249, 22, 59, 51, 7,
+ 4, 1, 144, 2, 240, 249, 22, 59, 51, 7, 6, 1, 104, 2, 59, 51, 7, 4, 1,
+ 104, 2, 59, 51, 7, 6, 1, 104, 2, 241, 52, 48, 7, 4, 1, 104, 2, 241, 52,
+ 48, 7, 6, 1, 104, 2, 240, 249, 22, 142, 7, 4, 1, 104, 2, 240, 249, 22,
+ 142, 7, 6, 1, 104, 2, 240, 249, 22, 242, 136, 7, 4, 1, 104, 2, 240, 249,
+ 22, 242, 136, 7, 6, 1, 104, 2, 240, 249, 22, 241, 52, 48, 7, 4, 1, 104,
+ 2, 240, 249, 22, 241, 52, 48, 7, 6, 1, 104, 2, 240, 249, 22, 182, 7, 4,
+ 1, 104, 2, 240, 249, 22, 182, 7, 6, 1, 104, 2, 240, 249, 22, 59, 51, 7,
+ 4, 1, 104, 2, 240, 249, 22, 59, 51, 7, 6, 1, 211, 118, 2, 242, 136, 7, 4,
+ 1, 211, 118, 2, 242, 136, 7, 6, 1, 211, 118, 2, 59, 51, 7, 4, 1, 211,
+ 118, 2, 59, 51, 7, 6, 1, 211, 118, 2, 241, 52, 48, 7, 4, 1, 211, 118, 2,
+ 241, 52, 48, 7, 6, 1, 211, 118, 2, 182, 7, 4, 1, 211, 118, 2, 182, 7, 6,
+ 1, 230, 223, 232, 185, 7, 4, 1, 230, 223, 232, 185, 7, 6, 1, 230, 223,
+ 214, 105, 7, 4, 1, 230, 223, 214, 105, 7, 6, 1, 211, 118, 2, 232, 123, 7,
+ 4, 1, 211, 118, 2, 232, 123, 26, 4, 1, 254, 144, 2, 224, 154, 26, 4, 1,
+ 254, 144, 2, 248, 153, 26, 4, 1, 254, 144, 2, 224, 155, 22, 214, 13, 26,
+ 4, 1, 254, 144, 2, 248, 154, 22, 214, 13, 26, 4, 1, 254, 144, 2, 224,
+ 155, 22, 226, 110, 26, 4, 1, 254, 144, 2, 248, 154, 22, 226, 110, 26, 4,
+ 1, 254, 144, 2, 224, 155, 22, 225, 175, 26, 4, 1, 254, 144, 2, 248, 154,
+ 22, 225, 175, 26, 6, 1, 254, 144, 2, 224, 154, 26, 6, 1, 254, 144, 2,
+ 248, 153, 26, 6, 1, 254, 144, 2, 224, 155, 22, 214, 13, 26, 6, 1, 254,
+ 144, 2, 248, 154, 22, 214, 13, 26, 6, 1, 254, 144, 2, 224, 155, 22, 226,
+ 110, 26, 6, 1, 254, 144, 2, 248, 154, 22, 226, 110, 26, 6, 1, 254, 144,
+ 2, 224, 155, 22, 225, 175, 26, 6, 1, 254, 144, 2, 248, 154, 22, 225, 175,
+ 26, 4, 1, 245, 101, 2, 224, 154, 26, 4, 1, 245, 101, 2, 248, 153, 26, 4,
+ 1, 245, 101, 2, 224, 155, 22, 214, 13, 26, 4, 1, 245, 101, 2, 248, 154,
+ 22, 214, 13, 26, 4, 1, 245, 101, 2, 224, 155, 22, 226, 110, 26, 4, 1,
+ 245, 101, 2, 248, 154, 22, 226, 110, 26, 6, 1, 245, 101, 2, 224, 154, 26,
+ 6, 1, 245, 101, 2, 248, 153, 26, 6, 1, 245, 101, 2, 224, 155, 22, 214,
+ 13, 26, 6, 1, 245, 101, 2, 248, 154, 22, 214, 13, 26, 6, 1, 245, 101, 2,
+ 224, 155, 22, 226, 110, 26, 6, 1, 245, 101, 2, 248, 154, 22, 226, 110,
+ 26, 4, 1, 245, 64, 2, 224, 154, 26, 4, 1, 245, 64, 2, 248, 153, 26, 4, 1,
+ 245, 64, 2, 224, 155, 22, 214, 13, 26, 4, 1, 245, 64, 2, 248, 154, 22,
+ 214, 13, 26, 4, 1, 245, 64, 2, 224, 155, 22, 226, 110, 26, 4, 1, 245, 64,
+ 2, 248, 154, 22, 226, 110, 26, 4, 1, 245, 64, 2, 224, 155, 22, 225, 175,
+ 26, 4, 1, 245, 64, 2, 248, 154, 22, 225, 175, 26, 6, 1, 245, 64, 2, 224,
+ 154, 26, 6, 1, 245, 64, 2, 248, 153, 26, 6, 1, 245, 64, 2, 224, 155, 22,
+ 214, 13, 26, 6, 1, 245, 64, 2, 248, 154, 22, 214, 13, 26, 6, 1, 245, 64,
+ 2, 224, 155, 22, 226, 110, 26, 6, 1, 245, 64, 2, 248, 154, 22, 226, 110,
+ 26, 6, 1, 245, 64, 2, 224, 155, 22, 225, 175, 26, 6, 1, 245, 64, 2, 248,
+ 154, 22, 225, 175, 26, 4, 1, 235, 186, 2, 224, 154, 26, 4, 1, 235, 186,
+ 2, 248, 153, 26, 4, 1, 235, 186, 2, 224, 155, 22, 214, 13, 26, 4, 1, 235,
+ 186, 2, 248, 154, 22, 214, 13, 26, 4, 1, 235, 186, 2, 224, 155, 22, 226,
+ 110, 26, 4, 1, 235, 186, 2, 248, 154, 22, 226, 110, 26, 4, 1, 235, 186,
+ 2, 224, 155, 22, 225, 175, 26, 4, 1, 235, 186, 2, 248, 154, 22, 225, 175,
+ 26, 6, 1, 235, 186, 2, 224, 154, 26, 6, 1, 235, 186, 2, 248, 153, 26, 6,
+ 1, 235, 186, 2, 224, 155, 22, 214, 13, 26, 6, 1, 235, 186, 2, 248, 154,
+ 22, 214, 13, 26, 6, 1, 235, 186, 2, 224, 155, 22, 226, 110, 26, 6, 1,
+ 235, 186, 2, 248, 154, 22, 226, 110, 26, 6, 1, 235, 186, 2, 224, 155, 22,
+ 225, 175, 26, 6, 1, 235, 186, 2, 248, 154, 22, 225, 175, 26, 4, 1, 226,
+ 200, 2, 224, 154, 26, 4, 1, 226, 200, 2, 248, 153, 26, 4, 1, 226, 200, 2,
+ 224, 155, 22, 214, 13, 26, 4, 1, 226, 200, 2, 248, 154, 22, 214, 13, 26,
+ 4, 1, 226, 200, 2, 224, 155, 22, 226, 110, 26, 4, 1, 226, 200, 2, 248,
+ 154, 22, 226, 110, 26, 6, 1, 226, 200, 2, 224, 154, 26, 6, 1, 226, 200,
+ 2, 248, 153, 26, 6, 1, 226, 200, 2, 224, 155, 22, 214, 13, 26, 6, 1, 226,
+ 200, 2, 248, 154, 22, 214, 13, 26, 6, 1, 226, 200, 2, 224, 155, 22, 226,
+ 110, 26, 6, 1, 226, 200, 2, 248, 154, 22, 226, 110, 26, 4, 1, 214, 158,
+ 2, 224, 154, 26, 4, 1, 214, 158, 2, 248, 153, 26, 4, 1, 214, 158, 2, 224,
+ 155, 22, 214, 13, 26, 4, 1, 214, 158, 2, 248, 154, 22, 214, 13, 26, 4, 1,
+ 214, 158, 2, 224, 155, 22, 226, 110, 26, 4, 1, 214, 158, 2, 248, 154, 22,
+ 226, 110, 26, 4, 1, 214, 158, 2, 224, 155, 22, 225, 175, 26, 4, 1, 214,
+ 158, 2, 248, 154, 22, 225, 175, 26, 6, 1, 214, 158, 2, 248, 153, 26, 6,
+ 1, 214, 158, 2, 248, 154, 22, 214, 13, 26, 6, 1, 214, 158, 2, 248, 154,
+ 22, 226, 110, 26, 6, 1, 214, 158, 2, 248, 154, 22, 225, 175, 26, 4, 1,
+ 226, 202, 2, 224, 154, 26, 4, 1, 226, 202, 2, 248, 153, 26, 4, 1, 226,
+ 202, 2, 224, 155, 22, 214, 13, 26, 4, 1, 226, 202, 2, 248, 154, 22, 214,
+ 13, 26, 4, 1, 226, 202, 2, 224, 155, 22, 226, 110, 26, 4, 1, 226, 202, 2,
+ 248, 154, 22, 226, 110, 26, 4, 1, 226, 202, 2, 224, 155, 22, 225, 175,
+ 26, 4, 1, 226, 202, 2, 248, 154, 22, 225, 175, 26, 6, 1, 226, 202, 2,
+ 224, 154, 26, 6, 1, 226, 202, 2, 248, 153, 26, 6, 1, 226, 202, 2, 224,
+ 155, 22, 214, 13, 26, 6, 1, 226, 202, 2, 248, 154, 22, 214, 13, 26, 6, 1,
+ 226, 202, 2, 224, 155, 22, 226, 110, 26, 6, 1, 226, 202, 2, 248, 154, 22,
+ 226, 110, 26, 6, 1, 226, 202, 2, 224, 155, 22, 225, 175, 26, 6, 1, 226,
+ 202, 2, 248, 154, 22, 225, 175, 26, 4, 1, 254, 144, 2, 214, 13, 26, 4, 1,
+ 254, 144, 2, 226, 110, 26, 4, 1, 245, 101, 2, 214, 13, 26, 4, 1, 245,
+ 101, 2, 226, 110, 26, 4, 1, 245, 64, 2, 214, 13, 26, 4, 1, 245, 64, 2,
+ 226, 110, 26, 4, 1, 235, 186, 2, 214, 13, 26, 4, 1, 235, 186, 2, 226,
+ 110, 26, 4, 1, 226, 200, 2, 214, 13, 26, 4, 1, 226, 200, 2, 226, 110, 26,
+ 4, 1, 214, 158, 2, 214, 13, 26, 4, 1, 214, 158, 2, 226, 110, 26, 4, 1,
+ 226, 202, 2, 214, 13, 26, 4, 1, 226, 202, 2, 226, 110, 26, 4, 1, 254,
+ 144, 2, 224, 155, 22, 210, 219, 26, 4, 1, 254, 144, 2, 248, 154, 22, 210,
+ 219, 26, 4, 1, 254, 144, 2, 224, 155, 22, 214, 14, 22, 210, 219, 26, 4,
+ 1, 254, 144, 2, 248, 154, 22, 214, 14, 22, 210, 219, 26, 4, 1, 254, 144,
+ 2, 224, 155, 22, 226, 111, 22, 210, 219, 26, 4, 1, 254, 144, 2, 248, 154,
+ 22, 226, 111, 22, 210, 219, 26, 4, 1, 254, 144, 2, 224, 155, 22, 225,
+ 176, 22, 210, 219, 26, 4, 1, 254, 144, 2, 248, 154, 22, 225, 176, 22,
+ 210, 219, 26, 6, 1, 254, 144, 2, 224, 155, 22, 224, 167, 26, 6, 1, 254,
+ 144, 2, 248, 154, 22, 224, 167, 26, 6, 1, 254, 144, 2, 224, 155, 22, 214,
+ 14, 22, 224, 167, 26, 6, 1, 254, 144, 2, 248, 154, 22, 214, 14, 22, 224,
+ 167, 26, 6, 1, 254, 144, 2, 224, 155, 22, 226, 111, 22, 224, 167, 26, 6,
+ 1, 254, 144, 2, 248, 154, 22, 226, 111, 22, 224, 167, 26, 6, 1, 254, 144,
+ 2, 224, 155, 22, 225, 176, 22, 224, 167, 26, 6, 1, 254, 144, 2, 248, 154,
+ 22, 225, 176, 22, 224, 167, 26, 4, 1, 245, 64, 2, 224, 155, 22, 210, 219,
+ 26, 4, 1, 245, 64, 2, 248, 154, 22, 210, 219, 26, 4, 1, 245, 64, 2, 224,
+ 155, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, 64, 2, 248, 154, 22, 214,
+ 14, 22, 210, 219, 26, 4, 1, 245, 64, 2, 224, 155, 22, 226, 111, 22, 210,
+ 219, 26, 4, 1, 245, 64, 2, 248, 154, 22, 226, 111, 22, 210, 219, 26, 4,
+ 1, 245, 64, 2, 224, 155, 22, 225, 176, 22, 210, 219, 26, 4, 1, 245, 64,
+ 2, 248, 154, 22, 225, 176, 22, 210, 219, 26, 6, 1, 245, 64, 2, 224, 155,
+ 22, 224, 167, 26, 6, 1, 245, 64, 2, 248, 154, 22, 224, 167, 26, 6, 1,
+ 245, 64, 2, 224, 155, 22, 214, 14, 22, 224, 167, 26, 6, 1, 245, 64, 2,
+ 248, 154, 22, 214, 14, 22, 224, 167, 26, 6, 1, 245, 64, 2, 224, 155, 22,
+ 226, 111, 22, 224, 167, 26, 6, 1, 245, 64, 2, 248, 154, 22, 226, 111, 22,
+ 224, 167, 26, 6, 1, 245, 64, 2, 224, 155, 22, 225, 176, 22, 224, 167, 26,
+ 6, 1, 245, 64, 2, 248, 154, 22, 225, 176, 22, 224, 167, 26, 4, 1, 226,
+ 202, 2, 224, 155, 22, 210, 219, 26, 4, 1, 226, 202, 2, 248, 154, 22, 210,
+ 219, 26, 4, 1, 226, 202, 2, 224, 155, 22, 214, 14, 22, 210, 219, 26, 4,
+ 1, 226, 202, 2, 248, 154, 22, 214, 14, 22, 210, 219, 26, 4, 1, 226, 202,
+ 2, 224, 155, 22, 226, 111, 22, 210, 219, 26, 4, 1, 226, 202, 2, 248, 154,
+ 22, 226, 111, 22, 210, 219, 26, 4, 1, 226, 202, 2, 224, 155, 22, 225,
+ 176, 22, 210, 219, 26, 4, 1, 226, 202, 2, 248, 154, 22, 225, 176, 22,
+ 210, 219, 26, 6, 1, 226, 202, 2, 224, 155, 22, 224, 167, 26, 6, 1, 226,
+ 202, 2, 248, 154, 22, 224, 167, 26, 6, 1, 226, 202, 2, 224, 155, 22, 214,
+ 14, 22, 224, 167, 26, 6, 1, 226, 202, 2, 248, 154, 22, 214, 14, 22, 224,
+ 167, 26, 6, 1, 226, 202, 2, 224, 155, 22, 226, 111, 22, 224, 167, 26, 6,
+ 1, 226, 202, 2, 248, 154, 22, 226, 111, 22, 224, 167, 26, 6, 1, 226, 202,
+ 2, 224, 155, 22, 225, 176, 22, 224, 167, 26, 6, 1, 226, 202, 2, 248, 154,
+ 22, 225, 176, 22, 224, 167, 26, 4, 1, 254, 144, 2, 213, 120, 26, 4, 1,
+ 254, 144, 2, 231, 232, 26, 4, 1, 254, 144, 2, 214, 14, 22, 210, 219, 26,
+ 4, 1, 254, 144, 2, 210, 219, 26, 4, 1, 254, 144, 2, 226, 111, 22, 210,
+ 219, 26, 4, 1, 254, 144, 2, 225, 175, 26, 4, 1, 254, 144, 2, 225, 176,
+ 22, 210, 219, 26, 6, 1, 254, 144, 2, 213, 120, 26, 6, 1, 254, 144, 2,
+ 231, 232, 26, 6, 1, 254, 144, 2, 214, 13, 26, 6, 1, 254, 144, 2, 226,
+ 110, 26, 6, 1, 254, 144, 2, 224, 167, 26, 234, 2, 26, 224, 167, 26, 224,
+ 154, 26, 225, 175, 26, 247, 252, 22, 225, 175, 26, 4, 1, 245, 64, 2, 214,
+ 14, 22, 210, 219, 26, 4, 1, 245, 64, 2, 210, 219, 26, 4, 1, 245, 64, 2,
+ 226, 111, 22, 210, 219, 26, 4, 1, 245, 64, 2, 225, 175, 26, 4, 1, 245,
+ 64, 2, 225, 176, 22, 210, 219, 26, 6, 1, 245, 101, 2, 214, 13, 26, 6, 1,
+ 245, 101, 2, 226, 110, 26, 6, 1, 245, 64, 2, 214, 13, 26, 6, 1, 245, 64,
+ 2, 226, 110, 26, 6, 1, 245, 64, 2, 224, 167, 26, 224, 155, 22, 214, 13,
+ 26, 224, 155, 22, 226, 110, 26, 224, 155, 22, 225, 175, 26, 4, 1, 235,
+ 186, 2, 213, 120, 26, 4, 1, 235, 186, 2, 231, 232, 26, 4, 1, 235, 186, 2,
+ 247, 252, 22, 214, 13, 26, 4, 1, 235, 186, 2, 247, 252, 22, 226, 110, 26,
+ 4, 1, 235, 186, 2, 225, 175, 26, 4, 1, 235, 186, 2, 247, 252, 22, 225,
+ 175, 26, 6, 1, 235, 186, 2, 213, 120, 26, 6, 1, 235, 186, 2, 231, 232,
+ 26, 6, 1, 235, 186, 2, 214, 13, 26, 6, 1, 235, 186, 2, 226, 110, 26, 248,
+ 154, 22, 214, 13, 26, 248, 154, 22, 226, 110, 26, 248, 154, 22, 225, 175,
+ 26, 4, 1, 214, 158, 2, 213, 120, 26, 4, 1, 214, 158, 2, 231, 232, 26, 4,
+ 1, 214, 158, 2, 247, 252, 22, 214, 13, 26, 4, 1, 214, 158, 2, 247, 252,
+ 22, 226, 110, 26, 4, 1, 223, 38, 2, 224, 154, 26, 4, 1, 223, 38, 2, 248,
+ 153, 26, 4, 1, 214, 158, 2, 225, 175, 26, 4, 1, 214, 158, 2, 247, 252,
+ 22, 225, 175, 26, 6, 1, 214, 158, 2, 213, 120, 26, 6, 1, 214, 158, 2,
+ 231, 232, 26, 6, 1, 214, 158, 2, 214, 13, 26, 6, 1, 214, 158, 2, 226,
+ 110, 26, 6, 1, 223, 38, 2, 248, 153, 26, 247, 252, 22, 214, 13, 26, 247,
+ 252, 22, 226, 110, 26, 214, 13, 26, 4, 1, 226, 202, 2, 214, 14, 22, 210,
+ 219, 26, 4, 1, 226, 202, 2, 210, 219, 26, 4, 1, 226, 202, 2, 226, 111,
+ 22, 210, 219, 26, 4, 1, 226, 202, 2, 225, 175, 26, 4, 1, 226, 202, 2,
+ 225, 176, 22, 210, 219, 26, 6, 1, 226, 200, 2, 214, 13, 26, 6, 1, 226,
+ 200, 2, 226, 110, 26, 6, 1, 226, 202, 2, 214, 13, 26, 6, 1, 226, 202, 2,
+ 226, 110, 26, 6, 1, 226, 202, 2, 224, 167, 26, 226, 110, 26, 248, 153,
+ 245, 151, 224, 27, 245, 160, 224, 27, 245, 151, 219, 18, 245, 160, 219,
+ 18, 216, 141, 219, 18, 244, 9, 219, 18, 219, 123, 219, 18, 244, 112, 219,
+ 18, 224, 141, 219, 18, 216, 170, 219, 18, 242, 35, 219, 18, 210, 87, 211,
+ 245, 219, 18, 210, 87, 211, 245, 228, 67, 210, 87, 211, 245, 235, 63,
+ 233, 38, 78, 222, 243, 78, 240, 168, 228, 68, 240, 168, 244, 112, 248,
+ 156, 245, 151, 248, 156, 245, 160, 248, 156, 203, 130, 52, 67, 232, 213,
+ 52, 121, 232, 213, 43, 219, 155, 223, 254, 78, 44, 219, 155, 223, 254,
+ 78, 219, 155, 232, 109, 223, 254, 78, 219, 155, 241, 163, 223, 254, 78,
+ 43, 52, 223, 254, 78, 44, 52, 223, 254, 78, 52, 232, 109, 223, 254, 78,
+ 52, 241, 163, 223, 254, 78, 248, 205, 52, 248, 205, 251, 113, 215, 222,
+ 251, 113, 123, 59, 233, 56, 113, 59, 233, 56, 203, 245, 163, 240, 166,
+ 225, 10, 232, 214, 220, 137, 226, 15, 220, 137, 233, 38, 245, 158, 222,
+ 243, 245, 158, 224, 246, 247, 196, 244, 19, 233, 38, 226, 117, 222, 243,
+ 226, 117, 229, 194, 228, 73, 219, 18, 225, 183, 230, 193, 50, 225, 183,
+ 216, 248, 216, 148, 50, 224, 190, 52, 224, 190, 215, 211, 224, 190, 223,
+ 49, 224, 190, 223, 49, 52, 224, 190, 223, 49, 215, 211, 224, 190, 250,
+ 238, 219, 155, 233, 42, 254, 110, 223, 254, 78, 219, 155, 222, 247, 254,
+ 110, 223, 254, 78, 223, 107, 78, 52, 245, 31, 78, 235, 201, 226, 119,
+ 214, 180, 135, 216, 111, 250, 239, 235, 216, 225, 10, 253, 214, 240, 169,
+ 251, 113, 244, 2, 219, 95, 43, 42, 251, 158, 2, 224, 7, 44, 42, 251, 158,
+ 2, 224, 7, 52, 224, 13, 78, 224, 13, 245, 31, 78, 245, 31, 224, 13, 78,
+ 216, 70, 5, 245, 65, 223, 49, 225, 68, 50, 85, 140, 251, 113, 85, 97,
+ 251, 113, 121, 253, 216, 223, 49, 220, 150, 250, 1, 214, 163, 113, 253,
+ 215, 254, 158, 213, 188, 249, 217, 230, 182, 50, 217, 234, 248, 156, 235,
+ 193, 214, 180, 244, 52, 224, 141, 78, 134, 59, 224, 140, 224, 24, 224,
+ 190, 244, 11, 59, 224, 140, 244, 81, 59, 224, 140, 113, 59, 224, 140,
+ 244, 11, 59, 78, 246, 118, 249, 130, 215, 221, 67, 244, 11, 247, 118,
+ 231, 82, 11, 219, 18, 211, 209, 235, 63, 243, 227, 254, 52, 235, 191,
+ 216, 85, 235, 191, 220, 137, 235, 191, 225, 22, 235, 228, 217, 182, 217,
+ 251, 255, 5, 217, 182, 217, 251, 235, 228, 10, 244, 20, 220, 80, 255, 5,
+ 10, 244, 20, 220, 80, 229, 189, 21, 220, 81, 228, 69, 21, 220, 81, 218,
+ 23, 210, 86, 218, 23, 7, 4, 1, 73, 218, 23, 161, 218, 23, 189, 218, 23,
+ 194, 218, 23, 198, 218, 23, 195, 218, 23, 200, 218, 23, 96, 50, 218, 23,
+ 230, 181, 218, 23, 245, 98, 50, 218, 23, 43, 226, 3, 218, 23, 44, 226, 3,
+ 218, 23, 7, 4, 1, 230, 25, 218, 65, 210, 86, 218, 65, 110, 218, 65, 105,
+ 218, 65, 158, 218, 65, 161, 218, 65, 189, 218, 65, 194, 218, 65, 198,
+ 218, 65, 195, 218, 65, 200, 218, 65, 96, 50, 218, 65, 230, 181, 218, 65,
+ 245, 98, 50, 218, 65, 43, 226, 3, 218, 65, 44, 226, 3, 7, 218, 65, 4, 1,
+ 61, 7, 218, 65, 4, 1, 75, 7, 218, 65, 4, 1, 76, 7, 218, 65, 4, 1, 211,
+ 178, 7, 218, 65, 4, 1, 221, 195, 7, 218, 65, 4, 1, 242, 60, 7, 218, 65,
+ 4, 1, 235, 23, 7, 218, 65, 4, 1, 156, 7, 218, 65, 4, 1, 193, 7, 218, 65,
+ 4, 1, 230, 25, 7, 218, 65, 4, 1, 226, 105, 7, 218, 65, 4, 1, 222, 91, 7,
+ 218, 65, 4, 1, 217, 152, 245, 46, 50, 249, 227, 50, 249, 117, 50, 243,
+ 251, 243, 254, 50, 232, 198, 50, 230, 194, 50, 229, 210, 50, 225, 162,
+ 50, 222, 118, 50, 211, 217, 50, 166, 220, 49, 50, 247, 127, 50, 245, 47,
+ 50, 234, 76, 50, 215, 112, 50, 246, 101, 50, 243, 40, 225, 193, 50, 225,
+ 160, 50, 242, 109, 50, 253, 182, 50, 240, 228, 50, 250, 185, 50, 232,
+ 191, 216, 3, 50, 219, 0, 50, 216, 245, 50, 235, 241, 222, 118, 50, 38,
+ 43, 241, 255, 48, 38, 44, 241, 255, 48, 38, 199, 67, 232, 214, 226, 120,
+ 38, 219, 251, 67, 232, 214, 226, 120, 38, 254, 88, 80, 48, 38, 250, 2,
+ 80, 48, 38, 43, 80, 48, 38, 44, 80, 48, 38, 222, 234, 226, 120, 38, 250,
+ 2, 222, 234, 226, 120, 38, 254, 88, 222, 234, 226, 120, 38, 134, 170, 48,
+ 38, 244, 11, 170, 48, 38, 245, 146, 250, 35, 38, 245, 146, 218, 234, 38,
+ 245, 146, 247, 248, 38, 245, 146, 250, 36, 252, 180, 38, 43, 44, 80, 48,
+ 38, 245, 146, 221, 188, 38, 245, 146, 234, 135, 38, 245, 146, 214, 155,
+ 225, 7, 215, 225, 38, 223, 50, 219, 47, 226, 120, 38, 52, 67, 218, 103,
+ 226, 120, 38, 254, 98, 87, 38, 215, 211, 214, 182, 38, 211, 247, 251,
+ 140, 48, 38, 140, 80, 226, 120, 38, 199, 52, 219, 47, 226, 120, 38, 97,
+ 241, 255, 2, 252, 139, 246, 103, 38, 140, 241, 255, 2, 252, 139, 246,
+ 103, 38, 43, 80, 51, 38, 44, 80, 51, 38, 253, 217, 48, 255, 11, 226, 231,
+ 254, 251, 216, 42, 216, 196, 218, 74, 139, 6, 251, 66, 248, 71, 250, 178,
+ 250, 175, 232, 214, 87, 250, 240, 226, 231, 251, 26, 214, 189, 245, 48,
+ 249, 191, 221, 185, 248, 71, 244, 179, 119, 4, 243, 202, 119, 6, 242, 60,
+ 251, 219, 6, 242, 60, 139, 6, 242, 60, 225, 37, 249, 191, 225, 37, 249,
+ 192, 117, 113, 225, 108, 119, 6, 73, 251, 219, 6, 73, 119, 6, 156, 119,
+ 4, 156, 233, 149, 57, 252, 141, 87, 139, 6, 230, 25, 227, 196, 50, 219,
+ 31, 223, 119, 249, 162, 119, 6, 226, 105, 139, 6, 226, 105, 139, 6, 224,
+ 96, 119, 6, 153, 251, 219, 6, 153, 139, 6, 153, 224, 196, 217, 71, 223,
+ 62, 220, 132, 78, 217, 1, 50, 215, 253, 164, 50, 213, 240, 139, 6, 210,
+ 159, 226, 133, 50, 226, 221, 50, 235, 193, 226, 221, 50, 251, 219, 6,
+ 210, 159, 215, 94, 26, 4, 1, 235, 185, 234, 173, 50, 254, 107, 50, 119,
+ 6, 253, 158, 251, 219, 6, 251, 66, 245, 68, 87, 119, 4, 75, 119, 6, 75,
+ 119, 6, 245, 6, 215, 94, 6, 245, 6, 119, 6, 193, 119, 4, 76, 112, 87,
+ 252, 29, 87, 242, 202, 87, 248, 190, 87, 235, 232, 219, 29, 222, 187, 6,
+ 224, 96, 244, 182, 50, 139, 4, 225, 108, 139, 4, 243, 107, 139, 6, 243,
+ 107, 139, 6, 225, 108, 139, 230, 24, 218, 40, 215, 94, 35, 6, 243, 202,
+ 215, 94, 35, 6, 156, 223, 49, 35, 6, 156, 215, 94, 35, 6, 211, 117, 139,
+ 32, 6, 249, 60, 139, 32, 4, 249, 60, 139, 32, 4, 75, 139, 32, 4, 73, 139,
+ 32, 4, 235, 144, 224, 170, 232, 213, 215, 94, 254, 126, 225, 183, 50,
+ 254, 180, 215, 94, 4, 245, 6, 16, 31, 221, 252, 219, 29, 212, 114, 244,
+ 2, 123, 220, 118, 212, 114, 244, 2, 123, 228, 194, 212, 114, 244, 2, 123,
+ 216, 241, 212, 114, 244, 2, 123, 216, 168, 212, 114, 244, 2, 113, 216,
+ 166, 212, 114, 244, 2, 123, 244, 117, 212, 114, 244, 2, 113, 244, 116,
+ 212, 114, 244, 2, 134, 244, 116, 212, 114, 244, 2, 244, 11, 244, 116,
+ 212, 114, 244, 2, 123, 219, 115, 212, 114, 244, 2, 244, 81, 219, 113,
+ 212, 114, 244, 2, 123, 245, 188, 212, 114, 244, 2, 134, 245, 186, 212,
+ 114, 244, 2, 244, 81, 245, 186, 212, 114, 244, 2, 220, 122, 245, 186,
+ 244, 2, 227, 197, 110, 222, 198, 227, 198, 110, 222, 198, 227, 198, 105,
+ 222, 198, 227, 198, 158, 222, 198, 227, 198, 161, 222, 198, 227, 198,
+ 189, 222, 198, 227, 198, 194, 222, 198, 227, 198, 198, 222, 198, 227,
+ 198, 195, 222, 198, 227, 198, 200, 222, 198, 227, 198, 216, 247, 222,
+ 198, 227, 198, 245, 167, 222, 198, 227, 198, 215, 76, 222, 198, 227, 198,
+ 244, 114, 222, 198, 227, 198, 123, 240, 210, 222, 198, 227, 198, 244, 81,
+ 240, 210, 222, 198, 227, 198, 123, 216, 147, 4, 222, 198, 227, 198, 110,
+ 4, 222, 198, 227, 198, 105, 4, 222, 198, 227, 198, 158, 4, 222, 198, 227,
+ 198, 161, 4, 222, 198, 227, 198, 189, 4, 222, 198, 227, 198, 194, 4, 222,
+ 198, 227, 198, 198, 4, 222, 198, 227, 198, 195, 4, 222, 198, 227, 198,
+ 200, 4, 222, 198, 227, 198, 216, 247, 4, 222, 198, 227, 198, 245, 167, 4,
+ 222, 198, 227, 198, 215, 76, 4, 222, 198, 227, 198, 244, 114, 4, 222,
+ 198, 227, 198, 123, 240, 210, 4, 222, 198, 227, 198, 244, 81, 240, 210,
+ 4, 222, 198, 227, 198, 123, 216, 147, 222, 198, 227, 198, 123, 216, 148,
+ 251, 67, 249, 60, 222, 198, 227, 198, 244, 81, 216, 147, 222, 198, 227,
+ 198, 216, 248, 216, 147, 222, 198, 227, 198, 223, 49, 123, 240, 210, 7,
+ 4, 1, 223, 49, 251, 66, 222, 198, 227, 198, 219, 125, 233, 78, 17, 222,
+ 198, 227, 198, 244, 115, 245, 226, 17, 222, 198, 227, 198, 244, 115, 216,
+ 147, 222, 198, 227, 198, 123, 240, 211, 216, 147, 212, 114, 244, 2, 210,
+ 87, 216, 166, 140, 74, 214, 153, 74, 97, 74, 246, 104, 74, 43, 44, 74,
+ 120, 124, 74, 228, 56, 212, 9, 74, 228, 56, 245, 220, 74, 219, 28, 245,
+ 220, 74, 219, 28, 212, 9, 74, 140, 80, 2, 91, 97, 80, 2, 91, 140, 212,
+ 36, 74, 97, 212, 36, 74, 140, 113, 241, 234, 74, 214, 153, 113, 241, 234,
+ 74, 97, 113, 241, 234, 74, 246, 104, 113, 241, 234, 74, 140, 80, 2, 217,
+ 77, 97, 80, 2, 217, 77, 140, 80, 243, 243, 130, 214, 153, 80, 243, 243,
+ 130, 97, 80, 243, 243, 130, 246, 104, 80, 243, 243, 130, 120, 124, 80, 2,
+ 252, 127, 140, 80, 2, 103, 97, 80, 2, 103, 140, 80, 2, 232, 123, 97, 80,
+ 2, 232, 123, 43, 44, 212, 36, 74, 43, 44, 80, 2, 91, 246, 104, 210, 35,
+ 74, 214, 153, 80, 2, 216, 77, 233, 37, 214, 153, 80, 2, 216, 77, 222,
+ 241, 246, 104, 80, 2, 216, 77, 233, 37, 246, 104, 80, 2, 216, 77, 222,
+ 241, 97, 80, 2, 249, 161, 246, 103, 246, 104, 80, 2, 249, 161, 233, 37,
+ 254, 88, 216, 14, 220, 153, 74, 250, 2, 216, 14, 220, 153, 74, 228, 56,
+ 212, 9, 80, 216, 42, 199, 130, 140, 80, 216, 42, 252, 141, 117, 97, 80,
+ 216, 42, 130, 254, 88, 204, 250, 36, 74, 250, 2, 204, 250, 36, 74, 140,
+ 241, 255, 2, 252, 139, 214, 152, 140, 241, 255, 2, 252, 139, 246, 103,
+ 214, 153, 241, 255, 2, 252, 139, 222, 241, 214, 153, 241, 255, 2, 252,
+ 139, 233, 37, 97, 241, 255, 2, 252, 139, 214, 152, 97, 241, 255, 2, 252,
+ 139, 246, 103, 246, 104, 241, 255, 2, 252, 139, 222, 241, 246, 104, 241,
+ 255, 2, 252, 139, 233, 37, 97, 80, 117, 140, 74, 214, 153, 80, 140, 64,
+ 246, 104, 74, 140, 80, 117, 97, 74, 140, 226, 70, 253, 247, 214, 153,
+ 226, 70, 253, 247, 97, 226, 70, 253, 247, 246, 104, 226, 70, 253, 247,
+ 140, 241, 255, 117, 97, 241, 254, 97, 241, 255, 117, 140, 241, 254, 140,
+ 52, 80, 2, 91, 43, 44, 52, 80, 2, 91, 97, 52, 80, 2, 91, 140, 52, 74,
+ 214, 153, 52, 74, 97, 52, 74, 246, 104, 52, 74, 43, 44, 52, 74, 120, 124,
+ 52, 74, 228, 56, 212, 9, 52, 74, 228, 56, 245, 220, 52, 74, 219, 28, 245,
+ 220, 52, 74, 219, 28, 212, 9, 52, 74, 140, 215, 211, 74, 97, 215, 211,
+ 74, 140, 218, 230, 74, 97, 218, 230, 74, 214, 153, 80, 2, 52, 91, 246,
+ 104, 80, 2, 52, 91, 140, 248, 155, 74, 214, 153, 248, 155, 74, 97, 248,
+ 155, 74, 246, 104, 248, 155, 74, 140, 80, 216, 42, 130, 97, 80, 216, 42,
+ 130, 140, 71, 74, 214, 153, 71, 74, 97, 71, 74, 246, 104, 71, 74, 214,
+ 153, 71, 80, 243, 243, 130, 214, 153, 71, 80, 226, 197, 225, 214, 214,
+ 153, 71, 80, 226, 197, 225, 215, 2, 203, 130, 214, 153, 71, 80, 226, 197,
+ 225, 215, 2, 67, 130, 214, 153, 71, 52, 74, 214, 153, 71, 52, 80, 226,
+ 197, 225, 214, 97, 71, 80, 243, 243, 212, 56, 228, 56, 212, 9, 80, 216,
+ 42, 249, 160, 219, 28, 245, 220, 80, 216, 42, 249, 160, 120, 124, 71, 74,
+ 44, 80, 2, 4, 250, 35, 246, 104, 80, 140, 64, 214, 153, 74, 134, 97, 253,
+ 247, 140, 80, 2, 67, 91, 97, 80, 2, 67, 91, 43, 44, 80, 2, 67, 91, 140,
+ 80, 2, 52, 67, 91, 97, 80, 2, 52, 67, 91, 43, 44, 80, 2, 52, 67, 91, 140,
+ 226, 173, 74, 97, 226, 173, 74, 43, 44, 226, 173, 74, 31, 254, 154, 249,
+ 214, 225, 253, 247, 233, 216, 187, 245, 27, 216, 187, 247, 138, 228, 52,
+ 245, 28, 245, 152, 220, 127, 235, 245, 229, 221, 245, 170, 226, 231, 228,
+ 52, 254, 124, 245, 170, 226, 231, 4, 245, 170, 226, 231, 249, 186, 253,
+ 238, 231, 62, 247, 138, 228, 52, 249, 188, 253, 238, 231, 62, 4, 249,
+ 186, 253, 238, 231, 62, 245, 143, 64, 224, 172, 230, 24, 224, 180, 230,
+ 24, 249, 165, 230, 24, 218, 40, 230, 182, 50, 230, 180, 50, 59, 225, 22,
+ 247, 169, 219, 95, 220, 128, 230, 181, 253, 217, 226, 167, 222, 234, 226,
+ 167, 251, 114, 226, 167, 42, 222, 193, 249, 109, 222, 193, 244, 4, 222,
+ 193, 224, 168, 111, 235, 234, 44, 254, 109, 254, 109, 231, 88, 254, 109,
+ 218, 255, 254, 109, 247, 171, 247, 138, 228, 52, 247, 174, 226, 8, 111,
+ 228, 52, 226, 8, 111, 232, 146, 254, 118, 232, 146, 226, 158, 235, 198,
+ 214, 175, 235, 211, 52, 235, 211, 215, 211, 235, 211, 249, 182, 235, 211,
+ 218, 13, 235, 211, 213, 129, 235, 211, 250, 2, 235, 211, 250, 2, 249,
+ 182, 235, 211, 254, 88, 249, 182, 235, 211, 216, 186, 252, 67, 223, 137,
+ 224, 169, 59, 230, 181, 245, 33, 243, 46, 224, 169, 241, 57, 216, 89,
+ 226, 167, 223, 49, 182, 235, 193, 233, 65, 222, 91, 219, 157, 212, 35,
+ 211, 200, 224, 180, 228, 52, 182, 230, 182, 182, 253, 210, 128, 111, 228,
+ 52, 253, 210, 128, 111, 254, 48, 128, 111, 254, 48, 251, 88, 228, 52,
+ 255, 4, 128, 111, 229, 100, 254, 48, 228, 59, 255, 4, 128, 111, 254, 148,
+ 128, 111, 228, 52, 254, 148, 128, 111, 254, 148, 128, 177, 128, 111, 215,
+ 211, 182, 254, 155, 128, 111, 245, 94, 111, 243, 45, 245, 94, 111, 247,
+ 234, 252, 23, 254, 50, 216, 196, 232, 221, 243, 45, 128, 111, 254, 48,
+ 128, 216, 42, 177, 216, 196, 236, 15, 226, 231, 236, 15, 64, 177, 254,
+ 48, 128, 111, 249, 227, 245, 97, 245, 98, 249, 226, 222, 234, 236, 0,
+ 128, 111, 222, 234, 128, 111, 249, 154, 111, 245, 67, 245, 96, 111, 218,
+ 157, 245, 97, 248, 55, 128, 111, 128, 216, 42, 251, 78, 248, 72, 231, 88,
+ 251, 77, 224, 11, 128, 111, 228, 52, 128, 111, 240, 104, 111, 228, 52,
+ 240, 104, 111, 218, 109, 245, 94, 111, 233, 15, 177, 128, 111, 242, 130,
+ 177, 128, 111, 233, 15, 117, 128, 111, 242, 130, 117, 128, 111, 233, 15,
+ 251, 88, 228, 52, 128, 111, 242, 130, 251, 88, 228, 52, 128, 111, 230,
+ 97, 233, 14, 230, 97, 242, 129, 252, 23, 228, 52, 245, 94, 111, 228, 52,
+ 233, 14, 228, 52, 242, 129, 229, 100, 233, 15, 228, 59, 128, 111, 229,
+ 100, 242, 130, 228, 59, 128, 111, 233, 15, 177, 245, 94, 111, 242, 130,
+ 177, 245, 94, 111, 229, 100, 233, 15, 228, 59, 245, 94, 111, 229, 100,
+ 242, 130, 228, 59, 245, 94, 111, 233, 15, 177, 242, 129, 242, 130, 177,
+ 233, 14, 229, 100, 233, 15, 228, 59, 242, 129, 229, 100, 242, 130, 228,
+ 59, 233, 14, 224, 202, 218, 55, 224, 203, 177, 128, 111, 218, 56, 177,
+ 128, 111, 224, 203, 177, 245, 94, 111, 218, 56, 177, 245, 94, 111, 247,
+ 138, 228, 52, 224, 205, 247, 138, 228, 52, 218, 57, 218, 64, 226, 231,
+ 218, 22, 226, 231, 228, 52, 115, 218, 64, 226, 231, 228, 52, 115, 218,
+ 22, 226, 231, 218, 64, 64, 177, 128, 111, 218, 22, 64, 177, 128, 111,
+ 229, 100, 115, 218, 64, 64, 228, 59, 128, 111, 229, 100, 115, 218, 22,
+ 64, 228, 59, 128, 111, 218, 64, 64, 2, 228, 52, 128, 111, 218, 22, 64, 2,
+ 228, 52, 128, 111, 230, 81, 230, 82, 230, 83, 230, 82, 214, 175, 42, 236,
+ 15, 226, 231, 42, 226, 150, 226, 231, 42, 236, 15, 64, 177, 128, 111, 42,
+ 226, 150, 64, 177, 128, 111, 42, 250, 251, 42, 249, 102, 37, 225, 22, 37,
+ 230, 181, 37, 216, 85, 37, 247, 169, 219, 95, 37, 59, 226, 167, 37, 222,
+ 234, 226, 167, 37, 253, 217, 226, 167, 37, 245, 97, 37, 248, 156, 92,
+ 225, 22, 92, 230, 181, 92, 216, 85, 92, 59, 226, 167, 44, 217, 87, 43,
+ 217, 87, 124, 217, 87, 120, 217, 87, 253, 220, 230, 156, 215, 191, 244,
+ 25, 215, 211, 67, 252, 141, 44, 215, 93, 52, 67, 252, 141, 52, 44, 215,
+ 93, 247, 138, 228, 52, 224, 163, 228, 52, 215, 191, 247, 138, 228, 52,
+ 244, 26, 229, 102, 52, 67, 252, 141, 52, 44, 215, 93, 224, 203, 214, 184,
+ 223, 91, 218, 56, 214, 184, 223, 91, 228, 57, 218, 77, 226, 231, 249,
+ 186, 253, 238, 228, 57, 218, 76, 228, 57, 218, 77, 64, 177, 128, 111,
+ 249, 186, 253, 238, 228, 57, 218, 77, 177, 128, 111, 226, 150, 226, 231,
+ 236, 15, 226, 231, 230, 87, 241, 200, 249, 196, 231, 137, 235, 208, 211,
+ 145, 229, 202, 228, 58, 44, 254, 110, 2, 254, 25, 44, 215, 225, 230, 24,
+ 232, 146, 254, 118, 230, 24, 232, 146, 226, 158, 230, 24, 235, 198, 230,
+ 24, 214, 175, 247, 249, 226, 167, 59, 226, 167, 218, 157, 226, 167, 247,
+ 169, 216, 85, 251, 164, 43, 228, 57, 244, 181, 220, 149, 224, 180, 44,
+ 228, 57, 244, 181, 220, 149, 224, 180, 43, 220, 149, 224, 180, 44, 220,
+ 149, 224, 180, 223, 49, 216, 89, 245, 97, 249, 99, 232, 146, 226, 158,
+ 249, 99, 232, 146, 254, 118, 52, 218, 63, 52, 218, 21, 52, 235, 198, 52,
+ 214, 175, 225, 47, 128, 22, 226, 8, 111, 233, 15, 2, 247, 120, 242, 130,
+ 2, 247, 120, 213, 187, 230, 97, 233, 14, 213, 187, 230, 97, 242, 129,
+ 233, 15, 128, 216, 42, 177, 242, 129, 242, 130, 128, 216, 42, 177, 233,
+ 14, 128, 216, 42, 177, 233, 14, 128, 216, 42, 177, 242, 129, 128, 216,
+ 42, 177, 224, 202, 128, 216, 42, 177, 218, 55, 247, 138, 228, 52, 224,
+ 206, 177, 245, 99, 247, 138, 228, 52, 218, 58, 177, 245, 99, 228, 52, 42,
+ 236, 15, 64, 177, 128, 111, 228, 52, 42, 226, 150, 64, 177, 128, 111, 42,
+ 236, 15, 64, 177, 228, 52, 128, 111, 42, 226, 150, 64, 177, 228, 52, 128,
+ 111, 233, 15, 251, 88, 228, 52, 245, 94, 111, 242, 130, 251, 88, 228, 52,
+ 245, 94, 111, 224, 203, 251, 88, 228, 52, 245, 94, 111, 218, 56, 251, 88,
+ 228, 52, 245, 94, 111, 228, 52, 228, 57, 218, 77, 226, 231, 247, 138,
+ 228, 52, 249, 188, 253, 238, 228, 57, 218, 76, 228, 52, 228, 57, 218, 77,
+ 64, 177, 128, 111, 247, 138, 228, 52, 249, 188, 253, 238, 228, 57, 218,
+ 77, 177, 245, 99, 67, 245, 163, 230, 222, 203, 245, 163, 120, 44, 247,
+ 255, 245, 163, 124, 44, 247, 255, 245, 163, 245, 170, 64, 2, 199, 203,
+ 91, 245, 170, 64, 2, 67, 252, 141, 253, 207, 245, 143, 64, 203, 91, 4,
+ 245, 170, 64, 2, 67, 252, 141, 253, 207, 245, 143, 64, 203, 91, 245, 170,
+ 64, 2, 59, 48, 245, 170, 64, 2, 226, 123, 4, 245, 170, 64, 2, 226, 123,
+ 245, 170, 64, 2, 214, 183, 245, 170, 64, 2, 113, 203, 218, 90, 249, 186,
+ 2, 199, 203, 91, 249, 186, 2, 67, 252, 141, 253, 207, 245, 143, 64, 203,
+ 91, 4, 249, 186, 2, 67, 252, 141, 253, 207, 245, 143, 64, 203, 91, 249,
+ 186, 2, 226, 123, 4, 249, 186, 2, 226, 123, 210, 160, 187, 252, 173, 231,
+ 61, 247, 250, 50, 245, 172, 74, 240, 234, 120, 253, 249, 124, 253, 249,
+ 224, 175, 225, 165, 212, 32, 232, 213, 43, 250, 181, 44, 250, 181, 43,
+ 244, 57, 44, 244, 57, 251, 175, 44, 249, 132, 251, 175, 43, 249, 132,
+ 216, 14, 44, 249, 132, 216, 14, 43, 249, 132, 223, 49, 228, 52, 50, 42,
+ 232, 104, 254, 25, 221, 164, 221, 171, 217, 1, 223, 120, 224, 241, 235,
+ 238, 213, 165, 218, 234, 225, 41, 64, 235, 207, 50, 215, 94, 228, 52, 50,
+ 212, 42, 240, 236, 216, 14, 43, 249, 160, 216, 14, 44, 249, 160, 251,
+ 175, 43, 249, 160, 251, 175, 44, 249, 160, 216, 14, 163, 235, 211, 251,
+ 175, 163, 235, 211, 243, 240, 219, 75, 120, 253, 250, 252, 24, 113, 203,
+ 252, 129, 226, 160, 234, 138, 245, 90, 216, 42, 216, 196, 222, 251, 211,
+ 179, 236, 0, 115, 223, 117, 251, 163, 234, 137, 233, 42, 254, 110, 127,
+ 222, 247, 254, 110, 127, 245, 90, 216, 42, 216, 196, 233, 46, 252, 35,
+ 222, 233, 249, 70, 254, 155, 254, 1, 217, 181, 216, 4, 222, 123, 247,
+ 215, 226, 151, 249, 198, 217, 52, 219, 86, 249, 151, 249, 150, 254, 66,
+ 243, 225, 16, 240, 151, 254, 66, 243, 225, 16, 218, 228, 224, 27, 254,
+ 66, 243, 225, 16, 224, 28, 245, 99, 254, 66, 243, 225, 16, 224, 28, 247,
+ 174, 254, 66, 243, 225, 16, 224, 28, 247, 248, 254, 66, 243, 225, 16,
+ 224, 28, 235, 56, 254, 66, 243, 225, 16, 224, 28, 250, 35, 254, 66, 243,
+ 225, 16, 250, 36, 218, 135, 254, 66, 243, 225, 16, 250, 36, 235, 56, 254,
+ 66, 243, 225, 16, 219, 96, 130, 254, 66, 243, 225, 16, 252, 181, 130,
+ 254, 66, 243, 225, 16, 224, 28, 219, 95, 254, 66, 243, 225, 16, 224, 28,
+ 252, 180, 254, 66, 243, 225, 16, 224, 28, 233, 14, 254, 66, 243, 225, 16,
+ 224, 28, 242, 129, 254, 66, 243, 225, 16, 140, 214, 19, 254, 66, 243,
+ 225, 16, 97, 214, 19, 254, 66, 243, 225, 16, 224, 28, 140, 74, 254, 66,
+ 243, 225, 16, 224, 28, 97, 74, 254, 66, 243, 225, 16, 250, 36, 252, 180,
+ 254, 66, 243, 225, 16, 124, 217, 88, 214, 183, 254, 66, 243, 225, 16,
+ 248, 55, 218, 135, 254, 66, 243, 225, 16, 224, 28, 124, 250, 238, 254,
+ 66, 243, 225, 16, 224, 28, 248, 54, 254, 66, 243, 225, 16, 124, 217, 88,
+ 235, 56, 254, 66, 243, 225, 16, 214, 153, 214, 19, 254, 66, 243, 225, 16,
+ 224, 28, 214, 153, 74, 254, 66, 243, 225, 16, 120, 217, 88, 226, 123,
+ 254, 66, 243, 225, 16, 248, 66, 218, 135, 254, 66, 243, 225, 16, 224, 28,
+ 120, 250, 238, 254, 66, 243, 225, 16, 224, 28, 248, 65, 254, 66, 243,
+ 225, 16, 120, 217, 88, 235, 56, 254, 66, 243, 225, 16, 246, 104, 214, 19,
+ 254, 66, 243, 225, 16, 224, 28, 246, 104, 74, 254, 66, 243, 225, 16, 223,
+ 253, 214, 183, 254, 66, 243, 225, 16, 248, 55, 214, 183, 254, 66, 243,
+ 225, 16, 247, 249, 214, 183, 254, 66, 243, 225, 16, 235, 57, 214, 183,
+ 254, 66, 243, 225, 16, 250, 36, 214, 183, 254, 66, 243, 225, 16, 120,
+ 220, 5, 235, 56, 254, 66, 243, 225, 16, 223, 253, 224, 27, 254, 66, 243,
+ 225, 16, 250, 36, 218, 156, 254, 66, 243, 225, 16, 224, 28, 249, 226,
+ 254, 66, 243, 225, 16, 120, 217, 88, 248, 1, 254, 66, 243, 225, 16, 248,
+ 66, 248, 1, 254, 66, 243, 225, 16, 218, 157, 248, 1, 254, 66, 243, 225,
+ 16, 235, 57, 248, 1, 254, 66, 243, 225, 16, 250, 36, 248, 1, 254, 66,
+ 243, 225, 16, 124, 220, 5, 218, 135, 254, 66, 243, 225, 16, 43, 220, 5,
+ 218, 135, 254, 66, 243, 225, 16, 216, 89, 248, 1, 254, 66, 243, 225, 16,
+ 242, 130, 248, 1, 254, 66, 243, 225, 16, 249, 220, 130, 254, 66, 243,
+ 225, 16, 248, 66, 182, 254, 66, 243, 225, 16, 210, 34, 254, 66, 243, 225,
+ 16, 218, 136, 182, 254, 66, 243, 225, 16, 220, 151, 214, 183, 254, 66,
+ 243, 225, 16, 224, 28, 228, 52, 245, 99, 254, 66, 243, 225, 16, 224, 28,
+ 224, 12, 254, 66, 243, 225, 16, 124, 250, 239, 182, 254, 66, 243, 225,
+ 16, 120, 250, 239, 182, 254, 66, 243, 225, 16, 235, 185, 254, 66, 243,
+ 225, 16, 223, 37, 254, 66, 243, 225, 16, 226, 201, 254, 66, 243, 225, 16,
+ 254, 144, 214, 183, 254, 66, 243, 225, 16, 245, 101, 214, 183, 254, 66,
+ 243, 225, 16, 235, 186, 214, 183, 254, 66, 243, 225, 16, 226, 202, 214,
+ 183, 254, 66, 243, 225, 16, 254, 143, 228, 52, 250, 130, 78, 44, 254,
+ 110, 2, 246, 104, 210, 35, 74, 219, 235, 204, 251, 163, 252, 45, 87, 67,
+ 232, 214, 2, 230, 224, 247, 120, 235, 216, 87, 249, 183, 214, 181, 87,
+ 247, 189, 214, 181, 87, 245, 154, 87, 249, 210, 87, 71, 42, 2, 250, 175,
+ 67, 232, 213, 245, 130, 87, 254, 139, 234, 139, 87, 241, 213, 87, 37,
+ 203, 252, 141, 2, 228, 50, 37, 215, 226, 246, 106, 251, 135, 250, 36, 2,
+ 228, 54, 74, 214, 179, 87, 230, 137, 87, 240, 164, 87, 226, 174, 242, 59,
+ 87, 226, 174, 233, 147, 87, 225, 244, 87, 225, 243, 87, 247, 197, 249,
+ 97, 16, 244, 20, 105, 219, 50, 87, 254, 66, 243, 225, 16, 224, 27, 248,
+ 83, 220, 138, 234, 139, 87, 224, 192, 226, 75, 229, 82, 226, 75, 224,
+ 188, 221, 189, 87, 250, 17, 221, 189, 87, 43, 226, 4, 214, 160, 103, 43,
+ 226, 4, 245, 21, 43, 226, 4, 232, 108, 103, 44, 226, 4, 214, 160, 103,
+ 44, 226, 4, 245, 21, 44, 226, 4, 232, 108, 103, 43, 42, 251, 158, 214,
+ 160, 249, 160, 43, 42, 251, 158, 245, 21, 43, 42, 251, 158, 232, 108,
+ 249, 160, 44, 42, 251, 158, 214, 160, 249, 160, 44, 42, 251, 158, 245,
+ 21, 44, 42, 251, 158, 232, 108, 249, 160, 43, 249, 99, 251, 158, 214,
+ 160, 103, 43, 249, 99, 251, 158, 230, 224, 225, 101, 43, 249, 99, 251,
+ 158, 232, 108, 103, 249, 99, 251, 158, 245, 21, 44, 249, 99, 251, 158,
+ 214, 160, 103, 44, 249, 99, 251, 158, 230, 224, 225, 101, 44, 249, 99,
+ 251, 158, 232, 108, 103, 235, 212, 245, 21, 203, 232, 214, 245, 21, 214,
+ 160, 43, 177, 232, 108, 44, 249, 99, 251, 158, 221, 172, 214, 160, 44,
+ 177, 232, 108, 43, 249, 99, 251, 158, 221, 172, 218, 41, 216, 13, 218,
+ 41, 251, 174, 216, 14, 42, 127, 251, 175, 42, 127, 251, 175, 42, 251,
+ 158, 117, 216, 14, 42, 127, 34, 16, 251, 174, 43, 67, 93, 232, 213, 44,
+ 67, 93, 232, 213, 203, 221, 205, 232, 212, 203, 221, 205, 232, 211, 203,
+ 221, 205, 232, 210, 203, 221, 205, 232, 209, 248, 46, 16, 192, 67, 22,
+ 216, 14, 222, 251, 248, 46, 16, 192, 67, 22, 251, 175, 222, 251, 248, 46,
+ 16, 192, 67, 2, 250, 35, 248, 46, 16, 192, 124, 22, 203, 2, 250, 35, 248,
+ 46, 16, 192, 120, 22, 203, 2, 250, 35, 248, 46, 16, 192, 67, 2, 215, 225,
+ 248, 46, 16, 192, 124, 22, 203, 2, 215, 225, 248, 46, 16, 192, 120, 22,
+ 203, 2, 215, 225, 248, 46, 16, 192, 67, 22, 212, 35, 248, 46, 16, 192,
+ 124, 22, 203, 2, 212, 35, 248, 46, 16, 192, 120, 22, 203, 2, 212, 35,
+ 248, 46, 16, 192, 124, 22, 241, 44, 248, 46, 16, 192, 120, 22, 241, 44,
+ 248, 46, 16, 192, 67, 22, 216, 14, 233, 46, 248, 46, 16, 192, 67, 22,
+ 251, 175, 233, 46, 42, 244, 32, 223, 54, 87, 245, 182, 87, 67, 232, 214,
+ 245, 21, 231, 33, 251, 146, 231, 33, 199, 117, 219, 250, 231, 33, 219,
+ 251, 117, 232, 137, 231, 33, 199, 117, 113, 219, 237, 231, 33, 113, 219,
+ 238, 117, 232, 137, 231, 33, 113, 219, 238, 235, 64, 231, 33, 215, 208,
+ 231, 33, 216, 223, 231, 33, 225, 188, 245, 224, 242, 122, 243, 219, 216,
+ 14, 226, 3, 251, 175, 226, 3, 216, 14, 249, 99, 127, 251, 175, 249, 99,
+ 127, 216, 14, 216, 6, 220, 53, 127, 251, 175, 216, 6, 220, 53, 127, 71,
+ 215, 239, 252, 35, 222, 234, 2, 250, 35, 218, 120, 244, 64, 255, 17, 249,
+ 96, 245, 171, 235, 198, 248, 83, 245, 24, 87, 85, 222, 247, 52, 215, 225,
+ 85, 233, 42, 52, 215, 225, 85, 214, 162, 52, 215, 225, 85, 246, 105, 52,
+ 215, 225, 85, 222, 247, 52, 215, 226, 2, 67, 130, 85, 233, 42, 52, 215,
+ 226, 2, 67, 130, 85, 222, 247, 215, 226, 2, 52, 67, 130, 254, 173, 250,
+ 3, 218, 126, 216, 86, 250, 3, 240, 237, 2, 244, 50, 221, 241, 16, 31,
+ 227, 202, 16, 31, 218, 152, 64, 241, 233, 16, 31, 218, 152, 64, 216, 212,
+ 16, 31, 245, 143, 64, 216, 212, 16, 31, 245, 143, 64, 215, 243, 16, 31,
+ 245, 132, 16, 31, 255, 7, 16, 31, 252, 44, 16, 31, 252, 179, 16, 31, 203,
+ 217, 89, 16, 31, 232, 214, 244, 145, 16, 31, 67, 217, 89, 16, 31, 244,
+ 20, 244, 145, 16, 31, 250, 230, 223, 53, 16, 31, 220, 28, 226, 130, 16,
+ 31, 220, 28, 235, 255, 16, 31, 248, 151, 232, 204, 245, 77, 16, 31, 248,
+ 31, 249, 178, 110, 16, 31, 248, 31, 249, 178, 105, 16, 31, 248, 31, 249,
+ 178, 158, 16, 31, 248, 31, 249, 178, 161, 16, 31, 152, 255, 7, 16, 31,
+ 217, 177, 236, 62, 16, 31, 245, 143, 64, 215, 244, 251, 213, 16, 31, 251,
+ 5, 16, 31, 245, 143, 64, 231, 81, 16, 31, 218, 61, 16, 31, 245, 77, 16,
+ 31, 244, 107, 220, 137, 16, 31, 242, 121, 220, 137, 16, 31, 223, 121,
+ 220, 137, 16, 31, 214, 174, 220, 137, 16, 31, 219, 18, 16, 31, 248, 63,
+ 251, 216, 87, 204, 251, 163, 16, 31, 229, 85, 16, 31, 248, 64, 244, 20,
+ 105, 16, 31, 218, 62, 244, 20, 105, 226, 241, 103, 226, 241, 250, 152,
+ 226, 241, 244, 23, 226, 241, 235, 193, 244, 23, 226, 241, 252, 42, 251,
+ 124, 226, 241, 251, 170, 216, 111, 226, 241, 251, 155, 252, 146, 240,
+ 103, 226, 241, 254, 127, 64, 250, 129, 226, 241, 248, 156, 226, 241, 249,
+ 87, 255, 11, 227, 200, 226, 241, 52, 252, 180, 37, 21, 110, 37, 21, 105,
+ 37, 21, 158, 37, 21, 161, 37, 21, 189, 37, 21, 194, 37, 21, 198, 37, 21,
+ 195, 37, 21, 200, 37, 54, 216, 247, 37, 54, 245, 167, 37, 54, 215, 76,
+ 37, 54, 216, 164, 37, 54, 244, 5, 37, 54, 244, 118, 37, 54, 219, 119, 37,
+ 54, 220, 119, 37, 54, 245, 190, 37, 54, 228, 197, 37, 54, 215, 73, 88,
+ 21, 110, 88, 21, 105, 88, 21, 158, 88, 21, 161, 88, 21, 189, 88, 21, 194,
+ 88, 21, 198, 88, 21, 195, 88, 21, 200, 88, 54, 216, 247, 88, 54, 245,
+ 167, 88, 54, 215, 76, 88, 54, 216, 164, 88, 54, 244, 5, 88, 54, 244, 118,
+ 88, 54, 219, 119, 88, 54, 220, 119, 88, 54, 245, 190, 88, 54, 228, 197,
+ 88, 54, 215, 73, 21, 123, 243, 229, 218, 129, 21, 113, 243, 229, 218,
+ 129, 21, 134, 243, 229, 218, 129, 21, 244, 11, 243, 229, 218, 129, 21,
+ 244, 81, 243, 229, 218, 129, 21, 219, 125, 243, 229, 218, 129, 21, 220,
+ 122, 243, 229, 218, 129, 21, 245, 193, 243, 229, 218, 129, 21, 228, 200,
+ 243, 229, 218, 129, 54, 216, 248, 243, 229, 218, 129, 54, 245, 168, 243,
+ 229, 218, 129, 54, 215, 77, 243, 229, 218, 129, 54, 216, 165, 243, 229,
+ 218, 129, 54, 244, 6, 243, 229, 218, 129, 54, 244, 119, 243, 229, 218,
+ 129, 54, 219, 120, 243, 229, 218, 129, 54, 220, 120, 243, 229, 218, 129,
+ 54, 245, 191, 243, 229, 218, 129, 54, 228, 198, 243, 229, 218, 129, 54,
+ 215, 74, 243, 229, 218, 129, 88, 7, 4, 1, 61, 88, 7, 4, 1, 253, 158, 88,
+ 7, 4, 1, 251, 66, 88, 7, 4, 1, 249, 60, 88, 7, 4, 1, 75, 88, 7, 4, 1,
+ 245, 6, 88, 7, 4, 1, 243, 202, 88, 7, 4, 1, 242, 60, 88, 7, 4, 1, 73, 88,
+ 7, 4, 1, 235, 144, 88, 7, 4, 1, 235, 23, 88, 7, 4, 1, 156, 88, 7, 4, 1,
+ 193, 88, 7, 4, 1, 230, 25, 88, 7, 4, 1, 76, 88, 7, 4, 1, 226, 105, 88, 7,
+ 4, 1, 224, 96, 88, 7, 4, 1, 153, 88, 7, 4, 1, 222, 91, 88, 7, 4, 1, 217,
+ 152, 88, 7, 4, 1, 70, 88, 7, 4, 1, 214, 105, 88, 7, 4, 1, 212, 98, 88, 7,
+ 4, 1, 211, 178, 88, 7, 4, 1, 211, 117, 88, 7, 4, 1, 210, 159, 37, 7, 6,
+ 1, 61, 37, 7, 6, 1, 253, 158, 37, 7, 6, 1, 251, 66, 37, 7, 6, 1, 249, 60,
+ 37, 7, 6, 1, 75, 37, 7, 6, 1, 245, 6, 37, 7, 6, 1, 243, 202, 37, 7, 6, 1,
+ 242, 60, 37, 7, 6, 1, 73, 37, 7, 6, 1, 235, 144, 37, 7, 6, 1, 235, 23,
+ 37, 7, 6, 1, 156, 37, 7, 6, 1, 193, 37, 7, 6, 1, 230, 25, 37, 7, 6, 1,
+ 76, 37, 7, 6, 1, 226, 105, 37, 7, 6, 1, 224, 96, 37, 7, 6, 1, 153, 37, 7,
+ 6, 1, 222, 91, 37, 7, 6, 1, 217, 152, 37, 7, 6, 1, 70, 37, 7, 6, 1, 214,
+ 105, 37, 7, 6, 1, 212, 98, 37, 7, 6, 1, 211, 178, 37, 7, 6, 1, 211, 117,
+ 37, 7, 6, 1, 210, 159, 37, 7, 4, 1, 61, 37, 7, 4, 1, 253, 158, 37, 7, 4,
+ 1, 251, 66, 37, 7, 4, 1, 249, 60, 37, 7, 4, 1, 75, 37, 7, 4, 1, 245, 6,
+ 37, 7, 4, 1, 243, 202, 37, 7, 4, 1, 242, 60, 37, 7, 4, 1, 73, 37, 7, 4,
+ 1, 235, 144, 37, 7, 4, 1, 235, 23, 37, 7, 4, 1, 156, 37, 7, 4, 1, 193,
+ 37, 7, 4, 1, 230, 25, 37, 7, 4, 1, 76, 37, 7, 4, 1, 226, 105, 37, 7, 4,
+ 1, 224, 96, 37, 7, 4, 1, 153, 37, 7, 4, 1, 222, 91, 37, 7, 4, 1, 217,
+ 152, 37, 7, 4, 1, 70, 37, 7, 4, 1, 214, 105, 37, 7, 4, 1, 212, 98, 37, 7,
+ 4, 1, 211, 178, 37, 7, 4, 1, 211, 117, 37, 7, 4, 1, 210, 159, 37, 21,
+ 210, 86, 152, 37, 54, 245, 167, 152, 37, 54, 215, 76, 152, 37, 54, 216,
+ 164, 152, 37, 54, 244, 5, 152, 37, 54, 244, 118, 152, 37, 54, 219, 119,
+ 152, 37, 54, 220, 119, 152, 37, 54, 245, 190, 152, 37, 54, 228, 197, 152,
+ 37, 54, 215, 73, 52, 37, 21, 110, 52, 37, 21, 105, 52, 37, 21, 158, 52,
+ 37, 21, 161, 52, 37, 21, 189, 52, 37, 21, 194, 52, 37, 21, 198, 52, 37,
+ 21, 195, 52, 37, 21, 200, 52, 37, 54, 216, 247, 152, 37, 21, 210, 86, 93,
+ 99, 192, 241, 44, 93, 99, 114, 241, 44, 93, 99, 192, 213, 239, 93, 99,
+ 114, 213, 239, 93, 99, 192, 215, 211, 248, 157, 241, 44, 93, 99, 114,
+ 215, 211, 248, 157, 241, 44, 93, 99, 192, 215, 211, 248, 157, 213, 239,
+ 93, 99, 114, 215, 211, 248, 157, 213, 239, 93, 99, 192, 224, 24, 248,
+ 157, 241, 44, 93, 99, 114, 224, 24, 248, 157, 241, 44, 93, 99, 192, 224,
+ 24, 248, 157, 213, 239, 93, 99, 114, 224, 24, 248, 157, 213, 239, 93, 99,
+ 192, 124, 22, 222, 251, 93, 99, 124, 192, 22, 44, 241, 221, 93, 99, 124,
+ 114, 22, 44, 232, 230, 93, 99, 114, 124, 22, 222, 251, 93, 99, 192, 124,
+ 22, 233, 46, 93, 99, 124, 192, 22, 43, 241, 221, 93, 99, 124, 114, 22,
+ 43, 232, 230, 93, 99, 114, 124, 22, 233, 46, 93, 99, 192, 120, 22, 222,
+ 251, 93, 99, 120, 192, 22, 44, 241, 221, 93, 99, 120, 114, 22, 44, 232,
+ 230, 93, 99, 114, 120, 22, 222, 251, 93, 99, 192, 120, 22, 233, 46, 93,
+ 99, 120, 192, 22, 43, 241, 221, 93, 99, 120, 114, 22, 43, 232, 230, 93,
+ 99, 114, 120, 22, 233, 46, 93, 99, 192, 67, 22, 222, 251, 93, 99, 67,
+ 192, 22, 44, 241, 221, 93, 99, 120, 114, 22, 44, 124, 232, 230, 93, 99,
+ 124, 114, 22, 44, 120, 232, 230, 93, 99, 67, 114, 22, 44, 232, 230, 93,
+ 99, 124, 192, 22, 44, 120, 241, 221, 93, 99, 120, 192, 22, 44, 124, 241,
+ 221, 93, 99, 114, 67, 22, 222, 251, 93, 99, 192, 67, 22, 233, 46, 93, 99,
+ 67, 192, 22, 43, 241, 221, 93, 99, 120, 114, 22, 43, 124, 232, 230, 93,
+ 99, 124, 114, 22, 43, 120, 232, 230, 93, 99, 67, 114, 22, 43, 232, 230,
+ 93, 99, 124, 192, 22, 43, 120, 241, 221, 93, 99, 120, 192, 22, 43, 124,
+ 241, 221, 93, 99, 114, 67, 22, 233, 46, 93, 99, 192, 124, 22, 241, 44,
+ 93, 99, 43, 114, 22, 44, 124, 232, 230, 93, 99, 44, 114, 22, 43, 124,
+ 232, 230, 93, 99, 124, 192, 22, 203, 241, 221, 93, 99, 124, 114, 22, 203,
+ 232, 230, 93, 99, 44, 192, 22, 43, 124, 241, 221, 93, 99, 43, 192, 22,
+ 44, 124, 241, 221, 93, 99, 114, 124, 22, 241, 44, 93, 99, 192, 120, 22,
+ 241, 44, 93, 99, 43, 114, 22, 44, 120, 232, 230, 93, 99, 44, 114, 22, 43,
+ 120, 232, 230, 93, 99, 120, 192, 22, 203, 241, 221, 93, 99, 120, 114, 22,
+ 203, 232, 230, 93, 99, 44, 192, 22, 43, 120, 241, 221, 93, 99, 43, 192,
+ 22, 44, 120, 241, 221, 93, 99, 114, 120, 22, 241, 44, 93, 99, 192, 67,
+ 22, 241, 44, 93, 99, 43, 114, 22, 44, 67, 232, 230, 93, 99, 44, 114, 22,
+ 43, 67, 232, 230, 93, 99, 67, 192, 22, 203, 241, 221, 93, 99, 120, 114,
+ 22, 124, 203, 232, 230, 93, 99, 124, 114, 22, 120, 203, 232, 230, 93, 99,
+ 67, 114, 22, 203, 232, 230, 93, 99, 43, 120, 114, 22, 44, 124, 232, 230,
+ 93, 99, 44, 120, 114, 22, 43, 124, 232, 230, 93, 99, 43, 124, 114, 22,
+ 44, 120, 232, 230, 93, 99, 44, 124, 114, 22, 43, 120, 232, 230, 93, 99,
+ 124, 192, 22, 120, 203, 241, 221, 93, 99, 120, 192, 22, 124, 203, 241,
+ 221, 93, 99, 44, 192, 22, 43, 67, 241, 221, 93, 99, 43, 192, 22, 44, 67,
+ 241, 221, 93, 99, 114, 67, 22, 241, 44, 93, 99, 192, 52, 248, 157, 241,
+ 44, 93, 99, 114, 52, 248, 157, 241, 44, 93, 99, 192, 52, 248, 157, 213,
+ 239, 93, 99, 114, 52, 248, 157, 213, 239, 93, 99, 52, 241, 44, 93, 99,
+ 52, 213, 239, 93, 99, 124, 219, 155, 22, 44, 246, 113, 93, 99, 124, 52,
+ 22, 44, 219, 154, 93, 99, 52, 124, 22, 222, 251, 93, 99, 124, 219, 155,
+ 22, 43, 246, 113, 93, 99, 124, 52, 22, 43, 219, 154, 93, 99, 52, 124, 22,
+ 233, 46, 93, 99, 120, 219, 155, 22, 44, 246, 113, 93, 99, 120, 52, 22,
+ 44, 219, 154, 93, 99, 52, 120, 22, 222, 251, 93, 99, 120, 219, 155, 22,
+ 43, 246, 113, 93, 99, 120, 52, 22, 43, 219, 154, 93, 99, 52, 120, 22,
+ 233, 46, 93, 99, 67, 219, 155, 22, 44, 246, 113, 93, 99, 67, 52, 22, 44,
+ 219, 154, 93, 99, 52, 67, 22, 222, 251, 93, 99, 67, 219, 155, 22, 43,
+ 246, 113, 93, 99, 67, 52, 22, 43, 219, 154, 93, 99, 52, 67, 22, 233, 46,
+ 93, 99, 124, 219, 155, 22, 203, 246, 113, 93, 99, 124, 52, 22, 203, 219,
+ 154, 93, 99, 52, 124, 22, 241, 44, 93, 99, 120, 219, 155, 22, 203, 246,
+ 113, 93, 99, 120, 52, 22, 203, 219, 154, 93, 99, 52, 120, 22, 241, 44,
+ 93, 99, 67, 219, 155, 22, 203, 246, 113, 93, 99, 67, 52, 22, 203, 219,
+ 154, 93, 99, 52, 67, 22, 241, 44, 93, 99, 192, 254, 26, 124, 22, 222,
+ 251, 93, 99, 192, 254, 26, 124, 22, 233, 46, 93, 99, 192, 254, 26, 120,
+ 22, 233, 46, 93, 99, 192, 254, 26, 120, 22, 222, 251, 93, 99, 192, 247,
+ 255, 214, 160, 44, 216, 42, 232, 108, 233, 46, 93, 99, 192, 247, 255,
+ 214, 160, 43, 216, 42, 232, 108, 222, 251, 93, 99, 192, 247, 255, 249,
+ 130, 93, 99, 192, 233, 46, 93, 99, 192, 214, 163, 93, 99, 192, 222, 251,
+ 93, 99, 192, 246, 106, 93, 99, 114, 233, 46, 93, 99, 114, 214, 163, 93,
+ 99, 114, 222, 251, 93, 99, 114, 246, 106, 93, 99, 192, 43, 22, 114, 222,
+ 251, 93, 99, 192, 120, 22, 114, 246, 106, 93, 99, 114, 43, 22, 192, 222,
+ 251, 93, 99, 114, 120, 22, 192, 246, 106, 214, 160, 163, 251, 213, 232,
+ 108, 123, 245, 189, 251, 213, 232, 108, 123, 224, 22, 251, 213, 232, 108,
+ 134, 245, 187, 251, 213, 232, 108, 163, 251, 213, 232, 108, 244, 81, 245,
+ 187, 251, 213, 232, 108, 134, 224, 20, 251, 213, 232, 108, 220, 122, 245,
+ 187, 251, 213, 243, 229, 251, 213, 43, 220, 122, 245, 187, 251, 213, 43,
+ 134, 224, 20, 251, 213, 43, 244, 81, 245, 187, 251, 213, 43, 163, 251,
+ 213, 43, 134, 245, 187, 251, 213, 43, 123, 224, 22, 251, 213, 43, 123,
+ 245, 189, 251, 213, 44, 163, 251, 213, 192, 220, 92, 231, 82, 220, 92,
+ 248, 162, 220, 92, 214, 160, 123, 245, 189, 251, 213, 44, 123, 245, 189,
+ 251, 213, 224, 26, 232, 108, 233, 46, 224, 26, 232, 108, 222, 251, 224,
+ 26, 214, 160, 233, 46, 224, 26, 214, 160, 43, 22, 232, 108, 43, 22, 232,
+ 108, 222, 251, 224, 26, 214, 160, 43, 22, 232, 108, 222, 251, 224, 26,
+ 214, 160, 43, 22, 214, 160, 44, 22, 232, 108, 233, 46, 224, 26, 214, 160,
+ 43, 22, 214, 160, 44, 22, 232, 108, 222, 251, 224, 26, 214, 160, 222,
+ 251, 224, 26, 214, 160, 44, 22, 232, 108, 233, 46, 224, 26, 214, 160, 44,
+ 22, 232, 108, 43, 22, 232, 108, 222, 251, 85, 218, 234, 71, 218, 234, 71,
+ 42, 2, 222, 183, 249, 159, 71, 42, 249, 187, 85, 4, 218, 234, 42, 2, 203,
+ 244, 105, 42, 2, 67, 244, 105, 42, 2, 226, 144, 249, 126, 244, 105, 42,
+ 2, 214, 160, 43, 216, 42, 232, 108, 44, 244, 105, 42, 2, 214, 160, 44,
+ 216, 42, 232, 108, 43, 244, 105, 42, 2, 247, 255, 249, 126, 244, 105, 85,
+ 4, 218, 234, 71, 4, 218, 234, 85, 223, 116, 71, 223, 116, 85, 67, 223,
+ 116, 71, 67, 223, 116, 85, 226, 6, 71, 226, 6, 85, 214, 162, 215, 225,
+ 71, 214, 162, 215, 225, 85, 214, 162, 4, 215, 225, 71, 214, 162, 4, 215,
+ 225, 85, 222, 247, 215, 225, 71, 222, 247, 215, 225, 85, 222, 247, 4,
+ 215, 225, 71, 222, 247, 4, 215, 225, 85, 222, 247, 225, 8, 71, 222, 247,
+ 225, 8, 85, 246, 105, 215, 225, 71, 246, 105, 215, 225, 85, 246, 105, 4,
+ 215, 225, 71, 246, 105, 4, 215, 225, 85, 233, 42, 215, 225, 71, 233, 42,
+ 215, 225, 85, 233, 42, 4, 215, 225, 71, 233, 42, 4, 215, 225, 85, 233,
+ 42, 225, 8, 71, 233, 42, 225, 8, 85, 247, 248, 71, 247, 248, 71, 247,
+ 249, 249, 187, 85, 4, 247, 248, 244, 89, 232, 104, 71, 250, 35, 246, 118,
+ 250, 35, 250, 36, 2, 67, 244, 105, 251, 111, 85, 250, 35, 250, 36, 2, 43,
+ 163, 251, 221, 250, 36, 2, 44, 163, 251, 221, 250, 36, 2, 232, 108, 163,
+ 251, 221, 250, 36, 2, 214, 160, 163, 251, 221, 250, 36, 2, 214, 160, 44,
+ 224, 26, 251, 221, 250, 36, 2, 254, 155, 251, 88, 214, 160, 43, 224, 26,
+ 251, 221, 43, 163, 85, 250, 35, 44, 163, 85, 250, 35, 235, 194, 251, 113,
+ 235, 194, 71, 250, 35, 214, 160, 163, 235, 194, 71, 250, 35, 232, 108,
+ 163, 235, 194, 71, 250, 35, 214, 160, 43, 224, 26, 250, 33, 254, 25, 214,
+ 160, 44, 224, 26, 250, 33, 254, 25, 232, 108, 44, 224, 26, 250, 33, 254,
+ 25, 232, 108, 43, 224, 26, 250, 33, 254, 25, 214, 160, 163, 250, 35, 232,
+ 108, 163, 250, 35, 85, 232, 108, 44, 215, 225, 85, 232, 108, 43, 215,
+ 225, 85, 214, 160, 43, 215, 225, 85, 214, 160, 44, 215, 225, 71, 251,
+ 113, 42, 2, 43, 163, 251, 221, 42, 2, 44, 163, 251, 221, 42, 2, 214, 160,
+ 43, 247, 255, 163, 251, 221, 42, 2, 232, 108, 44, 247, 255, 163, 251,
+ 221, 71, 42, 2, 67, 251, 232, 232, 213, 71, 214, 162, 215, 226, 2, 247,
+ 120, 214, 162, 215, 226, 2, 43, 163, 251, 221, 214, 162, 215, 226, 2, 44,
+ 163, 251, 221, 233, 85, 250, 35, 71, 42, 2, 214, 160, 43, 224, 25, 71,
+ 42, 2, 232, 108, 43, 224, 25, 71, 42, 2, 232, 108, 44, 224, 25, 71, 42,
+ 2, 214, 160, 44, 224, 25, 71, 250, 36, 2, 214, 160, 43, 224, 25, 71, 250,
+ 36, 2, 232, 108, 43, 224, 25, 71, 250, 36, 2, 232, 108, 44, 224, 25, 71,
+ 250, 36, 2, 214, 160, 44, 224, 25, 214, 160, 43, 215, 225, 214, 160, 44,
+ 215, 225, 232, 108, 43, 215, 225, 71, 231, 82, 218, 234, 85, 231, 82,
+ 218, 234, 71, 231, 82, 4, 218, 234, 85, 231, 82, 4, 218, 234, 232, 108,
+ 44, 215, 225, 85, 218, 38, 2, 223, 132, 249, 247, 214, 194, 219, 60, 249,
+ 222, 85, 218, 156, 71, 218, 156, 232, 228, 216, 132, 218, 37, 253, 234,
+ 228, 71, 248, 38, 228, 71, 249, 195, 226, 163, 85, 217, 0, 71, 217, 0,
+ 252, 156, 251, 163, 252, 156, 93, 2, 250, 129, 252, 156, 93, 2, 211, 178,
+ 221, 254, 214, 195, 2, 223, 160, 246, 84, 240, 243, 252, 22, 71, 220, 2,
+ 225, 101, 85, 220, 2, 225, 101, 220, 87, 223, 49, 222, 187, 244, 55, 241,
+ 228, 251, 113, 85, 43, 225, 7, 235, 242, 85, 44, 225, 7, 235, 242, 71,
+ 43, 225, 7, 235, 242, 71, 120, 225, 7, 235, 242, 71, 44, 225, 7, 235,
+ 242, 71, 124, 225, 7, 235, 242, 219, 101, 22, 249, 129, 250, 219, 50,
+ 223, 172, 50, 251, 239, 50, 251, 25, 254, 102, 226, 145, 249, 130, 250,
+ 111, 223, 37, 249, 131, 64, 232, 118, 249, 131, 64, 235, 116, 218, 157,
+ 22, 249, 136, 244, 168, 87, 254, 248, 220, 89, 242, 22, 22, 219, 189,
+ 225, 220, 87, 210, 254, 211, 69, 215, 215, 31, 241, 223, 215, 215, 31,
+ 233, 107, 215, 215, 31, 244, 96, 215, 215, 31, 216, 133, 215, 215, 31,
+ 211, 239, 215, 215, 31, 212, 40, 215, 215, 31, 230, 115, 215, 215, 31,
+ 245, 223, 212, 1, 64, 248, 18, 71, 243, 239, 244, 190, 71, 219, 74, 244,
+ 190, 85, 219, 74, 244, 190, 71, 218, 38, 2, 223, 132, 244, 92, 224, 22,
+ 230, 128, 233, 80, 224, 22, 230, 128, 231, 54, 244, 138, 50, 245, 223,
+ 231, 190, 50, 235, 38, 221, 220, 214, 145, 229, 93, 225, 20, 254, 12,
+ 217, 40, 243, 52, 251, 3, 233, 19, 213, 150, 232, 238, 221, 191, 222, 19,
+ 250, 248, 254, 42, 225, 52, 71, 250, 117, 234, 78, 71, 250, 117, 224, 14,
+ 71, 250, 117, 222, 195, 71, 250, 117, 251, 231, 71, 250, 117, 234, 30,
+ 71, 250, 117, 225, 231, 85, 250, 117, 234, 78, 85, 250, 117, 224, 14, 85,
+ 250, 117, 222, 195, 85, 250, 117, 251, 231, 85, 250, 117, 234, 30, 85,
+ 250, 117, 225, 231, 85, 219, 16, 218, 50, 71, 241, 228, 218, 50, 71, 247,
+ 249, 218, 50, 85, 249, 245, 218, 50, 71, 219, 16, 218, 50, 85, 241, 228,
+ 218, 50, 85, 247, 249, 218, 50, 71, 249, 245, 218, 50, 240, 243, 218,
+ 238, 224, 22, 228, 47, 245, 189, 228, 47, 252, 73, 245, 189, 228, 42,
+ 252, 73, 219, 118, 228, 42, 230, 57, 244, 66, 50, 230, 57, 229, 188, 50,
+ 230, 57, 220, 76, 50, 212, 9, 188, 249, 130, 245, 220, 188, 249, 130,
+ 214, 171, 223, 112, 87, 223, 112, 16, 31, 215, 48, 225, 34, 223, 112, 16,
+ 31, 215, 47, 225, 34, 223, 112, 16, 31, 215, 46, 225, 34, 223, 112, 16,
+ 31, 215, 45, 225, 34, 223, 112, 16, 31, 215, 44, 225, 34, 223, 112, 16,
+ 31, 215, 43, 225, 34, 223, 112, 16, 31, 215, 42, 225, 34, 223, 112, 16,
+ 31, 243, 50, 231, 138, 85, 214, 171, 223, 112, 87, 223, 113, 226, 20, 87,
+ 225, 252, 226, 20, 87, 225, 174, 226, 20, 50, 211, 255, 87, 247, 241,
+ 244, 189, 247, 241, 244, 188, 247, 241, 244, 187, 247, 241, 244, 186,
+ 247, 241, 244, 185, 247, 241, 244, 184, 71, 250, 36, 2, 59, 222, 251, 71,
+ 250, 36, 2, 113, 247, 118, 85, 250, 36, 2, 71, 59, 222, 251, 85, 250, 36,
+ 2, 113, 71, 247, 118, 230, 142, 31, 211, 69, 230, 142, 31, 210, 253, 247,
+ 224, 31, 242, 131, 211, 69, 247, 224, 31, 233, 13, 210, 253, 247, 224,
+ 31, 233, 13, 211, 69, 247, 224, 31, 242, 131, 210, 253, 71, 244, 73, 85,
+ 244, 73, 242, 22, 22, 225, 104, 254, 120, 249, 128, 217, 235, 218, 164,
+ 64, 254, 226, 221, 206, 254, 169, 244, 51, 243, 60, 218, 164, 64, 241,
+ 202, 253, 199, 87, 244, 62, 226, 126, 71, 218, 156, 134, 232, 208, 249,
+ 175, 222, 251, 134, 232, 208, 249, 175, 233, 46, 212, 50, 50, 125, 213,
+ 130, 50, 246, 110, 244, 138, 50, 246, 110, 231, 190, 50, 235, 203, 244,
+ 138, 22, 231, 190, 50, 231, 190, 22, 244, 138, 50, 231, 190, 2, 218, 103,
+ 50, 231, 190, 2, 218, 103, 22, 231, 190, 22, 244, 138, 50, 67, 231, 190,
+ 2, 218, 103, 50, 203, 231, 190, 2, 218, 103, 50, 231, 82, 71, 250, 35,
+ 231, 82, 85, 250, 35, 231, 82, 4, 71, 250, 35, 231, 153, 87, 247, 167,
+ 87, 214, 169, 225, 251, 87, 249, 231, 243, 224, 214, 141, 229, 88, 250,
+ 161, 226, 61, 235, 44, 213, 185, 250, 93, 85, 230, 129, 232, 225, 220,
+ 112, 220, 147, 224, 5, 220, 130, 219, 55, 252, 159, 252, 126, 92, 234,
+ 138, 71, 246, 93, 231, 185, 71, 246, 93, 234, 78, 85, 246, 93, 231, 185,
+ 85, 246, 93, 234, 78, 219, 61, 211, 230, 219, 64, 218, 38, 252, 51, 249,
+ 247, 223, 159, 85, 219, 60, 216, 134, 249, 248, 22, 223, 159, 215, 94,
+ 71, 220, 2, 225, 101, 215, 94, 85, 220, 2, 225, 101, 71, 247, 249, 236,
+ 0, 218, 234, 249, 125, 233, 91, 247, 193, 250, 244, 226, 166, 225, 104,
+ 250, 245, 219, 88, 241, 212, 2, 71, 249, 130, 37, 249, 125, 233, 91, 250,
+ 153, 228, 75, 245, 124, 254, 141, 226, 191, 43, 212, 26, 215, 251, 85,
+ 215, 55, 43, 212, 26, 215, 251, 71, 215, 55, 43, 212, 26, 215, 251, 85,
+ 43, 233, 92, 231, 53, 71, 43, 233, 92, 231, 53, 246, 89, 219, 82, 50,
+ 114, 71, 246, 105, 215, 225, 43, 250, 0, 245, 124, 92, 221, 254, 244,
+ 175, 247, 255, 236, 0, 71, 250, 36, 236, 0, 85, 218, 234, 85, 215, 192,
+ 223, 60, 43, 245, 123, 223, 60, 43, 245, 122, 253, 211, 16, 31, 214, 145,
+ 114, 250, 36, 2, 218, 103, 22, 113, 170, 48, 225, 189, 222, 248, 235,
+ 205, 225, 189, 233, 43, 235, 205, 225, 189, 235, 193, 225, 189, 85, 249,
+ 131, 226, 197, 220, 29, 220, 17, 219, 229, 250, 61, 250, 226, 241, 157,
+ 219, 126, 243, 61, 211, 230, 240, 220, 243, 61, 2, 242, 12, 231, 173, 16,
+ 31, 232, 229, 230, 115, 214, 195, 226, 197, 242, 122, 244, 12, 244, 74,
+ 236, 0, 241, 59, 244, 129, 222, 14, 42, 244, 11, 249, 159, 219, 104, 240,
+ 112, 219, 107, 225, 168, 2, 252, 159, 216, 242, 235, 131, 252, 146, 87,
+ 241, 231, 242, 133, 87, 243, 232, 224, 142, 249, 103, 226, 197, 85, 218,
+ 234, 71, 244, 74, 2, 203, 230, 224, 85, 218, 104, 214, 160, 251, 217,
+ 221, 193, 85, 221, 193, 232, 108, 251, 217, 221, 193, 71, 221, 193, 71,
+ 114, 250, 130, 78, 217, 1, 232, 154, 50, 217, 53, 246, 88, 254, 191, 245,
+ 119, 223, 157, 244, 85, 223, 157, 242, 15, 213, 174, 242, 15, 211, 198,
+ 242, 15, 232, 108, 44, 225, 198, 225, 198, 214, 160, 44, 225, 198, 71,
+ 228, 230, 85, 228, 230, 250, 130, 78, 114, 250, 130, 78, 230, 84, 211,
+ 178, 114, 230, 84, 211, 178, 252, 156, 211, 178, 114, 252, 156, 211, 178,
+ 226, 126, 26, 249, 130, 114, 26, 249, 130, 204, 250, 175, 249, 130, 114,
+ 204, 250, 175, 249, 130, 7, 249, 130, 220, 91, 71, 7, 249, 130, 226, 126,
+ 7, 249, 130, 231, 187, 249, 130, 218, 157, 64, 248, 149, 244, 11, 217,
+ 15, 253, 216, 244, 11, 252, 157, 253, 216, 114, 244, 11, 252, 157, 253,
+ 216, 244, 11, 249, 243, 253, 216, 85, 244, 11, 225, 9, 218, 156, 71, 244,
+ 11, 225, 9, 218, 156, 219, 11, 218, 111, 226, 126, 71, 218, 156, 37, 71,
+ 218, 156, 204, 250, 175, 85, 218, 156, 85, 250, 175, 71, 218, 156, 226,
+ 126, 85, 218, 156, 114, 226, 126, 85, 218, 156, 225, 60, 218, 156, 220,
+ 91, 71, 218, 156, 114, 253, 216, 204, 250, 175, 253, 216, 245, 193, 218,
+ 244, 253, 216, 245, 193, 225, 9, 85, 218, 156, 245, 193, 225, 9, 225, 60,
+ 218, 156, 219, 125, 225, 9, 85, 218, 156, 245, 193, 225, 9, 223, 114, 85,
+ 218, 156, 114, 245, 193, 225, 9, 223, 114, 85, 218, 156, 215, 77, 225, 9,
+ 85, 218, 156, 219, 120, 225, 9, 253, 216, 217, 15, 253, 216, 204, 250,
+ 175, 217, 15, 253, 216, 114, 217, 15, 253, 216, 219, 125, 225, 157, 85,
+ 22, 71, 244, 54, 85, 244, 54, 71, 244, 54, 245, 193, 225, 157, 226, 126,
+ 85, 244, 54, 37, 204, 250, 175, 245, 193, 225, 9, 218, 156, 114, 217, 15,
+ 225, 60, 253, 216, 219, 62, 216, 105, 215, 218, 219, 62, 114, 250, 114,
+ 219, 62, 219, 13, 114, 219, 13, 252, 157, 253, 216, 245, 193, 217, 15,
+ 224, 171, 253, 216, 114, 245, 193, 217, 15, 224, 171, 253, 216, 249, 131,
+ 78, 220, 91, 71, 250, 35, 152, 92, 249, 131, 78, 232, 108, 44, 246, 86,
+ 71, 218, 234, 214, 160, 44, 246, 86, 71, 218, 234, 232, 108, 44, 220, 91,
+ 71, 218, 234, 214, 160, 44, 220, 91, 71, 218, 234, 85, 224, 13, 164, 226,
+ 147, 71, 224, 13, 164, 226, 147, 71, 245, 31, 164, 226, 147, 85, 247,
+ 249, 230, 182, 71, 211, 178, 114, 245, 31, 164, 87, 192, 67, 130, 231,
+ 82, 67, 130, 114, 67, 130, 114, 219, 155, 215, 94, 249, 220, 223, 254,
+ 164, 226, 147, 114, 219, 155, 249, 220, 223, 254, 164, 226, 147, 114, 52,
+ 215, 94, 249, 220, 223, 254, 164, 226, 147, 114, 52, 249, 220, 223, 254,
+ 164, 226, 147, 114, 121, 219, 155, 249, 220, 223, 254, 164, 226, 147,
+ 114, 121, 52, 249, 220, 223, 254, 164, 226, 147, 249, 91, 218, 140, 226,
+ 15, 5, 226, 147, 114, 245, 31, 164, 226, 147, 114, 241, 228, 245, 31,
+ 164, 226, 147, 114, 85, 241, 227, 222, 187, 114, 85, 241, 228, 251, 113,
+ 244, 55, 241, 227, 222, 187, 244, 55, 241, 228, 251, 113, 231, 82, 43,
+ 226, 4, 226, 147, 231, 82, 44, 226, 4, 226, 147, 231, 82, 244, 63, 43,
+ 226, 4, 226, 147, 231, 82, 244, 63, 44, 226, 4, 226, 147, 231, 82, 233,
+ 42, 254, 110, 251, 158, 226, 147, 231, 82, 222, 247, 254, 110, 251, 158,
+ 226, 147, 114, 233, 42, 254, 110, 223, 254, 164, 226, 147, 114, 222, 247,
+ 254, 110, 223, 254, 164, 226, 147, 114, 233, 42, 254, 110, 251, 158, 226,
+ 147, 114, 222, 247, 254, 110, 251, 158, 226, 147, 192, 43, 216, 6, 220,
+ 53, 251, 158, 226, 147, 192, 44, 216, 6, 220, 53, 251, 158, 226, 147,
+ 231, 82, 43, 249, 99, 251, 158, 226, 147, 231, 82, 44, 249, 99, 251, 158,
+ 226, 147, 247, 204, 152, 37, 21, 110, 247, 204, 152, 37, 21, 105, 247,
+ 204, 152, 37, 21, 158, 247, 204, 152, 37, 21, 161, 247, 204, 152, 37, 21,
+ 189, 247, 204, 152, 37, 21, 194, 247, 204, 152, 37, 21, 198, 247, 204,
+ 152, 37, 21, 195, 247, 204, 152, 37, 21, 200, 247, 204, 152, 37, 54, 216,
+ 247, 247, 204, 37, 35, 21, 110, 247, 204, 37, 35, 21, 105, 247, 204, 37,
+ 35, 21, 158, 247, 204, 37, 35, 21, 161, 247, 204, 37, 35, 21, 189, 247,
+ 204, 37, 35, 21, 194, 247, 204, 37, 35, 21, 198, 247, 204, 37, 35, 21,
+ 195, 247, 204, 37, 35, 21, 200, 247, 204, 37, 35, 54, 216, 247, 247, 204,
+ 152, 37, 35, 21, 110, 247, 204, 152, 37, 35, 21, 105, 247, 204, 152, 37,
+ 35, 21, 158, 247, 204, 152, 37, 35, 21, 161, 247, 204, 152, 37, 35, 21,
+ 189, 247, 204, 152, 37, 35, 21, 194, 247, 204, 152, 37, 35, 21, 198, 247,
+ 204, 152, 37, 35, 21, 195, 247, 204, 152, 37, 35, 21, 200, 247, 204, 152,
+ 37, 35, 54, 216, 247, 114, 211, 246, 97, 74, 114, 96, 50, 114, 230, 182,
+ 50, 114, 247, 169, 50, 114, 219, 28, 245, 220, 74, 114, 97, 74, 114, 228,
+ 56, 245, 220, 74, 246, 98, 225, 11, 97, 74, 114, 222, 184, 97, 74, 215,
+ 224, 97, 74, 114, 215, 224, 97, 74, 248, 155, 215, 224, 97, 74, 114, 248,
+ 155, 215, 224, 97, 74, 85, 97, 74, 216, 144, 216, 12, 97, 253, 249, 216,
+ 144, 251, 173, 97, 253, 249, 85, 97, 253, 249, 114, 85, 249, 91, 246,
+ 104, 22, 97, 74, 114, 85, 249, 91, 214, 153, 22, 97, 74, 218, 231, 85,
+ 97, 74, 114, 249, 206, 85, 97, 74, 222, 246, 71, 97, 74, 233, 41, 71, 97,
+ 74, 252, 183, 220, 91, 71, 97, 74, 243, 241, 220, 91, 71, 97, 74, 114,
+ 232, 108, 222, 245, 71, 97, 74, 114, 214, 160, 222, 245, 71, 97, 74, 228,
+ 49, 232, 108, 222, 245, 71, 97, 74, 249, 99, 232, 123, 228, 49, 214, 160,
+ 222, 245, 71, 97, 74, 37, 114, 71, 97, 74, 211, 252, 97, 74, 251, 220,
+ 219, 28, 245, 220, 74, 251, 220, 97, 74, 251, 220, 228, 56, 245, 220, 74,
+ 114, 251, 220, 219, 28, 245, 220, 74, 114, 251, 220, 97, 74, 114, 251,
+ 220, 228, 56, 245, 220, 74, 217, 17, 97, 74, 114, 217, 16, 97, 74, 212,
+ 18, 97, 74, 114, 212, 18, 97, 74, 226, 172, 97, 74, 52, 249, 99, 232,
+ 123, 134, 247, 214, 254, 109, 71, 215, 226, 249, 187, 4, 71, 215, 225,
+ 225, 171, 204, 218, 63, 204, 218, 21, 43, 222, 90, 252, 173, 248, 60, 44,
+ 222, 90, 252, 173, 248, 60, 177, 2, 59, 235, 215, 223, 50, 219, 47, 224,
+ 201, 218, 63, 218, 22, 224, 201, 219, 46, 67, 252, 141, 2, 203, 91, 11,
+ 222, 228, 247, 254, 199, 247, 168, 11, 244, 175, 247, 254, 92, 232, 146,
+ 254, 118, 92, 232, 146, 226, 158, 71, 247, 249, 2, 250, 173, 247, 120,
+ 22, 2, 247, 120, 245, 170, 64, 226, 170, 214, 152, 232, 108, 44, 249,
+ 161, 2, 247, 120, 214, 160, 43, 249, 161, 2, 247, 120, 43, 226, 128, 235,
+ 66, 44, 226, 128, 235, 66, 243, 229, 226, 128, 235, 66, 233, 85, 120,
+ 217, 87, 233, 85, 124, 217, 87, 43, 22, 44, 52, 215, 93, 43, 22, 44, 217,
+ 87, 43, 230, 87, 199, 44, 217, 87, 199, 43, 217, 87, 120, 217, 88, 2,
+ 250, 36, 48, 232, 105, 247, 173, 251, 78, 203, 222, 133, 71, 249, 205,
+ 247, 248, 71, 249, 205, 247, 249, 2, 140, 216, 114, 71, 249, 205, 247,
+ 249, 2, 97, 216, 114, 71, 42, 2, 140, 216, 114, 71, 42, 2, 97, 216, 114,
+ 11, 43, 71, 42, 127, 11, 44, 71, 42, 127, 11, 43, 254, 110, 127, 11, 44,
+ 254, 110, 127, 11, 43, 52, 254, 110, 127, 11, 44, 52, 254, 110, 127, 11,
+ 43, 71, 216, 6, 220, 53, 127, 11, 44, 71, 216, 6, 220, 53, 127, 11, 43,
+ 244, 63, 226, 3, 11, 44, 244, 63, 226, 3, 214, 153, 224, 24, 74, 246,
+ 104, 224, 24, 74, 254, 88, 243, 98, 250, 36, 74, 250, 2, 243, 98, 250,
+ 36, 74, 44, 80, 2, 37, 225, 22, 199, 140, 74, 199, 97, 74, 199, 43, 44,
+ 74, 199, 140, 52, 74, 199, 97, 52, 74, 199, 43, 44, 52, 74, 199, 140, 80,
+ 243, 243, 130, 199, 97, 80, 243, 243, 130, 199, 140, 52, 80, 243, 243,
+ 130, 199, 97, 52, 80, 243, 243, 130, 199, 97, 218, 230, 74, 46, 47, 251,
+ 215, 46, 47, 247, 117, 46, 47, 246, 245, 46, 47, 247, 116, 46, 47, 246,
+ 181, 46, 47, 247, 52, 46, 47, 246, 244, 46, 47, 247, 115, 46, 47, 246,
+ 149, 46, 47, 247, 20, 46, 47, 246, 212, 46, 47, 247, 83, 46, 47, 246,
+ 180, 46, 47, 247, 51, 46, 47, 246, 243, 46, 47, 247, 114, 46, 47, 246,
+ 133, 46, 47, 247, 4, 46, 47, 246, 196, 46, 47, 247, 67, 46, 47, 246, 164,
+ 46, 47, 247, 35, 46, 47, 246, 227, 46, 47, 247, 98, 46, 47, 246, 148, 46,
+ 47, 247, 19, 46, 47, 246, 211, 46, 47, 247, 82, 46, 47, 246, 179, 46, 47,
+ 247, 50, 46, 47, 246, 242, 46, 47, 247, 113, 46, 47, 246, 125, 46, 47,
+ 246, 252, 46, 47, 246, 188, 46, 47, 247, 59, 46, 47, 246, 156, 46, 47,
+ 247, 27, 46, 47, 246, 219, 46, 47, 247, 90, 46, 47, 246, 140, 46, 47,
+ 247, 11, 46, 47, 246, 203, 46, 47, 247, 74, 46, 47, 246, 171, 46, 47,
+ 247, 42, 46, 47, 246, 234, 46, 47, 247, 105, 46, 47, 246, 132, 46, 47,
+ 247, 3, 46, 47, 246, 195, 46, 47, 247, 66, 46, 47, 246, 163, 46, 47, 247,
+ 34, 46, 47, 246, 226, 46, 47, 247, 97, 46, 47, 246, 147, 46, 47, 247, 18,
+ 46, 47, 246, 210, 46, 47, 247, 81, 46, 47, 246, 178, 46, 47, 247, 49, 46,
+ 47, 246, 241, 46, 47, 247, 112, 46, 47, 246, 121, 46, 47, 246, 248, 46,
+ 47, 246, 184, 46, 47, 247, 55, 46, 47, 246, 152, 46, 47, 247, 23, 46, 47,
+ 246, 215, 46, 47, 247, 86, 46, 47, 246, 136, 46, 47, 247, 7, 46, 47, 246,
+ 199, 46, 47, 247, 70, 46, 47, 246, 167, 46, 47, 247, 38, 46, 47, 246,
+ 230, 46, 47, 247, 101, 46, 47, 246, 128, 46, 47, 246, 255, 46, 47, 246,
+ 191, 46, 47, 247, 62, 46, 47, 246, 159, 46, 47, 247, 30, 46, 47, 246,
+ 222, 46, 47, 247, 93, 46, 47, 246, 143, 46, 47, 247, 14, 46, 47, 246,
+ 206, 46, 47, 247, 77, 46, 47, 246, 174, 46, 47, 247, 45, 46, 47, 246,
+ 237, 46, 47, 247, 108, 46, 47, 246, 124, 46, 47, 246, 251, 46, 47, 246,
+ 187, 46, 47, 247, 58, 46, 47, 246, 155, 46, 47, 247, 26, 46, 47, 246,
+ 218, 46, 47, 247, 89, 46, 47, 246, 139, 46, 47, 247, 10, 46, 47, 246,
+ 202, 46, 47, 247, 73, 46, 47, 246, 170, 46, 47, 247, 41, 46, 47, 246,
+ 233, 46, 47, 247, 104, 46, 47, 246, 131, 46, 47, 247, 2, 46, 47, 246,
+ 194, 46, 47, 247, 65, 46, 47, 246, 162, 46, 47, 247, 33, 46, 47, 246,
+ 225, 46, 47, 247, 96, 46, 47, 246, 146, 46, 47, 247, 17, 46, 47, 246,
+ 209, 46, 47, 247, 80, 46, 47, 246, 177, 46, 47, 247, 48, 46, 47, 246,
+ 240, 46, 47, 247, 111, 46, 47, 246, 119, 46, 47, 246, 246, 46, 47, 246,
+ 182, 46, 47, 247, 53, 46, 47, 246, 150, 46, 47, 247, 21, 46, 47, 246,
+ 213, 46, 47, 247, 84, 46, 47, 246, 134, 46, 47, 247, 5, 46, 47, 246, 197,
+ 46, 47, 247, 68, 46, 47, 246, 165, 46, 47, 247, 36, 46, 47, 246, 228, 46,
+ 47, 247, 99, 46, 47, 246, 126, 46, 47, 246, 253, 46, 47, 246, 189, 46,
+ 47, 247, 60, 46, 47, 246, 157, 46, 47, 247, 28, 46, 47, 246, 220, 46, 47,
+ 247, 91, 46, 47, 246, 141, 46, 47, 247, 12, 46, 47, 246, 204, 46, 47,
+ 247, 75, 46, 47, 246, 172, 46, 47, 247, 43, 46, 47, 246, 235, 46, 47,
+ 247, 106, 46, 47, 246, 122, 46, 47, 246, 249, 46, 47, 246, 185, 46, 47,
+ 247, 56, 46, 47, 246, 153, 46, 47, 247, 24, 46, 47, 246, 216, 46, 47,
+ 247, 87, 46, 47, 246, 137, 46, 47, 247, 8, 46, 47, 246, 200, 46, 47, 247,
+ 71, 46, 47, 246, 168, 46, 47, 247, 39, 46, 47, 246, 231, 46, 47, 247,
+ 102, 46, 47, 246, 129, 46, 47, 247, 0, 46, 47, 246, 192, 46, 47, 247, 63,
+ 46, 47, 246, 160, 46, 47, 247, 31, 46, 47, 246, 223, 46, 47, 247, 94, 46,
+ 47, 246, 144, 46, 47, 247, 15, 46, 47, 246, 207, 46, 47, 247, 78, 46, 47,
+ 246, 175, 46, 47, 247, 46, 46, 47, 246, 238, 46, 47, 247, 109, 46, 47,
+ 246, 120, 46, 47, 246, 247, 46, 47, 246, 183, 46, 47, 247, 54, 46, 47,
+ 246, 151, 46, 47, 247, 22, 46, 47, 246, 214, 46, 47, 247, 85, 46, 47,
+ 246, 135, 46, 47, 247, 6, 46, 47, 246, 198, 46, 47, 247, 69, 46, 47, 246,
+ 166, 46, 47, 247, 37, 46, 47, 246, 229, 46, 47, 247, 100, 46, 47, 246,
+ 127, 46, 47, 246, 254, 46, 47, 246, 190, 46, 47, 247, 61, 46, 47, 246,
+ 158, 46, 47, 247, 29, 46, 47, 246, 221, 46, 47, 247, 92, 46, 47, 246,
+ 142, 46, 47, 247, 13, 46, 47, 246, 205, 46, 47, 247, 76, 46, 47, 246,
+ 173, 46, 47, 247, 44, 46, 47, 246, 236, 46, 47, 247, 107, 46, 47, 246,
+ 123, 46, 47, 246, 250, 46, 47, 246, 186, 46, 47, 247, 57, 46, 47, 246,
+ 154, 46, 47, 247, 25, 46, 47, 246, 217, 46, 47, 247, 88, 46, 47, 246,
+ 138, 46, 47, 247, 9, 46, 47, 246, 201, 46, 47, 247, 72, 46, 47, 246, 169,
+ 46, 47, 247, 40, 46, 47, 246, 232, 46, 47, 247, 103, 46, 47, 246, 130,
+ 46, 47, 247, 1, 46, 47, 246, 193, 46, 47, 247, 64, 46, 47, 246, 161, 46,
+ 47, 247, 32, 46, 47, 246, 224, 46, 47, 247, 95, 46, 47, 246, 145, 46, 47,
+ 247, 16, 46, 47, 246, 208, 46, 47, 247, 79, 46, 47, 246, 176, 46, 47,
+ 247, 47, 46, 47, 246, 239, 46, 47, 247, 110, 97, 215, 58, 80, 2, 67, 91,
+ 97, 215, 58, 80, 2, 52, 67, 91, 140, 52, 80, 2, 67, 91, 97, 52, 80, 2,
+ 67, 91, 43, 44, 52, 80, 2, 67, 91, 97, 215, 58, 80, 243, 243, 130, 140,
+ 52, 80, 243, 243, 130, 97, 52, 80, 243, 243, 130, 246, 104, 80, 2, 203,
+ 91, 214, 153, 80, 2, 203, 91, 214, 153, 215, 211, 74, 246, 104, 215, 211,
+ 74, 140, 52, 248, 157, 74, 97, 52, 248, 157, 74, 140, 215, 211, 248, 157,
+ 74, 97, 215, 211, 248, 157, 74, 97, 215, 58, 215, 211, 248, 157, 74, 97,
+ 80, 2, 246, 118, 218, 139, 214, 153, 80, 216, 42, 130, 246, 104, 80, 216,
+ 42, 130, 97, 80, 2, 217, 78, 2, 67, 91, 97, 80, 2, 217, 78, 2, 52, 67,
+ 91, 97, 215, 58, 80, 2, 217, 77, 97, 215, 58, 80, 2, 217, 78, 2, 67, 91,
+ 97, 215, 58, 80, 2, 217, 78, 2, 52, 67, 91, 140, 253, 251, 97, 253, 251,
+ 140, 52, 253, 251, 97, 52, 253, 251, 140, 80, 216, 42, 85, 247, 248, 97,
+ 80, 216, 42, 85, 247, 248, 140, 80, 243, 243, 252, 141, 216, 42, 85, 247,
+ 248, 97, 80, 243, 243, 252, 141, 216, 42, 85, 247, 248, 228, 56, 212, 9,
+ 22, 219, 28, 245, 220, 74, 228, 56, 245, 220, 22, 219, 28, 212, 9, 74,
+ 228, 56, 212, 9, 80, 2, 103, 228, 56, 245, 220, 80, 2, 103, 219, 28, 245,
+ 220, 80, 2, 103, 219, 28, 212, 9, 80, 2, 103, 228, 56, 212, 9, 80, 22,
+ 228, 56, 245, 220, 74, 228, 56, 245, 220, 80, 22, 219, 28, 245, 220, 74,
+ 219, 28, 245, 220, 80, 22, 219, 28, 212, 9, 74, 219, 28, 212, 9, 80, 22,
+ 228, 56, 212, 9, 74, 222, 228, 247, 255, 249, 125, 244, 175, 247, 254,
+ 244, 175, 247, 255, 249, 125, 222, 228, 247, 254, 219, 28, 245, 220, 80,
+ 249, 125, 228, 56, 245, 220, 74, 228, 56, 245, 220, 80, 249, 125, 219,
+ 28, 245, 220, 74, 244, 175, 247, 255, 249, 125, 228, 56, 245, 220, 74,
+ 222, 228, 247, 255, 249, 125, 219, 28, 245, 220, 74, 228, 56, 245, 220,
+ 80, 249, 125, 228, 56, 212, 9, 74, 228, 56, 212, 9, 80, 249, 125, 228,
+ 56, 245, 220, 74, 212, 36, 80, 225, 7, 247, 195, 222, 251, 80, 225, 7,
+ 97, 216, 188, 249, 90, 214, 152, 80, 225, 7, 97, 216, 188, 249, 90, 246,
+ 103, 80, 225, 7, 246, 104, 216, 188, 249, 90, 233, 37, 80, 225, 7, 246,
+ 104, 216, 188, 249, 90, 222, 241, 222, 244, 254, 26, 250, 2, 74, 233, 40,
+ 254, 26, 254, 88, 74, 216, 14, 254, 26, 254, 88, 74, 251, 175, 254, 26,
+ 254, 88, 74, 216, 14, 254, 26, 250, 2, 80, 2, 230, 181, 216, 14, 254, 26,
+ 254, 88, 80, 2, 225, 22, 232, 108, 44, 220, 152, 250, 2, 74, 232, 108,
+ 43, 220, 152, 254, 88, 74, 254, 88, 250, 0, 250, 36, 74, 250, 2, 250, 0,
+ 250, 36, 74, 97, 80, 77, 219, 251, 140, 74, 140, 80, 77, 219, 251, 97,
+ 74, 219, 251, 97, 80, 77, 140, 74, 97, 80, 2, 96, 51, 140, 80, 2, 96, 51,
+ 97, 80, 216, 139, 211, 178, 43, 44, 80, 216, 139, 4, 250, 35, 214, 153,
+ 215, 58, 80, 243, 243, 4, 250, 35, 43, 252, 139, 120, 44, 252, 139, 124,
+ 241, 254, 43, 252, 139, 124, 44, 252, 139, 120, 241, 254, 120, 252, 139,
+ 44, 124, 252, 139, 43, 241, 254, 120, 252, 139, 43, 124, 252, 139, 44,
+ 241, 254, 43, 252, 139, 120, 44, 252, 139, 120, 241, 254, 120, 252, 139,
+ 44, 124, 252, 139, 44, 241, 254, 43, 252, 139, 124, 44, 252, 139, 124,
+ 241, 254, 120, 252, 139, 43, 124, 252, 139, 43, 241, 254, 140, 241, 255,
+ 2, 252, 139, 120, 216, 42, 130, 97, 241, 255, 2, 252, 139, 120, 216, 42,
+ 130, 214, 153, 241, 255, 2, 252, 139, 44, 216, 42, 130, 246, 104, 241,
+ 255, 2, 252, 139, 44, 216, 42, 130, 140, 241, 255, 2, 252, 139, 124, 216,
+ 42, 130, 97, 241, 255, 2, 252, 139, 124, 216, 42, 130, 214, 153, 241,
+ 255, 2, 252, 139, 43, 216, 42, 130, 246, 104, 241, 255, 2, 252, 139, 43,
+ 216, 42, 130, 140, 241, 255, 2, 252, 139, 120, 243, 243, 130, 97, 241,
+ 255, 2, 252, 139, 120, 243, 243, 130, 214, 153, 241, 255, 2, 252, 139,
+ 44, 243, 243, 130, 246, 104, 241, 255, 2, 252, 139, 44, 243, 243, 130,
+ 140, 241, 255, 2, 252, 139, 124, 243, 243, 130, 97, 241, 255, 2, 252,
+ 139, 124, 243, 243, 130, 214, 153, 241, 255, 2, 252, 139, 43, 243, 243,
+ 130, 246, 104, 241, 255, 2, 252, 139, 43, 243, 243, 130, 140, 241, 255,
+ 2, 252, 139, 120, 77, 140, 241, 255, 2, 252, 139, 246, 106, 214, 153,
+ 241, 255, 2, 252, 139, 43, 252, 30, 214, 153, 241, 255, 2, 252, 139, 222,
+ 251, 97, 241, 255, 2, 252, 139, 120, 77, 97, 241, 255, 2, 252, 139, 246,
+ 106, 246, 104, 241, 255, 2, 252, 139, 43, 252, 30, 246, 104, 241, 255, 2,
+ 252, 139, 222, 251, 140, 241, 255, 2, 252, 139, 120, 77, 97, 241, 255, 2,
+ 252, 139, 214, 163, 140, 241, 255, 2, 252, 139, 124, 77, 97, 241, 255, 2,
+ 252, 139, 246, 106, 97, 241, 255, 2, 252, 139, 120, 77, 140, 241, 255, 2,
+ 252, 139, 214, 163, 97, 241, 255, 2, 252, 139, 124, 77, 140, 241, 255, 2,
+ 252, 139, 246, 106, 140, 241, 255, 2, 252, 139, 120, 77, 199, 248, 156,
+ 140, 241, 255, 2, 252, 139, 124, 252, 43, 199, 248, 156, 97, 241, 255, 2,
+ 252, 139, 120, 77, 199, 248, 156, 97, 241, 255, 2, 252, 139, 124, 252,
+ 43, 199, 248, 156, 214, 153, 241, 255, 2, 252, 139, 43, 252, 30, 246,
+ 104, 241, 255, 2, 252, 139, 222, 251, 246, 104, 241, 255, 2, 252, 139,
+ 43, 252, 30, 214, 153, 241, 255, 2, 252, 139, 222, 251, 44, 52, 80, 2,
+ 222, 183, 241, 235, 245, 98, 5, 77, 97, 74, 216, 89, 226, 168, 77, 97,
+ 74, 140, 80, 77, 216, 89, 226, 167, 97, 80, 77, 216, 89, 226, 167, 97,
+ 80, 77, 254, 148, 128, 111, 233, 15, 77, 140, 74, 140, 80, 216, 139, 233,
+ 14, 242, 130, 77, 97, 74, 218, 64, 77, 97, 74, 140, 80, 216, 139, 218,
+ 63, 218, 22, 77, 140, 74, 43, 244, 91, 217, 77, 44, 244, 91, 217, 77,
+ 120, 244, 91, 217, 77, 124, 244, 91, 217, 77, 215, 211, 67, 252, 141,
+ 248, 60, 210, 160, 187, 218, 242, 210, 160, 187, 215, 49, 249, 226, 43,
+ 71, 249, 99, 127, 44, 71, 249, 99, 127, 43, 71, 226, 3, 44, 71, 226, 3,
+ 210, 160, 187, 43, 236, 15, 127, 210, 160, 187, 44, 236, 15, 127, 210,
+ 160, 187, 43, 251, 242, 127, 210, 160, 187, 44, 251, 242, 127, 43, 42,
+ 251, 158, 2, 214, 183, 44, 42, 251, 158, 2, 214, 183, 43, 42, 251, 158,
+ 2, 216, 115, 236, 0, 216, 14, 249, 160, 44, 42, 251, 158, 2, 216, 115,
+ 236, 0, 251, 175, 249, 160, 43, 42, 251, 158, 2, 216, 115, 236, 0, 251,
+ 175, 249, 160, 44, 42, 251, 158, 2, 216, 115, 236, 0, 216, 14, 249, 160,
+ 43, 254, 110, 251, 158, 2, 247, 120, 44, 254, 110, 251, 158, 2, 247, 120,
+ 43, 254, 26, 233, 15, 127, 44, 254, 26, 242, 130, 127, 52, 43, 254, 26,
+ 242, 130, 127, 52, 44, 254, 26, 233, 15, 127, 43, 85, 216, 6, 220, 53,
+ 127, 44, 85, 216, 6, 220, 53, 127, 246, 118, 244, 135, 67, 210, 35, 232,
+ 213, 231, 88, 254, 110, 226, 170, 233, 46, 44, 254, 110, 214, 12, 2, 218,
+ 234, 231, 88, 44, 254, 110, 2, 247, 120, 254, 110, 2, 222, 92, 235, 215,
+ 255, 3, 254, 109, 218, 255, 254, 110, 226, 170, 233, 46, 218, 255, 254,
+ 110, 226, 170, 214, 163, 215, 94, 254, 109, 223, 49, 254, 109, 254, 110,
+ 2, 214, 183, 223, 49, 254, 110, 2, 214, 183, 226, 248, 254, 110, 226,
+ 170, 214, 163, 226, 248, 254, 110, 226, 170, 246, 106, 231, 88, 254, 110,
+ 2, 204, 254, 5, 245, 140, 236, 0, 80, 225, 7, 120, 22, 222, 251, 231, 88,
+ 254, 110, 2, 204, 254, 5, 245, 140, 236, 0, 80, 225, 7, 120, 22, 233, 46,
+ 231, 88, 254, 110, 2, 204, 254, 5, 245, 140, 236, 0, 80, 225, 7, 124, 22,
+ 222, 251, 231, 88, 254, 110, 2, 204, 254, 5, 245, 140, 236, 0, 80, 225,
+ 7, 124, 22, 233, 46, 231, 88, 254, 110, 2, 204, 254, 5, 245, 140, 236, 0,
+ 80, 225, 7, 44, 22, 214, 163, 231, 88, 254, 110, 2, 204, 254, 5, 245,
+ 140, 236, 0, 80, 225, 7, 43, 22, 214, 163, 231, 88, 254, 110, 2, 204,
+ 254, 5, 245, 140, 236, 0, 80, 225, 7, 44, 22, 246, 106, 231, 88, 254,
+ 110, 2, 204, 254, 5, 245, 140, 236, 0, 80, 225, 7, 43, 22, 246, 106, 223,
+ 49, 245, 152, 220, 127, 245, 152, 220, 128, 2, 226, 123, 245, 152, 220,
+ 128, 2, 4, 250, 36, 48, 245, 152, 220, 128, 2, 44, 80, 48, 245, 152, 220,
+ 128, 2, 43, 80, 48, 250, 36, 2, 203, 130, 37, 67, 130, 37, 226, 7, 37,
+ 223, 50, 219, 46, 37, 225, 171, 250, 36, 247, 173, 251, 78, 203, 252,
+ 141, 22, 216, 14, 163, 247, 173, 251, 78, 67, 130, 250, 36, 2, 218, 24,
+ 211, 178, 37, 254, 87, 247, 169, 50, 120, 80, 216, 139, 250, 35, 37, 71,
+ 251, 113, 37, 251, 113, 37, 233, 14, 37, 242, 129, 250, 36, 2, 4, 250,
+ 36, 216, 42, 216, 196, 222, 251, 250, 36, 2, 113, 203, 218, 91, 216, 42,
+ 216, 196, 222, 251, 92, 222, 228, 247, 255, 219, 95, 92, 244, 175, 247,
+ 255, 219, 95, 92, 253, 216, 92, 4, 250, 35, 92, 218, 234, 113, 235, 65,
+ 218, 232, 215, 226, 2, 59, 48, 215, 226, 2, 214, 183, 222, 92, 236, 0,
+ 215, 225, 215, 226, 2, 220, 134, 253, 207, 251, 174, 44, 215, 226, 77,
+ 43, 215, 225, 43, 215, 226, 252, 30, 67, 130, 67, 252, 141, 252, 30, 44,
+ 215, 225, 251, 165, 2, 43, 163, 251, 221, 251, 165, 2, 44, 163, 251, 221,
+ 85, 251, 164, 30, 2, 43, 163, 251, 221, 30, 2, 44, 163, 251, 221, 71,
+ 240, 236, 85, 240, 236, 43, 211, 244, 244, 135, 44, 211, 244, 244, 135,
+ 43, 52, 211, 244, 244, 135, 44, 52, 211, 244, 244, 135, 235, 248, 235,
+ 234, 216, 112, 117, 235, 234, 235, 235, 229, 102, 2, 67, 130, 246, 112,
+ 230, 87, 42, 2, 249, 181, 226, 127, 235, 246, 253, 237, 219, 219, 224,
+ 180, 245, 98, 5, 22, 219, 97, 226, 7, 245, 98, 5, 22, 219, 97, 226, 8, 2,
+ 216, 89, 48, 240, 104, 216, 42, 22, 219, 97, 226, 7, 242, 183, 218, 155,
+ 216, 185, 246, 105, 215, 226, 2, 43, 163, 251, 221, 246, 105, 215, 226,
+ 2, 44, 163, 251, 221, 85, 247, 249, 2, 124, 74, 85, 232, 104, 71, 250,
+ 36, 2, 124, 74, 85, 250, 36, 2, 124, 74, 245, 85, 71, 218, 234, 245, 85,
+ 85, 218, 234, 245, 85, 71, 247, 248, 245, 85, 85, 247, 248, 245, 85, 71,
+ 250, 35, 245, 85, 85, 250, 35, 222, 132, 223, 50, 219, 47, 226, 167, 219,
+ 47, 2, 226, 123, 223, 50, 219, 47, 2, 203, 91, 251, 249, 219, 46, 251,
+ 249, 223, 50, 219, 46, 52, 225, 22, 215, 211, 225, 22, 233, 42, 249, 91,
+ 254, 110, 127, 222, 247, 249, 91, 254, 110, 127, 216, 78, 230, 179, 230,
+ 24, 37, 59, 226, 167, 230, 24, 37, 96, 226, 167, 230, 24, 37, 30, 226,
+ 167, 230, 24, 214, 176, 226, 168, 2, 247, 120, 230, 24, 214, 176, 226,
+ 168, 2, 225, 22, 230, 24, 42, 235, 199, 226, 167, 230, 24, 42, 214, 176,
+ 226, 167, 113, 232, 146, 22, 226, 167, 113, 232, 146, 177, 226, 167, 230,
+ 24, 30, 226, 167, 230, 154, 113, 218, 43, 218, 41, 2, 235, 211, 224, 24,
+ 235, 212, 226, 167, 244, 99, 225, 255, 235, 211, 235, 212, 2, 52, 91,
+ 235, 212, 253, 173, 2, 219, 95, 250, 32, 243, 226, 254, 88, 235, 209,
+ 232, 214, 235, 210, 2, 223, 115, 225, 237, 254, 2, 225, 1, 232, 214, 235,
+ 210, 2, 220, 152, 225, 237, 254, 2, 225, 1, 232, 214, 235, 210, 228, 52,
+ 235, 250, 216, 196, 225, 1, 235, 212, 254, 2, 115, 225, 11, 226, 167,
+ 224, 18, 235, 212, 226, 167, 235, 212, 2, 140, 80, 2, 103, 235, 212, 2,
+ 30, 50, 235, 212, 2, 235, 198, 235, 212, 2, 214, 175, 235, 212, 2, 226,
+ 123, 235, 212, 2, 214, 183, 235, 66, 233, 85, 43, 215, 226, 226, 167,
+ 210, 160, 187, 221, 201, 249, 209, 210, 160, 187, 221, 201, 225, 56, 210,
+ 160, 187, 221, 201, 224, 176, 96, 5, 2, 4, 250, 36, 48, 96, 5, 2, 250,
+ 31, 255, 15, 48, 96, 5, 2, 216, 89, 48, 96, 5, 2, 59, 51, 96, 5, 2, 216,
+ 89, 51, 96, 5, 2, 218, 65, 105, 96, 5, 2, 85, 215, 225, 230, 182, 5, 2,
+ 249, 220, 48, 230, 182, 5, 2, 59, 51, 230, 182, 5, 2, 244, 175, 247, 118,
+ 230, 182, 5, 2, 222, 228, 247, 118, 96, 5, 236, 0, 43, 163, 250, 35, 96,
+ 5, 236, 0, 44, 163, 250, 35, 213, 254, 177, 249, 131, 224, 180, 230, 84,
+ 5, 2, 59, 48, 230, 84, 5, 2, 214, 183, 220, 149, 224, 181, 2, 251, 175,
+ 249, 255, 219, 77, 224, 180, 230, 84, 5, 236, 0, 43, 163, 250, 35, 230,
+ 84, 5, 236, 0, 44, 163, 250, 35, 37, 230, 84, 5, 2, 250, 31, 255, 14,
+ 230, 84, 5, 236, 0, 52, 250, 35, 37, 247, 169, 50, 96, 5, 236, 0, 215,
+ 225, 230, 182, 5, 236, 0, 215, 225, 230, 84, 5, 236, 0, 215, 225, 235,
+ 206, 224, 180, 222, 242, 235, 206, 224, 180, 210, 160, 187, 223, 90, 249,
+ 209, 254, 134, 177, 249, 165, 235, 199, 2, 247, 120, 214, 176, 2, 230,
+ 182, 50, 214, 176, 2, 226, 123, 235, 199, 2, 226, 123, 235, 199, 2, 232,
+ 146, 254, 118, 214, 176, 2, 232, 146, 226, 158, 214, 176, 77, 235, 198,
+ 235, 199, 77, 214, 175, 214, 176, 77, 252, 141, 77, 235, 198, 235, 199,
+ 77, 252, 141, 77, 214, 175, 214, 176, 252, 30, 22, 235, 65, 2, 214, 175,
+ 235, 199, 252, 30, 22, 235, 65, 2, 235, 198, 250, 0, 214, 176, 2, 220,
+ 133, 250, 0, 235, 199, 2, 220, 133, 52, 42, 235, 198, 52, 42, 214, 175,
+ 250, 0, 214, 176, 2, 220, 134, 22, 219, 77, 224, 180, 232, 146, 22, 2,
+ 59, 48, 232, 146, 177, 2, 59, 48, 52, 232, 146, 254, 118, 52, 232, 146,
+ 226, 158, 113, 235, 200, 232, 146, 254, 118, 113, 235, 200, 232, 146,
+ 226, 158, 219, 85, 233, 85, 226, 158, 219, 85, 233, 85, 254, 118, 232,
+ 146, 177, 226, 121, 232, 146, 254, 118, 232, 146, 22, 2, 230, 224, 218,
+ 139, 232, 146, 177, 2, 230, 224, 218, 139, 232, 146, 22, 2, 203, 248,
+ 156, 232, 146, 177, 2, 203, 248, 156, 232, 146, 22, 2, 52, 226, 123, 232,
+ 146, 22, 2, 214, 183, 232, 146, 22, 2, 52, 214, 183, 4, 213, 251, 2, 214,
+ 183, 232, 146, 177, 2, 52, 226, 123, 232, 146, 177, 2, 52, 214, 183, 210,
+ 160, 187, 247, 129, 254, 79, 210, 160, 187, 223, 148, 254, 79, 245, 98,
+ 5, 2, 59, 51, 240, 104, 2, 59, 48, 215, 211, 203, 252, 141, 2, 52, 67,
+ 91, 215, 211, 203, 252, 141, 2, 215, 211, 67, 91, 216, 89, 226, 168, 2,
+ 59, 48, 216, 89, 226, 168, 2, 222, 228, 247, 118, 219, 162, 230, 182,
+ 219, 161, 249, 199, 2, 59, 48, 245, 98, 2, 253, 216, 254, 148, 128, 216,
+ 42, 2, 250, 31, 255, 14, 254, 48, 128, 177, 128, 111, 245, 98, 5, 77, 96,
+ 50, 96, 5, 77, 245, 98, 50, 245, 98, 5, 77, 216, 89, 226, 167, 52, 249,
+ 227, 245, 99, 113, 249, 194, 245, 98, 219, 176, 134, 249, 194, 245, 98,
+ 219, 176, 245, 98, 5, 2, 113, 170, 77, 22, 113, 170, 51, 245, 94, 2, 244,
+ 11, 170, 48, 233, 15, 2, 250, 36, 235, 215, 242, 130, 2, 250, 36, 235,
+ 215, 233, 15, 2, 224, 13, 164, 48, 242, 130, 2, 224, 13, 164, 48, 233,
+ 15, 177, 219, 97, 128, 111, 242, 130, 177, 219, 97, 128, 111, 233, 15,
+ 177, 219, 97, 128, 216, 42, 2, 59, 235, 215, 242, 130, 177, 219, 97, 128,
+ 216, 42, 2, 59, 235, 215, 233, 15, 177, 219, 97, 128, 216, 42, 2, 59, 48,
+ 242, 130, 177, 219, 97, 128, 216, 42, 2, 59, 48, 233, 15, 177, 219, 97,
+ 128, 216, 42, 2, 59, 77, 222, 251, 242, 130, 177, 219, 97, 128, 216, 42,
+ 2, 59, 77, 233, 46, 233, 15, 177, 254, 49, 242, 130, 177, 254, 49, 233,
+ 15, 22, 219, 153, 228, 52, 128, 111, 242, 130, 22, 219, 153, 228, 52,
+ 128, 111, 233, 15, 22, 228, 52, 254, 49, 242, 130, 22, 228, 52, 254, 49,
+ 233, 15, 77, 246, 111, 128, 77, 242, 129, 242, 130, 77, 246, 111, 128,
+ 77, 233, 14, 233, 15, 77, 219, 162, 177, 245, 99, 242, 130, 77, 219, 162,
+ 177, 245, 99, 233, 15, 77, 219, 162, 77, 242, 129, 242, 130, 77, 219,
+ 162, 77, 233, 14, 233, 15, 77, 242, 130, 77, 246, 111, 245, 99, 242, 130,
+ 77, 233, 15, 77, 246, 111, 245, 99, 233, 15, 77, 219, 97, 128, 77, 242,
+ 130, 77, 219, 97, 245, 99, 242, 130, 77, 219, 97, 128, 77, 233, 15, 77,
+ 219, 97, 245, 99, 219, 97, 128, 216, 42, 177, 233, 14, 219, 97, 128, 216,
+ 42, 177, 242, 129, 219, 97, 128, 216, 42, 177, 233, 15, 2, 59, 235, 215,
+ 219, 97, 128, 216, 42, 177, 242, 130, 2, 59, 235, 215, 246, 111, 128,
+ 216, 42, 177, 233, 14, 246, 111, 128, 216, 42, 177, 242, 129, 246, 111,
+ 219, 97, 128, 216, 42, 177, 233, 14, 246, 111, 219, 97, 128, 216, 42,
+ 177, 242, 129, 219, 162, 177, 233, 14, 219, 162, 177, 242, 129, 219, 162,
+ 77, 233, 15, 77, 245, 98, 50, 219, 162, 77, 242, 130, 77, 245, 98, 50,
+ 52, 229, 91, 233, 14, 52, 229, 91, 242, 129, 52, 229, 91, 233, 15, 2,
+ 214, 183, 242, 130, 226, 121, 233, 14, 242, 130, 252, 30, 233, 14, 233,
+ 15, 250, 0, 251, 78, 249, 92, 242, 130, 250, 0, 251, 78, 249, 92, 233,
+ 15, 250, 0, 251, 78, 249, 93, 77, 219, 97, 245, 99, 242, 130, 250, 0,
+ 251, 78, 249, 93, 77, 219, 97, 245, 99, 219, 78, 216, 200, 233, 83, 216,
+ 200, 219, 78, 216, 201, 177, 128, 111, 233, 83, 216, 201, 177, 128, 111,
+ 245, 98, 5, 2, 251, 108, 48, 224, 203, 77, 219, 153, 245, 98, 50, 218,
+ 56, 77, 219, 153, 245, 98, 50, 224, 203, 77, 219, 153, 228, 52, 128, 111,
+ 218, 56, 77, 219, 153, 228, 52, 128, 111, 224, 203, 77, 245, 98, 50, 218,
+ 56, 77, 245, 98, 50, 224, 203, 77, 228, 52, 128, 111, 218, 56, 77, 228,
+ 52, 128, 111, 224, 203, 77, 254, 148, 128, 111, 218, 56, 77, 254, 148,
+ 128, 111, 224, 203, 77, 228, 52, 254, 148, 128, 111, 218, 56, 77, 228,
+ 52, 254, 148, 128, 111, 52, 224, 202, 52, 218, 55, 218, 64, 2, 247, 120,
+ 218, 22, 2, 247, 120, 218, 64, 2, 96, 5, 51, 218, 22, 2, 96, 5, 51, 218,
+ 64, 2, 230, 84, 5, 51, 218, 22, 2, 230, 84, 5, 51, 218, 64, 64, 177, 128,
+ 216, 42, 2, 59, 48, 218, 22, 64, 177, 128, 216, 42, 2, 59, 48, 218, 64,
+ 64, 77, 245, 98, 50, 218, 22, 64, 77, 245, 98, 50, 218, 64, 64, 77, 216,
+ 89, 226, 167, 218, 22, 64, 77, 216, 89, 226, 167, 218, 64, 64, 77, 254,
+ 148, 128, 111, 218, 22, 64, 77, 254, 148, 128, 111, 218, 64, 64, 77, 228,
+ 52, 128, 111, 218, 22, 64, 77, 228, 52, 128, 111, 42, 43, 204, 93, 226,
+ 167, 42, 44, 204, 93, 226, 167, 250, 0, 218, 63, 250, 0, 218, 21, 250, 0,
+ 218, 64, 177, 128, 111, 250, 0, 218, 22, 177, 128, 111, 218, 64, 77, 218,
+ 21, 218, 22, 77, 218, 63, 218, 64, 77, 218, 63, 218, 22, 77, 218, 21,
+ 218, 22, 252, 30, 218, 63, 218, 22, 252, 30, 22, 235, 65, 251, 78, 248,
+ 157, 2, 218, 63, 245, 170, 64, 226, 170, 246, 103, 225, 48, 2, 217, 12,
+ 216, 13, 215, 240, 235, 198, 244, 21, 228, 65, 219, 251, 43, 217, 87,
+ 219, 251, 124, 217, 87, 219, 251, 120, 217, 87, 225, 172, 2, 222, 91, 67,
+ 252, 141, 215, 211, 44, 215, 93, 52, 67, 252, 141, 43, 215, 93, 67, 252,
+ 141, 52, 43, 215, 93, 52, 67, 252, 141, 52, 43, 215, 93, 199, 248, 157,
+ 243, 243, 43, 231, 63, 64, 52, 213, 239, 219, 251, 124, 217, 88, 2, 226,
+ 123, 219, 251, 120, 217, 88, 2, 214, 183, 219, 251, 120, 217, 88, 77,
+ 219, 251, 124, 217, 87, 52, 124, 217, 87, 52, 120, 217, 87, 52, 218, 103,
+ 228, 52, 50, 223, 49, 52, 218, 103, 228, 52, 50, 247, 138, 228, 52, 247,
+ 175, 2, 223, 49, 229, 101, 219, 95, 67, 232, 214, 2, 250, 36, 48, 67,
+ 232, 214, 2, 250, 36, 51, 124, 217, 88, 2, 250, 36, 51, 226, 8, 2, 203,
+ 91, 226, 8, 2, 216, 89, 226, 167, 215, 211, 67, 252, 141, 251, 244, 223,
+ 91, 215, 211, 67, 252, 141, 2, 203, 91, 215, 211, 249, 227, 226, 167,
+ 215, 211, 229, 91, 233, 14, 215, 211, 229, 91, 242, 129, 246, 111, 219,
+ 97, 233, 15, 177, 128, 111, 246, 111, 219, 97, 242, 130, 177, 128, 111,
+ 215, 211, 219, 47, 251, 244, 223, 91, 233, 85, 215, 211, 67, 252, 141,
+ 226, 167, 52, 219, 47, 226, 167, 71, 67, 130, 230, 24, 71, 67, 130, 228,
+ 56, 245, 220, 71, 74, 228, 56, 212, 9, 71, 74, 219, 28, 245, 220, 71, 74,
+ 219, 28, 212, 9, 71, 74, 43, 44, 71, 74, 140, 85, 74, 214, 153, 85, 74,
+ 246, 104, 85, 74, 228, 56, 245, 220, 85, 74, 228, 56, 212, 9, 85, 74,
+ 219, 28, 245, 220, 85, 74, 219, 28, 212, 9, 85, 74, 43, 44, 85, 74, 120,
+ 124, 85, 74, 97, 80, 2, 216, 77, 246, 103, 97, 80, 2, 216, 77, 214, 152,
+ 140, 80, 2, 216, 77, 246, 103, 140, 80, 2, 216, 77, 214, 152, 42, 2, 216,
+ 14, 163, 251, 221, 42, 2, 251, 175, 163, 251, 221, 42, 2, 214, 160, 44,
+ 247, 255, 163, 251, 221, 42, 2, 232, 108, 43, 247, 255, 163, 251, 221,
+ 247, 249, 2, 43, 163, 251, 221, 247, 249, 2, 44, 163, 251, 221, 247, 249,
+ 2, 216, 14, 163, 251, 221, 247, 249, 2, 251, 175, 163, 251, 221, 246,
+ 118, 218, 234, 85, 233, 85, 218, 234, 71, 233, 85, 218, 234, 85, 213,
+ 187, 4, 218, 234, 71, 213, 187, 4, 218, 234, 85, 225, 190, 71, 225, 190,
+ 71, 241, 193, 85, 241, 193, 203, 85, 241, 193, 85, 233, 85, 250, 35, 85,
+ 231, 82, 247, 248, 71, 231, 82, 247, 248, 85, 231, 82, 232, 104, 71, 231,
+ 82, 232, 104, 85, 4, 247, 248, 85, 4, 232, 104, 71, 4, 232, 104, 85, 203,
+ 245, 164, 71, 203, 245, 164, 85, 67, 245, 164, 71, 67, 245, 164, 43, 80,
+ 2, 4, 250, 35, 134, 140, 253, 247, 43, 80, 2, 37, 225, 22, 199, 140, 218,
+ 230, 74, 140, 215, 58, 80, 2, 67, 91, 140, 215, 58, 80, 2, 52, 67, 91,
+ 140, 215, 58, 80, 243, 243, 130, 140, 215, 58, 215, 211, 248, 157, 74,
+ 140, 80, 2, 246, 118, 218, 139, 140, 80, 2, 217, 78, 2, 67, 91, 140, 80,
+ 2, 217, 78, 2, 52, 67, 91, 140, 215, 58, 80, 2, 217, 77, 140, 215, 58,
+ 80, 2, 217, 78, 2, 67, 91, 140, 215, 58, 80, 2, 217, 78, 2, 52, 67, 91,
+ 140, 80, 216, 139, 211, 178, 212, 36, 80, 225, 7, 247, 195, 233, 46, 245,
+ 98, 5, 77, 140, 74, 223, 50, 216, 89, 226, 168, 77, 140, 74, 140, 80, 77,
+ 223, 50, 254, 148, 128, 111, 97, 80, 216, 139, 242, 129, 97, 80, 216,
+ 139, 218, 21, 140, 224, 24, 74, 97, 224, 24, 74, 223, 50, 216, 89, 226,
+ 168, 77, 97, 74, 97, 80, 77, 223, 50, 254, 148, 128, 111, 216, 89, 226,
+ 168, 77, 140, 74, 140, 80, 77, 254, 148, 128, 111, 140, 80, 77, 223, 50,
+ 216, 89, 226, 167, 97, 80, 77, 223, 50, 216, 89, 226, 167, 71, 231, 82,
+ 218, 156, 85, 4, 218, 156, 71, 4, 218, 156, 85, 222, 247, 225, 190, 71,
+ 222, 247, 225, 190, 114, 233, 85, 250, 35, 114, 226, 124, 2, 226, 124,
+ 235, 215, 114, 250, 36, 2, 250, 36, 235, 215, 114, 250, 35, 114, 37, 221,
+ 254, 145, 6, 1, 253, 159, 145, 6, 1, 251, 117, 145, 6, 1, 213, 253, 145,
+ 6, 1, 242, 185, 145, 6, 1, 247, 140, 145, 6, 1, 211, 21, 145, 6, 1, 210,
+ 68, 145, 6, 1, 246, 34, 145, 6, 1, 210, 91, 145, 6, 1, 235, 148, 145, 6,
+ 1, 65, 235, 148, 145, 6, 1, 73, 145, 6, 1, 247, 160, 145, 6, 1, 234, 240,
+ 145, 6, 1, 232, 186, 145, 6, 1, 230, 29, 145, 6, 1, 229, 191, 145, 6, 1,
+ 226, 185, 145, 6, 1, 225, 4, 145, 6, 1, 222, 227, 145, 6, 1, 219, 83,
+ 145, 6, 1, 215, 81, 145, 6, 1, 214, 201, 145, 6, 1, 243, 246, 145, 6, 1,
+ 241, 199, 145, 6, 1, 226, 135, 145, 6, 1, 225, 221, 145, 6, 1, 219, 228,
+ 145, 6, 1, 215, 167, 145, 6, 1, 250, 75, 145, 6, 1, 220, 102, 145, 6, 1,
+ 211, 27, 145, 6, 1, 211, 29, 145, 6, 1, 211, 57, 145, 6, 1, 218, 253,
+ 162, 145, 6, 1, 210, 212, 145, 6, 1, 4, 210, 183, 145, 6, 1, 4, 210, 184,
+ 2, 217, 77, 145, 6, 1, 210, 244, 145, 6, 1, 235, 184, 4, 210, 183, 145,
+ 6, 1, 251, 249, 210, 183, 145, 6, 1, 235, 184, 251, 249, 210, 183, 145,
+ 6, 1, 244, 82, 145, 6, 1, 235, 146, 145, 6, 1, 219, 227, 145, 6, 1, 215,
+ 202, 61, 145, 6, 1, 233, 75, 230, 29, 145, 4, 1, 253, 159, 145, 4, 1,
+ 251, 117, 145, 4, 1, 213, 253, 145, 4, 1, 242, 185, 145, 4, 1, 247, 140,
+ 145, 4, 1, 211, 21, 145, 4, 1, 210, 68, 145, 4, 1, 246, 34, 145, 4, 1,
+ 210, 91, 145, 4, 1, 235, 148, 145, 4, 1, 65, 235, 148, 145, 4, 1, 73,
+ 145, 4, 1, 247, 160, 145, 4, 1, 234, 240, 145, 4, 1, 232, 186, 145, 4, 1,
+ 230, 29, 145, 4, 1, 229, 191, 145, 4, 1, 226, 185, 145, 4, 1, 225, 4,
+ 145, 4, 1, 222, 227, 145, 4, 1, 219, 83, 145, 4, 1, 215, 81, 145, 4, 1,
+ 214, 201, 145, 4, 1, 243, 246, 145, 4, 1, 241, 199, 145, 4, 1, 226, 135,
+ 145, 4, 1, 225, 221, 145, 4, 1, 219, 228, 145, 4, 1, 215, 167, 145, 4, 1,
+ 250, 75, 145, 4, 1, 220, 102, 145, 4, 1, 211, 27, 145, 4, 1, 211, 29,
+ 145, 4, 1, 211, 57, 145, 4, 1, 218, 253, 162, 145, 4, 1, 210, 212, 145,
+ 4, 1, 4, 210, 183, 145, 4, 1, 4, 210, 184, 2, 217, 77, 145, 4, 1, 210,
+ 244, 145, 4, 1, 235, 184, 4, 210, 183, 145, 4, 1, 251, 249, 210, 183,
+ 145, 4, 1, 235, 184, 251, 249, 210, 183, 145, 4, 1, 244, 82, 145, 4, 1,
+ 235, 146, 145, 4, 1, 219, 227, 145, 4, 1, 215, 202, 61, 145, 4, 1, 233,
+ 75, 230, 29, 7, 6, 1, 233, 149, 2, 52, 130, 7, 4, 1, 233, 149, 2, 52,
+ 130, 7, 6, 1, 233, 149, 2, 230, 224, 182, 7, 6, 1, 226, 106, 2, 91, 7, 6,
+ 1, 223, 224, 2, 217, 77, 7, 4, 1, 115, 2, 91, 7, 4, 1, 217, 153, 2, 247,
+ 255, 91, 7, 6, 1, 242, 61, 2, 248, 39, 7, 4, 1, 242, 61, 2, 248, 39, 7,
+ 6, 1, 235, 24, 2, 248, 39, 7, 4, 1, 235, 24, 2, 248, 39, 7, 6, 1, 210,
+ 160, 2, 248, 39, 7, 4, 1, 210, 160, 2, 248, 39, 7, 6, 1, 254, 143, 7, 6,
+ 1, 232, 50, 2, 103, 7, 6, 1, 215, 94, 61, 7, 6, 1, 215, 94, 254, 143, 7,
+ 4, 1, 214, 106, 2, 44, 103, 7, 6, 1, 212, 99, 2, 103, 7, 4, 1, 212, 99,
+ 2, 103, 7, 4, 1, 214, 106, 2, 249, 100, 7, 6, 1, 163, 242, 60, 7, 4, 1,
+ 163, 242, 60, 7, 4, 1, 217, 75, 225, 133, 7, 4, 1, 160, 2, 228, 50, 7, 4,
+ 1, 215, 94, 223, 224, 2, 217, 77, 7, 4, 1, 144, 2, 121, 222, 234, 235,
+ 215, 7, 1, 4, 6, 215, 94, 75, 7, 218, 65, 4, 1, 235, 144, 58, 1, 6, 214,
+ 105, 7, 6, 1, 222, 92, 2, 217, 250, 217, 77, 7, 6, 1, 210, 160, 2, 217,
+ 250, 217, 77, 81, 6, 1, 254, 164, 81, 4, 1, 254, 164, 81, 6, 1, 213, 173,
+ 81, 4, 1, 213, 173, 81, 6, 1, 243, 107, 81, 4, 1, 243, 107, 81, 6, 1,
+ 248, 191, 81, 4, 1, 248, 191, 81, 6, 1, 245, 194, 81, 4, 1, 245, 194, 81,
+ 6, 1, 219, 33, 81, 4, 1, 219, 33, 81, 6, 1, 210, 101, 81, 4, 1, 210, 101,
+ 81, 6, 1, 241, 248, 81, 4, 1, 241, 248, 81, 6, 1, 216, 177, 81, 4, 1,
+ 216, 177, 81, 6, 1, 240, 116, 81, 4, 1, 240, 116, 81, 6, 1, 234, 227, 81,
+ 4, 1, 234, 227, 81, 6, 1, 233, 72, 81, 4, 1, 233, 72, 81, 6, 1, 230, 230,
+ 81, 4, 1, 230, 230, 81, 6, 1, 228, 233, 81, 4, 1, 228, 233, 81, 6, 1,
+ 233, 233, 81, 4, 1, 233, 233, 81, 6, 1, 76, 81, 4, 1, 76, 81, 6, 1, 225,
+ 108, 81, 4, 1, 225, 108, 81, 6, 1, 222, 211, 81, 4, 1, 222, 211, 81, 6,
+ 1, 219, 165, 81, 4, 1, 219, 165, 81, 6, 1, 217, 41, 81, 4, 1, 217, 41,
+ 81, 6, 1, 214, 229, 81, 4, 1, 214, 229, 81, 6, 1, 244, 121, 81, 4, 1,
+ 244, 121, 81, 6, 1, 234, 112, 81, 4, 1, 234, 112, 81, 6, 1, 224, 161, 81,
+ 4, 1, 224, 161, 81, 6, 1, 226, 178, 81, 4, 1, 226, 178, 81, 6, 1, 247,
+ 253, 254, 170, 81, 4, 1, 247, 253, 254, 170, 81, 6, 1, 55, 81, 254, 196,
+ 81, 4, 1, 55, 81, 254, 196, 81, 6, 1, 249, 115, 245, 194, 81, 4, 1, 249,
+ 115, 245, 194, 81, 6, 1, 247, 253, 234, 227, 81, 4, 1, 247, 253, 234,
+ 227, 81, 6, 1, 247, 253, 228, 233, 81, 4, 1, 247, 253, 228, 233, 81, 6,
+ 1, 249, 115, 228, 233, 81, 4, 1, 249, 115, 228, 233, 81, 6, 1, 55, 81,
+ 226, 178, 81, 4, 1, 55, 81, 226, 178, 81, 6, 1, 221, 246, 81, 4, 1, 221,
+ 246, 81, 6, 1, 249, 128, 220, 55, 81, 4, 1, 249, 128, 220, 55, 81, 6, 1,
+ 55, 81, 220, 55, 81, 4, 1, 55, 81, 220, 55, 81, 6, 1, 55, 81, 245, 75,
+ 81, 4, 1, 55, 81, 245, 75, 81, 6, 1, 254, 182, 234, 117, 81, 4, 1, 254,
+ 182, 234, 117, 81, 6, 1, 247, 253, 241, 45, 81, 4, 1, 247, 253, 241, 45,
+ 81, 6, 1, 55, 81, 241, 45, 81, 4, 1, 55, 81, 241, 45, 81, 6, 1, 55, 81,
+ 162, 81, 4, 1, 55, 81, 162, 81, 6, 1, 233, 148, 162, 81, 4, 1, 233, 148,
+ 162, 81, 6, 1, 55, 81, 241, 217, 81, 4, 1, 55, 81, 241, 217, 81, 6, 1,
+ 55, 81, 241, 251, 81, 4, 1, 55, 81, 241, 251, 81, 6, 1, 55, 81, 243, 102,
+ 81, 4, 1, 55, 81, 243, 102, 81, 6, 1, 55, 81, 247, 163, 81, 4, 1, 55, 81,
+ 247, 163, 81, 6, 1, 55, 81, 220, 22, 81, 4, 1, 55, 81, 220, 22, 81, 6, 1,
+ 55, 227, 208, 220, 22, 81, 4, 1, 55, 227, 208, 220, 22, 81, 6, 1, 55,
+ 227, 208, 229, 27, 81, 4, 1, 55, 227, 208, 229, 27, 81, 6, 1, 55, 227,
+ 208, 227, 148, 81, 4, 1, 55, 227, 208, 227, 148, 81, 6, 1, 55, 227, 208,
+ 212, 37, 81, 4, 1, 55, 227, 208, 212, 37, 81, 16, 234, 246, 81, 16, 230,
+ 231, 222, 211, 81, 16, 225, 109, 222, 211, 81, 16, 218, 147, 81, 16, 217,
+ 42, 222, 211, 81, 16, 234, 113, 222, 211, 81, 16, 220, 23, 219, 165, 81,
+ 6, 1, 249, 115, 220, 55, 81, 4, 1, 249, 115, 220, 55, 81, 6, 1, 249, 115,
+ 243, 102, 81, 4, 1, 249, 115, 243, 102, 81, 38, 228, 234, 48, 81, 38,
+ 218, 247, 253, 224, 81, 38, 218, 247, 233, 21, 81, 6, 1, 251, 199, 234,
+ 117, 81, 4, 1, 251, 199, 234, 117, 81, 55, 227, 208, 243, 229, 218, 129,
+ 81, 55, 227, 208, 247, 197, 224, 13, 78, 81, 55, 227, 208, 235, 237, 224,
+ 13, 78, 81, 55, 227, 208, 213, 241, 247, 172, 81, 244, 2, 123, 242, 27,
+ 81, 243, 229, 218, 129, 81, 230, 124, 247, 172, 98, 4, 1, 254, 123, 98,
+ 4, 1, 252, 152, 98, 4, 1, 243, 106, 98, 4, 1, 247, 128, 98, 4, 1, 245,
+ 150, 98, 4, 1, 213, 160, 98, 4, 1, 210, 89, 98, 4, 1, 217, 60, 98, 4, 1,
+ 235, 255, 98, 4, 1, 234, 234, 98, 4, 1, 233, 81, 98, 4, 1, 231, 185, 98,
+ 4, 1, 229, 195, 98, 4, 1, 226, 196, 98, 4, 1, 226, 17, 98, 4, 1, 210, 78,
+ 98, 4, 1, 223, 171, 98, 4, 1, 221, 243, 98, 4, 1, 217, 50, 98, 4, 1, 214,
+ 190, 98, 4, 1, 225, 140, 98, 4, 1, 234, 121, 98, 4, 1, 242, 241, 98, 4,
+ 1, 224, 73, 98, 4, 1, 220, 20, 98, 4, 1, 250, 97, 98, 4, 1, 251, 7, 98,
+ 4, 1, 235, 100, 98, 4, 1, 250, 40, 98, 4, 1, 250, 143, 98, 4, 1, 211,
+ 163, 98, 4, 1, 235, 111, 98, 4, 1, 242, 43, 98, 4, 1, 241, 238, 98, 4, 1,
+ 241, 175, 98, 4, 1, 212, 22, 98, 4, 1, 242, 4, 98, 4, 1, 241, 65, 98, 4,
+ 1, 210, 246, 98, 4, 1, 254, 232, 216, 108, 1, 191, 216, 108, 1, 211, 99,
+ 216, 108, 1, 211, 98, 216, 108, 1, 211, 88, 216, 108, 1, 211, 86, 216,
+ 108, 1, 252, 32, 255, 16, 211, 81, 216, 108, 1, 211, 81, 216, 108, 1,
+ 211, 96, 216, 108, 1, 211, 93, 216, 108, 1, 211, 95, 216, 108, 1, 211,
+ 94, 216, 108, 1, 211, 12, 216, 108, 1, 211, 90, 216, 108, 1, 211, 79,
+ 216, 108, 1, 215, 115, 211, 79, 216, 108, 1, 211, 76, 216, 108, 1, 211,
+ 84, 216, 108, 1, 252, 32, 255, 16, 211, 84, 216, 108, 1, 215, 115, 211,
+ 84, 216, 108, 1, 211, 83, 216, 108, 1, 211, 103, 216, 108, 1, 211, 77,
+ 216, 108, 1, 215, 115, 211, 77, 216, 108, 1, 211, 66, 216, 108, 1, 215,
+ 115, 211, 66, 216, 108, 1, 211, 8, 216, 108, 1, 211, 49, 216, 108, 1,
+ 254, 207, 211, 49, 216, 108, 1, 215, 115, 211, 49, 216, 108, 1, 211, 75,
+ 216, 108, 1, 211, 74, 216, 108, 1, 211, 71, 216, 108, 1, 215, 115, 211,
+ 85, 216, 108, 1, 215, 115, 211, 69, 216, 108, 1, 211, 67, 216, 108, 1,
+ 210, 212, 216, 108, 1, 211, 64, 216, 108, 1, 211, 63, 216, 108, 1, 211,
+ 87, 216, 108, 1, 215, 115, 211, 87, 216, 108, 1, 253, 163, 211, 87, 216,
+ 108, 1, 211, 62, 216, 108, 1, 211, 60, 216, 108, 1, 211, 61, 216, 108, 1,
+ 211, 59, 216, 108, 1, 211, 58, 216, 108, 1, 211, 97, 216, 108, 1, 211,
+ 56, 216, 108, 1, 211, 54, 216, 108, 1, 211, 53, 216, 108, 1, 211, 52,
+ 216, 108, 1, 211, 50, 216, 108, 1, 217, 34, 211, 50, 216, 108, 1, 211,
+ 48, 216, 108, 1, 211, 47, 216, 108, 1, 210, 244, 216, 108, 58, 1, 233,
+ 126, 78, 216, 108, 220, 138, 78, 216, 108, 116, 235, 63, 29, 3, 232, 155,
+ 29, 3, 230, 160, 29, 3, 222, 209, 29, 3, 219, 57, 29, 3, 220, 6, 29, 3,
+ 251, 204, 29, 3, 216, 41, 29, 3, 249, 237, 29, 3, 228, 72, 29, 3, 227,
+ 133, 29, 3, 242, 180, 227, 0, 29, 3, 210, 22, 29, 3, 247, 143, 29, 3,
+ 248, 104, 29, 3, 235, 67, 29, 3, 216, 155, 29, 3, 250, 85, 29, 3, 225,
+ 120, 29, 3, 225, 15, 29, 3, 242, 255, 29, 3, 242, 251, 29, 3, 242, 252,
+ 29, 3, 242, 253, 29, 3, 218, 223, 29, 3, 218, 179, 29, 3, 218, 192, 29,
+ 3, 218, 222, 29, 3, 218, 196, 29, 3, 218, 197, 29, 3, 218, 184, 29, 3,
+ 250, 213, 29, 3, 250, 192, 29, 3, 250, 194, 29, 3, 250, 212, 29, 3, 250,
+ 210, 29, 3, 250, 211, 29, 3, 250, 193, 29, 3, 209, 243, 29, 3, 209, 221,
+ 29, 3, 209, 234, 29, 3, 209, 242, 29, 3, 209, 237, 29, 3, 209, 238, 29,
+ 3, 209, 226, 29, 3, 250, 208, 29, 3, 250, 195, 29, 3, 250, 197, 29, 3,
+ 250, 207, 29, 3, 250, 205, 29, 3, 250, 206, 29, 3, 250, 196, 29, 3, 223,
+ 236, 29, 3, 223, 226, 29, 3, 223, 232, 29, 3, 223, 235, 29, 3, 223, 233,
+ 29, 3, 223, 234, 29, 3, 223, 231, 29, 3, 233, 159, 29, 3, 233, 151, 29,
+ 3, 233, 154, 29, 3, 233, 158, 29, 3, 233, 155, 29, 3, 233, 156, 29, 3,
+ 233, 152, 29, 3, 211, 130, 29, 3, 211, 120, 29, 3, 211, 126, 29, 3, 211,
+ 129, 29, 3, 211, 127, 29, 3, 211, 128, 29, 3, 211, 125, 29, 3, 242, 71,
+ 29, 3, 242, 62, 29, 3, 242, 65, 29, 3, 242, 70, 29, 3, 242, 67, 29, 3,
+ 242, 68, 29, 3, 242, 64, 38, 33, 1, 252, 75, 38, 33, 1, 213, 255, 38, 33,
+ 1, 242, 236, 38, 33, 1, 248, 90, 38, 33, 1, 210, 74, 38, 33, 1, 210, 94,
+ 38, 33, 1, 176, 38, 33, 1, 245, 174, 38, 33, 1, 245, 159, 38, 33, 1, 245,
+ 150, 38, 33, 1, 76, 38, 33, 1, 225, 221, 38, 33, 1, 245, 92, 38, 33, 1,
+ 245, 82, 38, 33, 1, 217, 22, 38, 33, 1, 162, 38, 33, 1, 215, 178, 38, 33,
+ 1, 250, 131, 38, 33, 1, 220, 102, 38, 33, 1, 220, 65, 38, 33, 1, 244, 82,
+ 38, 33, 1, 245, 81, 38, 33, 1, 61, 38, 33, 1, 236, 60, 38, 33, 1, 247,
+ 161, 38, 33, 1, 230, 140, 214, 205, 38, 33, 1, 211, 59, 38, 33, 1, 210,
+ 212, 38, 33, 1, 235, 183, 61, 38, 33, 1, 232, 192, 210, 183, 38, 33, 1,
+ 251, 249, 210, 183, 38, 33, 1, 235, 183, 251, 249, 210, 183, 44, 254,
+ 110, 218, 60, 231, 154, 44, 254, 110, 246, 118, 218, 60, 231, 154, 43,
+ 218, 60, 127, 44, 218, 60, 127, 43, 246, 118, 218, 60, 127, 44, 246, 118,
+ 218, 60, 127, 223, 157, 235, 202, 231, 154, 223, 157, 246, 118, 235, 202,
+ 231, 154, 246, 118, 215, 241, 231, 154, 43, 215, 241, 127, 44, 215, 241,
+ 127, 223, 157, 218, 234, 43, 223, 157, 226, 198, 127, 44, 223, 157, 226,
+ 198, 127, 245, 210, 249, 158, 226, 13, 244, 22, 226, 13, 223, 49, 244,
+ 22, 226, 13, 240, 165, 246, 118, 226, 251, 246, 104, 254, 119, 214, 153,
+ 254, 119, 246, 118, 222, 247, 254, 109, 52, 226, 248, 240, 168, 235, 193,
+ 235, 201, 226, 59, 251, 154, 240, 169, 2, 248, 1, 216, 89, 2, 222, 234,
+ 48, 43, 121, 226, 5, 127, 44, 121, 226, 5, 127, 216, 89, 2, 59, 48, 216,
+ 89, 2, 59, 51, 43, 67, 252, 141, 2, 224, 7, 44, 67, 252, 141, 2, 224, 7,
+ 216, 14, 43, 163, 127, 216, 14, 44, 163, 127, 251, 175, 43, 163, 127,
+ 251, 175, 44, 163, 127, 43, 219, 187, 104, 127, 44, 219, 187, 104, 127,
+ 43, 52, 226, 3, 44, 52, 226, 3, 113, 170, 117, 123, 59, 224, 140, 123,
+ 59, 117, 113, 170, 224, 140, 92, 244, 11, 59, 224, 140, 244, 81, 59, 78,
+ 223, 49, 224, 13, 78, 67, 182, 222, 234, 225, 10, 211, 209, 220, 138,
+ 230, 224, 247, 120, 215, 94, 249, 219, 223, 157, 247, 120, 223, 157, 249,
+ 219, 215, 94, 220, 150, 248, 206, 2, 43, 242, 108, 248, 206, 2, 44, 242,
+ 108, 215, 94, 248, 205, 216, 14, 163, 221, 173, 50, 215, 59, 248, 156,
+ 216, 143, 248, 156, 9, 34, 223, 76, 9, 34, 250, 10, 9, 34, 221, 176, 110,
+ 9, 34, 221, 176, 105, 9, 34, 221, 176, 158, 9, 34, 225, 167, 9, 34, 251,
+ 163, 9, 34, 217, 92, 9, 34, 234, 33, 110, 9, 34, 234, 33, 105, 9, 34,
+ 247, 170, 9, 34, 221, 179, 9, 34, 4, 110, 9, 34, 4, 105, 9, 34, 233, 97,
+ 110, 9, 34, 233, 97, 105, 9, 34, 233, 97, 158, 9, 34, 233, 97, 161, 9,
+ 34, 219, 68, 9, 34, 216, 145, 9, 34, 219, 66, 110, 9, 34, 219, 66, 105,
+ 9, 34, 241, 228, 110, 9, 34, 241, 228, 105, 9, 34, 242, 15, 9, 34, 223,
+ 147, 9, 34, 250, 82, 9, 34, 218, 37, 9, 34, 230, 128, 9, 34, 248, 88, 9,
+ 34, 230, 120, 9, 34, 250, 25, 9, 34, 212, 41, 110, 9, 34, 212, 41, 105,
+ 9, 34, 244, 96, 9, 34, 225, 232, 110, 9, 34, 225, 232, 105, 9, 34, 219,
+ 160, 163, 215, 236, 215, 188, 9, 34, 249, 145, 9, 34, 247, 136, 9, 34,
+ 235, 137, 9, 34, 251, 198, 64, 249, 250, 9, 34, 245, 15, 9, 34, 218, 249,
+ 110, 9, 34, 218, 249, 105, 9, 34, 252, 154, 9, 34, 219, 167, 9, 34, 251,
+ 63, 219, 167, 9, 34, 229, 90, 110, 9, 34, 229, 90, 105, 9, 34, 229, 90,
+ 158, 9, 34, 229, 90, 161, 9, 34, 231, 46, 9, 34, 220, 57, 9, 34, 223,
+ 153, 9, 34, 245, 37, 9, 34, 226, 209, 9, 34, 251, 133, 110, 9, 34, 251,
+ 133, 105, 9, 34, 231, 86, 9, 34, 230, 123, 9, 34, 242, 140, 110, 9, 34,
+ 242, 140, 105, 9, 34, 242, 140, 158, 9, 34, 216, 106, 9, 34, 249, 249, 9,
+ 34, 212, 9, 110, 9, 34, 212, 9, 105, 9, 34, 251, 63, 221, 170, 9, 34,
+ 219, 160, 240, 248, 9, 34, 240, 248, 9, 34, 251, 63, 219, 2, 9, 34, 251,
+ 63, 220, 52, 9, 34, 244, 32, 9, 34, 251, 63, 250, 228, 9, 34, 219, 160,
+ 212, 57, 9, 34, 212, 58, 110, 9, 34, 212, 58, 105, 9, 34, 250, 27, 9, 34,
+ 251, 63, 242, 166, 9, 34, 199, 110, 9, 34, 199, 105, 9, 34, 251, 63, 232,
+ 137, 9, 34, 251, 63, 243, 88, 9, 34, 230, 119, 110, 9, 34, 230, 119, 105,
+ 9, 34, 223, 159, 9, 34, 251, 207, 9, 34, 251, 63, 217, 56, 233, 52, 9,
+ 34, 251, 63, 233, 53, 9, 34, 251, 63, 211, 239, 9, 34, 251, 63, 244, 46,
+ 9, 34, 245, 218, 110, 9, 34, 245, 218, 105, 9, 34, 245, 218, 158, 9, 34,
+ 251, 63, 245, 217, 9, 34, 241, 235, 9, 34, 251, 63, 240, 245, 9, 34, 251,
+ 194, 9, 34, 242, 222, 9, 34, 251, 63, 244, 90, 9, 34, 251, 63, 251, 237,
+ 9, 34, 251, 63, 222, 1, 9, 34, 219, 160, 212, 2, 9, 34, 219, 160, 211,
+ 41, 9, 34, 251, 63, 243, 244, 9, 34, 235, 143, 245, 41, 9, 34, 251, 63,
+ 245, 41, 9, 34, 235, 143, 216, 15, 9, 34, 251, 63, 216, 15, 9, 34, 235,
+ 143, 246, 96, 9, 34, 251, 63, 246, 96, 9, 34, 215, 91, 9, 34, 235, 143,
+ 215, 91, 9, 34, 251, 63, 215, 91, 60, 34, 110, 60, 34, 232, 213, 60, 34,
+ 247, 120, 60, 34, 219, 95, 60, 34, 221, 175, 60, 34, 103, 60, 34, 105,
+ 60, 34, 232, 237, 60, 34, 231, 185, 60, 34, 233, 33, 60, 34, 245, 129,
+ 60, 34, 195, 60, 34, 124, 251, 163, 60, 34, 249, 147, 60, 34, 240, 111,
+ 60, 34, 217, 92, 60, 34, 204, 251, 163, 60, 34, 234, 32, 60, 34, 224,
+ 224, 60, 34, 211, 202, 60, 34, 218, 243, 60, 34, 44, 204, 251, 163, 60,
+ 34, 241, 176, 245, 145, 60, 34, 216, 247, 60, 34, 247, 170, 60, 34, 221,
+ 179, 60, 34, 250, 10, 60, 34, 224, 182, 60, 34, 254, 215, 60, 34, 230,
+ 110, 60, 34, 245, 145, 60, 34, 245, 223, 60, 34, 221, 200, 60, 34, 242,
+ 174, 60, 34, 242, 175, 219, 81, 60, 34, 245, 40, 60, 34, 251, 248, 60,
+ 34, 211, 221, 60, 34, 250, 101, 60, 34, 222, 196, 60, 34, 235, 251, 60,
+ 34, 219, 79, 60, 34, 233, 96, 60, 34, 249, 156, 60, 34, 218, 237, 60, 34,
+ 230, 115, 60, 34, 222, 224, 60, 34, 211, 206, 60, 34, 226, 190, 60, 34,
+ 215, 97, 60, 34, 246, 80, 60, 34, 219, 251, 216, 145, 60, 34, 246, 118,
+ 250, 10, 60, 34, 199, 218, 108, 60, 34, 113, 242, 10, 60, 34, 220, 0, 60,
+ 34, 251, 169, 60, 34, 219, 65, 60, 34, 251, 137, 60, 34, 218, 138, 60,
+ 34, 241, 227, 60, 34, 242, 28, 60, 34, 247, 123, 60, 34, 242, 15, 60, 34,
+ 251, 154, 60, 34, 223, 147, 60, 34, 221, 187, 60, 34, 247, 199, 60, 34,
+ 253, 168, 60, 34, 218, 234, 60, 34, 228, 51, 60, 34, 218, 37, 60, 34,
+ 221, 211, 60, 34, 230, 128, 60, 34, 215, 235, 60, 34, 233, 122, 60, 34,
+ 218, 129, 60, 34, 248, 88, 60, 34, 212, 21, 60, 34, 247, 146, 228, 51,
+ 60, 34, 249, 215, 60, 34, 243, 222, 60, 34, 250, 21, 60, 34, 218, 142,
+ 60, 34, 212, 40, 60, 34, 244, 96, 60, 34, 250, 18, 60, 34, 244, 161, 60,
+ 34, 52, 211, 178, 60, 34, 163, 215, 236, 215, 188, 60, 34, 219, 89, 60,
+ 34, 244, 171, 60, 34, 249, 145, 60, 34, 247, 136, 60, 34, 224, 179, 60,
+ 34, 235, 137, 60, 34, 231, 67, 60, 34, 216, 88, 60, 34, 217, 245, 60, 34,
+ 232, 231, 60, 34, 214, 131, 60, 34, 244, 120, 60, 34, 251, 198, 64, 249,
+ 250, 60, 34, 219, 188, 60, 34, 246, 118, 216, 242, 60, 34, 211, 253, 60,
+ 34, 219, 103, 60, 34, 247, 187, 60, 34, 245, 15, 60, 34, 219, 5, 60, 34,
+ 74, 60, 34, 218, 131, 60, 34, 218, 248, 60, 34, 215, 255, 60, 34, 242,
+ 147, 60, 34, 250, 218, 60, 34, 218, 160, 60, 34, 252, 154, 60, 34, 223,
+ 31, 60, 34, 219, 167, 60, 34, 235, 130, 60, 34, 229, 89, 60, 34, 220, 57,
+ 60, 34, 244, 149, 60, 34, 226, 209, 60, 34, 254, 118, 60, 34, 225, 29,
+ 60, 34, 245, 227, 60, 34, 251, 132, 60, 34, 231, 86, 60, 34, 230, 183,
+ 60, 34, 220, 156, 60, 34, 253, 252, 60, 34, 230, 123, 60, 34, 216, 19,
+ 60, 34, 226, 165, 60, 34, 251, 201, 60, 34, 218, 127, 60, 34, 249, 225,
+ 60, 34, 242, 139, 60, 34, 216, 106, 60, 34, 235, 217, 60, 34, 251, 211,
+ 60, 34, 212, 58, 245, 145, 60, 34, 249, 249, 60, 34, 212, 8, 60, 34, 221,
+ 170, 60, 34, 240, 248, 60, 34, 219, 2, 60, 34, 214, 22, 60, 34, 252, 72,
+ 60, 34, 225, 73, 60, 34, 252, 174, 60, 34, 220, 52, 60, 34, 223, 110, 60,
+ 34, 222, 126, 60, 34, 244, 32, 60, 34, 251, 200, 60, 34, 250, 228, 60,
+ 34, 251, 226, 60, 34, 230, 125, 60, 34, 212, 57, 60, 34, 250, 27, 60, 34,
+ 211, 236, 60, 34, 247, 180, 60, 34, 213, 161, 60, 34, 242, 166, 60, 34,
+ 232, 137, 60, 34, 243, 88, 60, 34, 230, 118, 60, 34, 219, 94, 60, 34,
+ 219, 251, 217, 76, 251, 237, 60, 34, 223, 159, 60, 34, 251, 207, 60, 34,
+ 211, 197, 60, 34, 244, 190, 60, 34, 233, 52, 60, 34, 217, 56, 233, 52,
+ 60, 34, 233, 48, 60, 34, 219, 30, 60, 34, 233, 53, 60, 34, 211, 239, 60,
+ 34, 244, 46, 60, 34, 245, 217, 60, 34, 241, 235, 60, 34, 244, 0, 60, 34,
+ 240, 245, 60, 34, 251, 194, 60, 34, 217, 63, 60, 34, 242, 34, 60, 34,
+ 244, 113, 60, 34, 222, 28, 211, 236, 60, 34, 250, 220, 60, 34, 242, 222,
+ 60, 34, 244, 90, 60, 34, 251, 237, 60, 34, 222, 1, 60, 34, 248, 74, 60,
+ 34, 212, 2, 60, 34, 241, 210, 60, 34, 211, 41, 60, 34, 230, 192, 60, 34,
+ 251, 221, 60, 34, 245, 155, 60, 34, 243, 244, 60, 34, 215, 209, 60, 34,
+ 246, 82, 60, 34, 223, 141, 60, 34, 228, 53, 60, 34, 245, 41, 60, 34, 216,
+ 15, 60, 34, 246, 96, 60, 34, 215, 91, 60, 34, 244, 48, 109, 248, 37, 135,
+ 43, 216, 42, 222, 251, 109, 248, 37, 135, 77, 216, 42, 51, 109, 248, 37,
+ 135, 43, 216, 42, 230, 224, 22, 222, 251, 109, 248, 37, 135, 77, 216, 42,
+ 230, 224, 22, 51, 109, 248, 37, 135, 243, 229, 218, 10, 109, 248, 37,
+ 135, 218, 11, 243, 243, 48, 109, 248, 37, 135, 218, 11, 243, 243, 51,
+ 109, 248, 37, 135, 218, 11, 243, 243, 233, 46, 109, 248, 37, 135, 218,
+ 11, 243, 243, 214, 160, 233, 46, 109, 248, 37, 135, 218, 11, 243, 243,
+ 214, 160, 222, 251, 109, 248, 37, 135, 218, 11, 243, 243, 232, 108, 233,
+ 46, 109, 248, 37, 135, 226, 122, 109, 219, 18, 109, 249, 219, 109, 243,
+ 229, 218, 129, 247, 177, 78, 235, 131, 235, 236, 218, 159, 87, 109, 235,
+ 158, 78, 109, 249, 252, 78, 109, 54, 210, 86, 43, 254, 110, 127, 44, 254,
+ 110, 127, 43, 52, 254, 110, 127, 44, 52, 254, 110, 127, 43, 249, 161,
+ 127, 44, 249, 161, 127, 43, 71, 249, 161, 127, 44, 71, 249, 161, 127, 43,
+ 85, 233, 20, 127, 44, 85, 233, 20, 127, 224, 237, 78, 243, 32, 78, 43,
+ 216, 6, 220, 53, 127, 44, 216, 6, 220, 53, 127, 43, 71, 233, 20, 127, 44,
+ 71, 233, 20, 127, 43, 71, 216, 6, 220, 53, 127, 44, 71, 216, 6, 220, 53,
+ 127, 43, 71, 42, 127, 44, 71, 42, 127, 212, 36, 248, 156, 223, 49, 52,
+ 224, 191, 223, 254, 78, 52, 224, 191, 223, 254, 78, 121, 52, 224, 191,
+ 223, 254, 78, 224, 237, 164, 244, 190, 242, 8, 227, 198, 110, 242, 8,
+ 227, 198, 105, 242, 8, 227, 198, 158, 242, 8, 227, 198, 161, 242, 8, 227,
+ 198, 189, 242, 8, 227, 198, 194, 242, 8, 227, 198, 198, 242, 8, 227, 198,
+ 195, 242, 8, 227, 198, 200, 109, 233, 3, 138, 78, 109, 222, 228, 138, 78,
+ 109, 248, 44, 138, 78, 109, 245, 128, 138, 78, 24, 219, 155, 59, 138, 78,
+ 24, 52, 59, 138, 78, 212, 32, 248, 156, 67, 234, 233, 223, 77, 78, 67,
+ 234, 233, 223, 77, 2, 213, 135, 219, 31, 78, 67, 234, 233, 223, 77, 164,
+ 214, 160, 242, 27, 67, 234, 233, 223, 77, 2, 213, 135, 219, 31, 164, 214,
+ 160, 242, 27, 67, 234, 233, 223, 77, 164, 232, 108, 242, 27, 37, 224,
+ 237, 78, 109, 217, 3, 232, 214, 244, 146, 220, 138, 87, 242, 8, 227, 198,
+ 216, 247, 242, 8, 227, 198, 215, 73, 242, 8, 227, 198, 216, 162, 67, 109,
+ 235, 158, 78, 231, 140, 78, 225, 255, 254, 140, 78, 109, 45, 235, 238,
+ 109, 163, 244, 106, 219, 18, 141, 1, 4, 61, 141, 1, 61, 141, 1, 4, 73,
+ 141, 1, 73, 141, 1, 4, 70, 141, 1, 70, 141, 1, 4, 75, 141, 1, 75, 141, 1,
+ 4, 76, 141, 1, 76, 141, 1, 176, 141, 1, 243, 135, 141, 1, 234, 92, 141,
+ 1, 242, 214, 141, 1, 233, 217, 141, 1, 242, 113, 141, 1, 234, 182, 141,
+ 1, 243, 62, 141, 1, 234, 28, 141, 1, 242, 174, 141, 1, 206, 141, 1, 210,
+ 116, 141, 1, 219, 191, 141, 1, 210, 44, 141, 1, 218, 83, 141, 1, 210, 13,
+ 141, 1, 221, 181, 141, 1, 210, 94, 141, 1, 219, 58, 141, 1, 210, 23, 141,
+ 1, 217, 105, 141, 1, 248, 221, 141, 1, 216, 117, 141, 1, 248, 3, 141, 1,
+ 4, 215, 118, 141, 1, 215, 118, 141, 1, 246, 78, 141, 1, 217, 22, 141, 1,
+ 248, 90, 141, 1, 111, 141, 1, 247, 145, 141, 1, 197, 141, 1, 228, 233,
+ 141, 1, 227, 237, 141, 1, 229, 107, 141, 1, 228, 74, 141, 1, 162, 141, 1,
+ 252, 191, 141, 1, 190, 141, 1, 241, 180, 141, 1, 252, 6, 141, 1, 225,
+ 108, 141, 1, 240, 222, 141, 1, 251, 125, 141, 1, 224, 150, 141, 1, 241,
+ 238, 141, 1, 252, 75, 141, 1, 225, 221, 141, 1, 241, 68, 141, 1, 251,
+ 205, 141, 1, 225, 16, 141, 1, 184, 141, 1, 230, 230, 141, 1, 230, 102,
+ 141, 1, 231, 91, 141, 1, 230, 161, 141, 1, 4, 191, 141, 1, 191, 141, 1,
+ 4, 210, 212, 141, 1, 210, 212, 141, 1, 4, 210, 244, 141, 1, 210, 244,
+ 141, 1, 205, 141, 1, 223, 35, 141, 1, 222, 140, 141, 1, 223, 128, 141, 1,
+ 222, 211, 141, 1, 4, 212, 65, 141, 1, 212, 65, 141, 1, 211, 250, 141, 1,
+ 212, 22, 141, 1, 211, 227, 141, 1, 230, 25, 141, 1, 212, 116, 141, 1, 4,
+ 176, 141, 1, 4, 234, 182, 38, 234, 201, 213, 135, 219, 31, 78, 38, 234,
+ 201, 220, 155, 219, 31, 78, 234, 201, 213, 135, 219, 31, 78, 234, 201,
+ 220, 155, 219, 31, 78, 141, 235, 158, 78, 141, 213, 135, 235, 158, 78,
+ 141, 247, 221, 210, 225, 234, 201, 52, 240, 168, 56, 1, 4, 61, 56, 1, 61,
+ 56, 1, 4, 73, 56, 1, 73, 56, 1, 4, 70, 56, 1, 70, 56, 1, 4, 75, 56, 1,
+ 75, 56, 1, 4, 76, 56, 1, 76, 56, 1, 176, 56, 1, 243, 135, 56, 1, 234, 92,
+ 56, 1, 242, 214, 56, 1, 233, 217, 56, 1, 242, 113, 56, 1, 234, 182, 56,
+ 1, 243, 62, 56, 1, 234, 28, 56, 1, 242, 174, 56, 1, 206, 56, 1, 210, 116,
+ 56, 1, 219, 191, 56, 1, 210, 44, 56, 1, 218, 83, 56, 1, 210, 13, 56, 1,
+ 221, 181, 56, 1, 210, 94, 56, 1, 219, 58, 56, 1, 210, 23, 56, 1, 217,
+ 105, 56, 1, 248, 221, 56, 1, 216, 117, 56, 1, 248, 3, 56, 1, 4, 215, 118,
+ 56, 1, 215, 118, 56, 1, 246, 78, 56, 1, 217, 22, 56, 1, 248, 90, 56, 1,
+ 111, 56, 1, 247, 145, 56, 1, 197, 56, 1, 228, 233, 56, 1, 227, 237, 56,
+ 1, 229, 107, 56, 1, 228, 74, 56, 1, 162, 56, 1, 252, 191, 56, 1, 190, 56,
+ 1, 241, 180, 56, 1, 252, 6, 56, 1, 225, 108, 56, 1, 240, 222, 56, 1, 251,
+ 125, 56, 1, 224, 150, 56, 1, 241, 238, 56, 1, 252, 75, 56, 1, 225, 221,
+ 56, 1, 241, 68, 56, 1, 251, 205, 56, 1, 225, 16, 56, 1, 184, 56, 1, 230,
+ 230, 56, 1, 230, 102, 56, 1, 231, 91, 56, 1, 230, 161, 56, 1, 4, 191, 56,
+ 1, 191, 56, 1, 4, 210, 212, 56, 1, 210, 212, 56, 1, 4, 210, 244, 56, 1,
+ 210, 244, 56, 1, 205, 56, 1, 223, 35, 56, 1, 222, 140, 56, 1, 223, 128,
+ 56, 1, 222, 211, 56, 1, 4, 212, 65, 56, 1, 212, 65, 56, 1, 211, 250, 56,
+ 1, 212, 22, 56, 1, 211, 227, 56, 1, 230, 25, 56, 1, 212, 116, 56, 1, 4,
+ 176, 56, 1, 4, 234, 182, 56, 1, 214, 27, 56, 1, 213, 176, 56, 1, 213,
+ 255, 56, 1, 213, 138, 56, 230, 224, 247, 120, 234, 201, 224, 173, 219,
+ 31, 78, 56, 235, 158, 78, 56, 213, 135, 235, 158, 78, 56, 247, 221, 233,
+ 255, 251, 184, 1, 253, 158, 251, 184, 1, 226, 105, 251, 184, 1, 193, 251,
+ 184, 1, 245, 6, 251, 184, 1, 249, 60, 251, 184, 1, 217, 152, 251, 184, 1,
+ 230, 25, 251, 184, 1, 156, 251, 184, 1, 243, 202, 251, 184, 1, 235, 23,
+ 251, 184, 1, 242, 60, 251, 184, 1, 235, 144, 251, 184, 1, 224, 96, 251,
+ 184, 1, 211, 178, 251, 184, 1, 210, 83, 251, 184, 1, 250, 158, 251, 184,
+ 1, 220, 104, 251, 184, 1, 153, 251, 184, 1, 210, 159, 251, 184, 1, 251,
+ 66, 251, 184, 1, 222, 91, 251, 184, 1, 61, 251, 184, 1, 76, 251, 184, 1,
+ 75, 251, 184, 1, 245, 197, 251, 184, 1, 254, 201, 251, 184, 1, 245, 195,
+ 251, 184, 1, 253, 192, 251, 184, 1, 226, 134, 251, 184, 1, 254, 123, 251,
+ 184, 1, 245, 150, 251, 184, 1, 254, 115, 251, 184, 1, 245, 138, 251, 184,
+ 1, 245, 92, 251, 184, 1, 73, 251, 184, 1, 70, 251, 184, 1, 235, 156, 251,
+ 184, 1, 214, 105, 251, 184, 1, 229, 79, 251, 184, 1, 242, 178, 251, 184,
+ 1, 236, 34, 24, 1, 234, 58, 24, 1, 218, 215, 24, 1, 234, 51, 24, 1, 228,
+ 226, 24, 1, 228, 224, 24, 1, 228, 223, 24, 1, 216, 101, 24, 1, 218, 204,
+ 24, 1, 223, 26, 24, 1, 223, 21, 24, 1, 223, 18, 24, 1, 223, 11, 24, 1,
+ 223, 6, 24, 1, 223, 1, 24, 1, 223, 12, 24, 1, 223, 24, 24, 1, 230, 217,
+ 24, 1, 225, 95, 24, 1, 218, 212, 24, 1, 225, 84, 24, 1, 219, 148, 24, 1,
+ 218, 209, 24, 1, 236, 56, 24, 1, 250, 46, 24, 1, 218, 219, 24, 1, 250,
+ 106, 24, 1, 234, 110, 24, 1, 216, 173, 24, 1, 225, 131, 24, 1, 241, 172,
+ 24, 1, 61, 24, 1, 254, 243, 24, 1, 191, 24, 1, 211, 92, 24, 1, 245, 117,
+ 24, 1, 75, 24, 1, 211, 36, 24, 1, 211, 47, 24, 1, 76, 24, 1, 212, 65, 24,
+ 1, 212, 62, 24, 1, 226, 234, 24, 1, 210, 244, 24, 1, 70, 24, 1, 212, 11,
+ 24, 1, 212, 22, 24, 1, 211, 250, 24, 1, 210, 212, 24, 1, 245, 55, 24, 1,
+ 211, 8, 24, 1, 73, 24, 244, 103, 24, 1, 218, 213, 24, 1, 228, 216, 24, 1,
+ 228, 218, 24, 1, 228, 221, 24, 1, 223, 19, 24, 1, 223, 0, 24, 1, 223, 8,
+ 24, 1, 223, 13, 24, 1, 222, 254, 24, 1, 230, 210, 24, 1, 230, 207, 24, 1,
+ 230, 211, 24, 1, 234, 221, 24, 1, 225, 90, 24, 1, 225, 76, 24, 1, 225,
+ 82, 24, 1, 225, 79, 24, 1, 225, 93, 24, 1, 225, 77, 24, 1, 234, 219, 24,
+ 1, 234, 217, 24, 1, 219, 141, 24, 1, 219, 139, 24, 1, 219, 131, 24, 1,
+ 219, 136, 24, 1, 219, 146, 24, 1, 226, 32, 24, 1, 218, 216, 24, 1, 211,
+ 26, 24, 1, 211, 22, 24, 1, 211, 23, 24, 1, 234, 220, 24, 1, 218, 217, 24,
+ 1, 211, 32, 24, 1, 210, 238, 24, 1, 210, 237, 24, 1, 210, 240, 24, 1,
+ 210, 203, 24, 1, 210, 204, 24, 1, 210, 207, 24, 1, 254, 34, 24, 1, 254,
+ 28, 109, 254, 99, 232, 203, 78, 109, 254, 99, 223, 50, 78, 109, 254, 99,
+ 123, 78, 109, 254, 99, 113, 78, 109, 254, 99, 134, 78, 109, 254, 99, 244,
+ 11, 78, 109, 254, 99, 216, 14, 78, 109, 254, 99, 230, 224, 78, 109, 254,
+ 99, 251, 175, 78, 109, 254, 99, 244, 92, 78, 109, 254, 99, 221, 176, 78,
+ 109, 254, 99, 216, 169, 78, 109, 254, 99, 244, 4, 78, 109, 254, 99, 241,
+ 224, 78, 109, 254, 99, 245, 224, 78, 109, 254, 99, 231, 186, 78, 251,
+ 184, 1, 251, 125, 251, 184, 1, 210, 44, 251, 184, 1, 235, 108, 251, 184,
+ 1, 242, 113, 251, 184, 1, 245, 209, 251, 184, 1, 245, 135, 251, 184, 1,
+ 226, 183, 251, 184, 1, 226, 187, 251, 184, 1, 235, 179, 251, 184, 1, 254,
+ 101, 251, 184, 1, 235, 224, 251, 184, 1, 214, 168, 251, 184, 1, 236, 16,
+ 251, 184, 1, 229, 57, 251, 184, 1, 254, 195, 251, 184, 1, 253, 187, 251,
+ 184, 1, 254, 136, 251, 184, 1, 226, 204, 251, 184, 1, 226, 189, 251, 184,
+ 1, 235, 221, 251, 184, 40, 1, 226, 105, 251, 184, 40, 1, 217, 152, 251,
+ 184, 40, 1, 235, 23, 251, 184, 40, 1, 242, 60, 251, 184, 1, 242, 250,
+ 251, 184, 1, 232, 255, 251, 184, 1, 209, 250, 9, 218, 103, 217, 152, 9,
+ 218, 103, 212, 4, 9, 218, 103, 211, 158, 9, 218, 103, 251, 79, 9, 218,
+ 103, 217, 254, 9, 218, 103, 240, 158, 9, 218, 103, 240, 162, 9, 218, 103,
+ 240, 231, 9, 218, 103, 240, 159, 9, 218, 103, 217, 155, 9, 218, 103, 240,
+ 161, 9, 218, 103, 240, 157, 9, 218, 103, 240, 229, 9, 218, 103, 240, 160,
+ 9, 218, 103, 240, 156, 9, 218, 103, 230, 25, 9, 218, 103, 242, 60, 9,
+ 218, 103, 222, 91, 9, 218, 103, 226, 105, 9, 218, 103, 219, 21, 9, 218,
+ 103, 249, 60, 9, 218, 103, 240, 163, 9, 218, 103, 241, 190, 9, 218, 103,
+ 217, 164, 9, 218, 103, 217, 233, 9, 218, 103, 218, 168, 9, 218, 103, 220,
+ 110, 9, 218, 103, 225, 224, 9, 218, 103, 224, 98, 9, 218, 103, 216, 43,
+ 9, 218, 103, 217, 154, 9, 218, 103, 217, 244, 9, 218, 103, 240, 170, 9,
+ 218, 103, 240, 155, 9, 218, 103, 225, 149, 9, 218, 103, 224, 96, 56, 1,
+ 4, 233, 217, 56, 1, 4, 219, 191, 56, 1, 4, 218, 83, 56, 1, 4, 111, 56, 1,
+ 4, 227, 237, 56, 1, 4, 162, 56, 1, 4, 241, 180, 56, 1, 4, 240, 222, 56,
+ 1, 4, 241, 238, 56, 1, 4, 241, 68, 56, 1, 4, 230, 102, 56, 1, 4, 205, 56,
+ 1, 4, 223, 35, 56, 1, 4, 222, 140, 56, 1, 4, 223, 128, 56, 1, 4, 222,
+ 211, 88, 24, 234, 58, 88, 24, 228, 226, 88, 24, 216, 101, 88, 24, 223,
+ 26, 88, 24, 230, 217, 88, 24, 225, 95, 88, 24, 219, 148, 88, 24, 236, 56,
+ 88, 24, 250, 46, 88, 24, 250, 106, 88, 24, 234, 110, 88, 24, 216, 173,
+ 88, 24, 225, 131, 88, 24, 241, 172, 88, 24, 234, 59, 61, 88, 24, 228,
+ 227, 61, 88, 24, 216, 102, 61, 88, 24, 223, 27, 61, 88, 24, 230, 218, 61,
+ 88, 24, 225, 96, 61, 88, 24, 219, 149, 61, 88, 24, 236, 57, 61, 88, 24,
+ 250, 47, 61, 88, 24, 250, 107, 61, 88, 24, 234, 111, 61, 88, 24, 216,
+ 174, 61, 88, 24, 225, 132, 61, 88, 24, 241, 173, 61, 88, 24, 250, 47, 70,
+ 88, 234, 3, 135, 226, 217, 88, 234, 3, 135, 144, 240, 222, 88, 154, 110,
+ 88, 154, 105, 88, 154, 158, 88, 154, 161, 88, 154, 189, 88, 154, 194, 88,
+ 154, 198, 88, 154, 195, 88, 154, 200, 88, 154, 216, 247, 88, 154, 230,
+ 128, 88, 154, 244, 96, 88, 154, 212, 40, 88, 154, 211, 214, 88, 154, 231,
+ 39, 88, 154, 245, 223, 88, 154, 218, 37, 88, 154, 218, 132, 88, 154, 241,
+ 244, 88, 154, 219, 54, 88, 154, 229, 204, 88, 154, 219, 4, 88, 154, 244,
+ 102, 88, 154, 249, 200, 88, 154, 233, 125, 88, 154, 223, 71, 88, 154,
+ 251, 15, 88, 154, 218, 87, 88, 154, 218, 20, 88, 154, 245, 127, 88, 154,
+ 223, 63, 88, 154, 254, 150, 88, 154, 244, 128, 88, 154, 223, 61, 88, 154,
+ 220, 156, 88, 154, 223, 127, 37, 154, 224, 12, 37, 154, 234, 80, 37, 154,
+ 221, 198, 37, 154, 233, 255, 37, 54, 216, 248, 226, 197, 85, 218, 234,
+ 37, 54, 215, 74, 226, 197, 85, 218, 234, 37, 54, 216, 163, 226, 197, 85,
+ 218, 234, 37, 54, 244, 16, 226, 197, 85, 218, 234, 37, 54, 244, 115, 226,
+ 197, 85, 218, 234, 37, 54, 219, 112, 226, 197, 85, 218, 234, 37, 54, 220,
+ 117, 226, 197, 85, 218, 234, 37, 54, 245, 185, 226, 197, 85, 218, 234,
+ 225, 251, 50, 37, 54, 215, 74, 110, 37, 54, 215, 74, 105, 37, 54, 215,
+ 74, 158, 37, 54, 215, 74, 161, 37, 54, 215, 74, 189, 37, 54, 215, 74,
+ 194, 37, 54, 215, 74, 198, 37, 54, 215, 74, 195, 37, 54, 215, 74, 200,
+ 37, 54, 216, 162, 37, 54, 216, 163, 110, 37, 54, 216, 163, 105, 37, 54,
+ 216, 163, 158, 37, 54, 216, 163, 161, 37, 54, 216, 163, 189, 37, 24, 234,
+ 58, 37, 24, 228, 226, 37, 24, 216, 101, 37, 24, 223, 26, 37, 24, 230,
+ 217, 37, 24, 225, 95, 37, 24, 219, 148, 37, 24, 236, 56, 37, 24, 250, 46,
+ 37, 24, 250, 106, 37, 24, 234, 110, 37, 24, 216, 173, 37, 24, 225, 131,
+ 37, 24, 241, 172, 37, 24, 234, 59, 61, 37, 24, 228, 227, 61, 37, 24, 216,
+ 102, 61, 37, 24, 223, 27, 61, 37, 24, 230, 218, 61, 37, 24, 225, 96, 61,
+ 37, 24, 219, 149, 61, 37, 24, 236, 57, 61, 37, 24, 250, 47, 61, 37, 24,
+ 250, 107, 61, 37, 24, 234, 111, 61, 37, 24, 216, 174, 61, 37, 24, 225,
+ 132, 61, 37, 24, 241, 173, 61, 37, 234, 3, 135, 250, 148, 37, 234, 3,
+ 135, 235, 47, 37, 24, 236, 57, 70, 234, 3, 218, 159, 87, 37, 154, 110,
+ 37, 154, 105, 37, 154, 158, 37, 154, 161, 37, 154, 189, 37, 154, 194, 37,
+ 154, 198, 37, 154, 195, 37, 154, 200, 37, 154, 216, 247, 37, 154, 230,
+ 128, 37, 154, 244, 96, 37, 154, 212, 40, 37, 154, 211, 214, 37, 154, 231,
+ 39, 37, 154, 245, 223, 37, 154, 218, 37, 37, 154, 218, 132, 37, 154, 241,
+ 244, 37, 154, 219, 54, 37, 154, 229, 204, 37, 154, 219, 4, 37, 154, 244,
+ 102, 37, 154, 249, 200, 37, 154, 233, 125, 37, 154, 221, 174, 37, 154,
+ 231, 189, 37, 154, 244, 137, 37, 154, 218, 49, 37, 154, 245, 34, 37, 154,
+ 224, 187, 37, 154, 253, 196, 37, 154, 235, 159, 37, 154, 223, 61, 37,
+ 154, 249, 164, 37, 154, 249, 155, 37, 154, 241, 165, 37, 154, 250, 174,
+ 37, 154, 232, 110, 37, 154, 233, 46, 37, 154, 222, 251, 37, 154, 231, 83,
+ 37, 154, 223, 87, 37, 154, 218, 87, 37, 154, 218, 20, 37, 154, 245, 127,
+ 37, 154, 223, 63, 37, 154, 254, 150, 37, 154, 228, 212, 37, 54, 216, 163,
+ 194, 37, 54, 216, 163, 198, 37, 54, 216, 163, 195, 37, 54, 216, 163, 200,
+ 37, 54, 244, 15, 37, 54, 244, 16, 110, 37, 54, 244, 16, 105, 37, 54, 244,
+ 16, 158, 37, 54, 244, 16, 161, 37, 54, 244, 16, 189, 37, 54, 244, 16,
+ 194, 37, 54, 244, 16, 198, 37, 54, 244, 16, 195, 37, 54, 244, 16, 200,
+ 37, 54, 244, 114, 109, 217, 3, 16, 31, 235, 133, 109, 217, 3, 16, 31,
+ 244, 148, 109, 217, 3, 16, 31, 231, 160, 109, 217, 3, 16, 31, 254, 47,
+ 109, 217, 3, 16, 31, 231, 132, 109, 217, 3, 16, 31, 235, 45, 109, 217, 3,
+ 16, 31, 235, 46, 109, 217, 3, 16, 31, 253, 188, 109, 217, 3, 16, 31, 220,
+ 136, 109, 217, 3, 16, 31, 226, 239, 109, 217, 3, 16, 31, 228, 40, 109,
+ 217, 3, 16, 31, 248, 85, 42, 241, 190, 42, 245, 88, 42, 245, 43, 232,
+ 219, 232, 240, 50, 37, 56, 61, 37, 56, 73, 37, 56, 70, 37, 56, 75, 37,
+ 56, 76, 37, 56, 176, 37, 56, 234, 92, 37, 56, 233, 217, 37, 56, 234, 182,
+ 37, 56, 234, 28, 37, 56, 206, 37, 56, 219, 191, 37, 56, 218, 83, 37, 56,
+ 221, 181, 37, 56, 219, 58, 37, 56, 217, 105, 37, 56, 216, 117, 37, 56,
+ 215, 118, 37, 56, 217, 22, 37, 56, 111, 37, 56, 197, 37, 56, 228, 233,
+ 37, 56, 227, 237, 37, 56, 229, 107, 37, 56, 228, 74, 37, 56, 162, 37, 56,
+ 241, 180, 37, 56, 240, 222, 37, 56, 241, 238, 37, 56, 241, 68, 37, 56,
+ 184, 37, 56, 230, 230, 37, 56, 230, 102, 37, 56, 231, 91, 37, 56, 230,
+ 161, 37, 56, 191, 37, 56, 210, 212, 37, 56, 210, 244, 37, 56, 205, 37,
+ 56, 223, 35, 37, 56, 222, 140, 37, 56, 223, 128, 37, 56, 222, 211, 37,
+ 56, 212, 65, 37, 56, 211, 250, 37, 56, 212, 22, 37, 56, 211, 227, 42,
+ 254, 71, 42, 253, 239, 42, 254, 95, 42, 255, 31, 42, 235, 226, 42, 235,
+ 196, 42, 214, 166, 42, 245, 66, 42, 245, 206, 42, 226, 186, 42, 226, 180,
+ 42, 234, 245, 42, 234, 214, 42, 234, 211, 42, 243, 92, 42, 243, 101, 42,
+ 242, 204, 42, 242, 200, 42, 233, 150, 42, 242, 193, 42, 234, 72, 42, 234,
+ 71, 42, 234, 70, 42, 234, 69, 42, 242, 86, 42, 242, 85, 42, 233, 193, 42,
+ 233, 195, 42, 234, 178, 42, 234, 1, 42, 234, 8, 42, 222, 16, 42, 221,
+ 237, 42, 219, 129, 42, 220, 141, 42, 220, 140, 42, 248, 218, 42, 248, 36,
+ 42, 247, 121, 42, 216, 32, 42, 229, 200, 42, 228, 41, 42, 242, 32, 42,
+ 226, 84, 42, 226, 83, 42, 252, 188, 42, 225, 105, 42, 225, 69, 42, 225,
+ 70, 42, 251, 234, 42, 240, 221, 42, 240, 217, 42, 251, 91, 42, 240, 204,
+ 42, 241, 215, 42, 225, 159, 42, 225, 194, 42, 241, 198, 42, 225, 191, 42,
+ 225, 207, 42, 252, 61, 42, 225, 6, 42, 251, 180, 42, 241, 56, 42, 224,
+ 250, 42, 241, 48, 42, 241, 50, 42, 231, 201, 42, 231, 197, 42, 231, 206,
+ 42, 231, 150, 42, 231, 175, 42, 230, 197, 42, 230, 176, 42, 230, 175, 42,
+ 231, 74, 42, 231, 71, 42, 231, 75, 42, 211, 102, 42, 211, 100, 42, 210,
+ 201, 42, 222, 226, 42, 222, 230, 42, 222, 117, 42, 222, 111, 42, 223, 85,
+ 42, 223, 82, 42, 212, 38, 109, 217, 3, 16, 31, 240, 239, 210, 86, 109,
+ 217, 3, 16, 31, 240, 239, 110, 109, 217, 3, 16, 31, 240, 239, 105, 109,
+ 217, 3, 16, 31, 240, 239, 158, 109, 217, 3, 16, 31, 240, 239, 161, 109,
+ 217, 3, 16, 31, 240, 239, 189, 109, 217, 3, 16, 31, 240, 239, 194, 109,
+ 217, 3, 16, 31, 240, 239, 198, 109, 217, 3, 16, 31, 240, 239, 195, 109,
+ 217, 3, 16, 31, 240, 239, 200, 109, 217, 3, 16, 31, 240, 239, 216, 247,
+ 109, 217, 3, 16, 31, 240, 239, 245, 167, 109, 217, 3, 16, 31, 240, 239,
+ 215, 76, 109, 217, 3, 16, 31, 240, 239, 216, 164, 109, 217, 3, 16, 31,
+ 240, 239, 244, 5, 109, 217, 3, 16, 31, 240, 239, 244, 118, 109, 217, 3,
+ 16, 31, 240, 239, 219, 119, 109, 217, 3, 16, 31, 240, 239, 220, 119, 109,
+ 217, 3, 16, 31, 240, 239, 245, 190, 109, 217, 3, 16, 31, 240, 239, 228,
+ 197, 109, 217, 3, 16, 31, 240, 239, 215, 73, 109, 217, 3, 16, 31, 240,
+ 239, 215, 67, 109, 217, 3, 16, 31, 240, 239, 215, 63, 109, 217, 3, 16,
+ 31, 240, 239, 215, 64, 109, 217, 3, 16, 31, 240, 239, 215, 69, 42, 240,
+ 230, 42, 248, 221, 42, 253, 192, 42, 130, 42, 226, 125, 42, 225, 225, 42,
+ 247, 147, 42, 247, 148, 218, 233, 42, 247, 148, 249, 108, 42, 235, 156,
+ 42, 245, 91, 229, 205, 241, 216, 42, 245, 91, 229, 205, 217, 174, 42,
+ 245, 91, 229, 205, 217, 74, 42, 245, 91, 229, 205, 231, 70, 42, 249, 157,
+ 42, 226, 90, 254, 125, 42, 197, 42, 230, 103, 61, 42, 184, 42, 176, 42,
+ 234, 185, 42, 231, 129, 42, 243, 80, 42, 251, 18, 42, 234, 184, 42, 225,
+ 150, 42, 229, 81, 42, 230, 103, 245, 6, 42, 230, 103, 243, 202, 42, 231,
+ 15, 42, 234, 134, 42, 240, 163, 42, 234, 94, 42, 230, 232, 42, 242, 216,
+ 42, 216, 119, 42, 230, 103, 156, 42, 230, 169, 42, 247, 157, 42, 234, 40,
+ 42, 244, 45, 42, 228, 112, 42, 230, 103, 193, 42, 230, 166, 42, 249, 239,
+ 42, 234, 34, 42, 230, 167, 218, 233, 42, 249, 240, 218, 233, 42, 232, 50,
+ 218, 233, 42, 234, 35, 218, 233, 42, 230, 167, 249, 108, 42, 249, 240,
+ 249, 108, 42, 232, 50, 249, 108, 42, 234, 35, 249, 108, 42, 232, 50, 117,
+ 222, 91, 42, 232, 50, 117, 222, 92, 218, 233, 42, 190, 42, 233, 251, 42,
+ 230, 105, 42, 242, 151, 42, 223, 176, 42, 223, 177, 117, 222, 91, 42,
+ 223, 177, 117, 222, 92, 218, 233, 42, 224, 162, 42, 228, 13, 42, 230,
+ 103, 222, 91, 42, 230, 104, 42, 224, 116, 42, 227, 176, 42, 230, 103,
+ 214, 105, 42, 230, 49, 42, 233, 185, 42, 230, 50, 231, 74, 42, 224, 115,
+ 42, 227, 175, 42, 230, 103, 212, 98, 42, 230, 43, 42, 233, 183, 42, 230,
+ 44, 231, 74, 42, 235, 24, 226, 220, 42, 232, 50, 226, 220, 42, 254, 136,
+ 42, 251, 160, 42, 250, 214, 42, 250, 191, 42, 251, 67, 117, 234, 134, 42,
+ 249, 238, 42, 248, 142, 42, 242, 72, 42, 162, 42, 240, 231, 42, 235, 255,
+ 42, 234, 47, 42, 234, 35, 250, 250, 42, 233, 219, 42, 232, 159, 42, 232,
+ 158, 42, 232, 147, 42, 232, 63, 42, 231, 130, 219, 79, 42, 230, 196, 42,
+ 230, 152, 42, 225, 148, 42, 225, 19, 42, 224, 219, 42, 224, 217, 42, 218,
+ 227, 42, 218, 2, 42, 212, 24, 42, 214, 106, 117, 193, 42, 115, 117, 193,
+ 109, 217, 3, 16, 31, 248, 146, 110, 109, 217, 3, 16, 31, 248, 146, 105,
+ 109, 217, 3, 16, 31, 248, 146, 158, 109, 217, 3, 16, 31, 248, 146, 161,
+ 109, 217, 3, 16, 31, 248, 146, 189, 109, 217, 3, 16, 31, 248, 146, 194,
+ 109, 217, 3, 16, 31, 248, 146, 198, 109, 217, 3, 16, 31, 248, 146, 195,
+ 109, 217, 3, 16, 31, 248, 146, 200, 109, 217, 3, 16, 31, 248, 146, 216,
+ 247, 109, 217, 3, 16, 31, 248, 146, 245, 167, 109, 217, 3, 16, 31, 248,
+ 146, 215, 76, 109, 217, 3, 16, 31, 248, 146, 216, 164, 109, 217, 3, 16,
+ 31, 248, 146, 244, 5, 109, 217, 3, 16, 31, 248, 146, 244, 118, 109, 217,
+ 3, 16, 31, 248, 146, 219, 119, 109, 217, 3, 16, 31, 248, 146, 220, 119,
+ 109, 217, 3, 16, 31, 248, 146, 245, 190, 109, 217, 3, 16, 31, 248, 146,
+ 228, 197, 109, 217, 3, 16, 31, 248, 146, 215, 73, 109, 217, 3, 16, 31,
+ 248, 146, 215, 67, 109, 217, 3, 16, 31, 248, 146, 215, 63, 109, 217, 3,
+ 16, 31, 248, 146, 215, 64, 109, 217, 3, 16, 31, 248, 146, 215, 69, 109,
+ 217, 3, 16, 31, 248, 146, 215, 70, 109, 217, 3, 16, 31, 248, 146, 215,
+ 65, 109, 217, 3, 16, 31, 248, 146, 215, 66, 109, 217, 3, 16, 31, 248,
+ 146, 215, 72, 109, 217, 3, 16, 31, 248, 146, 215, 68, 109, 217, 3, 16,
+ 31, 248, 146, 216, 162, 109, 217, 3, 16, 31, 248, 146, 216, 161, 42, 243,
+ 118, 241, 192, 31, 216, 196, 249, 140, 241, 223, 241, 192, 31, 216, 196,
+ 223, 122, 245, 223, 241, 192, 31, 247, 231, 253, 207, 216, 196, 252, 56,
+ 241, 192, 31, 210, 223, 244, 38, 241, 192, 31, 212, 59, 241, 192, 31,
+ 249, 203, 241, 192, 31, 216, 196, 254, 3, 241, 192, 31, 241, 60, 216, 38,
+ 241, 192, 31, 4, 217, 61, 241, 192, 31, 215, 237, 241, 192, 31, 225, 219,
+ 241, 192, 31, 218, 158, 241, 192, 31, 244, 139, 241, 192, 31, 242, 132,
+ 224, 240, 241, 192, 31, 230, 155, 241, 192, 31, 245, 126, 241, 192, 31,
+ 244, 39, 241, 192, 31, 211, 207, 226, 197, 216, 196, 248, 86, 241, 192,
+ 31, 254, 51, 241, 192, 31, 249, 185, 241, 192, 31, 251, 227, 216, 138,
+ 241, 192, 31, 242, 149, 241, 192, 31, 218, 245, 254, 70, 241, 192, 31,
+ 223, 53, 241, 192, 31, 235, 220, 241, 192, 31, 242, 132, 217, 61, 241,
+ 192, 31, 230, 111, 249, 159, 241, 192, 31, 242, 132, 224, 197, 241, 192,
+ 31, 216, 196, 255, 18, 212, 40, 241, 192, 31, 216, 196, 250, 8, 244, 96,
+ 241, 192, 31, 235, 233, 241, 192, 31, 246, 57, 241, 192, 31, 223, 56,
+ 241, 192, 31, 242, 132, 224, 224, 241, 192, 31, 224, 177, 241, 192, 31,
+ 248, 161, 64, 216, 196, 232, 230, 241, 192, 31, 216, 196, 244, 174, 241,
+ 192, 31, 226, 163, 241, 192, 31, 226, 244, 241, 192, 31, 248, 59, 241,
+ 192, 31, 248, 79, 241, 192, 31, 235, 247, 241, 192, 31, 251, 149, 241,
+ 192, 31, 249, 221, 216, 42, 231, 76, 241, 192, 31, 243, 87, 216, 38, 241,
+ 192, 31, 224, 125, 214, 154, 241, 192, 31, 226, 162, 241, 192, 31, 216,
+ 196, 212, 13, 241, 192, 31, 223, 45, 241, 192, 31, 216, 196, 250, 220,
+ 241, 192, 31, 216, 196, 253, 255, 216, 133, 241, 192, 31, 216, 196, 234,
+ 179, 218, 134, 230, 115, 241, 192, 31, 248, 32, 241, 192, 31, 216, 196,
+ 231, 152, 231, 202, 241, 192, 31, 255, 19, 241, 192, 31, 216, 196, 212,
+ 54, 241, 192, 31, 216, 196, 243, 47, 211, 239, 241, 192, 31, 216, 196,
+ 235, 52, 233, 107, 241, 192, 31, 247, 184, 241, 192, 31, 232, 220, 241,
+ 192, 31, 235, 223, 215, 187, 241, 192, 31, 4, 224, 197, 241, 192, 31,
+ 254, 217, 249, 212, 241, 192, 31, 252, 59, 249, 212, 8, 3, 235, 160, 8,
+ 3, 235, 153, 8, 3, 73, 8, 3, 235, 182, 8, 3, 236, 58, 8, 3, 236, 41, 8,
+ 3, 236, 60, 8, 3, 236, 59, 8, 3, 253, 206, 8, 3, 253, 169, 8, 3, 61, 8,
+ 3, 254, 72, 8, 3, 214, 164, 8, 3, 214, 167, 8, 3, 214, 165, 8, 3, 226,
+ 140, 8, 3, 226, 114, 8, 3, 76, 8, 3, 226, 175, 8, 3, 245, 35, 8, 3, 75,
+ 8, 3, 211, 195, 8, 3, 251, 228, 8, 3, 251, 225, 8, 3, 252, 6, 8, 3, 251,
+ 238, 8, 3, 251, 251, 8, 3, 251, 250, 8, 3, 251, 253, 8, 3, 251, 252, 8,
+ 3, 252, 121, 8, 3, 252, 113, 8, 3, 252, 191, 8, 3, 252, 142, 8, 3, 251,
+ 101, 8, 3, 251, 105, 8, 3, 251, 102, 8, 3, 251, 179, 8, 3, 251, 163, 8,
+ 3, 251, 205, 8, 3, 251, 185, 8, 3, 252, 21, 8, 3, 252, 75, 8, 3, 252, 33,
+ 8, 3, 251, 87, 8, 3, 251, 84, 8, 3, 251, 125, 8, 3, 251, 100, 8, 3, 251,
+ 94, 8, 3, 251, 98, 8, 3, 251, 72, 8, 3, 251, 70, 8, 3, 251, 77, 8, 3,
+ 251, 75, 8, 3, 251, 73, 8, 3, 251, 74, 8, 3, 225, 49, 8, 3, 225, 45, 8,
+ 3, 225, 108, 8, 3, 225, 59, 8, 3, 225, 75, 8, 3, 225, 102, 8, 3, 225, 98,
+ 8, 3, 225, 240, 8, 3, 225, 230, 8, 3, 190, 8, 3, 226, 21, 8, 3, 224, 135,
+ 8, 3, 224, 137, 8, 3, 224, 136, 8, 3, 224, 233, 8, 3, 224, 222, 8, 3,
+ 225, 16, 8, 3, 224, 245, 8, 3, 224, 121, 8, 3, 224, 117, 8, 3, 224, 150,
+ 8, 3, 224, 134, 8, 3, 224, 126, 8, 3, 224, 132, 8, 3, 224, 100, 8, 3,
+ 224, 99, 8, 3, 224, 104, 8, 3, 224, 103, 8, 3, 224, 101, 8, 3, 224, 102,
+ 8, 3, 252, 96, 8, 3, 252, 95, 8, 3, 252, 102, 8, 3, 252, 97, 8, 3, 252,
+ 99, 8, 3, 252, 98, 8, 3, 252, 101, 8, 3, 252, 100, 8, 3, 252, 108, 8, 3,
+ 252, 107, 8, 3, 252, 111, 8, 3, 252, 109, 8, 3, 252, 87, 8, 3, 252, 89,
+ 8, 3, 252, 88, 8, 3, 252, 92, 8, 3, 252, 91, 8, 3, 252, 94, 8, 3, 252,
+ 93, 8, 3, 252, 103, 8, 3, 252, 106, 8, 3, 252, 104, 8, 3, 252, 83, 8, 3,
+ 252, 82, 8, 3, 252, 90, 8, 3, 252, 86, 8, 3, 252, 84, 8, 3, 252, 85, 8,
+ 3, 252, 79, 8, 3, 252, 78, 8, 3, 252, 81, 8, 3, 252, 80, 8, 3, 229, 169,
+ 8, 3, 229, 168, 8, 3, 229, 174, 8, 3, 229, 170, 8, 3, 229, 171, 8, 3,
+ 229, 173, 8, 3, 229, 172, 8, 3, 229, 177, 8, 3, 229, 176, 8, 3, 229, 179,
+ 8, 3, 229, 178, 8, 3, 229, 165, 8, 3, 229, 164, 8, 3, 229, 167, 8, 3,
+ 229, 166, 8, 3, 229, 158, 8, 3, 229, 157, 8, 3, 229, 162, 8, 3, 229, 161,
+ 8, 3, 229, 159, 8, 3, 229, 160, 8, 3, 229, 152, 8, 3, 229, 151, 8, 3,
+ 229, 156, 8, 3, 229, 155, 8, 3, 229, 153, 8, 3, 229, 154, 8, 3, 241, 110,
+ 8, 3, 241, 109, 8, 3, 241, 115, 8, 3, 241, 111, 8, 3, 241, 112, 8, 3,
+ 241, 114, 8, 3, 241, 113, 8, 3, 241, 118, 8, 3, 241, 117, 8, 3, 241, 120,
+ 8, 3, 241, 119, 8, 3, 241, 101, 8, 3, 241, 103, 8, 3, 241, 102, 8, 3,
+ 241, 106, 8, 3, 241, 105, 8, 3, 241, 108, 8, 3, 241, 107, 8, 3, 241, 97,
+ 8, 3, 241, 96, 8, 3, 241, 104, 8, 3, 241, 100, 8, 3, 241, 98, 8, 3, 241,
+ 99, 8, 3, 241, 91, 8, 3, 241, 95, 8, 3, 241, 94, 8, 3, 241, 92, 8, 3,
+ 241, 93, 8, 3, 230, 172, 8, 3, 230, 171, 8, 3, 230, 230, 8, 3, 230, 178,
+ 8, 3, 230, 203, 8, 3, 230, 221, 8, 3, 230, 219, 8, 3, 231, 139, 8, 3,
+ 231, 134, 8, 3, 184, 8, 3, 231, 172, 8, 3, 230, 74, 8, 3, 230, 73, 8, 3,
+ 230, 77, 8, 3, 230, 75, 8, 3, 230, 121, 8, 3, 230, 107, 8, 3, 230, 161,
+ 8, 3, 230, 126, 8, 3, 231, 26, 8, 3, 231, 91, 8, 3, 230, 55, 8, 3, 230,
+ 51, 8, 3, 230, 102, 8, 3, 230, 70, 8, 3, 230, 63, 8, 3, 230, 68, 8, 3,
+ 230, 28, 8, 3, 230, 27, 8, 3, 230, 33, 8, 3, 230, 30, 8, 3, 244, 83, 8,
+ 3, 244, 78, 8, 3, 244, 121, 8, 3, 244, 98, 8, 3, 244, 167, 8, 3, 244,
+ 158, 8, 3, 244, 196, 8, 3, 244, 170, 8, 3, 244, 3, 8, 3, 244, 43, 8, 3,
+ 244, 27, 8, 3, 243, 218, 8, 3, 243, 217, 8, 3, 243, 234, 8, 3, 243, 223,
+ 8, 3, 243, 221, 8, 3, 243, 222, 8, 3, 243, 205, 8, 3, 243, 204, 8, 3,
+ 243, 208, 8, 3, 243, 206, 8, 3, 213, 144, 8, 3, 213, 139, 8, 3, 213, 176,
+ 8, 3, 213, 153, 8, 3, 213, 166, 8, 3, 213, 163, 8, 3, 213, 168, 8, 3,
+ 213, 167, 8, 3, 214, 7, 8, 3, 214, 2, 8, 3, 214, 27, 8, 3, 214, 18, 8, 3,
+ 213, 125, 8, 3, 213, 121, 8, 3, 213, 138, 8, 3, 213, 126, 8, 3, 213, 178,
+ 8, 3, 213, 244, 8, 3, 212, 110, 8, 3, 212, 108, 8, 3, 212, 116, 8, 3,
+ 212, 113, 8, 3, 212, 111, 8, 3, 212, 112, 8, 3, 212, 102, 8, 3, 212, 101,
+ 8, 3, 212, 106, 8, 3, 212, 105, 8, 3, 212, 103, 8, 3, 212, 104, 8, 3,
+ 247, 178, 8, 3, 247, 166, 8, 3, 248, 3, 8, 3, 247, 203, 8, 3, 247, 236,
+ 8, 3, 247, 240, 8, 3, 247, 239, 8, 3, 248, 152, 8, 3, 248, 147, 8, 3,
+ 248, 221, 8, 3, 248, 172, 8, 3, 246, 62, 8, 3, 246, 63, 8, 3, 247, 120,
+ 8, 3, 246, 102, 8, 3, 247, 145, 8, 3, 247, 122, 8, 3, 248, 30, 8, 3, 248,
+ 90, 8, 3, 248, 45, 8, 3, 246, 53, 8, 3, 246, 51, 8, 3, 246, 78, 8, 3,
+ 246, 61, 8, 3, 246, 56, 8, 3, 246, 59, 8, 3, 216, 67, 8, 3, 216, 61, 8,
+ 3, 216, 117, 8, 3, 216, 76, 8, 3, 216, 109, 8, 3, 216, 111, 8, 3, 216,
+ 110, 8, 3, 217, 46, 8, 3, 217, 33, 8, 3, 217, 105, 8, 3, 217, 54, 8, 3,
+ 215, 102, 8, 3, 215, 101, 8, 3, 215, 104, 8, 3, 215, 103, 8, 3, 216, 5,
+ 8, 3, 216, 1, 8, 3, 111, 8, 3, 216, 13, 8, 3, 216, 213, 8, 3, 217, 22, 8,
+ 3, 216, 237, 8, 3, 215, 88, 8, 3, 215, 83, 8, 3, 215, 118, 8, 3, 215,
+ 100, 8, 3, 215, 89, 8, 3, 215, 98, 8, 3, 248, 107, 8, 3, 248, 106, 8, 3,
+ 248, 112, 8, 3, 248, 108, 8, 3, 248, 109, 8, 3, 248, 111, 8, 3, 248, 110,
+ 8, 3, 248, 128, 8, 3, 248, 127, 8, 3, 248, 135, 8, 3, 248, 129, 8, 3,
+ 248, 97, 8, 3, 248, 99, 8, 3, 248, 98, 8, 3, 248, 102, 8, 3, 248, 101, 8,
+ 3, 248, 105, 8, 3, 248, 103, 8, 3, 248, 120, 8, 3, 248, 123, 8, 3, 248,
+ 121, 8, 3, 248, 93, 8, 3, 248, 92, 8, 3, 248, 100, 8, 3, 248, 96, 8, 3,
+ 248, 94, 8, 3, 248, 95, 8, 3, 229, 126, 8, 3, 229, 125, 8, 3, 229, 133,
+ 8, 3, 229, 128, 8, 3, 229, 129, 8, 3, 229, 130, 8, 3, 229, 142, 8, 3,
+ 229, 141, 8, 3, 229, 148, 8, 3, 229, 143, 8, 3, 229, 118, 8, 3, 229, 117,
+ 8, 3, 229, 124, 8, 3, 229, 119, 8, 3, 229, 134, 8, 3, 229, 140, 8, 3,
+ 229, 138, 8, 3, 229, 110, 8, 3, 229, 109, 8, 3, 229, 115, 8, 3, 229, 113,
+ 8, 3, 229, 111, 8, 3, 229, 112, 8, 3, 241, 77, 8, 3, 241, 76, 8, 3, 241,
+ 83, 8, 3, 241, 78, 8, 3, 241, 80, 8, 3, 241, 79, 8, 3, 241, 82, 8, 3,
+ 241, 81, 8, 3, 241, 88, 8, 3, 241, 87, 8, 3, 241, 90, 8, 3, 241, 89, 8,
+ 3, 241, 71, 8, 3, 241, 72, 8, 3, 241, 74, 8, 3, 241, 73, 8, 3, 241, 75,
+ 8, 3, 241, 84, 8, 3, 241, 86, 8, 3, 241, 85, 8, 3, 241, 70, 8, 3, 228,
+ 189, 8, 3, 228, 187, 8, 3, 228, 233, 8, 3, 228, 192, 8, 3, 228, 215, 8,
+ 3, 228, 229, 8, 3, 228, 228, 8, 3, 229, 183, 8, 3, 197, 8, 3, 229, 197,
+ 8, 3, 227, 186, 8, 3, 227, 188, 8, 3, 227, 187, 8, 3, 228, 51, 8, 3, 228,
+ 38, 8, 3, 228, 74, 8, 3, 228, 60, 8, 3, 229, 83, 8, 3, 229, 107, 8, 3,
+ 229, 94, 8, 3, 227, 181, 8, 3, 227, 177, 8, 3, 227, 237, 8, 3, 227, 185,
+ 8, 3, 227, 183, 8, 3, 227, 184, 8, 3, 241, 141, 8, 3, 241, 140, 8, 3,
+ 241, 146, 8, 3, 241, 142, 8, 3, 241, 143, 8, 3, 241, 145, 8, 3, 241, 144,
+ 8, 3, 241, 151, 8, 3, 241, 150, 8, 3, 241, 153, 8, 3, 241, 152, 8, 3,
+ 241, 133, 8, 3, 241, 135, 8, 3, 241, 134, 8, 3, 241, 137, 8, 3, 241, 139,
+ 8, 3, 241, 138, 8, 3, 241, 147, 8, 3, 241, 149, 8, 3, 241, 148, 8, 3,
+ 241, 129, 8, 3, 241, 128, 8, 3, 241, 136, 8, 3, 241, 132, 8, 3, 241, 130,
+ 8, 3, 241, 131, 8, 3, 241, 123, 8, 3, 241, 122, 8, 3, 241, 127, 8, 3,
+ 241, 126, 8, 3, 241, 124, 8, 3, 241, 125, 8, 3, 232, 195, 8, 3, 232, 189,
+ 8, 3, 232, 241, 8, 3, 232, 202, 8, 3, 232, 233, 8, 3, 232, 232, 8, 3,
+ 232, 236, 8, 3, 232, 234, 8, 3, 233, 79, 8, 3, 233, 69, 8, 3, 233, 135,
+ 8, 3, 233, 88, 8, 3, 232, 79, 8, 3, 232, 78, 8, 3, 232, 81, 8, 3, 232,
+ 80, 8, 3, 232, 116, 8, 3, 232, 106, 8, 3, 232, 156, 8, 3, 232, 120, 8, 3,
+ 233, 2, 8, 3, 233, 58, 8, 3, 233, 17, 8, 3, 232, 74, 8, 3, 232, 72, 8, 3,
+ 232, 98, 8, 3, 232, 77, 8, 3, 232, 75, 8, 3, 232, 76, 8, 3, 232, 54, 8,
+ 3, 232, 53, 8, 3, 232, 62, 8, 3, 232, 57, 8, 3, 232, 55, 8, 3, 232, 56,
+ 8, 3, 242, 189, 8, 3, 242, 188, 8, 3, 242, 214, 8, 3, 242, 199, 8, 3,
+ 242, 206, 8, 3, 242, 205, 8, 3, 242, 208, 8, 3, 242, 207, 8, 3, 243, 89,
+ 8, 3, 243, 84, 8, 3, 243, 135, 8, 3, 243, 99, 8, 3, 242, 91, 8, 3, 242,
+ 90, 8, 3, 242, 93, 8, 3, 242, 92, 8, 3, 242, 154, 8, 3, 242, 152, 8, 3,
+ 242, 174, 8, 3, 242, 162, 8, 3, 243, 33, 8, 3, 243, 31, 8, 3, 243, 62, 8,
+ 3, 243, 44, 8, 3, 242, 81, 8, 3, 242, 80, 8, 3, 242, 113, 8, 3, 242, 89,
+ 8, 3, 242, 82, 8, 3, 242, 88, 8, 3, 234, 61, 8, 3, 234, 60, 8, 3, 234,
+ 92, 8, 3, 234, 75, 8, 3, 234, 85, 8, 3, 234, 88, 8, 3, 234, 86, 8, 3,
+ 234, 202, 8, 3, 234, 190, 8, 3, 176, 8, 3, 234, 228, 8, 3, 233, 200, 8,
+ 3, 233, 205, 8, 3, 233, 202, 8, 3, 234, 0, 8, 3, 233, 252, 8, 3, 234, 28,
+ 8, 3, 234, 7, 8, 3, 234, 156, 8, 3, 234, 140, 8, 3, 234, 182, 8, 3, 234,
+ 159, 8, 3, 233, 189, 8, 3, 233, 186, 8, 3, 233, 217, 8, 3, 233, 199, 8,
+ 3, 233, 192, 8, 3, 233, 196, 8, 3, 243, 15, 8, 3, 243, 14, 8, 3, 243, 19,
+ 8, 3, 243, 16, 8, 3, 243, 18, 8, 3, 243, 17, 8, 3, 243, 26, 8, 3, 243,
+ 25, 8, 3, 243, 29, 8, 3, 243, 27, 8, 3, 243, 6, 8, 3, 243, 5, 8, 3, 243,
+ 8, 8, 3, 243, 7, 8, 3, 243, 11, 8, 3, 243, 10, 8, 3, 243, 13, 8, 3, 243,
+ 12, 8, 3, 243, 21, 8, 3, 243, 20, 8, 3, 243, 24, 8, 3, 243, 22, 8, 3,
+ 243, 1, 8, 3, 243, 0, 8, 3, 243, 9, 8, 3, 243, 4, 8, 3, 243, 2, 8, 3,
+ 243, 3, 8, 3, 230, 249, 8, 3, 230, 250, 8, 3, 231, 12, 8, 3, 231, 11, 8,
+ 3, 231, 14, 8, 3, 231, 13, 8, 3, 230, 240, 8, 3, 230, 242, 8, 3, 230,
+ 241, 8, 3, 230, 245, 8, 3, 230, 244, 8, 3, 230, 247, 8, 3, 230, 246, 8,
+ 3, 230, 251, 8, 3, 230, 253, 8, 3, 230, 252, 8, 3, 230, 236, 8, 3, 230,
+ 235, 8, 3, 230, 243, 8, 3, 230, 239, 8, 3, 230, 237, 8, 3, 230, 238, 8,
+ 3, 240, 180, 8, 3, 240, 179, 8, 3, 240, 186, 8, 3, 240, 181, 8, 3, 240,
+ 183, 8, 3, 240, 182, 8, 3, 240, 185, 8, 3, 240, 184, 8, 3, 240, 191, 8,
+ 3, 240, 190, 8, 3, 240, 193, 8, 3, 240, 192, 8, 3, 240, 172, 8, 3, 240,
+ 171, 8, 3, 240, 174, 8, 3, 240, 173, 8, 3, 240, 176, 8, 3, 240, 175, 8,
+ 3, 240, 178, 8, 3, 240, 177, 8, 3, 240, 187, 8, 3, 240, 189, 8, 3, 240,
+ 188, 8, 3, 229, 24, 8, 3, 229, 26, 8, 3, 229, 25, 8, 3, 229, 67, 8, 3,
+ 229, 65, 8, 3, 229, 77, 8, 3, 229, 70, 8, 3, 228, 243, 8, 3, 228, 242, 8,
+ 3, 228, 244, 8, 3, 228, 252, 8, 3, 228, 249, 8, 3, 229, 4, 8, 3, 228,
+ 254, 8, 3, 229, 58, 8, 3, 229, 64, 8, 3, 229, 60, 8, 3, 241, 156, 8, 3,
+ 241, 166, 8, 3, 241, 175, 8, 3, 241, 251, 8, 3, 241, 243, 8, 3, 162, 8,
+ 3, 242, 6, 8, 3, 240, 206, 8, 3, 240, 205, 8, 3, 240, 208, 8, 3, 240,
+ 207, 8, 3, 240, 242, 8, 3, 240, 233, 8, 3, 241, 68, 8, 3, 241, 47, 8, 3,
+ 241, 194, 8, 3, 241, 238, 8, 3, 241, 206, 8, 3, 212, 43, 8, 3, 212, 28,
+ 8, 3, 212, 65, 8, 3, 212, 51, 8, 3, 211, 185, 8, 3, 211, 187, 8, 3, 211,
+ 186, 8, 3, 211, 203, 8, 3, 211, 227, 8, 3, 211, 210, 8, 3, 212, 5, 8, 3,
+ 212, 22, 8, 3, 212, 10, 8, 3, 210, 30, 8, 3, 210, 29, 8, 3, 210, 44, 8,
+ 3, 210, 32, 8, 3, 210, 37, 8, 3, 210, 39, 8, 3, 210, 38, 8, 3, 210, 102,
+ 8, 3, 210, 99, 8, 3, 210, 116, 8, 3, 210, 105, 8, 3, 210, 6, 8, 3, 210,
+ 8, 8, 3, 210, 7, 8, 3, 210, 19, 8, 3, 210, 18, 8, 3, 210, 23, 8, 3, 210,
+ 20, 8, 3, 210, 84, 8, 3, 210, 94, 8, 3, 210, 88, 8, 3, 210, 2, 8, 3, 210,
+ 1, 8, 3, 210, 13, 8, 3, 210, 5, 8, 3, 210, 3, 8, 3, 210, 4, 8, 3, 209,
+ 245, 8, 3, 209, 244, 8, 3, 209, 250, 8, 3, 209, 248, 8, 3, 209, 246, 8,
+ 3, 209, 247, 8, 3, 250, 28, 8, 3, 250, 24, 8, 3, 250, 51, 8, 3, 250, 37,
+ 8, 3, 250, 48, 8, 3, 250, 42, 8, 3, 250, 50, 8, 3, 250, 49, 8, 3, 250,
+ 224, 8, 3, 250, 217, 8, 3, 251, 33, 8, 3, 250, 251, 8, 3, 249, 104, 8, 3,
+ 249, 106, 8, 3, 249, 105, 8, 3, 249, 153, 8, 3, 249, 144, 8, 3, 249, 238,
+ 8, 3, 249, 169, 8, 3, 250, 160, 8, 3, 250, 190, 8, 3, 250, 165, 8, 3,
+ 249, 84, 8, 3, 249, 82, 8, 3, 249, 112, 8, 3, 249, 102, 8, 3, 249, 89, 8,
+ 3, 249, 101, 8, 3, 249, 63, 8, 3, 249, 62, 8, 3, 249, 73, 8, 3, 249, 69,
+ 8, 3, 249, 64, 8, 3, 249, 66, 8, 3, 209, 228, 8, 3, 209, 227, 8, 3, 209,
+ 234, 8, 3, 209, 229, 8, 3, 209, 231, 8, 3, 209, 230, 8, 3, 209, 233, 8,
+ 3, 209, 232, 8, 3, 209, 240, 8, 3, 209, 239, 8, 3, 209, 243, 8, 3, 209,
+ 241, 8, 3, 209, 224, 8, 3, 209, 226, 8, 3, 209, 225, 8, 3, 209, 235, 8,
+ 3, 209, 238, 8, 3, 209, 236, 8, 3, 209, 217, 8, 3, 209, 221, 8, 3, 209,
+ 220, 8, 3, 209, 218, 8, 3, 209, 219, 8, 3, 209, 211, 8, 3, 209, 210, 8,
+ 3, 209, 216, 8, 3, 209, 214, 8, 3, 209, 212, 8, 3, 209, 213, 8, 3, 227,
+ 104, 8, 3, 227, 103, 8, 3, 227, 109, 8, 3, 227, 105, 8, 3, 227, 106, 8,
+ 3, 227, 108, 8, 3, 227, 107, 8, 3, 227, 114, 8, 3, 227, 113, 8, 3, 227,
+ 117, 8, 3, 227, 116, 8, 3, 227, 97, 8, 3, 227, 98, 8, 3, 227, 101, 8, 3,
+ 227, 102, 8, 3, 227, 110, 8, 3, 227, 112, 8, 3, 227, 92, 8, 3, 227, 100,
+ 8, 3, 227, 96, 8, 3, 227, 93, 8, 3, 227, 94, 8, 3, 227, 87, 8, 3, 227,
+ 86, 8, 3, 227, 91, 8, 3, 227, 90, 8, 3, 227, 88, 8, 3, 227, 89, 8, 3,
+ 219, 127, 8, 3, 194, 8, 3, 219, 191, 8, 3, 219, 130, 8, 3, 219, 183, 8,
+ 3, 219, 186, 8, 3, 219, 184, 8, 3, 221, 226, 8, 3, 221, 214, 8, 3, 206,
+ 8, 3, 221, 234, 8, 3, 218, 28, 8, 3, 218, 30, 8, 3, 218, 29, 8, 3, 219,
+ 34, 8, 3, 219, 23, 8, 3, 219, 58, 8, 3, 219, 38, 8, 3, 220, 114, 8, 3,
+ 221, 181, 8, 3, 220, 139, 8, 3, 218, 5, 8, 3, 218, 3, 8, 3, 218, 83, 8,
+ 3, 218, 27, 8, 3, 218, 9, 8, 3, 218, 17, 8, 3, 217, 166, 8, 3, 217, 165,
+ 8, 3, 217, 232, 8, 3, 217, 173, 8, 3, 217, 168, 8, 3, 217, 172, 8, 3,
+ 218, 186, 8, 3, 218, 185, 8, 3, 218, 192, 8, 3, 218, 187, 8, 3, 218, 189,
+ 8, 3, 218, 191, 8, 3, 218, 190, 8, 3, 218, 200, 8, 3, 218, 198, 8, 3,
+ 218, 223, 8, 3, 218, 201, 8, 3, 218, 181, 8, 3, 218, 180, 8, 3, 218, 184,
+ 8, 3, 218, 182, 8, 3, 218, 194, 8, 3, 218, 197, 8, 3, 218, 195, 8, 3,
+ 218, 177, 8, 3, 218, 175, 8, 3, 218, 179, 8, 3, 218, 178, 8, 3, 218, 170,
+ 8, 3, 218, 169, 8, 3, 218, 174, 8, 3, 218, 173, 8, 3, 218, 171, 8, 3,
+ 218, 172, 8, 3, 210, 77, 8, 3, 210, 76, 8, 3, 210, 82, 8, 3, 210, 79, 8,
+ 3, 210, 59, 8, 3, 210, 61, 8, 3, 210, 60, 8, 3, 210, 64, 8, 3, 210, 63,
+ 8, 3, 210, 67, 8, 3, 210, 65, 8, 3, 210, 71, 8, 3, 210, 70, 8, 3, 210,
+ 74, 8, 3, 210, 72, 8, 3, 210, 55, 8, 3, 210, 54, 8, 3, 210, 62, 8, 3,
+ 210, 58, 8, 3, 210, 56, 8, 3, 210, 57, 8, 3, 210, 47, 8, 3, 210, 46, 8,
+ 3, 210, 51, 8, 3, 210, 50, 8, 3, 210, 48, 8, 3, 210, 49, 8, 3, 250, 136,
+ 8, 3, 250, 133, 8, 3, 250, 157, 8, 3, 250, 144, 8, 3, 250, 65, 8, 3, 250,
+ 64, 8, 3, 250, 67, 8, 3, 250, 66, 8, 3, 250, 79, 8, 3, 250, 78, 8, 3,
+ 250, 86, 8, 3, 250, 81, 8, 3, 250, 115, 8, 3, 250, 113, 8, 3, 250, 131,
+ 8, 3, 250, 121, 8, 3, 250, 59, 8, 3, 250, 69, 8, 3, 250, 63, 8, 3, 250,
+ 60, 8, 3, 250, 62, 8, 3, 250, 53, 8, 3, 250, 52, 8, 3, 250, 57, 8, 3,
+ 250, 56, 8, 3, 250, 54, 8, 3, 250, 55, 8, 3, 222, 175, 8, 3, 222, 179, 8,
+ 3, 222, 158, 8, 3, 222, 159, 8, 3, 222, 162, 8, 3, 222, 161, 8, 3, 222,
+ 165, 8, 3, 222, 163, 8, 3, 222, 169, 8, 3, 222, 168, 8, 3, 222, 174, 8,
+ 3, 222, 170, 8, 3, 222, 154, 8, 3, 222, 152, 8, 3, 222, 160, 8, 3, 222,
+ 157, 8, 3, 222, 155, 8, 3, 222, 156, 8, 3, 222, 147, 8, 3, 222, 146, 8,
+ 3, 222, 151, 8, 3, 222, 150, 8, 3, 222, 148, 8, 3, 222, 149, 8, 3, 228,
+ 34, 8, 3, 228, 33, 8, 3, 228, 36, 8, 3, 228, 35, 8, 3, 228, 26, 8, 3,
+ 228, 28, 8, 3, 228, 27, 8, 3, 228, 30, 8, 3, 228, 29, 8, 3, 228, 32, 8,
+ 3, 228, 31, 8, 3, 228, 21, 8, 3, 228, 20, 8, 3, 228, 25, 8, 3, 228, 24,
+ 8, 3, 228, 22, 8, 3, 228, 23, 8, 3, 228, 15, 8, 3, 228, 14, 8, 3, 228,
+ 19, 8, 3, 228, 18, 8, 3, 228, 16, 8, 3, 228, 17, 8, 3, 220, 72, 8, 3,
+ 220, 67, 8, 3, 220, 102, 8, 3, 220, 83, 8, 3, 219, 215, 8, 3, 219, 217,
+ 8, 3, 219, 216, 8, 3, 219, 236, 8, 3, 219, 233, 8, 3, 220, 7, 8, 3, 219,
+ 254, 8, 3, 220, 42, 8, 3, 220, 35, 8, 3, 220, 63, 8, 3, 220, 50, 8, 3,
+ 219, 211, 8, 3, 219, 209, 8, 3, 219, 225, 8, 3, 219, 214, 8, 3, 219, 212,
+ 8, 3, 219, 213, 8, 3, 219, 194, 8, 3, 219, 193, 8, 3, 219, 200, 8, 3,
+ 219, 197, 8, 3, 219, 195, 8, 3, 219, 196, 8, 3, 223, 141, 8, 3, 223, 135,
+ 8, 3, 205, 8, 3, 223, 147, 8, 3, 222, 120, 8, 3, 222, 122, 8, 3, 222,
+ 121, 8, 3, 222, 188, 8, 3, 222, 181, 8, 3, 222, 211, 8, 3, 222, 192, 8,
+ 3, 223, 43, 8, 3, 223, 128, 8, 3, 223, 81, 8, 3, 222, 113, 8, 3, 222,
+ 110, 8, 3, 222, 140, 8, 3, 222, 119, 8, 3, 222, 115, 8, 3, 222, 116, 8,
+ 3, 222, 95, 8, 3, 222, 94, 8, 3, 222, 100, 8, 3, 222, 98, 8, 3, 222, 96,
+ 8, 3, 222, 97, 8, 3, 235, 98, 8, 3, 235, 97, 8, 3, 235, 108, 8, 3, 235,
+ 99, 8, 3, 235, 104, 8, 3, 235, 103, 8, 3, 235, 106, 8, 3, 235, 105, 8, 3,
+ 235, 41, 8, 3, 235, 40, 8, 3, 235, 43, 8, 3, 235, 42, 8, 3, 235, 56, 8,
+ 3, 235, 54, 8, 3, 235, 68, 8, 3, 235, 58, 8, 3, 235, 34, 8, 3, 235, 32,
+ 8, 3, 235, 51, 8, 3, 235, 39, 8, 3, 235, 36, 8, 3, 235, 37, 8, 3, 235,
+ 26, 8, 3, 235, 25, 8, 3, 235, 30, 8, 3, 235, 29, 8, 3, 235, 27, 8, 3,
+ 235, 28, 8, 3, 224, 46, 8, 3, 224, 44, 8, 3, 224, 53, 8, 3, 224, 47, 8,
+ 3, 224, 50, 8, 3, 224, 49, 8, 3, 224, 52, 8, 3, 224, 51, 8, 3, 223, 255,
+ 8, 3, 223, 252, 8, 3, 224, 1, 8, 3, 224, 0, 8, 3, 224, 33, 8, 3, 224, 32,
+ 8, 3, 224, 42, 8, 3, 224, 36, 8, 3, 223, 247, 8, 3, 223, 243, 8, 3, 224,
+ 30, 8, 3, 223, 251, 8, 3, 223, 249, 8, 3, 223, 250, 8, 3, 223, 227, 8, 3,
+ 223, 225, 8, 3, 223, 237, 8, 3, 223, 230, 8, 3, 223, 228, 8, 3, 223, 229,
+ 8, 3, 235, 87, 8, 3, 235, 86, 8, 3, 235, 93, 8, 3, 235, 88, 8, 3, 235,
+ 90, 8, 3, 235, 89, 8, 3, 235, 92, 8, 3, 235, 91, 8, 3, 235, 78, 8, 3,
+ 235, 80, 8, 3, 235, 79, 8, 3, 235, 83, 8, 3, 235, 82, 8, 3, 235, 85, 8,
+ 3, 235, 84, 8, 3, 235, 74, 8, 3, 235, 73, 8, 3, 235, 81, 8, 3, 235, 77,
+ 8, 3, 235, 75, 8, 3, 235, 76, 8, 3, 235, 70, 8, 3, 235, 69, 8, 3, 235,
+ 72, 8, 3, 235, 71, 8, 3, 228, 162, 8, 3, 228, 161, 8, 3, 228, 169, 8, 3,
+ 228, 163, 8, 3, 228, 165, 8, 3, 228, 164, 8, 3, 228, 168, 8, 3, 228, 166,
+ 8, 3, 228, 151, 8, 3, 228, 152, 8, 3, 228, 157, 8, 3, 228, 156, 8, 3,
+ 228, 160, 8, 3, 228, 158, 8, 3, 228, 146, 8, 3, 228, 155, 8, 3, 228, 150,
+ 8, 3, 228, 147, 8, 3, 228, 148, 8, 3, 228, 141, 8, 3, 228, 140, 8, 3,
+ 228, 145, 8, 3, 228, 144, 8, 3, 228, 142, 8, 3, 228, 143, 8, 3, 227, 137,
+ 8, 3, 227, 136, 8, 3, 227, 148, 8, 3, 227, 141, 8, 3, 227, 145, 8, 3,
+ 227, 144, 8, 3, 227, 147, 8, 3, 227, 146, 8, 3, 227, 124, 8, 3, 227, 126,
+ 8, 3, 227, 125, 8, 3, 227, 130, 8, 3, 227, 129, 8, 3, 227, 134, 8, 3,
+ 227, 131, 8, 3, 227, 122, 8, 3, 227, 120, 8, 3, 227, 128, 8, 3, 227, 123,
+ 8, 3, 211, 150, 8, 3, 211, 149, 8, 3, 211, 157, 8, 3, 211, 152, 8, 3,
+ 211, 154, 8, 3, 211, 153, 8, 3, 211, 156, 8, 3, 211, 155, 8, 3, 211, 139,
+ 8, 3, 211, 140, 8, 3, 211, 144, 8, 3, 211, 143, 8, 3, 211, 148, 8, 3,
+ 211, 146, 8, 3, 211, 121, 8, 3, 211, 119, 8, 3, 211, 131, 8, 3, 211, 124,
+ 8, 3, 211, 122, 8, 3, 211, 123, 8, 3, 210, 250, 8, 3, 210, 248, 8, 3,
+ 211, 8, 8, 3, 210, 251, 8, 3, 211, 2, 8, 3, 211, 1, 8, 3, 211, 5, 8, 3,
+ 211, 3, 8, 3, 210, 191, 8, 3, 210, 190, 8, 3, 210, 194, 8, 3, 210, 192,
+ 8, 3, 210, 224, 8, 3, 210, 221, 8, 3, 210, 244, 8, 3, 210, 228, 8, 3,
+ 210, 182, 8, 3, 210, 178, 8, 3, 210, 212, 8, 3, 210, 189, 8, 3, 210, 185,
+ 8, 3, 210, 186, 8, 3, 210, 162, 8, 3, 210, 161, 8, 3, 210, 169, 8, 3,
+ 210, 165, 8, 3, 210, 163, 8, 3, 210, 164, 8, 34, 224, 33, 8, 34, 232,
+ 241, 8, 34, 234, 61, 8, 34, 227, 141, 8, 34, 249, 69, 8, 34, 218, 192, 8,
+ 34, 243, 12, 8, 34, 243, 44, 8, 34, 230, 230, 8, 34, 240, 180, 8, 34,
+ 232, 56, 8, 34, 252, 83, 8, 34, 230, 126, 8, 34, 210, 244, 8, 34, 224,
+ 121, 8, 34, 240, 174, 8, 34, 217, 46, 8, 34, 243, 135, 8, 34, 210, 5, 8,
+ 34, 249, 63, 8, 34, 248, 95, 8, 34, 251, 98, 8, 34, 243, 8, 8, 34, 227,
+ 131, 8, 34, 215, 118, 8, 34, 226, 175, 8, 34, 235, 74, 8, 34, 210, 19, 8,
+ 34, 224, 100, 8, 34, 241, 108, 8, 34, 210, 250, 8, 34, 212, 112, 8, 34,
+ 219, 200, 8, 34, 213, 244, 8, 34, 210, 116, 8, 34, 235, 68, 8, 34, 227,
+ 96, 8, 34, 235, 72, 8, 34, 242, 154, 8, 34, 235, 92, 8, 34, 211, 227, 8,
+ 34, 246, 78, 8, 34, 219, 213, 8, 34, 232, 236, 8, 34, 249, 73, 8, 34,
+ 249, 105, 8, 34, 250, 37, 8, 34, 240, 177, 8, 34, 220, 72, 8, 34, 210, 4,
+ 8, 34, 219, 254, 8, 34, 250, 131, 8, 34, 209, 231, 8, 34, 229, 173, 8,
+ 34, 234, 182, 232, 196, 1, 252, 191, 232, 196, 1, 190, 232, 196, 1, 225,
+ 147, 232, 196, 1, 248, 221, 232, 196, 1, 217, 105, 232, 196, 1, 216, 208,
+ 232, 196, 1, 243, 135, 232, 196, 1, 176, 232, 196, 1, 234, 132, 232, 196,
+ 1, 235, 141, 232, 196, 1, 251, 33, 232, 196, 1, 250, 157, 232, 196, 1,
+ 246, 38, 232, 196, 1, 215, 183, 232, 196, 1, 215, 175, 232, 196, 1, 184,
+ 232, 196, 1, 197, 232, 196, 1, 233, 135, 232, 196, 1, 206, 232, 196, 1,
+ 210, 82, 232, 196, 1, 210, 116, 232, 196, 1, 229, 77, 232, 196, 1, 162,
+ 232, 196, 1, 211, 165, 232, 196, 1, 241, 189, 232, 196, 1, 244, 196, 232,
+ 196, 1, 212, 65, 232, 196, 1, 220, 102, 232, 196, 1, 191, 232, 196, 1,
+ 242, 249, 232, 196, 1, 61, 232, 196, 1, 254, 243, 232, 196, 1, 75, 232,
+ 196, 1, 245, 55, 232, 196, 1, 73, 232, 196, 1, 76, 232, 196, 1, 70, 232,
+ 196, 1, 214, 214, 232, 196, 1, 214, 208, 232, 196, 1, 226, 234, 232, 196,
+ 1, 138, 230, 32, 216, 117, 232, 196, 1, 138, 229, 229, 225, 16, 232, 196,
+ 1, 138, 230, 32, 249, 72, 232, 196, 1, 138, 230, 32, 251, 205, 232, 196,
+ 1, 138, 230, 32, 197, 232, 196, 1, 138, 230, 32, 235, 115, 232, 196, 224,
+ 141, 249, 219, 232, 196, 224, 141, 243, 229, 218, 129, 41, 3, 245, 209,
+ 41, 3, 245, 205, 41, 3, 241, 220, 41, 3, 212, 17, 41, 3, 212, 16, 41, 3,
+ 225, 211, 41, 3, 252, 13, 41, 3, 252, 66, 41, 3, 231, 116, 41, 3, 233,
+ 247, 41, 3, 231, 6, 41, 3, 243, 75, 41, 3, 244, 147, 41, 3, 213, 250, 41,
+ 3, 217, 11, 41, 3, 216, 194, 41, 3, 248, 16, 41, 3, 248, 13, 41, 3, 233,
+ 50, 41, 3, 223, 108, 41, 3, 248, 77, 41, 3, 229, 139, 41, 3, 221, 170,
+ 41, 3, 220, 61, 41, 3, 210, 92, 41, 3, 210, 73, 41, 3, 250, 182, 41, 3,
+ 235, 124, 41, 3, 228, 176, 41, 3, 211, 44, 41, 3, 234, 181, 41, 3, 229,
+ 51, 41, 3, 243, 55, 41, 3, 231, 80, 41, 3, 229, 103, 41, 3, 227, 155, 41,
+ 3, 73, 41, 3, 235, 255, 41, 3, 241, 180, 41, 3, 241, 160, 41, 3, 211,
+ 250, 41, 3, 211, 241, 41, 3, 225, 108, 41, 3, 252, 11, 41, 3, 252, 6, 41,
+ 3, 231, 109, 41, 3, 233, 244, 41, 3, 231, 3, 41, 3, 243, 71, 41, 3, 244,
+ 121, 41, 3, 213, 176, 41, 3, 216, 117, 41, 3, 216, 175, 41, 3, 248, 8,
+ 41, 3, 248, 12, 41, 3, 232, 241, 41, 3, 223, 35, 41, 3, 248, 3, 41, 3,
+ 229, 133, 41, 3, 219, 191, 41, 3, 220, 32, 41, 3, 210, 44, 41, 3, 210,
+ 69, 41, 3, 250, 51, 41, 3, 235, 108, 41, 3, 228, 169, 41, 3, 211, 8, 41,
+ 3, 234, 92, 41, 3, 229, 43, 41, 3, 242, 214, 41, 3, 230, 230, 41, 3, 228,
+ 233, 41, 3, 227, 148, 41, 3, 61, 41, 3, 254, 123, 41, 3, 229, 72, 41, 3,
+ 162, 41, 3, 242, 18, 41, 3, 212, 65, 41, 3, 212, 55, 41, 3, 190, 41, 3,
+ 252, 18, 41, 3, 252, 191, 41, 3, 231, 124, 41, 3, 233, 251, 41, 3, 233,
+ 250, 41, 3, 231, 10, 41, 3, 243, 79, 41, 3, 244, 196, 41, 3, 214, 27, 41,
+ 3, 217, 105, 41, 3, 216, 208, 41, 3, 248, 25, 41, 3, 248, 15, 41, 3, 233,
+ 135, 41, 3, 205, 41, 3, 248, 221, 41, 3, 229, 148, 41, 3, 206, 41, 3,
+ 220, 102, 41, 3, 210, 116, 41, 3, 210, 82, 41, 3, 251, 33, 41, 3, 235,
+ 141, 41, 3, 228, 185, 41, 3, 191, 41, 3, 176, 41, 3, 234, 234, 41, 3,
+ 229, 56, 41, 3, 243, 135, 41, 3, 184, 41, 3, 197, 41, 3, 227, 165, 41, 3,
+ 226, 183, 41, 3, 226, 179, 41, 3, 241, 53, 41, 3, 211, 215, 41, 3, 211,
+ 211, 41, 3, 224, 249, 41, 3, 252, 9, 41, 3, 251, 193, 41, 3, 231, 104,
+ 41, 3, 233, 242, 41, 3, 230, 255, 41, 3, 243, 67, 41, 3, 244, 34, 41, 3,
+ 213, 127, 41, 3, 216, 17, 41, 3, 216, 153, 41, 3, 248, 6, 41, 3, 248, 10,
+ 41, 3, 232, 127, 41, 3, 222, 197, 41, 3, 247, 125, 41, 3, 229, 120, 41,
+ 3, 219, 40, 41, 3, 220, 1, 41, 3, 210, 21, 41, 3, 210, 66, 41, 3, 249,
+ 174, 41, 3, 235, 59, 41, 3, 228, 159, 41, 3, 210, 229, 41, 3, 234, 10,
+ 41, 3, 229, 41, 41, 3, 242, 164, 41, 3, 230, 132, 41, 3, 228, 64, 41, 3,
+ 227, 132, 41, 3, 70, 41, 3, 214, 190, 41, 3, 240, 222, 41, 3, 240, 212,
+ 41, 3, 211, 195, 41, 3, 211, 189, 41, 3, 224, 150, 41, 3, 252, 8, 41, 3,
+ 251, 125, 41, 3, 231, 103, 41, 3, 233, 240, 41, 3, 230, 254, 41, 3, 243,
+ 66, 41, 3, 243, 234, 41, 3, 212, 116, 41, 3, 215, 118, 41, 3, 216, 136,
+ 41, 3, 248, 4, 41, 3, 248, 9, 41, 3, 232, 98, 41, 3, 222, 140, 41, 3,
+ 246, 78, 41, 3, 229, 115, 41, 3, 218, 83, 41, 3, 219, 225, 41, 3, 210,
+ 13, 41, 3, 210, 62, 41, 3, 249, 112, 41, 3, 235, 51, 41, 3, 228, 155, 41,
+ 3, 210, 212, 41, 3, 233, 217, 41, 3, 229, 40, 41, 3, 242, 113, 41, 3,
+ 230, 102, 41, 3, 227, 237, 41, 3, 227, 128, 41, 3, 76, 41, 3, 226, 196,
+ 41, 3, 229, 0, 41, 3, 241, 68, 41, 3, 241, 56, 41, 3, 211, 227, 41, 3,
+ 211, 216, 41, 3, 225, 16, 41, 3, 252, 10, 41, 3, 251, 205, 41, 3, 231,
+ 105, 41, 3, 233, 243, 41, 3, 231, 1, 41, 3, 243, 69, 41, 3, 243, 68, 41,
+ 3, 244, 43, 41, 3, 213, 138, 41, 3, 111, 41, 3, 216, 156, 41, 3, 248, 7,
+ 41, 3, 248, 11, 41, 3, 232, 156, 41, 3, 222, 211, 41, 3, 247, 145, 41, 3,
+ 229, 124, 41, 3, 219, 58, 41, 3, 220, 7, 41, 3, 210, 23, 41, 3, 210, 67,
+ 41, 3, 249, 238, 41, 3, 235, 68, 41, 3, 228, 160, 41, 3, 210, 244, 41, 3,
+ 234, 28, 41, 3, 229, 42, 41, 3, 242, 174, 41, 3, 230, 161, 41, 3, 228,
+ 74, 41, 3, 227, 134, 41, 3, 75, 41, 3, 245, 150, 41, 3, 229, 61, 41, 3,
+ 241, 238, 41, 3, 241, 209, 41, 3, 212, 22, 41, 3, 212, 12, 41, 3, 225,
+ 221, 41, 3, 252, 14, 41, 3, 252, 75, 41, 3, 231, 117, 41, 3, 233, 248,
+ 41, 3, 233, 246, 41, 3, 231, 7, 41, 3, 243, 76, 41, 3, 243, 74, 41, 3,
+ 244, 154, 41, 3, 213, 255, 41, 3, 217, 22, 41, 3, 216, 195, 41, 3, 248,
+ 17, 41, 3, 248, 14, 41, 3, 233, 58, 41, 3, 223, 128, 41, 3, 248, 90, 41,
+ 3, 229, 140, 41, 3, 221, 181, 41, 3, 220, 63, 41, 3, 210, 94, 41, 3, 210,
+ 74, 41, 3, 250, 190, 41, 3, 235, 126, 41, 3, 228, 178, 41, 3, 211, 47,
+ 41, 3, 234, 182, 41, 3, 229, 52, 41, 3, 229, 48, 41, 3, 243, 62, 41, 3,
+ 243, 51, 41, 3, 231, 91, 41, 3, 229, 107, 41, 3, 227, 156, 41, 3, 229,
+ 79, 41, 3, 233, 22, 41, 249, 219, 41, 243, 229, 218, 129, 41, 224, 13,
+ 78, 41, 3, 229, 123, 244, 196, 41, 3, 229, 123, 176, 41, 3, 229, 123,
+ 219, 40, 41, 16, 244, 144, 41, 16, 234, 180, 41, 16, 216, 81, 41, 16,
+ 228, 208, 41, 16, 252, 147, 41, 16, 244, 195, 41, 16, 217, 101, 41, 16,
+ 248, 176, 41, 16, 247, 124, 41, 16, 233, 206, 41, 16, 216, 21, 41, 16,
+ 247, 144, 41, 16, 235, 60, 41, 21, 210, 86, 41, 21, 110, 41, 21, 105, 41,
+ 21, 158, 41, 21, 161, 41, 21, 189, 41, 21, 194, 41, 21, 198, 41, 21, 195,
+ 41, 21, 200, 41, 3, 229, 123, 184, 41, 3, 229, 123, 247, 145, 33, 6, 1,
+ 210, 90, 33, 4, 1, 210, 90, 33, 6, 1, 246, 34, 33, 4, 1, 246, 34, 33, 6,
+ 1, 223, 49, 246, 36, 33, 4, 1, 223, 49, 246, 36, 33, 6, 1, 235, 185, 33,
+ 4, 1, 235, 185, 33, 6, 1, 247, 161, 33, 4, 1, 247, 161, 33, 6, 1, 230,
+ 140, 214, 205, 33, 4, 1, 230, 140, 214, 205, 33, 6, 1, 251, 136, 226,
+ 201, 33, 4, 1, 251, 136, 226, 201, 33, 6, 1, 229, 87, 211, 31, 33, 4, 1,
+ 229, 87, 211, 31, 33, 6, 1, 211, 28, 2, 252, 185, 211, 31, 33, 4, 1, 211,
+ 28, 2, 252, 185, 211, 31, 33, 6, 1, 235, 183, 211, 59, 33, 4, 1, 235,
+ 183, 211, 59, 33, 6, 1, 223, 49, 210, 212, 33, 4, 1, 223, 49, 210, 212,
+ 33, 6, 1, 235, 183, 61, 33, 4, 1, 235, 183, 61, 33, 6, 1, 250, 0, 232,
+ 192, 210, 183, 33, 4, 1, 250, 0, 232, 192, 210, 183, 33, 6, 1, 251, 214,
+ 210, 183, 33, 4, 1, 251, 214, 210, 183, 33, 6, 1, 235, 183, 250, 0, 232,
+ 192, 210, 183, 33, 4, 1, 235, 183, 250, 0, 232, 192, 210, 183, 33, 6, 1,
+ 210, 246, 33, 4, 1, 210, 246, 33, 6, 1, 223, 49, 215, 178, 33, 4, 1, 223,
+ 49, 215, 178, 33, 6, 1, 219, 52, 248, 90, 33, 4, 1, 219, 52, 248, 90, 33,
+ 6, 1, 219, 52, 245, 174, 33, 4, 1, 219, 52, 245, 174, 33, 6, 1, 219, 52,
+ 245, 159, 33, 4, 1, 219, 52, 245, 159, 33, 6, 1, 230, 144, 76, 33, 4, 1,
+ 230, 144, 76, 33, 6, 1, 251, 240, 76, 33, 4, 1, 251, 240, 76, 33, 6, 1,
+ 52, 230, 144, 76, 33, 4, 1, 52, 230, 144, 76, 33, 1, 230, 86, 76, 38, 33,
+ 212, 100, 38, 33, 216, 248, 230, 191, 50, 38, 33, 240, 211, 230, 191, 50,
+ 38, 33, 216, 148, 230, 191, 50, 219, 93, 253, 216, 38, 33, 1, 214, 202,
+ 236, 60, 38, 33, 1, 73, 38, 33, 1, 211, 8, 38, 33, 1, 70, 38, 33, 1, 242,
+ 3, 50, 38, 33, 1, 211, 27, 38, 33, 1, 219, 52, 50, 38, 33, 1, 226, 201,
+ 38, 33, 234, 192, 38, 33, 225, 227, 33, 234, 192, 33, 225, 227, 33, 6, 1,
+ 246, 46, 33, 4, 1, 246, 46, 33, 6, 1, 246, 27, 33, 4, 1, 246, 27, 33, 6,
+ 1, 210, 52, 33, 4, 1, 210, 52, 33, 6, 1, 250, 206, 33, 4, 1, 250, 206,
+ 33, 6, 1, 246, 25, 33, 4, 1, 246, 25, 33, 6, 1, 217, 23, 2, 230, 224,
+ 103, 33, 4, 1, 217, 23, 2, 230, 224, 103, 33, 6, 1, 215, 78, 33, 4, 1,
+ 215, 78, 33, 6, 1, 215, 160, 33, 4, 1, 215, 160, 33, 6, 1, 215, 164, 33,
+ 4, 1, 215, 164, 33, 6, 1, 217, 28, 33, 4, 1, 217, 28, 33, 6, 1, 240, 198,
+ 33, 4, 1, 240, 198, 33, 6, 1, 219, 206, 33, 4, 1, 219, 206, 38, 33, 1,
+ 235, 183, 75, 20, 1, 61, 20, 1, 176, 20, 1, 70, 20, 1, 233, 217, 20, 1,
+ 245, 209, 20, 1, 223, 108, 20, 1, 217, 86, 20, 1, 76, 20, 1, 227, 148,
+ 20, 1, 73, 20, 1, 233, 135, 20, 1, 190, 20, 1, 222, 239, 20, 1, 223, 29,
+ 20, 1, 233, 49, 20, 1, 231, 79, 20, 1, 217, 101, 20, 1, 229, 146, 20, 1,
+ 228, 183, 20, 1, 193, 20, 1, 218, 4, 20, 1, 230, 102, 20, 1, 220, 27, 20,
+ 1, 219, 191, 20, 1, 220, 37, 20, 1, 220, 123, 20, 1, 233, 155, 20, 1,
+ 234, 156, 20, 1, 227, 209, 20, 1, 227, 237, 20, 1, 228, 154, 20, 1, 210,
+ 226, 20, 1, 219, 225, 20, 1, 210, 187, 20, 1, 191, 20, 1, 228, 9, 20, 1,
+ 234, 142, 20, 1, 225, 151, 20, 1, 228, 176, 20, 1, 227, 246, 20, 1, 224,
+ 144, 20, 1, 211, 192, 20, 1, 225, 211, 20, 1, 244, 147, 20, 1, 222, 140,
+ 20, 1, 232, 98, 20, 1, 230, 230, 20, 1, 228, 233, 20, 1, 223, 51, 20, 1,
+ 223, 171, 20, 1, 234, 165, 20, 1, 229, 7, 20, 1, 229, 56, 20, 1, 229, 77,
+ 20, 1, 220, 7, 20, 1, 224, 147, 20, 1, 243, 234, 20, 1, 244, 37, 20, 1,
+ 212, 65, 20, 1, 197, 20, 1, 232, 241, 20, 1, 225, 108, 20, 1, 232, 119,
+ 20, 1, 234, 28, 20, 1, 231, 114, 20, 1, 223, 83, 20, 1, 231, 58, 20, 1,
+ 184, 20, 1, 216, 117, 20, 1, 234, 92, 20, 1, 230, 161, 20, 1, 231, 122,
+ 20, 1, 216, 230, 20, 1, 233, 251, 20, 1, 216, 247, 20, 1, 227, 238, 20,
+ 1, 221, 251, 20, 1, 244, 192, 20, 1, 233, 253, 20, 1, 234, 24, 20, 38,
+ 164, 234, 5, 20, 38, 164, 215, 110, 20, 228, 182, 20, 243, 229, 218, 129,
+ 20, 249, 226, 20, 249, 219, 20, 220, 150, 20, 224, 13, 78, 58, 1, 250,
+ 96, 138, 210, 254, 225, 61, 58, 1, 250, 96, 138, 211, 70, 225, 61, 58, 1,
+ 250, 96, 138, 210, 254, 220, 84, 58, 1, 250, 96, 138, 211, 70, 220, 84,
+ 58, 1, 250, 96, 138, 210, 254, 224, 30, 58, 1, 250, 96, 138, 211, 70,
+ 224, 30, 58, 1, 250, 96, 138, 210, 254, 222, 140, 58, 1, 250, 96, 138,
+ 211, 70, 222, 140, 58, 1, 245, 20, 246, 118, 138, 130, 58, 1, 125, 246,
+ 118, 138, 130, 58, 1, 230, 225, 246, 118, 138, 130, 58, 1, 121, 246, 118,
+ 138, 130, 58, 1, 245, 19, 246, 118, 138, 130, 58, 1, 245, 20, 246, 118,
+ 233, 39, 138, 130, 58, 1, 125, 246, 118, 233, 39, 138, 130, 58, 1, 230,
+ 225, 246, 118, 233, 39, 138, 130, 58, 1, 121, 246, 118, 233, 39, 138,
+ 130, 58, 1, 245, 19, 246, 118, 233, 39, 138, 130, 58, 1, 245, 20, 233,
+ 39, 138, 130, 58, 1, 125, 233, 39, 138, 130, 58, 1, 230, 225, 233, 39,
+ 138, 130, 58, 1, 121, 233, 39, 138, 130, 58, 1, 245, 19, 233, 39, 138,
+ 130, 58, 1, 59, 67, 130, 58, 1, 59, 219, 95, 58, 1, 59, 203, 130, 58, 1,
+ 232, 108, 44, 249, 161, 254, 109, 58, 1, 223, 157, 120, 74, 58, 1, 223,
+ 157, 124, 74, 58, 1, 223, 157, 245, 31, 78, 58, 1, 223, 157, 235, 193,
+ 245, 31, 78, 58, 1, 121, 235, 193, 245, 31, 78, 58, 1, 218, 111, 22, 125,
+ 216, 30, 58, 1, 218, 111, 22, 121, 216, 30, 7, 6, 1, 245, 199, 254, 170,
+ 7, 4, 1, 245, 199, 254, 170, 7, 6, 1, 245, 199, 254, 196, 7, 4, 1, 245,
+ 199, 254, 196, 7, 6, 1, 241, 207, 7, 4, 1, 241, 207, 7, 6, 1, 215, 40, 7,
+ 4, 1, 215, 40, 7, 6, 1, 215, 229, 7, 4, 1, 215, 229, 7, 6, 1, 249, 110,
+ 7, 4, 1, 249, 110, 7, 6, 1, 249, 111, 2, 249, 219, 7, 4, 1, 249, 111, 2,
+ 249, 219, 7, 1, 4, 6, 245, 6, 7, 1, 4, 6, 222, 91, 7, 6, 1, 255, 73, 7,
+ 4, 1, 255, 73, 7, 6, 1, 254, 73, 7, 4, 1, 254, 73, 7, 6, 1, 253, 192, 7,
+ 4, 1, 253, 192, 7, 6, 1, 253, 176, 7, 4, 1, 253, 176, 7, 6, 1, 253, 177,
+ 2, 203, 130, 7, 4, 1, 253, 177, 2, 203, 130, 7, 6, 1, 253, 167, 7, 4, 1,
+ 253, 167, 7, 6, 1, 223, 49, 251, 67, 2, 247, 120, 7, 4, 1, 223, 49, 251,
+ 67, 2, 247, 120, 7, 6, 1, 235, 24, 2, 91, 7, 4, 1, 235, 24, 2, 91, 7, 6,
+ 1, 235, 24, 2, 247, 255, 91, 7, 4, 1, 235, 24, 2, 247, 255, 91, 7, 6, 1,
+ 235, 24, 2, 218, 103, 22, 247, 255, 91, 7, 4, 1, 235, 24, 2, 218, 103,
+ 22, 247, 255, 91, 7, 6, 1, 251, 135, 156, 7, 4, 1, 251, 135, 156, 7, 6,
+ 1, 233, 149, 2, 125, 91, 7, 4, 1, 233, 149, 2, 125, 91, 7, 6, 1, 144, 2,
+ 199, 218, 103, 226, 120, 7, 4, 1, 144, 2, 199, 218, 103, 226, 120, 7, 6,
+ 1, 144, 2, 232, 123, 7, 4, 1, 144, 2, 232, 123, 7, 6, 1, 226, 183, 7, 4,
+ 1, 226, 183, 7, 6, 1, 226, 106, 2, 218, 103, 216, 139, 248, 39, 7, 4, 1,
+ 226, 106, 2, 218, 103, 216, 139, 248, 39, 7, 6, 1, 226, 106, 2, 244, 53,
+ 7, 4, 1, 226, 106, 2, 244, 53, 7, 6, 1, 226, 106, 2, 218, 229, 217, 77,
+ 7, 4, 1, 226, 106, 2, 218, 229, 217, 77, 7, 6, 1, 224, 97, 2, 218, 103,
+ 216, 139, 248, 39, 7, 4, 1, 224, 97, 2, 218, 103, 216, 139, 248, 39, 7,
+ 6, 1, 224, 97, 2, 247, 255, 91, 7, 4, 1, 224, 97, 2, 247, 255, 91, 7, 6,
+ 1, 223, 224, 222, 186, 7, 4, 1, 223, 224, 222, 186, 7, 6, 1, 222, 130,
+ 222, 186, 7, 4, 1, 222, 130, 222, 186, 7, 6, 1, 214, 106, 2, 247, 255,
+ 91, 7, 4, 1, 214, 106, 2, 247, 255, 91, 7, 6, 1, 212, 106, 7, 4, 1, 212,
+ 106, 7, 6, 1, 213, 145, 210, 159, 7, 4, 1, 213, 145, 210, 159, 7, 6, 1,
+ 216, 152, 2, 91, 7, 4, 1, 216, 152, 2, 91, 7, 6, 1, 216, 152, 2, 218,
+ 103, 216, 139, 248, 39, 7, 4, 1, 216, 152, 2, 218, 103, 216, 139, 248,
+ 39, 7, 6, 1, 213, 245, 7, 4, 1, 213, 245, 7, 6, 1, 245, 65, 7, 4, 1, 245,
+ 65, 7, 6, 1, 235, 171, 7, 4, 1, 235, 171, 7, 6, 1, 249, 207, 7, 4, 1,
+ 249, 207, 58, 1, 214, 133, 7, 4, 1, 246, 69, 7, 4, 1, 232, 84, 7, 4, 1,
+ 230, 80, 7, 4, 1, 227, 201, 7, 4, 1, 222, 129, 7, 1, 4, 6, 222, 129, 7,
+ 4, 1, 215, 108, 7, 4, 1, 214, 197, 7, 6, 1, 235, 213, 249, 60, 7, 4, 1,
+ 235, 213, 249, 60, 7, 6, 1, 235, 213, 245, 6, 7, 4, 1, 235, 213, 245, 6,
+ 7, 6, 1, 235, 213, 243, 202, 7, 6, 1, 215, 94, 235, 213, 243, 202, 7, 4,
+ 1, 215, 94, 235, 213, 243, 202, 7, 6, 1, 215, 94, 156, 7, 4, 1, 215, 94,
+ 156, 7, 6, 1, 235, 213, 153, 7, 4, 1, 235, 213, 153, 7, 6, 1, 235, 213,
+ 222, 91, 7, 4, 1, 235, 213, 222, 91, 7, 6, 1, 235, 213, 217, 152, 7, 4,
+ 1, 235, 213, 217, 152, 58, 1, 121, 250, 31, 255, 14, 58, 1, 249, 226, 58,
+ 1, 219, 251, 245, 98, 50, 7, 6, 1, 221, 255, 7, 4, 1, 221, 255, 7, 6, 1,
+ 215, 94, 242, 60, 7, 4, 1, 233, 149, 2, 223, 55, 241, 52, 22, 252, 41, 7,
+ 6, 1, 230, 26, 2, 248, 39, 7, 4, 1, 230, 26, 2, 248, 39, 7, 6, 1, 251,
+ 67, 2, 130, 7, 4, 1, 251, 67, 2, 130, 7, 6, 1, 243, 203, 2, 226, 248, 91,
+ 7, 4, 1, 243, 203, 2, 226, 248, 91, 7, 6, 1, 235, 24, 2, 226, 248, 91, 7,
+ 4, 1, 235, 24, 2, 226, 248, 91, 7, 6, 1, 230, 26, 2, 226, 248, 91, 7, 4,
+ 1, 230, 26, 2, 226, 248, 91, 7, 6, 1, 223, 224, 2, 226, 248, 91, 7, 4, 1,
+ 223, 224, 2, 226, 248, 91, 7, 6, 1, 222, 92, 2, 226, 248, 91, 7, 4, 1,
+ 222, 92, 2, 226, 248, 91, 7, 6, 1, 242, 61, 2, 103, 58, 1, 6, 242, 61, 2,
+ 91, 58, 1, 4, 27, 226, 234, 7, 1, 4, 6, 215, 94, 193, 7, 245, 103, 1,
+ 223, 49, 245, 6, 7, 245, 103, 1, 223, 49, 226, 105, 7, 245, 103, 1, 235,
+ 193, 193, 7, 245, 103, 1, 240, 154, 232, 129, 7, 245, 103, 1, 254, 23,
+ 193, 217, 230, 229, 214, 1, 61, 217, 230, 229, 214, 1, 73, 217, 230, 229,
+ 214, 5, 246, 48, 217, 230, 229, 214, 1, 70, 217, 230, 229, 214, 1, 75,
+ 217, 230, 229, 214, 1, 76, 217, 230, 229, 214, 5, 241, 253, 217, 230,
+ 229, 214, 1, 234, 28, 217, 230, 229, 214, 1, 234, 105, 217, 230, 229,
+ 214, 1, 242, 174, 217, 230, 229, 214, 1, 242, 224, 217, 230, 229, 214, 5,
+ 254, 75, 217, 230, 229, 214, 1, 249, 238, 217, 230, 229, 214, 1, 250, 86,
+ 217, 230, 229, 214, 1, 235, 68, 217, 230, 229, 214, 1, 235, 109, 217,
+ 230, 229, 214, 1, 215, 133, 217, 230, 229, 214, 1, 215, 139, 217, 230,
+ 229, 214, 1, 248, 105, 217, 230, 229, 214, 1, 248, 114, 217, 230, 229,
+ 214, 1, 111, 217, 230, 229, 214, 1, 216, 156, 217, 230, 229, 214, 1, 247,
+ 145, 217, 230, 229, 214, 1, 248, 7, 217, 230, 229, 214, 1, 228, 74, 217,
+ 230, 229, 214, 1, 225, 16, 217, 230, 229, 214, 1, 225, 121, 217, 230,
+ 229, 214, 1, 251, 205, 217, 230, 229, 214, 1, 252, 10, 217, 230, 229,
+ 214, 1, 230, 161, 217, 230, 229, 214, 1, 222, 211, 217, 230, 229, 214, 1,
+ 232, 156, 217, 230, 229, 214, 1, 222, 165, 217, 230, 229, 214, 1, 219,
+ 58, 217, 230, 229, 214, 1, 241, 68, 217, 230, 229, 214, 25, 5, 61, 217,
+ 230, 229, 214, 25, 5, 73, 217, 230, 229, 214, 25, 5, 70, 217, 230, 229,
+ 214, 25, 5, 75, 217, 230, 229, 214, 25, 5, 226, 183, 217, 230, 229, 214,
+ 225, 12, 231, 158, 217, 230, 229, 214, 225, 12, 231, 157, 217, 230, 229,
+ 214, 225, 12, 231, 156, 217, 230, 229, 214, 225, 12, 231, 155, 228, 56,
+ 235, 240, 244, 2, 123, 224, 21, 228, 56, 235, 240, 244, 2, 123, 242, 27,
+ 228, 56, 235, 240, 244, 2, 134, 224, 19, 228, 56, 235, 240, 244, 2, 123,
+ 219, 117, 228, 56, 235, 240, 244, 2, 123, 245, 188, 228, 56, 235, 240,
+ 244, 2, 134, 219, 116, 228, 56, 235, 240, 224, 22, 78, 228, 56, 235, 240,
+ 225, 40, 78, 228, 56, 235, 240, 222, 118, 78, 228, 56, 235, 240, 224, 23,
+ 78, 225, 144, 1, 176, 225, 144, 1, 234, 132, 225, 144, 1, 243, 135, 225,
+ 144, 1, 229, 77, 225, 144, 1, 251, 33, 225, 144, 1, 250, 157, 225, 144,
+ 1, 235, 141, 225, 144, 1, 227, 165, 225, 144, 1, 217, 105, 225, 144, 1,
+ 216, 208, 225, 144, 1, 248, 221, 225, 144, 1, 197, 225, 144, 1, 190, 225,
+ 144, 1, 225, 147, 225, 144, 1, 252, 191, 225, 144, 1, 184, 225, 144, 1,
+ 215, 183, 225, 144, 1, 215, 175, 225, 144, 1, 246, 38, 225, 144, 1, 212,
+ 65, 225, 144, 1, 210, 82, 225, 144, 1, 210, 116, 225, 144, 1, 4, 61, 225,
+ 144, 1, 191, 225, 144, 1, 205, 225, 144, 1, 233, 135, 225, 144, 1, 220,
+ 102, 225, 144, 1, 206, 225, 144, 1, 162, 225, 144, 1, 61, 225, 144, 1,
+ 73, 225, 144, 1, 70, 225, 144, 1, 75, 225, 144, 1, 76, 225, 144, 1, 224,
+ 88, 225, 144, 1, 211, 165, 225, 144, 1, 244, 196, 225, 144, 1, 243, 29,
+ 225, 144, 1, 245, 209, 225, 144, 218, 73, 1, 212, 65, 225, 144, 218, 73,
+ 1, 191, 225, 144, 1, 215, 156, 225, 144, 1, 215, 144, 225, 144, 1, 248,
+ 135, 225, 144, 1, 228, 110, 225, 144, 1, 254, 141, 191, 225, 144, 1, 213,
+ 134, 220, 102, 225, 144, 1, 213, 135, 162, 225, 144, 1, 253, 223, 244,
+ 196, 225, 144, 218, 73, 1, 205, 225, 144, 218, 25, 1, 205, 225, 144, 1,
+ 250, 255, 225, 144, 219, 155, 241, 236, 78, 225, 144, 52, 241, 236, 78,
+ 225, 144, 164, 220, 95, 225, 144, 164, 52, 220, 95, 179, 5, 254, 75, 179,
+ 5, 213, 147, 179, 1, 61, 179, 1, 255, 73, 179, 1, 73, 179, 1, 236, 33,
+ 179, 1, 70, 179, 1, 214, 118, 179, 1, 149, 153, 179, 1, 149, 222, 180,
+ 179, 1, 149, 156, 179, 1, 149, 232, 185, 179, 1, 75, 179, 1, 245, 209,
+ 179, 1, 254, 201, 179, 1, 76, 179, 1, 226, 183, 179, 1, 253, 192, 179, 1,
+ 176, 179, 1, 234, 132, 179, 1, 243, 135, 179, 1, 242, 249, 179, 1, 229,
+ 77, 179, 1, 251, 33, 179, 1, 250, 157, 179, 1, 235, 141, 179, 1, 235,
+ 114, 179, 1, 227, 165, 179, 1, 215, 156, 179, 1, 215, 144, 179, 1, 248,
+ 135, 179, 1, 248, 119, 179, 1, 228, 110, 179, 1, 217, 105, 179, 1, 216,
+ 208, 179, 1, 248, 221, 179, 1, 248, 25, 179, 1, 197, 179, 1, 190, 179, 1,
+ 225, 147, 179, 1, 252, 191, 179, 1, 252, 18, 179, 1, 184, 179, 1, 191,
+ 179, 1, 205, 179, 1, 233, 135, 179, 1, 214, 27, 179, 1, 220, 102, 179, 1,
+ 218, 223, 179, 1, 206, 179, 1, 162, 179, 1, 232, 184, 179, 116, 5, 242,
+ 44, 179, 25, 5, 255, 73, 179, 25, 5, 73, 179, 25, 5, 236, 33, 179, 25, 5,
+ 70, 179, 25, 5, 214, 118, 179, 25, 5, 149, 153, 179, 25, 5, 149, 222,
+ 180, 179, 25, 5, 149, 156, 179, 25, 5, 149, 232, 185, 179, 25, 5, 75,
+ 179, 25, 5, 245, 209, 179, 25, 5, 254, 201, 179, 25, 5, 76, 179, 25, 5,
+ 226, 183, 179, 25, 5, 253, 192, 179, 5, 213, 152, 179, 248, 178, 179, 52,
+ 248, 178, 179, 21, 210, 86, 179, 21, 110, 179, 21, 105, 179, 21, 158,
+ 179, 21, 161, 179, 21, 189, 179, 21, 194, 179, 21, 198, 179, 21, 195,
+ 179, 21, 200, 38, 84, 21, 210, 86, 38, 84, 21, 110, 38, 84, 21, 105, 38,
+ 84, 21, 158, 38, 84, 21, 161, 38, 84, 21, 189, 38, 84, 21, 194, 38, 84,
+ 21, 198, 38, 84, 21, 195, 38, 84, 21, 200, 38, 84, 1, 61, 38, 84, 1, 70,
+ 38, 84, 1, 176, 38, 84, 1, 197, 38, 84, 1, 190, 38, 84, 1, 205, 38, 84,
+ 1, 213, 176, 38, 84, 5, 253, 175, 84, 5, 219, 17, 250, 255, 84, 5, 251,
+ 0, 213, 152, 84, 5, 52, 251, 0, 213, 152, 84, 5, 251, 0, 105, 84, 5, 251,
+ 0, 158, 84, 5, 251, 0, 253, 175, 84, 5, 224, 124, 84, 243, 100, 244, 103,
+ 84, 250, 238, 84, 241, 230, 234, 188, 232, 242, 21, 210, 86, 234, 188,
+ 232, 242, 21, 110, 234, 188, 232, 242, 21, 105, 234, 188, 232, 242, 21,
+ 158, 234, 188, 232, 242, 21, 161, 234, 188, 232, 242, 21, 189, 234, 188,
+ 232, 242, 21, 194, 234, 188, 232, 242, 21, 198, 234, 188, 232, 242, 21,
+ 195, 234, 188, 232, 242, 21, 200, 234, 188, 232, 242, 1, 176, 234, 188,
+ 232, 242, 1, 234, 132, 234, 188, 232, 242, 1, 243, 135, 234, 188, 232,
+ 242, 1, 229, 77, 234, 188, 232, 242, 1, 206, 234, 188, 232, 242, 1, 220,
+ 102, 234, 188, 232, 242, 1, 210, 116, 234, 188, 232, 242, 1, 227, 165,
+ 234, 188, 232, 242, 1, 217, 105, 234, 188, 232, 242, 1, 240, 226, 234,
+ 188, 232, 242, 1, 197, 234, 188, 232, 242, 1, 190, 234, 188, 232, 242, 1,
+ 225, 147, 234, 188, 232, 242, 1, 184, 234, 188, 232, 242, 1, 248, 221,
+ 234, 188, 232, 242, 1, 252, 191, 234, 188, 232, 242, 1, 205, 234, 188,
+ 232, 242, 1, 191, 234, 188, 232, 242, 1, 233, 135, 234, 188, 232, 242, 1,
+ 212, 65, 234, 188, 232, 242, 1, 216, 208, 234, 188, 232, 242, 1, 162,
+ 234, 188, 232, 242, 1, 214, 27, 234, 188, 232, 242, 1, 251, 33, 234, 188,
+ 232, 242, 1, 61, 234, 188, 232, 242, 1, 226, 234, 234, 188, 232, 242, 1,
+ 73, 234, 188, 232, 242, 1, 226, 183, 234, 188, 232, 242, 25, 214, 214,
+ 234, 188, 232, 242, 25, 75, 234, 188, 232, 242, 25, 70, 234, 188, 232,
+ 242, 25, 245, 209, 234, 188, 232, 242, 25, 76, 234, 188, 232, 242, 138,
+ 225, 30, 234, 188, 232, 242, 138, 251, 12, 234, 188, 232, 242, 138, 251,
+ 13, 225, 30, 234, 188, 232, 242, 5, 249, 77, 234, 188, 232, 242, 5, 219,
+ 199, 223, 93, 1, 176, 223, 93, 1, 243, 135, 223, 93, 1, 229, 77, 223, 93,
+ 1, 217, 105, 223, 93, 1, 248, 221, 223, 93, 1, 197, 223, 93, 1, 190, 223,
+ 93, 1, 252, 191, 223, 93, 1, 184, 223, 93, 1, 251, 33, 223, 93, 1, 235,
+ 141, 223, 93, 1, 227, 165, 223, 93, 1, 206, 223, 93, 1, 205, 223, 93, 1,
+ 233, 135, 223, 93, 1, 191, 223, 93, 1, 212, 65, 223, 93, 1, 162, 223, 93,
+ 1, 231, 124, 223, 93, 1, 229, 56, 223, 93, 1, 229, 148, 223, 93, 1, 227,
+ 135, 223, 93, 1, 61, 223, 93, 25, 5, 73, 223, 93, 25, 5, 70, 223, 93, 25,
+ 5, 75, 223, 93, 25, 5, 254, 201, 223, 93, 25, 5, 76, 223, 93, 25, 5, 253,
+ 192, 223, 93, 25, 5, 245, 55, 223, 93, 25, 5, 245, 233, 223, 93, 116, 5,
+ 229, 79, 223, 93, 116, 5, 230, 25, 223, 93, 116, 5, 153, 223, 93, 116, 5,
+ 242, 60, 223, 93, 213, 152, 223, 93, 221, 173, 78, 24, 100, 216, 97, 24,
+ 100, 216, 96, 24, 100, 216, 94, 24, 100, 216, 99, 24, 100, 223, 21, 24,
+ 100, 223, 5, 24, 100, 223, 0, 24, 100, 223, 2, 24, 100, 223, 18, 24, 100,
+ 223, 11, 24, 100, 223, 4, 24, 100, 223, 23, 24, 100, 223, 6, 24, 100,
+ 223, 25, 24, 100, 223, 22, 24, 100, 230, 213, 24, 100, 230, 204, 24, 100,
+ 230, 207, 24, 100, 225, 80, 24, 100, 225, 91, 24, 100, 225, 92, 24, 100,
+ 218, 207, 24, 100, 236, 46, 24, 100, 236, 53, 24, 100, 218, 218, 24, 100,
+ 218, 205, 24, 100, 225, 130, 24, 100, 241, 167, 24, 100, 218, 202, 155,
+ 5, 226, 27, 155, 5, 250, 187, 155, 5, 233, 66, 155, 5, 211, 243, 155, 1,
+ 61, 155, 1, 240, 154, 234, 191, 155, 1, 73, 155, 1, 236, 33, 155, 1, 70,
+ 155, 1, 226, 90, 250, 163, 155, 1, 229, 78, 233, 28, 155, 1, 229, 78,
+ 233, 29, 223, 142, 155, 1, 75, 155, 1, 254, 201, 155, 1, 76, 155, 1, 176,
+ 155, 1, 235, 13, 221, 228, 155, 1, 235, 13, 230, 66, 155, 1, 243, 135,
+ 155, 1, 243, 136, 230, 66, 155, 1, 229, 77, 155, 1, 251, 33, 155, 1, 251,
+ 34, 230, 66, 155, 1, 235, 141, 155, 1, 227, 166, 230, 66, 155, 1, 235,
+ 142, 231, 207, 155, 1, 227, 165, 155, 1, 215, 156, 155, 1, 215, 157, 231,
+ 207, 155, 1, 248, 135, 155, 1, 248, 136, 231, 207, 155, 1, 229, 229, 230,
+ 66, 155, 1, 217, 105, 155, 1, 217, 106, 230, 66, 155, 1, 248, 221, 155,
+ 1, 248, 222, 231, 207, 155, 1, 197, 155, 1, 190, 155, 1, 226, 90, 230,
+ 66, 155, 1, 252, 191, 155, 1, 252, 192, 230, 66, 155, 1, 184, 155, 1,
+ 191, 155, 1, 205, 155, 1, 223, 188, 254, 210, 155, 1, 233, 135, 155, 1,
+ 212, 65, 155, 1, 222, 34, 230, 66, 155, 1, 222, 34, 231, 207, 155, 1,
+ 206, 155, 1, 162, 155, 5, 250, 188, 216, 250, 155, 25, 5, 217, 47, 155,
+ 25, 5, 216, 35, 155, 25, 5, 211, 190, 155, 25, 5, 211, 191, 231, 69, 155,
+ 25, 5, 218, 47, 155, 25, 5, 218, 48, 231, 57, 155, 25, 5, 217, 65, 155,
+ 25, 5, 247, 194, 230, 65, 155, 25, 5, 225, 184, 155, 116, 5, 234, 158,
+ 155, 116, 5, 225, 196, 155, 116, 5, 251, 19, 155, 226, 40, 155, 43, 223,
+ 69, 155, 44, 223, 69, 155, 226, 79, 254, 117, 155, 226, 79, 231, 224,
+ 155, 226, 79, 232, 88, 155, 226, 79, 211, 238, 155, 226, 79, 226, 41,
+ 155, 226, 79, 232, 205, 155, 226, 79, 232, 82, 155, 226, 79, 254, 249,
+ 155, 226, 79, 254, 250, 254, 249, 155, 226, 79, 225, 51, 155, 215, 94,
+ 226, 79, 225, 51, 155, 226, 36, 155, 21, 210, 86, 155, 21, 110, 155, 21,
+ 105, 155, 21, 158, 155, 21, 161, 155, 21, 189, 155, 21, 194, 155, 21,
+ 198, 155, 21, 195, 155, 21, 200, 155, 226, 79, 216, 69, 215, 106, 155,
+ 226, 79, 235, 167, 172, 1, 61, 172, 1, 73, 172, 1, 70, 172, 1, 75, 172,
+ 1, 254, 201, 172, 1, 76, 172, 1, 176, 172, 1, 234, 132, 172, 1, 243, 135,
+ 172, 1, 242, 249, 172, 1, 228, 245, 172, 1, 229, 77, 172, 1, 250, 157,
+ 172, 1, 250, 112, 172, 1, 235, 141, 172, 1, 235, 114, 172, 1, 228, 235,
+ 172, 1, 228, 237, 172, 1, 228, 236, 172, 1, 217, 105, 172, 1, 216, 208,
+ 172, 1, 248, 221, 172, 1, 248, 25, 172, 1, 227, 207, 172, 1, 197, 172, 1,
+ 248, 135, 172, 1, 190, 172, 1, 224, 220, 172, 1, 225, 147, 172, 1, 252,
+ 191, 172, 1, 252, 18, 172, 1, 230, 95, 172, 1, 184, 172, 1, 252, 111,
+ 172, 1, 191, 172, 1, 205, 172, 1, 233, 135, 172, 1, 214, 27, 172, 1, 218,
+ 223, 172, 1, 206, 172, 1, 162, 172, 25, 5, 255, 73, 172, 25, 5, 73, 172,
+ 25, 5, 236, 33, 172, 25, 5, 245, 195, 172, 25, 5, 70, 172, 25, 5, 226,
+ 234, 172, 25, 5, 76, 172, 25, 5, 254, 201, 172, 25, 5, 253, 192, 172, 25,
+ 5, 214, 214, 172, 116, 5, 191, 172, 116, 5, 205, 172, 116, 5, 233, 135,
+ 172, 116, 5, 212, 65, 172, 1, 40, 235, 23, 172, 1, 40, 243, 202, 172, 1,
+ 40, 229, 79, 172, 116, 5, 40, 229, 79, 172, 1, 40, 250, 158, 172, 1, 40,
+ 217, 152, 172, 1, 40, 230, 25, 172, 1, 40, 226, 105, 172, 1, 40, 211,
+ 117, 172, 1, 40, 153, 172, 1, 40, 156, 172, 1, 40, 218, 226, 172, 116, 5,
+ 40, 193, 172, 116, 5, 40, 242, 60, 172, 21, 210, 86, 172, 21, 110, 172,
+ 21, 105, 172, 21, 158, 172, 21, 161, 172, 21, 189, 172, 21, 194, 172, 21,
+ 198, 172, 21, 195, 172, 21, 200, 172, 224, 141, 218, 251, 172, 224, 141,
+ 248, 178, 172, 224, 141, 52, 248, 178, 172, 224, 141, 215, 211, 248, 178,
+ 68, 1, 234, 126, 243, 135, 68, 1, 234, 126, 251, 33, 68, 1, 234, 126,
+ 250, 157, 68, 1, 234, 126, 235, 141, 68, 1, 234, 126, 235, 114, 68, 1,
+ 234, 126, 227, 165, 68, 1, 234, 126, 215, 156, 68, 1, 234, 126, 215, 144,
+ 68, 1, 234, 126, 248, 135, 68, 1, 234, 126, 248, 119, 68, 1, 234, 126,
+ 248, 25, 68, 1, 234, 126, 197, 68, 1, 234, 126, 206, 68, 1, 234, 126,
+ 162, 68, 1, 234, 126, 241, 189, 68, 1, 234, 126, 244, 196, 68, 58, 1,
+ 234, 126, 223, 109, 68, 1, 234, 126, 211, 165, 68, 1, 234, 126, 210, 116,
+ 68, 1, 234, 126, 205, 68, 232, 145, 234, 126, 226, 253, 68, 232, 145,
+ 234, 126, 224, 43, 68, 232, 145, 234, 126, 241, 121, 68, 16, 254, 190,
+ 245, 30, 68, 16, 254, 190, 110, 68, 16, 254, 190, 105, 68, 1, 254, 190,
+ 205, 68, 5, 226, 23, 234, 213, 216, 30, 39, 208, 1, 121, 234, 28, 39,
+ 208, 1, 125, 234, 28, 39, 208, 1, 121, 234, 105, 39, 208, 1, 125, 234,
+ 105, 39, 208, 1, 121, 234, 114, 39, 208, 1, 125, 234, 114, 39, 208, 1,
+ 121, 242, 174, 39, 208, 1, 125, 242, 174, 39, 208, 1, 121, 229, 4, 39,
+ 208, 1, 125, 229, 4, 39, 208, 1, 121, 249, 238, 39, 208, 1, 125, 249,
+ 238, 39, 208, 1, 121, 250, 86, 39, 208, 1, 125, 250, 86, 39, 208, 1, 121,
+ 219, 58, 39, 208, 1, 125, 219, 58, 39, 208, 1, 121, 227, 134, 39, 208, 1,
+ 125, 227, 134, 39, 208, 1, 121, 247, 145, 39, 208, 1, 125, 247, 145, 39,
+ 208, 1, 121, 111, 39, 208, 1, 125, 111, 39, 208, 1, 121, 216, 156, 39,
+ 208, 1, 125, 216, 156, 39, 208, 1, 121, 228, 74, 39, 208, 1, 125, 228,
+ 74, 39, 208, 1, 121, 251, 205, 39, 208, 1, 125, 251, 205, 39, 208, 1,
+ 121, 225, 16, 39, 208, 1, 125, 225, 16, 39, 208, 1, 121, 225, 121, 39,
+ 208, 1, 125, 225, 121, 39, 208, 1, 121, 244, 43, 39, 208, 1, 125, 244,
+ 43, 39, 208, 1, 121, 230, 161, 39, 208, 1, 125, 230, 161, 39, 208, 1,
+ 121, 210, 244, 39, 208, 1, 125, 210, 244, 39, 208, 1, 121, 222, 211, 39,
+ 208, 1, 125, 222, 211, 39, 208, 1, 121, 232, 156, 39, 208, 1, 125, 232,
+ 156, 39, 208, 1, 121, 213, 138, 39, 208, 1, 125, 213, 138, 39, 208, 1,
+ 121, 241, 68, 39, 208, 1, 125, 241, 68, 39, 208, 1, 121, 76, 39, 208, 1,
+ 125, 76, 39, 208, 231, 204, 234, 230, 39, 208, 25, 255, 73, 39, 208, 25,
+ 73, 39, 208, 25, 214, 214, 39, 208, 25, 70, 39, 208, 25, 75, 39, 208, 25,
+ 76, 39, 208, 231, 204, 234, 108, 39, 208, 25, 240, 119, 39, 208, 25, 214,
+ 213, 39, 208, 25, 214, 229, 39, 208, 25, 253, 190, 39, 208, 25, 253, 167,
+ 39, 208, 25, 254, 123, 39, 208, 25, 254, 136, 39, 208, 138, 231, 204,
+ 245, 180, 39, 208, 138, 231, 204, 227, 206, 39, 208, 138, 231, 204, 216,
+ 156, 39, 208, 138, 231, 204, 219, 42, 39, 208, 16, 234, 13, 39, 208, 16,
+ 227, 206, 39, 208, 16, 221, 253, 39, 208, 16, 241, 69, 241, 64, 39, 208,
+ 16, 234, 22, 234, 21, 186, 185, 1, 75, 186, 185, 1, 76, 186, 185, 1, 250,
+ 157, 186, 185, 1, 227, 165, 186, 185, 1, 215, 156, 186, 185, 1, 215, 144,
+ 186, 185, 1, 248, 135, 186, 185, 1, 248, 119, 186, 185, 1, 228, 110, 186,
+ 185, 1, 220, 102, 186, 185, 1, 218, 223, 186, 185, 25, 5, 236, 33, 186,
+ 185, 25, 5, 214, 118, 186, 185, 25, 5, 255, 37, 186, 185, 25, 5, 253,
+ 192, 186, 185, 25, 5, 255, 30, 186, 185, 250, 125, 186, 185, 254, 206,
+ 234, 98, 186, 185, 254, 103, 186, 185, 3, 223, 74, 78, 186, 185, 211,
+ 209, 223, 74, 78, 186, 185, 25, 5, 213, 147, 186, 185, 213, 152, 29, 3,
+ 215, 137, 29, 3, 215, 140, 29, 3, 215, 143, 29, 3, 215, 141, 29, 3, 215,
+ 142, 29, 3, 215, 139, 29, 3, 248, 113, 29, 3, 248, 115, 29, 3, 248, 118,
+ 29, 3, 248, 116, 29, 3, 248, 117, 29, 3, 248, 114, 29, 3, 246, 28, 29, 3,
+ 246, 31, 29, 3, 246, 37, 29, 3, 246, 35, 29, 3, 246, 36, 29, 3, 246, 29,
+ 29, 3, 250, 204, 29, 3, 250, 198, 29, 3, 250, 200, 29, 3, 250, 203, 29,
+ 3, 250, 201, 29, 3, 250, 202, 29, 3, 250, 199, 29, 3, 252, 111, 29, 3,
+ 252, 90, 29, 3, 252, 102, 29, 3, 252, 110, 29, 3, 252, 105, 29, 3, 252,
+ 106, 29, 3, 252, 94, 186, 185, 1, 234, 19, 186, 185, 1, 221, 253, 186,
+ 185, 1, 233, 109, 186, 185, 1, 230, 172, 186, 185, 1, 190, 186, 185, 1,
+ 197, 186, 185, 1, 250, 102, 186, 185, 1, 216, 90, 186, 185, 1, 234, 101,
+ 186, 185, 1, 228, 250, 186, 185, 1, 216, 150, 186, 185, 1, 212, 60, 186,
+ 185, 1, 211, 69, 186, 185, 1, 240, 216, 186, 185, 1, 214, 190, 186, 185,
+ 1, 73, 186, 185, 1, 225, 142, 186, 185, 1, 253, 202, 186, 185, 1, 242,
+ 167, 186, 185, 1, 235, 112, 186, 185, 1, 223, 166, 186, 185, 1, 252, 191,
+ 186, 185, 1, 235, 100, 186, 185, 1, 247, 219, 186, 185, 1, 242, 221, 186,
+ 185, 1, 248, 5, 186, 185, 1, 252, 16, 186, 185, 1, 234, 20, 232, 128,
+ 186, 185, 1, 233, 110, 232, 128, 186, 185, 1, 230, 173, 232, 128, 186,
+ 185, 1, 226, 90, 232, 128, 186, 185, 1, 229, 229, 232, 128, 186, 185, 1,
+ 216, 91, 232, 128, 186, 185, 1, 228, 251, 232, 128, 186, 185, 1, 240,
+ 154, 232, 128, 186, 185, 25, 5, 226, 195, 186, 185, 25, 5, 235, 253, 186,
+ 185, 25, 5, 254, 122, 186, 185, 25, 5, 211, 38, 186, 185, 25, 5, 219, 32,
+ 186, 185, 25, 5, 214, 187, 186, 185, 25, 5, 250, 123, 186, 185, 25, 5,
+ 227, 191, 186, 185, 250, 124, 186, 185, 232, 85, 235, 150, 186, 185, 254,
+ 46, 235, 150, 186, 185, 21, 210, 86, 186, 185, 21, 110, 186, 185, 21,
+ 105, 186, 185, 21, 158, 186, 185, 21, 161, 186, 185, 21, 189, 186, 185,
+ 21, 194, 186, 185, 21, 198, 186, 185, 21, 195, 186, 185, 21, 200, 24,
+ 143, 227, 77, 24, 143, 227, 82, 24, 143, 210, 243, 24, 143, 210, 242, 24,
+ 143, 210, 241, 24, 143, 215, 23, 24, 143, 215, 26, 24, 143, 210, 210, 24,
+ 143, 210, 206, 24, 143, 245, 54, 24, 143, 245, 52, 24, 143, 245, 53, 24,
+ 143, 245, 50, 24, 143, 240, 144, 24, 143, 240, 143, 24, 143, 240, 141,
+ 24, 143, 240, 142, 24, 143, 240, 147, 24, 143, 240, 140, 24, 143, 240,
+ 139, 24, 143, 240, 149, 24, 143, 254, 33, 24, 143, 254, 32, 24, 90, 228,
+ 219, 24, 90, 228, 225, 24, 90, 218, 204, 24, 90, 218, 203, 24, 90, 216,
+ 96, 24, 90, 216, 94, 24, 90, 216, 93, 24, 90, 216, 99, 24, 90, 216, 100,
+ 24, 90, 216, 92, 24, 90, 223, 5, 24, 90, 223, 20, 24, 90, 218, 210, 24,
+ 90, 223, 17, 24, 90, 223, 7, 24, 90, 223, 9, 24, 90, 222, 252, 24, 90,
+ 222, 253, 24, 90, 234, 218, 24, 90, 230, 212, 24, 90, 230, 206, 24, 90,
+ 218, 214, 24, 90, 230, 209, 24, 90, 230, 215, 24, 90, 225, 76, 24, 90,
+ 225, 85, 24, 90, 225, 89, 24, 90, 218, 212, 24, 90, 225, 79, 24, 90, 225,
+ 93, 24, 90, 225, 94, 24, 90, 219, 140, 24, 90, 219, 143, 24, 90, 218,
+ 208, 24, 90, 218, 206, 24, 90, 219, 138, 24, 90, 219, 146, 24, 90, 219,
+ 147, 24, 90, 219, 132, 24, 90, 219, 145, 24, 90, 226, 30, 24, 90, 226,
+ 31, 24, 90, 211, 24, 24, 90, 211, 25, 24, 90, 250, 44, 24, 90, 250, 43,
+ 24, 90, 218, 219, 24, 90, 225, 128, 24, 90, 225, 127, 9, 14, 238, 24, 9,
+ 14, 238, 23, 9, 14, 238, 22, 9, 14, 238, 21, 9, 14, 238, 20, 9, 14, 238,
+ 19, 9, 14, 238, 18, 9, 14, 238, 17, 9, 14, 238, 16, 9, 14, 238, 15, 9,
+ 14, 238, 14, 9, 14, 238, 13, 9, 14, 238, 12, 9, 14, 238, 11, 9, 14, 238,
+ 10, 9, 14, 238, 9, 9, 14, 238, 8, 9, 14, 238, 7, 9, 14, 238, 6, 9, 14,
+ 238, 5, 9, 14, 238, 4, 9, 14, 238, 3, 9, 14, 238, 2, 9, 14, 238, 1, 9,
+ 14, 238, 0, 9, 14, 237, 255, 9, 14, 237, 254, 9, 14, 237, 253, 9, 14,
+ 237, 252, 9, 14, 237, 251, 9, 14, 237, 250, 9, 14, 237, 249, 9, 14, 237,
+ 248, 9, 14, 237, 247, 9, 14, 237, 246, 9, 14, 237, 245, 9, 14, 237, 244,
+ 9, 14, 237, 243, 9, 14, 237, 242, 9, 14, 237, 241, 9, 14, 237, 240, 9,
+ 14, 237, 239, 9, 14, 237, 238, 9, 14, 237, 237, 9, 14, 237, 236, 9, 14,
+ 237, 235, 9, 14, 237, 234, 9, 14, 237, 233, 9, 14, 237, 232, 9, 14, 237,
+ 231, 9, 14, 237, 230, 9, 14, 237, 229, 9, 14, 237, 228, 9, 14, 237, 227,
+ 9, 14, 237, 226, 9, 14, 237, 225, 9, 14, 237, 224, 9, 14, 237, 223, 9,
+ 14, 237, 222, 9, 14, 237, 221, 9, 14, 237, 220, 9, 14, 237, 219, 9, 14,
+ 237, 218, 9, 14, 237, 217, 9, 14, 237, 216, 9, 14, 237, 215, 9, 14, 237,
+ 214, 9, 14, 237, 213, 9, 14, 237, 212, 9, 14, 237, 211, 9, 14, 237, 210,
+ 9, 14, 237, 209, 9, 14, 237, 208, 9, 14, 237, 207, 9, 14, 237, 206, 9,
+ 14, 237, 205, 9, 14, 237, 204, 9, 14, 237, 203, 9, 14, 237, 202, 9, 14,
+ 237, 201, 9, 14, 237, 200, 9, 14, 237, 199, 9, 14, 237, 198, 9, 14, 237,
+ 197, 9, 14, 237, 196, 9, 14, 237, 195, 9, 14, 237, 194, 9, 14, 237, 193,
+ 9, 14, 237, 192, 9, 14, 237, 191, 9, 14, 237, 190, 9, 14, 237, 189, 9,
+ 14, 237, 188, 9, 14, 237, 187, 9, 14, 237, 186, 9, 14, 237, 185, 9, 14,
+ 237, 184, 9, 14, 237, 183, 9, 14, 237, 182, 9, 14, 237, 181, 9, 14, 237,
+ 180, 9, 14, 237, 179, 9, 14, 237, 178, 9, 14, 237, 177, 9, 14, 237, 176,
+ 9, 14, 237, 175, 9, 14, 237, 174, 9, 14, 237, 173, 9, 14, 237, 172, 9,
+ 14, 237, 171, 9, 14, 237, 170, 9, 14, 237, 169, 9, 14, 237, 168, 9, 14,
+ 237, 167, 9, 14, 237, 166, 9, 14, 237, 165, 9, 14, 237, 164, 9, 14, 237,
+ 163, 9, 14, 237, 162, 9, 14, 237, 161, 9, 14, 237, 160, 9, 14, 237, 159,
+ 9, 14, 237, 158, 9, 14, 237, 157, 9, 14, 237, 156, 9, 14, 237, 155, 9,
+ 14, 237, 154, 9, 14, 237, 153, 9, 14, 237, 152, 9, 14, 237, 151, 9, 14,
+ 237, 150, 9, 14, 237, 149, 9, 14, 237, 148, 9, 14, 237, 147, 9, 14, 237,
+ 146, 9, 14, 237, 145, 9, 14, 237, 144, 9, 14, 237, 143, 9, 14, 237, 142,
+ 9, 14, 237, 141, 9, 14, 237, 140, 9, 14, 237, 139, 9, 14, 237, 138, 9,
+ 14, 237, 137, 9, 14, 237, 136, 9, 14, 237, 135, 9, 14, 237, 134, 9, 14,
+ 237, 133, 9, 14, 237, 132, 9, 14, 237, 131, 9, 14, 237, 130, 9, 14, 237,
+ 129, 9, 14, 237, 128, 9, 14, 237, 127, 9, 14, 237, 126, 9, 14, 237, 125,
+ 9, 14, 237, 124, 9, 14, 237, 123, 9, 14, 237, 122, 9, 14, 237, 121, 9,
+ 14, 237, 120, 9, 14, 237, 119, 9, 14, 237, 118, 9, 14, 237, 117, 9, 14,
+ 237, 116, 9, 14, 237, 115, 9, 14, 237, 114, 9, 14, 237, 113, 9, 14, 237,
+ 112, 9, 14, 237, 111, 9, 14, 237, 110, 9, 14, 237, 109, 9, 14, 237, 108,
+ 9, 14, 237, 107, 9, 14, 237, 106, 9, 14, 237, 105, 9, 14, 237, 104, 9,
+ 14, 237, 103, 9, 14, 237, 102, 9, 14, 237, 101, 9, 14, 237, 100, 9, 14,
+ 237, 99, 9, 14, 237, 98, 9, 14, 237, 97, 9, 14, 237, 96, 9, 14, 237, 95,
+ 9, 14, 237, 94, 9, 14, 237, 93, 9, 14, 237, 92, 9, 14, 237, 91, 9, 14,
+ 237, 90, 9, 14, 237, 89, 9, 14, 237, 88, 9, 14, 237, 87, 9, 14, 237, 86,
+ 9, 14, 237, 85, 9, 14, 237, 84, 9, 14, 237, 83, 9, 14, 237, 82, 9, 14,
+ 237, 81, 9, 14, 237, 80, 9, 14, 237, 79, 9, 14, 237, 78, 9, 14, 237, 77,
+ 9, 14, 237, 76, 9, 14, 237, 75, 9, 14, 237, 74, 9, 14, 237, 73, 9, 14,
+ 237, 72, 9, 14, 237, 71, 9, 14, 237, 70, 9, 14, 237, 69, 9, 14, 237, 68,
+ 9, 14, 237, 67, 9, 14, 237, 66, 9, 14, 237, 65, 9, 14, 237, 64, 9, 14,
+ 237, 63, 9, 14, 237, 62, 9, 14, 237, 61, 9, 14, 237, 60, 9, 14, 237, 59,
+ 9, 14, 237, 58, 9, 14, 237, 57, 9, 14, 237, 56, 9, 14, 237, 55, 9, 14,
+ 237, 54, 9, 14, 237, 53, 9, 14, 237, 52, 9, 14, 237, 51, 9, 14, 237, 50,
+ 9, 14, 237, 49, 9, 14, 237, 48, 9, 14, 237, 47, 9, 14, 237, 46, 9, 14,
+ 237, 45, 9, 14, 237, 44, 9, 14, 237, 43, 9, 14, 237, 42, 9, 14, 237, 41,
+ 9, 14, 237, 40, 9, 14, 237, 39, 9, 14, 237, 38, 9, 14, 237, 37, 9, 14,
+ 237, 36, 9, 14, 237, 35, 9, 14, 237, 34, 9, 14, 237, 33, 9, 14, 237, 32,
+ 9, 14, 237, 31, 9, 14, 237, 30, 9, 14, 237, 29, 9, 14, 237, 28, 9, 14,
+ 237, 27, 9, 14, 237, 26, 9, 14, 237, 25, 9, 14, 237, 24, 9, 14, 237, 23,
+ 9, 14, 237, 22, 9, 14, 237, 21, 9, 14, 237, 20, 9, 14, 237, 19, 9, 14,
+ 237, 18, 9, 14, 237, 17, 9, 14, 237, 16, 9, 14, 237, 15, 9, 14, 237, 14,
+ 9, 14, 237, 13, 9, 14, 237, 12, 9, 14, 237, 11, 9, 14, 237, 10, 9, 14,
+ 237, 9, 9, 14, 237, 8, 9, 14, 237, 7, 9, 14, 237, 6, 9, 14, 237, 5, 9,
+ 14, 237, 4, 9, 14, 237, 3, 9, 14, 237, 2, 9, 14, 237, 1, 9, 14, 237, 0,
+ 9, 14, 236, 255, 9, 14, 236, 254, 9, 14, 236, 253, 9, 14, 236, 252, 9,
+ 14, 236, 251, 9, 14, 236, 250, 9, 14, 236, 249, 9, 14, 236, 248, 9, 14,
+ 236, 247, 9, 14, 236, 246, 9, 14, 236, 245, 9, 14, 236, 244, 9, 14, 236,
+ 243, 9, 14, 236, 242, 9, 14, 236, 241, 9, 14, 236, 240, 9, 14, 236, 239,
+ 9, 14, 236, 238, 9, 14, 236, 237, 9, 14, 236, 236, 9, 14, 236, 235, 9,
+ 14, 236, 234, 9, 14, 236, 233, 9, 14, 236, 232, 9, 14, 236, 231, 9, 14,
+ 236, 230, 9, 14, 236, 229, 9, 14, 236, 228, 9, 14, 236, 227, 9, 14, 236,
+ 226, 9, 14, 236, 225, 9, 14, 236, 224, 9, 14, 236, 223, 9, 14, 236, 222,
+ 9, 14, 236, 221, 9, 14, 236, 220, 9, 14, 236, 219, 9, 14, 236, 218, 9,
+ 14, 236, 217, 9, 14, 236, 216, 9, 14, 236, 215, 9, 14, 236, 214, 9, 14,
+ 236, 213, 9, 14, 236, 212, 9, 14, 236, 211, 9, 14, 236, 210, 9, 14, 236,
+ 209, 9, 14, 236, 208, 9, 14, 236, 207, 9, 14, 236, 206, 9, 14, 236, 205,
+ 9, 14, 236, 204, 9, 14, 236, 203, 9, 14, 236, 202, 9, 14, 236, 201, 9,
+ 14, 236, 200, 9, 14, 236, 199, 9, 14, 236, 198, 9, 14, 236, 197, 9, 14,
+ 236, 196, 9, 14, 236, 195, 9, 14, 236, 194, 9, 14, 236, 193, 9, 14, 236,
+ 192, 9, 14, 236, 191, 9, 14, 236, 190, 9, 14, 236, 189, 9, 14, 236, 188,
+ 9, 14, 236, 187, 9, 14, 236, 186, 9, 14, 236, 185, 9, 14, 236, 184, 9,
+ 14, 236, 183, 9, 14, 236, 182, 9, 14, 236, 181, 9, 14, 236, 180, 9, 14,
+ 236, 179, 9, 14, 236, 178, 9, 14, 236, 177, 9, 14, 236, 176, 9, 14, 236,
+ 175, 9, 14, 236, 174, 9, 14, 236, 173, 9, 14, 236, 172, 9, 14, 236, 171,
+ 9, 14, 236, 170, 9, 14, 236, 169, 9, 14, 236, 168, 9, 14, 236, 167, 9,
+ 14, 236, 166, 9, 14, 236, 165, 9, 14, 236, 164, 9, 14, 236, 163, 9, 14,
+ 236, 162, 9, 14, 236, 161, 9, 14, 236, 160, 9, 14, 236, 159, 9, 14, 236,
+ 158, 9, 14, 236, 157, 9, 14, 236, 156, 9, 14, 236, 155, 9, 14, 236, 154,
+ 9, 14, 236, 153, 9, 14, 236, 152, 9, 14, 236, 151, 9, 14, 236, 150, 9,
+ 14, 236, 149, 9, 14, 236, 148, 9, 14, 236, 147, 9, 14, 236, 146, 9, 14,
+ 236, 145, 9, 14, 236, 144, 9, 14, 236, 143, 9, 14, 236, 142, 9, 14, 236,
+ 141, 9, 14, 236, 140, 9, 14, 236, 139, 9, 14, 236, 138, 9, 14, 236, 137,
+ 9, 14, 236, 136, 9, 14, 236, 135, 9, 14, 236, 134, 9, 14, 236, 133, 9,
+ 14, 236, 132, 9, 14, 236, 131, 9, 14, 236, 130, 9, 14, 236, 129, 9, 14,
+ 236, 128, 9, 14, 236, 127, 9, 14, 236, 126, 9, 14, 236, 125, 9, 14, 236,
+ 124, 9, 14, 236, 123, 9, 14, 236, 122, 9, 14, 236, 121, 9, 14, 236, 120,
+ 9, 14, 236, 119, 9, 14, 236, 118, 9, 14, 236, 117, 9, 14, 236, 116, 9,
+ 14, 236, 115, 9, 14, 236, 114, 9, 14, 236, 113, 9, 14, 236, 112, 9, 14,
+ 236, 111, 9, 14, 236, 110, 9, 14, 236, 109, 9, 14, 236, 108, 9, 14, 236,
+ 107, 9, 14, 236, 106, 9, 14, 236, 105, 9, 14, 236, 104, 9, 14, 236, 103,
+ 9, 14, 236, 102, 9, 14, 236, 101, 9, 14, 236, 100, 9, 14, 236, 99, 9, 14,
+ 236, 98, 9, 14, 236, 97, 9, 14, 236, 96, 9, 14, 236, 95, 9, 14, 236, 94,
+ 9, 14, 236, 93, 9, 14, 236, 92, 9, 14, 236, 91, 9, 14, 236, 90, 9, 14,
+ 236, 89, 9, 14, 236, 88, 9, 14, 236, 87, 9, 14, 236, 86, 9, 14, 236, 85,
+ 9, 14, 236, 84, 9, 14, 236, 83, 9, 14, 236, 82, 9, 14, 236, 81, 9, 14,
+ 236, 80, 9, 14, 236, 79, 9, 14, 236, 78, 9, 14, 236, 77, 9, 14, 236, 76,
+ 9, 14, 236, 75, 9, 14, 236, 74, 9, 14, 236, 73, 9, 14, 236, 72, 9, 14,
+ 236, 71, 9, 14, 236, 70, 9, 14, 236, 69, 9, 14, 236, 68, 9, 14, 236, 67,
+ 9, 14, 236, 66, 9, 14, 236, 65, 7, 4, 27, 244, 125, 7, 4, 27, 244, 121,
+ 7, 4, 27, 244, 76, 7, 4, 27, 244, 124, 7, 4, 27, 244, 123, 7, 4, 27, 199,
+ 222, 92, 217, 152, 7, 4, 27, 218, 168, 150, 4, 27, 231, 59, 228, 39, 150,
+ 4, 27, 231, 59, 245, 213, 150, 4, 27, 231, 59, 235, 227, 150, 4, 27, 213,
+ 180, 228, 39, 150, 4, 27, 231, 59, 211, 160, 94, 1, 210, 234, 2, 241,
+ 158, 94, 225, 11, 235, 50, 214, 11, 94, 27, 211, 6, 210, 234, 210, 234,
+ 225, 239, 94, 1, 254, 139, 253, 162, 94, 1, 211, 247, 254, 170, 94, 1,
+ 211, 247, 248, 189, 94, 1, 211, 247, 241, 238, 94, 1, 211, 247, 234, 250,
+ 94, 1, 211, 247, 233, 94, 94, 1, 211, 247, 40, 231, 65, 94, 1, 211, 247,
+ 223, 67, 94, 1, 211, 247, 217, 38, 94, 1, 254, 139, 96, 50, 94, 1, 220,
+ 21, 2, 220, 21, 247, 120, 94, 1, 220, 21, 2, 219, 159, 247, 120, 94, 1,
+ 220, 21, 2, 248, 208, 22, 220, 21, 247, 120, 94, 1, 220, 21, 2, 248, 208,
+ 22, 219, 159, 247, 120, 94, 1, 112, 2, 225, 239, 94, 1, 112, 2, 224, 76,
+ 94, 1, 112, 2, 231, 171, 94, 1, 252, 29, 2, 248, 207, 94, 1, 242, 202, 2,
+ 248, 207, 94, 1, 248, 190, 2, 248, 207, 94, 1, 241, 239, 2, 231, 171, 94,
+ 1, 214, 4, 2, 248, 207, 94, 1, 210, 98, 2, 248, 207, 94, 1, 216, 231, 2,
+ 248, 207, 94, 1, 210, 234, 2, 248, 207, 94, 1, 40, 234, 251, 2, 248, 207,
+ 94, 1, 234, 251, 2, 248, 207, 94, 1, 233, 95, 2, 248, 207, 94, 1, 231,
+ 66, 2, 248, 207, 94, 1, 227, 195, 2, 248, 207, 94, 1, 221, 250, 2, 248,
+ 207, 94, 1, 40, 225, 222, 2, 248, 207, 94, 1, 225, 222, 2, 248, 207, 94,
+ 1, 215, 180, 2, 248, 207, 94, 1, 224, 40, 2, 248, 207, 94, 1, 223, 68, 2,
+ 248, 207, 94, 1, 220, 21, 2, 248, 207, 94, 1, 217, 39, 2, 248, 207, 94,
+ 1, 214, 4, 2, 241, 61, 94, 1, 252, 29, 2, 223, 169, 94, 1, 234, 251, 2,
+ 223, 169, 94, 1, 225, 222, 2, 223, 169, 94, 27, 112, 233, 94, 10, 1, 112,
+ 212, 47, 53, 17, 10, 1, 112, 212, 47, 40, 17, 10, 1, 252, 65, 53, 17, 10,
+ 1, 252, 65, 40, 17, 10, 1, 252, 65, 65, 17, 10, 1, 252, 65, 147, 17, 10,
+ 1, 225, 206, 53, 17, 10, 1, 225, 206, 40, 17, 10, 1, 225, 206, 65, 17,
+ 10, 1, 225, 206, 147, 17, 10, 1, 252, 53, 53, 17, 10, 1, 252, 53, 40, 17,
+ 10, 1, 252, 53, 65, 17, 10, 1, 252, 53, 147, 17, 10, 1, 215, 147, 53, 17,
+ 10, 1, 215, 147, 40, 17, 10, 1, 215, 147, 65, 17, 10, 1, 215, 147, 147,
+ 17, 10, 1, 217, 6, 53, 17, 10, 1, 217, 6, 40, 17, 10, 1, 217, 6, 65, 17,
+ 10, 1, 217, 6, 147, 17, 10, 1, 215, 149, 53, 17, 10, 1, 215, 149, 40, 17,
+ 10, 1, 215, 149, 65, 17, 10, 1, 215, 149, 147, 17, 10, 1, 213, 249, 53,
+ 17, 10, 1, 213, 249, 40, 17, 10, 1, 213, 249, 65, 17, 10, 1, 213, 249,
+ 147, 17, 10, 1, 225, 204, 53, 17, 10, 1, 225, 204, 40, 17, 10, 1, 225,
+ 204, 65, 17, 10, 1, 225, 204, 147, 17, 10, 1, 246, 44, 53, 17, 10, 1,
+ 246, 44, 40, 17, 10, 1, 246, 44, 65, 17, 10, 1, 246, 44, 147, 17, 10, 1,
+ 227, 154, 53, 17, 10, 1, 227, 154, 40, 17, 10, 1, 227, 154, 65, 17, 10,
+ 1, 227, 154, 147, 17, 10, 1, 217, 27, 53, 17, 10, 1, 217, 27, 40, 17, 10,
+ 1, 217, 27, 65, 17, 10, 1, 217, 27, 147, 17, 10, 1, 217, 25, 53, 17, 10,
+ 1, 217, 25, 40, 17, 10, 1, 217, 25, 65, 17, 10, 1, 217, 25, 147, 17, 10,
+ 1, 248, 133, 53, 17, 10, 1, 248, 133, 40, 17, 10, 1, 248, 202, 53, 17,
+ 10, 1, 248, 202, 40, 17, 10, 1, 246, 71, 53, 17, 10, 1, 246, 71, 40, 17,
+ 10, 1, 248, 131, 53, 17, 10, 1, 248, 131, 40, 17, 10, 1, 235, 121, 53,
+ 17, 10, 1, 235, 121, 40, 17, 10, 1, 222, 172, 53, 17, 10, 1, 222, 172,
+ 40, 17, 10, 1, 234, 175, 53, 17, 10, 1, 234, 175, 40, 17, 10, 1, 234,
+ 175, 65, 17, 10, 1, 234, 175, 147, 17, 10, 1, 243, 123, 53, 17, 10, 1,
+ 243, 123, 40, 17, 10, 1, 243, 123, 65, 17, 10, 1, 243, 123, 147, 17, 10,
+ 1, 242, 102, 53, 17, 10, 1, 242, 102, 40, 17, 10, 1, 242, 102, 65, 17,
+ 10, 1, 242, 102, 147, 17, 10, 1, 229, 3, 53, 17, 10, 1, 229, 3, 40, 17,
+ 10, 1, 229, 3, 65, 17, 10, 1, 229, 3, 147, 17, 10, 1, 228, 63, 242, 219,
+ 53, 17, 10, 1, 228, 63, 242, 219, 40, 17, 10, 1, 222, 215, 53, 17, 10, 1,
+ 222, 215, 40, 17, 10, 1, 222, 215, 65, 17, 10, 1, 222, 215, 147, 17, 10,
+ 1, 241, 219, 2, 79, 77, 53, 17, 10, 1, 241, 219, 2, 79, 77, 40, 17, 10,
+ 1, 241, 219, 242, 172, 53, 17, 10, 1, 241, 219, 242, 172, 40, 17, 10, 1,
+ 241, 219, 242, 172, 65, 17, 10, 1, 241, 219, 242, 172, 147, 17, 10, 1,
+ 241, 219, 247, 142, 53, 17, 10, 1, 241, 219, 247, 142, 40, 17, 10, 1,
+ 241, 219, 247, 142, 65, 17, 10, 1, 241, 219, 247, 142, 147, 17, 10, 1,
+ 79, 252, 133, 53, 17, 10, 1, 79, 252, 133, 40, 17, 10, 1, 79, 252, 133,
+ 2, 202, 77, 53, 17, 10, 1, 79, 252, 133, 2, 202, 77, 40, 17, 10, 16, 59,
+ 48, 10, 16, 59, 51, 10, 16, 113, 170, 48, 10, 16, 113, 170, 51, 10, 16,
+ 134, 170, 48, 10, 16, 134, 170, 51, 10, 16, 134, 170, 225, 7, 246, 104,
+ 48, 10, 16, 134, 170, 225, 7, 246, 104, 51, 10, 16, 244, 11, 170, 48, 10,
+ 16, 244, 11, 170, 51, 10, 16, 52, 67, 252, 141, 51, 10, 16, 113, 170,
+ 213, 189, 48, 10, 16, 113, 170, 213, 189, 51, 10, 16, 222, 233, 10, 16,
+ 4, 217, 81, 48, 10, 16, 4, 217, 81, 51, 10, 1, 229, 80, 53, 17, 10, 1,
+ 229, 80, 40, 17, 10, 1, 229, 80, 65, 17, 10, 1, 229, 80, 147, 17, 10, 1,
+ 104, 53, 17, 10, 1, 104, 40, 17, 10, 1, 226, 235, 53, 17, 10, 1, 226,
+ 235, 40, 17, 10, 1, 210, 213, 53, 17, 10, 1, 210, 213, 40, 17, 10, 1,
+ 104, 2, 202, 77, 53, 17, 10, 1, 214, 0, 53, 17, 10, 1, 214, 0, 40, 17,
+ 10, 1, 234, 73, 226, 235, 53, 17, 10, 1, 234, 73, 226, 235, 40, 17, 10,
+ 1, 234, 73, 210, 213, 53, 17, 10, 1, 234, 73, 210, 213, 40, 17, 10, 1,
+ 160, 53, 17, 10, 1, 160, 40, 17, 10, 1, 160, 65, 17, 10, 1, 160, 147, 17,
+ 10, 1, 214, 207, 234, 186, 234, 73, 112, 231, 193, 65, 17, 10, 1, 214,
+ 207, 234, 186, 234, 73, 112, 231, 193, 147, 17, 10, 27, 79, 2, 202, 77,
+ 2, 112, 53, 17, 10, 27, 79, 2, 202, 77, 2, 112, 40, 17, 10, 27, 79, 2,
+ 202, 77, 2, 254, 244, 53, 17, 10, 27, 79, 2, 202, 77, 2, 254, 244, 40,
+ 17, 10, 27, 79, 2, 202, 77, 2, 212, 31, 53, 17, 10, 27, 79, 2, 202, 77,
+ 2, 212, 31, 40, 17, 10, 27, 79, 2, 202, 77, 2, 104, 53, 17, 10, 27, 79,
+ 2, 202, 77, 2, 104, 40, 17, 10, 27, 79, 2, 202, 77, 2, 226, 235, 53, 17,
+ 10, 27, 79, 2, 202, 77, 2, 226, 235, 40, 17, 10, 27, 79, 2, 202, 77, 2,
+ 210, 213, 53, 17, 10, 27, 79, 2, 202, 77, 2, 210, 213, 40, 17, 10, 27,
+ 79, 2, 202, 77, 2, 160, 53, 17, 10, 27, 79, 2, 202, 77, 2, 160, 40, 17,
+ 10, 27, 79, 2, 202, 77, 2, 160, 65, 17, 10, 27, 214, 207, 234, 73, 79, 2,
+ 202, 77, 2, 112, 231, 193, 53, 17, 10, 27, 214, 207, 234, 73, 79, 2, 202,
+ 77, 2, 112, 231, 193, 40, 17, 10, 27, 214, 207, 234, 73, 79, 2, 202, 77,
+ 2, 112, 231, 193, 65, 17, 10, 1, 244, 168, 79, 53, 17, 10, 1, 244, 168,
+ 79, 40, 17, 10, 1, 244, 168, 79, 65, 17, 10, 1, 244, 168, 79, 147, 17,
+ 10, 27, 79, 2, 202, 77, 2, 151, 53, 17, 10, 27, 79, 2, 202, 77, 2, 122,
+ 53, 17, 10, 27, 79, 2, 202, 77, 2, 66, 53, 17, 10, 27, 79, 2, 202, 77, 2,
+ 112, 231, 193, 53, 17, 10, 27, 79, 2, 202, 77, 2, 79, 53, 17, 10, 27,
+ 252, 55, 2, 151, 53, 17, 10, 27, 252, 55, 2, 122, 53, 17, 10, 27, 252,
+ 55, 2, 234, 130, 53, 17, 10, 27, 252, 55, 2, 66, 53, 17, 10, 27, 252, 55,
+ 2, 112, 231, 193, 53, 17, 10, 27, 252, 55, 2, 79, 53, 17, 10, 27, 217, 8,
+ 2, 151, 53, 17, 10, 27, 217, 8, 2, 122, 53, 17, 10, 27, 217, 8, 2, 234,
+ 130, 53, 17, 10, 27, 217, 8, 2, 66, 53, 17, 10, 27, 217, 8, 2, 112, 231,
+ 193, 53, 17, 10, 27, 217, 8, 2, 79, 53, 17, 10, 27, 216, 193, 2, 151, 53,
+ 17, 10, 27, 216, 193, 2, 66, 53, 17, 10, 27, 216, 193, 2, 112, 231, 193,
+ 53, 17, 10, 27, 216, 193, 2, 79, 53, 17, 10, 27, 151, 2, 122, 53, 17, 10,
+ 27, 151, 2, 66, 53, 17, 10, 27, 122, 2, 151, 53, 17, 10, 27, 122, 2, 66,
+ 53, 17, 10, 27, 234, 130, 2, 151, 53, 17, 10, 27, 234, 130, 2, 122, 53,
+ 17, 10, 27, 234, 130, 2, 66, 53, 17, 10, 27, 221, 167, 2, 151, 53, 17,
+ 10, 27, 221, 167, 2, 122, 53, 17, 10, 27, 221, 167, 2, 234, 130, 53, 17,
+ 10, 27, 221, 167, 2, 66, 53, 17, 10, 27, 222, 27, 2, 122, 53, 17, 10, 27,
+ 222, 27, 2, 66, 53, 17, 10, 27, 248, 217, 2, 151, 53, 17, 10, 27, 248,
+ 217, 2, 122, 53, 17, 10, 27, 248, 217, 2, 234, 130, 53, 17, 10, 27, 248,
+ 217, 2, 66, 53, 17, 10, 27, 217, 81, 2, 122, 53, 17, 10, 27, 217, 81, 2,
+ 66, 53, 17, 10, 27, 210, 112, 2, 66, 53, 17, 10, 27, 254, 197, 2, 151,
+ 53, 17, 10, 27, 254, 197, 2, 66, 53, 17, 10, 27, 242, 245, 2, 151, 53,
+ 17, 10, 27, 242, 245, 2, 66, 53, 17, 10, 27, 244, 143, 2, 151, 53, 17,
+ 10, 27, 244, 143, 2, 122, 53, 17, 10, 27, 244, 143, 2, 234, 130, 53, 17,
+ 10, 27, 244, 143, 2, 66, 53, 17, 10, 27, 244, 143, 2, 112, 231, 193, 53,
+ 17, 10, 27, 244, 143, 2, 79, 53, 17, 10, 27, 224, 82, 2, 122, 53, 17, 10,
+ 27, 224, 82, 2, 66, 53, 17, 10, 27, 224, 82, 2, 112, 231, 193, 53, 17,
+ 10, 27, 224, 82, 2, 79, 53, 17, 10, 27, 234, 251, 2, 112, 53, 17, 10, 27,
+ 234, 251, 2, 151, 53, 17, 10, 27, 234, 251, 2, 122, 53, 17, 10, 27, 234,
+ 251, 2, 234, 130, 53, 17, 10, 27, 234, 251, 2, 233, 103, 53, 17, 10, 27,
+ 234, 251, 2, 66, 53, 17, 10, 27, 234, 251, 2, 112, 231, 193, 53, 17, 10,
+ 27, 234, 251, 2, 79, 53, 17, 10, 27, 233, 103, 2, 151, 53, 17, 10, 27,
+ 233, 103, 2, 122, 53, 17, 10, 27, 233, 103, 2, 234, 130, 53, 17, 10, 27,
+ 233, 103, 2, 66, 53, 17, 10, 27, 233, 103, 2, 112, 231, 193, 53, 17, 10,
+ 27, 233, 103, 2, 79, 53, 17, 10, 27, 66, 2, 151, 53, 17, 10, 27, 66, 2,
+ 122, 53, 17, 10, 27, 66, 2, 234, 130, 53, 17, 10, 27, 66, 2, 66, 53, 17,
+ 10, 27, 66, 2, 112, 231, 193, 53, 17, 10, 27, 66, 2, 79, 53, 17, 10, 27,
+ 228, 63, 2, 151, 53, 17, 10, 27, 228, 63, 2, 122, 53, 17, 10, 27, 228,
+ 63, 2, 234, 130, 53, 17, 10, 27, 228, 63, 2, 66, 53, 17, 10, 27, 228, 63,
+ 2, 112, 231, 193, 53, 17, 10, 27, 228, 63, 2, 79, 53, 17, 10, 27, 241,
+ 219, 2, 151, 53, 17, 10, 27, 241, 219, 2, 66, 53, 17, 10, 27, 241, 219,
+ 2, 112, 231, 193, 53, 17, 10, 27, 241, 219, 2, 79, 53, 17, 10, 27, 79, 2,
+ 151, 53, 17, 10, 27, 79, 2, 122, 53, 17, 10, 27, 79, 2, 234, 130, 53, 17,
+ 10, 27, 79, 2, 66, 53, 17, 10, 27, 79, 2, 112, 231, 193, 53, 17, 10, 27,
+ 79, 2, 79, 53, 17, 10, 27, 216, 203, 2, 218, 23, 112, 53, 17, 10, 27,
+ 223, 96, 2, 218, 23, 112, 53, 17, 10, 27, 112, 231, 193, 2, 218, 23, 112,
+ 53, 17, 10, 27, 220, 94, 2, 248, 183, 53, 17, 10, 27, 220, 94, 2, 234,
+ 204, 53, 17, 10, 27, 220, 94, 2, 244, 166, 53, 17, 10, 27, 220, 94, 2,
+ 248, 185, 53, 17, 10, 27, 220, 94, 2, 234, 206, 53, 17, 10, 27, 220, 94,
+ 2, 218, 23, 112, 53, 17, 10, 27, 79, 2, 202, 77, 2, 223, 96, 40, 17, 10,
+ 27, 79, 2, 202, 77, 2, 210, 109, 40, 17, 10, 27, 79, 2, 202, 77, 2, 66,
+ 40, 17, 10, 27, 79, 2, 202, 77, 2, 228, 63, 40, 17, 10, 27, 79, 2, 202,
+ 77, 2, 112, 231, 193, 40, 17, 10, 27, 79, 2, 202, 77, 2, 79, 40, 17, 10,
+ 27, 252, 55, 2, 223, 96, 40, 17, 10, 27, 252, 55, 2, 210, 109, 40, 17,
+ 10, 27, 252, 55, 2, 66, 40, 17, 10, 27, 252, 55, 2, 228, 63, 40, 17, 10,
+ 27, 252, 55, 2, 112, 231, 193, 40, 17, 10, 27, 252, 55, 2, 79, 40, 17,
+ 10, 27, 217, 8, 2, 223, 96, 40, 17, 10, 27, 217, 8, 2, 210, 109, 40, 17,
+ 10, 27, 217, 8, 2, 66, 40, 17, 10, 27, 217, 8, 2, 228, 63, 40, 17, 10,
+ 27, 217, 8, 2, 112, 231, 193, 40, 17, 10, 27, 217, 8, 2, 79, 40, 17, 10,
+ 27, 216, 193, 2, 223, 96, 40, 17, 10, 27, 216, 193, 2, 210, 109, 40, 17,
+ 10, 27, 216, 193, 2, 66, 40, 17, 10, 27, 216, 193, 2, 228, 63, 40, 17,
+ 10, 27, 216, 193, 2, 112, 231, 193, 40, 17, 10, 27, 216, 193, 2, 79, 40,
+ 17, 10, 27, 244, 143, 2, 112, 231, 193, 40, 17, 10, 27, 244, 143, 2, 79,
+ 40, 17, 10, 27, 224, 82, 2, 112, 231, 193, 40, 17, 10, 27, 224, 82, 2,
+ 79, 40, 17, 10, 27, 234, 251, 2, 112, 40, 17, 10, 27, 234, 251, 2, 233,
+ 103, 40, 17, 10, 27, 234, 251, 2, 66, 40, 17, 10, 27, 234, 251, 2, 112,
+ 231, 193, 40, 17, 10, 27, 234, 251, 2, 79, 40, 17, 10, 27, 233, 103, 2,
+ 66, 40, 17, 10, 27, 233, 103, 2, 112, 231, 193, 40, 17, 10, 27, 233, 103,
+ 2, 79, 40, 17, 10, 27, 66, 2, 112, 40, 17, 10, 27, 66, 2, 66, 40, 17, 10,
+ 27, 228, 63, 2, 223, 96, 40, 17, 10, 27, 228, 63, 2, 210, 109, 40, 17,
+ 10, 27, 228, 63, 2, 66, 40, 17, 10, 27, 228, 63, 2, 228, 63, 40, 17, 10,
+ 27, 228, 63, 2, 112, 231, 193, 40, 17, 10, 27, 228, 63, 2, 79, 40, 17,
+ 10, 27, 112, 231, 193, 2, 218, 23, 112, 40, 17, 10, 27, 79, 2, 223, 96,
+ 40, 17, 10, 27, 79, 2, 210, 109, 40, 17, 10, 27, 79, 2, 66, 40, 17, 10,
+ 27, 79, 2, 228, 63, 40, 17, 10, 27, 79, 2, 112, 231, 193, 40, 17, 10, 27,
+ 79, 2, 79, 40, 17, 10, 27, 79, 2, 202, 77, 2, 151, 65, 17, 10, 27, 79, 2,
+ 202, 77, 2, 122, 65, 17, 10, 27, 79, 2, 202, 77, 2, 234, 130, 65, 17, 10,
+ 27, 79, 2, 202, 77, 2, 66, 65, 17, 10, 27, 79, 2, 202, 77, 2, 241, 219,
+ 65, 17, 10, 27, 252, 55, 2, 151, 65, 17, 10, 27, 252, 55, 2, 122, 65, 17,
+ 10, 27, 252, 55, 2, 234, 130, 65, 17, 10, 27, 252, 55, 2, 66, 65, 17, 10,
+ 27, 252, 55, 2, 241, 219, 65, 17, 10, 27, 217, 8, 2, 151, 65, 17, 10, 27,
+ 217, 8, 2, 122, 65, 17, 10, 27, 217, 8, 2, 234, 130, 65, 17, 10, 27, 217,
+ 8, 2, 66, 65, 17, 10, 27, 217, 8, 2, 241, 219, 65, 17, 10, 27, 216, 193,
+ 2, 66, 65, 17, 10, 27, 151, 2, 122, 65, 17, 10, 27, 151, 2, 66, 65, 17,
+ 10, 27, 122, 2, 151, 65, 17, 10, 27, 122, 2, 66, 65, 17, 10, 27, 234,
+ 130, 2, 151, 65, 17, 10, 27, 234, 130, 2, 66, 65, 17, 10, 27, 221, 167,
+ 2, 151, 65, 17, 10, 27, 221, 167, 2, 122, 65, 17, 10, 27, 221, 167, 2,
+ 234, 130, 65, 17, 10, 27, 221, 167, 2, 66, 65, 17, 10, 27, 222, 27, 2,
+ 122, 65, 17, 10, 27, 222, 27, 2, 234, 130, 65, 17, 10, 27, 222, 27, 2,
+ 66, 65, 17, 10, 27, 248, 217, 2, 151, 65, 17, 10, 27, 248, 217, 2, 122,
+ 65, 17, 10, 27, 248, 217, 2, 234, 130, 65, 17, 10, 27, 248, 217, 2, 66,
+ 65, 17, 10, 27, 217, 81, 2, 122, 65, 17, 10, 27, 210, 112, 2, 66, 65, 17,
+ 10, 27, 254, 197, 2, 151, 65, 17, 10, 27, 254, 197, 2, 66, 65, 17, 10,
+ 27, 242, 245, 2, 151, 65, 17, 10, 27, 242, 245, 2, 66, 65, 17, 10, 27,
+ 244, 143, 2, 151, 65, 17, 10, 27, 244, 143, 2, 122, 65, 17, 10, 27, 244,
+ 143, 2, 234, 130, 65, 17, 10, 27, 244, 143, 2, 66, 65, 17, 10, 27, 224,
+ 82, 2, 122, 65, 17, 10, 27, 224, 82, 2, 66, 65, 17, 10, 27, 234, 251, 2,
+ 151, 65, 17, 10, 27, 234, 251, 2, 122, 65, 17, 10, 27, 234, 251, 2, 234,
+ 130, 65, 17, 10, 27, 234, 251, 2, 233, 103, 65, 17, 10, 27, 234, 251, 2,
+ 66, 65, 17, 10, 27, 233, 103, 2, 151, 65, 17, 10, 27, 233, 103, 2, 122,
+ 65, 17, 10, 27, 233, 103, 2, 234, 130, 65, 17, 10, 27, 233, 103, 2, 66,
+ 65, 17, 10, 27, 233, 103, 2, 241, 219, 65, 17, 10, 27, 66, 2, 151, 65,
+ 17, 10, 27, 66, 2, 122, 65, 17, 10, 27, 66, 2, 234, 130, 65, 17, 10, 27,
+ 66, 2, 66, 65, 17, 10, 27, 228, 63, 2, 151, 65, 17, 10, 27, 228, 63, 2,
+ 122, 65, 17, 10, 27, 228, 63, 2, 234, 130, 65, 17, 10, 27, 228, 63, 2,
+ 66, 65, 17, 10, 27, 228, 63, 2, 241, 219, 65, 17, 10, 27, 241, 219, 2,
+ 151, 65, 17, 10, 27, 241, 219, 2, 66, 65, 17, 10, 27, 241, 219, 2, 218,
+ 23, 112, 65, 17, 10, 27, 79, 2, 151, 65, 17, 10, 27, 79, 2, 122, 65, 17,
+ 10, 27, 79, 2, 234, 130, 65, 17, 10, 27, 79, 2, 66, 65, 17, 10, 27, 79,
+ 2, 241, 219, 65, 17, 10, 27, 79, 2, 202, 77, 2, 66, 147, 17, 10, 27, 79,
+ 2, 202, 77, 2, 241, 219, 147, 17, 10, 27, 252, 55, 2, 66, 147, 17, 10,
+ 27, 252, 55, 2, 241, 219, 147, 17, 10, 27, 217, 8, 2, 66, 147, 17, 10,
+ 27, 217, 8, 2, 241, 219, 147, 17, 10, 27, 216, 193, 2, 66, 147, 17, 10,
+ 27, 216, 193, 2, 241, 219, 147, 17, 10, 27, 221, 167, 2, 66, 147, 17, 10,
+ 27, 221, 167, 2, 241, 219, 147, 17, 10, 27, 220, 60, 2, 66, 147, 17, 10,
+ 27, 220, 60, 2, 241, 219, 147, 17, 10, 27, 234, 251, 2, 233, 103, 147,
+ 17, 10, 27, 234, 251, 2, 66, 147, 17, 10, 27, 233, 103, 2, 66, 147, 17,
+ 10, 27, 228, 63, 2, 66, 147, 17, 10, 27, 228, 63, 2, 241, 219, 147, 17,
+ 10, 27, 79, 2, 66, 147, 17, 10, 27, 79, 2, 241, 219, 147, 17, 10, 27,
+ 220, 94, 2, 244, 166, 147, 17, 10, 27, 220, 94, 2, 248, 185, 147, 17, 10,
+ 27, 220, 94, 2, 234, 206, 147, 17, 10, 27, 217, 81, 2, 112, 231, 193, 53,
+ 17, 10, 27, 217, 81, 2, 79, 53, 17, 10, 27, 254, 197, 2, 112, 231, 193,
+ 53, 17, 10, 27, 254, 197, 2, 79, 53, 17, 10, 27, 242, 245, 2, 112, 231,
+ 193, 53, 17, 10, 27, 242, 245, 2, 79, 53, 17, 10, 27, 221, 167, 2, 112,
+ 231, 193, 53, 17, 10, 27, 221, 167, 2, 79, 53, 17, 10, 27, 220, 60, 2,
+ 112, 231, 193, 53, 17, 10, 27, 220, 60, 2, 79, 53, 17, 10, 27, 122, 2,
+ 112, 231, 193, 53, 17, 10, 27, 122, 2, 79, 53, 17, 10, 27, 151, 2, 112,
+ 231, 193, 53, 17, 10, 27, 151, 2, 79, 53, 17, 10, 27, 234, 130, 2, 112,
+ 231, 193, 53, 17, 10, 27, 234, 130, 2, 79, 53, 17, 10, 27, 222, 27, 2,
+ 112, 231, 193, 53, 17, 10, 27, 222, 27, 2, 79, 53, 17, 10, 27, 248, 217,
+ 2, 112, 231, 193, 53, 17, 10, 27, 248, 217, 2, 79, 53, 17, 10, 27, 220,
+ 60, 2, 151, 53, 17, 10, 27, 220, 60, 2, 122, 53, 17, 10, 27, 220, 60, 2,
+ 234, 130, 53, 17, 10, 27, 220, 60, 2, 66, 53, 17, 10, 27, 220, 60, 2,
+ 223, 96, 53, 17, 10, 27, 221, 167, 2, 223, 96, 53, 17, 10, 27, 222, 27,
+ 2, 223, 96, 53, 17, 10, 27, 248, 217, 2, 223, 96, 53, 17, 10, 27, 217,
+ 81, 2, 112, 231, 193, 40, 17, 10, 27, 217, 81, 2, 79, 40, 17, 10, 27,
+ 254, 197, 2, 112, 231, 193, 40, 17, 10, 27, 254, 197, 2, 79, 40, 17, 10,
+ 27, 242, 245, 2, 112, 231, 193, 40, 17, 10, 27, 242, 245, 2, 79, 40, 17,
+ 10, 27, 221, 167, 2, 112, 231, 193, 40, 17, 10, 27, 221, 167, 2, 79, 40,
+ 17, 10, 27, 220, 60, 2, 112, 231, 193, 40, 17, 10, 27, 220, 60, 2, 79,
+ 40, 17, 10, 27, 122, 2, 112, 231, 193, 40, 17, 10, 27, 122, 2, 79, 40,
+ 17, 10, 27, 151, 2, 112, 231, 193, 40, 17, 10, 27, 151, 2, 79, 40, 17,
+ 10, 27, 234, 130, 2, 112, 231, 193, 40, 17, 10, 27, 234, 130, 2, 79, 40,
+ 17, 10, 27, 222, 27, 2, 112, 231, 193, 40, 17, 10, 27, 222, 27, 2, 79,
+ 40, 17, 10, 27, 248, 217, 2, 112, 231, 193, 40, 17, 10, 27, 248, 217, 2,
+ 79, 40, 17, 10, 27, 220, 60, 2, 151, 40, 17, 10, 27, 220, 60, 2, 122, 40,
+ 17, 10, 27, 220, 60, 2, 234, 130, 40, 17, 10, 27, 220, 60, 2, 66, 40, 17,
+ 10, 27, 220, 60, 2, 223, 96, 40, 17, 10, 27, 221, 167, 2, 223, 96, 40,
+ 17, 10, 27, 222, 27, 2, 223, 96, 40, 17, 10, 27, 248, 217, 2, 223, 96,
+ 40, 17, 10, 27, 220, 60, 2, 151, 65, 17, 10, 27, 220, 60, 2, 122, 65, 17,
+ 10, 27, 220, 60, 2, 234, 130, 65, 17, 10, 27, 220, 60, 2, 66, 65, 17, 10,
+ 27, 221, 167, 2, 241, 219, 65, 17, 10, 27, 220, 60, 2, 241, 219, 65, 17,
+ 10, 27, 217, 81, 2, 66, 65, 17, 10, 27, 221, 167, 2, 151, 147, 17, 10,
+ 27, 221, 167, 2, 122, 147, 17, 10, 27, 221, 167, 2, 234, 130, 147, 17,
+ 10, 27, 220, 60, 2, 151, 147, 17, 10, 27, 220, 60, 2, 122, 147, 17, 10,
+ 27, 220, 60, 2, 234, 130, 147, 17, 10, 27, 217, 81, 2, 66, 147, 17, 10,
+ 27, 210, 112, 2, 66, 147, 17, 10, 27, 112, 2, 244, 164, 40, 17, 10, 27,
+ 112, 2, 244, 164, 53, 17, 226, 146, 43, 226, 3, 226, 146, 44, 226, 3, 10,
+ 27, 217, 8, 2, 151, 2, 66, 65, 17, 10, 27, 217, 8, 2, 122, 2, 151, 40,
+ 17, 10, 27, 217, 8, 2, 122, 2, 151, 65, 17, 10, 27, 217, 8, 2, 122, 2,
+ 66, 65, 17, 10, 27, 217, 8, 2, 234, 130, 2, 66, 65, 17, 10, 27, 217, 8,
+ 2, 66, 2, 151, 65, 17, 10, 27, 217, 8, 2, 66, 2, 122, 65, 17, 10, 27,
+ 217, 8, 2, 66, 2, 234, 130, 65, 17, 10, 27, 151, 2, 66, 2, 122, 40, 17,
+ 10, 27, 151, 2, 66, 2, 122, 65, 17, 10, 27, 122, 2, 66, 2, 79, 40, 17,
+ 10, 27, 122, 2, 66, 2, 112, 231, 193, 40, 17, 10, 27, 221, 167, 2, 122,
+ 2, 151, 65, 17, 10, 27, 221, 167, 2, 151, 2, 122, 65, 17, 10, 27, 221,
+ 167, 2, 151, 2, 112, 231, 193, 40, 17, 10, 27, 221, 167, 2, 66, 2, 122,
+ 40, 17, 10, 27, 221, 167, 2, 66, 2, 122, 65, 17, 10, 27, 221, 167, 2, 66,
+ 2, 151, 65, 17, 10, 27, 221, 167, 2, 66, 2, 66, 40, 17, 10, 27, 221, 167,
+ 2, 66, 2, 66, 65, 17, 10, 27, 222, 27, 2, 122, 2, 122, 40, 17, 10, 27,
+ 222, 27, 2, 122, 2, 122, 65, 17, 10, 27, 222, 27, 2, 66, 2, 66, 40, 17,
+ 10, 27, 220, 60, 2, 122, 2, 66, 40, 17, 10, 27, 220, 60, 2, 122, 2, 66,
+ 65, 17, 10, 27, 220, 60, 2, 151, 2, 79, 40, 17, 10, 27, 220, 60, 2, 66,
+ 2, 234, 130, 40, 17, 10, 27, 220, 60, 2, 66, 2, 234, 130, 65, 17, 10, 27,
+ 220, 60, 2, 66, 2, 66, 40, 17, 10, 27, 220, 60, 2, 66, 2, 66, 65, 17, 10,
+ 27, 248, 217, 2, 122, 2, 112, 231, 193, 40, 17, 10, 27, 248, 217, 2, 234,
+ 130, 2, 66, 40, 17, 10, 27, 248, 217, 2, 234, 130, 2, 66, 65, 17, 10, 27,
+ 217, 81, 2, 66, 2, 122, 40, 17, 10, 27, 217, 81, 2, 66, 2, 122, 65, 17,
+ 10, 27, 217, 81, 2, 66, 2, 66, 65, 17, 10, 27, 217, 81, 2, 66, 2, 79, 40,
+ 17, 10, 27, 254, 197, 2, 151, 2, 66, 40, 17, 10, 27, 254, 197, 2, 66, 2,
+ 66, 40, 17, 10, 27, 254, 197, 2, 66, 2, 66, 65, 17, 10, 27, 254, 197, 2,
+ 66, 2, 112, 231, 193, 40, 17, 10, 27, 242, 245, 2, 66, 2, 66, 40, 17, 10,
+ 27, 242, 245, 2, 66, 2, 79, 40, 17, 10, 27, 242, 245, 2, 66, 2, 112, 231,
+ 193, 40, 17, 10, 27, 244, 143, 2, 234, 130, 2, 66, 40, 17, 10, 27, 244,
+ 143, 2, 234, 130, 2, 66, 65, 17, 10, 27, 224, 82, 2, 66, 2, 122, 40, 17,
+ 10, 27, 224, 82, 2, 66, 2, 66, 40, 17, 10, 27, 233, 103, 2, 122, 2, 66,
+ 40, 17, 10, 27, 233, 103, 2, 122, 2, 79, 40, 17, 10, 27, 233, 103, 2,
+ 122, 2, 112, 231, 193, 40, 17, 10, 27, 233, 103, 2, 151, 2, 151, 65, 17,
+ 10, 27, 233, 103, 2, 151, 2, 151, 40, 17, 10, 27, 233, 103, 2, 234, 130,
+ 2, 66, 40, 17, 10, 27, 233, 103, 2, 234, 130, 2, 66, 65, 17, 10, 27, 233,
+ 103, 2, 66, 2, 122, 40, 17, 10, 27, 233, 103, 2, 66, 2, 122, 65, 17, 10,
+ 27, 66, 2, 122, 2, 151, 65, 17, 10, 27, 66, 2, 122, 2, 66, 65, 17, 10,
+ 27, 66, 2, 122, 2, 79, 40, 17, 10, 27, 66, 2, 151, 2, 122, 65, 17, 10,
+ 27, 66, 2, 151, 2, 66, 65, 17, 10, 27, 66, 2, 234, 130, 2, 151, 65, 17,
+ 10, 27, 66, 2, 234, 130, 2, 66, 65, 17, 10, 27, 66, 2, 151, 2, 234, 130,
+ 65, 17, 10, 27, 241, 219, 2, 66, 2, 151, 65, 17, 10, 27, 241, 219, 2, 66,
+ 2, 66, 65, 17, 10, 27, 228, 63, 2, 122, 2, 66, 65, 17, 10, 27, 228, 63,
+ 2, 122, 2, 112, 231, 193, 40, 17, 10, 27, 228, 63, 2, 151, 2, 66, 40, 17,
+ 10, 27, 228, 63, 2, 151, 2, 66, 65, 17, 10, 27, 228, 63, 2, 151, 2, 112,
+ 231, 193, 40, 17, 10, 27, 228, 63, 2, 66, 2, 79, 40, 17, 10, 27, 228, 63,
+ 2, 66, 2, 112, 231, 193, 40, 17, 10, 27, 79, 2, 66, 2, 66, 40, 17, 10,
+ 27, 79, 2, 66, 2, 66, 65, 17, 10, 27, 252, 55, 2, 234, 130, 2, 79, 40,
+ 17, 10, 27, 217, 8, 2, 151, 2, 79, 40, 17, 10, 27, 217, 8, 2, 151, 2,
+ 112, 231, 193, 40, 17, 10, 27, 217, 8, 2, 234, 130, 2, 79, 40, 17, 10,
+ 27, 217, 8, 2, 234, 130, 2, 112, 231, 193, 40, 17, 10, 27, 217, 8, 2, 66,
+ 2, 79, 40, 17, 10, 27, 217, 8, 2, 66, 2, 112, 231, 193, 40, 17, 10, 27,
+ 151, 2, 66, 2, 79, 40, 17, 10, 27, 151, 2, 122, 2, 112, 231, 193, 40, 17,
+ 10, 27, 151, 2, 66, 2, 112, 231, 193, 40, 17, 10, 27, 221, 167, 2, 234,
+ 130, 2, 112, 231, 193, 40, 17, 10, 27, 222, 27, 2, 122, 2, 79, 40, 17,
+ 10, 27, 220, 60, 2, 122, 2, 79, 40, 17, 10, 27, 248, 217, 2, 122, 2, 79,
+ 40, 17, 10, 27, 233, 103, 2, 151, 2, 79, 40, 17, 10, 27, 233, 103, 2, 66,
+ 2, 79, 40, 17, 10, 27, 79, 2, 122, 2, 79, 40, 17, 10, 27, 79, 2, 151, 2,
+ 79, 40, 17, 10, 27, 79, 2, 66, 2, 79, 40, 17, 10, 27, 66, 2, 66, 2, 79,
+ 40, 17, 10, 27, 224, 82, 2, 66, 2, 79, 40, 17, 10, 27, 228, 63, 2, 122,
+ 2, 79, 40, 17, 10, 27, 224, 82, 2, 66, 2, 122, 65, 17, 10, 27, 233, 103,
+ 2, 122, 2, 66, 65, 17, 10, 27, 254, 197, 2, 66, 2, 79, 40, 17, 10, 27,
+ 234, 251, 2, 66, 2, 79, 40, 17, 10, 27, 228, 63, 2, 151, 2, 122, 65, 17,
+ 10, 27, 66, 2, 234, 130, 2, 79, 40, 17, 10, 27, 233, 103, 2, 151, 2, 66,
+ 65, 17, 10, 27, 234, 251, 2, 66, 2, 66, 40, 17, 10, 27, 233, 103, 2, 151,
+ 2, 66, 40, 17, 10, 27, 228, 63, 2, 151, 2, 122, 40, 17, 10, 27, 151, 2,
+ 122, 2, 79, 40, 17, 10, 27, 122, 2, 151, 2, 79, 40, 17, 10, 27, 66, 2,
+ 151, 2, 79, 40, 17, 10, 27, 244, 143, 2, 66, 2, 79, 40, 17, 10, 27, 252,
+ 55, 2, 122, 2, 79, 40, 17, 10, 27, 234, 251, 2, 66, 2, 66, 65, 17, 10,
+ 27, 254, 197, 2, 151, 2, 66, 65, 17, 10, 27, 222, 27, 2, 66, 2, 66, 65,
+ 17, 10, 27, 221, 167, 2, 234, 130, 2, 79, 40, 17, 10, 27, 228, 63, 2,
+ 151, 2, 79, 40, 17, 10, 27, 222, 4, 214, 128, 253, 238, 234, 4, 218, 130,
+ 5, 53, 17, 10, 27, 224, 78, 214, 128, 253, 238, 234, 4, 218, 130, 5, 53,
+ 17, 10, 27, 254, 153, 53, 17, 10, 27, 254, 183, 53, 17, 10, 27, 230, 153,
+ 53, 17, 10, 27, 222, 5, 53, 17, 10, 27, 223, 143, 53, 17, 10, 27, 254,
+ 172, 53, 17, 10, 27, 212, 49, 53, 17, 10, 27, 222, 4, 53, 17, 10, 27,
+ 222, 3, 254, 172, 212, 48, 10, 27, 235, 134, 223, 34, 50, 10, 27, 251,
+ 230, 254, 39, 254, 40, 45, 221, 156, 45, 221, 45, 45, 220, 233, 45, 220,
+ 222, 45, 220, 211, 45, 220, 200, 45, 220, 189, 45, 220, 178, 45, 220,
+ 167, 45, 221, 155, 45, 221, 144, 45, 221, 133, 45, 221, 122, 45, 221,
+ 111, 45, 221, 100, 45, 221, 89, 224, 194, 244, 20, 31, 67, 249, 219, 224,
+ 194, 244, 20, 31, 67, 109, 249, 219, 224, 194, 244, 20, 31, 67, 109, 243,
+ 229, 218, 129, 224, 194, 244, 20, 31, 67, 249, 226, 224, 194, 244, 20,
+ 31, 67, 220, 150, 224, 194, 244, 20, 31, 67, 245, 31, 78, 224, 194, 244,
+ 20, 31, 67, 224, 13, 78, 224, 194, 244, 20, 31, 67, 43, 71, 233, 20, 127,
+ 224, 194, 244, 20, 31, 67, 44, 71, 233, 20, 251, 156, 224, 194, 244, 20,
+ 31, 67, 203, 245, 163, 38, 27, 43, 242, 27, 38, 27, 44, 242, 27, 38, 52,
+ 216, 89, 43, 242, 27, 38, 52, 216, 89, 44, 242, 27, 38, 231, 233, 43,
+ 242, 27, 38, 231, 233, 44, 242, 27, 38, 249, 197, 231, 232, 224, 194,
+ 244, 20, 31, 67, 113, 59, 233, 56, 224, 194, 244, 20, 31, 67, 245, 160,
+ 248, 156, 224, 194, 244, 20, 31, 67, 245, 151, 248, 156, 224, 194, 244,
+ 20, 31, 67, 121, 232, 213, 224, 194, 244, 20, 31, 67, 212, 32, 121, 232,
+ 213, 224, 194, 244, 20, 31, 67, 43, 226, 3, 224, 194, 244, 20, 31, 67,
+ 44, 226, 3, 224, 194, 244, 20, 31, 67, 43, 249, 99, 127, 224, 194, 244,
+ 20, 31, 67, 44, 249, 99, 127, 224, 194, 244, 20, 31, 67, 43, 216, 6, 220,
+ 53, 127, 224, 194, 244, 20, 31, 67, 44, 216, 6, 220, 53, 127, 224, 194,
+ 244, 20, 31, 67, 43, 85, 233, 20, 127, 224, 194, 244, 20, 31, 67, 44, 85,
+ 233, 20, 127, 224, 194, 244, 20, 31, 67, 43, 52, 254, 110, 127, 224, 194,
+ 244, 20, 31, 67, 44, 52, 254, 110, 127, 224, 194, 244, 20, 31, 67, 43,
+ 254, 110, 127, 224, 194, 244, 20, 31, 67, 44, 254, 110, 127, 224, 194,
+ 244, 20, 31, 67, 43, 249, 161, 127, 224, 194, 244, 20, 31, 67, 44, 249,
+ 161, 127, 224, 194, 244, 20, 31, 67, 43, 71, 249, 161, 127, 224, 194,
+ 244, 20, 31, 67, 44, 71, 249, 161, 127, 220, 131, 247, 120, 71, 220, 131,
+ 247, 120, 224, 194, 244, 20, 31, 67, 43, 42, 127, 224, 194, 244, 20, 31,
+ 67, 44, 42, 127, 248, 155, 226, 119, 250, 172, 226, 119, 212, 32, 226,
+ 119, 52, 212, 32, 226, 119, 248, 155, 121, 232, 213, 250, 172, 121, 232,
+ 213, 212, 32, 121, 232, 213, 4, 249, 219, 4, 109, 249, 219, 4, 243, 229,
+ 218, 129, 4, 220, 150, 4, 249, 226, 4, 224, 13, 78, 4, 245, 31, 78, 4,
+ 245, 160, 248, 156, 4, 43, 226, 3, 4, 44, 226, 3, 4, 43, 249, 99, 127, 4,
+ 44, 249, 99, 127, 4, 43, 216, 6, 220, 53, 127, 4, 44, 216, 6, 220, 53,
+ 127, 4, 54, 50, 4, 254, 126, 4, 253, 216, 4, 96, 50, 4, 240, 167, 4, 233,
+ 15, 50, 4, 242, 130, 50, 4, 245, 98, 50, 4, 223, 50, 219, 46, 4, 247,
+ 132, 50, 4, 225, 182, 50, 4, 249, 217, 253, 206, 10, 244, 164, 53, 17,
+ 10, 217, 44, 2, 244, 164, 48, 10, 248, 183, 53, 17, 10, 217, 78, 244, 1,
+ 10, 234, 204, 53, 17, 10, 244, 166, 53, 17, 10, 244, 166, 147, 17, 10,
+ 248, 185, 53, 17, 10, 248, 185, 147, 17, 10, 234, 206, 53, 17, 10, 234,
+ 206, 147, 17, 10, 220, 94, 53, 17, 10, 220, 94, 147, 17, 10, 218, 46, 53,
+ 17, 10, 218, 46, 147, 17, 10, 1, 202, 53, 17, 10, 1, 112, 2, 231, 228,
+ 77, 53, 17, 10, 1, 112, 2, 231, 228, 77, 40, 17, 10, 1, 112, 2, 202, 77,
+ 53, 17, 10, 1, 112, 2, 202, 77, 40, 17, 10, 1, 212, 31, 2, 202, 77, 53,
+ 17, 10, 1, 212, 31, 2, 202, 77, 40, 17, 10, 1, 112, 2, 202, 252, 43, 53,
+ 17, 10, 1, 112, 2, 202, 252, 43, 40, 17, 10, 1, 79, 2, 202, 77, 53, 17,
+ 10, 1, 79, 2, 202, 77, 40, 17, 10, 1, 79, 2, 202, 77, 65, 17, 10, 1, 79,
+ 2, 202, 77, 147, 17, 10, 1, 112, 53, 17, 10, 1, 112, 40, 17, 10, 1, 252,
+ 55, 53, 17, 10, 1, 252, 55, 40, 17, 10, 1, 252, 55, 65, 17, 10, 1, 252,
+ 55, 147, 17, 10, 1, 217, 8, 231, 165, 53, 17, 10, 1, 217, 8, 231, 165,
+ 40, 17, 10, 1, 217, 8, 53, 17, 10, 1, 217, 8, 40, 17, 10, 1, 217, 8, 65,
+ 17, 10, 1, 217, 8, 147, 17, 10, 1, 216, 193, 53, 17, 10, 1, 216, 193, 40,
+ 17, 10, 1, 216, 193, 65, 17, 10, 1, 216, 193, 147, 17, 10, 1, 151, 53,
+ 17, 10, 1, 151, 40, 17, 10, 1, 151, 65, 17, 10, 1, 151, 147, 17, 10, 1,
+ 122, 53, 17, 10, 1, 122, 40, 17, 10, 1, 122, 65, 17, 10, 1, 122, 147, 17,
+ 10, 1, 234, 130, 53, 17, 10, 1, 234, 130, 40, 17, 10, 1, 234, 130, 65,
+ 17, 10, 1, 234, 130, 147, 17, 10, 1, 248, 196, 53, 17, 10, 1, 248, 196,
+ 40, 17, 10, 1, 216, 203, 53, 17, 10, 1, 216, 203, 40, 17, 10, 1, 223, 96,
+ 53, 17, 10, 1, 223, 96, 40, 17, 10, 1, 210, 109, 53, 17, 10, 1, 210, 109,
+ 40, 17, 10, 1, 221, 167, 53, 17, 10, 1, 221, 167, 40, 17, 10, 1, 221,
+ 167, 65, 17, 10, 1, 221, 167, 147, 17, 10, 1, 220, 60, 53, 17, 10, 1,
+ 220, 60, 40, 17, 10, 1, 220, 60, 65, 17, 10, 1, 220, 60, 147, 17, 10, 1,
+ 222, 27, 53, 17, 10, 1, 222, 27, 40, 17, 10, 1, 222, 27, 65, 17, 10, 1,
+ 222, 27, 147, 17, 10, 1, 248, 217, 53, 17, 10, 1, 248, 217, 40, 17, 10,
+ 1, 248, 217, 65, 17, 10, 1, 248, 217, 147, 17, 10, 1, 217, 81, 53, 17,
+ 10, 1, 217, 81, 40, 17, 10, 1, 217, 81, 65, 17, 10, 1, 217, 81, 147, 17,
+ 10, 1, 210, 112, 53, 17, 10, 1, 210, 112, 40, 17, 10, 1, 210, 112, 65,
+ 17, 10, 1, 210, 112, 147, 17, 10, 1, 254, 197, 53, 17, 10, 1, 254, 197,
+ 40, 17, 10, 1, 254, 197, 65, 17, 10, 1, 254, 197, 147, 17, 10, 1, 242,
+ 245, 53, 17, 10, 1, 242, 245, 40, 17, 10, 1, 242, 245, 65, 17, 10, 1,
+ 242, 245, 147, 17, 10, 1, 244, 143, 53, 17, 10, 1, 244, 143, 40, 17, 10,
+ 1, 244, 143, 65, 17, 10, 1, 244, 143, 147, 17, 10, 1, 224, 82, 53, 17,
+ 10, 1, 224, 82, 40, 17, 10, 1, 224, 82, 65, 17, 10, 1, 224, 82, 147, 17,
+ 10, 1, 234, 251, 53, 17, 10, 1, 234, 251, 40, 17, 10, 1, 234, 251, 65,
+ 17, 10, 1, 234, 251, 147, 17, 10, 1, 233, 103, 53, 17, 10, 1, 233, 103,
+ 40, 17, 10, 1, 233, 103, 65, 17, 10, 1, 233, 103, 147, 17, 10, 1, 66, 53,
+ 17, 10, 1, 66, 40, 17, 10, 1, 66, 65, 17, 10, 1, 66, 147, 17, 10, 1, 228,
+ 63, 53, 17, 10, 1, 228, 63, 40, 17, 10, 1, 228, 63, 65, 17, 10, 1, 228,
+ 63, 147, 17, 10, 1, 241, 219, 53, 17, 10, 1, 241, 219, 40, 17, 10, 1,
+ 241, 219, 65, 17, 10, 1, 241, 219, 147, 17, 10, 1, 212, 31, 53, 17, 10,
+ 1, 212, 31, 40, 17, 10, 1, 112, 231, 193, 53, 17, 10, 1, 112, 231, 193,
+ 40, 17, 10, 1, 79, 53, 17, 10, 1, 79, 40, 17, 10, 1, 79, 65, 17, 10, 1,
+ 79, 147, 17, 10, 27, 233, 103, 2, 112, 2, 231, 228, 77, 53, 17, 10, 27,
+ 233, 103, 2, 112, 2, 231, 228, 77, 40, 17, 10, 27, 233, 103, 2, 112, 2,
+ 202, 77, 53, 17, 10, 27, 233, 103, 2, 112, 2, 202, 77, 40, 17, 10, 27,
+ 233, 103, 2, 112, 2, 202, 252, 43, 53, 17, 10, 27, 233, 103, 2, 112, 2,
+ 202, 252, 43, 40, 17, 10, 27, 233, 103, 2, 112, 53, 17, 10, 27, 233, 103,
+ 2, 112, 40, 17, 210, 87, 211, 245, 228, 73, 219, 18, 126, 245, 31, 78,
+ 126, 223, 254, 78, 126, 54, 50, 126, 247, 132, 50, 126, 225, 182, 50,
+ 126, 254, 126, 126, 254, 57, 126, 43, 226, 3, 126, 44, 226, 3, 126, 253,
+ 216, 126, 96, 50, 126, 249, 219, 126, 240, 167, 126, 243, 229, 218, 129,
+ 126, 219, 46, 126, 21, 210, 86, 126, 21, 110, 126, 21, 105, 126, 21, 158,
+ 126, 21, 161, 126, 21, 189, 126, 21, 194, 126, 21, 198, 126, 21, 195,
+ 126, 21, 200, 126, 249, 226, 126, 220, 150, 126, 233, 15, 50, 126, 245,
+ 98, 50, 126, 242, 130, 50, 126, 224, 13, 78, 126, 249, 217, 253, 206,
+ 126, 7, 6, 1, 61, 126, 7, 6, 1, 253, 158, 126, 7, 6, 1, 251, 66, 126, 7,
+ 6, 1, 249, 60, 126, 7, 6, 1, 75, 126, 7, 6, 1, 245, 6, 126, 7, 6, 1, 243,
+ 202, 126, 7, 6, 1, 242, 60, 126, 7, 6, 1, 73, 126, 7, 6, 1, 235, 144,
+ 126, 7, 6, 1, 235, 23, 126, 7, 6, 1, 156, 126, 7, 6, 1, 193, 126, 7, 6,
+ 1, 230, 25, 126, 7, 6, 1, 76, 126, 7, 6, 1, 226, 105, 126, 7, 6, 1, 224,
+ 96, 126, 7, 6, 1, 153, 126, 7, 6, 1, 222, 91, 126, 7, 6, 1, 217, 152,
+ 126, 7, 6, 1, 70, 126, 7, 6, 1, 214, 105, 126, 7, 6, 1, 212, 98, 126, 7,
+ 6, 1, 211, 178, 126, 7, 6, 1, 211, 117, 126, 7, 6, 1, 210, 159, 126, 43,
+ 42, 127, 126, 223, 50, 219, 46, 126, 44, 42, 127, 126, 250, 31, 255, 14,
+ 126, 121, 232, 213, 126, 242, 137, 255, 14, 126, 7, 4, 1, 61, 126, 7, 4,
+ 1, 253, 158, 126, 7, 4, 1, 251, 66, 126, 7, 4, 1, 249, 60, 126, 7, 4, 1,
+ 75, 126, 7, 4, 1, 245, 6, 126, 7, 4, 1, 243, 202, 126, 7, 4, 1, 242, 60,
+ 126, 7, 4, 1, 73, 126, 7, 4, 1, 235, 144, 126, 7, 4, 1, 235, 23, 126, 7,
+ 4, 1, 156, 126, 7, 4, 1, 193, 126, 7, 4, 1, 230, 25, 126, 7, 4, 1, 76,
+ 126, 7, 4, 1, 226, 105, 126, 7, 4, 1, 224, 96, 126, 7, 4, 1, 153, 126, 7,
+ 4, 1, 222, 91, 126, 7, 4, 1, 217, 152, 126, 7, 4, 1, 70, 126, 7, 4, 1,
+ 214, 105, 126, 7, 4, 1, 212, 98, 126, 7, 4, 1, 211, 178, 126, 7, 4, 1,
+ 211, 117, 126, 7, 4, 1, 210, 159, 126, 43, 249, 99, 127, 126, 67, 232,
+ 213, 126, 44, 249, 99, 127, 126, 182, 126, 43, 71, 226, 3, 126, 44, 71,
+ 226, 3, 101, 109, 243, 229, 218, 129, 101, 43, 249, 161, 127, 101, 44,
+ 249, 161, 127, 101, 109, 249, 219, 101, 56, 230, 224, 247, 120, 101, 56,
+ 1, 211, 227, 101, 56, 1, 4, 61, 101, 56, 1, 4, 73, 101, 56, 1, 4, 70,
+ 101, 56, 1, 4, 75, 101, 56, 1, 4, 76, 101, 56, 1, 4, 191, 101, 56, 1, 4,
+ 210, 212, 101, 56, 1, 4, 210, 244, 101, 56, 1, 4, 215, 118, 101, 234,
+ 201, 224, 173, 219, 31, 78, 101, 56, 1, 61, 101, 56, 1, 73, 101, 56, 1,
+ 70, 101, 56, 1, 75, 101, 56, 1, 76, 101, 56, 1, 176, 101, 56, 1, 234, 92,
+ 101, 56, 1, 233, 217, 101, 56, 1, 234, 182, 101, 56, 1, 234, 28, 101, 56,
+ 1, 206, 101, 56, 1, 219, 191, 101, 56, 1, 218, 83, 101, 56, 1, 221, 181,
+ 101, 56, 1, 219, 58, 101, 56, 1, 217, 105, 101, 56, 1, 216, 117, 101, 56,
+ 1, 215, 118, 101, 56, 1, 217, 22, 101, 56, 1, 111, 101, 56, 1, 197, 101,
+ 56, 1, 228, 233, 101, 56, 1, 227, 237, 101, 56, 1, 229, 107, 101, 56, 1,
+ 228, 74, 101, 56, 1, 162, 101, 56, 1, 241, 180, 101, 56, 1, 240, 222,
+ 101, 56, 1, 241, 238, 101, 56, 1, 241, 68, 101, 56, 1, 184, 101, 56, 1,
+ 230, 230, 101, 56, 1, 230, 102, 101, 56, 1, 231, 91, 101, 56, 1, 230,
+ 161, 101, 56, 1, 191, 101, 56, 1, 210, 212, 101, 56, 1, 210, 244, 101,
+ 56, 1, 205, 101, 56, 1, 223, 35, 101, 56, 1, 222, 140, 101, 56, 1, 223,
+ 128, 101, 56, 1, 222, 211, 101, 56, 1, 212, 65, 101, 56, 1, 230, 25, 101,
+ 56, 213, 135, 219, 31, 78, 101, 56, 220, 155, 219, 31, 78, 101, 24, 244,
+ 103, 101, 24, 1, 234, 58, 101, 24, 1, 218, 215, 101, 24, 1, 234, 51, 101,
+ 24, 1, 228, 226, 101, 24, 1, 228, 224, 101, 24, 1, 228, 223, 101, 24, 1,
+ 216, 101, 101, 24, 1, 218, 204, 101, 24, 1, 223, 26, 101, 24, 1, 223, 21,
+ 101, 24, 1, 223, 18, 101, 24, 1, 223, 11, 101, 24, 1, 223, 6, 101, 24, 1,
+ 223, 1, 101, 24, 1, 223, 12, 101, 24, 1, 223, 24, 101, 24, 1, 230, 217,
+ 101, 24, 1, 225, 95, 101, 24, 1, 218, 212, 101, 24, 1, 225, 84, 101, 24,
+ 1, 219, 148, 101, 24, 1, 218, 209, 101, 24, 1, 236, 56, 101, 24, 1, 250,
+ 46, 101, 24, 1, 218, 219, 101, 24, 1, 250, 106, 101, 24, 1, 234, 110,
+ 101, 24, 1, 216, 173, 101, 24, 1, 225, 131, 101, 24, 1, 241, 172, 101,
+ 24, 1, 61, 101, 24, 1, 254, 243, 101, 24, 1, 191, 101, 24, 1, 211, 92,
+ 101, 24, 1, 245, 117, 101, 24, 1, 75, 101, 24, 1, 211, 36, 101, 24, 1,
+ 211, 47, 101, 24, 1, 76, 101, 24, 1, 212, 65, 101, 24, 1, 212, 62, 101,
+ 24, 1, 226, 234, 101, 24, 1, 210, 244, 101, 24, 1, 70, 101, 24, 1, 212,
+ 11, 101, 24, 1, 212, 22, 101, 24, 1, 211, 250, 101, 24, 1, 210, 212, 101,
+ 24, 1, 245, 55, 101, 24, 1, 211, 8, 101, 24, 1, 73, 126, 250, 176, 50,
+ 126, 224, 228, 50, 126, 228, 52, 50, 126, 231, 232, 126, 251, 135, 130,
+ 126, 211, 40, 50, 126, 211, 217, 50, 101, 244, 18, 192, 213, 239, 101,
+ 140, 74, 101, 214, 153, 74, 101, 97, 74, 101, 246, 104, 74, 101, 85, 218,
+ 234, 101, 71, 250, 35, 235, 204, 254, 99, 254, 120, 235, 204, 254, 99,
+ 220, 137, 235, 204, 254, 99, 216, 236, 226, 249, 223, 72, 250, 142, 223,
+ 72, 250, 142, 62, 57, 3, 253, 142, 61, 62, 57, 3, 253, 111, 75, 62, 57,
+ 3, 253, 120, 73, 62, 57, 3, 253, 88, 76, 62, 57, 3, 253, 138, 70, 62, 57,
+ 3, 253, 157, 248, 221, 62, 57, 3, 253, 104, 248, 90, 62, 57, 3, 253, 144,
+ 248, 3, 62, 57, 3, 253, 134, 247, 145, 62, 57, 3, 253, 98, 246, 78, 62,
+ 57, 3, 253, 92, 235, 141, 62, 57, 3, 253, 103, 235, 126, 62, 57, 3, 253,
+ 113, 235, 68, 62, 57, 3, 253, 84, 235, 51, 62, 57, 3, 253, 72, 176, 62,
+ 57, 3, 253, 105, 234, 182, 62, 57, 3, 253, 82, 234, 92, 62, 57, 3, 253,
+ 79, 234, 28, 62, 57, 3, 253, 68, 233, 217, 62, 57, 3, 253, 69, 184, 62,
+ 57, 3, 253, 135, 231, 91, 62, 57, 3, 253, 76, 230, 230, 62, 57, 3, 253,
+ 133, 230, 161, 62, 57, 3, 253, 125, 230, 102, 62, 57, 3, 253, 146, 197,
+ 62, 57, 3, 253, 124, 229, 107, 62, 57, 3, 253, 118, 228, 233, 62, 57, 3,
+ 253, 97, 228, 74, 62, 57, 3, 253, 94, 227, 237, 62, 57, 3, 253, 153, 190,
+ 62, 57, 3, 253, 77, 225, 221, 62, 57, 3, 253, 110, 225, 108, 62, 57, 3,
+ 253, 137, 225, 16, 62, 57, 3, 253, 99, 224, 150, 62, 57, 3, 253, 132,
+ 224, 88, 62, 57, 3, 253, 71, 224, 69, 62, 57, 3, 253, 127, 224, 53, 62,
+ 57, 3, 253, 116, 224, 42, 62, 57, 3, 253, 89, 205, 62, 57, 3, 253, 121,
+ 223, 128, 62, 57, 3, 253, 96, 223, 35, 62, 57, 3, 253, 155, 222, 211, 62,
+ 57, 3, 253, 122, 222, 140, 62, 57, 3, 253, 117, 206, 62, 57, 3, 253, 140,
+ 221, 181, 62, 57, 3, 253, 108, 219, 191, 62, 57, 3, 253, 136, 219, 58,
+ 62, 57, 3, 253, 91, 218, 83, 62, 57, 3, 253, 90, 217, 105, 62, 57, 3,
+ 253, 151, 217, 22, 62, 57, 3, 253, 112, 216, 117, 62, 57, 3, 253, 149,
+ 111, 62, 57, 3, 253, 80, 215, 118, 62, 57, 3, 253, 95, 212, 65, 62, 57,
+ 3, 253, 74, 212, 22, 62, 57, 3, 253, 109, 211, 250, 62, 57, 3, 253, 107,
+ 211, 227, 62, 57, 3, 253, 131, 210, 116, 62, 57, 3, 253, 75, 210, 94, 62,
+ 57, 3, 253, 128, 210, 23, 62, 57, 3, 253, 123, 255, 75, 62, 57, 3, 253,
+ 106, 255, 74, 62, 57, 3, 253, 65, 253, 192, 62, 57, 3, 253, 78, 246, 46,
+ 62, 57, 3, 253, 61, 246, 45, 62, 57, 3, 253, 101, 227, 174, 62, 57, 3,
+ 253, 119, 224, 148, 62, 57, 3, 253, 87, 224, 152, 62, 57, 3, 253, 73,
+ 223, 186, 62, 57, 3, 253, 115, 223, 185, 62, 57, 3, 253, 81, 222, 210,
+ 62, 57, 3, 253, 83, 217, 102, 62, 57, 3, 253, 63, 215, 78, 62, 57, 3,
+ 253, 60, 105, 62, 57, 16, 253, 130, 62, 57, 16, 253, 129, 62, 57, 16,
+ 253, 126, 62, 57, 16, 253, 114, 62, 57, 16, 253, 102, 62, 57, 16, 253,
+ 100, 62, 57, 16, 253, 93, 62, 57, 16, 253, 86, 62, 57, 16, 253, 85, 62,
+ 57, 16, 253, 70, 62, 57, 16, 253, 67, 62, 57, 16, 253, 66, 62, 57, 16,
+ 253, 64, 62, 57, 16, 253, 62, 62, 57, 106, 253, 59, 231, 185, 62, 57,
+ 106, 253, 58, 211, 221, 62, 57, 106, 253, 57, 248, 74, 62, 57, 106, 253,
+ 56, 245, 95, 62, 57, 106, 253, 55, 231, 159, 62, 57, 106, 253, 54, 218,
+ 162, 62, 57, 106, 253, 53, 245, 37, 62, 57, 106, 253, 52, 223, 153, 62,
+ 57, 106, 253, 51, 220, 62, 62, 57, 106, 253, 50, 241, 237, 62, 57, 106,
+ 253, 49, 219, 25, 62, 57, 106, 253, 48, 251, 203, 62, 57, 106, 253, 47,
+ 249, 145, 62, 57, 106, 253, 46, 251, 115, 62, 57, 106, 253, 45, 212, 2,
+ 62, 57, 106, 253, 44, 252, 136, 62, 57, 106, 253, 43, 226, 205, 62, 57,
+ 106, 253, 42, 218, 254, 62, 57, 106, 253, 41, 249, 68, 62, 57, 230, 142,
+ 253, 40, 234, 224, 62, 57, 230, 142, 253, 39, 234, 232, 62, 57, 106, 253,
+ 38, 226, 218, 62, 57, 106, 253, 37, 211, 236, 62, 57, 106, 253, 36, 62,
+ 57, 230, 142, 253, 35, 254, 17, 62, 57, 230, 142, 253, 34, 231, 52, 62,
+ 57, 106, 253, 33, 251, 134, 62, 57, 106, 253, 32, 242, 166, 62, 57, 106,
+ 253, 31, 62, 57, 106, 253, 30, 211, 212, 62, 57, 106, 253, 29, 62, 57,
+ 106, 253, 28, 62, 57, 106, 253, 27, 240, 248, 62, 57, 106, 253, 26, 62,
+ 57, 106, 253, 25, 62, 57, 106, 253, 24, 62, 57, 230, 142, 253, 22, 215,
+ 92, 62, 57, 106, 253, 21, 62, 57, 106, 253, 20, 62, 57, 106, 253, 19,
+ 249, 250, 62, 57, 106, 253, 18, 62, 57, 106, 253, 17, 62, 57, 106, 253,
+ 16, 243, 93, 62, 57, 106, 253, 15, 254, 4, 62, 57, 106, 253, 14, 62, 57,
+ 106, 253, 13, 62, 57, 106, 253, 12, 62, 57, 106, 253, 11, 62, 57, 106,
+ 253, 10, 62, 57, 106, 253, 9, 62, 57, 106, 253, 8, 62, 57, 106, 253, 7,
+ 62, 57, 106, 253, 6, 62, 57, 106, 253, 5, 230, 134, 62, 57, 106, 253, 4,
+ 62, 57, 106, 253, 3, 215, 235, 62, 57, 106, 253, 2, 62, 57, 106, 253, 1,
+ 62, 57, 106, 253, 0, 62, 57, 106, 252, 255, 62, 57, 106, 252, 254, 62,
+ 57, 106, 252, 253, 62, 57, 106, 252, 252, 62, 57, 106, 252, 251, 62, 57,
+ 106, 252, 250, 62, 57, 106, 252, 249, 62, 57, 106, 252, 248, 62, 57, 106,
+ 252, 247, 241, 211, 62, 57, 106, 252, 226, 244, 28, 62, 57, 106, 252,
+ 223, 252, 116, 62, 57, 106, 252, 218, 219, 5, 62, 57, 106, 252, 217, 74,
+ 62, 57, 106, 252, 216, 62, 57, 106, 252, 215, 217, 236, 62, 57, 106, 252,
+ 214, 62, 57, 106, 252, 213, 62, 57, 106, 252, 212, 211, 254, 250, 139,
+ 62, 57, 106, 252, 211, 250, 139, 62, 57, 106, 252, 210, 250, 140, 243,
+ 255, 62, 57, 106, 252, 209, 212, 0, 62, 57, 106, 252, 208, 62, 57, 106,
+ 252, 207, 62, 57, 230, 142, 252, 206, 247, 198, 62, 57, 106, 252, 205,
+ 62, 57, 106, 252, 204, 62, 57, 106, 252, 202, 62, 57, 106, 252, 201, 62,
+ 57, 106, 252, 200, 62, 57, 106, 252, 199, 248, 159, 62, 57, 106, 252,
+ 198, 62, 57, 106, 252, 197, 62, 57, 106, 252, 196, 62, 57, 106, 252, 195,
+ 62, 57, 106, 252, 194, 62, 57, 106, 213, 186, 253, 23, 62, 57, 106, 213,
+ 186, 252, 246, 62, 57, 106, 213, 186, 252, 245, 62, 57, 106, 213, 186,
+ 252, 244, 62, 57, 106, 213, 186, 252, 243, 62, 57, 106, 213, 186, 252,
+ 242, 62, 57, 106, 213, 186, 252, 241, 62, 57, 106, 213, 186, 252, 240,
+ 62, 57, 106, 213, 186, 252, 239, 62, 57, 106, 213, 186, 252, 238, 62, 57,
+ 106, 213, 186, 252, 237, 62, 57, 106, 213, 186, 252, 236, 62, 57, 106,
+ 213, 186, 252, 235, 62, 57, 106, 213, 186, 252, 234, 62, 57, 106, 213,
+ 186, 252, 233, 62, 57, 106, 213, 186, 252, 232, 62, 57, 106, 213, 186,
+ 252, 231, 62, 57, 106, 213, 186, 252, 230, 62, 57, 106, 213, 186, 252,
+ 229, 62, 57, 106, 213, 186, 252, 228, 62, 57, 106, 213, 186, 252, 227,
+ 62, 57, 106, 213, 186, 252, 225, 62, 57, 106, 213, 186, 252, 224, 62, 57,
+ 106, 213, 186, 252, 222, 62, 57, 106, 213, 186, 252, 221, 62, 57, 106,
+ 213, 186, 252, 220, 62, 57, 106, 213, 186, 252, 219, 62, 57, 106, 213,
+ 186, 252, 203, 62, 57, 106, 213, 186, 252, 193, 254, 236, 211, 209, 220,
+ 138, 232, 213, 254, 236, 211, 209, 220, 138, 247, 120, 254, 236, 250,
+ 130, 78, 254, 236, 54, 110, 254, 236, 54, 105, 254, 236, 54, 158, 254,
+ 236, 54, 161, 254, 236, 54, 189, 254, 236, 54, 194, 254, 236, 54, 198,
+ 254, 236, 54, 195, 254, 236, 54, 200, 254, 236, 54, 216, 247, 254, 236,
+ 54, 215, 73, 254, 236, 54, 216, 162, 254, 236, 54, 244, 15, 254, 236, 54,
+ 244, 114, 254, 236, 54, 219, 111, 254, 236, 54, 220, 116, 254, 236, 54,
+ 245, 184, 254, 236, 54, 228, 195, 254, 236, 54, 123, 240, 210, 254, 236,
+ 54, 113, 240, 210, 254, 236, 54, 134, 240, 210, 254, 236, 54, 244, 11,
+ 240, 210, 254, 236, 54, 244, 81, 240, 210, 254, 236, 54, 219, 125, 240,
+ 210, 254, 236, 54, 220, 122, 240, 210, 254, 236, 54, 245, 193, 240, 210,
+ 254, 236, 54, 228, 200, 240, 210, 254, 236, 54, 123, 216, 147, 254, 236,
+ 54, 113, 216, 147, 254, 236, 54, 134, 216, 147, 254, 236, 54, 244, 11,
+ 216, 147, 254, 236, 54, 244, 81, 216, 147, 254, 236, 54, 219, 125, 216,
+ 147, 254, 236, 54, 220, 122, 216, 147, 254, 236, 54, 245, 193, 216, 147,
+ 254, 236, 54, 228, 200, 216, 147, 254, 236, 54, 216, 248, 216, 147, 254,
+ 236, 54, 215, 74, 216, 147, 254, 236, 54, 216, 163, 216, 147, 254, 236,
+ 54, 244, 16, 216, 147, 254, 236, 54, 244, 115, 216, 147, 254, 236, 54,
+ 219, 112, 216, 147, 254, 236, 54, 220, 117, 216, 147, 254, 236, 54, 245,
+ 185, 216, 147, 254, 236, 54, 228, 196, 216, 147, 254, 236, 212, 14, 252,
+ 128, 214, 173, 254, 236, 212, 14, 244, 92, 218, 59, 254, 236, 212, 14,
+ 221, 176, 218, 59, 254, 236, 212, 14, 216, 169, 218, 59, 254, 236, 212,
+ 14, 244, 4, 218, 59, 254, 236, 246, 81, 231, 90, 244, 92, 218, 59, 254,
+ 236, 232, 199, 231, 90, 244, 92, 218, 59, 254, 236, 231, 90, 221, 176,
+ 218, 59, 254, 236, 231, 90, 216, 169, 218, 59, 26, 255, 6, 253, 194, 123,
+ 224, 21, 26, 255, 6, 253, 194, 123, 242, 27, 26, 255, 6, 253, 194, 123,
+ 246, 100, 26, 255, 6, 253, 194, 189, 26, 255, 6, 253, 194, 244, 114, 26,
+ 255, 6, 253, 194, 244, 81, 240, 210, 26, 255, 6, 253, 194, 244, 81, 216,
+ 147, 26, 255, 6, 253, 194, 244, 115, 216, 147, 26, 255, 6, 253, 194, 244,
+ 81, 217, 67, 26, 255, 6, 253, 194, 216, 248, 217, 67, 26, 255, 6, 253,
+ 194, 244, 115, 217, 67, 26, 255, 6, 253, 194, 123, 240, 211, 217, 67, 26,
+ 255, 6, 253, 194, 244, 81, 240, 211, 217, 67, 26, 255, 6, 253, 194, 123,
+ 216, 148, 217, 67, 26, 255, 6, 253, 194, 244, 81, 216, 148, 217, 67, 26,
+ 255, 6, 253, 194, 244, 81, 218, 150, 26, 255, 6, 253, 194, 216, 248, 218,
+ 150, 26, 255, 6, 253, 194, 244, 115, 218, 150, 26, 255, 6, 253, 194, 123,
+ 240, 211, 218, 150, 26, 255, 6, 253, 194, 244, 81, 240, 211, 218, 150,
+ 26, 255, 6, 253, 194, 123, 216, 148, 218, 150, 26, 255, 6, 253, 194, 216,
+ 248, 216, 148, 218, 150, 26, 255, 6, 253, 194, 244, 115, 216, 148, 218,
+ 150, 26, 255, 6, 253, 194, 216, 248, 230, 164, 26, 255, 6, 241, 205, 123,
+ 225, 31, 26, 255, 6, 216, 181, 110, 26, 255, 6, 241, 201, 110, 26, 255,
+ 6, 245, 104, 105, 26, 255, 6, 216, 181, 105, 26, 255, 6, 249, 65, 113,
+ 246, 99, 26, 255, 6, 245, 104, 113, 246, 99, 26, 255, 6, 215, 203, 189,
+ 26, 255, 6, 215, 203, 216, 247, 26, 255, 6, 215, 203, 216, 248, 254, 141,
+ 17, 26, 255, 6, 241, 201, 216, 247, 26, 255, 6, 231, 41, 216, 247, 26,
+ 255, 6, 216, 181, 216, 247, 26, 255, 6, 216, 181, 216, 162, 26, 255, 6,
+ 215, 203, 244, 114, 26, 255, 6, 215, 203, 244, 115, 254, 141, 17, 26,
+ 255, 6, 241, 201, 244, 114, 26, 255, 6, 216, 181, 244, 114, 26, 255, 6,
+ 216, 181, 123, 240, 210, 26, 255, 6, 216, 181, 134, 240, 210, 26, 255, 6,
+ 245, 104, 244, 81, 240, 210, 26, 255, 6, 215, 203, 244, 81, 240, 210, 26,
+ 255, 6, 216, 181, 244, 81, 240, 210, 26, 255, 6, 250, 227, 244, 81, 240,
+ 210, 26, 255, 6, 229, 182, 244, 81, 240, 210, 26, 255, 6, 216, 181, 123,
+ 216, 147, 26, 255, 6, 216, 181, 244, 81, 216, 147, 26, 255, 6, 248, 57,
+ 244, 81, 230, 164, 26, 255, 6, 218, 118, 244, 115, 230, 164, 26, 123,
+ 163, 50, 26, 123, 163, 5, 254, 141, 17, 26, 113, 216, 167, 50, 26, 134,
+ 224, 20, 50, 26, 211, 45, 50, 26, 217, 68, 50, 26, 246, 101, 50, 26, 226,
+ 246, 50, 26, 113, 226, 245, 50, 26, 134, 226, 245, 50, 26, 244, 11, 226,
+ 245, 50, 26, 244, 81, 226, 245, 50, 26, 231, 35, 50, 26, 233, 157, 252,
+ 128, 50, 26, 232, 194, 50, 26, 226, 131, 50, 26, 211, 159, 50, 26, 253,
+ 243, 50, 26, 254, 0, 50, 26, 242, 144, 50, 26, 215, 186, 252, 128, 50,
+ 26, 210, 87, 50, 222, 198, 220, 113, 50, 222, 198, 214, 185, 50, 222,
+ 198, 220, 142, 50, 222, 198, 220, 111, 50, 222, 198, 247, 213, 220, 111,
+ 50, 222, 198, 219, 168, 50, 222, 198, 248, 53, 50, 222, 198, 224, 6, 50,
+ 222, 198, 220, 129, 50, 222, 198, 246, 60, 50, 222, 198, 253, 238, 50,
+ 222, 198, 250, 171, 50, 225, 143, 247, 191, 5, 225, 213, 225, 143, 247,
+ 191, 5, 225, 24, 241, 235, 225, 143, 247, 191, 5, 217, 45, 241, 235, 225,
+ 143, 247, 191, 5, 250, 247, 225, 143, 247, 191, 5, 250, 101, 225, 143,
+ 247, 191, 5, 211, 221, 225, 143, 247, 191, 5, 241, 211, 225, 143, 247,
+ 191, 5, 243, 85, 225, 143, 247, 191, 5, 216, 116, 225, 143, 247, 191, 5,
+ 74, 225, 143, 247, 191, 5, 251, 169, 225, 143, 247, 191, 5, 220, 29, 225,
+ 143, 247, 191, 5, 249, 244, 225, 143, 247, 191, 5, 231, 184, 225, 143,
+ 247, 191, 5, 231, 136, 225, 143, 247, 191, 5, 221, 216, 225, 143, 247,
+ 191, 5, 232, 237, 225, 143, 247, 191, 5, 251, 188, 225, 143, 247, 191, 5,
+ 250, 231, 225, 35, 225, 143, 247, 191, 5, 247, 133, 225, 143, 247, 191,
+ 5, 249, 223, 225, 143, 247, 191, 5, 219, 87, 225, 143, 247, 191, 5, 249,
+ 224, 225, 143, 247, 191, 5, 252, 63, 225, 143, 247, 191, 5, 220, 16, 225,
+ 143, 247, 191, 5, 240, 248, 225, 143, 247, 191, 5, 241, 178, 225, 143,
+ 247, 191, 5, 251, 112, 233, 36, 225, 143, 247, 191, 5, 250, 224, 225,
+ 143, 247, 191, 5, 223, 153, 225, 143, 247, 191, 5, 245, 230, 225, 143,
+ 247, 191, 5, 246, 107, 225, 143, 247, 191, 5, 215, 105, 225, 143, 247,
+ 191, 5, 252, 66, 225, 143, 247, 191, 5, 225, 36, 215, 235, 225, 143, 247,
+ 191, 5, 213, 159, 225, 143, 247, 191, 5, 226, 18, 225, 143, 247, 191, 5,
+ 222, 190, 225, 143, 247, 191, 5, 232, 224, 225, 143, 247, 191, 5, 226,
+ 115, 252, 184, 225, 143, 247, 191, 5, 244, 48, 225, 143, 247, 191, 5,
+ 242, 138, 225, 143, 247, 191, 5, 218, 119, 225, 143, 247, 191, 5, 4, 253,
+ 168, 225, 143, 247, 191, 5, 212, 32, 252, 148, 225, 143, 247, 191, 5, 38,
+ 226, 248, 91, 232, 60, 1, 61, 232, 60, 1, 75, 232, 60, 1, 253, 158, 232,
+ 60, 1, 252, 19, 232, 60, 1, 243, 202, 232, 60, 1, 249, 60, 232, 60, 1,
+ 73, 232, 60, 1, 212, 98, 232, 60, 1, 210, 159, 232, 60, 1, 216, 210, 232,
+ 60, 1, 235, 144, 232, 60, 1, 235, 23, 232, 60, 1, 224, 96, 232, 60, 1,
+ 156, 232, 60, 1, 193, 232, 60, 1, 230, 25, 232, 60, 1, 230, 166, 232, 60,
+ 1, 228, 111, 232, 60, 1, 70, 232, 60, 1, 226, 105, 232, 60, 1, 234, 47,
+ 232, 60, 1, 153, 232, 60, 1, 222, 91, 232, 60, 1, 217, 152, 232, 60, 1,
+ 215, 159, 232, 60, 1, 254, 123, 232, 60, 1, 245, 150, 232, 60, 1, 242,
+ 60, 232, 60, 1, 211, 178, 250, 237, 1, 61, 250, 237, 1, 226, 91, 250,
+ 237, 1, 249, 60, 250, 237, 1, 156, 250, 237, 1, 214, 116, 250, 237, 1,
+ 153, 250, 237, 1, 233, 62, 250, 237, 1, 255, 75, 250, 237, 1, 224, 96,
+ 250, 237, 1, 253, 158, 250, 237, 1, 193, 250, 237, 1, 76, 250, 237, 1,
+ 248, 223, 250, 237, 1, 217, 152, 250, 237, 1, 220, 104, 250, 237, 1, 220,
+ 103, 250, 237, 1, 222, 91, 250, 237, 1, 251, 65, 250, 237, 1, 70, 250,
+ 237, 1, 228, 111, 250, 237, 1, 211, 178, 250, 237, 1, 230, 25, 250, 237,
+ 1, 215, 158, 250, 237, 1, 226, 105, 250, 237, 1, 218, 226, 250, 237, 1,
+ 73, 250, 237, 1, 75, 250, 237, 1, 214, 113, 250, 237, 1, 235, 23, 250,
+ 237, 1, 235, 14, 250, 237, 1, 229, 150, 250, 237, 1, 214, 118, 250, 237,
+ 1, 243, 202, 250, 237, 1, 243, 137, 250, 237, 1, 218, 168, 250, 237, 1,
+ 218, 167, 250, 237, 1, 229, 79, 250, 237, 1, 236, 33, 250, 237, 1, 251,
+ 64, 250, 237, 1, 215, 159, 250, 237, 1, 214, 115, 250, 237, 1, 222, 180,
+ 250, 237, 1, 231, 129, 250, 237, 1, 231, 128, 250, 237, 1, 231, 127, 250,
+ 237, 1, 231, 126, 250, 237, 1, 233, 61, 250, 237, 1, 245, 234, 250, 237,
+ 1, 214, 114, 55, 32, 1, 61, 55, 32, 1, 252, 75, 55, 32, 1, 234, 182, 55,
+ 32, 1, 248, 90, 55, 32, 1, 75, 55, 32, 1, 213, 255, 55, 32, 1, 210, 94,
+ 55, 32, 1, 241, 238, 55, 32, 1, 216, 195, 55, 32, 1, 73, 55, 32, 1, 176,
+ 55, 32, 1, 245, 174, 55, 32, 1, 245, 159, 55, 32, 1, 245, 150, 55, 32, 1,
+ 245, 75, 55, 32, 1, 76, 55, 32, 1, 225, 221, 55, 32, 1, 220, 63, 55, 32,
+ 1, 233, 217, 55, 32, 1, 245, 92, 55, 32, 1, 245, 82, 55, 32, 1, 217, 22,
+ 55, 32, 1, 70, 55, 32, 1, 245, 177, 55, 32, 1, 225, 136, 55, 32, 1, 234,
+ 119, 55, 32, 1, 245, 202, 55, 32, 1, 245, 84, 55, 32, 1, 250, 131, 55,
+ 32, 1, 236, 33, 55, 32, 1, 214, 118, 55, 32, 227, 198, 110, 55, 32, 227,
+ 198, 189, 55, 32, 227, 198, 216, 247, 55, 32, 227, 198, 244, 114, 242,
+ 153, 1, 254, 204, 242, 153, 1, 252, 163, 242, 153, 1, 242, 211, 242, 153,
+ 1, 248, 204, 242, 153, 1, 254, 200, 242, 153, 1, 224, 79, 242, 153, 1,
+ 235, 155, 242, 153, 1, 242, 39, 242, 153, 1, 216, 158, 242, 153, 1, 245,
+ 183, 242, 153, 1, 233, 190, 242, 153, 1, 233, 113, 242, 153, 1, 231, 179,
+ 242, 153, 1, 229, 184, 242, 153, 1, 235, 119, 242, 153, 1, 214, 136, 242,
+ 153, 1, 226, 69, 242, 153, 1, 228, 195, 242, 153, 1, 223, 165, 242, 153,
+ 1, 221, 218, 242, 153, 1, 217, 4, 242, 153, 1, 211, 234, 242, 153, 1,
+ 244, 178, 242, 153, 1, 236, 37, 242, 153, 1, 240, 199, 242, 153, 1, 226,
+ 139, 242, 153, 1, 228, 200, 240, 210, 214, 209, 1, 254, 147, 214, 209, 1,
+ 252, 26, 214, 209, 1, 243, 108, 214, 209, 1, 234, 132, 214, 209, 1, 248,
+ 54, 214, 209, 1, 241, 68, 214, 209, 1, 211, 227, 214, 209, 1, 210, 85,
+ 214, 209, 1, 240, 241, 214, 209, 1, 216, 230, 214, 209, 1, 210, 233, 214,
+ 209, 1, 234, 250, 214, 209, 1, 220, 20, 214, 209, 1, 233, 98, 214, 209,
+ 1, 231, 65, 214, 209, 1, 248, 21, 214, 209, 1, 227, 194, 214, 209, 1,
+ 210, 13, 214, 209, 1, 221, 248, 214, 209, 1, 254, 196, 214, 209, 1, 224,
+ 150, 214, 209, 1, 222, 25, 214, 209, 1, 224, 35, 214, 209, 1, 223, 144,
+ 214, 209, 1, 216, 199, 214, 209, 1, 242, 244, 214, 209, 1, 111, 214, 209,
+ 1, 73, 214, 209, 1, 70, 214, 209, 1, 218, 179, 214, 209, 211, 209, 247,
+ 172, 55, 225, 169, 5, 61, 55, 225, 169, 5, 73, 55, 225, 169, 5, 70, 55,
+ 225, 169, 5, 176, 55, 225, 169, 5, 233, 217, 55, 225, 169, 5, 243, 135,
+ 55, 225, 169, 5, 242, 113, 55, 225, 169, 5, 211, 165, 55, 225, 169, 5,
+ 251, 33, 55, 225, 169, 5, 235, 141, 55, 225, 169, 5, 235, 108, 55, 225,
+ 169, 5, 217, 105, 55, 225, 169, 5, 215, 118, 55, 225, 169, 5, 248, 221,
+ 55, 225, 169, 5, 248, 3, 55, 225, 169, 5, 246, 78, 55, 225, 169, 5, 216,
+ 208, 55, 225, 169, 5, 190, 55, 225, 169, 5, 252, 191, 55, 225, 169, 5,
+ 244, 196, 55, 225, 169, 5, 197, 55, 225, 169, 5, 227, 237, 55, 225, 169,
+ 5, 184, 55, 225, 169, 5, 230, 230, 55, 225, 169, 5, 230, 102, 55, 225,
+ 169, 5, 191, 55, 225, 169, 5, 214, 27, 55, 225, 169, 5, 213, 176, 55,
+ 225, 169, 5, 205, 55, 225, 169, 5, 222, 140, 55, 225, 169, 5, 233, 135,
+ 55, 225, 169, 5, 206, 55, 225, 169, 5, 210, 116, 55, 225, 169, 5, 220,
+ 102, 55, 225, 169, 5, 218, 223, 55, 225, 169, 5, 162, 55, 225, 169, 5,
+ 253, 186, 55, 225, 169, 5, 253, 185, 55, 225, 169, 5, 253, 184, 55, 225,
+ 169, 5, 211, 142, 55, 225, 169, 5, 248, 200, 55, 225, 169, 5, 248, 199,
+ 55, 225, 169, 5, 252, 170, 55, 225, 169, 5, 251, 85, 55, 225, 169, 211,
+ 209, 247, 172, 55, 225, 169, 54, 110, 55, 225, 169, 54, 105, 55, 225,
+ 169, 54, 216, 247, 55, 225, 169, 54, 215, 73, 55, 225, 169, 54, 240, 210,
+ 181, 6, 1, 199, 73, 181, 6, 1, 199, 75, 181, 6, 1, 199, 61, 181, 6, 1,
+ 199, 254, 209, 181, 6, 1, 199, 76, 181, 6, 1, 199, 226, 183, 181, 6, 1,
+ 219, 251, 73, 181, 6, 1, 219, 251, 75, 181, 6, 1, 219, 251, 61, 181, 6,
+ 1, 219, 251, 254, 209, 181, 6, 1, 219, 251, 76, 181, 6, 1, 219, 251, 226,
+ 183, 181, 6, 1, 253, 167, 181, 6, 1, 226, 116, 181, 6, 1, 211, 195, 181,
+ 6, 1, 211, 44, 181, 6, 1, 242, 60, 181, 6, 1, 225, 211, 181, 6, 1, 252,
+ 66, 181, 6, 1, 217, 11, 181, 6, 1, 248, 77, 181, 6, 1, 250, 128, 181, 6,
+ 1, 235, 124, 181, 6, 1, 234, 189, 181, 6, 1, 243, 83, 181, 6, 1, 245,
+ 202, 181, 6, 1, 213, 250, 181, 6, 1, 245, 59, 181, 6, 1, 216, 194, 181,
+ 6, 1, 245, 82, 181, 6, 1, 210, 92, 181, 6, 1, 245, 75, 181, 6, 1, 210,
+ 73, 181, 6, 1, 245, 92, 181, 6, 1, 245, 174, 181, 6, 1, 245, 159, 181, 6,
+ 1, 245, 150, 181, 6, 1, 245, 138, 181, 6, 1, 226, 219, 181, 6, 1, 245,
+ 38, 181, 4, 1, 199, 73, 181, 4, 1, 199, 75, 181, 4, 1, 199, 61, 181, 4,
+ 1, 199, 254, 209, 181, 4, 1, 199, 76, 181, 4, 1, 199, 226, 183, 181, 4,
+ 1, 219, 251, 73, 181, 4, 1, 219, 251, 75, 181, 4, 1, 219, 251, 61, 181,
+ 4, 1, 219, 251, 254, 209, 181, 4, 1, 219, 251, 76, 181, 4, 1, 219, 251,
+ 226, 183, 181, 4, 1, 253, 167, 181, 4, 1, 226, 116, 181, 4, 1, 211, 195,
+ 181, 4, 1, 211, 44, 181, 4, 1, 242, 60, 181, 4, 1, 225, 211, 181, 4, 1,
+ 252, 66, 181, 4, 1, 217, 11, 181, 4, 1, 248, 77, 181, 4, 1, 250, 128,
+ 181, 4, 1, 235, 124, 181, 4, 1, 234, 189, 181, 4, 1, 243, 83, 181, 4, 1,
+ 245, 202, 181, 4, 1, 213, 250, 181, 4, 1, 245, 59, 181, 4, 1, 216, 194,
+ 181, 4, 1, 245, 82, 181, 4, 1, 210, 92, 181, 4, 1, 245, 75, 181, 4, 1,
+ 210, 73, 181, 4, 1, 245, 92, 181, 4, 1, 245, 174, 181, 4, 1, 245, 159,
+ 181, 4, 1, 245, 150, 181, 4, 1, 245, 138, 181, 4, 1, 226, 219, 181, 4, 1,
+ 245, 38, 220, 69, 1, 225, 209, 220, 69, 1, 216, 5, 220, 69, 1, 234, 91,
+ 220, 69, 1, 244, 147, 220, 69, 1, 216, 172, 220, 69, 1, 219, 58, 220, 69,
+ 1, 218, 14, 220, 69, 1, 250, 61, 220, 69, 1, 211, 46, 220, 69, 1, 240,
+ 209, 220, 69, 1, 252, 5, 220, 69, 1, 248, 89, 220, 69, 1, 243, 121, 220,
+ 69, 1, 213, 123, 220, 69, 1, 216, 176, 220, 69, 1, 210, 21, 220, 69, 1,
+ 231, 89, 220, 69, 1, 235, 49, 220, 69, 1, 211, 225, 220, 69, 1, 242, 48,
+ 220, 69, 1, 232, 142, 220, 69, 1, 230, 189, 220, 69, 1, 236, 40, 220, 69,
+ 1, 245, 201, 220, 69, 1, 253, 231, 220, 69, 1, 254, 247, 220, 69, 1, 226,
+ 196, 220, 69, 1, 211, 212, 220, 69, 1, 226, 130, 220, 69, 1, 254, 209,
+ 220, 69, 1, 222, 208, 220, 69, 1, 227, 194, 220, 69, 1, 245, 217, 220,
+ 69, 1, 254, 214, 220, 69, 1, 240, 111, 220, 69, 1, 214, 163, 220, 69, 1,
+ 226, 254, 220, 69, 1, 226, 176, 220, 69, 1, 226, 218, 220, 69, 1, 253,
+ 170, 220, 69, 1, 254, 19, 220, 69, 1, 226, 158, 220, 69, 1, 254, 192,
+ 220, 69, 1, 245, 86, 220, 69, 1, 253, 253, 220, 69, 1, 245, 227, 220, 69,
+ 1, 240, 118, 220, 69, 1, 211, 13, 226, 141, 1, 254, 170, 226, 141, 1,
+ 252, 191, 226, 141, 1, 217, 105, 226, 141, 1, 235, 141, 226, 141, 1, 211,
+ 165, 226, 141, 1, 234, 132, 226, 141, 1, 248, 76, 226, 141, 1, 205, 226,
+ 141, 1, 206, 226, 141, 1, 220, 26, 226, 141, 1, 248, 25, 226, 141, 1,
+ 250, 215, 226, 141, 1, 243, 135, 226, 141, 1, 244, 196, 226, 141, 1, 224,
+ 86, 226, 141, 1, 235, 9, 226, 141, 1, 233, 130, 226, 141, 1, 230, 200,
+ 226, 141, 1, 227, 178, 226, 141, 1, 212, 30, 226, 141, 1, 162, 226, 141,
+ 1, 191, 226, 141, 1, 61, 226, 141, 1, 75, 226, 141, 1, 73, 226, 141, 1,
+ 76, 226, 141, 1, 70, 226, 141, 1, 255, 73, 226, 141, 1, 245, 209, 226,
+ 141, 1, 226, 183, 226, 141, 21, 210, 86, 226, 141, 21, 110, 226, 141, 21,
+ 105, 226, 141, 21, 158, 226, 141, 21, 161, 226, 141, 21, 189, 226, 141,
+ 21, 194, 226, 141, 21, 198, 226, 141, 21, 195, 226, 141, 21, 200, 249,
+ 67, 3, 61, 249, 67, 3, 75, 249, 67, 3, 73, 249, 67, 3, 76, 249, 67, 3,
+ 70, 249, 67, 3, 235, 141, 249, 67, 3, 235, 68, 249, 67, 3, 176, 249, 67,
+ 3, 234, 182, 249, 67, 3, 234, 92, 249, 67, 3, 234, 28, 249, 67, 3, 233,
+ 217, 249, 67, 3, 233, 135, 249, 67, 3, 233, 58, 249, 67, 3, 232, 241,
+ 249, 67, 3, 232, 156, 249, 67, 3, 232, 98, 249, 67, 3, 184, 249, 67, 3,
+ 231, 91, 249, 67, 3, 230, 230, 249, 67, 3, 230, 161, 249, 67, 3, 230,
+ 102, 249, 67, 3, 197, 249, 67, 3, 229, 107, 249, 67, 3, 228, 233, 249,
+ 67, 3, 228, 74, 249, 67, 3, 227, 237, 249, 67, 3, 190, 249, 67, 3, 225,
+ 221, 249, 67, 3, 225, 108, 249, 67, 3, 225, 16, 249, 67, 3, 224, 150,
+ 249, 67, 3, 205, 249, 67, 3, 223, 128, 249, 67, 3, 223, 35, 249, 67, 3,
+ 222, 211, 249, 67, 3, 222, 140, 249, 67, 3, 206, 249, 67, 3, 221, 181,
+ 249, 67, 3, 219, 191, 249, 67, 3, 219, 58, 249, 67, 3, 218, 83, 249, 67,
+ 3, 217, 105, 249, 67, 3, 217, 22, 249, 67, 3, 216, 117, 249, 67, 3, 111,
+ 249, 67, 3, 215, 118, 249, 67, 3, 212, 65, 249, 67, 3, 212, 22, 249, 67,
+ 3, 211, 250, 249, 67, 3, 211, 227, 249, 67, 3, 211, 165, 249, 67, 3, 211,
+ 162, 249, 67, 3, 210, 116, 249, 67, 3, 210, 23, 236, 1, 254, 27, 1, 254,
+ 168, 236, 1, 254, 27, 1, 252, 25, 236, 1, 254, 27, 1, 242, 201, 236, 1,
+ 254, 27, 1, 248, 188, 236, 1, 254, 27, 1, 241, 238, 236, 1, 254, 27, 1,
+ 212, 30, 236, 1, 254, 27, 1, 210, 97, 236, 1, 254, 27, 1, 241, 195, 236,
+ 1, 254, 27, 1, 216, 226, 236, 1, 254, 27, 1, 210, 232, 236, 1, 254, 27,
+ 1, 234, 225, 236, 1, 254, 27, 1, 233, 93, 236, 1, 254, 27, 1, 231, 65,
+ 236, 1, 254, 27, 1, 227, 194, 236, 1, 254, 27, 1, 221, 249, 236, 1, 254,
+ 27, 1, 253, 162, 236, 1, 254, 27, 1, 225, 221, 236, 1, 254, 27, 1, 222,
+ 24, 236, 1, 254, 27, 1, 224, 34, 236, 1, 254, 27, 1, 223, 67, 236, 1,
+ 254, 27, 1, 220, 20, 236, 1, 254, 27, 1, 217, 36, 236, 1, 254, 27, 221,
+ 173, 50, 236, 1, 254, 27, 54, 110, 236, 1, 254, 27, 54, 105, 236, 1, 254,
+ 27, 54, 158, 236, 1, 254, 27, 54, 216, 247, 236, 1, 254, 27, 54, 215, 73,
+ 236, 1, 254, 27, 54, 123, 240, 210, 236, 1, 254, 27, 54, 123, 216, 147,
+ 236, 1, 254, 27, 54, 216, 248, 216, 147, 225, 119, 1, 254, 165, 225, 119,
+ 1, 252, 28, 225, 119, 1, 243, 109, 225, 119, 1, 248, 56, 225, 119, 1,
+ 241, 238, 225, 119, 1, 212, 37, 225, 119, 1, 210, 110, 225, 119, 1, 241,
+ 197, 225, 119, 1, 216, 230, 225, 119, 1, 210, 233, 225, 119, 1, 234, 250,
+ 225, 119, 1, 233, 99, 225, 119, 1, 231, 65, 225, 119, 1, 227, 194, 225,
+ 119, 1, 220, 144, 225, 119, 1, 254, 196, 225, 119, 1, 225, 221, 225, 119,
+ 1, 222, 25, 225, 119, 1, 224, 39, 225, 119, 1, 222, 189, 225, 119, 1,
+ 220, 20, 225, 119, 1, 217, 41, 225, 119, 54, 110, 225, 119, 54, 216, 247,
+ 225, 119, 54, 215, 73, 225, 119, 54, 123, 240, 210, 225, 119, 54, 105,
+ 225, 119, 54, 158, 225, 119, 211, 209, 220, 137, 232, 59, 1, 61, 232, 59,
+ 1, 253, 158, 232, 59, 1, 243, 202, 232, 59, 1, 249, 60, 232, 59, 1, 75,
+ 232, 59, 1, 214, 105, 232, 59, 1, 73, 232, 59, 1, 211, 117, 232, 59, 1,
+ 235, 23, 232, 59, 1, 156, 232, 59, 1, 193, 232, 59, 1, 230, 25, 232, 59,
+ 1, 76, 232, 59, 1, 153, 232, 59, 1, 218, 226, 232, 59, 1, 217, 152, 232,
+ 59, 1, 70, 232, 59, 1, 245, 6, 232, 59, 1, 224, 96, 232, 59, 1, 222, 91,
+ 232, 59, 1, 215, 159, 232, 59, 1, 254, 123, 232, 59, 1, 245, 150, 232,
+ 59, 1, 232, 62, 232, 59, 1, 228, 111, 232, 59, 1, 251, 66, 232, 59, 215,
+ 222, 78, 231, 48, 241, 174, 1, 61, 231, 48, 241, 174, 1, 75, 231, 48,
+ 241, 174, 1, 73, 231, 48, 241, 174, 1, 76, 231, 48, 241, 174, 1, 191,
+ 231, 48, 241, 174, 1, 212, 65, 231, 48, 241, 174, 1, 252, 191, 231, 48,
+ 241, 174, 1, 252, 190, 231, 48, 241, 174, 1, 190, 231, 48, 241, 174, 1,
+ 184, 231, 48, 241, 174, 1, 197, 231, 48, 241, 174, 1, 229, 228, 231, 48,
+ 241, 174, 1, 229, 107, 231, 48, 241, 174, 1, 229, 106, 231, 48, 241, 174,
+ 1, 205, 231, 48, 241, 174, 1, 223, 187, 231, 48, 241, 174, 1, 233, 135,
+ 231, 48, 241, 174, 1, 234, 132, 231, 48, 241, 174, 1, 241, 189, 231, 48,
+ 241, 174, 1, 206, 231, 48, 241, 174, 1, 222, 33, 231, 48, 241, 174, 1,
+ 221, 181, 231, 48, 241, 174, 1, 176, 231, 48, 241, 174, 1, 224, 88, 231,
+ 48, 241, 174, 1, 217, 105, 231, 48, 241, 174, 1, 217, 104, 231, 48, 241,
+ 174, 1, 217, 22, 231, 48, 241, 174, 1, 217, 21, 231, 48, 241, 174, 1,
+ 111, 231, 48, 241, 174, 1, 248, 221, 231, 48, 241, 174, 16, 213, 170,
+ 231, 48, 241, 174, 16, 213, 169, 231, 48, 249, 94, 1, 61, 231, 48, 249,
+ 94, 1, 75, 231, 48, 249, 94, 1, 73, 231, 48, 249, 94, 1, 76, 231, 48,
+ 249, 94, 1, 191, 231, 48, 249, 94, 1, 212, 65, 231, 48, 249, 94, 1, 252,
+ 191, 231, 48, 249, 94, 1, 190, 231, 48, 249, 94, 1, 184, 231, 48, 249,
+ 94, 1, 197, 231, 48, 249, 94, 1, 229, 107, 231, 48, 249, 94, 1, 205, 231,
+ 48, 249, 94, 1, 233, 135, 231, 48, 249, 94, 1, 234, 132, 231, 48, 249,
+ 94, 1, 241, 189, 231, 48, 249, 94, 1, 206, 231, 48, 249, 94, 1, 254, 23,
+ 206, 231, 48, 249, 94, 1, 221, 181, 231, 48, 249, 94, 1, 176, 231, 48,
+ 249, 94, 1, 224, 88, 231, 48, 249, 94, 1, 217, 105, 231, 48, 249, 94, 1,
+ 217, 22, 231, 48, 249, 94, 1, 111, 231, 48, 249, 94, 1, 248, 221, 231,
+ 48, 249, 94, 232, 145, 222, 217, 231, 48, 249, 94, 232, 145, 236, 6, 234,
+ 120, 1, 61, 234, 120, 25, 5, 73, 234, 120, 25, 5, 70, 234, 120, 25, 5,
+ 149, 153, 234, 120, 25, 5, 75, 234, 120, 25, 5, 76, 234, 120, 25, 233,
+ 23, 78, 234, 120, 5, 52, 222, 234, 51, 234, 120, 5, 254, 75, 234, 120, 5,
+ 213, 147, 234, 120, 1, 176, 234, 120, 1, 234, 132, 234, 120, 1, 243, 135,
+ 234, 120, 1, 242, 249, 234, 120, 1, 251, 33, 234, 120, 1, 250, 157, 234,
+ 120, 1, 235, 141, 234, 120, 1, 227, 165, 234, 120, 1, 215, 156, 234, 120,
+ 1, 215, 144, 234, 120, 1, 248, 135, 234, 120, 1, 248, 119, 234, 120, 1,
+ 228, 110, 234, 120, 1, 217, 105, 234, 120, 1, 216, 208, 234, 120, 1, 248,
+ 221, 234, 120, 1, 248, 25, 234, 120, 1, 197, 234, 120, 1, 190, 234, 120,
+ 1, 225, 147, 234, 120, 1, 252, 191, 234, 120, 1, 252, 18, 234, 120, 1,
+ 184, 234, 120, 1, 191, 234, 120, 1, 205, 234, 120, 1, 233, 135, 234, 120,
+ 1, 214, 27, 234, 120, 1, 220, 102, 234, 120, 1, 218, 223, 234, 120, 1,
+ 206, 234, 120, 1, 210, 116, 234, 120, 1, 162, 234, 120, 1, 234, 46, 234,
+ 120, 1, 215, 124, 234, 120, 5, 252, 141, 48, 234, 120, 5, 250, 221, 234,
+ 120, 5, 59, 51, 234, 120, 213, 152, 234, 120, 21, 110, 234, 120, 21, 105,
+ 234, 120, 21, 158, 234, 120, 21, 161, 234, 120, 54, 216, 247, 234, 120,
+ 54, 215, 73, 234, 120, 54, 123, 240, 210, 234, 120, 54, 123, 216, 147,
+ 234, 120, 224, 141, 247, 120, 234, 120, 224, 141, 4, 250, 35, 234, 120,
+ 224, 141, 250, 35, 234, 120, 224, 141, 249, 137, 130, 234, 120, 224, 141,
+ 231, 180, 234, 120, 224, 141, 232, 115, 234, 120, 224, 141, 248, 178,
+ 234, 120, 224, 141, 52, 248, 178, 234, 120, 224, 141, 232, 207, 55, 219,
+ 28, 254, 38, 1, 241, 238, 55, 219, 28, 254, 38, 1, 233, 93, 55, 219, 28,
+ 254, 38, 1, 241, 195, 55, 219, 28, 254, 38, 1, 231, 65, 55, 219, 28, 254,
+ 38, 1, 224, 34, 55, 219, 28, 254, 38, 1, 212, 30, 55, 219, 28, 254, 38,
+ 1, 220, 20, 55, 219, 28, 254, 38, 1, 223, 67, 55, 219, 28, 254, 38, 1,
+ 252, 25, 55, 219, 28, 254, 38, 1, 217, 36, 55, 219, 28, 254, 38, 1, 221,
+ 226, 55, 219, 28, 254, 38, 1, 234, 225, 55, 219, 28, 254, 38, 1, 227,
+ 194, 55, 219, 28, 254, 38, 1, 234, 116, 55, 219, 28, 254, 38, 1, 222, 24,
+ 55, 219, 28, 254, 38, 1, 221, 249, 55, 219, 28, 254, 38, 1, 244, 154, 55,
+ 219, 28, 254, 38, 1, 254, 170, 55, 219, 28, 254, 38, 1, 253, 161, 55,
+ 219, 28, 254, 38, 1, 248, 22, 55, 219, 28, 254, 38, 1, 242, 201, 55, 219,
+ 28, 254, 38, 1, 248, 188, 55, 219, 28, 254, 38, 1, 242, 238, 55, 219, 28,
+ 254, 38, 1, 216, 226, 55, 219, 28, 254, 38, 1, 210, 96, 55, 219, 28, 254,
+ 38, 1, 248, 19, 55, 219, 28, 254, 38, 1, 210, 232, 55, 219, 28, 254, 38,
+ 1, 216, 197, 55, 219, 28, 254, 38, 1, 216, 178, 55, 219, 28, 254, 38, 54,
+ 110, 55, 219, 28, 254, 38, 54, 244, 114, 55, 219, 28, 254, 38, 132, 235,
+ 238, 253, 172, 1, 61, 253, 172, 1, 255, 73, 253, 172, 1, 254, 73, 253,
+ 172, 1, 255, 32, 253, 172, 1, 254, 123, 253, 172, 1, 255, 33, 253, 172,
+ 1, 254, 243, 253, 172, 1, 254, 239, 253, 172, 1, 75, 253, 172, 1, 245,
+ 209, 253, 172, 1, 76, 253, 172, 1, 226, 183, 253, 172, 1, 73, 253, 172,
+ 1, 236, 33, 253, 172, 1, 70, 253, 172, 1, 214, 118, 253, 172, 1, 234,
+ 182, 253, 172, 1, 211, 162, 253, 172, 1, 211, 128, 253, 172, 1, 211, 137,
+ 253, 172, 1, 243, 62, 253, 172, 1, 243, 24, 253, 172, 1, 242, 236, 253,
+ 172, 1, 250, 190, 253, 172, 1, 235, 126, 253, 172, 1, 217, 22, 253, 172,
+ 1, 216, 195, 253, 172, 1, 248, 90, 253, 172, 1, 248, 17, 253, 172, 1,
+ 215, 151, 253, 172, 1, 225, 221, 253, 172, 1, 244, 154, 253, 172, 1, 252,
+ 75, 253, 172, 1, 252, 14, 253, 172, 1, 229, 64, 253, 172, 1, 228, 239,
+ 253, 172, 1, 228, 240, 253, 172, 1, 229, 107, 253, 172, 1, 227, 156, 253,
+ 172, 1, 228, 105, 253, 172, 1, 231, 91, 253, 172, 1, 241, 116, 253, 172,
+ 1, 210, 166, 253, 172, 1, 211, 47, 253, 172, 1, 213, 255, 253, 172, 1,
+ 223, 128, 253, 172, 1, 233, 58, 253, 172, 1, 221, 181, 253, 172, 1, 210,
+ 94, 253, 172, 1, 220, 63, 253, 172, 1, 210, 74, 253, 172, 1, 219, 198,
+ 253, 172, 1, 218, 193, 253, 172, 1, 241, 238, 253, 172, 255, 21, 78, 216,
+ 79, 113, 170, 117, 123, 59, 224, 140, 4, 113, 170, 117, 123, 59, 224,
+ 140, 233, 85, 113, 170, 117, 123, 59, 224, 140, 233, 85, 123, 59, 117,
+ 113, 170, 224, 140, 233, 85, 113, 222, 232, 117, 123, 222, 234, 224, 140,
+ 233, 85, 123, 222, 234, 117, 113, 222, 232, 224, 140, 235, 218, 225, 254,
+ 1, 254, 168, 235, 218, 225, 254, 1, 252, 25, 235, 218, 225, 254, 1, 242,
+ 201, 235, 218, 225, 254, 1, 248, 188, 235, 218, 225, 254, 1, 241, 238,
+ 235, 218, 225, 254, 1, 212, 30, 235, 218, 225, 254, 1, 210, 97, 235, 218,
+ 225, 254, 1, 241, 195, 235, 218, 225, 254, 1, 216, 226, 235, 218, 225,
+ 254, 1, 210, 232, 235, 218, 225, 254, 1, 234, 225, 235, 218, 225, 254, 1,
+ 233, 93, 235, 218, 225, 254, 1, 231, 65, 235, 218, 225, 254, 1, 227, 194,
+ 235, 218, 225, 254, 1, 221, 249, 235, 218, 225, 254, 1, 253, 162, 235,
+ 218, 225, 254, 1, 225, 221, 235, 218, 225, 254, 1, 222, 24, 235, 218,
+ 225, 254, 1, 224, 34, 235, 218, 225, 254, 1, 223, 67, 235, 218, 225, 254,
+ 1, 220, 20, 235, 218, 225, 254, 1, 217, 36, 235, 218, 225, 254, 54, 110,
+ 235, 218, 225, 254, 54, 105, 235, 218, 225, 254, 54, 158, 235, 218, 225,
+ 254, 54, 161, 235, 218, 225, 254, 54, 216, 247, 235, 218, 225, 254, 54,
+ 215, 73, 235, 218, 225, 254, 54, 123, 240, 210, 235, 218, 225, 254, 54,
+ 123, 216, 147, 235, 218, 226, 72, 1, 254, 168, 235, 218, 226, 72, 1, 252,
+ 25, 235, 218, 226, 72, 1, 242, 201, 235, 218, 226, 72, 1, 248, 188, 235,
+ 218, 226, 72, 1, 241, 238, 235, 218, 226, 72, 1, 212, 29, 235, 218, 226,
+ 72, 1, 210, 97, 235, 218, 226, 72, 1, 241, 195, 235, 218, 226, 72, 1,
+ 216, 226, 235, 218, 226, 72, 1, 210, 232, 235, 218, 226, 72, 1, 234, 225,
+ 235, 218, 226, 72, 1, 233, 93, 235, 218, 226, 72, 1, 231, 64, 235, 218,
+ 226, 72, 1, 227, 194, 235, 218, 226, 72, 1, 221, 249, 235, 218, 226, 72,
+ 1, 225, 221, 235, 218, 226, 72, 1, 222, 24, 235, 218, 226, 72, 1, 220,
+ 20, 235, 218, 226, 72, 1, 217, 36, 235, 218, 226, 72, 54, 110, 235, 218,
+ 226, 72, 54, 105, 235, 218, 226, 72, 54, 158, 235, 218, 226, 72, 54, 161,
+ 235, 218, 226, 72, 54, 216, 247, 235, 218, 226, 72, 54, 215, 73, 235,
+ 218, 226, 72, 54, 123, 240, 210, 235, 218, 226, 72, 54, 123, 216, 147,
+ 55, 201, 1, 226, 149, 61, 55, 201, 1, 211, 37, 61, 55, 201, 1, 211, 37,
+ 254, 243, 55, 201, 1, 226, 149, 73, 55, 201, 1, 211, 37, 73, 55, 201, 1,
+ 211, 37, 75, 55, 201, 1, 226, 149, 76, 55, 201, 1, 226, 149, 226, 234,
+ 55, 201, 1, 211, 37, 226, 234, 55, 201, 1, 226, 149, 255, 25, 55, 201, 1,
+ 211, 37, 255, 25, 55, 201, 1, 226, 149, 254, 242, 55, 201, 1, 211, 37,
+ 254, 242, 55, 201, 1, 226, 149, 254, 216, 55, 201, 1, 211, 37, 254, 216,
+ 55, 201, 1, 226, 149, 254, 237, 55, 201, 1, 211, 37, 254, 237, 55, 201,
+ 1, 226, 149, 254, 255, 55, 201, 1, 211, 37, 254, 255, 55, 201, 1, 226,
+ 149, 254, 241, 55, 201, 1, 226, 149, 245, 12, 55, 201, 1, 211, 37, 245,
+ 12, 55, 201, 1, 226, 149, 253, 167, 55, 201, 1, 211, 37, 253, 167, 55,
+ 201, 1, 226, 149, 254, 224, 55, 201, 1, 211, 37, 254, 224, 55, 201, 1,
+ 226, 149, 254, 235, 55, 201, 1, 211, 37, 254, 235, 55, 201, 1, 226, 149,
+ 226, 233, 55, 201, 1, 211, 37, 226, 233, 55, 201, 1, 226, 149, 254, 178,
+ 55, 201, 1, 211, 37, 254, 178, 55, 201, 1, 226, 149, 254, 234, 55, 201,
+ 1, 226, 149, 245, 161, 55, 201, 1, 226, 149, 245, 159, 55, 201, 1, 226,
+ 149, 254, 123, 55, 201, 1, 226, 149, 254, 232, 55, 201, 1, 211, 37, 254,
+ 232, 55, 201, 1, 226, 149, 245, 131, 55, 201, 1, 211, 37, 245, 131, 55,
+ 201, 1, 226, 149, 245, 147, 55, 201, 1, 211, 37, 245, 147, 55, 201, 1,
+ 226, 149, 245, 118, 55, 201, 1, 211, 37, 245, 118, 55, 201, 1, 211, 37,
+ 254, 115, 55, 201, 1, 226, 149, 245, 138, 55, 201, 1, 211, 37, 254, 231,
+ 55, 201, 1, 226, 149, 245, 108, 55, 201, 1, 226, 149, 226, 175, 55, 201,
+ 1, 226, 149, 240, 113, 55, 201, 1, 226, 149, 245, 215, 55, 201, 1, 211,
+ 37, 245, 215, 55, 201, 1, 226, 149, 254, 45, 55, 201, 1, 211, 37, 254,
+ 45, 55, 201, 1, 226, 149, 235, 181, 55, 201, 1, 211, 37, 235, 181, 55,
+ 201, 1, 226, 149, 226, 159, 55, 201, 1, 211, 37, 226, 159, 55, 201, 1,
+ 226, 149, 254, 41, 55, 201, 1, 211, 37, 254, 41, 55, 201, 1, 226, 149,
+ 254, 230, 55, 201, 1, 226, 149, 253, 237, 55, 201, 1, 226, 149, 254, 228,
+ 55, 201, 1, 226, 149, 253, 231, 55, 201, 1, 211, 37, 253, 231, 55, 201,
+ 1, 226, 149, 245, 75, 55, 201, 1, 211, 37, 245, 75, 55, 201, 1, 226, 149,
+ 253, 206, 55, 201, 1, 211, 37, 253, 206, 55, 201, 1, 226, 149, 254, 225,
+ 55, 201, 1, 211, 37, 254, 225, 55, 201, 1, 226, 149, 226, 140, 55, 201,
+ 1, 226, 149, 252, 125, 222, 127, 21, 110, 222, 127, 21, 105, 222, 127,
+ 21, 158, 222, 127, 21, 161, 222, 127, 21, 189, 222, 127, 21, 194, 222,
+ 127, 21, 198, 222, 127, 21, 195, 222, 127, 21, 200, 222, 127, 54, 216,
+ 247, 222, 127, 54, 215, 73, 222, 127, 54, 216, 162, 222, 127, 54, 244,
+ 15, 222, 127, 54, 244, 114, 222, 127, 54, 219, 111, 222, 127, 54, 220,
+ 116, 222, 127, 54, 245, 184, 222, 127, 54, 228, 195, 222, 127, 54, 123,
+ 240, 210, 222, 127, 54, 113, 240, 210, 222, 127, 54, 134, 240, 210, 222,
+ 127, 54, 244, 11, 240, 210, 222, 127, 54, 244, 81, 240, 210, 222, 127,
+ 54, 219, 125, 240, 210, 222, 127, 54, 220, 122, 240, 210, 222, 127, 54,
+ 245, 193, 240, 210, 222, 127, 54, 228, 200, 240, 210, 222, 127, 244, 2,
+ 123, 242, 27, 222, 127, 244, 2, 123, 224, 21, 222, 127, 244, 2, 123, 216,
+ 168, 222, 127, 244, 2, 113, 216, 166, 118, 5, 250, 255, 118, 5, 254, 75,
+ 118, 5, 213, 147, 118, 5, 235, 102, 118, 5, 214, 161, 118, 1, 61, 118, 1,
+ 255, 73, 118, 1, 73, 118, 1, 236, 33, 118, 1, 70, 118, 1, 214, 118, 118,
+ 1, 149, 153, 118, 1, 149, 222, 180, 118, 1, 149, 156, 118, 1, 149, 232,
+ 185, 118, 1, 75, 118, 1, 254, 201, 118, 1, 76, 118, 1, 253, 192, 118, 1,
+ 176, 118, 1, 234, 132, 118, 1, 243, 135, 118, 1, 242, 249, 118, 1, 229,
+ 77, 118, 1, 251, 33, 118, 1, 250, 157, 118, 1, 235, 141, 118, 1, 235,
+ 114, 118, 1, 227, 165, 118, 1, 215, 156, 118, 1, 215, 144, 118, 1, 248,
+ 135, 118, 1, 248, 119, 118, 1, 228, 110, 118, 1, 217, 105, 118, 1, 216,
+ 208, 118, 1, 248, 221, 118, 1, 248, 25, 118, 1, 197, 118, 1, 190, 118, 1,
+ 225, 147, 118, 1, 252, 191, 118, 1, 252, 18, 118, 1, 184, 118, 1, 191,
+ 118, 1, 205, 118, 1, 233, 135, 118, 1, 214, 27, 118, 1, 220, 102, 118, 1,
+ 218, 223, 118, 1, 206, 118, 1, 162, 118, 1, 232, 184, 118, 1, 55, 36,
+ 232, 175, 118, 1, 55, 36, 222, 179, 118, 1, 55, 36, 228, 92, 118, 25, 5,
+ 255, 73, 118, 25, 5, 252, 15, 255, 73, 118, 25, 5, 73, 118, 25, 5, 236,
+ 33, 118, 25, 5, 70, 118, 25, 5, 214, 118, 118, 25, 5, 149, 153, 118, 25,
+ 5, 149, 222, 180, 118, 25, 5, 149, 156, 118, 25, 5, 149, 232, 185, 118,
+ 25, 5, 75, 118, 25, 5, 254, 201, 118, 25, 5, 76, 118, 25, 5, 253, 192,
+ 118, 213, 152, 118, 248, 178, 118, 52, 248, 178, 118, 224, 141, 247, 120,
+ 118, 224, 141, 52, 247, 120, 118, 224, 141, 232, 213, 118, 224, 141, 249,
+ 137, 130, 118, 224, 141, 232, 115, 118, 54, 110, 118, 54, 105, 118, 54,
+ 158, 118, 54, 161, 118, 54, 189, 118, 54, 194, 118, 54, 198, 118, 54,
+ 195, 118, 54, 200, 118, 54, 216, 247, 118, 54, 215, 73, 118, 54, 216,
+ 162, 118, 54, 244, 15, 118, 54, 244, 114, 118, 54, 219, 111, 118, 54,
+ 220, 116, 118, 54, 245, 184, 118, 54, 228, 195, 118, 54, 123, 240, 210,
+ 118, 54, 123, 216, 147, 118, 21, 210, 86, 118, 21, 110, 118, 21, 105,
+ 118, 21, 158, 118, 21, 161, 118, 21, 189, 118, 21, 194, 118, 21, 198,
+ 118, 21, 195, 118, 21, 200, 234, 244, 5, 250, 255, 234, 244, 5, 254, 75,
+ 234, 244, 5, 213, 147, 234, 244, 1, 61, 234, 244, 1, 255, 73, 234, 244,
+ 1, 73, 234, 244, 1, 236, 33, 234, 244, 1, 70, 234, 244, 1, 214, 118, 234,
+ 244, 1, 75, 234, 244, 1, 254, 201, 234, 244, 1, 76, 234, 244, 1, 253,
+ 192, 234, 244, 1, 176, 234, 244, 1, 234, 132, 234, 244, 1, 243, 135, 234,
+ 244, 1, 242, 249, 234, 244, 1, 229, 77, 234, 244, 1, 251, 33, 234, 244,
+ 1, 250, 157, 234, 244, 1, 235, 141, 234, 244, 1, 235, 114, 234, 244, 1,
+ 227, 165, 234, 244, 1, 215, 156, 234, 244, 1, 215, 144, 234, 244, 1, 248,
+ 135, 234, 244, 1, 248, 124, 234, 244, 1, 248, 119, 234, 244, 1, 223, 39,
+ 234, 244, 1, 228, 110, 234, 244, 1, 217, 105, 234, 244, 1, 216, 208, 234,
+ 244, 1, 248, 221, 234, 244, 1, 248, 25, 234, 244, 1, 197, 234, 244, 1,
+ 190, 234, 244, 1, 225, 147, 234, 244, 1, 252, 191, 234, 244, 1, 252, 18,
+ 234, 244, 1, 184, 234, 244, 1, 191, 234, 244, 1, 205, 234, 244, 1, 233,
+ 135, 234, 244, 1, 214, 27, 234, 244, 1, 220, 102, 234, 244, 1, 218, 223,
+ 234, 244, 1, 206, 234, 244, 1, 162, 234, 244, 25, 5, 255, 73, 234, 244,
+ 25, 5, 73, 234, 244, 25, 5, 236, 33, 234, 244, 25, 5, 70, 234, 244, 25,
+ 5, 214, 118, 234, 244, 25, 5, 75, 234, 244, 25, 5, 254, 201, 234, 244,
+ 25, 5, 76, 234, 244, 25, 5, 253, 192, 234, 244, 5, 213, 152, 234, 244, 5,
+ 227, 205, 234, 244, 255, 21, 50, 234, 244, 245, 121, 50, 234, 244, 54,
+ 50, 234, 244, 221, 173, 78, 234, 244, 52, 221, 173, 78, 234, 244, 248,
+ 178, 234, 244, 52, 248, 178, 219, 36, 219, 44, 1, 222, 18, 219, 36, 219,
+ 44, 1, 217, 80, 219, 36, 219, 44, 1, 252, 168, 219, 36, 219, 44, 1, 251,
+ 23, 219, 36, 219, 44, 1, 248, 203, 219, 36, 219, 44, 1, 243, 120, 219,
+ 36, 219, 44, 1, 231, 210, 219, 36, 219, 44, 1, 229, 74, 219, 36, 219, 44,
+ 1, 233, 112, 219, 36, 219, 44, 1, 229, 213, 219, 36, 219, 44, 1, 214, 24,
+ 219, 36, 219, 44, 1, 226, 73, 219, 36, 219, 44, 1, 211, 84, 219, 36, 219,
+ 44, 1, 223, 168, 219, 36, 219, 44, 1, 242, 37, 219, 36, 219, 44, 1, 234,
+ 248, 219, 36, 219, 44, 1, 235, 136, 219, 36, 219, 44, 1, 227, 162, 219,
+ 36, 219, 44, 1, 254, 209, 219, 36, 219, 44, 1, 245, 207, 219, 36, 219,
+ 44, 1, 236, 34, 219, 36, 219, 44, 1, 214, 208, 219, 36, 219, 44, 1, 226,
+ 222, 219, 36, 219, 44, 1, 245, 197, 219, 36, 219, 44, 1, 231, 223, 219,
+ 36, 219, 44, 21, 210, 86, 219, 36, 219, 44, 21, 110, 219, 36, 219, 44,
+ 21, 105, 219, 36, 219, 44, 21, 158, 219, 36, 219, 44, 21, 161, 219, 36,
+ 219, 44, 21, 189, 219, 36, 219, 44, 21, 194, 219, 36, 219, 44, 21, 198,
+ 219, 36, 219, 44, 21, 195, 219, 36, 219, 44, 21, 200, 250, 151, 5, 250,
+ 255, 250, 151, 5, 254, 75, 250, 151, 5, 213, 147, 250, 151, 1, 255, 73,
+ 250, 151, 1, 73, 250, 151, 1, 70, 250, 151, 1, 75, 250, 151, 1, 235, 10,
+ 250, 151, 1, 234, 131, 250, 151, 1, 243, 132, 250, 151, 1, 242, 248, 250,
+ 151, 1, 229, 76, 250, 151, 1, 251, 32, 250, 151, 1, 250, 156, 250, 151,
+ 1, 235, 140, 250, 151, 1, 235, 113, 250, 151, 1, 227, 164, 250, 151, 1,
+ 215, 155, 250, 151, 1, 215, 143, 250, 151, 1, 248, 134, 250, 151, 1, 248,
+ 118, 250, 151, 1, 228, 109, 250, 151, 1, 217, 101, 250, 151, 1, 216, 207,
+ 250, 151, 1, 248, 220, 250, 151, 1, 248, 24, 250, 151, 1, 229, 225, 250,
+ 151, 1, 226, 89, 250, 151, 1, 225, 146, 250, 151, 1, 252, 189, 250, 151,
+ 1, 252, 17, 250, 151, 1, 231, 237, 250, 151, 1, 210, 167, 250, 151, 1,
+ 211, 103, 250, 151, 1, 223, 184, 250, 151, 1, 233, 134, 250, 151, 1, 212,
+ 64, 250, 151, 1, 222, 31, 250, 151, 1, 242, 46, 250, 151, 25, 5, 61, 250,
+ 151, 25, 5, 73, 250, 151, 25, 5, 236, 33, 250, 151, 25, 5, 70, 250, 151,
+ 25, 5, 214, 118, 250, 151, 25, 5, 75, 250, 151, 25, 5, 254, 201, 250,
+ 151, 25, 5, 76, 250, 151, 25, 5, 253, 192, 250, 151, 25, 5, 226, 219,
+ 250, 151, 144, 78, 250, 151, 253, 193, 78, 250, 151, 213, 152, 250, 151,
+ 231, 235, 250, 151, 21, 210, 86, 250, 151, 21, 110, 250, 151, 21, 105,
+ 250, 151, 21, 158, 250, 151, 21, 161, 250, 151, 21, 189, 250, 151, 21,
+ 194, 250, 151, 21, 198, 250, 151, 21, 195, 250, 151, 21, 200, 250, 151,
+ 221, 173, 78, 250, 151, 248, 178, 250, 151, 52, 248, 178, 250, 151, 224,
+ 13, 78, 174, 5, 250, 255, 174, 5, 254, 75, 174, 5, 213, 147, 174, 1, 61,
+ 174, 1, 255, 73, 174, 1, 73, 174, 1, 236, 33, 174, 1, 70, 174, 1, 214,
+ 118, 174, 1, 149, 153, 174, 1, 149, 222, 180, 174, 1, 149, 156, 174, 1,
+ 149, 232, 185, 174, 1, 75, 174, 1, 254, 201, 174, 1, 76, 174, 1, 253,
+ 192, 174, 1, 176, 174, 1, 234, 132, 174, 1, 243, 135, 174, 1, 242, 249,
+ 174, 1, 229, 77, 174, 1, 251, 33, 174, 1, 250, 157, 174, 1, 235, 141,
+ 174, 1, 235, 114, 174, 1, 227, 165, 174, 1, 215, 156, 174, 1, 215, 144,
+ 174, 1, 248, 135, 174, 1, 248, 119, 174, 1, 228, 110, 174, 1, 217, 105,
+ 174, 1, 216, 208, 174, 1, 248, 221, 174, 1, 248, 25, 174, 1, 197, 174, 1,
+ 190, 174, 1, 225, 147, 174, 1, 252, 191, 174, 1, 252, 18, 174, 1, 184,
+ 174, 1, 191, 174, 1, 205, 174, 1, 233, 135, 174, 1, 232, 184, 174, 1,
+ 214, 27, 174, 1, 220, 102, 174, 1, 218, 223, 174, 1, 206, 174, 1, 162,
+ 174, 25, 5, 255, 73, 174, 25, 5, 73, 174, 25, 5, 236, 33, 174, 25, 5, 70,
+ 174, 25, 5, 214, 118, 174, 25, 5, 149, 153, 174, 25, 5, 149, 222, 180,
+ 174, 25, 5, 149, 156, 174, 25, 5, 149, 232, 185, 174, 25, 5, 75, 174, 25,
+ 5, 254, 201, 174, 25, 5, 76, 174, 25, 5, 253, 192, 174, 5, 213, 152, 174,
+ 5, 253, 175, 174, 5, 235, 102, 174, 5, 214, 161, 174, 226, 204, 174, 248,
+ 178, 174, 52, 248, 178, 174, 255, 21, 50, 174, 220, 137, 174, 21, 210,
+ 86, 174, 21, 110, 174, 21, 105, 174, 21, 158, 174, 21, 161, 174, 21, 189,
+ 174, 21, 194, 174, 21, 198, 174, 21, 195, 174, 21, 200, 217, 69, 1, 61,
+ 217, 69, 1, 255, 73, 217, 69, 1, 73, 217, 69, 1, 236, 33, 217, 69, 1, 70,
+ 217, 69, 1, 214, 118, 217, 69, 1, 75, 217, 69, 1, 254, 201, 217, 69, 1,
+ 76, 217, 69, 1, 253, 192, 217, 69, 1, 176, 217, 69, 1, 234, 132, 217, 69,
+ 1, 243, 135, 217, 69, 1, 242, 249, 217, 69, 1, 229, 77, 217, 69, 1, 251,
+ 33, 217, 69, 1, 250, 157, 217, 69, 1, 235, 141, 217, 69, 1, 235, 114,
+ 217, 69, 1, 227, 165, 217, 69, 1, 215, 156, 217, 69, 1, 215, 144, 217,
+ 69, 1, 248, 135, 217, 69, 1, 248, 119, 217, 69, 1, 228, 110, 217, 69, 1,
+ 217, 105, 217, 69, 1, 216, 208, 217, 69, 1, 248, 221, 217, 69, 1, 248,
+ 25, 217, 69, 1, 197, 217, 69, 1, 190, 217, 69, 1, 225, 147, 217, 69, 1,
+ 252, 191, 217, 69, 1, 252, 18, 217, 69, 1, 184, 217, 69, 1, 191, 217, 69,
+ 1, 205, 217, 69, 1, 233, 135, 217, 69, 1, 214, 27, 217, 69, 1, 220, 102,
+ 217, 69, 1, 206, 217, 69, 1, 162, 217, 69, 1, 222, 179, 217, 69, 5, 254,
+ 75, 217, 69, 5, 213, 147, 217, 69, 25, 5, 255, 73, 217, 69, 25, 5, 73,
+ 217, 69, 25, 5, 236, 33, 217, 69, 25, 5, 70, 217, 69, 25, 5, 214, 118,
+ 217, 69, 25, 5, 75, 217, 69, 25, 5, 254, 201, 217, 69, 25, 5, 76, 217,
+ 69, 25, 5, 253, 192, 217, 69, 5, 213, 152, 217, 69, 5, 227, 205, 217, 69,
+ 21, 210, 86, 217, 69, 21, 110, 217, 69, 21, 105, 217, 69, 21, 158, 217,
+ 69, 21, 161, 217, 69, 21, 189, 217, 69, 21, 194, 217, 69, 21, 198, 217,
+ 69, 21, 195, 217, 69, 21, 200, 15, 5, 61, 15, 5, 115, 30, 61, 15, 5, 115,
+ 30, 252, 176, 15, 5, 115, 30, 243, 105, 216, 239, 15, 5, 115, 30, 162,
+ 15, 5, 115, 30, 236, 35, 15, 5, 115, 30, 233, 116, 242, 94, 15, 5, 115,
+ 30, 230, 61, 15, 5, 115, 30, 222, 21, 15, 5, 255, 75, 15, 5, 255, 25, 15,
+ 5, 255, 26, 30, 253, 229, 15, 5, 255, 26, 30, 246, 67, 242, 94, 15, 5,
+ 255, 26, 30, 243, 118, 15, 5, 255, 26, 30, 243, 105, 216, 239, 15, 5,
+ 255, 26, 30, 162, 15, 5, 255, 26, 30, 236, 36, 242, 94, 15, 5, 255, 26,
+ 30, 236, 9, 15, 5, 255, 26, 30, 233, 117, 15, 5, 255, 26, 30, 220, 48,
+ 15, 5, 255, 26, 30, 104, 96, 104, 96, 70, 15, 5, 255, 26, 242, 94, 15, 5,
+ 255, 23, 15, 5, 255, 24, 30, 252, 160, 15, 5, 255, 24, 30, 243, 105, 216,
+ 239, 15, 5, 255, 24, 30, 231, 92, 96, 245, 150, 15, 5, 255, 24, 30, 220,
+ 100, 15, 5, 255, 24, 30, 217, 72, 15, 5, 254, 255, 15, 5, 254, 186, 15,
+ 5, 254, 187, 30, 245, 87, 15, 5, 254, 187, 30, 220, 10, 96, 242, 190, 15,
+ 5, 254, 178, 15, 5, 254, 179, 30, 254, 178, 15, 5, 254, 179, 30, 247,
+ 216, 15, 5, 254, 179, 30, 242, 190, 15, 5, 254, 179, 30, 162, 15, 5, 254,
+ 179, 30, 234, 255, 15, 5, 254, 179, 30, 234, 92, 15, 5, 254, 179, 30,
+ 220, 63, 15, 5, 254, 179, 30, 214, 126, 15, 5, 254, 175, 15, 5, 254, 168,
+ 15, 5, 254, 132, 15, 5, 254, 133, 30, 220, 63, 15, 5, 254, 123, 15, 5,
+ 254, 124, 117, 254, 123, 15, 5, 254, 124, 134, 216, 85, 15, 5, 254, 124,
+ 96, 229, 217, 226, 164, 254, 124, 96, 229, 216, 15, 5, 254, 124, 96, 229,
+ 217, 218, 233, 15, 5, 254, 94, 15, 5, 254, 67, 15, 5, 254, 35, 15, 5,
+ 254, 36, 30, 233, 196, 15, 5, 254, 8, 15, 5, 253, 236, 15, 5, 253, 231,
+ 15, 5, 253, 232, 210, 40, 216, 239, 15, 5, 253, 232, 235, 3, 216, 239,
+ 15, 5, 253, 232, 117, 253, 232, 215, 114, 117, 215, 114, 215, 114, 117,
+ 215, 114, 226, 21, 15, 5, 253, 232, 117, 253, 232, 117, 253, 231, 15, 5,
+ 253, 232, 117, 253, 232, 117, 253, 232, 249, 125, 253, 232, 117, 253,
+ 232, 117, 253, 231, 15, 5, 253, 229, 15, 5, 253, 226, 15, 5, 252, 191,
+ 15, 5, 252, 176, 15, 5, 252, 171, 15, 5, 252, 167, 15, 5, 252, 161, 15,
+ 5, 252, 162, 117, 252, 161, 15, 5, 252, 160, 15, 5, 130, 15, 5, 252, 140,
+ 15, 5, 252, 6, 15, 5, 252, 7, 30, 61, 15, 5, 252, 7, 30, 243, 96, 15, 5,
+ 252, 7, 30, 236, 36, 242, 94, 15, 5, 251, 125, 15, 5, 251, 126, 117, 251,
+ 126, 255, 25, 15, 5, 251, 126, 117, 251, 126, 214, 190, 15, 5, 251, 126,
+ 249, 125, 251, 125, 15, 5, 251, 109, 15, 5, 251, 110, 117, 251, 109, 15,
+ 5, 251, 98, 15, 5, 251, 97, 15, 5, 248, 221, 15, 5, 248, 212, 15, 5, 248,
+ 213, 234, 66, 30, 115, 96, 231, 147, 15, 5, 248, 213, 234, 66, 30, 254,
+ 132, 15, 5, 248, 213, 234, 66, 30, 252, 160, 15, 5, 248, 213, 234, 66,
+ 30, 252, 6, 15, 5, 248, 213, 234, 66, 30, 243, 135, 15, 5, 248, 213, 234,
+ 66, 30, 243, 136, 96, 231, 147, 15, 5, 248, 213, 234, 66, 30, 242, 214,
+ 15, 5, 248, 213, 234, 66, 30, 242, 197, 15, 5, 248, 213, 234, 66, 30,
+ 242, 103, 15, 5, 248, 213, 234, 66, 30, 162, 15, 5, 248, 213, 234, 66,
+ 30, 235, 179, 15, 5, 248, 213, 234, 66, 30, 235, 180, 96, 232, 98, 15, 5,
+ 248, 213, 234, 66, 30, 234, 242, 15, 5, 248, 213, 234, 66, 30, 233, 135,
+ 15, 5, 248, 213, 234, 66, 30, 232, 98, 15, 5, 248, 213, 234, 66, 30, 232,
+ 99, 96, 231, 146, 15, 5, 248, 213, 234, 66, 30, 232, 84, 15, 5, 248, 213,
+ 234, 66, 30, 229, 107, 15, 5, 248, 213, 234, 66, 30, 226, 22, 96, 226,
+ 21, 15, 5, 248, 213, 234, 66, 30, 219, 191, 15, 5, 248, 213, 234, 66, 30,
+ 217, 72, 15, 5, 248, 213, 234, 66, 30, 214, 231, 96, 242, 197, 15, 5,
+ 248, 213, 234, 66, 30, 214, 126, 15, 5, 248, 187, 15, 5, 248, 166, 15, 5,
+ 248, 165, 15, 5, 248, 164, 15, 5, 248, 3, 15, 5, 247, 242, 15, 5, 247,
+ 217, 15, 5, 247, 218, 30, 220, 63, 15, 5, 247, 216, 15, 5, 247, 206, 15,
+ 5, 247, 207, 234, 208, 104, 242, 95, 247, 187, 15, 5, 247, 187, 15, 5,
+ 246, 78, 15, 5, 246, 79, 117, 246, 78, 15, 5, 246, 79, 242, 94, 15, 5,
+ 246, 79, 220, 45, 15, 5, 246, 76, 15, 5, 246, 77, 30, 245, 72, 15, 5,
+ 246, 75, 15, 5, 246, 74, 15, 5, 246, 73, 15, 5, 246, 72, 15, 5, 246, 68,
+ 15, 5, 246, 66, 15, 5, 246, 67, 242, 94, 15, 5, 246, 67, 242, 95, 242,
+ 94, 15, 5, 246, 65, 15, 5, 246, 58, 15, 5, 75, 15, 5, 160, 30, 226, 21,
+ 15, 5, 160, 117, 160, 227, 195, 117, 227, 194, 15, 5, 245, 234, 15, 5,
+ 245, 235, 30, 115, 96, 242, 49, 96, 248, 221, 15, 5, 245, 235, 30, 243,
+ 96, 15, 5, 245, 235, 30, 230, 230, 15, 5, 245, 235, 30, 222, 8, 15, 5,
+ 245, 235, 30, 220, 63, 15, 5, 245, 235, 30, 70, 15, 5, 245, 211, 15, 5,
+ 245, 200, 15, 5, 245, 174, 15, 5, 245, 150, 15, 5, 245, 151, 30, 243,
+ 104, 15, 5, 245, 151, 30, 243, 105, 216, 239, 15, 5, 245, 151, 30, 231,
+ 91, 15, 5, 245, 151, 249, 125, 245, 150, 15, 5, 245, 151, 226, 164, 245,
+ 150, 15, 5, 245, 151, 218, 233, 15, 5, 245, 89, 15, 5, 245, 87, 15, 5,
+ 245, 72, 15, 5, 245, 10, 15, 5, 245, 11, 30, 61, 15, 5, 245, 11, 30, 115,
+ 96, 233, 104, 15, 5, 245, 11, 30, 115, 96, 233, 105, 30, 233, 104, 15, 5,
+ 245, 11, 30, 254, 123, 15, 5, 245, 11, 30, 252, 176, 15, 5, 245, 11, 30,
+ 246, 67, 242, 94, 15, 5, 245, 11, 30, 246, 67, 242, 95, 242, 94, 15, 5,
+ 245, 11, 30, 162, 15, 5, 245, 11, 30, 242, 49, 242, 94, 15, 5, 245, 11,
+ 30, 236, 36, 242, 94, 15, 5, 245, 11, 30, 234, 207, 15, 5, 245, 11, 30,
+ 234, 208, 218, 233, 15, 5, 245, 11, 30, 233, 215, 15, 5, 245, 11, 30,
+ 233, 135, 15, 5, 245, 11, 30, 233, 105, 30, 233, 104, 15, 5, 245, 11, 30,
+ 232, 241, 15, 5, 245, 11, 30, 232, 98, 15, 5, 245, 11, 30, 214, 230, 15,
+ 5, 245, 11, 30, 214, 219, 15, 5, 243, 135, 15, 5, 243, 136, 242, 94, 15,
+ 5, 243, 133, 15, 5, 243, 134, 30, 115, 96, 248, 222, 96, 162, 15, 5, 243,
+ 134, 30, 115, 96, 162, 15, 5, 243, 134, 30, 115, 96, 236, 35, 15, 5, 243,
+ 134, 30, 255, 24, 216, 240, 96, 217, 93, 15, 5, 243, 134, 30, 254, 123,
+ 15, 5, 243, 134, 30, 253, 231, 15, 5, 243, 134, 30, 253, 230, 96, 243,
+ 118, 15, 5, 243, 134, 30, 252, 176, 15, 5, 243, 134, 30, 252, 141, 96,
+ 205, 15, 5, 243, 134, 30, 251, 98, 15, 5, 243, 134, 30, 251, 99, 96, 205,
+ 15, 5, 243, 134, 30, 248, 221, 15, 5, 243, 134, 30, 248, 3, 15, 5, 243,
+ 134, 30, 247, 218, 30, 220, 63, 15, 5, 243, 134, 30, 246, 76, 15, 5, 243,
+ 134, 30, 245, 174, 15, 5, 243, 134, 30, 245, 175, 96, 233, 135, 15, 5,
+ 243, 134, 30, 245, 150, 15, 5, 243, 134, 30, 245, 151, 30, 243, 105, 216,
+ 239, 15, 5, 243, 134, 30, 243, 105, 216, 239, 15, 5, 243, 134, 30, 243,
+ 96, 15, 5, 243, 134, 30, 242, 214, 15, 5, 243, 134, 30, 242, 212, 15, 5,
+ 243, 134, 30, 242, 213, 96, 61, 15, 5, 243, 134, 30, 242, 198, 96, 218,
+ 83, 15, 5, 243, 134, 30, 242, 49, 96, 232, 99, 96, 245, 72, 15, 5, 243,
+ 134, 30, 242, 30, 15, 5, 243, 134, 30, 242, 31, 96, 233, 135, 15, 5, 243,
+ 134, 30, 241, 181, 96, 232, 241, 15, 5, 243, 134, 30, 240, 218, 15, 5,
+ 243, 134, 30, 236, 36, 242, 94, 15, 5, 243, 134, 30, 235, 166, 96, 240,
+ 223, 96, 253, 231, 15, 5, 243, 134, 30, 234, 242, 15, 5, 243, 134, 30,
+ 234, 207, 15, 5, 243, 134, 30, 234, 89, 15, 5, 243, 134, 30, 234, 90, 96,
+ 233, 104, 15, 5, 243, 134, 30, 233, 216, 96, 254, 123, 15, 5, 243, 134,
+ 30, 233, 135, 15, 5, 243, 134, 30, 231, 92, 96, 245, 150, 15, 5, 243,
+ 134, 30, 230, 230, 15, 5, 243, 134, 30, 227, 194, 15, 5, 243, 134, 30,
+ 227, 195, 117, 227, 194, 15, 5, 243, 134, 30, 190, 15, 5, 243, 134, 30,
+ 222, 8, 15, 5, 243, 134, 30, 221, 231, 15, 5, 243, 134, 30, 220, 63, 15,
+ 5, 243, 134, 30, 220, 64, 96, 215, 98, 15, 5, 243, 134, 30, 220, 30, 15,
+ 5, 243, 134, 30, 218, 43, 15, 5, 243, 134, 30, 217, 72, 15, 5, 243, 134,
+ 30, 70, 15, 5, 243, 134, 30, 214, 219, 15, 5, 243, 134, 30, 214, 220, 96,
+ 246, 78, 15, 5, 243, 134, 117, 243, 133, 15, 5, 243, 128, 15, 5, 243,
+ 129, 249, 125, 243, 128, 15, 5, 243, 126, 15, 5, 243, 127, 117, 243, 127,
+ 243, 97, 117, 243, 96, 15, 5, 243, 118, 15, 5, 243, 119, 243, 127, 117,
+ 243, 127, 243, 97, 117, 243, 96, 15, 5, 243, 117, 15, 5, 243, 115, 15, 5,
+ 243, 106, 15, 5, 243, 104, 15, 5, 243, 105, 216, 239, 15, 5, 243, 105,
+ 117, 243, 104, 15, 5, 243, 105, 249, 125, 243, 104, 15, 5, 243, 96, 15,
+ 5, 243, 95, 15, 5, 243, 90, 15, 5, 243, 36, 15, 5, 243, 37, 30, 233, 196,
+ 15, 5, 242, 214, 15, 5, 242, 215, 30, 75, 15, 5, 242, 215, 30, 70, 15, 5,
+ 242, 215, 249, 125, 242, 214, 15, 5, 242, 212, 15, 5, 242, 213, 117, 242,
+ 212, 15, 5, 242, 213, 249, 125, 242, 212, 15, 5, 242, 209, 15, 5, 242,
+ 197, 15, 5, 242, 198, 242, 94, 15, 5, 242, 195, 15, 5, 242, 196, 30, 115,
+ 96, 236, 35, 15, 5, 242, 196, 30, 243, 105, 216, 239, 15, 5, 242, 196,
+ 30, 236, 35, 15, 5, 242, 196, 30, 232, 99, 96, 236, 35, 15, 5, 242, 196,
+ 30, 190, 15, 5, 242, 192, 15, 5, 242, 190, 15, 5, 242, 191, 249, 125,
+ 242, 190, 15, 5, 242, 191, 30, 252, 176, 15, 5, 242, 191, 30, 217, 72,
+ 15, 5, 242, 191, 216, 239, 15, 5, 242, 113, 15, 5, 242, 114, 249, 125,
+ 242, 113, 15, 5, 242, 111, 15, 5, 242, 112, 30, 234, 242, 15, 5, 242,
+ 112, 30, 234, 243, 30, 236, 36, 242, 94, 15, 5, 242, 112, 30, 227, 194,
+ 15, 5, 242, 112, 30, 222, 9, 96, 215, 113, 15, 5, 242, 112, 242, 94, 15,
+ 5, 242, 103, 15, 5, 242, 104, 30, 115, 96, 233, 196, 15, 5, 242, 104, 30,
+ 233, 196, 15, 5, 242, 104, 117, 242, 104, 232, 91, 15, 5, 242, 98, 15, 5,
+ 242, 96, 15, 5, 242, 97, 30, 220, 63, 15, 5, 242, 88, 15, 5, 242, 87, 15,
+ 5, 242, 84, 15, 5, 242, 83, 15, 5, 162, 15, 5, 242, 49, 216, 239, 15, 5,
+ 242, 49, 242, 94, 15, 5, 242, 30, 15, 5, 241, 180, 15, 5, 241, 181, 30,
+ 253, 231, 15, 5, 241, 181, 30, 253, 229, 15, 5, 241, 181, 30, 252, 176,
+ 15, 5, 241, 181, 30, 247, 187, 15, 5, 241, 181, 30, 243, 126, 15, 5, 241,
+ 181, 30, 234, 81, 15, 5, 241, 181, 30, 227, 194, 15, 5, 241, 181, 30,
+ 220, 63, 15, 5, 241, 181, 30, 70, 15, 5, 240, 222, 15, 5, 240, 218, 15,
+ 5, 240, 219, 30, 254, 123, 15, 5, 240, 219, 30, 242, 30, 15, 5, 240, 219,
+ 30, 234, 207, 15, 5, 240, 219, 30, 232, 197, 15, 5, 240, 219, 30, 214,
+ 219, 15, 5, 240, 215, 15, 5, 73, 15, 5, 240, 154, 61, 15, 5, 240, 115,
+ 15, 5, 236, 63, 15, 5, 236, 64, 117, 236, 64, 251, 98, 15, 5, 236, 64,
+ 117, 236, 64, 218, 233, 15, 5, 236, 38, 15, 5, 236, 35, 15, 5, 236, 36,
+ 247, 242, 15, 5, 236, 36, 223, 35, 15, 5, 236, 36, 117, 236, 36, 220, 14,
+ 117, 220, 14, 214, 220, 117, 214, 219, 15, 5, 236, 36, 242, 94, 15, 5,
+ 236, 27, 15, 5, 236, 28, 30, 243, 105, 216, 239, 15, 5, 236, 26, 15, 5,
+ 236, 16, 15, 5, 236, 17, 30, 217, 72, 15, 5, 236, 17, 249, 125, 236, 16,
+ 15, 5, 236, 17, 226, 164, 236, 16, 15, 5, 236, 17, 218, 233, 15, 5, 236,
+ 9, 15, 5, 235, 255, 15, 5, 235, 179, 15, 5, 235, 165, 15, 5, 176, 15, 5,
+ 235, 13, 30, 61, 15, 5, 235, 13, 30, 254, 255, 15, 5, 235, 13, 30, 255,
+ 0, 96, 233, 215, 15, 5, 235, 13, 30, 253, 229, 15, 5, 235, 13, 30, 252,
+ 176, 15, 5, 235, 13, 30, 252, 160, 15, 5, 235, 13, 30, 130, 15, 5, 235,
+ 13, 30, 252, 6, 15, 5, 235, 13, 30, 245, 87, 15, 5, 235, 13, 30, 245, 72,
+ 15, 5, 235, 13, 30, 243, 135, 15, 5, 235, 13, 30, 243, 118, 15, 5, 235,
+ 13, 30, 243, 105, 216, 239, 15, 5, 235, 13, 30, 243, 96, 15, 5, 235, 13,
+ 30, 243, 97, 96, 220, 101, 96, 61, 15, 5, 235, 13, 30, 242, 214, 15, 5,
+ 235, 13, 30, 242, 197, 15, 5, 235, 13, 30, 242, 191, 96, 221, 231, 15, 5,
+ 235, 13, 30, 242, 191, 249, 125, 242, 190, 15, 5, 235, 13, 30, 242, 113,
+ 15, 5, 235, 13, 30, 242, 87, 15, 5, 235, 13, 30, 236, 35, 15, 5, 235, 13,
+ 30, 236, 16, 15, 5, 235, 13, 30, 234, 242, 15, 5, 235, 13, 30, 234, 92,
+ 15, 5, 235, 13, 30, 234, 89, 15, 5, 235, 13, 30, 232, 241, 15, 5, 235,
+ 13, 30, 232, 98, 15, 5, 235, 13, 30, 231, 91, 15, 5, 235, 13, 30, 231,
+ 92, 96, 246, 78, 15, 5, 235, 13, 30, 231, 92, 96, 242, 214, 15, 5, 235,
+ 13, 30, 231, 92, 96, 217, 22, 15, 5, 235, 13, 30, 230, 230, 15, 5, 235,
+ 13, 30, 230, 231, 96, 227, 189, 15, 5, 235, 13, 30, 229, 107, 15, 5, 235,
+ 13, 30, 227, 194, 15, 5, 235, 13, 30, 225, 108, 15, 5, 235, 13, 30, 222,
+ 140, 15, 5, 235, 13, 30, 206, 15, 5, 235, 13, 30, 221, 231, 15, 5, 235,
+ 13, 30, 220, 102, 15, 5, 235, 13, 30, 220, 63, 15, 5, 235, 13, 30, 220,
+ 30, 15, 5, 235, 13, 30, 219, 225, 15, 5, 235, 13, 30, 219, 182, 15, 5,
+ 235, 13, 30, 218, 51, 15, 5, 235, 13, 30, 217, 50, 15, 5, 235, 13, 30,
+ 70, 15, 5, 235, 13, 30, 214, 230, 15, 5, 235, 13, 30, 214, 219, 15, 5,
+ 235, 13, 30, 214, 193, 30, 190, 15, 5, 235, 13, 30, 214, 126, 15, 5, 235,
+ 13, 30, 210, 44, 15, 5, 235, 11, 15, 5, 235, 12, 249, 125, 235, 11, 15,
+ 5, 235, 4, 15, 5, 235, 1, 15, 5, 234, 255, 15, 5, 234, 254, 15, 5, 234,
+ 252, 15, 5, 234, 253, 117, 234, 252, 15, 5, 234, 242, 15, 5, 234, 243,
+ 30, 236, 36, 242, 94, 15, 5, 234, 238, 15, 5, 234, 239, 30, 252, 176, 15,
+ 5, 234, 239, 249, 125, 234, 238, 15, 5, 234, 236, 15, 5, 234, 235, 15, 5,
+ 234, 207, 15, 5, 234, 208, 233, 118, 30, 104, 117, 233, 118, 30, 70, 15,
+ 5, 234, 208, 117, 234, 208, 233, 118, 30, 104, 117, 233, 118, 30, 70, 15,
+ 5, 234, 157, 15, 5, 234, 92, 15, 5, 234, 93, 30, 252, 176, 15, 5, 234,
+ 93, 30, 70, 15, 5, 234, 93, 30, 214, 219, 15, 5, 234, 89, 15, 5, 234, 81,
+ 15, 5, 234, 68, 15, 5, 234, 67, 15, 5, 234, 65, 15, 5, 234, 66, 117, 234,
+ 65, 15, 5, 233, 217, 15, 5, 233, 218, 117, 241, 181, 30, 253, 230, 233,
+ 218, 117, 241, 181, 30, 253, 229, 15, 5, 233, 215, 15, 5, 233, 213, 15,
+ 5, 233, 214, 214, 12, 17, 15, 5, 233, 212, 15, 5, 233, 209, 15, 5, 233,
+ 210, 242, 94, 15, 5, 233, 208, 15, 5, 233, 196, 15, 5, 233, 197, 226,
+ 164, 233, 196, 15, 5, 233, 191, 15, 5, 233, 172, 15, 5, 233, 135, 15, 5,
+ 233, 117, 15, 5, 233, 118, 30, 61, 15, 5, 233, 118, 30, 115, 96, 248,
+ 222, 96, 162, 15, 5, 233, 118, 30, 115, 96, 243, 96, 15, 5, 233, 118, 30,
+ 115, 96, 233, 104, 15, 5, 233, 118, 30, 254, 178, 15, 5, 233, 118, 30,
+ 254, 123, 15, 5, 233, 118, 30, 253, 232, 210, 40, 216, 239, 15, 5, 233,
+ 118, 30, 252, 176, 15, 5, 233, 118, 30, 252, 6, 15, 5, 233, 118, 30, 248,
+ 166, 15, 5, 233, 118, 30, 245, 150, 15, 5, 233, 118, 30, 243, 135, 15, 5,
+ 233, 118, 30, 243, 96, 15, 5, 233, 118, 30, 242, 103, 15, 5, 233, 118,
+ 30, 242, 104, 96, 242, 103, 15, 5, 233, 118, 30, 162, 15, 5, 233, 118,
+ 30, 242, 30, 15, 5, 233, 118, 30, 241, 181, 30, 227, 194, 15, 5, 233,
+ 118, 30, 236, 36, 242, 94, 15, 5, 233, 118, 30, 236, 16, 15, 5, 233, 118,
+ 30, 236, 17, 96, 162, 15, 5, 233, 118, 30, 236, 17, 96, 232, 98, 15, 5,
+ 233, 118, 30, 234, 92, 15, 5, 233, 118, 30, 234, 81, 15, 5, 233, 118, 30,
+ 233, 215, 15, 5, 233, 118, 30, 233, 209, 15, 5, 233, 118, 30, 233, 210,
+ 96, 241, 181, 96, 61, 15, 5, 233, 118, 30, 233, 117, 15, 5, 233, 118, 30,
+ 232, 197, 15, 5, 233, 118, 30, 232, 98, 15, 5, 233, 118, 30, 232, 86, 15,
+ 5, 233, 118, 30, 231, 91, 15, 5, 233, 118, 30, 231, 92, 96, 245, 150, 15,
+ 5, 233, 118, 30, 230, 61, 15, 5, 233, 118, 30, 229, 107, 15, 5, 233, 118,
+ 30, 220, 64, 96, 218, 43, 15, 5, 233, 118, 30, 220, 10, 96, 242, 191, 96,
+ 245, 87, 15, 5, 233, 118, 30, 220, 10, 96, 242, 191, 216, 239, 15, 5,
+ 233, 118, 30, 219, 223, 15, 5, 233, 118, 30, 219, 224, 96, 219, 223, 15,
+ 5, 233, 118, 30, 218, 43, 15, 5, 233, 118, 30, 217, 84, 15, 5, 233, 118,
+ 30, 217, 72, 15, 5, 233, 118, 30, 217, 23, 96, 115, 96, 218, 84, 96, 197,
+ 15, 5, 233, 118, 30, 70, 15, 5, 233, 118, 30, 104, 96, 61, 15, 5, 233,
+ 118, 30, 104, 96, 104, 96, 70, 15, 5, 233, 118, 30, 214, 231, 96, 253,
+ 231, 15, 5, 233, 118, 30, 214, 219, 15, 5, 233, 118, 30, 214, 126, 15, 5,
+ 233, 118, 218, 233, 15, 5, 233, 115, 15, 5, 233, 116, 30, 220, 63, 15, 5,
+ 233, 116, 30, 220, 64, 96, 218, 43, 15, 5, 233, 116, 242, 94, 15, 5, 233,
+ 116, 242, 95, 117, 233, 116, 242, 95, 220, 63, 15, 5, 233, 111, 15, 5,
+ 233, 104, 15, 5, 233, 105, 30, 233, 104, 15, 5, 233, 102, 15, 5, 233,
+ 103, 30, 233, 196, 15, 5, 233, 103, 30, 233, 197, 96, 222, 140, 15, 5,
+ 232, 241, 15, 5, 232, 226, 15, 5, 232, 216, 15, 5, 232, 197, 15, 5, 232,
+ 98, 15, 5, 232, 99, 30, 252, 176, 15, 5, 232, 96, 15, 5, 232, 97, 30,
+ 254, 178, 15, 5, 232, 97, 30, 252, 176, 15, 5, 232, 97, 30, 245, 72, 15,
+ 5, 232, 97, 30, 245, 73, 216, 239, 15, 5, 232, 97, 30, 243, 105, 216,
+ 239, 15, 5, 232, 97, 30, 241, 181, 30, 252, 176, 15, 5, 232, 97, 30, 236,
+ 16, 15, 5, 232, 97, 30, 235, 1, 15, 5, 232, 97, 30, 234, 255, 15, 5, 232,
+ 97, 30, 235, 0, 96, 253, 231, 15, 5, 232, 97, 30, 234, 92, 15, 5, 232,
+ 97, 30, 233, 136, 96, 253, 231, 15, 5, 232, 97, 30, 233, 117, 15, 5, 232,
+ 97, 30, 231, 92, 96, 245, 150, 15, 5, 232, 97, 30, 229, 107, 15, 5, 232,
+ 97, 30, 227, 237, 15, 5, 232, 97, 30, 219, 192, 96, 253, 231, 15, 5, 232,
+ 97, 30, 219, 174, 96, 251, 125, 15, 5, 232, 97, 30, 215, 113, 15, 5, 232,
+ 97, 216, 239, 15, 5, 232, 97, 249, 125, 232, 96, 15, 5, 232, 97, 226,
+ 164, 232, 96, 15, 5, 232, 97, 218, 233, 15, 5, 232, 97, 220, 45, 15, 5,
+ 232, 95, 15, 5, 232, 91, 15, 5, 232, 92, 117, 232, 91, 15, 5, 232, 92,
+ 226, 164, 232, 91, 15, 5, 232, 92, 220, 45, 15, 5, 232, 89, 15, 5, 232,
+ 86, 15, 5, 232, 84, 15, 5, 232, 85, 117, 232, 84, 15, 5, 232, 85, 117,
+ 232, 85, 243, 97, 117, 243, 96, 15, 5, 184, 15, 5, 231, 239, 30, 217, 72,
+ 15, 5, 231, 239, 242, 94, 15, 5, 231, 238, 15, 5, 231, 210, 15, 5, 231,
+ 166, 15, 5, 231, 147, 15, 5, 231, 146, 15, 5, 231, 91, 15, 5, 231, 47,
+ 15, 5, 230, 230, 15, 5, 230, 188, 15, 5, 230, 102, 15, 5, 230, 103, 117,
+ 230, 102, 15, 5, 230, 93, 15, 5, 230, 94, 242, 94, 15, 5, 230, 78, 15, 5,
+ 230, 64, 15, 5, 230, 61, 15, 5, 230, 62, 30, 61, 15, 5, 230, 62, 30, 233,
+ 196, 15, 5, 230, 62, 30, 210, 116, 15, 5, 230, 62, 117, 230, 61, 15, 5,
+ 230, 62, 117, 230, 62, 30, 115, 96, 197, 15, 5, 230, 62, 249, 125, 230,
+ 61, 15, 5, 230, 59, 15, 5, 230, 60, 30, 61, 15, 5, 230, 60, 30, 115, 96,
+ 248, 3, 15, 5, 230, 60, 30, 248, 3, 15, 5, 230, 60, 242, 94, 15, 5, 197,
+ 15, 5, 229, 227, 15, 5, 229, 216, 15, 5, 229, 217, 235, 192, 15, 5, 229,
+ 217, 30, 219, 226, 216, 239, 15, 5, 229, 217, 226, 164, 229, 216, 15, 5,
+ 229, 215, 15, 5, 229, 208, 227, 180, 15, 5, 229, 207, 15, 5, 229, 206,
+ 15, 5, 229, 107, 15, 5, 229, 108, 30, 61, 15, 5, 229, 108, 30, 214, 219,
+ 15, 5, 229, 108, 220, 45, 15, 5, 228, 233, 15, 5, 228, 234, 30, 75, 15,
+ 5, 228, 232, 15, 5, 228, 203, 15, 5, 228, 204, 30, 243, 105, 216, 239,
+ 15, 5, 228, 204, 30, 243, 97, 96, 243, 105, 216, 239, 15, 5, 228, 201,
+ 15, 5, 228, 202, 30, 254, 123, 15, 5, 228, 202, 30, 253, 231, 15, 5, 228,
+ 202, 30, 253, 232, 96, 253, 231, 15, 5, 228, 202, 30, 242, 103, 15, 5,
+ 228, 202, 30, 231, 92, 96, 243, 105, 216, 239, 15, 5, 228, 202, 30, 229,
+ 107, 15, 5, 228, 202, 30, 227, 194, 15, 5, 228, 202, 30, 220, 63, 15, 5,
+ 228, 202, 30, 220, 64, 96, 115, 254, 123, 15, 5, 228, 202, 30, 220, 64,
+ 96, 253, 231, 15, 5, 228, 202, 30, 220, 64, 96, 253, 232, 96, 253, 231,
+ 15, 5, 228, 202, 30, 214, 231, 96, 253, 231, 15, 5, 228, 202, 30, 214,
+ 126, 15, 5, 228, 190, 15, 5, 227, 237, 15, 5, 227, 210, 15, 5, 227, 194,
+ 15, 5, 227, 195, 233, 116, 30, 243, 96, 15, 5, 227, 195, 233, 116, 30,
+ 231, 147, 15, 5, 227, 195, 233, 116, 30, 222, 8, 15, 5, 227, 195, 233,
+ 116, 30, 222, 9, 117, 227, 195, 233, 116, 30, 222, 8, 15, 5, 227, 195,
+ 233, 116, 30, 214, 126, 15, 5, 227, 195, 216, 239, 15, 5, 227, 195, 117,
+ 227, 194, 15, 5, 227, 195, 249, 125, 227, 194, 15, 5, 227, 195, 249, 125,
+ 227, 195, 233, 116, 117, 233, 115, 15, 5, 227, 189, 15, 5, 227, 190, 255,
+ 24, 30, 253, 226, 15, 5, 227, 190, 255, 24, 30, 252, 6, 15, 5, 227, 190,
+ 255, 24, 30, 246, 74, 15, 5, 227, 190, 255, 24, 30, 242, 103, 15, 5, 227,
+ 190, 255, 24, 30, 236, 36, 242, 94, 15, 5, 227, 190, 255, 24, 30, 234,
+ 255, 15, 5, 227, 190, 255, 24, 30, 233, 135, 15, 5, 227, 190, 255, 24,
+ 30, 229, 107, 15, 5, 227, 190, 255, 24, 30, 219, 171, 15, 5, 227, 190,
+ 255, 24, 30, 214, 230, 15, 5, 227, 190, 234, 66, 30, 252, 6, 15, 5, 227,
+ 190, 234, 66, 30, 252, 7, 70, 15, 5, 190, 15, 5, 226, 80, 15, 5, 226, 47,
+ 15, 5, 226, 21, 15, 5, 225, 161, 15, 5, 225, 108, 15, 5, 225, 109, 30,
+ 61, 15, 5, 225, 109, 30, 255, 25, 15, 5, 225, 109, 30, 252, 6, 15, 5,
+ 225, 109, 30, 251, 125, 15, 5, 225, 109, 30, 75, 15, 5, 225, 109, 30, 73,
+ 15, 5, 225, 109, 30, 240, 115, 15, 5, 225, 109, 30, 70, 15, 5, 225, 109,
+ 30, 214, 230, 15, 5, 225, 109, 249, 125, 225, 108, 15, 5, 225, 53, 15, 5,
+ 225, 54, 30, 234, 238, 15, 5, 225, 54, 30, 214, 219, 15, 5, 225, 54, 30,
+ 210, 116, 15, 5, 225, 54, 226, 164, 225, 53, 15, 5, 205, 15, 5, 223, 182,
+ 15, 5, 223, 35, 15, 5, 222, 140, 15, 5, 206, 15, 5, 222, 22, 227, 180,
+ 15, 5, 222, 21, 15, 5, 222, 22, 30, 61, 15, 5, 222, 22, 30, 246, 78, 15,
+ 5, 222, 22, 30, 246, 76, 15, 5, 222, 22, 30, 162, 15, 5, 222, 22, 30,
+ 234, 242, 15, 5, 222, 22, 30, 233, 196, 15, 5, 222, 22, 30, 232, 84, 15,
+ 5, 222, 22, 30, 230, 230, 15, 5, 222, 22, 30, 227, 194, 15, 5, 222, 22,
+ 30, 222, 8, 15, 5, 222, 22, 30, 220, 30, 15, 5, 222, 22, 30, 217, 93, 15,
+ 5, 222, 22, 30, 214, 230, 15, 5, 222, 22, 30, 214, 225, 15, 5, 222, 22,
+ 30, 214, 197, 15, 5, 222, 22, 30, 214, 150, 15, 5, 222, 22, 30, 214, 126,
+ 15, 5, 222, 22, 117, 222, 21, 15, 5, 222, 22, 242, 94, 15, 5, 222, 8, 15,
+ 5, 222, 9, 233, 118, 30, 253, 229, 15, 5, 221, 239, 15, 5, 221, 231, 15,
+ 5, 220, 102, 15, 5, 220, 100, 15, 5, 220, 101, 30, 61, 15, 5, 220, 101,
+ 30, 252, 176, 15, 5, 220, 101, 30, 242, 190, 15, 5, 220, 101, 30, 229,
+ 107, 15, 5, 220, 101, 30, 219, 223, 15, 5, 220, 101, 30, 215, 98, 15, 5,
+ 220, 101, 30, 70, 15, 5, 220, 101, 30, 104, 96, 61, 15, 5, 220, 99, 15,
+ 5, 220, 97, 15, 5, 220, 78, 15, 5, 220, 63, 15, 5, 220, 64, 240, 222, 15,
+ 5, 220, 64, 117, 220, 64, 243, 127, 117, 243, 127, 243, 97, 117, 243, 96,
+ 15, 5, 220, 64, 117, 220, 64, 217, 94, 117, 217, 94, 243, 97, 117, 243,
+ 96, 15, 5, 220, 56, 15, 5, 220, 51, 15, 5, 220, 48, 15, 5, 220, 47, 15,
+ 5, 220, 44, 15, 5, 220, 30, 15, 5, 220, 31, 30, 61, 15, 5, 220, 31, 30,
+ 236, 16, 15, 5, 220, 24, 15, 5, 220, 25, 30, 61, 15, 5, 220, 25, 30, 252,
+ 161, 15, 5, 220, 25, 30, 251, 109, 15, 5, 220, 25, 30, 247, 206, 15, 5,
+ 220, 25, 30, 243, 96, 15, 5, 220, 25, 30, 236, 35, 15, 5, 220, 25, 30,
+ 236, 36, 242, 94, 15, 5, 220, 25, 30, 233, 191, 15, 5, 220, 25, 30, 232,
+ 86, 15, 5, 220, 25, 30, 230, 93, 15, 5, 220, 25, 30, 222, 8, 15, 5, 220,
+ 18, 15, 5, 220, 13, 15, 5, 220, 14, 216, 239, 15, 5, 220, 14, 117, 220,
+ 14, 251, 99, 117, 251, 98, 15, 5, 220, 9, 15, 5, 219, 225, 15, 5, 219,
+ 226, 117, 235, 193, 219, 225, 15, 5, 219, 223, 15, 5, 219, 222, 15, 5,
+ 219, 191, 15, 5, 219, 192, 242, 94, 15, 5, 219, 182, 15, 5, 219, 180, 15,
+ 5, 219, 181, 117, 219, 181, 219, 223, 15, 5, 219, 173, 15, 5, 219, 171,
+ 15, 5, 218, 83, 15, 5, 218, 84, 117, 218, 83, 15, 5, 218, 54, 15, 5, 218,
+ 53, 15, 5, 218, 51, 15, 5, 218, 43, 15, 5, 218, 42, 15, 5, 218, 17, 15,
+ 5, 218, 16, 15, 5, 217, 105, 15, 5, 217, 106, 253, 216, 15, 5, 217, 106,
+ 30, 241, 180, 15, 5, 217, 106, 30, 230, 230, 15, 5, 217, 106, 242, 94,
+ 15, 5, 217, 93, 15, 5, 217, 94, 117, 217, 94, 228, 234, 117, 228, 234,
+ 247, 188, 117, 247, 187, 15, 5, 217, 94, 218, 233, 15, 5, 217, 84, 15, 5,
+ 129, 30, 252, 6, 15, 5, 129, 30, 242, 103, 15, 5, 129, 30, 220, 63, 15,
+ 5, 129, 30, 219, 225, 15, 5, 129, 30, 215, 113, 15, 5, 129, 30, 214, 219,
+ 15, 5, 217, 72, 15, 5, 217, 50, 15, 5, 217, 22, 15, 5, 217, 23, 242, 94,
+ 15, 5, 216, 117, 15, 5, 216, 118, 216, 239, 15, 5, 216, 90, 15, 5, 216,
+ 72, 15, 5, 216, 73, 30, 217, 72, 15, 5, 216, 73, 117, 216, 72, 15, 5,
+ 216, 73, 117, 216, 73, 243, 127, 117, 243, 127, 243, 97, 117, 243, 96,
+ 15, 5, 215, 118, 15, 5, 215, 113, 15, 5, 215, 111, 15, 5, 215, 108, 15,
+ 5, 215, 98, 15, 5, 215, 99, 117, 215, 99, 210, 117, 117, 210, 116, 15, 5,
+ 70, 15, 5, 104, 242, 103, 15, 5, 104, 104, 70, 15, 5, 104, 117, 104, 226,
+ 90, 117, 226, 90, 243, 97, 117, 243, 96, 15, 5, 104, 117, 104, 218, 18,
+ 117, 218, 17, 15, 5, 104, 117, 104, 104, 223, 49, 117, 104, 223, 48, 15,
+ 5, 214, 230, 15, 5, 214, 225, 15, 5, 214, 219, 15, 5, 214, 220, 233, 191,
+ 15, 5, 214, 220, 30, 252, 176, 15, 5, 214, 220, 30, 230, 230, 15, 5, 214,
+ 220, 30, 104, 96, 104, 96, 70, 15, 5, 214, 220, 30, 104, 96, 104, 96,
+ 104, 242, 94, 15, 5, 214, 220, 242, 94, 15, 5, 214, 220, 220, 45, 15, 5,
+ 214, 220, 220, 46, 30, 252, 176, 15, 5, 214, 215, 15, 5, 214, 197, 15, 5,
+ 214, 198, 30, 233, 117, 15, 5, 214, 198, 30, 231, 92, 96, 248, 221, 15,
+ 5, 214, 198, 30, 220, 100, 15, 5, 214, 198, 30, 70, 15, 5, 214, 196, 15,
+ 5, 214, 192, 15, 5, 214, 193, 30, 234, 207, 15, 5, 214, 193, 30, 190, 15,
+ 5, 214, 190, 15, 5, 214, 191, 242, 94, 15, 5, 214, 150, 15, 5, 214, 151,
+ 249, 125, 214, 150, 15, 5, 214, 151, 220, 45, 15, 5, 214, 148, 15, 5,
+ 214, 149, 30, 115, 96, 162, 15, 5, 214, 149, 30, 115, 96, 197, 15, 5,
+ 214, 149, 30, 254, 178, 15, 5, 214, 149, 30, 162, 15, 5, 214, 149, 30,
+ 227, 194, 15, 5, 214, 149, 30, 214, 230, 15, 5, 214, 149, 30, 214, 231,
+ 96, 253, 231, 15, 5, 214, 149, 30, 214, 231, 96, 252, 6, 15, 5, 214, 147,
+ 15, 5, 214, 144, 15, 5, 214, 143, 15, 5, 214, 139, 15, 5, 214, 140, 30,
+ 61, 15, 5, 214, 140, 30, 253, 226, 15, 5, 214, 140, 30, 130, 15, 5, 214,
+ 140, 30, 246, 68, 15, 5, 214, 140, 30, 243, 135, 15, 5, 214, 140, 30,
+ 243, 118, 15, 5, 214, 140, 30, 243, 105, 216, 239, 15, 5, 214, 140, 30,
+ 243, 96, 15, 5, 214, 140, 30, 242, 113, 15, 5, 214, 140, 30, 162, 15, 5,
+ 214, 140, 30, 236, 35, 15, 5, 214, 140, 30, 236, 16, 15, 5, 214, 140, 30,
+ 235, 165, 15, 5, 214, 140, 30, 234, 92, 15, 5, 214, 140, 30, 232, 84, 15,
+ 5, 214, 140, 30, 230, 188, 15, 5, 214, 140, 30, 190, 15, 5, 214, 140, 30,
+ 220, 63, 15, 5, 214, 140, 30, 219, 180, 15, 5, 214, 140, 30, 215, 118,
+ 15, 5, 214, 140, 30, 104, 96, 242, 103, 15, 5, 214, 140, 30, 214, 219,
+ 15, 5, 214, 140, 30, 214, 137, 15, 5, 214, 137, 15, 5, 214, 138, 30, 70,
+ 15, 5, 214, 126, 15, 5, 214, 127, 30, 61, 15, 5, 214, 127, 30, 233, 217,
+ 15, 5, 214, 127, 30, 233, 196, 15, 5, 214, 127, 30, 217, 72, 15, 5, 214,
+ 122, 15, 5, 214, 125, 15, 5, 214, 123, 15, 5, 214, 119, 15, 5, 214, 108,
+ 15, 5, 214, 109, 30, 234, 207, 15, 5, 214, 107, 15, 5, 210, 116, 15, 5,
+ 210, 117, 216, 239, 15, 5, 210, 117, 92, 30, 233, 196, 15, 5, 210, 113,
+ 15, 5, 210, 106, 15, 5, 210, 93, 15, 5, 210, 44, 15, 5, 210, 45, 117,
+ 210, 44, 15, 5, 210, 43, 15, 5, 210, 41, 15, 5, 210, 42, 235, 3, 216,
+ 239, 15, 5, 210, 36, 15, 5, 210, 28, 15, 5, 210, 13, 15, 5, 210, 11, 15,
+ 5, 210, 12, 30, 61, 15, 5, 210, 10, 15, 5, 210, 9, 15, 132, 5, 113, 253,
+ 231, 15, 132, 5, 134, 253, 231, 15, 132, 5, 244, 11, 253, 231, 15, 132,
+ 5, 244, 81, 253, 231, 15, 132, 5, 219, 125, 253, 231, 15, 132, 5, 220,
+ 122, 253, 231, 15, 132, 5, 245, 193, 253, 231, 15, 132, 5, 228, 200, 253,
+ 231, 15, 132, 5, 134, 247, 187, 15, 132, 5, 244, 11, 247, 187, 15, 132,
+ 5, 244, 81, 247, 187, 15, 132, 5, 219, 125, 247, 187, 15, 132, 5, 220,
+ 122, 247, 187, 15, 132, 5, 245, 193, 247, 187, 15, 132, 5, 228, 200, 247,
+ 187, 15, 132, 5, 244, 11, 70, 15, 132, 5, 244, 81, 70, 15, 132, 5, 219,
+ 125, 70, 15, 132, 5, 220, 122, 70, 15, 132, 5, 245, 193, 70, 15, 132, 5,
+ 228, 200, 70, 15, 132, 5, 123, 243, 38, 15, 132, 5, 113, 243, 38, 15,
+ 132, 5, 134, 243, 38, 15, 132, 5, 244, 11, 243, 38, 15, 132, 5, 244, 81,
+ 243, 38, 15, 132, 5, 219, 125, 243, 38, 15, 132, 5, 220, 122, 243, 38,
+ 15, 132, 5, 245, 193, 243, 38, 15, 132, 5, 228, 200, 243, 38, 15, 132, 5,
+ 123, 243, 35, 15, 132, 5, 113, 243, 35, 15, 132, 5, 134, 243, 35, 15,
+ 132, 5, 244, 11, 243, 35, 15, 132, 5, 244, 81, 243, 35, 15, 132, 5, 113,
+ 220, 78, 15, 132, 5, 134, 220, 78, 15, 132, 5, 134, 220, 79, 214, 12, 17,
+ 15, 132, 5, 244, 11, 220, 78, 15, 132, 5, 244, 81, 220, 78, 15, 132, 5,
+ 219, 125, 220, 78, 15, 132, 5, 220, 122, 220, 78, 15, 132, 5, 245, 193,
+ 220, 78, 15, 132, 5, 228, 200, 220, 78, 15, 132, 5, 123, 220, 73, 15,
+ 132, 5, 113, 220, 73, 15, 132, 5, 134, 220, 73, 15, 132, 5, 134, 220, 74,
+ 214, 12, 17, 15, 132, 5, 244, 11, 220, 73, 15, 132, 5, 244, 81, 220, 73,
+ 15, 132, 5, 220, 79, 30, 243, 119, 96, 247, 187, 15, 132, 5, 220, 79, 30,
+ 243, 119, 96, 230, 188, 15, 132, 5, 123, 251, 95, 15, 132, 5, 113, 251,
+ 95, 15, 132, 5, 134, 251, 95, 15, 132, 5, 134, 251, 96, 214, 12, 17, 15,
+ 132, 5, 244, 11, 251, 95, 15, 132, 5, 244, 81, 251, 95, 15, 132, 5, 134,
+ 214, 12, 244, 20, 245, 74, 15, 132, 5, 134, 214, 12, 244, 20, 245, 71,
+ 15, 132, 5, 244, 11, 214, 12, 244, 20, 232, 217, 15, 132, 5, 244, 11,
+ 214, 12, 244, 20, 232, 215, 15, 132, 5, 244, 11, 214, 12, 244, 20, 232,
+ 218, 61, 15, 132, 5, 244, 11, 214, 12, 244, 20, 232, 218, 253, 158, 15,
+ 132, 5, 219, 125, 214, 12, 244, 20, 253, 228, 15, 132, 5, 220, 122, 214,
+ 12, 244, 20, 236, 8, 15, 132, 5, 220, 122, 214, 12, 244, 20, 236, 10, 61,
+ 15, 132, 5, 220, 122, 214, 12, 244, 20, 236, 10, 253, 158, 15, 132, 5,
+ 245, 193, 214, 12, 244, 20, 214, 121, 15, 132, 5, 245, 193, 214, 12, 244,
+ 20, 214, 120, 15, 132, 5, 228, 200, 214, 12, 244, 20, 236, 24, 15, 132,
+ 5, 228, 200, 214, 12, 244, 20, 236, 23, 15, 132, 5, 228, 200, 214, 12,
+ 244, 20, 236, 22, 15, 132, 5, 228, 200, 214, 12, 244, 20, 236, 25, 61,
+ 15, 132, 5, 113, 253, 232, 216, 239, 15, 132, 5, 134, 253, 232, 216, 239,
+ 15, 132, 5, 244, 11, 253, 232, 216, 239, 15, 132, 5, 244, 81, 253, 232,
+ 216, 239, 15, 132, 5, 219, 125, 253, 232, 216, 239, 15, 132, 5, 123, 252,
+ 150, 15, 132, 5, 113, 252, 150, 15, 132, 5, 134, 252, 150, 15, 132, 5,
+ 244, 11, 252, 150, 15, 132, 5, 244, 11, 252, 151, 214, 12, 17, 15, 132,
+ 5, 244, 81, 252, 150, 15, 132, 5, 244, 81, 252, 151, 214, 12, 17, 15,
+ 132, 5, 228, 210, 15, 132, 5, 228, 211, 15, 132, 5, 123, 245, 70, 15,
+ 132, 5, 113, 245, 70, 15, 132, 5, 123, 216, 169, 247, 187, 15, 132, 5,
+ 113, 216, 167, 247, 187, 15, 132, 5, 244, 81, 219, 114, 247, 187, 15,
+ 132, 5, 123, 216, 169, 214, 12, 244, 20, 61, 15, 132, 5, 113, 216, 167,
+ 214, 12, 244, 20, 61, 15, 132, 5, 123, 245, 189, 253, 231, 15, 132, 5,
+ 123, 224, 22, 253, 231, 15, 132, 5, 55, 253, 219, 123, 219, 115, 15, 132,
+ 5, 55, 253, 219, 123, 224, 21, 15, 224, 141, 5, 55, 253, 219, 211, 209,
+ 247, 172, 15, 224, 141, 5, 67, 249, 226, 15, 224, 141, 5, 247, 255, 249,
+ 226, 15, 224, 141, 5, 247, 255, 215, 221, 12, 13, 255, 155, 12, 13, 255,
+ 154, 12, 13, 255, 153, 12, 13, 255, 152, 12, 13, 255, 151, 12, 13, 255,
+ 150, 12, 13, 255, 149, 12, 13, 255, 148, 12, 13, 255, 147, 12, 13, 255,
+ 146, 12, 13, 255, 145, 12, 13, 255, 144, 12, 13, 255, 143, 12, 13, 255,
+ 142, 12, 13, 255, 141, 12, 13, 255, 140, 12, 13, 255, 139, 12, 13, 255,
+ 138, 12, 13, 255, 137, 12, 13, 255, 136, 12, 13, 255, 135, 12, 13, 255,
+ 134, 12, 13, 255, 133, 12, 13, 255, 132, 12, 13, 255, 131, 12, 13, 255,
+ 130, 12, 13, 255, 129, 12, 13, 255, 128, 12, 13, 255, 127, 12, 13, 255,
+ 126, 12, 13, 255, 125, 12, 13, 255, 124, 12, 13, 255, 123, 12, 13, 255,
+ 122, 12, 13, 255, 121, 12, 13, 255, 120, 12, 13, 255, 119, 12, 13, 255,
+ 118, 12, 13, 255, 117, 12, 13, 255, 116, 12, 13, 255, 115, 12, 13, 255,
+ 114, 12, 13, 255, 113, 12, 13, 255, 112, 12, 13, 255, 111, 12, 13, 255,
+ 110, 12, 13, 255, 109, 12, 13, 255, 108, 12, 13, 255, 107, 12, 13, 255,
+ 106, 12, 13, 255, 105, 12, 13, 255, 104, 12, 13, 255, 103, 12, 13, 255,
+ 102, 12, 13, 255, 101, 12, 13, 255, 100, 12, 13, 255, 99, 12, 13, 255,
+ 98, 12, 13, 255, 97, 12, 13, 255, 96, 12, 13, 255, 95, 12, 13, 255, 94,
+ 12, 13, 255, 93, 12, 13, 255, 92, 12, 13, 255, 91, 12, 13, 255, 90, 12,
+ 13, 255, 89, 12, 13, 255, 88, 12, 13, 255, 87, 12, 13, 255, 86, 12, 13,
+ 255, 85, 12, 13, 255, 84, 12, 13, 255, 83, 12, 13, 255, 82, 12, 13, 255,
+ 81, 12, 13, 255, 80, 12, 13, 255, 79, 12, 13, 255, 78, 12, 13, 255, 77,
+ 12, 13, 255, 76, 12, 13, 253, 156, 12, 13, 253, 154, 12, 13, 253, 152,
+ 12, 13, 253, 150, 12, 13, 253, 148, 12, 13, 253, 147, 12, 13, 253, 145,
+ 12, 13, 253, 143, 12, 13, 253, 141, 12, 13, 253, 139, 12, 13, 251, 62,
+ 12, 13, 251, 61, 12, 13, 251, 60, 12, 13, 251, 59, 12, 13, 251, 58, 12,
+ 13, 251, 57, 12, 13, 251, 56, 12, 13, 251, 55, 12, 13, 251, 54, 12, 13,
+ 251, 53, 12, 13, 251, 52, 12, 13, 251, 51, 12, 13, 251, 50, 12, 13, 251,
+ 49, 12, 13, 251, 48, 12, 13, 251, 47, 12, 13, 251, 46, 12, 13, 251, 45,
+ 12, 13, 251, 44, 12, 13, 251, 43, 12, 13, 251, 42, 12, 13, 251, 41, 12,
+ 13, 251, 40, 12, 13, 251, 39, 12, 13, 251, 38, 12, 13, 251, 37, 12, 13,
+ 251, 36, 12, 13, 251, 35, 12, 13, 249, 59, 12, 13, 249, 58, 12, 13, 249,
+ 57, 12, 13, 249, 56, 12, 13, 249, 55, 12, 13, 249, 54, 12, 13, 249, 53,
+ 12, 13, 249, 52, 12, 13, 249, 51, 12, 13, 249, 50, 12, 13, 249, 49, 12,
+ 13, 249, 48, 12, 13, 249, 47, 12, 13, 249, 46, 12, 13, 249, 45, 12, 13,
+ 249, 44, 12, 13, 249, 43, 12, 13, 249, 42, 12, 13, 249, 41, 12, 13, 249,
+ 40, 12, 13, 249, 39, 12, 13, 249, 38, 12, 13, 249, 37, 12, 13, 249, 36,
+ 12, 13, 249, 35, 12, 13, 249, 34, 12, 13, 249, 33, 12, 13, 249, 32, 12,
+ 13, 249, 31, 12, 13, 249, 30, 12, 13, 249, 29, 12, 13, 249, 28, 12, 13,
+ 249, 27, 12, 13, 249, 26, 12, 13, 249, 25, 12, 13, 249, 24, 12, 13, 249,
+ 23, 12, 13, 249, 22, 12, 13, 249, 21, 12, 13, 249, 20, 12, 13, 249, 19,
+ 12, 13, 249, 18, 12, 13, 249, 17, 12, 13, 249, 16, 12, 13, 249, 15, 12,
+ 13, 249, 14, 12, 13, 249, 13, 12, 13, 249, 12, 12, 13, 249, 11, 12, 13,
+ 249, 10, 12, 13, 249, 9, 12, 13, 249, 8, 12, 13, 249, 7, 12, 13, 249, 6,
+ 12, 13, 249, 5, 12, 13, 249, 4, 12, 13, 249, 3, 12, 13, 249, 2, 12, 13,
+ 249, 1, 12, 13, 249, 0, 12, 13, 248, 255, 12, 13, 248, 254, 12, 13, 248,
+ 253, 12, 13, 248, 252, 12, 13, 248, 251, 12, 13, 248, 250, 12, 13, 248,
+ 249, 12, 13, 248, 248, 12, 13, 248, 247, 12, 13, 248, 246, 12, 13, 248,
+ 245, 12, 13, 248, 244, 12, 13, 248, 243, 12, 13, 248, 242, 12, 13, 248,
+ 241, 12, 13, 248, 240, 12, 13, 248, 239, 12, 13, 248, 238, 12, 13, 248,
+ 237, 12, 13, 248, 236, 12, 13, 248, 235, 12, 13, 248, 234, 12, 13, 248,
+ 233, 12, 13, 248, 232, 12, 13, 248, 231, 12, 13, 248, 230, 12, 13, 248,
+ 229, 12, 13, 248, 228, 12, 13, 248, 227, 12, 13, 248, 226, 12, 13, 248,
+ 225, 12, 13, 248, 224, 12, 13, 246, 23, 12, 13, 246, 22, 12, 13, 246, 21,
+ 12, 13, 246, 20, 12, 13, 246, 19, 12, 13, 246, 18, 12, 13, 246, 17, 12,
+ 13, 246, 16, 12, 13, 246, 15, 12, 13, 246, 14, 12, 13, 246, 13, 12, 13,
+ 246, 12, 12, 13, 246, 11, 12, 13, 246, 10, 12, 13, 246, 9, 12, 13, 246,
+ 8, 12, 13, 246, 7, 12, 13, 246, 6, 12, 13, 246, 5, 12, 13, 246, 4, 12,
+ 13, 246, 3, 12, 13, 246, 2, 12, 13, 246, 1, 12, 13, 246, 0, 12, 13, 245,
+ 255, 12, 13, 245, 254, 12, 13, 245, 253, 12, 13, 245, 252, 12, 13, 245,
+ 251, 12, 13, 245, 250, 12, 13, 245, 249, 12, 13, 245, 248, 12, 13, 245,
+ 247, 12, 13, 245, 246, 12, 13, 245, 245, 12, 13, 245, 244, 12, 13, 245,
+ 243, 12, 13, 245, 242, 12, 13, 245, 241, 12, 13, 245, 240, 12, 13, 245,
+ 239, 12, 13, 245, 238, 12, 13, 245, 237, 12, 13, 245, 236, 12, 13, 245,
+ 5, 12, 13, 245, 4, 12, 13, 245, 3, 12, 13, 245, 2, 12, 13, 245, 1, 12,
+ 13, 245, 0, 12, 13, 244, 255, 12, 13, 244, 254, 12, 13, 244, 253, 12, 13,
+ 244, 252, 12, 13, 244, 251, 12, 13, 244, 250, 12, 13, 244, 249, 12, 13,
+ 244, 248, 12, 13, 244, 247, 12, 13, 244, 246, 12, 13, 244, 245, 12, 13,
+ 244, 244, 12, 13, 244, 243, 12, 13, 244, 242, 12, 13, 244, 241, 12, 13,
+ 244, 240, 12, 13, 244, 239, 12, 13, 244, 238, 12, 13, 244, 237, 12, 13,
+ 244, 236, 12, 13, 244, 235, 12, 13, 244, 234, 12, 13, 244, 233, 12, 13,
+ 244, 232, 12, 13, 244, 231, 12, 13, 244, 230, 12, 13, 244, 229, 12, 13,
+ 244, 228, 12, 13, 244, 227, 12, 13, 244, 226, 12, 13, 244, 225, 12, 13,
+ 244, 224, 12, 13, 244, 223, 12, 13, 244, 222, 12, 13, 244, 221, 12, 13,
+ 244, 220, 12, 13, 244, 219, 12, 13, 244, 218, 12, 13, 244, 217, 12, 13,
+ 244, 216, 12, 13, 244, 215, 12, 13, 244, 214, 12, 13, 244, 213, 12, 13,
+ 244, 212, 12, 13, 244, 211, 12, 13, 244, 210, 12, 13, 244, 209, 12, 13,
+ 244, 208, 12, 13, 244, 207, 12, 13, 244, 206, 12, 13, 244, 205, 12, 13,
+ 244, 204, 12, 13, 244, 203, 12, 13, 244, 202, 12, 13, 244, 201, 12, 13,
+ 244, 200, 12, 13, 244, 199, 12, 13, 244, 198, 12, 13, 244, 197, 12, 13,
+ 243, 201, 12, 13, 243, 200, 12, 13, 243, 199, 12, 13, 243, 198, 12, 13,
+ 243, 197, 12, 13, 243, 196, 12, 13, 243, 195, 12, 13, 243, 194, 12, 13,
+ 243, 193, 12, 13, 243, 192, 12, 13, 243, 191, 12, 13, 243, 190, 12, 13,
+ 243, 189, 12, 13, 243, 188, 12, 13, 243, 187, 12, 13, 243, 186, 12, 13,
+ 243, 185, 12, 13, 243, 184, 12, 13, 243, 183, 12, 13, 243, 182, 12, 13,
+ 243, 181, 12, 13, 243, 180, 12, 13, 243, 179, 12, 13, 243, 178, 12, 13,
+ 243, 177, 12, 13, 243, 176, 12, 13, 243, 175, 12, 13, 243, 174, 12, 13,
+ 243, 173, 12, 13, 243, 172, 12, 13, 243, 171, 12, 13, 243, 170, 12, 13,
+ 243, 169, 12, 13, 243, 168, 12, 13, 243, 167, 12, 13, 243, 166, 12, 13,
+ 243, 165, 12, 13, 243, 164, 12, 13, 243, 163, 12, 13, 243, 162, 12, 13,
+ 243, 161, 12, 13, 243, 160, 12, 13, 243, 159, 12, 13, 243, 158, 12, 13,
+ 243, 157, 12, 13, 243, 156, 12, 13, 243, 155, 12, 13, 243, 154, 12, 13,
+ 243, 153, 12, 13, 243, 152, 12, 13, 243, 151, 12, 13, 243, 150, 12, 13,
+ 243, 149, 12, 13, 243, 148, 12, 13, 243, 147, 12, 13, 243, 146, 12, 13,
+ 243, 145, 12, 13, 243, 144, 12, 13, 243, 143, 12, 13, 243, 142, 12, 13,
+ 243, 141, 12, 13, 243, 140, 12, 13, 243, 139, 12, 13, 243, 138, 12, 13,
+ 242, 58, 12, 13, 242, 57, 12, 13, 242, 56, 12, 13, 242, 55, 12, 13, 242,
+ 54, 12, 13, 242, 53, 12, 13, 242, 52, 12, 13, 242, 51, 12, 13, 242, 50,
+ 12, 13, 240, 138, 12, 13, 240, 137, 12, 13, 240, 136, 12, 13, 240, 135,
+ 12, 13, 240, 134, 12, 13, 240, 133, 12, 13, 240, 132, 12, 13, 240, 131,
+ 12, 13, 240, 130, 12, 13, 240, 129, 12, 13, 240, 128, 12, 13, 240, 127,
+ 12, 13, 240, 126, 12, 13, 240, 125, 12, 13, 240, 124, 12, 13, 240, 123,
+ 12, 13, 240, 122, 12, 13, 240, 121, 12, 13, 240, 120, 12, 13, 235, 22,
+ 12, 13, 235, 21, 12, 13, 235, 20, 12, 13, 235, 19, 12, 13, 235, 18, 12,
+ 13, 235, 17, 12, 13, 235, 16, 12, 13, 235, 15, 12, 13, 233, 146, 12, 13,
+ 233, 145, 12, 13, 233, 144, 12, 13, 233, 143, 12, 13, 233, 142, 12, 13,
+ 233, 141, 12, 13, 233, 140, 12, 13, 233, 139, 12, 13, 233, 138, 12, 13,
+ 233, 137, 12, 13, 232, 49, 12, 13, 232, 48, 12, 13, 232, 47, 12, 13, 232,
+ 46, 12, 13, 232, 45, 12, 13, 232, 44, 12, 13, 232, 43, 12, 13, 232, 42,
+ 12, 13, 232, 41, 12, 13, 232, 40, 12, 13, 232, 39, 12, 13, 232, 38, 12,
+ 13, 232, 37, 12, 13, 232, 36, 12, 13, 232, 35, 12, 13, 232, 34, 12, 13,
+ 232, 33, 12, 13, 232, 32, 12, 13, 232, 31, 12, 13, 232, 30, 12, 13, 232,
+ 29, 12, 13, 232, 28, 12, 13, 232, 27, 12, 13, 232, 26, 12, 13, 232, 25,
+ 12, 13, 232, 24, 12, 13, 232, 23, 12, 13, 232, 22, 12, 13, 232, 21, 12,
+ 13, 232, 20, 12, 13, 232, 19, 12, 13, 232, 18, 12, 13, 232, 17, 12, 13,
+ 232, 16, 12, 13, 232, 15, 12, 13, 232, 14, 12, 13, 232, 13, 12, 13, 232,
+ 12, 12, 13, 232, 11, 12, 13, 232, 10, 12, 13, 232, 9, 12, 13, 232, 8, 12,
+ 13, 232, 7, 12, 13, 232, 6, 12, 13, 232, 5, 12, 13, 232, 4, 12, 13, 232,
+ 3, 12, 13, 232, 2, 12, 13, 232, 1, 12, 13, 232, 0, 12, 13, 231, 255, 12,
+ 13, 231, 254, 12, 13, 231, 253, 12, 13, 231, 252, 12, 13, 231, 251, 12,
+ 13, 231, 250, 12, 13, 231, 249, 12, 13, 231, 248, 12, 13, 231, 247, 12,
+ 13, 231, 246, 12, 13, 231, 245, 12, 13, 231, 244, 12, 13, 231, 243, 12,
+ 13, 231, 242, 12, 13, 231, 241, 12, 13, 231, 240, 12, 13, 230, 22, 12,
+ 13, 230, 21, 12, 13, 230, 20, 12, 13, 230, 19, 12, 13, 230, 18, 12, 13,
+ 230, 17, 12, 13, 230, 16, 12, 13, 230, 15, 12, 13, 230, 14, 12, 13, 230,
+ 13, 12, 13, 230, 12, 12, 13, 230, 11, 12, 13, 230, 10, 12, 13, 230, 9,
+ 12, 13, 230, 8, 12, 13, 230, 7, 12, 13, 230, 6, 12, 13, 230, 5, 12, 13,
+ 230, 4, 12, 13, 230, 3, 12, 13, 230, 2, 12, 13, 230, 1, 12, 13, 230, 0,
+ 12, 13, 229, 255, 12, 13, 229, 254, 12, 13, 229, 253, 12, 13, 229, 252,
+ 12, 13, 229, 251, 12, 13, 229, 250, 12, 13, 229, 249, 12, 13, 229, 248,
+ 12, 13, 229, 247, 12, 13, 229, 246, 12, 13, 229, 245, 12, 13, 229, 244,
+ 12, 13, 229, 243, 12, 13, 229, 242, 12, 13, 229, 241, 12, 13, 229, 240,
+ 12, 13, 229, 239, 12, 13, 229, 238, 12, 13, 229, 237, 12, 13, 229, 236,
+ 12, 13, 229, 235, 12, 13, 229, 234, 12, 13, 229, 233, 12, 13, 229, 232,
+ 12, 13, 229, 231, 12, 13, 229, 230, 12, 13, 228, 134, 12, 13, 228, 133,
+ 12, 13, 228, 132, 12, 13, 228, 131, 12, 13, 228, 130, 12, 13, 228, 129,
+ 12, 13, 228, 128, 12, 13, 228, 127, 12, 13, 228, 126, 12, 13, 228, 125,
+ 12, 13, 228, 124, 12, 13, 228, 123, 12, 13, 228, 122, 12, 13, 228, 121,
+ 12, 13, 228, 120, 12, 13, 228, 119, 12, 13, 228, 118, 12, 13, 228, 117,
+ 12, 13, 228, 116, 12, 13, 228, 115, 12, 13, 228, 114, 12, 13, 228, 113,
+ 12, 13, 227, 236, 12, 13, 227, 235, 12, 13, 227, 234, 12, 13, 227, 233,
+ 12, 13, 227, 232, 12, 13, 227, 231, 12, 13, 227, 230, 12, 13, 227, 229,
+ 12, 13, 227, 228, 12, 13, 227, 227, 12, 13, 227, 226, 12, 13, 227, 225,
+ 12, 13, 227, 224, 12, 13, 227, 223, 12, 13, 227, 222, 12, 13, 227, 221,
+ 12, 13, 227, 220, 12, 13, 227, 219, 12, 13, 227, 218, 12, 13, 227, 217,
+ 12, 13, 227, 216, 12, 13, 227, 215, 12, 13, 227, 214, 12, 13, 227, 213,
+ 12, 13, 227, 212, 12, 13, 227, 211, 12, 13, 227, 76, 12, 13, 227, 75, 12,
+ 13, 227, 74, 12, 13, 227, 73, 12, 13, 227, 72, 12, 13, 227, 71, 12, 13,
+ 227, 70, 12, 13, 227, 69, 12, 13, 227, 68, 12, 13, 227, 67, 12, 13, 227,
+ 66, 12, 13, 227, 65, 12, 13, 227, 64, 12, 13, 227, 63, 12, 13, 227, 62,
+ 12, 13, 227, 61, 12, 13, 227, 60, 12, 13, 227, 59, 12, 13, 227, 58, 12,
+ 13, 227, 57, 12, 13, 227, 56, 12, 13, 227, 55, 12, 13, 227, 54, 12, 13,
+ 227, 53, 12, 13, 227, 52, 12, 13, 227, 51, 12, 13, 227, 50, 12, 13, 227,
+ 49, 12, 13, 227, 48, 12, 13, 227, 47, 12, 13, 227, 46, 12, 13, 227, 45,
+ 12, 13, 227, 44, 12, 13, 227, 43, 12, 13, 227, 42, 12, 13, 227, 41, 12,
+ 13, 227, 40, 12, 13, 227, 39, 12, 13, 227, 38, 12, 13, 227, 37, 12, 13,
+ 227, 36, 12, 13, 227, 35, 12, 13, 227, 34, 12, 13, 227, 33, 12, 13, 227,
+ 32, 12, 13, 227, 31, 12, 13, 227, 30, 12, 13, 227, 29, 12, 13, 227, 28,
+ 12, 13, 227, 27, 12, 13, 227, 26, 12, 13, 227, 25, 12, 13, 227, 24, 12,
+ 13, 227, 23, 12, 13, 227, 22, 12, 13, 227, 21, 12, 13, 227, 20, 12, 13,
+ 227, 19, 12, 13, 227, 18, 12, 13, 227, 17, 12, 13, 227, 16, 12, 13, 227,
+ 15, 12, 13, 227, 14, 12, 13, 227, 13, 12, 13, 227, 12, 12, 13, 227, 11,
+ 12, 13, 227, 10, 12, 13, 227, 9, 12, 13, 227, 8, 12, 13, 227, 7, 12, 13,
+ 227, 6, 12, 13, 227, 5, 12, 13, 227, 4, 12, 13, 227, 3, 12, 13, 227, 2,
+ 12, 13, 226, 104, 12, 13, 226, 103, 12, 13, 226, 102, 12, 13, 226, 101,
+ 12, 13, 226, 100, 12, 13, 226, 99, 12, 13, 226, 98, 12, 13, 226, 97, 12,
+ 13, 226, 96, 12, 13, 226, 95, 12, 13, 226, 94, 12, 13, 226, 93, 12, 13,
+ 226, 92, 12, 13, 224, 95, 12, 13, 224, 94, 12, 13, 224, 93, 12, 13, 224,
+ 92, 12, 13, 224, 91, 12, 13, 224, 90, 12, 13, 224, 89, 12, 13, 223, 222,
+ 12, 13, 223, 221, 12, 13, 223, 220, 12, 13, 223, 219, 12, 13, 223, 218,
+ 12, 13, 223, 217, 12, 13, 223, 216, 12, 13, 223, 215, 12, 13, 223, 214,
+ 12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 12, 13, 223, 210,
+ 12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 12, 13, 223, 206,
+ 12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 12, 13, 223, 202,
+ 12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 12, 13, 223, 198,
+ 12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 12, 13, 223, 194,
+ 12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 223, 191, 12, 13, 223, 190,
+ 12, 13, 223, 189, 12, 13, 222, 88, 12, 13, 222, 87, 12, 13, 222, 86, 12,
+ 13, 222, 85, 12, 13, 222, 84, 12, 13, 222, 83, 12, 13, 222, 82, 12, 13,
+ 222, 81, 12, 13, 222, 80, 12, 13, 222, 79, 12, 13, 222, 78, 12, 13, 222,
+ 77, 12, 13, 222, 76, 12, 13, 222, 75, 12, 13, 222, 74, 12, 13, 222, 73,
+ 12, 13, 222, 72, 12, 13, 222, 71, 12, 13, 222, 70, 12, 13, 222, 69, 12,
+ 13, 222, 68, 12, 13, 222, 67, 12, 13, 222, 66, 12, 13, 222, 65, 12, 13,
+ 222, 64, 12, 13, 222, 63, 12, 13, 222, 62, 12, 13, 222, 61, 12, 13, 222,
+ 60, 12, 13, 222, 59, 12, 13, 222, 58, 12, 13, 222, 57, 12, 13, 222, 56,
+ 12, 13, 222, 55, 12, 13, 222, 54, 12, 13, 222, 53, 12, 13, 222, 52, 12,
+ 13, 222, 51, 12, 13, 222, 50, 12, 13, 222, 49, 12, 13, 222, 48, 12, 13,
+ 222, 47, 12, 13, 222, 46, 12, 13, 222, 45, 12, 13, 222, 44, 12, 13, 222,
+ 43, 12, 13, 222, 42, 12, 13, 222, 41, 12, 13, 222, 40, 12, 13, 222, 39,
+ 12, 13, 222, 38, 12, 13, 222, 37, 12, 13, 222, 36, 12, 13, 222, 35, 12,
+ 13, 217, 150, 12, 13, 217, 149, 12, 13, 217, 148, 12, 13, 217, 147, 12,
+ 13, 217, 146, 12, 13, 217, 145, 12, 13, 217, 144, 12, 13, 217, 143, 12,
+ 13, 217, 142, 12, 13, 217, 141, 12, 13, 217, 140, 12, 13, 217, 139, 12,
+ 13, 217, 138, 12, 13, 217, 137, 12, 13, 217, 136, 12, 13, 217, 135, 12,
+ 13, 217, 134, 12, 13, 217, 133, 12, 13, 217, 132, 12, 13, 217, 131, 12,
+ 13, 217, 130, 12, 13, 217, 129, 12, 13, 217, 128, 12, 13, 217, 127, 12,
+ 13, 217, 126, 12, 13, 217, 125, 12, 13, 217, 124, 12, 13, 217, 123, 12,
+ 13, 217, 122, 12, 13, 217, 121, 12, 13, 217, 120, 12, 13, 217, 119, 12,
+ 13, 217, 118, 12, 13, 217, 117, 12, 13, 217, 116, 12, 13, 217, 115, 12,
+ 13, 217, 114, 12, 13, 217, 113, 12, 13, 217, 112, 12, 13, 217, 111, 12,
+ 13, 217, 110, 12, 13, 217, 109, 12, 13, 217, 108, 12, 13, 217, 107, 12,
+ 13, 215, 22, 12, 13, 215, 21, 12, 13, 215, 20, 12, 13, 215, 19, 12, 13,
+ 215, 18, 12, 13, 215, 17, 12, 13, 215, 16, 12, 13, 215, 15, 12, 13, 215,
+ 14, 12, 13, 215, 13, 12, 13, 215, 12, 12, 13, 215, 11, 12, 13, 215, 10,
+ 12, 13, 215, 9, 12, 13, 215, 8, 12, 13, 215, 7, 12, 13, 215, 6, 12, 13,
+ 215, 5, 12, 13, 215, 4, 12, 13, 215, 3, 12, 13, 215, 2, 12, 13, 215, 1,
+ 12, 13, 215, 0, 12, 13, 214, 255, 12, 13, 214, 254, 12, 13, 214, 253, 12,
+ 13, 214, 252, 12, 13, 214, 251, 12, 13, 214, 250, 12, 13, 214, 249, 12,
+ 13, 214, 248, 12, 13, 214, 247, 12, 13, 214, 246, 12, 13, 214, 245, 12,
+ 13, 214, 244, 12, 13, 214, 243, 12, 13, 214, 242, 12, 13, 214, 241, 12,
+ 13, 214, 240, 12, 13, 214, 239, 12, 13, 214, 238, 12, 13, 214, 237, 12,
+ 13, 214, 236, 12, 13, 214, 235, 12, 13, 214, 234, 12, 13, 214, 233, 12,
+ 13, 214, 232, 12, 13, 214, 104, 12, 13, 214, 103, 12, 13, 214, 102, 12,
+ 13, 214, 101, 12, 13, 214, 100, 12, 13, 214, 99, 12, 13, 214, 98, 12, 13,
+ 214, 97, 12, 13, 214, 96, 12, 13, 214, 95, 12, 13, 214, 94, 12, 13, 214,
+ 93, 12, 13, 214, 92, 12, 13, 214, 91, 12, 13, 214, 90, 12, 13, 214, 89,
+ 12, 13, 214, 88, 12, 13, 214, 87, 12, 13, 214, 86, 12, 13, 214, 85, 12,
+ 13, 214, 84, 12, 13, 214, 83, 12, 13, 214, 82, 12, 13, 214, 81, 12, 13,
+ 214, 80, 12, 13, 214, 79, 12, 13, 214, 78, 12, 13, 214, 77, 12, 13, 214,
+ 76, 12, 13, 214, 75, 12, 13, 214, 74, 12, 13, 214, 73, 12, 13, 214, 72,
+ 12, 13, 214, 71, 12, 13, 214, 70, 12, 13, 214, 69, 12, 13, 214, 68, 12,
+ 13, 214, 67, 12, 13, 214, 66, 12, 13, 214, 65, 12, 13, 214, 64, 12, 13,
+ 214, 63, 12, 13, 214, 62, 12, 13, 214, 61, 12, 13, 214, 60, 12, 13, 214,
+ 59, 12, 13, 214, 58, 12, 13, 214, 57, 12, 13, 214, 56, 12, 13, 214, 55,
+ 12, 13, 214, 54, 12, 13, 214, 53, 12, 13, 214, 52, 12, 13, 214, 51, 12,
+ 13, 214, 50, 12, 13, 214, 49, 12, 13, 214, 48, 12, 13, 214, 47, 12, 13,
+ 214, 46, 12, 13, 214, 45, 12, 13, 214, 44, 12, 13, 214, 43, 12, 13, 214,
+ 42, 12, 13, 214, 41, 12, 13, 214, 40, 12, 13, 214, 39, 12, 13, 214, 38,
+ 12, 13, 214, 37, 12, 13, 214, 36, 12, 13, 214, 35, 12, 13, 214, 34, 12,
+ 13, 214, 33, 12, 13, 214, 32, 12, 13, 214, 31, 12, 13, 214, 30, 12, 13,
+ 214, 29, 12, 13, 214, 28, 12, 13, 212, 97, 12, 13, 212, 96, 12, 13, 212,
+ 95, 12, 13, 212, 94, 12, 13, 212, 93, 12, 13, 212, 92, 12, 13, 212, 91,
+ 12, 13, 212, 90, 12, 13, 212, 89, 12, 13, 212, 88, 12, 13, 212, 87, 12,
+ 13, 212, 86, 12, 13, 212, 85, 12, 13, 212, 84, 12, 13, 212, 83, 12, 13,
+ 212, 82, 12, 13, 212, 81, 12, 13, 212, 80, 12, 13, 212, 79, 12, 13, 212,
+ 78, 12, 13, 212, 77, 12, 13, 212, 76, 12, 13, 212, 75, 12, 13, 212, 74,
+ 12, 13, 212, 73, 12, 13, 212, 72, 12, 13, 212, 71, 12, 13, 212, 70, 12,
+ 13, 212, 69, 12, 13, 212, 68, 12, 13, 212, 67, 12, 13, 212, 66, 12, 13,
+ 211, 177, 12, 13, 211, 176, 12, 13, 211, 175, 12, 13, 211, 174, 12, 13,
+ 211, 173, 12, 13, 211, 172, 12, 13, 211, 171, 12, 13, 211, 170, 12, 13,
+ 211, 169, 12, 13, 211, 168, 12, 13, 211, 167, 12, 13, 211, 166, 12, 13,
+ 211, 115, 12, 13, 211, 114, 12, 13, 211, 113, 12, 13, 211, 112, 12, 13,
+ 211, 111, 12, 13, 211, 110, 12, 13, 211, 109, 12, 13, 211, 108, 12, 13,
+ 211, 107, 12, 13, 210, 158, 12, 13, 210, 157, 12, 13, 210, 156, 12, 13,
+ 210, 155, 12, 13, 210, 154, 12, 13, 210, 153, 12, 13, 210, 152, 12, 13,
+ 210, 151, 12, 13, 210, 150, 12, 13, 210, 149, 12, 13, 210, 148, 12, 13,
+ 210, 147, 12, 13, 210, 146, 12, 13, 210, 145, 12, 13, 210, 144, 12, 13,
+ 210, 143, 12, 13, 210, 142, 12, 13, 210, 141, 12, 13, 210, 140, 12, 13,
+ 210, 139, 12, 13, 210, 138, 12, 13, 210, 137, 12, 13, 210, 136, 12, 13,
+ 210, 135, 12, 13, 210, 134, 12, 13, 210, 133, 12, 13, 210, 132, 12, 13,
+ 210, 131, 12, 13, 210, 130, 12, 13, 210, 129, 12, 13, 210, 128, 12, 13,
+ 210, 127, 12, 13, 210, 126, 12, 13, 210, 125, 12, 13, 210, 124, 12, 13,
+ 210, 123, 12, 13, 210, 122, 12, 13, 210, 121, 12, 13, 210, 120, 12, 13,
+ 210, 119, 12, 13, 210, 118, 12, 13, 255, 72, 12, 13, 255, 71, 12, 13,
+ 255, 70, 12, 13, 255, 69, 12, 13, 255, 68, 12, 13, 255, 67, 12, 13, 255,
+ 66, 12, 13, 255, 65, 12, 13, 255, 64, 12, 13, 255, 63, 12, 13, 255, 62,
+ 12, 13, 255, 61, 12, 13, 255, 60, 12, 13, 255, 59, 12, 13, 255, 58, 12,
+ 13, 255, 57, 12, 13, 255, 56, 12, 13, 255, 55, 12, 13, 255, 54, 12, 13,
+ 255, 53, 12, 13, 255, 52, 12, 13, 255, 51, 12, 13, 255, 50, 12, 13, 255,
+ 49, 12, 13, 255, 48, 12, 13, 255, 47, 12, 13, 255, 46, 12, 13, 255, 45,
+ 12, 13, 255, 44, 12, 13, 255, 43, 12, 13, 255, 42, 12, 13, 255, 41, 12,
+ 13, 255, 40, 12, 13, 255, 39, 20, 1, 167, 229, 12, 231, 16, 20, 1, 167,
+ 243, 70, 244, 36, 20, 1, 167, 224, 251, 231, 17, 225, 57, 20, 1, 167,
+ 224, 251, 231, 17, 225, 58, 20, 1, 167, 229, 226, 231, 16, 20, 1, 167,
+ 219, 221, 20, 1, 167, 216, 66, 231, 16, 20, 1, 167, 227, 118, 231, 16,
+ 20, 1, 167, 220, 19, 226, 90, 228, 169, 20, 1, 167, 224, 251, 226, 90,
+ 228, 170, 225, 57, 20, 1, 167, 224, 251, 226, 90, 228, 170, 225, 58, 20,
+ 1, 167, 231, 218, 20, 1, 167, 215, 119, 231, 219, 20, 1, 167, 229, 71,
+ 20, 1, 167, 231, 215, 20, 1, 167, 231, 176, 20, 1, 167, 230, 48, 20, 1,
+ 167, 220, 124, 20, 1, 167, 227, 241, 20, 1, 167, 234, 149, 20, 1, 167,
+ 228, 138, 20, 1, 167, 218, 4, 20, 1, 167, 229, 11, 20, 1, 167, 233, 87,
+ 20, 1, 167, 233, 12, 233, 189, 20, 1, 167, 227, 248, 231, 24, 20, 1, 167,
+ 231, 222, 20, 1, 167, 225, 246, 20, 1, 167, 242, 231, 20, 1, 167, 226,
+ 50, 20, 1, 167, 230, 151, 229, 45, 20, 1, 167, 227, 99, 231, 27, 20, 1,
+ 167, 104, 210, 188, 229, 220, 20, 1, 167, 242, 232, 20, 1, 167, 227, 248,
+ 227, 249, 20, 1, 167, 219, 128, 20, 1, 167, 231, 9, 20, 1, 167, 231, 30,
+ 20, 1, 167, 230, 130, 20, 1, 167, 234, 249, 20, 1, 167, 226, 90, 233, 47,
+ 20, 1, 167, 229, 149, 233, 47, 20, 1, 167, 225, 158, 20, 1, 167, 231,
+ 216, 20, 1, 167, 228, 207, 20, 1, 167, 224, 134, 20, 1, 167, 215, 116,
+ 20, 1, 167, 232, 94, 20, 1, 167, 219, 41, 20, 1, 167, 216, 216, 20, 1,
+ 167, 231, 213, 20, 1, 167, 234, 156, 20, 1, 167, 229, 145, 20, 1, 167,
+ 233, 201, 20, 1, 167, 230, 131, 20, 1, 167, 219, 218, 20, 1, 167, 232,
+ 138, 20, 1, 167, 244, 93, 20, 1, 167, 222, 199, 20, 1, 167, 233, 241, 20,
+ 1, 167, 219, 37, 20, 1, 167, 231, 173, 225, 99, 20, 1, 167, 220, 12, 20,
+ 1, 167, 227, 247, 20, 1, 167, 219, 253, 228, 2, 210, 196, 20, 1, 167,
+ 227, 138, 230, 148, 20, 1, 167, 226, 85, 20, 1, 167, 228, 139, 20, 1,
+ 167, 214, 170, 20, 1, 167, 229, 48, 20, 1, 167, 231, 212, 20, 1, 167,
+ 228, 181, 20, 1, 167, 231, 119, 20, 1, 167, 227, 151, 20, 1, 167, 216,
+ 220, 20, 1, 167, 219, 34, 20, 1, 167, 226, 86, 20, 1, 167, 228, 6, 20, 1,
+ 167, 231, 220, 20, 1, 167, 227, 148, 20, 1, 167, 234, 216, 20, 1, 167,
+ 228, 9, 20, 1, 167, 213, 250, 20, 1, 167, 232, 98, 20, 1, 167, 229, 98,
+ 20, 1, 167, 229, 196, 20, 1, 167, 231, 118, 20, 1, 225, 138, 228, 4, 20,
+ 1, 225, 138, 215, 119, 231, 217, 20, 1, 225, 138, 219, 185, 20, 1, 225,
+ 138, 220, 128, 215, 118, 20, 1, 225, 138, 232, 140, 227, 244, 20, 1, 225,
+ 138, 231, 125, 231, 221, 20, 1, 225, 138, 234, 87, 20, 1, 225, 138, 211,
+ 15, 20, 1, 225, 138, 231, 120, 20, 1, 225, 138, 234, 237, 20, 1, 225,
+ 138, 225, 208, 20, 1, 225, 138, 211, 89, 233, 47, 20, 1, 225, 138, 233,
+ 103, 228, 2, 227, 160, 20, 1, 225, 138, 227, 242, 220, 38, 20, 1, 225,
+ 138, 229, 116, 228, 184, 20, 1, 225, 138, 242, 229, 20, 1, 225, 138, 225,
+ 49, 20, 1, 225, 138, 215, 119, 228, 0, 20, 1, 225, 138, 220, 43, 228,
+ 179, 20, 1, 225, 138, 220, 39, 20, 1, 225, 138, 231, 17, 216, 219, 20, 1,
+ 225, 138, 231, 107, 231, 121, 20, 1, 225, 138, 227, 149, 227, 244, 20, 1,
+ 225, 138, 234, 145, 20, 1, 225, 138, 242, 230, 20, 1, 225, 138, 234, 141,
+ 20, 1, 225, 138, 233, 129, 20, 1, 225, 138, 225, 249, 20, 1, 225, 138,
+ 213, 182, 20, 1, 225, 138, 229, 13, 230, 46, 20, 1, 225, 138, 229, 47,
+ 231, 103, 20, 1, 225, 138, 211, 193, 20, 1, 225, 138, 222, 11, 20, 1,
+ 225, 138, 217, 97, 20, 1, 225, 138, 231, 29, 20, 1, 225, 138, 229, 32,
+ 20, 1, 225, 138, 229, 33, 233, 84, 20, 1, 225, 138, 231, 19, 20, 1, 225,
+ 138, 218, 52, 20, 1, 225, 138, 231, 111, 20, 1, 225, 138, 230, 133, 20,
+ 1, 225, 138, 227, 163, 20, 1, 225, 138, 224, 138, 20, 1, 225, 138, 231,
+ 28, 229, 49, 20, 1, 225, 138, 244, 126, 20, 1, 225, 138, 231, 98, 20, 1,
+ 225, 138, 244, 147, 20, 1, 225, 138, 234, 153, 20, 1, 225, 138, 231, 239,
+ 228, 173, 20, 1, 225, 138, 231, 239, 228, 149, 20, 1, 225, 138, 233, 11,
+ 20, 1, 225, 138, 229, 55, 20, 1, 225, 138, 228, 11, 20, 1, 225, 138, 184,
+ 20, 1, 225, 138, 234, 74, 20, 1, 225, 138, 229, 1, 20, 1, 137, 229, 12,
+ 231, 219, 20, 1, 137, 227, 117, 20, 1, 137, 210, 196, 20, 1, 137, 212,
+ 53, 20, 1, 137, 229, 48, 20, 1, 137, 229, 137, 20, 1, 137, 229, 19, 20,
+ 1, 137, 242, 239, 20, 1, 137, 231, 115, 20, 1, 137, 243, 77, 20, 1, 137,
+ 227, 140, 230, 170, 231, 31, 20, 1, 137, 227, 240, 231, 106, 20, 1, 137,
+ 231, 112, 20, 1, 137, 225, 55, 20, 1, 137, 229, 122, 20, 1, 137, 231,
+ 123, 251, 29, 20, 1, 137, 234, 143, 20, 1, 137, 242, 240, 20, 1, 137,
+ 234, 150, 20, 1, 137, 210, 213, 230, 76, 20, 1, 137, 227, 111, 20, 1,
+ 137, 231, 100, 20, 1, 137, 228, 10, 20, 1, 137, 231, 106, 20, 1, 137,
+ 211, 16, 20, 1, 137, 233, 249, 20, 1, 137, 235, 10, 20, 1, 137, 220, 123,
+ 20, 1, 137, 229, 131, 20, 1, 137, 217, 95, 20, 1, 137, 228, 153, 20, 1,
+ 137, 216, 66, 210, 198, 20, 1, 137, 218, 79, 20, 1, 137, 229, 39, 227,
+ 160, 20, 1, 137, 213, 181, 20, 1, 137, 229, 199, 20, 1, 137, 231, 239,
+ 234, 152, 20, 1, 137, 227, 249, 20, 1, 137, 229, 34, 20, 1, 137, 233, 88,
+ 20, 1, 137, 231, 108, 20, 1, 137, 231, 8, 20, 1, 137, 227, 243, 20, 1,
+ 137, 216, 215, 20, 1, 137, 229, 36, 20, 1, 137, 243, 233, 20, 1, 137,
+ 229, 136, 20, 1, 137, 228, 12, 20, 1, 137, 228, 8, 20, 1, 137, 251, 107,
+ 20, 1, 137, 213, 183, 20, 1, 137, 231, 113, 20, 1, 137, 222, 140, 20, 1,
+ 137, 228, 183, 20, 1, 137, 233, 102, 20, 1, 137, 216, 64, 20, 1, 137,
+ 227, 250, 229, 1, 20, 1, 137, 228, 175, 20, 1, 137, 234, 156, 20, 1, 137,
+ 229, 40, 20, 1, 137, 231, 212, 20, 1, 137, 231, 101, 20, 1, 137, 232, 98,
+ 20, 1, 137, 233, 189, 20, 1, 137, 228, 181, 20, 1, 137, 229, 1, 20, 1,
+ 137, 211, 184, 20, 1, 137, 229, 37, 20, 1, 137, 227, 253, 20, 1, 137,
+ 227, 245, 20, 1, 137, 233, 203, 228, 139, 20, 1, 137, 227, 251, 20, 1,
+ 137, 229, 144, 20, 1, 137, 231, 239, 228, 0, 20, 1, 137, 211, 103, 20, 1,
+ 137, 229, 143, 20, 1, 137, 219, 220, 20, 1, 137, 220, 126, 20, 1, 137,
+ 231, 109, 20, 1, 137, 231, 219, 20, 1, 137, 231, 119, 20, 1, 137, 234,
+ 144, 20, 1, 137, 231, 110, 20, 1, 137, 234, 148, 20, 1, 137, 231, 123,
+ 225, 103, 20, 1, 137, 210, 179, 20, 1, 137, 228, 171, 20, 1, 137, 230,
+ 220, 20, 1, 137, 230, 100, 20, 1, 137, 220, 15, 20, 1, 137, 234, 166,
+ 233, 70, 20, 1, 137, 234, 166, 244, 160, 20, 1, 137, 229, 69, 20, 1, 137,
+ 229, 196, 20, 1, 137, 232, 200, 20, 1, 137, 225, 65, 20, 1, 137, 225,
+ 199, 20, 1, 137, 216, 230, 20, 1, 107, 231, 99, 20, 1, 107, 212, 51, 20,
+ 1, 107, 228, 169, 20, 1, 107, 231, 16, 20, 1, 107, 228, 167, 20, 1, 107,
+ 232, 235, 20, 1, 107, 228, 172, 20, 1, 107, 228, 7, 20, 1, 107, 229, 54,
+ 20, 1, 107, 227, 160, 20, 1, 107, 211, 194, 20, 1, 107, 229, 9, 20, 1,
+ 107, 220, 61, 20, 1, 107, 229, 20, 20, 1, 107, 234, 151, 20, 1, 107, 216,
+ 217, 20, 1, 107, 220, 41, 20, 1, 107, 228, 180, 20, 1, 107, 218, 52, 20,
+ 1, 107, 234, 156, 20, 1, 107, 211, 91, 20, 1, 107, 233, 204, 20, 1, 107,
+ 221, 234, 20, 1, 107, 231, 21, 20, 1, 107, 229, 135, 20, 1, 107, 231,
+ 188, 20, 1, 107, 231, 27, 20, 1, 107, 220, 125, 20, 1, 107, 211, 39, 20,
+ 1, 107, 228, 174, 20, 1, 107, 234, 147, 231, 102, 20, 1, 107, 229, 16,
+ 20, 1, 107, 215, 118, 20, 1, 107, 242, 248, 20, 1, 107, 229, 6, 20, 1,
+ 107, 244, 127, 20, 1, 107, 229, 139, 20, 1, 107, 231, 0, 20, 1, 107, 233,
+ 5, 20, 1, 107, 229, 121, 20, 1, 107, 230, 147, 20, 1, 107, 231, 4, 20, 1,
+ 107, 224, 118, 20, 1, 107, 231, 2, 20, 1, 107, 231, 18, 20, 1, 107, 232,
+ 84, 20, 1, 107, 227, 255, 20, 1, 107, 231, 122, 20, 1, 107, 233, 180, 20,
+ 1, 107, 227, 151, 20, 1, 107, 216, 220, 20, 1, 107, 219, 34, 20, 1, 107,
+ 210, 179, 20, 1, 107, 234, 148, 20, 1, 107, 223, 170, 20, 1, 107, 217,
+ 10, 20, 1, 107, 229, 17, 20, 1, 107, 231, 23, 20, 1, 107, 227, 254, 20,
+ 1, 107, 234, 146, 20, 1, 107, 225, 59, 20, 1, 107, 225, 152, 20, 1, 107,
+ 227, 127, 20, 1, 107, 233, 11, 20, 1, 107, 229, 55, 20, 1, 107, 231, 20,
+ 20, 1, 107, 229, 29, 20, 1, 107, 210, 193, 20, 1, 107, 226, 21, 20, 1,
+ 107, 210, 192, 20, 1, 107, 229, 144, 20, 1, 107, 227, 244, 20, 1, 107,
+ 218, 81, 20, 1, 107, 233, 208, 20, 1, 107, 229, 44, 20, 1, 107, 229, 14,
+ 20, 1, 107, 215, 102, 20, 1, 107, 231, 31, 20, 1, 107, 233, 198, 20, 1,
+ 107, 227, 252, 20, 1, 107, 216, 218, 20, 1, 107, 231, 214, 20, 1, 107,
+ 229, 53, 20, 1, 107, 233, 4, 20, 1, 107, 229, 35, 20, 1, 107, 228, 1, 20,
+ 1, 107, 228, 153, 20, 1, 107, 242, 233, 20, 1, 107, 233, 217, 20, 1, 107,
+ 223, 84, 226, 209, 20, 1, 107, 217, 86, 20, 1, 107, 216, 10, 20, 1, 107,
+ 227, 148, 20, 1, 107, 222, 239, 20, 1, 107, 233, 49, 20, 1, 107, 231, 79,
+ 20, 1, 107, 193, 20, 1, 107, 218, 4, 20, 1, 107, 230, 102, 20, 1, 107,
+ 220, 27, 20, 1, 107, 220, 37, 20, 1, 107, 233, 155, 20, 1, 107, 227, 237,
+ 20, 1, 107, 219, 225, 20, 1, 107, 227, 246, 20, 1, 107, 225, 211, 20, 1,
+ 107, 228, 233, 20, 1, 107, 219, 252, 20, 1, 107, 224, 133, 20, 1, 107,
+ 230, 46, 20, 1, 107, 232, 119, 20, 1, 107, 223, 84, 230, 96, 20, 1, 107,
+ 216, 117, 20, 1, 107, 227, 238, 20, 1, 107, 231, 123, 198, 20, 1, 107,
+ 221, 232, 20, 1, 107, 244, 195, 20, 1, 82, 229, 143, 20, 1, 82, 216, 16,
+ 20, 1, 82, 231, 112, 20, 1, 82, 233, 88, 20, 1, 82, 213, 128, 20, 1, 82,
+ 232, 125, 20, 1, 82, 226, 89, 20, 1, 82, 219, 45, 20, 1, 82, 223, 145,
+ 20, 1, 82, 228, 3, 20, 1, 82, 229, 114, 20, 1, 82, 224, 147, 20, 1, 82,
+ 217, 62, 20, 1, 82, 229, 22, 20, 1, 82, 233, 245, 20, 1, 82, 211, 187,
+ 20, 1, 82, 221, 170, 20, 1, 82, 229, 45, 20, 1, 82, 226, 86, 20, 1, 82,
+ 216, 17, 20, 1, 82, 233, 202, 20, 1, 82, 232, 139, 20, 1, 82, 228, 6, 20,
+ 1, 82, 228, 254, 20, 1, 82, 231, 220, 20, 1, 82, 229, 15, 20, 1, 82, 228,
+ 253, 20, 1, 82, 228, 5, 20, 1, 82, 222, 237, 20, 1, 82, 228, 171, 20, 1,
+ 82, 225, 210, 20, 1, 82, 222, 31, 20, 1, 82, 229, 30, 20, 1, 82, 231, 10,
+ 20, 1, 82, 242, 227, 20, 1, 82, 229, 18, 20, 1, 82, 228, 182, 20, 1, 82,
+ 231, 172, 20, 1, 82, 232, 121, 20, 1, 82, 229, 50, 20, 1, 82, 229, 127,
+ 20, 1, 82, 217, 85, 227, 244, 20, 1, 82, 220, 127, 20, 1, 82, 224, 143,
+ 20, 1, 82, 229, 147, 219, 51, 20, 1, 82, 229, 38, 227, 160, 20, 1, 82,
+ 211, 4, 20, 1, 82, 242, 228, 20, 1, 82, 215, 117, 20, 1, 82, 211, 19, 20,
+ 1, 82, 225, 16, 20, 1, 82, 215, 107, 20, 1, 82, 234, 154, 20, 1, 82, 218,
+ 80, 20, 1, 82, 216, 219, 20, 1, 82, 213, 184, 20, 1, 82, 212, 6, 20, 1,
+ 82, 233, 132, 20, 1, 82, 224, 150, 20, 1, 82, 217, 96, 20, 1, 82, 242,
+ 247, 20, 1, 82, 229, 59, 20, 1, 82, 220, 40, 20, 1, 82, 231, 5, 20, 1,
+ 82, 231, 116, 20, 1, 82, 227, 115, 20, 1, 82, 228, 136, 20, 1, 82, 243,
+ 73, 20, 1, 82, 215, 108, 20, 1, 82, 233, 211, 20, 1, 82, 211, 67, 20, 1,
+ 82, 227, 149, 250, 16, 20, 1, 82, 210, 250, 20, 1, 82, 231, 22, 20, 1,
+ 82, 229, 132, 20, 1, 82, 225, 100, 20, 1, 82, 210, 197, 20, 1, 82, 233,
+ 6, 20, 1, 82, 243, 233, 20, 1, 82, 243, 72, 20, 1, 82, 229, 8, 20, 1, 82,
+ 234, 156, 20, 1, 82, 231, 223, 20, 1, 82, 229, 21, 20, 1, 82, 242, 234,
+ 20, 1, 82, 244, 196, 20, 1, 82, 227, 239, 20, 1, 82, 225, 153, 20, 1, 82,
+ 211, 17, 20, 1, 82, 229, 46, 20, 1, 82, 227, 149, 252, 23, 20, 1, 82,
+ 227, 95, 20, 1, 82, 224, 247, 20, 1, 82, 230, 220, 20, 1, 82, 243, 231,
+ 20, 1, 82, 229, 220, 20, 1, 82, 230, 100, 20, 1, 82, 242, 233, 20, 1, 82,
+ 243, 235, 73, 20, 1, 82, 230, 47, 20, 1, 82, 224, 146, 20, 1, 82, 229,
+ 10, 20, 1, 82, 233, 189, 20, 1, 82, 225, 97, 20, 1, 82, 227, 247, 20, 1,
+ 82, 211, 18, 20, 1, 82, 229, 31, 20, 1, 82, 226, 90, 225, 187, 20, 1, 82,
+ 243, 235, 251, 15, 20, 1, 82, 244, 37, 20, 1, 82, 228, 176, 20, 1, 82,
+ 61, 20, 1, 82, 216, 10, 20, 1, 82, 76, 20, 1, 82, 73, 20, 1, 82, 233, 86,
+ 20, 1, 82, 226, 90, 225, 23, 20, 1, 82, 217, 101, 20, 1, 82, 217, 51, 20,
+ 1, 82, 229, 147, 230, 34, 240, 234, 20, 1, 82, 220, 15, 20, 1, 82, 211,
+ 14, 20, 1, 82, 228, 247, 20, 1, 82, 210, 202, 20, 1, 82, 210, 227, 217,
+ 240, 20, 1, 82, 210, 227, 249, 147, 20, 1, 82, 210, 187, 20, 1, 82, 210,
+ 195, 20, 1, 82, 234, 142, 20, 1, 82, 225, 151, 20, 1, 82, 228, 177, 245,
+ 102, 20, 1, 82, 224, 144, 20, 1, 82, 211, 192, 20, 1, 82, 244, 147, 20,
+ 1, 82, 213, 250, 20, 1, 82, 232, 98, 20, 1, 82, 230, 230, 20, 1, 82, 223,
+ 51, 20, 1, 82, 223, 171, 20, 1, 82, 228, 246, 20, 1, 82, 229, 77, 20, 1,
+ 82, 220, 7, 20, 1, 82, 219, 252, 20, 1, 82, 243, 235, 223, 86, 20, 1, 82,
+ 197, 20, 1, 82, 225, 108, 20, 1, 82, 232, 119, 20, 1, 82, 234, 28, 20, 1,
+ 82, 231, 58, 20, 1, 82, 184, 20, 1, 82, 231, 169, 20, 1, 82, 216, 221,
+ 20, 1, 82, 234, 92, 20, 1, 82, 230, 150, 20, 1, 82, 216, 247, 20, 1, 82,
+ 244, 169, 20, 1, 82, 242, 223, 20, 1, 225, 137, 176, 20, 1, 225, 137, 70,
+ 20, 1, 225, 137, 233, 217, 20, 1, 225, 137, 245, 209, 20, 1, 225, 137,
+ 223, 108, 20, 1, 225, 137, 217, 86, 20, 1, 225, 137, 227, 148, 20, 1,
+ 225, 137, 233, 135, 20, 1, 225, 137, 222, 239, 20, 1, 225, 137, 223, 29,
+ 20, 1, 225, 137, 231, 79, 20, 1, 225, 137, 217, 101, 20, 1, 225, 137,
+ 229, 146, 20, 1, 225, 137, 228, 183, 20, 1, 225, 137, 193, 20, 1, 225,
+ 137, 218, 4, 20, 1, 225, 137, 220, 27, 20, 1, 225, 137, 219, 191, 20, 1,
+ 225, 137, 220, 123, 20, 1, 225, 137, 233, 155, 20, 1, 225, 137, 234, 156,
+ 20, 1, 225, 137, 227, 209, 20, 1, 225, 137, 227, 237, 20, 1, 225, 137,
+ 228, 154, 20, 1, 225, 137, 210, 226, 20, 1, 225, 137, 219, 225, 20, 1,
+ 225, 137, 191, 20, 1, 225, 137, 228, 9, 20, 1, 225, 137, 225, 151, 20, 1,
+ 225, 137, 227, 246, 20, 1, 225, 137, 211, 192, 20, 1, 225, 137, 225, 211,
+ 20, 1, 225, 137, 222, 140, 20, 1, 225, 137, 228, 233, 20, 1, 225, 137,
+ 223, 51, 20, 1, 225, 137, 234, 165, 20, 1, 225, 137, 229, 7, 20, 1, 225,
+ 137, 229, 56, 20, 1, 225, 137, 220, 7, 20, 1, 225, 137, 224, 147, 20, 1,
+ 225, 137, 244, 37, 20, 1, 225, 137, 212, 65, 20, 1, 225, 137, 232, 241,
+ 20, 1, 225, 137, 232, 119, 20, 1, 225, 137, 234, 28, 20, 1, 225, 137,
+ 231, 114, 20, 1, 225, 137, 223, 83, 20, 1, 225, 137, 184, 20, 1, 225,
+ 137, 230, 161, 20, 1, 225, 137, 231, 122, 20, 1, 225, 137, 216, 230, 20,
+ 1, 225, 137, 233, 251, 20, 1, 225, 137, 221, 251, 20, 1, 225, 137, 212,
+ 115, 95, 1, 190, 95, 1, 252, 191, 95, 1, 8, 190, 95, 1, 225, 42, 95, 1,
+ 184, 95, 1, 230, 233, 95, 1, 254, 23, 184, 95, 1, 244, 196, 95, 1, 214,
+ 27, 95, 1, 213, 177, 95, 1, 217, 105, 95, 1, 248, 221, 95, 1, 8, 215,
+ 156, 95, 1, 8, 217, 105, 95, 1, 215, 156, 95, 1, 248, 135, 95, 1, 197,
+ 95, 1, 228, 237, 95, 1, 8, 228, 110, 95, 1, 254, 23, 197, 95, 1, 228,
+ 110, 95, 1, 228, 96, 95, 1, 233, 135, 95, 1, 232, 61, 95, 1, 232, 254,
+ 95, 1, 232, 243, 95, 1, 216, 56, 95, 1, 247, 153, 95, 1, 216, 48, 95, 1,
+ 247, 152, 95, 1, 176, 95, 1, 243, 135, 95, 1, 8, 176, 95, 1, 224, 88, 95,
+ 1, 224, 66, 95, 1, 229, 77, 95, 1, 229, 28, 95, 1, 254, 23, 229, 77, 95,
+ 1, 162, 95, 1, 211, 165, 95, 1, 242, 249, 95, 1, 242, 226, 95, 1, 215,
+ 165, 95, 1, 246, 26, 95, 1, 227, 165, 95, 1, 227, 150, 95, 1, 215, 175,
+ 95, 1, 246, 33, 95, 1, 8, 215, 175, 95, 1, 8, 246, 33, 95, 1, 223, 106,
+ 215, 175, 95, 1, 220, 102, 95, 1, 218, 223, 95, 1, 210, 82, 95, 1, 210,
+ 14, 95, 1, 215, 183, 95, 1, 246, 38, 95, 1, 8, 215, 183, 95, 1, 206, 95,
+ 1, 210, 116, 95, 1, 210, 15, 95, 1, 209, 243, 95, 1, 209, 223, 95, 1,
+ 254, 23, 209, 243, 95, 1, 209, 215, 95, 1, 209, 222, 95, 1, 212, 65, 95,
+ 1, 254, 209, 95, 1, 241, 189, 95, 1, 229, 192, 95, 5, 253, 222, 95, 5,
+ 223, 106, 213, 133, 95, 5, 223, 106, 253, 222, 95, 25, 5, 61, 95, 25, 5,
+ 255, 73, 95, 25, 5, 254, 205, 95, 25, 5, 254, 123, 95, 25, 5, 254, 115,
+ 95, 25, 5, 76, 95, 25, 5, 226, 183, 95, 25, 5, 211, 227, 95, 25, 5, 212,
+ 98, 95, 25, 5, 75, 95, 25, 5, 245, 150, 95, 25, 5, 245, 138, 95, 25, 5,
+ 226, 232, 95, 25, 5, 73, 95, 25, 5, 240, 119, 95, 25, 5, 240, 118, 95,
+ 25, 5, 240, 117, 95, 25, 5, 235, 189, 95, 25, 5, 236, 60, 95, 25, 5, 236,
+ 33, 95, 25, 5, 235, 156, 95, 25, 5, 235, 231, 95, 25, 5, 70, 95, 25, 5,
+ 214, 229, 95, 25, 5, 214, 228, 95, 25, 5, 214, 227, 95, 25, 5, 214, 118,
+ 95, 25, 5, 214, 211, 95, 25, 5, 214, 178, 95, 25, 5, 211, 117, 95, 25, 5,
+ 211, 8, 95, 25, 5, 254, 243, 95, 25, 5, 254, 239, 95, 25, 5, 245, 86, 95,
+ 25, 5, 222, 183, 245, 86, 95, 25, 5, 245, 92, 95, 25, 5, 222, 183, 245,
+ 92, 95, 25, 5, 254, 201, 95, 25, 5, 245, 195, 95, 25, 5, 253, 192, 95,
+ 25, 5, 226, 134, 95, 25, 5, 230, 25, 95, 25, 5, 229, 79, 95, 138, 222,
+ 251, 95, 138, 216, 14, 222, 251, 95, 138, 48, 95, 138, 51, 95, 1, 216,
+ 28, 95, 1, 216, 27, 95, 1, 216, 26, 95, 1, 216, 25, 95, 1, 216, 24, 95,
+ 1, 216, 23, 95, 1, 216, 22, 95, 1, 223, 106, 216, 29, 95, 1, 223, 106,
+ 216, 28, 95, 1, 223, 106, 216, 26, 95, 1, 223, 106, 216, 25, 95, 1, 223,
+ 106, 216, 24, 95, 1, 223, 106, 216, 22, 56, 1, 254, 23, 75, 141, 1, 254,
+ 23, 211, 47, 49, 28, 16, 224, 154, 49, 28, 16, 248, 158, 49, 28, 16, 225,
+ 175, 49, 28, 16, 226, 113, 245, 178, 49, 28, 16, 226, 113, 247, 201, 49,
+ 28, 16, 214, 16, 245, 178, 49, 28, 16, 214, 16, 247, 201, 49, 28, 16,
+ 234, 197, 49, 28, 16, 217, 169, 49, 28, 16, 226, 9, 49, 28, 16, 210, 217,
+ 49, 28, 16, 210, 218, 247, 201, 49, 28, 16, 233, 234, 49, 28, 16, 254,
+ 68, 245, 178, 49, 28, 16, 245, 26, 245, 178, 49, 28, 16, 217, 2, 49, 28,
+ 16, 234, 161, 49, 28, 16, 254, 58, 49, 28, 16, 254, 59, 247, 201, 49, 28,
+ 16, 217, 175, 49, 28, 16, 216, 159, 49, 28, 16, 226, 206, 254, 21, 49,
+ 28, 16, 242, 159, 254, 21, 49, 28, 16, 224, 153, 49, 28, 16, 250, 149,
+ 49, 28, 16, 214, 6, 49, 28, 16, 235, 164, 254, 21, 49, 28, 16, 234, 163,
+ 254, 21, 49, 28, 16, 234, 162, 254, 21, 49, 28, 16, 221, 213, 49, 28, 16,
+ 226, 0, 49, 28, 16, 218, 146, 254, 61, 49, 28, 16, 226, 112, 254, 21, 49,
+ 28, 16, 214, 15, 254, 21, 49, 28, 16, 254, 62, 254, 21, 49, 28, 16, 254,
+ 56, 49, 28, 16, 234, 37, 49, 28, 16, 223, 46, 49, 28, 16, 225, 106, 254,
+ 21, 49, 28, 16, 216, 83, 49, 28, 16, 254, 121, 49, 28, 16, 221, 159, 49,
+ 28, 16, 217, 178, 254, 21, 49, 28, 16, 217, 178, 231, 40, 218, 144, 49,
+ 28, 16, 226, 107, 254, 21, 49, 28, 16, 216, 190, 49, 28, 16, 233, 27, 49,
+ 28, 16, 246, 41, 49, 28, 16, 215, 227, 49, 28, 16, 216, 232, 49, 28, 16,
+ 233, 237, 49, 28, 16, 254, 68, 245, 26, 229, 95, 49, 28, 16, 243, 236,
+ 254, 21, 49, 28, 16, 236, 12, 49, 28, 16, 215, 199, 254, 21, 49, 28, 16,
+ 234, 200, 215, 198, 49, 28, 16, 225, 200, 49, 28, 16, 224, 158, 49, 28,
+ 16, 234, 11, 49, 28, 16, 250, 80, 254, 21, 49, 28, 16, 223, 146, 49, 28,
+ 16, 226, 12, 254, 21, 49, 28, 16, 226, 10, 254, 21, 49, 28, 16, 240, 109,
+ 49, 28, 16, 229, 203, 49, 28, 16, 225, 156, 49, 28, 16, 234, 12, 254,
+ 149, 49, 28, 16, 215, 199, 254, 149, 49, 28, 16, 218, 123, 49, 28, 16,
+ 242, 123, 49, 28, 16, 235, 164, 229, 95, 49, 28, 16, 226, 206, 229, 95,
+ 49, 28, 16, 226, 113, 229, 95, 49, 28, 16, 225, 155, 49, 28, 16, 233,
+ 254, 49, 28, 16, 225, 154, 49, 28, 16, 233, 236, 49, 28, 16, 225, 201,
+ 229, 95, 49, 28, 16, 234, 162, 229, 96, 254, 96, 49, 28, 16, 234, 163,
+ 229, 96, 254, 96, 49, 28, 16, 210, 215, 49, 28, 16, 254, 59, 229, 95, 49,
+ 28, 16, 254, 60, 217, 176, 229, 95, 49, 28, 16, 210, 216, 49, 28, 16,
+ 233, 235, 49, 28, 16, 245, 173, 49, 28, 16, 250, 150, 49, 28, 16, 230,
+ 198, 235, 163, 49, 28, 16, 214, 16, 229, 95, 49, 28, 16, 225, 106, 229,
+ 95, 49, 28, 16, 224, 159, 229, 95, 49, 28, 16, 226, 203, 49, 28, 16, 254,
+ 84, 49, 28, 16, 232, 58, 49, 28, 16, 226, 10, 229, 95, 49, 28, 16, 226,
+ 12, 229, 95, 49, 28, 16, 245, 60, 226, 11, 49, 28, 16, 233, 153, 49, 28,
+ 16, 254, 85, 49, 28, 16, 215, 199, 229, 95, 49, 28, 16, 245, 176, 49, 28,
+ 16, 217, 178, 229, 95, 49, 28, 16, 217, 170, 49, 28, 16, 250, 80, 229,
+ 95, 49, 28, 16, 245, 106, 49, 28, 16, 221, 160, 229, 95, 49, 28, 16, 211,
+ 151, 234, 37, 49, 28, 16, 215, 196, 49, 28, 16, 224, 160, 49, 28, 16,
+ 215, 200, 49, 28, 16, 215, 197, 49, 28, 16, 224, 157, 49, 28, 16, 215,
+ 195, 49, 28, 16, 224, 156, 49, 28, 16, 242, 158, 49, 28, 16, 254, 14, 49,
+ 28, 16, 245, 60, 254, 14, 49, 28, 16, 226, 107, 229, 95, 49, 28, 16, 216,
+ 189, 245, 69, 49, 28, 16, 216, 189, 245, 25, 49, 28, 16, 216, 191, 254,
+ 63, 49, 28, 16, 216, 184, 234, 247, 254, 55, 49, 28, 16, 234, 199, 49,
+ 28, 16, 245, 139, 49, 28, 16, 211, 11, 234, 196, 49, 28, 16, 211, 11,
+ 254, 96, 49, 28, 16, 218, 145, 49, 28, 16, 234, 38, 254, 96, 49, 28, 16,
+ 247, 202, 254, 21, 49, 28, 16, 233, 238, 254, 21, 49, 28, 16, 233, 238,
+ 254, 149, 49, 28, 16, 233, 238, 229, 95, 49, 28, 16, 254, 62, 229, 95,
+ 49, 28, 16, 254, 64, 49, 28, 16, 247, 201, 49, 28, 16, 215, 210, 49, 28,
+ 16, 216, 224, 49, 28, 16, 234, 2, 49, 28, 16, 233, 32, 245, 134, 250, 71,
+ 49, 28, 16, 233, 32, 246, 42, 250, 72, 49, 28, 16, 233, 32, 215, 212,
+ 250, 72, 49, 28, 16, 233, 32, 216, 234, 250, 72, 49, 28, 16, 233, 32,
+ 236, 7, 250, 71, 49, 28, 16, 242, 159, 229, 96, 254, 96, 49, 28, 16, 242,
+ 159, 226, 1, 254, 10, 49, 28, 16, 242, 159, 226, 1, 248, 29, 49, 28, 16,
+ 247, 225, 49, 28, 16, 247, 226, 226, 1, 254, 11, 234, 196, 49, 28, 16,
+ 247, 226, 226, 1, 254, 11, 254, 96, 49, 28, 16, 247, 226, 226, 1, 248,
+ 29, 49, 28, 16, 215, 216, 49, 28, 16, 254, 15, 49, 28, 16, 236, 14, 49,
+ 28, 16, 247, 246, 49, 28, 16, 254, 211, 225, 0, 254, 16, 49, 28, 16, 254,
+ 211, 254, 13, 49, 28, 16, 254, 211, 254, 16, 49, 28, 16, 254, 211, 231,
+ 34, 49, 28, 16, 254, 211, 231, 45, 49, 28, 16, 254, 211, 242, 160, 49,
+ 28, 16, 254, 211, 242, 157, 49, 28, 16, 254, 211, 225, 0, 242, 160, 49,
+ 28, 16, 231, 151, 224, 165, 240, 107, 49, 28, 16, 231, 151, 254, 151,
+ 224, 165, 240, 107, 49, 28, 16, 231, 151, 248, 28, 240, 107, 49, 28, 16,
+ 231, 151, 254, 151, 248, 28, 240, 107, 49, 28, 16, 231, 151, 215, 205,
+ 240, 107, 49, 28, 16, 231, 151, 215, 217, 49, 28, 16, 231, 151, 216, 228,
+ 240, 107, 49, 28, 16, 231, 151, 216, 228, 233, 35, 240, 107, 49, 28, 16,
+ 231, 151, 233, 35, 240, 107, 49, 28, 16, 231, 151, 225, 39, 240, 107, 49,
+ 28, 16, 235, 169, 216, 251, 240, 108, 49, 28, 16, 254, 60, 216, 251, 240,
+ 108, 49, 28, 16, 244, 172, 216, 225, 49, 28, 16, 244, 172, 230, 143, 49,
+ 28, 16, 244, 172, 247, 230, 49, 28, 16, 231, 151, 214, 10, 240, 107, 49,
+ 28, 16, 231, 151, 224, 164, 240, 107, 49, 28, 16, 231, 151, 225, 39, 216,
+ 228, 240, 107, 49, 28, 16, 242, 155, 230, 26, 254, 63, 49, 28, 16, 242,
+ 155, 230, 26, 247, 200, 49, 28, 16, 245, 148, 234, 247, 243, 236, 213,
+ 124, 49, 28, 16, 236, 13, 49, 28, 16, 236, 11, 49, 28, 16, 243, 236, 254,
+ 22, 248, 27, 240, 106, 49, 28, 16, 243, 236, 247, 244, 190, 49, 28, 16,
+ 243, 236, 247, 244, 229, 203, 49, 28, 16, 243, 236, 229, 198, 240, 107,
+ 49, 28, 16, 243, 236, 247, 244, 248, 3, 49, 28, 16, 243, 236, 219, 102,
+ 247, 243, 248, 3, 49, 28, 16, 243, 236, 247, 244, 234, 182, 49, 28, 16,
+ 243, 236, 247, 244, 210, 23, 49, 28, 16, 243, 236, 247, 244, 228, 234,
+ 234, 196, 49, 28, 16, 243, 236, 247, 244, 228, 234, 254, 96, 49, 28, 16,
+ 243, 236, 231, 191, 250, 73, 247, 230, 49, 28, 16, 243, 236, 231, 191,
+ 250, 73, 230, 143, 49, 28, 16, 244, 122, 219, 102, 250, 73, 214, 9, 49,
+ 28, 16, 243, 236, 219, 102, 250, 73, 217, 179, 49, 28, 16, 243, 236, 229,
+ 97, 49, 28, 16, 250, 74, 209, 249, 49, 28, 16, 250, 74, 234, 36, 49, 28,
+ 16, 250, 74, 219, 9, 49, 28, 16, 243, 236, 240, 154, 211, 10, 216, 229,
+ 49, 28, 16, 243, 236, 245, 149, 254, 86, 49, 28, 16, 211, 10, 215, 206,
+ 49, 28, 16, 247, 238, 215, 206, 49, 28, 16, 247, 238, 216, 229, 49, 28,
+ 16, 247, 238, 254, 65, 246, 42, 247, 139, 49, 28, 16, 247, 238, 230, 141,
+ 216, 233, 247, 139, 49, 28, 16, 247, 238, 247, 222, 245, 36, 247, 139,
+ 49, 28, 16, 247, 238, 215, 214, 226, 211, 247, 139, 49, 28, 16, 211, 10,
+ 254, 65, 246, 42, 247, 139, 49, 28, 16, 211, 10, 230, 141, 216, 233, 247,
+ 139, 49, 28, 16, 211, 10, 247, 222, 245, 36, 247, 139, 49, 28, 16, 211,
+ 10, 215, 214, 226, 211, 247, 139, 49, 28, 16, 243, 49, 247, 237, 49, 28,
+ 16, 243, 49, 211, 9, 49, 28, 16, 247, 245, 254, 65, 230, 199, 49, 28, 16,
+ 247, 245, 254, 65, 231, 73, 49, 28, 16, 247, 245, 247, 201, 49, 28, 16,
+ 247, 245, 216, 182, 49, 28, 16, 219, 163, 216, 182, 49, 28, 16, 219, 163,
+ 216, 183, 247, 186, 49, 28, 16, 219, 163, 216, 183, 215, 207, 49, 28, 16,
+ 219, 163, 216, 183, 216, 222, 49, 28, 16, 219, 163, 253, 244, 49, 28, 16,
+ 219, 163, 253, 245, 247, 186, 49, 28, 16, 219, 163, 253, 245, 215, 207,
+ 49, 28, 16, 219, 163, 253, 245, 216, 222, 49, 28, 16, 247, 223, 243, 30,
+ 49, 28, 16, 247, 229, 226, 134, 49, 28, 16, 218, 137, 49, 28, 16, 254, 7,
+ 190, 49, 28, 16, 254, 7, 213, 124, 49, 28, 16, 254, 7, 243, 135, 49, 28,
+ 16, 254, 7, 248, 3, 49, 28, 16, 254, 7, 234, 182, 49, 28, 16, 254, 7,
+ 210, 23, 49, 28, 16, 254, 7, 228, 233, 49, 28, 16, 234, 162, 229, 96,
+ 231, 44, 49, 28, 16, 234, 163, 229, 96, 231, 44, 49, 28, 16, 234, 162,
+ 229, 96, 234, 196, 49, 28, 16, 234, 163, 229, 96, 234, 196, 49, 28, 16,
+ 234, 38, 234, 196, 49, 28, 16, 242, 159, 229, 96, 234, 196, 28, 16, 219,
+ 155, 252, 135, 28, 16, 52, 252, 135, 28, 16, 40, 252, 135, 28, 16, 223,
+ 50, 40, 252, 135, 28, 16, 248, 155, 252, 135, 28, 16, 219, 251, 252, 135,
+ 28, 16, 43, 223, 77, 50, 28, 16, 44, 223, 77, 50, 28, 16, 223, 77, 247,
+ 118, 28, 16, 248, 196, 221, 163, 28, 16, 248, 222, 250, 249, 28, 16, 221,
+ 163, 28, 16, 249, 234, 28, 16, 223, 75, 244, 111, 28, 16, 223, 75, 244,
+ 110, 28, 16, 223, 75, 244, 109, 28, 16, 244, 131, 28, 16, 244, 132, 51,
+ 28, 16, 251, 148, 78, 28, 16, 251, 24, 28, 16, 251, 159, 28, 16, 127, 28,
+ 16, 226, 193, 218, 163, 28, 16, 215, 57, 218, 163, 28, 16, 216, 142, 218,
+ 163, 28, 16, 244, 10, 218, 163, 28, 16, 244, 80, 218, 163, 28, 16, 219,
+ 124, 218, 163, 28, 16, 219, 122, 243, 250, 28, 16, 244, 8, 243, 250, 28,
+ 16, 243, 203, 250, 14, 28, 16, 243, 203, 250, 15, 226, 136, 254, 142, 28,
+ 16, 243, 203, 250, 15, 226, 136, 252, 122, 28, 16, 251, 67, 250, 14, 28,
+ 16, 245, 7, 250, 14, 28, 16, 245, 7, 250, 15, 226, 136, 254, 142, 28, 16,
+ 245, 7, 250, 15, 226, 136, 252, 122, 28, 16, 246, 83, 250, 13, 28, 16,
+ 246, 83, 250, 12, 28, 16, 230, 85, 231, 90, 223, 61, 28, 16, 52, 220, 75,
+ 28, 16, 52, 244, 65, 28, 16, 244, 66, 214, 163, 28, 16, 244, 66, 246,
+ 106, 28, 16, 229, 188, 214, 163, 28, 16, 229, 188, 246, 106, 28, 16, 220,
+ 76, 214, 163, 28, 16, 220, 76, 246, 106, 28, 16, 224, 22, 138, 220, 75,
+ 28, 16, 224, 22, 138, 244, 65, 28, 16, 249, 216, 216, 87, 28, 16, 249,
+ 85, 216, 87, 28, 16, 226, 136, 254, 142, 28, 16, 226, 136, 252, 122, 28,
+ 16, 224, 4, 254, 142, 28, 16, 224, 4, 252, 122, 28, 16, 230, 88, 223, 61,
+ 28, 16, 211, 251, 223, 61, 28, 16, 163, 223, 61, 28, 16, 224, 22, 223,
+ 61, 28, 16, 245, 189, 223, 61, 28, 16, 219, 118, 223, 61, 28, 16, 216,
+ 160, 223, 61, 28, 16, 219, 110, 223, 61, 28, 16, 123, 240, 211, 215, 71,
+ 223, 61, 28, 16, 211, 179, 228, 43, 28, 16, 96, 228, 43, 28, 16, 250, 36,
+ 211, 179, 228, 43, 28, 16, 42, 228, 44, 211, 253, 28, 16, 42, 228, 44,
+ 251, 221, 28, 16, 215, 226, 228, 44, 120, 211, 253, 28, 16, 215, 226,
+ 228, 44, 120, 251, 221, 28, 16, 215, 226, 228, 44, 43, 211, 253, 28, 16,
+ 215, 226, 228, 44, 43, 251, 221, 28, 16, 215, 226, 228, 44, 44, 211, 253,
+ 28, 16, 215, 226, 228, 44, 44, 251, 221, 28, 16, 215, 226, 228, 44, 124,
+ 211, 253, 28, 16, 215, 226, 228, 44, 124, 251, 221, 28, 16, 215, 226,
+ 228, 44, 120, 44, 211, 253, 28, 16, 215, 226, 228, 44, 120, 44, 251, 221,
+ 28, 16, 230, 129, 228, 44, 211, 253, 28, 16, 230, 129, 228, 44, 251, 221,
+ 28, 16, 215, 223, 228, 44, 124, 211, 253, 28, 16, 215, 223, 228, 44, 124,
+ 251, 221, 28, 16, 226, 4, 228, 43, 28, 16, 213, 132, 228, 43, 28, 16,
+ 228, 44, 251, 221, 28, 16, 227, 203, 228, 43, 28, 16, 249, 241, 228, 44,
+ 211, 253, 28, 16, 249, 241, 228, 44, 251, 221, 28, 16, 251, 146, 28, 16,
+ 211, 251, 228, 47, 28, 16, 163, 228, 47, 28, 16, 224, 22, 228, 47, 28,
+ 16, 245, 189, 228, 47, 28, 16, 219, 118, 228, 47, 28, 16, 216, 160, 228,
+ 47, 28, 16, 219, 110, 228, 47, 28, 16, 123, 240, 211, 215, 71, 228, 47,
+ 28, 16, 38, 218, 139, 28, 16, 38, 218, 240, 218, 139, 28, 16, 38, 215,
+ 234, 28, 16, 38, 215, 233, 28, 16, 38, 215, 232, 28, 16, 244, 101, 215,
+ 234, 28, 16, 244, 101, 215, 233, 28, 16, 244, 101, 215, 232, 28, 16, 38,
+ 253, 189, 247, 120, 28, 16, 38, 244, 72, 28, 16, 38, 244, 71, 28, 16, 38,
+ 244, 70, 28, 16, 38, 244, 69, 28, 16, 38, 244, 68, 28, 16, 252, 58, 252,
+ 74, 28, 16, 245, 143, 252, 74, 28, 16, 252, 58, 216, 111, 28, 16, 245,
+ 143, 216, 111, 28, 16, 252, 58, 219, 80, 28, 16, 245, 143, 219, 80, 28,
+ 16, 252, 58, 225, 115, 28, 16, 245, 143, 225, 115, 28, 16, 38, 255, 14,
+ 28, 16, 38, 218, 165, 28, 16, 38, 216, 238, 28, 16, 38, 218, 166, 28, 16,
+ 38, 231, 162, 28, 16, 38, 231, 161, 28, 16, 38, 255, 13, 28, 16, 38, 232,
+ 112, 28, 16, 253, 254, 214, 163, 28, 16, 253, 254, 246, 106, 28, 16, 38,
+ 247, 135, 28, 16, 38, 222, 231, 28, 16, 38, 244, 58, 28, 16, 38, 219, 76,
+ 28, 16, 38, 252, 38, 28, 16, 38, 52, 216, 19, 28, 16, 38, 215, 211, 216,
+ 19, 28, 16, 222, 235, 28, 16, 218, 75, 28, 16, 210, 159, 28, 16, 225,
+ 107, 28, 16, 231, 25, 28, 16, 244, 17, 28, 16, 249, 138, 28, 16, 248, 78,
+ 28, 16, 242, 150, 228, 48, 219, 95, 28, 16, 242, 150, 228, 48, 228, 75,
+ 219, 95, 28, 16, 216, 0, 28, 16, 215, 95, 28, 16, 235, 193, 215, 95, 28,
+ 16, 215, 96, 219, 95, 28, 16, 215, 96, 214, 163, 28, 16, 226, 148, 218,
+ 102, 28, 16, 226, 148, 218, 99, 28, 16, 226, 148, 218, 98, 28, 16, 226,
+ 148, 218, 97, 28, 16, 226, 148, 218, 96, 28, 16, 226, 148, 218, 95, 28,
+ 16, 226, 148, 218, 94, 28, 16, 226, 148, 218, 93, 28, 16, 226, 148, 218,
+ 92, 28, 16, 226, 148, 218, 101, 28, 16, 226, 148, 218, 100, 28, 16, 241,
+ 245, 28, 16, 229, 105, 28, 16, 245, 143, 64, 218, 133, 28, 16, 248, 71,
+ 219, 95, 28, 16, 38, 124, 251, 169, 28, 16, 38, 120, 251, 169, 28, 16,
+ 38, 242, 0, 28, 16, 38, 219, 67, 225, 43, 28, 16, 225, 216, 78, 28, 16,
+ 225, 216, 120, 78, 28, 16, 163, 225, 216, 78, 28, 16, 242, 182, 214, 163,
+ 28, 16, 242, 182, 246, 106, 28, 16, 2, 244, 100, 28, 16, 248, 180, 28,
+ 16, 248, 181, 254, 154, 28, 16, 231, 133, 28, 16, 232, 129, 28, 16, 251,
+ 143, 28, 16, 220, 154, 211, 253, 28, 16, 220, 154, 251, 221, 28, 16, 230,
+ 184, 28, 16, 230, 185, 251, 221, 28, 16, 220, 148, 211, 253, 28, 16, 220,
+ 148, 251, 221, 28, 16, 243, 220, 211, 253, 28, 16, 243, 220, 251, 221,
+ 28, 16, 232, 130, 225, 180, 223, 61, 28, 16, 232, 130, 236, 4, 223, 61,
+ 28, 16, 251, 144, 223, 61, 28, 16, 220, 154, 223, 61, 28, 16, 230, 185,
+ 223, 61, 28, 16, 220, 148, 223, 61, 28, 16, 216, 249, 225, 178, 249, 107,
+ 224, 174, 225, 179, 28, 16, 216, 249, 225, 178, 249, 107, 224, 174, 236,
+ 3, 28, 16, 216, 249, 225, 178, 249, 107, 224, 174, 225, 180, 247, 211,
+ 28, 16, 216, 249, 236, 2, 249, 107, 224, 174, 225, 179, 28, 16, 216, 249,
+ 236, 2, 249, 107, 224, 174, 236, 3, 28, 16, 216, 249, 236, 2, 249, 107,
+ 224, 174, 236, 4, 247, 211, 28, 16, 216, 249, 236, 2, 249, 107, 224, 174,
+ 236, 4, 247, 210, 28, 16, 216, 249, 236, 2, 249, 107, 224, 174, 236, 4,
+ 247, 209, 28, 16, 249, 133, 28, 16, 242, 126, 251, 67, 250, 14, 28, 16,
+ 242, 126, 245, 7, 250, 14, 28, 16, 42, 253, 158, 28, 16, 213, 151, 28,
+ 16, 225, 14, 28, 16, 250, 5, 28, 16, 221, 203, 28, 16, 250, 9, 28, 16,
+ 216, 7, 28, 16, 224, 242, 28, 16, 224, 243, 244, 60, 28, 16, 221, 204,
+ 244, 60, 28, 16, 216, 8, 223, 58, 28, 16, 225, 163, 218, 66, 26, 213,
+ 137, 187, 217, 229, 26, 213, 137, 187, 217, 218, 26, 213, 137, 187, 217,
+ 208, 26, 213, 137, 187, 217, 201, 26, 213, 137, 187, 217, 193, 26, 213,
+ 137, 187, 217, 187, 26, 213, 137, 187, 217, 186, 26, 213, 137, 187, 217,
+ 185, 26, 213, 137, 187, 217, 184, 26, 213, 137, 187, 217, 228, 26, 213,
+ 137, 187, 217, 227, 26, 213, 137, 187, 217, 226, 26, 213, 137, 187, 217,
+ 225, 26, 213, 137, 187, 217, 224, 26, 213, 137, 187, 217, 223, 26, 213,
+ 137, 187, 217, 222, 26, 213, 137, 187, 217, 221, 26, 213, 137, 187, 217,
+ 220, 26, 213, 137, 187, 217, 219, 26, 213, 137, 187, 217, 217, 26, 213,
+ 137, 187, 217, 216, 26, 213, 137, 187, 217, 215, 26, 213, 137, 187, 217,
+ 214, 26, 213, 137, 187, 217, 213, 26, 213, 137, 187, 217, 192, 26, 213,
+ 137, 187, 217, 191, 26, 213, 137, 187, 217, 190, 26, 213, 137, 187, 217,
+ 189, 26, 213, 137, 187, 217, 188, 26, 235, 214, 187, 217, 229, 26, 235,
+ 214, 187, 217, 218, 26, 235, 214, 187, 217, 201, 26, 235, 214, 187, 217,
+ 193, 26, 235, 214, 187, 217, 186, 26, 235, 214, 187, 217, 185, 26, 235,
+ 214, 187, 217, 227, 26, 235, 214, 187, 217, 226, 26, 235, 214, 187, 217,
+ 225, 26, 235, 214, 187, 217, 224, 26, 235, 214, 187, 217, 221, 26, 235,
+ 214, 187, 217, 220, 26, 235, 214, 187, 217, 219, 26, 235, 214, 187, 217,
+ 214, 26, 235, 214, 187, 217, 213, 26, 235, 214, 187, 217, 212, 26, 235,
+ 214, 187, 217, 211, 26, 235, 214, 187, 217, 210, 26, 235, 214, 187, 217,
+ 209, 26, 235, 214, 187, 217, 207, 26, 235, 214, 187, 217, 206, 26, 235,
+ 214, 187, 217, 205, 26, 235, 214, 187, 217, 204, 26, 235, 214, 187, 217,
+ 203, 26, 235, 214, 187, 217, 202, 26, 235, 214, 187, 217, 200, 26, 235,
+ 214, 187, 217, 199, 26, 235, 214, 187, 217, 198, 26, 235, 214, 187, 217,
+ 197, 26, 235, 214, 187, 217, 196, 26, 235, 214, 187, 217, 195, 26, 235,
+ 214, 187, 217, 194, 26, 235, 214, 187, 217, 192, 26, 235, 214, 187, 217,
+ 191, 26, 235, 214, 187, 217, 190, 26, 235, 214, 187, 217, 189, 26, 235,
+ 214, 187, 217, 188, 38, 26, 28, 215, 208, 38, 26, 28, 216, 223, 38, 26,
+ 28, 225, 188, 26, 28, 233, 31, 230, 142, 31, 245, 223, 247, 224, 31, 241,
+ 222, 245, 223, 247, 224, 31, 240, 214, 245, 223, 247, 224, 31, 245, 222,
+ 241, 223, 247, 224, 31, 245, 222, 240, 213, 247, 224, 31, 245, 223, 180,
+ 31, 250, 174, 180, 31, 243, 229, 250, 35, 180, 31, 230, 177, 180, 31,
+ 252, 130, 180, 31, 234, 179, 219, 79, 180, 31, 249, 179, 180, 31, 253,
+ 233, 180, 31, 226, 163, 180, 31, 251, 153, 226, 130, 180, 31, 248, 73,
+ 177, 247, 179, 180, 31, 247, 176, 180, 31, 210, 222, 180, 31, 235, 247,
+ 180, 31, 225, 197, 180, 31, 223, 127, 180, 31, 249, 189, 180, 31, 241,
+ 60, 252, 184, 180, 31, 212, 59, 180, 31, 244, 39, 180, 31, 254, 246, 180,
+ 31, 223, 89, 180, 31, 223, 65, 180, 31, 245, 221, 180, 31, 235, 53, 180,
+ 31, 249, 184, 180, 31, 245, 142, 180, 31, 246, 52, 180, 31, 250, 145,
+ 180, 31, 248, 82, 180, 31, 23, 223, 64, 180, 31, 226, 81, 180, 31, 233,
+ 34, 180, 31, 249, 254, 180, 31, 234, 77, 180, 31, 243, 86, 180, 31, 218,
+ 112, 180, 31, 224, 130, 180, 31, 243, 228, 180, 31, 223, 66, 180, 31,
+ 233, 71, 177, 230, 157, 180, 31, 223, 62, 180, 31, 242, 168, 216, 42,
+ 231, 76, 180, 31, 245, 144, 180, 31, 218, 124, 180, 31, 242, 128, 180,
+ 31, 245, 136, 180, 31, 225, 235, 180, 31, 222, 225, 180, 31, 244, 59,
+ 180, 31, 214, 8, 177, 212, 44, 180, 31, 249, 193, 180, 31, 231, 89, 180,
+ 31, 245, 61, 180, 31, 214, 172, 180, 31, 247, 212, 180, 31, 250, 0, 230,
+ 110, 180, 31, 242, 106, 180, 31, 243, 87, 235, 255, 180, 31, 231, 141,
+ 180, 31, 255, 10, 180, 31, 245, 157, 180, 31, 246, 109, 180, 31, 212, 42,
+ 180, 31, 219, 150, 180, 31, 235, 222, 180, 31, 248, 42, 180, 31, 248,
+ 160, 180, 31, 247, 208, 180, 31, 245, 29, 180, 31, 220, 115, 180, 31,
+ 218, 128, 180, 31, 242, 2, 180, 31, 249, 212, 180, 31, 249, 251, 180, 31,
+ 244, 177, 180, 31, 254, 212, 180, 31, 249, 211, 180, 31, 226, 197, 216,
+ 196, 213, 242, 180, 31, 247, 232, 180, 31, 233, 124, 180, 31, 244, 13,
+ 249, 149, 222, 202, 214, 174, 21, 110, 249, 149, 222, 202, 214, 174, 21,
+ 105, 249, 149, 222, 202, 214, 174, 21, 158, 249, 149, 222, 202, 214, 174,
+ 21, 161, 249, 149, 222, 202, 214, 174, 21, 189, 249, 149, 222, 202, 214,
+ 174, 21, 194, 249, 149, 222, 202, 214, 174, 21, 198, 249, 149, 222, 202,
+ 214, 174, 21, 195, 249, 149, 222, 202, 214, 174, 21, 200, 249, 149, 222,
+ 202, 216, 243, 21, 110, 249, 149, 222, 202, 216, 243, 21, 105, 249, 149,
+ 222, 202, 216, 243, 21, 158, 249, 149, 222, 202, 216, 243, 21, 161, 249,
+ 149, 222, 202, 216, 243, 21, 189, 249, 149, 222, 202, 216, 243, 21, 194,
+ 249, 149, 222, 202, 216, 243, 21, 198, 249, 149, 222, 202, 216, 243, 21,
+ 195, 249, 149, 222, 202, 216, 243, 21, 200, 11, 23, 6, 61, 11, 23, 6,
+ 253, 158, 11, 23, 6, 251, 66, 11, 23, 6, 249, 60, 11, 23, 6, 75, 11, 23,
+ 6, 245, 6, 11, 23, 6, 243, 202, 11, 23, 6, 242, 60, 11, 23, 6, 73, 11,
+ 23, 6, 235, 144, 11, 23, 6, 235, 23, 11, 23, 6, 156, 11, 23, 6, 193, 11,
+ 23, 6, 230, 25, 11, 23, 6, 76, 11, 23, 6, 226, 105, 11, 23, 6, 224, 96,
+ 11, 23, 6, 153, 11, 23, 6, 222, 91, 11, 23, 6, 217, 152, 11, 23, 6, 70,
+ 11, 23, 6, 214, 105, 11, 23, 6, 212, 98, 11, 23, 6, 211, 178, 11, 23, 6,
+ 211, 117, 11, 23, 6, 210, 159, 11, 23, 4, 61, 11, 23, 4, 253, 158, 11,
+ 23, 4, 251, 66, 11, 23, 4, 249, 60, 11, 23, 4, 75, 11, 23, 4, 245, 6, 11,
+ 23, 4, 243, 202, 11, 23, 4, 242, 60, 11, 23, 4, 73, 11, 23, 4, 235, 144,
+ 11, 23, 4, 235, 23, 11, 23, 4, 156, 11, 23, 4, 193, 11, 23, 4, 230, 25,
+ 11, 23, 4, 76, 11, 23, 4, 226, 105, 11, 23, 4, 224, 96, 11, 23, 4, 153,
+ 11, 23, 4, 222, 91, 11, 23, 4, 217, 152, 11, 23, 4, 70, 11, 23, 4, 214,
+ 105, 11, 23, 4, 212, 98, 11, 23, 4, 211, 178, 11, 23, 4, 211, 117, 11,
+ 23, 4, 210, 159, 11, 32, 6, 61, 11, 32, 6, 253, 158, 11, 32, 6, 251, 66,
+ 11, 32, 6, 249, 60, 11, 32, 6, 75, 11, 32, 6, 245, 6, 11, 32, 6, 243,
+ 202, 11, 32, 6, 242, 60, 11, 32, 6, 73, 11, 32, 6, 235, 144, 11, 32, 6,
+ 235, 23, 11, 32, 6, 156, 11, 32, 6, 193, 11, 32, 6, 230, 25, 11, 32, 6,
+ 76, 11, 32, 6, 226, 105, 11, 32, 6, 224, 96, 11, 32, 6, 153, 11, 32, 6,
+ 222, 91, 11, 32, 6, 217, 152, 11, 32, 6, 70, 11, 32, 6, 214, 105, 11, 32,
+ 6, 212, 98, 11, 32, 6, 211, 178, 11, 32, 6, 211, 117, 11, 32, 6, 210,
+ 159, 11, 32, 4, 61, 11, 32, 4, 253, 158, 11, 32, 4, 251, 66, 11, 32, 4,
+ 249, 60, 11, 32, 4, 75, 11, 32, 4, 245, 6, 11, 32, 4, 243, 202, 11, 32,
+ 4, 73, 11, 32, 4, 235, 144, 11, 32, 4, 235, 23, 11, 32, 4, 156, 11, 32,
+ 4, 193, 11, 32, 4, 230, 25, 11, 32, 4, 76, 11, 32, 4, 226, 105, 11, 32,
+ 4, 224, 96, 11, 32, 4, 153, 11, 32, 4, 222, 91, 11, 32, 4, 217, 152, 11,
+ 32, 4, 70, 11, 32, 4, 214, 105, 11, 32, 4, 212, 98, 11, 32, 4, 211, 178,
+ 11, 32, 4, 211, 117, 11, 32, 4, 210, 159, 11, 23, 32, 6, 61, 11, 23, 32,
+ 6, 253, 158, 11, 23, 32, 6, 251, 66, 11, 23, 32, 6, 249, 60, 11, 23, 32,
+ 6, 75, 11, 23, 32, 6, 245, 6, 11, 23, 32, 6, 243, 202, 11, 23, 32, 6,
+ 242, 60, 11, 23, 32, 6, 73, 11, 23, 32, 6, 235, 144, 11, 23, 32, 6, 235,
+ 23, 11, 23, 32, 6, 156, 11, 23, 32, 6, 193, 11, 23, 32, 6, 230, 25, 11,
+ 23, 32, 6, 76, 11, 23, 32, 6, 226, 105, 11, 23, 32, 6, 224, 96, 11, 23,
+ 32, 6, 153, 11, 23, 32, 6, 222, 91, 11, 23, 32, 6, 217, 152, 11, 23, 32,
+ 6, 70, 11, 23, 32, 6, 214, 105, 11, 23, 32, 6, 212, 98, 11, 23, 32, 6,
+ 211, 178, 11, 23, 32, 6, 211, 117, 11, 23, 32, 6, 210, 159, 11, 23, 32,
+ 4, 61, 11, 23, 32, 4, 253, 158, 11, 23, 32, 4, 251, 66, 11, 23, 32, 4,
+ 249, 60, 11, 23, 32, 4, 75, 11, 23, 32, 4, 245, 6, 11, 23, 32, 4, 243,
+ 202, 11, 23, 32, 4, 242, 60, 11, 23, 32, 4, 73, 11, 23, 32, 4, 235, 144,
+ 11, 23, 32, 4, 235, 23, 11, 23, 32, 4, 156, 11, 23, 32, 4, 193, 11, 23,
+ 32, 4, 230, 25, 11, 23, 32, 4, 76, 11, 23, 32, 4, 226, 105, 11, 23, 32,
+ 4, 224, 96, 11, 23, 32, 4, 153, 11, 23, 32, 4, 222, 91, 11, 23, 32, 4,
+ 217, 152, 11, 23, 32, 4, 70, 11, 23, 32, 4, 214, 105, 11, 23, 32, 4, 212,
+ 98, 11, 23, 32, 4, 211, 178, 11, 23, 32, 4, 211, 117, 11, 23, 32, 4, 210,
+ 159, 11, 119, 6, 61, 11, 119, 6, 251, 66, 11, 119, 6, 249, 60, 11, 119,
+ 6, 243, 202, 11, 119, 6, 235, 144, 11, 119, 6, 235, 23, 11, 119, 6, 230,
+ 25, 11, 119, 6, 76, 11, 119, 6, 226, 105, 11, 119, 6, 224, 96, 11, 119,
+ 6, 222, 91, 11, 119, 6, 217, 152, 11, 119, 6, 70, 11, 119, 6, 214, 105,
+ 11, 119, 6, 212, 98, 11, 119, 6, 211, 178, 11, 119, 6, 211, 117, 11, 119,
+ 6, 210, 159, 11, 119, 4, 61, 11, 119, 4, 253, 158, 11, 119, 4, 251, 66,
+ 11, 119, 4, 249, 60, 11, 119, 4, 245, 6, 11, 119, 4, 242, 60, 11, 119, 4,
+ 73, 11, 119, 4, 235, 144, 11, 119, 4, 235, 23, 11, 119, 4, 156, 11, 119,
+ 4, 193, 11, 119, 4, 230, 25, 11, 119, 4, 226, 105, 11, 119, 4, 224, 96,
+ 11, 119, 4, 153, 11, 119, 4, 222, 91, 11, 119, 4, 217, 152, 11, 119, 4,
+ 70, 11, 119, 4, 214, 105, 11, 119, 4, 212, 98, 11, 119, 4, 211, 178, 11,
+ 119, 4, 211, 117, 11, 119, 4, 210, 159, 11, 23, 119, 6, 61, 11, 23, 119,
+ 6, 253, 158, 11, 23, 119, 6, 251, 66, 11, 23, 119, 6, 249, 60, 11, 23,
+ 119, 6, 75, 11, 23, 119, 6, 245, 6, 11, 23, 119, 6, 243, 202, 11, 23,
+ 119, 6, 242, 60, 11, 23, 119, 6, 73, 11, 23, 119, 6, 235, 144, 11, 23,
+ 119, 6, 235, 23, 11, 23, 119, 6, 156, 11, 23, 119, 6, 193, 11, 23, 119,
+ 6, 230, 25, 11, 23, 119, 6, 76, 11, 23, 119, 6, 226, 105, 11, 23, 119, 6,
+ 224, 96, 11, 23, 119, 6, 153, 11, 23, 119, 6, 222, 91, 11, 23, 119, 6,
+ 217, 152, 11, 23, 119, 6, 70, 11, 23, 119, 6, 214, 105, 11, 23, 119, 6,
+ 212, 98, 11, 23, 119, 6, 211, 178, 11, 23, 119, 6, 211, 117, 11, 23, 119,
+ 6, 210, 159, 11, 23, 119, 4, 61, 11, 23, 119, 4, 253, 158, 11, 23, 119,
+ 4, 251, 66, 11, 23, 119, 4, 249, 60, 11, 23, 119, 4, 75, 11, 23, 119, 4,
+ 245, 6, 11, 23, 119, 4, 243, 202, 11, 23, 119, 4, 242, 60, 11, 23, 119,
+ 4, 73, 11, 23, 119, 4, 235, 144, 11, 23, 119, 4, 235, 23, 11, 23, 119, 4,
+ 156, 11, 23, 119, 4, 193, 11, 23, 119, 4, 230, 25, 11, 23, 119, 4, 76,
+ 11, 23, 119, 4, 226, 105, 11, 23, 119, 4, 224, 96, 11, 23, 119, 4, 153,
+ 11, 23, 119, 4, 222, 91, 11, 23, 119, 4, 217, 152, 11, 23, 119, 4, 70,
+ 11, 23, 119, 4, 214, 105, 11, 23, 119, 4, 212, 98, 11, 23, 119, 4, 211,
+ 178, 11, 23, 119, 4, 211, 117, 11, 23, 119, 4, 210, 159, 11, 133, 6, 61,
+ 11, 133, 6, 253, 158, 11, 133, 6, 249, 60, 11, 133, 6, 75, 11, 133, 6,
+ 245, 6, 11, 133, 6, 243, 202, 11, 133, 6, 235, 144, 11, 133, 6, 235, 23,
+ 11, 133, 6, 156, 11, 133, 6, 193, 11, 133, 6, 230, 25, 11, 133, 6, 76,
+ 11, 133, 6, 226, 105, 11, 133, 6, 224, 96, 11, 133, 6, 222, 91, 11, 133,
+ 6, 217, 152, 11, 133, 6, 70, 11, 133, 6, 214, 105, 11, 133, 6, 212, 98,
+ 11, 133, 6, 211, 178, 11, 133, 6, 211, 117, 11, 133, 4, 61, 11, 133, 4,
+ 253, 158, 11, 133, 4, 251, 66, 11, 133, 4, 249, 60, 11, 133, 4, 75, 11,
+ 133, 4, 245, 6, 11, 133, 4, 243, 202, 11, 133, 4, 242, 60, 11, 133, 4,
+ 73, 11, 133, 4, 235, 144, 11, 133, 4, 235, 23, 11, 133, 4, 156, 11, 133,
+ 4, 193, 11, 133, 4, 230, 25, 11, 133, 4, 76, 11, 133, 4, 226, 105, 11,
+ 133, 4, 224, 96, 11, 133, 4, 153, 11, 133, 4, 222, 91, 11, 133, 4, 217,
+ 152, 11, 133, 4, 70, 11, 133, 4, 214, 105, 11, 133, 4, 212, 98, 11, 133,
+ 4, 211, 178, 11, 133, 4, 211, 117, 11, 133, 4, 210, 159, 11, 139, 6, 61,
+ 11, 139, 6, 253, 158, 11, 139, 6, 249, 60, 11, 139, 6, 75, 11, 139, 6,
+ 245, 6, 11, 139, 6, 243, 202, 11, 139, 6, 73, 11, 139, 6, 235, 144, 11,
+ 139, 6, 235, 23, 11, 139, 6, 156, 11, 139, 6, 193, 11, 139, 6, 76, 11,
+ 139, 6, 222, 91, 11, 139, 6, 217, 152, 11, 139, 6, 70, 11, 139, 6, 214,
+ 105, 11, 139, 6, 212, 98, 11, 139, 6, 211, 178, 11, 139, 6, 211, 117, 11,
+ 139, 4, 61, 11, 139, 4, 253, 158, 11, 139, 4, 251, 66, 11, 139, 4, 249,
+ 60, 11, 139, 4, 75, 11, 139, 4, 245, 6, 11, 139, 4, 243, 202, 11, 139, 4,
+ 242, 60, 11, 139, 4, 73, 11, 139, 4, 235, 144, 11, 139, 4, 235, 23, 11,
+ 139, 4, 156, 11, 139, 4, 193, 11, 139, 4, 230, 25, 11, 139, 4, 76, 11,
+ 139, 4, 226, 105, 11, 139, 4, 224, 96, 11, 139, 4, 153, 11, 139, 4, 222,
+ 91, 11, 139, 4, 217, 152, 11, 139, 4, 70, 11, 139, 4, 214, 105, 11, 139,
+ 4, 212, 98, 11, 139, 4, 211, 178, 11, 139, 4, 211, 117, 11, 139, 4, 210,
+ 159, 11, 23, 133, 6, 61, 11, 23, 133, 6, 253, 158, 11, 23, 133, 6, 251,
+ 66, 11, 23, 133, 6, 249, 60, 11, 23, 133, 6, 75, 11, 23, 133, 6, 245, 6,
+ 11, 23, 133, 6, 243, 202, 11, 23, 133, 6, 242, 60, 11, 23, 133, 6, 73,
+ 11, 23, 133, 6, 235, 144, 11, 23, 133, 6, 235, 23, 11, 23, 133, 6, 156,
+ 11, 23, 133, 6, 193, 11, 23, 133, 6, 230, 25, 11, 23, 133, 6, 76, 11, 23,
+ 133, 6, 226, 105, 11, 23, 133, 6, 224, 96, 11, 23, 133, 6, 153, 11, 23,
+ 133, 6, 222, 91, 11, 23, 133, 6, 217, 152, 11, 23, 133, 6, 70, 11, 23,
+ 133, 6, 214, 105, 11, 23, 133, 6, 212, 98, 11, 23, 133, 6, 211, 178, 11,
+ 23, 133, 6, 211, 117, 11, 23, 133, 6, 210, 159, 11, 23, 133, 4, 61, 11,
+ 23, 133, 4, 253, 158, 11, 23, 133, 4, 251, 66, 11, 23, 133, 4, 249, 60,
+ 11, 23, 133, 4, 75, 11, 23, 133, 4, 245, 6, 11, 23, 133, 4, 243, 202, 11,
+ 23, 133, 4, 242, 60, 11, 23, 133, 4, 73, 11, 23, 133, 4, 235, 144, 11,
+ 23, 133, 4, 235, 23, 11, 23, 133, 4, 156, 11, 23, 133, 4, 193, 11, 23,
+ 133, 4, 230, 25, 11, 23, 133, 4, 76, 11, 23, 133, 4, 226, 105, 11, 23,
+ 133, 4, 224, 96, 11, 23, 133, 4, 153, 11, 23, 133, 4, 222, 91, 11, 23,
+ 133, 4, 217, 152, 11, 23, 133, 4, 70, 11, 23, 133, 4, 214, 105, 11, 23,
+ 133, 4, 212, 98, 11, 23, 133, 4, 211, 178, 11, 23, 133, 4, 211, 117, 11,
+ 23, 133, 4, 210, 159, 11, 35, 6, 61, 11, 35, 6, 253, 158, 11, 35, 6, 251,
+ 66, 11, 35, 6, 249, 60, 11, 35, 6, 75, 11, 35, 6, 245, 6, 11, 35, 6, 243,
+ 202, 11, 35, 6, 242, 60, 11, 35, 6, 73, 11, 35, 6, 235, 144, 11, 35, 6,
+ 235, 23, 11, 35, 6, 156, 11, 35, 6, 193, 11, 35, 6, 230, 25, 11, 35, 6,
+ 76, 11, 35, 6, 226, 105, 11, 35, 6, 224, 96, 11, 35, 6, 153, 11, 35, 6,
+ 222, 91, 11, 35, 6, 217, 152, 11, 35, 6, 70, 11, 35, 6, 214, 105, 11, 35,
+ 6, 212, 98, 11, 35, 6, 211, 178, 11, 35, 6, 211, 117, 11, 35, 6, 210,
+ 159, 11, 35, 4, 61, 11, 35, 4, 253, 158, 11, 35, 4, 251, 66, 11, 35, 4,
+ 249, 60, 11, 35, 4, 75, 11, 35, 4, 245, 6, 11, 35, 4, 243, 202, 11, 35,
+ 4, 242, 60, 11, 35, 4, 73, 11, 35, 4, 235, 144, 11, 35, 4, 235, 23, 11,
+ 35, 4, 156, 11, 35, 4, 193, 11, 35, 4, 230, 25, 11, 35, 4, 76, 11, 35, 4,
+ 226, 105, 11, 35, 4, 224, 96, 11, 35, 4, 153, 11, 35, 4, 222, 91, 11, 35,
+ 4, 217, 152, 11, 35, 4, 70, 11, 35, 4, 214, 105, 11, 35, 4, 212, 98, 11,
+ 35, 4, 211, 178, 11, 35, 4, 211, 117, 11, 35, 4, 210, 159, 11, 35, 23, 6,
+ 61, 11, 35, 23, 6, 253, 158, 11, 35, 23, 6, 251, 66, 11, 35, 23, 6, 249,
+ 60, 11, 35, 23, 6, 75, 11, 35, 23, 6, 245, 6, 11, 35, 23, 6, 243, 202,
+ 11, 35, 23, 6, 242, 60, 11, 35, 23, 6, 73, 11, 35, 23, 6, 235, 144, 11,
+ 35, 23, 6, 235, 23, 11, 35, 23, 6, 156, 11, 35, 23, 6, 193, 11, 35, 23,
+ 6, 230, 25, 11, 35, 23, 6, 76, 11, 35, 23, 6, 226, 105, 11, 35, 23, 6,
+ 224, 96, 11, 35, 23, 6, 153, 11, 35, 23, 6, 222, 91, 11, 35, 23, 6, 217,
+ 152, 11, 35, 23, 6, 70, 11, 35, 23, 6, 214, 105, 11, 35, 23, 6, 212, 98,
+ 11, 35, 23, 6, 211, 178, 11, 35, 23, 6, 211, 117, 11, 35, 23, 6, 210,
+ 159, 11, 35, 23, 4, 61, 11, 35, 23, 4, 253, 158, 11, 35, 23, 4, 251, 66,
+ 11, 35, 23, 4, 249, 60, 11, 35, 23, 4, 75, 11, 35, 23, 4, 245, 6, 11, 35,
+ 23, 4, 243, 202, 11, 35, 23, 4, 242, 60, 11, 35, 23, 4, 73, 11, 35, 23,
+ 4, 235, 144, 11, 35, 23, 4, 235, 23, 11, 35, 23, 4, 156, 11, 35, 23, 4,
+ 193, 11, 35, 23, 4, 230, 25, 11, 35, 23, 4, 76, 11, 35, 23, 4, 226, 105,
+ 11, 35, 23, 4, 224, 96, 11, 35, 23, 4, 153, 11, 35, 23, 4, 222, 91, 11,
+ 35, 23, 4, 217, 152, 11, 35, 23, 4, 70, 11, 35, 23, 4, 214, 105, 11, 35,
+ 23, 4, 212, 98, 11, 35, 23, 4, 211, 178, 11, 35, 23, 4, 211, 117, 11, 35,
+ 23, 4, 210, 159, 11, 35, 32, 6, 61, 11, 35, 32, 6, 253, 158, 11, 35, 32,
+ 6, 251, 66, 11, 35, 32, 6, 249, 60, 11, 35, 32, 6, 75, 11, 35, 32, 6,
+ 245, 6, 11, 35, 32, 6, 243, 202, 11, 35, 32, 6, 242, 60, 11, 35, 32, 6,
+ 73, 11, 35, 32, 6, 235, 144, 11, 35, 32, 6, 235, 23, 11, 35, 32, 6, 156,
+ 11, 35, 32, 6, 193, 11, 35, 32, 6, 230, 25, 11, 35, 32, 6, 76, 11, 35,
+ 32, 6, 226, 105, 11, 35, 32, 6, 224, 96, 11, 35, 32, 6, 153, 11, 35, 32,
+ 6, 222, 91, 11, 35, 32, 6, 217, 152, 11, 35, 32, 6, 70, 11, 35, 32, 6,
+ 214, 105, 11, 35, 32, 6, 212, 98, 11, 35, 32, 6, 211, 178, 11, 35, 32, 6,
+ 211, 117, 11, 35, 32, 6, 210, 159, 11, 35, 32, 4, 61, 11, 35, 32, 4, 253,
+ 158, 11, 35, 32, 4, 251, 66, 11, 35, 32, 4, 249, 60, 11, 35, 32, 4, 75,
+ 11, 35, 32, 4, 245, 6, 11, 35, 32, 4, 243, 202, 11, 35, 32, 4, 242, 60,
+ 11, 35, 32, 4, 73, 11, 35, 32, 4, 235, 144, 11, 35, 32, 4, 235, 23, 11,
+ 35, 32, 4, 156, 11, 35, 32, 4, 193, 11, 35, 32, 4, 230, 25, 11, 35, 32,
+ 4, 76, 11, 35, 32, 4, 226, 105, 11, 35, 32, 4, 224, 96, 11, 35, 32, 4,
+ 153, 11, 35, 32, 4, 222, 91, 11, 35, 32, 4, 217, 152, 11, 35, 32, 4, 70,
+ 11, 35, 32, 4, 214, 105, 11, 35, 32, 4, 212, 98, 11, 35, 32, 4, 211, 178,
+ 11, 35, 32, 4, 211, 117, 11, 35, 32, 4, 210, 159, 11, 35, 23, 32, 6, 61,
+ 11, 35, 23, 32, 6, 253, 158, 11, 35, 23, 32, 6, 251, 66, 11, 35, 23, 32,
+ 6, 249, 60, 11, 35, 23, 32, 6, 75, 11, 35, 23, 32, 6, 245, 6, 11, 35, 23,
+ 32, 6, 243, 202, 11, 35, 23, 32, 6, 242, 60, 11, 35, 23, 32, 6, 73, 11,
+ 35, 23, 32, 6, 235, 144, 11, 35, 23, 32, 6, 235, 23, 11, 35, 23, 32, 6,
+ 156, 11, 35, 23, 32, 6, 193, 11, 35, 23, 32, 6, 230, 25, 11, 35, 23, 32,
+ 6, 76, 11, 35, 23, 32, 6, 226, 105, 11, 35, 23, 32, 6, 224, 96, 11, 35,
+ 23, 32, 6, 153, 11, 35, 23, 32, 6, 222, 91, 11, 35, 23, 32, 6, 217, 152,
+ 11, 35, 23, 32, 6, 70, 11, 35, 23, 32, 6, 214, 105, 11, 35, 23, 32, 6,
+ 212, 98, 11, 35, 23, 32, 6, 211, 178, 11, 35, 23, 32, 6, 211, 117, 11,
+ 35, 23, 32, 6, 210, 159, 11, 35, 23, 32, 4, 61, 11, 35, 23, 32, 4, 253,
+ 158, 11, 35, 23, 32, 4, 251, 66, 11, 35, 23, 32, 4, 249, 60, 11, 35, 23,
+ 32, 4, 75, 11, 35, 23, 32, 4, 245, 6, 11, 35, 23, 32, 4, 243, 202, 11,
+ 35, 23, 32, 4, 242, 60, 11, 35, 23, 32, 4, 73, 11, 35, 23, 32, 4, 235,
+ 144, 11, 35, 23, 32, 4, 235, 23, 11, 35, 23, 32, 4, 156, 11, 35, 23, 32,
+ 4, 193, 11, 35, 23, 32, 4, 230, 25, 11, 35, 23, 32, 4, 76, 11, 35, 23,
+ 32, 4, 226, 105, 11, 35, 23, 32, 4, 224, 96, 11, 35, 23, 32, 4, 153, 11,
+ 35, 23, 32, 4, 222, 91, 11, 35, 23, 32, 4, 217, 152, 11, 35, 23, 32, 4,
+ 70, 11, 35, 23, 32, 4, 214, 105, 11, 35, 23, 32, 4, 212, 98, 11, 35, 23,
+ 32, 4, 211, 178, 11, 35, 23, 32, 4, 211, 117, 11, 35, 23, 32, 4, 210,
+ 159, 11, 230, 138, 6, 61, 11, 230, 138, 6, 253, 158, 11, 230, 138, 6,
+ 251, 66, 11, 230, 138, 6, 249, 60, 11, 230, 138, 6, 75, 11, 230, 138, 6,
+ 245, 6, 11, 230, 138, 6, 243, 202, 11, 230, 138, 6, 242, 60, 11, 230,
+ 138, 6, 73, 11, 230, 138, 6, 235, 144, 11, 230, 138, 6, 235, 23, 11, 230,
+ 138, 6, 156, 11, 230, 138, 6, 193, 11, 230, 138, 6, 230, 25, 11, 230,
+ 138, 6, 76, 11, 230, 138, 6, 226, 105, 11, 230, 138, 6, 224, 96, 11, 230,
+ 138, 6, 153, 11, 230, 138, 6, 222, 91, 11, 230, 138, 6, 217, 152, 11,
+ 230, 138, 6, 70, 11, 230, 138, 6, 214, 105, 11, 230, 138, 6, 212, 98, 11,
+ 230, 138, 6, 211, 178, 11, 230, 138, 6, 211, 117, 11, 230, 138, 6, 210,
+ 159, 11, 230, 138, 4, 61, 11, 230, 138, 4, 253, 158, 11, 230, 138, 4,
+ 251, 66, 11, 230, 138, 4, 249, 60, 11, 230, 138, 4, 75, 11, 230, 138, 4,
+ 245, 6, 11, 230, 138, 4, 243, 202, 11, 230, 138, 4, 242, 60, 11, 230,
+ 138, 4, 73, 11, 230, 138, 4, 235, 144, 11, 230, 138, 4, 235, 23, 11, 230,
+ 138, 4, 156, 11, 230, 138, 4, 193, 11, 230, 138, 4, 230, 25, 11, 230,
+ 138, 4, 76, 11, 230, 138, 4, 226, 105, 11, 230, 138, 4, 224, 96, 11, 230,
+ 138, 4, 153, 11, 230, 138, 4, 222, 91, 11, 230, 138, 4, 217, 152, 11,
+ 230, 138, 4, 70, 11, 230, 138, 4, 214, 105, 11, 230, 138, 4, 212, 98, 11,
+ 230, 138, 4, 211, 178, 11, 230, 138, 4, 211, 117, 11, 230, 138, 4, 210,
+ 159, 11, 32, 4, 247, 119, 73, 11, 32, 4, 247, 119, 235, 144, 11, 23, 6,
+ 254, 143, 11, 23, 6, 252, 26, 11, 23, 6, 243, 107, 11, 23, 6, 248, 54,
+ 11, 23, 6, 245, 100, 11, 23, 6, 210, 85, 11, 23, 6, 245, 63, 11, 23, 6,
+ 216, 179, 11, 23, 6, 235, 185, 11, 23, 6, 234, 222, 11, 23, 6, 233, 98,
+ 11, 23, 6, 230, 102, 11, 23, 6, 227, 237, 11, 23, 6, 211, 157, 11, 23, 6,
+ 226, 199, 11, 23, 6, 225, 108, 11, 23, 6, 223, 37, 11, 23, 6, 216, 180,
+ 87, 11, 23, 6, 219, 177, 11, 23, 6, 217, 41, 11, 23, 6, 214, 157, 11, 23,
+ 6, 225, 133, 11, 23, 6, 250, 110, 11, 23, 6, 224, 161, 11, 23, 6, 226,
+ 201, 11, 23, 229, 221, 11, 23, 4, 254, 143, 11, 23, 4, 252, 26, 11, 23,
+ 4, 243, 107, 11, 23, 4, 248, 54, 11, 23, 4, 245, 100, 11, 23, 4, 210, 85,
+ 11, 23, 4, 245, 63, 11, 23, 4, 216, 179, 11, 23, 4, 235, 185, 11, 23, 4,
+ 234, 222, 11, 23, 4, 233, 98, 11, 23, 4, 230, 102, 11, 23, 4, 227, 237,
+ 11, 23, 4, 211, 157, 11, 23, 4, 226, 199, 11, 23, 4, 225, 108, 11, 23, 4,
+ 223, 37, 11, 23, 4, 40, 219, 177, 11, 23, 4, 219, 177, 11, 23, 4, 217,
+ 41, 11, 23, 4, 214, 157, 11, 23, 4, 225, 133, 11, 23, 4, 250, 110, 11,
+ 23, 4, 224, 161, 11, 23, 4, 226, 201, 11, 23, 225, 253, 247, 233, 11, 23,
+ 245, 101, 87, 11, 23, 216, 180, 87, 11, 23, 234, 223, 87, 11, 23, 225,
+ 134, 87, 11, 23, 223, 38, 87, 11, 23, 225, 109, 87, 11, 32, 6, 254, 143,
+ 11, 32, 6, 252, 26, 11, 32, 6, 243, 107, 11, 32, 6, 248, 54, 11, 32, 6,
+ 245, 100, 11, 32, 6, 210, 85, 11, 32, 6, 245, 63, 11, 32, 6, 216, 179,
+ 11, 32, 6, 235, 185, 11, 32, 6, 234, 222, 11, 32, 6, 233, 98, 11, 32, 6,
+ 230, 102, 11, 32, 6, 227, 237, 11, 32, 6, 211, 157, 11, 32, 6, 226, 199,
+ 11, 32, 6, 225, 108, 11, 32, 6, 223, 37, 11, 32, 6, 216, 180, 87, 11, 32,
+ 6, 219, 177, 11, 32, 6, 217, 41, 11, 32, 6, 214, 157, 11, 32, 6, 225,
+ 133, 11, 32, 6, 250, 110, 11, 32, 6, 224, 161, 11, 32, 6, 226, 201, 11,
+ 32, 229, 221, 11, 32, 4, 254, 143, 11, 32, 4, 252, 26, 11, 32, 4, 243,
+ 107, 11, 32, 4, 248, 54, 11, 32, 4, 245, 100, 11, 32, 4, 210, 85, 11, 32,
+ 4, 245, 63, 11, 32, 4, 216, 179, 11, 32, 4, 235, 185, 11, 32, 4, 234,
+ 222, 11, 32, 4, 233, 98, 11, 32, 4, 230, 102, 11, 32, 4, 227, 237, 11,
+ 32, 4, 211, 157, 11, 32, 4, 226, 199, 11, 32, 4, 225, 108, 11, 32, 4,
+ 223, 37, 11, 32, 4, 40, 219, 177, 11, 32, 4, 219, 177, 11, 32, 4, 217,
+ 41, 11, 32, 4, 214, 157, 11, 32, 4, 225, 133, 11, 32, 4, 250, 110, 11,
+ 32, 4, 224, 161, 11, 32, 4, 226, 201, 11, 32, 225, 253, 247, 233, 11, 32,
+ 245, 101, 87, 11, 32, 216, 180, 87, 11, 32, 234, 223, 87, 11, 32, 225,
+ 134, 87, 11, 32, 223, 38, 87, 11, 32, 225, 109, 87, 11, 23, 32, 6, 254,
+ 143, 11, 23, 32, 6, 252, 26, 11, 23, 32, 6, 243, 107, 11, 23, 32, 6, 248,
+ 54, 11, 23, 32, 6, 245, 100, 11, 23, 32, 6, 210, 85, 11, 23, 32, 6, 245,
+ 63, 11, 23, 32, 6, 216, 179, 11, 23, 32, 6, 235, 185, 11, 23, 32, 6, 234,
+ 222, 11, 23, 32, 6, 233, 98, 11, 23, 32, 6, 230, 102, 11, 23, 32, 6, 227,
+ 237, 11, 23, 32, 6, 211, 157, 11, 23, 32, 6, 226, 199, 11, 23, 32, 6,
+ 225, 108, 11, 23, 32, 6, 223, 37, 11, 23, 32, 6, 216, 180, 87, 11, 23,
+ 32, 6, 219, 177, 11, 23, 32, 6, 217, 41, 11, 23, 32, 6, 214, 157, 11, 23,
+ 32, 6, 225, 133, 11, 23, 32, 6, 250, 110, 11, 23, 32, 6, 224, 161, 11,
+ 23, 32, 6, 226, 201, 11, 23, 32, 229, 221, 11, 23, 32, 4, 254, 143, 11,
+ 23, 32, 4, 252, 26, 11, 23, 32, 4, 243, 107, 11, 23, 32, 4, 248, 54, 11,
+ 23, 32, 4, 245, 100, 11, 23, 32, 4, 210, 85, 11, 23, 32, 4, 245, 63, 11,
+ 23, 32, 4, 216, 179, 11, 23, 32, 4, 235, 185, 11, 23, 32, 4, 234, 222,
+ 11, 23, 32, 4, 233, 98, 11, 23, 32, 4, 230, 102, 11, 23, 32, 4, 227, 237,
+ 11, 23, 32, 4, 211, 157, 11, 23, 32, 4, 226, 199, 11, 23, 32, 4, 225,
+ 108, 11, 23, 32, 4, 223, 37, 11, 23, 32, 4, 40, 219, 177, 11, 23, 32, 4,
+ 219, 177, 11, 23, 32, 4, 217, 41, 11, 23, 32, 4, 214, 157, 11, 23, 32, 4,
+ 225, 133, 11, 23, 32, 4, 250, 110, 11, 23, 32, 4, 224, 161, 11, 23, 32,
+ 4, 226, 201, 11, 23, 32, 225, 253, 247, 233, 11, 23, 32, 245, 101, 87,
+ 11, 23, 32, 216, 180, 87, 11, 23, 32, 234, 223, 87, 11, 23, 32, 225, 134,
+ 87, 11, 23, 32, 223, 38, 87, 11, 23, 32, 225, 109, 87, 11, 35, 23, 6,
+ 254, 143, 11, 35, 23, 6, 252, 26, 11, 35, 23, 6, 243, 107, 11, 35, 23, 6,
+ 248, 54, 11, 35, 23, 6, 245, 100, 11, 35, 23, 6, 210, 85, 11, 35, 23, 6,
+ 245, 63, 11, 35, 23, 6, 216, 179, 11, 35, 23, 6, 235, 185, 11, 35, 23, 6,
+ 234, 222, 11, 35, 23, 6, 233, 98, 11, 35, 23, 6, 230, 102, 11, 35, 23, 6,
+ 227, 237, 11, 35, 23, 6, 211, 157, 11, 35, 23, 6, 226, 199, 11, 35, 23,
+ 6, 225, 108, 11, 35, 23, 6, 223, 37, 11, 35, 23, 6, 216, 180, 87, 11, 35,
+ 23, 6, 219, 177, 11, 35, 23, 6, 217, 41, 11, 35, 23, 6, 214, 157, 11, 35,
+ 23, 6, 225, 133, 11, 35, 23, 6, 250, 110, 11, 35, 23, 6, 224, 161, 11,
+ 35, 23, 6, 226, 201, 11, 35, 23, 229, 221, 11, 35, 23, 4, 254, 143, 11,
+ 35, 23, 4, 252, 26, 11, 35, 23, 4, 243, 107, 11, 35, 23, 4, 248, 54, 11,
+ 35, 23, 4, 245, 100, 11, 35, 23, 4, 210, 85, 11, 35, 23, 4, 245, 63, 11,
+ 35, 23, 4, 216, 179, 11, 35, 23, 4, 235, 185, 11, 35, 23, 4, 234, 222,
+ 11, 35, 23, 4, 233, 98, 11, 35, 23, 4, 230, 102, 11, 35, 23, 4, 227, 237,
+ 11, 35, 23, 4, 211, 157, 11, 35, 23, 4, 226, 199, 11, 35, 23, 4, 225,
+ 108, 11, 35, 23, 4, 223, 37, 11, 35, 23, 4, 40, 219, 177, 11, 35, 23, 4,
+ 219, 177, 11, 35, 23, 4, 217, 41, 11, 35, 23, 4, 214, 157, 11, 35, 23, 4,
+ 225, 133, 11, 35, 23, 4, 250, 110, 11, 35, 23, 4, 224, 161, 11, 35, 23,
+ 4, 226, 201, 11, 35, 23, 225, 253, 247, 233, 11, 35, 23, 245, 101, 87,
+ 11, 35, 23, 216, 180, 87, 11, 35, 23, 234, 223, 87, 11, 35, 23, 225, 134,
+ 87, 11, 35, 23, 223, 38, 87, 11, 35, 23, 225, 109, 87, 11, 35, 23, 32, 6,
+ 254, 143, 11, 35, 23, 32, 6, 252, 26, 11, 35, 23, 32, 6, 243, 107, 11,
+ 35, 23, 32, 6, 248, 54, 11, 35, 23, 32, 6, 245, 100, 11, 35, 23, 32, 6,
+ 210, 85, 11, 35, 23, 32, 6, 245, 63, 11, 35, 23, 32, 6, 216, 179, 11, 35,
+ 23, 32, 6, 235, 185, 11, 35, 23, 32, 6, 234, 222, 11, 35, 23, 32, 6, 233,
+ 98, 11, 35, 23, 32, 6, 230, 102, 11, 35, 23, 32, 6, 227, 237, 11, 35, 23,
+ 32, 6, 211, 157, 11, 35, 23, 32, 6, 226, 199, 11, 35, 23, 32, 6, 225,
+ 108, 11, 35, 23, 32, 6, 223, 37, 11, 35, 23, 32, 6, 216, 180, 87, 11, 35,
+ 23, 32, 6, 219, 177, 11, 35, 23, 32, 6, 217, 41, 11, 35, 23, 32, 6, 214,
+ 157, 11, 35, 23, 32, 6, 225, 133, 11, 35, 23, 32, 6, 250, 110, 11, 35,
+ 23, 32, 6, 224, 161, 11, 35, 23, 32, 6, 226, 201, 11, 35, 23, 32, 229,
+ 221, 11, 35, 23, 32, 4, 254, 143, 11, 35, 23, 32, 4, 252, 26, 11, 35, 23,
+ 32, 4, 243, 107, 11, 35, 23, 32, 4, 248, 54, 11, 35, 23, 32, 4, 245, 100,
+ 11, 35, 23, 32, 4, 210, 85, 11, 35, 23, 32, 4, 245, 63, 11, 35, 23, 32,
+ 4, 216, 179, 11, 35, 23, 32, 4, 235, 185, 11, 35, 23, 32, 4, 234, 222,
+ 11, 35, 23, 32, 4, 233, 98, 11, 35, 23, 32, 4, 230, 102, 11, 35, 23, 32,
+ 4, 227, 237, 11, 35, 23, 32, 4, 211, 157, 11, 35, 23, 32, 4, 226, 199,
+ 11, 35, 23, 32, 4, 225, 108, 11, 35, 23, 32, 4, 223, 37, 11, 35, 23, 32,
+ 4, 40, 219, 177, 11, 35, 23, 32, 4, 219, 177, 11, 35, 23, 32, 4, 217, 41,
+ 11, 35, 23, 32, 4, 214, 157, 11, 35, 23, 32, 4, 225, 133, 11, 35, 23, 32,
+ 4, 250, 110, 11, 35, 23, 32, 4, 224, 161, 11, 35, 23, 32, 4, 226, 201,
+ 11, 35, 23, 32, 225, 253, 247, 233, 11, 35, 23, 32, 245, 101, 87, 11, 35,
+ 23, 32, 216, 180, 87, 11, 35, 23, 32, 234, 223, 87, 11, 35, 23, 32, 225,
+ 134, 87, 11, 35, 23, 32, 223, 38, 87, 11, 35, 23, 32, 225, 109, 87, 11,
+ 23, 6, 247, 227, 11, 23, 4, 247, 227, 11, 23, 21, 210, 86, 11, 23, 21,
+ 110, 11, 23, 21, 105, 11, 23, 21, 158, 11, 23, 21, 161, 11, 23, 21, 189,
+ 11, 23, 21, 194, 11, 23, 21, 198, 11, 23, 21, 195, 11, 23, 21, 200, 11,
+ 139, 21, 210, 86, 11, 139, 21, 110, 11, 139, 21, 105, 11, 139, 21, 158,
+ 11, 139, 21, 161, 11, 139, 21, 189, 11, 139, 21, 194, 11, 139, 21, 198,
+ 11, 139, 21, 195, 11, 139, 21, 200, 11, 35, 21, 210, 86, 11, 35, 21, 110,
+ 11, 35, 21, 105, 11, 35, 21, 158, 11, 35, 21, 161, 11, 35, 21, 189, 11,
+ 35, 21, 194, 11, 35, 21, 198, 11, 35, 21, 195, 11, 35, 21, 200, 11, 35,
+ 23, 21, 210, 86, 11, 35, 23, 21, 110, 11, 35, 23, 21, 105, 11, 35, 23,
+ 21, 158, 11, 35, 23, 21, 161, 11, 35, 23, 21, 189, 11, 35, 23, 21, 194,
+ 11, 35, 23, 21, 198, 11, 35, 23, 21, 195, 11, 35, 23, 21, 200, 11, 230,
+ 138, 21, 210, 86, 11, 230, 138, 21, 110, 11, 230, 138, 21, 105, 11, 230,
+ 138, 21, 158, 11, 230, 138, 21, 161, 11, 230, 138, 21, 189, 11, 230, 138,
+ 21, 194, 11, 230, 138, 21, 198, 11, 230, 138, 21, 195, 11, 230, 138, 21,
+ 200, 10, 11, 254, 170, 10, 11, 252, 54, 10, 11, 235, 123, 10, 11, 248,
+ 195, 10, 11, 212, 30, 10, 11, 210, 108, 10, 11, 242, 37, 10, 11, 217, 80,
+ 10, 11, 211, 43, 10, 11, 234, 250, 10, 11, 233, 102, 10, 11, 231, 78, 10,
+ 11, 228, 62, 10, 11, 221, 166, 10, 11, 254, 196, 10, 11, 244, 142, 10,
+ 11, 222, 26, 10, 11, 224, 81, 10, 11, 223, 95, 10, 11, 220, 59, 10, 11,
+ 217, 7, 10, 11, 216, 192, 10, 11, 234, 129, 10, 11, 216, 202, 10, 11,
+ 248, 216, 10, 11, 210, 111, 10, 11, 242, 244, 10, 11, 247, 119, 252, 54,
+ 10, 11, 247, 119, 228, 62, 10, 11, 247, 119, 244, 142, 10, 11, 247, 119,
+ 224, 81, 10, 11, 65, 252, 54, 10, 11, 65, 235, 123, 10, 11, 65, 241, 218,
+ 10, 11, 65, 242, 37, 10, 11, 65, 211, 43, 10, 11, 65, 234, 250, 10, 11,
+ 65, 233, 102, 10, 11, 65, 231, 78, 10, 11, 65, 228, 62, 10, 11, 65, 221,
+ 166, 10, 11, 65, 254, 196, 10, 11, 65, 244, 142, 10, 11, 65, 222, 26, 10,
+ 11, 65, 224, 81, 10, 11, 65, 220, 59, 10, 11, 65, 217, 7, 10, 11, 65,
+ 216, 192, 10, 11, 65, 234, 129, 10, 11, 65, 248, 216, 10, 11, 65, 242,
+ 244, 10, 11, 217, 76, 235, 123, 10, 11, 217, 76, 242, 37, 10, 11, 217,
+ 76, 211, 43, 10, 11, 217, 76, 233, 102, 10, 11, 217, 76, 228, 62, 10, 11,
+ 217, 76, 221, 166, 10, 11, 217, 76, 254, 196, 10, 11, 217, 76, 222, 26,
+ 10, 11, 217, 76, 224, 81, 10, 11, 217, 76, 220, 59, 10, 11, 217, 76, 234,
+ 129, 10, 11, 217, 76, 248, 216, 10, 11, 217, 76, 242, 244, 10, 11, 217,
+ 76, 247, 119, 228, 62, 10, 11, 217, 76, 247, 119, 224, 81, 10, 11, 218,
+ 110, 252, 54, 10, 11, 218, 110, 235, 123, 10, 11, 218, 110, 241, 218, 10,
+ 11, 218, 110, 242, 37, 10, 11, 218, 110, 217, 80, 10, 11, 218, 110, 211,
+ 43, 10, 11, 218, 110, 234, 250, 10, 11, 218, 110, 231, 78, 10, 11, 218,
+ 110, 228, 62, 10, 11, 218, 110, 221, 166, 10, 11, 218, 110, 254, 196, 10,
+ 11, 218, 110, 244, 142, 10, 11, 218, 110, 222, 26, 10, 11, 218, 110, 224,
+ 81, 10, 11, 218, 110, 220, 59, 10, 11, 218, 110, 217, 7, 10, 11, 218,
+ 110, 216, 192, 10, 11, 218, 110, 234, 129, 10, 11, 218, 110, 248, 216,
+ 10, 11, 218, 110, 210, 111, 10, 11, 218, 110, 242, 244, 10, 11, 218, 110,
+ 247, 119, 252, 54, 10, 11, 218, 110, 247, 119, 244, 142, 10, 11, 232,
+ 122, 254, 170, 10, 11, 232, 122, 252, 54, 10, 11, 232, 122, 235, 123, 10,
+ 11, 232, 122, 248, 195, 10, 11, 232, 122, 241, 218, 10, 11, 232, 122,
+ 212, 30, 10, 11, 232, 122, 210, 108, 10, 11, 232, 122, 242, 37, 10, 11,
+ 232, 122, 217, 80, 10, 11, 232, 122, 211, 43, 10, 11, 232, 122, 233, 102,
+ 10, 11, 232, 122, 231, 78, 10, 11, 232, 122, 228, 62, 10, 11, 232, 122,
+ 221, 166, 10, 11, 232, 122, 254, 196, 10, 11, 232, 122, 244, 142, 10, 11,
+ 232, 122, 222, 26, 10, 11, 232, 122, 224, 81, 10, 11, 232, 122, 223, 95,
+ 10, 11, 232, 122, 220, 59, 10, 11, 232, 122, 217, 7, 10, 11, 232, 122,
+ 216, 192, 10, 11, 232, 122, 234, 129, 10, 11, 232, 122, 216, 202, 10, 11,
+ 232, 122, 248, 216, 10, 11, 232, 122, 210, 111, 10, 11, 232, 122, 242,
+ 244, 10, 11, 139, 252, 54, 10, 11, 139, 235, 123, 10, 11, 139, 248, 195,
+ 10, 11, 139, 212, 30, 10, 11, 139, 210, 108, 10, 11, 139, 242, 37, 10,
+ 11, 139, 217, 80, 10, 11, 139, 211, 43, 10, 11, 139, 233, 102, 10, 11,
+ 139, 231, 78, 10, 11, 139, 228, 62, 10, 11, 139, 221, 166, 10, 11, 139,
+ 254, 196, 10, 11, 139, 244, 142, 10, 11, 139, 222, 26, 10, 11, 139, 224,
+ 81, 10, 11, 139, 223, 95, 10, 11, 139, 220, 59, 10, 11, 139, 217, 7, 10,
+ 11, 139, 216, 192, 10, 11, 139, 234, 129, 10, 11, 139, 216, 202, 10, 11,
+ 139, 248, 216, 10, 11, 139, 210, 111, 10, 11, 139, 242, 244, 10, 11, 226,
+ 168, 66, 2, 122, 2, 217, 43, 10, 11, 226, 168, 122, 2, 248, 195, 231,
+ 205, 86, 245, 220, 211, 239, 231, 205, 86, 219, 28, 211, 239, 231, 205,
+ 86, 212, 9, 211, 239, 231, 205, 86, 228, 56, 211, 239, 231, 205, 86, 223,
+ 111, 246, 96, 231, 205, 86, 242, 127, 246, 96, 231, 205, 86, 71, 246, 96,
+ 231, 205, 86, 123, 64, 250, 141, 231, 205, 86, 113, 64, 250, 141, 231,
+ 205, 86, 134, 64, 250, 141, 231, 205, 86, 244, 11, 64, 250, 141, 231,
+ 205, 86, 244, 81, 64, 250, 141, 231, 205, 86, 219, 125, 64, 250, 141,
+ 231, 205, 86, 220, 122, 64, 250, 141, 231, 205, 86, 245, 193, 64, 250,
+ 141, 231, 205, 86, 228, 200, 64, 250, 141, 231, 205, 86, 123, 64, 252,
+ 153, 231, 205, 86, 113, 64, 252, 153, 231, 205, 86, 134, 64, 252, 153,
+ 231, 205, 86, 244, 11, 64, 252, 153, 231, 205, 86, 244, 81, 64, 252, 153,
+ 231, 205, 86, 219, 125, 64, 252, 153, 231, 205, 86, 220, 122, 64, 252,
+ 153, 231, 205, 86, 245, 193, 64, 252, 153, 231, 205, 86, 228, 200, 64,
+ 252, 153, 231, 205, 86, 123, 64, 250, 34, 231, 205, 86, 113, 64, 250, 34,
+ 231, 205, 86, 134, 64, 250, 34, 231, 205, 86, 244, 11, 64, 250, 34, 231,
+ 205, 86, 244, 81, 64, 250, 34, 231, 205, 86, 219, 125, 64, 250, 34, 231,
+ 205, 86, 220, 122, 64, 250, 34, 231, 205, 86, 245, 193, 64, 250, 34, 231,
+ 205, 86, 228, 200, 64, 250, 34, 231, 205, 86, 225, 25, 231, 205, 86, 226,
+ 156, 231, 205, 86, 252, 154, 231, 205, 86, 250, 70, 231, 205, 86, 218,
+ 239, 231, 205, 86, 218, 39, 231, 205, 86, 253, 179, 231, 205, 86, 211,
+ 232, 231, 205, 86, 235, 62, 231, 205, 86, 252, 184, 131, 86, 203, 252,
+ 184, 131, 86, 241, 43, 131, 86, 241, 42, 131, 86, 241, 41, 131, 86, 241,
+ 40, 131, 86, 241, 39, 131, 86, 241, 38, 131, 86, 241, 37, 131, 86, 241,
+ 36, 131, 86, 241, 35, 131, 86, 241, 34, 131, 86, 241, 33, 131, 86, 241,
+ 32, 131, 86, 241, 31, 131, 86, 241, 30, 131, 86, 241, 29, 131, 86, 241,
+ 28, 131, 86, 241, 27, 131, 86, 241, 26, 131, 86, 241, 25, 131, 86, 241,
+ 24, 131, 86, 241, 23, 131, 86, 241, 22, 131, 86, 241, 21, 131, 86, 241,
+ 20, 131, 86, 241, 19, 131, 86, 241, 18, 131, 86, 241, 17, 131, 86, 241,
+ 16, 131, 86, 241, 15, 131, 86, 241, 14, 131, 86, 241, 13, 131, 86, 241,
+ 12, 131, 86, 241, 11, 131, 86, 241, 10, 131, 86, 241, 9, 131, 86, 241, 8,
+ 131, 86, 241, 7, 131, 86, 241, 6, 131, 86, 241, 5, 131, 86, 241, 4, 131,
+ 86, 241, 3, 131, 86, 241, 2, 131, 86, 241, 1, 131, 86, 241, 0, 131, 86,
+ 240, 255, 131, 86, 240, 254, 131, 86, 240, 253, 131, 86, 240, 252, 131,
+ 86, 240, 251, 131, 86, 67, 252, 184, 131, 86, 213, 238, 131, 86, 213,
+ 237, 131, 86, 213, 236, 131, 86, 213, 235, 131, 86, 213, 234, 131, 86,
+ 213, 233, 131, 86, 213, 232, 131, 86, 213, 231, 131, 86, 213, 230, 131,
+ 86, 213, 229, 131, 86, 213, 228, 131, 86, 213, 227, 131, 86, 213, 226,
+ 131, 86, 213, 225, 131, 86, 213, 224, 131, 86, 213, 223, 131, 86, 213,
+ 222, 131, 86, 213, 221, 131, 86, 213, 220, 131, 86, 213, 219, 131, 86,
+ 213, 218, 131, 86, 213, 217, 131, 86, 213, 216, 131, 86, 213, 215, 131,
+ 86, 213, 214, 131, 86, 213, 213, 131, 86, 213, 212, 131, 86, 213, 211,
+ 131, 86, 213, 210, 131, 86, 213, 209, 131, 86, 213, 208, 131, 86, 213,
+ 207, 131, 86, 213, 206, 131, 86, 213, 205, 131, 86, 213, 204, 131, 86,
+ 213, 203, 131, 86, 213, 202, 131, 86, 213, 201, 131, 86, 213, 200, 131,
+ 86, 213, 199, 131, 86, 213, 198, 131, 86, 213, 197, 131, 86, 213, 196,
+ 131, 86, 213, 195, 131, 86, 213, 194, 131, 86, 213, 193, 131, 86, 213,
+ 192, 131, 86, 213, 191, 131, 86, 213, 190, 225, 33, 250, 243, 252, 184,
+ 225, 33, 250, 243, 255, 9, 64, 219, 15, 225, 33, 250, 243, 113, 64, 219,
+ 15, 225, 33, 250, 243, 134, 64, 219, 15, 225, 33, 250, 243, 244, 11, 64,
+ 219, 15, 225, 33, 250, 243, 244, 81, 64, 219, 15, 225, 33, 250, 243, 219,
+ 125, 64, 219, 15, 225, 33, 250, 243, 220, 122, 64, 219, 15, 225, 33, 250,
+ 243, 245, 193, 64, 219, 15, 225, 33, 250, 243, 228, 200, 64, 219, 15,
+ 225, 33, 250, 243, 216, 248, 64, 219, 15, 225, 33, 250, 243, 235, 139,
+ 64, 219, 15, 225, 33, 250, 243, 234, 31, 64, 219, 15, 225, 33, 250, 243,
+ 224, 15, 64, 219, 15, 225, 33, 250, 243, 234, 79, 64, 219, 15, 225, 33,
+ 250, 243, 255, 9, 64, 241, 225, 225, 33, 250, 243, 113, 64, 241, 225,
+ 225, 33, 250, 243, 134, 64, 241, 225, 225, 33, 250, 243, 244, 11, 64,
+ 241, 225, 225, 33, 250, 243, 244, 81, 64, 241, 225, 225, 33, 250, 243,
+ 219, 125, 64, 241, 225, 225, 33, 250, 243, 220, 122, 64, 241, 225, 225,
+ 33, 250, 243, 245, 193, 64, 241, 225, 225, 33, 250, 243, 228, 200, 64,
+ 241, 225, 225, 33, 250, 243, 216, 248, 64, 241, 225, 225, 33, 250, 243,
+ 235, 139, 64, 241, 225, 225, 33, 250, 243, 234, 31, 64, 241, 225, 225,
+ 33, 250, 243, 224, 15, 64, 241, 225, 225, 33, 250, 243, 234, 79, 64, 241,
+ 225, 225, 33, 250, 243, 255, 9, 64, 247, 247, 225, 33, 250, 243, 113, 64,
+ 247, 247, 225, 33, 250, 243, 134, 64, 247, 247, 225, 33, 250, 243, 244,
+ 11, 64, 247, 247, 225, 33, 250, 243, 244, 81, 64, 247, 247, 225, 33, 250,
+ 243, 219, 125, 64, 247, 247, 225, 33, 250, 243, 220, 122, 64, 247, 247,
+ 225, 33, 250, 243, 245, 193, 64, 247, 247, 225, 33, 250, 243, 228, 200,
+ 64, 247, 247, 225, 33, 250, 243, 216, 248, 64, 247, 247, 225, 33, 250,
+ 243, 235, 139, 64, 247, 247, 225, 33, 250, 243, 234, 31, 64, 247, 247,
+ 225, 33, 250, 243, 224, 15, 64, 247, 247, 225, 33, 250, 243, 234, 79, 64,
+ 247, 247, 225, 33, 250, 243, 85, 235, 62, 225, 33, 250, 243, 255, 9, 64,
+ 249, 242, 225, 33, 250, 243, 113, 64, 249, 242, 225, 33, 250, 243, 134,
+ 64, 249, 242, 225, 33, 250, 243, 244, 11, 64, 249, 242, 225, 33, 250,
+ 243, 244, 81, 64, 249, 242, 225, 33, 250, 243, 219, 125, 64, 249, 242,
+ 225, 33, 250, 243, 220, 122, 64, 249, 242, 225, 33, 250, 243, 245, 193,
+ 64, 249, 242, 225, 33, 250, 243, 228, 200, 64, 249, 242, 225, 33, 250,
+ 243, 216, 248, 64, 249, 242, 225, 33, 250, 243, 235, 139, 64, 249, 242,
+ 225, 33, 250, 243, 234, 31, 64, 249, 242, 225, 33, 250, 243, 224, 15, 64,
+ 249, 242, 225, 33, 250, 243, 234, 79, 64, 249, 242, 225, 33, 250, 243,
+ 71, 235, 62, 21, 210, 87, 243, 229, 218, 129, 21, 210, 87, 249, 219, 21,
+ 123, 249, 219, 21, 113, 249, 219, 21, 134, 249, 219, 21, 244, 11, 249,
+ 219, 21, 244, 81, 249, 219, 21, 219, 125, 249, 219, 21, 220, 122, 249,
+ 219, 21, 245, 193, 249, 219, 21, 228, 200, 249, 219, 88, 7, 6, 1, 61, 88,
+ 7, 6, 1, 253, 158, 88, 7, 6, 1, 251, 66, 88, 7, 6, 1, 249, 60, 88, 7, 6,
+ 1, 75, 88, 7, 6, 1, 245, 6, 88, 7, 6, 1, 243, 202, 88, 7, 6, 1, 242, 60,
+ 88, 7, 6, 1, 73, 88, 7, 6, 1, 235, 144, 88, 7, 6, 1, 235, 23, 88, 7, 6,
+ 1, 156, 88, 7, 6, 1, 193, 88, 7, 6, 1, 230, 25, 88, 7, 6, 1, 76, 88, 7,
+ 6, 1, 226, 105, 88, 7, 6, 1, 224, 96, 88, 7, 6, 1, 153, 88, 7, 6, 1, 222,
+ 91, 88, 7, 6, 1, 217, 152, 88, 7, 6, 1, 70, 88, 7, 6, 1, 214, 105, 88, 7,
+ 6, 1, 212, 98, 88, 7, 6, 1, 211, 178, 88, 7, 6, 1, 211, 117, 88, 7, 6, 1,
+ 210, 159, 216, 6, 220, 53, 251, 157, 7, 6, 1, 222, 91, 37, 32, 7, 6, 1,
+ 251, 66, 37, 32, 7, 6, 1, 153, 37, 250, 191, 37, 211, 180, 92, 7, 6, 1,
+ 61, 92, 7, 6, 1, 253, 158, 92, 7, 6, 1, 251, 66, 92, 7, 6, 1, 249, 60,
+ 92, 7, 6, 1, 75, 92, 7, 6, 1, 245, 6, 92, 7, 6, 1, 243, 202, 92, 7, 6, 1,
+ 242, 60, 92, 7, 6, 1, 73, 92, 7, 6, 1, 235, 144, 92, 7, 6, 1, 235, 23,
+ 92, 7, 6, 1, 156, 92, 7, 6, 1, 193, 92, 7, 6, 1, 230, 25, 92, 7, 6, 1,
+ 76, 92, 7, 6, 1, 226, 105, 92, 7, 6, 1, 224, 96, 92, 7, 6, 1, 153, 92, 7,
+ 6, 1, 222, 91, 92, 7, 6, 1, 217, 152, 92, 7, 6, 1, 70, 92, 7, 6, 1, 214,
+ 105, 92, 7, 6, 1, 212, 98, 92, 7, 6, 1, 211, 178, 92, 7, 6, 1, 211, 117,
+ 92, 7, 6, 1, 210, 159, 92, 240, 201, 92, 230, 49, 92, 221, 183, 92, 218,
+ 226, 92, 224, 218, 92, 212, 23, 152, 37, 7, 6, 1, 61, 152, 37, 7, 6, 1,
+ 253, 158, 152, 37, 7, 6, 1, 251, 66, 152, 37, 7, 6, 1, 249, 60, 152, 37,
+ 7, 6, 1, 75, 152, 37, 7, 6, 1, 245, 6, 152, 37, 7, 6, 1, 243, 202, 152,
+ 37, 7, 6, 1, 242, 60, 152, 37, 7, 6, 1, 73, 152, 37, 7, 6, 1, 235, 144,
+ 152, 37, 7, 6, 1, 235, 23, 152, 37, 7, 6, 1, 156, 152, 37, 7, 6, 1, 193,
+ 152, 37, 7, 6, 1, 230, 25, 152, 37, 7, 6, 1, 76, 152, 37, 7, 6, 1, 226,
+ 105, 152, 37, 7, 6, 1, 224, 96, 152, 37, 7, 6, 1, 153, 152, 37, 7, 6, 1,
+ 222, 91, 152, 37, 7, 6, 1, 217, 152, 152, 37, 7, 6, 1, 70, 152, 37, 7, 6,
+ 1, 214, 105, 152, 37, 7, 6, 1, 212, 98, 152, 37, 7, 6, 1, 211, 178, 152,
+ 37, 7, 6, 1, 211, 117, 152, 37, 7, 6, 1, 210, 159, 223, 157, 231, 97, 50,
+ 223, 157, 231, 94, 50, 152, 92, 7, 6, 1, 61, 152, 92, 7, 6, 1, 253, 158,
+ 152, 92, 7, 6, 1, 251, 66, 152, 92, 7, 6, 1, 249, 60, 152, 92, 7, 6, 1,
+ 75, 152, 92, 7, 6, 1, 245, 6, 152, 92, 7, 6, 1, 243, 202, 152, 92, 7, 6,
+ 1, 242, 60, 152, 92, 7, 6, 1, 73, 152, 92, 7, 6, 1, 235, 144, 152, 92, 7,
+ 6, 1, 235, 23, 152, 92, 7, 6, 1, 156, 152, 92, 7, 6, 1, 193, 152, 92, 7,
+ 6, 1, 230, 25, 152, 92, 7, 6, 1, 76, 152, 92, 7, 6, 1, 226, 105, 152, 92,
+ 7, 6, 1, 224, 96, 152, 92, 7, 6, 1, 153, 152, 92, 7, 6, 1, 222, 91, 152,
+ 92, 7, 6, 1, 217, 152, 152, 92, 7, 6, 1, 70, 152, 92, 7, 6, 1, 214, 105,
+ 152, 92, 7, 6, 1, 212, 98, 152, 92, 7, 6, 1, 211, 178, 152, 92, 7, 6, 1,
+ 211, 117, 152, 92, 7, 6, 1, 210, 159, 249, 128, 152, 92, 7, 6, 1, 226,
+ 105, 152, 92, 240, 113, 152, 92, 190, 152, 92, 206, 152, 92, 255, 25,
+ 152, 92, 212, 23, 42, 247, 164, 92, 250, 23, 92, 249, 170, 92, 243, 252,
+ 92, 240, 105, 92, 229, 86, 92, 229, 79, 92, 226, 214, 92, 219, 35, 92,
+ 120, 2, 245, 31, 78, 92, 213, 119, 223, 103, 235, 239, 16, 1, 61, 223,
+ 103, 235, 239, 16, 1, 253, 158, 223, 103, 235, 239, 16, 1, 251, 66, 223,
+ 103, 235, 239, 16, 1, 249, 60, 223, 103, 235, 239, 16, 1, 75, 223, 103,
+ 235, 239, 16, 1, 245, 6, 223, 103, 235, 239, 16, 1, 243, 202, 223, 103,
+ 235, 239, 16, 1, 242, 60, 223, 103, 235, 239, 16, 1, 73, 223, 103, 235,
+ 239, 16, 1, 235, 144, 223, 103, 235, 239, 16, 1, 235, 23, 223, 103, 235,
+ 239, 16, 1, 156, 223, 103, 235, 239, 16, 1, 193, 223, 103, 235, 239, 16,
+ 1, 230, 25, 223, 103, 235, 239, 16, 1, 76, 223, 103, 235, 239, 16, 1,
+ 226, 105, 223, 103, 235, 239, 16, 1, 224, 96, 223, 103, 235, 239, 16, 1,
+ 153, 223, 103, 235, 239, 16, 1, 222, 91, 223, 103, 235, 239, 16, 1, 217,
+ 152, 223, 103, 235, 239, 16, 1, 70, 223, 103, 235, 239, 16, 1, 214, 105,
+ 223, 103, 235, 239, 16, 1, 212, 98, 223, 103, 235, 239, 16, 1, 211, 178,
+ 223, 103, 235, 239, 16, 1, 211, 117, 223, 103, 235, 239, 16, 1, 210, 159,
+ 42, 141, 241, 63, 92, 56, 234, 18, 92, 56, 206, 92, 9, 214, 177, 238, 50,
+ 92, 9, 214, 177, 238, 54, 92, 9, 214, 177, 238, 62, 92, 56, 248, 90, 92,
+ 9, 214, 177, 238, 69, 92, 9, 214, 177, 238, 56, 92, 9, 214, 177, 238, 28,
+ 92, 9, 214, 177, 238, 55, 92, 9, 214, 177, 238, 68, 92, 9, 214, 177, 238,
+ 42, 92, 9, 214, 177, 238, 35, 92, 9, 214, 177, 238, 44, 92, 9, 214, 177,
+ 238, 65, 92, 9, 214, 177, 238, 51, 92, 9, 214, 177, 238, 67, 92, 9, 214,
+ 177, 238, 43, 92, 9, 214, 177, 238, 66, 92, 9, 214, 177, 238, 29, 92, 9,
+ 214, 177, 238, 34, 92, 9, 214, 177, 238, 27, 92, 9, 214, 177, 238, 57,
+ 92, 9, 214, 177, 238, 59, 92, 9, 214, 177, 238, 37, 92, 9, 214, 177, 238,
+ 48, 92, 9, 214, 177, 238, 46, 92, 9, 214, 177, 238, 72, 92, 9, 214, 177,
+ 238, 71, 92, 9, 214, 177, 238, 25, 92, 9, 214, 177, 238, 52, 92, 9, 214,
+ 177, 238, 70, 92, 9, 214, 177, 238, 61, 92, 9, 214, 177, 238, 47, 92, 9,
+ 214, 177, 238, 26, 92, 9, 214, 177, 238, 49, 92, 9, 214, 177, 238, 31,
+ 92, 9, 214, 177, 238, 30, 92, 9, 214, 177, 238, 60, 92, 9, 214, 177, 238,
+ 38, 92, 9, 214, 177, 238, 40, 92, 9, 214, 177, 238, 41, 92, 9, 214, 177,
+ 238, 33, 92, 9, 214, 177, 238, 64, 92, 9, 214, 177, 238, 58, 216, 6, 220,
+ 53, 251, 157, 9, 214, 177, 238, 39, 216, 6, 220, 53, 251, 157, 9, 214,
+ 177, 238, 71, 216, 6, 220, 53, 251, 157, 9, 214, 177, 238, 69, 216, 6,
+ 220, 53, 251, 157, 9, 214, 177, 238, 53, 216, 6, 220, 53, 251, 157, 9,
+ 214, 177, 238, 36, 216, 6, 220, 53, 251, 157, 9, 214, 177, 238, 49, 216,
+ 6, 220, 53, 251, 157, 9, 214, 177, 238, 32, 216, 6, 220, 53, 251, 157, 9,
+ 214, 177, 238, 63, 216, 6, 220, 53, 251, 157, 9, 214, 177, 238, 45, 37,
+ 154, 254, 245, 37, 154, 255, 12, 249, 71, 244, 42, 250, 0, 214, 194, 228,
+ 213, 2, 218, 153, 218, 33, 117, 230, 114, 218, 32, 250, 26, 253, 207,
+ 246, 54, 218, 31, 117, 251, 118, 223, 158, 251, 140, 253, 207, 228, 212,
+ 212, 41, 212, 35, 213, 131, 230, 195, 212, 25, 245, 224, 242, 181, 245,
+ 45, 245, 224, 242, 181, 254, 128, 245, 224, 242, 181, 253, 225, 242, 181,
+ 2, 231, 51, 166, 230, 129, 87, 212, 27, 249, 137, 230, 129, 87, 244, 92,
+ 224, 22, 230, 129, 87, 212, 27, 242, 210, 230, 129, 87, 243, 229, 230,
+ 129, 87, 212, 52, 242, 210, 230, 129, 87, 233, 80, 224, 22, 230, 129, 87,
+ 212, 52, 249, 137, 230, 129, 87, 249, 137, 230, 128, 166, 230, 129, 2,
+ 244, 190, 244, 92, 224, 22, 230, 129, 2, 244, 190, 233, 80, 224, 22, 230,
+ 129, 2, 244, 190, 243, 229, 230, 129, 2, 244, 190, 218, 38, 2, 244, 190,
+ 242, 179, 218, 156, 219, 255, 218, 156, 250, 116, 221, 168, 245, 39, 215,
+ 235, 248, 84, 215, 235, 226, 59, 215, 235, 251, 27, 215, 109, 250, 118,
+ 251, 210, 222, 191, 241, 179, 218, 36, 251, 210, 245, 228, 64, 231, 194,
+ 245, 228, 64, 223, 31, 241, 204, 244, 11, 233, 54, 249, 246, 231, 170,
+ 233, 53, 244, 176, 233, 53, 233, 54, 244, 47, 236, 0, 211, 239, 230, 58,
+ 216, 34, 253, 191, 242, 143, 231, 67, 212, 39, 217, 57, 233, 26, 252,
+ 149, 225, 62, 223, 111, 254, 54, 242, 127, 254, 54, 225, 217, 225, 218,
+ 250, 119, 218, 114, 242, 23, 219, 90, 64, 225, 44, 231, 87, 226, 197,
+ 251, 194, 224, 229, 233, 36, 223, 32, 249, 142, 223, 32, 252, 159, 249,
+ 173, 223, 31, 249, 95, 22, 223, 31, 218, 141, 251, 167, 219, 14, 251,
+ 151, 243, 251, 243, 247, 222, 207, 217, 246, 224, 231, 248, 175, 226,
+ 236, 218, 7, 243, 248, 219, 230, 244, 91, 251, 21, 2, 217, 239, 248, 35,
+ 219, 52, 240, 112, 249, 141, 220, 70, 240, 111, 240, 112, 249, 141, 246,
+ 108, 249, 172, 250, 84, 130, 250, 254, 232, 141, 249, 88, 241, 55, 224,
+ 233, 219, 240, 252, 36, 251, 163, 224, 234, 64, 244, 33, 249, 171, 244,
+ 24, 22, 234, 32, 217, 19, 211, 230, 242, 13, 222, 12, 251, 177, 22, 249,
+ 102, 211, 237, 242, 184, 249, 235, 242, 184, 215, 193, 246, 90, 252, 62,
+ 230, 93, 250, 7, 252, 62, 230, 92, 252, 187, 251, 176, 223, 33, 211, 201,
+ 224, 195, 251, 235, 251, 20, 235, 138, 250, 77, 215, 235, 244, 162, 250,
+ 76, 244, 94, 244, 95, 219, 12, 252, 158, 225, 250, 224, 244, 249, 204,
+ 252, 159, 217, 59, 215, 235, 249, 128, 244, 67, 225, 63, 248, 81, 235,
+ 131, 247, 131, 250, 232, 218, 113, 211, 240, 250, 98, 230, 129, 213, 164,
+ 250, 162, 221, 199, 221, 224, 242, 148, 250, 251, 250, 233, 240, 245,
+ 244, 130, 212, 0, 222, 200, 249, 236, 244, 86, 225, 2, 22, 244, 90, 230,
+ 227, 230, 108, 251, 10, 250, 39, 241, 232, 253, 241, 226, 62, 216, 14,
+ 241, 251, 250, 29, 216, 242, 216, 113, 250, 20, 251, 202, 225, 177, 253,
+ 240, 213, 172, 243, 110, 247, 197, 241, 156, 219, 84, 231, 234, 251, 245,
+ 243, 111, 247, 240, 251, 166, 244, 52, 225, 33, 250, 241, 28, 228, 47,
+ 230, 85, 28, 228, 42, 221, 212, 242, 99, 28, 234, 137, 215, 190, 213,
+ 154, 28, 221, 192, 222, 124, 220, 11, 2, 221, 227, 216, 244, 223, 178,
+ 22, 252, 159, 219, 105, 22, 219, 105, 251, 187, 252, 123, 22, 241, 49,
+ 250, 120, 244, 73, 219, 63, 222, 125, 218, 12, 215, 194, 240, 246, 223,
+ 179, 254, 129, 244, 31, 222, 136, 244, 31, 217, 241, 240, 235, 251, 119,
+ 240, 235, 2, 243, 94, 226, 229, 251, 119, 235, 131, 224, 239, 226, 228,
+ 245, 44, 224, 239, 226, 228, 240, 244, 252, 145, 253, 181, 216, 252, 231,
+ 234, 240, 240, 232, 111, 240, 240, 249, 176, 218, 125, 221, 198, 248, 43,
+ 218, 125, 244, 180, 235, 149, 233, 89, 235, 131, 250, 226, 245, 44, 250,
+ 226, 223, 141, 230, 112, 226, 114, 212, 41, 251, 123, 249, 145, 216, 106,
+ 233, 18, 223, 180, 250, 224, 246, 96, 249, 135, 212, 3, 219, 70, 219, 68,
+ 240, 245, 223, 153, 242, 170, 220, 57, 230, 145, 222, 194, 250, 108, 247,
+ 136, 225, 73, 251, 203, 245, 169, 226, 238, 218, 252, 220, 52, 251, 122,
+ 254, 92, 241, 54, 233, 121, 252, 60, 244, 90, 215, 193, 244, 90, 251,
+ 209, 215, 91, 241, 249, 250, 109, 252, 187, 250, 109, 243, 242, 252, 187,
+ 250, 109, 251, 237, 225, 195, 234, 26, 224, 248, 246, 87, 251, 11, 252,
+ 177, 251, 11, 247, 130, 230, 113, 244, 190, 249, 146, 244, 190, 216, 107,
+ 244, 190, 223, 181, 244, 190, 250, 225, 244, 190, 246, 97, 244, 190, 218,
+ 241, 212, 3, 240, 246, 244, 190, 230, 146, 244, 190, 247, 137, 244, 190,
+ 225, 74, 244, 190, 243, 245, 244, 190, 242, 20, 244, 190, 211, 224, 244,
+ 190, 252, 71, 244, 190, 226, 45, 244, 190, 225, 74, 228, 53, 225, 232,
+ 224, 186, 245, 13, 245, 227, 228, 53, 230, 110, 216, 19, 71, 120, 225, 7,
+ 252, 182, 235, 242, 71, 124, 225, 7, 252, 182, 235, 242, 71, 43, 225, 7,
+ 252, 182, 235, 242, 71, 44, 225, 7, 252, 182, 235, 242, 244, 84, 242, 16,
+ 50, 212, 33, 242, 16, 50, 226, 215, 242, 16, 50, 216, 135, 120, 50, 216,
+ 135, 124, 50, 250, 19, 242, 11, 50, 204, 242, 11, 50, 249, 123, 211, 220,
+ 241, 251, 245, 14, 229, 104, 217, 151, 235, 125, 246, 92, 234, 82, 251,
+ 247, 211, 220, 249, 249, 224, 127, 242, 14, 224, 230, 231, 177, 220, 4,
+ 253, 203, 220, 4, 241, 164, 220, 4, 211, 220, 221, 240, 211, 220, 251,
+ 186, 244, 29, 251, 90, 236, 0, 219, 169, 251, 89, 236, 0, 219, 169, 251,
+ 162, 242, 194, 231, 185, 211, 221, 244, 174, 231, 186, 22, 211, 222, 241,
+ 60, 242, 10, 113, 231, 59, 241, 60, 242, 10, 113, 211, 219, 241, 60, 242,
+ 10, 224, 255, 226, 227, 211, 222, 2, 251, 106, 245, 225, 251, 141, 2,
+ 213, 246, 225, 168, 2, 251, 212, 242, 34, 231, 186, 2, 242, 110, 225,
+ 109, 231, 174, 231, 186, 2, 215, 97, 226, 208, 231, 185, 226, 208, 211,
+ 221, 252, 186, 249, 190, 211, 205, 224, 189, 235, 131, 226, 223, 235,
+ 131, 242, 169, 242, 222, 252, 187, 254, 113, 245, 18, 254, 160, 254, 161,
+ 230, 136, 236, 5, 219, 100, 235, 232, 248, 34, 225, 167, 242, 105, 248,
+ 179, 232, 201, 229, 211, 224, 254, 244, 191, 231, 142, 242, 33, 252, 138,
+ 225, 1, 217, 171, 225, 66, 234, 64, 78, 232, 111, 233, 10, 222, 233, 243,
+ 54, 218, 131, 234, 63, 251, 171, 249, 148, 2, 241, 227, 212, 19, 252, 69,
+ 241, 227, 251, 135, 241, 227, 113, 241, 225, 219, 10, 241, 227, 242, 120,
+ 241, 227, 241, 228, 2, 74, 251, 208, 241, 227, 242, 127, 241, 227, 211,
+ 42, 241, 227, 224, 128, 241, 227, 241, 228, 2, 223, 33, 223, 44, 241,
+ 225, 241, 228, 248, 81, 247, 249, 220, 82, 2, 115, 59, 235, 215, 245,
+ 172, 192, 251, 116, 254, 112, 87, 251, 195, 219, 92, 87, 249, 228, 87,
+ 218, 246, 217, 248, 87, 246, 85, 248, 157, 87, 225, 67, 64, 224, 249,
+ 244, 61, 252, 3, 247, 165, 87, 219, 3, 252, 158, 216, 149, 252, 158, 71,
+ 244, 51, 240, 211, 225, 5, 87, 230, 149, 252, 172, 249, 98, 245, 32, 114,
+ 247, 132, 50, 249, 139, 250, 242, 252, 144, 2, 211, 40, 50, 252, 144, 2,
+ 247, 132, 50, 252, 144, 2, 245, 47, 50, 252, 144, 2, 224, 228, 50, 230,
+ 149, 2, 211, 235, 250, 138, 2, 214, 153, 215, 231, 22, 211, 40, 50, 221,
+ 178, 225, 166, 249, 208, 251, 139, 230, 186, 244, 56, 247, 185, 226, 161,
+ 247, 190, 246, 49, 244, 107, 244, 40, 204, 244, 107, 244, 40, 226, 76, 2,
+ 249, 100, 226, 76, 244, 183, 214, 163, 251, 16, 217, 18, 251, 16, 250,
+ 243, 235, 242, 250, 138, 2, 214, 153, 215, 230, 250, 138, 2, 246, 104,
+ 215, 230, 252, 141, 250, 137, 250, 6, 224, 123, 222, 185, 224, 123, 226,
+ 19, 218, 121, 222, 131, 215, 222, 222, 131, 251, 191, 217, 91, 233, 51,
+ 228, 45, 228, 46, 2, 248, 80, 249, 147, 250, 0, 251, 192, 204, 251, 192,
+ 242, 127, 251, 192, 251, 208, 251, 192, 226, 157, 251, 192, 251, 189,
+ 229, 205, 252, 175, 221, 186, 231, 60, 217, 1, 223, 123, 226, 74, 244,
+ 159, 231, 234, 221, 223, 254, 89, 224, 145, 254, 252, 232, 113, 250, 127,
+ 231, 72, 226, 129, 215, 238, 235, 252, 215, 238, 226, 82, 246, 24, 87,
+ 235, 249, 245, 119, 245, 120, 2, 246, 104, 80, 48, 250, 0, 231, 200, 2,
+ 232, 107, 244, 73, 250, 0, 231, 200, 2, 223, 157, 244, 73, 204, 231, 200,
+ 2, 223, 157, 244, 73, 204, 231, 200, 2, 232, 107, 244, 73, 224, 236, 224,
+ 237, 240, 248, 229, 84, 230, 159, 225, 117, 230, 159, 225, 118, 2, 97,
+ 80, 253, 207, 233, 46, 213, 175, 230, 158, 230, 159, 225, 118, 226, 230,
+ 228, 75, 230, 159, 225, 116, 254, 90, 2, 252, 129, 251, 10, 213, 172,
+ 251, 10, 216, 254, 223, 173, 213, 171, 215, 60, 97, 253, 247, 250, 2, 97,
+ 22, 140, 204, 250, 36, 253, 247, 250, 2, 97, 22, 140, 204, 250, 36, 253,
+ 248, 2, 37, 123, 226, 120, 250, 2, 246, 104, 22, 214, 153, 204, 250, 36,
+ 253, 247, 254, 88, 246, 104, 22, 214, 153, 204, 250, 36, 253, 247, 121,
+ 251, 138, 87, 125, 251, 138, 87, 219, 7, 2, 251, 4, 91, 219, 6, 219, 7,
+ 2, 123, 219, 31, 212, 35, 219, 7, 2, 134, 219, 31, 212, 34, 252, 115,
+ 245, 172, 225, 27, 233, 42, 231, 211, 242, 184, 222, 247, 231, 211, 242,
+ 184, 232, 152, 2, 235, 225, 225, 199, 250, 0, 232, 152, 2, 234, 138, 234,
+ 138, 232, 151, 204, 232, 151, 252, 44, 252, 45, 2, 251, 4, 91, 251, 190,
+ 232, 204, 87, 223, 174, 251, 86, 252, 185, 2, 140, 80, 48, 245, 143, 2,
+ 140, 80, 48, 226, 197, 2, 245, 31, 164, 2, 43, 44, 80, 48, 219, 39, 2,
+ 97, 80, 48, 216, 14, 2, 214, 153, 80, 48, 228, 75, 123, 214, 184, 245,
+ 191, 87, 234, 136, 216, 247, 235, 219, 16, 31, 7, 6, 233, 9, 235, 219,
+ 16, 31, 7, 4, 233, 9, 235, 219, 16, 31, 227, 199, 235, 219, 16, 31, 217,
+ 183, 235, 219, 16, 31, 7, 233, 9, 244, 96, 245, 172, 216, 9, 211, 199,
+ 242, 21, 227, 182, 22, 251, 197, 241, 66, 225, 50, 230, 226, 216, 255,
+ 249, 114, 252, 159, 219, 125, 225, 9, 218, 157, 2, 230, 224, 247, 120,
+ 235, 131, 16, 31, 252, 57, 215, 220, 245, 156, 85, 42, 251, 86, 71, 42,
+ 251, 86, 233, 85, 223, 111, 250, 35, 233, 85, 251, 208, 250, 35, 233, 85,
+ 226, 157, 247, 248, 233, 85, 251, 208, 247, 248, 4, 226, 157, 247, 248,
+ 4, 251, 208, 247, 248, 214, 162, 223, 111, 215, 225, 246, 105, 223, 111,
+ 215, 225, 214, 162, 4, 223, 111, 215, 225, 246, 105, 4, 223, 111, 215,
+ 225, 37, 249, 131, 224, 252, 249, 131, 224, 253, 2, 242, 26, 51, 249,
+ 131, 224, 252, 228, 49, 43, 220, 153, 2, 134, 247, 118, 250, 4, 244, 191,
+ 123, 226, 242, 250, 4, 244, 191, 113, 226, 242, 250, 4, 244, 191, 134,
+ 226, 242, 250, 4, 244, 191, 244, 11, 226, 242, 250, 4, 244, 191, 244, 81,
+ 226, 242, 250, 4, 244, 191, 219, 125, 226, 242, 250, 4, 244, 191, 220,
+ 122, 226, 242, 250, 4, 244, 191, 245, 193, 226, 242, 250, 4, 244, 191,
+ 228, 200, 226, 242, 250, 4, 244, 191, 216, 248, 226, 242, 250, 4, 244,
+ 191, 245, 168, 226, 242, 250, 4, 244, 191, 215, 77, 226, 242, 250, 4,
+ 244, 191, 226, 192, 250, 4, 244, 191, 215, 56, 250, 4, 244, 191, 216,
+ 140, 250, 4, 244, 191, 244, 7, 250, 4, 244, 191, 244, 79, 250, 4, 244,
+ 191, 219, 121, 250, 4, 244, 191, 220, 121, 250, 4, 244, 191, 245, 192,
+ 250, 4, 244, 191, 228, 199, 250, 4, 244, 191, 216, 246, 250, 4, 244, 191,
+ 245, 166, 250, 4, 244, 191, 215, 75, 230, 117, 243, 230, 216, 36, 216, 2,
+ 218, 148, 64, 232, 239, 219, 170, 64, 235, 132, 230, 106, 242, 124, 244,
+ 190, 242, 124, 244, 191, 2, 219, 74, 245, 13, 244, 191, 2, 217, 14, 64,
+ 235, 53, 219, 74, 244, 191, 2, 204, 230, 110, 219, 74, 244, 191, 2, 204,
+ 230, 111, 22, 219, 74, 245, 13, 219, 74, 244, 191, 2, 204, 230, 111, 22,
+ 249, 230, 217, 247, 219, 74, 244, 191, 2, 204, 230, 111, 22, 216, 104,
+ 245, 13, 219, 74, 244, 191, 2, 242, 25, 219, 74, 244, 191, 2, 240, 247,
+ 211, 233, 244, 190, 219, 74, 244, 191, 2, 219, 74, 245, 13, 244, 191,
+ 221, 217, 248, 62, 244, 33, 223, 88, 244, 190, 219, 74, 244, 191, 2, 241,
+ 226, 245, 13, 219, 74, 244, 191, 2, 218, 34, 219, 73, 244, 190, 229, 87,
+ 244, 190, 245, 23, 244, 190, 214, 188, 244, 190, 244, 191, 2, 249, 230,
+ 217, 247, 225, 192, 244, 190, 249, 201, 244, 190, 249, 202, 244, 190,
+ 234, 62, 244, 190, 244, 191, 216, 137, 115, 234, 63, 234, 62, 244, 191,
+ 2, 219, 74, 245, 13, 234, 62, 244, 191, 2, 250, 0, 245, 13, 244, 191, 2,
+ 218, 88, 216, 19, 244, 191, 2, 218, 88, 216, 20, 22, 211, 233, 245, 15,
+ 244, 191, 2, 218, 88, 216, 20, 22, 216, 104, 245, 13, 247, 192, 244, 190,
+ 211, 204, 244, 190, 254, 108, 244, 190, 224, 227, 244, 190, 249, 116,
+ 244, 190, 225, 170, 244, 190, 244, 191, 2, 232, 126, 64, 215, 204, 247,
+ 192, 251, 88, 223, 88, 244, 190, 243, 239, 244, 191, 2, 204, 230, 110,
+ 254, 106, 244, 190, 244, 152, 244, 190, 212, 20, 244, 190, 219, 91, 244,
+ 190, 216, 71, 244, 190, 242, 125, 244, 190, 232, 114, 249, 116, 244, 190,
+ 244, 191, 2, 204, 230, 110, 240, 203, 244, 190, 244, 191, 2, 204, 230,
+ 111, 22, 249, 230, 217, 247, 244, 191, 221, 190, 236, 0, 244, 153, 253,
+ 213, 244, 190, 244, 49, 244, 190, 219, 92, 244, 190, 247, 165, 244, 190,
+ 244, 191, 211, 230, 230, 110, 244, 191, 2, 231, 84, 231, 144, 242, 124,
+ 250, 225, 244, 191, 2, 219, 74, 245, 13, 250, 225, 244, 191, 2, 217, 14,
+ 64, 235, 53, 219, 74, 250, 225, 244, 191, 2, 204, 230, 110, 219, 74, 250,
+ 225, 244, 191, 2, 241, 226, 245, 13, 250, 225, 244, 191, 2, 211, 196,
+ 219, 75, 234, 62, 250, 225, 244, 191, 2, 250, 0, 245, 13, 224, 227, 250,
+ 225, 244, 190, 249, 116, 250, 225, 244, 190, 212, 20, 250, 225, 244, 190,
+ 244, 191, 2, 228, 75, 242, 163, 243, 34, 244, 191, 2, 226, 215, 243, 34,
+ 225, 168, 251, 168, 248, 75, 221, 169, 230, 145, 241, 229, 230, 145, 219,
+ 8, 230, 145, 242, 5, 225, 168, 223, 156, 123, 242, 15, 225, 168, 223,
+ 156, 251, 178, 242, 11, 236, 0, 250, 179, 225, 168, 243, 238, 225, 168,
+ 2, 224, 227, 244, 190, 225, 168, 2, 244, 41, 242, 10, 222, 203, 241, 214,
+ 218, 143, 232, 149, 223, 162, 250, 244, 241, 162, 215, 248, 241, 162,
+ 215, 249, 2, 251, 114, 228, 53, 215, 248, 231, 32, 192, 223, 163, 218,
+ 149, 215, 246, 215, 247, 250, 244, 251, 92, 226, 194, 251, 92, 215, 201,
+ 251, 93, 218, 129, 230, 187, 254, 130, 244, 97, 245, 137, 224, 255, 250,
+ 244, 226, 194, 224, 255, 250, 244, 217, 32, 226, 194, 217, 32, 253, 180,
+ 226, 194, 253, 180, 223, 118, 213, 247, 248, 58, 215, 192, 253, 242, 232,
+ 117, 215, 254, 230, 139, 230, 116, 223, 161, 218, 6, 223, 161, 230, 116,
+ 251, 28, 254, 229, 215, 245, 220, 16, 222, 182, 219, 1, 203, 215, 252,
+ 232, 230, 67, 215, 252, 232, 230, 249, 190, 50, 224, 255, 250, 229, 223,
+ 44, 232, 230, 215, 222, 244, 74, 226, 197, 224, 238, 247, 123, 228, 75,
+ 245, 125, 50, 219, 72, 87, 228, 75, 219, 72, 87, 224, 122, 232, 193, 236,
+ 0, 235, 157, 225, 41, 87, 247, 146, 228, 52, 232, 193, 87, 224, 232, 212,
+ 41, 87, 228, 66, 212, 41, 87, 252, 2, 228, 75, 252, 1, 252, 0, 230, 116,
+ 252, 0, 225, 213, 228, 75, 225, 212, 250, 100, 249, 124, 231, 56, 87,
+ 211, 218, 87, 223, 59, 252, 187, 87, 216, 37, 212, 41, 249, 253, 219,
+ 234, 252, 118, 252, 116, 225, 242, 249, 177, 249, 86, 252, 169, 250, 22,
+ 43, 232, 90, 108, 16, 31, 224, 3, 108, 16, 31, 254, 192, 108, 16, 31,
+ 244, 96, 108, 16, 31, 245, 223, 108, 16, 31, 212, 40, 108, 16, 31, 254,
+ 43, 108, 16, 31, 254, 44, 223, 105, 108, 16, 31, 254, 44, 223, 104, 108,
+ 16, 31, 254, 44, 213, 143, 108, 16, 31, 254, 44, 213, 142, 108, 16, 31,
+ 213, 157, 108, 16, 31, 213, 156, 108, 16, 31, 213, 155, 108, 16, 31, 218,
+ 44, 108, 16, 31, 225, 125, 218, 44, 108, 16, 31, 85, 218, 44, 108, 16,
+ 31, 231, 55, 218, 71, 108, 16, 31, 231, 55, 218, 70, 108, 16, 31, 231,
+ 55, 218, 69, 108, 16, 31, 250, 38, 108, 16, 31, 222, 1, 108, 16, 31, 228,
+ 188, 108, 16, 31, 213, 141, 108, 16, 31, 213, 140, 108, 16, 31, 222, 204,
+ 222, 1, 108, 16, 31, 222, 204, 222, 0, 108, 16, 31, 242, 166, 108, 16,
+ 31, 219, 166, 108, 16, 31, 235, 177, 226, 153, 108, 16, 31, 235, 177,
+ 226, 152, 108, 16, 31, 249, 134, 64, 235, 176, 108, 16, 31, 223, 101, 64,
+ 235, 176, 108, 16, 31, 249, 168, 226, 153, 108, 16, 31, 235, 175, 226,
+ 153, 108, 16, 31, 218, 72, 64, 249, 167, 108, 16, 31, 249, 134, 64, 249,
+ 167, 108, 16, 31, 249, 134, 64, 249, 166, 108, 16, 31, 249, 168, 254, 83,
+ 108, 16, 31, 222, 2, 64, 249, 168, 254, 83, 108, 16, 31, 218, 72, 64,
+ 222, 2, 64, 249, 167, 108, 16, 31, 213, 243, 108, 16, 31, 216, 84, 226,
+ 153, 108, 16, 31, 233, 57, 226, 153, 108, 16, 31, 254, 82, 226, 153, 108,
+ 16, 31, 218, 72, 64, 254, 81, 108, 16, 31, 222, 2, 64, 254, 81, 108, 16,
+ 31, 218, 72, 64, 222, 2, 64, 254, 81, 108, 16, 31, 213, 158, 64, 254, 81,
+ 108, 16, 31, 223, 101, 64, 254, 81, 108, 16, 31, 223, 101, 64, 254, 80,
+ 108, 16, 31, 223, 100, 108, 16, 31, 223, 99, 108, 16, 31, 223, 98, 108,
+ 16, 31, 223, 97, 108, 16, 31, 254, 157, 108, 16, 31, 254, 156, 108, 16,
+ 31, 231, 163, 108, 16, 31, 222, 7, 108, 16, 31, 253, 246, 108, 16, 31,
+ 223, 125, 108, 16, 31, 223, 124, 108, 16, 31, 253, 183, 108, 16, 31, 251,
+ 229, 226, 153, 108, 16, 31, 217, 49, 108, 16, 31, 217, 48, 108, 16, 31,
+ 224, 8, 232, 222, 108, 16, 31, 251, 183, 108, 16, 31, 251, 182, 108, 16,
+ 31, 251, 181, 108, 16, 31, 254, 138, 108, 16, 31, 226, 218, 108, 16, 31,
+ 218, 248, 108, 16, 31, 216, 82, 108, 16, 31, 242, 96, 108, 16, 31, 212,
+ 28, 108, 16, 31, 224, 226, 108, 16, 31, 251, 14, 108, 16, 31, 215, 86,
+ 108, 16, 31, 250, 246, 230, 122, 108, 16, 31, 221, 202, 64, 235, 55, 108,
+ 16, 31, 251, 25, 108, 16, 31, 215, 219, 108, 16, 31, 218, 154, 215, 219,
+ 108, 16, 31, 232, 148, 108, 16, 31, 219, 56, 108, 16, 31, 214, 142, 108,
+ 16, 31, 240, 246, 246, 64, 108, 16, 31, 253, 227, 108, 16, 31, 224, 234,
+ 253, 227, 108, 16, 31, 251, 142, 108, 16, 31, 224, 225, 251, 142, 108,
+ 16, 31, 254, 135, 108, 16, 31, 218, 117, 218, 26, 218, 116, 108, 16, 31,
+ 218, 117, 218, 26, 218, 115, 108, 16, 31, 218, 68, 108, 16, 31, 224, 200,
+ 108, 16, 31, 247, 181, 108, 16, 31, 247, 183, 108, 16, 31, 247, 182, 108,
+ 16, 31, 224, 131, 108, 16, 31, 224, 120, 108, 16, 31, 249, 122, 108, 16,
+ 31, 249, 121, 108, 16, 31, 249, 120, 108, 16, 31, 249, 119, 108, 16, 31,
+ 249, 118, 108, 16, 31, 254, 169, 108, 16, 31, 252, 119, 64, 231, 149,
+ 108, 16, 31, 252, 119, 64, 214, 17, 108, 16, 31, 223, 57, 108, 16, 31,
+ 240, 238, 108, 16, 31, 228, 212, 108, 16, 31, 248, 145, 108, 16, 31, 230,
+ 134, 108, 16, 31, 163, 246, 94, 108, 16, 31, 163, 226, 132, 9, 14, 240,
+ 102, 9, 14, 240, 101, 9, 14, 240, 100, 9, 14, 240, 99, 9, 14, 240, 98, 9,
+ 14, 240, 97, 9, 14, 240, 96, 9, 14, 240, 95, 9, 14, 240, 94, 9, 14, 240,
+ 93, 9, 14, 240, 92, 9, 14, 240, 91, 9, 14, 240, 90, 9, 14, 240, 89, 9,
+ 14, 240, 88, 9, 14, 240, 87, 9, 14, 240, 86, 9, 14, 240, 85, 9, 14, 240,
+ 84, 9, 14, 240, 83, 9, 14, 240, 82, 9, 14, 240, 81, 9, 14, 240, 80, 9,
+ 14, 240, 79, 9, 14, 240, 78, 9, 14, 240, 77, 9, 14, 240, 76, 9, 14, 240,
+ 75, 9, 14, 240, 74, 9, 14, 240, 73, 9, 14, 240, 72, 9, 14, 240, 71, 9,
+ 14, 240, 70, 9, 14, 240, 69, 9, 14, 240, 68, 9, 14, 240, 67, 9, 14, 240,
+ 66, 9, 14, 240, 65, 9, 14, 240, 64, 9, 14, 240, 63, 9, 14, 240, 62, 9,
+ 14, 240, 61, 9, 14, 240, 60, 9, 14, 240, 59, 9, 14, 240, 58, 9, 14, 240,
+ 57, 9, 14, 240, 56, 9, 14, 240, 55, 9, 14, 240, 54, 9, 14, 240, 53, 9,
+ 14, 240, 52, 9, 14, 240, 51, 9, 14, 240, 50, 9, 14, 240, 49, 9, 14, 240,
+ 48, 9, 14, 240, 47, 9, 14, 240, 46, 9, 14, 240, 45, 9, 14, 240, 44, 9,
+ 14, 240, 43, 9, 14, 240, 42, 9, 14, 240, 41, 9, 14, 240, 40, 9, 14, 240,
+ 39, 9, 14, 240, 38, 9, 14, 240, 37, 9, 14, 240, 36, 9, 14, 240, 35, 9,
+ 14, 240, 34, 9, 14, 240, 33, 9, 14, 240, 32, 9, 14, 240, 31, 9, 14, 240,
+ 30, 9, 14, 240, 29, 9, 14, 240, 28, 9, 14, 240, 27, 9, 14, 240, 26, 9,
+ 14, 240, 25, 9, 14, 240, 24, 9, 14, 240, 23, 9, 14, 240, 22, 9, 14, 240,
+ 21, 9, 14, 240, 20, 9, 14, 240, 19, 9, 14, 240, 18, 9, 14, 240, 17, 9,
+ 14, 240, 16, 9, 14, 240, 15, 9, 14, 240, 14, 9, 14, 240, 13, 9, 14, 240,
+ 12, 9, 14, 240, 11, 9, 14, 240, 10, 9, 14, 240, 9, 9, 14, 240, 8, 9, 14,
+ 240, 7, 9, 14, 240, 6, 9, 14, 240, 5, 9, 14, 240, 4, 9, 14, 240, 3, 9,
+ 14, 240, 2, 9, 14, 240, 1, 9, 14, 240, 0, 9, 14, 239, 255, 9, 14, 239,
+ 254, 9, 14, 239, 253, 9, 14, 239, 252, 9, 14, 239, 251, 9, 14, 239, 250,
+ 9, 14, 239, 249, 9, 14, 239, 248, 9, 14, 239, 247, 9, 14, 239, 246, 9,
+ 14, 239, 245, 9, 14, 239, 244, 9, 14, 239, 243, 9, 14, 239, 242, 9, 14,
+ 239, 241, 9, 14, 239, 240, 9, 14, 239, 239, 9, 14, 239, 238, 9, 14, 239,
+ 237, 9, 14, 239, 236, 9, 14, 239, 235, 9, 14, 239, 234, 9, 14, 239, 233,
+ 9, 14, 239, 232, 9, 14, 239, 231, 9, 14, 239, 230, 9, 14, 239, 229, 9,
+ 14, 239, 228, 9, 14, 239, 227, 9, 14, 239, 226, 9, 14, 239, 225, 9, 14,
+ 239, 224, 9, 14, 239, 223, 9, 14, 239, 222, 9, 14, 239, 221, 9, 14, 239,
+ 220, 9, 14, 239, 219, 9, 14, 239, 218, 9, 14, 239, 217, 9, 14, 239, 216,
+ 9, 14, 239, 215, 9, 14, 239, 214, 9, 14, 239, 213, 9, 14, 239, 212, 9,
+ 14, 239, 211, 9, 14, 239, 210, 9, 14, 239, 209, 9, 14, 239, 208, 9, 14,
+ 239, 207, 9, 14, 239, 206, 9, 14, 239, 205, 9, 14, 239, 204, 9, 14, 239,
+ 203, 9, 14, 239, 202, 9, 14, 239, 201, 9, 14, 239, 200, 9, 14, 239, 199,
+ 9, 14, 239, 198, 9, 14, 239, 197, 9, 14, 239, 196, 9, 14, 239, 195, 9,
+ 14, 239, 194, 9, 14, 239, 193, 9, 14, 239, 192, 9, 14, 239, 191, 9, 14,
+ 239, 190, 9, 14, 239, 189, 9, 14, 239, 188, 9, 14, 239, 187, 9, 14, 239,
+ 186, 9, 14, 239, 185, 9, 14, 239, 184, 9, 14, 239, 183, 9, 14, 239, 182,
+ 9, 14, 239, 181, 9, 14, 239, 180, 9, 14, 239, 179, 9, 14, 239, 178, 9,
+ 14, 239, 177, 9, 14, 239, 176, 9, 14, 239, 175, 9, 14, 239, 174, 9, 14,
+ 239, 173, 9, 14, 239, 172, 9, 14, 239, 171, 9, 14, 239, 170, 9, 14, 239,
+ 169, 9, 14, 239, 168, 9, 14, 239, 167, 9, 14, 239, 166, 9, 14, 239, 165,
+ 9, 14, 239, 164, 9, 14, 239, 163, 9, 14, 239, 162, 9, 14, 239, 161, 9,
+ 14, 239, 160, 9, 14, 239, 159, 9, 14, 239, 158, 9, 14, 239, 157, 9, 14,
+ 239, 156, 9, 14, 239, 155, 9, 14, 239, 154, 9, 14, 239, 153, 9, 14, 239,
+ 152, 9, 14, 239, 151, 9, 14, 239, 150, 9, 14, 239, 149, 9, 14, 239, 148,
+ 9, 14, 239, 147, 9, 14, 239, 146, 9, 14, 239, 145, 9, 14, 239, 144, 9,
+ 14, 239, 143, 9, 14, 239, 142, 9, 14, 239, 141, 9, 14, 239, 140, 9, 14,
+ 239, 139, 9, 14, 239, 138, 9, 14, 239, 137, 9, 14, 239, 136, 9, 14, 239,
+ 135, 9, 14, 239, 134, 9, 14, 239, 133, 9, 14, 239, 132, 9, 14, 239, 131,
+ 9, 14, 239, 130, 9, 14, 239, 129, 9, 14, 239, 128, 9, 14, 239, 127, 9,
+ 14, 239, 126, 9, 14, 239, 125, 9, 14, 239, 124, 9, 14, 239, 123, 9, 14,
+ 239, 122, 9, 14, 239, 121, 9, 14, 239, 120, 9, 14, 239, 119, 9, 14, 239,
+ 118, 9, 14, 239, 117, 9, 14, 239, 116, 9, 14, 239, 115, 9, 14, 239, 114,
+ 9, 14, 239, 113, 9, 14, 239, 112, 9, 14, 239, 111, 9, 14, 239, 110, 9,
+ 14, 239, 109, 9, 14, 239, 108, 9, 14, 239, 107, 9, 14, 239, 106, 9, 14,
+ 239, 105, 9, 14, 239, 104, 9, 14, 239, 103, 9, 14, 239, 102, 9, 14, 239,
+ 101, 9, 14, 239, 100, 9, 14, 239, 99, 9, 14, 239, 98, 9, 14, 239, 97, 9,
+ 14, 239, 96, 9, 14, 239, 95, 9, 14, 239, 94, 9, 14, 239, 93, 9, 14, 239,
+ 92, 9, 14, 239, 91, 9, 14, 239, 90, 9, 14, 239, 89, 9, 14, 239, 88, 9,
+ 14, 239, 87, 9, 14, 239, 86, 9, 14, 239, 85, 9, 14, 239, 84, 9, 14, 239,
+ 83, 9, 14, 239, 82, 9, 14, 239, 81, 9, 14, 239, 80, 9, 14, 239, 79, 9,
+ 14, 239, 78, 9, 14, 239, 77, 9, 14, 239, 76, 9, 14, 239, 75, 9, 14, 239,
+ 74, 9, 14, 239, 73, 9, 14, 239, 72, 9, 14, 239, 71, 9, 14, 239, 70, 9,
+ 14, 239, 69, 9, 14, 239, 68, 9, 14, 239, 67, 9, 14, 239, 66, 9, 14, 239,
+ 65, 9, 14, 239, 64, 9, 14, 239, 63, 9, 14, 239, 62, 9, 14, 239, 61, 9,
+ 14, 239, 60, 9, 14, 239, 59, 9, 14, 239, 58, 9, 14, 239, 57, 9, 14, 239,
+ 56, 9, 14, 239, 55, 9, 14, 239, 54, 9, 14, 239, 53, 9, 14, 239, 52, 9,
+ 14, 239, 51, 9, 14, 239, 50, 9, 14, 239, 49, 9, 14, 239, 48, 9, 14, 239,
+ 47, 9, 14, 239, 46, 9, 14, 239, 45, 9, 14, 239, 44, 9, 14, 239, 43, 9,
+ 14, 239, 42, 9, 14, 239, 41, 9, 14, 239, 40, 9, 14, 239, 39, 9, 14, 239,
+ 38, 9, 14, 239, 37, 9, 14, 239, 36, 9, 14, 239, 35, 9, 14, 239, 34, 9,
+ 14, 239, 33, 9, 14, 239, 32, 9, 14, 239, 31, 9, 14, 239, 30, 9, 14, 239,
+ 29, 9, 14, 239, 28, 9, 14, 239, 27, 9, 14, 239, 26, 9, 14, 239, 25, 9,
+ 14, 239, 24, 9, 14, 239, 23, 9, 14, 239, 22, 9, 14, 239, 21, 9, 14, 239,
+ 20, 9, 14, 239, 19, 9, 14, 239, 18, 9, 14, 239, 17, 9, 14, 239, 16, 9,
+ 14, 239, 15, 9, 14, 239, 14, 9, 14, 239, 13, 9, 14, 239, 12, 9, 14, 239,
+ 11, 9, 14, 239, 10, 9, 14, 239, 9, 9, 14, 239, 8, 9, 14, 239, 7, 9, 14,
+ 239, 6, 9, 14, 239, 5, 9, 14, 239, 4, 9, 14, 239, 3, 9, 14, 239, 2, 9,
+ 14, 239, 1, 9, 14, 239, 0, 9, 14, 238, 255, 9, 14, 238, 254, 9, 14, 238,
+ 253, 9, 14, 238, 252, 9, 14, 238, 251, 9, 14, 238, 250, 9, 14, 238, 249,
+ 9, 14, 238, 248, 9, 14, 238, 247, 9, 14, 238, 246, 9, 14, 238, 245, 9,
+ 14, 238, 244, 9, 14, 238, 243, 9, 14, 238, 242, 9, 14, 238, 241, 9, 14,
+ 238, 240, 9, 14, 238, 239, 9, 14, 238, 238, 9, 14, 238, 237, 9, 14, 238,
+ 236, 9, 14, 238, 235, 9, 14, 238, 234, 9, 14, 238, 233, 9, 14, 238, 232,
+ 9, 14, 238, 231, 9, 14, 238, 230, 9, 14, 238, 229, 9, 14, 238, 228, 9,
+ 14, 238, 227, 9, 14, 238, 226, 9, 14, 238, 225, 9, 14, 238, 224, 9, 14,
+ 238, 223, 9, 14, 238, 222, 9, 14, 238, 221, 9, 14, 238, 220, 9, 14, 238,
+ 219, 9, 14, 238, 218, 9, 14, 238, 217, 9, 14, 238, 216, 9, 14, 238, 215,
+ 9, 14, 238, 214, 9, 14, 238, 213, 9, 14, 238, 212, 9, 14, 238, 211, 9,
+ 14, 238, 210, 9, 14, 238, 209, 9, 14, 238, 208, 9, 14, 238, 207, 9, 14,
+ 238, 206, 9, 14, 238, 205, 9, 14, 238, 204, 9, 14, 238, 203, 9, 14, 238,
+ 202, 9, 14, 238, 201, 9, 14, 238, 200, 9, 14, 238, 199, 9, 14, 238, 198,
+ 9, 14, 238, 197, 9, 14, 238, 196, 9, 14, 238, 195, 9, 14, 238, 194, 9,
+ 14, 238, 193, 9, 14, 238, 192, 9, 14, 238, 191, 9, 14, 238, 190, 9, 14,
+ 238, 189, 9, 14, 238, 188, 9, 14, 238, 187, 9, 14, 238, 186, 9, 14, 238,
+ 185, 9, 14, 238, 184, 9, 14, 238, 183, 9, 14, 238, 182, 9, 14, 238, 181,
+ 9, 14, 238, 180, 9, 14, 238, 179, 9, 14, 238, 178, 9, 14, 238, 177, 9,
+ 14, 238, 176, 9, 14, 238, 175, 9, 14, 238, 174, 9, 14, 238, 173, 9, 14,
+ 238, 172, 9, 14, 238, 171, 9, 14, 238, 170, 9, 14, 238, 169, 9, 14, 238,
+ 168, 9, 14, 238, 167, 9, 14, 238, 166, 9, 14, 238, 165, 9, 14, 238, 164,
+ 9, 14, 238, 163, 9, 14, 238, 162, 9, 14, 238, 161, 9, 14, 238, 160, 9,
+ 14, 238, 159, 9, 14, 238, 158, 9, 14, 238, 157, 9, 14, 238, 156, 9, 14,
+ 238, 155, 9, 14, 238, 154, 9, 14, 238, 153, 9, 14, 238, 152, 9, 14, 238,
+ 151, 9, 14, 238, 150, 9, 14, 238, 149, 9, 14, 238, 148, 9, 14, 238, 147,
+ 9, 14, 238, 146, 9, 14, 238, 145, 9, 14, 238, 144, 9, 14, 238, 143, 9,
+ 14, 238, 142, 9, 14, 238, 141, 9, 14, 238, 140, 9, 14, 238, 139, 9, 14,
+ 238, 138, 9, 14, 238, 137, 9, 14, 238, 136, 9, 14, 238, 135, 9, 14, 238,
+ 134, 9, 14, 238, 133, 9, 14, 238, 132, 9, 14, 238, 131, 9, 14, 238, 130,
+ 9, 14, 238, 129, 9, 14, 238, 128, 9, 14, 238, 127, 9, 14, 238, 126, 9,
+ 14, 238, 125, 9, 14, 238, 124, 9, 14, 238, 123, 9, 14, 238, 122, 9, 14,
+ 238, 121, 9, 14, 238, 120, 9, 14, 238, 119, 9, 14, 238, 118, 9, 14, 238,
+ 117, 9, 14, 238, 116, 9, 14, 238, 115, 9, 14, 238, 114, 9, 14, 238, 113,
+ 9, 14, 238, 112, 9, 14, 238, 111, 9, 14, 238, 110, 9, 14, 238, 109, 9,
+ 14, 238, 108, 9, 14, 238, 107, 9, 14, 238, 106, 9, 14, 238, 105, 9, 14,
+ 238, 104, 9, 14, 238, 103, 9, 14, 238, 102, 9, 14, 238, 101, 9, 14, 238,
+ 100, 9, 14, 238, 99, 9, 14, 238, 98, 9, 14, 238, 97, 9, 14, 238, 96, 9,
+ 14, 238, 95, 9, 14, 238, 94, 9, 14, 238, 93, 9, 14, 238, 92, 9, 14, 238,
+ 91, 9, 14, 238, 90, 9, 14, 238, 89, 9, 14, 238, 88, 9, 14, 238, 87, 9,
+ 14, 238, 86, 9, 14, 238, 85, 9, 14, 238, 84, 9, 14, 238, 83, 9, 14, 238,
+ 82, 9, 14, 238, 81, 9, 14, 238, 80, 9, 14, 238, 79, 9, 14, 238, 78, 9,
+ 14, 238, 77, 9, 14, 238, 76, 9, 14, 238, 75, 9, 14, 238, 74, 9, 14, 238,
+ 73, 233, 90, 217, 84, 129, 219, 18, 129, 245, 31, 78, 129, 223, 254, 78,
+ 129, 54, 50, 129, 247, 132, 50, 129, 225, 182, 50, 129, 254, 126, 129,
+ 254, 57, 129, 43, 226, 3, 129, 44, 226, 3, 129, 253, 216, 129, 96, 50,
+ 129, 249, 219, 129, 240, 167, 129, 243, 229, 218, 129, 129, 219, 46, 129,
+ 21, 210, 86, 129, 21, 110, 129, 21, 105, 129, 21, 158, 129, 21, 161, 129,
+ 21, 189, 129, 21, 194, 129, 21, 198, 129, 21, 195, 129, 21, 200, 129,
+ 249, 226, 129, 220, 150, 129, 233, 15, 50, 129, 245, 98, 50, 129, 242,
+ 130, 50, 129, 224, 13, 78, 129, 249, 217, 253, 206, 129, 7, 6, 1, 61,
+ 129, 7, 6, 1, 253, 158, 129, 7, 6, 1, 251, 66, 129, 7, 6, 1, 249, 60,
+ 129, 7, 6, 1, 75, 129, 7, 6, 1, 245, 6, 129, 7, 6, 1, 243, 202, 129, 7,
+ 6, 1, 242, 60, 129, 7, 6, 1, 73, 129, 7, 6, 1, 235, 144, 129, 7, 6, 1,
+ 235, 23, 129, 7, 6, 1, 156, 129, 7, 6, 1, 193, 129, 7, 6, 1, 230, 25,
+ 129, 7, 6, 1, 76, 129, 7, 6, 1, 226, 105, 129, 7, 6, 1, 224, 96, 129, 7,
+ 6, 1, 153, 129, 7, 6, 1, 222, 91, 129, 7, 6, 1, 217, 152, 129, 7, 6, 1,
+ 70, 129, 7, 6, 1, 214, 105, 129, 7, 6, 1, 212, 98, 129, 7, 6, 1, 211,
+ 178, 129, 7, 6, 1, 211, 117, 129, 7, 6, 1, 210, 159, 129, 43, 42, 127,
+ 129, 223, 50, 219, 46, 129, 44, 42, 127, 129, 250, 31, 255, 14, 129, 121,
+ 232, 213, 129, 242, 137, 255, 14, 129, 7, 4, 1, 61, 129, 7, 4, 1, 253,
+ 158, 129, 7, 4, 1, 251, 66, 129, 7, 4, 1, 249, 60, 129, 7, 4, 1, 75, 129,
+ 7, 4, 1, 245, 6, 129, 7, 4, 1, 243, 202, 129, 7, 4, 1, 242, 60, 129, 7,
+ 4, 1, 73, 129, 7, 4, 1, 235, 144, 129, 7, 4, 1, 235, 23, 129, 7, 4, 1,
+ 156, 129, 7, 4, 1, 193, 129, 7, 4, 1, 230, 25, 129, 7, 4, 1, 76, 129, 7,
+ 4, 1, 226, 105, 129, 7, 4, 1, 224, 96, 129, 7, 4, 1, 153, 129, 7, 4, 1,
+ 222, 91, 129, 7, 4, 1, 217, 152, 129, 7, 4, 1, 70, 129, 7, 4, 1, 214,
+ 105, 129, 7, 4, 1, 212, 98, 129, 7, 4, 1, 211, 178, 129, 7, 4, 1, 211,
+ 117, 129, 7, 4, 1, 210, 159, 129, 43, 249, 99, 127, 129, 67, 232, 213,
+ 129, 44, 249, 99, 127, 129, 182, 251, 6, 217, 84, 45, 221, 78, 45, 221,
+ 67, 45, 221, 56, 45, 221, 44, 45, 221, 33, 45, 221, 22, 45, 221, 11, 45,
+ 221, 0, 45, 220, 245, 45, 220, 237, 45, 220, 236, 45, 220, 235, 45, 220,
+ 234, 45, 220, 232, 45, 220, 231, 45, 220, 230, 45, 220, 229, 45, 220,
+ 228, 45, 220, 227, 45, 220, 226, 45, 220, 225, 45, 220, 224, 45, 220,
+ 223, 45, 220, 221, 45, 220, 220, 45, 220, 219, 45, 220, 218, 45, 220,
+ 217, 45, 220, 216, 45, 220, 215, 45, 220, 214, 45, 220, 213, 45, 220,
+ 212, 45, 220, 210, 45, 220, 209, 45, 220, 208, 45, 220, 207, 45, 220,
+ 206, 45, 220, 205, 45, 220, 204, 45, 220, 203, 45, 220, 202, 45, 220,
+ 201, 45, 220, 199, 45, 220, 198, 45, 220, 197, 45, 220, 196, 45, 220,
+ 195, 45, 220, 194, 45, 220, 193, 45, 220, 192, 45, 220, 191, 45, 220,
+ 190, 45, 220, 188, 45, 220, 187, 45, 220, 186, 45, 220, 185, 45, 220,
+ 184, 45, 220, 183, 45, 220, 182, 45, 220, 181, 45, 220, 180, 45, 220,
+ 179, 45, 220, 177, 45, 220, 176, 45, 220, 175, 45, 220, 174, 45, 220,
+ 173, 45, 220, 172, 45, 220, 171, 45, 220, 170, 45, 220, 169, 45, 220,
+ 168, 45, 220, 166, 45, 220, 165, 45, 220, 164, 45, 220, 163, 45, 220,
+ 162, 45, 220, 161, 45, 220, 160, 45, 220, 159, 45, 220, 158, 45, 220,
+ 157, 45, 221, 154, 45, 221, 153, 45, 221, 152, 45, 221, 151, 45, 221,
+ 150, 45, 221, 149, 45, 221, 148, 45, 221, 147, 45, 221, 146, 45, 221,
+ 145, 45, 221, 143, 45, 221, 142, 45, 221, 141, 45, 221, 140, 45, 221,
+ 139, 45, 221, 138, 45, 221, 137, 45, 221, 136, 45, 221, 135, 45, 221,
+ 134, 45, 221, 132, 45, 221, 131, 45, 221, 130, 45, 221, 129, 45, 221,
+ 128, 45, 221, 127, 45, 221, 126, 45, 221, 125, 45, 221, 124, 45, 221,
+ 123, 45, 221, 121, 45, 221, 120, 45, 221, 119, 45, 221, 118, 45, 221,
+ 117, 45, 221, 116, 45, 221, 115, 45, 221, 114, 45, 221, 113, 45, 221,
+ 112, 45, 221, 110, 45, 221, 109, 45, 221, 108, 45, 221, 107, 45, 221,
+ 106, 45, 221, 105, 45, 221, 104, 45, 221, 103, 45, 221, 102, 45, 221,
+ 101, 45, 221, 99, 45, 221, 98, 45, 221, 97, 45, 221, 96, 45, 221, 95, 45,
+ 221, 94, 45, 221, 93, 45, 221, 92, 45, 221, 91, 45, 221, 90, 45, 221, 88,
+ 45, 221, 87, 45, 221, 86, 45, 221, 85, 45, 221, 84, 45, 221, 83, 45, 221,
+ 82, 45, 221, 81, 45, 221, 80, 45, 221, 79, 45, 221, 77, 45, 221, 76, 45,
+ 221, 75, 45, 221, 74, 45, 221, 73, 45, 221, 72, 45, 221, 71, 45, 221, 70,
+ 45, 221, 69, 45, 221, 68, 45, 221, 66, 45, 221, 65, 45, 221, 64, 45, 221,
+ 63, 45, 221, 62, 45, 221, 61, 45, 221, 60, 45, 221, 59, 45, 221, 58, 45,
+ 221, 57, 45, 221, 55, 45, 221, 54, 45, 221, 53, 45, 221, 52, 45, 221, 51,
+ 45, 221, 50, 45, 221, 49, 45, 221, 48, 45, 221, 47, 45, 221, 46, 45, 221,
+ 43, 45, 221, 42, 45, 221, 41, 45, 221, 40, 45, 221, 39, 45, 221, 38, 45,
+ 221, 37, 45, 221, 36, 45, 221, 35, 45, 221, 34, 45, 221, 32, 45, 221, 31,
+ 45, 221, 30, 45, 221, 29, 45, 221, 28, 45, 221, 27, 45, 221, 26, 45, 221,
+ 25, 45, 221, 24, 45, 221, 23, 45, 221, 21, 45, 221, 20, 45, 221, 19, 45,
+ 221, 18, 45, 221, 17, 45, 221, 16, 45, 221, 15, 45, 221, 14, 45, 221, 13,
+ 45, 221, 12, 45, 221, 10, 45, 221, 9, 45, 221, 8, 45, 221, 7, 45, 221, 6,
+ 45, 221, 5, 45, 221, 4, 45, 221, 3, 45, 221, 2, 45, 221, 1, 45, 220, 255,
+ 45, 220, 254, 45, 220, 253, 45, 220, 252, 45, 220, 251, 45, 220, 250, 45,
+ 220, 249, 45, 220, 248, 45, 220, 247, 45, 220, 246, 45, 220, 244, 45,
+ 220, 243, 45, 220, 242, 45, 220, 241, 45, 220, 240, 45, 220, 239, 45,
+ 220, 238, 227, 202, 227, 204, 218, 152, 64, 241, 233, 219, 48, 218, 152,
+ 64, 216, 212, 218, 85, 245, 143, 64, 216, 212, 245, 56, 245, 143, 64,
+ 215, 243, 245, 109, 245, 132, 245, 133, 255, 7, 255, 8, 254, 167, 252,
+ 47, 252, 179, 251, 131, 135, 217, 89, 203, 217, 89, 240, 227, 217, 93,
+ 232, 214, 244, 145, 166, 232, 213, 245, 143, 64, 232, 213, 233, 0, 228,
+ 135, 245, 112, 232, 214, 217, 89, 67, 217, 89, 212, 118, 244, 20, 244,
+ 145, 244, 125, 250, 230, 223, 53, 249, 143, 220, 28, 226, 130, 232, 150,
+ 110, 219, 58, 220, 28, 235, 255, 232, 150, 210, 86, 219, 191, 248, 151,
+ 232, 204, 245, 77, 247, 155, 248, 31, 249, 178, 110, 248, 141, 248, 31,
+ 249, 178, 105, 248, 140, 248, 31, 249, 178, 158, 248, 139, 248, 31, 249,
+ 178, 161, 248, 138, 152, 255, 7, 229, 209, 217, 177, 236, 62, 217, 180,
+ 245, 143, 64, 215, 244, 251, 213, 245, 62, 251, 5, 251, 7, 245, 143, 64,
+ 231, 81, 245, 110, 218, 61, 218, 78, 245, 77, 245, 78, 235, 232, 220,
+ 138, 161, 244, 107, 220, 137, 243, 237, 235, 232, 220, 138, 158, 242,
+ 121, 220, 137, 242, 118, 235, 232, 220, 138, 105, 223, 121, 220, 137,
+ 222, 145, 235, 232, 220, 138, 110, 214, 174, 220, 137, 214, 133, 219, 21,
+ 248, 63, 248, 65, 226, 78, 250, 142, 226, 80, 125, 226, 240, 224, 193,
+ 241, 47, 251, 150, 225, 173, 241, 203, 251, 161, 228, 75, 251, 150, 241,
+ 203, 229, 175, 235, 242, 235, 244, 229, 82, 232, 213, 229, 99, 218, 152,
+ 64, 221, 158, 254, 18, 218, 223, 245, 143, 64, 221, 158, 254, 18, 245,
+ 80, 135, 217, 90, 220, 127, 203, 217, 90, 220, 127, 240, 224, 135, 217,
+ 90, 2, 235, 35, 203, 217, 90, 2, 235, 35, 240, 225, 232, 214, 217, 90,
+ 220, 127, 67, 217, 90, 220, 127, 212, 117, 225, 253, 232, 214, 244, 14,
+ 225, 253, 232, 214, 246, 106, 225, 32, 225, 253, 232, 214, 252, 178, 225,
+ 253, 232, 214, 214, 163, 225, 28, 223, 50, 232, 214, 244, 145, 223, 50,
+ 235, 242, 223, 35, 219, 155, 220, 28, 105, 219, 152, 218, 225, 219, 155,
+ 220, 28, 158, 219, 151, 218, 224, 248, 31, 249, 178, 218, 105, 248, 137,
+ 224, 183, 214, 132, 110, 224, 183, 214, 130, 224, 149, 224, 183, 214,
+ 132, 105, 224, 183, 214, 129, 224, 148, 220, 128, 215, 242, 218, 151,
+ 218, 89, 251, 6, 250, 142, 250, 209, 231, 43, 212, 59, 230, 43, 218, 152,
+ 64, 242, 107, 254, 18, 218, 152, 64, 224, 166, 254, 18, 219, 20, 245,
+ 143, 64, 242, 107, 254, 18, 245, 143, 64, 224, 166, 254, 18, 245, 107,
+ 218, 152, 64, 218, 105, 219, 35, 219, 155, 242, 141, 135, 235, 195, 220,
+ 107, 219, 155, 135, 235, 195, 221, 194, 249, 178, 220, 135, 235, 195,
+ 249, 113, 218, 106, 216, 236, 218, 168, 226, 169, 217, 167, 249, 218,
+ 226, 142, 224, 184, 231, 42, 225, 19, 254, 53, 224, 178, 249, 218, 254,
+ 69, 229, 163, 219, 200, 7, 6, 1, 242, 249, 7, 4, 1, 242, 249, 250, 159,
+ 165, 1, 232, 175, 209, 209, 1, 244, 44, 244, 36, 209, 209, 1, 244, 44,
+ 244, 157, 209, 209, 1, 222, 211, 209, 209, 1, 232, 156, 63, 164, 251,
+ 223, 220, 3, 242, 215, 230, 248, 223, 41, 243, 216, 243, 215, 243, 214,
+ 230, 45, 209, 251, 209, 252, 209, 254, 232, 102, 222, 219, 232, 103, 222,
+ 220, 225, 223, 232, 101, 222, 218, 228, 106, 230, 165, 211, 229, 212, 15,
+ 245, 162, 243, 226, 230, 229, 226, 197, 214, 134, 87, 230, 229, 248, 157,
+ 87, 8, 3, 235, 158, 78, 224, 194, 244, 20, 31, 67, 44, 71, 233, 20, 127,
+ 213, 118, 213, 7, 212, 195, 212, 184, 212, 173, 212, 162, 212, 151, 212,
+ 140, 212, 129, 213, 117, 213, 106, 213, 95, 213, 84, 213, 73, 213, 62,
+ 213, 51, 251, 71, 226, 155, 78, 251, 196, 209, 253, 49, 28, 16, 243, 236,
+ 219, 102, 250, 73, 214, 9, 213, 40, 213, 29, 213, 18, 213, 6, 212, 251,
+ 212, 240, 212, 229, 212, 218, 212, 207, 212, 199, 212, 198, 212, 197,
+ 212, 196, 212, 194, 212, 193, 212, 192, 212, 191, 212, 190, 212, 189,
+ 212, 188, 212, 187, 212, 186, 212, 185, 212, 183, 212, 182, 212, 181,
+ 212, 180, 212, 179, 212, 178, 212, 177, 212, 176, 212, 175, 212, 174,
+ 212, 172, 212, 171, 212, 170, 212, 169, 212, 168, 212, 167, 212, 166,
+ 212, 165, 212, 164, 212, 163, 212, 161, 212, 160, 212, 159, 212, 158,
+ 212, 157, 212, 156, 212, 155, 212, 154, 212, 153, 212, 152, 212, 150,
+ 212, 149, 212, 148, 212, 147, 212, 146, 212, 145, 212, 144, 212, 143,
+ 212, 142, 212, 141, 212, 139, 212, 138, 212, 137, 212, 136, 212, 135,
+ 212, 134, 212, 133, 212, 132, 212, 131, 212, 130, 212, 128, 212, 127,
+ 212, 126, 212, 125, 212, 124, 212, 123, 212, 122, 212, 121, 212, 120,
+ 212, 119, 213, 116, 213, 115, 213, 114, 213, 113, 213, 112, 213, 111,
+ 213, 110, 213, 109, 213, 108, 213, 107, 213, 105, 213, 104, 213, 103,
+ 213, 102, 213, 101, 213, 100, 213, 99, 213, 98, 213, 97, 213, 96, 213,
+ 94, 213, 93, 213, 92, 213, 91, 213, 90, 213, 89, 213, 88, 213, 87, 213,
+ 86, 213, 85, 213, 83, 213, 82, 213, 81, 213, 80, 213, 79, 213, 78, 213,
+ 77, 213, 76, 213, 75, 213, 74, 213, 72, 213, 71, 213, 70, 213, 69, 213,
+ 68, 213, 67, 213, 66, 213, 65, 213, 64, 213, 63, 213, 61, 213, 60, 213,
+ 59, 213, 58, 213, 57, 213, 56, 213, 55, 213, 54, 213, 53, 213, 52, 213,
+ 50, 213, 49, 213, 48, 213, 47, 213, 46, 213, 45, 213, 44, 213, 43, 213,
+ 42, 213, 41, 213, 39, 213, 38, 213, 37, 213, 36, 213, 35, 213, 34, 213,
+ 33, 213, 32, 213, 31, 213, 30, 213, 28, 213, 27, 213, 26, 213, 25, 213,
+ 24, 213, 23, 213, 22, 213, 21, 213, 20, 213, 19, 213, 17, 213, 16, 213,
+ 15, 213, 14, 213, 13, 213, 12, 213, 11, 213, 10, 213, 9, 213, 8, 213, 5,
+ 213, 4, 213, 3, 213, 2, 213, 1, 213, 0, 212, 255, 212, 254, 212, 253,
+ 212, 252, 212, 250, 212, 249, 212, 248, 212, 247, 212, 246, 212, 245,
+ 212, 244, 212, 243, 212, 242, 212, 241, 212, 239, 212, 238, 212, 237,
+ 212, 236, 212, 235, 212, 234, 212, 233, 212, 232, 212, 231, 212, 230,
+ 212, 228, 212, 227, 212, 226, 212, 225, 212, 224, 212, 223, 212, 222,
+ 212, 221, 212, 220, 212, 219, 212, 217, 212, 216, 212, 215, 212, 214,
+ 212, 213, 212, 212, 212, 211, 212, 210, 212, 209, 212, 208, 212, 206,
+ 212, 205, 212, 204, 212, 203, 212, 202, 212, 201, 212, 200, 7, 6, 1, 115,
+ 2, 231, 233, 22, 242, 136, 7, 4, 1, 115, 2, 231, 233, 22, 242, 136, 7, 6,
+ 1, 160, 2, 67, 232, 214, 51, 7, 4, 1, 160, 2, 67, 232, 214, 51, 7, 6, 1,
+ 160, 2, 67, 232, 214, 252, 43, 22, 242, 136, 7, 4, 1, 160, 2, 67, 232,
+ 214, 252, 43, 22, 242, 136, 7, 6, 1, 160, 2, 67, 232, 214, 252, 43, 22,
+ 142, 7, 4, 1, 160, 2, 67, 232, 214, 252, 43, 22, 142, 7, 6, 1, 160, 2,
+ 250, 31, 22, 231, 232, 7, 4, 1, 160, 2, 250, 31, 22, 231, 232, 7, 6, 1,
+ 160, 2, 250, 31, 22, 250, 234, 7, 4, 1, 160, 2, 250, 31, 22, 250, 234, 7,
+ 6, 1, 240, 154, 2, 231, 233, 22, 242, 136, 7, 4, 1, 240, 154, 2, 231,
+ 233, 22, 242, 136, 7, 4, 1, 240, 154, 2, 59, 77, 22, 142, 7, 4, 1, 229,
+ 80, 2, 216, 89, 48, 7, 6, 1, 144, 2, 67, 232, 214, 51, 7, 4, 1, 144, 2,
+ 67, 232, 214, 51, 7, 6, 1, 144, 2, 67, 232, 214, 252, 43, 22, 242, 136,
+ 7, 4, 1, 144, 2, 67, 232, 214, 252, 43, 22, 242, 136, 7, 6, 1, 144, 2,
+ 67, 232, 214, 252, 43, 22, 142, 7, 4, 1, 144, 2, 67, 232, 214, 252, 43,
+ 22, 142, 7, 6, 1, 222, 92, 2, 67, 232, 214, 51, 7, 4, 1, 222, 92, 2, 67,
+ 232, 214, 51, 7, 6, 1, 104, 2, 231, 233, 22, 242, 136, 7, 4, 1, 104, 2,
+ 231, 233, 22, 242, 136, 7, 6, 1, 115, 2, 226, 225, 22, 142, 7, 4, 1, 115,
+ 2, 226, 225, 22, 142, 7, 6, 1, 115, 2, 226, 225, 22, 182, 7, 4, 1, 115,
+ 2, 226, 225, 22, 182, 7, 6, 1, 160, 2, 226, 225, 22, 142, 7, 4, 1, 160,
+ 2, 226, 225, 22, 142, 7, 6, 1, 160, 2, 226, 225, 22, 182, 7, 4, 1, 160,
+ 2, 226, 225, 22, 182, 7, 6, 1, 160, 2, 59, 77, 22, 142, 7, 4, 1, 160, 2,
+ 59, 77, 22, 142, 7, 6, 1, 160, 2, 59, 77, 22, 182, 7, 4, 1, 160, 2, 59,
+ 77, 22, 182, 7, 4, 1, 240, 154, 2, 59, 77, 22, 242, 136, 7, 4, 1, 240,
+ 154, 2, 59, 77, 22, 182, 7, 6, 1, 240, 154, 2, 226, 225, 22, 142, 7, 4,
+ 1, 240, 154, 2, 226, 225, 22, 59, 77, 22, 142, 7, 6, 1, 240, 154, 2, 226,
+ 225, 22, 182, 7, 4, 1, 240, 154, 2, 226, 225, 22, 59, 77, 22, 182, 7, 6,
+ 1, 235, 145, 2, 182, 7, 4, 1, 235, 145, 2, 59, 77, 22, 182, 7, 6, 1, 233,
+ 149, 2, 182, 7, 4, 1, 233, 149, 2, 182, 7, 6, 1, 232, 50, 2, 182, 7, 4,
+ 1, 232, 50, 2, 182, 7, 6, 1, 223, 224, 2, 182, 7, 4, 1, 223, 224, 2, 182,
+ 7, 6, 1, 104, 2, 226, 225, 22, 142, 7, 4, 1, 104, 2, 226, 225, 22, 142,
+ 7, 6, 1, 104, 2, 226, 225, 22, 182, 7, 4, 1, 104, 2, 226, 225, 22, 182,
+ 7, 6, 1, 104, 2, 231, 233, 22, 142, 7, 4, 1, 104, 2, 231, 233, 22, 142,
+ 7, 6, 1, 104, 2, 231, 233, 22, 182, 7, 4, 1, 104, 2, 231, 233, 22, 182,
+ 7, 4, 1, 254, 244, 2, 242, 136, 7, 4, 1, 204, 144, 2, 242, 136, 7, 4, 1,
+ 204, 144, 2, 142, 7, 4, 1, 215, 94, 214, 106, 2, 242, 136, 7, 4, 1, 215,
+ 94, 214, 106, 2, 142, 7, 4, 1, 221, 196, 2, 242, 136, 7, 4, 1, 221, 196,
+ 2, 142, 7, 4, 1, 241, 51, 221, 196, 2, 242, 136, 7, 4, 1, 241, 51, 221,
+ 196, 2, 142, 146, 1, 234, 109, 36, 116, 235, 23, 36, 116, 229, 79, 36,
+ 116, 251, 66, 36, 116, 227, 167, 36, 116, 215, 159, 36, 116, 228, 111,
+ 36, 116, 217, 152, 36, 116, 230, 25, 36, 116, 226, 105, 36, 116, 193, 36,
+ 116, 211, 117, 36, 116, 153, 36, 116, 156, 36, 116, 214, 105, 36, 116,
+ 232, 176, 36, 116, 232, 185, 36, 116, 222, 180, 36, 116, 228, 93, 36,
+ 116, 235, 144, 36, 116, 220, 104, 36, 116, 218, 226, 36, 116, 222, 91,
+ 36, 116, 242, 60, 36, 116, 233, 232, 36, 3, 235, 10, 36, 3, 234, 92, 36,
+ 3, 234, 83, 36, 3, 233, 217, 36, 3, 233, 188, 36, 3, 234, 182, 36, 3,
+ 234, 181, 36, 3, 234, 246, 36, 3, 234, 28, 36, 3, 234, 10, 36, 3, 234,
+ 195, 36, 3, 229, 76, 36, 3, 229, 27, 36, 3, 229, 23, 36, 3, 228, 248, 36,
+ 3, 228, 241, 36, 3, 229, 64, 36, 3, 229, 62, 36, 3, 229, 73, 36, 3, 229,
+ 4, 36, 3, 228, 255, 36, 3, 229, 66, 36, 3, 251, 32, 36, 3, 250, 51, 36,
+ 3, 250, 41, 36, 3, 249, 112, 36, 3, 249, 83, 36, 3, 250, 190, 36, 3, 250,
+ 182, 36, 3, 251, 22, 36, 3, 249, 238, 36, 3, 249, 174, 36, 3, 250, 222,
+ 36, 3, 227, 164, 36, 3, 227, 148, 36, 3, 227, 143, 36, 3, 227, 128, 36,
+ 3, 227, 121, 36, 3, 227, 156, 36, 3, 227, 155, 36, 3, 227, 161, 36, 3,
+ 227, 134, 36, 3, 227, 132, 36, 3, 227, 159, 36, 3, 215, 155, 36, 3, 215,
+ 135, 36, 3, 215, 134, 36, 3, 215, 123, 36, 3, 215, 120, 36, 3, 215, 151,
+ 36, 3, 215, 150, 36, 3, 215, 154, 36, 3, 215, 133, 36, 3, 215, 132, 36,
+ 3, 215, 153, 36, 3, 228, 109, 36, 3, 228, 95, 36, 3, 228, 94, 36, 3, 228,
+ 78, 36, 3, 228, 77, 36, 3, 228, 105, 36, 3, 228, 104, 36, 3, 228, 108,
+ 36, 3, 228, 80, 36, 3, 228, 79, 36, 3, 228, 107, 36, 3, 217, 101, 36, 3,
+ 216, 117, 36, 3, 216, 103, 36, 3, 215, 118, 36, 3, 215, 85, 36, 3, 217,
+ 22, 36, 3, 217, 11, 36, 3, 217, 79, 36, 3, 111, 36, 3, 216, 17, 36, 3,
+ 217, 41, 36, 3, 229, 225, 36, 3, 228, 233, 36, 3, 228, 208, 36, 3, 227,
+ 237, 36, 3, 227, 179, 36, 3, 229, 107, 36, 3, 229, 103, 36, 3, 229, 212,
+ 36, 3, 228, 74, 36, 3, 228, 64, 36, 3, 229, 187, 36, 3, 226, 89, 36, 3,
+ 225, 108, 36, 3, 225, 71, 36, 3, 224, 150, 36, 3, 224, 119, 36, 3, 225,
+ 221, 36, 3, 225, 211, 36, 3, 226, 71, 36, 3, 225, 16, 36, 3, 224, 249,
+ 36, 3, 225, 234, 36, 3, 231, 237, 36, 3, 230, 230, 36, 3, 230, 201, 36,
+ 3, 230, 102, 36, 3, 230, 54, 36, 3, 231, 91, 36, 3, 231, 80, 36, 3, 231,
+ 203, 36, 3, 230, 161, 36, 3, 230, 132, 36, 3, 231, 135, 36, 3, 211, 103,
+ 36, 3, 211, 8, 36, 3, 210, 255, 36, 3, 210, 212, 36, 3, 210, 181, 36, 3,
+ 211, 47, 36, 3, 211, 44, 36, 3, 211, 82, 36, 3, 210, 244, 36, 3, 210,
+ 229, 36, 3, 211, 55, 36, 3, 223, 184, 36, 3, 223, 35, 36, 3, 222, 239,
+ 36, 3, 222, 140, 36, 3, 222, 112, 36, 3, 223, 128, 36, 3, 223, 108, 36,
+ 3, 223, 166, 36, 3, 222, 211, 36, 3, 222, 197, 36, 3, 223, 136, 36, 3,
+ 233, 134, 36, 3, 232, 241, 36, 3, 232, 227, 36, 3, 232, 98, 36, 3, 232,
+ 73, 36, 3, 233, 58, 36, 3, 233, 50, 36, 3, 233, 109, 36, 3, 232, 156, 36,
+ 3, 232, 127, 36, 3, 233, 74, 36, 3, 214, 26, 36, 3, 213, 176, 36, 3, 213,
+ 162, 36, 3, 212, 116, 36, 3, 212, 109, 36, 3, 213, 255, 36, 3, 213, 250,
+ 36, 3, 214, 23, 36, 3, 213, 138, 36, 3, 213, 127, 36, 3, 214, 5, 36, 3,
+ 232, 174, 36, 3, 232, 169, 36, 3, 232, 168, 36, 3, 232, 165, 36, 3, 232,
+ 164, 36, 3, 232, 171, 36, 3, 232, 170, 36, 3, 232, 173, 36, 3, 232, 167,
+ 36, 3, 232, 166, 36, 3, 232, 172, 36, 3, 232, 183, 36, 3, 232, 178, 36,
+ 3, 232, 177, 36, 3, 232, 161, 36, 3, 232, 160, 36, 3, 232, 180, 36, 3,
+ 232, 179, 36, 3, 232, 182, 36, 3, 232, 163, 36, 3, 232, 162, 36, 3, 232,
+ 181, 36, 3, 222, 178, 36, 3, 222, 167, 36, 3, 222, 166, 36, 3, 222, 160,
+ 36, 3, 222, 153, 36, 3, 222, 174, 36, 3, 222, 173, 36, 3, 222, 177, 36,
+ 3, 222, 165, 36, 3, 222, 164, 36, 3, 222, 176, 36, 3, 228, 91, 36, 3,
+ 228, 86, 36, 3, 228, 85, 36, 3, 228, 82, 36, 3, 228, 81, 36, 3, 228, 88,
+ 36, 3, 228, 87, 36, 3, 228, 90, 36, 3, 228, 84, 36, 3, 228, 83, 36, 3,
+ 228, 89, 36, 3, 235, 140, 36, 3, 235, 108, 36, 3, 235, 101, 36, 3, 235,
+ 51, 36, 3, 235, 33, 36, 3, 235, 126, 36, 3, 235, 124, 36, 3, 235, 135,
+ 36, 3, 235, 68, 36, 3, 235, 59, 36, 3, 235, 129, 36, 3, 220, 98, 36, 3,
+ 220, 32, 36, 3, 220, 27, 36, 3, 219, 225, 36, 3, 219, 210, 36, 3, 220,
+ 63, 36, 3, 220, 61, 36, 3, 220, 90, 36, 3, 220, 7, 36, 3, 220, 1, 36, 3,
+ 220, 71, 36, 3, 218, 222, 36, 3, 218, 192, 36, 3, 218, 188, 36, 3, 218,
+ 179, 36, 3, 218, 176, 36, 3, 218, 197, 36, 3, 218, 196, 36, 3, 218, 221,
+ 36, 3, 218, 184, 36, 3, 218, 183, 36, 3, 218, 199, 36, 3, 222, 31, 36, 3,
+ 219, 191, 36, 3, 219, 175, 36, 3, 218, 83, 36, 3, 218, 4, 36, 3, 221,
+ 181, 36, 3, 221, 170, 36, 3, 222, 17, 36, 3, 219, 58, 36, 3, 219, 40, 36,
+ 3, 221, 219, 36, 3, 242, 46, 36, 3, 241, 180, 36, 3, 241, 161, 36, 3,
+ 240, 222, 36, 3, 240, 202, 36, 3, 241, 238, 36, 3, 241, 220, 36, 3, 242,
+ 36, 36, 3, 241, 68, 36, 3, 241, 53, 36, 3, 241, 246, 36, 3, 233, 231, 36,
+ 3, 233, 230, 36, 3, 233, 225, 36, 3, 233, 224, 36, 3, 233, 221, 36, 3,
+ 233, 220, 36, 3, 233, 227, 36, 3, 233, 226, 36, 3, 233, 229, 36, 3, 233,
+ 223, 36, 3, 233, 222, 36, 3, 233, 228, 36, 3, 219, 231, 175, 116, 5, 211,
+ 68, 175, 116, 5, 223, 155, 175, 116, 5, 223, 78, 98, 1, 215, 28, 69, 116,
+ 5, 249, 233, 176, 69, 116, 5, 249, 233, 234, 132, 69, 116, 5, 249, 233,
+ 234, 28, 69, 116, 5, 249, 233, 234, 105, 69, 116, 5, 249, 233, 229, 4,
+ 69, 116, 5, 249, 233, 251, 33, 69, 116, 5, 249, 233, 250, 157, 69, 116,
+ 5, 249, 233, 249, 238, 69, 116, 5, 249, 233, 250, 86, 69, 116, 5, 249,
+ 233, 227, 134, 69, 116, 5, 249, 233, 248, 221, 69, 116, 5, 249, 233, 215,
+ 144, 69, 116, 5, 249, 233, 247, 145, 69, 116, 5, 249, 233, 215, 139, 69,
+ 116, 5, 249, 233, 197, 69, 116, 5, 249, 233, 217, 105, 69, 116, 5, 249,
+ 233, 216, 208, 69, 116, 5, 249, 233, 111, 69, 116, 5, 249, 233, 216, 156,
+ 69, 116, 5, 249, 233, 228, 74, 69, 116, 5, 249, 233, 252, 191, 69, 116,
+ 5, 249, 233, 225, 147, 69, 116, 5, 249, 233, 225, 16, 69, 116, 5, 249,
+ 233, 225, 121, 69, 116, 5, 249, 233, 230, 161, 69, 116, 5, 249, 233, 210,
+ 244, 69, 116, 5, 249, 233, 222, 211, 69, 116, 5, 249, 233, 232, 156, 69,
+ 116, 5, 249, 233, 213, 138, 69, 116, 5, 249, 233, 220, 102, 69, 116, 5,
+ 249, 233, 218, 223, 69, 116, 5, 249, 233, 206, 69, 116, 5, 249, 233, 162,
+ 69, 116, 5, 249, 233, 233, 135, 69, 25, 5, 249, 233, 224, 88, 69, 235,
+ 243, 25, 5, 249, 233, 224, 30, 69, 235, 243, 25, 5, 249, 233, 222, 100,
+ 69, 235, 243, 25, 5, 249, 233, 222, 93, 69, 235, 243, 25, 5, 249, 233,
+ 224, 69, 69, 25, 5, 226, 204, 69, 25, 5, 255, 34, 141, 1, 251, 255, 229,
+ 77, 141, 1, 251, 255, 229, 27, 141, 1, 251, 255, 228, 248, 141, 1, 251,
+ 255, 229, 64, 141, 1, 251, 255, 229, 4, 56, 1, 251, 255, 229, 77, 56, 1,
+ 251, 255, 229, 27, 56, 1, 251, 255, 228, 248, 56, 1, 251, 255, 229, 64,
+ 56, 1, 251, 255, 229, 4, 56, 1, 254, 194, 250, 190, 56, 1, 254, 194, 215,
+ 118, 56, 1, 254, 194, 111, 56, 1, 254, 194, 226, 105, 58, 1, 245, 20,
+ 245, 19, 249, 182, 138, 130, 58, 1, 245, 19, 245, 20, 249, 182, 138, 130,
};
static unsigned char phrasebook_offset1[] = {
@@ -13127,487 +13824,488 @@ static unsigned char phrasebook_offset1[] = {
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 17, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 128, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 17, 147, 148, 149, 150, 151, 17, 17, 17, 17, 17, 17, 152, 17,
- 153, 17, 154, 17, 155, 17, 156, 17, 17, 17, 157, 17, 17, 17, 158, 159,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 160, 161, 162, 163, 164,
- 165, 166, 17, 167, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 168, 169, 170, 171, 172, 173,
- 174, 175, 176, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 177,
- 178, 179, 180, 181, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 182, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 183, 184, 185, 186, 187, 17, 188,
- 17, 189, 190, 191, 192, 193, 194, 195, 196, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 197, 198, 199, 200, 201, 17, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 211, 212, 213,
- 214, 215, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 216, 17, 217, 218, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 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, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 104, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 129, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 87, 148, 149, 150, 151, 152, 87, 87, 87, 87, 87, 87, 153, 87,
+ 154, 155, 156, 87, 157, 87, 158, 87, 87, 87, 159, 87, 87, 87, 160, 161,
+ 162, 163, 87, 87, 87, 87, 87, 87, 87, 87, 87, 164, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 165, 166, 167, 168,
+ 169, 170, 171, 87, 172, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 173, 174, 175, 176, 177, 178,
+ 179, 180, 181, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 182,
+ 183, 184, 185, 186, 87, 87, 87, 87, 87, 87, 87, 87, 87, 187, 188, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 189, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 190, 191, 192, 193, 194, 87, 195,
+ 87, 196, 197, 198, 199, 200, 201, 202, 203, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 204, 205, 87, 87, 206, 207, 208, 209, 210, 87, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 220, 221,
+ 222, 223, 224, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 225, 87, 226, 227,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 228, 229, 230, 231, 232, 233, 234, 235, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87,
};
static unsigned int phrasebook_offset2[] = {
@@ -13615,2803 +14313,3015 @@ static unsigned int phrasebook_offset2[] = {
0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 31,
33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 69, 72,
75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142,
- 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205,
- 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265,
- 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328,
- 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365,
- 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 405, 409, 412, 414,
- 417, 420, 423, 426, 430, 433, 436, 440, 442, 445, 451, 459, 466, 473,
- 480, 485, 492, 498, 505, 512, 519, 527, 532, 540, 547, 553, 560, 567,
- 575, 582, 590, 598, 603, 611, 618, 624, 631, 638, 645, 648, 654, 661,
- 667, 674, 681, 688, 693, 699, 706, 712, 719, 726, 733, 741, 746, 754,
- 761, 767, 774, 781, 789, 796, 804, 812, 817, 825, 832, 838, 845, 852,
- 859, 862, 868, 875, 881, 888, 895, 902, 907, 915, 922, 929, 936, 943,
- 950, 957, 964, 971, 979, 987, 995, 1003, 1011, 1019, 1027, 1035, 1042,
- 1049, 1056, 1063, 1070, 1077, 1084, 1091, 1098, 1105, 1112, 1119, 1127,
- 1135, 1143, 1151, 1159, 1167, 1175, 1183, 1191, 1199, 1206, 1213, 1221,
- 1229, 1237, 1245, 1253, 1261, 1269, 1277, 1285, 1291, 1296, 1301, 1309,
- 1317, 1325, 1333, 1338, 1345, 1352, 1360, 1368, 1376, 1384, 1394, 1404,
- 1411, 1418, 1425, 1432, 1440, 1448, 1456, 1464, 1475, 1480, 1485, 1492,
- 1499, 1506, 1513, 1520, 1527, 1532, 1537, 1544, 1551, 1559, 1567, 1575,
- 1583, 1590, 1597, 1605, 1613, 1621, 1629, 1637, 1645, 1653, 1661, 1669,
- 1677, 1684, 1691, 1698, 1705, 1712, 1719, 1726, 1733, 1741, 1749, 1756,
- 1763, 1770, 1777, 1785, 1793, 1801, 1809, 1817, 1824, 1831, 1839, 1847,
- 1855, 1863, 1868, 1874, 1880, 1887, 1894, 1899, 1904, 1910, 1917, 1924,
- 1931, 1938, 1946, 1954, 1961, 1967, 1972, 1978, 1985, 1992, 1999, 2004,
- 2009, 2014, 2021, 2028, 2035, 2042, 2049, 2055, 2063, 2073, 2082, 2089,
- 2096, 2101, 2106, 2113, 2120, 2124, 2129, 2134, 2139, 2147, 2156, 2163,
- 2170, 2179, 2186, 2193, 2198, 2205, 2212, 2219, 2226, 2233, 2238, 2245,
- 2252, 2260, 2265, 2270, 2275, 2285, 2289, 2295, 2301, 2307, 2313, 2321,
- 2334, 2342, 2347, 2357, 2362, 2367, 2377, 2382, 2389, 2396, 2404, 2412,
- 2419, 2426, 2433, 2440, 2450, 2460, 2469, 2478, 2488, 2498, 2508, 2518,
- 2524, 2534, 2544, 2554, 2564, 2572, 2580, 2587, 2594, 2602, 2610, 2618,
- 2626, 2633, 2640, 2650, 2660, 2668, 2676, 2684, 2689, 2699, 2704, 2711,
- 2718, 2723, 2728, 2736, 2744, 2754, 2764, 2771, 2778, 2787, 2796, 2804,
- 2812, 2821, 2830, 2838, 2846, 2855, 2864, 2873, 2882, 2892, 2902, 2910,
- 2918, 2927, 2936, 2945, 2954, 2964, 2974, 2982, 2990, 2999, 3008, 3017,
- 3026, 3035, 3044, 3049, 3054, 3062, 3070, 3080, 3088, 3093, 3098, 3105,
- 3112, 3119, 3126, 3133, 3140, 3150, 3160, 3170, 3180, 3187, 3194, 3204,
- 3214, 3222, 3230, 3238, 3246, 3254, 3261, 3268, 3275, 3281, 3288, 3295,
- 3302, 3311, 3321, 3331, 3338, 3345, 3351, 3356, 3363, 3369, 3375, 3382,
- 3389, 3400, 3410, 3417, 3424, 3431, 3438, 3444, 3449, 3456, 3462, 3468,
- 3476, 3484, 3491, 3497, 3502, 3509, 3515, 3523, 3533, 3543, 3552, 3559,
- 3565, 3571, 3576, 3583, 3590, 3597, 3604, 3611, 3616, 3621, 3631, 3639,
- 3648, 3653, 3659, 3670, 3677, 3685, 3694, 3699, 3705, 3711, 3718, 3723,
- 3729, 3740, 3749, 3758, 3766, 3774, 3784, 3789, 3796, 3803, 3808, 3820,
- 3829, 3837, 3844, 3853, 3858, 3863, 3870, 3877, 3884, 3891, 3897, 3906,
- 3914, 3919, 3927, 3933, 3941, 3949, 3955, 3961, 3967, 3975, 3983, 3989,
- 3997, 4004, 4009, 4016, 4024, 4034, 4041, 4048, 4058, 4065, 4072, 4082,
- 4089, 4096, 4103, 4109, 4115, 4125, 4138, 4143, 4150, 4155, 4159, 4165,
- 4174, 4181, 4186, 4191, 4195, 4200, 4206, 4210, 4216, 4222, 4228, 4234,
- 4242, 4247, 4252, 4257, 4262, 4268, 4270, 4275, 4279, 4285, 4291, 4297,
- 4302, 4309, 4316, 4322, 4329, 4337, 4345, 4350, 4355, 4359, 4364, 4366,
- 4368, 4371, 4373, 4376, 4381, 4386, 4392, 4397, 4401, 4405, 4410, 4419,
- 4425, 4430, 4436, 4441, 4447, 4455, 4463, 4467, 4471, 4476, 4482, 4488,
- 4494, 4500, 4505, 4513, 4522, 4531, 4536, 4542, 4549, 4556, 4563, 4570,
- 4574, 4580, 4585, 4590, 4595, 4600, 4603, 4606, 4609, 4612, 4615, 4618,
- 4622, 4626, 4632, 4635, 4640, 4646, 4652, 4655, 4660, 4666, 4670, 4676,
- 4682, 4688, 4694, 4699, 4704, 4709, 4712, 4718, 4723, 4728, 4732, 4737,
- 4743, 4749, 4752, 4756, 4760, 4764, 4767, 4770, 4775, 4779, 4786, 4790,
- 4796, 4800, 4806, 4810, 4814, 4818, 4823, 4828, 4835, 4841, 4848, 4854,
- 4860, 4866, 4869, 4873, 4877, 4881, 4885, 4890, 4895, 4899, 4903, 4909,
- 4913, 4917, 4922, 4928, 4933, 4939, 4943, 4950, 4955, 4960, 4965, 4970,
- 4976, 4979, 4983, 4988, 4993, 5002, 5008, 5013, 5017, 5022, 5026, 5031,
- 5035, 5039, 5044, 5048, 5054, 5059, 5064, 5069, 5074, 5079, 5084, 5090,
- 5096, 5102, 5107, 5112, 5118, 5124, 5130, 5135, 5140, 5147, 5154, 5158,
- 5164, 5171, 0, 0, 5178, 5181, 5190, 5199, 5210, 0, 0, 0, 0, 0, 5214,
- 5217, 5222, 5230, 5235, 5243, 5251, 0, 5259, 0, 5267, 5275, 5283, 5294,
- 5299, 5304, 5309, 5314, 5319, 5324, 5329, 5334, 5339, 5344, 5349, 5354,
- 5359, 5364, 5369, 5374, 0, 5379, 5384, 5389, 5394, 5399, 5404, 5409,
- 5414, 5422, 5430, 5438, 5446, 5454, 5462, 5473, 5478, 5483, 5488, 5493,
- 5498, 5503, 5508, 5513, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553,
- 5558, 5564, 5569, 5574, 5579, 5584, 5589, 5594, 5599, 5607, 5615, 5623,
- 5631, 5639, 5644, 5648, 5652, 5659, 5669, 5679, 5683, 5687, 5691, 5697,
- 5704, 5708, 5713, 5717, 5722, 5726, 5731, 5735, 5740, 5745, 5750, 5755,
- 5760, 5765, 5770, 5775, 5780, 5785, 5790, 5795, 5800, 5805, 5810, 5814,
- 5818, 5824, 5828, 5833, 5839, 5847, 5852, 5857, 5864, 5869, 5874, 5881,
- 5890, 5899, 5910, 5918, 5923, 5928, 5933, 5940, 5945, 5951, 5956, 5961,
- 5966, 5971, 5976, 5981, 5989, 5995, 6000, 6004, 6009, 6014, 6019, 6024,
- 6029, 6034, 6039, 6043, 6049, 6053, 6058, 6063, 6068, 6072, 6077, 6082,
- 6087, 6092, 6096, 6101, 6105, 6110, 6115, 6120, 6125, 6131, 6136, 6142,
- 6146, 6151, 6155, 6159, 6164, 6169, 6174, 6179, 6184, 6189, 6194, 6198,
- 6204, 6208, 6213, 6218, 6223, 6227, 6232, 6237, 6242, 6247, 6251, 6256,
- 6260, 6265, 6270, 6275, 6280, 6286, 6291, 6297, 6301, 6306, 6310, 6318,
- 6323, 6328, 6333, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381,
- 6389, 6395, 6400, 6405, 6410, 6415, 6420, 6426, 6432, 6439, 6446, 6455,
- 6464, 6471, 6478, 6487, 6496, 6501, 6506, 6511, 6516, 6521, 6526, 6531,
- 6536, 6547, 6558, 6563, 6568, 6575, 6582, 6590, 6598, 6603, 6608, 6613,
- 6618, 6622, 6626, 6630, 6635, 6641, 6645, 6652, 6657, 6667, 6677, 6683,
- 6689, 6697, 6705, 6713, 6721, 6728, 6735, 6744, 6753, 6761, 6769, 6777,
- 6785, 6793, 6801, 6809, 6817, 6824, 6831, 6837, 6843, 6851, 6859, 6866,
- 6873, 6882, 6891, 6897, 6903, 6911, 6919, 6927, 6935, 6941, 6947, 6955,
- 6963, 6971, 6979, 6986, 6993, 7001, 7009, 7017, 7025, 7030, 7035, 7042,
- 7049, 7059, 7069, 7073, 7081, 7089, 7096, 7103, 7111, 7119, 7126, 7133,
- 7141, 7149, 7156, 7163, 7171, 7179, 7184, 7191, 7198, 7205, 7212, 7218,
- 7224, 7232, 7240, 7245, 7250, 7258, 7266, 7274, 7282, 7290, 7298, 7305,
- 7312, 7320, 7328, 7336, 7344, 7351, 7358, 7364, 7370, 7379, 7388, 7395,
- 7402, 7409, 7416, 7423, 7430, 7437, 7444, 7452, 7460, 7468, 7476, 7484,
- 7492, 7502, 7512, 7519, 7526, 7533, 7540, 7547, 7554, 7561, 7568, 7575,
- 7582, 7589, 7596, 7603, 7610, 7617, 7624, 7631, 7638, 7645, 7652, 7659,
- 7666, 7673, 7680, 7685, 7690, 7695, 7700, 7705, 7710, 7715, 7720, 7725,
- 7730, 7736, 7742, 7751, 7760, 7769, 7778, 7786, 7794, 7802, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7810, 7815, 7820, 7825, 7830, 7835, 7840, 7845, 7850,
- 7854, 7859, 7864, 7869, 7874, 7879, 7884, 7889, 7894, 7899, 7904, 7909,
- 7914, 7919, 7924, 7929, 7934, 7939, 7944, 7948, 7953, 7958, 7963, 7968,
- 7973, 7978, 7983, 7988, 7993, 0, 0, 7998, 8005, 8008, 8012, 8016, 8019,
- 8023, 0, 8027, 8032, 8037, 8042, 8047, 8052, 8057, 8062, 8067, 8071,
- 8076, 8081, 8086, 8091, 8096, 8101, 8106, 8111, 8116, 8121, 8126, 8131,
- 8136, 8141, 8146, 8151, 8156, 8161, 8165, 8170, 8175, 8180, 8185, 8190,
- 8195, 8200, 8205, 8210, 8215, 0, 8222, 8227, 0, 0, 0, 0, 0, 0, 8230,
- 8235, 8240, 8245, 8252, 8259, 8264, 8269, 8274, 8279, 8284, 8289, 8294,
- 8301, 8306, 8313, 8320, 8325, 8332, 8337, 8342, 8347, 8354, 8359, 8364,
- 8371, 8380, 8385, 8390, 8395, 8400, 8406, 8411, 8418, 8425, 8432, 8437,
- 8442, 8447, 8452, 8457, 8462, 8472, 8477, 8485, 8490, 8495, 8500, 8505,
- 8512, 8519, 8526, 8532, 8538, 8545, 0, 0, 0, 0, 0, 0, 0, 0, 8552, 8556,
- 8560, 8564, 8568, 8572, 8576, 8580, 8584, 8588, 8592, 8597, 8601, 8605,
- 8610, 8614, 8619, 8623, 8627, 8631, 8636, 8640, 8645, 8649, 8653, 8657,
- 8661, 0, 0, 0, 0, 0, 8665, 8672, 8680, 8687, 8692, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8697, 8700, 8704, 8709, 0, 0, 8713, 8719, 8725, 8728, 8735,
- 8744, 8747, 8750, 8755, 8761, 8765, 8773, 8779, 8785, 8793, 8797, 8802,
- 8813, 8818, 8822, 8826, 8830, 0, 0, 8833, 8840, 8844, 8850, 8854, 8861,
- 8867, 8874, 8880, 8886, 8890, 8894, 8900, 8904, 8908, 8912, 8916, 8920,
- 8924, 8928, 8932, 8936, 8940, 8944, 8948, 8952, 8956, 8960, 8964, 8968,
- 8976, 8984, 8994, 9003, 9012, 9015, 9019, 9023, 9027, 9031, 9035, 9039,
- 9043, 9047, 9052, 9056, 9059, 9062, 9065, 9068, 9071, 9074, 9077, 9080,
- 9084, 9087, 9090, 9095, 9100, 9106, 9109, 9116, 9125, 9130, 9135, 9142,
- 9147, 9152, 9156, 9160, 9164, 9168, 9172, 9176, 9180, 9184, 9188, 9192,
- 9197, 9202, 9209, 9215, 9221, 9227, 9232, 9240, 9248, 9253, 9259, 9265,
- 9271, 9277, 9281, 9285, 9289, 9296, 9306, 9310, 9314, 9318, 9324, 9332,
- 9336, 9340, 9347, 9351, 9355, 9359, 9366, 9373, 9385, 9389, 9393, 9397,
- 9407, 9416, 9420, 9428, 9435, 9442, 9451, 9462, 9470, 9474, 9483, 9494,
- 9502, 9515, 9523, 9531, 9539, 9547, 9553, 9562, 9569, 9573, 9581, 9585,
- 9592, 9600, 9604, 9610, 9617, 9624, 9628, 9636, 9640, 9647, 9651, 9659,
- 9663, 9671, 9679, 9686, 9694, 9702, 9709, 9715, 9719, 9726, 9734, 9740,
- 9747, 9754, 9760, 9769, 9777, 9784, 9790, 9794, 9797, 9801, 9807, 9815,
- 9819, 9825, 9831, 9838, 9845, 9848, 9855, 9860, 9868, 9873, 9877, 9890,
- 9903, 9909, 9916, 9921, 9927, 9932, 9938, 9948, 9955, 9964, 9974, 9980,
- 9985, 9990, 9994, 9998, 10003, 10008, 10014, 10022, 10030, 10041, 10046,
- 10055, 10064, 10071, 10077, 10083, 10089, 10095, 10101, 10107, 10113,
- 10119, 10125, 10132, 10139, 10146, 10152, 10160, 10169, 10175, 10182,
- 10189, 10194, 10199, 10203, 10210, 10217, 10226, 10235, 10238, 10243,
- 10248, 0, 10253, 10257, 10261, 10267, 10271, 10275, 10281, 10285, 10293,
- 10297, 10301, 10305, 10309, 10313, 10319, 10323, 10329, 10333, 10337,
- 10341, 10345, 10349, 10354, 10357, 10361, 10367, 10371, 10375, 10379,
- 10383, 10387, 10393, 10399, 10405, 10409, 10413, 10418, 10422, 10426,
- 10431, 10435, 10439, 10446, 10453, 10457, 10461, 10466, 10470, 10474,
- 10477, 10482, 10485, 10488, 10493, 10498, 10502, 10506, 10512, 10518,
- 10521, 0, 0, 10524, 10530, 10536, 10542, 10552, 10564, 10576, 10593,
- 10605, 10616, 10624, 10631, 10642, 10657, 10668, 10674, 10683, 10691,
- 10703, 10713, 10721, 10733, 10740, 10748, 10760, 10766, 10772, 10780,
- 10788, 10796, 10802, 10812, 10819, 10829, 10839, 10852, 10866, 10880,
- 10890, 10901, 10912, 10925, 10938, 10952, 10964, 10976, 10989, 11002,
- 11014, 11027, 11036, 11044, 11049, 11054, 11059, 11064, 11069, 11074,
- 11079, 11084, 11089, 11094, 11099, 11104, 11109, 11114, 11119, 11124,
- 11129, 11134, 11139, 11144, 11149, 11154, 11159, 11164, 11169, 11174,
- 11179, 11184, 11189, 11194, 11199, 11204, 11208, 11213, 11218, 11223,
- 11228, 11233, 11237, 11241, 11245, 11249, 11253, 11257, 11261, 11265,
- 11269, 11273, 11277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11282,
- 11287, 11291, 11295, 11299, 11303, 11307, 11311, 11315, 11319, 11323,
- 11327, 11332, 11336, 11340, 11344, 11349, 11353, 11358, 11362, 11367,
- 11371, 11376, 11381, 11386, 11391, 11395, 11400, 11405, 11410, 11415,
- 11419, 11424, 11431, 11435, 11440, 11444, 11448, 11453, 11457, 11464,
- 11471, 11478, 11484, 11492, 11500, 11509, 11517, 11524, 11531, 11539,
- 11545, 11551, 11557, 11563, 11570, 11575, 11579, 11584, 0, 0, 0, 0, 0,
- 11588, 11593, 11598, 11603, 11608, 11613, 11618, 11623, 11628, 11633,
- 11638, 11643, 11648, 11653, 11658, 11663, 11668, 11673, 11678, 11683,
- 11688, 11693, 11698, 11703, 11708, 11713, 11718, 11726, 11733, 11739,
- 11744, 11752, 11759, 11765, 11772, 11778, 11783, 11790, 11797, 11803,
- 11808, 11813, 11819, 11824, 11829, 11835, 0, 0, 11840, 11846, 11852,
- 11858, 11864, 11870, 11876, 11881, 11889, 11895, 11901, 11907, 11913,
- 11919, 11927, 0, 11933, 11938, 11943, 11948, 11953, 11958, 11963, 11968,
- 11973, 11978, 11983, 11988, 11993, 11998, 12003, 12008, 12013, 12018,
- 12023, 12028, 12033, 12038, 12043, 12048, 12053, 12058, 12063, 12068, 0,
- 0, 12073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 147, 151, 156, 161, 165, 170, 175, 179, 184, 189, 194, 199, 204, 207,
+ 211, 214, 218, 221, 225, 229, 234, 239, 244, 248, 253, 258, 263, 267,
+ 272, 277, 281, 285, 290, 294, 299, 304, 308, 313, 318, 322, 327, 332,
+ 337, 342, 347, 351, 354, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 363, 368,
+ 371, 374, 377, 380, 383, 386, 388, 391, 397, 405, 408, 412, 415, 417,
+ 420, 423, 426, 429, 433, 436, 439, 443, 445, 448, 454, 462, 469, 476,
+ 483, 488, 495, 501, 508, 514, 521, 529, 534, 542, 549, 555, 562, 569,
+ 577, 584, 592, 600, 605, 612, 619, 625, 632, 638, 645, 648, 654, 661,
+ 667, 674, 681, 688, 693, 700, 707, 713, 720, 726, 733, 741, 746, 754,
+ 761, 767, 774, 781, 789, 796, 804, 812, 817, 824, 831, 837, 844, 850,
+ 857, 860, 866, 873, 879, 886, 893, 900, 905, 913, 920, 927, 934, 941,
+ 948, 955, 962, 969, 977, 985, 993, 1001, 1009, 1017, 1025, 1033, 1040,
+ 1047, 1054, 1061, 1068, 1075, 1082, 1089, 1096, 1103, 1110, 1117, 1125,
+ 1133, 1141, 1149, 1157, 1165, 1173, 1181, 1189, 1197, 1204, 1211, 1218,
+ 1225, 1233, 1241, 1249, 1257, 1265, 1273, 1281, 1287, 1292, 1297, 1305,
+ 1313, 1321, 1329, 1334, 1341, 1348, 1356, 1364, 1372, 1380, 1390, 1400,
+ 1407, 1414, 1421, 1428, 1436, 1444, 1452, 1460, 1471, 1476, 1481, 1488,
+ 1495, 1502, 1509, 1516, 1523, 1528, 1533, 1540, 1547, 1555, 1563, 1571,
+ 1579, 1586, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, 1657, 1665,
+ 1673, 1680, 1687, 1693, 1699, 1706, 1713, 1720, 1727, 1735, 1743, 1750,
+ 1757, 1764, 1771, 1779, 1787, 1795, 1803, 1811, 1818, 1825, 1833, 1841,
+ 1849, 1857, 1863, 1869, 1875, 1882, 1889, 1894, 1899, 1904, 1911, 1918,
+ 1925, 1932, 1940, 1948, 1955, 1961, 1966, 1971, 1978, 1985, 1992, 1997,
+ 2002, 2007, 2014, 2021, 2028, 2035, 2042, 2048, 2056, 2066, 2074, 2081,
+ 2088, 2093, 2098, 2105, 2112, 2116, 2121, 2126, 2131, 2139, 2148, 2155,
+ 2162, 2171, 2178, 2185, 2190, 2197, 2204, 2211, 2218, 2225, 2230, 2237,
+ 2244, 2252, 2257, 2262, 2267, 2277, 2281, 2287, 2293, 2299, 2305, 2313,
+ 2326, 2334, 2339, 2349, 2354, 2359, 2369, 2374, 2381, 2388, 2396, 2404,
+ 2411, 2418, 2425, 2432, 2442, 2452, 2461, 2470, 2480, 2490, 2500, 2510,
+ 2516, 2526, 2536, 2546, 2556, 2564, 2572, 2579, 2586, 2594, 2602, 2610,
+ 2618, 2625, 2632, 2642, 2652, 2660, 2668, 2676, 2681, 2691, 2696, 2703,
+ 2710, 2715, 2720, 2728, 2736, 2746, 2756, 2763, 2770, 2779, 2788, 2796,
+ 2804, 2813, 2822, 2830, 2838, 2847, 2856, 2865, 2874, 2884, 2894, 2902,
+ 2910, 2919, 2928, 2937, 2946, 2956, 2966, 2974, 2982, 2991, 3000, 3009,
+ 3018, 3027, 3036, 3041, 3046, 3054, 3062, 3072, 3080, 3085, 3090, 3097,
+ 3104, 3111, 3118, 3125, 3132, 3142, 3152, 3162, 3172, 3179, 3186, 3196,
+ 3206, 3214, 3222, 3230, 3238, 3246, 3253, 3260, 3267, 3273, 3280, 3287,
+ 3294, 3303, 3313, 3323, 3330, 3337, 3343, 3348, 3355, 3361, 3367, 3374,
+ 3381, 3392, 3402, 3409, 3416, 3423, 3430, 3436, 3441, 3448, 3454, 3459,
+ 3467, 3475, 3482, 3488, 3493, 3500, 3505, 3512, 3521, 3530, 3539, 3546,
+ 3552, 3558, 3563, 3570, 3577, 3584, 3591, 3598, 3603, 3608, 3617, 3625,
+ 3634, 3639, 3645, 3656, 3663, 3671, 3680, 3686, 3692, 3698, 3705, 3710,
+ 3716, 3727, 3736, 3745, 3753, 3761, 3771, 3776, 3783, 3790, 3795, 3807,
+ 3816, 3824, 3831, 3840, 3845, 3850, 3857, 3864, 3871, 3878, 3884, 3893,
+ 3901, 3906, 3914, 3920, 3928, 3936, 3942, 3948, 3954, 3961, 3969, 3975,
+ 3983, 3990, 3995, 4002, 4010, 4020, 4027, 4034, 4044, 4051, 4058, 4068,
+ 4075, 4082, 4089, 4095, 4101, 4111, 4124, 4129, 4136, 4141, 4145, 4151,
+ 4160, 4167, 4172, 4177, 4181, 4186, 4192, 4196, 4202, 4208, 4214, 4220,
+ 4228, 4233, 4238, 4243, 4248, 4254, 4256, 4261, 4265, 4271, 4277, 4283,
+ 4288, 4295, 4302, 4308, 4315, 4323, 4331, 4336, 4341, 4345, 4350, 4352,
+ 4354, 4357, 4359, 4361, 4366, 4371, 4377, 4382, 4386, 4391, 4396, 4405,
+ 4411, 4416, 4422, 4427, 4433, 4441, 4449, 4453, 4457, 4462, 4468, 4474,
+ 4480, 4486, 4491, 4499, 4508, 4517, 4521, 4527, 4534, 4541, 4548, 4555,
+ 4559, 4564, 4569, 4574, 4579, 4584, 4586, 4589, 4592, 4595, 4598, 4601,
+ 4605, 4609, 4615, 4618, 4623, 4629, 4635, 4638, 4643, 4649, 4653, 4659,
+ 4665, 4671, 4677, 4682, 4687, 4692, 4695, 4701, 4706, 4711, 4715, 4720,
+ 4726, 4732, 4735, 4739, 4743, 4747, 4750, 4753, 4758, 4762, 4769, 4773,
+ 4779, 4783, 4789, 4793, 4797, 4801, 4806, 4811, 4818, 4824, 4831, 4837,
+ 4843, 4849, 4852, 4856, 4860, 4863, 4867, 4872, 4877, 4881, 4885, 4891,
+ 4895, 4899, 4904, 4910, 4915, 4921, 4925, 4932, 4937, 4942, 4947, 4952,
+ 4958, 4961, 4965, 4970, 4975, 4984, 4990, 4995, 4999, 5004, 5008, 5013,
+ 5017, 5021, 5026, 5029, 5035, 5040, 5045, 5050, 5055, 5060, 5065, 5071,
+ 5077, 5083, 5088, 5093, 5099, 5105, 5111, 5116, 5121, 5128, 5135, 5139,
+ 5145, 5152, 0, 0, 5159, 5162, 5171, 5180, 5191, 0, 0, 0, 0, 0, 5195,
+ 5198, 5203, 5211, 5216, 5224, 5232, 0, 5240, 0, 5248, 5256, 5264, 5275,
+ 5280, 5285, 5290, 5295, 5300, 5305, 5310, 5315, 5320, 5325, 5330, 5335,
+ 5340, 5345, 5350, 5355, 0, 5360, 5365, 5370, 5375, 5380, 5385, 5390,
+ 5395, 5403, 5411, 5419, 5427, 5435, 5443, 5454, 5459, 5464, 5469, 5474,
+ 5479, 5484, 5489, 5494, 5499, 5504, 5509, 5514, 5519, 5524, 5529, 5534,
+ 5539, 5545, 5550, 5555, 5560, 5565, 5570, 5575, 5580, 5588, 5596, 5604,
+ 5612, 5620, 5625, 5629, 5633, 5640, 5650, 5660, 5664, 5668, 5672, 5678,
+ 5685, 5689, 5694, 5698, 5703, 5707, 5712, 5716, 5721, 5726, 5731, 5736,
+ 5741, 5746, 5751, 5756, 5761, 5766, 5771, 5776, 5781, 5786, 5791, 5795,
+ 5799, 5805, 5809, 5814, 5820, 5828, 5833, 5838, 5845, 5850, 5855, 5862,
+ 5871, 5880, 5891, 5899, 5904, 5909, 5914, 5921, 5926, 5932, 5937, 5942,
+ 5947, 5952, 5957, 5962, 5970, 5976, 5981, 5985, 5990, 5995, 6000, 6005,
+ 6010, 6015, 6020, 6024, 6030, 6034, 6039, 6044, 6049, 6053, 6058, 6063,
+ 6068, 6073, 6077, 6082, 6086, 6091, 6096, 6101, 6106, 6112, 6117, 6123,
+ 6127, 6132, 6136, 6140, 6145, 6150, 6155, 6160, 6165, 6170, 6175, 6179,
+ 6185, 6189, 6194, 6199, 6204, 6208, 6213, 6218, 6223, 6228, 6232, 6237,
+ 6241, 6246, 6251, 6256, 6261, 6267, 6272, 6278, 6282, 6287, 6291, 6299,
+ 6304, 6309, 6314, 6321, 6326, 6332, 6337, 6342, 6347, 6352, 6357, 6362,
+ 6370, 6376, 6381, 6386, 6391, 6396, 6401, 6407, 6413, 6420, 6427, 6436,
+ 6445, 6452, 6459, 6468, 6477, 6482, 6487, 6492, 6497, 6502, 6507, 6512,
+ 6517, 6528, 6539, 6544, 6549, 6556, 6563, 6571, 6579, 6584, 6589, 6594,
+ 6599, 6603, 6607, 6611, 6617, 6623, 6627, 6634, 6639, 6649, 6659, 6665,
+ 6671, 6679, 6687, 6695, 6703, 6710, 6717, 6726, 6735, 6743, 6751, 6759,
+ 6767, 6775, 6783, 6791, 6799, 6806, 6813, 6819, 6825, 6833, 6841, 6848,
+ 6855, 6864, 6873, 6879, 6885, 6893, 6901, 6909, 6917, 6923, 6929, 6937,
+ 6945, 6953, 6961, 6968, 6975, 6983, 6991, 6999, 7007, 7012, 7017, 7024,
+ 7031, 7041, 7051, 7055, 7063, 7071, 7078, 7085, 7093, 7101, 7108, 7115,
+ 7123, 7131, 7138, 7145, 7153, 7161, 7166, 7173, 7180, 7187, 7194, 7200,
+ 7206, 7214, 7222, 7227, 7232, 7240, 7248, 7256, 7264, 7272, 7280, 7287,
+ 7294, 7302, 7310, 7318, 7326, 7333, 7340, 7346, 7352, 7361, 7370, 7377,
+ 7384, 7391, 7398, 7405, 7412, 7419, 7426, 7434, 7442, 7450, 7458, 7466,
+ 7474, 7484, 7494, 7501, 7508, 7515, 7522, 7529, 7536, 7543, 7550, 7557,
+ 7564, 7571, 7578, 7585, 7592, 7599, 7606, 7613, 7620, 7627, 7634, 7641,
+ 7648, 7655, 7662, 7667, 7672, 7677, 7682, 7687, 7692, 7697, 7702, 7707,
+ 7712, 7718, 7724, 7733, 7742, 7751, 7760, 7768, 7776, 7784, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7792, 7797, 7802, 7807, 7812, 7817, 7822, 7827, 7832,
+ 7836, 7841, 7846, 7851, 7856, 7861, 7866, 7871, 7876, 7881, 7886, 7891,
+ 7896, 7901, 7906, 7911, 7916, 7921, 7926, 7930, 7935, 7940, 7945, 7950,
+ 7955, 7960, 7965, 7970, 7975, 0, 0, 7980, 7987, 7990, 7994, 7998, 8001,
+ 8005, 0, 8009, 8014, 8019, 8024, 8029, 8034, 8039, 8044, 8049, 8053,
+ 8058, 8063, 8068, 8073, 8078, 8083, 8088, 8093, 8098, 8103, 8108, 8113,
+ 8118, 8123, 8128, 8133, 8138, 8143, 8147, 8152, 8157, 8162, 8167, 8172,
+ 8177, 8182, 8187, 8192, 8197, 0, 8204, 8209, 0, 0, 0, 0, 8212, 0, 8216,
+ 8221, 8226, 8231, 8238, 8245, 8250, 8255, 8260, 8265, 8270, 8275, 8280,
+ 8287, 8292, 8299, 8306, 8311, 8318, 8323, 8328, 8333, 8340, 8345, 8350,
+ 8357, 8366, 8371, 8376, 8381, 8386, 8392, 8397, 8404, 8411, 8418, 8423,
+ 8428, 8433, 8438, 8443, 8448, 8458, 8463, 8471, 8476, 8481, 8486, 8491,
+ 8498, 8505, 8512, 8518, 8524, 8531, 0, 0, 0, 0, 0, 0, 0, 0, 8538, 8542,
+ 8546, 8550, 8554, 8558, 8562, 8566, 8570, 8574, 8578, 8583, 8587, 8591,
+ 8596, 8600, 8605, 8609, 8613, 8617, 8622, 8626, 8631, 8635, 8639, 8643,
+ 8647, 0, 0, 0, 0, 0, 8651, 8658, 8666, 8673, 8678, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8683, 8686, 8690, 8695, 8699, 0, 8703, 8709, 8715, 8718,
+ 8725, 8734, 8737, 8740, 8745, 8751, 8755, 8763, 8769, 8775, 8783, 8787,
+ 8792, 8803, 8808, 8812, 8816, 8820, 0, 0, 8823, 8830, 8834, 8840, 8844,
+ 8851, 8857, 8864, 8870, 8876, 8880, 8884, 8890, 8894, 8898, 8902, 8906,
+ 8910, 8914, 8918, 8922, 8926, 8930, 8934, 8938, 8942, 8946, 8950, 8954,
+ 8958, 8966, 8974, 8984, 8993, 9002, 9005, 9009, 9013, 9017, 9021, 9025,
+ 9029, 9033, 9037, 9042, 9046, 9049, 9052, 9055, 9058, 9061, 9064, 9067,
+ 9070, 9074, 9077, 9080, 9085, 9090, 9096, 9099, 9106, 9115, 9120, 9125,
+ 9132, 9137, 9142, 9146, 9150, 9154, 9158, 9162, 9166, 9170, 9174, 9178,
+ 9182, 9187, 9192, 9199, 9205, 9211, 9217, 9222, 9230, 9238, 9243, 9249,
+ 9255, 9261, 9267, 9271, 9275, 9279, 9286, 9296, 9300, 9304, 9308, 9314,
+ 9322, 9326, 9330, 9337, 9341, 9345, 9349, 9356, 9363, 9375, 9379, 9383,
+ 9387, 9397, 9406, 9410, 9418, 9425, 9432, 9441, 9452, 9460, 9464, 9473,
+ 9484, 9492, 9505, 9513, 9521, 9529, 9537, 9543, 9552, 9559, 9563, 9571,
+ 9575, 9582, 9590, 9594, 9600, 9607, 9614, 9618, 9626, 9630, 9637, 9641,
+ 9649, 9653, 9661, 9669, 9676, 9684, 9692, 9699, 9705, 9709, 9716, 9724,
+ 9730, 9737, 9744, 9750, 9759, 9767, 9774, 9780, 9784, 9787, 9791, 9797,
+ 9805, 9809, 9815, 9821, 9828, 9835, 9838, 9845, 9850, 9858, 9863, 9867,
+ 9880, 9893, 9899, 9906, 9911, 9917, 9922, 9928, 9938, 9945, 9954, 9964,
+ 9970, 9975, 9980, 9984, 9988, 9993, 9998, 10004, 10012, 10020, 10031,
+ 10036, 10045, 10054, 10061, 10067, 10073, 10079, 10085, 10091, 10097,
+ 10103, 10109, 10115, 10122, 10129, 10136, 10142, 10150, 10159, 10165,
+ 10172, 10179, 10184, 10189, 10193, 10200, 10207, 10216, 10225, 10228,
+ 10233, 10238, 0, 10243, 10247, 10251, 10257, 10261, 10265, 10271, 10275,
+ 10283, 10287, 10291, 10295, 10299, 10303, 10309, 10313, 10319, 10323,
+ 10327, 10331, 10335, 10339, 10344, 10347, 10351, 10357, 10361, 10365,
+ 10369, 10373, 10377, 10383, 10389, 10395, 10399, 10403, 10408, 10412,
+ 10416, 10421, 10425, 10429, 10436, 10443, 10447, 10451, 10456, 10460,
+ 10464, 10467, 10472, 10475, 10478, 10483, 10488, 10492, 10496, 10502,
+ 10508, 10511, 0, 0, 10514, 10520, 10526, 10532, 10542, 10554, 10566,
+ 10583, 10595, 10606, 10614, 10621, 10632, 10647, 10658, 10664, 10673,
+ 10681, 10693, 10703, 10711, 10723, 10730, 10738, 10750, 10756, 10762,
+ 10770, 10778, 10786, 10792, 10802, 10809, 10819, 10829, 10842, 10856,
+ 10870, 10880, 10891, 10902, 10915, 10928, 10942, 10954, 10966, 10979,
+ 10992, 11004, 11017, 11026, 11034, 11039, 11044, 11049, 11054, 11059,
+ 11064, 11069, 11074, 11079, 11084, 11089, 11094, 11099, 11104, 11109,
+ 11114, 11119, 11124, 11129, 11134, 11139, 11144, 11149, 11154, 11159,
+ 11164, 11169, 11174, 11179, 11184, 11189, 11194, 11198, 11203, 11208,
+ 11213, 11218, 11223, 11227, 11231, 11235, 11239, 11243, 11247, 11251,
+ 11255, 11259, 11263, 11267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11272, 11277, 11281, 11285, 11289, 11293, 11297, 11301, 11305, 11309,
+ 11313, 11317, 11322, 11326, 11330, 11334, 11339, 11343, 11348, 11353,
+ 11358, 11362, 11367, 11372, 11377, 11382, 11386, 11391, 11395, 11400,
+ 11405, 11409, 11414, 11421, 11425, 11430, 11434, 11438, 11443, 11447,
+ 11454, 11461, 11468, 11474, 11482, 11490, 11499, 11507, 11514, 11521,
+ 11529, 11535, 11541, 11547, 11553, 11560, 11565, 11569, 11574, 0, 0, 0,
+ 0, 0, 11578, 11583, 11588, 11593, 11598, 11603, 11608, 11613, 11618,
+ 11623, 11628, 11633, 11638, 11643, 11648, 11653, 11658, 11663, 11668,
+ 11673, 11678, 11683, 11688, 11693, 11698, 11703, 11708, 11716, 11723,
+ 11729, 11734, 11742, 11749, 11755, 11762, 11768, 11773, 11780, 11787,
+ 11793, 11798, 11803, 11809, 11814, 11819, 11825, 0, 0, 11830, 11836,
+ 11842, 11848, 11854, 11860, 11866, 11871, 11879, 11885, 11891, 11897,
+ 11903, 11909, 11917, 0, 11923, 11928, 11933, 11938, 11943, 11948, 11953,
+ 11958, 11963, 11968, 11973, 11978, 11983, 11988, 11993, 11998, 12003,
+ 12008, 12013, 12018, 12023, 12028, 12033, 12038, 12043, 12048, 12053,
+ 12058, 0, 0, 12063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12067, 0, 12076, 12083, 12091, 12103, 12110, 12117, 12124, 12135, 12146,
+ 12153, 12161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12167, 12172, 12177, 12182, 12187,
+ 12192, 12197, 12202, 12207, 12212, 12217, 12222, 12227, 12231, 12235,
+ 12239, 12244, 12250, 12256, 12262, 12267, 12272, 12277, 12282, 12288,
+ 12297, 12305, 0, 12311, 12317, 12321, 12325, 12329, 12334, 12337, 12341,
+ 12344, 12348, 12351, 12355, 12359, 12363, 12368, 12373, 12376, 12380,
+ 12385, 12390, 12393, 12397, 12400, 12404, 12408, 12412, 12416, 12420,
+ 12424, 12428, 12432, 12436, 12440, 12444, 12448, 12452, 12456, 12460,
+ 12464, 12468, 12472, 12475, 12479, 12482, 12486, 12490, 12494, 12497,
+ 12500, 12503, 12507, 12511, 12515, 12519, 12523, 12527, 12531, 12534,
+ 12537, 12542, 12547, 12551, 12555, 12560, 12564, 12569, 12573, 12578,
+ 12583, 12589, 12595, 12601, 12605, 12610, 12616, 12622, 12626, 12631,
+ 12635, 12641, 12646, 12649, 12655, 12661, 12666, 12671, 12678, 12683,
+ 12688, 12692, 12696, 12700, 12704, 12708, 12712, 12716, 12720, 12725,
+ 12730, 12735, 12741, 12744, 12748, 12752, 12755, 12758, 12761, 12764,
+ 12767, 12770, 12773, 12776, 12779, 12783, 12790, 12795, 12799, 12803,
+ 12807, 12811, 0, 12815, 12819, 12823, 12827, 12831, 12837, 12841, 0,
+ 12845, 12849, 12853, 0, 12857, 12860, 12864, 12867, 12871, 12874, 12878,
+ 12882, 0, 0, 12886, 12889, 0, 0, 12893, 12896, 12900, 12903, 12907,
+ 12911, 12915, 12919, 12923, 12927, 12931, 12935, 12939, 12943, 12947,
+ 12951, 12955, 12959, 12963, 12967, 12971, 12975, 0, 12978, 12981, 12985,
+ 12989, 12993, 12996, 12999, 0, 13002, 0, 0, 0, 13006, 13010, 13014,
+ 13017, 0, 0, 13020, 13024, 13028, 13033, 13037, 13042, 13046, 13051,
+ 13056, 0, 0, 13062, 13066, 0, 0, 13071, 13075, 13080, 13084, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13090, 0, 0, 0, 0, 13096, 13100, 0, 13104, 13108, 13113,
+ 13118, 13123, 0, 0, 13129, 13133, 13136, 13139, 13142, 13145, 13148,
+ 13151, 13154, 13157, 13160, 13169, 13178, 13182, 13186, 13192, 13198,
+ 13204, 13210, 13224, 13231, 13234, 0, 0, 0, 0, 0, 13238, 13244, 13248, 0,
+ 13252, 13255, 13259, 13262, 13266, 13269, 0, 0, 0, 0, 13273, 13277, 0, 0,
+ 13281, 13285, 13289, 13292, 13296, 13300, 13304, 13308, 13312, 13316,
+ 13320, 13324, 13328, 13332, 13336, 13340, 13344, 13348, 13352, 13356,
+ 13360, 13364, 0, 13367, 13370, 13374, 13378, 13382, 13385, 13388, 0,
+ 13391, 13395, 0, 13399, 13403, 0, 13407, 13410, 0, 0, 13413, 0, 13417,
+ 13422, 13426, 13431, 13435, 0, 0, 0, 0, 13440, 13445, 0, 0, 13450, 13455,
+ 13460, 0, 0, 0, 13464, 0, 0, 0, 0, 0, 0, 0, 13468, 13472, 13476, 13480,
+ 0, 13484, 0, 0, 0, 0, 0, 0, 0, 13488, 13492, 13495, 13498, 13501, 13504,
+ 13507, 13510, 13513, 13516, 13519, 13522, 13525, 13528, 13531, 13536, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13540, 13544, 13548, 0, 13552, 13555,
+ 13559, 13562, 13566, 13569, 13573, 13577, 13581, 0, 13586, 13589, 13593,
+ 0, 13598, 13601, 13605, 13608, 13612, 13616, 13620, 13624, 13628, 13632,
+ 13636, 13640, 13644, 13648, 13652, 13656, 13660, 13664, 13668, 13672,
+ 13676, 13680, 0, 13683, 13686, 13690, 13694, 13698, 13701, 13704, 0,
+ 13707, 13711, 0, 13715, 13719, 13723, 13727, 13730, 0, 0, 13733, 13737,
+ 13741, 13746, 13750, 13755, 13759, 13764, 13769, 13775, 0, 13781, 13785,
+ 13790, 0, 13796, 13800, 13805, 0, 0, 13809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13812, 13817, 13822, 13827, 0, 0, 13833, 13837, 13840,
+ 13843, 13846, 13849, 13852, 13855, 13858, 13861, 13864, 13868, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13872, 13876, 13880, 0, 13884, 13887,
+ 13891, 13894, 13898, 13901, 13905, 13909, 0, 0, 13913, 13916, 0, 0,
+ 13920, 13923, 13927, 13930, 13934, 13938, 13942, 13946, 13950, 13954,
+ 13958, 13962, 13966, 13970, 13974, 13978, 13982, 13986, 13990, 13994,
+ 13998, 14002, 0, 14005, 14008, 14012, 14016, 14020, 14023, 14026, 0,
+ 14029, 14033, 0, 14037, 14041, 14045, 14049, 14052, 0, 0, 14055, 14059,
+ 14063, 14068, 14072, 14077, 14081, 14086, 14091, 0, 0, 14097, 14101, 0,
+ 0, 14106, 14110, 14115, 0, 0, 0, 0, 0, 0, 0, 0, 14119, 14125, 0, 0, 0, 0,
+ 14131, 14135, 0, 14139, 14143, 14148, 14153, 14158, 0, 0, 14164, 14168,
+ 14171, 14174, 14177, 14180, 14183, 14186, 14189, 14192, 14195, 14198,
+ 14202, 14208, 14214, 14220, 14226, 14232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14238, 14242, 0, 14246, 14249, 14253, 14256, 14260, 14263, 0, 0, 0,
+ 14267, 14270, 14274, 0, 14278, 14281, 14285, 14289, 0, 0, 0, 14292,
+ 14296, 0, 14300, 0, 14304, 14308, 0, 0, 0, 14312, 14316, 0, 0, 0, 14320,
+ 14323, 14327, 0, 0, 0, 14330, 14333, 14336, 14339, 14343, 14347, 14351,
+ 14355, 14359, 14363, 14367, 14370, 0, 0, 0, 0, 14373, 14378, 14382,
+ 14387, 14391, 0, 0, 0, 14396, 14400, 14405, 0, 14410, 14414, 14419,
+ 14424, 0, 0, 14428, 0, 0, 0, 0, 0, 0, 14431, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14437, 14441, 14444, 14447, 14450, 14453, 14456, 14459,
+ 14462, 14465, 14468, 14472, 14477, 14482, 14486, 14490, 14494, 14498,
+ 14502, 14507, 14511, 0, 0, 0, 0, 0, 0, 14514, 14518, 14522, 0, 14526,
+ 14529, 14533, 14536, 14540, 14543, 14547, 14551, 0, 14555, 14558, 14562,
+ 0, 14566, 14569, 14573, 14577, 14580, 14584, 14588, 14592, 14596, 14600,
+ 14604, 14608, 14612, 14616, 14620, 14624, 14628, 14632, 14636, 14640,
+ 14644, 14648, 14652, 0, 14655, 14658, 14662, 14666, 14670, 14673, 14676,
+ 14679, 14683, 14687, 0, 14691, 14695, 14699, 14703, 14706, 0, 0, 0,
+ 14709, 14713, 14718, 14722, 14727, 14731, 14736, 14741, 0, 14747, 14751,
+ 14756, 0, 14761, 14765, 14770, 14775, 0, 0, 0, 0, 0, 0, 0, 14779, 14783,
+ 0, 14789, 14793, 0, 0, 0, 0, 0, 0, 14797, 14802, 14807, 14812, 0, 0,
+ 14818, 14822, 14825, 14828, 14831, 14834, 14837, 14840, 14843, 14846, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14849, 14862, 14874, 14886, 14898, 14910, 14922,
+ 14934, 0, 0, 14938, 14942, 0, 14946, 14949, 14953, 14956, 14960, 14963,
+ 14967, 14971, 0, 14975, 14978, 14982, 0, 14986, 14989, 14993, 14997,
+ 15000, 15004, 15008, 15012, 15016, 15020, 15024, 15028, 15032, 15036,
+ 15040, 15044, 15048, 15052, 15056, 15060, 15064, 15068, 15072, 0, 15075,
+ 15078, 15082, 15086, 15090, 15093, 15096, 15099, 15103, 15107, 0, 15111,
+ 15115, 15119, 15123, 15126, 0, 0, 15129, 15133, 15137, 15142, 15146,
+ 15151, 15155, 15160, 15165, 0, 15171, 15175, 15180, 0, 15185, 15189,
+ 15194, 15199, 0, 0, 0, 0, 0, 0, 0, 15203, 15207, 0, 0, 0, 0, 0, 0, 0,
+ 15213, 0, 15217, 15222, 15227, 15232, 0, 0, 15238, 15242, 15245, 15248,
+ 15251, 15254, 15257, 15260, 15263, 15266, 0, 15269, 15273, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15277, 15281, 0, 15285, 15288, 15292,
+ 15295, 15299, 15302, 15306, 15310, 0, 15314, 15317, 15321, 0, 15325,
+ 15328, 15332, 15336, 15339, 15343, 15347, 15351, 15355, 15359, 15363,
+ 15367, 15371, 15375, 15379, 15383, 15387, 15391, 15395, 15399, 15403,
+ 15407, 15411, 15414, 15418, 15421, 15425, 15429, 15433, 15436, 15439,
+ 15442, 15446, 15450, 15454, 15458, 15462, 15466, 15470, 15473, 15476, 0,
+ 0, 15480, 15484, 15489, 15493, 15498, 15502, 15507, 15512, 0, 15518,
+ 15522, 15527, 0, 15532, 15536, 15541, 15546, 15550, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15555, 0, 0, 0, 0, 0, 0, 0, 0, 15561, 15566, 15571, 15576, 0, 0,
+ 15582, 15586, 15589, 15592, 15595, 15598, 15601, 15604, 15607, 15610,
+ 15613, 15617, 15622, 15627, 15633, 15639, 0, 0, 0, 15645, 15649, 15655,
+ 15661, 15667, 15672, 15678, 0, 0, 15684, 15688, 0, 15692, 15696, 15700,
+ 15704, 15708, 15712, 15716, 15720, 15724, 15728, 15732, 15736, 15740,
+ 15744, 15748, 15752, 15756, 15760, 0, 0, 0, 15764, 15770, 15776, 15782,
+ 15788, 15794, 15800, 15806, 15812, 15818, 15824, 15830, 15838, 15844,
+ 15850, 15856, 15862, 15868, 15874, 15880, 15886, 15892, 15898, 15904, 0,
+ 15910, 15916, 15922, 15928, 15934, 15940, 15944, 15950, 15954, 0, 15958,
+ 0, 0, 15964, 15968, 15974, 15980, 15986, 15990, 15996, 0, 0, 0, 16000, 0,
+ 0, 0, 0, 16004, 16009, 16016, 16023, 16030, 16037, 0, 16044, 0, 16051,
+ 16056, 16061, 16068, 16075, 16084, 16095, 16104, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16109, 16116, 16123, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16128, 16134, 16140, 16146, 16152, 16158, 16164, 16170,
+ 16176, 16182, 16188, 16194, 16200, 16206, 16212, 16218, 16224, 16230,
+ 16236, 16242, 16248, 16254, 16260, 16266, 16272, 16278, 16284, 16290,
+ 16296, 16302, 16308, 16314, 16320, 16325, 16331, 16337, 16341, 16347,
+ 16351, 16357, 16363, 16369, 16375, 16381, 16387, 16392, 16398, 16402,
+ 16407, 16413, 16419, 16425, 16430, 16436, 16442, 16448, 16453, 16459, 0,
+ 0, 0, 0, 16463, 16469, 16474, 16480, 16485, 16493, 16501, 16505, 16509,
+ 16513, 16519, 16525, 16531, 16537, 16541, 16545, 16549, 16553, 16557,
+ 16560, 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16588, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16592, 16597, 0, 16604, 0, 0, 16611,
+ 16616, 0, 16621, 0, 0, 16628, 0, 0, 0, 0, 0, 0, 16633, 16638, 16642,
+ 16649, 0, 16656, 16661, 16666, 16671, 16678, 16685, 16692, 0, 16699,
+ 16704, 16709, 0, 16716, 0, 16723, 0, 0, 16728, 16735, 0, 16742, 16746,
+ 16753, 16757, 16762, 16770, 16776, 16782, 16787, 16793, 16799, 16805,
+ 16810, 0, 16816, 16824, 16831, 0, 0, 16838, 16843, 16849, 16854, 16860,
+ 0, 16866, 0, 16872, 16879, 16886, 16893, 16900, 16905, 0, 0, 16909,
+ 16914, 16918, 16922, 16926, 16930, 16934, 16938, 16942, 16946, 0, 0,
+ 16950, 16956, 16962, 16969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16976, 16980, 16991,
+ 17006, 17021, 17031, 17042, 17055, 17066, 17072, 17080, 17090, 17096,
+ 17104, 17108, 17114, 17120, 17128, 17138, 17146, 17159, 17165, 17173,
+ 17181, 17193, 17200, 17208, 17216, 17224, 17232, 17240, 17248, 17258,
+ 17262, 17265, 17268, 17271, 17274, 17277, 17280, 17283, 17286, 17289,
+ 17293, 17297, 17301, 17305, 17309, 17313, 17317, 17321, 17325, 17330,
+ 17336, 17346, 17360, 17370, 17376, 17382, 17390, 17398, 17406, 17414,
+ 17420, 17426, 17429, 17433, 17437, 17441, 17445, 17449, 17453, 0, 17457,
+ 17461, 17465, 17469, 17473, 17477, 17481, 17485, 17489, 17493, 17497,
+ 17500, 17503, 17507, 17511, 17515, 17518, 17522, 17526, 17530, 17534,
+ 17538, 17542, 17546, 17550, 17553, 17556, 17560, 17564, 17568, 17571,
+ 17574, 17577, 17581, 17586, 17590, 0, 0, 0, 0, 17594, 17599, 17603,
+ 17608, 17612, 17617, 17622, 17628, 17633, 17639, 17643, 17648, 17652,
+ 17657, 17667, 17673, 17679, 17686, 17696, 17702, 17706, 17710, 17716,
+ 17722, 17730, 17736, 17744, 17752, 17760, 17770, 17778, 17788, 17793,
+ 17799, 17805, 17811, 17817, 17823, 17829, 0, 17835, 17841, 17847, 17853,
+ 17859, 17865, 17871, 17877, 17883, 17889, 17895, 17900, 17905, 17911,
+ 17917, 17923, 17928, 17934, 17940, 17946, 17952, 17958, 17964, 17970,
+ 17976, 17981, 17986, 17992, 17998, 18004, 18009, 18014, 18019, 18025,
+ 18033, 18040, 0, 18047, 18054, 18067, 18074, 18081, 18089, 18097, 18103,
+ 18109, 18115, 18125, 18130, 18136, 18146, 18156, 0, 18166, 18176, 18184,
+ 18196, 18208, 18214, 18228, 18243, 18248, 18253, 18261, 18269, 18277, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18285, 18288, 18292, 18296, 18300,
+ 18304, 18308, 18312, 18316, 18320, 18324, 18328, 18332, 18336, 18340,
+ 18344, 18348, 18352, 18356, 18360, 18364, 18367, 18370, 18374, 18378,
+ 18382, 18385, 18388, 18391, 18395, 18399, 18402, 18405, 18409, 18412,
+ 18417, 18420, 18424, 18427, 18431, 18434, 18439, 18442, 18446, 18453,
+ 18458, 18462, 18467, 18471, 18476, 18480, 18485, 18492, 18498, 18503,
+ 18507, 18511, 18515, 18519, 18523, 18528, 18533, 18539, 18544, 18549,
+ 18553, 18556, 18559, 18562, 18565, 18568, 18571, 18574, 18577, 18580,
+ 18586, 18590, 18594, 18598, 18602, 18606, 18610, 18614, 18618, 18623,
+ 18627, 18632, 18637, 18643, 18648, 18654, 18660, 18666, 18672, 18678,
+ 18685, 18692, 18700, 18708, 18717, 18726, 18737, 18747, 18757, 18768,
+ 18779, 18789, 18799, 18809, 18819, 18829, 18839, 18849, 18859, 18867,
+ 18874, 18880, 18887, 18892, 18898, 18904, 18910, 18916, 18922, 18928,
+ 18933, 18939, 18945, 18951, 18957, 18962, 18970, 18977, 18983, 18990,
+ 18998, 19004, 19010, 19016, 19022, 19030, 19038, 19048, 19056, 19064,
+ 19070, 19075, 19080, 19085, 19090, 19095, 19100, 19105, 19110, 19115,
+ 19121, 19127, 19133, 19140, 19145, 19151, 19156, 19161, 19166, 19171,
+ 19176, 19181, 19186, 19191, 19196, 19201, 19206, 19211, 19216, 19221,
+ 19226, 19231, 19236, 19241, 19246, 19251, 19256, 19261, 19266, 19271,
+ 19276, 19281, 19286, 19291, 19296, 19301, 19306, 19311, 19316, 19321,
+ 19326, 19331, 19336, 0, 19341, 0, 0, 0, 0, 0, 19346, 0, 0, 19351, 19355,
+ 19359, 19363, 19367, 19371, 19375, 19379, 19383, 19387, 19391, 19395,
+ 19399, 19403, 19407, 19411, 19415, 19419, 19423, 19427, 19431, 19435,
+ 19439, 19443, 19447, 19451, 19455, 19459, 19463, 19467, 19471, 19475,
+ 19479, 19483, 19487, 19491, 19495, 19499, 19503, 19507, 19511, 19515,
+ 19521, 19525, 19530, 19535, 19539, 19544, 19549, 19553, 19557, 19561,
+ 19565, 19569, 19573, 19577, 19581, 19585, 19589, 19593, 19597, 19601,
+ 19605, 19609, 19613, 19617, 19621, 19625, 19629, 19633, 19637, 19641,
+ 19645, 19649, 19653, 19657, 19661, 19665, 19669, 19673, 19677, 19681,
+ 19685, 19689, 19693, 19697, 19701, 19705, 19709, 19713, 19717, 19721,
+ 19725, 19729, 19733, 19737, 19741, 19745, 19749, 19753, 19757, 19761,
+ 19765, 19769, 19773, 19777, 19781, 19785, 19789, 19793, 19797, 19801,
+ 19805, 19809, 19813, 19817, 19821, 19825, 19829, 19833, 19837, 19841,
+ 19845, 19849, 19853, 19857, 19861, 19865, 19869, 19873, 19877, 19881,
+ 19885, 19889, 19893, 19897, 19901, 19905, 19909, 19913, 19917, 19921,
+ 19925, 19929, 19933, 19937, 19940, 19944, 19947, 19951, 19955, 19958,
+ 19962, 19966, 19969, 19973, 19977, 19981, 19985, 19988, 19992, 19996,
+ 20000, 20004, 20008, 20012, 20015, 20019, 20023, 20027, 20031, 20035,
+ 20039, 20043, 20047, 20051, 20055, 20059, 20063, 20067, 20071, 20075,
+ 20079, 20083, 20087, 20091, 20095, 20099, 20103, 20107, 20111, 20115,
+ 20119, 20123, 20127, 20131, 20135, 20139, 20143, 20147, 20151, 20155,
+ 20159, 20163, 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195,
+ 20199, 20203, 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235,
+ 20239, 20243, 20247, 20251, 20255, 20259, 20263, 20267, 20271, 20275,
+ 20279, 20283, 20287, 20291, 20295, 20299, 20303, 20307, 20311, 20315,
+ 20319, 20323, 20327, 20331, 20335, 20339, 20343, 20347, 20351, 20355,
+ 20359, 20363, 20367, 20371, 20375, 20379, 20383, 20387, 20391, 20395,
+ 20399, 20403, 20407, 20411, 20415, 20419, 20423, 20427, 20431, 20435,
+ 20439, 20443, 20447, 20451, 20455, 20459, 20463, 20467, 20471, 20475,
+ 20479, 20483, 20487, 20491, 20495, 20499, 20503, 20507, 20511, 20515,
+ 20519, 20523, 20527, 20531, 20535, 20539, 20543, 20547, 20551, 20555,
+ 20559, 20563, 20567, 20570, 20574, 20578, 20582, 20586, 20590, 20594,
+ 20598, 20602, 20606, 20610, 20614, 20618, 20622, 20626, 20630, 20634,
+ 20638, 20642, 20646, 20650, 20654, 20658, 20662, 20665, 20669, 20673,
+ 20677, 20681, 20685, 20689, 20693, 20697, 20701, 20705, 20709, 20713,
+ 20717, 20721, 20725, 20728, 20732, 20736, 20740, 20744, 20748, 20752,
+ 20756, 20759, 20763, 20767, 20771, 20775, 20779, 20783, 20787, 20791,
+ 20795, 20799, 20803, 20807, 20811, 20815, 20819, 20823, 20827, 20831,
+ 20835, 20839, 20843, 20847, 20851, 0, 20855, 20859, 20863, 20867, 0, 0,
+ 20871, 20875, 20879, 20883, 20887, 20891, 20895, 0, 20899, 0, 20903,
+ 20907, 20911, 20915, 0, 0, 20919, 20923, 20927, 20931, 20935, 20939,
+ 20943, 20947, 20951, 20955, 20959, 20963, 20967, 20971, 20975, 20979,
+ 20983, 20987, 20991, 20995, 20999, 21003, 21007, 21010, 21014, 21018,
+ 21022, 21026, 21030, 21034, 21038, 21042, 21046, 21050, 21054, 21058,
+ 21062, 21066, 21070, 21074, 21078, 0, 21082, 21086, 21090, 21094, 0, 0,
+ 21098, 21101, 21105, 21109, 21113, 21117, 21121, 21125, 21129, 21133,
+ 21137, 21141, 21145, 21149, 21153, 21157, 21161, 21166, 21171, 21176,
+ 21182, 21188, 21193, 21198, 21204, 21207, 21211, 21215, 21219, 21223,
+ 21227, 21231, 21235, 0, 21239, 21243, 21247, 21251, 0, 0, 21255, 21259,
+ 21263, 21267, 21271, 21275, 21279, 0, 21283, 0, 21287, 21291, 21295,
+ 21299, 0, 0, 21303, 21307, 21311, 21315, 21319, 21323, 21327, 21331,
+ 21335, 21340, 21345, 21350, 21356, 21362, 21367, 0, 21372, 21376, 21380,
+ 21384, 21388, 21392, 21396, 21400, 21404, 21408, 21412, 21416, 21420,
+ 21424, 21428, 21432, 21436, 21439, 21443, 21447, 21451, 21455, 21459,
+ 21463, 21467, 21471, 21475, 21479, 21483, 21487, 21491, 21495, 21499,
+ 21503, 21507, 21511, 21515, 21519, 21523, 21527, 21531, 21535, 21539,
+ 21543, 21547, 21551, 21555, 21559, 21563, 21567, 21571, 21575, 21579,
+ 21583, 21587, 21591, 21595, 0, 21599, 21603, 21607, 21611, 0, 0, 21615,
+ 21619, 21623, 21627, 21631, 21635, 21639, 21643, 21647, 21651, 21655,
+ 21659, 21663, 21667, 21671, 21675, 21679, 21683, 21687, 21691, 21695,
+ 21699, 21703, 21707, 21711, 21715, 21719, 21723, 21727, 21731, 21735,
+ 21739, 21743, 21747, 21751, 21755, 21759, 21763, 21767, 21771, 21775,
+ 21779, 21783, 21787, 21791, 21795, 21799, 21803, 21807, 21811, 21815,
+ 21819, 21823, 21827, 21831, 21835, 21839, 21842, 21846, 21850, 21854,
+ 21858, 21862, 21866, 21870, 21874, 21878, 0, 0, 21882, 21891, 21897,
+ 21902, 21906, 21909, 21914, 21917, 21920, 21923, 21928, 21932, 21937,
+ 21940, 21943, 21946, 21949, 21952, 21955, 21958, 21961, 21964, 21968,
+ 21972, 21976, 21980, 21984, 21988, 21992, 21996, 22000, 22004, 0, 0, 0,
+ 22010, 22016, 22020, 22024, 22028, 22034, 22038, 22042, 22046, 22052,
+ 22056, 22060, 22064, 22070, 22074, 22078, 22082, 22088, 22094, 22100,
+ 22108, 22114, 22120, 22126, 22132, 22138, 0, 0, 0, 0, 0, 0, 22144, 22147,
+ 22150, 22153, 22156, 22159, 22163, 22167, 22170, 22174, 22178, 22182,
+ 22186, 22190, 22193, 22197, 22201, 22205, 22209, 22213, 22217, 22221,
+ 22225, 22229, 22233, 22237, 22240, 22244, 22248, 22252, 22256, 22259,
+ 22263, 22267, 22271, 22275, 22279, 22283, 22287, 22291, 22295, 22299,
+ 22303, 22307, 22311, 22314, 22318, 22322, 22326, 22330, 22334, 22338,
+ 22342, 22346, 22350, 22354, 22358, 22362, 22366, 22370, 22374, 22378,
+ 22382, 22386, 22390, 22394, 22398, 22402, 22406, 22410, 22414, 22418,
+ 22422, 22426, 22430, 22434, 22438, 22442, 22446, 22450, 22453, 22457,
+ 22461, 22465, 22469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22473, 22477,
+ 22480, 22484, 22487, 22491, 22494, 22498, 22504, 22509, 22513, 22516,
+ 22520, 22524, 22529, 22533, 22538, 22542, 22547, 22551, 22556, 22560,
+ 22565, 22571, 22575, 22580, 22584, 22589, 22595, 22599, 22605, 22611,
+ 22615, 22620, 22628, 22636, 22643, 22648, 22653, 22662, 22669, 22676,
+ 22681, 22687, 22691, 22695, 22699, 22703, 22707, 22711, 22715, 22719,
+ 22723, 22727, 22733, 22738, 22743, 22746, 22750, 22754, 22759, 22763,
+ 22768, 22772, 22777, 22781, 22786, 22790, 22795, 22799, 22804, 22808,
+ 22813, 22819, 22823, 22828, 22833, 22837, 22841, 22845, 22849, 22852,
+ 22856, 22862, 22867, 22872, 22876, 22880, 22884, 22889, 22893, 22898,
+ 22902, 22907, 22910, 22914, 22918, 22923, 22927, 22932, 22936, 22941,
+ 22947, 22951, 22955, 22959, 22963, 22967, 22971, 22975, 22979, 22983,
+ 22987, 22991, 22997, 23000, 23004, 23008, 23013, 23017, 23022, 23026,
+ 23031, 23035, 23040, 23044, 23049, 23053, 23058, 23062, 23067, 23073,
+ 23077, 23081, 23087, 23093, 23099, 23105, 23109, 23113, 23117, 23121,
+ 23125, 23129, 23135, 23139, 23143, 23147, 23152, 23156, 23161, 23165,
+ 23170, 23174, 23179, 23183, 23188, 23192, 23197, 23201, 23206, 23212,
+ 23216, 23222, 23226, 23230, 23234, 23238, 23242, 23246, 23252, 23255,
+ 23259, 23263, 23268, 23272, 23277, 23281, 23286, 23290, 23295, 23299,
+ 23304, 23308, 23313, 23317, 23322, 23328, 23331, 23335, 23339, 23344,
+ 23349, 23353, 23357, 23361, 23365, 23369, 23373, 23379, 23382, 23386,
+ 23390, 23395, 23399, 23404, 23408, 23413, 23419, 23423, 23428, 23432,
+ 23436, 23440, 23444, 23448, 23452, 23456, 23462, 23466, 23470, 23474,
+ 23479, 23483, 23488, 23492, 23497, 23501, 23506, 23510, 23515, 23519,
+ 23524, 23528, 23533, 23536, 23540, 23544, 23548, 23552, 23556, 23560,
+ 23564, 23568, 23574, 23577, 23581, 23585, 23590, 23594, 23599, 23603,
+ 23608, 23612, 23617, 23621, 23626, 23630, 23635, 23639, 23644, 23650,
+ 23654, 23660, 23664, 23670, 23676, 23682, 23688, 23694, 23700, 23706,
+ 23712, 23716, 23720, 23724, 23728, 23732, 23736, 23740, 23744, 23749,
+ 23753, 23758, 23762, 23767, 23771, 23776, 23780, 23785, 23789, 23794,
+ 23798, 23803, 23807, 23811, 23815, 23819, 23823, 23827, 23831, 23837,
+ 23840, 23844, 23848, 23853, 23857, 23862, 23866, 23871, 23875, 23880,
+ 23884, 23889, 23893, 23898, 23902, 23907, 23913, 23917, 23923, 23928,
+ 23934, 23938, 23944, 23949, 23953, 23957, 23961, 23965, 23969, 23974,
+ 23977, 23981, 23986, 23990, 23995, 23998, 24002, 24006, 24010, 24014,
+ 24018, 24022, 24026, 24030, 24034, 24038, 24042, 24047, 24051, 24055,
+ 24061, 24065, 24071, 24075, 24081, 24085, 24089, 24093, 24097, 24101,
+ 24106, 24110, 24114, 24118, 24122, 24126, 24130, 24134, 24138, 24142,
+ 24146, 24152, 24158, 24164, 24170, 24176, 24181, 24187, 24193, 24199,
+ 24203, 24207, 24211, 24215, 24219, 24223, 24227, 24231, 24235, 24239,
+ 24243, 24247, 24251, 24256, 24261, 24266, 24270, 24274, 24278, 24282,
+ 24286, 24290, 24294, 24298, 24302, 24306, 24312, 24318, 24324, 24330,
+ 24336, 24342, 24348, 24354, 24360, 24364, 24368, 24372, 24376, 24380,
+ 24384, 24388, 24394, 24400, 24406, 24412, 24418, 24424, 24430, 24436,
+ 24442, 24447, 24452, 24457, 24462, 24468, 24474, 24480, 24486, 24492,
+ 24498, 24504, 24509, 24515, 24521, 24527, 24532, 24538, 24544, 24550,
+ 24555, 24560, 24565, 24570, 24575, 24580, 24585, 24590, 24595, 24600,
+ 24605, 24610, 24614, 24619, 24624, 24629, 24634, 24639, 24644, 24649,
+ 24654, 24659, 24664, 24669, 24674, 24679, 24684, 24689, 24694, 24699,
+ 24704, 24709, 24714, 24719, 24724, 24729, 24734, 24739, 24744, 24749,
+ 24754, 24759, 24763, 24768, 24773, 24778, 24783, 24788, 24793, 24798,
+ 24803, 24808, 24813, 24818, 24823, 24828, 24833, 24838, 24843, 24848,
+ 24853, 24858, 24863, 24868, 24873, 24878, 24883, 24888, 24892, 24897,
+ 24902, 24907, 24912, 24917, 24921, 24926, 24931, 24936, 24941, 24946,
+ 24950, 24955, 24961, 24966, 24971, 24976, 24981, 24987, 24992, 24997,
+ 25002, 25007, 25012, 25017, 25022, 25027, 25032, 25037, 25042, 25047,
+ 25052, 25057, 25062, 25067, 25072, 25077, 25082, 25087, 25092, 25097,
+ 25102, 25107, 25112, 25117, 25122, 25127, 25132, 25137, 25142, 25147,
+ 25152, 25157, 25162, 25167, 25172, 25177, 25182, 25187, 25192, 25197,
+ 25202, 25207, 25213, 25218, 25223, 25228, 25233, 25238, 25243, 25248,
+ 25253, 25258, 25263, 25268, 25272, 25277, 25282, 25287, 25292, 25297,
+ 25302, 25307, 25312, 25317, 25322, 25327, 25332, 25337, 25342, 25347,
+ 25352, 25357, 25362, 25367, 25372, 25377, 25382, 25387, 25392, 25397,
+ 25402, 25408, 25412, 25416, 25420, 25424, 25428, 25432, 25436, 25440,
+ 25446, 25452, 25458, 25464, 25470, 25476, 25482, 25489, 25495, 25500,
+ 25505, 25510, 25515, 25520, 25525, 25530, 25535, 25540, 25545, 25550,
+ 25555, 25560, 25565, 25570, 25575, 25580, 25585, 25590, 25595, 25600,
+ 25605, 25610, 25615, 25620, 25625, 25630, 25635, 0, 0, 0, 25642, 25652,
+ 25656, 25663, 25667, 25671, 25675, 25683, 25687, 25692, 25697, 25702,
+ 25706, 25711, 25716, 25719, 25723, 25727, 25736, 25740, 25744, 25750,
+ 25754, 25758, 25766, 25770, 25778, 25784, 25790, 25796, 25802, 25812,
+ 25818, 25822, 25831, 25834, 25840, 25844, 25850, 25855, 25861, 25869,
+ 25875, 25881, 25889, 25895, 25899, 25903, 25913, 25919, 25923, 25933,
+ 25939, 25943, 25947, 25954, 25961, 25966, 25971, 25980, 25984, 25988,
+ 25992, 26000, 26007, 26011, 26015, 26019, 26023, 26027, 26031, 26035,
+ 26039, 26043, 26047, 26051, 26056, 26061, 26066, 26070, 26074, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26078, 26082, 26086, 26090, 26094,
+ 26099, 26104, 26109, 26114, 26118, 26122, 26127, 26131, 0, 26135, 26140,
+ 26145, 26149, 26153, 26158, 26163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26168, 26172, 26176, 26180, 26184, 26189, 26194, 26199, 26204, 26208,
+ 26212, 26217, 26221, 26225, 26229, 26234, 26239, 26243, 26247, 26252,
+ 26257, 26262, 26268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26273, 26277, 26281,
+ 26285, 26289, 26294, 26299, 26304, 26309, 26313, 26317, 26322, 26326,
+ 26330, 26334, 26339, 26344, 26348, 26352, 26357, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 26362, 26366, 26370, 26374, 26378, 26383, 26388, 26393,
+ 26398, 26402, 26406, 26411, 26415, 0, 26419, 26424, 26429, 0, 26433,
+ 26438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26443, 26446, 26450, 26454,
+ 26458, 26462, 26466, 26470, 26474, 26478, 26482, 26486, 26490, 26494,
+ 26498, 26502, 26506, 26510, 26513, 26517, 26521, 26525, 26529, 26533,
+ 26537, 26541, 26545, 26549, 26553, 26557, 26561, 26565, 26568, 26571,
+ 26575, 26579, 26585, 26591, 26597, 26603, 26609, 26615, 26621, 26627,
+ 26633, 26639, 26645, 26651, 26657, 26663, 26672, 26681, 26687, 26693,
+ 26699, 26704, 26708, 26713, 26718, 26723, 26727, 26732, 26737, 26742,
+ 26746, 26751, 26755, 26760, 26765, 26770, 26775, 26779, 26783, 26787,
+ 26791, 26795, 26799, 26803, 26807, 26811, 26815, 26821, 26825, 26829,
+ 26833, 26837, 26841, 26849, 26855, 26859, 26865, 26869, 26875, 26879, 0,
+ 0, 26883, 26887, 26890, 26893, 26896, 26899, 26902, 26905, 26908, 26911,
+ 0, 0, 0, 0, 0, 0, 26914, 26922, 26930, 26938, 26946, 26954, 26962, 26970,
+ 26978, 26986, 0, 0, 0, 0, 0, 0, 26994, 26997, 27000, 27003, 27008, 27011,
+ 27016, 27023, 27031, 27036, 27043, 27046, 27053, 27060, 27067, 0, 27071,
+ 27075, 27078, 27081, 27084, 27087, 27090, 27093, 27096, 27099, 0, 0, 0,
+ 0, 0, 0, 27102, 27105, 27108, 27111, 27114, 27117, 27121, 27125, 27129,
+ 27132, 27136, 27140, 27143, 27147, 27151, 27154, 27158, 27161, 27165,
+ 27169, 27173, 27177, 27181, 27184, 27187, 27191, 27195, 27198, 27202,
+ 27206, 27210, 27214, 27218, 27222, 27226, 27230, 27237, 27242, 27247,
+ 27252, 27257, 27263, 27269, 27275, 27281, 27286, 27292, 27298, 27303,
+ 27309, 27315, 27321, 27327, 27333, 27338, 27344, 27349, 27355, 27361,
+ 27367, 27373, 27379, 27384, 27389, 27395, 27401, 27406, 27412, 27417,
+ 27423, 27428, 27433, 27439, 27445, 27451, 27457, 27463, 27469, 27475,
+ 27481, 27487, 27493, 27499, 27505, 27510, 27515, 27520, 27526, 0, 0, 0,
+ 0, 0, 0, 0, 0, 27532, 27541, 27550, 27558, 27566, 27576, 27584, 27593,
+ 27600, 27607, 27614, 27622, 27630, 27638, 27646, 27654, 27662, 27670,
+ 27678, 27685, 27693, 27701, 27709, 27717, 27725, 27735, 27745, 27755,
+ 27765, 27775, 27785, 27795, 27805, 27815, 27825, 27835, 27845, 27855,
+ 27865, 27873, 27881, 27891, 27899, 0, 0, 0, 0, 0, 27909, 27913, 27917,
+ 27921, 27925, 27929, 27933, 27937, 27941, 27945, 27949, 27953, 27957,
+ 27961, 27965, 27969, 27973, 27977, 27981, 27985, 27989, 27993, 27997,
+ 28001, 28007, 28011, 28017, 28021, 28027, 28031, 28037, 28041, 28045,
+ 28049, 28053, 28057, 28061, 28067, 28073, 28079, 28085, 28090, 28096,
+ 28102, 28108, 28114, 28120, 28126, 28133, 28139, 28144, 28149, 28153,
+ 28157, 28161, 28165, 28169, 28173, 28177, 28183, 28189, 28195, 28200,
+ 28207, 28212, 28217, 28223, 28228, 28235, 28242, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 28249, 28255, 28259, 28264, 28269, 28274, 28279, 28284, 28289,
+ 28294, 28299, 28304, 28309, 28314, 28319, 28324, 28328, 28332, 28337,
+ 28342, 28347, 28351, 28355, 28359, 28364, 28369, 28374, 28379, 28383, 0,
+ 0, 0, 28387, 28392, 28397, 28402, 28408, 28414, 28420, 28426, 28431,
+ 28436, 28442, 28448, 0, 0, 0, 0, 28455, 28460, 28466, 28472, 28478,
+ 28483, 28488, 28493, 28498, 28504, 28509, 28514, 0, 0, 0, 0, 28519, 0, 0,
+ 0, 28524, 28529, 28534, 28539, 28543, 28547, 28551, 28555, 28559, 28563,
+ 28567, 28571, 28575, 28580, 28586, 28592, 28598, 28603, 28608, 28614,
+ 28620, 28626, 28631, 28637, 28642, 28648, 28654, 28659, 28665, 28671,
+ 28677, 28682, 28687, 28692, 28698, 28704, 28709, 28715, 28720, 28726,
+ 28731, 28737, 0, 0, 28743, 28749, 28755, 28761, 28767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 28773, 28780, 28787, 28793, 28800, 28807, 28813, 28820,
+ 28827, 28834, 28840, 28846, 28853, 28859, 28865, 28872, 28879, 28885,
+ 28892, 28899, 28905, 28911, 28918, 28924, 28930, 28937, 28943, 28950,
+ 28957, 28964, 28971, 28978, 28985, 28991, 28998, 29005, 29011, 29018,
+ 29025, 29032, 29039, 29046, 29053, 29060, 0, 0, 0, 0, 29067, 29075,
+ 29082, 29089, 29095, 29102, 29108, 29115, 29121, 29128, 29135, 29142,
+ 29149, 29156, 29163, 29170, 29177, 29184, 29191, 29198, 29205, 29211,
+ 29218, 29225, 29232, 29238, 0, 0, 0, 0, 0, 0, 29244, 29250, 29255, 29260,
+ 29265, 29270, 29275, 29280, 29285, 29290, 29295, 0, 0, 0, 29301, 29307,
+ 29313, 29317, 29323, 29329, 29335, 29341, 29347, 29353, 29359, 29365,
+ 29371, 29377, 29383, 29389, 29395, 29401, 29407, 29411, 29417, 29423,
+ 29429, 29435, 29441, 29447, 29453, 29459, 29465, 29471, 29477, 29483,
+ 29489, 29495, 29501, 29505, 29510, 29515, 29520, 29524, 29529, 29533,
+ 29538, 29543, 29548, 29552, 29557, 29562, 29567, 29572, 29577, 29581,
+ 29585, 29590, 29595, 29599, 29603, 29607, 29612, 29617, 29622, 29627, 0,
+ 0, 29633, 29637, 29644, 29649, 29655, 29661, 29666, 29672, 29678, 29683,
+ 29689, 29695, 29701, 29706, 29712, 29717, 29722, 29728, 29733, 29739,
+ 29744, 29750, 29756, 29762, 29768, 29772, 29777, 29782, 29788, 29794,
+ 29799, 29805, 29811, 29815, 29820, 29825, 29829, 29834, 29839, 29844,
+ 29849, 29855, 29861, 29866, 29871, 29876, 29880, 29885, 29889, 29894,
+ 29898, 29903, 29908, 29913, 29918, 29924, 29930, 29937, 29947, 29956,
+ 29963, 29969, 29979, 29984, 29990, 0, 29995, 30000, 30005, 30013, 30019,
+ 30027, 30032, 30038, 30044, 30050, 30055, 30061, 30066, 30073, 30079,
+ 30084, 30090, 30096, 30102, 30109, 30116, 30123, 30128, 30133, 30140,
+ 30147, 30154, 30161, 30168, 0, 0, 30175, 30182, 30189, 30195, 30201,
+ 30207, 30213, 30219, 30225, 30231, 30237, 0, 0, 0, 0, 0, 0, 30243, 30249,
+ 30254, 30259, 30264, 30269, 30274, 30279, 30284, 30289, 0, 0, 0, 0, 0, 0,
+ 30294, 30299, 30304, 30309, 30314, 30319, 30324, 30333, 30340, 30345,
+ 30350, 30355, 30360, 30365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12077, 12083,
- 12087, 12091, 12095, 12100, 12103, 12107, 12110, 12114, 12117, 12121,
- 12125, 12129, 12134, 12139, 12142, 12146, 12151, 12156, 12159, 12163,
- 12166, 12170, 12174, 12178, 12182, 12186, 12190, 12194, 12198, 12202,
- 12206, 12210, 12214, 12218, 12222, 12226, 12230, 12234, 12238, 12241,
- 12245, 12248, 12252, 12256, 12260, 12263, 12266, 12269, 12273, 12277,
- 12281, 12285, 12289, 12293, 12297, 12301, 12304, 12309, 12314, 12318,
- 12322, 12327, 12331, 12336, 12340, 12345, 12350, 12356, 12362, 12368,
- 12372, 12377, 12383, 12389, 12393, 12398, 12402, 12408, 12413, 12416,
- 12422, 12428, 12433, 12438, 12445, 12450, 12455, 12459, 12463, 12467,
- 12471, 12475, 12479, 12483, 12487, 12492, 12497, 12502, 12508, 12511,
- 12515, 12519, 12522, 12525, 12528, 12531, 12534, 12537, 12540, 12543,
- 12546, 12550, 12557, 12562, 12566, 12570, 12574, 12578, 0, 12582, 12586,
- 12590, 12594, 12598, 12604, 12608, 0, 12612, 12616, 12620, 0, 12624,
- 12627, 12631, 12634, 12638, 12641, 12645, 12649, 0, 0, 12653, 12656, 0,
- 0, 12660, 12663, 12667, 12670, 12674, 12678, 12682, 12686, 12690, 12694,
- 12698, 12702, 12706, 12710, 12714, 12718, 12722, 12726, 12730, 12734,
- 12738, 12742, 0, 12745, 12748, 12752, 12756, 12760, 12763, 12766, 0,
- 12769, 0, 0, 0, 12773, 12777, 12781, 12785, 0, 0, 12788, 12792, 12796,
- 12801, 12805, 12810, 12814, 12819, 12824, 0, 0, 12830, 12834, 0, 0,
- 12839, 12843, 12848, 12852, 0, 0, 0, 0, 0, 0, 0, 0, 12858, 0, 0, 0, 0,
- 12864, 12868, 0, 12872, 12876, 12881, 12886, 12891, 0, 0, 12897, 12901,
- 12904, 12907, 12910, 12913, 12916, 12919, 12922, 12925, 12928, 12937,
- 12946, 12950, 12954, 12960, 12966, 12972, 12978, 12992, 12999, 13002, 0,
- 0, 0, 0, 0, 13006, 13012, 13016, 0, 13020, 13023, 13027, 13030, 13034,
- 13037, 0, 0, 0, 0, 13041, 13045, 0, 0, 13049, 13053, 13057, 13060, 13064,
- 13068, 13072, 13076, 13080, 13084, 13088, 13092, 13096, 13100, 13104,
- 13108, 13112, 13116, 13120, 13124, 13128, 13132, 0, 13135, 13138, 13142,
- 13146, 13150, 13153, 13156, 0, 13159, 13163, 0, 13167, 13171, 0, 13175,
- 13179, 0, 0, 13182, 0, 13186, 13191, 13195, 13200, 13204, 0, 0, 0, 0,
- 13209, 13214, 0, 0, 13219, 13224, 13229, 0, 0, 0, 13233, 0, 0, 0, 0, 0,
- 0, 0, 13237, 13241, 13245, 13249, 0, 13253, 0, 0, 0, 0, 0, 0, 0, 13257,
- 13261, 13264, 13267, 13270, 13273, 13276, 13279, 13282, 13285, 13288,
- 13291, 13294, 13297, 13300, 13305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13309, 13313, 13317, 0, 13321, 13324, 13328, 13331, 13335, 13338, 13342,
- 13346, 13350, 0, 13355, 13358, 13362, 0, 13367, 13370, 13374, 13377,
- 13381, 13385, 13389, 13393, 13397, 13401, 13405, 13409, 13413, 13417,
- 13421, 13425, 13429, 13433, 13437, 13441, 13445, 13449, 0, 13452, 13455,
- 13459, 13463, 13467, 13470, 13473, 0, 13476, 13480, 0, 13484, 13488,
- 13492, 13496, 13500, 0, 0, 13503, 13507, 13511, 13516, 13520, 13525,
- 13529, 13534, 13539, 13545, 0, 13551, 13555, 13560, 0, 13566, 13570,
- 13575, 0, 0, 13579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13582,
- 13587, 13592, 13597, 0, 0, 13603, 13607, 13610, 13613, 13616, 13619,
- 13622, 13625, 13628, 13631, 0, 13634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13638, 13642, 13646, 0, 13650, 13653, 13657, 13660, 13664,
- 13667, 13671, 13675, 0, 0, 13679, 13682, 0, 0, 13686, 13689, 13693,
- 13696, 13700, 13704, 13708, 13712, 13716, 13720, 13724, 13728, 13732,
- 13736, 13740, 13744, 13748, 13752, 13756, 13760, 13764, 13768, 0, 13771,
- 13774, 13778, 13782, 13786, 13789, 13792, 0, 13795, 13799, 0, 13803,
- 13807, 13811, 13815, 13819, 0, 0, 13822, 13826, 13830, 13835, 13839,
- 13844, 13848, 13853, 13858, 0, 0, 13864, 13868, 0, 0, 13873, 13877,
- 13882, 0, 0, 0, 0, 0, 0, 0, 0, 13886, 13892, 0, 0, 0, 0, 13898, 13902, 0,
- 13906, 13910, 13915, 13920, 13925, 0, 0, 13931, 13935, 13938, 13941,
- 13944, 13947, 13950, 13953, 13956, 13959, 13962, 13965, 13969, 13975,
- 13981, 13987, 13993, 13999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14005, 14009,
- 0, 14013, 14016, 14020, 14023, 14027, 14030, 0, 0, 0, 14034, 14037,
- 14041, 0, 14045, 14048, 14052, 14056, 0, 0, 0, 14059, 14063, 0, 14067, 0,
- 14071, 14075, 0, 0, 0, 14079, 14083, 0, 0, 0, 14087, 14090, 14094, 0, 0,
- 0, 14097, 14100, 14103, 14106, 14110, 14114, 14118, 14122, 14126, 14130,
- 14134, 14138, 0, 0, 0, 0, 14141, 14146, 14150, 14155, 14159, 0, 0, 0,
- 14164, 14168, 14173, 0, 14178, 14182, 14187, 14192, 0, 0, 14196, 0, 0, 0,
- 0, 0, 0, 14199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14205, 14209,
- 14212, 14215, 14218, 14221, 14224, 14227, 14230, 14233, 14236, 14240,
- 14245, 14250, 14254, 14258, 14262, 14266, 14270, 14275, 14279, 0, 0, 0,
- 0, 0, 0, 14282, 14286, 14290, 0, 14294, 14297, 14301, 14304, 14308,
- 14311, 14315, 14319, 0, 14323, 14326, 14330, 0, 14334, 14337, 14341,
- 14345, 14348, 14352, 14356, 14360, 14364, 14368, 14372, 14376, 14380,
- 14384, 14388, 14392, 14396, 14400, 14404, 14408, 14412, 14416, 14420, 0,
- 14423, 14426, 14430, 14434, 14438, 14441, 14444, 14447, 14451, 14455, 0,
- 14459, 14463, 14467, 14471, 14475, 0, 0, 0, 14478, 14482, 14487, 14491,
- 14496, 14500, 14505, 14510, 0, 14516, 14520, 14525, 0, 14530, 14534,
- 14539, 14544, 0, 0, 0, 0, 0, 0, 0, 14548, 14552, 0, 14558, 14562, 0, 0,
- 0, 0, 0, 0, 14566, 14571, 14576, 14581, 0, 0, 14587, 14591, 14594, 14597,
- 14600, 14603, 14606, 14609, 14612, 14615, 0, 0, 0, 0, 0, 0, 0, 0, 14618,
- 14631, 14643, 14655, 14667, 14679, 14691, 14703, 0, 0, 14707, 14711, 0,
- 14715, 14718, 14722, 14725, 14729, 14732, 14736, 14740, 0, 14744, 14747,
- 14751, 0, 14755, 14758, 14762, 14766, 14769, 14773, 14777, 14781, 14785,
- 14789, 14793, 14797, 14801, 14805, 14809, 14813, 14817, 14821, 14825,
- 14829, 14833, 14837, 14841, 0, 14844, 14847, 14851, 14855, 14859, 14862,
- 14865, 14868, 14872, 14876, 0, 14880, 14884, 14888, 14892, 14896, 0, 0,
- 14899, 14903, 14907, 14912, 14916, 14921, 14925, 14930, 14935, 0, 14941,
- 14945, 14950, 0, 14955, 14959, 14964, 14969, 0, 0, 0, 0, 0, 0, 0, 14973,
- 14977, 0, 0, 0, 0, 0, 0, 0, 14983, 0, 14987, 14992, 14997, 15002, 0, 0,
- 15008, 15012, 15015, 15018, 15021, 15024, 15027, 15030, 15033, 15036, 0,
- 15039, 15043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15047, 15051,
- 0, 15055, 15058, 15062, 15065, 15069, 15072, 15076, 15080, 0, 15084,
- 15087, 15091, 0, 15095, 15098, 15102, 15106, 15109, 15113, 15117, 15121,
- 15125, 15129, 15133, 15137, 15141, 15145, 15149, 15153, 15157, 15161,
- 15165, 15169, 15173, 15177, 15181, 15184, 15188, 15191, 15195, 15199,
- 15203, 15206, 15209, 15212, 15216, 15220, 15224, 15228, 15232, 15236,
- 15240, 15244, 15247, 0, 0, 15251, 15255, 15260, 15264, 15269, 15273,
- 15278, 15283, 0, 15289, 15293, 15298, 0, 15303, 15307, 15312, 15317,
- 15321, 0, 0, 0, 0, 0, 0, 0, 0, 15326, 0, 0, 0, 0, 0, 0, 0, 0, 15332,
- 15337, 15342, 15347, 0, 0, 15353, 15357, 15360, 15363, 15366, 15369,
- 15372, 15375, 15378, 15381, 15384, 15388, 15393, 15398, 15404, 15410, 0,
- 0, 0, 15416, 15420, 15426, 15431, 15437, 15442, 15448, 0, 0, 15454,
- 15458, 0, 15462, 15466, 15470, 15474, 15478, 15482, 15486, 15490, 15494,
- 15498, 15502, 15506, 15510, 15514, 15518, 15522, 15526, 15530, 0, 0, 0,
- 15534, 15540, 15546, 15552, 15558, 15564, 15570, 15576, 15582, 15588,
- 15594, 15600, 15608, 15614, 15620, 15626, 15632, 15638, 15644, 15650,
- 15656, 15662, 15668, 15674, 0, 15680, 15686, 15692, 15698, 15704, 15710,
- 15714, 15720, 15724, 0, 15728, 0, 0, 15734, 15738, 15744, 15750, 15756,
- 15760, 15766, 0, 0, 0, 15770, 0, 0, 0, 0, 15774, 15779, 15786, 15793,
- 15800, 15807, 0, 15814, 0, 15821, 15826, 15831, 15838, 15845, 15854,
- 15865, 15874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15879, 15886, 15893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15898, 15904,
- 15910, 15916, 15922, 15928, 15934, 15940, 15946, 15952, 15958, 15964,
- 15970, 15976, 15982, 15988, 15994, 16000, 16006, 16012, 16018, 16024,
- 16030, 16036, 16042, 16048, 16054, 16060, 16066, 16072, 16078, 16084,
- 16090, 16095, 16101, 16107, 16111, 16117, 16121, 16127, 16133, 16139,
- 16145, 16151, 16157, 16162, 16168, 16172, 16177, 16183, 16189, 16195,
- 16200, 16206, 16212, 16218, 16223, 16229, 0, 0, 0, 0, 16233, 16239,
- 16244, 16250, 16255, 16263, 16271, 16275, 16279, 16283, 16289, 16295,
- 16301, 16307, 16311, 16315, 16319, 16323, 16327, 16330, 16333, 16336,
- 16339, 16342, 16345, 16348, 16351, 16354, 16358, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30370, 30376,
+ 30382, 30386, 30390, 30394, 30398, 30404, 30408, 30414, 30418, 30424,
+ 30430, 30438, 30444, 30452, 30456, 30460, 30464, 30470, 30473, 30479,
+ 30483, 30489, 30493, 30497, 30503, 30507, 30513, 30517, 30523, 30531,
+ 30539, 30547, 30553, 30557, 30563, 30567, 30573, 30576, 30579, 30585,
+ 30589, 30595, 30598, 30601, 30604, 30608, 30612, 30618, 30624, 30627,
+ 30630, 30634, 30639, 30644, 30651, 30656, 30663, 30670, 30679, 30686,
+ 30695, 30700, 30707, 30714, 30723, 30728, 30735, 30740, 30746, 30752,
+ 30758, 30764, 30770, 30776, 0, 0, 0, 0, 30782, 30786, 30789, 30792,
+ 30795, 30798, 30801, 30804, 30807, 30810, 30813, 30816, 30819, 30822,
+ 30827, 30832, 30837, 30840, 30845, 30850, 30855, 30860, 30867, 30872,
+ 30877, 30882, 30887, 30894, 30900, 30906, 30912, 30918, 30924, 30933,
+ 30942, 30948, 30954, 30962, 30970, 30979, 30988, 30996, 31004, 31013,
+ 31022, 0, 0, 0, 31030, 31034, 31038, 31042, 31045, 31048, 31051, 31055,
+ 31058, 31061, 31065, 31068, 31072, 31076, 31080, 31084, 31088, 31092,
+ 31096, 31100, 31104, 31107, 31110, 31114, 31118, 31122, 31125, 31128,
+ 31131, 31135, 31139, 31142, 31146, 31149, 31154, 31159, 31164, 31169,
+ 31174, 31179, 31184, 31189, 31194, 31198, 31202, 31208, 31215, 31219,
+ 31223, 31227, 31230, 31233, 31236, 31239, 31242, 31245, 31248, 31251,
+ 31254, 31257, 31261, 31265, 31269, 31274, 31278, 31282, 31288, 31292,
+ 31298, 31304, 31309, 31316, 31320, 31326, 31330, 31336, 31341, 31348,
+ 31355, 31360, 31367, 31372, 31377, 31381, 31387, 31391, 31397, 31404,
+ 31411, 31415, 31421, 31427, 31431, 31437, 31442, 31447, 31454, 31459,
+ 31464, 31469, 31474, 31478, 31482, 31487, 31492, 31499, 31505, 31510,
+ 31517, 31522, 31529, 31534, 31543, 31549, 31555, 31559, 0, 0, 0, 0, 0, 0,
+ 0, 0, 31563, 31572, 31579, 31586, 31593, 31596, 31600, 31604, 31608,
+ 31612, 31616, 31620, 31624, 31628, 31632, 31636, 31640, 31644, 31647,
+ 31650, 31654, 31658, 31662, 31666, 31670, 31674, 31677, 31681, 31685,
+ 31689, 31693, 31696, 31699, 31703, 31706, 31710, 31714, 31717, 31721,
+ 31725, 31728, 31733, 31738, 31743, 31747, 31751, 31756, 31760, 31765,
+ 31769, 31774, 31778, 31782, 31787, 31792, 31796, 31801, 31806, 31811,
+ 31815, 0, 0, 0, 31819, 31824, 31833, 31838, 31845, 31850, 31854, 31857,
+ 31860, 31863, 31866, 31869, 31872, 31875, 31878, 0, 0, 0, 31881, 31885,
+ 31889, 31893, 31900, 31906, 31912, 31918, 31924, 31930, 31936, 31942,
+ 31948, 31954, 31961, 31968, 31975, 31982, 31989, 31996, 32003, 32010,
+ 32017, 32024, 32031, 32038, 32045, 32052, 32059, 32066, 32073, 32080,
+ 32087, 32094, 32101, 32108, 32115, 32122, 32129, 32136, 32143, 32150,
+ 32157, 32164, 32172, 32180, 32188, 32194, 32200, 32206, 32214, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 16362, 16367, 0, 16374, 0, 0, 16381, 16386, 0, 16391, 0,
- 0, 16398, 0, 0, 0, 0, 0, 0, 16403, 16408, 16412, 16419, 0, 16426, 16431,
- 16436, 16441, 16448, 16455, 16462, 0, 16469, 16474, 16479, 0, 16486, 0,
- 16493, 0, 0, 16498, 16505, 0, 16512, 16516, 16523, 16527, 16532, 16540,
- 16546, 16552, 16557, 16563, 16569, 16575, 16580, 0, 16586, 16594, 16601,
- 0, 0, 16608, 16613, 16619, 16624, 16630, 0, 16636, 0, 16642, 16649,
- 16656, 16663, 16670, 16675, 0, 0, 16679, 16684, 16688, 16692, 16696,
- 16700, 16704, 16708, 16712, 16716, 0, 0, 16720, 16726, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16732, 16736, 16747, 16762, 16777, 16787, 16798, 16811,
- 16822, 16828, 16836, 16846, 16852, 16860, 16864, 16870, 16876, 16884,
- 16894, 16902, 16915, 16921, 16929, 16937, 16949, 16956, 16964, 16972,
- 16980, 16988, 16996, 17004, 17014, 17018, 17021, 17024, 17027, 17030,
- 17033, 17036, 17039, 17042, 17045, 17049, 17053, 17057, 17061, 17065,
- 17069, 17073, 17077, 17081, 17086, 17092, 17102, 17116, 17126, 17132,
- 17138, 17146, 17154, 17162, 17170, 17176, 17182, 17185, 17189, 17193,
- 17197, 17201, 17205, 17209, 0, 17213, 17217, 17221, 17225, 17229, 17233,
- 17237, 17241, 17245, 17249, 17253, 17256, 17259, 17263, 17267, 17271,
- 17274, 17278, 17282, 17286, 17290, 17294, 17298, 17302, 17306, 17309,
- 17312, 17316, 17320, 17324, 17328, 17331, 17334, 17338, 17343, 17347, 0,
- 0, 0, 0, 17351, 17356, 17360, 17365, 17369, 17374, 17379, 17385, 17390,
- 17396, 17400, 17405, 17409, 17414, 17424, 17430, 17436, 17443, 17453,
- 17459, 17463, 17467, 17473, 17479, 17487, 17493, 17501, 17509, 17517,
- 17527, 17535, 17545, 17550, 17556, 17562, 17568, 17574, 17580, 17586, 0,
- 17592, 17598, 17604, 17610, 17616, 17622, 17628, 17634, 17640, 17646,
- 17652, 17657, 17662, 17668, 17674, 17680, 17685, 17691, 17697, 17703,
- 17709, 17715, 17721, 17727, 17733, 17738, 17743, 17749, 17755, 17761,
- 17767, 17772, 17777, 17783, 17791, 17798, 0, 17805, 17812, 17825, 17832,
- 17839, 17847, 17855, 17861, 17867, 17873, 17883, 17888, 17894, 17904,
- 17914, 0, 17924, 17934, 17942, 17954, 17966, 17972, 17986, 18001, 18006,
- 18011, 18019, 18027, 18035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18043,
- 18046, 18050, 18054, 18058, 18062, 18066, 18070, 18074, 18078, 18082,
- 18086, 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122,
- 18125, 18128, 18132, 18136, 18140, 18143, 18146, 18149, 18153, 18157,
- 18161, 18164, 18168, 18171, 18176, 18179, 18183, 18186, 18190, 18193,
- 18198, 18201, 18205, 18212, 18217, 18221, 18226, 18230, 18235, 18239,
- 18244, 18251, 18257, 18262, 18266, 18270, 18274, 18278, 18282, 18288,
- 18294, 18301, 18307, 18313, 18317, 18320, 18323, 18326, 18329, 18332,
- 18335, 18338, 18341, 18344, 18350, 18354, 18358, 18362, 18366, 18370,
- 18374, 18378, 18382, 18387, 18391, 18396, 18401, 18407, 18412, 18418,
- 18424, 18430, 18436, 18442, 18450, 18458, 18467, 18475, 18484, 18493,
- 18504, 18514, 18524, 18535, 18546, 18556, 18566, 18576, 18586, 18596,
- 18606, 18616, 18626, 18634, 18641, 18647, 18654, 18659, 18665, 18671,
- 18677, 18683, 18689, 18695, 18700, 18706, 18712, 18718, 18724, 18729,
- 18738, 18745, 18751, 18758, 18766, 18772, 18778, 18784, 18790, 18798,
- 18806, 18816, 18824, 18832, 18838, 18843, 18848, 18853, 18858, 18863,
- 18868, 18873, 18878, 18883, 18889, 18895, 18901, 18908, 18913, 18919,
- 18924, 18929, 18934, 18939, 18944, 18949, 18954, 18959, 18964, 18969,
- 18974, 18979, 18984, 18989, 18994, 18999, 19004, 19009, 19014, 19019,
- 19024, 19029, 19034, 19039, 19044, 19049, 19054, 19059, 19064, 19069,
- 19074, 19079, 19084, 19089, 19094, 19099, 19104, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 19109, 19113, 19117, 19121, 19125, 19129, 19133, 19137, 19141,
- 19145, 19149, 19153, 19157, 19161, 19165, 19169, 19173, 19177, 19181,
- 19185, 19189, 19193, 19197, 19201, 19205, 19209, 19213, 19217, 19221,
- 19225, 19229, 19233, 19237, 19241, 19245, 19249, 19253, 19257, 19261,
- 19265, 19269, 19273, 19279, 19283, 19288, 0, 0, 0, 19293, 19297, 19301,
- 19305, 19309, 19313, 19317, 19321, 19325, 19329, 19333, 19337, 19341,
- 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, 19377, 19381,
- 19385, 19389, 19393, 19397, 19401, 19405, 19409, 19413, 19417, 19421,
- 19425, 19429, 19433, 19437, 19441, 19445, 19449, 19453, 19457, 19461,
- 19465, 19469, 19473, 19477, 19481, 19485, 19489, 19493, 19497, 19501,
- 19505, 19509, 19513, 19517, 19521, 19525, 19529, 19533, 19537, 19541,
- 19545, 19549, 19553, 19557, 19561, 19565, 19569, 19573, 19577, 19581,
- 19585, 19589, 19593, 19597, 19601, 19605, 19609, 19613, 19617, 19621,
- 19625, 19629, 19633, 19637, 19641, 19645, 19649, 19653, 19657, 19661,
- 19665, 19669, 19673, 19677, 19681, 19684, 19688, 19691, 19695, 19699,
- 19702, 19706, 19710, 19713, 19717, 19721, 19725, 19729, 19732, 19736,
- 19740, 19744, 19748, 19752, 19756, 19759, 19763, 19767, 19771, 19775,
- 19779, 19783, 19787, 19791, 19795, 19799, 19803, 19807, 19811, 19815,
- 19819, 19823, 19827, 19831, 19835, 19839, 19843, 19847, 19851, 19855,
- 19859, 19863, 19867, 19871, 19875, 19879, 19883, 19887, 19891, 19895,
- 19899, 19903, 19907, 19911, 19915, 19919, 19923, 19927, 19931, 19935,
- 19939, 19943, 19947, 19951, 19955, 19959, 19963, 19967, 19971, 19975,
- 19979, 19983, 19987, 19991, 19995, 19999, 20003, 20007, 20011, 20015,
- 20019, 20023, 20027, 20031, 20035, 20039, 20043, 20047, 20051, 20055,
- 20059, 20063, 20067, 20071, 20075, 20079, 20083, 20087, 20091, 20095,
- 20099, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 20131, 20135,
- 20139, 20143, 20147, 20151, 20155, 20159, 20163, 20167, 20171, 20175,
- 20179, 20183, 20187, 20191, 20195, 20199, 20203, 20207, 20211, 20215,
- 20219, 20223, 20227, 20231, 20235, 20239, 20243, 20247, 20251, 20255,
- 20259, 20263, 20267, 20271, 20275, 20279, 20283, 20287, 20291, 20295,
- 20299, 20303, 20307, 20311, 20314, 20318, 20322, 20326, 20330, 20334,
- 20338, 20342, 20346, 20350, 20354, 20358, 20362, 20366, 20370, 20374,
- 20378, 20382, 20386, 20390, 20394, 20398, 20402, 20406, 20409, 20413,
- 20417, 20421, 20425, 20429, 20433, 20437, 20441, 20445, 20449, 20453,
- 20457, 20461, 20465, 20469, 20472, 20476, 20480, 20484, 20488, 20492,
- 20496, 20500, 20504, 20508, 20512, 20516, 20520, 20524, 20528, 20532,
- 20536, 20540, 20544, 20548, 20552, 20556, 20560, 20564, 20568, 20572,
- 20576, 20580, 20584, 20588, 20592, 20596, 0, 20600, 20604, 20608, 20612,
- 0, 0, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 0, 20644, 0,
- 20648, 20652, 20656, 20660, 0, 0, 20664, 20668, 20672, 20676, 20680,
- 20684, 20688, 20692, 20696, 20700, 20704, 20708, 20712, 20716, 20720,
- 20724, 20728, 20732, 20736, 20740, 20744, 20748, 20752, 20755, 20759,
- 20763, 20767, 20771, 20775, 20779, 20783, 20787, 20791, 20795, 20799,
- 20803, 20807, 20811, 20815, 20819, 20823, 0, 20827, 20831, 20835, 20839,
- 0, 0, 20843, 20846, 20850, 20854, 20858, 20862, 20866, 20870, 20874,
- 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20911, 20916,
- 20921, 20927, 20933, 20938, 20943, 20949, 20952, 20956, 20960, 20964,
- 20968, 20972, 20976, 20980, 0, 20984, 20988, 20992, 20996, 0, 0, 21000,
- 21004, 21008, 21012, 21016, 21020, 21024, 0, 21028, 0, 21032, 21036,
- 21040, 21044, 0, 0, 21048, 21052, 21056, 21060, 21064, 21068, 21072,
- 21076, 21080, 21085, 21090, 21095, 21101, 21107, 21112, 0, 21117, 21121,
- 21125, 21129, 21133, 21137, 21141, 21145, 21149, 21153, 21157, 21161,
- 21165, 21169, 21173, 21177, 21181, 21184, 21188, 21192, 21196, 21200,
- 21204, 21208, 21212, 21216, 21220, 21224, 21228, 21232, 21236, 21240,
- 21244, 21248, 21252, 21256, 21260, 21264, 21268, 21272, 21276, 21280,
- 21284, 21288, 21292, 21296, 21300, 21304, 21308, 21312, 21316, 21320,
- 21324, 21328, 21332, 21336, 21340, 0, 21344, 21348, 21352, 21356, 0, 0,
- 21360, 21364, 21368, 21372, 21376, 21380, 21384, 21388, 21392, 21396,
- 21400, 21404, 21408, 21412, 21416, 21420, 21424, 21428, 21432, 21436,
- 21440, 21444, 21448, 21452, 21456, 21460, 21464, 21468, 21472, 21476,
- 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, 21516,
- 21520, 21524, 21528, 21532, 21536, 21540, 21544, 21548, 21552, 21556,
- 21560, 21564, 21568, 21572, 21576, 21580, 21584, 21587, 21591, 21595,
- 21599, 21603, 21607, 21611, 21615, 21619, 21623, 0, 0, 21627, 21636,
- 21642, 21647, 21651, 21654, 21659, 21662, 21665, 21668, 21673, 21677,
- 21682, 21685, 21688, 21691, 21694, 21697, 21700, 21703, 21706, 21709,
- 21713, 21717, 21721, 21725, 21729, 21733, 21737, 21741, 21745, 21749, 0,
- 0, 0, 21755, 21761, 21765, 21769, 21773, 21779, 21783, 21787, 21791,
- 21797, 21801, 21805, 21809, 21815, 21819, 21823, 21827, 21833, 21839,
- 21845, 21853, 21859, 21865, 21871, 21877, 21883, 0, 0, 0, 0, 0, 0, 21889,
- 21892, 21895, 21898, 21901, 21904, 21908, 21912, 21915, 21919, 21923,
- 21927, 21931, 21935, 21938, 21942, 21946, 21950, 21954, 21958, 21962,
- 21966, 21970, 21974, 21978, 21982, 21985, 21989, 21993, 21997, 22001,
- 22004, 22008, 22012, 22016, 22020, 22024, 22028, 22032, 22036, 22040,
- 22044, 22048, 22052, 22056, 22060, 22063, 22067, 22071, 22075, 22079,
- 22083, 22087, 22091, 22095, 22099, 22103, 22107, 22111, 22115, 22119,
- 22123, 22127, 22131, 22135, 22139, 22143, 22147, 22151, 22155, 22159,
- 22163, 22167, 22171, 22175, 22179, 22183, 22187, 22191, 22195, 22198,
- 22202, 22206, 22210, 22214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22218,
- 22222, 22225, 22229, 22232, 22236, 22239, 22243, 22249, 22254, 22258,
- 22261, 22265, 22269, 22274, 22278, 22283, 22287, 22292, 22296, 22301,
- 22305, 22310, 22316, 22320, 22325, 22329, 22334, 22340, 22344, 22350,
- 22356, 22360, 22365, 22373, 22381, 22388, 22393, 22398, 22407, 22414,
- 22421, 22426, 22432, 22436, 22440, 22444, 22448, 22452, 22456, 22460,
- 22464, 22468, 22472, 22478, 22483, 22488, 22491, 22495, 22499, 22504,
- 22508, 22513, 22517, 22522, 22526, 22531, 22535, 22540, 22544, 22549,
- 22553, 22558, 22564, 22568, 22573, 22578, 22582, 22586, 22590, 22594,
- 22597, 22601, 22607, 22612, 22617, 22621, 22625, 22629, 22634, 22638,
- 22643, 22647, 22652, 22655, 22659, 22663, 22668, 22672, 22677, 22681,
- 22686, 22692, 22696, 22700, 22704, 22708, 22712, 22716, 22720, 22724,
- 22728, 22732, 22736, 22742, 22745, 22749, 22753, 22758, 22762, 22767,
- 22771, 22776, 22780, 22785, 22789, 22794, 22798, 22803, 22807, 22812,
- 22818, 22822, 22826, 22832, 22838, 22844, 22850, 22854, 22858, 22862,
- 22866, 22870, 22874, 22880, 22884, 22888, 22892, 22897, 22901, 22906,
- 22910, 22915, 22919, 22924, 22928, 22933, 22937, 22942, 22946, 22951,
- 22957, 22961, 22967, 22971, 22975, 22979, 22983, 22987, 22991, 22997,
- 23000, 23004, 23008, 23013, 23017, 23022, 23026, 23031, 23035, 23040,
- 23044, 23049, 23053, 23058, 23062, 23067, 23073, 23076, 23080, 23084,
- 23089, 23094, 23098, 23102, 23106, 23110, 23114, 23118, 23124, 23127,
- 23131, 23135, 23140, 23144, 23149, 23153, 23158, 23164, 23167, 23172,
- 23176, 23180, 23184, 23188, 23192, 23196, 23200, 23206, 23210, 23214,
- 23218, 23223, 23227, 23232, 23236, 23241, 23245, 23250, 23254, 23259,
- 23263, 23268, 23272, 23277, 23280, 23284, 23288, 23292, 23296, 23300,
- 23304, 23308, 23312, 23318, 23322, 23326, 23330, 23335, 23339, 23344,
- 23348, 23353, 23357, 23362, 23366, 23371, 23375, 23380, 23384, 23389,
- 23395, 23398, 23403, 23407, 23412, 23418, 23424, 23430, 23436, 23442,
- 23448, 23454, 23458, 23462, 23466, 23470, 23474, 23478, 23482, 23486,
- 23491, 23495, 23500, 23504, 23509, 23513, 23518, 23522, 23527, 23531,
- 23536, 23540, 23545, 23549, 23553, 23557, 23561, 23565, 23569, 23573,
- 23579, 23582, 23586, 23590, 23595, 23599, 23604, 23608, 23613, 23617,
- 23622, 23626, 23631, 23635, 23640, 23644, 23649, 23655, 23659, 23665,
- 23670, 23676, 23680, 23686, 23691, 23695, 23699, 23703, 23707, 23711,
- 23716, 23719, 23723, 23728, 23732, 23737, 23740, 23744, 23748, 23752,
- 23756, 23760, 23764, 23768, 23772, 23776, 23780, 23784, 23789, 23793,
- 23797, 23803, 23807, 23813, 23817, 23823, 23827, 23831, 23835, 23839,
- 23843, 23848, 23852, 23856, 23860, 23864, 23868, 23872, 23876, 23880,
- 23884, 23888, 23894, 23900, 23906, 23912, 23918, 23923, 23929, 23935,
- 23941, 23945, 23949, 23953, 23957, 23961, 23965, 23969, 23973, 23977,
- 23981, 23985, 23989, 23993, 23998, 24003, 24008, 24012, 24016, 24020,
- 24024, 24028, 24032, 24036, 24040, 24044, 24048, 24054, 24060, 24066,
- 24072, 24078, 24084, 24090, 24096, 24102, 24106, 24110, 24114, 24118,
- 24122, 24126, 24130, 24136, 24142, 24148, 24154, 24160, 24166, 24172,
- 24178, 24184, 24189, 24194, 24199, 24204, 24210, 24216, 24222, 24228,
- 24234, 24240, 24246, 24251, 24257, 24263, 24269, 24274, 24280, 24286,
- 24292, 24297, 24302, 24307, 24312, 24317, 24322, 24327, 24332, 24337,
- 24342, 24347, 24352, 24356, 24361, 24366, 24371, 24376, 24381, 24386,
- 24391, 24396, 24401, 24406, 24411, 24416, 24421, 24426, 24431, 24436,
- 24441, 24446, 24451, 24456, 24461, 24466, 24471, 24476, 24481, 24486,
- 24491, 24496, 24501, 24505, 24510, 24515, 24520, 24525, 24530, 24535,
- 24540, 24545, 24550, 24555, 24560, 24565, 24570, 24575, 24580, 24585,
- 24590, 24595, 24600, 24605, 24610, 24615, 24620, 24625, 24630, 24634,
- 24639, 24644, 24649, 24654, 24659, 24663, 24668, 24673, 24678, 24683,
- 24688, 24692, 24697, 24703, 24708, 24713, 24718, 24723, 24729, 24734,
- 24739, 24744, 24749, 24754, 24759, 24764, 24769, 24774, 24779, 24784,
- 24789, 24794, 24799, 24804, 24809, 24814, 24819, 24824, 24829, 24834,
- 24839, 24844, 24849, 24854, 24859, 24864, 24869, 24874, 24879, 24884,
- 24889, 24894, 24899, 24904, 24909, 24914, 24919, 24924, 24929, 24934,
- 24939, 24944, 24949, 24955, 24960, 24965, 24970, 24975, 24980, 24985,
- 24990, 24995, 25000, 25005, 25010, 25015, 25020, 25025, 25030, 25035,
- 25040, 25045, 25050, 25055, 25060, 25065, 25070, 25075, 25080, 25085,
- 25090, 25095, 25100, 25105, 25110, 25115, 25120, 25125, 25130, 25135,
- 25140, 25145, 25151, 25155, 25159, 25163, 25167, 25171, 25175, 25179,
- 25183, 25189, 25195, 25201, 25207, 25213, 25219, 25225, 25232, 25238,
- 25243, 25248, 25253, 25258, 25263, 25268, 25273, 25278, 25283, 25288,
- 25293, 25298, 25303, 25308, 25313, 25318, 25323, 25328, 25333, 25338,
- 25343, 25348, 25353, 25358, 25363, 25368, 25373, 25378, 0, 0, 0, 25385,
- 25395, 25399, 25406, 25410, 25414, 25418, 25426, 25430, 25435, 25440,
- 25445, 25449, 25454, 25459, 25462, 25466, 25470, 25479, 25483, 25487,
- 25493, 25497, 25501, 25509, 25513, 25521, 25527, 25533, 25539, 25545,
- 25554, 25559, 25563, 25572, 25575, 25581, 25585, 25591, 25596, 25602,
- 25610, 25616, 25621, 25628, 25633, 25637, 25641, 25651, 25657, 25661,
- 25671, 25677, 25681, 25685, 25692, 25699, 25704, 25709, 25718, 25722,
- 25726, 25730, 25738, 25745, 25749, 25753, 25757, 25761, 25765, 25769,
- 25773, 25777, 25781, 25785, 25789, 25794, 25799, 25804, 25808, 25812, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25816, 25820, 25824, 25828,
- 25832, 25837, 25842, 25847, 25852, 25856, 25860, 25865, 25869, 0, 25873,
- 25878, 25883, 25888, 25892, 25897, 25902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25907, 25911, 25915, 25919, 25923, 25928, 25933, 25938, 25943, 25947,
- 25951, 25956, 25960, 25964, 25968, 25973, 25978, 25983, 25987, 25992,
- 25997, 26002, 26008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26013, 26017, 26021,
- 26025, 26029, 26034, 26039, 26044, 26049, 26053, 26057, 26062, 26066,
- 26070, 26074, 26079, 26084, 26089, 26093, 26098, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26103, 26107, 26111, 26115, 26119, 26124, 26129, 26134,
- 26139, 26143, 26147, 26152, 26156, 0, 26160, 26165, 26170, 0, 26175,
- 26180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26185, 26188, 26192, 26196,
- 26200, 26204, 26208, 26212, 26216, 26220, 26224, 26228, 26232, 26236,
- 26240, 26244, 26248, 26252, 26255, 26259, 26263, 26267, 26271, 26275,
- 26279, 26283, 26287, 26291, 26295, 26299, 26303, 26307, 26311, 26314,
- 26318, 26322, 26328, 26334, 26340, 26346, 26352, 26358, 26364, 26370,
- 26376, 26382, 26388, 26394, 26400, 26406, 26415, 26424, 26430, 26436,
- 26442, 26447, 26451, 26456, 26461, 26466, 26470, 26475, 26480, 26485,
- 26489, 26494, 26498, 26503, 26508, 26513, 26518, 26522, 26526, 26530,
- 26534, 26538, 26542, 26546, 26550, 26554, 26558, 26564, 26568, 26572,
- 26576, 26580, 26584, 26592, 26598, 26602, 26608, 26612, 26618, 26622, 0,
- 0, 26626, 26630, 26633, 26636, 26639, 26642, 26645, 26648, 26651, 26654,
- 0, 0, 0, 0, 0, 0, 26657, 26665, 26673, 26681, 26689, 26697, 26705, 26713,
- 26721, 26729, 0, 0, 0, 0, 0, 0, 26737, 26740, 26743, 26746, 26751, 26754,
- 26759, 26766, 26774, 26779, 26786, 26789, 26796, 26803, 26810, 0, 26814,
- 26818, 26821, 26824, 26827, 26830, 26833, 26836, 26839, 26842, 0, 0, 0,
- 0, 0, 0, 26845, 26848, 26851, 26854, 26857, 26860, 26864, 26868, 26872,
- 26875, 26879, 26883, 26886, 26890, 26894, 26897, 26901, 26905, 26909,
- 26913, 26917, 26921, 26925, 26928, 26931, 26935, 26939, 26942, 26946,
- 26950, 26954, 26958, 26962, 26966, 26970, 26974, 26981, 26986, 26991,
- 26996, 27001, 27007, 27013, 27019, 27025, 27030, 27036, 27042, 27047,
- 27053, 27059, 27065, 27071, 27077, 27082, 27088, 27093, 27099, 27105,
- 27111, 27117, 27123, 27128, 27133, 27139, 27145, 27150, 27156, 27161,
- 27167, 27172, 27177, 27183, 27189, 27195, 27201, 27207, 27213, 27219,
- 27225, 27231, 27237, 27243, 27249, 27254, 27259, 27264, 27270, 0, 0, 0,
- 0, 0, 0, 0, 0, 27276, 27285, 27294, 27302, 27310, 27320, 27328, 27337,
- 27344, 27351, 27358, 27366, 27374, 27382, 27390, 27398, 27406, 27414,
- 27422, 27429, 27437, 27445, 27453, 27461, 27469, 27479, 27489, 27499,
- 27509, 27519, 27529, 27539, 27549, 27559, 27569, 27579, 27589, 27599,
- 27609, 27617, 27625, 27635, 27643, 0, 0, 0, 0, 0, 27653, 27657, 27661,
- 27665, 27669, 27673, 27677, 27681, 27685, 27689, 27693, 27697, 27701,
- 27705, 27709, 27713, 27717, 27721, 27725, 27729, 27733, 27737, 27741,
- 27745, 27751, 27755, 27761, 27765, 27771, 27775, 27781, 27785, 27789,
- 27793, 27797, 27801, 27805, 27811, 27817, 27823, 27829, 27834, 27839,
- 27844, 27850, 27856, 27862, 27868, 27875, 27881, 27886, 27891, 27895,
- 27899, 27903, 27907, 27911, 27915, 27919, 27925, 27931, 27937, 27942,
- 27949, 27954, 27959, 27965, 27970, 27977, 27984, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 27990, 27995, 27998, 28002, 28006, 28010, 28014, 28018, 28022,
- 28026, 28030, 28034, 28038, 28042, 28046, 28050, 28053, 28056, 28060,
- 28064, 28068, 28071, 28074, 28077, 28081, 28085, 28089, 28093, 28097, 0,
- 0, 0, 28100, 28104, 28108, 28112, 28117, 28122, 28127, 28132, 28136,
- 28140, 28145, 28150, 0, 0, 0, 0, 28156, 28160, 28165, 28170, 28175,
- 28179, 28183, 28187, 28191, 28196, 28200, 28204, 0, 0, 0, 0, 28208, 0, 0,
- 0, 28212, 28216, 28220, 28224, 28227, 28230, 28233, 28236, 28239, 28242,
- 28245, 28248, 28251, 28256, 28262, 28268, 28274, 28280, 28285, 28291,
- 28297, 28303, 28308, 28314, 28319, 28325, 28331, 28336, 28342, 28348,
- 28354, 28359, 28364, 28369, 28375, 28381, 28386, 28392, 28397, 28403,
- 28408, 28414, 0, 0, 28420, 28426, 28432, 28438, 28444, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 28450, 28457, 28464, 28470, 28477, 28484, 28490, 28497,
- 28504, 28511, 28518, 28524, 28531, 28538, 28544, 28551, 28558, 28564,
- 28571, 28578, 28584, 28590, 28597, 28603, 28609, 28616, 28622, 28629,
- 28636, 28643, 28650, 28657, 28664, 28670, 28677, 28684, 28690, 28697,
- 28704, 28711, 28718, 28725, 28732, 28739, 0, 0, 0, 0, 28746, 28754,
- 28761, 28768, 28774, 28781, 28787, 28794, 28800, 28807, 28814, 28821,
- 28828, 28835, 28842, 28849, 28856, 28863, 28870, 28877, 28883, 28889,
- 28896, 28903, 28910, 28916, 0, 0, 0, 0, 0, 0, 28922, 28928, 28933, 28938,
- 28943, 28948, 28953, 28958, 28963, 28968, 28973, 0, 0, 0, 28979, 28985,
- 28991, 28995, 29001, 29007, 29013, 29019, 29025, 29031, 29037, 29043,
- 29049, 29055, 29061, 29067, 29073, 29079, 29085, 29089, 29095, 29101,
- 29107, 29113, 29119, 29125, 29131, 29137, 29143, 29149, 29155, 29161,
- 29167, 29173, 29179, 29183, 29188, 29193, 29198, 29202, 29207, 29211,
- 29216, 29221, 29226, 29230, 29235, 29240, 29245, 29250, 29255, 29259,
- 29263, 29268, 29273, 29278, 29282, 29286, 29291, 29296, 29301, 29306, 0,
- 0, 29312, 29316, 29323, 29328, 29334, 29340, 29345, 29351, 29357, 29362,
- 29368, 29374, 29380, 29386, 29392, 29397, 29402, 29408, 29413, 29419,
- 29424, 29430, 29436, 29442, 29448, 29452, 29457, 29462, 29468, 29474,
- 29479, 29485, 29491, 29495, 29500, 29505, 29509, 29514, 29519, 29524,
- 29529, 29535, 29541, 29547, 29552, 29557, 29561, 29566, 29570, 29575,
- 29579, 29584, 29589, 29594, 29599, 29606, 29613, 29621, 29632, 29641,
- 29649, 29656, 29667, 29673, 29680, 0, 29687, 29692, 29697, 29705, 29711,
- 29719, 29724, 29730, 29736, 29742, 29747, 29753, 29758, 29765, 29771,
- 29776, 29782, 29788, 29794, 29801, 29808, 29815, 29820, 29825, 29832,
- 29839, 29846, 29853, 29860, 0, 0, 29867, 29874, 29881, 29887, 29893,
- 29899, 29905, 29911, 29917, 29923, 29929, 0, 0, 0, 0, 0, 0, 29935, 29941,
- 29946, 29951, 29956, 29961, 29966, 29971, 29976, 29981, 0, 0, 0, 0, 0, 0,
- 29986, 29991, 29996, 30001, 30006, 30011, 30016, 30025, 30032, 30037,
- 30042, 30047, 30052, 30057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32223, 32230, 32237, 32244, 32251,
+ 32260, 32269, 32278, 0, 0, 0, 0, 0, 0, 0, 0, 32287, 32292, 32297, 32302,
+ 32307, 32316, 32327, 32336, 32347, 32353, 32366, 32372, 32379, 32386,
+ 32391, 32397, 32403, 32414, 32423, 32430, 32437, 32446, 32453, 32462,
+ 32472, 32482, 32489, 32496, 32503, 32513, 32518, 32526, 32532, 32540,
+ 32549, 32554, 32561, 32567, 32572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32577,
+ 32582, 32588, 32595, 32603, 32609, 32615, 32621, 32626, 32633, 32639,
+ 32645, 32651, 32659, 32664, 32672, 32677, 32683, 32689, 32696, 32704,
+ 32711, 32717, 32724, 32731, 32737, 32744, 32751, 32757, 32762, 32768,
+ 32776, 32784, 32790, 32796, 32802, 32808, 32816, 32820, 32826, 32832,
+ 32838, 32844, 32850, 32856, 32860, 32865, 32870, 32877, 32882, 32886,
+ 32892, 32897, 32902, 32906, 32911, 32916, 32920, 32924, 32929, 32936,
+ 32940, 32945, 32950, 32954, 32959, 32963, 32968, 32972, 32978, 32983,
+ 32990, 32995, 33000, 33004, 33009, 33014, 33021, 33026, 33032, 33037,
+ 33041, 33046, 33050, 33055, 33062, 33069, 33074, 33079, 33083, 33089,
+ 33095, 33100, 33105, 33110, 33116, 33121, 33127, 33132, 33138, 33144,
+ 33150, 33157, 33164, 33171, 33178, 33185, 33192, 33197, 33205, 33214,
+ 33223, 33232, 33241, 33250, 33259, 33271, 33280, 33289, 33298, 33305,
+ 33310, 33317, 33325, 33333, 33340, 33347, 33354, 33361, 33369, 33378,
+ 33387, 33396, 33405, 33414, 33423, 33432, 33441, 33450, 33459, 33468,
+ 33477, 33486, 33495, 33503, 33512, 33523, 33531, 33540, 33551, 33560,
+ 33569, 33578, 33587, 33595, 33604, 33611, 33616, 33624, 33629, 33636,
+ 33641, 33650, 33656, 33663, 33670, 33675, 33680, 33688, 33696, 33705,
+ 33714, 33719, 33726, 33737, 33745, 33754, 33760, 33766, 33771, 33778,
+ 33783, 33792, 33797, 33802, 33807, 33814, 33821, 33826, 33835, 33843,
+ 33848, 33853, 33860, 33867, 33871, 33875, 33878, 33881, 33884, 33887,
+ 33890, 33893, 33900, 33903, 33906, 33911, 33915, 33919, 33923, 33927,
+ 33931, 33940, 33946, 33952, 33958, 33966, 33974, 33980, 33986, 33993,
+ 33999, 34004, 34010, 34016, 34022, 34029, 34035, 34043, 34049, 34056, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34062, 34069,
+ 34076, 34081, 34090, 34098, 34106, 34113, 34120, 34127, 34134, 34142,
+ 34150, 34160, 34170, 34178, 34186, 34194, 34202, 34211, 34220, 34228,
+ 34236, 34245, 34254, 34264, 34274, 34283, 34292, 34300, 34308, 34316,
+ 34324, 34334, 34344, 34352, 34360, 34368, 34376, 34384, 34392, 34400,
+ 34408, 34416, 34424, 34432, 34440, 34449, 34458, 34467, 34476, 34486,
+ 34496, 34503, 34510, 34518, 34526, 34535, 34544, 34552, 34560, 34572,
+ 34584, 34593, 34602, 34611, 34620, 34627, 34634, 34642, 34650, 34658,
+ 34666, 34674, 34682, 34690, 34698, 34707, 34716, 34725, 34734, 34743,
+ 34752, 34762, 34772, 34782, 34792, 34801, 34810, 34817, 34824, 34832,
+ 34840, 34848, 34856, 34864, 34872, 34884, 34896, 34905, 34914, 34922,
+ 34930, 34938, 34946, 34957, 34968, 34979, 34990, 35002, 35014, 35022,
+ 35030, 35038, 35046, 35055, 35064, 35073, 35082, 35090, 35098, 35106,
+ 35114, 35122, 35130, 35139, 35148, 35158, 35168, 35175, 35182, 35190,
+ 35198, 35206, 35214, 35221, 35228, 35236, 35244, 35252, 35260, 35268,
+ 35276, 35284, 35292, 35300, 35308, 35316, 35324, 35332, 35340, 35348,
+ 35356, 35365, 35374, 35383, 35391, 35400, 35409, 35418, 35427, 35437,
+ 35446, 35453, 35458, 35465, 35472, 35480, 35488, 35497, 35506, 35516,
+ 35526, 35537, 35548, 35557, 35566, 35576, 35586, 35595, 35604, 35614,
+ 35624, 35635, 35646, 35655, 35664, 35674, 35684, 35691, 35698, 35706,
+ 35714, 35720, 35726, 35735, 35744, 35754, 35764, 35775, 35786, 35795,
+ 35804, 35814, 35824, 35833, 35842, 35850, 35858, 35865, 35872, 35880,
+ 35888, 35897, 35906, 35916, 35926, 35937, 35948, 35957, 35966, 35976,
+ 35986, 35995, 36004, 36014, 36024, 36035, 36046, 36055, 36064, 36074,
+ 36084, 36091, 36098, 36106, 36114, 36123, 36132, 36142, 36152, 36163,
+ 36174, 36183, 36192, 36202, 36212, 36220, 36228, 36236, 36244, 36253,
+ 36262, 36269, 36276, 36283, 36290, 36297, 36304, 36312, 36320, 36328,
+ 36336, 36347, 36358, 36369, 36380, 36391, 36402, 36410, 36418, 36429,
+ 36440, 36451, 36462, 36473, 36484, 36492, 36500, 36511, 36522, 36533, 0,
+ 0, 36544, 36552, 36560, 36571, 36582, 36593, 0, 0, 36604, 36612, 36620,
+ 36631, 36642, 36653, 36664, 36675, 36686, 36694, 36702, 36713, 36724,
+ 36735, 36746, 36757, 36768, 36776, 36784, 36795, 36806, 36817, 36828,
+ 36839, 36850, 36858, 36866, 36877, 36888, 36899, 36910, 36921, 36932,
+ 36940, 36948, 36959, 36970, 36981, 0, 0, 36992, 37000, 37008, 37019,
+ 37030, 37041, 0, 0, 37052, 37060, 37068, 37079, 37090, 37101, 37112,
+ 37123, 0, 37134, 0, 37142, 0, 37153, 0, 37164, 37175, 37183, 37191,
+ 37202, 37213, 37224, 37235, 37246, 37257, 37265, 37273, 37284, 37295,
+ 37306, 37317, 37328, 37339, 37347, 37355, 37363, 37371, 37379, 37387,
+ 37395, 37403, 37411, 37419, 37427, 37435, 37443, 0, 0, 37451, 37462,
+ 37473, 37487, 37501, 37515, 37529, 37543, 37557, 37568, 37579, 37593,
+ 37607, 37621, 37635, 37649, 37663, 37674, 37685, 37699, 37713, 37727,
+ 37741, 37755, 37769, 37780, 37791, 37805, 37819, 37833, 37847, 37861,
+ 37875, 37886, 37897, 37911, 37925, 37939, 37953, 37967, 37981, 37992,
+ 38003, 38017, 38031, 38045, 38059, 38073, 38087, 38095, 38103, 38114,
+ 38122, 0, 38133, 38141, 38152, 38160, 38168, 38176, 38184, 38192, 38195,
+ 38198, 38201, 38204, 38210, 38221, 38229, 0, 38240, 38248, 38259, 38267,
+ 38275, 38283, 38291, 38299, 38305, 38311, 38317, 38325, 38333, 38344, 0,
+ 0, 38355, 38363, 38374, 38382, 38390, 38398, 0, 38406, 38412, 38418,
+ 38424, 38432, 38440, 38451, 38462, 38470, 38478, 38486, 38497, 38505,
+ 38513, 38521, 38529, 38537, 38543, 38549, 0, 0, 38552, 38563, 38571, 0,
+ 38582, 38590, 38601, 38609, 38617, 38625, 38633, 38641, 38644, 0, 38647,
+ 38651, 38655, 38659, 38663, 38667, 38671, 38675, 38679, 38683, 38687,
+ 38691, 38697, 38703, 38709, 38712, 38715, 38717, 38721, 38725, 38729,
+ 38733, 38735, 38739, 38743, 38749, 38755, 38762, 38769, 38774, 38779,
+ 38785, 38791, 38793, 38796, 38798, 38802, 38806, 38810, 38813, 38817,
+ 38821, 38825, 38829, 38833, 38839, 38843, 38847, 38853, 38858, 38865,
+ 38867, 38870, 38874, 38878, 38883, 38889, 38891, 38900, 38909, 38912,
+ 38916, 38918, 38920, 38922, 38925, 38931, 38933, 38937, 38941, 38948,
+ 38955, 38959, 38964, 38969, 38974, 38979, 38983, 38987, 38990, 38994,
+ 38998, 39005, 39010, 39014, 39018, 39023, 39027, 39031, 39036, 39041,
+ 39045, 39049, 39053, 39055, 39060, 39065, 39069, 39073, 39077, 39081, 0,
+ 0, 0, 0, 0, 39085, 39091, 39097, 39104, 39111, 39116, 39121, 39125, 0, 0,
+ 39131, 39134, 39137, 39140, 39143, 39146, 39149, 39153, 39157, 39162,
+ 39167, 39172, 39179, 39183, 39186, 39189, 39192, 39195, 39198, 39201,
+ 39204, 39207, 39210, 39214, 39218, 39223, 39228, 0, 39233, 39239, 39245,
+ 39251, 39258, 39265, 39272, 39279, 39285, 39291, 39298, 39305, 39312, 0,
+ 0, 0, 39319, 39322, 39325, 39328, 39333, 39336, 39339, 39342, 39345,
+ 39348, 39351, 39355, 39358, 39361, 39364, 39367, 39370, 39375, 39378,
+ 39381, 39384, 39387, 39390, 39395, 39398, 39401, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39406, 39411, 39416, 39423,
+ 39431, 39436, 39441, 39445, 39449, 39454, 39461, 39468, 39472, 39477,
+ 39482, 39487, 39492, 39499, 39504, 39509, 39514, 39523, 39530, 39537,
+ 39541, 39546, 39552, 39557, 39564, 39573, 39582, 39586, 39590, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39594, 39598, 39606, 39610, 39614,
+ 39619, 39623, 39627, 39631, 39633, 39637, 39641, 39645, 39650, 39654,
+ 39658, 39666, 39669, 39673, 39676, 39679, 39685, 39689, 39692, 39698,
+ 39702, 39706, 39710, 39713, 39717, 39720, 39724, 39726, 39729, 39732,
+ 39736, 39738, 39742, 39745, 39748, 39753, 39758, 39765, 39768, 39771,
+ 39775, 39780, 39783, 39786, 39789, 39793, 39798, 39801, 39804, 39806,
+ 39809, 39812, 39815, 39819, 39824, 39827, 39831, 39835, 39839, 39843,
+ 39848, 39854, 39859, 39864, 39870, 39875, 39880, 39884, 39888, 39893,
+ 39897, 39901, 39904, 39906, 39911, 39917, 39924, 39931, 39938, 39945,
+ 39952, 39959, 39966, 39973, 39981, 39988, 39996, 40003, 40010, 40018,
+ 40026, 40031, 40036, 40041, 40046, 40051, 40056, 40061, 40066, 40071,
+ 40076, 40082, 40088, 40094, 40100, 40107, 40115, 40122, 40128, 40134,
+ 40140, 40146, 40152, 40158, 40164, 40170, 40176, 40183, 40190, 40197,
+ 40204, 40212, 40221, 40229, 40240, 40248, 40256, 40265, 40272, 40281,
+ 40290, 40298, 40307, 0, 0, 0, 0, 0, 0, 40315, 40317, 40320, 40322, 40325,
+ 40328, 40331, 40336, 40341, 40346, 40351, 40355, 40359, 40363, 40367,
+ 40372, 40378, 40383, 40389, 40394, 40399, 40404, 40410, 40415, 40421,
+ 40427, 40431, 40435, 40440, 40445, 40450, 40455, 40460, 40468, 40476,
+ 40484, 40492, 40499, 40507, 40514, 40521, 40530, 40542, 40548, 40554,
+ 40562, 40570, 40579, 40588, 40596, 40604, 40613, 40622, 40627, 40635,
+ 40640, 40645, 40651, 40656, 40662, 40669, 40676, 40681, 40687, 40692,
+ 40695, 40699, 40702, 40706, 40710, 40714, 40720, 40726, 40732, 40738,
+ 40742, 40746, 40750, 40754, 40760, 40766, 40770, 40775, 40779, 40784,
+ 40789, 40794, 40797, 40801, 40804, 40808, 40815, 40823, 40834, 40845,
+ 40850, 40859, 40866, 40875, 40884, 40888, 40894, 40902, 40906, 40911,
+ 40916, 40922, 40928, 40934, 40941, 40945, 40949, 40954, 40957, 40959,
+ 40963, 40967, 40975, 40979, 40981, 40983, 40987, 40995, 41000, 41006,
+ 41016, 41023, 41028, 41032, 41036, 41040, 41043, 41046, 41049, 41053,
+ 41057, 41061, 41065, 41069, 41072, 41076, 41080, 41083, 41085, 41088,
+ 41090, 41094, 41098, 41100, 41106, 41109, 41114, 41118, 41122, 41124,
+ 41126, 41128, 41131, 41135, 41139, 41143, 41147, 41151, 41157, 41163,
+ 41165, 41167, 41169, 41171, 41174, 41176, 41180, 41182, 41186, 41189,
+ 41195, 41199, 41203, 41206, 41209, 41213, 41219, 41223, 41233, 41243,
+ 41247, 41253, 41259, 41262, 41266, 41269, 41274, 41278, 41284, 41288,
+ 41300, 41308, 41312, 41316, 41322, 41326, 41329, 41331, 41334, 41338,
+ 41342, 41349, 41353, 41357, 41361, 41364, 41369, 41374, 41379, 41384,
+ 41389, 41394, 41402, 41410, 41414, 41418, 41420, 41425, 41429, 41433,
+ 41441, 41449, 41455, 41461, 41470, 41479, 41484, 41489, 41497, 41505,
+ 41507, 41509, 41514, 41519, 41525, 41531, 41537, 41543, 41547, 41551,
+ 41558, 41565, 41571, 41577, 41587, 41597, 41605, 41613, 41615, 41619,
+ 41623, 41628, 41633, 41640, 41647, 41650, 41653, 41656, 41659, 41662,
+ 41667, 41671, 41676, 41681, 41684, 41687, 41690, 41693, 41696, 41700,
+ 41703, 41706, 41709, 41712, 41714, 41716, 41718, 41720, 41728, 41736,
+ 41742, 41746, 41752, 41762, 41768, 41774, 41780, 41788, 41796, 41807,
+ 41811, 41815, 41817, 41823, 41825, 41827, 41829, 41831, 41837, 41840,
+ 41846, 41852, 41856, 41860, 41864, 41867, 41871, 41875, 41877, 41886,
+ 41895, 41900, 41905, 41911, 41917, 41923, 41926, 41929, 41932, 41935,
+ 41937, 41942, 41947, 41952, 41958, 41964, 41972, 41980, 41986, 41992,
+ 41998, 42004, 42013, 42022, 42031, 42040, 42049, 42058, 42067, 42076,
+ 42085, 42094, 42102, 42114, 42124, 42139, 42142, 42147, 42153, 42159,
+ 42166, 42180, 42195, 42201, 42207, 42214, 42220, 42228, 42234, 42247,
+ 42261, 42266, 42272, 42279, 42282, 42285, 42287, 42290, 42293, 42295,
+ 42297, 42301, 42304, 42307, 42310, 42313, 42318, 42323, 42328, 42333,
+ 42338, 42341, 42343, 42345, 42347, 42351, 42355, 42359, 42365, 42370,
+ 42372, 42374, 42379, 42384, 42389, 42394, 42399, 42404, 42406, 42408,
+ 42417, 42421, 42429, 42438, 42440, 42445, 42450, 42458, 42462, 42464,
+ 42468, 42470, 42474, 42478, 42482, 42484, 42486, 42488, 42495, 42504,
+ 42513, 42522, 42531, 42540, 42549, 42558, 42567, 42575, 42583, 42592,
+ 42601, 42610, 42619, 42627, 42635, 42644, 42653, 42662, 42672, 42681,
+ 42691, 42700, 42710, 42719, 42729, 42739, 42748, 42758, 42767, 42777,
+ 42786, 42796, 42805, 42814, 42823, 42832, 42841, 42851, 42860, 42869,
+ 42878, 42888, 42897, 42906, 42915, 42924, 42934, 42944, 42953, 42962,
+ 42970, 42978, 42985, 42993, 43002, 43013, 43022, 43031, 43040, 43047,
+ 43054, 43061, 43070, 43079, 43088, 43097, 43104, 43109, 43118, 43123,
+ 43126, 43134, 43137, 43142, 43147, 43150, 43153, 43161, 43164, 43169,
+ 43172, 43179, 43184, 43192, 43195, 43198, 43201, 43206, 43211, 43214,
+ 43217, 43225, 43228, 43235, 43242, 43246, 43250, 43255, 43260, 43266,
+ 43271, 43277, 43283, 43288, 43294, 43302, 43308, 43316, 43324, 43330,
+ 43338, 43346, 43355, 43363, 43369, 43377, 43386, 43394, 43398, 43403,
+ 43416, 43429, 43433, 43437, 43441, 43445, 43455, 43459, 43464, 43469,
+ 43474, 43479, 43484, 43489, 43499, 43509, 43517, 43527, 43537, 43545,
+ 43555, 43565, 43573, 43583, 43593, 43601, 43609, 43619, 43629, 43632,
+ 43635, 43638, 43643, 43647, 43653, 43660, 43667, 43675, 43682, 43686,
+ 43690, 43694, 43698, 43700, 43704, 43708, 43713, 43718, 43725, 43732,
+ 43735, 43742, 43744, 43746, 43750, 43754, 43759, 43765, 43771, 43777,
+ 43783, 43792, 43801, 43810, 43814, 43816, 43820, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 43827, 43831, 43838, 43845, 43852, 43859, 43863, 43867,
+ 43871, 43875, 43880, 43886, 43891, 43897, 43903, 43909, 43915, 43923,
+ 43930, 43937, 43944, 43951, 43956, 43962, 43971, 43975, 43982, 43986,
+ 43990, 43996, 44002, 44008, 44014, 44018, 44022, 44025, 44028, 44032,
+ 44039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 44046, 44049, 44053, 44057, 44063, 44069, 44075, 44083, 44090,
+ 44094, 44102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 44107, 44110, 44113, 44116, 44119, 44122, 44125, 44128, 44131, 44134,
+ 44138, 44142, 44146, 44150, 44154, 44158, 44162, 44166, 44170, 44174,
+ 44178, 44181, 44184, 44187, 44190, 44193, 44196, 44199, 44202, 44205,
+ 44209, 44213, 44217, 44221, 44225, 44229, 44233, 44237, 44241, 44245,
+ 44249, 44255, 44261, 44267, 44274, 44281, 44288, 44295, 44302, 44309,
+ 44316, 44323, 44330, 44337, 44344, 44351, 44358, 44365, 44372, 44379,
+ 44386, 44391, 44397, 44403, 44409, 44414, 44420, 44426, 44432, 44437,
+ 44443, 44449, 44454, 44459, 44465, 44470, 44476, 44482, 44487, 44493,
+ 44499, 44504, 44510, 44516, 44522, 44528, 44534, 44539, 44545, 44551,
+ 44557, 44562, 44568, 44574, 44580, 44585, 44591, 44597, 44602, 44607,
+ 44613, 44618, 44624, 44630, 44635, 44641, 44647, 44652, 44658, 44664,
+ 44670, 44676, 44682, 44687, 44693, 44699, 44705, 44710, 44716, 44722,
+ 44728, 44733, 44739, 44745, 44750, 44755, 44761, 44766, 44772, 44778,
+ 44783, 44789, 44795, 44800, 44806, 44812, 44818, 44824, 44830, 44834,
+ 44839, 44844, 44849, 44854, 44859, 44864, 44869, 44874, 44879, 44884,
+ 44888, 44892, 44896, 44900, 44904, 44908, 44912, 44916, 44920, 44925,
+ 44930, 44935, 44940, 44945, 44950, 44959, 44968, 44977, 44986, 44995,
+ 45004, 45013, 45022, 45029, 45037, 45045, 45052, 45059, 45067, 45075,
+ 45082, 45089, 45097, 45105, 45112, 45119, 45127, 45135, 45142, 45149,
+ 45157, 45166, 45175, 45183, 45192, 45201, 45208, 45215, 45223, 45232,
+ 45241, 45249, 45258, 45267, 45274, 45281, 45290, 45299, 45307, 45315,
+ 45324, 45333, 45340, 45347, 45356, 45365, 45373, 45381, 45390, 45399,
+ 45406, 45413, 45422, 45431, 45439, 45448, 45457, 45465, 45475, 45485,
+ 45495, 45505, 45514, 45523, 45532, 45541, 45548, 45556, 45564, 45572,
+ 45580, 45585, 45590, 45599, 45607, 45614, 45623, 45631, 45638, 45647,
+ 45655, 45662, 45671, 45679, 45686, 45695, 45703, 45710, 45719, 45727,
+ 45734, 45743, 45751, 45758, 45767, 45775, 45782, 45791, 45799, 45806,
+ 45815, 45824, 45833, 45842, 45856, 45870, 45877, 45882, 45887, 45892,
+ 45897, 45902, 45907, 45912, 45917, 45925, 45933, 45941, 45949, 45954,
+ 45961, 45968, 45975, 45980, 45988, 45995, 46003, 46007, 46014, 46020,
+ 46027, 46031, 46037, 46043, 46049, 46053, 46056, 46060, 46064, 46071,
+ 46077, 46083, 46089, 46095, 46109, 46119, 46133, 46147, 46153, 46163,
+ 46177, 46180, 46183, 46190, 46198, 46203, 46208, 46216, 46228, 46240,
+ 46248, 46252, 46256, 46259, 46262, 46266, 46270, 46273, 46276, 46281,
+ 46286, 46292, 46298, 46303, 46308, 46314, 46320, 46325, 46330, 46335,
+ 46340, 46346, 46352, 46357, 46362, 46368, 46374, 46379, 46384, 46387,
+ 46390, 46399, 46401, 46403, 46406, 46410, 46416, 46418, 46421, 46428,
+ 46435, 46443, 46451, 46461, 46475, 46480, 46485, 46489, 46494, 46502,
+ 46510, 46519, 46528, 46537, 46546, 46551, 46556, 46562, 46568, 46574,
+ 46580, 46583, 46589, 46595, 46605, 46615, 46623, 46631, 46640, 46649,
+ 46653, 46661, 46669, 46677, 46685, 46694, 46703, 46712, 46721, 46726,
+ 46731, 46736, 46741, 46746, 46752, 46758, 46763, 46769, 46771, 46773,
+ 46775, 46777, 46780, 46783, 46785, 46787, 46789, 46793, 46797, 46799,
+ 46801, 46804, 46807, 46811, 46817, 46823, 46825, 46832, 46836, 46841,
+ 46846, 46848, 46858, 46864, 46870, 46876, 46882, 46888, 46894, 46899,
+ 46902, 46905, 46908, 46910, 46912, 46916, 46920, 46925, 46930, 46935,
+ 46938, 46942, 46947, 46950, 46954, 46959, 46964, 46969, 46974, 46979,
+ 46984, 46989, 46994, 46999, 47004, 47009, 47014, 47020, 47026, 47032,
+ 47034, 47037, 47039, 47042, 47044, 47046, 47048, 47050, 47052, 47054,
+ 47056, 47058, 47060, 47062, 47064, 47066, 47068, 47070, 47072, 47074,
+ 47076, 47081, 47086, 47091, 47096, 47101, 47106, 47111, 47116, 47121,
+ 47126, 47131, 47136, 47141, 47146, 47151, 47156, 47161, 47166, 47171,
+ 47176, 47180, 47184, 47188, 47194, 47200, 47205, 47210, 47215, 47220,
+ 47225, 47230, 47238, 47246, 47254, 47262, 47270, 47278, 47286, 47294,
+ 47300, 47305, 47310, 47315, 47318, 47322, 47326, 47330, 47334, 47338,
+ 47342, 47349, 47356, 47364, 47372, 47377, 47382, 47389, 47396, 47403,
+ 47410, 47413, 47416, 47421, 47423, 47427, 47432, 47434, 47436, 47438,
+ 47440, 47445, 47448, 47450, 47455, 47462, 47469, 47472, 47476, 47481,
+ 47486, 47494, 47500, 47506, 47518, 47525, 47532, 47537, 47542, 47548,
+ 47551, 47554, 47559, 47561, 47565, 47567, 47569, 47571, 47573, 47575,
+ 47577, 47582, 47584, 47586, 47588, 47590, 47594, 47596, 47599, 47604,
+ 47609, 47614, 47619, 47625, 47631, 47633, 47636, 47643, 47650, 47657,
+ 47664, 47668, 47672, 47674, 47676, 47680, 47686, 47691, 47693, 47697,
+ 47706, 47714, 47722, 47728, 47734, 47739, 47745, 47750, 47753, 47767,
+ 47770, 47775, 47780, 47786, 47796, 47798, 47804, 47810, 47814, 47821,
+ 47825, 47827, 47829, 47833, 47839, 47844, 47850, 47852, 47858, 47860,
+ 47866, 47868, 47870, 47875, 47877, 47881, 47886, 47888, 47893, 47898,
+ 47902, 47909, 0, 47919, 47925, 47928, 47934, 47937, 47942, 47947, 47951,
+ 47953, 47955, 47959, 47963, 47967, 47971, 47976, 47978, 47983, 47986,
+ 47989, 47992, 47996, 48000, 48005, 48009, 48014, 48019, 48023, 48028,
+ 48034, 48037, 48043, 48048, 48052, 48057, 48063, 48069, 48076, 48082,
+ 48089, 48096, 48098, 48105, 48109, 48115, 48121, 48126, 48132, 48136,
+ 48141, 48144, 48149, 48155, 48162, 48170, 48177, 48186, 48196, 48203,
+ 48209, 48213, 48220, 48225, 48234, 48237, 48240, 48249, 48259, 48266,
+ 48268, 48274, 48279, 48281, 48284, 48288, 48296, 48305, 48308, 48313,
+ 48318, 48326, 48334, 48342, 48350, 48356, 48362, 48368, 48376, 48381,
+ 48384, 48388, 48391, 48403, 48413, 48424, 48433, 48444, 48454, 48463,
+ 48469, 48477, 48481, 48489, 48493, 48501, 48508, 48515, 48524, 48533,
+ 48543, 48553, 48563, 48573, 48582, 48591, 48601, 48611, 48620, 48629,
+ 48635, 48641, 48647, 48653, 48659, 48665, 48671, 48677, 48683, 48690,
+ 48696, 48702, 48708, 48714, 48720, 48726, 48732, 48738, 48744, 48751,
+ 48758, 48765, 48772, 48779, 48786, 48793, 48800, 48807, 48814, 48822,
+ 48827, 48830, 48834, 48838, 48844, 48847, 48853, 48859, 48864, 48868,
+ 48873, 48879, 48886, 48889, 48896, 48903, 48907, 48916, 48925, 48930,
+ 48936, 48941, 48946, 48953, 48960, 48968, 48976, 48985, 48989, 48998,
+ 49003, 49007, 49014, 49018, 49025, 49033, 49038, 49046, 49050, 49055,
+ 49059, 49064, 49068, 49073, 49078, 49087, 49089, 49092, 49095, 49102,
+ 49109, 49114, 49122, 49128, 49134, 49139, 49142, 49147, 49152, 49157,
+ 49165, 49169, 49176, 49184, 49192, 49197, 49202, 49208, 49213, 49218,
+ 49224, 49229, 49232, 49236, 49240, 49247, 49256, 49261, 49270, 49279,
+ 49285, 49291, 49296, 49301, 49306, 49311, 49317, 49323, 49331, 49339,
+ 49345, 49351, 49356, 49361, 49368, 49375, 49381, 49384, 49387, 49391,
+ 49395, 49399, 49404, 49410, 49416, 49423, 49430, 49435, 49439, 49443,
+ 49447, 49451, 49455, 49459, 49463, 49467, 49471, 49475, 49479, 49483,
+ 49487, 49491, 49495, 49499, 49503, 49507, 49511, 49515, 49519, 49523,
+ 49527, 49531, 49535, 49539, 49543, 49547, 49551, 49555, 49559, 49563,
+ 49567, 49571, 49575, 49579, 49583, 49587, 49591, 49595, 49599, 49603,
+ 49607, 49611, 49615, 49619, 49623, 49627, 49631, 49635, 49639, 49643,
+ 49647, 49651, 49655, 49659, 49663, 49667, 49671, 49675, 49679, 49683,
+ 49687, 49691, 49695, 49699, 49703, 49707, 49711, 49715, 49719, 49723,
+ 49727, 49731, 49735, 49739, 49743, 49747, 49751, 49755, 49759, 49763,
+ 49767, 49771, 49775, 49779, 49783, 49787, 49791, 49795, 49799, 49803,
+ 49807, 49811, 49815, 49819, 49823, 49827, 49831, 49835, 49839, 49843,
+ 49847, 49851, 49855, 49859, 49863, 49867, 49871, 49875, 49879, 49883,
+ 49887, 49891, 49895, 49899, 49903, 49907, 49911, 49915, 49919, 49923,
+ 49927, 49931, 49935, 49939, 49943, 49947, 49951, 49955, 49959, 49963,
+ 49967, 49971, 49975, 49979, 49983, 49987, 49991, 49995, 49999, 50003,
+ 50007, 50011, 50015, 50019, 50023, 50027, 50031, 50035, 50039, 50043,
+ 50047, 50051, 50055, 50059, 50063, 50067, 50071, 50075, 50079, 50083,
+ 50087, 50091, 50095, 50099, 50103, 50107, 50111, 50115, 50119, 50123,
+ 50127, 50131, 50135, 50139, 50143, 50147, 50151, 50155, 50159, 50163,
+ 50167, 50171, 50175, 50179, 50183, 50187, 50191, 50195, 50199, 50203,
+ 50207, 50211, 50215, 50219, 50223, 50227, 50231, 50235, 50239, 50243,
+ 50247, 50251, 50255, 50259, 50263, 50267, 50271, 50275, 50279, 50283,
+ 50287, 50291, 50295, 50299, 50303, 50307, 50311, 50315, 50319, 50323,
+ 50327, 50331, 50335, 50339, 50343, 50347, 50351, 50355, 50359, 50363,
+ 50367, 50371, 50375, 50379, 50383, 50387, 50391, 50395, 50399, 50403,
+ 50407, 50411, 50415, 50419, 50423, 50427, 50431, 50435, 50439, 50443,
+ 50447, 50451, 50455, 50459, 50466, 50474, 50480, 50486, 50493, 50500,
+ 50506, 50512, 50518, 50524, 50529, 50534, 50539, 50544, 50550, 50556,
+ 50564, 50571, 50577, 50583, 50591, 50600, 50607, 50617, 50628, 50631,
+ 50634, 50638, 50642, 50649, 50656, 50667, 50678, 50688, 50698, 50705,
+ 50712, 50719, 50726, 50737, 50748, 50759, 50770, 50780, 50790, 50802,
+ 50814, 50825, 50836, 50848, 50860, 50869, 50879, 50889, 50900, 50911,
+ 50918, 50925, 50932, 50939, 50949, 50959, 50967, 50975, 50982, 50989,
+ 50996, 51003, 51010, 51015, 51020, 51026, 51034, 51044, 51054, 51064,
+ 51074, 51084, 51094, 51104, 51114, 51124, 51134, 51144, 51155, 51166,
+ 51176, 51186, 51197, 51208, 51218, 51228, 51239, 51250, 51260, 51270,
+ 51281, 51292, 51308, 51327, 51343, 51362, 51378, 51394, 51410, 51426,
+ 51437, 51449, 51460, 51472, 51491, 51510, 51518, 51524, 51531, 51538,
+ 51545, 51552, 51557, 51563, 51568, 51573, 51579, 51584, 51589, 51594,
+ 51599, 51604, 51611, 51616, 51623, 51628, 51633, 51637, 51641, 51648,
+ 51655, 51662, 51669, 51676, 51683, 51696, 51709, 51722, 51735, 51743,
+ 51751, 51757, 51763, 51770, 51777, 51784, 51791, 51795, 51800, 51808,
+ 51816, 51824, 51831, 51835, 51843, 51851, 51855, 51859, 51864, 51871,
+ 51879, 51887, 51906, 51925, 51944, 51963, 51982, 52001, 52020, 52039,
+ 52045, 52052, 52061, 52069, 52077, 52082, 52085, 52088, 52093, 52096,
+ 52115, 52122, 52128, 52134, 52138, 52141, 52144, 52147, 52159, 52172,
+ 52179, 52186, 52189, 52193, 52196, 52201, 52206, 52211, 52217, 52226,
+ 52233, 52240, 52248, 52255, 52262, 52265, 52271, 52277, 52280, 52283,
+ 52288, 52293, 52299, 52305, 52309, 52314, 52321, 52325, 52331, 52335,
+ 52339, 52347, 52359, 52368, 52372, 52374, 52383, 52392, 52398, 52401,
+ 52407, 52413, 52418, 52423, 52428, 52433, 52438, 52443, 52445, 52451,
+ 52456, 52463, 52467, 52473, 52476, 52480, 52487, 52494, 52496, 52498,
+ 52504, 52510, 52516, 52525, 52534, 52541, 52548, 52554, 52560, 52565,
+ 52570, 52575, 52581, 52587, 52592, 52599, 52603, 52607, 52620, 52633,
+ 52645, 52654, 52660, 52667, 52672, 52677, 52682, 52687, 52692, 52694,
+ 52701, 52708, 52715, 52722, 52729, 52737, 52743, 52748, 52754, 52760,
+ 52766, 52773, 52779, 52787, 52795, 52803, 52811, 52818, 52824, 52830,
+ 52839, 52843, 52852, 52861, 52870, 52878, 52882, 52888, 52895, 52902,
+ 52906, 52912, 52919, 52924, 52929, 52935, 52940, 52945, 52952, 52959,
+ 52964, 52969, 52977, 52985, 52995, 53005, 53012, 53019, 53023, 53027,
+ 53039, 53045, 53051, 53056, 53061, 53068, 53075, 53081, 53087, 53096,
+ 53104, 53112, 53119, 53126, 53133, 53139, 53146, 53152, 53159, 53166,
+ 53173, 53180, 53186, 53191, 53200, 53210, 53217, 53226, 53232, 53237,
+ 53242, 53252, 53258, 53264, 53270, 53278, 53283, 53290, 53297, 53308,
+ 53315, 53322, 53329, 53336, 53343, 53350, 53357, 53369, 53381, 53392,
+ 53403, 53416, 53429, 53434, 53439, 53448, 53457, 53464, 53471, 53480,
+ 53489, 53497, 53505, 53513, 53521, 53531, 53541, 53555, 53569, 53577,
+ 53585, 53597, 53609, 53617, 53625, 53635, 53645, 53650, 53655, 53664,
+ 53673, 53678, 53683, 53691, 53697, 53703, 53711, 53719, 53732, 53745,
+ 53749, 53753, 53760, 53767, 53774, 53782, 53790, 53799, 53808, 53814,
+ 53820, 53827, 53834, 53841, 53848, 53857, 53866, 53869, 53872, 53877,
+ 53882, 53888, 53894, 53901, 53908, 53918, 53928, 53935, 53942, 53950,
+ 53958, 53966, 53974, 53982, 53990, 53996, 54002, 54006, 54010, 54017,
+ 54024, 54029, 54034, 54039, 54044, 54050, 54064, 54071, 54078, 54082,
+ 54084, 54086, 54091, 54096, 54101, 54106, 54114, 54121, 54128, 54136,
+ 54148, 54156, 54164, 54175, 54179, 54183, 54189, 54197, 54210, 54217,
+ 54224, 54231, 54236, 54243, 54252, 54260, 54266, 54272, 54278, 54287,
+ 54296, 54304, 54313, 54318, 54321, 54326, 54332, 54338, 54344, 54350,
+ 54354, 54357, 54361, 54365, 54371, 54377, 54383, 54389, 54393, 54397,
+ 54404, 54411, 54418, 54425, 54432, 54439, 54449, 54459, 54466, 54473,
+ 54481, 54489, 54493, 54498, 54503, 54509, 54515, 54518, 54521, 54524,
+ 54527, 54531, 54536, 54541, 54546, 54551, 54556, 54560, 54564, 54568,
+ 54572, 54576, 54580, 54584, 54590, 54594, 54600, 54605, 54612, 54620,
+ 54627, 54635, 54642, 54650, 54659, 54666, 54676, 54687, 54693, 54702,
+ 54708, 54717, 54726, 54732, 54738, 54742, 54746, 54755, 54764, 54771,
+ 54778, 54787, 0, 0, 0, 54796, 54801, 54805, 54809, 54814, 54819, 54824,
+ 54832, 54840, 54843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30062, 30068,
- 30074, 30078, 30082, 30086, 30090, 30096, 30100, 30106, 30110, 30116,
- 30122, 30130, 30136, 30144, 30148, 30152, 30156, 30162, 30165, 30171,
- 30175, 30181, 30185, 30189, 30195, 30199, 30205, 30209, 30215, 30223,
- 30231, 30239, 30245, 30249, 30255, 30259, 30265, 30268, 30271, 30277,
- 30281, 30287, 30290, 30293, 30296, 30300, 30304, 30310, 30316, 30320,
- 30323, 30327, 30332, 30337, 30344, 30349, 30356, 30363, 30372, 30379,
- 30388, 30393, 30400, 30407, 30416, 30421, 30428, 30433, 30439, 30445,
- 30451, 30457, 30463, 30469, 0, 0, 0, 0, 30475, 30479, 30482, 30485,
- 30488, 30491, 30494, 30497, 30500, 30503, 30506, 30509, 30512, 30515,
- 30520, 30525, 30530, 30533, 30538, 30543, 30548, 30553, 30560, 30565,
- 30570, 30575, 30580, 30587, 30593, 30599, 30605, 30611, 30617, 30626,
- 30635, 30641, 30647, 30656, 30665, 30674, 30683, 30692, 30701, 30710,
- 30719, 0, 0, 0, 30728, 30733, 30738, 30743, 30747, 30751, 30755, 30760,
- 30764, 30768, 30773, 30777, 30782, 30787, 30792, 30797, 30802, 30807,
- 30812, 30817, 30822, 30826, 30830, 30835, 30840, 30845, 30849, 30853,
- 30857, 30862, 30867, 30872, 30877, 30881, 30888, 30895, 30902, 30908,
- 30914, 30920, 30926, 30932, 30938, 0, 0, 0, 30943, 30948, 30953, 30958,
- 30962, 30966, 30970, 30974, 30978, 30982, 30986, 30990, 0, 0, 0, 0, 0, 0,
- 30994, 30998, 31004, 31008, 31014, 31020, 31025, 31032, 31036, 31042,
- 31046, 31052, 31057, 31064, 31071, 31076, 31083, 31088, 31093, 31097,
- 31103, 31107, 31113, 31120, 31127, 31132, 31139, 31146, 31150, 31156,
- 31161, 31166, 31173, 31178, 31183, 31188, 31193, 31197, 31201, 31206,
- 31211, 31218, 31224, 31229, 31236, 31241, 31248, 31253, 31263, 31270,
- 31277, 31281, 0, 0, 0, 0, 0, 0, 0, 0, 31285, 31294, 31301, 31308, 31315,
- 31318, 31322, 31326, 31330, 31334, 31338, 31342, 31346, 31350, 31354,
- 31358, 31362, 31366, 31369, 31372, 31376, 31380, 31384, 31388, 31392,
- 31396, 31399, 31403, 31407, 31411, 31415, 31418, 31421, 31425, 31428,
- 31432, 31436, 31440, 31444, 31448, 31451, 31456, 31461, 31466, 31470,
- 31474, 31479, 31483, 31488, 31492, 31498, 31503, 31508, 31513, 31519,
- 31524, 31530, 31536, 31542, 31546, 0, 0, 0, 31550, 31555, 31564, 31569,
- 31576, 31581, 31585, 31588, 31591, 31594, 31597, 31600, 31603, 31606,
- 31609, 0, 0, 0, 31612, 31616, 31620, 31624, 31631, 31637, 31643, 31649,
- 31655, 31661, 31667, 31673, 31679, 31685, 31692, 31699, 31706, 31713,
- 31720, 31727, 31734, 31741, 31748, 31755, 31762, 31769, 31776, 31783,
- 31790, 31797, 31804, 31811, 31818, 31825, 31832, 31839, 31846, 31853,
- 31860, 31867, 31874, 31881, 31888, 31895, 31903, 31911, 31919, 31925,
- 31931, 31937, 31945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31954, 31959, 31964, 31969,
- 31974, 31983, 31994, 32003, 32014, 32020, 32033, 32039, 32046, 32053,
- 32058, 32064, 32070, 32081, 32090, 32097, 32104, 32113, 32120, 32129,
- 32139, 32149, 32156, 32163, 32170, 32180, 32185, 32193, 32199, 32207,
- 32216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32221, 32226, 32232, 32239,
- 32247, 32253, 32259, 32265, 32270, 32278, 32284, 32290, 32296, 32304,
- 32309, 32316, 32321, 32328, 32334, 32342, 32350, 32357, 32363, 32370,
- 32377, 32383, 32390, 32397, 32403, 32408, 32414, 32422, 32430, 32436,
- 32442, 32448, 32454, 32462, 32466, 32472, 32478, 32484, 32490, 32496,
- 32502, 32506, 32511, 32516, 32523, 32528, 32532, 32538, 32543, 32548,
- 32552, 32557, 32562, 32566, 32570, 32574, 32580, 32584, 32589, 32594,
- 32598, 32603, 32607, 32612, 32616, 32622, 32627, 32634, 32639, 32644,
- 32648, 32653, 32659, 32667, 32672, 32678, 32683, 32687, 32692, 32696,
- 32702, 32709, 32716, 32721, 32726, 32730, 32736, 32742, 32747, 32752,
- 32757, 32763, 32768, 32774, 32779, 32785, 32791, 32797, 32804, 32811,
- 32818, 32825, 32832, 32839, 32844, 32853, 32863, 32873, 32883, 32893,
- 32903, 32913, 32926, 32936, 32946, 32956, 32963, 32968, 32975, 32983,
- 32991, 32998, 33005, 33012, 33019, 33027, 33036, 33045, 33054, 33063,
- 33072, 33081, 33090, 33099, 33108, 33117, 33126, 33135, 33144, 33153,
- 33161, 33170, 33181, 33189, 33199, 33211, 33220, 33229, 33239, 33248,
- 33256, 33265, 33272, 33277, 33285, 33290, 33298, 33303, 33312, 33318,
- 33325, 33332, 33337, 33342, 33350, 33358, 33367, 33376, 33381, 33388,
- 33399, 33407, 33416, 33421, 33427, 33432, 33439, 33444, 33453, 33458,
- 33463, 33468, 33475, 33482, 33487, 33496, 33504, 33509, 33514, 33521,
- 33528, 33532, 33536, 33539, 33542, 33545, 33548, 33551, 33554, 33561,
- 33564, 33567, 33572, 33576, 33580, 33584, 33588, 33592, 33602, 33608,
- 33614, 33620, 33628, 33636, 33642, 33648, 33655, 33661, 33666, 33672,
- 33678, 33683, 33689, 33695, 33703, 33708, 33714, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33720, 33727, 33734, 33739, 33748,
- 33756, 33764, 33771, 33778, 33785, 33792, 33800, 33808, 33818, 33828,
- 33836, 33844, 33852, 33860, 33869, 33878, 33886, 33894, 33903, 33912,
- 33922, 33932, 33941, 33950, 33958, 33966, 33974, 33982, 33992, 34002,
- 34010, 34018, 34026, 34034, 34042, 34050, 34058, 34066, 34074, 34082,
- 34090, 34098, 34107, 34116, 34125, 34134, 34144, 34154, 34161, 34168,
- 34176, 34184, 34193, 34202, 34210, 34218, 34230, 34242, 34251, 34260,
- 34269, 34278, 34285, 34292, 34300, 34308, 34316, 34324, 34332, 34340,
- 34348, 34356, 34365, 34374, 34383, 34392, 34401, 34410, 34420, 34430,
- 34440, 34450, 34459, 34468, 34475, 34482, 34490, 34498, 34506, 34514,
- 34522, 34530, 34542, 34554, 34563, 34572, 34580, 34588, 34596, 34604,
- 34615, 34626, 34637, 34648, 34660, 34672, 34680, 34688, 34696, 34704,
- 34713, 34722, 34731, 34740, 34748, 34756, 34764, 34772, 34780, 34788,
- 34797, 34806, 34816, 34826, 34834, 34842, 34850, 34858, 34866, 34874,
- 34881, 34888, 34896, 34904, 34912, 34920, 34928, 34936, 34944, 34952,
- 34960, 34968, 34976, 34984, 34992, 35000, 35008, 35016, 35025, 35034,
- 35043, 35051, 35060, 35069, 35078, 35087, 35097, 35106, 35112, 35117,
- 35124, 35131, 35139, 35147, 35156, 35165, 35175, 35185, 35196, 35207,
- 35217, 35227, 35237, 35247, 35256, 35265, 35275, 35285, 35296, 35307,
- 35317, 35327, 35337, 35347, 35354, 35361, 35369, 35377, 35384, 35391,
- 35400, 35409, 35419, 35429, 35440, 35451, 35461, 35471, 35481, 35491,
- 35500, 35509, 35517, 35525, 35532, 35539, 35547, 35555, 35564, 35573,
- 35583, 35593, 35604, 35615, 35625, 35635, 35645, 35655, 35664, 35673,
- 35683, 35693, 35704, 35715, 35725, 35735, 35745, 35755, 35762, 35769,
- 35777, 35785, 35794, 35803, 35813, 35823, 35834, 35845, 35855, 35865,
- 35875, 35885, 35893, 35901, 35909, 35917, 35926, 35935, 35943, 35951,
- 35958, 35965, 35972, 35979, 35987, 35995, 36003, 36011, 36022, 36032,
- 36043, 36053, 36064, 36074, 36082, 36090, 36101, 36111, 36122, 36132,
- 36143, 36153, 36161, 36169, 36180, 36190, 36201, 0, 0, 36211, 36219,
- 36227, 36238, 36248, 36259, 0, 0, 36269, 36277, 36285, 36296, 36306,
- 36317, 36327, 36338, 36348, 36356, 36364, 36375, 36385, 36396, 36406,
- 36417, 36427, 36435, 36443, 36454, 36464, 36475, 36485, 36496, 36506,
- 36514, 36522, 36533, 36543, 36554, 36564, 36575, 36585, 36593, 36601,
- 36612, 36622, 36633, 0, 0, 36643, 36651, 36659, 36670, 36680, 36691, 0,
- 0, 36701, 36709, 36717, 36728, 36738, 36749, 36759, 36770, 0, 36780, 0,
- 36788, 0, 36798, 0, 36808, 36818, 36826, 36834, 36845, 36855, 36866,
- 36876, 36887, 36897, 36905, 36913, 36924, 36934, 36945, 36955, 36966,
- 36976, 36984, 36992, 37000, 37008, 37016, 37024, 37032, 37040, 37048,
- 37056, 37064, 37072, 37080, 0, 0, 37088, 37099, 37109, 37123, 37136,
- 37150, 37163, 37177, 37190, 37201, 37211, 37225, 37238, 37252, 37265,
- 37279, 37292, 37303, 37313, 37327, 37340, 37354, 37367, 37381, 37394,
- 37405, 37415, 37429, 37442, 37456, 37469, 37483, 37496, 37507, 37517,
- 37531, 37544, 37558, 37571, 37585, 37598, 37609, 37619, 37633, 37646,
- 37660, 37673, 37687, 37700, 37708, 37716, 37727, 37735, 0, 37746, 37754,
- 37765, 37773, 37781, 37789, 37797, 37805, 37808, 37811, 37814, 37817,
- 37823, 37834, 37842, 0, 37853, 37861, 37872, 37880, 37888, 37896, 37904,
- 37912, 37918, 37924, 37930, 37938, 37946, 37957, 0, 0, 37968, 37976,
- 37987, 37995, 38003, 38011, 0, 38019, 38024, 38029, 38034, 38042, 38050,
- 38061, 38072, 38080, 38088, 38096, 38107, 38115, 38123, 38131, 38139,
- 38147, 38153, 38159, 0, 0, 38162, 38173, 38181, 0, 38192, 38200, 38211,
- 38219, 38227, 38235, 38243, 38251, 38254, 0, 38257, 38261, 38265, 38269,
- 38273, 38277, 38281, 38285, 38289, 38293, 38297, 38301, 38307, 38313,
- 38319, 38322, 38325, 38327, 38331, 38335, 38339, 38343, 38345, 38349,
- 38353, 38359, 38365, 38372, 38379, 38384, 38389, 38395, 38401, 38403,
- 38406, 38408, 38412, 38416, 38420, 38423, 38427, 38431, 38435, 38439,
- 38443, 38449, 38453, 38457, 38463, 38468, 38475, 38477, 38480, 38484,
- 38488, 38493, 38499, 38501, 38510, 38519, 38522, 38526, 38528, 38530,
- 38532, 38535, 38541, 38543, 38547, 38551, 38558, 38565, 38569, 38574,
- 38579, 38584, 38589, 38593, 38597, 38600, 38604, 38608, 38615, 38620,
- 38624, 38628, 38633, 38637, 38641, 38646, 38651, 38655, 38659, 38663,
- 38665, 38670, 38675, 38679, 38683, 38687, 38691, 0, 0, 0, 0, 0, 38695,
- 38701, 38707, 38714, 38721, 38726, 38731, 38735, 0, 0, 38741, 38744,
- 38747, 38750, 38753, 38756, 38759, 38763, 38767, 38772, 38777, 38782,
- 38788, 38792, 38795, 38798, 38801, 38804, 38807, 38810, 38813, 38816,
- 38819, 38823, 38827, 38832, 38837, 0, 38842, 38848, 38854, 38860, 38867,
- 38874, 38881, 38888, 38894, 38900, 38906, 38913, 38919, 0, 0, 0, 38926,
- 38929, 38932, 38935, 38940, 38943, 38946, 38949, 38952, 38955, 38958,
- 38962, 38965, 38968, 38971, 38974, 38977, 38982, 38985, 38988, 38991,
- 38994, 38997, 39002, 39005, 39008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 39013, 39018, 39023, 39030, 39038, 39043,
- 39048, 39052, 39056, 39061, 39068, 39075, 39079, 39084, 39089, 39094,
- 39099, 39106, 39111, 39116, 39121, 39130, 39137, 39144, 39148, 39153,
- 39159, 39164, 39171, 39179, 39187, 39191, 39195, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 39199, 39203, 39211, 39215, 39219, 39224, 39228,
- 39232, 39236, 39238, 39242, 39246, 39250, 39255, 39259, 39263, 39271,
- 39274, 39278, 39281, 39284, 39290, 39293, 39296, 39302, 39306, 39310,
- 39314, 39317, 39321, 39324, 39328, 39330, 39333, 39336, 39340, 39342,
- 39346, 39349, 39352, 39357, 39362, 39369, 39372, 39375, 39379, 39384,
- 39387, 39390, 39393, 39397, 39402, 39405, 39408, 39410, 39413, 39416,
- 39419, 39423, 39428, 39431, 39435, 39439, 39443, 39447, 39452, 39458,
- 39463, 39468, 39474, 39479, 39484, 39488, 39492, 39497, 39501, 39505,
- 39508, 39510, 39515, 39521, 39528, 39535, 39542, 39549, 39556, 39563,
- 39570, 39577, 39585, 39592, 39600, 39607, 39614, 39622, 39630, 39635,
- 39640, 39645, 39650, 39655, 39660, 39665, 39670, 39675, 39680, 39686,
- 39692, 39698, 39704, 39711, 39719, 39726, 39732, 39738, 39744, 39750,
- 39756, 39762, 39768, 39774, 39780, 39787, 39794, 39801, 39808, 39816,
- 39825, 39833, 39844, 39852, 39860, 39869, 39876, 39885, 39894, 39902,
- 39911, 0, 0, 0, 0, 0, 0, 39919, 39921, 39924, 39926, 39929, 39932, 39935,
- 39940, 39945, 39950, 39955, 39959, 39963, 39967, 39971, 39976, 39982,
- 39987, 39993, 39998, 40003, 40008, 40014, 40019, 40025, 40031, 40035,
- 40039, 40044, 40049, 40054, 40059, 40064, 40072, 40080, 40088, 40096,
- 40103, 40111, 40118, 40125, 40134, 40146, 40153, 40160, 40167, 40174,
- 40182, 40190, 40197, 40204, 40212, 40220, 40225, 40233, 40238, 40243,
- 40249, 40254, 40260, 40267, 40274, 40279, 40285, 40290, 40293, 40297,
- 40300, 40304, 40308, 40312, 40318, 40324, 40330, 40336, 40340, 40344,
- 40348, 40352, 40358, 40364, 40368, 40373, 40377, 40382, 40387, 40392,
- 40395, 40399, 40402, 40406, 40413, 40421, 40432, 40443, 40448, 40457,
- 40464, 40473, 40482, 40486, 40492, 40500, 40504, 40509, 40514, 40520,
- 40526, 40532, 40539, 40543, 40547, 40552, 40555, 40557, 40561, 40565,
- 40573, 40577, 40579, 40581, 40585, 40593, 40598, 40604, 40614, 40621,
- 40626, 40630, 40634, 40638, 40641, 40644, 40647, 40651, 40655, 40659,
- 40663, 40667, 40670, 40674, 40678, 40681, 40683, 40686, 40688, 40692,
- 40696, 40698, 40704, 40707, 40712, 40716, 40720, 40722, 40724, 40726,
- 40729, 40733, 40737, 40741, 40745, 40749, 40755, 40761, 40763, 40765,
- 40767, 40769, 40772, 40774, 40778, 40780, 40784, 40788, 40793, 40797,
- 40801, 40805, 40809, 40813, 40819, 40823, 40833, 40843, 40847, 40853,
- 40859, 40863, 40867, 40870, 40875, 40879, 40885, 40889, 40901, 40909,
- 40913, 40917, 40923, 40927, 40930, 40932, 40935, 40939, 40943, 40950,
- 40954, 40958, 40962, 40965, 40970, 40975, 40980, 40985, 40990, 40995,
- 41003, 41011, 41015, 41019, 41021, 41026, 41030, 41034, 41042, 41050,
- 41056, 41062, 41071, 41080, 41085, 41090, 41098, 41106, 41108, 41110,
- 41115, 41120, 41126, 41132, 41138, 41144, 41148, 41152, 41159, 41166,
- 41172, 41178, 41188, 41198, 41206, 41214, 41216, 41220, 41224, 41229,
- 41234, 41241, 41248, 41251, 41254, 41257, 41260, 41263, 41268, 41272,
- 41277, 41282, 41285, 41288, 41291, 41294, 41297, 41301, 41304, 41307,
- 41310, 41313, 41315, 41317, 41319, 41321, 41329, 41337, 41343, 41347,
- 41353, 41363, 41369, 41375, 41381, 41389, 41397, 41408, 41412, 41416,
- 41418, 41424, 41426, 41428, 41430, 41432, 41438, 41441, 41447, 41453,
- 41457, 41461, 41465, 41468, 41472, 41476, 41478, 41487, 41496, 41501,
- 41506, 41512, 41518, 41524, 41527, 41530, 41533, 41536, 41538, 41543,
- 41548, 41553, 41559, 41565, 41573, 41581, 41587, 41593, 41599, 41605,
- 41614, 41623, 41632, 41641, 41650, 41659, 41668, 41677, 41686, 41695,
- 41703, 41715, 41725, 41740, 41743, 41748, 41754, 41760, 41767, 41781,
- 41796, 41802, 41808, 41815, 41821, 41829, 41835, 41848, 41862, 41867,
- 41873, 41880, 41883, 41886, 41888, 41891, 41894, 41896, 41898, 41902,
- 41905, 41908, 41911, 41914, 41919, 41924, 41929, 41934, 41939, 41942,
- 41944, 41946, 41948, 41952, 41956, 41960, 41966, 41971, 41973, 41975,
- 41980, 41985, 41990, 41995, 42000, 42005, 42007, 42009, 42018, 42022,
- 42030, 42039, 42041, 42046, 42051, 42059, 42063, 42065, 42069, 42071,
- 42075, 42079, 42083, 42085, 42087, 42089, 42094, 42101, 42108, 42115,
- 42122, 42129, 42136, 42143, 42150, 42156, 42162, 42169, 42176, 42183,
- 42190, 42196, 42202, 42209, 42216, 42223, 42231, 42238, 42246, 42253,
- 42261, 42268, 42276, 42284, 42291, 42299, 42306, 42314, 42321, 42329,
- 42336, 42343, 42350, 42357, 42364, 42372, 42379, 42386, 42393, 42401,
- 42408, 42415, 42422, 42429, 42437, 42445, 42452, 42459, 42465, 42472,
- 42477, 42484, 42491, 42500, 42507, 42515, 42523, 42528, 42533, 42538,
- 42545, 42552, 42559, 42566, 42571, 42576, 42585, 42591, 42594, 42602,
- 42605, 42610, 42615, 42618, 42621, 42629, 42632, 42637, 42640, 42647,
- 42652, 42660, 42663, 42666, 42669, 42674, 42679, 42682, 42685, 42693,
- 42696, 42701, 42708, 42712, 42716, 42721, 42726, 42732, 42737, 42743,
- 42749, 42754, 42760, 42768, 42774, 42782, 42790, 42796, 42804, 42812,
- 42821, 42829, 42835, 42843, 42852, 42860, 42864, 42869, 42882, 42895,
- 42899, 42903, 42907, 42911, 42921, 42925, 42930, 42935, 42940, 42945,
- 42950, 42955, 42965, 42975, 42983, 42993, 43003, 43011, 43021, 43031,
- 43039, 43049, 43059, 43067, 43075, 43085, 43095, 43098, 43101, 43104,
- 43109, 43113, 43119, 43126, 43133, 43141, 43148, 43152, 43156, 43160,
- 43164, 43166, 43170, 43174, 43179, 43184, 43191, 43198, 43201, 43208,
- 43210, 43212, 43216, 43220, 43225, 43231, 43237, 43243, 43249, 43258,
- 43267, 43276, 43280, 43282, 43286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 43293, 43297, 43304, 43311, 43318, 43325, 43329, 43333, 43337, 43341,
- 43346, 43352, 43357, 43363, 43369, 43375, 43381, 43389, 43396, 43403,
- 43410, 43417, 43422, 43428, 43437, 43441, 43448, 43452, 43456, 43462,
- 43468, 43474, 43480, 43484, 43488, 43491, 43495, 43499, 43506, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43513,
- 43516, 43520, 43524, 43530, 43536, 43542, 43550, 43557, 43561, 43569, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43574, 43577,
- 43580, 43583, 43586, 43589, 43592, 43595, 43598, 43601, 43605, 43609,
- 43613, 43617, 43621, 43625, 43629, 43633, 43637, 43641, 43645, 43648,
- 43651, 43654, 43657, 43660, 43663, 43666, 43669, 43672, 43676, 43680,
- 43684, 43688, 43692, 43696, 43700, 43704, 43708, 43712, 43716, 43722,
- 43728, 43734, 43741, 43748, 43755, 43762, 43769, 43776, 43783, 43790,
- 43797, 43804, 43811, 43818, 43825, 43832, 43839, 43846, 43853, 43858,
- 43864, 43870, 43876, 43881, 43887, 43893, 43899, 43904, 43910, 43916,
- 43921, 43926, 43931, 43936, 43942, 43948, 43953, 43958, 43964, 43969,
- 43975, 43981, 43987, 43993, 43999, 44004, 44010, 44016, 44022, 44027,
- 44033, 44039, 44045, 44050, 44056, 44062, 44067, 44072, 44077, 44082,
- 44088, 44094, 44099, 44104, 44110, 44115, 44121, 44127, 44133, 44139,
- 44145, 44150, 44156, 44162, 44168, 44173, 44179, 44185, 44191, 44196,
- 44202, 44208, 44213, 44218, 44223, 44228, 44234, 44240, 44245, 44250,
- 44256, 44261, 44267, 44273, 44279, 44285, 44291, 44295, 44300, 44305,
- 44310, 44315, 44320, 44325, 44330, 44335, 44340, 44345, 44349, 44353,
- 44357, 44361, 44365, 44369, 44373, 44377, 44381, 44386, 44391, 44396,
- 44401, 44406, 44411, 44420, 44429, 44438, 44447, 44456, 44465, 44474,
- 44483, 44490, 44498, 44506, 44513, 44520, 44528, 44536, 44543, 44550,
- 44558, 44566, 44573, 44580, 44588, 44596, 44603, 44610, 44618, 44627,
- 44636, 44644, 44653, 44662, 44669, 44676, 44684, 44693, 44702, 44710,
- 44719, 44728, 44735, 44742, 44751, 44760, 44768, 44776, 44785, 44794,
- 44801, 44808, 44817, 44826, 44834, 44842, 44851, 44860, 44867, 44874,
- 44883, 44892, 44900, 44909, 44918, 44926, 44936, 44946, 44956, 44966,
- 44975, 44984, 44993, 45002, 45009, 45017, 45025, 45033, 45041, 45046,
- 45051, 45060, 45068, 45075, 45084, 45092, 45099, 45108, 45116, 45123,
- 45132, 45140, 45147, 45156, 45164, 45171, 45180, 45188, 45195, 45204,
- 45212, 45219, 45228, 45236, 45243, 45252, 45260, 45267, 45276, 45285,
- 45294, 45303, 45317, 45331, 45338, 45343, 45348, 45353, 45358, 45363,
- 45368, 45373, 45378, 45386, 45394, 45402, 45410, 45415, 45422, 45429,
- 45436, 45441, 45449, 45456, 45464, 45468, 45475, 45481, 45488, 45492,
- 45498, 45504, 45510, 45514, 45517, 45521, 45525, 45532, 45538, 45544,
- 45550, 45556, 45570, 45580, 45594, 45608, 45614, 45624, 45638, 45641,
- 45644, 45651, 45659, 45664, 45669, 45677, 45689, 45701, 45709, 45713,
- 45717, 45720, 45723, 45727, 45731, 45734, 45737, 45742, 45747, 45753,
- 45759, 45764, 45769, 45775, 45781, 45786, 45791, 45796, 45801, 45807,
- 45813, 45818, 45823, 45829, 45835, 45840, 45845, 45848, 45851, 45860,
- 45862, 45864, 45867, 45871, 45877, 45879, 45882, 45889, 45896, 45904,
- 45912, 45922, 45936, 45941, 45946, 45950, 45955, 45963, 45971, 45980,
- 45989, 45998, 46007, 46012, 46017, 46023, 46029, 46035, 46041, 46044,
- 46050, 46056, 46066, 46076, 46084, 46092, 46101, 46110, 46114, 46122,
- 46130, 46138, 46146, 46155, 46164, 46173, 46182, 46187, 46192, 46197,
- 46202, 46207, 46213, 46219, 46224, 46230, 46232, 46234, 46236, 46238,
- 46241, 46244, 46246, 46248, 46250, 46254, 46258, 46260, 46262, 46265,
- 46268, 46272, 46278, 46284, 46286, 46293, 46297, 46302, 46307, 46309,
- 46319, 46325, 46331, 46337, 46343, 46349, 46355, 46360, 46363, 46366,
- 46369, 46371, 46373, 46377, 46381, 46386, 46391, 46396, 46399, 46403,
- 46408, 46411, 46415, 46420, 46425, 46430, 46435, 46440, 46445, 46450,
- 46455, 46460, 46465, 46470, 46475, 46481, 46487, 46493, 46495, 46498,
- 46500, 46503, 46505, 46507, 46509, 46511, 46513, 46515, 46517, 46519,
- 46521, 46523, 46525, 46527, 46529, 46531, 46533, 46535, 46537, 46542,
- 46547, 46552, 46557, 46562, 46567, 46572, 46577, 46582, 46587, 46592,
- 46597, 46602, 46607, 46612, 46617, 46622, 46627, 46632, 46637, 46641,
- 46645, 46649, 46655, 46661, 46666, 46671, 46676, 46681, 46686, 46691,
- 46699, 46707, 46715, 46723, 46731, 46739, 46747, 46755, 46761, 46766,
- 46771, 46776, 46779, 46783, 46787, 46791, 46795, 46799, 46803, 46810,
- 46817, 46825, 46833, 46838, 46843, 46850, 46857, 46864, 46871, 46874,
- 46877, 46882, 46884, 46888, 46893, 46895, 46897, 46899, 46901, 46906,
- 46909, 46911, 46916, 46923, 46930, 46933, 46937, 46942, 46947, 46955,
- 46961, 46967, 46979, 46986, 46993, 46998, 47003, 47009, 47012, 47015,
- 47020, 47022, 47026, 47028, 47030, 47032, 47034, 47036, 47038, 47043,
- 47045, 47047, 47049, 47051, 47055, 47057, 47060, 47065, 47070, 47075,
- 47080, 47086, 47092, 47094, 47097, 47104, 47111, 47118, 47125, 47129,
- 47133, 47135, 47137, 47141, 47147, 47152, 47154, 47158, 47167, 47175,
- 47183, 47189, 47195, 47200, 47206, 47211, 47214, 47228, 47231, 47236,
- 47241, 47247, 47257, 47259, 47265, 47271, 47275, 47282, 47286, 47288,
- 47290, 47294, 47300, 47305, 47311, 47313, 47319, 47321, 47327, 47329,
- 47331, 47336, 47338, 47342, 47347, 47349, 47354, 47359, 47363, 47370, 0,
- 47380, 47386, 47389, 47395, 47398, 47403, 47408, 47412, 47414, 47416,
- 47420, 47424, 47428, 47432, 47437, 47439, 47444, 47447, 47450, 47453,
- 47457, 47461, 47466, 47470, 47475, 47480, 47484, 47490, 47497, 47500,
- 47506, 47511, 47515, 47520, 47526, 47532, 47539, 47545, 47552, 47559,
- 47561, 47568, 47572, 47579, 47585, 47590, 47596, 47600, 47605, 47608,
- 47614, 47620, 47627, 47635, 47642, 47651, 47661, 47668, 47674, 47678,
- 47686, 47691, 47700, 47703, 47706, 47715, 47726, 47733, 47735, 47741,
- 47746, 47748, 47751, 47755, 47763, 47772, 47775, 47780, 47785, 47793,
- 47801, 47809, 47817, 47823, 47829, 47835, 47843, 47848, 47851, 47855,
- 47858, 47870, 47880, 47891, 47900, 47911, 47921, 47930, 47936, 47944,
- 47948, 47956, 47960, 47968, 47975, 47982, 47991, 48000, 48010, 48020,
- 48030, 48040, 48049, 48058, 48068, 48078, 48087, 48096, 48102, 48108,
- 48114, 48120, 48126, 48132, 48138, 48144, 48150, 48157, 48163, 48169,
- 48175, 48181, 48187, 48193, 48199, 48205, 48211, 48218, 48225, 48232,
- 48239, 48246, 48253, 48260, 48267, 48274, 48281, 48289, 48294, 48297,
- 48301, 48305, 48311, 48314, 48320, 48326, 48331, 48335, 48340, 48346,
- 48353, 48356, 48363, 48370, 48374, 48383, 48392, 48397, 48403, 48408,
- 48413, 48420, 48427, 48435, 48443, 48452, 48456, 48465, 48470, 48474,
- 48481, 48485, 48492, 48500, 48505, 48513, 48517, 48522, 48526, 48531,
- 48535, 48540, 48545, 48554, 48556, 48560, 48564, 48571, 48578, 48583,
- 48591, 48597, 0, 48603, 0, 48606, 48611, 48616, 48624, 48628, 48635,
- 48643, 48651, 48656, 48661, 48667, 48672, 48677, 48683, 48688, 48691,
- 48695, 48699, 48706, 48715, 48720, 48729, 48738, 48744, 48750, 48755,
- 48760, 48765, 48770, 48776, 48782, 48790, 48798, 48804, 48810, 48815,
- 48820, 48827, 48834, 48840, 48843, 48846, 48850, 48854, 48858, 48863,
- 48869, 48875, 48882, 48889, 48894, 48898, 48902, 48906, 48910, 48914,
- 48918, 48922, 48926, 48930, 48934, 48938, 48942, 48946, 48950, 48954,
- 48958, 48962, 48966, 48970, 48974, 48978, 48982, 48986, 48990, 48994,
- 48998, 49002, 49006, 49010, 49014, 49018, 49022, 49026, 49030, 49034,
- 49038, 49042, 49046, 49050, 49054, 49058, 49062, 49066, 49070, 49074,
- 49078, 49082, 49086, 49090, 49094, 49098, 49102, 49106, 49110, 49114,
- 49118, 49122, 49126, 49130, 49134, 49138, 49142, 49146, 49150, 49154,
- 49158, 49162, 49166, 49170, 49174, 49178, 49182, 49186, 49190, 49194,
- 49198, 49202, 49206, 49210, 49214, 49218, 49222, 49226, 49230, 49234,
- 49238, 49242, 49246, 49250, 49254, 49258, 49262, 49266, 49270, 49274,
- 49278, 49282, 49286, 49290, 49294, 49298, 49302, 49306, 49310, 49314,
- 49318, 49322, 49326, 49330, 49334, 49338, 49342, 49346, 49350, 49354,
- 49358, 49362, 49366, 49370, 49374, 49378, 49382, 49386, 49390, 49394,
- 49398, 49402, 49406, 49410, 49414, 49418, 49422, 49426, 49430, 49434,
- 49438, 49442, 49446, 49450, 49454, 49458, 49462, 49466, 49470, 49474,
- 49478, 49482, 49486, 49490, 49494, 49498, 49502, 49506, 49510, 49514,
- 49518, 49522, 49526, 49530, 49534, 49538, 49542, 49546, 49550, 49554,
- 49558, 49562, 49566, 49570, 49574, 49578, 49582, 49586, 49590, 49594,
- 49598, 49602, 49606, 49610, 49614, 49618, 49622, 49626, 49630, 49634,
- 49638, 49642, 49646, 49650, 49654, 49658, 49662, 49666, 49670, 49674,
- 49678, 49682, 49686, 49690, 49694, 49698, 49702, 49706, 49710, 49714,
- 49718, 49722, 49726, 49730, 49734, 49738, 49742, 49746, 49750, 49754,
- 49758, 49762, 49766, 49770, 49774, 49778, 49782, 49786, 49790, 49794,
- 49798, 49802, 49806, 49810, 49814, 49818, 49822, 49826, 49830, 49834,
- 49838, 49842, 49846, 49850, 49854, 49858, 49862, 49866, 49870, 49874,
- 49878, 49882, 49886, 49890, 49894, 49898, 49902, 49906, 49910, 49914,
- 49918, 49925, 49933, 49939, 49945, 49952, 49959, 49965, 49971, 49977,
- 49983, 49988, 49993, 49998, 50003, 50009, 50015, 50023, 50030, 50036,
- 50042, 50050, 50059, 50066, 50076, 50087, 50090, 50093, 50097, 50101,
- 50108, 50115, 50126, 50137, 50147, 50157, 50164, 50171, 50178, 50185,
- 50196, 50207, 50218, 50229, 50239, 50249, 50261, 50273, 50284, 50295,
- 50307, 50319, 50328, 50338, 50348, 50359, 50370, 50377, 50384, 50391,
- 50398, 50408, 50418, 50426, 50434, 50441, 50448, 50455, 50462, 50469,
- 50474, 50479, 50485, 50493, 50503, 50511, 50519, 50527, 50535, 50543,
- 50551, 50559, 50567, 50576, 50585, 50595, 50605, 50614, 50623, 50633,
- 50643, 50652, 50661, 50671, 50681, 50690, 50699, 50709, 50719, 50733,
- 50750, 50764, 50781, 50795, 50809, 50823, 50837, 50847, 50858, 50868,
- 50879, 50896, 50913, 50921, 50927, 50934, 50941, 50948, 50955, 50960,
- 50966, 50971, 50976, 50982, 50987, 50992, 50997, 51002, 51007, 51014,
- 51019, 51026, 51031, 51036, 51040, 51044, 51051, 51058, 51065, 51072,
- 51079, 51086, 51099, 51112, 51125, 51138, 51146, 51154, 51160, 51166,
- 51173, 51180, 51187, 51194, 51198, 51203, 51211, 51219, 51227, 51234,
- 51238, 51246, 51254, 51258, 51262, 51267, 51274, 51282, 51290, 51310,
- 51330, 51350, 51370, 51390, 51410, 51430, 51450, 51456, 51463, 51472,
- 51480, 51488, 51493, 51496, 51499, 51504, 51507, 51526, 51533, 51539,
- 51545, 51549, 51552, 51555, 51558, 51570, 51583, 51590, 51597, 51600,
- 51604, 51607, 51612, 51617, 51622, 51628, 51637, 51644, 51651, 51659,
- 51666, 51673, 51676, 51682, 51688, 51691, 51694, 51699, 51704, 51710,
- 51716, 51720, 51725, 51732, 51736, 51742, 51746, 51750, 51758, 51770,
- 51779, 51783, 51785, 51794, 51803, 51809, 51812, 51818, 51824, 51829,
- 51834, 51839, 51844, 51849, 51854, 51856, 51862, 51867, 51874, 51878,
- 51884, 51887, 51891, 51898, 51905, 51907, 51909, 51915, 51921, 51927,
- 51936, 51945, 51952, 51959, 51965, 51971, 51976, 51981, 51986, 51992,
- 51998, 52003, 52010, 52014, 52018, 52031, 52044, 52056, 52065, 52071,
- 52078, 52083, 52088, 52093, 52098, 52103, 52105, 52112, 52119, 52126,
- 52133, 52140, 52148, 52154, 52159, 52165, 52171, 52177, 52184, 52190,
- 52198, 52206, 52214, 52222, 52229, 52235, 52241, 52250, 52254, 52263,
- 52272, 52281, 52289, 52293, 52299, 52306, 52313, 52317, 52323, 52330,
- 52335, 52340, 52346, 52351, 52356, 52363, 52370, 52375, 52380, 52388,
- 52396, 52406, 52416, 52423, 52430, 52434, 52438, 52450, 52456, 52462,
- 52467, 52472, 52479, 52486, 52492, 52498, 52507, 52515, 52523, 52530,
- 52537, 52544, 52550, 52557, 52563, 52570, 52577, 52584, 52591, 52597,
- 52602, 52611, 52621, 52628, 52637, 52643, 52648, 52653, 52663, 52669,
- 52675, 52681, 52689, 52694, 52701, 52708, 52719, 52726, 52733, 52740,
- 52747, 52754, 52761, 52768, 52780, 52792, 52803, 52814, 52827, 52840,
- 52845, 52850, 52859, 52868, 52875, 52882, 52891, 52900, 52908, 52916,
- 52924, 52932, 52942, 52952, 52966, 52980, 52988, 52996, 53008, 53020,
- 53028, 53036, 53046, 53056, 53061, 53066, 53075, 53084, 53089, 53094,
- 53102, 53108, 53114, 53122, 53130, 53143, 53156, 53160, 53164, 53171,
- 53178, 53185, 53193, 53201, 53210, 53219, 53225, 53231, 53238, 53245,
- 53252, 53259, 53268, 53277, 53280, 53283, 53288, 53293, 53299, 53305,
- 53312, 53319, 53329, 53339, 53346, 53353, 53361, 53369, 53377, 53385,
- 53393, 53401, 53408, 53415, 53419, 53423, 53430, 53437, 53442, 53447,
- 53452, 53457, 53463, 53477, 53484, 53491, 53495, 53497, 53499, 53504,
- 53509, 53514, 53518, 53526, 53533, 53540, 53548, 53560, 53568, 53576,
- 53587, 53591, 53595, 53601, 53609, 53622, 53629, 53636, 53643, 53648,
- 53655, 53664, 53672, 53678, 53684, 53690, 53699, 53708, 53716, 53725,
- 53730, 53733, 53738, 53744, 53750, 53756, 53762, 53766, 53769, 53773,
- 53777, 53783, 53789, 53795, 53801, 53805, 53809, 53816, 53823, 53830,
- 53837, 53844, 53851, 53861, 53871, 53878, 53885, 53893, 53901, 53905,
- 53910, 53915, 53921, 53927, 53930, 53933, 53936, 53939, 53943, 53948,
- 53953, 53958, 53963, 53968, 53972, 53976, 53980, 53984, 53988, 53992,
- 53996, 54002, 54006, 54012, 54017, 54024, 54032, 54039, 54047, 54054,
- 54062, 54071, 54078, 54088, 54099, 54105, 54114, 54120, 54129, 54138,
- 54144, 54150, 54154, 54158, 54167, 54176, 54183, 54190, 54199, 0, 0, 0,
- 54208, 54213, 54217, 54221, 54226, 54231, 54236, 54244, 54252, 54255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54259, 54264, 54269, 54274, 54279,
- 54284, 54289, 54294, 54299, 54304, 54309, 54315, 54319, 54324, 54329,
- 54334, 54339, 54344, 54349, 54354, 54359, 54364, 54369, 54374, 54379,
- 54384, 54389, 54394, 54399, 54404, 54409, 54414, 54419, 54424, 54429,
- 54435, 54440, 54446, 54455, 54460, 54468, 54475, 54484, 54489, 54494,
- 54499, 54505, 0, 54512, 54517, 54522, 54527, 54532, 54537, 54542, 54547,
- 54552, 54557, 54562, 54568, 54572, 54577, 54582, 54587, 54592, 54597,
- 54602, 54607, 54612, 54617, 54622, 54627, 54632, 54637, 54642, 54647,
- 54652, 54657, 54662, 54667, 54672, 54677, 54682, 54688, 54693, 54699,
- 54708, 54713, 54721, 54728, 54737, 54742, 54747, 54752, 54758, 0, 54765,
- 54773, 54781, 54791, 54798, 54806, 54812, 54821, 54829, 54837, 54845,
- 54853, 54861, 54869, 54874, 54881, 54887, 54894, 54902, 54909, 54916,
- 54924, 54930, 54936, 54943, 54950, 54960, 54970, 54977, 54984, 54989,
- 54999, 55009, 55014, 55019, 55024, 55029, 55034, 55039, 55044, 55049,
- 55054, 55059, 55064, 55069, 55074, 55079, 55084, 55089, 55094, 55099,
- 55104, 55109, 55114, 55119, 55124, 55129, 55134, 55139, 55144, 55149,
- 55154, 55159, 55163, 55167, 55172, 55177, 55182, 55187, 55192, 55197,
- 55202, 55207, 55212, 55217, 55222, 55227, 55232, 55237, 55242, 55247,
- 55252, 55257, 55264, 55271, 55278, 55285, 55292, 55299, 55306, 55313,
- 55320, 55327, 55334, 55341, 55348, 55355, 55360, 55365, 55372, 55379,
- 55386, 55393, 55400, 55407, 55414, 55421, 55428, 55435, 55442, 55449,
- 55455, 55461, 55467, 55473, 55480, 55487, 55494, 55501, 55508, 55515,
- 55522, 55529, 55536, 55543, 55551, 55559, 55567, 55575, 55583, 55591,
- 55599, 55607, 55611, 55617, 55623, 55627, 55633, 55639, 55645, 55652,
- 55659, 55666, 55673, 55678, 55684, 0, 0, 0, 0, 0, 0, 0, 55690, 55698,
- 55707, 55716, 55724, 55730, 55735, 55740, 55745, 55750, 55755, 55760,
- 55765, 55770, 55775, 55780, 55785, 55790, 55795, 55800, 55805, 55810,
- 55815, 55820, 55825, 55830, 55835, 55840, 55845, 55850, 55855, 55860,
- 55865, 55870, 55875, 55880, 55885, 55890, 55895, 55900, 55905, 55910,
- 55915, 55920, 55925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55930, 55934, 55939,
- 55944, 55949, 55954, 55963, 55968, 55973, 55978, 55983, 55988, 55993,
- 55998, 56003, 56010, 56015, 56020, 56029, 56036, 56041, 56046, 56051,
- 56058, 56063, 56070, 56075, 56080, 56087, 56094, 56099, 56104, 56109,
- 56116, 56123, 56128, 56133, 56138, 56143, 56148, 56155, 56162, 56167,
- 56172, 56177, 56182, 56187, 56192, 56197, 56202, 56207, 56212, 56217,
- 56224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56229, 56236, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 56241, 56247, 56251, 56255, 56259, 56263, 56267, 56271,
- 56275, 56279, 56283, 56287, 56293, 56297, 56301, 56305, 56309, 56313,
- 56317, 56321, 56325, 56329, 56333, 56337, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 56341, 56345, 56349, 56353, 56357, 56361, 56365, 0, 56369, 56373, 56377,
- 56381, 56385, 56389, 56393, 0, 56397, 56401, 56405, 56409, 56413, 56417,
- 56421, 0, 56425, 56429, 56433, 56437, 56441, 56445, 56449, 0, 56453,
- 56457, 56461, 56465, 56469, 56473, 56477, 0, 56481, 56485, 56489, 56493,
- 56497, 56501, 56505, 0, 56509, 56513, 56517, 56521, 56525, 56529, 56533,
- 0, 56537, 56541, 56545, 56549, 56553, 56557, 56561, 0, 56565, 56570,
- 56575, 56580, 56585, 56590, 56595, 56599, 56604, 56609, 56614, 56618,
- 56623, 56628, 56633, 56638, 56642, 56647, 56652, 56657, 56662, 56667,
- 56672, 56676, 56681, 56686, 56693, 56698, 56703, 56709, 56716, 56723,
- 56732, 56739, 56748, 56752, 56756, 56762, 56768, 56774, 56782, 56788,
- 56792, 56796, 56800, 56806, 56812, 56816, 56818, 56822, 56828, 56830,
- 56834, 56838, 56842, 56848, 56853, 56857, 56861, 56866, 56872, 56877,
- 56882, 56887, 56892, 56899, 56906, 56911, 56916, 56921, 56926, 56931,
- 56936, 56940, 56944, 56951, 56958, 56964, 56968, 56973, 56976, 56980, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 54847, 54852, 54857, 54862, 54867, 54872, 54877, 54882,
+ 54887, 54892, 54897, 54903, 54907, 54912, 54917, 54922, 54927, 54932,
+ 54937, 54942, 54947, 54952, 54957, 54962, 54967, 54972, 54977, 54982,
+ 54987, 54992, 54997, 55002, 55007, 55012, 55017, 55023, 55028, 55034,
+ 55043, 55048, 55056, 55063, 55072, 55077, 55082, 55087, 55093, 0, 55100,
+ 55105, 55110, 55115, 55120, 55125, 55130, 55135, 55140, 55145, 55150,
+ 55156, 55160, 55165, 55170, 55175, 55180, 55185, 55190, 55195, 55200,
+ 55205, 55210, 55215, 55220, 55225, 55230, 55235, 55240, 55245, 55250,
+ 55255, 55260, 55265, 55270, 55276, 55281, 55287, 55296, 55301, 55309,
+ 55316, 55325, 55330, 55335, 55340, 55346, 0, 55353, 55361, 55369, 55378,
+ 55385, 55393, 55399, 55408, 55416, 55424, 55432, 55440, 55448, 55456,
+ 55461, 55468, 55474, 55481, 55489, 55496, 55503, 55511, 55517, 55523,
+ 55530, 55537, 55547, 55557, 55564, 55571, 55576, 55586, 55596, 55601,
+ 55606, 55611, 55616, 55621, 55626, 55631, 55636, 55641, 55646, 55651,
+ 55656, 55661, 55666, 55671, 55676, 55681, 55686, 55691, 55696, 55701,
+ 55706, 55711, 55716, 55721, 55726, 55731, 55736, 55741, 55746, 55750,
+ 55754, 55759, 55764, 55769, 55774, 55779, 55784, 55789, 55794, 55799,
+ 55804, 55809, 55814, 55819, 55824, 55829, 55834, 55839, 55844, 55851,
+ 55858, 55865, 55872, 55879, 55886, 55893, 55900, 55907, 55914, 55921,
+ 55928, 55935, 55942, 55947, 55952, 55959, 55966, 55973, 55980, 55987,
+ 55994, 56001, 56008, 56015, 56022, 56029, 56036, 56042, 56048, 56054,
+ 56060, 56067, 56074, 56081, 56088, 56095, 56102, 56109, 56116, 56123,
+ 56130, 56138, 56146, 56154, 56162, 56170, 56178, 56186, 56194, 56198,
+ 56204, 56210, 56214, 56220, 56226, 56232, 56239, 56246, 56253, 56260,
+ 56265, 56271, 56277, 56284, 0, 0, 0, 0, 0, 56291, 56299, 56308, 56317,
+ 56325, 56331, 56336, 56341, 56346, 56351, 56356, 56361, 56366, 56371,
+ 56376, 56381, 56386, 56391, 56396, 56401, 56406, 56411, 56416, 56421,
+ 56426, 56431, 56436, 56441, 56446, 56451, 56456, 56461, 56466, 56471,
+ 56476, 56481, 56486, 56491, 56496, 56501, 56506, 56511, 56516, 56521,
+ 56526, 0, 56531, 0, 0, 0, 0, 0, 56536, 0, 0, 56541, 56545, 56550, 56555,
+ 56560, 56565, 56574, 56579, 56584, 56589, 56594, 56599, 56604, 56609,
+ 56614, 56621, 56626, 56631, 56640, 56647, 56652, 56657, 56662, 56669,
+ 56674, 56681, 56686, 56691, 56698, 56705, 56710, 56715, 56720, 56727,
+ 56734, 56739, 56744, 56749, 56754, 56759, 56766, 56773, 56778, 56783,
+ 56788, 56793, 56798, 56803, 56808, 56813, 56818, 56823, 56828, 56835,
+ 56840, 56845, 0, 0, 0, 0, 0, 0, 0, 56850, 56857, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 56862, 56867, 56871, 56875, 56879, 56883, 56887, 56891,
+ 56895, 56899, 56903, 56907, 56913, 56917, 56921, 56925, 56929, 56933,
+ 56937, 56941, 56945, 56949, 56953, 56957, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56961, 56965, 56969, 56973, 56977, 56981, 56985, 0, 56989, 56993, 56997,
+ 57001, 57005, 57009, 57013, 0, 57017, 57021, 57025, 57029, 57033, 57037,
+ 57041, 0, 57045, 57049, 57053, 57057, 57061, 57065, 57069, 0, 57073,
+ 57077, 57081, 57085, 57089, 57093, 57097, 0, 57101, 57105, 57109, 57113,
+ 57117, 57121, 57125, 0, 57129, 57133, 57137, 57141, 57145, 57149, 57153,
+ 0, 57157, 57161, 57165, 57169, 57173, 57177, 57181, 0, 57185, 57190,
+ 57195, 57200, 57205, 57210, 57215, 57219, 57224, 57229, 57234, 57238,
+ 57243, 57248, 57253, 57258, 57262, 57267, 57272, 57277, 57282, 57287,
+ 57292, 57296, 57301, 57306, 57313, 57318, 57323, 57329, 57336, 57343,
+ 57352, 57359, 57368, 57372, 57376, 57382, 57388, 57394, 57402, 57408,
+ 57412, 57416, 57420, 57426, 57432, 57436, 57438, 57442, 57448, 57450,
+ 57454, 57458, 57462, 57468, 57473, 57477, 57481, 57486, 57492, 57497,
+ 57502, 57507, 57512, 57519, 57526, 57531, 57536, 57541, 57546, 57551,
+ 57556, 57560, 57564, 57571, 57578, 57584, 57588, 57593, 57595, 57599,
+ 57607, 57611, 57615, 57619, 57623, 57629, 57635, 57639, 57645, 57649, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 56988, 56992, 56996, 57001, 57006, 57011, 57015, 57019,
- 57023, 57028, 57033, 57037, 57041, 57045, 57049, 57054, 57059, 57064,
- 57069, 57073, 57077, 57082, 57087, 57092, 57097, 57101, 0, 57105, 57109,
- 57113, 57117, 57121, 57125, 57129, 57134, 57139, 57143, 57148, 57153,
- 57162, 57166, 57170, 57174, 57181, 57185, 57190, 57195, 57199, 57203,
- 57209, 57214, 57219, 57224, 57229, 57233, 57237, 57241, 57245, 57249,
- 57254, 57259, 57263, 57267, 57272, 57277, 57282, 57286, 57290, 57295,
- 57300, 57306, 57312, 57316, 57322, 57328, 57332, 57338, 57344, 57349,
- 57354, 57358, 57364, 57368, 57372, 57378, 57384, 57389, 57394, 57398,
- 57402, 57410, 57416, 57422, 57428, 57433, 57438, 57443, 57449, 57453,
- 57459, 57463, 57467, 57473, 57479, 57485, 57491, 57497, 57503, 57509,
- 57515, 57521, 57527, 57533, 57539, 57543, 57549, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 57555, 57558, 57562, 57566, 57570, 57574, 57577, 57580,
- 57584, 57588, 57592, 57596, 57599, 57604, 57608, 57612, 57616, 57622,
- 57626, 57630, 57634, 57638, 57645, 57651, 57655, 57659, 57663, 57667,
- 57671, 57675, 57679, 57683, 57687, 57691, 57695, 57701, 57705, 57709,
- 57713, 57717, 57721, 57725, 57729, 57733, 57737, 57741, 57745, 57749,
- 57753, 57757, 57761, 57765, 57771, 57777, 57782, 57787, 57791, 57795,
- 57799, 57803, 57807, 57811, 57815, 57819, 57823, 57827, 57831, 57835,
- 57839, 57843, 57847, 57851, 57855, 57859, 57863, 57867, 57871, 57875,
- 57879, 57883, 57889, 57893, 57897, 57901, 57905, 57909, 57913, 57917,
- 57921, 57926, 57933, 57937, 57941, 57945, 57949, 57953, 57957, 57961,
- 57965, 57969, 57973, 57977, 57981, 57988, 57992, 57998, 58002, 58006,
- 58010, 58014, 58018, 58021, 58025, 58029, 58033, 58037, 58041, 58045,
- 58049, 58053, 58057, 58061, 58065, 58069, 58073, 58077, 58081, 58085,
- 58089, 58093, 58097, 58101, 58105, 58109, 58113, 58117, 58121, 58125,
- 58129, 58133, 58137, 58141, 58145, 58149, 58155, 58159, 58163, 58167,
- 58171, 58175, 58179, 58183, 58187, 58191, 58195, 58199, 58203, 58207,
- 58211, 58215, 58219, 58223, 58227, 58231, 58235, 58239, 58243, 58247,
- 58251, 58255, 58259, 58263, 58271, 58275, 58279, 58283, 58287, 58291,
- 58297, 58301, 58305, 58309, 58313, 58317, 58321, 58325, 58329, 58333,
- 58337, 58341, 58345, 58349, 58355, 58359, 58363, 58367, 58371, 58375,
- 58379, 58383, 58387, 58391, 58395, 58399, 58403, 58407, 58411, 58415,
- 58419, 58423, 58427, 58431, 58435, 58439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58443, 58452, 58460,
- 58472, 58483, 58491, 58500, 58509, 58519, 58531, 58543, 58555, 0, 0, 0,
- 0, 58561, 58564, 58567, 58572, 58575, 58582, 58586, 58590, 58594, 58598,
- 58602, 58607, 58612, 58616, 58620, 58625, 58630, 58635, 58640, 58643,
- 58646, 58652, 58658, 58663, 58668, 58675, 58682, 58686, 58690, 58694,
- 58702, 58708, 58715, 58720, 58725, 58730, 58735, 58740, 58745, 58750,
- 58755, 58760, 58765, 58770, 58775, 58780, 58785, 58791, 58796, 58800,
- 58806, 58817, 58827, 58842, 58852, 58856, 58865, 58871, 58877, 58883,
- 58888, 58891, 58896, 58900, 0, 58906, 58910, 58913, 58917, 58920, 58924,
- 58927, 58931, 58934, 58938, 58941, 58944, 58948, 58952, 58956, 58960,
- 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000,
- 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59041,
- 59045, 59049, 59053, 59057, 59060, 59064, 59067, 59071, 59075, 59079,
- 59083, 59086, 59090, 59093, 59097, 59101, 59105, 59109, 59113, 59117,
- 59121, 59125, 59129, 59133, 59137, 59141, 59144, 59148, 59152, 59156,
- 59160, 59164, 59167, 59172, 59176, 59181, 59185, 59188, 59192, 59196,
- 59200, 59204, 59209, 59213, 59217, 59221, 59225, 59228, 59232, 59236, 0,
- 0, 59241, 59249, 59257, 59264, 59271, 59275, 59281, 59286, 59291, 59295,
- 59298, 59302, 59305, 59309, 59312, 59316, 59319, 59323, 59326, 59329,
- 59333, 59337, 59341, 59345, 59349, 59353, 59357, 59361, 59365, 59369,
- 59373, 59377, 59381, 59385, 59389, 59393, 59397, 59401, 59405, 59409,
- 59413, 59417, 59421, 59426, 59430, 59434, 59438, 59442, 59445, 59449,
- 59452, 59456, 59460, 59464, 59468, 59471, 59475, 59478, 59482, 59486,
- 59490, 59494, 59498, 59502, 59506, 59510, 59514, 59518, 59522, 59526,
- 59529, 59533, 59537, 59541, 59545, 59549, 59552, 59557, 59561, 59566,
- 59570, 59573, 59577, 59581, 59585, 59589, 59594, 59598, 59602, 59606,
- 59610, 59613, 59617, 59621, 59626, 59630, 59634, 59638, 59642, 59647,
- 59654, 59658, 59664, 0, 0, 0, 0, 0, 59669, 59673, 59677, 59680, 59684,
- 59688, 59692, 59695, 59698, 59702, 59706, 59710, 59714, 59718, 59722,
- 59726, 59730, 59734, 59737, 59741, 59745, 59748, 59751, 59754, 59757,
- 59761, 59765, 59769, 59773, 59777, 59781, 59785, 59789, 59793, 59797,
- 59800, 59803, 59807, 59811, 59815, 59819, 0, 0, 0, 59823, 59827, 59831,
- 59835, 59839, 59843, 59847, 59851, 59855, 59859, 59863, 59867, 59871,
- 59875, 59879, 59883, 59887, 59891, 59895, 59899, 59903, 59907, 59911,
- 59915, 59919, 59923, 59927, 59931, 59935, 59939, 59943, 59946, 59950,
- 59953, 59957, 59961, 59964, 59968, 59972, 59975, 59979, 59983, 59987,
- 59991, 59994, 59998, 60002, 60006, 60010, 60014, 60018, 60021, 60024,
- 60028, 60032, 60036, 60040, 60044, 60048, 60052, 60056, 60060, 60064,
- 60068, 60072, 60076, 60080, 60084, 60088, 60092, 60096, 60100, 60104,
- 60108, 60112, 60116, 60120, 60124, 60128, 60132, 60136, 60140, 60144,
- 60148, 60152, 60156, 60160, 60164, 60168, 60172, 60176, 60180, 60184,
- 60188, 0, 60192, 60198, 60204, 60209, 60214, 60219, 60225, 60231, 60237,
- 60243, 60249, 60255, 60261, 60267, 60273, 60279, 60285, 60289, 60293,
- 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333,
- 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60370, 60375,
- 60380, 60385, 60389, 60393, 0, 0, 0, 0, 0, 60397, 60402, 60407, 60412,
- 60417, 60422, 60427, 60432, 60437, 60442, 60447, 60452, 60457, 60462,
- 60467, 60472, 60476, 60481, 60485, 60490, 60495, 60500, 60505, 60510,
- 60515, 60520, 60525, 60530, 60535, 60540, 60545, 60550, 60555, 60560,
- 60565, 60570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60575, 60580, 60585,
- 60590, 60594, 60599, 60603, 60608, 60613, 60618, 60623, 60628, 60632,
- 60637, 60642, 60647, 60652, 60656, 60660, 60664, 60668, 60672, 60676,
- 60680, 60684, 60688, 60692, 60696, 60700, 60704, 60708, 60713, 60718,
- 60723, 60728, 60733, 60738, 60743, 60748, 60753, 60758, 60763, 60768,
- 60773, 60778, 60783, 60789, 0, 60796, 60799, 60802, 60805, 60808, 60811,
- 60814, 60817, 60820, 60823, 60827, 60831, 60835, 60839, 60843, 60847,
- 60851, 60855, 60859, 60863, 60867, 60871, 60875, 60879, 60883, 60887,
- 60891, 60895, 60899, 60903, 60907, 60911, 60915, 60919, 60923, 60927,
- 60931, 60935, 60939, 60943, 60947, 60956, 60965, 60974, 60983, 60992,
- 61001, 61010, 61019, 61022, 61027, 61032, 61037, 61042, 61047, 61052,
- 61057, 61062, 61067, 61071, 61076, 61081, 61086, 61091, 61096, 61100,
- 61104, 61108, 61112, 61116, 61120, 61124, 61128, 61132, 61136, 61140,
- 61144, 61148, 61152, 61157, 61162, 61167, 61172, 61177, 61182, 61187,
- 61192, 61197, 61202, 61207, 61212, 61217, 61222, 61228, 61234, 61239,
- 61244, 61247, 61250, 61253, 61256, 61259, 61262, 61265, 61268, 61271,
- 61275, 61279, 61283, 61287, 61291, 61295, 61299, 61303, 61307, 61311,
- 61315, 61319, 61323, 61327, 61331, 61335, 61339, 61343, 61347, 61351,
- 61355, 61359, 61363, 61367, 61371, 61375, 61379, 61383, 61387, 61391,
- 61395, 61399, 61403, 61407, 61411, 61415, 61419, 61423, 61427, 61431,
- 61436, 61441, 61446, 61451, 61455, 61460, 61465, 61470, 61475, 61480,
- 61485, 61490, 61495, 61500, 61504, 61510, 61516, 61522, 61528, 61534,
- 61540, 61546, 61552, 61558, 61564, 61570, 61576, 61579, 61582, 61585,
- 61590, 61593, 61596, 61599, 61602, 61605, 61608, 61612, 61616, 61620,
- 61624, 61628, 61632, 61636, 61640, 61644, 61648, 61652, 61656, 61660,
- 61663, 61666, 61670, 61674, 61678, 61682, 61685, 61689, 61693, 61697,
- 61701, 61704, 61708, 61712, 61716, 61720, 61723, 61727, 61731, 61734,
- 61738, 61742, 61746, 61750, 61754, 61758, 61762, 0, 61766, 61769, 61772,
- 61775, 61778, 61781, 61784, 61787, 61790, 61793, 61796, 61799, 61802,
- 61805, 61808, 61811, 61814, 61817, 61820, 61823, 61826, 61829, 61832,
- 61835, 61838, 61841, 61844, 61847, 61850, 61853, 61856, 61859, 61862,
- 61865, 61868, 61871, 61874, 61877, 61880, 61883, 61886, 61889, 61892,
- 61895, 61898, 61901, 61904, 61907, 61910, 61913, 61916, 61919, 61922,
- 61925, 61928, 61931, 61934, 61937, 61940, 61943, 61946, 61949, 61952,
- 61955, 61958, 61961, 61964, 61967, 61970, 61973, 61976, 61979, 61982,
- 61985, 61988, 61991, 61994, 61997, 62000, 62003, 62006, 62009, 62012,
- 62015, 62018, 62021, 62024, 62027, 62030, 62038, 62045, 62052, 62059,
- 62066, 62073, 62080, 62087, 62094, 62101, 62109, 62117, 62125, 62133,
- 62141, 62149, 62157, 62165, 62173, 62181, 62189, 62197, 62205, 62213,
- 62221, 62224, 62227, 62230, 62232, 62235, 62238, 62241, 62246, 62251,
- 62254, 62261, 62268, 62275, 62282, 62285, 62290, 62292, 62296, 62298,
- 62300, 62303, 62306, 62309, 62312, 62315, 62318, 62321, 62326, 62331,
- 62334, 62337, 62340, 62343, 62346, 62349, 62352, 62356, 62359, 62362,
- 62365, 62368, 62371, 62375, 62378, 62381, 62384, 62389, 62394, 62399,
- 62404, 62409, 62414, 62419, 62424, 62429, 62437, 62439, 62442, 62445,
- 62448, 62451, 62456, 62464, 62467, 62470, 62474, 62477, 62480, 62483,
- 62488, 62491, 62494, 62499, 62502, 62505, 62510, 62513, 62516, 62521,
- 62526, 62531, 62534, 62537, 62540, 62543, 62549, 62552, 62555, 62558,
- 62560, 62563, 62566, 62569, 62574, 62577, 62580, 62583, 62586, 62589,
- 62594, 62597, 62600, 62603, 62606, 62609, 62612, 62615, 62618, 62621,
- 62626, 62630, 62637, 62644, 62651, 62658, 62665, 62672, 62679, 62686,
- 62693, 62701, 62709, 62717, 62725, 62733, 62741, 62749, 62757, 62765,
- 62773, 62781, 62789, 62797, 62805, 62813, 62821, 62829, 62837, 62845,
- 62853, 62861, 62869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57653, 57657,
+ 57661, 57666, 57671, 57676, 57680, 57684, 57688, 57693, 57698, 57702,
+ 57706, 57710, 57714, 57719, 57724, 57729, 57734, 57738, 57742, 57747,
+ 57752, 57757, 57762, 57766, 0, 57770, 57774, 57778, 57782, 57786, 57790,
+ 57794, 57799, 57804, 57808, 57813, 57818, 57827, 57831, 57835, 57839,
+ 57846, 57850, 57855, 57860, 57864, 57868, 57874, 57879, 57884, 57889,
+ 57894, 57898, 57902, 57906, 57910, 57914, 57919, 57924, 57928, 57932,
+ 57937, 57942, 57947, 57951, 57955, 57960, 57965, 57971, 57977, 57981,
+ 57987, 57993, 57997, 58003, 58009, 58014, 58019, 58023, 58029, 58033,
+ 58037, 58043, 58049, 58054, 58059, 58063, 58067, 58075, 58081, 58087,
+ 58093, 58098, 58103, 58108, 58114, 58118, 58124, 58128, 58132, 58138,
+ 58144, 58150, 58156, 58162, 58168, 58174, 58180, 58186, 58192, 58198,
+ 58204, 58208, 58214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58220, 58223,
+ 58227, 58231, 58235, 58239, 58242, 58245, 58249, 58253, 58257, 58261,
+ 58264, 58269, 58273, 58277, 58281, 58286, 58290, 58294, 58298, 58302,
+ 58308, 58314, 58318, 58322, 58326, 58330, 58334, 58338, 58342, 58346,
+ 58350, 58354, 58358, 58364, 58368, 58372, 58376, 58380, 58384, 58388,
+ 58392, 58396, 58400, 58404, 58408, 58412, 58416, 58420, 58424, 58428,
+ 58434, 58440, 58445, 58450, 58454, 58458, 58462, 58466, 58470, 58474,
+ 58478, 58482, 58486, 58490, 58494, 58498, 58502, 58506, 58510, 58514,
+ 58518, 58522, 58526, 58530, 58534, 58538, 58542, 58546, 58552, 58556,
+ 58560, 58564, 58568, 58572, 58576, 58580, 58584, 58589, 58596, 58600,
+ 58604, 58608, 58612, 58616, 58620, 58624, 58628, 58632, 58636, 58640,
+ 58644, 58651, 58655, 58661, 58665, 58669, 58673, 58677, 58681, 58684,
+ 58688, 58692, 58696, 58700, 58704, 58708, 58712, 58716, 58720, 58724,
+ 58728, 58732, 58736, 58740, 58744, 58748, 58752, 58756, 58760, 58764,
+ 58768, 58772, 58776, 58780, 58784, 58788, 58792, 58796, 58800, 58804,
+ 58808, 58812, 58818, 58822, 58826, 58830, 58834, 58838, 58842, 58846,
+ 58850, 58854, 58858, 58862, 58866, 58870, 58874, 58878, 58882, 58886,
+ 58890, 58894, 58898, 58902, 58906, 58910, 58914, 58918, 58922, 58926,
+ 58934, 58938, 58942, 58946, 58950, 58954, 58960, 58964, 58968, 58972,
+ 58976, 58980, 58984, 58988, 58992, 58996, 59000, 59004, 59008, 59012,
+ 59018, 59022, 59026, 59030, 59034, 59038, 59042, 59046, 59050, 59054,
+ 59058, 59062, 59066, 59070, 59074, 59078, 59082, 59086, 59090, 59094,
+ 59098, 59102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 59106, 59115, 59123, 59135, 59146, 59154, 59163, 59172,
+ 59182, 59194, 59206, 59218, 0, 0, 0, 0, 59224, 59227, 59230, 59235,
+ 59238, 59245, 59249, 59253, 59257, 59261, 59265, 59270, 59275, 59279,
+ 59283, 59288, 59293, 59298, 59303, 59306, 59309, 59315, 59321, 59326,
+ 59331, 59338, 59345, 59349, 59353, 59357, 59365, 59371, 59378, 59383,
+ 59388, 59393, 59398, 59403, 59408, 59413, 59418, 59423, 59428, 59433,
+ 59438, 59443, 59448, 59454, 59459, 59463, 59469, 59480, 59490, 59505,
+ 59515, 59519, 59529, 59535, 59541, 59547, 59552, 59555, 59560, 59564, 0,
+ 59570, 59574, 59577, 59581, 59584, 59588, 59591, 59595, 59598, 59602,
+ 59605, 59608, 59612, 59616, 59620, 59624, 59628, 59632, 59636, 59640,
+ 59644, 59647, 59651, 59655, 59659, 59663, 59667, 59671, 59675, 59679,
+ 59683, 59687, 59691, 59695, 59699, 59704, 59708, 59712, 59716, 59720,
+ 59723, 59727, 59730, 59734, 59738, 59742, 59746, 59749, 59753, 59756,
+ 59760, 59764, 59768, 59772, 59776, 59780, 59784, 59788, 59792, 59796,
+ 59800, 59804, 59807, 59811, 59815, 59819, 59823, 59827, 59830, 59835,
+ 59839, 59844, 59848, 59851, 59855, 59859, 59863, 59867, 59872, 59876,
+ 59880, 59884, 59888, 59892, 59896, 59900, 0, 0, 59905, 59913, 59921,
+ 59928, 59935, 59939, 59945, 59950, 59955, 59959, 59962, 59966, 59969,
+ 59973, 59976, 59980, 59983, 59987, 59990, 59993, 59997, 60001, 60005,
+ 60009, 60013, 60017, 60021, 60025, 60029, 60032, 60036, 60040, 60044,
+ 60048, 60052, 60056, 60060, 60064, 60068, 60072, 60076, 60080, 60084,
+ 60089, 60093, 60097, 60101, 60105, 60108, 60112, 60115, 60119, 60123,
+ 60127, 60131, 60134, 60138, 60141, 60145, 60149, 60153, 60157, 60161,
+ 60165, 60169, 60173, 60177, 60181, 60185, 60189, 60192, 60196, 60200,
+ 60204, 60208, 60212, 60215, 60220, 60224, 60229, 60233, 60236, 60240,
+ 60244, 60248, 60252, 60257, 60261, 60265, 60269, 60273, 60277, 60281,
+ 60285, 60290, 60294, 60298, 60302, 60306, 60311, 60318, 60322, 60328, 0,
+ 0, 0, 0, 0, 60333, 60338, 60343, 60347, 60352, 60357, 60362, 60367,
+ 60371, 60376, 60381, 60386, 60391, 60396, 60401, 60406, 60411, 60416,
+ 60420, 60425, 60430, 60435, 60439, 60443, 60447, 60452, 60457, 60462,
+ 60467, 60472, 60477, 60482, 60487, 60492, 60497, 60501, 60505, 60510,
+ 60515, 60520, 60525, 0, 0, 0, 60530, 60534, 60538, 60542, 60546, 60550,
+ 60554, 60558, 60562, 60566, 60570, 60574, 60578, 60582, 60586, 60590,
+ 60594, 60598, 60602, 60606, 60610, 60614, 60618, 60622, 60626, 60630,
+ 60634, 60638, 60642, 60646, 60650, 60653, 60657, 60660, 60664, 60668,
+ 60671, 60675, 60679, 60682, 60686, 60690, 60694, 60698, 60701, 60705,
+ 60709, 60713, 60717, 60721, 60725, 60728, 60731, 60735, 60739, 60743,
+ 60747, 60751, 60755, 60759, 60763, 60767, 60771, 60775, 60779, 60783,
+ 60787, 60791, 60795, 60799, 60803, 60807, 60811, 60815, 60819, 60823,
+ 60827, 60831, 60835, 60839, 60843, 60847, 60851, 60855, 60859, 60863,
+ 60867, 60871, 60875, 60879, 60883, 60887, 60891, 60895, 0, 60899, 60905,
+ 60911, 60916, 60921, 60926, 60932, 60938, 60944, 60950, 60956, 60962,
+ 60968, 60974, 60980, 60986, 60992, 60997, 61002, 61007, 61012, 61017,
+ 61022, 61027, 61032, 61037, 61042, 61047, 61052, 61057, 61062, 61067,
+ 61072, 61077, 61082, 61087, 61092, 61098, 61104, 61110, 61116, 61121,
+ 61126, 0, 0, 0, 0, 0, 61131, 61136, 61141, 61146, 61151, 61156, 61161,
+ 61166, 61171, 61176, 61181, 61186, 61191, 61196, 61201, 61206, 61211,
+ 61216, 61221, 61226, 61231, 61236, 61241, 61246, 61251, 61256, 61261,
+ 61266, 61271, 61276, 61281, 61286, 61291, 61296, 61301, 61306, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 61311, 61316, 61321, 61326, 61330, 61335,
+ 61339, 61344, 61349, 61354, 61359, 61364, 61368, 61373, 61378, 61383,
+ 61388, 61392, 61396, 61400, 61404, 61408, 61412, 61416, 61420, 61424,
+ 61428, 61432, 61436, 61440, 61444, 61449, 61454, 61459, 61464, 61469,
+ 61474, 61479, 61484, 61489, 61494, 61499, 61504, 61509, 61514, 61519,
+ 61525, 0, 61532, 61535, 61538, 61541, 61544, 61547, 61550, 61553, 61556,
+ 61559, 61563, 61567, 61571, 61575, 61579, 61583, 61587, 61591, 61595,
+ 61599, 61603, 61607, 61611, 61615, 61619, 61623, 61627, 61631, 61635,
+ 61639, 61643, 61647, 61651, 61655, 61659, 61663, 61667, 61671, 61675,
+ 61679, 61683, 61692, 61701, 61710, 61719, 61728, 61737, 61746, 61755,
+ 61758, 61763, 61768, 61773, 61778, 61783, 61788, 61793, 61798, 61803,
+ 61807, 61812, 61817, 61822, 61827, 61832, 61836, 61840, 61844, 61848,
+ 61852, 61856, 61860, 61864, 61868, 61872, 61876, 61880, 61884, 61888,
+ 61893, 61898, 61903, 61908, 61913, 61918, 61923, 61928, 61933, 61938,
+ 61943, 61948, 61953, 61958, 61964, 61970, 61975, 61980, 61983, 61986,
+ 61989, 61992, 61995, 61998, 62001, 62004, 62007, 62011, 62015, 62019,
+ 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, 62055, 62059,
+ 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, 62095, 62099,
+ 62103, 62107, 62111, 62115, 62119, 62123, 62127, 62131, 62135, 62139,
+ 62143, 62147, 62151, 62155, 62159, 62163, 62167, 62172, 62177, 62182,
+ 62187, 62191, 62196, 62201, 62206, 62211, 62216, 62221, 62226, 62231,
+ 62236, 62240, 62247, 62254, 62261, 62268, 62275, 62282, 62289, 62296,
+ 62303, 62310, 62317, 62324, 62327, 62330, 62333, 62338, 62341, 62344,
+ 62347, 62350, 62353, 62356, 62360, 62364, 62368, 62372, 62375, 62379,
+ 62383, 62387, 62391, 62395, 62399, 62403, 62407, 62410, 62413, 62417,
+ 62421, 62425, 62429, 62432, 62436, 62440, 62444, 62448, 62451, 62455,
+ 62459, 62463, 62467, 62470, 62474, 62478, 62481, 62485, 62489, 62493,
+ 62497, 62501, 62505, 62509, 0, 62513, 62516, 62519, 62522, 62525, 62528,
+ 62531, 62534, 62537, 62540, 62543, 62546, 62549, 62552, 62555, 62558,
+ 62561, 62564, 62567, 62570, 62573, 62576, 62579, 62582, 62585, 62588,
+ 62591, 62594, 62597, 62600, 62603, 62606, 62609, 62612, 62615, 62618,
+ 62621, 62624, 62627, 62630, 62633, 62636, 62639, 62642, 62645, 62648,
+ 62651, 62654, 62657, 62660, 62663, 62666, 62669, 62672, 62675, 62678,
+ 62681, 62684, 62687, 62690, 62693, 62696, 62699, 62702, 62705, 62708,
+ 62711, 62714, 62717, 62720, 62723, 62726, 62729, 62732, 62735, 62738,
+ 62741, 62744, 62747, 62750, 62753, 62756, 62759, 62762, 62765, 62768,
+ 62771, 62774, 62777, 62786, 62794, 62802, 62810, 62818, 62826, 62834,
+ 62842, 62850, 62858, 62867, 62876, 62885, 62894, 62903, 62912, 62921,
+ 62930, 62939, 62948, 62957, 62966, 62975, 62984, 62993, 62996, 62999,
+ 63002, 63004, 63007, 63010, 63013, 63018, 63023, 63026, 63033, 63040,
+ 63047, 63054, 63057, 63062, 63064, 63068, 63070, 63072, 63075, 63078,
+ 63081, 63084, 63087, 63090, 63093, 63098, 63103, 63106, 63109, 63112,
+ 63115, 63118, 63121, 63124, 63128, 63131, 63134, 63137, 63140, 63143,
+ 63147, 63150, 63153, 63156, 63161, 63166, 63171, 63176, 63181, 63186,
+ 63191, 63196, 63202, 63210, 63212, 63215, 63218, 63221, 63224, 63230,
+ 63238, 63241, 63244, 63249, 63252, 63255, 63258, 63263, 63266, 63269,
+ 63274, 63277, 63280, 63285, 63288, 63291, 63296, 63301, 63306, 63309,
+ 63312, 63315, 63318, 63324, 63327, 63330, 63333, 63335, 63338, 63341,
+ 63344, 63349, 63352, 63355, 63358, 63361, 63364, 63369, 63372, 63375,
+ 63378, 63381, 63384, 63387, 63390, 63393, 63396, 63401, 63405, 63413,
+ 63421, 63429, 63437, 63445, 63453, 63461, 63469, 63477, 63486, 63495,
+ 63504, 63513, 63522, 63531, 63540, 63549, 63558, 63567, 63576, 63585,
+ 63594, 63603, 63612, 63621, 63630, 63639, 63648, 63657, 63666, 63675, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63678, 63687, 63696, 63707,
+ 63714, 63719, 63724, 63731, 63738, 63744, 63749, 63754, 63759, 63764,
+ 63771, 63776, 63781, 63786, 63797, 63802, 63807, 63814, 63819, 63826,
+ 63831, 63836, 63843, 63850, 63857, 63866, 63875, 63880, 63885, 63890,
+ 63897, 63902, 63912, 63919, 63924, 63929, 63934, 63939, 63944, 63949,
+ 63958, 63965, 63972, 63977, 63984, 63989, 63996, 64005, 64016, 64021,
+ 64030, 64035, 64042, 64051, 64060, 64065, 64070, 64077, 64083, 64090,
+ 64097, 64101, 64105, 64108, 64112, 64116, 64120, 64124, 64128, 64132,
+ 64136, 64139, 64143, 64147, 64151, 64155, 64159, 64163, 64166, 64170,
+ 64174, 64177, 64181, 64185, 64189, 64193, 64197, 64201, 64205, 64209,
+ 64213, 64217, 64221, 64225, 64229, 64233, 64237, 64241, 64245, 64249,
+ 64253, 64257, 64261, 64265, 64269, 64273, 64277, 64281, 64285, 64289,
+ 64293, 64297, 64301, 64305, 64309, 64313, 64317, 64321, 64325, 64329,
+ 64333, 64337, 64341, 64345, 64349, 64353, 64356, 64360, 64364, 64368,
+ 64372, 64376, 64380, 64384, 64388, 64392, 64396, 64400, 64404, 64408,
+ 64412, 64416, 64420, 64424, 64428, 64432, 64436, 64440, 64444, 64448,
+ 64452, 64456, 64460, 64464, 64468, 64472, 64476, 64480, 64484, 64488,
+ 64492, 64496, 64500, 64504, 64508, 64512, 64516, 64520, 64524, 64528,
+ 64532, 64536, 64540, 64544, 64548, 64552, 64556, 64560, 64564, 64568,
+ 64572, 64576, 64580, 64584, 64588, 64592, 64596, 64600, 64604, 64608,
+ 64612, 64616, 64620, 64624, 64628, 64632, 64636, 64640, 64644, 64648,
+ 64652, 64656, 64660, 64664, 64668, 64672, 64676, 64680, 64684, 64688,
+ 64692, 64696, 64700, 64704, 64708, 64712, 64716, 64720, 64724, 64728,
+ 64732, 64736, 64740, 64744, 64748, 64752, 64756, 64760, 64764, 64768,
+ 64772, 64776, 64780, 64784, 64788, 64792, 64796, 64800, 64804, 64808,
+ 64812, 64816, 64820, 64824, 64827, 64831, 64835, 64839, 64843, 64847,
+ 64851, 64855, 64859, 64863, 64867, 64871, 64875, 64879, 64883, 64887,
+ 64891, 64895, 64899, 64903, 64907, 64911, 64915, 64919, 64923, 64927,
+ 64931, 64935, 64939, 64943, 64947, 64951, 64955, 64959, 64963, 64967,
+ 64971, 64975, 64979, 64983, 64987, 64991, 64995, 64999, 65003, 65007,
+ 65011, 65015, 65019, 65023, 65027, 65031, 65035, 65039, 65043, 65047,
+ 65051, 65055, 65059, 65063, 65067, 65071, 65075, 65079, 65083, 65087,
+ 65091, 65095, 65099, 65103, 65107, 65111, 65115, 65119, 65123, 65127,
+ 65131, 65135, 65139, 65143, 65147, 65151, 65155, 65159, 65163, 65167,
+ 65171, 65175, 65179, 65183, 65187, 65191, 65195, 65199, 65203, 65207,
+ 65211, 65215, 65219, 65223, 65227, 65231, 65235, 65239, 65243, 65247,
+ 65251, 65255, 65259, 65263, 65267, 65271, 65275, 65279, 65283, 65287,
+ 65290, 65294, 65298, 65302, 65306, 65310, 65314, 65318, 65322, 65326,
+ 65330, 65334, 65338, 65342, 65346, 65350, 65354, 65358, 65362, 65366,
+ 65370, 65374, 65378, 65382, 65386, 65390, 65394, 65398, 65402, 65406,
+ 65410, 65414, 65418, 65422, 65426, 65430, 65434, 65438, 65442, 65446,
+ 65450, 65454, 65458, 65462, 65466, 65470, 65474, 65478, 65482, 65486,
+ 65490, 65494, 65498, 65502, 65506, 65510, 65514, 65518, 65522, 65526,
+ 65530, 65534, 65538, 65542, 65546, 65550, 65554, 65558, 65562, 65566,
+ 65570, 65574, 65578, 65582, 65586, 65590, 65594, 65598, 65602, 65606,
+ 65610, 65614, 65618, 65622, 65626, 65630, 65634, 65638, 65642, 65646,
+ 65649, 65653, 65657, 65661, 65665, 65669, 65673, 65677, 65681, 65685,
+ 65689, 65693, 65697, 65701, 65705, 65709, 65713, 65717, 65721, 65725,
+ 65729, 65733, 65737, 65741, 65745, 65749, 65753, 65757, 65761, 65765,
+ 65769, 65773, 65777, 65781, 65785, 65789, 65793, 65797, 65801, 65805,
+ 65809, 65813, 65817, 65821, 65825, 65829, 65833, 65837, 65841, 65845,
+ 65849, 65853, 65857, 65861, 65865, 65869, 65873, 65877, 65881, 65885,
+ 65889, 65893, 65897, 65901, 65905, 65909, 65913, 65917, 65921, 65925,
+ 65929, 65933, 65937, 65941, 65945, 65949, 65953, 65957, 65961, 65965,
+ 65969, 65973, 65977, 65981, 65985, 65989, 65993, 65997, 66001, 66005,
+ 66009, 66013, 66017, 66021, 66025, 66029, 66033, 66037, 66041, 66045,
+ 66049, 66053, 66057, 66061, 66065, 66069, 66073, 66077, 66081, 66085,
+ 66089, 66093, 66097, 66101, 66105, 66109, 66113, 66117, 66121, 66125,
+ 66129, 66133, 66137, 66141, 66144, 66148, 66152, 66156, 66160, 66164,
+ 66168, 66172, 66176, 66180, 66184, 66188, 66192, 66196, 66200, 66204,
+ 66208, 66212, 66216, 66220, 66224, 66228, 66232, 66236, 66240, 66244,
+ 66248, 66252, 66256, 66260, 66264, 66268, 66272, 66276, 66280, 66284,
+ 66288, 66292, 66296, 66300, 66304, 66308, 66312, 66316, 66320, 66324,
+ 66328, 66332, 66336, 66340, 66344, 66348, 66352, 66356, 66360, 66364,
+ 66368, 66372, 66376, 66380, 66384, 66388, 66392, 66396, 66400, 66404,
+ 66408, 66412, 66416, 66420, 66424, 66428, 66432, 66436, 66440, 66444,
+ 66448, 66452, 66456, 66460, 66464, 66468, 66472, 66476, 66480, 66484,
+ 66488, 66492, 66496, 66500, 66504, 66508, 66512, 66516, 66520, 66524,
+ 66528, 66532, 66536, 66540, 66544, 66548, 66552, 66556, 66560, 66564,
+ 66568, 66572, 66576, 66580, 66584, 66588, 66592, 66596, 66599, 66603,
+ 66607, 66611, 66615, 66619, 66623, 66627, 66631, 66635, 66639, 66643,
+ 66647, 66651, 66655, 66659, 66663, 66667, 66671, 66675, 66679, 66683,
+ 66687, 66691, 66695, 66699, 66703, 66707, 66711, 66715, 66719, 66723,
+ 66727, 66731, 66735, 66739, 66743, 66747, 66751, 66755, 66759, 66763,
+ 66767, 66771, 66775, 66779, 66783, 66787, 66791, 66795, 66799, 66803,
+ 66807, 66811, 66815, 66819, 66823, 66827, 66831, 66835, 66839, 66843,
+ 66847, 66851, 66855, 66859, 66863, 66867, 66871, 66875, 66879, 66883,
+ 66887, 66891, 66895, 66899, 66903, 66907, 66911, 66915, 66919, 66923,
+ 66927, 66931, 66935, 66939, 66943, 66947, 66951, 66955, 66959, 66963,
+ 66967, 66971, 66975, 66979, 66983, 66987, 66991, 66995, 66999, 67003,
+ 67007, 67011, 67015, 67019, 67023, 67027, 67031, 67035, 67039, 67043,
+ 67047, 67051, 67055, 67059, 67063, 67067, 67071, 67075, 67079, 67083,
+ 67087, 67091, 67095, 67099, 67103, 67107, 67111, 67115, 67119, 67123,
+ 67127, 67131, 67135, 67139, 67143, 67147, 67151, 67155, 67159, 67163,
+ 67167, 67171, 67175, 67179, 67183, 67187, 67191, 67195, 67199, 67202,
+ 67206, 67210, 67214, 67218, 67222, 67226, 67230, 67233, 67237, 67241,
+ 67245, 67249, 67253, 67257, 67261, 67265, 67269, 67273, 67277, 67281,
+ 67285, 67289, 67293, 67297, 67301, 67305, 67309, 67313, 67317, 67321,
+ 67325, 67329, 67333, 67337, 67341, 67345, 67349, 67353, 67357, 67361,
+ 67365, 67369, 67373, 67377, 67381, 67385, 67389, 67393, 67397, 67401,
+ 67405, 67409, 67413, 67417, 67421, 67425, 67429, 67433, 67437, 67441,
+ 67445, 67449, 67453, 67457, 67461, 67465, 67469, 67473, 67477, 67481,
+ 67485, 67489, 67493, 67497, 67501, 67505, 67509, 67513, 67517, 67521,
+ 67525, 67529, 67533, 67537, 67541, 67545, 67549, 67553, 67557, 67561,
+ 67565, 67569, 67573, 67577, 67581, 67585, 67589, 67593, 67597, 67601,
+ 67605, 67609, 67613, 67617, 67621, 67625, 67629, 67633, 67637, 67641,
+ 67645, 67649, 67653, 67657, 67661, 67665, 67669, 67673, 67677, 67681,
+ 67685, 67689, 67693, 67697, 67701, 67705, 67709, 67713, 67717, 67721,
+ 67725, 67729, 67733, 67737, 67741, 67745, 67749, 67753, 67757, 67761,
+ 67765, 67769, 67773, 67777, 67781, 67785, 67789, 67793, 67797, 67801,
+ 67805, 67809, 67813, 67817, 67821, 67825, 67829, 67833, 67837, 67841,
+ 67845, 67849, 67853, 67857, 67861, 67865, 67869, 67873, 67877, 67881,
+ 67885, 67889, 67893, 67897, 67901, 67905, 67909, 67913, 67917, 67921,
+ 67925, 67929, 67933, 67937, 67941, 67945, 67949, 67953, 67957, 67960,
+ 67964, 67968, 67972, 67976, 67980, 67984, 67988, 67992, 67996, 68000,
+ 68004, 68008, 68012, 68016, 68020, 68024, 68028, 68032, 68036, 68040,
+ 68044, 68048, 68052, 68056, 68060, 68064, 68068, 68072, 68076, 68080,
+ 68084, 68088, 68092, 68096, 68100, 68104, 68108, 68112, 68116, 68120,
+ 68124, 68128, 68132, 68136, 68140, 68144, 68148, 68152, 68156, 68160,
+ 68164, 68168, 68172, 68176, 68180, 68184, 68188, 68192, 68196, 68200,
+ 68204, 68208, 68212, 68216, 68220, 68224, 68228, 68232, 68236, 68240,
+ 68244, 68248, 68252, 68256, 68260, 68264, 68268, 68272, 68276, 68280,
+ 68284, 68288, 68292, 68296, 68300, 68304, 68308, 68312, 68316, 68320,
+ 68324, 68328, 68332, 68336, 68340, 68344, 68348, 68352, 68356, 68360,
+ 68364, 68368, 68372, 68376, 68380, 68384, 68388, 68392, 68396, 68400,
+ 68404, 68408, 68412, 68416, 68420, 68424, 68428, 68432, 68436, 68440,
+ 68444, 68448, 68452, 68456, 68460, 68464, 68468, 68472, 68476, 68480,
+ 68484, 68488, 68492, 68496, 68500, 68504, 68508, 68512, 68516, 68520,
+ 68524, 68528, 68532, 68536, 68540, 68544, 68548, 68552, 68556, 68560,
+ 68564, 68568, 68572, 68576, 68580, 68584, 68588, 68592, 68596, 68600,
+ 68604, 68608, 68612, 68616, 68620, 68624, 68628, 68632, 68636, 68640,
+ 68644, 68648, 68652, 68656, 68660, 68664, 68668, 68672, 68676, 68680,
+ 68684, 68688, 68692, 68696, 68700, 68704, 68708, 68712, 68716, 68720,
+ 68724, 68728, 68732, 68736, 68740, 0, 0, 0, 68744, 68748, 68752, 68756,
+ 68760, 68764, 68768, 68772, 68776, 68780, 68784, 68788, 68792, 68796,
+ 68800, 68804, 68808, 68812, 68816, 68820, 68824, 68828, 68832, 68836,
+ 68840, 68844, 68848, 68852, 68856, 68860, 68864, 68868, 68872, 68876,
+ 68880, 68884, 68888, 68892, 68896, 68900, 68904, 68908, 68912, 68916,
+ 68920, 68924, 68928, 68932, 68936, 68940, 68944, 68948, 68952, 68956,
+ 68960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68964, 68969, 68973, 68978, 68983,
+ 68988, 68993, 68998, 69002, 69007, 69012, 69017, 69022, 69027, 69032,
+ 69037, 69041, 69045, 69050, 69054, 69059, 69064, 69069, 69073, 69078,
+ 69083, 69088, 69093, 69098, 69102, 69107, 69111, 69116, 69120, 69125,
+ 69129, 69133, 69137, 69142, 69147, 69152, 69160, 69168, 69176, 69184,
+ 69191, 69199, 69205, 69213, 69217, 69221, 69225, 69229, 69233, 69237,
+ 69241, 69245, 69249, 69253, 69257, 69261, 69265, 69269, 69273, 69277,
+ 69281, 69285, 69289, 69293, 69297, 69301, 69305, 69309, 69313, 69317,
+ 69321, 69325, 69329, 69333, 69337, 69341, 69345, 69349, 69353, 69357,
+ 69360, 69364, 69368, 69372, 69376, 69380, 69384, 69388, 69392, 69396,
+ 69400, 69404, 69408, 69412, 69416, 69420, 69424, 69428, 69432, 69436,
+ 69440, 69444, 69448, 69452, 69456, 69460, 69464, 69468, 69472, 69476,
+ 69480, 69484, 69488, 69492, 69496, 69500, 69504, 69507, 69511, 69515,
+ 69518, 69522, 69526, 69530, 69533, 69537, 69541, 69545, 69549, 69553,
+ 69557, 69561, 69565, 69569, 69573, 69577, 69581, 69585, 69589, 69592,
+ 69596, 69600, 69603, 69607, 69611, 69615, 69619, 69623, 69627, 69630,
+ 69633, 69637, 69641, 69645, 69648, 69651, 69655, 69659, 69663, 69667,
+ 69671, 69675, 69679, 69683, 69687, 69691, 69695, 69699, 69703, 69707,
+ 69711, 69715, 69719, 69723, 69727, 69731, 69735, 69739, 69743, 69747,
+ 69751, 69755, 69759, 69763, 69767, 69771, 69775, 69779, 69783, 69787,
+ 69791, 69795, 69799, 69802, 69806, 69810, 69814, 69818, 69822, 69826,
+ 69830, 69834, 69838, 69842, 69846, 69850, 69854, 69858, 69862, 69866,
+ 69870, 69874, 69878, 69882, 69886, 69890, 69894, 69898, 69902, 69906,
+ 69910, 69914, 69918, 69922, 69926, 69930, 69934, 69938, 69942, 69946,
+ 69949, 69953, 69957, 69961, 69965, 69969, 69973, 69977, 69981, 69985,
+ 69989, 69993, 69997, 70001, 70005, 70009, 70013, 70016, 70020, 70024,
+ 70028, 70032, 70036, 70040, 70044, 70048, 70052, 70056, 70060, 70064,
+ 70068, 70072, 70076, 70080, 70084, 70088, 70092, 70096, 70100, 70103,
+ 70107, 70111, 70115, 70119, 70123, 70127, 70131, 70135, 70139, 70143,
+ 70147, 70151, 70155, 70159, 70163, 70167, 70171, 70175, 70179, 70183,
+ 70187, 70191, 70195, 70199, 70203, 70207, 70211, 70215, 70219, 70223,
+ 70227, 70231, 70235, 70239, 70243, 70247, 70251, 70255, 70259, 70263,
+ 70267, 70271, 70275, 70278, 70283, 70287, 70293, 70298, 70304, 70308,
+ 70312, 70316, 70320, 70324, 70328, 70332, 70336, 70340, 70344, 70348,
+ 70352, 70356, 70360, 70363, 70366, 70369, 70372, 70375, 70378, 70381,
+ 70384, 70387, 70392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 70398, 70403, 70408, 70413, 70418, 70425, 70432, 70437, 70442,
+ 70447, 70452, 70459, 70466, 70473, 70480, 70487, 70494, 70504, 70514,
+ 70521, 70528, 70535, 70542, 70548, 70554, 70563, 70572, 70579, 70586,
+ 70597, 70608, 70613, 70618, 70625, 70632, 70639, 70646, 70653, 70660,
+ 70667, 70674, 70680, 70686, 70692, 70698, 70705, 70712, 70717, 70721,
+ 70728, 70735, 70742, 70746, 70753, 70757, 70762, 70766, 70772, 70777,
+ 70783, 70788, 70792, 70796, 70799, 70802, 70807, 70812, 70817, 70822,
+ 70827, 70832, 70837, 70842, 70847, 70852, 70861, 70870, 70875, 70880,
+ 70885, 70890, 70895, 70900, 70905, 70910, 70915, 70920, 70925, 0, 0, 0,
+ 0, 0, 0, 0, 70930, 70936, 70939, 70942, 70945, 70949, 70953, 70957,
+ 70961, 70964, 70968, 70971, 70975, 70978, 70982, 70986, 70990, 70994,
+ 70998, 71002, 71006, 71009, 71013, 71017, 71021, 71025, 71029, 71033,
+ 71037, 71041, 71045, 71049, 71053, 71057, 71061, 71065, 71068, 71072,
+ 71076, 71080, 71084, 71088, 71092, 71096, 71100, 71104, 71108, 71112,
+ 71116, 71120, 71124, 71128, 71132, 71136, 71140, 71144, 71148, 71152,
+ 71156, 71160, 71164, 71167, 71171, 71175, 71179, 71183, 71187, 71191,
+ 71195, 71198, 71202, 71206, 71210, 71214, 71218, 71222, 71226, 71230,
+ 71234, 71238, 71242, 71246, 71251, 71256, 71259, 71264, 71267, 71270,
+ 71273, 0, 0, 0, 0, 0, 0, 0, 0, 71277, 71286, 71295, 71304, 71313, 71322,
+ 71331, 71340, 71349, 71357, 71364, 71372, 71379, 71387, 71397, 71406,
+ 71416, 71425, 71435, 71443, 71450, 71458, 71465, 71473, 71478, 71483,
+ 71488, 71497, 71503, 71509, 71516, 71525, 71533, 71541, 71549, 71556,
+ 71563, 71570, 71577, 71582, 71587, 71592, 71597, 71602, 71607, 71612,
+ 71617, 71625, 71633, 71639, 71645, 71650, 71655, 71660, 71665, 71670,
+ 71675, 71680, 71685, 71693, 71701, 71706, 71711, 71721, 71731, 71738,
+ 71745, 71754, 71763, 71775, 71787, 71793, 71799, 71807, 71815, 71825,
+ 71835, 71842, 71849, 71854, 71859, 71871, 71883, 71891, 71899, 71909,
+ 71919, 71931, 71943, 71952, 71961, 71968, 71975, 71982, 71989, 71998,
+ 72007, 72012, 72017, 72024, 72031, 72038, 72045, 72057, 72069, 72074,
+ 72079, 72084, 72089, 72094, 72099, 72104, 72109, 72113, 72118, 72123,
+ 72128, 72133, 72138, 72144, 72149, 72154, 72161, 72168, 72175, 72182,
+ 72189, 72198, 72207, 72213, 72219, 72225, 72231, 72238, 72245, 72252,
+ 72259, 72266, 72270, 72277, 72282, 72287, 72294, 0, 72307, 72315, 72323,
+ 72330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72337, 72346, 72355, 72364,
+ 72373, 72382, 72391, 72400, 72409, 72418, 72427, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72434,
+ 72441, 72447, 72454, 72462, 72470, 72477, 72485, 72492, 72498, 72504,
+ 72511, 72517, 72523, 72529, 72536, 72543, 72550, 72557, 72564, 72571,
+ 72578, 72585, 72592, 72599, 72606, 72613, 72620, 72627, 72633, 72640,
+ 72647, 72654, 72661, 72668, 72675, 72682, 72689, 72696, 72703, 72710,
+ 72717, 72724, 72731, 72738, 72745, 72752, 72759, 72767, 72775, 72783,
+ 72791, 0, 0, 0, 0, 72799, 72808, 72817, 72826, 72835, 72844, 72853,
+ 72860, 72867, 72874, 0, 0, 0, 0, 0, 0, 72881, 72885, 72890, 72895, 72900,
+ 72905, 72910, 72915, 72920, 72925, 72930, 72935, 72939, 72943, 72948,
+ 72953, 72957, 72962, 72967, 72972, 72977, 72982, 72987, 72992, 72996,
+ 73000, 73005, 73010, 73014, 73018, 73022, 73026, 73030, 73034, 73038,
+ 73043, 73048, 73053, 73058, 73063, 73070, 73076, 73081, 73086, 73091,
+ 73096, 73102, 73109, 73115, 73122, 73128, 73134, 73139, 73146, 73152,
+ 73157, 0, 0, 0, 0, 0, 0, 0, 0, 73163, 73167, 73171, 73174, 73178, 73181,
+ 73185, 73188, 73192, 73196, 73201, 73205, 73210, 73213, 73217, 73221,
+ 73224, 73228, 73232, 73235, 73239, 73243, 73247, 73251, 73255, 73259,
+ 73263, 73267, 73271, 73275, 73279, 73283, 73287, 73291, 73295, 73299,
+ 73303, 73307, 73310, 73313, 73317, 73321, 73325, 73328, 73331, 73334,
+ 73338, 73342, 73346, 73350, 73353, 73356, 73360, 73365, 73370, 73374,
+ 73379, 73383, 73388, 73393, 73399, 73404, 73410, 73414, 73419, 73424,
+ 73428, 73433, 73438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73442, 73445, 73449,
+ 73453, 73456, 73459, 73462, 73465, 73468, 73471, 73474, 73477, 0, 0, 0,
+ 0, 0, 0, 73480, 73485, 73489, 73493, 73497, 73501, 73505, 73509, 73513,
+ 73517, 73521, 73525, 73529, 73533, 73537, 73541, 73545, 73550, 73555,
+ 73561, 73567, 73574, 73579, 73584, 73590, 73594, 73599, 73602, 0, 0, 0,
+ 0, 73605, 73612, 73618, 73624, 73630, 73636, 73642, 73648, 73654, 73660,
+ 73666, 73672, 73679, 73686, 73693, 73699, 73706, 73713, 73720, 73727,
+ 73734, 73740, 73746, 73753, 73759, 73766, 73773, 73779, 73785, 73792,
+ 73799, 73806, 73812, 73819, 73826, 73832, 73839, 73845, 73852, 73859,
+ 73865, 73871, 73878, 73884, 73891, 73898, 73907, 73914, 73921, 73925,
+ 73930, 73935, 73940, 73945, 73949, 73953, 73958, 73962, 73967, 73972,
+ 73977, 73981, 73985, 73990, 73994, 73999, 74003, 74008, 74013, 74018,
+ 74023, 74027, 74032, 74037, 74042, 74048, 74053, 74059, 74065, 74071,
+ 74077, 74083, 74088, 74094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74098,
+ 74103, 74107, 74111, 74115, 74119, 74123, 74127, 74131, 74135, 74139,
+ 74143, 74147, 74151, 74155, 74159, 74163, 74167, 74171, 74175, 74179,
+ 74183, 74187, 74191, 74195, 74199, 74203, 74207, 74211, 74215, 0, 0, 0,
+ 74219, 74223, 74227, 74231, 74235, 74238, 74244, 74247, 74251, 74254,
+ 74260, 74266, 74274, 74277, 74281, 74284, 74287, 74293, 74299, 74303,
+ 74309, 74313, 74317, 74323, 74327, 74333, 74339, 74343, 74347, 74353,
+ 74357, 74363, 74369, 74373, 74379, 74383, 74389, 74392, 74395, 74401,
+ 74405, 74411, 74414, 74417, 74420, 74426, 74430, 74434, 74440, 74446,
+ 74449, 74452, 74458, 74463, 74468, 74473, 74480, 74485, 74492, 74497,
+ 74504, 74509, 74514, 74519, 74524, 74527, 74531, 74535, 74540, 74545,
+ 74550, 74555, 74560, 74565, 74570, 74575, 74582, 74587, 0, 74594, 74597,
+ 74601, 74604, 74607, 74610, 74613, 74616, 74619, 74622, 74625, 0, 0, 0,
+ 0, 74628, 74635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74640, 74643, 74646, 74649, 74652,
+ 74656, 74659, 74662, 74666, 74670, 74674, 74678, 74682, 74686, 74690,
+ 74694, 74698, 74702, 74706, 74710, 74714, 74718, 74722, 74726, 74730,
+ 74733, 74737, 74740, 74744, 74748, 74752, 74756, 74760, 74763, 74767,
+ 74770, 74773, 74777, 74781, 74785, 74788, 74791, 74796, 74800, 74805,
+ 74810, 74814, 74819, 74823, 74828, 74833, 74838, 74842, 74846, 74851, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 74856, 74861, 74866, 74871, 74877, 74882, 74887,
+ 74892, 74897, 74902, 74906, 74910, 74915, 74920, 0, 0, 74926, 74930,
+ 74933, 74936, 74939, 74942, 74945, 74948, 74951, 74954, 0, 0, 74957,
+ 74962, 74967, 74973, 74980, 74986, 74992, 74998, 75004, 75010, 75016,
+ 75022, 75028, 75034, 75040, 75046, 75051, 75056, 75061, 75067, 75073,
+ 75080, 75086, 75092, 75097, 75104, 75111, 75118, 75124, 75129, 75134,
+ 75139, 0, 0, 0, 0, 75147, 75153, 75159, 75165, 75171, 75177, 75183,
+ 75189, 75195, 75201, 75207, 75213, 75219, 75225, 75231, 75237, 75243,
+ 75249, 75255, 75261, 75267, 75272, 75277, 75283, 75289, 75295, 75301,
+ 75307, 75313, 75319, 75325, 75331, 75337, 75343, 75349, 75355, 75361,
+ 75367, 75373, 75379, 75385, 75391, 75397, 75403, 75409, 75415, 75421,
+ 75426, 75431, 75437, 75442, 75446, 75451, 75455, 75459, 75463, 75469,
+ 75474, 75479, 75484, 75489, 75494, 75499, 75504, 75511, 75518, 75525, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62872, 62881, 62890, 62901, 62908, 62913, 62918, 62925, 62932, 62938,
- 62943, 62948, 62953, 62958, 62965, 62970, 62975, 62980, 62991, 62996,
- 63001, 63008, 63013, 63020, 63025, 63030, 63037, 63044, 63051, 63060,
- 63069, 63074, 63079, 63084, 63091, 63096, 63106, 63113, 63118, 63123,
- 63128, 63133, 63138, 63143, 63152, 63159, 63166, 63171, 63178, 63183,
- 63190, 63199, 63210, 63215, 63224, 63229, 63236, 63245, 63254, 63259,
- 63264, 63271, 63277, 63284, 63291, 63295, 63299, 63302, 63306, 63310,
- 63314, 63318, 63322, 63326, 63330, 63333, 63337, 63341, 63345, 63349,
- 63353, 63357, 63360, 63364, 63368, 63371, 63375, 63379, 63383, 63387,
- 63391, 63395, 63399, 63403, 63407, 63411, 63415, 63419, 63423, 63427,
- 63431, 63435, 63439, 63443, 63447, 63451, 63455, 63459, 63463, 63467,
- 63471, 63475, 63479, 63483, 63487, 63491, 63495, 63499, 63503, 63507,
- 63511, 63515, 63519, 63523, 63527, 63531, 63535, 63539, 63543, 63547,
- 63550, 63554, 63558, 63562, 63566, 63570, 63574, 63578, 63582, 63586,
- 63590, 63594, 63598, 63602, 63606, 63610, 63614, 63618, 63622, 63626,
- 63630, 63634, 63638, 63642, 63646, 63650, 63654, 63658, 63662, 63666,
- 63670, 63674, 63678, 63682, 63686, 63690, 63694, 63698, 63702, 63706,
- 63710, 63714, 63718, 63722, 63726, 63730, 63734, 63738, 63742, 63746,
- 63750, 63754, 63758, 63762, 63766, 63770, 63774, 63778, 63782, 63786,
- 63790, 63794, 63798, 63802, 63806, 63810, 63814, 63818, 63822, 63826,
- 63830, 63834, 63838, 63842, 63846, 63850, 63854, 63858, 63862, 63866,
- 63870, 63874, 63878, 63882, 63886, 63890, 63894, 63898, 63902, 63906,
- 63910, 63914, 63918, 63922, 63926, 63930, 63934, 63938, 63942, 63946,
- 63950, 63954, 63958, 63962, 63966, 63970, 63974, 63978, 63982, 63986,
- 63990, 63994, 63998, 64002, 64006, 64010, 64014, 64018, 64021, 64025,
- 64029, 64033, 64037, 64041, 64045, 64049, 64053, 64057, 64061, 64065,
- 64069, 64073, 64077, 64081, 64085, 64089, 64093, 64097, 64101, 64105,
- 64109, 64113, 64117, 64121, 64125, 64129, 64133, 64137, 64141, 64145,
- 64149, 64153, 64157, 64161, 64165, 64169, 64173, 64177, 64181, 64185,
- 64189, 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225,
- 64229, 64233, 64237, 64241, 64245, 64249, 64253, 64257, 64261, 64265,
- 64269, 64273, 64277, 64281, 64285, 64289, 64293, 64297, 64301, 64305,
- 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345,
- 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385,
- 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425,
- 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 64461, 64465,
- 64469, 64473, 64477, 64481, 64484, 64488, 64492, 64496, 64500, 64504,
- 64508, 64512, 64516, 64520, 64524, 64528, 64532, 64536, 64540, 64544,
- 64548, 64552, 64556, 64560, 64564, 64568, 64572, 64576, 64580, 64584,
- 64588, 64592, 64596, 64600, 64604, 64608, 64612, 64616, 64620, 64624,
- 64628, 64632, 64636, 64640, 64644, 64648, 64652, 64656, 64660, 64664,
- 64668, 64672, 64676, 64680, 64684, 64688, 64692, 64696, 64700, 64704,
- 64708, 64712, 64716, 64720, 64724, 64728, 64732, 64736, 64740, 64744,
- 64748, 64752, 64756, 64760, 64764, 64768, 64772, 64776, 64780, 64784,
- 64788, 64792, 64796, 64800, 64804, 64808, 64812, 64816, 64820, 64824,
- 64828, 64832, 64836, 64840, 64843, 64847, 64851, 64855, 64859, 64863,
- 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903,
- 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943,
- 64947, 64951, 64955, 64959, 64963, 64967, 64971, 64975, 64979, 64983,
- 64987, 64991, 64995, 64999, 65003, 65007, 65011, 65015, 65019, 65023,
- 65027, 65031, 65035, 65039, 65043, 65047, 65051, 65055, 65059, 65063,
- 65067, 65071, 65075, 65079, 65083, 65087, 65091, 65095, 65099, 65103,
- 65107, 65111, 65115, 65119, 65123, 65127, 65131, 65135, 65139, 65143,
- 65147, 65151, 65155, 65159, 65163, 65167, 65171, 65175, 65179, 65183,
- 65187, 65191, 65195, 65199, 65203, 65207, 65211, 65215, 65219, 65223,
- 65227, 65231, 65235, 65239, 65243, 65247, 65251, 65255, 65259, 65263,
- 65267, 65271, 65275, 65279, 65283, 65287, 65291, 65295, 65299, 65303,
- 65307, 65311, 65315, 65319, 65323, 65327, 65331, 65335, 65338, 65342,
- 65346, 65350, 65354, 65358, 65362, 65366, 65370, 65374, 65378, 65382,
- 65386, 65390, 65394, 65398, 65402, 65406, 65410, 65414, 65418, 65422,
- 65426, 65430, 65434, 65438, 65442, 65446, 65450, 65454, 65458, 65462,
- 65466, 65470, 65474, 65478, 65482, 65486, 65490, 65494, 65498, 65502,
- 65506, 65510, 65514, 65518, 65522, 65526, 65530, 65534, 65538, 65542,
- 65546, 65550, 65554, 65558, 65562, 65566, 65570, 65574, 65578, 65582,
- 65586, 65590, 65594, 65598, 65602, 65606, 65610, 65614, 65618, 65622,
- 65626, 65630, 65634, 65638, 65642, 65646, 65650, 65654, 65658, 65662,
- 65666, 65670, 65674, 65678, 65682, 65686, 65690, 65694, 65698, 65702,
- 65706, 65710, 65714, 65718, 65722, 65726, 65730, 65734, 65738, 65742,
- 65746, 65750, 65754, 65758, 65762, 65766, 65770, 65774, 65778, 65782,
- 65786, 65790, 65793, 65797, 65801, 65805, 65809, 65813, 65817, 65821,
- 65825, 65829, 65833, 65837, 65841, 65845, 65849, 65853, 65857, 65861,
- 65865, 65869, 65873, 65877, 65881, 65885, 65889, 65893, 65897, 65901,
- 65905, 65909, 65913, 65917, 65921, 65925, 65929, 65933, 65937, 65941,
- 65945, 65949, 65953, 65957, 65961, 65965, 65969, 65973, 65977, 65981,
- 65985, 65989, 65993, 65997, 66001, 66005, 66009, 66013, 66017, 66021,
- 66025, 66029, 66033, 66037, 66041, 66045, 66049, 66053, 66057, 66061,
- 66065, 66069, 66073, 66077, 66081, 66085, 66089, 66093, 66097, 66101,
- 66105, 66109, 66113, 66117, 66121, 66125, 66129, 66133, 66137, 66141,
- 66145, 66149, 66153, 66157, 66161, 66165, 66169, 66173, 66177, 66181,
- 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221,
- 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261,
- 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301,
- 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341,
- 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381,
- 66385, 66389, 66393, 66396, 66400, 66404, 66408, 66412, 66416, 66420,
- 66424, 66428, 66432, 66436, 66440, 66444, 66448, 66452, 66456, 66460,
- 66464, 66468, 66472, 66476, 66480, 66484, 66488, 66492, 66496, 66500,
- 66504, 66508, 66512, 66516, 66520, 66524, 66528, 66532, 66536, 66540,
- 66544, 66548, 66552, 66556, 66560, 66564, 66568, 66572, 66576, 66580,
- 66584, 66588, 66592, 66596, 66600, 66604, 66608, 66612, 66616, 66620,
- 66624, 66628, 66632, 66636, 66640, 66644, 66648, 66652, 66656, 66660,
- 66664, 66668, 66672, 66676, 66680, 66684, 66688, 66692, 66696, 66700,
- 66704, 66708, 66712, 66716, 66720, 66724, 66728, 66732, 66736, 66740,
- 66744, 66748, 66752, 66756, 66760, 66764, 66768, 66772, 66776, 66780,
- 66784, 66788, 66792, 66796, 66800, 66804, 66808, 66812, 66816, 66820,
- 66824, 66828, 66832, 66836, 66840, 66844, 66848, 66852, 66856, 66860,
- 66864, 66868, 66872, 66876, 66880, 66884, 66888, 66892, 66896, 66900,
- 66904, 66908, 66912, 66916, 66920, 66924, 66928, 66932, 66936, 66940,
- 66944, 66948, 66952, 66956, 66960, 66964, 66968, 66972, 66976, 66980,
- 66984, 66988, 66992, 66996, 67000, 67004, 67008, 67012, 67016, 67020,
- 67024, 67028, 67032, 67036, 67040, 67044, 67048, 67052, 67056, 67060,
- 67064, 67068, 67072, 67076, 67080, 67084, 67088, 67092, 67096, 67100,
- 67104, 67108, 67112, 67116, 67120, 67124, 67128, 67132, 67136, 67140,
- 67144, 67148, 67152, 67155, 67159, 67163, 67167, 67171, 67175, 67179,
- 67183, 67187, 67191, 67195, 67199, 67203, 67207, 67211, 67215, 67219,
- 67223, 67227, 67231, 67235, 67239, 67243, 67247, 67251, 67255, 67259,
- 67263, 67267, 67271, 67275, 67279, 67283, 67287, 67291, 67295, 67299,
- 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, 67339,
- 67343, 67347, 67351, 67355, 67359, 67363, 67367, 67371, 67375, 67379,
- 67383, 67387, 67391, 67395, 67399, 67403, 67407, 67411, 67415, 67419,
- 67423, 67427, 67431, 67435, 67439, 67443, 67447, 67451, 67455, 67459,
- 67463, 67467, 67471, 67475, 67479, 67483, 67487, 67491, 67495, 67499,
- 67503, 67507, 67511, 67515, 67519, 67523, 67527, 67531, 67535, 67539,
- 67543, 67547, 67551, 67555, 67559, 67563, 67567, 67571, 67575, 67579,
- 67583, 67587, 67591, 67595, 67599, 67603, 67607, 67611, 67615, 67619,
- 67623, 67627, 67631, 67635, 67639, 67643, 67647, 67651, 67655, 67659,
- 67663, 67667, 67671, 67675, 67679, 67683, 67687, 67691, 67695, 67699,
- 67703, 67707, 67711, 67715, 67719, 67723, 67727, 67731, 67735, 67739,
- 67743, 67747, 67751, 67755, 67759, 67763, 67767, 67771, 67775, 67779,
- 67783, 67787, 67791, 67795, 67799, 67803, 67807, 67811, 67815, 67819,
- 67823, 67827, 67831, 67835, 67839, 67843, 67847, 67851, 67855, 67859,
- 67863, 67867, 67871, 67875, 67879, 67883, 67887, 67891, 67895, 67899,
- 67903, 67907, 67911, 67915, 67919, 67923, 67927, 67931, 67935, 0, 0, 0,
- 67939, 67943, 67947, 67951, 67955, 67959, 67963, 67967, 67971, 67975,
- 67979, 67983, 67987, 67991, 67995, 67999, 68003, 68007, 68011, 68015,
- 68019, 68023, 68027, 68031, 68035, 68039, 68043, 68047, 68051, 68055,
- 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, 68095,
- 68099, 68103, 68107, 68111, 68115, 68119, 68123, 68127, 68131, 68135,
- 68139, 68143, 68147, 68151, 68155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68159,
- 68164, 68168, 68173, 68178, 68183, 68188, 68193, 68197, 68202, 68207,
- 68212, 68217, 68222, 68227, 68232, 68236, 68240, 68245, 68250, 68255,
- 68260, 68265, 68269, 68274, 68279, 68284, 68289, 68294, 68298, 68303,
- 68307, 68312, 68316, 68321, 68325, 68329, 68333, 68338, 68343, 68348,
- 68356, 68364, 68372, 68380, 68387, 68395, 68401, 68409, 68413, 68417,
- 68421, 68425, 68429, 68433, 68437, 68441, 68445, 68449, 68453, 68457,
- 68461, 68465, 68469, 68473, 68477, 68481, 68485, 68489, 68493, 68497,
- 68501, 68505, 68509, 68513, 68517, 68521, 68525, 68529, 68533, 68537,
- 68541, 68545, 68549, 68553, 68556, 68560, 68564, 68568, 68572, 68576,
- 68580, 68584, 68588, 68592, 68596, 68600, 68604, 68608, 68612, 68616,
- 68620, 68624, 68628, 68632, 68636, 68640, 68644, 68648, 68652, 68656,
- 68660, 68664, 68668, 68672, 68676, 68680, 68684, 68688, 68692, 68696,
- 68700, 68703, 68707, 68711, 68714, 68718, 68722, 68726, 68729, 68733,
- 68737, 68741, 68745, 68749, 68753, 68757, 68761, 68765, 68769, 68773,
- 68777, 68781, 68785, 68788, 68792, 68796, 68800, 68804, 68808, 68812,
- 68816, 68820, 68824, 68827, 68830, 68834, 68838, 68842, 68845, 68848,
- 68852, 68856, 68860, 68864, 68868, 68872, 68876, 68880, 68884, 68888,
- 68892, 68896, 68900, 68904, 68908, 68912, 68916, 68920, 68924, 68928,
- 68932, 68936, 68940, 68944, 68948, 68952, 68956, 68960, 68964, 68968,
- 68972, 68976, 68980, 68984, 68988, 68992, 68996, 68999, 69003, 69007,
- 69011, 69015, 69019, 69023, 69027, 69031, 69035, 69039, 69043, 69047,
- 69051, 69055, 69059, 69063, 69067, 69071, 69075, 69079, 69083, 69087,
- 69091, 69095, 69099, 69103, 69107, 69111, 69115, 69119, 69123, 69127,
- 69131, 69135, 69139, 69143, 69146, 69150, 69154, 69158, 69162, 69166,
- 69170, 69174, 69178, 69182, 69186, 69190, 69194, 69198, 69202, 69206,
- 69210, 69213, 69217, 69221, 69225, 69229, 69233, 69237, 69241, 69245,
- 69249, 69253, 69257, 69261, 69265, 69269, 69273, 69277, 69281, 69285,
- 69289, 69293, 69297, 69300, 69304, 69308, 69312, 69316, 69320, 69324,
- 69328, 69332, 69336, 69340, 69344, 69348, 69352, 69356, 69360, 69364,
- 69368, 69372, 69376, 69380, 69384, 69388, 69392, 69396, 69400, 69404,
- 69408, 69412, 69416, 69420, 69424, 69428, 69432, 69436, 69440, 69444,
- 69448, 69452, 69456, 69460, 69464, 69468, 69472, 69475, 69480, 69484,
- 69490, 69495, 69501, 69505, 69509, 69513, 69517, 69521, 69525, 69529,
- 69533, 69537, 69541, 69545, 69549, 69553, 69557, 69560, 69563, 69566,
- 69569, 69572, 69575, 69578, 69581, 69584, 69589, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69595, 69600, 69605, 69610, 69615,
- 69622, 69629, 69634, 69639, 69644, 69649, 69656, 69663, 69670, 69677,
- 69684, 69691, 69701, 69711, 69718, 69725, 69732, 69739, 69745, 69751,
- 69760, 69769, 69776, 69783, 69794, 69805, 69810, 69815, 69822, 69829,
- 69836, 69843, 69850, 69857, 69864, 69871, 69877, 69883, 69889, 69895,
- 69902, 69909, 69914, 69918, 69925, 69932, 69939, 0, 0, 0, 0, 0, 0, 0, 0,
- 69943, 69947, 69951, 69954, 69957, 69962, 69967, 69972, 69977, 69982,
- 69987, 69992, 69997, 70002, 70007, 70016, 70025, 70030, 70035, 70040,
- 70045, 70050, 70055, 70060, 70065, 70070, 70075, 70080, 0, 0, 0, 0, 0, 0,
- 0, 0, 70085, 70088, 70091, 70094, 70098, 70102, 70106, 70110, 70113,
- 70117, 70120, 70124, 70127, 70131, 70135, 70139, 70143, 70147, 70151,
- 70155, 70158, 70162, 70166, 70170, 70174, 70178, 70182, 70186, 70190,
- 70194, 70198, 70202, 70206, 70210, 70214, 70217, 70221, 70225, 70229,
- 70233, 70237, 70241, 70245, 70249, 70253, 70257, 70261, 70265, 70269,
- 70273, 70277, 70281, 70285, 70289, 70293, 70297, 70301, 70305, 70309,
- 70313, 70316, 70320, 70324, 70328, 70332, 70336, 70340, 70344, 70347,
- 70351, 70355, 70359, 70363, 70367, 70371, 70375, 70379, 70383, 70387,
- 70391, 70395, 70400, 70405, 70408, 70413, 70416, 70419, 70422, 0, 0, 0,
- 0, 0, 0, 0, 0, 70426, 70435, 70444, 70453, 70462, 70471, 70480, 70489,
- 70498, 70506, 70513, 70521, 70528, 70536, 70546, 70555, 70565, 70574,
- 70584, 70592, 70599, 70607, 70614, 70622, 70627, 70632, 70637, 70646,
- 70652, 70658, 70665, 70674, 70682, 70690, 70698, 70705, 70712, 70719,
- 70726, 70731, 70736, 70741, 70746, 70751, 70756, 70761, 70766, 70774,
- 70782, 70788, 70793, 70798, 70803, 70808, 70813, 70818, 70823, 70828,
- 70833, 70841, 70849, 70854, 70859, 70869, 70879, 70886, 70893, 70902,
- 70911, 70923, 70935, 70941, 70947, 70955, 70963, 70973, 70983, 70990,
- 70997, 71002, 71007, 71019, 71031, 71039, 71047, 71057, 71067, 71079,
- 71091, 71100, 71109, 71116, 71123, 71130, 71137, 71146, 71155, 71160,
- 71165, 71172, 71179, 71186, 71193, 71205, 71217, 71222, 71227, 71232,
- 71237, 71242, 71247, 71252, 71257, 71261, 71266, 71271, 71276, 71281,
- 71286, 71292, 71297, 71302, 71309, 71316, 71323, 71330, 71337, 71346,
- 71355, 71361, 71367, 71373, 71379, 71385, 71391, 71398, 71405, 71412,
- 71416, 71423, 71428, 71433, 71440, 0, 71453, 71461, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 71469, 71478, 71487, 71496, 71505, 71514, 71523,
- 71532, 71541, 71550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 75532, 75537, 75542, 75547, 75554, 75561, 75565, 75569, 75574, 75579,
+ 75584, 75589, 75594, 75599, 75604, 75609, 75614, 75620, 75626, 75632,
+ 75638, 75644, 75648, 75654, 75658, 75664, 75671, 75677, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 75681, 75685, 75689, 75693, 75697, 75701, 0, 0, 75705, 75709,
+ 75713, 75717, 75721, 75725, 0, 0, 75729, 75733, 75737, 75741, 75745,
+ 75749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75753, 75757, 75761, 75765, 75769,
+ 75773, 75777, 0, 75781, 75785, 75789, 75793, 75797, 75801, 75805, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71559, 71566, 71574, 71582,
- 71589, 71597, 71604, 71610, 71616, 71623, 71629, 71635, 71641, 71648,
- 71655, 71662, 71669, 71676, 71683, 71690, 71697, 71704, 71711, 71718,
- 71725, 71732, 71739, 71745, 71752, 71759, 71766, 71773, 71780, 71787,
- 71794, 71801, 71808, 71815, 71822, 71829, 71836, 71843, 71850, 71857,
- 71864, 71871, 71879, 71887, 71895, 71903, 0, 0, 0, 0, 71911, 71920,
- 71929, 71938, 71947, 71956, 71965, 71972, 71979, 71986, 0, 0, 0, 0, 0, 0,
- 71993, 71997, 72002, 72007, 72012, 72017, 72022, 72027, 72032, 72037,
- 72042, 72047, 72051, 72055, 72060, 72065, 72069, 72074, 72079, 72084,
- 72089, 72094, 72099, 72104, 72108, 72112, 72117, 72122, 72127, 72131,
- 72135, 72139, 72143, 72147, 72151, 72156, 72161, 72166, 72171, 72176,
- 72183, 72189, 72194, 72199, 72204, 72209, 72215, 72222, 72228, 72235,
- 72241, 72247, 72252, 72259, 72265, 72270, 0, 0, 0, 0, 0, 0, 0, 0, 72276,
- 72280, 72284, 72287, 72291, 72294, 72298, 72301, 72305, 72309, 72314,
- 72318, 72323, 72326, 72330, 72334, 72337, 72341, 72345, 72348, 72352,
- 72356, 72360, 72364, 72368, 72372, 72376, 72380, 72384, 72388, 72392,
- 72396, 72400, 72404, 72408, 72412, 72416, 72420, 72423, 72426, 72430,
- 72434, 72438, 72441, 72444, 72447, 72451, 72455, 72459, 72463, 72467,
- 72470, 72474, 72480, 72485, 72489, 72494, 72498, 72503, 72508, 72514,
- 72519, 72525, 72529, 72534, 72539, 72543, 72548, 72553, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 72557, 72560, 72564, 72568, 72571, 72574, 72577, 72580, 72583,
- 72586, 72589, 72592, 0, 0, 0, 0, 0, 0, 72595, 72600, 72604, 72608, 72612,
- 72616, 72620, 72624, 72628, 72632, 72636, 72640, 72644, 72648, 72652,
- 72656, 72660, 72665, 72670, 72676, 72682, 72689, 72694, 72699, 72705,
- 72709, 72714, 72717, 0, 0, 0, 0, 72720, 72727, 72733, 72739, 72745,
- 72751, 72757, 72763, 72769, 72775, 72781, 72787, 72794, 72801, 72808,
- 72815, 72822, 72829, 72836, 72843, 72850, 72856, 72862, 72869, 72875,
- 72882, 72889, 72895, 72901, 72908, 72915, 72922, 72928, 72935, 72942,
- 72948, 72955, 72961, 72968, 72975, 72981, 72987, 72994, 73000, 73007,
- 73014, 73023, 73030, 73037, 73041, 73046, 73051, 73056, 73061, 73065,
- 73069, 73074, 73078, 73083, 73088, 73093, 73098, 73102, 73107, 73111,
- 73116, 73120, 73125, 73130, 73135, 73140, 73144, 73149, 73154, 73159,
- 73165, 73170, 73176, 73182, 73188, 73195, 73201, 73207, 73214, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 73218, 73223, 73227, 73231, 73235, 73239, 73243,
- 73247, 73251, 73255, 73259, 73263, 73267, 73271, 73275, 73279, 73283,
- 73287, 73291, 73295, 73299, 73303, 73307, 73311, 73315, 73319, 73323,
- 73327, 73331, 73335, 0, 0, 0, 73339, 73343, 73347, 73351, 73355, 73358,
- 73364, 73367, 73371, 73374, 73380, 73386, 73394, 73397, 73401, 73404,
- 73407, 73413, 73419, 73423, 73429, 73433, 73437, 73443, 73447, 73453,
- 73459, 73463, 73467, 73473, 73477, 73483, 73489, 73493, 73499, 73503,
- 73509, 73512, 73515, 73521, 73525, 73531, 73534, 73537, 73540, 73546,
- 73550, 73554, 73560, 73566, 73570, 73573, 73579, 73584, 73589, 73594,
- 73601, 73606, 73613, 73618, 73625, 73630, 73636, 73642, 73648, 73651,
- 73655, 73659, 73664, 73669, 73674, 73679, 73684, 73689, 73694, 73699,
- 73706, 73711, 0, 73718, 73721, 73725, 73728, 73731, 73734, 73737, 73740,
- 73743, 73746, 73749, 0, 0, 0, 0, 73752, 73759, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73764, 73767, 73770, 73773, 73776, 73780, 73783, 73786, 73790, 73794,
- 73798, 73802, 73806, 73810, 73814, 73818, 73822, 73826, 73830, 73834,
- 73838, 73842, 73846, 73850, 73854, 73857, 73861, 73864, 73868, 73872,
- 73876, 73880, 73884, 73887, 73891, 73894, 73897, 73901, 73905, 73909,
- 73913, 73916, 73921, 73925, 73930, 73935, 73939, 73944, 73948, 73953,
- 73958, 73963, 73968, 73973, 73979, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73985,
- 73990, 73995, 74000, 74007, 74012, 74017, 74021, 74026, 74031, 74035,
- 74039, 74044, 74050, 0, 0, 74057, 74061, 74064, 74067, 74070, 74073,
- 74076, 74079, 74082, 74085, 0, 0, 74088, 74093, 74098, 74104, 74111,
- 74117, 74123, 74129, 74135, 74141, 74147, 74153, 74159, 74165, 74171,
- 74177, 74182, 74188, 74193, 74199, 74205, 74212, 74218, 74224, 74229,
- 74236, 74243, 74250, 74256, 74261, 74266, 74271, 0, 0, 0, 0, 74279,
- 74285, 74291, 74297, 74303, 74309, 74315, 74321, 74327, 74333, 74339,
- 74345, 74351, 74357, 74363, 74369, 74375, 74381, 74387, 74393, 74399,
- 74404, 74409, 74415, 74421, 74427, 74433, 74439, 74445, 74451, 74457,
- 74463, 74469, 74475, 74481, 74487, 74493, 74499, 74505, 74511, 74517,
- 74523, 74529, 74535, 74541, 74547, 74553, 74558, 74563, 74569, 74574,
- 74578, 74583, 74587, 74591, 74595, 74601, 74606, 74611, 74616, 74621,
- 74626, 74631, 74636, 74643, 74650, 74657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74664, 74669, 74674, 74679,
- 74686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74693, 74697, 74701, 74705, 74709,
- 74713, 0, 0, 74717, 74721, 74725, 74729, 74733, 74737, 0, 0, 74741,
- 74745, 74749, 74753, 74757, 74761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74765,
- 74769, 74773, 74777, 74781, 74785, 74789, 0, 74793, 74797, 74801, 74805,
- 74809, 74813, 74817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 75809, 75814, 75819, 75824, 75829, 75833, 75837, 75842, 75847, 75852,
+ 75857, 75862, 75867, 75872, 75877, 75882, 75886, 75891, 75896, 75901,
+ 75906, 75911, 75916, 75921, 75926, 75931, 75936, 75941, 75948, 75955,
+ 75962, 75969, 75976, 75983, 75990, 75997, 76003, 76009, 76015, 76021,
+ 76027, 76033, 76039, 76045, 76049, 76055, 0, 0, 76061, 76066, 76070,
+ 76074, 76078, 76082, 76086, 76090, 76094, 76098, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76102,
+ 76106, 76110, 76114, 76118, 76122, 76126, 76130, 76134, 76138, 76142,
+ 76146, 76150, 76154, 76158, 76162, 76166, 76170, 76174, 76178, 76182,
+ 76186, 76190, 0, 0, 0, 0, 76194, 76198, 76202, 76206, 76210, 76214,
+ 76218, 76222, 76226, 76230, 76234, 76238, 76242, 76246, 76250, 76254,
+ 76258, 76262, 76266, 76270, 76274, 76278, 76282, 76286, 76290, 76294,
+ 76298, 76302, 76306, 76310, 76314, 76318, 76322, 76326, 76330, 76334,
+ 76338, 76342, 76346, 76350, 76354, 76358, 76362, 76366, 76370, 76374,
+ 76378, 76382, 76386, 0, 0, 0, 0, 76390, 76394, 76398, 76402, 76406,
+ 76410, 76414, 76418, 76422, 76426, 76430, 76434, 76438, 76442, 76446,
+ 76450, 76454, 76458, 76462, 76466, 76470, 76474, 76478, 76482, 76486,
+ 76490, 76494, 76498, 76502, 76506, 76510, 76514, 76518, 76522, 76526,
+ 76530, 76534, 76538, 76542, 76546, 76550, 76554, 76558, 76562, 76566,
+ 76570, 76574, 76578, 76582, 76586, 76590, 76594, 76598, 76602, 76606,
+ 76610, 76614, 76618, 76622, 76626, 76630, 76634, 76638, 76642, 76646,
+ 76650, 76654, 76658, 76662, 76666, 76670, 76674, 76678, 76682, 76686,
+ 76690, 76694, 76698, 76702, 76706, 76710, 76714, 76718, 76722, 76726,
+ 76730, 76734, 76738, 76742, 76746, 76750, 76754, 76758, 76762, 76766,
+ 76770, 76774, 76778, 76782, 76786, 76790, 76794, 76798, 76802, 76806,
+ 76810, 76814, 76818, 76822, 76826, 76830, 76834, 76838, 76842, 76846,
+ 76850, 76854, 76858, 76862, 76866, 76870, 76874, 76878, 76882, 76886,
+ 76890, 76894, 76898, 76902, 76906, 76910, 76914, 76918, 76922, 76926,
+ 76930, 76934, 76938, 76942, 76946, 76950, 76954, 76958, 76962, 76966,
+ 76970, 76974, 76978, 76982, 76986, 76990, 76994, 76998, 77002, 77006,
+ 77010, 77014, 77018, 77022, 77026, 77030, 77034, 77038, 77042, 77046,
+ 77050, 77054, 77058, 77062, 77066, 77070, 77074, 77078, 77082, 77086,
+ 77090, 77094, 77098, 77102, 77106, 77110, 77114, 77118, 77122, 77126,
+ 77130, 77134, 77138, 77142, 77146, 77150, 77154, 77158, 77162, 77166,
+ 77170, 77174, 77178, 77182, 77186, 77190, 77194, 77198, 77202, 77206,
+ 77210, 77214, 77218, 77222, 77226, 77230, 77234, 77238, 77242, 77246,
+ 77250, 77254, 77258, 77262, 77266, 77270, 77274, 77278, 77282, 77286,
+ 77290, 77294, 77298, 77302, 77306, 77310, 77314, 77318, 77322, 77326,
+ 77330, 77334, 77338, 77342, 77346, 77350, 77354, 77358, 77362, 77366,
+ 77370, 77374, 77378, 77382, 77386, 77390, 77394, 77398, 77402, 77406,
+ 77410, 77414, 77418, 77422, 77426, 77430, 77434, 77438, 77442, 77446,
+ 77450, 77454, 77458, 77462, 77466, 77470, 77474, 77478, 77482, 77486,
+ 77490, 77494, 77498, 77502, 77506, 77510, 77514, 77518, 77522, 77526,
+ 77530, 77534, 77538, 77542, 77546, 77550, 77554, 77558, 77562, 77566,
+ 77570, 77574, 77578, 77582, 77586, 77590, 77594, 77598, 77602, 77606,
+ 77610, 77614, 77618, 77622, 77626, 77630, 77634, 77638, 77642, 77646,
+ 77650, 77654, 77658, 77662, 77666, 77670, 77674, 77678, 77682, 77686,
+ 77690, 77694, 77698, 77702, 77706, 77710, 77714, 77718, 77722, 77726,
+ 77730, 77734, 77738, 77742, 77746, 77750, 77754, 77758, 77762, 77766,
+ 77770, 77774, 77778, 77782, 77786, 77790, 77794, 77798, 77802, 77806,
+ 77810, 77814, 77818, 77822, 77826, 77830, 77834, 77838, 77842, 77846,
+ 77850, 0, 0, 77854, 77858, 77862, 77866, 77870, 77874, 77878, 77882,
+ 77886, 77890, 77894, 77898, 77902, 77906, 77910, 77914, 77918, 77922,
+ 77926, 77930, 77934, 77938, 77942, 77946, 77950, 77954, 77958, 77962,
+ 77966, 77970, 77974, 77978, 77982, 77986, 77990, 77994, 77998, 78002,
+ 78006, 78010, 78014, 78018, 78022, 78026, 78030, 78034, 78038, 78042,
+ 78046, 78050, 78054, 78058, 78062, 78066, 78070, 78074, 78078, 78082,
+ 78086, 78090, 78094, 78098, 78102, 78106, 78110, 78114, 78118, 78122,
+ 78126, 78130, 78134, 78138, 78142, 78146, 78150, 78154, 78158, 78162,
+ 78166, 78170, 78174, 78178, 78182, 78186, 78190, 78194, 78198, 78202,
+ 78206, 78210, 78214, 78218, 78222, 78226, 78230, 78234, 78238, 78242,
+ 78246, 78250, 78254, 78258, 78262, 78266, 78270, 78274, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78278, 78283, 78288, 78293, 78298, 78303, 78311,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78316, 78323, 78330, 78337, 78344, 0,
+ 0, 0, 0, 0, 78351, 78358, 78365, 78375, 78381, 78387, 78393, 78399,
+ 78405, 78411, 78418, 78424, 78430, 78436, 78445, 78454, 78466, 78478,
+ 78484, 78490, 78496, 78503, 78510, 78517, 78524, 78531, 0, 78538, 78545,
+ 78552, 78560, 78567, 0, 78574, 0, 78581, 78588, 0, 78595, 78603, 0,
+ 78610, 78617, 78624, 78631, 78638, 78645, 78652, 78659, 78666, 78673,
+ 78678, 78685, 78692, 78698, 78704, 78710, 78716, 78722, 78728, 78734,
+ 78740, 78746, 78752, 78758, 78764, 78770, 78776, 78782, 78788, 78794,
+ 78800, 78806, 78812, 78818, 78824, 78830, 78836, 78842, 78848, 78854,
+ 78860, 78866, 78872, 78878, 78884, 78890, 78896, 78902, 78908, 78914,
+ 78920, 78926, 78932, 78938, 78944, 78950, 78956, 78962, 78968, 78974,
+ 78980, 78986, 78992, 78998, 79004, 79010, 79016, 79022, 79028, 79034,
+ 79040, 79046, 79052, 79058, 79064, 79070, 79076, 79082, 79088, 79094,
+ 79100, 79106, 79112, 79118, 79124, 79130, 79136, 79142, 79148, 79156,
+ 79164, 79170, 79176, 79182, 79188, 79197, 79206, 79214, 79222, 79230,
+ 79238, 79246, 79254, 79262, 79270, 79277, 79284, 79294, 79304, 79308,
+ 79312, 79317, 79322, 79327, 79332, 79341, 79350, 79356, 79362, 79369,
+ 79376, 79383, 79387, 79393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 79399, 79405, 79411, 79417, 79423, 79428, 79433, 79439, 79445,
+ 79451, 79457, 79465, 79471, 79477, 79485, 79493, 79501, 79509, 79514,
+ 79519, 79524, 79529, 79542, 79555, 79565, 79575, 79586, 79597, 79608,
+ 79619, 79629, 79639, 79650, 79661, 79672, 79683, 79693, 79703, 79713,
+ 79729, 79745, 79761, 79768, 79775, 79782, 79789, 79799, 79809, 79819,
+ 79831, 79841, 79849, 79857, 79866, 79874, 79884, 79892, 79900, 79908,
+ 79917, 79925, 79935, 79943, 79951, 79959, 79969, 79977, 79984, 79991,
+ 79998, 80005, 80013, 80021, 80029, 80037, 80045, 80054, 80062, 80070,
+ 80078, 80086, 80094, 80103, 80111, 80119, 80127, 80135, 80143, 80151,
+ 80159, 80167, 80175, 80183, 80192, 80200, 80210, 80218, 80226, 80234,
+ 80244, 80252, 80260, 80268, 80276, 80285, 80294, 80302, 80312, 80320,
+ 80328, 80336, 80345, 80353, 80363, 80371, 80378, 80385, 80393, 80400,
+ 80409, 80416, 80424, 80432, 80441, 80449, 80459, 80467, 80475, 80483,
+ 80493, 80501, 80508, 80515, 80523, 80530, 80539, 80546, 80556, 80566,
+ 80577, 80586, 80595, 80604, 80613, 80622, 80632, 80643, 80654, 80664,
+ 80675, 80687, 80697, 80706, 80715, 80723, 80732, 80742, 80750, 80759,
+ 80768, 80776, 80785, 80795, 80803, 80812, 80821, 80829, 80838, 80848,
+ 80856, 80866, 80874, 80884, 80892, 80900, 80909, 80917, 80927, 80935,
+ 80943, 80953, 80961, 80968, 80975, 80984, 80993, 81001, 81010, 81020,
+ 81028, 81039, 81047, 81055, 81062, 81070, 81079, 81086, 81096, 81106,
+ 81117, 81127, 81138, 81146, 81154, 81163, 81171, 81180, 81188, 81196,
+ 81205, 81213, 81222, 81230, 81237, 81244, 81251, 81258, 81266, 81274,
+ 81282, 81290, 81299, 81307, 81315, 81324, 81332, 81340, 81348, 81357,
+ 81365, 81373, 81381, 81389, 81397, 81405, 81413, 81421, 81429, 81438,
+ 81446, 81454, 81462, 81470, 81478, 81487, 81496, 81504, 81512, 81520,
+ 81529, 81537, 81546, 81553, 81560, 81568, 81575, 81583, 81591, 81600,
+ 81608, 81617, 81625, 81633, 81643, 81650, 81657, 81665, 81672, 81680,
+ 81690, 81701, 81709, 81718, 81726, 81735, 81743, 81752, 81760, 81769,
+ 81777, 81786, 81795, 81803, 81811, 81819, 81828, 81835, 81843, 81852,
+ 81861, 81870, 81880, 81888, 81898, 81906, 81916, 81924, 81934, 81942,
+ 81952, 81960, 81969, 81976, 81985, 81992, 82002, 82010, 82020, 82028,
+ 82038, 82046, 82054, 82062, 82071, 82079, 82088, 82097, 82106, 82115,
+ 82125, 82133, 82143, 82151, 82161, 82169, 82179, 82187, 82197, 82205,
+ 82214, 82221, 82230, 82237, 82247, 82255, 82265, 82273, 82283, 82291,
+ 82299, 82307, 82316, 82324, 82333, 82342, 82351, 82360, 82368, 82376,
+ 82385, 82393, 82402, 82411, 82419, 82427, 82435, 82444, 82452, 82460,
+ 82469, 82477, 82485, 82493, 82501, 82506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 82511, 82521, 82531, 82541, 82551, 82562, 82572, 82582,
+ 82593, 82602, 82611, 82620, 82631, 82641, 82651, 82663, 82673, 82683,
+ 82693, 82703, 82713, 82723, 82733, 82743, 82753, 82763, 82773, 82784,
+ 82795, 82805, 82815, 82827, 82838, 82849, 82859, 82869, 82879, 82889,
+ 82899, 82909, 82919, 82931, 82941, 82951, 82963, 82974, 82985, 82995,
+ 83005, 83015, 83025, 83037, 83047, 83057, 83068, 83079, 83089, 83099,
+ 83108, 83117, 83126, 83135, 83144, 83154, 0, 0, 83164, 83174, 83184,
+ 83194, 83204, 83216, 83226, 83236, 83248, 83258, 83270, 83279, 83288,
+ 83299, 83309, 83321, 83332, 83345, 83355, 83367, 83376, 83387, 83398,
+ 83411, 83421, 83431, 83441, 83451, 83461, 83470, 83479, 83488, 83497,
+ 83507, 83517, 83527, 83537, 83547, 83557, 83567, 83577, 83587, 83597,
+ 83607, 83617, 83626, 83635, 83644, 83654, 83664, 83674, 83684, 83694,
+ 83705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83715, 83730,
+ 83745, 83751, 83757, 83763, 83769, 83775, 83781, 83787, 83793, 83801,
+ 83805, 83808, 0, 0, 83816, 83819, 83822, 83825, 83828, 83831, 83834,
+ 83837, 83840, 83843, 83846, 83849, 83852, 83855, 83858, 83861, 83864,
+ 83872, 83881, 83892, 83900, 83908, 83917, 83926, 83937, 83949, 0, 0, 0,
+ 0, 0, 0, 83958, 83963, 83968, 83975, 83982, 83988, 83994, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83999, 84009, 84019, 84029, 84038, 84049, 84058, 84067,
+ 84077, 84087, 84099, 84111, 84122, 84133, 84144, 84155, 84165, 84175,
+ 84185, 84195, 84206, 84217, 84221, 84226, 84235, 84244, 84248, 84252,
+ 84256, 84261, 84266, 84271, 84276, 84279, 84283, 0, 84288, 84291, 84294,
+ 84298, 84302, 84307, 84311, 84315, 84320, 84325, 84332, 84339, 84342,
+ 84345, 84348, 84351, 84354, 84358, 84362, 0, 84366, 84371, 84375, 84379,
+ 0, 0, 0, 0, 84384, 84389, 84396, 84401, 84406, 0, 84411, 84416, 84421,
+ 84426, 84431, 84436, 84441, 84446, 84451, 84456, 84461, 84466, 84475,
+ 84484, 84492, 84500, 84509, 84518, 84527, 84536, 84544, 84552, 84560,
+ 84568, 84573, 84578, 84584, 84590, 84596, 84602, 84610, 84618, 84624,
+ 84630, 84636, 84642, 84648, 84654, 84660, 84666, 84671, 84676, 84681,
+ 84686, 84691, 84696, 84701, 84706, 84712, 84718, 84724, 84730, 84736,
+ 84742, 84748, 84754, 84760, 84766, 84772, 84778, 84784, 84790, 84796,
+ 84802, 84808, 84814, 84820, 84826, 84832, 84838, 84844, 84850, 84856,
+ 84862, 84868, 84874, 84880, 84886, 84892, 84898, 84904, 84910, 84916,
+ 84922, 84928, 84934, 84940, 84946, 84952, 84958, 84964, 84970, 84976,
+ 84982, 84988, 84994, 85000, 85006, 85012, 85018, 85024, 85030, 85036,
+ 85042, 85048, 85054, 85060, 85066, 85071, 85076, 85081, 85086, 85092,
+ 85098, 85104, 85110, 85116, 85122, 85128, 85134, 85140, 85146, 85153,
+ 85160, 85165, 85170, 85175, 85180, 85192, 85204, 85215, 85226, 85238,
+ 85250, 85258, 0, 0, 85266, 0, 85274, 85278, 85282, 85285, 85289, 85293,
+ 85296, 85299, 85303, 85307, 85310, 85313, 85316, 85319, 85324, 85327,
+ 85331, 85334, 85337, 85340, 85343, 85346, 85349, 85352, 85355, 85358,
+ 85361, 85364, 85368, 85372, 85376, 85380, 85385, 85390, 85396, 85402,
+ 85408, 85413, 85419, 85425, 85431, 85436, 85442, 85448, 85453, 85458,
+ 85464, 85469, 85475, 85481, 85486, 85492, 85498, 85503, 85509, 85515,
+ 85521, 85527, 85533, 85537, 85542, 85546, 85551, 85555, 85560, 85565,
+ 85571, 85577, 85583, 85588, 85594, 85600, 85606, 85611, 85617, 85623,
+ 85628, 85633, 85639, 85644, 85650, 85656, 85661, 85667, 85673, 85678,
+ 85684, 85690, 85696, 85702, 85708, 85713, 85717, 85722, 85724, 85729,
+ 85734, 85740, 85745, 85750, 85754, 85760, 85765, 85770, 85775, 85780,
+ 85785, 85790, 85795, 85801, 85807, 85813, 85821, 85825, 85829, 85833,
+ 85837, 85841, 85845, 85850, 85855, 85860, 85865, 85869, 85874, 85879,
+ 85884, 85889, 85894, 85899, 85904, 85909, 85913, 85917, 85922, 85927,
+ 85932, 85937, 85941, 85946, 85951, 85956, 85961, 85965, 85970, 85975,
+ 85980, 85985, 85989, 85994, 85999, 86003, 86008, 86013, 86018, 86023,
+ 86028, 86033, 86040, 86047, 86051, 86056, 86061, 86066, 86071, 86076,
+ 86081, 86086, 86091, 86096, 86101, 86106, 86111, 86116, 86121, 86126,
+ 86131, 86136, 86141, 86146, 86151, 86156, 86161, 86166, 86171, 86176,
+ 86181, 86186, 86191, 86196, 0, 0, 0, 86201, 86205, 86210, 86214, 86219,
+ 86224, 0, 0, 86228, 86233, 86238, 86242, 86247, 86252, 0, 0, 86257,
+ 86262, 86266, 86271, 86276, 86281, 0, 0, 86286, 86291, 86296, 0, 0, 0,
+ 86300, 86304, 86308, 86312, 86315, 86319, 86323, 0, 86327, 86333, 86336,
+ 86340, 86343, 86347, 86351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86355, 86361,
+ 86367, 86373, 86379, 0, 0, 86383, 86389, 86395, 86401, 86407, 86413,
+ 86420, 86427, 86434, 86441, 86448, 86455, 0, 86462, 86469, 86476, 86482,
+ 86489, 86496, 86503, 86510, 86516, 86523, 86530, 86537, 86544, 86550,
+ 86557, 86564, 86571, 86578, 86584, 86591, 86598, 86605, 86612, 86619,
+ 86626, 86633, 0, 86640, 86646, 86653, 86660, 86667, 86674, 86680, 86687,
+ 86694, 86701, 86708, 86715, 86722, 86729, 86735, 86742, 86749, 86756,
+ 86763, 0, 86770, 86777, 0, 86784, 86791, 86798, 86805, 86812, 86819,
+ 86826, 86833, 86840, 86847, 86854, 86861, 86868, 86875, 86882, 0, 0,
+ 86888, 86893, 86898, 86903, 86908, 86913, 86918, 86923, 86928, 86933,
+ 86938, 86943, 86948, 86953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86958, 86965,
+ 86972, 86979, 86986, 86993, 87000, 87007, 87014, 87021, 87028, 87035,
+ 87042, 87049, 87056, 87063, 87070, 87077, 87084, 87091, 87099, 87107,
+ 87114, 87121, 87126, 87134, 87142, 87149, 87156, 87161, 87168, 87173,
+ 87178, 87185, 87190, 87195, 87200, 87208, 87213, 87218, 87225, 87230,
+ 87235, 87242, 87249, 87254, 87259, 87264, 87269, 87274, 87279, 87284,
+ 87289, 87294, 87301, 87306, 87313, 87318, 87323, 87328, 87333, 87338,
+ 87343, 87348, 87353, 87358, 87363, 87368, 87375, 87382, 87389, 87396,
+ 87402, 87407, 87414, 87419, 87424, 87433, 87440, 87449, 87456, 87461,
+ 87466, 87474, 87479, 87484, 87489, 87494, 87499, 87506, 87511, 87516,
+ 87521, 87526, 87531, 87538, 87545, 87552, 87559, 87566, 87573, 87580,
+ 87587, 87594, 87601, 87608, 87615, 87622, 87629, 87636, 87643, 87650,
+ 87657, 87664, 87671, 87678, 87685, 87692, 87699, 87706, 87713, 87720,
+ 87727, 0, 0, 0, 0, 0, 87734, 87742, 87750, 0, 0, 0, 0, 87755, 87759,
+ 87763, 87767, 87771, 87775, 87779, 87783, 87787, 87791, 87796, 87801,
+ 87806, 87811, 87816, 87821, 87826, 87831, 87836, 87842, 87848, 87854,
+ 87861, 87868, 87875, 87882, 87889, 87896, 87902, 87908, 87914, 87921,
+ 87928, 87935, 87942, 87949, 87956, 87963, 87970, 87977, 87984, 87991,
+ 87998, 88005, 88012, 0, 0, 0, 88019, 88027, 88035, 88043, 88051, 88059,
+ 88069, 88079, 88087, 88095, 88103, 88111, 88119, 88125, 88132, 88141,
+ 88150, 88159, 88168, 88177, 88186, 88196, 88207, 88217, 88228, 88237,
+ 88246, 88255, 88265, 88276, 88286, 88297, 88308, 88317, 88325, 88331,
+ 88337, 88343, 88349, 88357, 88365, 88371, 88378, 88388, 88395, 88402,
+ 88409, 88416, 88423, 88433, 88440, 88447, 88455, 88463, 88472, 88481,
+ 88490, 88499, 88508, 88516, 88525, 88534, 88543, 88547, 88554, 88559,
+ 88564, 88568, 88572, 88576, 88580, 88585, 88590, 88596, 88602, 88606,
+ 88612, 88616, 88620, 88624, 88628, 88632, 88636, 88642, 0, 0, 0, 0, 0,
+ 88646, 88651, 88656, 88661, 88666, 88673, 88678, 88683, 88688, 88693,
+ 88698, 88703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 88708, 88715, 88724, 88733, 88740, 88747, 88754,
+ 88761, 88768, 88775, 88781, 88788, 88795, 88802, 88809, 88816, 88823,
+ 88830, 88837, 88846, 88853, 88860, 88867, 88874, 88881, 88888, 88895,
+ 88902, 88911, 88918, 88925, 88932, 88939, 88946, 88953, 88962, 88969,
+ 88976, 88983, 88990, 88999, 89006, 89013, 89020, 89028, 89037, 0, 0,
+ 89046, 89050, 89054, 89059, 89064, 89069, 89074, 89078, 89083, 89088,
+ 89093, 89098, 89103, 89108, 89112, 89116, 89121, 89126, 89131, 89135,
+ 89140, 89145, 89149, 89154, 89159, 89164, 89169, 89174, 89179, 0, 0, 0,
+ 89184, 89188, 89193, 89198, 89202, 89207, 89211, 89216, 89221, 89226,
+ 89231, 89235, 89239, 89244, 89249, 89254, 89259, 89264, 89269, 89273,
+ 89278, 89283, 89288, 89293, 89298, 89303, 89307, 89311, 89316, 89321,
+ 89326, 89331, 89336, 89341, 89346, 89351, 89356, 89361, 89366, 89371,
+ 89376, 89381, 89386, 89391, 89396, 89401, 89406, 89411, 89416, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89421, 89425,
+ 89430, 89435, 89440, 89444, 89449, 89454, 89459, 89464, 89468, 89472,
+ 89477, 89482, 89487, 89492, 89496, 89501, 89506, 89511, 89516, 89521,
+ 89526, 89530, 89535, 89540, 89545, 89550, 89555, 89560, 89565, 0, 89570,
+ 89575, 89580, 89586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89592, 89597,
+ 89602, 89607, 89612, 89617, 89622, 89627, 89632, 89637, 89642, 89647,
+ 89652, 89657, 89662, 89667, 89672, 89677, 89682, 89687, 89692, 89697,
+ 89702, 89707, 89712, 89717, 89722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89729, 89734, 89739,
+ 89744, 89749, 89754, 89759, 89764, 89769, 89774, 89779, 89784, 89789,
+ 89794, 89799, 89804, 89809, 89814, 89819, 89824, 89829, 89834, 89839,
+ 89844, 89849, 89854, 89859, 89863, 89867, 89871, 0, 89876, 89882, 89887,
+ 89892, 89897, 89902, 89908, 89914, 89920, 89926, 89932, 89938, 89944,
+ 89950, 89956, 89962, 89968, 89974, 89980, 89985, 89991, 89997, 90002,
+ 90008, 90013, 90019, 90025, 90030, 90036, 90042, 90047, 90053, 90059,
+ 90064, 90070, 90076, 90082, 0, 0, 0, 0, 90087, 90093, 90099, 90105,
+ 90111, 90117, 90123, 90129, 90135, 90142, 90147, 90152, 90158, 90164, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90170, 90175, 90180,
+ 90185, 90191, 90196, 90202, 90208, 90214, 90220, 90227, 90233, 90240,
+ 90245, 90250, 90255, 90260, 90265, 90270, 90275, 90280, 90285, 90290,
+ 90295, 90300, 90305, 90310, 90315, 90320, 90325, 90330, 90335, 90340,
+ 90345, 90350, 90355, 90360, 90365, 90370, 90375, 90380, 90385, 90390,
+ 90395, 90401, 90406, 90412, 90418, 90424, 90430, 90437, 90443, 90450,
+ 90455, 90460, 90465, 90470, 90475, 90480, 90485, 90490, 90495, 90500,
+ 90505, 90510, 90515, 90520, 90525, 90530, 90535, 90540, 90545, 90550,
+ 90555, 90560, 90565, 90570, 90575, 90580, 90585, 90590, 90595, 90600,
+ 90605, 90610, 90615, 90620, 90625, 90630, 90635, 90640, 90645, 90650,
+ 90655, 90660, 90665, 90670, 90675, 90680, 90685, 90690, 90695, 90700,
+ 90705, 90710, 90715, 90720, 90725, 90730, 90735, 90740, 90745, 90750,
+ 90755, 90760, 90765, 90770, 90775, 90780, 90785, 90790, 90795, 90800,
+ 90805, 90810, 90815, 90820, 90825, 90830, 90835, 90840, 90845, 90850,
+ 90855, 90860, 90865, 90869, 90873, 90878, 90883, 90888, 90893, 90898,
+ 90903, 90908, 90913, 90918, 90923, 90928, 90932, 90936, 90940, 90944,
+ 90948, 90952, 90956, 90961, 90966, 0, 0, 90971, 90976, 90980, 90984,
+ 90988, 90992, 90996, 91000, 91004, 91008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 74821, 74828, 74835, 74842, 74849, 74855, 74861,
- 74868, 74875, 74882, 74889, 74896, 74903, 74910, 74917, 74924, 74930,
- 74937, 74944, 74951, 74958, 74965, 74972, 74979, 74986, 74993, 75000,
- 75007, 75016, 75025, 75034, 75043, 75052, 75061, 75070, 75079, 75087,
- 75095, 75103, 75111, 75119, 75127, 75135, 75143, 75149, 75157, 0, 0,
- 75165, 75172, 75178, 75184, 75190, 75196, 75202, 75208, 75214, 75220, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 75226, 75230, 75234, 75238, 75242, 75246, 75250, 75254,
- 75258, 75262, 75266, 75270, 75274, 75278, 75282, 75286, 75290, 75294,
- 75298, 75302, 75306, 75310, 75314, 0, 0, 0, 0, 75318, 75322, 75326,
- 75330, 75334, 75338, 75342, 75346, 75350, 75354, 75358, 75362, 75366,
- 75370, 75374, 75378, 75382, 75386, 75390, 75394, 75398, 75402, 75406,
- 75410, 75414, 75418, 75422, 75426, 75430, 75434, 75438, 75442, 75446,
- 75450, 75454, 75458, 75462, 75466, 75470, 75474, 75478, 75482, 75486,
- 75490, 75494, 75498, 75502, 75506, 75510, 0, 0, 0, 0, 75514, 75518,
- 75522, 75526, 75530, 75534, 75538, 75542, 75546, 75550, 75554, 75558,
- 75562, 75566, 75570, 75574, 75578, 75582, 75586, 75590, 75594, 75598,
- 75602, 75606, 75610, 75614, 75618, 75622, 75626, 75630, 75634, 75638,
- 75642, 75646, 75650, 75654, 75658, 75662, 75666, 75670, 75674, 75678,
- 75682, 75686, 75690, 75694, 75698, 75702, 75706, 75710, 75714, 75718,
- 75722, 75726, 75730, 75734, 75738, 75742, 75746, 75750, 75754, 75758,
- 75762, 75766, 75770, 75774, 75778, 75782, 75786, 75790, 75794, 75798,
- 75802, 75806, 75810, 75814, 75818, 75822, 75826, 75830, 75834, 75838,
- 75842, 75846, 75850, 75854, 75858, 75862, 75866, 75870, 75874, 75878,
- 75882, 75886, 75890, 75894, 75898, 75902, 75906, 75910, 75914, 75918,
- 75922, 75926, 75930, 75934, 75938, 75942, 75946, 75950, 75954, 75958,
- 75962, 75966, 75970, 75974, 75978, 75982, 75986, 75990, 75994, 75998,
- 76002, 76006, 76010, 76014, 76018, 76022, 76026, 76030, 76034, 76038,
- 76042, 76046, 76050, 76054, 76058, 76062, 76066, 76070, 76074, 76078,
- 76082, 76086, 76090, 76094, 76098, 76102, 76106, 76110, 76114, 76118,
- 76122, 76126, 76130, 76134, 76138, 76142, 76146, 76150, 76154, 76158,
- 76162, 76166, 76170, 76174, 76178, 76182, 76186, 76190, 76194, 76198,
- 76202, 76206, 76210, 76214, 76218, 76222, 76226, 76230, 76234, 76238,
- 76242, 76246, 76250, 76254, 76258, 76262, 76266, 76270, 76274, 76278,
- 76282, 76286, 76290, 76294, 76298, 76302, 76306, 76310, 76314, 76318,
- 76322, 76326, 76330, 76334, 76338, 76342, 76346, 76350, 76354, 76358,
- 76362, 76366, 76370, 76374, 76378, 76382, 76386, 76390, 76394, 76398,
- 76402, 76406, 76410, 76414, 76418, 76422, 76426, 76430, 76434, 76438,
- 76442, 76446, 76450, 76454, 76458, 76462, 76466, 76470, 76474, 76478,
- 76482, 76486, 76490, 76494, 76498, 76502, 76506, 76510, 76514, 76518,
- 76522, 76526, 76530, 76534, 76538, 76542, 76546, 76550, 76554, 76558,
- 76562, 76566, 76570, 76574, 76578, 76582, 76586, 76590, 76594, 76598,
- 76602, 76606, 76610, 76614, 76618, 76622, 76626, 76630, 76634, 76638,
- 76642, 76646, 76650, 76654, 76658, 76662, 76666, 76670, 76674, 76678,
- 76682, 76686, 76690, 76694, 76698, 76702, 76706, 76710, 76714, 76718, 0,
- 0, 76722, 76726, 76730, 76734, 76738, 76742, 76746, 76750, 76754, 76758,
- 76762, 76766, 76770, 76774, 76778, 76782, 76786, 76790, 76794, 76798,
- 76802, 76806, 76810, 76814, 76818, 76822, 76826, 76830, 76834, 76838,
- 76842, 76846, 76850, 76854, 76858, 76862, 76866, 76870, 76874, 76878,
- 76882, 76886, 76890, 76894, 76898, 76902, 76906, 76910, 76914, 76918,
- 76922, 76926, 76930, 76934, 76938, 76942, 76946, 76950, 76954, 76958,
- 76962, 76966, 0, 0, 76970, 76974, 76978, 76982, 76986, 76990, 76994,
- 76998, 77002, 77006, 77010, 77014, 77018, 77022, 77026, 77030, 77034,
- 77038, 77042, 77046, 77050, 77054, 77058, 77062, 77066, 77070, 77074,
- 77078, 77082, 77086, 77090, 77094, 77098, 77102, 77106, 77110, 77114,
- 77118, 77122, 77126, 77130, 77134, 77138, 77142, 77146, 77150, 77154,
- 77158, 77162, 77166, 77170, 77174, 77178, 77182, 77186, 77190, 77194,
- 77198, 77202, 77206, 77210, 77214, 77218, 77222, 77226, 77230, 77234,
- 77238, 77242, 77246, 77250, 77254, 77258, 77262, 77266, 77270, 77274,
- 77278, 77282, 77286, 77290, 77294, 77298, 77302, 77306, 77310, 77314,
- 77318, 77322, 77326, 77330, 77334, 77338, 77342, 77346, 77350, 77354,
- 77358, 77362, 77366, 77370, 77374, 77378, 77382, 77386, 77390, 0, 0, 0,
+ 0, 0, 0, 0, 91012, 91016, 91020, 91024, 91028, 91032, 0, 0, 91037, 0,
+ 91042, 91046, 91051, 91056, 91061, 91066, 91071, 91076, 91081, 91086,
+ 91091, 91095, 91100, 91105, 91110, 91115, 91119, 91124, 91129, 91134,
+ 91139, 91143, 91148, 91153, 91158, 91163, 91167, 91172, 91177, 91182,
+ 91187, 91191, 91196, 91201, 91206, 91211, 91216, 91221, 91226, 91230,
+ 91235, 91240, 91245, 91250, 0, 91255, 91260, 0, 0, 0, 91265, 0, 0, 91270,
+ 91275, 91282, 91289, 91296, 91303, 91310, 91317, 91324, 91331, 91338,
+ 91345, 91352, 91359, 91366, 91373, 91380, 91387, 91394, 91401, 91408,
+ 91415, 91422, 0, 91429, 91436, 91442, 91448, 91454, 91461, 91468, 91476,
+ 91484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91493, 91498, 91503, 91508, 91513, 91518,
+ 91523, 91528, 91533, 91538, 91543, 91548, 91553, 91558, 91563, 91568,
+ 91573, 91578, 91583, 91588, 91593, 91598, 91603, 91607, 91612, 91617,
+ 91623, 91627, 0, 0, 0, 91631, 91637, 91641, 91646, 91651, 91656, 91660,
+ 91665, 91669, 91674, 91679, 91683, 91687, 91692, 91696, 91700, 91705,
+ 91710, 91714, 91719, 91724, 91729, 91734, 91739, 91744, 91749, 91754, 0,
+ 0, 0, 0, 0, 91759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77394, 77399, 77404, 77409, 77414,
- 77419, 77427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77432, 77439, 77446,
- 77453, 77460, 0, 0, 0, 0, 0, 77467, 77474, 77481, 77491, 77497, 77503,
- 77509, 77515, 77521, 77527, 77534, 77540, 77546, 77552, 77561, 77570,
- 77582, 77594, 77600, 77606, 77612, 77619, 77626, 77633, 77640, 77647, 0,
- 77654, 77661, 77668, 77676, 77683, 0, 77690, 0, 77697, 77704, 0, 77711,
- 77719, 0, 77726, 77733, 77740, 77747, 77754, 77761, 77768, 77775, 77782,
- 77789, 77794, 77801, 77808, 77814, 77820, 77826, 77832, 77838, 77844,
- 77850, 77856, 77862, 77868, 77874, 77880, 77886, 77892, 77898, 77904,
- 77910, 77916, 77922, 77928, 77934, 77940, 77946, 77952, 77958, 77964,
- 77970, 77976, 77982, 77988, 77994, 78000, 78006, 78012, 78018, 78024,
- 78030, 78036, 78042, 78048, 78054, 78060, 78066, 78072, 78078, 78084,
- 78090, 78096, 78102, 78108, 78114, 78120, 78126, 78132, 78138, 78144,
- 78150, 78156, 78162, 78168, 78174, 78180, 78186, 78192, 78198, 78204,
- 78210, 78216, 78222, 78228, 78234, 78240, 78246, 78252, 78258, 78264,
- 78272, 78280, 78286, 78292, 78298, 78304, 78313, 78322, 78330, 78338,
- 78346, 78354, 78362, 78370, 78378, 78386, 78393, 78400, 78410, 78420,
- 78424, 78428, 78433, 78438, 78443, 78448, 78457, 78466, 78472, 78478,
- 78485, 78492, 78499, 78503, 78509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 78515, 78521, 78527, 78533, 78539, 78544, 78549, 78555,
- 78561, 78567, 78573, 78581, 78587, 78593, 78601, 78609, 78617, 78625,
- 78630, 78635, 78640, 78645, 78657, 78669, 78679, 78689, 78700, 78711,
- 78722, 78733, 78743, 78753, 78764, 78775, 78786, 78797, 78807, 78817,
- 78827, 78842, 78857, 78872, 78879, 78886, 78893, 78900, 78910, 78920,
- 78930, 78941, 78951, 78959, 78967, 78976, 78984, 78993, 79001, 79009,
- 79017, 79026, 79034, 79043, 79051, 79059, 79067, 79076, 79084, 79091,
- 79098, 79105, 79112, 79120, 79128, 79136, 79144, 79152, 79161, 79169,
- 79177, 79185, 79193, 79201, 79210, 79218, 79226, 79234, 79242, 79250,
- 79258, 79266, 79274, 79282, 79290, 79299, 79307, 79316, 79324, 79332,
- 79340, 79349, 79357, 79365, 79373, 79381, 79390, 79399, 79407, 79416,
- 79424, 79432, 79440, 79449, 79457, 79466, 79474, 79481, 79488, 79496,
- 79503, 79511, 79518, 79526, 79534, 79543, 79551, 79560, 79568, 79576,
- 79584, 79593, 79601, 79608, 79615, 79623, 79630, 79638, 79645, 79655,
- 79665, 79675, 79684, 79693, 79702, 79711, 79720, 79730, 79741, 79752,
- 79762, 79773, 79784, 79794, 79803, 79812, 79820, 79829, 79838, 79846,
- 79855, 79864, 79872, 79881, 79890, 79898, 79907, 79916, 79924, 79933,
- 79942, 79950, 79959, 79967, 79976, 79984, 79992, 80001, 80009, 80018,
- 80026, 80034, 80043, 80051, 80058, 80065, 80074, 80083, 80091, 80100,
- 80109, 80117, 80127, 80135, 80143, 80150, 80158, 80166, 80173, 80183,
- 80193, 80204, 80214, 80225, 80233, 80241, 80250, 80258, 80267, 80275,
- 80283, 80292, 80300, 80309, 80317, 80324, 80331, 80338, 80345, 80353,
- 80361, 80369, 80377, 80386, 80394, 80402, 80411, 80419, 80427, 80435,
- 80444, 80452, 80460, 80468, 80476, 80484, 80492, 80500, 80508, 80516,
- 80525, 80533, 80541, 80549, 80557, 80565, 80574, 80583, 80591, 80599,
- 80607, 80616, 80624, 80633, 80640, 80647, 80655, 80662, 80670, 80678,
- 80687, 80695, 80704, 80712, 80720, 80730, 80737, 80744, 80752, 80759,
- 80767, 80777, 80788, 80796, 80805, 80813, 80822, 80830, 80839, 80847,
- 80856, 80864, 80873, 80882, 80890, 80898, 80906, 80915, 80922, 80930,
- 80939, 80948, 80957, 80966, 80974, 80983, 80991, 81000, 81008, 81017,
- 81025, 81034, 81042, 81050, 81057, 81065, 81072, 81081, 81089, 81098,
- 81106, 81115, 81123, 81131, 81139, 81148, 81156, 81165, 81174, 81183,
- 81192, 81201, 81209, 81218, 81226, 81235, 81243, 81252, 81260, 81269,
- 81277, 81285, 81292, 81300, 81307, 81316, 81324, 81333, 81341, 81350,
- 81358, 81366, 81374, 81383, 81391, 81400, 81409, 81418, 81427, 81435,
- 81443, 81452, 81460, 81469, 81478, 81486, 81494, 81502, 81511, 81519,
- 81527, 81536, 81544, 81552, 81560, 81568, 81573, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 81578, 81588, 81598, 81608, 81618, 81629, 81639,
- 81649, 81660, 81669, 81678, 81687, 81697, 81707, 81717, 81728, 81738,
- 81748, 81758, 81768, 81778, 81788, 81798, 81808, 81818, 81828, 81838,
- 81849, 81860, 81870, 81880, 81891, 81902, 81913, 81923, 81933, 81943,
- 81953, 81963, 81973, 81983, 81994, 82004, 82014, 82025, 82036, 82047,
- 82057, 82067, 82077, 82087, 82098, 82108, 82118, 82129, 82140, 82150,
- 82160, 82169, 82178, 82187, 82196, 82205, 82215, 0, 0, 82225, 82235,
- 82245, 82255, 82265, 82276, 82286, 82296, 82307, 82317, 82328, 82337,
- 82346, 82357, 82367, 82378, 82389, 82401, 82411, 82422, 82431, 82441,
- 82451, 82463, 82473, 82483, 82493, 82503, 82513, 82522, 82531, 82540,
- 82549, 82559, 82569, 82579, 82589, 82599, 82609, 82619, 82629, 82639,
- 82649, 82659, 82669, 82678, 82687, 82696, 82706, 82716, 82726, 82736,
- 82746, 82757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82767, 82782,
- 82797, 82803, 82809, 82815, 82821, 82827, 82833, 82839, 82845, 82853,
- 82857, 82860, 0, 0, 82868, 82871, 82874, 82877, 82880, 82883, 82886,
- 82889, 82892, 82895, 82898, 82901, 82904, 82907, 82910, 82913, 82916,
- 82924, 82933, 82944, 82952, 82960, 82969, 82978, 82989, 83001, 0, 0, 0,
- 0, 0, 0, 83010, 83015, 83020, 83027, 83034, 83040, 83046, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83051, 83061, 83071, 83081, 83090, 83101, 83110, 83119,
- 83129, 83139, 83151, 83163, 83174, 83185, 83196, 83207, 83217, 83227,
- 83237, 83247, 83258, 83269, 83273, 83278, 83287, 83296, 83300, 83304,
- 83308, 83313, 83318, 83323, 83328, 83331, 83335, 0, 83340, 83343, 83346,
- 83350, 83354, 83359, 83363, 83367, 83372, 83377, 83384, 83391, 83394,
- 83397, 83400, 83403, 83406, 83410, 83414, 0, 83418, 83423, 83427, 83431,
- 0, 0, 0, 0, 83436, 83441, 83448, 83453, 83458, 0, 83463, 83468, 83473,
- 83478, 83483, 83488, 83493, 83498, 83503, 83508, 83513, 83518, 83527,
- 83536, 83544, 83552, 83561, 83570, 83579, 83588, 83596, 83604, 83612,
- 83620, 83625, 83630, 83636, 83642, 83648, 83654, 83662, 83670, 83676,
- 83682, 83688, 83694, 83700, 83706, 83712, 83718, 83723, 83728, 83733,
- 83738, 83743, 83748, 83753, 83758, 83764, 83770, 83776, 83782, 83788,
- 83794, 83800, 83806, 83812, 83818, 83824, 83830, 83836, 83842, 83848,
- 83854, 83860, 83866, 83872, 83878, 83884, 83890, 83896, 83902, 83908,
- 83914, 83920, 83926, 83932, 83938, 83944, 83950, 83956, 83962, 83968,
- 83974, 83980, 83986, 83992, 83998, 84004, 84010, 84016, 84022, 84028,
- 84034, 84040, 84046, 84052, 84058, 84064, 84070, 84076, 84082, 84088,
- 84094, 84100, 84106, 84112, 84118, 84123, 84128, 84133, 84138, 84144,
- 84150, 84156, 84162, 84168, 84174, 84180, 84186, 84192, 84198, 84204,
- 84210, 84215, 84220, 84225, 84230, 84242, 84254, 84265, 84276, 84288,
- 84300, 84308, 0, 0, 84316, 0, 84324, 84328, 84332, 84335, 84339, 84343,
- 84346, 84349, 84353, 84357, 84360, 84363, 84366, 84369, 84374, 84377,
- 84381, 84384, 84387, 84390, 84393, 84396, 84399, 84402, 84405, 84408,
- 84411, 84414, 84418, 84422, 84426, 84430, 84435, 84440, 84446, 84452,
- 84458, 84463, 84469, 84475, 84481, 84486, 84492, 84498, 84503, 84508,
- 84513, 84518, 84524, 84530, 84535, 84540, 84546, 84551, 84557, 84563,
- 84569, 84575, 84581, 84585, 84590, 84594, 84599, 84603, 84608, 84613,
- 84619, 84625, 84631, 84636, 84642, 84648, 84654, 84659, 84665, 84671,
- 84676, 84681, 84686, 84691, 84697, 84703, 84708, 84713, 84719, 84724,
- 84730, 84736, 84742, 84748, 84754, 84759, 84763, 84768, 84771, 84776,
- 84781, 84787, 84792, 84797, 84801, 84807, 84812, 84817, 84822, 84827,
- 84832, 84837, 84842, 84848, 84854, 84860, 84868, 84872, 84876, 84880,
- 84884, 84888, 84892, 84897, 84902, 84907, 84912, 84917, 84922, 84927,
- 84932, 84937, 84942, 84947, 84952, 84957, 84961, 84965, 84970, 84975,
- 84980, 84985, 84989, 84994, 84999, 85004, 85009, 85013, 85018, 85023,
- 85028, 85033, 85037, 85042, 85047, 85051, 85056, 85061, 85066, 85071,
- 85076, 85080, 85087, 85094, 85098, 85103, 85108, 85113, 85118, 85123,
- 85128, 85133, 85138, 85143, 85148, 85153, 85158, 85163, 85168, 85173,
- 85178, 85183, 85188, 85193, 85198, 85203, 85208, 85213, 85218, 85223,
- 85228, 85233, 85238, 85243, 0, 0, 0, 85248, 85252, 85257, 85261, 85266,
- 85271, 0, 0, 85275, 85280, 85285, 85289, 85294, 85299, 0, 0, 85304,
- 85309, 85313, 85318, 85323, 85328, 0, 0, 85333, 85338, 85343, 0, 0, 0,
- 85347, 85351, 85355, 85359, 85362, 85366, 85370, 0, 85374, 85380, 85383,
- 85387, 85390, 85394, 85398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85402, 85408,
- 85414, 85420, 85426, 0, 0, 85430, 85436, 85442, 85448, 85454, 85460,
- 85467, 85474, 85481, 85488, 85495, 85502, 0, 85509, 85516, 85523, 85529,
- 85536, 85543, 85550, 85557, 85563, 85570, 85577, 85584, 85591, 85597,
- 85604, 85611, 85618, 85625, 85631, 85638, 85645, 85652, 85659, 85666,
- 85673, 85680, 0, 85687, 85693, 85700, 85707, 85714, 85721, 85728, 85735,
- 85742, 85749, 85756, 85763, 85770, 85777, 85783, 85790, 85797, 85804,
- 85811, 0, 85818, 85825, 0, 85832, 85839, 85846, 85853, 85860, 85867,
- 85874, 85881, 85888, 85895, 85902, 85909, 85916, 85923, 85930, 0, 0,
- 85936, 85941, 85946, 85951, 85956, 85961, 85966, 85971, 85976, 85981,
- 85986, 85991, 85996, 86001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86006, 86013,
- 86020, 86027, 86034, 86041, 86048, 86055, 86062, 86069, 86076, 86083,
- 86090, 86097, 86104, 86111, 86118, 86125, 86132, 86139, 86147, 86155,
- 86162, 86169, 86174, 86182, 86190, 86197, 86204, 86209, 86216, 86221,
- 86226, 86233, 86238, 86243, 86248, 86256, 86261, 86266, 86273, 86278,
- 86283, 86290, 86297, 86302, 86307, 86312, 86317, 86322, 86327, 86332,
- 86337, 86342, 86349, 86354, 86361, 86366, 86371, 86376, 86381, 86386,
- 86391, 86396, 86401, 86406, 86411, 86416, 86423, 86430, 86437, 86444,
- 86450, 86455, 86462, 86467, 86472, 86481, 86488, 86497, 86504, 86509,
- 86514, 86522, 86527, 86532, 86537, 86542, 86547, 86554, 86559, 86564,
- 86569, 86574, 86579, 86586, 86593, 86600, 86607, 86614, 86621, 86628,
- 86635, 86642, 86649, 86656, 86663, 86670, 86677, 86684, 86691, 86698,
- 86705, 86712, 86719, 86726, 86733, 86740, 86747, 86754, 86761, 86768,
- 86775, 0, 0, 0, 0, 0, 86782, 86790, 86798, 0, 0, 0, 0, 86803, 86807,
- 86811, 86815, 86819, 86823, 86827, 86831, 86835, 86839, 86844, 86849,
- 86854, 86859, 86864, 86869, 86874, 86879, 86884, 86890, 86896, 86902,
- 86909, 86916, 86923, 86930, 86937, 86944, 86950, 86956, 86962, 86969,
- 86976, 86983, 86990, 86997, 87004, 87011, 87018, 87025, 87032, 87039,
- 87046, 87053, 87060, 0, 0, 0, 87067, 87075, 87083, 87091, 87099, 87107,
- 87117, 87127, 87135, 87143, 87151, 87159, 87167, 87173, 87180, 87189,
- 87198, 87207, 87216, 87225, 87234, 87244, 87255, 87265, 87276, 87285,
- 87294, 87303, 87313, 87324, 87334, 87345, 87356, 87365, 87373, 87379,
- 87385, 87391, 87397, 87405, 87413, 87419, 87426, 87436, 87443, 87450,
- 87457, 87464, 87471, 87481, 87488, 87495, 87503, 87511, 87520, 87529,
- 87538, 87547, 87556, 87564, 87573, 87582, 87591, 87595, 87602, 87607,
- 87612, 87616, 87620, 87624, 87628, 87633, 87638, 87644, 87650, 87654,
- 87660, 87664, 87668, 87672, 87676, 87680, 87684, 87690, 0, 0, 0, 0, 0,
- 87694, 87699, 87704, 87709, 87714, 87721, 87726, 87731, 87736, 87741,
- 87746, 87751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91764,
+ 91770, 91776, 91782, 91788, 91794, 91801, 91808, 91815, 91821, 91827,
+ 91833, 91840, 91847, 91854, 91860, 91867, 91874, 91881, 91888, 91894,
+ 91901, 91908, 91914, 91921, 91928, 91935, 91942, 91949, 91955, 91962,
+ 91969, 91976, 91982, 91988, 91994, 92000, 92006, 92013, 92020, 92026,
+ 92032, 92038, 92045, 92051, 92058, 92065, 92072, 92078, 92086, 92093,
+ 92099, 92106, 92113, 92120, 92126, 0, 0, 0, 0, 0, 0, 92133, 92141, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 87756, 87763, 87772, 87781, 87788, 87795, 87802,
- 87809, 87816, 87823, 87829, 87836, 87843, 87850, 87857, 87864, 87871,
- 87878, 87885, 87894, 87901, 87908, 87915, 87922, 87929, 87936, 87943,
- 87950, 87959, 87966, 87973, 87980, 87987, 87994, 88001, 88010, 88017,
- 88024, 88031, 88038, 88047, 88054, 88061, 88068, 88076, 88085, 0, 0,
- 88094, 88098, 88102, 88107, 88112, 88117, 88122, 88126, 88131, 88136,
- 88141, 88146, 88151, 88156, 88160, 88164, 88168, 88173, 88178, 88182,
- 88187, 88192, 88196, 88200, 88205, 88210, 88215, 88220, 88225, 0, 0, 0,
- 88230, 88234, 88239, 88244, 88248, 88253, 88257, 88262, 88267, 88272,
- 88277, 88281, 88285, 88290, 88295, 88300, 88305, 88309, 88314, 88318,
- 88323, 88328, 88332, 88337, 88342, 88347, 88351, 88355, 88360, 88365,
- 88370, 88375, 88380, 88385, 88390, 88395, 88400, 88405, 88410, 88415,
- 88420, 88425, 88430, 88435, 88440, 88445, 88450, 88455, 88460, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88465, 88469,
- 88474, 88479, 88484, 88488, 88493, 88498, 88503, 88508, 88512, 88516,
- 88521, 88526, 88531, 88536, 88540, 88545, 88550, 88555, 88560, 88565,
- 88570, 88574, 88579, 88584, 88589, 88594, 88599, 88604, 88609, 0, 88614,
- 88619, 88624, 88630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88636, 88641,
- 88646, 88651, 88656, 88661, 88666, 88671, 88676, 88681, 88686, 88691,
- 88696, 88701, 88706, 88711, 88716, 88721, 88726, 88731, 88736, 88741,
- 88746, 88751, 88756, 88761, 88766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92149, 92153, 92158, 92163, 0,
+ 92169, 92174, 0, 0, 0, 0, 0, 92179, 92185, 92192, 92197, 92202, 92206,
+ 92211, 92216, 0, 92221, 92226, 92231, 0, 92236, 92241, 92246, 92251,
+ 92256, 92261, 92266, 92271, 92276, 92281, 92286, 92290, 92294, 92299,
+ 92304, 92309, 92313, 92317, 92321, 92326, 92331, 92336, 92341, 92345,
+ 92350, 92354, 92359, 0, 0, 0, 0, 92364, 92370, 92375, 0, 0, 0, 0, 92380,
+ 92384, 92388, 92392, 92396, 92400, 92405, 92410, 92416, 0, 0, 0, 0, 0, 0,
+ 0, 0, 92422, 92428, 92435, 92441, 92448, 92454, 92460, 92466, 92473, 0,
+ 0, 0, 0, 0, 0, 0, 92479, 92487, 92495, 92503, 92511, 92519, 92527, 92535,
+ 92543, 92551, 92559, 92567, 92575, 92583, 92591, 92599, 92607, 92615,
+ 92623, 92631, 92639, 92647, 92655, 92663, 92671, 92679, 92687, 92695,
+ 92703, 92711, 92718, 92726, 92734, 92738, 92743, 92748, 92753, 92758,
+ 92763, 92768, 92773, 92777, 92782, 92786, 92791, 92795, 92800, 92804,
+ 92809, 92814, 92819, 92824, 92829, 92834, 92839, 92844, 92849, 92854,
+ 92859, 92864, 92869, 92874, 92879, 92884, 92889, 92894, 92899, 92904,
+ 92909, 92914, 92919, 92924, 92929, 92934, 92939, 92944, 92949, 92954,
+ 92959, 92964, 92969, 92974, 92979, 92984, 92989, 92994, 0, 0, 0, 92999,
+ 93004, 93013, 93021, 93030, 93039, 93050, 93061, 93068, 93075, 93082,
+ 93089, 93096, 93103, 93110, 93117, 93124, 93131, 93138, 93145, 93152,
+ 93159, 93166, 93173, 93180, 93187, 93194, 93201, 93208, 0, 0, 93215,
+ 93221, 93227, 93233, 93239, 93246, 93253, 93261, 93269, 93276, 93283,
+ 93290, 93297, 93304, 93311, 93318, 93325, 93332, 93339, 93346, 93353,
+ 93360, 93367, 93374, 93381, 93388, 93395, 0, 0, 0, 0, 0, 93402, 93408,
+ 93414, 93420, 93426, 93433, 93440, 93448, 93456, 93462, 93468, 93475,
+ 93481, 93487, 93493, 93499, 93506, 93513, 93520, 93527, 93534, 93541,
+ 93548, 93555, 93562, 93569, 93576, 93583, 93590, 93597, 93604, 93611,
+ 93618, 93625, 93632, 93639, 93646, 93653, 93660, 93667, 93674, 93681,
+ 93688, 93695, 93702, 93709, 93716, 93723, 93730, 93737, 93744, 93751,
+ 93758, 93765, 93772, 93779, 93786, 93793, 93800, 93807, 93814, 93821,
+ 93828, 93835, 93842, 93849, 93856, 93863, 93870, 93877, 93884, 93891,
+ 93898, 93905, 93912, 93919, 93926, 93933, 93940, 93947, 93954, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88773, 88778, 88783,
- 88788, 88793, 88798, 88803, 88808, 88813, 88818, 88823, 88828, 88833,
- 88838, 88843, 88848, 88853, 88858, 88863, 88868, 88873, 88878, 88883,
- 88888, 88893, 88898, 88903, 88907, 88911, 88915, 0, 88920, 88926, 88931,
- 88936, 88941, 88946, 88952, 88958, 88964, 88970, 88976, 88982, 88988,
- 88994, 89000, 89006, 89012, 89018, 89024, 89029, 89035, 89041, 89046,
- 89052, 89057, 89063, 89069, 89074, 89080, 89086, 89091, 89097, 89103,
- 89109, 89115, 89121, 89127, 0, 0, 0, 0, 89132, 89138, 89144, 89150,
- 89156, 89162, 89168, 89174, 89180, 89187, 89192, 89197, 89203, 89209, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89215, 89220, 89225,
- 89230, 89236, 89241, 89247, 89253, 89259, 89265, 89272, 89278, 89285,
- 89290, 89295, 89300, 89305, 89310, 89315, 89320, 89325, 89330, 89335,
- 89340, 89345, 89350, 89355, 89360, 89365, 89370, 89375, 89380, 89385,
- 89390, 89395, 89400, 89405, 89410, 89415, 89420, 89425, 89430, 89435,
- 89440, 89446, 89451, 89457, 89463, 89469, 89475, 89482, 89488, 89495,
- 89500, 89505, 89510, 89515, 89520, 89525, 89530, 89535, 89540, 89545,
- 89550, 89555, 89560, 89565, 89570, 89575, 89580, 89585, 89590, 89595,
- 89600, 89605, 89610, 89615, 89620, 89625, 89630, 89635, 89640, 89645,
- 89650, 89655, 89660, 89665, 89670, 89675, 89680, 89685, 89690, 89695,
- 89700, 89705, 89710, 89715, 89720, 89725, 89730, 89735, 89740, 89745,
- 89750, 89755, 89760, 89765, 89770, 89775, 89780, 89785, 89790, 89795,
- 89800, 89805, 89810, 89815, 89820, 89825, 89830, 89835, 89840, 89845,
- 89850, 89855, 89860, 89865, 89870, 89875, 89880, 89885, 89890, 89895,
- 89900, 89905, 89910, 89914, 89919, 89924, 89929, 89934, 89939, 89944,
- 89949, 89954, 89959, 89964, 89969, 89974, 89978, 89982, 89986, 89990,
- 89994, 89998, 90002, 90007, 90012, 0, 0, 90017, 90022, 90026, 90030,
- 90034, 90038, 90042, 90046, 90050, 90054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 90058, 90062, 90066, 90070, 90074, 90078, 0, 0, 90083, 0,
- 90088, 90092, 90097, 90102, 90107, 90112, 90117, 90122, 90127, 90132,
- 90137, 90141, 90146, 90151, 90156, 90161, 90165, 90170, 90175, 90180,
- 90185, 90189, 90194, 90199, 90204, 90209, 90213, 90218, 90223, 90228,
- 90233, 90238, 90243, 90248, 90253, 90258, 90263, 90268, 90273, 90277,
- 90282, 90287, 90292, 90297, 0, 90302, 90307, 0, 0, 0, 90312, 0, 0, 90317,
- 90322, 90329, 90336, 90343, 90350, 90357, 90364, 90371, 90378, 90385,
- 90392, 90399, 90406, 90413, 90420, 90427, 90434, 90441, 90448, 90455,
- 90462, 90469, 0, 90476, 90483, 90489, 90495, 90501, 90508, 90515, 90523,
- 90531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90540, 90545, 90550, 90555, 90560, 90565,
- 90570, 90575, 90580, 90585, 90590, 90595, 90600, 90605, 90610, 90615,
- 90620, 90625, 90630, 90635, 90640, 90645, 90650, 90654, 90659, 90664,
- 90670, 90674, 0, 0, 0, 90678, 90684, 90688, 90693, 90698, 90703, 90707,
- 90712, 90716, 90721, 90726, 90730, 90734, 90738, 90742, 90746, 90751,
- 90756, 90760, 90765, 90770, 90774, 90779, 90784, 90789, 90794, 90799, 0,
- 0, 0, 0, 0, 90804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90809,
- 90813, 90818, 90823, 0, 90829, 90834, 0, 0, 0, 0, 0, 90839, 90845, 90852,
- 90857, 90862, 90866, 90871, 90876, 0, 90881, 90886, 90891, 0, 90896,
- 90901, 90906, 90911, 90916, 90921, 90926, 90931, 90936, 90941, 90946,
- 90950, 90954, 90959, 90964, 90969, 90973, 90977, 90981, 90986, 90991,
- 90996, 91001, 91006, 91011, 91015, 91020, 0, 0, 0, 0, 91025, 91031,
- 91036, 0, 0, 0, 0, 91041, 91045, 91049, 91053, 91057, 91061, 91066,
- 91071, 91077, 0, 0, 0, 0, 0, 0, 0, 0, 91083, 91089, 91096, 91102, 91109,
- 91115, 91121, 91127, 91134, 0, 0, 0, 0, 0, 0, 0, 91140, 91148, 91156,
- 91164, 91172, 91180, 91188, 91196, 91204, 91212, 91220, 91228, 91236,
- 91244, 91252, 91260, 91268, 91276, 91284, 91292, 91300, 91308, 91316,
- 91324, 91332, 91340, 91348, 91356, 91364, 91372, 91379, 91387, 91395,
- 91399, 91404, 91409, 91414, 91419, 91424, 91429, 91434, 91438, 91443,
- 91447, 91452, 91456, 91461, 91465, 91470, 91475, 91480, 91485, 91490,
- 91495, 91500, 91505, 91510, 91515, 91520, 91525, 91530, 91535, 91540,
- 91545, 91550, 91555, 91560, 91565, 91570, 91575, 91580, 91585, 91590,
- 91595, 91600, 91605, 91610, 91615, 91620, 91625, 91630, 91635, 91640,
- 91645, 91650, 91655, 0, 0, 0, 91660, 91665, 91674, 91682, 91691, 91700,
- 91711, 91722, 91729, 91736, 91743, 91750, 91757, 91764, 91771, 91778,
- 91785, 91792, 91799, 91806, 91813, 91820, 91827, 91834, 91841, 91848,
- 91855, 91862, 91869, 0, 0, 91876, 91882, 91888, 91894, 91900, 91907,
- 91914, 91922, 91930, 91937, 91944, 91951, 91958, 91965, 91972, 91979,
- 91986, 91993, 92000, 92007, 92014, 92021, 92028, 92035, 92042, 92049,
- 92056, 0, 0, 0, 0, 0, 92063, 92069, 92075, 92081, 92087, 92094, 92101,
- 92109, 92117, 92123, 92129, 92136, 92142, 92148, 92154, 92160, 92167,
- 92174, 92181, 92188, 92195, 92202, 92209, 92216, 92223, 92230, 92237,
- 92244, 92251, 92258, 92265, 92272, 92279, 92286, 92293, 92300, 92307,
- 92314, 92321, 92328, 92335, 92342, 92349, 92356, 92363, 92370, 92377,
- 92384, 92391, 92398, 92405, 92412, 92419, 92426, 92433, 92440, 92447,
- 92454, 92461, 92468, 92475, 92482, 92489, 92496, 92503, 92510, 92517,
- 92524, 92531, 92538, 92545, 92552, 92559, 92566, 92573, 92580, 92587,
- 92594, 92601, 92608, 92615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 93961, 93965, 93969, 93973, 93977, 93981, 93985, 93989,
+ 93993, 93997, 94002, 94007, 94012, 94017, 94022, 94027, 94032, 94037,
+ 94042, 94048, 94054, 94060, 94067, 94074, 94081, 94088, 94095, 94102,
+ 94109, 94116, 94123, 0, 94130, 94134, 94138, 94142, 94146, 94150, 94153,
+ 94157, 94160, 94164, 94167, 94171, 94175, 94180, 94184, 94189, 94192,
+ 94196, 94199, 94203, 94206, 94210, 94214, 94218, 94222, 94226, 94230,
+ 94234, 94238, 94242, 94246, 94250, 94254, 94258, 94262, 94266, 94270,
+ 94274, 94278, 94281, 94284, 94288, 94292, 94296, 94299, 94302, 94305,
+ 94309, 94313, 94317, 94321, 94324, 94327, 94331, 94337, 94343, 94349,
+ 94354, 94361, 94365, 94370, 94374, 94379, 94384, 94390, 94395, 94401,
+ 94405, 94410, 94414, 94419, 94422, 94425, 94429, 94434, 94440, 94445,
+ 94451, 0, 0, 0, 0, 94456, 94459, 94462, 94465, 94468, 94471, 94474,
+ 94477, 94480, 94483, 94487, 94491, 94495, 94499, 94503, 94507, 94511,
+ 94515, 94519, 94524, 94529, 94533, 94536, 94539, 94542, 94545, 94548,
+ 94551, 94554, 94557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 94560, 94565, 94570, 94575, 94579, 94584, 94588, 94593, 94597, 94602,
+ 94606, 94611, 94615, 94620, 94624, 94629, 94634, 94639, 94644, 94649,
+ 94654, 94659, 94664, 94669, 94674, 94679, 94684, 94689, 94694, 94699,
+ 94704, 94709, 94714, 94719, 94724, 94728, 94732, 94737, 94742, 94747,
+ 94751, 94755, 94759, 94764, 94769, 94774, 94779, 94783, 94787, 94793,
+ 94798, 94804, 94809, 94815, 94820, 94826, 94831, 94837, 94842, 94847,
+ 94852, 94857, 94861, 94866, 94872, 94876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 94881, 94888, 94895, 94902, 94909, 94916, 94923, 94930,
+ 94937, 94944, 94951, 94958, 94965, 94972, 94979, 94986, 94993, 95000,
+ 95007, 95014, 95021, 95028, 95035, 95042, 95049, 0, 0, 0, 0, 0, 0, 0,
+ 95056, 95063, 95069, 95075, 95081, 95087, 95093, 95099, 95105, 95111, 0,
+ 0, 0, 0, 0, 0, 95117, 95122, 95127, 95132, 95137, 95141, 95145, 95149,
+ 95154, 95159, 95164, 95169, 95174, 95179, 95184, 95189, 95194, 95199,
+ 95204, 95209, 95214, 95219, 95224, 95229, 95234, 95239, 95244, 95249,
+ 95254, 95259, 95264, 95269, 95274, 95279, 95284, 95289, 95294, 95299,
+ 95304, 95309, 95314, 95319, 95325, 95330, 95336, 95341, 95347, 95352,
+ 95358, 95364, 95368, 95373, 95377, 0, 95381, 95386, 95390, 95394, 95398,
+ 95402, 95406, 95410, 95414, 95418, 95422, 95427, 95431, 95436, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 95441, 95445, 95449, 95453, 95456, 95460,
+ 95463, 95467, 95470, 95474, 95478, 95483, 95487, 95492, 95495, 95499,
+ 95502, 95506, 95509, 95513, 95517, 95521, 95525, 95529, 95533, 95537,
+ 95541, 95545, 95549, 95553, 95557, 95561, 95565, 95569, 95573, 95577,
+ 95581, 95584, 95587, 95591, 95595, 95599, 95602, 95605, 95608, 95612,
+ 95616, 95620, 95624, 95628, 95631, 95634, 95639, 95643, 95648, 95652,
+ 95657, 95662, 95668, 95673, 95679, 95683, 95688, 95692, 95697, 95701,
+ 95705, 95709, 95713, 95716, 95719, 95723, 95727, 0, 0, 0, 0, 0, 0, 0,
+ 95730, 95734, 95737, 95740, 95743, 95746, 95749, 95752, 95755, 95758, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95761, 95765, 95770, 95774, 95779,
+ 95783, 95788, 95792, 95797, 95801, 95806, 95810, 95815, 95820, 95825,
+ 95830, 95835, 95840, 95845, 95850, 95855, 95860, 95865, 95870, 95875,
+ 95880, 95885, 95890, 95895, 95900, 95904, 95908, 95913, 95918, 95923,
+ 95927, 95931, 95935, 95940, 95945, 95950, 95954, 95958, 95963, 95968,
+ 95973, 95979, 95984, 95990, 95995, 96001, 96006, 96012, 96017, 96023,
+ 96028, 0, 0, 0, 0, 0, 0, 0, 0, 96033, 96038, 96042, 96046, 96050, 96054,
+ 96058, 96062, 96066, 96070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96074, 96077, 96082, 96088,
+ 96096, 96101, 96107, 96115, 96121, 96127, 96131, 96135, 96142, 96151,
+ 96158, 96167, 96173, 96182, 96189, 96196, 96203, 96213, 96219, 96223,
+ 96230, 96239, 96249, 96256, 96263, 96267, 96271, 96278, 96288, 96292,
+ 96299, 96306, 96313, 96319, 96326, 96333, 96340, 96347, 96351, 96355,
+ 96359, 96366, 96370, 96377, 96384, 96398, 96407, 96411, 96415, 96419,
+ 96426, 96430, 96434, 96438, 96446, 96454, 96473, 96483, 96503, 96507,
+ 96511, 96515, 96519, 96523, 96527, 96531, 96538, 96542, 96545, 96549,
+ 96553, 96559, 96566, 96575, 96579, 96588, 96597, 96605, 96609, 96616,
+ 96620, 96624, 96628, 96632, 96643, 96652, 96661, 96670, 96679, 96691,
+ 96700, 96709, 96718, 96726, 96735, 96747, 96756, 96765, 96774, 96786,
+ 96795, 96804, 96816, 96825, 96834, 96846, 96855, 96859, 96863, 96867,
+ 96871, 96875, 96879, 96883, 96890, 96894, 96898, 96909, 96913, 96917,
+ 96924, 96930, 96936, 96940, 96947, 96951, 96955, 96959, 96963, 96967,
+ 96971, 96977, 96985, 96989, 96993, 96996, 97002, 97012, 97016, 97028,
+ 97035, 97042, 97049, 97056, 97062, 97066, 97070, 97074, 97078, 97085,
+ 97094, 97101, 97109, 97117, 97123, 97127, 97131, 97135, 97139, 97145,
+ 97154, 97166, 97173, 97180, 97189, 97200, 97206, 97215, 97224, 97231,
+ 97240, 97247, 97254, 97264, 97271, 97278, 97285, 97292, 97296, 97302,
+ 97306, 97317, 97325, 97334, 97346, 97353, 97360, 97370, 97377, 97386,
+ 97393, 97402, 97409, 97416, 97426, 97433, 97440, 97450, 97457, 97469,
+ 97478, 97485, 97492, 97499, 97508, 97518, 97531, 97538, 97548, 97558,
+ 97565, 97574, 97587, 97594, 97601, 97608, 97618, 97628, 97635, 97645,
+ 97652, 97659, 97669, 97675, 97682, 97689, 97696, 97706, 97713, 97720,
+ 97727, 97733, 97740, 97750, 97757, 97761, 97769, 97773, 97785, 97789,
+ 97803, 97807, 97811, 97815, 97819, 97825, 97832, 97840, 97844, 97848,
+ 97852, 97856, 97863, 97867, 97873, 97879, 97887, 97891, 97898, 97906,
+ 97910, 97914, 97920, 97924, 97933, 97942, 97949, 97959, 97965, 97969,
+ 97973, 97981, 97988, 97995, 98001, 98005, 98013, 98017, 98024, 98036,
+ 98043, 98053, 98059, 98063, 98072, 98079, 98088, 98092, 98096, 98103,
+ 98107, 98111, 98115, 98119, 98122, 98128, 98134, 98138, 98142, 98149,
+ 98156, 98163, 98170, 98177, 98184, 98191, 98198, 98204, 98208, 98212,
+ 98219, 98226, 98233, 98240, 98247, 98251, 98254, 98259, 98263, 98267,
+ 98276, 98285, 98289, 98293, 98299, 98305, 98322, 98328, 98332, 98341,
+ 98345, 98349, 98356, 98364, 98372, 98378, 98382, 98386, 98390, 98394,
+ 98397, 98403, 98410, 98420, 98427, 98434, 98441, 98447, 98454, 98461,
+ 98468, 98475, 98482, 98491, 98498, 98510, 98517, 98524, 98534, 98545,
+ 98552, 98559, 98566, 98573, 98580, 98587, 98594, 98601, 98608, 98615,
+ 98625, 98635, 98645, 98652, 98662, 98669, 98676, 98683, 98690, 98696,
+ 98703, 98710, 98717, 98724, 98731, 98738, 98745, 98752, 98758, 98765,
+ 98772, 98781, 98788, 98795, 98799, 98807, 98811, 98815, 98819, 98823,
+ 98827, 98834, 98838, 98847, 98851, 98858, 98866, 98870, 98874, 98878,
+ 98891, 98907, 98911, 98915, 98922, 98928, 98935, 98939, 98943, 98947,
+ 98951, 98955, 98962, 98966, 98984, 98988, 98992, 98999, 99003, 99007,
+ 99013, 99017, 99021, 99029, 99033, 99037, 99041, 99045, 99051, 99062,
+ 99071, 99080, 99087, 99094, 99105, 99112, 99119, 99126, 99133, 99140,
+ 99147, 99154, 99164, 99170, 99177, 99187, 99196, 99203, 99212, 99222,
+ 99229, 99236, 99243, 99250, 99262, 99269, 99276, 99283, 99290, 99297,
+ 99307, 99314, 99321, 99331, 99344, 99356, 99363, 99373, 99380, 99387,
+ 99394, 99408, 99414, 99422, 99432, 99442, 99449, 99456, 99462, 99466,
+ 99473, 99483, 99489, 99502, 99506, 99510, 99517, 99521, 99528, 99538,
+ 99542, 99546, 99550, 99554, 99558, 99565, 99569, 99576, 99583, 99590,
+ 99599, 99608, 99618, 99625, 99632, 99639, 99649, 99656, 99666, 99673,
+ 99683, 99690, 99697, 99707, 99717, 99724, 99730, 99738, 99746, 99752,
+ 99758, 99762, 99766, 99773, 99781, 99787, 99791, 99795, 99799, 99806,
+ 99818, 99821, 99828, 99834, 99838, 99842, 99846, 99850, 99854, 99858,
+ 99862, 99866, 99870, 99874, 99881, 99885, 99891, 99895, 99899, 99903,
+ 99909, 99916, 99923, 99930, 99941, 99949, 99953, 99959, 99968, 99975,
+ 99981, 99984, 99988, 99992, 99998, 100007, 100015, 100019, 100025,
+ 100029, 100033, 100037, 100043, 100050, 100056, 100060, 100066, 100070,
+ 100074, 100083, 100095, 100099, 100106, 100113, 100123, 100130, 100142,
+ 100149, 100156, 100163, 100174, 100184, 100197, 100207, 100214, 100218,
+ 100222, 100226, 100230, 100239, 100248, 100257, 100274, 100283, 100289,
+ 100296, 100304, 100317, 100321, 100330, 100339, 100348, 100357, 100368,
+ 100377, 100386, 100395, 100404, 100413, 100422, 100432, 100435, 100439,
+ 100443, 100447, 100451, 100455, 100461, 100468, 100475, 100482, 100488,
+ 100494, 100501, 100507, 100514, 100522, 100526, 100533, 100540, 100547,
+ 100555, 100558, 100562, 100566, 100570, 100573, 100579, 100583, 100589,
+ 100596, 100603, 100609, 100616, 100623, 100630, 100637, 100644, 100651,
+ 100658, 100665, 100672, 100679, 100686, 100693, 100700, 100707, 100713,
+ 100717, 100726, 100730, 100734, 100738, 100742, 100748, 100755, 100762,
+ 100769, 100776, 100783, 100789, 100797, 100801, 100805, 100809, 100813,
+ 100819, 100836, 100853, 100857, 100861, 100865, 100869, 100873, 100877,
+ 100883, 100890, 100894, 100900, 100907, 100914, 100921, 100928, 100935,
+ 100944, 100951, 100958, 100965, 100972, 100976, 100980, 100986, 100998,
+ 101002, 101006, 101015, 101019, 101023, 101027, 101033, 101037, 101041,
+ 101050, 101054, 101058, 101062, 101069, 101073, 101077, 101081, 101085,
+ 101089, 101093, 101097, 101101, 101107, 101114, 101121, 101127, 101131,
+ 101148, 101154, 101158, 101164, 101170, 101176, 101182, 101188, 101194,
+ 101198, 101202, 101206, 101212, 101216, 101222, 101226, 101230, 101237,
+ 101244, 101261, 101265, 101269, 101273, 101277, 101281, 101293, 101296,
+ 101301, 101306, 101321, 101331, 101343, 101347, 101351, 101355, 101361,
+ 101368, 101375, 101385, 101397, 101403, 101409, 101418, 101422, 101426,
+ 101433, 101443, 101450, 101456, 101460, 101464, 101471, 101477, 101481,
+ 101487, 101491, 101499, 101505, 101509, 101517, 101525, 101532, 101538,
+ 101545, 101552, 101562, 101572, 101576, 101580, 101584, 101588, 101594,
+ 101601, 101607, 101614, 101621, 101628, 101637, 101644, 101651, 101657,
+ 101664, 101671, 101678, 101685, 101692, 101699, 101705, 101712, 101719,
+ 101726, 101735, 101742, 101749, 101753, 101759, 101763, 101769, 101776,
+ 101783, 101790, 101794, 101798, 101802, 101806, 101810, 101817, 101821,
+ 101825, 101831, 101839, 101843, 101847, 101851, 101855, 101862, 101866,
+ 101870, 101878, 101882, 101886, 101890, 101894, 101900, 101904, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101908, 101914, 101920, 101927,
+ 101934, 101941, 101948, 101955, 101962, 101968, 101975, 101982, 101989,
+ 101996, 102003, 102010, 102016, 102022, 102028, 102034, 102040, 102046,
+ 102052, 102058, 102064, 102071, 102078, 102085, 102092, 102099, 102106,
+ 102112, 102118, 102124, 102131, 102138, 102144, 102150, 102159, 102166,
+ 102173, 102180, 102187, 102194, 102201, 102207, 102213, 102219, 102228,
+ 102235, 102242, 102253, 102264, 102270, 102276, 102282, 102291, 102298,
+ 102305, 102315, 102325, 102336, 102347, 102359, 102372, 102383, 102394,
+ 102406, 102419, 102430, 102441, 102452, 102463, 102474, 102486, 102494,
+ 102502, 102511, 102520, 102529, 102535, 102541, 102547, 102554, 102564,
+ 102571, 102581, 102586, 102591, 102597, 102603, 102611, 102619, 102628,
+ 102639, 102650, 102658, 102666, 102675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 102684, 102695, 102702, 102710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 102718, 102722, 102726, 102730, 102734, 102738, 102742, 102746, 102750,
+ 102754, 102758, 102762, 102766, 102770, 102774, 102778, 102782, 102786,
+ 102790, 102794, 102798, 102802, 102806, 102810, 102814, 102818, 102822,
+ 102826, 102830, 102834, 102838, 102842, 102846, 102850, 102854, 102858,
+ 102862, 102866, 102870, 102874, 102878, 102882, 102886, 102890, 102894,
+ 102898, 102902, 102906, 102910, 102914, 102918, 102922, 102926, 102930,
+ 102934, 102938, 102942, 102946, 102950, 102954, 102958, 102962, 102966,
+ 102970, 102974, 102978, 102982, 102986, 102990, 102994, 102998, 103002,
+ 103006, 103010, 103014, 103018, 103022, 103026, 103030, 103034, 103038,
+ 103042, 103046, 103050, 103054, 103058, 103062, 103066, 103070, 103074,
+ 103078, 103082, 103086, 103090, 103094, 103098, 103102, 103106, 103110,
+ 103114, 103118, 103122, 103126, 103130, 103134, 103138, 103142, 103146,
+ 103150, 103154, 103158, 103162, 103166, 103170, 103174, 103178, 103182,
+ 103186, 103190, 103194, 103198, 103202, 103206, 103210, 103214, 103218,
+ 103222, 103226, 103230, 103234, 103238, 103242, 103246, 103250, 103254,
+ 103258, 103262, 103266, 103270, 103274, 103278, 103282, 103286, 103290,
+ 103294, 103298, 103302, 103306, 103310, 103314, 103318, 103322, 103326,
+ 103330, 103334, 103338, 103342, 103346, 103350, 103354, 103358, 103362,
+ 103366, 103370, 103374, 103378, 103382, 103386, 103390, 103394, 103398,
+ 103402, 103406, 103410, 103414, 103418, 103422, 103426, 103430, 103434,
+ 103438, 103442, 103446, 103450, 103454, 103458, 103462, 103466, 103470,
+ 103474, 103478, 103482, 103486, 103490, 103494, 103498, 103502, 103506,
+ 103510, 103514, 103518, 103522, 103526, 103530, 103534, 103538, 103542,
+ 103546, 103550, 103554, 103558, 103562, 103566, 103570, 103574, 103578,
+ 103582, 103586, 103590, 103594, 103598, 103602, 103606, 103610, 103614,
+ 103618, 103622, 103626, 103630, 103634, 103638, 103642, 103646, 103650,
+ 103654, 103658, 103662, 103666, 103670, 103674, 103678, 103682, 103686,
+ 103690, 103694, 103698, 103702, 103706, 103710, 103714, 103718, 103722,
+ 103726, 103730, 103734, 103738, 103742, 103746, 103750, 103754, 103758,
+ 103762, 103766, 103770, 103774, 103778, 103782, 103786, 103790, 103794,
+ 103798, 103802, 103806, 103810, 103814, 103818, 103822, 103826, 103830,
+ 103834, 103838, 103842, 103846, 103850, 103854, 103858, 103862, 103866,
+ 103870, 103874, 103878, 103882, 103886, 103890, 103894, 103898, 103902,
+ 103906, 103910, 103914, 103918, 103922, 103926, 103930, 103934, 103938,
+ 103942, 103946, 103950, 103954, 103958, 103962, 103966, 103970, 103974,
+ 103978, 103982, 103986, 103990, 103994, 103998, 104002, 104006, 104010,
+ 104014, 104018, 104022, 104026, 104030, 104034, 104038, 104042, 104046,
+ 104050, 104054, 104058, 104062, 104066, 104070, 104074, 104078, 104082,
+ 104086, 104090, 104094, 104098, 104102, 104106, 104110, 104114, 104118,
+ 104122, 104126, 104130, 104134, 104138, 104142, 104146, 104150, 104154,
+ 104158, 104162, 104166, 104170, 104174, 104178, 104182, 104186, 104190,
+ 104194, 104198, 104202, 104206, 104210, 104214, 104218, 104222, 104226,
+ 104230, 104234, 104238, 104242, 104246, 104250, 104254, 104258, 104262,
+ 104266, 104270, 104274, 104278, 104282, 104286, 104290, 104294, 104298,
+ 104302, 104306, 104310, 104314, 104318, 104322, 104326, 104330, 104334,
+ 104338, 104342, 104346, 104350, 104354, 104358, 104362, 104366, 104370,
+ 104374, 104378, 104382, 104386, 104390, 104394, 104398, 104402, 104406,
+ 104410, 104414, 104418, 104422, 104426, 104430, 104434, 104438, 104442,
+ 104446, 104450, 104454, 104458, 104462, 104466, 104470, 104474, 104478,
+ 104482, 104486, 104490, 104494, 104498, 104502, 104506, 104510, 104514,
+ 104518, 104522, 104526, 104530, 104534, 104538, 104542, 104546, 104550,
+ 104554, 104558, 104562, 104566, 104570, 104574, 104578, 104582, 104586,
+ 104590, 104594, 104598, 104602, 104606, 104610, 104614, 104618, 104622,
+ 104626, 104630, 104634, 104638, 104642, 104646, 104650, 104654, 104658,
+ 104662, 104666, 104670, 104674, 104678, 104682, 104686, 104690, 104694,
+ 104698, 104702, 104706, 104710, 104714, 104718, 104722, 104726, 104730,
+ 104734, 104738, 104742, 104746, 104750, 104754, 104758, 104762, 104766,
+ 104770, 104774, 104778, 104782, 104786, 104790, 104794, 104798, 104802,
+ 104806, 104810, 104814, 104818, 104822, 104826, 104830, 104834, 104838,
+ 104842, 104846, 104850, 104854, 104858, 104862, 104866, 104870, 104874,
+ 104878, 104882, 104886, 104890, 104894, 104898, 104902, 104906, 104910,
+ 104914, 104918, 104922, 104926, 104930, 104934, 104938, 104942, 104946,
+ 104950, 104954, 104958, 104962, 104966, 104970, 104974, 104978, 104982,
+ 104986, 104990, 104994, 104998, 105002, 105006, 105010, 105014, 105018,
+ 105022, 105026, 105030, 105034, 105038, 105042, 105046, 105050, 105054,
+ 105058, 105062, 105066, 105070, 105074, 105078, 105082, 105086, 105090,
+ 105094, 105098, 105102, 105106, 105110, 105114, 105118, 105122, 105126,
+ 105130, 105134, 105138, 105142, 105146, 105150, 105154, 105158, 105162,
+ 105166, 105170, 105174, 105178, 105182, 105186, 105190, 105194, 105198,
+ 105202, 105206, 105210, 105214, 105218, 105222, 105226, 105230, 105234,
+ 105238, 105242, 105246, 105250, 105254, 105258, 105262, 105266, 105270,
+ 105274, 105278, 105282, 105286, 105290, 105294, 105298, 105302, 105306,
+ 105310, 105314, 105318, 105322, 105326, 105330, 105334, 105338, 105342,
+ 105346, 105350, 105354, 105358, 105362, 105366, 105370, 105374, 105378,
+ 105382, 105386, 105390, 105394, 105398, 105402, 105406, 105410, 105414,
+ 105418, 105422, 105426, 105430, 105434, 105438, 105442, 105446, 105450,
+ 105454, 105458, 105462, 105466, 105470, 105474, 105478, 105482, 105486,
+ 105490, 105494, 105498, 105502, 105506, 105510, 105514, 105518, 105522,
+ 105526, 105530, 105534, 105538, 105542, 105546, 105550, 105554, 105558,
+ 105562, 105566, 105570, 105574, 105578, 105582, 105586, 105590, 105594,
+ 105598, 105602, 105606, 105610, 105614, 105618, 105622, 105626, 105630,
+ 105634, 105638, 105642, 105646, 105650, 105654, 105658, 105662, 105666,
+ 105670, 105674, 105678, 105682, 105686, 105690, 105694, 105698, 105702,
+ 105706, 105710, 105714, 105718, 105722, 105726, 105730, 105734, 105738,
+ 105742, 105746, 105750, 105754, 105758, 105762, 105766, 105770, 105774,
+ 105778, 105782, 105786, 105790, 105794, 105798, 105802, 105806, 105810,
+ 105814, 105818, 105822, 105826, 105830, 105834, 105838, 105842, 105846,
+ 105850, 105854, 105858, 105862, 105866, 105870, 105874, 105878, 105882,
+ 105886, 105890, 105894, 105898, 105902, 105906, 105910, 105914, 105918,
+ 105922, 105926, 105930, 105934, 105938, 105942, 105946, 105950, 105954,
+ 105958, 105962, 105966, 105970, 105974, 105978, 105982, 105986, 105990,
+ 105994, 105998, 106002, 106006, 106010, 106014, 106018, 106022, 106026,
+ 106030, 106034, 106038, 106042, 106046, 106050, 106054, 106058, 106062,
+ 106066, 106070, 106074, 106078, 106082, 106086, 106090, 106094, 106098,
+ 106102, 106106, 106110, 106114, 106118, 106122, 106126, 106130, 106134,
+ 106138, 106142, 106146, 106150, 106154, 106158, 106162, 106166, 106170,
+ 106174, 106178, 106182, 106186, 106190, 106194, 106198, 106202, 106206,
+ 106210, 106214, 106218, 106222, 106226, 106230, 106234, 106238, 106242,
+ 106246, 106250, 106254, 106258, 106262, 106266, 106270, 106274, 106278,
+ 106282, 106286, 106290, 106294, 106298, 106302, 106306, 106310, 106314,
+ 106318, 106322, 106326, 106330, 106334, 106338, 106342, 106346, 106350,
+ 106354, 106358, 106362, 106366, 106370, 106374, 106378, 106382, 106386,
+ 106390, 106394, 106398, 106402, 106406, 106410, 106414, 106418, 106422,
+ 106426, 106430, 106434, 106438, 106442, 106446, 106450, 106454, 106458,
+ 106462, 106466, 106470, 106474, 106478, 106482, 106486, 106490, 106494,
+ 106498, 106502, 106506, 106510, 106514, 106518, 106522, 106526, 106530,
+ 106534, 106538, 106542, 106546, 106550, 106554, 106558, 106562, 106566,
+ 106570, 106574, 106578, 106582, 106586, 106590, 106594, 106598, 106602,
+ 106606, 106610, 106614, 106618, 106622, 106626, 106630, 106634, 106638,
+ 106642, 106646, 106650, 106654, 106658, 106662, 106666, 106670, 106674,
+ 106678, 106682, 106686, 106690, 106694, 106698, 106702, 106706, 106710,
+ 106714, 106718, 106722, 106726, 106730, 106734, 106738, 106742, 106746,
+ 106750, 106754, 106758, 106762, 106766, 106770, 106774, 106778, 106782,
+ 106786, 106790, 106794, 106798, 106802, 106806, 106810, 106814, 106818,
+ 106822, 106826, 106830, 106834, 106838, 106842, 106846, 106850, 106854,
+ 106858, 106862, 106866, 106870, 106874, 106878, 106882, 106886, 106890,
+ 106894, 106898, 106902, 106906, 106910, 106914, 106918, 106922, 106926,
+ 106930, 106934, 106938, 106942, 106946, 106950, 106954, 106958, 106962,
+ 106966, 106970, 106974, 106978, 106982, 106986, 106990, 106994, 106998,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92622, 92626, 92630,
- 92634, 92638, 92642, 92646, 92650, 92654, 92658, 92663, 92668, 92673,
- 92678, 92683, 92688, 92693, 92698, 92703, 92709, 92715, 92721, 92728,
- 92735, 92742, 92749, 92756, 92763, 92770, 92777, 92784, 0, 92791, 92795,
- 92799, 92803, 92807, 92811, 92814, 92818, 92821, 92825, 92828, 92832,
- 92836, 92841, 92845, 92850, 92853, 92857, 92860, 92864, 92867, 92871,
- 92875, 92879, 92883, 92887, 92891, 92895, 92899, 92903, 92907, 92911,
- 92915, 92919, 92923, 92927, 92931, 92935, 92939, 92942, 92945, 92949,
- 92953, 92957, 92960, 92963, 92966, 92970, 92974, 92978, 92982, 92986,
- 92989, 92993, 92999, 93005, 93011, 93016, 93023, 93027, 93032, 93036,
- 93041, 93046, 93052, 93057, 93063, 93067, 93072, 93076, 93081, 93084,
- 93087, 93091, 93096, 93102, 93107, 93113, 0, 0, 0, 0, 93118, 93121,
- 93124, 93127, 93130, 93133, 93136, 93139, 93142, 93145, 93149, 93153,
- 93157, 93161, 93165, 93169, 93173, 93177, 93181, 93186, 93191, 93195,
- 93198, 93201, 93204, 93207, 93210, 93213, 93216, 93219, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93222, 93226, 93230, 93234, 93237, 93241,
- 93244, 93248, 93251, 93255, 93258, 93262, 93265, 93269, 93272, 93276,
- 93280, 93284, 93288, 93292, 93296, 93300, 93304, 93308, 93312, 93316,
- 93320, 93324, 93328, 93332, 93336, 93340, 93344, 93348, 93352, 93355,
- 93358, 93362, 93366, 93370, 93373, 93376, 93379, 93383, 93387, 93391,
- 93395, 93399, 93402, 93407, 93411, 93416, 93420, 93425, 93429, 93434,
- 93438, 93443, 93447, 93451, 93455, 93459, 93462, 93466, 93471, 93474, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93478, 93481, 93486, 93492, 93500,
- 93505, 93511, 93519, 93525, 93531, 93535, 93539, 93546, 93555, 93562,
- 93571, 93577, 93586, 93593, 93600, 93607, 93617, 93623, 93627, 93634,
- 93643, 93653, 93660, 93667, 93671, 93675, 93682, 93692, 93696, 93703,
- 93710, 93717, 93723, 93730, 93737, 93744, 93751, 93755, 93759, 93763,
- 93770, 93774, 93781, 93788, 93802, 93811, 93815, 93819, 93823, 93830,
- 93834, 93838, 93842, 93850, 93858, 93877, 93887, 93907, 93911, 93915,
- 93919, 93923, 93927, 93931, 93935, 93942, 93946, 93949, 93953, 93957,
- 93963, 93970, 93979, 93983, 93992, 94001, 94009, 94013, 94020, 94024,
- 94028, 94032, 94036, 94047, 94056, 94065, 94074, 94083, 94095, 94104,
- 94113, 94122, 94130, 94139, 94151, 94160, 94169, 94178, 94190, 94199,
- 94208, 94220, 94229, 94238, 94250, 94259, 94263, 94267, 94271, 94275,
- 94279, 94283, 94287, 94294, 94298, 94302, 94313, 94317, 94321, 94328,
- 94334, 94340, 94344, 94351, 94355, 94359, 94363, 94367, 94371, 94375,
- 94381, 94389, 94393, 94397, 94400, 94406, 94416, 94420, 94432, 94439,
- 94446, 94453, 94460, 94466, 94470, 94474, 94478, 94482, 94489, 94498,
- 94505, 94513, 94521, 94527, 94531, 94535, 94539, 94543, 94549, 94558,
- 94570, 94577, 94584, 94593, 94604, 94610, 94619, 94628, 94635, 94644,
- 94651, 94658, 94668, 94675, 94682, 94689, 94696, 94700, 94706, 94710,
- 94721, 94729, 94738, 94750, 94757, 94764, 94774, 94781, 94790, 94797,
- 94806, 94813, 94820, 94830, 94837, 94844, 94854, 94861, 94873, 94882,
- 94889, 94896, 94903, 94912, 94922, 94935, 94942, 94952, 94962, 94969,
- 94978, 94991, 94998, 95005, 95012, 95022, 95032, 95039, 95049, 95056,
- 95063, 95073, 95079, 95086, 95093, 95100, 95110, 95117, 95124, 95131,
- 95137, 95144, 95154, 95161, 95165, 95173, 95177, 95189, 95193, 95207,
- 95211, 95215, 95219, 95223, 95229, 95236, 95244, 95248, 95252, 95256,
- 95260, 95267, 95271, 95277, 95283, 95291, 95295, 95302, 95310, 95314,
- 95318, 95324, 95328, 95337, 95346, 95353, 95363, 95369, 95373, 95377,
- 95385, 95392, 95399, 95405, 95409, 95417, 95421, 95428, 95440, 95447,
- 95457, 95463, 95467, 95476, 95483, 95492, 95496, 95500, 95507, 95511,
- 95515, 95519, 95523, 95526, 95532, 95538, 95542, 95546, 95553, 95560,
- 95567, 95574, 95581, 95588, 95595, 95602, 95608, 95612, 95616, 95623,
- 95630, 95637, 95644, 95651, 95655, 95658, 95663, 95667, 95671, 95680,
- 95689, 95693, 95697, 95703, 95709, 95726, 95732, 95736, 95745, 95749,
- 95753, 95760, 95768, 95776, 95782, 95786, 95790, 95794, 95798, 95801,
- 95807, 95814, 95824, 95831, 95838, 95845, 95851, 95858, 95865, 95872,
- 95879, 95886, 95895, 95902, 95914, 95921, 95928, 95938, 95949, 95956,
- 95963, 95970, 95977, 95984, 95991, 95998, 96005, 96012, 96019, 96029,
- 96039, 96049, 96056, 96066, 96073, 96080, 96087, 96094, 96101, 96108,
- 96115, 96122, 96129, 96136, 96143, 96150, 96157, 96163, 96170, 96177,
- 96186, 96193, 96200, 96204, 96212, 96216, 96220, 96224, 96228, 96232,
- 96239, 96243, 96252, 96256, 96263, 96271, 96275, 96279, 96283, 96296,
- 96312, 96316, 96320, 96327, 96333, 96340, 96344, 96348, 96352, 96356,
- 96360, 96367, 96371, 96389, 96393, 96397, 96404, 96408, 96412, 96418,
- 96422, 96426, 96434, 96438, 96442, 96446, 96450, 96456, 96467, 96476,
- 96485, 96492, 96499, 96510, 96517, 96524, 96531, 96538, 96545, 96552,
- 96559, 96569, 96575, 96582, 96592, 96601, 96608, 96617, 96627, 96634,
- 96641, 96648, 96655, 96667, 96674, 96681, 96688, 96695, 96702, 96712,
- 96719, 96726, 96736, 96749, 96761, 96768, 96778, 96785, 96792, 96799,
- 96813, 96819, 96827, 96837, 96847, 96854, 96861, 96867, 96871, 96878,
- 96888, 96894, 96907, 96911, 96915, 96922, 96926, 96933, 96943, 96947,
- 96951, 96955, 96959, 96963, 96970, 96974, 96981, 96988, 96995, 97004,
- 97013, 97023, 97030, 97037, 97044, 97054, 97061, 97071, 97078, 97088,
- 97095, 97102, 97112, 97122, 97129, 97135, 97143, 97151, 97157, 97163,
- 97167, 97171, 97178, 97186, 97192, 97196, 97200, 97204, 97211, 97223,
- 97226, 97233, 97239, 97243, 97247, 97251, 97255, 97259, 97263, 97267,
- 97271, 97275, 97279, 97286, 97290, 97296, 97300, 97304, 97308, 97314,
- 97321, 97328, 97335, 97346, 97354, 97358, 97364, 97373, 97380, 97386,
- 97389, 97393, 97397, 97403, 97412, 97420, 97424, 97430, 97434, 97438,
- 97442, 97448, 97455, 97461, 97465, 97471, 97475, 97479, 97488, 97500,
- 97504, 97511, 97518, 97528, 97535, 97547, 97554, 97561, 97568, 97579,
- 97589, 97602, 97612, 97619, 97623, 97627, 97631, 97635, 97644, 97653,
- 97662, 97679, 97688, 97694, 97701, 97709, 97722, 97726, 97735, 97744,
- 97753, 97762, 97773, 97782, 97791, 97800, 97809, 97818, 97827, 97837,
- 97840, 97844, 97848, 97852, 97856, 97860, 97866, 97873, 97880, 97887,
- 97893, 97899, 97906, 97912, 97919, 97927, 97931, 97938, 97945, 97952,
- 97960, 97963, 97967, 97971, 97975, 97979, 97985, 97989, 97995, 98002,
- 98009, 98015, 98022, 98029, 98036, 98043, 98050, 98057, 98064, 98071,
- 98078, 98085, 98092, 98099, 98106, 98113, 98119, 98123, 98132, 98136,
- 98140, 98144, 98148, 98154, 98161, 98168, 98175, 98182, 98189, 98195,
- 98203, 98207, 98211, 98215, 98219, 98225, 98242, 98259, 98263, 98267,
- 98271, 98275, 98279, 98283, 98289, 98296, 98300, 98306, 98313, 98320,
- 98327, 98334, 98341, 98350, 98357, 98364, 98371, 98378, 98382, 98386,
- 98392, 98404, 98408, 98412, 98421, 98425, 98429, 98433, 98439, 98443,
- 98447, 98456, 98460, 98464, 98468, 98475, 98479, 98483, 98487, 98491,
- 98495, 98499, 98503, 98507, 98513, 98520, 98527, 98533, 98537, 98554,
- 98560, 98564, 98570, 98576, 98582, 98588, 98594, 98600, 98604, 98608,
- 98612, 98618, 98622, 98628, 98632, 98636, 98643, 98650, 98667, 98671,
- 98675, 98679, 98683, 98687, 98699, 98702, 98707, 98712, 98727, 98737,
- 98749, 98753, 98757, 98761, 98767, 98774, 98781, 98791, 98803, 98809,
- 98815, 98824, 98828, 98832, 98839, 98849, 98856, 98862, 98866, 98870,
- 98877, 98883, 98887, 98893, 98897, 98905, 98911, 98915, 98923, 98931,
- 98938, 98944, 98951, 98958, 98968, 98978, 98982, 98986, 98990, 98994,
- 99000, 99007, 99013, 99020, 99027, 99034, 99043, 99050, 99057, 99063,
- 99070, 99077, 99084, 99091, 99098, 99105, 99111, 99118, 99125, 99132,
- 99141, 99148, 99155, 99159, 99165, 99169, 99175, 99182, 99189, 99196,
- 99200, 99204, 99208, 99212, 99216, 99223, 99227, 99231, 99237, 99245,
- 99249, 99253, 99257, 99261, 99268, 99272, 99276, 99284, 99288, 99292,
- 99296, 99300, 99306, 99310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99314, 99320, 99326, 99333, 99340, 99347, 99354, 99361, 99368,
- 99374, 99381, 99388, 99395, 99402, 99409, 99416, 99422, 99428, 99434,
- 99440, 99446, 99452, 99458, 99464, 99470, 99477, 99484, 99491, 99498,
- 99505, 99512, 99518, 99524, 99530, 99537, 99544, 99550, 99556, 99565,
- 99572, 99579, 99586, 99593, 99600, 99607, 99613, 99619, 99625, 99634,
- 99641, 99648, 99659, 99670, 99676, 99682, 99688, 99697, 99704, 99711,
- 99721, 99731, 99742, 99753, 99765, 99778, 99789, 99800, 99812, 99825,
- 99836, 99847, 99858, 99869, 99880, 99892, 99900, 99908, 99917, 99926,
- 99935, 99941, 99947, 99953, 99960, 99970, 99977, 99987, 99992, 99997,
- 100003, 100009, 100017, 100025, 100034, 100045, 100056, 100064, 100072,
- 100081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100090, 100101, 100108,
- 100116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100124, 100128, 100132,
- 100136, 100140, 100144, 100148, 100152, 100156, 100160, 100164, 100168,
- 100172, 100176, 100180, 100184, 100188, 100192, 100196, 100200, 100204,
- 100208, 100212, 100216, 100220, 100224, 100228, 100232, 100236, 100240,
- 100244, 100248, 100252, 100256, 100260, 100264, 100268, 100272, 100276,
- 100280, 100284, 100288, 100292, 100296, 100300, 100304, 100308, 100312,
- 100316, 100320, 100324, 100328, 100332, 100336, 100340, 100344, 100348,
- 100352, 100356, 100360, 100364, 100368, 100372, 100376, 100380, 100384,
- 100388, 100392, 100396, 100400, 100404, 100408, 100412, 100416, 100420,
- 100424, 100428, 100432, 100436, 100440, 100444, 100448, 100452, 100456,
- 100460, 100464, 100468, 100472, 100476, 100480, 100484, 100488, 100492,
- 100496, 100500, 100504, 100508, 100512, 100516, 100520, 100524, 100528,
- 100532, 100536, 100540, 100544, 100548, 100552, 100556, 100560, 100564,
- 100568, 100572, 100576, 100580, 100584, 100588, 100592, 100596, 100600,
- 100604, 100608, 100612, 100616, 100620, 100624, 100628, 100632, 100636,
- 100640, 100644, 100648, 100652, 100656, 100660, 100664, 100668, 100672,
- 100676, 100680, 100684, 100688, 100692, 100696, 100700, 100704, 100708,
- 100712, 100716, 100720, 100724, 100728, 100732, 100736, 100740, 100744,
- 100748, 100752, 100756, 100760, 100764, 100768, 100772, 100776, 100780,
- 100784, 100788, 100792, 100796, 100800, 100804, 100808, 100812, 100816,
- 100820, 100824, 100828, 100832, 100836, 100840, 100844, 100848, 100852,
- 100856, 100860, 100864, 100868, 100872, 100876, 100880, 100884, 100888,
- 100892, 100896, 100900, 100904, 100908, 100912, 100916, 100920, 100924,
- 100928, 100932, 100936, 100940, 100944, 100948, 100952, 100956, 100960,
- 100964, 100968, 100972, 100976, 100980, 100984, 100988, 100992, 100996,
- 101000, 101004, 101008, 101012, 101016, 101020, 101024, 101028, 101032,
- 101036, 101040, 101044, 101048, 101052, 101056, 101060, 101064, 101068,
- 101072, 101076, 101080, 101084, 101088, 101092, 101096, 101100, 101104,
- 101108, 101112, 101116, 101120, 101124, 101128, 101132, 101136, 101140,
- 101144, 101148, 101152, 101156, 101160, 101164, 101168, 101172, 101176,
- 101180, 101184, 101188, 101192, 101196, 101200, 101204, 101208, 101212,
- 101216, 101220, 101224, 101228, 101232, 101236, 101240, 101244, 101248,
- 101252, 101256, 101260, 101264, 101268, 101272, 101276, 101280, 101284,
- 101288, 101292, 101296, 101300, 101304, 101308, 101312, 101316, 101320,
- 101324, 101328, 101332, 101336, 101340, 101344, 101348, 101352, 101356,
- 101360, 101364, 101368, 101372, 101376, 101380, 101384, 101388, 101392,
- 101396, 101400, 101404, 101408, 101412, 101416, 101420, 101424, 101428,
- 101432, 101436, 101440, 101444, 101448, 101452, 101456, 101460, 101464,
- 101468, 101472, 101476, 101480, 101484, 101488, 101492, 101496, 101500,
- 101504, 101508, 101512, 101516, 101520, 101524, 101528, 101532, 101536,
- 101540, 101544, 101548, 101552, 101556, 101560, 101564, 101568, 101572,
- 101576, 101580, 101584, 101588, 101592, 101596, 101600, 101604, 101608,
- 101612, 101616, 101620, 101624, 101628, 101632, 101636, 101640, 101644,
- 101648, 101652, 101656, 101660, 101664, 101668, 101672, 101676, 101680,
- 101684, 101688, 101692, 101696, 101700, 101704, 101708, 101712, 101716,
- 101720, 101724, 101728, 101732, 101736, 101740, 101744, 101748, 101752,
- 101756, 101760, 101764, 101768, 101772, 101776, 101780, 101784, 101788,
- 101792, 101796, 101800, 101804, 101808, 101812, 101816, 101820, 101824,
- 101828, 101832, 101836, 101840, 101844, 101848, 101852, 101856, 101860,
- 101864, 101868, 101872, 101876, 101880, 101884, 101888, 101892, 101896,
- 101900, 101904, 101908, 101912, 101916, 101920, 101924, 101928, 101932,
- 101936, 101940, 101944, 101948, 101952, 101956, 101960, 101964, 101968,
- 101972, 101976, 101980, 101984, 101988, 101992, 101996, 102000, 102004,
- 102008, 102012, 102016, 102020, 102024, 102028, 102032, 102036, 102040,
- 102044, 102048, 102052, 102056, 102060, 102064, 102068, 102072, 102076,
- 102080, 102084, 102088, 102092, 102096, 102100, 102104, 102108, 102112,
- 102116, 102120, 102124, 102128, 102132, 102136, 102140, 102144, 102148,
- 102152, 102156, 102160, 102164, 102168, 102172, 102176, 102180, 102184,
- 102188, 102192, 102196, 102200, 102204, 102208, 102212, 102216, 102220,
- 102224, 102228, 102232, 102236, 102240, 102244, 102248, 102252, 102256,
- 102260, 102264, 102268, 102272, 102276, 102280, 102284, 102288, 102292,
- 102296, 102300, 102304, 102308, 102312, 102316, 102320, 102324, 102328,
- 102332, 102336, 102340, 102344, 102348, 102352, 102356, 102360, 102364,
- 102368, 102372, 102376, 102380, 102384, 102388, 102392, 102396, 102400,
- 102404, 102408, 102412, 102416, 102420, 102424, 102428, 102432, 102436,
- 102440, 102444, 102448, 102452, 102456, 102460, 102464, 102468, 102472,
- 102476, 102480, 102484, 102488, 102492, 102496, 102500, 102504, 102508,
- 102512, 102516, 102520, 102524, 102528, 102532, 102536, 102540, 102544,
- 102548, 102552, 102556, 102560, 102564, 102568, 102572, 102576, 102580,
- 102584, 102588, 102592, 102596, 102600, 102604, 102608, 102612, 102616,
- 102620, 102624, 102628, 102632, 102636, 102640, 102644, 102648, 102652,
- 102656, 102660, 102664, 102668, 102672, 102676, 102680, 102684, 102688,
- 102692, 102696, 102700, 102704, 102708, 102712, 102716, 102720, 102724,
- 102728, 102732, 102736, 102740, 102744, 102748, 102752, 102756, 102760,
- 102764, 102768, 102772, 102776, 102780, 102784, 102788, 102792, 102796,
- 102800, 102804, 102808, 102812, 102816, 102820, 102824, 102828, 102832,
- 102836, 102840, 102844, 102848, 102852, 102856, 102860, 102864, 102868,
- 102872, 102876, 102880, 102884, 102888, 102892, 102896, 102900, 102904,
- 102908, 102912, 102916, 102920, 102924, 102928, 102932, 102936, 102940,
- 102944, 102948, 102952, 102956, 102960, 102964, 102968, 102972, 102976,
- 102980, 102984, 102988, 102992, 102996, 103000, 103004, 103008, 103012,
- 103016, 103020, 103024, 103028, 103032, 103036, 103040, 103044, 103048,
- 103052, 103056, 103060, 103064, 103068, 103072, 103076, 103080, 103084,
- 103088, 103092, 103096, 103100, 103104, 103108, 103112, 103116, 103120,
- 103124, 103128, 103132, 103136, 103140, 103144, 103148, 103152, 103156,
- 103160, 103164, 103168, 103172, 103176, 103180, 103184, 103188, 103192,
- 103196, 103200, 103204, 103208, 103212, 103216, 103220, 103224, 103228,
- 103232, 103236, 103240, 103244, 103248, 103252, 103256, 103260, 103264,
- 103268, 103272, 103276, 103280, 103284, 103288, 103292, 103296, 103300,
- 103304, 103308, 103312, 103316, 103320, 103324, 103328, 103332, 103336,
- 103340, 103344, 103348, 103352, 103356, 103360, 103364, 103368, 103372,
- 103376, 103380, 103384, 103388, 103392, 103396, 103400, 103404, 103408,
- 103412, 103416, 103420, 103424, 103428, 103432, 103436, 103440, 103444,
- 103448, 103452, 103456, 103460, 103464, 103468, 103472, 103476, 103480,
- 103484, 103488, 103492, 103496, 103500, 103504, 103508, 103512, 103516,
- 103520, 103524, 103528, 103532, 103536, 103540, 103544, 103548, 103552,
- 103556, 103560, 103564, 103568, 103572, 103576, 103580, 103584, 103588,
- 103592, 103596, 103600, 103604, 103608, 103612, 103616, 103620, 103624,
- 103628, 103632, 103636, 103640, 103644, 103648, 103652, 103656, 103660,
- 103664, 103668, 103672, 103676, 103680, 103684, 103688, 103692, 103696,
- 103700, 103704, 103708, 103712, 103716, 103720, 103724, 103728, 103732,
- 103736, 103740, 103744, 103748, 103752, 103756, 103760, 103764, 103768,
- 103772, 103776, 103780, 103784, 103788, 103792, 103796, 103800, 103804,
- 103808, 103812, 103816, 103820, 103824, 103828, 103832, 103836, 103840,
- 103844, 103848, 103852, 103856, 103860, 103864, 103868, 103872, 103876,
- 103880, 103884, 103888, 103892, 103896, 103900, 103904, 103908, 103912,
- 103916, 103920, 103924, 103928, 103932, 103936, 103940, 103944, 103948,
- 103952, 103956, 103960, 103964, 103968, 103972, 103976, 103980, 103984,
- 103988, 103992, 103996, 104000, 104004, 104008, 104012, 104016, 104020,
- 104024, 104028, 104032, 104036, 104040, 104044, 104048, 104052, 104056,
- 104060, 104064, 104068, 104072, 104076, 104080, 104084, 104088, 104092,
- 104096, 104100, 104104, 104108, 104112, 104116, 104120, 104124, 104128,
- 104132, 104136, 104140, 104144, 104148, 104152, 104156, 104160, 104164,
- 104168, 104172, 104176, 104180, 104184, 104188, 104192, 104196, 104200,
- 104204, 104208, 104212, 104216, 104220, 104224, 104228, 104232, 104236,
- 104240, 104244, 104248, 104252, 104256, 104260, 104264, 104268, 104272,
- 104276, 104280, 104284, 104288, 104292, 104296, 104300, 104304, 104308,
- 104312, 104316, 104320, 104324, 104328, 104332, 104336, 104340, 104344,
- 104348, 104352, 104356, 104360, 104364, 104368, 104372, 104376, 104380,
- 104384, 104388, 104392, 104396, 104400, 104404, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 107002, 107009, 107016, 107025, 107034,
+ 107041, 107046, 107053, 107060, 107069, 107080, 107091, 107096, 107103,
+ 107108, 107113, 107118, 107123, 107128, 107133, 107138, 107143, 107148,
+ 107153, 107158, 107165, 107172, 107177, 107182, 107187, 107192, 107199,
+ 107206, 107214, 107219, 107226, 107231, 107236, 107241, 107246, 107251,
+ 107258, 107265, 107270, 107275, 107280, 107285, 107290, 107295, 107300,
+ 107305, 107310, 107315, 107320, 107325, 107330, 107335, 107340, 107345,
+ 107350, 107355, 107360, 107367, 107372, 107377, 107386, 107393, 107398,
+ 107403, 107408, 107413, 107418, 107423, 107428, 107433, 107438, 107443,
+ 107448, 107453, 107458, 107463, 107468, 107473, 107478, 107483, 107488,
+ 107493, 107498, 107504, 107512, 107518, 107526, 107534, 107542, 107548,
+ 107554, 107560, 107566, 107572, 107580, 107590, 107598, 107606, 107612,
+ 107618, 107626, 107634, 107640, 107648, 107656, 107664, 107670, 107676,
+ 107682, 107688, 107694, 107700, 107708, 107716, 107722, 107728, 107734,
+ 107740, 107746, 107754, 107760, 107766, 107772, 107778, 107784, 107790,
+ 107798, 107804, 107810, 107816, 107822, 107830, 107838, 107844, 107850,
+ 107856, 107861, 107867, 107873, 107880, 107885, 107890, 107895, 107900,
+ 107905, 107910, 107915, 107920, 107925, 107934, 107941, 107946, 107951,
+ 107956, 107963, 107968, 107973, 107978, 107985, 107990, 107995, 108000,
+ 108005, 108010, 108015, 108020, 108025, 108030, 108035, 108040, 108047,
+ 108052, 108059, 108064, 108069, 108076, 108081, 108086, 108091, 108096,
+ 108101, 108106, 108111, 108116, 108121, 108126, 108131, 108136, 108141,
+ 108146, 108151, 108156, 108161, 108166, 108171, 108178, 108183, 108188,
+ 108193, 108198, 108203, 108208, 108213, 108218, 108223, 108228, 108233,
+ 108238, 108243, 108250, 108255, 108260, 108267, 108272, 108277, 108282,
+ 108287, 108292, 108297, 108302, 108307, 108312, 108317, 108324, 108329,
+ 108334, 108339, 108344, 108349, 108356, 108363, 108368, 108373, 108378,
+ 108383, 108388, 108393, 108398, 108403, 108408, 108413, 108418, 108423,
+ 108428, 108433, 108438, 108443, 108448, 108453, 108458, 108463, 108468,
+ 108473, 108478, 108483, 108488, 108493, 108498, 108503, 108508, 108513,
+ 108518, 108523, 108528, 108533, 108538, 108543, 108550, 108555, 108560,
+ 108565, 108570, 108575, 108580, 108585, 108590, 108595, 108600, 108605,
+ 108610, 108615, 108620, 108625, 108630, 108635, 108640, 108645, 108650,
+ 108655, 108660, 108665, 108670, 108675, 108680, 108685, 108690, 108695,
+ 108700, 108705, 108710, 108715, 108720, 108725, 108730, 108735, 108740,
+ 108745, 108750, 108755, 108760, 108765, 108770, 108775, 108780, 108785,
+ 108790, 108795, 108800, 108805, 108810, 108815, 108820, 108825, 108830,
+ 108835, 108840, 108847, 108852, 108857, 108862, 108867, 108872, 108877,
+ 108881, 108886, 108891, 108896, 108901, 108906, 108911, 108916, 108921,
+ 108926, 108931, 108936, 108941, 108946, 108951, 108958, 108963, 108968,
+ 108974, 108979, 108984, 108989, 108994, 108999, 109004, 109009, 109014,
+ 109019, 109024, 109029, 109034, 109039, 109044, 109049, 109054, 109059,
+ 109064, 109069, 109074, 109079, 109084, 109089, 109094, 109099, 109104,
+ 109109, 109114, 109119, 109124, 109129, 109134, 109139, 109144, 109149,
+ 109154, 109159, 109164, 109169, 109174, 109179, 109184, 109189, 109196,
+ 109201, 109206, 109213, 109220, 109225, 109230, 109235, 109240, 109245,
+ 109250, 109255, 109260, 109265, 109270, 109275, 109280, 109285, 109290,
+ 109295, 109300, 109305, 109310, 109315, 109320, 109325, 109330, 109335,
+ 109340, 109345, 109352, 109357, 109362, 109367, 109372, 109377, 109382,
+ 109387, 109392, 109397, 109402, 109407, 109412, 109417, 109422, 109427,
+ 109432, 109437, 109442, 109449, 109454, 109459, 109464, 109469, 109474,
+ 109479, 109484, 109490, 109495, 109500, 109505, 109510, 109515, 109520,
+ 109525, 109530, 109537, 109544, 109549, 109554, 109558, 109563, 109567,
+ 109571, 109576, 109583, 109588, 109593, 109602, 109607, 109612, 109617,
+ 109622, 109629, 109636, 109641, 109646, 109651, 109656, 109663, 109668,
+ 109673, 109678, 109683, 109688, 109693, 109698, 109703, 109708, 109713,
+ 109718, 109723, 109730, 109734, 109739, 109744, 109749, 109754, 109758,
+ 109763, 109768, 109773, 109778, 109783, 109788, 109793, 109798, 109803,
+ 109809, 109815, 109821, 109827, 109833, 109839, 109845, 109851, 109857,
+ 109863, 109869, 109875, 109880, 109886, 109892, 109898, 109904, 109910,
+ 109916, 109922, 109928, 109934, 109940, 109946, 109951, 109957, 109963,
+ 109969, 109975, 109981, 109987, 109993, 109999, 110005, 110011, 110017,
+ 110023, 110029, 110035, 110041, 110047, 110053, 110059, 110065, 110071,
+ 110076, 110082, 110088, 110094, 110100, 110106, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110112, 110115, 110119,
+ 110123, 110127, 110130, 110134, 110139, 110143, 110147, 110151, 110155,
+ 110159, 110164, 110169, 110173, 110177, 110180, 110184, 110189, 110194,
+ 110198, 110202, 110206, 110210, 110214, 110218, 110222, 110226, 110230,
+ 110234, 110237, 110241, 110245, 110249, 110253, 110257, 110261, 110267,
+ 110270, 110274, 110278, 110282, 110286, 110290, 110294, 110298, 110302,
+ 110306, 110311, 110316, 110322, 110326, 110330, 110334, 110338, 110342,
+ 110346, 110351, 110354, 110358, 110362, 110366, 110370, 110376, 110380,
+ 110384, 110388, 110392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110396, 110400,
+ 110404, 110410, 110416, 110420, 110425, 110430, 110435, 110440, 110444,
+ 110449, 110454, 110459, 110463, 110468, 110473, 110478, 110482, 110487,
+ 110492, 110497, 110502, 110507, 110512, 110517, 110522, 110526, 110531,
+ 110536, 110541, 110546, 110551, 110556, 110561, 110566, 110571, 110576,
+ 110581, 110588, 110593, 110600, 110605, 110610, 110615, 110620, 110625,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110630, 110634, 110640,
+ 110643, 110646, 110650, 110654, 110658, 110662, 110666, 110670, 110674,
+ 110680, 110686, 110692, 110698, 110704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 104408, 104415, 104422, 104431, 104440, 104447, 104452, 104459,
- 104466, 104475, 104486, 104497, 104502, 104509, 104514, 104519, 104524,
- 104529, 104534, 104539, 104544, 104549, 104554, 104559, 104564, 104571,
- 104578, 104583, 104588, 104593, 104598, 104605, 104612, 104620, 104625,
- 104632, 104637, 104642, 104647, 104652, 104657, 104664, 104671, 104676,
- 104681, 104686, 104691, 104696, 104701, 104706, 104711, 104716, 104721,
- 104726, 104731, 104736, 104741, 104746, 104751, 104756, 104761, 104766,
- 104773, 104778, 104783, 104792, 104799, 104804, 104809, 104814, 104819,
- 104824, 104829, 104834, 104839, 104844, 104849, 104854, 104859, 104864,
- 104869, 104874, 104879, 104884, 104889, 104894, 104899, 104904, 104910,
- 104918, 104924, 104932, 104940, 104948, 104954, 104960, 104966, 104972,
- 104978, 104986, 104996, 105004, 105012, 105018, 105024, 105032, 105040,
- 105046, 105054, 105062, 105070, 105076, 105082, 105088, 105094, 105100,
- 105106, 105114, 105122, 105128, 105134, 105140, 105146, 105152, 105160,
- 105166, 105172, 105178, 105184, 105190, 105196, 105204, 105210, 105216,
- 105222, 105228, 105236, 105244, 105250, 105256, 105262, 105267, 105273,
- 105279, 105286, 105291, 105296, 105301, 105306, 105311, 105316, 105321,
- 105326, 105331, 105340, 105347, 105352, 105357, 105362, 105369, 105374,
- 105379, 105384, 105391, 105396, 105401, 105406, 105411, 105416, 105421,
- 105426, 105431, 105436, 105441, 105446, 105453, 105458, 105465, 105470,
- 105475, 105482, 105487, 105492, 105497, 105502, 105507, 105512, 105517,
- 105522, 105527, 105532, 105537, 105542, 105547, 105552, 105557, 105562,
- 105567, 105572, 105577, 105584, 105589, 105594, 105599, 105604, 105609,
- 105614, 105619, 105624, 105629, 105634, 105639, 105644, 105649, 105656,
- 105661, 105666, 105673, 105678, 105683, 105688, 105693, 105698, 105703,
- 105708, 105713, 105718, 105723, 105730, 105735, 105740, 105745, 105750,
- 105755, 105762, 105769, 105774, 105779, 105784, 105789, 105794, 105799,
- 105804, 105809, 105814, 105819, 105824, 105829, 105834, 105839, 105844,
- 105849, 105854, 105859, 105864, 105869, 105874, 105879, 105884, 105889,
- 105894, 105899, 105904, 105909, 105914, 105919, 105924, 105929, 105934,
- 105939, 105944, 105949, 105956, 105961, 105966, 105971, 105976, 105981,
- 105986, 105991, 105996, 106001, 106006, 106011, 106016, 106021, 106026,
- 106031, 106036, 106041, 106046, 106051, 106056, 106061, 106066, 106071,
- 106076, 106081, 106086, 106091, 106096, 106101, 106106, 106111, 106116,
- 106121, 106126, 106131, 106136, 106141, 106146, 106151, 106156, 106161,
- 106166, 106171, 106176, 106181, 106186, 106191, 106196, 106201, 106206,
- 106211, 106216, 106221, 106226, 106231, 106236, 106241, 106246, 106253,
- 106258, 106263, 106268, 106273, 106278, 106283, 106287, 106292, 106297,
- 106302, 106307, 106312, 106317, 106322, 106327, 106332, 106337, 106342,
- 106347, 106352, 106357, 106364, 106369, 106374, 106380, 106385, 106390,
- 106395, 106400, 106405, 106410, 106415, 106420, 106425, 106430, 106435,
- 106440, 106445, 106450, 106455, 106460, 106465, 106470, 106475, 106480,
- 106485, 106490, 106495, 106500, 106505, 106510, 106515, 106520, 106525,
- 106530, 106535, 106540, 106545, 106550, 106555, 106560, 106565, 106570,
- 106575, 106580, 106585, 106590, 106595, 106602, 106607, 106612, 106619,
- 106626, 106631, 106636, 106641, 106646, 106651, 106656, 106661, 106666,
- 106671, 106676, 106681, 106686, 106691, 106696, 106701, 106706, 106711,
- 106716, 106721, 106726, 106731, 106736, 106741, 106746, 106751, 106758,
- 106763, 106768, 106773, 106778, 106783, 106788, 106793, 106798, 106803,
- 106808, 106813, 106818, 106823, 106828, 106833, 106838, 106843, 106848,
- 106855, 106860, 106865, 106870, 106875, 106880, 106885, 106890, 106896,
- 106901, 106906, 106911, 106916, 106921, 106926, 106931, 106936, 106943,
- 106950, 106955, 106960, 106964, 106969, 106973, 106977, 106982, 106989,
- 106994, 106999, 107008, 107013, 107018, 107023, 107028, 107035, 107042,
- 107047, 107052, 107057, 107062, 107069, 107074, 107079, 107084, 107089,
- 107094, 107099, 107104, 107109, 107114, 107119, 107124, 107129, 107136,
- 107140, 107145, 107150, 107155, 107160, 107164, 107169, 107174, 107179,
- 107184, 107189, 107194, 107199, 107204, 107209, 107215, 107221, 107227,
- 107233, 107239, 107245, 107251, 107257, 107263, 107269, 107275, 107281,
- 107286, 107292, 107298, 107304, 107310, 107316, 107322, 107328, 107334,
- 107340, 107346, 107352, 107357, 107363, 107369, 107375, 107381, 107387,
- 107393, 107399, 107405, 107411, 107417, 107423, 107429, 107435, 107441,
- 107447, 107453, 107459, 107465, 107471, 107477, 107482, 107488, 107494,
- 107500, 107506, 107512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 107518, 107523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110710, 110715, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107529, 107534,
- 107539, 107544, 107551, 107558, 107565, 107572, 107577, 107582, 107587,
- 107592, 107599, 107604, 107611, 107618, 107623, 107628, 107633, 107640,
- 107645, 107650, 107657, 107664, 107669, 107674, 107679, 107686, 107693,
- 107700, 107705, 107710, 107717, 107724, 107731, 107738, 107743, 107748,
- 107753, 107760, 107765, 107770, 107775, 107782, 107791, 107798, 107803,
- 107808, 107813, 107818, 107823, 107828, 107837, 107844, 107849, 107856,
- 107863, 107868, 107873, 107878, 107885, 107890, 107897, 107904, 107909,
- 107914, 107919, 107926, 107933, 107938, 107943, 107950, 107957, 107964,
- 107969, 107974, 107979, 107984, 107991, 108000, 108009, 108014, 108021,
- 108030, 108035, 108040, 108045, 108050, 108057, 108064, 108071, 108078,
- 108083, 108088, 108093, 108100, 108107, 108114, 108119, 108124, 108131,
- 108136, 108143, 108148, 108155, 108160, 108167, 108174, 108179, 108184,
- 108189, 108194, 108199, 108204, 108209, 108214, 108219, 108226, 108233,
- 108240, 108247, 108254, 108263, 108268, 108273, 108280, 108287, 108292,
- 108299, 108306, 108313, 108320, 108327, 108334, 108339, 108344, 108349,
- 108354, 108359, 108368, 108377, 108386, 108395, 108404, 108413, 108422,
- 108431, 108436, 108447, 108458, 108467, 108472, 108477, 108482, 108487,
- 108496, 108503, 108510, 108517, 108524, 108531, 108538, 108547, 108556,
- 108567, 108576, 108587, 108596, 108603, 108612, 108623, 108632, 108641,
- 108650, 108659, 108666, 108673, 108680, 108689, 108698, 108709, 108718,
- 108727, 108738, 108743, 108748, 108759, 108767, 108776, 108785, 108794,
- 108805, 108814, 108823, 108834, 108845, 108856, 108867, 108878, 108889,
- 108896, 108903, 108910, 108917, 108928, 108937, 108944, 108951, 108958,
- 108969, 108980, 108991, 109002, 109013, 109024, 109035, 109046, 109053,
- 109060, 109069, 109078, 109085, 109092, 109099, 109108, 109117, 109126,
- 109133, 109142, 109151, 109160, 109167, 109174, 109179, 109185, 109192,
- 109199, 109206, 109213, 109220, 109227, 109236, 109245, 109254, 109263,
- 109270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109279, 109285, 109290, 109295,
- 109302, 109308, 109314, 109320, 109326, 109332, 109338, 109344, 109348,
- 109352, 109358, 109364, 109370, 109374, 109379, 109384, 109388, 109392,
- 109395, 109401, 109407, 109413, 109419, 109425, 109431, 109437, 109443,
- 109449, 109459, 109469, 109475, 109481, 109491, 109501, 109507, 0, 0,
- 109513, 109521, 109526, 109531, 109537, 109543, 109549, 109555, 109561,
- 109567, 109574, 109581, 109587, 109593, 109599, 109605, 109611, 109617,
- 109623, 109629, 109634, 109640, 109646, 109652, 109658, 109664, 109673,
- 109679, 109684, 109692, 109699, 109706, 109715, 109724, 109733, 109742,
- 109751, 109760, 109769, 109778, 109788, 109798, 109806, 109814, 109823,
- 109832, 109838, 109844, 109850, 109856, 109864, 109872, 109876, 109882,
- 109887, 109893, 109899, 109905, 109911, 109917, 109926, 109931, 109938,
- 109943, 109948, 109953, 109959, 109965, 109971, 109978, 109983, 109988,
- 109993, 109998, 110003, 110009, 110015, 110021, 110027, 110033, 110039,
- 110045, 110051, 110056, 110061, 110066, 110071, 110076, 110081, 110086,
- 110091, 110097, 110103, 110108, 110113, 110118, 110123, 110128, 110134,
- 110141, 110145, 110149, 110153, 110157, 110161, 110165, 110169, 110173,
- 110181, 110191, 110195, 110199, 110205, 110211, 110217, 110223, 110229,
- 110235, 110241, 110247, 110253, 110259, 110265, 110271, 110277, 110283,
- 110287, 110291, 110298, 110304, 110310, 110316, 110321, 110328, 110333,
- 110339, 110345, 110351, 110357, 110362, 110366, 110372, 110376, 110380,
- 110384, 110390, 110396, 110400, 110406, 110412, 110418, 110424, 110430,
- 110438, 110446, 110452, 110458, 110464, 110470, 110482, 110494, 110508,
- 110520, 110532, 110546, 110560, 110574, 110578, 110586, 110594, 110599,
- 110603, 110607, 110611, 110615, 110619, 110623, 110627, 110633, 110639,
- 110645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110651, 110657, 110663, 110669,
- 110675, 110681, 110687, 110693, 110699, 110705, 110711, 110717, 110723,
- 110729, 110735, 110741, 110747, 110753, 110759, 110765, 110771, 110777,
- 110783, 110789, 110795, 110801, 110807, 110813, 110819, 110825, 110831,
- 110837, 110843, 110849, 110855, 110861, 110867, 110873, 110879, 110885,
- 110891, 110897, 110903, 110909, 110915, 110921, 110927, 110933, 110939,
- 110945, 110951, 110957, 110963, 110969, 110975, 110981, 110987, 110993,
- 110999, 111005, 111011, 111017, 111023, 111029, 111035, 111041, 111047,
- 111052, 111057, 111062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111066, 111071,
- 111078, 111085, 111092, 111099, 111104, 111108, 111114, 111118, 111122,
- 111128, 111132, 111136, 111140, 111146, 111153, 111157, 111161, 111165,
- 111169, 111173, 111177, 111183, 111187, 111191, 111195, 111199, 111203,
- 111207, 111211, 111215, 111219, 111223, 111227, 111231, 111236, 111240,
- 111244, 111248, 111252, 111256, 111260, 111264, 111268, 111272, 111279,
- 111283, 111291, 111295, 111299, 111303, 111307, 111311, 111315, 111319,
- 111326, 111330, 111334, 111338, 111342, 111346, 111352, 111356, 111362,
- 111366, 111370, 111374, 111378, 111382, 111386, 111390, 111394, 111398,
- 111402, 111406, 111410, 111414, 111418, 111422, 111426, 111430, 111434,
- 111438, 111446, 111450, 111454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111458,
- 111466, 111474, 111482, 111490, 111498, 111506, 111514, 111522, 111530,
- 111538, 111546, 111554, 111562, 111570, 111578, 111586, 111594, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111602, 111606, 111611, 111616, 111621,
- 111625, 111630, 111635, 111640, 111644, 111649, 111654, 111658, 111662,
- 111666, 111670, 111675, 111680, 111684, 111688, 111693, 111697, 111702,
- 111707, 111712, 111717, 111722, 111726, 111731, 111736, 111741, 111745,
- 111750, 111755, 111760, 111764, 111769, 111774, 111778, 111782, 111786,
- 111790, 111795, 111800, 111804, 111808, 111813, 111817, 111822, 111827,
- 111832, 111837, 111842, 111846, 111851, 111856, 111861, 111865, 111870,
- 111875, 111880, 111884, 111889, 111894, 111898, 111902, 111906, 111910,
- 111915, 111920, 111924, 111928, 111933, 111937, 111942, 111947, 111952,
- 111957, 111962, 111966, 111971, 111976, 111981, 111985, 111990, 0,
- 111995, 111999, 112004, 112009, 112013, 112017, 112021, 112025, 112030,
- 112035, 112039, 112043, 112048, 112052, 112057, 112062, 112067, 112072,
- 112077, 112082, 112088, 112094, 112100, 112105, 112111, 112117, 112123,
- 112128, 112134, 112140, 112145, 112150, 112155, 112160, 112166, 112172,
- 112177, 112182, 112188, 112193, 112199, 112205, 112211, 112217, 112223,
- 112228, 112234, 112240, 112246, 112251, 112257, 112263, 112269, 112274,
- 112280, 112286, 112291, 112296, 112301, 112306, 112312, 112318, 112323,
- 112328, 112334, 112339, 112345, 112351, 112357, 112363, 112369, 0,
- 112373, 112378, 0, 0, 112383, 0, 0, 112388, 112393, 0, 0, 112398, 112402,
- 112406, 112411, 0, 112416, 112420, 112425, 112429, 112434, 112439,
- 112444, 112449, 112454, 112458, 112463, 112468, 0, 112473, 0, 112478,
- 112483, 112487, 112492, 112497, 112501, 112505, 0, 112509, 112514,
- 112519, 112523, 112527, 112532, 112536, 112541, 112546, 112551, 112556,
- 112561, 112566, 112572, 112578, 112584, 112589, 112595, 112601, 112607,
- 112612, 112618, 112624, 112629, 112634, 112639, 112644, 112650, 112656,
- 112661, 112666, 112672, 112677, 112683, 112689, 112695, 112701, 112707,
- 112712, 112718, 112724, 112730, 112735, 112741, 112747, 112753, 112758,
- 112764, 112770, 112775, 112780, 112785, 112790, 112796, 112802, 112807,
- 112812, 112818, 112823, 112829, 112835, 112841, 112847, 112853, 112857,
- 0, 112862, 112867, 112871, 112876, 0, 0, 112881, 112886, 112891, 112895,
- 112899, 112903, 112907, 112912, 0, 112917, 112921, 112926, 112930,
- 112935, 112940, 112945, 0, 112950, 112954, 112959, 112964, 112969,
- 112973, 112978, 112983, 112988, 112992, 112997, 113002, 113006, 113010,
- 113014, 113018, 113023, 113028, 113032, 113036, 113041, 113045, 113050,
- 113055, 113060, 113065, 113070, 113074, 0, 113079, 113084, 113088,
- 113093, 0, 113098, 113102, 113107, 113112, 113116, 0, 113120, 0, 0, 0,
- 113124, 113128, 113133, 113137, 113142, 113147, 113152, 0, 113157,
- 113161, 113166, 113171, 113176, 113180, 113185, 113190, 113195, 113199,
- 113204, 113209, 113213, 113217, 113221, 113225, 113230, 113235, 113239,
- 113243, 113248, 113252, 113257, 113262, 113267, 113272, 113277, 113282,
- 113288, 113294, 113300, 113305, 113311, 113317, 113323, 113328, 113334,
- 113340, 113345, 113350, 113355, 113360, 113366, 113372, 113377, 113382,
- 113388, 113393, 113399, 113405, 113411, 113417, 113423, 113428, 113434,
- 113440, 113446, 113451, 113457, 113463, 113469, 113474, 113480, 113486,
- 113491, 113496, 113501, 113506, 113512, 113518, 113523, 113528, 113534,
- 113539, 113545, 113551, 113557, 113563, 113569, 113573, 113578, 113583,
- 113588, 113592, 113597, 113602, 113607, 113611, 113616, 113621, 113625,
- 113629, 113633, 113637, 113642, 113647, 113651, 113655, 113660, 113664,
- 113669, 113674, 113679, 113684, 113689, 113693, 113698, 113703, 113708,
- 113712, 113717, 113722, 113727, 113731, 113736, 113741, 113745, 113749,
- 113753, 113757, 113762, 113767, 113771, 113775, 113780, 113784, 113789,
- 113794, 113799, 113804, 113809, 113814, 113820, 113826, 113832, 113837,
- 113843, 113849, 113855, 113860, 113866, 113872, 113877, 113882, 113887,
- 113892, 113898, 113904, 113909, 113914, 113920, 113925, 113931, 113937,
- 113943, 113949, 113955, 113960, 113966, 113972, 113978, 113983, 113989,
- 113995, 114001, 114006, 114012, 114018, 114023, 114028, 114033, 114038,
- 114044, 114050, 114055, 114060, 114066, 114071, 114077, 114083, 114089,
- 114095, 114101, 114106, 114112, 114118, 114124, 114129, 114135, 114141,
- 114147, 114152, 114158, 114164, 114169, 114174, 114179, 114184, 114190,
- 114196, 114201, 114206, 114212, 114217, 114223, 114229, 114235, 114241,
- 114247, 114252, 114258, 114264, 114270, 114275, 114281, 114287, 114293,
- 114298, 114304, 114310, 114315, 114320, 114325, 114330, 114336, 114342,
- 114347, 114352, 114358, 114363, 114369, 114375, 114381, 114387, 114393,
- 114399, 114406, 114413, 114420, 114426, 114433, 114440, 114447, 114453,
- 114460, 114467, 114473, 114479, 114485, 114491, 114498, 114505, 114511,
- 114517, 114524, 114530, 114537, 114544, 114551, 114558, 114565, 114571,
- 114578, 114585, 114592, 114598, 114605, 114612, 114619, 114625, 114632,
- 114639, 114645, 114651, 114657, 114663, 114670, 114677, 114683, 114689,
- 114696, 114702, 114709, 114716, 114723, 114730, 114737, 114742, 114748,
- 114754, 114760, 114765, 114771, 114777, 114783, 114788, 114794, 114800,
- 114805, 114810, 114815, 114820, 114826, 114832, 114837, 114842, 114848,
- 114853, 114859, 114865, 114871, 114877, 114883, 114888, 114894, 114900,
- 114906, 114911, 114917, 114923, 114929, 114934, 114940, 114946, 114951,
- 114956, 114961, 114966, 114972, 114978, 114983, 114988, 114994, 114999,
- 115005, 115011, 115017, 115023, 115029, 115035, 0, 0, 115042, 115047,
- 115052, 115057, 115062, 115067, 115072, 115077, 115082, 115087, 115092,
- 115097, 115102, 115107, 115112, 115117, 115122, 115127, 115133, 115138,
- 115143, 115148, 115153, 115158, 115163, 115168, 115172, 115177, 115182,
- 115187, 115192, 115197, 115202, 115207, 115212, 115217, 115222, 115227,
- 115232, 115237, 115242, 115247, 115252, 115257, 115263, 115268, 115273,
- 115278, 115283, 115288, 115293, 115298, 115304, 115309, 115314, 115319,
- 115324, 115329, 115334, 115339, 115344, 115349, 115354, 115359, 115364,
- 115369, 115374, 115379, 115384, 115389, 115394, 115399, 115404, 115409,
- 115414, 115419, 115425, 115430, 115435, 115440, 115445, 115450, 115455,
- 115460, 115464, 115469, 115474, 115479, 115484, 115489, 115494, 115499,
- 115504, 115509, 115514, 115519, 115524, 115529, 115534, 115539, 115544,
- 115549, 115555, 115560, 115565, 115570, 115575, 115580, 115585, 115590,
- 115596, 115601, 115606, 115611, 115616, 115621, 115626, 115632, 115638,
- 115644, 115650, 115656, 115662, 115668, 115674, 115680, 115686, 115692,
- 115698, 115704, 115710, 115716, 115722, 115728, 115735, 115741, 115747,
- 115753, 115759, 115765, 115771, 115777, 115782, 115788, 115794, 115800,
- 115806, 115812, 115818, 115824, 115830, 115836, 115842, 115848, 115854,
- 115860, 115866, 115872, 115878, 115884, 115891, 115897, 115903, 115909,
- 115915, 115921, 115927, 115933, 115940, 115946, 115952, 115958, 115964,
- 115970, 115976, 115982, 115988, 115994, 116000, 116006, 116012, 116018,
- 116024, 116030, 116036, 116042, 116048, 116054, 116060, 116066, 116072,
- 116078, 116085, 116091, 116097, 116103, 116109, 116115, 116121, 116127,
- 116132, 116138, 116144, 116150, 116156, 116162, 116168, 116174, 116180,
- 116186, 116192, 116198, 116204, 116210, 116216, 116222, 116228, 116234,
- 116241, 116247, 116253, 116259, 116265, 116271, 116277, 116283, 116290,
- 116296, 116302, 116308, 116314, 116320, 116326, 116333, 116340, 116347,
- 116354, 116361, 116368, 116375, 116382, 116389, 116396, 116403, 116410,
- 116417, 116424, 116431, 116438, 116445, 116453, 116460, 116467, 116474,
- 116481, 116488, 116495, 116502, 116508, 116515, 116522, 116529, 116536,
- 116543, 116550, 116557, 116564, 116571, 116578, 116585, 116592, 116599,
- 116606, 116613, 116620, 116627, 116635, 116642, 116649, 116656, 116663,
- 116670, 116677, 116684, 116692, 116699, 116706, 116713, 116720, 116727,
- 116734, 116739, 0, 0, 116744, 116749, 116753, 116757, 116761, 116765,
- 116769, 116773, 116777, 116781, 116785, 116790, 116794, 116798, 116802,
- 116806, 116810, 116814, 116818, 116822, 116826, 116831, 116835, 116839,
- 116843, 116847, 116851, 116855, 116859, 116863, 116867, 116873, 116878,
- 116883, 116888, 116893, 116898, 116903, 116908, 116913, 116918, 116924,
- 116929, 116934, 116939, 116944, 116949, 116954, 116959, 116964, 116969,
- 116976, 116983, 116990, 116997, 117004, 117011, 117017, 117024, 117031,
- 117038, 117046, 117054, 117062, 117070, 117078, 117086, 117093, 117100,
- 117107, 117115, 117123, 117131, 117139, 117147, 117155, 117162, 117169,
- 117176, 117184, 117192, 117200, 117208, 117216, 117224, 117229, 117234,
- 117239, 117244, 117249, 117254, 117259, 117264, 117269, 0, 0, 0, 0,
- 117274, 117279, 117283, 117287, 117291, 117295, 117299, 117303, 117307,
- 117311, 117315, 117319, 117323, 117327, 117331, 117335, 117339, 117343,
- 117347, 117351, 117355, 117359, 117363, 117367, 117371, 117375, 117379,
- 117383, 117387, 117391, 117395, 117399, 117403, 117407, 117411, 117415,
- 117419, 117423, 117427, 117431, 117435, 117439, 117443, 117447, 117451,
- 117455, 117459, 117463, 117467, 117471, 117475, 117480, 117484, 117488,
- 117492, 117496, 117500, 117504, 117508, 117512, 117516, 117520, 117524,
- 117528, 117532, 117536, 117540, 117544, 117548, 117552, 117556, 117560,
- 117564, 117568, 117572, 117576, 117580, 117584, 117588, 117592, 117596,
- 117600, 117604, 117608, 117612, 117616, 117620, 117624, 117628, 117632,
- 117636, 117640, 117644, 117648, 117652, 117656, 117660, 117664, 117668,
- 117672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117676, 117682, 117691,
- 117699, 117707, 117716, 117725, 117734, 117743, 117752, 117761, 117770,
- 117779, 117788, 117797, 0, 0, 117806, 117815, 117823, 117831, 117840,
- 117849, 117858, 117867, 117876, 117885, 117894, 117903, 117912, 117921,
- 0, 0, 117930, 117939, 117947, 117955, 117964, 117973, 117982, 117991,
- 118000, 118009, 118018, 118027, 118036, 118045, 118054, 0, 118061,
- 118070, 118078, 118086, 118095, 118104, 118113, 118122, 118131, 118140,
- 118149, 118158, 118167, 118176, 118185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118192,
- 118199, 118204, 118208, 118212, 118216, 118221, 118226, 118231, 118236,
- 118241, 0, 0, 0, 0, 0, 118246, 118251, 118257, 118263, 118269, 118274,
- 118280, 118286, 118292, 118297, 118303, 118309, 118314, 118319, 118324,
- 118329, 118335, 118341, 118346, 118351, 118357, 118362, 118368, 118374,
- 118380, 118386, 118392, 118402, 118409, 118415, 118418, 0, 118421,
- 118426, 118432, 118438, 118444, 118449, 118455, 118461, 118467, 118472,
- 118478, 118484, 118489, 118494, 118499, 118504, 118510, 118516, 118521,
- 118526, 118532, 118537, 118543, 118549, 118555, 118561, 118567, 118570,
- 118573, 118576, 118579, 118582, 118585, 118591, 118598, 118605, 118612,
- 118618, 118625, 118632, 118639, 118645, 118652, 118659, 118665, 118671,
- 118677, 118683, 118690, 118697, 118703, 118709, 118716, 118722, 118729,
- 118736, 118743, 118750, 0, 0, 0, 0, 0, 0, 118757, 118763, 118770, 118777,
- 118784, 118790, 118797, 118804, 118811, 118817, 118824, 118831, 118837,
- 118843, 118849, 118855, 118862, 118869, 118875, 118881, 118888, 118894,
- 118901, 118908, 118915, 118922, 118929, 118938, 118942, 118945, 118949,
- 118953, 118957, 118960, 118963, 118966, 118969, 118972, 118975, 118978,
- 118981, 118984, 118990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110721, 110726, 110731, 110736, 110743, 110750, 110757, 110764, 110769,
+ 110774, 110779, 110784, 110791, 110796, 110803, 110810, 110815, 110820,
+ 110825, 110832, 110837, 110842, 110849, 110856, 110861, 110866, 110871,
+ 110878, 110885, 110892, 110897, 110902, 110909, 110916, 110923, 110930,
+ 110935, 110940, 110945, 110952, 110957, 110962, 110967, 110974, 110983,
+ 110990, 110995, 111000, 111005, 111010, 111015, 111020, 111029, 111036,
+ 111041, 111048, 111055, 111060, 111065, 111070, 111077, 111082, 111089,
+ 111096, 111101, 111106, 111111, 111118, 111125, 111130, 111135, 111142,
+ 111149, 111156, 111161, 111166, 111171, 111176, 111183, 111192, 111201,
+ 111206, 111213, 111222, 111227, 111232, 111237, 111242, 111249, 111256,
+ 111263, 111270, 111275, 111280, 111285, 111292, 111299, 111306, 111311,
+ 111316, 111323, 111328, 111335, 111340, 111347, 111352, 111359, 111366,
+ 111371, 111376, 111381, 111386, 111391, 111396, 111401, 111406, 111411,
+ 111418, 111425, 111432, 111439, 111446, 111455, 111460, 111465, 111472,
+ 111479, 111484, 111491, 111498, 111505, 111512, 111519, 111526, 111531,
+ 111536, 111541, 111546, 111551, 111560, 111569, 111578, 111587, 111596,
+ 111605, 111614, 111623, 111628, 111639, 111650, 111659, 111664, 111669,
+ 111674, 111679, 111688, 111695, 111702, 111709, 111716, 111723, 111730,
+ 111739, 111748, 111759, 111768, 111779, 111788, 111795, 111804, 111815,
+ 111824, 111833, 111842, 111851, 111858, 111865, 111872, 111881, 111890,
+ 111901, 111910, 111919, 111930, 111935, 111940, 111951, 111959, 111968,
+ 111977, 111986, 111997, 112006, 112015, 112026, 112037, 112048, 112059,
+ 112070, 112081, 112088, 112095, 112102, 112109, 112120, 112129, 112136,
+ 112143, 112150, 112161, 112172, 112183, 112194, 112205, 112216, 112227,
+ 112238, 112245, 112252, 112261, 112270, 112277, 112284, 112291, 112300,
+ 112309, 112318, 112325, 112334, 112343, 112352, 112359, 112366, 112371,
+ 112377, 112384, 112391, 112398, 112405, 112412, 112419, 112428, 112437,
+ 112446, 112455, 112462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112471, 112477,
+ 112482, 112487, 112494, 112500, 112506, 112512, 112518, 112524, 112530,
+ 112536, 112540, 112544, 112550, 112556, 112562, 112566, 112571, 112576,
+ 112580, 112584, 112587, 112593, 112599, 112605, 112611, 112617, 112623,
+ 112629, 112635, 112641, 112651, 112661, 112667, 112673, 112683, 112693,
+ 112699, 0, 0, 112705, 112713, 112718, 112723, 112729, 112735, 112741,
+ 112747, 112753, 112759, 112766, 112773, 112779, 112785, 112791, 112797,
+ 112803, 112809, 112815, 112821, 112826, 112832, 112838, 112844, 112850,
+ 112856, 112865, 112871, 112876, 112884, 112891, 112898, 112907, 112916,
+ 112925, 112934, 112943, 112952, 112961, 112970, 112980, 112990, 112998,
+ 113006, 113015, 113024, 113030, 113036, 113042, 113048, 113056, 113064,
+ 113068, 113074, 113079, 113085, 113091, 113097, 113103, 113109, 113118,
+ 113123, 113130, 113135, 113140, 113145, 113151, 113157, 113163, 113170,
+ 113175, 113180, 113185, 113190, 113195, 113201, 113207, 113213, 113219,
+ 113225, 113231, 113237, 113243, 113248, 113253, 113258, 113263, 113268,
+ 113273, 113278, 113283, 113289, 113295, 113300, 113305, 113310, 113315,
+ 113320, 113326, 113333, 113337, 113341, 113345, 113349, 113353, 113357,
+ 113361, 113365, 113373, 113383, 113387, 113391, 113397, 113403, 113409,
+ 113415, 113421, 113427, 113433, 113439, 113445, 113451, 113457, 113463,
+ 113469, 113475, 113479, 113483, 113490, 113496, 113502, 113508, 113513,
+ 113520, 113525, 113531, 113537, 113543, 113549, 113554, 113558, 113564,
+ 113568, 113572, 113576, 113582, 113588, 113592, 113598, 113604, 113610,
+ 113616, 113622, 113630, 113638, 113644, 113650, 113656, 113662, 113674,
+ 113686, 113700, 113712, 113724, 113738, 113752, 113766, 113770, 113778,
+ 113786, 113791, 113795, 113799, 113803, 113807, 113811, 113815, 113819,
+ 113825, 113831, 113837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113843, 113849,
+ 113855, 113861, 113867, 113873, 113879, 113885, 113891, 113897, 113903,
+ 113909, 113915, 113921, 113927, 113933, 113939, 113945, 113951, 113957,
+ 113963, 113969, 113975, 113981, 113987, 113993, 113999, 114005, 114011,
+ 114017, 114023, 114029, 114035, 114041, 114047, 114053, 114059, 114065,
+ 114071, 114077, 114083, 114089, 114095, 114101, 114107, 114113, 114119,
+ 114125, 114131, 114137, 114143, 114149, 114155, 114161, 114167, 114173,
+ 114179, 114185, 114191, 114197, 114203, 114209, 114215, 114221, 114227,
+ 114233, 114239, 114244, 114249, 114254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 114258, 114263, 114270, 114277, 114284, 114291, 114296, 114300, 114306,
+ 114310, 114314, 114320, 114324, 114328, 114332, 114338, 114345, 114349,
+ 114353, 114357, 114361, 114365, 114369, 114375, 114379, 114383, 114387,
+ 114391, 114395, 114399, 114403, 114407, 114411, 114415, 114419, 114423,
+ 114428, 114432, 114436, 114440, 114444, 114448, 114452, 114456, 114460,
+ 114464, 114471, 114475, 114483, 114487, 114491, 114495, 114499, 114503,
+ 114507, 114511, 114518, 114522, 114526, 114530, 114534, 114538, 114544,
+ 114548, 114554, 114558, 114562, 114566, 114570, 114574, 114578, 114582,
+ 114586, 114590, 114594, 114598, 114602, 114606, 114610, 114614, 114618,
+ 114622, 114626, 114630, 114638, 114642, 114646, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 114650, 114658, 114666, 114674, 114682, 114690, 114698, 114706,
+ 114714, 114722, 114730, 114738, 114746, 114754, 114762, 114770, 114778,
+ 114786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114794, 114798, 114803,
+ 114808, 114813, 114817, 114822, 114827, 114832, 114836, 114841, 114846,
+ 114850, 114854, 114859, 114863, 114868, 114873, 114877, 114882, 114887,
+ 114891, 114896, 114901, 114906, 114911, 114916, 114920, 114925, 114930,
+ 114935, 114939, 114944, 114949, 114954, 114958, 114963, 114968, 114972,
+ 114976, 114981, 114985, 114990, 114995, 114999, 115004, 115009, 115013,
+ 115018, 115023, 115028, 115033, 115038, 115042, 115047, 115052, 115057,
+ 115061, 115066, 115071, 115076, 115080, 115085, 115090, 115094, 115098,
+ 115103, 115107, 115112, 115117, 115121, 115126, 115131, 115135, 115140,
+ 115145, 115150, 115155, 115160, 115164, 115169, 115174, 115179, 115183,
+ 115188, 0, 115193, 115197, 115202, 115207, 115211, 115215, 115220,
+ 115224, 115229, 115234, 115238, 115243, 115248, 115252, 115257, 115262,
+ 115267, 115272, 115277, 115282, 115288, 115294, 115300, 115305, 115311,
+ 115317, 115323, 115328, 115334, 115340, 115345, 115350, 115356, 115361,
+ 115367, 115373, 115378, 115384, 115390, 115395, 115401, 115407, 115413,
+ 115419, 115425, 115430, 115436, 115442, 115448, 115453, 115459, 115465,
+ 115471, 115476, 115482, 115488, 115493, 115498, 115504, 115509, 115515,
+ 115521, 115526, 115532, 115538, 115543, 115549, 115555, 115561, 115567,
+ 115573, 0, 115577, 115582, 0, 0, 115587, 0, 0, 115592, 115597, 0, 0,
+ 115602, 115607, 115611, 115616, 0, 115621, 115626, 115631, 115635,
+ 115640, 115645, 115650, 115655, 115660, 115664, 115669, 115674, 0,
+ 115679, 0, 115684, 115689, 115693, 115698, 115703, 115707, 115711, 0,
+ 115716, 115721, 115726, 115730, 115735, 115740, 115744, 115749, 115754,
+ 115759, 115764, 115769, 115774, 115780, 115786, 115792, 115797, 115803,
+ 115809, 115815, 115820, 115826, 115832, 115837, 115842, 115848, 115853,
+ 115859, 115865, 115870, 115876, 115882, 115887, 115893, 115899, 115905,
+ 115911, 115917, 115922, 115928, 115934, 115940, 115945, 115951, 115957,
+ 115963, 115968, 115974, 115980, 115985, 115990, 115996, 116001, 116007,
+ 116013, 116018, 116024, 116030, 116035, 116041, 116047, 116053, 116059,
+ 116065, 116069, 0, 116074, 116079, 116083, 116088, 0, 0, 116093, 116098,
+ 116103, 116107, 116111, 116116, 116120, 116125, 0, 116130, 116135,
+ 116140, 116144, 116149, 116154, 116159, 0, 116164, 116168, 116173,
+ 116178, 116183, 116187, 116192, 116197, 116202, 116206, 116211, 116216,
+ 116220, 116224, 116229, 116233, 116238, 116243, 116247, 116252, 116257,
+ 116261, 116266, 116271, 116276, 116281, 116286, 116290, 0, 116295,
+ 116300, 116304, 116309, 0, 116314, 116318, 116323, 116328, 116332, 0,
+ 116336, 0, 0, 0, 116340, 116345, 116350, 116354, 116359, 116364, 116369,
+ 0, 116374, 116378, 116383, 116388, 116393, 116397, 116402, 116407,
+ 116412, 116416, 116421, 116426, 116430, 116434, 116439, 116443, 116448,
+ 116453, 116457, 116462, 116467, 116471, 116476, 116481, 116486, 116491,
+ 116496, 116501, 116507, 116513, 116519, 116524, 116530, 116536, 116542,
+ 116547, 116553, 116559, 116564, 116569, 116575, 116580, 116586, 116592,
+ 116597, 116603, 116609, 116614, 116620, 116626, 116632, 116638, 116644,
+ 116649, 116655, 116661, 116667, 116672, 116678, 116684, 116690, 116695,
+ 116701, 116707, 116712, 116717, 116723, 116728, 116734, 116740, 116745,
+ 116751, 116757, 116762, 116768, 116774, 116780, 116786, 116792, 116796,
+ 116801, 116806, 116811, 116815, 116820, 116825, 116830, 116834, 116839,
+ 116844, 116848, 116852, 116857, 116861, 116866, 116871, 116875, 116880,
+ 116885, 116889, 116894, 116899, 116904, 116909, 116914, 116918, 116923,
+ 116928, 116933, 116937, 116942, 116947, 116952, 116956, 116961, 116966,
+ 116970, 116974, 116979, 116983, 116988, 116993, 116997, 117002, 117007,
+ 117011, 117016, 117021, 117026, 117031, 117036, 117041, 117047, 117053,
+ 117059, 117064, 117070, 117076, 117082, 117087, 117093, 117099, 117104,
+ 117109, 117115, 117120, 117126, 117132, 117137, 117143, 117149, 117154,
+ 117160, 117166, 117172, 117178, 117184, 117189, 117195, 117201, 117207,
+ 117212, 117218, 117224, 117230, 117235, 117241, 117247, 117252, 117257,
+ 117263, 117268, 117274, 117280, 117285, 117291, 117297, 117302, 117308,
+ 117314, 117320, 117326, 117332, 117337, 117343, 117349, 117355, 117360,
+ 117366, 117372, 117378, 117383, 117389, 117395, 117400, 117405, 117411,
+ 117416, 117422, 117428, 117433, 117439, 117445, 117450, 117456, 117462,
+ 117468, 117474, 117480, 117485, 117491, 117497, 117503, 117508, 117514,
+ 117520, 117526, 117531, 117537, 117543, 117548, 117553, 117559, 117564,
+ 117570, 117576, 117581, 117587, 117593, 117598, 117604, 117610, 117616,
+ 117622, 117628, 117634, 117641, 117648, 117655, 117661, 117668, 117675,
+ 117682, 117688, 117695, 117702, 117708, 117714, 117721, 117727, 117734,
+ 117741, 117747, 117754, 117761, 117767, 117774, 117781, 117788, 117795,
+ 117802, 117808, 117815, 117822, 117829, 117835, 117842, 117849, 117856,
+ 117862, 117869, 117876, 117882, 117888, 117895, 117901, 117908, 117915,
+ 117921, 117928, 117935, 117941, 117948, 117955, 117962, 117969, 117976,
+ 117981, 117987, 117993, 117999, 118004, 118010, 118016, 118022, 118027,
+ 118033, 118039, 118044, 118049, 118055, 118060, 118066, 118072, 118077,
+ 118083, 118089, 118094, 118100, 118106, 118112, 118118, 118124, 118129,
+ 118135, 118141, 118147, 118152, 118158, 118164, 118170, 118175, 118181,
+ 118187, 118192, 118197, 118203, 118208, 118214, 118220, 118225, 118231,
+ 118237, 118242, 118248, 118254, 118260, 118266, 118272, 118278, 0, 0,
+ 118285, 118290, 118295, 118300, 118305, 118310, 118315, 118320, 118325,
+ 118330, 118335, 118340, 118345, 118350, 118355, 118360, 118365, 118370,
+ 118376, 118381, 118386, 118391, 118396, 118401, 118406, 118411, 118415,
+ 118420, 118425, 118430, 118435, 118440, 118445, 118450, 118455, 118460,
+ 118465, 118470, 118475, 118480, 118485, 118490, 118495, 118500, 118506,
+ 118511, 118516, 118521, 118526, 118531, 118536, 118541, 118547, 118552,
+ 118557, 118562, 118567, 118572, 118577, 118582, 118587, 118592, 118597,
+ 118602, 118607, 118612, 118617, 118622, 118627, 118632, 118637, 118642,
+ 118647, 118652, 118657, 118662, 118668, 118673, 118678, 118683, 118688,
+ 118693, 118698, 118703, 118707, 118712, 118717, 118722, 118727, 118732,
+ 118737, 118742, 118747, 118752, 118757, 118762, 118767, 118772, 118777,
+ 118782, 118787, 118792, 118798, 118803, 118808, 118813, 118818, 118823,
+ 118828, 118833, 118839, 118844, 118849, 118854, 118859, 118864, 118869,
+ 118875, 118881, 118887, 118893, 118899, 118905, 118911, 118917, 118923,
+ 118929, 118935, 118941, 118947, 118953, 118959, 118965, 118971, 118978,
+ 118984, 118990, 118996, 119002, 119008, 119014, 119020, 119025, 119031,
+ 119037, 119043, 119049, 119055, 119061, 119067, 119073, 119079, 119085,
+ 119091, 119097, 119103, 119109, 119115, 119121, 119127, 119134, 119140,
+ 119146, 119152, 119158, 119164, 119170, 119176, 119183, 119189, 119195,
+ 119201, 119207, 119213, 119219, 119225, 119231, 119237, 119243, 119249,
+ 119255, 119261, 119267, 119273, 119279, 119285, 119291, 119297, 119303,
+ 119309, 119315, 119321, 119328, 119334, 119340, 119346, 119352, 119358,
+ 119364, 119370, 119375, 119381, 119387, 119393, 119399, 119405, 119411,
+ 119417, 119423, 119429, 119435, 119441, 119447, 119453, 119459, 119465,
+ 119471, 119477, 119484, 119490, 119496, 119502, 119508, 119514, 119520,
+ 119526, 119533, 119539, 119545, 119551, 119557, 119563, 119569, 119576,
+ 119583, 119590, 119597, 119604, 119611, 119618, 119625, 119632, 119639,
+ 119646, 119653, 119660, 119667, 119674, 119681, 119688, 119696, 119703,
+ 119710, 119717, 119724, 119731, 119738, 119745, 119751, 119758, 119765,
+ 119772, 119779, 119786, 119793, 119800, 119807, 119814, 119821, 119828,
+ 119835, 119842, 119849, 119856, 119863, 119870, 119878, 119885, 119892,
+ 119899, 119906, 119913, 119920, 119927, 119935, 119942, 119949, 119956,
+ 119963, 119970, 119977, 119982, 0, 0, 119987, 119992, 119996, 120000,
+ 120004, 120008, 120012, 120016, 120020, 120024, 120028, 120033, 120037,
+ 120041, 120045, 120049, 120053, 120057, 120061, 120065, 120069, 120074,
+ 120078, 120082, 120086, 120090, 120094, 120098, 120102, 120106, 120110,
+ 120116, 120121, 120126, 120131, 120136, 120141, 120146, 120151, 120156,
+ 120161, 120167, 120172, 120177, 120182, 120187, 120192, 120197, 120202,
+ 120207, 120212, 120216, 120220, 120224, 0, 120228, 120232, 120236,
+ 120240, 120244, 120248, 120252, 120256, 120260, 120264, 120268, 120272,
+ 120276, 120280, 120284, 120288, 120292, 120296, 120300, 120304, 120308,
+ 120312, 120316, 120320, 120326, 120332, 120338, 0, 120344, 120349, 0,
+ 120354, 0, 0, 120359, 0, 120364, 120369, 120374, 120379, 120384, 120389,
+ 120394, 120399, 120404, 120409, 0, 120414, 120419, 120424, 120429, 0,
+ 120434, 0, 120439, 0, 0, 0, 0, 0, 0, 120444, 0, 0, 0, 0, 120450, 0,
+ 120456, 0, 120462, 0, 120468, 120474, 120480, 0, 120486, 120492, 0,
+ 120498, 0, 0, 120504, 0, 120510, 0, 120516, 0, 120522, 0, 120530, 0,
+ 120538, 120544, 0, 120550, 0, 0, 120556, 120562, 120568, 120574, 0,
+ 120580, 120586, 120592, 120598, 120604, 120610, 120616, 0, 120622,
+ 120628, 120634, 120640, 0, 120646, 120652, 120658, 120664, 0, 120672, 0,
+ 120680, 120686, 120692, 120698, 120704, 120710, 120716, 120722, 120728,
+ 120734, 0, 120740, 120746, 120752, 120758, 120764, 120770, 120776,
+ 120782, 120788, 120794, 120800, 120806, 120812, 120818, 120824, 120830,
+ 120836, 0, 0, 0, 0, 0, 120842, 120847, 120852, 0, 120857, 120862, 120867,
+ 120872, 120877, 0, 120882, 120887, 120892, 120897, 120902, 120907,
+ 120912, 120917, 120922, 120927, 120932, 120937, 120942, 120947, 120952,
+ 120957, 120962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 120967, 120977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 120985, 120992, 120999, 121006, 121013, 121020, 121027,
+ 121033, 121040, 121047, 121054, 121062, 121070, 121078, 121086, 121094,
+ 121102, 121109, 121116, 121123, 121131, 121139, 121147, 121155, 121163,
+ 121171, 121178, 121185, 121192, 121200, 121208, 121216, 121224, 121232,
+ 121240, 121245, 121250, 121255, 121260, 121265, 121270, 121275, 121280,
+ 121285, 0, 0, 0, 0, 121290, 121295, 121299, 121303, 121307, 121311,
+ 121315, 121319, 121323, 121327, 121331, 121335, 121339, 121343, 121347,
+ 121351, 121355, 121359, 121363, 121367, 121371, 121375, 121379, 121383,
+ 121387, 121391, 121395, 121399, 121403, 121407, 121411, 121415, 121419,
+ 121423, 121427, 121431, 121435, 121439, 121443, 121447, 121451, 121455,
+ 121459, 121463, 121467, 121471, 121475, 121479, 121483, 121487, 121491,
+ 121496, 121500, 121504, 121508, 121512, 121516, 121520, 121524, 121528,
+ 121532, 121536, 121540, 121544, 121548, 121552, 121556, 121560, 121564,
+ 121568, 121572, 121576, 121580, 121584, 121588, 121592, 121596, 121600,
+ 121604, 121608, 121612, 121616, 121620, 121624, 121628, 121632, 121636,
+ 121640, 121644, 121648, 121652, 121656, 121660, 121664, 121668, 121672,
+ 121676, 121680, 121684, 121688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 121692, 121698, 121707, 121715, 121723, 121732, 121741, 121750, 121759,
+ 121768, 121777, 121786, 121795, 121804, 121813, 0, 0, 121822, 121831,
+ 121839, 121847, 121856, 121865, 121874, 121883, 121892, 121901, 121910,
+ 121919, 121928, 121937, 0, 0, 121946, 121955, 121963, 121971, 121980,
+ 121989, 121998, 122007, 122016, 122025, 122034, 122043, 122052, 122061,
+ 122070, 0, 122077, 122086, 122094, 122102, 122111, 122120, 122129,
+ 122138, 122147, 122156, 122165, 122174, 122183, 122192, 122201, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 122208, 122215, 122220, 122224, 122228, 122232, 122237,
+ 122242, 122247, 122252, 122257, 0, 0, 0, 0, 0, 122262, 122267, 122273,
+ 122279, 122285, 122290, 122296, 122302, 122308, 122313, 122319, 122325,
+ 122330, 122335, 122341, 122346, 122352, 122358, 122363, 122369, 122375,
+ 122380, 122386, 122392, 122398, 122404, 122410, 122421, 122428, 122434,
+ 122437, 0, 122440, 122445, 122451, 122457, 122463, 122468, 122474,
+ 122480, 122486, 122491, 122497, 122503, 122508, 122513, 122519, 122524,
+ 122530, 122536, 122541, 122547, 122553, 122558, 122564, 122570, 122576,
+ 122582, 122588, 122591, 122594, 122597, 122600, 122603, 122606, 122612,
+ 122619, 122626, 122633, 122639, 122646, 122653, 122660, 122666, 122673,
+ 122680, 122686, 122692, 122699, 122705, 122712, 122719, 122725, 122732,
+ 122739, 122745, 122752, 122759, 122766, 122773, 122780, 122785, 0, 0, 0,
+ 0, 122790, 122796, 122803, 122810, 122817, 122823, 122830, 122837,
+ 122844, 122850, 122857, 122864, 122870, 122876, 122883, 122889, 122896,
+ 122903, 122909, 122916, 122923, 122929, 122936, 122943, 122950, 122957,
+ 122964, 122973, 122977, 122980, 122983, 122987, 122991, 122994, 122997,
+ 123000, 123003, 123006, 123009, 123012, 123015, 123018, 123024, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118993, 119000, 119008, 119016, 119024,
- 119031, 119039, 119047, 119055, 119062, 119070, 119078, 119085, 119092,
- 119099, 119106, 119114, 119122, 119129, 119136, 119144, 119151, 119159,
- 119167, 119175, 119183, 119191, 119195, 119199, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 119203, 119209, 119215, 119221, 119225, 119231, 119237,
- 119243, 119249, 119255, 119261, 119267, 119273, 119279, 119285, 119291,
- 119297, 119303, 119309, 119315, 119321, 119327, 119333, 119339, 119345,
- 119351, 119357, 119363, 119369, 119375, 119381, 119387, 119393, 119399,
- 119405, 119411, 119417, 119423, 119429, 119435, 119441, 119447, 119453,
- 0, 0, 0, 0, 0, 119459, 119470, 119481, 119492, 119503, 119514, 119525,
- 119536, 119547, 0, 0, 0, 0, 0, 0, 0, 119558, 119562, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119566, 119568, 119570,
- 119574, 119579, 119584, 119586, 119592, 119597, 119599, 119605, 119609,
- 119611, 119615, 119621, 119627, 119633, 119638, 119642, 119649, 119656,
- 119663, 119668, 119675, 119682, 119689, 119693, 119699, 119708, 119717,
- 119724, 119729, 119733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 119737, 119739, 119741, 119745, 119749, 119753, 0, 119755, 119757,
- 119761, 119763, 119765, 119767, 119769, 119774, 119779, 119781, 119787,
- 119791, 119795, 119803, 119805, 119807, 119809, 119811, 119813, 119815,
- 119817, 119819, 119821, 119823, 119827, 119831, 119833, 119835, 119837,
- 119839, 119841, 119846, 119852, 119856, 119860, 119864, 119868, 119873,
- 119877, 119879, 119881, 119885, 119891, 119893, 119895, 119897, 119901,
- 119910, 119916, 119920, 119924, 119926, 119928, 119931, 119933, 119935,
- 119937, 119941, 119943, 119947, 119952, 119954, 119959, 119965, 119972,
- 119976, 119980, 119984, 119988, 119994, 0, 0, 0, 119998, 120000, 120004,
- 120008, 120010, 120014, 120018, 120020, 120024, 120026, 120030, 120034,
- 120038, 120042, 120046, 120050, 120054, 120058, 120064, 120068, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 120072, 120076, 120080, 120084, 120091,
- 120093, 120097, 120099, 120101, 120105, 120109, 120113, 120115, 120119,
- 120123, 120127, 120131, 120135, 120137, 120141, 120143, 120149, 120152,
- 120157, 120159, 120161, 120164, 120166, 120168, 120171, 120178, 120185,
- 120192, 120197, 120201, 120203, 120205, 0, 120207, 120209, 120213,
- 120217, 120221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 120223, 120227, 120232, 120236, 120242, 120248, 120250, 120252,
- 120258, 120260, 120264, 120268, 120270, 120274, 120276, 120280, 120284,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120288, 120290, 120292,
- 120294, 120298, 120300, 120302, 120304, 120306, 120308, 120310, 120312,
- 120314, 120316, 120318, 120320, 120322, 120324, 120326, 120328, 120330,
- 120332, 120334, 120336, 120338, 120340, 120342, 120346, 120348, 120350,
- 120352, 120356, 120358, 120362, 120364, 120366, 120370, 120374, 120380,
- 120382, 120384, 120386, 120388, 120392, 120396, 120398, 120402, 120406,
- 120410, 120414, 120418, 120422, 120426, 120430, 120434, 120438, 120442,
- 120446, 120450, 120454, 120458, 120462, 120466, 0, 120470, 0, 120472,
- 120474, 120476, 120478, 120480, 120488, 120496, 120504, 120512, 120517,
- 120522, 120527, 120531, 120535, 120540, 120545, 120547, 120551, 120553,
- 120555, 120557, 120559, 120561, 120563, 120565, 120569, 120571, 120573,
- 120575, 120579, 120583, 120587, 120591, 120595, 120597, 120603, 120609,
- 120611, 120613, 120615, 120617, 120619, 120628, 120635, 120642, 120646,
- 120653, 120658, 120665, 120674, 120679, 120683, 120687, 120689, 120693,
- 120695, 120699, 120703, 120705, 120709, 120713, 120717, 120719, 120721,
- 120727, 120729, 120731, 120733, 120737, 120741, 120743, 120747, 120749,
- 120751, 120754, 120758, 120760, 120764, 120766, 120768, 120773, 120775,
- 120779, 120783, 120786, 120790, 120794, 120798, 120802, 120806, 120810,
- 120814, 120819, 120823, 120827, 120836, 120841, 120844, 120846, 120849,
- 120852, 120857, 120859, 120862, 120867, 120871, 120874, 120878, 120882,
- 120885, 120890, 120894, 120898, 120902, 120906, 120912, 120918, 120924,
- 120930, 120935, 120946, 120948, 120952, 120954, 120956, 120960, 120964,
- 120966, 120970, 120976, 120981, 120987, 120989, 120993, 120997, 121004,
- 121011, 121015, 121017, 121019, 121023, 121025, 121029, 121033, 121037,
- 121039, 121041, 121048, 121052, 121056, 121060, 121064, 121068, 121070,
- 121074, 121076, 121078, 121082, 121084, 121088, 121092, 121098, 121102,
- 121106, 121110, 121112, 121115, 121119, 121126, 121135, 121144, 121153,
- 121162, 121164, 121168, 121170, 121174, 121185, 121189, 121195, 121201,
- 121206, 0, 121208, 121212, 121214, 121216, 0, 0, 0, 121218, 121223,
- 121234, 121250, 121263, 121276, 121280, 121284, 121290, 121292, 121300,
- 121308, 121310, 121314, 121320, 121326, 121333, 121340, 121342, 121344,
- 121348, 121350, 121356, 121358, 121361, 121365, 121371, 121377, 121388,
- 121394, 121401, 121409, 121413, 121421, 121429, 121435, 121441, 121448,
- 121450, 121454, 121456, 121458, 121463, 121465, 121467, 121469, 121471,
- 121475, 121486, 121492, 121496, 121500, 121504, 121510, 121516, 121522,
- 121528, 121533, 121538, 121544, 121550, 121557, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121564, 121571, 121578, 121585, 121593,
- 121601, 121609, 121617, 121625, 121633, 121641, 121649, 121657, 121663,
- 121669, 121675, 121681, 121687, 121693, 121699, 121705, 121711, 121717,
- 121723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123027, 123034, 123042, 123050, 123058, 123065, 123073, 123081, 123089,
+ 123096, 123104, 123112, 123119, 123126, 123134, 123141, 123149, 123157,
+ 123164, 123172, 123180, 123187, 123195, 123203, 123211, 123219, 123227,
+ 123231, 123235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123238, 123244,
+ 123250, 123256, 123260, 123266, 123272, 123278, 123284, 123290, 123296,
+ 123302, 123308, 123314, 123320, 123326, 123332, 123338, 123344, 123350,
+ 123356, 123362, 123368, 123374, 123380, 123386, 123392, 123398, 123404,
+ 123410, 123416, 123422, 123428, 123434, 123440, 123446, 123452, 123458,
+ 123464, 123470, 123476, 123482, 123488, 0, 0, 0, 0, 0, 123494, 123505,
+ 123516, 123527, 123538, 123549, 123560, 123571, 123582, 0, 0, 0, 0, 0, 0,
+ 0, 123593, 123597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 123601, 123603, 123605, 123609, 123614, 123619, 123621,
+ 123627, 123632, 123634, 123640, 123644, 123646, 123650, 123656, 123662,
+ 123668, 123673, 123677, 123684, 123691, 123698, 123703, 123710, 123717,
+ 123724, 123728, 123734, 123743, 123752, 123759, 123764, 123768, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123772, 123774, 123776, 123780,
+ 123784, 123788, 0, 123790, 123792, 123796, 123798, 123800, 123802,
+ 123804, 123809, 123814, 123816, 123822, 123826, 123830, 123838, 123840,
+ 123842, 123844, 123846, 123848, 123850, 123852, 123854, 123856, 123858,
+ 123862, 123866, 123868, 123870, 123872, 123874, 123876, 123881, 123887,
+ 123891, 123895, 123899, 123903, 123908, 123912, 123914, 123916, 123920,
+ 123926, 123928, 123930, 123932, 123936, 123945, 123951, 123955, 123959,
+ 123961, 123963, 123966, 123968, 123970, 123972, 123976, 123978, 123982,
+ 123987, 123989, 123994, 124000, 124007, 124011, 124015, 124019, 124023,
+ 124029, 0, 0, 0, 124033, 124035, 124039, 124043, 124045, 124049, 124053,
+ 124055, 124059, 124061, 124065, 124069, 124073, 124077, 124081, 124085,
+ 124089, 124093, 124099, 124103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 124107, 124111, 124115, 124119, 124126, 124128, 124132, 124134, 124136,
+ 124140, 124144, 124148, 124150, 124154, 124158, 124162, 124166, 124170,
+ 124172, 124176, 124178, 124184, 124187, 124192, 124194, 124196, 124199,
+ 124201, 124203, 124206, 124213, 124220, 124227, 124232, 124236, 124238,
+ 124240, 0, 124242, 124244, 124248, 124252, 124256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124258, 124262, 124267, 124271,
+ 124277, 124283, 124285, 124287, 124293, 124295, 124299, 124303, 124305,
+ 124309, 124311, 124315, 124319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 124323, 124325, 124327, 124329, 124333, 124335, 124337, 124339,
+ 124341, 124343, 124345, 124347, 124349, 124351, 124353, 124355, 124357,
+ 124359, 124361, 124363, 124365, 124367, 124369, 124371, 124373, 124375,
+ 124377, 124381, 124383, 124385, 124387, 124391, 124393, 124397, 124399,
+ 124401, 124405, 124409, 124415, 124417, 124419, 124421, 124423, 124427,
+ 124431, 124433, 124437, 124441, 124445, 124449, 124453, 124457, 124461,
+ 124465, 124469, 124473, 124477, 124481, 124485, 124489, 124493, 124497,
+ 124501, 0, 124505, 0, 124507, 124509, 124511, 124513, 124515, 124523,
+ 124531, 124539, 124547, 124552, 124557, 124562, 124566, 124570, 124575,
+ 124579, 124581, 124585, 124587, 124589, 124591, 124593, 124595, 124597,
+ 124599, 124603, 124605, 124607, 124609, 124613, 124617, 124621, 124625,
+ 124629, 124631, 124637, 124643, 124645, 124647, 124649, 124651, 124653,
+ 124662, 124669, 124676, 124680, 124687, 124692, 124699, 124708, 124713,
+ 124717, 124721, 124723, 124727, 124729, 124733, 124737, 124739, 124743,
+ 124747, 124751, 124753, 124755, 124761, 124763, 124765, 124767, 124771,
+ 124775, 124777, 124781, 124783, 124785, 124788, 124792, 124794, 124798,
+ 124800, 124802, 124807, 124809, 124813, 124817, 124820, 124824, 124828,
+ 124832, 124836, 124840, 124844, 124848, 124853, 124857, 124861, 124870,
+ 124875, 124878, 124880, 124883, 124886, 124891, 124893, 124896, 124901,
+ 124905, 124908, 124912, 124916, 124919, 124924, 124928, 124932, 124936,
+ 124940, 124946, 124952, 124958, 124964, 124969, 124980, 124982, 124986,
+ 124988, 124990, 124994, 124998, 125000, 125004, 125009, 125014, 125020,
+ 125022, 125026, 125030, 125037, 125044, 125048, 125050, 125052, 125056,
+ 125058, 125062, 125066, 125070, 125072, 125074, 125081, 125085, 125088,
+ 125092, 125096, 125100, 125102, 125106, 125108, 125110, 125114, 125116,
+ 125120, 125124, 125130, 125134, 125138, 125142, 125144, 125147, 125151,
+ 125158, 125167, 125176, 125184, 125192, 125194, 125198, 125200, 125204,
+ 125215, 125219, 125225, 125231, 125236, 0, 125238, 125242, 125244,
+ 125246, 0, 0, 0, 125248, 125253, 125263, 125278, 125290, 125302, 125306,
+ 125310, 125316, 125318, 125326, 125334, 125336, 125340, 125346, 125352,
+ 125359, 125366, 125368, 125370, 125373, 125375, 125381, 125383, 125386,
+ 125390, 125396, 125402, 125413, 125419, 125426, 125434, 125438, 125446,
+ 125454, 125460, 125466, 125473, 125475, 125479, 125481, 125483, 125488,
+ 125490, 125492, 125494, 125496, 125500, 125511, 125517, 125521, 125525,
+ 125529, 125535, 125541, 125547, 125553, 125558, 125563, 125569, 125575,
+ 125582, 0, 0, 125589, 125594, 125602, 125606, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 125615, 125622, 125629, 125636, 125644, 125652, 125660, 125668,
+ 125676, 125684, 125692, 125700, 125708, 125714, 125720, 125726, 125732,
+ 125738, 125744, 125750, 125756, 125762, 125768, 125774, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 121729, 121733, 121737, 121742, 121747, 0, 121749, 121758,
- 121766, 121775, 121789, 121803, 121817, 121824, 121831, 121835, 121844,
- 121852, 121856, 121865, 121872, 121876, 0, 121880, 121884, 121891, 0,
- 121895, 0, 121899, 0, 121906, 0, 121915, 121927, 121939, 0, 121943,
- 121947, 121951, 121955, 121959, 121967, 0, 0, 121975, 121979, 121983,
- 121987, 0, 121991, 0, 0, 121997, 122009, 122017, 122021, 0, 122025,
- 122029, 122035, 122042, 122053, 122063, 122074, 122085, 122094, 122105,
- 122111, 122117, 0, 0, 0, 0, 122123, 122132, 122139, 122145, 122149,
- 122153, 122157, 122166, 122178, 122182, 122189, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122196, 122198, 122200,
- 122204, 122208, 122212, 122221, 122223, 122225, 122228, 122230, 122232,
- 122236, 122238, 122242, 122244, 122248, 122250, 122252, 122256, 122260,
- 122266, 122268, 122272, 122274, 122278, 122282, 122286, 122290, 122292,
- 122294, 122298, 122302, 122306, 122310, 122312, 122314, 122316, 122321,
- 122326, 122329, 122337, 122345, 122347, 122352, 122355, 122360, 122371,
- 122378, 122383, 122388, 122390, 122394, 122396, 122400, 122402, 122406,
- 122410, 122413, 122416, 122418, 122421, 122423, 122427, 122429, 122431,
- 122433, 122437, 122439, 122443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122446,
- 122451, 122456, 122461, 122466, 122471, 122476, 122483, 122490, 122497,
- 122504, 122509, 122514, 122519, 122524, 122531, 122537, 122544, 122551,
- 122558, 122563, 122568, 122573, 122578, 122583, 122590, 122597, 122602,
- 122607, 122614, 122621, 122629, 122637, 122644, 122651, 122659, 122667,
- 122675, 122682, 122692, 122703, 122708, 122715, 122722, 122729, 122737,
- 122745, 122756, 122764, 122772, 122780, 122785, 122790, 122795, 122800,
- 122805, 122810, 122815, 122820, 122825, 122830, 122835, 122840, 122847,
- 122852, 122857, 122864, 122869, 122874, 122879, 122884, 122889, 122894,
- 122899, 122904, 122909, 122914, 122919, 122924, 122931, 122939, 122944,
- 122949, 122956, 122961, 122966, 122971, 122978, 122983, 122990, 122995,
- 123002, 123007, 123016, 123025, 123030, 123035, 123040, 123045, 123050,
- 123055, 123060, 123065, 123070, 123075, 123080, 123085, 123090, 123098,
- 123106, 123111, 123116, 123121, 123126, 123131, 123137, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 123143, 123147, 123151, 123155, 123159, 123163, 123167,
- 123171, 123175, 123179, 123183, 123187, 123191, 123195, 123199, 123203,
- 123207, 123211, 123215, 123219, 123223, 123227, 123231, 123235, 123239,
- 123243, 123247, 123251, 123255, 123259, 123263, 123267, 123271, 123275,
- 123279, 123283, 123287, 123291, 123295, 123299, 123303, 123307, 123311,
- 123315, 123319, 123323, 123327, 123331, 123335, 123339, 123343, 123347,
- 123351, 123355, 123359, 123363, 123367, 123371, 123375, 123379, 123383,
- 123387, 123391, 123395, 123399, 123403, 123407, 123411, 123415, 123419,
- 123423, 123427, 123431, 123435, 123439, 123443, 123447, 123451, 123455,
- 123459, 123463, 123467, 123471, 123475, 123479, 123483, 123487, 123491,
- 123495, 123499, 123503, 123507, 123511, 123515, 123519, 123523, 123527,
- 123531, 123535, 123539, 123543, 123547, 123551, 123555, 123559, 123563,
- 123567, 123571, 123575, 123579, 123583, 123587, 123591, 123595, 123599,
- 123603, 123607, 123611, 123615, 123619, 123623, 123627, 123631, 123635,
- 123639, 123643, 123647, 123651, 123655, 123659, 123663, 123667, 123671,
- 123675, 123679, 123683, 123687, 123691, 123695, 123699, 123703, 123707,
- 123711, 123715, 123719, 123723, 123727, 123731, 123735, 123739, 123743,
- 123747, 123751, 123755, 123759, 123763, 123767, 123771, 123775, 123779,
- 123783, 123787, 123791, 123795, 123799, 123803, 123807, 123811, 123815,
- 123819, 123823, 123827, 123831, 123835, 123839, 123843, 123847, 123851,
- 123855, 123859, 123863, 123867, 123871, 123875, 123879, 123883, 123887,
- 123891, 123895, 123899, 123903, 123907, 123911, 123915, 123919, 123923,
- 123927, 123931, 123935, 123939, 123943, 123947, 123951, 123955, 123959,
- 123963, 123967, 123971, 123975, 123979, 123983, 123987, 123991, 123995,
- 123999, 124003, 124007, 124011, 124015, 124019, 124023, 124027, 124031,
- 124035, 124039, 124043, 124047, 124051, 124055, 124059, 124063, 124067,
- 124071, 124075, 124079, 124083, 124087, 124091, 124095, 124099, 124103,
- 124107, 124111, 124115, 124119, 124123, 124127, 124131, 124135, 124139,
- 124143, 124147, 124151, 124155, 124159, 124163, 124167, 124171, 124175,
- 124179, 124183, 124187, 124191, 124195, 124199, 124203, 124207, 124211,
- 124215, 124219, 124223, 124227, 124231, 124235, 124239, 124243, 124247,
- 124251, 124255, 124259, 124263, 124267, 124271, 124275, 124279, 124283,
- 124287, 124291, 124295, 124299, 124303, 124307, 124311, 124315, 124319,
- 124323, 124327, 124331, 124335, 124339, 124343, 124347, 124351, 124355,
- 124359, 124363, 124367, 124371, 124375, 124379, 124383, 124387, 124391,
- 124395, 124399, 124403, 124407, 124411, 124415, 124419, 124423, 124427,
- 124431, 124435, 124439, 124443, 124447, 124451, 124455, 124459, 124463,
- 124467, 124471, 124475, 124479, 124483, 124487, 124491, 124495, 124499,
- 124503, 124507, 124511, 124515, 124519, 124523, 124527, 124531, 124535,
- 124539, 124543, 124547, 124551, 124555, 124559, 124563, 124567, 124571,
- 124575, 124579, 124583, 124587, 124591, 124595, 124599, 124603, 124607,
- 124611, 124615, 124619, 124623, 124627, 124631, 124635, 124639, 124643,
- 124647, 124651, 124655, 124659, 124663, 124667, 124671, 124675, 124679,
- 124683, 124687, 124691, 124695, 124699, 124703, 124707, 124711, 124715,
- 124719, 124723, 124727, 124731, 124735, 124739, 124743, 124747, 124751,
- 124755, 124759, 124763, 124767, 124771, 124775, 124779, 124783, 124787,
- 124791, 124795, 124799, 124803, 124807, 124811, 124815, 124819, 124823,
- 124827, 124831, 124835, 124839, 124843, 124847, 124851, 124855, 124859,
- 124863, 124867, 124871, 124875, 124879, 124883, 124887, 124891, 124895,
- 124899, 124903, 124907, 124911, 124915, 124919, 124923, 124927, 124931,
- 124935, 124939, 124943, 124947, 124951, 124955, 124959, 124963, 124967,
- 124971, 124975, 124979, 124983, 124987, 124991, 124995, 124999, 125003,
- 125007, 125011, 125015, 125019, 125023, 125027, 125031, 125035, 125039,
- 125043, 125047, 125051, 125055, 125059, 125063, 125067, 125071, 125075,
- 125079, 125083, 125087, 125091, 125095, 125099, 125103, 125107, 125111,
- 125115, 125119, 125123, 125127, 125131, 125135, 125139, 125143, 125147,
- 125151, 125155, 125159, 125163, 125167, 125171, 125175, 125179, 125183,
- 125187, 125191, 125195, 125199, 125203, 125207, 125211, 125215, 125219,
- 125223, 125227, 125231, 125235, 125239, 125243, 125247, 125251, 125255,
- 125259, 125263, 125267, 125271, 125275, 125279, 125283, 125287, 125291,
- 125295, 125299, 125303, 125307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125780,
+ 125784, 125788, 125793, 125798, 125800, 125804, 125813, 125821, 125829,
+ 125842, 125855, 125868, 125875, 125882, 125886, 125895, 125903, 125907,
+ 125916, 125923, 125927, 125931, 125935, 125939, 125946, 125950, 125954,
+ 125958, 125962, 125969, 125978, 125987, 125994, 126006, 126018, 126022,
+ 126026, 126030, 126034, 126038, 126042, 126050, 126058, 126066, 126070,
+ 126074, 126078, 126082, 126086, 126090, 126096, 126102, 126106, 126117,
+ 126125, 126129, 126133, 126137, 126141, 126147, 126154, 126165, 126175,
+ 126185, 126196, 126205, 126216, 126222, 126228, 0, 0, 0, 0, 126234,
+ 126243, 126250, 126256, 126260, 126264, 126268, 126277, 126289, 126293,
+ 126300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 126307, 126309, 126311, 126315, 126319, 126323, 126332, 126334,
+ 126336, 126339, 126341, 126343, 126347, 126349, 126353, 126355, 126359,
+ 126361, 126363, 126367, 126371, 126377, 126379, 126383, 126385, 126389,
+ 126393, 126397, 126401, 126403, 126405, 126409, 126413, 126417, 126421,
+ 126423, 126425, 126427, 126432, 126437, 126440, 126448, 126456, 126458,
+ 126463, 126466, 126471, 126482, 126489, 126494, 126499, 126501, 126505,
+ 126507, 126511, 126513, 126517, 126521, 126524, 126527, 126529, 126532,
+ 126534, 126538, 126540, 126542, 126544, 126548, 126550, 126554, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125311, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125315,
- 125318, 125322, 125326, 125329, 125333, 125337, 125340, 125343, 125347,
- 125351, 125354, 125357, 125360, 125363, 125368, 125371, 125375, 125378,
- 125381, 125384, 125387, 125390, 125393, 125396, 125399, 125402, 125405,
- 125408, 125412, 125416, 125420, 125424, 125429, 125434, 125440, 125446,
- 125452, 125457, 125463, 125469, 125475, 125480, 125486, 125492, 125497,
- 125502, 125507, 125512, 125518, 125524, 125529, 125534, 125540, 125545,
- 125551, 125557, 125563, 125569, 125575, 125579, 125584, 125588, 125593,
- 125597, 125602, 125607, 125613, 125619, 125625, 125630, 125636, 125642,
- 125648, 125653, 125659, 125665, 125670, 125675, 125680, 125685, 125691,
- 125697, 125702, 125707, 125713, 125718, 125724, 125730, 125736, 125742,
- 125748, 125753, 125757, 125762, 125765, 125769, 125772, 125775, 125778,
- 125781, 125784, 125787, 125790, 125793, 125796, 125799, 125802, 125805,
- 125808, 125811, 125814, 125817, 125820, 125823, 125826, 125829, 125832,
- 125835, 125838, 125841, 125844, 125847, 125850, 125853, 125856, 125859,
- 125862, 125865, 125868, 125871, 125874, 125877, 125880, 125883, 125886,
- 125889, 125892, 125895, 125898, 125901, 125904, 125907, 125910, 125913,
- 125916, 125919, 125922, 125925, 125928, 125931, 125934, 125937, 125940,
- 125943, 125946, 125949, 125952, 125955, 125958, 125961, 125964, 125967,
- 125970, 125973, 125976, 125979, 125982, 125985, 125988, 125991, 125994,
- 125997, 126000, 126003, 126006, 126009, 126012, 126015, 126018, 126021,
- 126024, 126027, 126030, 126033, 126036, 126039, 126042, 126045, 126048,
- 126051, 126054, 126057, 126060, 126063, 126066, 126069, 126072, 126075,
- 126078, 126081, 126084, 126087, 126090, 126093, 126096, 126099, 126102,
- 126105, 126108, 126111, 126114, 126117, 126120, 126123, 126126, 126129,
- 126132, 126135, 126138, 126141, 126144, 126147, 126150, 126153, 126156,
- 126159, 126162, 126165, 126168, 126171, 126174, 126177, 126180, 126183,
- 126186, 126189, 126192, 126195, 126198, 126201, 126204, 126207, 126210,
- 126213, 126216, 126219, 126222, 126225, 126228, 126231, 126234, 126237,
- 126240, 126243, 126246, 126249, 126252, 126255, 126258, 126261, 126264,
- 126267, 126270, 126273, 126276, 126279, 126282, 126285, 126288, 126291,
- 126294, 126297, 126300, 126303, 126306, 126309, 126312, 126315, 126318,
- 126321, 126324, 126327, 126330, 126333, 126336, 126339, 126342, 126345,
- 126348, 126351, 126354, 126357, 126360, 126363, 126366, 126369, 126372,
- 126375, 126378, 126381, 126384, 126387, 126390, 126393, 126396, 126399,
- 126402, 126405, 126408, 126411, 126414, 126417, 126420, 126423, 126426,
- 126429, 126432, 126435, 126438, 126441, 126444, 126447, 126450, 126453,
- 126456, 126459, 126462, 126465, 126468, 126471, 126474, 126477, 126480,
- 126483, 126486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 126557, 126562, 126567, 126572, 126577, 126582,
+ 126587, 126594, 126601, 126608, 126615, 126620, 126625, 126630, 126635,
+ 126642, 126648, 126655, 126662, 126669, 126674, 126679, 126684, 126689,
+ 126694, 126701, 126708, 126713, 126718, 126725, 126732, 126740, 126748,
+ 126755, 126762, 126770, 126778, 126786, 126793, 126803, 126814, 126819,
+ 126826, 126833, 126840, 126848, 126856, 126867, 126875, 126883, 126891,
+ 126896, 126901, 126906, 126911, 126916, 126921, 126926, 126931, 126936,
+ 126941, 126946, 126951, 126958, 126963, 126968, 126975, 126980, 126985,
+ 126990, 126995, 127000, 127005, 127010, 127015, 127020, 127025, 127030,
+ 127035, 127042, 127050, 127055, 127060, 127067, 127072, 127077, 127082,
+ 127089, 127094, 127101, 127106, 127113, 127118, 127127, 127136, 127141,
+ 127146, 127151, 127156, 127161, 127166, 127171, 127176, 127181, 127186,
+ 127191, 127196, 127201, 127209, 127217, 127222, 127227, 127232, 127237,
+ 127242, 127248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127254, 127258,
+ 127262, 127266, 127270, 127274, 127278, 127282, 127286, 127290, 127294,
+ 127298, 127302, 127306, 127310, 127314, 127318, 127322, 127326, 127330,
+ 127334, 127338, 127342, 127346, 127350, 127354, 127358, 127362, 127366,
+ 127370, 127374, 127378, 127382, 127386, 127390, 127394, 127398, 127402,
+ 127406, 127410, 127414, 127418, 127422, 127426, 127430, 127434, 127438,
+ 127442, 127446, 127450, 127454, 127458, 127462, 127466, 127470, 127474,
+ 127478, 127482, 127486, 127490, 127494, 127498, 127502, 127506, 127510,
+ 127514, 127518, 127522, 127526, 127530, 127534, 127538, 127542, 127546,
+ 127550, 127554, 127558, 127562, 127566, 127570, 127574, 127578, 127582,
+ 127586, 127590, 127594, 127598, 127602, 127606, 127610, 127614, 127618,
+ 127622, 127626, 127630, 127634, 127638, 127642, 127646, 127650, 127654,
+ 127658, 127662, 127666, 127670, 127674, 127678, 127682, 127686, 127690,
+ 127694, 127698, 127702, 127706, 127710, 127714, 127718, 127722, 127726,
+ 127730, 127734, 127738, 127742, 127746, 127750, 127754, 127758, 127762,
+ 127766, 127770, 127774, 127778, 127782, 127786, 127790, 127794, 127798,
+ 127802, 127806, 127810, 127814, 127818, 127822, 127826, 127830, 127834,
+ 127838, 127842, 127846, 127850, 127854, 127858, 127862, 127866, 127870,
+ 127874, 127878, 127882, 127886, 127890, 127894, 127898, 127902, 127906,
+ 127910, 127914, 127918, 127922, 127926, 127930, 127934, 127938, 127942,
+ 127946, 127950, 127954, 127958, 127962, 127966, 127970, 127974, 127978,
+ 127982, 127986, 127990, 127994, 127998, 128002, 128006, 128010, 128014,
+ 128018, 128022, 128026, 128030, 128034, 128038, 128042, 128046, 128050,
+ 128054, 128058, 128062, 128066, 128070, 128074, 128078, 128082, 128086,
+ 128090, 128094, 128098, 128102, 128106, 128110, 128114, 128118, 128122,
+ 128126, 128130, 128134, 128138, 128142, 128146, 128150, 128154, 128158,
+ 128162, 128166, 128170, 128174, 128178, 128182, 128186, 128190, 128194,
+ 128198, 128202, 128206, 128210, 128214, 128218, 128222, 128226, 128230,
+ 128234, 128238, 128242, 128246, 128250, 128254, 128258, 128262, 128266,
+ 128270, 128274, 128278, 128282, 128286, 128290, 128294, 128298, 128302,
+ 128306, 128310, 128314, 128318, 128322, 128326, 128330, 128334, 128338,
+ 128342, 128346, 128350, 128354, 128358, 128362, 128366, 128370, 128374,
+ 128378, 128382, 128386, 128390, 128394, 128398, 128402, 128406, 128410,
+ 128414, 128418, 128422, 128426, 128430, 128434, 128438, 128442, 128446,
+ 128450, 128454, 128458, 128462, 128466, 128470, 128474, 128478, 128482,
+ 128486, 128490, 128494, 128498, 128502, 128506, 128510, 128514, 128518,
+ 128522, 128526, 128530, 128534, 128538, 128542, 128546, 128550, 128554,
+ 128558, 128562, 128566, 128570, 128574, 128578, 128582, 128586, 128590,
+ 128594, 128598, 128602, 128606, 128610, 128614, 128618, 128622, 128626,
+ 128630, 128634, 128638, 128642, 128646, 128650, 128654, 128658, 128662,
+ 128666, 128670, 128674, 128678, 128682, 128686, 128690, 128694, 128698,
+ 128702, 128706, 128710, 128714, 128718, 128722, 128726, 128730, 128734,
+ 128738, 128742, 128746, 128750, 128754, 128758, 128762, 128766, 128770,
+ 128774, 128778, 128782, 128786, 128790, 128794, 128798, 128802, 128806,
+ 128810, 128814, 128818, 128822, 128826, 128830, 128834, 128838, 128842,
+ 128846, 128850, 128854, 128858, 128862, 128866, 128870, 128874, 128878,
+ 128882, 128886, 128890, 128894, 128898, 128902, 128906, 128910, 128914,
+ 128918, 128922, 128926, 128930, 128934, 128938, 128942, 128946, 128950,
+ 128954, 128958, 128962, 128966, 128970, 128974, 128978, 128982, 128986,
+ 128990, 128994, 128998, 129002, 129006, 129010, 129014, 129018, 129022,
+ 129026, 129030, 129034, 129038, 129042, 129046, 129050, 129054, 129058,
+ 129062, 129066, 129070, 129074, 129078, 129082, 129086, 129090, 129094,
+ 129098, 129102, 129106, 129110, 129114, 129118, 129122, 129126, 129130,
+ 129134, 129138, 129142, 129146, 129150, 129154, 129158, 129162, 129166,
+ 129170, 129174, 129178, 129182, 129186, 129190, 129194, 129198, 129202,
+ 129206, 129210, 129214, 129218, 129222, 129226, 129230, 129234, 129238,
+ 129242, 129246, 129250, 129254, 129258, 129262, 129266, 129270, 129274,
+ 129278, 129282, 129286, 129290, 129294, 129298, 129302, 129306, 129310,
+ 129314, 129318, 129322, 129326, 129330, 129334, 129338, 129342, 129346,
+ 129350, 129354, 129358, 129362, 129366, 129370, 129374, 129378, 129382,
+ 129386, 129390, 129394, 129398, 129402, 129406, 129410, 129414, 129418,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 129422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129426, 129429, 129433, 129437, 129440,
+ 129444, 129448, 129451, 129454, 129458, 129462, 129465, 129468, 129471,
+ 129474, 129479, 129482, 129486, 129489, 129492, 129495, 129498, 129501,
+ 129504, 129507, 129510, 129513, 129516, 129519, 129523, 129527, 129531,
+ 129535, 129540, 129545, 129551, 129557, 129563, 129568, 129574, 129580,
+ 129586, 129591, 129597, 129603, 129608, 129613, 129619, 129624, 129630,
+ 129636, 129641, 129647, 129653, 129658, 129664, 129670, 129676, 129682,
+ 129688, 129692, 129697, 129701, 129706, 129710, 129715, 129720, 129726,
+ 129732, 129738, 129743, 129749, 129755, 129761, 129766, 129772, 129778,
+ 129783, 129788, 129794, 129799, 129805, 129811, 129816, 129822, 129828,
+ 129833, 129839, 129845, 129851, 129857, 129863, 129868, 129872, 129877,
+ 129879, 129883, 129886, 129889, 129892, 129895, 129898, 129901, 129904,
+ 129907, 129910, 129913, 129916, 129919, 129922, 129925, 129928, 129931,
+ 129934, 129937, 129940, 129943, 129946, 129949, 129952, 129955, 129958,
+ 129961, 129964, 129967, 129970, 129973, 129976, 129979, 129982, 129985,
+ 129988, 129991, 129994, 129997, 130000, 130003, 130006, 130009, 130012,
+ 130015, 130018, 130021, 130024, 130027, 130030, 130033, 130036, 130039,
+ 130042, 130045, 130048, 130051, 130054, 130057, 130060, 130063, 130066,
+ 130069, 130072, 130075, 130078, 130081, 130084, 130087, 130090, 130093,
+ 130096, 130099, 130102, 130105, 130108, 130111, 130114, 130117, 130120,
+ 130123, 130126, 130129, 130132, 130135, 130138, 130141, 130144, 130147,
+ 130150, 130153, 130156, 130159, 130162, 130165, 130168, 130171, 130174,
+ 130177, 130180, 130183, 130186, 130189, 130192, 130195, 130198, 130201,
+ 130204, 130207, 130210, 130213, 130216, 130219, 130222, 130225, 130228,
+ 130231, 130234, 130237, 130240, 130243, 130246, 130249, 130252, 130255,
+ 130258, 130261, 130264, 130267, 130270, 130273, 130276, 130279, 130282,
+ 130285, 130288, 130291, 130294, 130297, 130300, 130303, 130306, 130309,
+ 130312, 130315, 130318, 130321, 130324, 130327, 130330, 130333, 130336,
+ 130339, 130342, 130345, 130348, 130351, 130354, 130357, 130360, 130363,
+ 130366, 130369, 130372, 130375, 130378, 130381, 130384, 130387, 130390,
+ 130393, 130396, 130399, 130402, 130405, 130408, 130411, 130414, 130417,
+ 130420, 130423, 130426, 130429, 130432, 130435, 130438, 130441, 130444,
+ 130447, 130450, 130453, 130456, 130459, 130462, 130465, 130468, 130471,
+ 130474, 130477, 130480, 130483, 130486, 130489, 130492, 130495, 130498,
+ 130501, 130504, 130507, 130510, 130513, 130516, 130519, 130522, 130525,
+ 130528, 130531, 130534, 130537, 130540, 130543, 130546, 130549, 130552,
+ 130555, 130558, 130561, 130564, 130567, 130570, 130573, 130576, 130579,
+ 130582, 130585, 130588, 130591, 130594, 130597, 130600, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130603, 130605, 130607, 130612, 130614,
+ 130619, 130621, 130626, 130628, 130633, 130635, 130637, 130639, 130641,
+ 130643, 130645, 130647, 130649, 130651, 130654, 130657, 130659, 130661,
+ 130665, 130668, 130673, 130675, 130677, 130679, 130683, 130686, 130688,
+ 130692, 130694, 130698, 130700, 130704, 130707, 130709, 130713, 130717,
+ 130719, 130725, 130727, 130732, 130734, 130739, 130741, 130746, 130748,
+ 130753, 130755, 130758, 130760, 130764, 130766, 130773, 130775, 130777,
+ 130779, 130784, 130786, 130788, 130790, 130792, 130794, 130799, 130803,
+ 130805, 130810, 130814, 130816, 130821, 130825, 130827, 130832, 130836,
+ 130838, 130840, 130842, 130844, 130848, 130850, 130855, 130857, 130863,
+ 130865, 130871, 130873, 130875, 130877, 130881, 130883, 130890, 130892,
+ 130899, 130901, 130906, 130911, 130913, 130919, 130925, 130927, 130933,
+ 130938, 130940, 130946, 130952, 130954, 130960, 130966, 130968, 130974,
+ 130978, 130980, 130985, 130987, 130989, 130994, 130996, 130998, 131004,
+ 131006, 131011, 131015, 131017, 131022, 131026, 131028, 131034, 131036,
+ 131040, 131042, 131046, 131048, 131055, 131062, 131064, 131071, 131078,
+ 131080, 131085, 131087, 131094, 131096, 131101, 131103, 131109, 131111,
+ 131115, 131117, 131123, 131125, 131129, 131131, 131137, 131139, 131141,
+ 131143, 131148, 131153, 131155, 131159, 131166, 131173, 131178, 131183,
+ 131195, 131197, 131199, 131201, 131203, 131205, 131207, 131209, 131211,
+ 131213, 131215, 131217, 131219, 131221, 131223, 131225, 131227, 131229,
+ 131235, 131242, 131247, 131252, 131263, 131265, 131267, 131269, 131271,
+ 131273, 131275, 131277, 131279, 131281, 131283, 131285, 131287, 131289,
+ 131291, 131293, 131295, 131300, 131302, 131304, 131315, 131317, 131319,
+ 131321, 131323, 131325, 131327, 131329, 131331, 131333, 131335, 131337,
+ 131339, 131341, 131343, 131345, 131347, 131349, 131351, 131353, 131355,
+ 131357, 131359, 131361, 131363, 131365, 131367, 131369, 131371, 131373,
+ 131375, 131377, 131379, 131381, 131383, 131385, 131387, 131389, 131391,
+ 131393, 131395, 131397, 131399, 131401, 131403, 131405, 131407, 131409,
+ 131411, 131413, 131415, 131417, 131419, 131421, 131423, 131425, 131427,
+ 131429, 131431, 131433, 131435, 131437, 131439, 131441, 131443, 131445,
+ 131447, 131449, 131451, 131453, 131455, 131457, 131459, 131461, 131463,
+ 131465, 131467, 131469, 131471, 131473, 131475, 131477, 131479, 131481,
+ 131483, 131485, 131487, 131489, 131491, 131493, 131495, 131497, 131499,
+ 131501, 131503, 131505, 131507, 131509, 131511, 131513, 131515, 131517,
+ 131519, 131521, 131523, 131525, 131527, 131529, 131531, 131533, 131535,
+ 131537, 131539, 131541, 131543, 131545, 131547, 131549, 131551, 131553,
+ 131555, 131557, 131559, 131561, 131563, 131565, 131567, 131569, 131571,
+ 131573, 131575, 131577, 131579, 131581, 131583, 131585, 131587, 131589,
+ 131591, 131593, 131595, 131597, 131599, 131601, 131603, 131605, 131607,
+ 131609, 131611, 131613, 131615, 131617, 131619, 131621, 131623, 131625,
+ 131627, 131629, 131631, 131633, 131635, 131637, 131639, 131641, 131643,
+ 131645, 131647, 131649, 131651, 131653, 131655, 131657, 131659, 131661,
+ 131663, 131665, 131667, 131669, 131671, 131673, 131675, 131677, 131679,
+ 131681, 131683, 131685, 131687, 131689, 131691, 131693, 131695, 131697,
+ 131699, 131701, 131703, 131705, 131707, 131709, 131711, 131713, 131715,
+ 131717, 131719, 131721, 131723, 131725, 131727, 131729, 131731, 131733,
+ 131735, 131737, 131739, 131741, 131743, 131745, 131747, 131749, 131751,
+ 131753, 131755, 131757, 131759, 131761, 131763, 131765, 131767, 131769,
+ 131771, 131773, 131775, 131777, 131779, 131781, 131783, 131785, 131787,
+ 131789, 131791, 131793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 131795, 131805, 131815, 131824, 131833, 131846, 131859, 131871, 131883,
+ 131893, 131903, 131913, 131923, 131934, 131945, 131955, 131964, 131973,
+ 131982, 131995, 132008, 132020, 132032, 132042, 132052, 132062, 132072,
+ 132081, 132090, 132099, 132108, 132117, 132126, 132135, 132144, 132153,
+ 132162, 132171, 132180, 132191, 132201, 132211, 132224, 132234, 132247,
+ 132254, 132264, 132271, 132278, 132285, 132292, 132299, 132306, 132315,
+ 132324, 132333, 132342, 132351, 132360, 132369, 132378, 132386, 132394,
+ 132401, 132411, 132420, 132428, 132435, 132445, 132454, 132458, 132462,
+ 132466, 132470, 132474, 132478, 132482, 132486, 132490, 132494, 132497,
+ 132501, 132504, 132507, 132511, 132515, 132519, 132523, 132527, 132531,
+ 132535, 132539, 132543, 132547, 132551, 132555, 132559, 132563, 132567,
+ 132571, 132575, 132579, 132583, 132587, 132591, 132595, 132599, 132603,
+ 132607, 132611, 132615, 132619, 132623, 132627, 132631, 132635, 132639,
+ 132643, 132647, 132651, 132655, 132659, 132663, 132667, 132671, 132675,
+ 132679, 132683, 132687, 132691, 132695, 132699, 132703, 132707, 132711,
+ 132715, 132719, 132723, 132727, 132731, 132735, 132739, 132743, 132747,
+ 132751, 132755, 132759, 132763, 132767, 132771, 132775, 132779, 132783,
+ 132787, 132791, 132795, 132799, 132803, 132807, 132811, 132815, 132819,
+ 132823, 132827, 132831, 132835, 132839, 132843, 132847, 132850, 132854,
+ 132858, 132862, 132866, 132870, 132874, 132878, 132882, 132886, 132890,
+ 132894, 132898, 132902, 132906, 132910, 132914, 132918, 132922, 132926,
+ 132930, 132934, 132938, 132942, 132946, 132950, 132954, 132958, 132962,
+ 132966, 132970, 132974, 132978, 132982, 132986, 132990, 132994, 132998,
+ 133002, 133006, 133010, 133014, 133018, 133022, 133026, 133030, 133034,
+ 133038, 133042, 133046, 133050, 133054, 133058, 133062, 133066, 133070,
+ 133074, 133078, 133082, 133086, 133090, 133094, 133098, 133102, 133106,
+ 133110, 133114, 133118, 133122, 133126, 133130, 133134, 133138, 133142,
+ 133146, 133150, 133154, 133158, 133162, 133166, 133170, 133174, 133178,
+ 133182, 133186, 133190, 133194, 133198, 133202, 133206, 133210, 133214,
+ 133218, 133222, 133226, 133230, 133234, 133238, 133242, 133246, 133250,
+ 133254, 133258, 133262, 133266, 133270, 133274, 133278, 133282, 133286,
+ 133290, 133294, 133298, 133302, 133306, 133310, 133314, 133318, 133322,
+ 133326, 133330, 133334, 133338, 133342, 133346, 133350, 133354, 133358,
+ 133362, 133366, 133370, 133374, 133378, 133382, 133386, 133390, 133394,
+ 133398, 133402, 133406, 133410, 133414, 133418, 133422, 133426, 133430,
+ 133434, 133438, 133442, 133446, 133450, 133454, 133458, 133462, 133466,
+ 133470, 133474, 133478, 133482, 133486, 133490, 133494, 133498, 133502,
+ 133506, 133510, 133514, 133518, 133522, 133526, 133530, 133534, 133538,
+ 133542, 133546, 133550, 133554, 133558, 133562, 133566, 133570, 133574,
+ 133578, 133582, 133586, 133590, 133594, 133598, 133602, 133606, 133610,
+ 133614, 133619, 133624, 133629, 133633, 133639, 133646, 133653, 133660,
+ 133667, 133674, 133681, 133688, 133695, 133702, 133709, 133716, 133723,
+ 133730, 133736, 133743, 133750, 133756, 133763, 133770, 133777, 133784,
+ 133791, 133798, 133805, 133812, 133819, 133826, 133833, 133840, 133847,
+ 133853, 133859, 133866, 133873, 133882, 133891, 133900, 133909, 133914,
+ 133919, 133925, 133931, 133937, 133943, 133949, 133955, 133961, 133967,
+ 133973, 133979, 133985, 133991, 133996, 134002, 134012, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
/* name->code dictionary */
static unsigned int code_hash[] = {
74224, 4851, 0, 78156, 78499, 128685, 7929, 0, 194682, 127766, 78500,
- 66480, 0, 42833, 74529, 12064, 0, 596, 0, 128103, 13192, 8651, 0, 0,
+ 66480, 0, 42833, 74529, 12064, 0, 596, 983812, 69850, 13192, 8651, 0, 0,
120218, 12995, 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 42897,
4233, 4234, 4232, 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0,
- 128553, 0, 41601, 8874, 0, 7748, 0, 0, 0, 127939, 41603, 9784, 0, 9188,
- 41600, 0, 120618, 128343, 1457, 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404,
- 0, 0, 0, 1759, 0, 41076, 68383, 120572, 119205, 66577, 0, 127764, 65859,
- 0, 7404, 0, 0, 0, 0, 65908, 9834, 3055, 9852, 0, 65288, 0, 11398, 0,
- 92417, 119255, 0, 0, 603, 74398, 43548, 0, 0, 917824, 3350, 120817,
- 64318, 917828, 127089, 3390, 74483, 43265, 120599, 917830, 78573, 0,
- 1919, 3400, 120651, 127944, 11647, 917540, 66446, 64141, 8562, 2121,
- 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, 128587, 0, 0,
- 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, 9471, 0,
- 66021, 0, 0, 5457, 5440, 8857, 128771, 65282, 2843, 5355, 127928, 0, 0,
- 5194, 11657, 43984, 128292, 0, 0, 0, 0, 127027, 10717, 64570, 5630,
- 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, 11631,
- 64146, 64145, 64144, 762, 13172, 118859, 194661, 64468, 10906, 1353,
- 6960, 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 64109,
- 64108, 8090, 0, 74401, 917811, 587, 0, 128131, 0, 0, 0, 78214, 2750,
- 74218, 556, 64158, 64157, 0, 12213, 194678, 2760, 0, 0, 0, 194794, 64156,
- 64155, 42496, 0, 64151, 64150, 12679, 10053, 10421, 11093, 64153, 64152,
- 0, 0, 4839, 0, 0, 1874, 119016, 0, 6577, 64125, 64124, 64123, 0, 127531,
- 92534, 7007, 7590, 65443, 9036, 92550, 64122, 74422, 66609, 0, 64117,
- 64116, 6287, 64114, 2725, 64120, 64119, 43981, 42128, 127842, 1177,
- 65601, 12322, 64106, 69640, 127306, 64102, 7859, 1945, 64099, 0, 10453,
- 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, 128671,
- 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 64313, 6188, 120019,
- 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 92212, 0, 41904,
- 6639, 64064, 0, 128344, 0, 1176, 118959, 127930, 8162, 128667, 0, 0,
- 120519, 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0,
- 7714, 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076,
- 8996, 4992, 4471, 42622, 64079, 64078, 92179, 0, 0, 0, 64615, 41915, 0,
- 12075, 92211, 0, 5174, 0, 0, 127557, 3123, 0, 12685, 127904, 8408, 64704,
- 0, 0, 9223, 0, 41616, 0, 73797, 0, 1116, 128204, 43049, 7136, 43050,
- 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, 64091, 9322, 0, 120595,
- 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, 0, 11434, 64083,
- 64082, 11329, 7737, 64087, 64086, 64085, 64084, 194817, 9927, 41335,
- 4118, 1797, 0, 41334, 0, 46, 43448, 127881, 298, 0, 128114, 0, 42627, 0,
- 32, 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0,
- 127192, 66239, 42264, 64403, 4412, 7240, 92495, 0, 0, 65758, 12750, 4181,
- 8544, 0, 120199, 917897, 120198, 69809, 6181, 65014, 0, 0, 0, 3639,
- 119588, 0, 0, 118904, 10073, 120206, 128862, 127186, 68409, 42844, 7498,
- 1098, 92565, 120205, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0,
- 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907,
- 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0,
- 64405, 41337, 0, 41631, 8947, 68390, 127844, 41694, 0, 0, 7908, 0, 10408,
- 6579, 0, 64618, 0, 120147, 2138, 6583, 7761, 127010, 120504, 194828, 0,
- 5058, 41010, 9992, 128299, 5057, 0, 0, 74538, 5054, 118951, 194971,
- 78606, 0, 1437, 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 0, 0,
- 0, 12113, 4236, 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 128134, 0,
- 41619, 10239, 68611, 0, 66209, 0, 128700, 9748, 0, 127524, 0, 0, 0, 0,
- 195083, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, 2379, 11325, 0, 64668, 67854,
- 8125, 120545, 6743, 119175, 917940, 2369, 0, 0, 0, 119235, 74092, 73936,
- 7008, 43660, 0, 0, 0, 2367, 127827, 0, 264, 2375, 8060, 6194, 119858,
- 1844, 119084, 0, 6019, 0, 0, 6961, 0, 118839, 0, 8800, 0, 42862, 4463,
- 65581, 6192, 194676, 42771, 0, 92333, 725, 65042, 118797, 120800, 0,
- 12892, 0, 0, 0, 0, 0, 0, 127261, 120707, 0, 0, 5074, 5073, 128790, 8983,
- 118981, 74493, 0, 5072, 128071, 6198, 11614, 0, 196, 0, 0, 0, 4929,
- 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 92289,
- 127917, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819,
- 0, 5071, 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650,
- 78649, 0, 10636, 73981, 11806, 43167, 4531, 1245, 9105, 66463, 4921,
- 120219, 4926, 65544, 73884, 194619, 0, 0, 64709, 0, 194620, 78880, 4922,
- 325, 992, 119568, 4925, 0, 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0,
- 92175, 120275, 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722,
- 194934, 19908, 12637, 127485, 119855, 8753, 1509, 0, 5468, 9511, 127474,
- 127477, 1672, 6205, 10864, 74586, 127480, 92310, 127466, 78555, 127468,
- 73863, 127470, 127473, 41607, 120115, 1679, 120116, 120180, 120113,
- 127462, 7005, 41609, 9580, 0, 401, 0, 43779, 6968, 5761, 342, 8553, 0,
- 8143, 127115, 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478,
- 0, 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 92523,
- 120102, 7138, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080,
- 64775, 5036, 5035, 120590, 42604, 0, 0, 8074, 275, 13291, 1907, 78838,
+ 128553, 0, 41601, 8874, 983774, 7748, 0, 0, 0, 127939, 41603, 9784, 0,
+ 9188, 41600, 0, 120618, 128343, 1457, 3535, 0, 0, 0, 0, 65240, 11951, 0,
+ 3404, 0, 0, 0, 1759, 0, 41076, 68383, 120572, 119205, 66577, 94014,
+ 127764, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, 3055, 9852, 983851,
+ 65288, 0, 11398, 0, 92417, 119255, 0, 0, 603, 74398, 43548, 0, 0, 917824,
+ 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, 120599, 917830,
+ 78573, 0, 1919, 3400, 120651, 127944, 11647, 917540, 66446, 64141, 8562,
+ 2121, 64138, 4043, 8712, 64134, 64133, 11297, 983679, 983152, 11966,
+ 64128, 128587, 0, 0, 64132, 10867, 64130, 64129, 983835, 43374, 9779,
+ 2764, 66002, 10167, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 93981, 65282,
+ 2843, 5355, 127928, 983956, 0, 5194, 11657, 43984, 128292, 0, 983620, 0,
+ 0, 127027, 10717, 64570, 5630, 5396, 64143, 10682, 0, 10602, 800, 42499,
+ 66186, 0, 0, 64930, 11631, 64146, 64145, 64144, 762, 13172, 118859,
+ 194661, 64468, 10906, 1353, 6960, 0, 0, 5828, 8724, 917806, 8933, 1601,
+ 42244, 858, 7080, 64109, 64108, 8090, 0, 74401, 917811, 587, 0, 128131,
+ 0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 983940, 12213, 194678,
+ 2760, 0, 0, 0, 194794, 64156, 64155, 42496, 0, 64151, 64150, 12679,
+ 10053, 10421, 11093, 64153, 64152, 0, 0, 4839, 0, 0, 1874, 119016, 0,
+ 6577, 64125, 64124, 64123, 0, 127531, 92534, 7007, 7590, 65443, 9036,
+ 92550, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120,
+ 64119, 43981, 42128, 127842, 1177, 65601, 12322, 64106, 69640, 127306,
+ 64102, 7859, 1945, 64099, 0, 10453, 64104, 7188, 7997, 0, 7389, 983161,
+ 8705, 64097, 64096, 9571, 528, 128671, 44017, 11429, 71347, 0, 983077,
+ 917990, 73841, 0, 0, 9056, 64313, 6188, 120019, 6155, 64068, 1823, 64066,
+ 64065, 64072, 64071, 63, 7233, 92212, 0, 41904, 6639, 64064, 983766,
+ 128344, 0, 1176, 118959, 127930, 8162, 128667, 983822, 0, 120519, 66376,
+ 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222,
+ 69902, 7768, 0, 4199, 64708, 983413, 0, 0, 8708, 9560, 64077, 64076,
+ 8996, 4992, 4471, 42622, 64079, 64078, 92179, 0, 126570, 0, 64615, 41915,
+ 0, 12075, 70062, 0, 5174, 983215, 0, 127557, 3123, 0, 12685, 127904,
+ 8408, 64704, 0, 0, 9223, 0, 41616, 67999, 73797, 0, 1116, 128204, 43049,
+ 7136, 43050, 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, 64091,
+ 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0,
+ 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 194817,
+ 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, 127881, 298, 0, 128114,
+ 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 983600, 42871, 0,
+ 19923, 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, 92495, 0,
+ 983458, 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 69809, 6181,
+ 65014, 0, 0, 983196, 3639, 119588, 0, 0, 118904, 10073, 120206, 128862,
+ 127186, 68409, 42844, 7498, 1098, 92565, 120205, 0, 983118, 10207, 8789,
+ 983223, 0, 0, 983464, 9234, 0, 6182, 983466, 65058, 0, 983470, 983467, 0,
+ 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 0,
+ 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, 41337, 0,
+ 41631, 8947, 68390, 127844, 41694, 0, 0, 7908, 0, 10408, 6579, 0, 64618,
+ 0, 120147, 2138, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010,
+ 9992, 128299, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437,
+ 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, 0, 128529,
+ 12113, 4236, 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 128134, 0,
+ 41619, 10239, 68611, 0, 66209, 0, 128700, 9748, 983947, 127524, 0, 0, 0,
+ 0, 195083, 0, 983834, 0, 0, 0, 0, 0, 9341, 119596, 2379, 11325, 0, 64668,
+ 67854, 8125, 120545, 6743, 119175, 917940, 2369, 0, 983963, 983964,
+ 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 127827, 983848, 264,
+ 2375, 8060, 6194, 119858, 1844, 119084, 0, 6019, 0, 0, 6961, 0, 118839,
+ 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 92333, 725,
+ 65042, 118797, 120800, 983040, 12892, 0, 0, 0, 0, 0, 0, 127261, 120707,
+ 983128, 0, 5074, 5073, 128790, 8983, 118981, 74493, 983561, 5072, 93977,
+ 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0,
+ 4934, 0, 41323, 9758, 0, 92289, 127917, 42584, 0, 4329, 41321, 4979,
+ 3048, 7752, 41320, 983042, 74418, 12819, 0, 5071, 0, 3642, 0, 5070,
+ 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 69917, 10636, 73981,
+ 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884,
+ 194619, 0, 0, 64709, 0, 194620, 78880, 4922, 325, 992, 119568, 4925, 0,
+ 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 92175, 120275, 4933, 120211,
+ 0, 118985, 4928, 0, 0, 74770, 120194, 126548, 722, 194934, 19908, 12637,
+ 127485, 119855, 8753, 1509, 0, 5468, 9511, 127474, 127477, 1672, 6205,
+ 10864, 74586, 127480, 70103, 127466, 78555, 127468, 73863, 126577,
+ 126503, 41607, 120115, 1679, 120116, 120180, 120113, 127462, 7005, 41609,
+ 9580, 0, 401, 69949, 43779, 6968, 5761, 342, 8553, 0, 8143, 127115,
+ 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, 0, 5076, 0,
+ 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 92523, 120102,
+ 7138, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, 64775,
+ 5036, 5035, 120590, 42604, 983647, 0, 8074, 275, 13291, 1907, 78838,
4432, 127271, 5033, 127273, 127272, 4836, 3888, 73792, 10729, 64546,
127262, 43704, 127264, 127251, 67588, 119000, 127252, 127255, 8858, 6409,
127256, 120252, 128100, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0,
- 6094, 7641, 42445, 0, 92487, 42406, 1676, 74320, 194607, 0, 5030, 0, 0,
- 0, 73869, 9622, 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 92218, 0, 0, 0,
- 120789, 0, 947, 119835, 194586, 194585, 10969, 119935, 7613, 92562,
- 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567,
- 74056, 917910, 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395,
- 43538, 119926, 119929, 119928, 7213, 119922, 7214, 7215, 0, 74141, 8880,
- 7685, 66459, 120173, 65540, 119618, 625, 8187, 42861, 1113, 7236, 7915,
- 3630, 120176, 8179, 74264, 67886, 9316, 10980, 2489, 65624, 8150, 1359,
- 67652, 127329, 127330, 73756, 5042, 5041, 42769, 12084, 127324, 127321,
- 92279, 127319, 127320, 127317, 127318, 127315, 12283, 1616, 3795, 0,
- 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 127311, 0, 0, 8431,
- 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, 0, 78420, 0,
- 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, 9359, 78416, 0,
- 128770, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 127822, 4309,
- 7127, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 4389, 7133,
- 0, 73880, 11610, 11368, 0, 194570, 41331, 1006, 74240, 0, 1550, 8201,
- 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0,
- 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 2118, 0, 12121,
- 8255, 5512, 73875, 2128, 2130, 2131, 2126, 2133, 1119, 127068, 2114,
- 2116, 2455, 0, 2122, 2123, 2124, 2125, 0, 8714, 0, 2113, 0, 2115, 128177,
- 127907, 43713, 5052, 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429,
- 42647, 5050, 302, 388, 41115, 735, 6637, 5907, 65088, 0, 12726, 74594,
- 9117, 0, 12003, 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470,
+ 6094, 7641, 42445, 0, 92487, 42406, 1676, 74320, 194607, 983177, 5030, 0,
+ 0, 0, 73869, 9622, 0, 69944, 6787, 0, 0, 0, 983583, 10544, 12919, 0,
+ 92218, 0, 0, 69906, 120789, 0, 947, 119835, 194586, 194585, 10969,
+ 119935, 7613, 92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192,
+ 120268, 0, 43567, 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251,
+ 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, 119922, 7214,
+ 7215, 983827, 74141, 8880, 7685, 66459, 120173, 65540, 119618, 625, 8187,
+ 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, 10980,
+ 2489, 65624, 8150, 1359, 67652, 127329, 127330, 73756, 5042, 5041, 42769,
+ 12084, 127324, 127321, 92279, 127319, 127320, 127317, 127318, 127315,
+ 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0,
+ 3239, 127311, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073,
+ 5040, 0, 0, 983435, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184,
+ 74293, 0, 64648, 0, 9359, 78416, 0, 128770, 65157, 6662, 0, 0, 3863,
+ 73909, 4835, 55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301,
+ 0, 42589, 569, 0, 73813, 711, 4389, 7133, 0, 73880, 11610, 11368, 0,
+ 194570, 41331, 1006, 74240, 0, 1550, 8201, 73737, 7627, 5499, 5031,
+ 77908, 42738, 65784, 77907, 65267, 3758, 0, 65781, 64734, 70073, 2440,
+ 65780, 77913, 8449, 0, 5008, 983572, 2118, 0, 12121, 8255, 5512, 73875,
+ 2128, 2130, 2131, 2126, 2133, 1119, 127068, 2114, 2116, 2455, 0, 2122,
+ 2123, 2124, 2125, 127486, 8714, 983811, 2113, 0, 2115, 128177, 127907,
+ 43713, 5052, 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647,
+ 5050, 302, 388, 41115, 735, 6637, 5907, 65088, 0, 12726, 74594, 9117,
+ 983181, 12003, 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470,
78437, 0, 1925, 0, 92237, 74807, 0, 5048, 5047, 0, 0, 0, 92313, 0, 74497,
- 92395, 8089, 6929, 639, 0, 68179, 64442, 0, 92348, 4599, 41402, 6674,
- 43397, 43294, 1476, 648, 0, 65819, 3233, 0, 41782, 6951, 0, 0, 3530,
- 9750, 128317, 0, 6656, 92367, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045,
- 0, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004,
- 9669, 12341, 12703, 8402, 0, 119070, 917600, 41750, 3586, 64508, 43148,
- 0, 0, 119606, 0, 13296, 517, 0, 128534, 194946, 41528, 123, 65454, 0, 0,
- 74478, 10531, 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0,
- 3925, 4251, 8069, 10517, 120439, 489, 0, 4250, 120441, 120452, 43151, 0,
- 194851, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623,
- 118925, 194853, 9235, 12760, 74176, 69662, 66445, 43540, 10062, 3743,
- 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, 267, 3393,
- 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, 10652, 41612,
- 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, 128017, 0, 10625,
- 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, 13013, 0, 6673, 0,
- 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, 704, 66215, 6195, 0,
- 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, 55256, 65538, 0,
- 127940, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, 119238, 195004,
- 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, 66728, 1816, 0,
- 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791,
- 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 119303, 0, 7557,
- 119339, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925,
- 3946, 78078, 10998, 78080, 673, 194867, 64397, 128276, 74599, 78449,
- 8890, 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864,
- 8729, 78456, 0, 7845, 917917, 78692, 4408, 4122, 6772, 11039, 8723,
- 194990, 127833, 119302, 731, 119304, 92286, 2438, 64855, 119300, 119299,
- 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, 0, 0, 0, 41952, 0,
- 5273, 2127, 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277,
- 12963, 127864, 6189, 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024,
- 41482, 3864, 74539, 0, 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0,
- 41390, 5384, 41882, 67647, 92548, 5759, 0, 0, 41388, 92362, 41392, 64288,
- 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, 5356, 7499, 78110, 66596,
- 0, 0, 10263, 5554, 0, 12344, 10311, 78113, 6665, 0, 0, 7618, 8517, 11455,
- 78440, 64632, 64447, 5555, 78088, 78093, 78091, 0, 42803, 65033, 9143,
- 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, 0, 0,
- 0, 4269, 73885, 917775, 42846, 69644, 950, 0, 92273, 66580, 118895,
- 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935,
- 9848, 10381, 0, 128870, 0, 3651, 0, 194610, 127556, 5102, 5101, 10269,
- 12983, 8138, 4517, 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099,
- 78373, 1441, 42087, 3063, 650, 0, 7838, 0, 195041, 195040, 119142, 9031,
- 120790, 128582, 9078, 8545, 66356, 128799, 0, 9154, 9118, 0, 0, 2676,
- 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, 9857, 7014, 9856, 195033,
+ 92395, 8089, 6929, 639, 983563, 68179, 64442, 0, 92348, 4599, 41402,
+ 6674, 43397, 43294, 1476, 648, 0, 65819, 3233, 0, 41782, 6951, 94017,
+ 983967, 3530, 9750, 128317, 0, 6656, 42618, 0, 5046, 8512, 65856, 74261,
+ 8967, 0, 5045, 42026, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 0,
+ 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, 917600, 41750,
+ 3586, 64508, 43148, 0, 0, 119606, 67983, 13296, 517, 0, 128534, 194946,
+ 41528, 123, 65454, 0, 0, 74478, 10531, 7784, 41526, 10829, 73991, 8057,
+ 1126, 73895, 0, 194591, 0, 3925, 4251, 8069, 10517, 120439, 489, 0, 4250,
+ 120441, 120452, 43151, 983178, 194851, 66200, 0, 0, 0, 78423, 0, 0, 8711,
+ 6183, 0, 0, 0, 120448, 7623, 118925, 118889, 9235, 12760, 74176, 69662,
+ 66445, 43540, 10062, 3743, 11514, 11078, 0, 12136, 0, 126597, 120435, 0,
+ 7726, 0, 19922, 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0,
+ 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 983340, 0, 3391,
+ 41075, 2476, 0, 128017, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934,
+ 127537, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 983334, 0, 983871,
+ 126638, 9053, 13015, 74523, 0, 704, 66215, 6195, 983819, 6660, 78758,
+ 917760, 917793, 42212, 12629, 11435, 0, 55256, 65538, 0, 127940, 983333,
+ 74547, 126585, 65448, 78100, 12948, 119001, 195002, 119238, 195004,
+ 78099, 127085, 0, 128320, 4287, 8276, 4902, 1131, 0, 78458, 66728, 1816,
+ 0, 42533, 168, 42845, 4898, 64298, 983141, 0, 4901, 1821, 0, 578, 3653,
+ 0, 791, 9162, 6977, 0, 78889, 74561, 0, 73731, 8354, 43590, 119303,
+ 983441, 7557, 119339, 119301, 8234, 7241, 0, 120671, 119167, 194996,
+ 12811, 65925, 3946, 78078, 10998, 78080, 673, 194867, 64397, 128276,
+ 74599, 78449, 8890, 194977, 194976, 2448, 78085, 10267, 8424, 2452,
+ 78083, 128824, 8729, 78456, 0, 7845, 917917, 71302, 4408, 4122, 6772,
+ 11039, 8723, 194990, 71310, 119302, 731, 119304, 92286, 2438, 64855,
+ 119300, 119299, 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, 0,
+ 0, 0, 41952, 0, 5273, 2127, 5269, 6337, 5202, 2404, 5267, 42823, 11291,
+ 19915, 5277, 12963, 127864, 6189, 4125, 1314, 12133, 120340, 118873,
+ 1271, 983631, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, 4166,
+ 4574, 0, 7567, 7459, 983160, 41390, 5384, 41882, 67647, 92548, 5759,
+ 983903, 0, 41388, 64446, 41392, 64288, 41387, 0, 8706, 5552, 983187, 700,
+ 0, 5553, 0, 7088, 5356, 7499, 68007, 66596, 74066, 0, 10263, 5554, 0,
+ 12344, 10311, 78113, 6665, 92626, 0, 7618, 8517, 11455, 78440, 64632,
+ 64447, 5555, 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067,
+ 67995, 195069, 656, 195071, 65037, 4577, 64624, 0, 0, 0, 983640, 4269,
+ 73885, 917775, 42846, 69644, 950, 0, 92273, 66580, 118895, 66683, 10554,
+ 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, 9848, 10381, 0,
+ 128870, 983692, 3651, 0, 120730, 127556, 5102, 5101, 10269, 12983, 8138,
+ 4517, 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 78373, 1441,
+ 42087, 3063, 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 120790,
+ 128582, 9078, 8545, 66356, 128799, 0, 9154, 9118, 126543, 0, 2676, 2277,
+ 0, 73812, 6190, 8599, 195053, 69918, 10795, 9857, 7014, 9856, 195033,
92620, 12129, 0, 8481, 0, 6202, 195035, 10920, 128237, 5203, 195039,
195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, 74772, 0, 12613, 5284,
- 6657, 207, 128806, 4275, 74819, 854, 68147, 74381, 0, 0, 5103, 127861,
- 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, 11438, 0, 0,
- 92694, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 195030,
- 69720, 6476, 5104, 0, 304, 3176, 0, 0, 932, 128663, 6567, 238, 69656,
- 195011, 194595, 19905, 120577, 195015, 78870, 41044, 67640, 194902,
- 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, 309,
- 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 10814, 43275, 6950,
- 9712, 68680, 43970, 0, 65165, 92725, 0, 66466, 0, 0, 0, 66725, 6191,
- 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975,
- 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732,
- 0, 917547, 92682, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077,
- 0, 64586, 917620, 42396, 55255, 3475, 128035, 2479, 0, 3632, 120728,
- 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229,
- 1843, 42283, 43250, 41562, 9100, 74548, 917630, 3640, 127190, 42321,
- 7284, 194974, 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080,
- 2529, 0, 0, 0, 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634,
- 92380, 9988, 0, 41068, 0, 0, 65264, 0, 0, 92545, 0, 785, 8236, 128647,
- 9027, 68160, 67623, 64383, 128821, 925, 127156, 0, 41985, 41071, 9586, 0,
- 41984, 9217, 0, 0, 0, 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0,
- 127483, 5184, 42078, 194947, 10810, 128531, 4585, 19943, 5860, 67633, 0,
- 0, 812, 3615, 0, 5178, 44000, 120548, 78807, 5188, 74287, 67629, 3605,
- 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 120670, 2442, 10703, 78789,
- 67632, 917924, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 127373,
- 42288, 12751, 0, 8542, 13145, 194963, 2468, 66706, 41294, 3626, 3883,
- 64388, 42479, 0, 41117, 0, 92580, 0, 0, 67624, 0, 1290, 0, 65585, 2715,
- 806, 65208, 41884, 917883, 1318, 64731, 0, 0, 0, 66325, 3465, 2405, 9240,
- 0, 12756, 65259, 0, 0, 12752, 5833, 1432, 0, 41883, 73912, 9799, 0,
- 41886, 2480, 0, 2062, 127293, 6494, 5537, 78656, 0, 194587, 0, 1211, 0,
- 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, 0, 78654, 6566, 78659, 0, 73780,
- 0, 64864, 0, 78660, 0, 8284, 13081, 0, 3589, 42051, 4035, 6492, 92236,
- 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777,
- 12926, 0, 7528, 10550, 0, 92706, 0, 11439, 0, 1374, 64878, 119014, 0,
- 42389, 41374, 0, 0, 78492, 41377, 127909, 0, 400, 12597, 120586, 0, 0,
- 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 55285,
- 0, 0, 0, 11969, 0, 127841, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757,
- 64351, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168,
- 42272, 12200, 917927, 7904, 0, 953, 12917, 119560, 12300, 0, 11491, 9724,
- 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482,
- 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470,
- 7468, 10232, 10615, 10213, 127288, 92357, 10049, 78884, 3544, 0, 6017,
- 65311, 127481, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0,
- 92660, 0, 0, 0, 19961, 2472, 42665, 92341, 0, 2139, 4256, 120776, 74380,
- 0, 42675, 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000,
- 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566,
- 128308, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 128866,
- 1560, 120209, 194972, 4584, 73843, 0, 11712, 10866, 118928, 1118, 92209,
- 0, 0, 1081, 7436, 68420, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189,
- 1330, 0, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, 6324, 41975, 64777,
- 10674, 12308, 12186, 0, 0, 0, 12715, 128349, 0, 0, 2018, 66672, 41979,
- 66685, 119157, 0, 92464, 0, 126984, 0, 9334, 92705, 92315, 0, 7975, 0,
- 77957, 0, 66621, 4884, 66597, 69732, 0, 0, 6313, 65513, 0, 0, 0, 0, 2345,
- 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, 42279, 194577, 0,
- 78415, 0, 195008, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, 2482,
- 1471, 0, 0, 42247, 12378, 73925, 69664, 0, 12374, 0, 0, 0, 0, 2460, 0,
- 11944, 12376, 127868, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024,
- 127180, 0, 0, 539, 0, 127765, 0, 3853, 65180, 127923, 120796, 120245,
- 92324, 0, 8659, 0, 12474, 92579, 9503, 194969, 2478, 0, 4162, 0, 4260,
- 12953, 69633, 120089, 12470, 0, 74189, 2742, 12476, 11798, 10946, 127310,
- 5000, 0, 0, 0, 69672, 8213, 74017, 7771, 6161, 0, 6709, 0, 78885, 0,
- 127971, 120582, 78547, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, 0, 0,
- 0, 4014, 12842, 73952, 12015, 127290, 8275, 3893, 0, 0, 12210, 7221,
- 42147, 0, 74550, 74465, 64747, 118841, 0, 12516, 4444, 0, 92271, 74537,
- 10892, 8231, 0, 6473, 41968, 78388, 41973, 3591, 41969, 0, 2453, 128549,
- 92666, 64705, 0, 0, 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0,
- 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, 4883, 285, 4723, 77927,
- 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0, 42323, 0, 9743,
- 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, 11463, 120154, 0, 0,
- 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, 120236, 65221, 63883,
- 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, 41879, 74427, 4121, 5003,
- 884, 66700, 63879, 4943, 5150, 73889, 74182, 127915, 643, 3086, 0, 42448,
- 42299, 58, 0, 917952, 120083, 63873, 8491, 0, 0, 0, 4530, 42409, 7126,
- 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, 120077,
- 128132, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102,
- 4437, 73948, 128692, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, 66026,
- 4306, 41380, 68432, 92586, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0,
- 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 69646, 1386, 64580, 11480, 6116,
- 65039, 65038, 12392, 65036, 8064, 0, 12101, 5822, 119004, 2080, 710,
- 77999, 11663, 1666, 42091, 119657, 12383, 43671, 42092, 68418, 4289, 0,
- 63896, 12061, 42096, 43621, 3362, 12377, 0, 0, 68449, 7461, 73901, 1244,
- 331, 73786, 12683, 10662, 0, 8112, 0, 65852, 0, 12379, 194877, 120818,
- 41964, 42208, 63843, 2084, 41965, 0, 65866, 4327, 0, 63840, 78549, 41220,
- 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 2935, 8698, 12665, 0,
- 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 128572, 65202,
+ 6657, 207, 128806, 4275, 74819, 854, 68147, 74381, 0, 78786, 5103,
+ 127861, 64348, 41368, 43974, 488, 69811, 0, 71339, 10157, 0, 43034,
+ 11438, 64674, 0, 92694, 68431, 41771, 5106, 6669, 8504, 65154, 69813,
+ 41367, 5105, 127509, 69720, 6476, 5104, 983740, 304, 3176, 119010, 0,
+ 932, 120633, 6567, 238, 69656, 195011, 194595, 19905, 120577, 195015,
+ 78870, 41044, 67640, 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0,
+ 12552, 195019, 8803, 309, 6622, 8151, 10858, 78706, 67636, 0, 12568, 0,
+ 12553, 10814, 43275, 6950, 9712, 68680, 43970, 983198, 65165, 92725, 0,
+ 66466, 0, 0, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, 0, 41754,
+ 67635, 9370, 2720, 194975, 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663,
+ 0, 0, 10834, 0, 0, 65732, 94095, 917547, 92682, 67679, 195020, 0, 7781,
+ 41383, 64568, 0, 120738, 12077, 0, 64586, 917620, 42396, 55255, 3475,
+ 128035, 2479, 0, 3632, 120728, 10698, 8376, 3648, 194960, 74844, 67639,
+ 3636, 67894, 3650, 8837, 65229, 1843, 42283, 43250, 41562, 9100, 74548,
+ 917630, 3640, 127190, 42321, 7284, 194974, 194973, 194950, 194949,
+ 194952, 194951, 126649, 194953, 42080, 2529, 0, 0, 0, 42083, 120678,
+ 68398, 194957, 67619, 66367, 194958, 9634, 92380, 9988, 0, 41068, 0,
+ 4295, 65264, 68006, 0, 92545, 0, 785, 8236, 128647, 9027, 68160, 67623,
+ 64383, 120265, 925, 127156, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0,
+ 0, 9186, 2067, 4016, 983794, 0, 381, 12936, 0, 42077, 0, 69880, 5184,
+ 42078, 194947, 10810, 128531, 4585, 19943, 5860, 67633, 0, 0, 812, 3615,
+ 0, 5178, 44000, 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166,
+ 64429, 42639, 924, 0, 67631, 42616, 120670, 2442, 10703, 78789, 67632,
+ 917924, 12771, 12736, 12753, 66708, 73933, 67626, 42401, 0, 69872,
+ 127373, 42288, 12751, 0, 8542, 13145, 194963, 2468, 66706, 41294, 3626,
+ 3883, 64388, 42479, 0, 41117, 0, 92580, 0, 0, 67624, 0, 1290, 0, 65585,
+ 2715, 806, 65208, 41884, 917883, 1318, 64731, 126578, 0, 0, 66325, 3465,
+ 2405, 9240, 0, 12756, 65259, 0, 983772, 12752, 5833, 1432, 0, 41883,
+ 73912, 9799, 0, 41886, 2480, 0, 2062, 127293, 6494, 5537, 78656, 0,
+ 194587, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 68005, 10622, 983770, 0,
+ 78654, 6566, 78659, 0, 73780, 119196, 64864, 0, 78660, 0, 8284, 13081, 0,
+ 3589, 42051, 4035, 6492, 92236, 4265, 6642, 3977, 74186, 41778, 836,
+ 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 983369, 7528, 10550, 0, 92706,
+ 0, 10961, 0, 1374, 64878, 119014, 0, 42389, 41374, 2286, 0, 78492, 41377,
+ 127909, 0, 400, 12597, 120586, 0, 0, 6661, 983145, 64827, 0, 73817, 390,
+ 0, 71301, 983853, 3473, 7718, 0, 0, 0, 55285, 0, 0, 0, 11969, 983382,
+ 127841, 6365, 1887, 6763, 983362, 8080, 7006, 0, 983363, 6757, 64351,
+ 1544, 0, 6766, 64677, 120716, 983364, 6146, 0, 771, 983365, 0, 12812,
+ 13168, 42272, 12200, 917927, 7904, 0, 953, 12917, 119560, 12300, 0,
+ 11491, 9724, 10341, 983764, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0,
+ 471, 7484, 7482, 6753, 7480, 5764, 7478, 7477, 6501, 7475, 6918, 7473,
+ 7472, 2474, 7470, 7468, 10232, 10615, 10213, 127288, 92357, 10049, 11834,
+ 3544, 0, 6017, 65311, 127481, 120216, 13306, 10533, 7870, 73949, 7625, 0,
+ 120544, 0, 0, 92660, 0, 0, 0, 19961, 2472, 42665, 92341, 0, 2139, 4256,
+ 120776, 74380, 0, 42675, 42658, 12845, 0, 0, 65138, 119355, 67862, 0,
+ 65671, 7083, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0,
+ 445, 120566, 128308, 0, 0, 8330, 0, 0, 42797, 983150, 120215, 0, 3902, 0,
+ 1770, 0, 128866, 1560, 120209, 194972, 4584, 73843, 0, 11712, 10866,
+ 118928, 1118, 71334, 0, 0, 1081, 7436, 68420, 7252, 0, 5996, 69921, 4903,
+ 0, 41386, 5162, 119189, 1330, 0, 7139, 0, 12047, 41384, 0, 0, 1848, 4334,
+ 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, 983732, 12715, 68002,
+ 983471, 126630, 2018, 66672, 41979, 66685, 119157, 68000, 92464, 0,
+ 126984, 68001, 9334, 92705, 92315, 70101, 7975, 0, 77957, 0, 66621, 4884,
+ 66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 0,
+ 119607, 3117, 5460, 0, 0, 983379, 0, 42279, 194577, 0, 78415, 0, 195008,
+ 983376, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, 2482, 1471, 0, 0,
+ 42247, 12378, 73925, 69664, 0, 12374, 0, 0, 0, 983685, 2460, 0, 11944,
+ 12376, 127868, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 127180, 0,
+ 0, 539, 0, 127765, 94052, 3853, 65180, 127923, 120796, 120245, 92324, 0,
+ 8659, 0, 12474, 92579, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953,
+ 69633, 120089, 12470, 0, 74189, 2742, 12476, 11798, 10946, 127310, 5000,
+ 0, 983579, 0, 69672, 8213, 74017, 7771, 6161, 68018, 6709, 0, 78885,
+ 983699, 127971, 120582, 78547, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0,
+ 0, 0, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 3893, 983256, 0,
+ 12210, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, 12516, 4444, 0,
+ 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, 3591, 41969, 0,
+ 2453, 128549, 92666, 64705, 0, 0, 10349, 10413, 43591, 41962, 3202,
+ 74353, 0, 8316, 0, 0, 94060, 687, 0, 0, 0, 1840, 0, 68671, 119809, 4883,
+ 285, 4723, 70099, 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0,
+ 42323, 0, 9743, 120232, 13134, 126535, 0, 0, 0, 0, 42634, 983335, 43437,
+ 3081, 11463, 120154, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729,
+ 0, 120236, 65221, 63883, 43334, 64852, 0, 65194, 66201, 0, 66578, 5001,
+ 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182,
+ 127915, 643, 3086, 0, 42448, 42299, 58, 0, 917952, 120083, 63873, 8491,
+ 0, 0, 0, 4530, 42409, 7126, 194575, 2721, 120074, 119096, 19929, 0,
+ 194574, 0, 4242, 4264, 120077, 120530, 66179, 42412, 65941, 13114, 64522,
+ 10740, 3094, 0, 9754, 119102, 4437, 73948, 127074, 983232, 55280, 42174,
+ 194925, 42430, 0, 0, 42355, 66026, 4306, 41380, 68432, 92586, 0, 66667,
+ 127309, 0, 126521, 42200, 42566, 0, 0, 5088, 6948, 0, 8524, 0, 0, 12385,
+ 0, 0, 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, 65036, 8064,
+ 0, 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, 42091, 119657,
+ 12383, 43671, 42092, 68418, 4289, 0, 63896, 12061, 42096, 43621, 3362,
+ 12377, 983823, 983825, 68449, 7461, 73901, 1244, 331, 73786, 12683,
+ 10662, 0, 8112, 0, 65852, 0, 12379, 194877, 120818, 41964, 42208, 63843,
+ 2084, 41965, 0, 65866, 4327, 0, 63840, 78549, 41220, 13032, 0, 584,
+ 12933, 43177, 12373, 69855, 13000, 1351, 2935, 8698, 12665, 0, 1930, 0,
+ 78229, 12427, 66514, 69859, 13031, 0, 63901, 0, 3657, 128572, 65202,
6000, 119206, 12426, 127181, 0, 41740, 12428, 41283, 41916, 119210, 0, 0,
12429, 6727, 0, 7562, 0, 5170, 0, 41755, 676, 0, 66704, 66664, 9978,
66491, 3536, 0, 9752, 92397, 6162, 0, 69228, 10113, 41829, 65886, 5159,
@@ -16421,706 +17331,731 @@ static unsigned int code_hash[] = {
0, 63867, 4133, 11371, 210, 4600, 0, 74560, 4137, 8082, 78506, 119062,
78504, 6704, 4591, 128029, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508,
41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498,
- 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213,
+ 917794, 42025, 78565, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213,
73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246,
- 42086, 917790, 917789, 0, 0, 128801, 0, 0, 327, 0, 9042, 917777, 917776,
- 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782,
- 5999, 0, 7712, 12432, 128243, 43653, 1726, 1015, 0, 8212, 0, 128014,
- 42423, 119066, 0, 128108, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0,
- 0, 1299, 12240, 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 9194,
- 0, 0, 19914, 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816,
- 2594, 3444, 63817, 64651, 0, 41503, 127478, 11265, 0, 120756, 194922, 0,
- 5664, 3972, 0, 0, 0, 128508, 12416, 917764, 119608, 10816, 917769,
- 917768, 12418, 74111, 3882, 8532, 917771, 1573, 128648, 119847, 4596,
- 66339, 12417, 66001, 65343, 194782, 12414, 8287, 68219, 195017, 68108,
- 1143, 119169, 119846, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0,
- 11724, 0, 0, 127104, 128526, 0, 0, 8027, 10997, 9171, 12741, 11400,
- 74197, 194799, 0, 128239, 0, 128881, 119604, 127523, 120190, 194773,
- 67608, 128214, 42368, 0, 7715, 3881, 41487, 12118, 42514, 68651, 0, 0,
- 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, 8521, 5083,
- 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 120715, 0, 120183,
- 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, 8407, 0,
- 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 92557, 629, 1924, 0,
- 12037, 74366, 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369,
- 10649, 0, 5077, 127108, 10880, 63927, 5075, 917881, 0, 65075, 0, 11007,
- 0, 66659, 92607, 0, 66684, 0, 3434, 4954, 1904, 0, 5266, 126980, 5272,
- 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, 194926, 461, 9803, 0,
- 4504, 1505, 0, 6325, 5276, 43021, 120488, 0, 55236, 0, 66461, 5177,
- 41324, 12055, 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948,
- 41325, 0, 721, 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0,
- 42353, 74825, 0, 12587, 0, 78571, 0, 0, 194562, 41576, 42215, 78570,
- 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, 64767,
- 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 43414, 73854, 11737, 9721,
- 0, 0, 0, 11742, 2419, 0, 11493, 12334, 194913, 4153, 12302, 10793, 5250,
- 12407, 11978, 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0,
- 42002, 12404, 0, 0, 4940, 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0,
- 0, 0, 65577, 43370, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583,
+ 42086, 126615, 2219, 0, 0, 128801, 194837, 0, 327, 0, 9042, 917777,
+ 917776, 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 983826,
+ 917782, 5999, 0, 7712, 12432, 128243, 43653, 1726, 1015, 0, 8212, 0,
+ 128014, 42423, 119066, 0, 128108, 66709, 0, 8811, 927, 0, 0, 12436,
+ 983239, 42021, 0, 0, 1299, 12240, 42350, 65143, 0, 195016, 0, 78197,
+ 11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 983803, 2296, 194923,
+ 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503,
+ 127478, 11265, 0, 120756, 194922, 0, 5664, 3972, 0, 0, 0, 128508, 12416,
+ 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771,
+ 1573, 128648, 119847, 4596, 66339, 12417, 66001, 65343, 126491, 12414,
+ 8287, 68219, 195017, 68108, 1143, 119169, 119846, 12415, 6626, 42763, 0,
+ 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 126619, 0, 0, 8027, 10997,
+ 9171, 12741, 11400, 71305, 194799, 0, 128239, 0, 128881, 119604, 127523,
+ 120190, 194773, 67608, 128214, 42368, 0, 7715, 3881, 41487, 12118, 42514,
+ 68651, 0, 983886, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809,
+ 3889, 8521, 5083, 5082, 119859, 120184, 8519, 983235, 3014, 5081, 65853,
+ 120715, 0, 68014, 69951, 5079, 64802, 42210, 4597, 65532, 11828, 120185,
+ 12371, 0, 8407, 0, 10805, 8518, 10779, 120188, 71303, 983924, 12367,
+ 42170, 0, 92557, 629, 1924, 0, 12037, 74366, 5987, 8462, 8005, 12365,
+ 63933, 69735, 120815, 12369, 10649, 67981, 5077, 120174, 10880, 63927,
+ 5075, 917881, 0, 65075, 0, 11007, 983696, 66659, 92607, 0, 66684, 0,
+ 3434, 4954, 1904, 0, 5266, 126980, 5272, 10499, 4507, 9578, 63923,
+ 120177, 7979, 0, 9831, 0, 194926, 461, 9803, 0, 4504, 1505, 0, 6325,
+ 5276, 43021, 120488, 0, 55236, 0, 66461, 5177, 41324, 12055, 8722, 0,
+ 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108,
+ 71311, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, 12587,
+ 94104, 78571, 0, 71328, 194562, 41576, 42215, 78570, 119207, 0, 8578,
+ 5995, 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796,
+ 11723, 0, 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0,
+ 11742, 2419, 0, 11493, 12334, 194913, 4153, 12302, 10793, 5250, 12407,
+ 11978, 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002,
+ 12404, 983553, 0, 4940, 12410, 7683, 1167, 73729, 4983, 120507, 861, 0,
+ 0, 0, 0, 43757, 43370, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 43759,
42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, 7616, 195044, 0, 12577,
- 0, 0, 853, 42693, 195014, 0, 0, 5016, 43535, 63893, 42835, 9491, 917913,
- 0, 917914, 0, 12712, 7105, 127807, 65060, 120797, 9900, 0, 0, 194919, 0,
- 127830, 0, 64778, 12585, 10565, 128151, 12177, 0, 0, 0, 77824, 0, 4900,
- 127874, 12878, 92630, 8984, 4119, 74768, 8971, 78593, 43113, 9702, 78594,
- 11025, 9245, 13048, 4927, 4138, 74185, 92481, 92710, 12397, 77827, 0,
- 13054, 12394, 0, 0, 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507,
- 78590, 78583, 0, 0, 0, 194915, 7267, 0, 74833, 128181, 5993, 2819, 0,
- 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, 63910,
- 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 128313, 0, 43339, 0, 9836,
- 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850,
- 128841, 3079, 11340, 42408, 42447, 127140, 120020, 42307, 12386, 42304,
- 917555, 0, 12389, 0, 92366, 41996, 11526, 63985, 5864, 1147, 63992,
- 42887, 1987, 92718, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939,
- 12384, 0, 0, 41686, 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507,
- 91, 2042, 120775, 43643, 194689, 66028, 10036, 41844, 119813, 774,
- 119831, 0, 119815, 5994, 12539, 0, 78375, 120597, 119833, 0, 119600, 0,
- 0, 7719, 6026, 2486, 128312, 119808, 162, 0, 65219, 41073, 9687, 41681,
- 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681, 42379, 0, 7534,
- 12219, 0, 127528, 42810, 10492, 0, 0, 0, 43119, 0, 120753, 12403, 2500,
- 195013, 0, 4899, 12729, 0, 0, 74113, 2343, 4103, 19946, 74112, 77851,
- 13112, 0, 195012, 12859, 0, 120148, 66369, 5861, 127758, 11999, 12400, 0,
- 0, 12645, 5146, 11320, 68410, 6748, 65040, 0, 64184, 12974, 64183, 67613,
- 120645, 5147, 0, 0, 74524, 0, 1928, 0, 67649, 5991, 3445, 67609, 4976,
- 64176, 0, 67610, 8241, 0, 77868, 4206, 0, 0, 0, 128298, 0, 10138, 0, 0,
- 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 127926, 77859, 0, 0, 1123,
- 963, 41553, 10120, 12405, 120150, 92664, 398, 13278, 9723, 6366, 120311,
- 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, 0, 41464,
- 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, 3024, 41467,
- 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, 73776, 6750,
- 195018, 0, 9594, 0, 0, 43527, 0, 727, 194703, 0, 5805, 0, 6726, 0, 42176,
- 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, 0, 92343,
- 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 194701, 10803,
- 4132, 120306, 68474, 92473, 0, 0, 74837, 120155, 1499, 0, 8055, 42740,
+ 0, 983875, 853, 42693, 195014, 0, 983638, 5016, 43535, 63893, 42835,
+ 9491, 917913, 0, 917914, 0, 12712, 7105, 127807, 65060, 120797, 9900,
+ 7750, 0, 194919, 0, 127830, 0, 64778, 12585, 10565, 128151, 12177, 0, 0,
+ 0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, 74768, 8971, 78593,
+ 43113, 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 92481, 92710,
+ 12397, 77827, 0, 13054, 12394, 0, 0, 0, 13053, 0, 3948, 10781, 1546, 0,
+ 5010, 1680, 10507, 78590, 78583, 0, 0, 0, 194915, 7267, 0, 74833, 128181,
+ 5993, 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0,
+ 63997, 63910, 63996, 3077, 0, 0, 1512, 69929, 12589, 41479, 128313, 0,
+ 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817,
+ 1664, 1850, 128841, 3079, 11340, 42408, 42447, 127140, 120020, 42307,
+ 12386, 42304, 917555, 0, 12389, 0, 92366, 41996, 11526, 63985, 5864,
+ 1147, 63992, 42887, 1987, 92718, 5480, 7858, 11653, 4116, 12391, 66193,
+ 0, 4939, 12384, 0, 0, 41686, 63905, 119601, 194688, 983190, 0, 12649, 0,
+ 0, 8247, 507, 91, 2042, 120775, 43643, 194689, 66028, 10036, 41844,
+ 119813, 774, 119829, 0, 119815, 5994, 12539, 0, 78375, 120597, 119833,
+ 983105, 119600, 0, 0, 7719, 6026, 2486, 128312, 119808, 162, 0, 65219,
+ 41073, 9687, 41681, 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681,
+ 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 983652, 0, 43119, 0,
+ 120753, 12403, 2500, 195013, 0, 4899, 12729, 0, 0, 74113, 2343, 4103,
+ 19946, 74112, 77851, 13112, 0, 195012, 12859, 70087, 120148, 66369, 5861,
+ 127758, 11999, 12400, 0, 983830, 12645, 5146, 11320, 68410, 6748, 65040,
+ 0, 64184, 12974, 64183, 67613, 120645, 5147, 0, 0, 74524, 0, 1928, 0,
+ 67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, 8241, 0, 77868, 4206, 0,
+ 0, 0, 128298, 0, 10138, 0, 0, 8897, 120234, 0, 8357, 4124, 77862, 65836,
+ 120641, 127926, 77859, 0, 0, 1123, 963, 41553, 10120, 12405, 120150,
+ 92664, 398, 13278, 9723, 6366, 120311, 7945, 0, 4402, 9970, 12402,
+ 983136, 42392, 1305, 12408, 0, 44007, 0, 0, 41464, 12411, 12969, 120824,
+ 41465, 983565, 8528, 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093,
+ 0, 9147, 128787, 63958, 0, 9148, 9692, 4096, 53, 73776, 6750, 195018, 0,
+ 9594, 0, 0, 43527, 0, 727, 194703, 195023, 5805, 0, 6726, 0, 42176,
+ 12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, 120307, 0, 92343, 0,
+ 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 194701, 10803, 4132,
+ 120306, 68474, 92473, 0, 983305, 74837, 120155, 1499, 0, 8055, 42740,
63965, 0, 63962, 74042, 8924, 43123, 5988, 3660, 63969, 11781, 42718,
8788, 1357, 64851, 65743, 0, 8774, 0, 127086, 9941, 120172, 0, 1933,
69655, 9564, 0, 92435, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615,
- 0, 78302, 12220, 67616, 120598, 127475, 0, 68200, 6675, 128144, 0, 67592,
- 120685, 0, 64771, 1198, 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101,
- 1398, 0, 92554, 74034, 41569, 92684, 11406, 8167, 12127, 0, 840, 0, 0, 0,
- 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 2117, 0, 0, 12406, 0, 19931,
- 119089, 6678, 7769, 0, 12621, 0, 127366, 10227, 4764, 43101, 9981, 0,
- 40986, 4127, 66487, 0, 42202, 12754, 195022, 0, 0, 0, 67594, 2048, 12944,
- 4050, 67595, 917967, 43102, 10581, 12985, 4533, 195021, 74003, 6490, 0,
- 12038, 0, 0, 120704, 65461, 9798, 69704, 0, 1948, 119007, 0, 952, 128235,
- 0, 0, 120802, 6449, 9494, 120313, 0, 43098, 4843, 8142, 64160, 4098,
- 64170, 0, 0, 3436, 119973, 0, 12817, 67597, 6676, 3930, 66708, 0, 0,
- 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, 0, 8500, 42222, 120142,
- 73743, 120400, 4317, 11543, 67676, 64676, 0, 0, 67606, 119083, 0, 42217,
- 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, 11274, 67601,
- 64520, 64210, 6664, 78704, 42056, 10228, 64957, 11281, 0, 64213, 1469,
- 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, 352, 42225, 1451, 8061,
- 8453, 4134, 0, 74847, 66576, 127916, 0, 10520, 8575, 9960, 1201, 127289,
- 12846, 127291, 127292, 11919, 64962, 127287, 43739, 127281, 8511, 9460,
- 823, 11587, 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500,
- 42783, 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702,
- 66498, 9821, 64304, 0, 5152, 11048, 7533, 68366, 64410, 92305, 0, 4323,
- 120062, 92669, 0, 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0,
- 5260, 43143, 0, 326, 120131, 68423, 0, 10771, 2876, 74074, 92530, 194924,
- 41398, 7382, 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140,
- 9572, 0, 7003, 194883, 42334, 7704, 0, 194885, 43144, 4123, 8494, 43146,
- 9977, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521,
- 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024,
- 128072, 679, 64013, 0, 5850, 758, 7536, 0, 92234, 41441, 10693, 64006, 0,
- 64005, 4058, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027,
- 64029, 8970, 0, 9934, 0, 10774, 128020, 42201, 12421, 128216, 0, 1852,
- 3057, 128113, 73744, 64034, 64039, 0, 0, 0, 0, 92322, 7645, 12854, 74338,
- 3496, 0, 0, 0, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, 13309,
- 11570, 127811, 19960, 11696, 0, 1018, 118970, 194909, 194897, 1682,
- 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, 6768, 10728,
- 194830, 119010, 118863, 43311, 64966, 11577, 0, 43040, 1833, 11576, 0,
- 74779, 0, 185, 65085, 74533, 64754, 194848, 7535, 8085, 42525, 120387,
+ 70081, 78302, 12220, 67616, 120598, 127475, 0, 68200, 6675, 128144, 0,
+ 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, 64663, 0, 0, 4561,
+ 2101, 1398, 0, 92554, 74034, 41569, 92684, 11406, 8167, 12127, 0, 840, 0,
+ 126518, 7101, 6967, 0, 194898, 9796, 0, 333, 69891, 0, 8144, 2117, 0,
+ 983595, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 127366, 10227,
+ 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, 0, 0,
+ 94097, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985,
+ 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 69704, 0,
+ 1948, 69841, 0, 952, 128235, 0, 0, 120802, 6449, 9494, 120313, 0, 43098,
+ 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 119973, 0, 12817, 67597,
+ 6676, 3930, 42615, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0,
+ 0, 8500, 42222, 120142, 73743, 120400, 4317, 11543, 67676, 64676, 0, 0,
+ 67606, 119083, 0, 42217, 13102, 0, 66003, 6672, 0, 0, 0, 983738, 63841,
+ 9613, 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228,
+ 64957, 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598,
+ 904, 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 127916, 0,
+ 10520, 8575, 9960, 1201, 127289, 12846, 127291, 127292, 11919, 64962,
+ 127287, 43739, 127281, 8511, 9460, 823, 11587, 12305, 0, 64695, 127305,
+ 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, 65761,
+ 119585, 11606, 64784, 11702, 66498, 9821, 64304, 0, 5152, 11048, 7533,
+ 68366, 64410, 92305, 0, 4323, 120062, 92669, 71332, 127052, 42587, 42214,
+ 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 94038, 326, 120131, 68423,
+ 0, 10771, 2876, 74074, 92530, 194924, 41398, 7382, 9802, 127077, 127076,
+ 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, 194883, 42334, 7704,
+ 126490, 194885, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, 10765,
+ 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, 64020,
+ 126604, 10464, 0, 0, 194869, 64514, 11528, 64024, 128072, 679, 64013, 0,
+ 5850, 758, 7536, 0, 92234, 41441, 10693, 64006, 983567, 64005, 4058,
+ 119019, 126487, 64660, 0, 119050, 0, 983069, 1139, 43298, 64027, 64029,
+ 8970, 0, 9934, 983094, 10774, 128020, 42201, 12421, 128216, 0, 1852,
+ 3057, 64046, 73744, 64034, 64039, 0, 0, 0, 194899, 92322, 7645, 12854,
+ 74338, 3496, 0, 0, 0, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419,
+ 13309, 11570, 127811, 19960, 11696, 0, 1018, 118970, 194909, 194897,
+ 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, 6768,
+ 10728, 194830, 71316, 118863, 43311, 64966, 11577, 0, 43040, 1833, 11576,
+ 0, 74779, 0, 185, 65085, 74533, 64754, 194848, 7535, 8085, 42525, 120387,
9749, 41701, 6131, 1949, 4117, 7847, 120489, 194711, 64483, 65693, 0, 0,
- 0, 69695, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, 11484,
- 127535, 67840, 0, 0, 128793, 0, 10986, 64683, 0, 0, 194709, 0, 0, 9879,
- 0, 0, 4158, 128050, 68166, 0, 0, 0, 0, 69645, 332, 118808, 0, 5142, 2407,
- 69643, 42199, 0, 92404, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 92390,
- 42867, 1834, 0, 92461, 69817, 10940, 65249, 119040, 8662, 0, 0, 2652,
- 120527, 7164, 10784, 195093, 67674, 0, 92233, 92482, 194749, 74562,
+ 0, 69695, 42240, 0, 126651, 42864, 126498, 64667, 41868, 1184, 0, 815,
+ 11484, 127535, 67840, 983642, 0, 66197, 0, 10986, 64683, 983776, 0, 3455,
+ 0, 0, 9879, 0, 0, 4158, 128050, 68166, 0, 0, 0, 0, 69645, 332, 118808, 0,
+ 5142, 2407, 69643, 42199, 0, 92404, 74373, 0, 55217, 0, 63870, 43163, 0,
+ 0, 92390, 42867, 1834, 0, 92461, 69817, 10940, 65249, 119040, 8662, 0, 0,
+ 2652, 120527, 7164, 10784, 195093, 67674, 0, 92233, 92482, 194749, 74562,
917505, 1828, 74474, 120327, 78620, 8531, 12499, 6280, 12324, 118854,
65238, 68374, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, 1620,
- 64436, 3601, 195094, 128073, 0, 609, 11555, 0, 12496, 127839, 74181,
- 4343, 12505, 0, 127863, 0, 11377, 239, 0, 637, 0, 0, 42671, 0, 0, 0,
- 43565, 127082, 0, 12696, 128256, 0, 194796, 12929, 0, 712, 0, 4197, 0,
- 42818, 128688, 0, 120490, 0, 119137, 1506, 43562, 0, 0, 0, 12651, 0,
- 64628, 74517, 12058, 74084, 917838, 7494, 0, 4924, 65592, 118844, 0,
- 127088, 355, 9719, 127087, 13066, 64796, 0, 0, 12033, 42178, 0, 69760,
- 42571, 92635, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 0, 9080, 127000,
- 120352, 0, 68209, 0, 11082, 0, 5699, 195100, 66000, 9488, 65166, 119112,
- 0, 0, 0, 0, 128208, 0, 5265, 69235, 0, 11487, 67858, 12464, 0, 43045, 0,
- 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 0, 74348, 0, 43346, 8116,
- 795, 0, 0, 12462, 10930, 10831, 0, 118952, 64362, 74334, 0, 120811, 0,
- 12468, 8607, 1008, 0, 10092, 195078, 917842, 67855, 55257, 73771, 1766,
- 11282, 11996, 1820, 4547, 0, 0, 0, 0, 13223, 128665, 64595, 127294, 0,
- 92311, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, 5382, 0, 0, 0, 119060,
- 64953, 5406, 19920, 92216, 66510, 3590, 0, 1130, 0, 0, 42016, 11823,
- 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, 74812, 78584,
- 92229, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, 120803, 0,
- 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 127182, 0, 0, 0,
- 69783, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 128247, 0, 118990,
- 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981,
- 12382, 42133, 120755, 9706, 69738, 0, 66610, 10461, 12103, 0, 8642, 0,
- 42766, 0, 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041,
- 1461, 910, 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 194841, 12888, 0,
- 67668, 13143, 0, 9193, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305,
- 0, 65864, 623, 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083,
- 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652,
- 0, 647, 0, 633, 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529,
- 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813,
- 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0,
- 119077, 0, 0, 0, 0, 0, 43244, 0, 0, 0, 119561, 0, 0, 194921, 128160,
- 9939, 0, 0, 77860, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038,
- 119558, 6273, 66679, 364, 9595, 194908, 0, 0, 707, 0, 0, 9282, 66489,
- 224, 0, 68670, 9332, 4966, 68677, 0, 68644, 0, 3841, 68634, 0, 10732,
- 68640, 850, 4972, 0, 64699, 2909, 68619, 44008, 68627, 0, 11544, 10203,
- 9608, 0, 0, 11962, 194694, 12507, 1196, 128687, 128311, 777, 120187,
- 4375, 65271, 67678, 0, 12198, 0, 64824, 119343, 0, 9454, 63778, 8658,
- 42528, 78000, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0,
- 2701, 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748,
- 63770, 0, 0, 0, 65542, 63766, 55244, 3061, 0, 63764, 63787, 9067, 6096,
- 0, 7694, 0, 7257, 63768, 3485, 12987, 0, 127522, 120628, 63807, 1591, 0,
- 6386, 63783, 0, 0, 127173, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012,
- 0, 1640, 12495, 66691, 7624, 3138, 10996, 92247, 1922, 0, 12498, 10987,
- 0, 0, 3894, 65543, 0, 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303,
- 74020, 0, 917935, 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493,
- 6233, 42681, 1002, 12491, 0, 64911, 92615, 2096, 65120, 0, 0, 0, 11611,
- 11632, 127041, 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216,
- 8507, 66236, 66211, 66218, 92672, 66240, 78041, 66233, 8928, 0, 7909,
- 66234, 11605, 63759, 0, 66208, 73999, 63799, 63803, 244, 11542, 12898,
- 12494, 73761, 12492, 12669, 0, 0, 74153, 0, 128278, 120680, 4882, 13040,
- 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, 2429, 1360, 248, 0, 63797,
- 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, 78040, 470,
- 78038, 78035, 78036, 0, 78034, 4579, 128090, 0, 12511, 74453, 12514, 0,
- 74579, 7239, 7001, 8623, 0, 128052, 128048, 7378, 12512, 11615, 6104, 0,
- 0, 659, 6098, 0, 12234, 127307, 127067, 8311, 12510, 41803, 13039,
- 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 77917,
- 12477, 77916, 2311, 0, 4415, 237, 6281, 127280, 0, 0, 2309, 1312, 8173,
- 128871, 12469, 0, 78505, 64335, 10609, 0, 128111, 9397, 11524, 9395,
- 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383,
- 9384, 6740, 0, 65451, 8185, 0, 917832, 43024, 43336, 67659, 2313, 128167,
- 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082,
- 10924, 3147, 0, 120684, 12524, 119081, 2310, 11818, 9381, 9382, 9379,
- 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016,
- 8210, 0, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0,
- 42030, 5007, 12522, 43088, 0, 4951, 127805, 127240, 0, 9922, 43309, 0,
- 12525, 0, 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0,
- 92567, 65691, 63998, 1819, 10496, 0, 0, 119920, 0, 194668, 0, 12506, 0,
- 12231, 0, 12500, 44023, 12509, 64393, 78830, 3389, 10589, 6608, 41047,
- 120321, 78395, 78394, 74069, 77995, 78391, 3608, 8281, 120320, 1107, 0,
- 9076, 8862, 69743, 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782,
- 128817, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324,
+ 64436, 3601, 195094, 128073, 983562, 609, 11555, 983099, 12496, 127839,
+ 74181, 4343, 12505, 0, 127863, 0, 11377, 239, 0, 637, 0, 0, 42671, 0, 0,
+ 0, 43565, 71306, 126493, 12696, 128256, 0, 94062, 12929, 0, 712, 0, 4197,
+ 983204, 42818, 126632, 0, 120490, 0, 119137, 1506, 43562, 0, 92491, 0,
+ 12651, 0, 64628, 74517, 12058, 74084, 917838, 7494, 0, 4924, 65592,
+ 118844, 0, 127088, 355, 9719, 127087, 13066, 64796, 0, 0, 12033, 42178,
+ 0, 69760, 42571, 92635, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 0,
+ 9080, 127000, 120352, 0, 68209, 0, 11082, 0, 5699, 195100, 66000, 9488,
+ 65166, 119112, 0, 0, 0, 0, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464,
+ 0, 43045, 0, 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 0, 74348, 0,
+ 43346, 8116, 795, 0, 0, 12462, 10930, 10831, 0, 118952, 64362, 74334,
+ 983602, 120811, 0, 12468, 8607, 1008, 0, 10092, 195078, 917842, 67855,
+ 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, 0, 0, 0, 13223, 128665,
+ 64595, 127294, 0, 92311, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, 5382, 0,
+ 0, 0, 119060, 64953, 5406, 19920, 69897, 66510, 3590, 194864, 1130, 0, 0,
+ 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310,
+ 74812, 78584, 92229, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816,
+ 120803, 983839, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519,
+ 127182, 0, 73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, 5400,
+ 11594, 128247, 0, 118990, 10491, 69842, 64412, 0, 0, 5587, 42865, 64404,
+ 8268, 4923, 65086, 8981, 12382, 42133, 120755, 9706, 69738, 0, 66610,
+ 10461, 12103, 0, 8642, 0, 42766, 983857, 2210, 9983, 0, 94009, 0, 0, 0,
+ 7398, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, 6749, 3658, 93964,
+ 120525, 0, 7617, 194841, 12888, 127983, 67668, 13143, 0, 9193, 11097,
+ 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670,
+ 10660, 5769, 613, 7543, 120279, 477, 41083, 92521, 0, 592, 1578, 12459,
+ 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0,
+ 126472, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, 12489, 0,
+ 3195, 5550, 983554, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, 0,
+ 2877, 0, 0, 1675, 69840, 0, 0, 0, 10070, 10595, 0, 119077, 194777,
+ 983611, 0, 0, 0, 43244, 0, 0, 983907, 119561, 983078, 0, 194921, 128160,
+ 9939, 0, 983151, 77860, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0,
+ 74038, 119558, 6273, 66679, 364, 9595, 194908, 0, 0, 707, 0, 0, 9282,
+ 66489, 224, 0, 68670, 9332, 4966, 68677, 0, 68644, 0, 3841, 68634, 0,
+ 10732, 68640, 850, 4972, 0, 12890, 2909, 68619, 44008, 68627, 983709,
+ 11544, 10203, 9608, 0, 0, 11962, 194694, 12507, 1196, 128687, 128311,
+ 777, 120187, 4375, 65271, 67678, 0, 12198, 0, 64824, 119343, 983230,
+ 9454, 63778, 8658, 42528, 78000, 2705, 917975, 41520, 0, 0, 11986, 7765,
+ 42502, 8280, 74520, 2701, 0, 127002, 5767, 0, 0, 9809, 8353, 63747,
+ 66701, 63772, 983805, 63745, 1748, 63770, 0, 0, 0, 65542, 63766, 55244,
+ 3061, 0, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, 12987,
+ 0, 127522, 120628, 63807, 1591, 0, 6386, 63783, 0, 0, 92535, 0, 0, 0,
+ 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, 3138,
+ 10996, 92247, 1922, 0, 12498, 10987, 69936, 69939, 3894, 65543, 0,
+ 194842, 983588, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935,
+ 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002,
+ 12491, 0, 64911, 92615, 2096, 65120, 0, 78219, 983081, 11611, 11632,
+ 127041, 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507,
+ 66236, 66211, 66218, 92672, 66240, 78041, 66233, 8928, 983552, 7909,
+ 66234, 11605, 63759, 983645, 66208, 73999, 63799, 63803, 244, 11542,
+ 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, 128278, 120680, 4882,
+ 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, 2429, 1360, 248, 0,
+ 63797, 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, 78040,
+ 470, 78038, 78035, 78036, 70028, 78034, 4579, 128090, 0, 12511, 74453,
+ 12514, 0, 74579, 7239, 7001, 8623, 94011, 128052, 128048, 7378, 12512,
+ 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, 8311, 12510,
+ 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 983911, 0, 0, 2323,
+ 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 127280, 0, 0,
+ 2309, 1312, 8173, 128871, 12469, 0, 78505, 64335, 10609, 0, 128111, 9397,
+ 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932,
+ 9386, 9383, 9384, 6740, 0, 65451, 8185, 0, 917832, 43024, 43336, 67659,
+ 2313, 128167, 7948, 9236, 92571, 0, 0, 10570, 43473, 6289, 10484, 0, 0,
+ 11998, 12082, 10924, 3147, 0, 120684, 12524, 119081, 2310, 11818, 9381,
+ 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983769, 9372,
+ 12444, 0, 0, 13016, 8210, 983949, 42029, 11079, 12331, 43451, 42032,
+ 8744, 726, 0, 983828, 4155, 0, 0, 42030, 5007, 12522, 43088, 0, 4951,
+ 127805, 127240, 0, 9922, 43309, 983832, 12525, 983463, 12016, 65770,
+ 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 92567, 65691, 63998,
+ 1819, 10496, 0, 0, 119920, 0, 194668, 0, 12506, 0, 12231, 0, 12500,
+ 44023, 12509, 64393, 78830, 3389, 10589, 6608, 41047, 120321, 78395,
+ 78394, 74069, 77995, 78391, 3608, 8281, 120320, 1107, 0, 9076, 8862,
+ 69743, 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 126514,
+ 8546, 11553, 63995, 13177, 9043, 6303, 983938, 498, 64471, 120324,
128567, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 69719, 3231, 0, 6422,
66512, 69653, 12530, 2537, 78405, 41429, 12658, 13036, 65772, 0, 78738,
41433, 4719, 469, 0, 4363, 3313, 41428, 78407, 2023, 1772, 78224, 78225,
65706, 10051, 64812, 78220, 0, 9920, 12215, 0, 4931, 1951, 12497, 119363,
9607, 0, 9663, 0, 119634, 6503, 41110, 0, 1491, 0, 0, 127304, 41061, 0,
- 0, 127187, 65026, 41993, 41509, 11045, 65028, 78602, 66476, 41108, 9738,
- 41995, 1075, 1958, 12535, 41992, 41506, 0, 41687, 0, 120717, 127776,
- 9940, 127299, 7692, 0, 8008, 41131, 330, 8566, 65083, 41133, 9816,
- 128074, 12532, 78550, 78546, 3508, 127058, 43235, 0, 127298, 64139,
+ 194838, 127187, 65026, 41993, 41509, 11045, 65028, 78602, 66476, 41108,
+ 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, 41687, 0, 120717,
+ 127776, 9940, 127299, 7692, 983824, 8008, 41131, 330, 8566, 65083, 41133,
+ 9816, 126517, 12532, 78550, 78546, 3508, 127058, 43235, 0, 127298, 64139,
78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, 0, 64136, 12536,
- 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, 128810, 0, 65599,
- 65717, 9966, 0, 4948, 12484, 4032, 128149, 12623, 0, 6207, 0, 6117,
- 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 127286,
- 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 128571, 73766, 0,
- 6295, 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560,
- 78557, 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031,
- 78563, 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762,
- 78579, 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0,
- 9325, 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752,
- 0, 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737,
- 9956, 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 10024, 194764, 194767,
- 74340, 69681, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748,
- 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, 78581,
- 4156, 0, 0, 6421, 78591, 1611, 78589, 13018, 74257, 78588, 74542, 3337,
- 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, 0, 13046, 8838,
- 425, 4025, 10709, 78595, 2108, 2392, 13047, 0, 0, 6819, 13049, 6499,
- 92243, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 127919, 0, 128069,
- 3277, 8929, 4947, 41055, 0, 194722, 194721, 194724, 13045, 64626, 66034,
- 7751, 194727, 8371, 194729, 3997, 12806, 8768, 13044, 0, 12420, 4024,
- 194730, 41054, 1078, 9757, 69736, 41057, 0, 0, 0, 0, 0, 92210, 92411, 0,
- 41496, 0, 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773,
- 43183, 6401, 5831, 0, 0, 13043, 8056, 92494, 65681, 208, 127382, 41514,
- 0, 0, 0, 10699, 6408, 92227, 7825, 5661, 0, 120630, 3603, 41109, 2398,
- 3548, 0, 0, 119933, 0, 3115, 9918, 0, 11321, 42912, 0, 0, 194726, 4876,
- 65804, 0, 0, 43468, 0, 41558, 41471, 73950, 8158, 9944, 41472, 120298,
- 13051, 78689, 3143, 194674, 6701, 41559, 1896, 66256, 13052, 194680,
- 5665, 0, 119071, 7025, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310,
- 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 9942, 13231, 0,
- 64752, 4732, 194666, 11596, 119931, 65187, 1626, 63983, 10110, 64772,
- 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 69231, 64753, 6275,
- 917808, 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331,
- 917810, 42026, 6137, 0, 7524, 0, 917809, 8346, 0, 8338, 128315, 65043, 0,
- 822, 127984, 9903, 64721, 42722, 194656, 194659, 78655, 78661, 194660,
- 78662, 41265, 5311, 1795, 965, 118791, 10587, 78055, 11278, 78632,
- 194640, 0, 12946, 194641, 119341, 120349, 6294, 3144, 194648, 194647,
- 65019, 194649, 73990, 0, 0, 748, 41067, 2330, 535, 3148, 12375, 194652,
- 194629, 10556, 2475, 12388, 4889, 8968, 67863, 3593, 0, 0, 2342, 0,
- 194634, 65206, 4894, 194635, 4890, 194637, 917804, 581, 4893, 0, 6571,
- 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, 10119, 6415, 42893, 0,
- 69702, 0, 0, 11375, 64746, 2332, 78063, 412, 78061, 64932, 42880, 43587,
- 0, 0, 0, 0, 65197, 78066, 12203, 78064, 78065, 8913, 65854, 4875, 65811,
- 120381, 120389, 118888, 9344, 8826, 120386, 120395, 13104, 74781, 11997,
- 120393, 78075, 0, 3134, 0, 65696, 92331, 0, 66217, 0, 8334, 119344, 0,
- 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, 120167, 4328,
- 10734, 127014, 0, 127914, 7804, 78272, 10811, 6250, 11339, 4914, 11367,
- 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 127836, 118893, 2361,
- 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312,
- 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0,
- 0, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, 7698, 5658,
- 74045, 120165, 0, 0, 4913, 0, 0, 0, 42326, 128194, 12728, 92685, 42478,
- 2327, 0, 12563, 42287, 12705, 0, 0, 12588, 8821, 6153, 2867, 194708,
- 66312, 698, 128007, 194606, 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0,
- 41552, 65115, 78465, 78467, 78463, 78464, 128851, 78461, 194697, 74356,
- 92626, 4716, 43277, 0, 78474, 12340, 120568, 0, 194700, 55264, 41211,
- 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0,
- 66254, 120821, 0, 0, 128654, 0, 119194, 74050, 92701, 0, 0, 0, 0, 0,
- 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, 2699, 0, 73845, 2985,
- 92568, 0, 917845, 12192, 119314, 0, 119312, 9827, 119310, 119311, 119308,
- 119309, 119306, 11481, 41210, 119305, 0, 35, 78481, 78482, 66694, 68479,
- 78477, 78478, 43596, 6090, 64257, 7812, 10534, 0, 78485, 73848, 78483,
- 4272, 0, 40967, 40964, 917825, 12704, 78487, 43306, 0, 64497, 12138,
- 7930, 0, 43303, 68216, 0, 917826, 5244, 4189, 127098, 67596, 127504,
- 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 0, 917827, 65555, 12574, 0, 0,
- 0, 74490, 127099, 43657, 0, 0, 0, 42682, 12578, 12720, 0, 41227, 0,
- 12346, 127101, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 128546, 66015, 0,
- 959, 8885, 12564, 66457, 78808, 9469, 9632, 92323, 74761, 64323, 0, 0, 0,
- 0, 310, 0, 41281, 10976, 0, 92190, 0, 74266, 10054, 6497, 8574, 0, 9012,
- 19958, 74420, 65089, 13215, 12730, 65163, 74044, 374, 43195, 816, 0, 0,
- 0, 41934, 7465, 0, 128168, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0,
- 307, 127147, 9585, 5374, 0, 128059, 0, 0, 0, 0, 0, 65567, 120614, 1929,
- 0, 12142, 0, 12236, 41419, 194618, 120610, 12982, 194623, 5378, 78791,
- 128679, 41421, 0, 4462, 0, 0, 128092, 821, 0, 2498, 5800, 120157, 0,
- 1760, 2421, 4469, 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 43597,
- 10628, 74808, 194572, 7999, 43971, 0, 0, 10634, 10942, 7713, 2348, 0,
- 64374, 4380, 194608, 119044, 9982, 64324, 41240, 862, 65626, 78462, 1810,
- 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, 64688, 194593, 194592,
- 78092, 74357, 194597, 4748, 92228, 194598, 194601, 42260, 5871, 119075,
- 0, 74576, 44019, 0, 128189, 3967, 194604, 13137, 8775, 127945, 0, 2963,
- 0, 8410, 4454, 723, 127882, 966, 4449, 92330, 92238, 0, 7819, 2320,
- 194589, 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634,
- 41542, 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045,
- 6729, 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394,
- 0, 74194, 0, 127929, 9780, 0, 13092, 194576, 119605, 194578, 7074, 92648,
- 194579, 194582, 11414, 128868, 2531, 13034, 0, 0, 4211, 1259, 7517, 0, 0,
- 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0,
- 42850, 13035, 9075, 92387, 5466, 128153, 0, 64098, 65793, 4535, 194573,
- 4271, 78417, 128357, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755,
- 118864, 9046, 127934, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033,
- 247, 118915, 0, 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447,
- 11001, 0, 42255, 0, 92661, 69821, 41905, 0, 0, 10775, 9793, 5009, 0,
- 42269, 64587, 0, 42535, 69812, 64529, 41408, 42853, 3877, 120795, 42674,
- 8147, 43566, 119021, 0, 10236, 65918, 43782, 0, 0, 64506, 69652, 118921,
- 4747, 128058, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, 0, 0, 43286,
- 0, 128211, 43778, 0, 41305, 78776, 43781, 11303, 65547, 0, 7031, 859, 0,
- 0, 0, 6059, 126985, 55235, 0, 8535, 0, 65196, 194787, 66032, 11488, 0,
- 120786, 42233, 64140, 9946, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579,
- 120482, 917817, 0, 0, 0, 9028, 119571, 69234, 0, 0, 1285, 64882, 41242,
- 0, 0, 12640, 0, 7401, 0, 12625, 68198, 0, 92254, 3940, 41597, 55260,
- 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516,
- 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, 119317, 119318, 2142,
- 68454, 42485, 118837, 7878, 8211, 42293, 64377, 0, 92643, 0, 194673,
+ 2350, 13029, 78233, 0, 983103, 13030, 6702, 4527, 0, 12538, 128810,
+ 983636, 65599, 65717, 9966, 0, 4948, 12484, 4032, 128149, 12623, 0, 6207,
+ 0, 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 126625, 10149, 74118,
+ 0, 127286, 12481, 0, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619,
+ 73766, 0, 6295, 901, 41510, 7953, 0, 65032, 41513, 983166, 11927, 66584,
+ 78559, 78560, 78557, 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338,
+ 69922, 74031, 78563, 78564, 2352, 78572, 893, 64576, 11289, 1407, 67973,
+ 0, 13026, 6762, 78579, 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0,
+ 1343, 983814, 0, 9325, 6818, 6283, 11738, 0, 983925, 0, 11741, 0, 0,
+ 9216, 8263, 11279, 194752, 983816, 194754, 13021, 64494, 3136, 194758,
+ 194757, 194760, 13022, 42737, 9956, 0, 0, 74552, 10014, 0, 41260, 119340,
+ 13020, 10024, 194764, 74583, 74340, 69681, 0, 43001, 8029, 0, 0, 983771,
+ 3335, 0, 0, 9776, 120526, 194748, 5215, 42644, 3333, 1632, 194751, 64849,
+ 3342, 78582, 5363, 12957, 78581, 4156, 0, 0, 6421, 78591, 1611, 78589,
+ 13018, 74257, 78588, 74542, 3337, 4537, 67895, 11736, 0, 68608, 6482,
+ 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 78595, 2108, 2392,
+ 13047, 0, 0, 6819, 13049, 6499, 92243, 12424, 68614, 73944, 13050, 9924,
+ 194745, 6507, 127919, 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722,
+ 194721, 194724, 13045, 64626, 66034, 7751, 194727, 8371, 194729, 3997,
+ 12806, 8768, 13044, 0, 12420, 4024, 194730, 41054, 1078, 9757, 69736,
+ 41057, 0, 0, 0, 0, 983782, 92210, 92411, 0, 41496, 0, 9165, 1572, 11911,
+ 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0,
+ 13043, 8056, 92494, 65681, 208, 127382, 41514, 0, 0, 0, 10699, 6408,
+ 92227, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 126596, 0, 119933,
+ 0, 3115, 9918, 0, 11321, 42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468,
+ 983266, 41558, 41471, 73950, 8158, 9944, 41472, 120298, 13051, 78689,
+ 3143, 194674, 6701, 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071,
+ 7025, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382,
+ 194686, 73924, 1121, 78319, 63959, 0, 9942, 13231, 0, 64752, 4732,
+ 194666, 11596, 119931, 65187, 1626, 63983, 10110, 64772, 42024, 6420,
+ 42028, 0, 10509, 2795, 4910, 194728, 69231, 64753, 6275, 93957, 118830,
+ 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 7085,
+ 6137, 0, 7524, 0, 917809, 8346, 0, 8338, 128315, 65043, 0, 822, 127984,
+ 9903, 64721, 42722, 69877, 194659, 78655, 78661, 194660, 78662, 41265,
+ 5311, 1795, 965, 118791, 10587, 78055, 11278, 78632, 194640, 0, 12946,
+ 194641, 119341, 120349, 6294, 3144, 194648, 194647, 65019, 194649, 73990,
+ 0, 983951, 748, 41067, 2330, 535, 3148, 12375, 78799, 194629, 10556,
+ 2475, 12388, 4889, 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894,
+ 194635, 4890, 194637, 917804, 581, 4893, 983616, 6571, 65545, 4888, 4157,
+ 78048, 78049, 78046, 78047, 0, 10119, 6415, 42893, 0, 69702, 0, 0, 11375,
+ 64746, 2332, 78063, 412, 78061, 64932, 42880, 43587, 0, 0, 0, 0, 65197,
+ 78066, 12203, 78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389,
+ 118888, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, 78075,
+ 0, 3134, 0, 65696, 92331, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0,
+ 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, 120167, 4328, 10734,
+ 127014, 0, 127914, 7804, 78272, 10811, 6250, 11339, 4914, 11367, 0,
+ 78054, 4917, 74516, 74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971,
+ 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977,
+ 10960, 40962, 8305, 12573, 983608, 40980, 983955, 13202, 0, 12582, 78282,
+ 983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891,
+ 7698, 5658, 74045, 70039, 0, 0, 4913, 0, 983950, 71333, 42326, 128194,
+ 12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, 0, 0, 12588, 8821,
+ 6153, 2867, 194708, 66312, 698, 128007, 194606, 10356, 70017, 194713,
+ 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, 78463, 78464, 128851,
+ 78461, 194697, 74356, 64945, 4716, 43277, 0, 78474, 12340, 120568, 0,
+ 194700, 55264, 41211, 120676, 8703, 5462, 917629, 983487, 10101, 0,
+ 70049, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 128654, 0, 119194,
+ 74050, 92701, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0,
+ 0, 2699, 0, 73845, 2985, 92568, 126475, 917845, 12192, 119314, 0, 119312,
+ 9827, 119310, 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0,
+ 35, 78481, 78482, 66694, 68479, 78477, 78478, 43596, 6090, 64257, 7812,
+ 10534, 0, 78485, 73848, 67975, 4272, 0, 40967, 40964, 917825, 12704,
+ 78487, 43306, 0, 64497, 12138, 7930, 0, 2292, 68216, 0, 917826, 5244,
+ 4189, 94108, 67596, 127504, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 2279,
+ 0, 917827, 65555, 12574, 0, 0, 0, 74490, 127099, 43657, 0, 0, 0, 42682,
+ 12578, 12720, 0, 41227, 0, 12346, 127101, 64848, 0, 0, 7251, 0, 0,
+ 118850, 119141, 128546, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469,
+ 9632, 92323, 74761, 64323, 127335, 0, 0, 0, 310, 0, 41281, 10976, 0,
+ 71325, 0, 74266, 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215,
+ 12730, 65163, 74044, 374, 43195, 816, 120161, 0, 0, 41934, 7465, 0,
+ 128168, 983260, 4715, 6101, 94106, 41936, 0, 4879, 0, 65446, 0, 307,
+ 127147, 9585, 5374, 983259, 128059, 0, 0, 126618, 120390, 0, 65567,
+ 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 120610, 12982, 194623,
+ 5378, 78791, 128679, 41421, 0, 4462, 0, 126599, 128092, 821, 0, 2498,
+ 5800, 120157, 983115, 1760, 2421, 4469, 2324, 828, 3611, 78400, 757,
+ 1185, 0, 78770, 43597, 10628, 74808, 194572, 7999, 43971, 0, 0, 10634,
+ 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 9982, 64324, 41240,
+ 862, 65626, 78462, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566,
+ 64688, 194593, 194592, 78092, 74357, 194597, 4748, 92228, 194598, 194601,
+ 42260, 5871, 119075, 0, 74576, 44019, 0, 128189, 3967, 194604, 13137,
+ 8775, 127945, 0, 2963, 0, 8410, 4454, 723, 127882, 966, 4449, 92330,
+ 92238, 0, 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 55276, 0,
+ 8047, 0, 78827, 12634, 41542, 78780, 7466, 6705, 12174, 42610, 0, 74452,
+ 983754, 1584, 66645, 6045, 6729, 120640, 65218, 11559, 0, 78062, 7537, 0,
+ 11370, 0, 10330, 0, 10394, 0, 74194, 0, 127929, 9780, 0, 13092, 194576,
+ 77950, 194578, 7074, 92648, 194579, 194582, 11414, 128868, 2531, 13034,
+ 0, 0, 4211, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219,
+ 94034, 194566, 11064, 41129, 0, 42850, 13035, 9075, 92387, 5466, 128153,
+ 0, 64098, 65793, 4535, 194573, 4271, 78417, 128357, 6769, 41410, 983444,
+ 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, 127934, 126608, 0, 0, 0, 0,
+ 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, 12338, 4651, 69895,
+ 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, 0, 92661, 69821,
+ 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 983063, 42535, 69812,
+ 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 983767,
+ 10236, 65918, 43782, 0, 0, 64506, 69652, 118921, 4747, 128058, 69844,
+ 43200, 5832, 0, 0, 5141, 42600, 0, 43203, 0, 983790, 43286, 0, 128211,
+ 43778, 0, 41305, 78776, 43781, 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059,
+ 126985, 55235, 0, 8535, 0, 65196, 194787, 66032, 11488, 120481, 120786,
+ 42233, 64140, 9946, 63885, 194792, 11822, 0, 43189, 983889, 0, 1788,
+ 1579, 120482, 71298, 0, 0, 0, 9028, 119571, 69234, 94055, 0, 1285, 64882,
+ 41242, 70086, 0, 12640, 0, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597,
+ 43754, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166,
+ 120516, 118989, 0, 8815, 66673, 65046, 9285, 913, 42259, 119317, 119318,
+ 2142, 68454, 42485, 94012, 7878, 8211, 42293, 64377, 0, 92643, 0, 194673,
12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419,
- 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, 7184, 120673,
+ 42777, 10139, 980, 43698, 65386, 2208, 0, 43701, 43198, 7184, 120673,
194797, 917819, 10085, 119992, 0, 119993, 6634, 92373, 0, 119323, 8072,
119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0,
- 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, 0, 78107,
+ 126977, 120565, 9914, 2217, 917854, 73975, 6367, 6351, 66688, 0, 78107,
0, 64735, 41243, 92199, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, 0,
120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, 9741,
78329, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 128225, 13213,
- 42452, 78331, 0, 78445, 0, 1072, 78457, 78452, 78454, 6576, 41988, 41132,
- 65675, 1080, 120002, 9886, 55225, 1101, 68404, 12309, 55227, 0, 12632,
- 1086, 1869, 78685, 7680, 0, 65458, 120714, 12639, 3380, 8123, 1091,
- 12638, 7977, 4501, 41099, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, 10494,
- 92655, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, 0,
- 120462, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0,
- 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0,
- 119594, 6053, 65602, 0, 92201, 64727, 9160, 194827, 0, 0, 92180, 10503,
- 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326,
- 92204, 0, 0, 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571,
- 3674, 9740, 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870,
- 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099,
- 42645, 0, 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204,
- 917962, 19966, 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 128012,
- 41063, 0, 10664, 0, 8369, 0, 4551, 194964, 3369, 0, 0, 9673, 66334,
- 65580, 10478, 118960, 12517, 557, 9457, 12034, 0, 6355, 12519, 41004, 0,
- 195025, 74094, 0, 0, 77970, 0, 0, 128175, 12111, 3927, 0, 12515, 1474,
- 67893, 5492, 6923, 128099, 10441, 73836, 0, 43990, 5493, 0, 74319, 0,
- 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, 917959, 5853, 13063,
- 10363, 0, 12956, 128169, 120729, 11314, 917582, 12060, 0, 78392, 12826,
- 6329, 0, 10514, 65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697,
- 43420, 78396, 127057, 2695, 42171, 0, 0, 0, 67617, 118971, 0, 2693,
- 12125, 12766, 0, 1164, 0, 0, 41918, 0, 127542, 8687, 66009, 12178, 7053,
- 128001, 7469, 0, 5248, 12218, 120538, 6427, 42884, 41123, 0, 0, 42873,
- 41126, 9991, 41128, 74371, 127031, 0, 9873, 0, 42877, 7994, 64762, 2053,
- 42843, 6591, 9340, 0, 1589, 0, 296, 74438, 78852, 0, 67841, 74370, 0,
- 8922, 128068, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891,
- 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373,
- 5295, 917569, 74114, 1223, 1642, 174, 78399, 883, 4161, 12691, 42603,
- 41413, 3212, 41459, 3211, 74810, 41425, 127029, 78412, 74450, 9728, 3846,
- 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, 4986, 12189,
- 0, 67648, 120499, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0,
- 77949, 0, 68135, 917576, 77946, 0, 69679, 69684, 9890, 78561, 12971,
- 78453, 92556, 73898, 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0,
- 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0,
- 0, 0, 42916, 0, 0, 0, 7282, 78728, 65733, 4445, 127138, 128082, 3494,
- 74606, 6555, 0, 77976, 0, 0, 78566, 0, 0, 65898, 0, 65312, 5447, 0,
+ 42452, 78331, 120664, 78445, 0, 1072, 78457, 78452, 78454, 6576, 41988,
+ 41132, 65675, 1080, 120002, 9886, 55225, 1101, 68404, 12309, 55227, 0,
+ 12632, 1086, 1869, 78685, 7680, 0, 65458, 120714, 12639, 3380, 8123,
+ 1091, 12638, 7977, 4501, 41099, 0, 66309, 0, 0, 1494, 983146, 126613, 0,
+ 11693, 126513, 10494, 92655, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0,
+ 73794, 0, 8022, 0, 120462, 74106, 12413, 94069, 917994, 917993, 917995,
+ 5570, 1881, 7210, 0, 1012, 43752, 0, 120709, 7208, 66442, 5569, 983236,
+ 42339, 0, 6063, 0, 78383, 119594, 6053, 65602, 0, 92201, 64727, 9160,
+ 194827, 0, 0, 92180, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319,
+ 64786, 8602, 120110, 11326, 92204, 983116, 0, 120119, 78333, 120117,
+ 120118, 120099, 120100, 65087, 5571, 3674, 9740, 9121, 5568, 120107,
+ 120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 983791, 43281,
+ 10233, 41263, 66251, 65729, 66253, 126497, 74099, 42645, 0, 194815, 8583,
+ 0, 5847, 6928, 128074, 0, 0, 0, 0, 66592, 12204, 917962, 19966, 77856,
+ 42561, 120626, 983245, 0, 8120, 120701, 0, 0, 128012, 41063, 0, 10664, 0,
+ 8369, 0, 4551, 194964, 3369, 0, 0, 9673, 66334, 65580, 10478, 118960,
+ 12517, 557, 9457, 12034, 983662, 6355, 12519, 41004, 0, 195025, 74094, 0,
+ 0, 77970, 983560, 0, 128175, 12111, 3927, 0, 12515, 1474, 67893, 5492,
+ 6923, 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, 12019, 0,
+ 1618, 0, 120474, 9645, 10430, 917959, 5853, 13063, 10363, 0, 12956,
+ 128169, 120729, 11314, 917582, 12060, 0, 78392, 12826, 6329, 0, 10514,
+ 65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697, 43420, 78396,
+ 127057, 2695, 42171, 0, 0, 0, 67617, 118971, 0, 2693, 12125, 12766, 0,
+ 1164, 128817, 0, 41918, 983168, 127542, 8687, 66009, 12178, 7053, 128001,
+ 7469, 0, 5248, 12218, 120538, 6427, 42884, 41123, 0, 0, 42873, 41126,
+ 9991, 41128, 74371, 127031, 0, 9873, 0, 42877, 7994, 64762, 2053, 42843,
+ 6591, 9340, 0, 1589, 0, 296, 74438, 78852, 0, 67841, 74370, 0, 8922,
+ 128068, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, 13262,
+ 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, 5295,
+ 917569, 74114, 1223, 1642, 174, 78399, 883, 4161, 12691, 42603, 41413,
+ 3212, 41459, 3211, 74810, 41425, 127029, 78412, 74450, 9728, 3846, 8070,
+ 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, 4986, 12189, 0,
+ 67648, 120499, 94001, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, 0,
+ 68135, 917576, 77946, 0, 69679, 69684, 9890, 78561, 12971, 78453, 92556,
+ 73898, 11979, 70051, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469,
+ 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0,
+ 42916, 0, 0, 0, 7282, 78728, 65733, 4445, 127138, 128082, 3494, 74606,
+ 6555, 0, 77976, 0, 0, 78566, 0, 983189, 65898, 983238, 65312, 5447, 0,
12895, 65593, 4010, 0, 41106, 0, 64448, 0, 41105, 0, 65820, 6232, 0,
128280, 0, 43608, 119091, 0, 6538, 4335, 78364, 3941, 41122, 11061,
- 78363, 64892, 9113, 1954, 12155, 0, 42878, 11500, 0, 0, 74578, 0, 65832,
- 0, 0, 0, 77975, 119230, 4586, 0, 350, 10951, 0, 509, 0, 0, 92307, 0, 0,
- 5133, 0, 0, 9500, 0, 4957, 64741, 2422, 9354, 0, 0, 0, 2496, 11516, 944,
- 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 128555, 0, 0,
- 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 78120,
- 8877, 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120, 65121, 10862,
- 6060, 41119, 41416, 74355, 4173, 0, 0, 0, 1906, 917986, 11532, 74073, 0,
- 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, 11428, 1730, 2457, 0,
- 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 92491, 0, 6129, 0, 0, 128268,
- 0, 7874, 8681, 119092, 0, 13136, 0, 0, 74278, 63886, 118881, 9605, 73892,
- 13220, 128776, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, 3096,
- 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, 64536, 65465, 64654, 7467,
- 0, 1467, 10158, 10040, 0, 9519, 0, 917812, 0, 118899, 12193, 0, 0, 0, 0,
- 0, 19935, 0, 92162, 69676, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880,
- 11471, 43554, 65862, 11474, 66332, 66603, 128138, 2426, 12042, 92194, 0,
- 9537, 3961, 12115, 77953, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876,
- 11667, 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0,
- 68215, 0, 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 10060,
- 41940, 8299, 41945, 7132, 41941, 3308, 7190, 64880, 8614, 65220, 41493,
- 0, 41699, 10762, 43780, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012,
- 10395, 0, 43633, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755,
- 74802, 9227, 7506, 7510, 92281, 691, 738, 7511, 7512, 7515, 3868, 688,
- 41847, 690, 2548, 737, 974, 8003, 7406, 917911, 0, 0, 3985, 917912,
- 65860, 63921, 7051, 69777, 4682, 917805, 12809, 6406, 4685, 92505, 10879,
- 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, 0, 41958, 119176,
- 917908, 0, 0, 42657, 92468, 7643, 42373, 11714, 67587, 43568, 0, 11717,
- 7650, 10594, 64951, 7647, 7649, 128155, 7646, 0, 78082, 9651, 0, 3891, 0,
- 0, 2337, 1735, 74324, 67860, 2363, 0, 0, 43561, 0, 0, 74146, 1860, 7495,
- 7580, 5812, 7497, 7584, 119140, 127853, 0, 120347, 7727, 0, 8498, 69818,
- 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, 7690, 0, 12533, 0,
- 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 128650, 0, 63894, 120760,
- 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 92625, 0,
- 12791, 0, 0, 0, 4447, 73732, 12793, 12900, 92377, 10950, 0, 78087, 12790,
- 41400, 119128, 66607, 12792, 42232, 194938, 1744, 12789, 10366, 12317,
- 41310, 0, 41399, 0, 0, 55258, 0, 12690, 0, 0, 43672, 127840, 41652, 2974,
- 9010, 11315, 0, 278, 0, 41405, 119254, 0, 10077, 63853, 74557, 42586, 0,
- 0, 6002, 0, 43553, 0, 67903, 0, 12787, 41308, 7934, 65306, 0, 0, 0, 8646,
- 0, 77829, 0, 0, 6413, 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678,
- 10044, 0, 0, 0, 68659, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0,
+ 78363, 64892, 9113, 1954, 12155, 983665, 42878, 11500, 0, 0, 74578, 0,
+ 65832, 0, 0, 0, 77975, 119230, 4586, 0, 350, 10951, 0, 509, 0, 0, 92307,
+ 0, 0, 5133, 0, 0, 9500, 0, 4957, 64741, 2422, 2212, 983080, 0, 0, 2496,
+ 11516, 944, 118851, 3890, 12168, 1438, 0, 983117, 0, 41947, 1220, 120828,
+ 128555, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, 41980,
+ 983935, 0, 78120, 8877, 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120,
+ 65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, 0, 0, 1906, 917986,
+ 11532, 74073, 127338, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115,
+ 11428, 1730, 2457, 917808, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0,
+ 92230, 0, 6129, 0, 128528, 128268, 0, 7874, 8681, 119092, 0, 13136, 0, 0,
+ 70102, 63886, 118881, 9605, 71308, 13220, 128776, 120274, 5514, 0, 9228,
+ 0, 0, 0, 5240, 9811, 10012, 3096, 0, 0, 983343, 66676, 65873, 0, 0, 0,
+ 9501, 0, 1272, 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519,
+ 0, 917812, 0, 118899, 12193, 0, 0, 0, 0, 983345, 19935, 0, 92162, 69676,
+ 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, 11471, 43554, 65862, 11474,
+ 66332, 66603, 128138, 2426, 12042, 92194, 983902, 9537, 3961, 12115,
+ 77953, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, 42686, 77973,
+ 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 917904, 8541,
+ 78298, 70034, 41866, 0, 0, 0, 0, 69924, 43555, 2823, 9559, 10060, 41940,
+ 8299, 41945, 7132, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0,
+ 41699, 10762, 43780, 12999, 0, 0, 8106, 4128, 0, 6274, 4494, 0, 4012,
+ 10395, 983591, 43633, 65447, 126511, 0, 11004, 695, 739, 696, 7611, 0,
+ 42755, 74802, 9227, 7506, 7510, 69937, 691, 738, 7511, 7512, 7515, 3868,
+ 688, 41847, 690, 2548, 737, 974, 8003, 7406, 917911, 0, 128688, 3985,
+ 917912, 65860, 63921, 7051, 69777, 4682, 917805, 12809, 6406, 4685,
+ 92505, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, 0,
+ 41958, 119176, 917908, 0, 0, 42657, 92468, 7643, 42373, 11714, 67587,
+ 43568, 983175, 11717, 7650, 10594, 64951, 7647, 7649, 128155, 7646, 0,
+ 78082, 9651, 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 2363, 983135, 0,
+ 43561, 0, 0, 74146, 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853,
+ 0, 120347, 7727, 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375,
+ 12534, 12124, 7690, 0, 12533, 983870, 6418, 4543, 78086, 6969, 0, 74800,
+ 0, 67974, 11980, 128650, 983792, 63894, 120760, 12282, 66192, 0, 74592,
+ 8850, 74275, 9238, 10617, 917545, 0, 92625, 0, 12791, 0, 0, 127843, 4447,
+ 73732, 12793, 12900, 92377, 10950, 0, 78087, 12790, 41400, 119128, 66607,
+ 12792, 42232, 194938, 1744, 12789, 10366, 12317, 41310, 983860, 41399, 0,
+ 0, 55258, 0, 12690, 0, 0, 43672, 127840, 41652, 2974, 9010, 11315, 0,
+ 278, 0, 41405, 119254, 0, 10077, 63853, 74557, 42586, 0, 0, 6002, 0,
+ 43553, 0, 67903, 0, 12787, 41308, 7934, 65306, 0, 0, 0, 8646, 983186,
+ 77829, 71360, 0, 6413, 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678,
+ 10044, 128322, 0, 0, 68659, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0,
10297, 0, 3742, 0, 3959, 0, 0, 0, 2467, 0, 6003, 63844, 6663, 8040, 0,
- 63845, 4182, 78171, 4676, 120501, 0, 0, 2510, 0, 10208, 78168, 92361,
- 11540, 43546, 6692, 0, 41060, 0, 0, 9083, 0, 0, 78144, 1559, 63831, 9677,
- 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, 43027, 120423, 41716,
+ 43758, 4182, 78171, 4676, 120501, 0, 0, 2510, 0, 10208, 78168, 92361,
+ 11540, 43546, 6692, 0, 41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831,
+ 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, 43027, 120423, 41716,
128236, 0, 120472, 5516, 2845, 7717, 8036, 41717, 73827, 544, 12045,
- 6278, 0, 5515, 0, 0, 0, 65339, 43221, 65194, 0, 5517, 0, 0, 74841, 67884,
- 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 127188, 1902,
- 67887, 9638, 12976, 0, 12483, 12368, 41769, 42726, 41765, 128819, 6667,
- 67874, 7556, 67878, 74351, 11264, 989, 42677, 67889, 0, 1311, 917966,
- 4326, 11000, 63824, 13068, 10932, 128880, 6917, 78155, 0, 949, 78162, 0,
- 6148, 8605, 42253, 78177, 0, 0, 42715, 0, 0, 0, 63871, 0, 41796, 1269,
- 6530, 0, 65057, 0, 5144, 12221, 42716, 0, 4431, 4331, 0, 128675, 41834,
- 5279, 0, 10336, 8312, 0, 42701, 128825, 0, 78165, 66036, 0, 0, 6428,
- 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014,
- 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274,
- 0, 43556, 3929, 73900, 6614, 2768, 92504, 9746, 5135, 11811, 12796,
- 11953, 0, 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552,
- 127753, 74315, 74361, 8253, 8817, 1136, 0, 43563, 92232, 0, 194750, 7392,
- 8230, 9365, 0, 0, 0, 0, 0, 4041, 0, 2357, 43240, 12786, 229, 119885,
- 119884, 44004, 7142, 119881, 12350, 65554, 119882, 119877, 119876, 12785,
- 63863, 43795, 7770, 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352,
- 10470, 0, 11059, 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691,
- 1233, 0, 44009, 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0,
+ 6278, 0, 5515, 0, 0, 983051, 65339, 43221, 2211, 0, 5517, 0, 0, 74841,
+ 67884, 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 127188,
+ 1902, 67887, 9638, 12976, 126546, 12483, 12368, 41769, 42726, 41765,
+ 7361, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, 67889, 0, 1311,
+ 917966, 4326, 11000, 63824, 13068, 10932, 128880, 6917, 78155, 0, 949,
+ 78162, 0, 6148, 8605, 42253, 78177, 0, 0, 42715, 0, 0, 0, 63871, 0,
+ 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, 42716, 0, 4431, 4331,
+ 983720, 128675, 41834, 5279, 0, 10336, 8312, 0, 42701, 128825, 0, 78165,
+ 66036, 0, 0, 6428, 42270, 0, 983596, 43059, 42666, 5256, 1067, 255,
+ 12131, 983713, 9493, 983959, 41014, 11793, 194920, 0, 74394, 43460,
+ 10653, 42723, 983845, 119632, 0, 6560, 7016, 74274, 983615, 43556, 3929,
+ 67977, 6614, 2768, 92504, 9746, 5135, 11811, 12796, 11953, 0, 69761,
+ 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 127753, 74315, 74361,
+ 8253, 8817, 1136, 0, 43563, 92232, 0, 194750, 7392, 8230, 9365, 0, 0,
+ 983607, 0, 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004,
+ 7142, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 43795,
+ 7770, 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0,
+ 11059, 10791, 917944, 450, 119328, 0, 10432, 12097, 5450, 64691, 1233, 0,
+ 44009, 78284, 66338, 0, 0, 1839, 118799, 983217, 10927, 1701, 983655,
2388, 41749, 41761, 5453, 8361, 119865, 41758, 5444, 41763, 64889, 7143,
- 92493, 78677, 0, 92429, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812,
- 917831, 0, 41824, 0, 120203, 194800, 194803, 42700, 194805, 127980,
+ 92493, 78677, 0, 92429, 78174, 66432, 8801, 3053, 4340, 983044, 0, 65812,
+ 917831, 0, 41824, 67985, 120203, 194800, 194803, 42700, 194805, 127980,
194807, 78676, 92356, 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826,
- 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, 0, 194793,
- 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, 1635, 78821,
- 1410, 92671, 0, 118878, 0, 0, 9919, 0, 559, 128157, 41825, 127975, 78188,
- 4892, 74016, 194781, 6542, 41957, 128865, 5777, 0, 759, 65749, 2079,
- 65248, 12788, 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560,
- 12226, 0, 65149, 2340, 41959, 194786, 194785, 194788, 43618, 65747,
- 10937, 2962, 0, 2321, 3587, 65745, 92436, 8921, 9952, 0, 0, 42714, 9951,
- 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359, 41820, 43038,
- 2395, 0, 9976, 120043, 120050, 120058, 68220, 128143, 42809, 42807, 0,
- 120046, 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942,
- 0, 127818, 0, 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372,
- 917541, 41772, 42813, 2317, 10260, 118980, 55284, 92203, 0, 10384, 0, 0,
- 0, 7753, 2351, 6655, 64489, 0, 0, 77872, 4443, 42779, 230, 0, 0, 43549,
- 4855, 42150, 65739, 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045,
- 63839, 78198, 2049, 10098, 0, 74145, 127943, 10264, 10280, 9184, 10376,
- 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 74286, 3914,
- 92178, 0, 9065, 12961, 0, 0, 92253, 0, 289, 0, 4694, 11420, 4690, 0,
- 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238,
- 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0,
- 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988,
- 8888, 0, 0, 0, 0, 10666, 0, 73902, 69740, 0, 0, 9975, 0, 119902, 4689,
- 8932, 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065,
- 8207, 0, 92613, 128011, 0, 662, 0, 9244, 194863, 0, 119261, 0, 0, 0, 0,
- 41929, 0, 0, 66674, 41926, 120408, 120443, 10513, 64637, 194862, 0, 52,
- 13118, 6475, 0, 120341, 12095, 10225, 4812, 92578, 0, 0, 74085, 0, 3978,
- 0, 917945, 127823, 11582, 120761, 12281, 0, 6544, 13241, 0, 69782,
+ 119325, 194811, 42439, 64638, 42327, 43528, 4489, 71331, 0, 194793, 1912,
+ 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410,
+ 92671, 983244, 118878, 0, 0, 9919, 120528, 559, 128157, 41825, 127975,
+ 78188, 4892, 74016, 194781, 6542, 41957, 128865, 5777, 0, 759, 65749,
+ 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, 0, 0, 126573, 3668,
+ 65754, 43560, 12226, 67991, 65149, 2340, 41959, 194786, 194785, 194788,
+ 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 92436, 8921, 9952, 0, 0,
+ 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359,
+ 41820, 2300, 2395, 128563, 9976, 120043, 120050, 120058, 68220, 128143,
+ 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 67976, 41898,
+ 2360, 41794, 917942, 71314, 127818, 0, 0, 2418, 983098, 2411, 11336, 799,
+ 63823, 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980,
+ 55284, 92203, 0, 10384, 983218, 0, 0, 7753, 2351, 6655, 64489, 69931, 0,
+ 77872, 4443, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, 5441, 41896,
+ 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, 10098, 0,
+ 74145, 127943, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0,
+ 4862, 9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, 12961, 0, 0,
+ 92253, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893,
+ 42724, 0, 4688, 120454, 0, 0, 67994, 8238, 3110, 120162, 983899, 120163,
+ 6528, 127553, 43035, 69898, 218, 0, 1520, 0, 4786, 0, 43225, 4602, 0,
+ 78167, 10088, 6548, 0, 120156, 43978, 8988, 8888, 0, 0, 0, 0, 10666, 0,
+ 73902, 69740, 0, 0, 9975, 128039, 119902, 4689, 8932, 0, 65560, 119209,
+ 74441, 78810, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0, 92613,
+ 128011, 0, 662, 0, 9244, 194863, 0, 119261, 983420, 0, 0, 0, 41929, 0, 0,
+ 66674, 41926, 120408, 120443, 10513, 64637, 194862, 68013, 52, 13118,
+ 6475, 0, 120341, 12095, 10225, 4812, 92578, 0, 67992, 74085, 0, 3978, 0,
+ 917945, 127823, 11582, 120761, 12281, 0, 6544, 13241, 93961, 69782,
128557, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500,
2036, 986, 194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, 74021,
- 64334, 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 917933,
+ 64334, 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 74191,
120410, 0, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, 74131, 1242,
65514, 0, 63940, 128706, 64533, 120129, 0, 67842, 11990, 92430, 63939,
- 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, 2858, 0,
- 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 92574, 2751, 12662,
- 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, 74128,
- 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, 43798,
- 7072, 0, 0, 4033, 128164, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, 0,
- 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155,
- 8505, 68379, 12062, 0, 0, 65487, 92189, 41837, 120611, 120432, 0, 0, 0,
- 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 194948, 0, 0,
- 65664, 6693, 9843, 0, 8674, 119887, 128812, 92715, 0, 12624, 0, 1673,
- 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0,
- 12187, 0, 0, 5984, 0, 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0,
- 3491, 0, 0, 128219, 3514, 65485, 0, 7492, 0, 74605, 92483, 7514, 0, 0,
- 194731, 7502, 7587, 68353, 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588,
- 74433, 41635, 43241, 9688, 7147, 9535, 0, 0, 0, 64530, 0, 64610, 11804,
- 0, 7149, 7453, 0, 8013, 0, 92301, 0, 8895, 5253, 0, 5458, 0, 2866, 0,
- 127860, 65111, 68433, 6700, 120484, 0, 0, 0, 8962, 77960, 9641, 43694,
- 7059, 0, 0, 9604, 78700, 7441, 63826, 78706, 118941, 64392, 194735, 0,
- 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, 3104, 194734, 0,
- 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, 3268, 66591, 0,
- 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 92338, 74305, 0, 74528,
- 65903, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 127337, 8163,
- 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 917837, 43323, 120513,
- 119897, 9071, 127333, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993,
- 119899, 66587, 195098, 0, 92401, 0, 11006, 12927, 7807, 8073, 0, 10629,
- 0, 74088, 3056, 10823, 128797, 127327, 8762, 10508, 69689, 73770, 43969,
- 43193, 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0,
- 5195, 195081, 0, 66639, 0, 0, 0, 128041, 0, 92385, 1262, 0, 6561, 19939,
- 0, 0, 0, 119906, 0, 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0,
- 0, 9107, 127316, 5702, 3655, 67661, 8430, 0, 74132, 120758, 0, 74057,
- 9603, 0, 5254, 120742, 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579,
- 5614, 5893, 92280, 11720, 92496, 11721, 0, 4798, 0, 119316, 66038, 4793,
- 67851, 11726, 127541, 74204, 68610, 0, 68626, 894, 300, 917813, 12306,
- 66235, 8004, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 92649, 0,
- 5096, 5095, 2863, 3424, 92244, 10454, 42530, 5094, 119638, 0, 13156, 0,
- 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104,
- 78599, 78601, 1215, 42712, 5744, 12272, 9832, 11777, 0, 127371, 42881, 0,
+ 43375, 65440, 2504, 0, 78671, 64829, 983901, 6943, 917934, 5859, 0, 2858,
+ 983353, 74294, 983905, 69239, 0, 119027, 12992, 2753, 1936, 70078, 92574,
+ 2751, 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0,
+ 63920, 74128, 2856, 119910, 47, 69908, 126986, 65858, 0, 0, 0, 7899, 0,
+ 8417, 43798, 7072, 0, 0, 4033, 128164, 43992, 0, 0, 212, 64600, 1903,
+ 12320, 0, 0, 194563, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828,
+ 0, 0, 9531, 13155, 8505, 68379, 12062, 0, 0, 65487, 92189, 41837, 120611,
+ 120432, 0, 0, 0, 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426,
+ 0, 194948, 0, 0, 65664, 6693, 9843, 0, 8674, 119887, 128812, 92715, 0,
+ 12624, 0, 1673, 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928,
+ 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, 4393, 67650, 0, 0, 0, 0,
+ 74826, 64733, 0, 0, 3491, 0, 0, 128219, 3514, 65485, 0, 7492, 0, 74605,
+ 92483, 7514, 983359, 0, 194731, 7502, 7587, 68353, 0, 0, 63925, 0, 7610,
+ 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, 7147, 9535, 0, 93991,
+ 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 0, 92301, 0, 8895,
+ 5253, 70025, 5458, 0, 2866, 0, 127860, 65111, 68433, 6700, 120484, 0,
+ 120583, 0, 8962, 77960, 9641, 43694, 7059, 983668, 0, 9604, 78700, 7441,
+ 63826, 67970, 118941, 64392, 194735, 983678, 2844, 983932, 41974, 0,
+ 12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, 194765, 983227,
+ 5308, 0, 290, 0, 0, 2862, 2792, 195088, 983070, 0, 3268, 66591, 0, 6552,
+ 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 92338, 74305, 0, 74528, 65903,
+ 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 127337, 8163, 65270, 0,
+ 77932, 0, 9112, 74431, 863, 9490, 119898, 128349, 43323, 120513, 119897,
+ 9071, 127333, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, 119899,
+ 66587, 195098, 0, 92401, 983885, 11006, 12927, 7807, 8073, 0, 10629, 0,
+ 74088, 3056, 10823, 128797, 127327, 8762, 10508, 69689, 73770, 43969,
+ 43193, 10737, 3463, 983065, 0, 66633, 8695, 4815, 11322, 5811, 12345,
+ 7049, 119911, 5195, 195081, 0, 66639, 0, 0, 0, 128041, 0, 92385, 1262, 0,
+ 6561, 19939, 0, 0, 128535, 119906, 0, 0, 983097, 0, 983658, 119907,
+ 64612, 11991, 0, 0, 0, 1502, 917568, 0, 9107, 127316, 5702, 3655, 67661,
+ 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388,
+ 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 92280, 11720, 92496,
+ 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 127541, 74204,
+ 68610, 0, 68626, 894, 300, 917813, 12306, 66235, 8004, 0, 0, 2562,
+ 126555, 0, 42503, 0, 11652, 0, 0, 119241, 64699, 126569, 5096, 5095,
+ 2863, 3424, 92244, 10454, 42530, 5094, 119638, 0, 13156, 0, 10832, 5093,
+ 0, 69852, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 78599,
+ 78601, 1215, 42712, 5744, 12272, 9832, 11777, 71299, 127371, 42881, 0,
8980, 118988, 67861, 8844, 7209, 0, 0, 4278, 0, 0, 194789, 0, 9074, 4348,
- 0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586,
- 74414, 64359, 1267, 0, 65468, 0, 65731, 0, 127179, 3621, 120473, 66666,
- 64211, 0, 6562, 12928, 0, 1228, 65490, 11383, 0, 0, 0, 1714, 74406,
- 127831, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, 64, 120694, 0, 10291,
- 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, 41999, 92164, 12206,
- 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, 1765, 0, 0, 65588,
- 0, 0, 0, 8401, 0, 42014, 0, 7030, 194704, 10479, 64959, 2852, 0, 0, 0, 0,
- 128586, 917951, 6963, 0, 12667, 64540, 74786, 10147, 12935, 127568, 0, 0,
- 0, 0, 78757, 0, 0, 0, 0, 9994, 12467, 2864, 64719, 1148, 10435, 11462,
- 41675, 0, 2765, 0, 0, 0, 120719, 128188, 92516, 66662, 0, 78133, 9364,
- 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, 77986,
- 0, 6931, 69722, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, 42020,
- 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, 7032,
- 5954, 64931, 4314, 0, 198, 68453, 730, 120094, 63907, 77993, 78891,
- 13165, 7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938,
- 92222, 92637, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 69642, 6712,
- 66045, 41470, 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 92667, 7796,
- 69669, 43254, 73831, 0, 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097,
- 9182, 1859, 0, 92603, 3425, 127488, 0, 2836, 0, 0, 9707, 0, 43202, 0, 0,
- 65199, 1738, 917818, 128158, 2832, 92702, 9670, 12937, 0, 66374, 917956,
- 0, 2822, 68122, 4436, 92519, 0, 73752, 0, 64872, 92340, 1331, 0, 0, 0,
- 12708, 0, 5090, 5089, 0, 0, 119109, 0, 128681, 319, 118847, 43479, 9477,
- 0, 0, 5087, 92325, 7640, 96, 5086, 0, 92379, 0, 5085, 64286, 92665, 0,
- 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 127165, 127241,
- 6677, 7601, 0, 591, 64419, 118953, 92262, 0, 118923, 73734, 0, 10939,
- 6106, 6933, 41271, 6760, 119903, 4534, 41270, 128876, 0, 65574, 0, 9224,
- 0, 3671, 8976, 0, 0, 41275, 6372, 128084, 55261, 7963, 6371, 0, 568, 0,
- 41273, 0, 0, 6728, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42,
- 0, 43688, 0, 0, 7458, 0, 0, 65385, 119900, 0, 11958, 0, 917822, 0, 6254,
- 42721, 66336, 8045, 11550, 0, 0, 0, 42858, 11789, 65868, 5557, 10133,
- 9737, 13109, 0, 9467, 5558, 8878, 128136, 195036, 7451, 6706, 10146, 0,
- 9086, 64566, 0, 64584, 7437, 7454, 12594, 128690, 68362, 4546, 7731, 0,
- 119909, 74243, 0, 3805, 0, 194565, 44001, 41008, 0, 6307, 19949, 0, 7544,
- 0, 43469, 0, 0, 10152, 64422, 65091, 119113, 7602, 64729, 0, 43521, 0,
- 42302, 43711, 43523, 41447, 5559, 0, 8704, 2397, 5556, 0, 0, 0, 9011,
- 9630, 92633, 0, 0, 5506, 0, 1911, 66652, 0, 9961, 8845, 66698, 0, 10792,
- 8889, 0, 2098, 0, 64751, 0, 66622, 0, 0, 74364, 0, 0, 0, 74365, 7552, 0,
- 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, 64501, 1210, 195077,
- 65175, 10184, 43140, 43654, 0, 0, 0, 38, 8533, 66669, 119124, 0, 0, 0,
- 4357, 0, 119837, 0, 74233, 9967, 119852, 42860, 119838, 10941, 65721,
- 6962, 0, 0, 119324, 0, 11014, 127972, 8942, 12000, 69224, 92267, 128536,
- 11974, 92213, 42772, 127518, 11650, 5013, 92663, 128677, 66210, 118914,
- 6613, 92476, 0, 43819, 0, 0, 64714, 0, 0, 12162, 12120, 43476, 0, 11024,
- 74811, 66228, 10563, 0, 127196, 43522, 2462, 0, 1837, 0, 63972, 6957, 0,
- 120559, 4952, 65718, 65827, 5504, 65720, 65714, 65715, 65716, 0, 127005,
- 127119, 3109, 63975, 74028, 0, 8107, 119234, 1127, 455, 0, 63968, 127924,
- 3483, 119593, 1989, 0, 69678, 9104, 3503, 65375, 92509, 6694, 42633,
- 1864, 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705,
- 74124, 8604, 6955, 10916, 43684, 6149, 3887, 19956, 1411, 2824, 0, 10106,
- 127862, 1403, 128839, 1347, 9631, 74444, 0, 0, 0, 0, 8640, 0, 258, 1654,
- 0, 0, 0, 43314, 0, 0, 4042, 11478, 2873, 63977, 11522, 41668, 8549,
- 10861, 0, 63976, 0, 68623, 0, 74585, 41391, 0, 917903, 376, 6987, 9221,
- 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039,
- 0, 7446, 1684, 63979, 10974, 458, 120620, 0, 69791, 127161, 11916, 65016,
- 0, 69671, 42115, 0, 12288, 78057, 0, 1493, 42111, 7553, 4097, 128199,
- 13080, 0, 65808, 6610, 6030, 8059, 7508, 13131, 0, 0, 0, 8794, 41278,
- 41629, 12154, 128192, 41277, 64658, 0, 64380, 6625, 74354, 19904, 0, 0,
- 0, 65371, 7078, 0, 833, 0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0,
- 19916, 6913, 933, 1341, 9842, 6720, 65744, 0, 0, 128295, 0, 7405, 10105,
- 65810, 0, 41632, 7493, 55290, 0, 41622, 0, 0, 119556, 74584, 7632, 9716,
- 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 92597,
- 0, 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956,
- 4403, 19962, 65559, 3299, 0, 917566, 119127, 9002, 0, 74372, 74236, 8478,
- 7598, 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 0,
- 63952, 8425, 3602, 8328, 11764, 118894, 0, 69796, 41183, 12907, 10271,
- 10287, 684, 43525, 0, 2854, 119586, 4592, 65755, 0, 92256, 11963, 43620,
- 0, 78889, 0, 0, 128809, 9881, 43115, 65757, 3415, 0, 0, 8648, 0, 6741,
- 43047, 0, 13180, 128517, 418, 917972, 64495, 10295, 10327, 10391, 41752,
- 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, 41751,
- 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, 43741,
- 92163, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680,
- 92619, 11686, 78544, 65224, 4565, 4655, 119553, 0, 92183, 64523, 10343,
- 10407, 0, 66671, 11466, 0, 128003, 42890, 0, 12050, 68201, 2860, 0, 0, 0,
- 42792, 5743, 10424, 12065, 42872, 0, 92342, 0, 8875, 0, 0, 917991, 7531,
- 12847, 2413, 0, 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0,
- 0, 0, 10801, 0, 92354, 0, 7173, 496, 10439, 4313, 64607, 69638, 7860, 0,
- 906, 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153,
- 92173, 64788, 0, 8054, 9174, 128652, 917976, 9964, 0, 41611, 4642, 66574,
- 11556, 917982, 0, 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981,
- 77924, 42513, 0, 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335,
- 64069, 42093, 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 92167, 119158,
- 3021, 42004, 0, 0, 42317, 41998, 0, 6946, 0, 0, 0, 128193, 65204, 0,
- 68113, 42690, 9880, 42010, 74824, 64589, 10111, 64875, 127880, 68399,
- 43998, 11360, 0, 0, 0, 118826, 42149, 0, 0, 0, 64941, 77919, 120421,
- 128077, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, 66703, 77921,
- 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0,
+ 0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 71345, 586,
+ 74414, 64359, 1267, 128269, 65468, 0, 65731, 0, 127179, 3621, 120473,
+ 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, 11383, 0, 0, 0, 1714,
+ 74406, 127831, 0, 983912, 0, 66225, 0, 0, 42660, 11436, 2070, 64, 120694,
+ 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, 41999,
+ 92164, 12206, 5839, 1702, 1240, 74065, 6286, 0, 983960, 65833, 77848, 0,
+ 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 194704, 10479,
+ 64959, 2852, 0, 0, 0, 0, 128586, 917951, 6963, 0, 12667, 64540, 74786,
+ 10147, 12935, 127568, 126483, 0, 0, 0, 78757, 0, 0, 0, 0, 9994, 12467,
+ 2864, 64719, 1148, 10435, 11462, 41675, 7084, 2765, 0, 43382, 0, 120719,
+ 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 0, 0, 77988, 263,
+ 10449, 41288, 0, 41839, 78387, 983733, 77986, 0, 6931, 69722, 64355,
+ 7177, 70105, 0, 0, 0, 4262, 10285, 10722, 42020, 126575, 6806, 6992,
+ 42019, 0, 41290, 983707, 750, 0, 71304, 10163, 63913, 71300, 7032, 5954,
+ 64931, 4314, 0, 198, 68453, 730, 120094, 63907, 77993, 78891, 13165,
+ 7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938, 70026,
+ 92637, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 69642, 6712, 66045,
+ 41470, 64805, 0, 0, 128215, 64801, 0, 497, 12100, 5953, 92667, 7796,
+ 69669, 43254, 73831, 0, 10293, 5952, 1281, 43747, 0, 0, 10677, 604,
+ 41097, 9182, 1859, 0, 92603, 3425, 127488, 0, 2836, 0, 0, 9707, 0, 43202,
+ 0, 0, 65199, 1738, 917818, 128158, 2832, 92702, 9670, 12937, 0, 66374,
+ 917956, 0, 2822, 68122, 4436, 92519, 983714, 73752, 0, 64872, 92340,
+ 1331, 0, 0, 0, 12708, 0, 5090, 5089, 127977, 0, 119109, 0, 128681, 319,
+ 118847, 43479, 9477, 0, 0, 5087, 92325, 7640, 96, 5086, 0, 92379, 0,
+ 5085, 64286, 92665, 0, 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0,
+ 126587, 0, 127165, 127241, 6677, 7601, 0, 591, 64419, 118953, 92262, 0,
+ 118923, 70084, 0, 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270,
+ 128876, 0, 65574, 0, 9224, 69853, 3671, 8976, 126474, 0, 41275, 6372,
+ 128084, 55261, 7963, 6371, 0, 568, 0, 41273, 983721, 0, 6728, 0, 9715, 0,
+ 8258, 11753, 74820, 0, 9602, 118919, 42, 0, 43688, 0, 0, 7458, 0, 0,
+ 65385, 119900, 0, 11958, 0, 917822, 0, 6254, 42721, 66336, 8045, 11550,
+ 0, 0, 983597, 42858, 11789, 65868, 5557, 10133, 9737, 13109, 0, 9467,
+ 5558, 8878, 128136, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584,
+ 7437, 7454, 12594, 128690, 68362, 4546, 7731, 0, 70048, 74243, 0, 3805,
+ 0, 194565, 44001, 41008, 0, 6307, 19949, 983781, 7544, 983045, 43469, 0,
+ 0, 10152, 64422, 65091, 119113, 7602, 64729, 0, 43521, 0, 42302, 43711,
+ 43523, 41447, 5559, 0, 8704, 2397, 5556, 0, 0, 0, 9011, 9630, 92633, 0,
+ 93998, 5506, 0, 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0,
+ 2098, 0, 64751, 0, 66622, 0, 0, 74364, 0, 0, 983796, 74365, 7552, 0, 0,
+ 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, 64501, 1210, 195077,
+ 65175, 10184, 43140, 43654, 0, 0, 0, 38, 8533, 66669, 119124, 983285,
+ 983783, 0, 4357, 0, 119837, 917863, 74233, 9967, 78884, 42860, 119838,
+ 10941, 65721, 6962, 0, 0, 119324, 0, 11014, 127972, 8942, 12000, 69224,
+ 92267, 128536, 11974, 92213, 42772, 127518, 11650, 5013, 92663, 126583,
+ 66210, 118914, 6613, 92476, 0, 43819, 983761, 0, 64714, 0, 0, 12162,
+ 12120, 43476, 983757, 11024, 74811, 66228, 10563, 0, 127196, 43522, 2462,
+ 0, 1837, 0, 63972, 6957, 0, 120559, 4952, 65718, 65827, 5504, 65720,
+ 65714, 65715, 65716, 0, 127005, 127119, 3109, 63975, 74028, 0, 8107,
+ 119234, 1127, 455, 0, 63968, 127924, 3483, 119593, 1989, 0, 69678, 9104,
+ 3503, 65375, 92509, 6694, 42633, 1864, 0, 74306, 41446, 2540, 7736, 0,
+ 74064, 0, 10521, 0, 42173, 9705, 74124, 8604, 6955, 10916, 43684, 6149,
+ 3887, 19956, 1411, 2824, 0, 10106, 127862, 1403, 128839, 1347, 9631,
+ 74444, 0, 0, 0, 0, 8640, 0, 258, 1654, 0, 0, 0, 43314, 0, 0, 4042, 11478,
+ 2873, 63977, 11522, 41668, 8549, 10861, 0, 63976, 0, 68623, 0, 74585,
+ 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 128697, 12943, 65185,
+ 41869, 12619, 0, 10154, 983043, 74439, 2039, 0, 7446, 1684, 63979, 10974,
+ 458, 120620, 0, 69791, 127161, 11916, 65016, 0, 69671, 42115, 983133,
+ 12288, 78057, 0, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610,
+ 6030, 8059, 7508, 13131, 0, 983423, 0, 8794, 41278, 41629, 12154, 128192,
+ 41277, 64658, 0, 64380, 6625, 74354, 19904, 0, 0, 0, 65371, 7078, 0, 833,
+ 0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0, 19916, 6913, 933, 1341,
+ 9842, 6720, 65744, 0, 983592, 128295, 0, 7405, 10105, 65810, 0, 41632,
+ 7493, 55290, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, 19954, 9805,
+ 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 93987, 5389, 92597, 0, 65938,
+ 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, 4403,
+ 19962, 65559, 3299, 0, 917566, 119127, 9002, 0, 74372, 74236, 8478, 7598,
+ 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 0, 63952,
+ 8425, 3602, 8328, 11764, 118894, 0, 69796, 41183, 12907, 10271, 10287,
+ 684, 43525, 0, 2854, 119586, 4592, 65755, 0, 92256, 11963, 43620, 0,
+ 78249, 0, 128551, 128809, 9881, 43115, 65757, 3415, 119131, 0, 8648, 0,
+ 6741, 43047, 0, 13180, 128517, 418, 917972, 64495, 10295, 10327, 10391,
+ 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849,
+ 41751, 69776, 8941, 983556, 4554, 0, 9023, 11685, 0, 9928, 78617, 0,
+ 11437, 43741, 92163, 120700, 63967, 983475, 41206, 120724, 9049, 41185,
+ 43166, 0, 11680, 92619, 11686, 78544, 65224, 4565, 4655, 119553, 0,
+ 92183, 64523, 10343, 10407, 0, 66671, 11466, 0, 128003, 42890, 74013,
+ 12050, 68201, 2860, 0, 0, 0, 42792, 5743, 10424, 12065, 42872, 0, 92342,
+ 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, 78635, 962, 0, 12855, 41196,
+ 42564, 0, 1582, 983706, 5508, 0, 0, 0, 10801, 69876, 92354, 0, 7173, 496,
+ 10439, 4313, 64607, 69638, 7860, 0, 906, 42793, 2842, 6405, 64722, 13132,
+ 798, 64694, 12801, 8406, 1153, 92173, 64788, 0, 8054, 9174, 128652,
+ 917976, 9964, 74409, 41611, 4642, 66574, 11556, 917982, 0, 78857, 42089,
+ 78855, 9008, 0, 126592, 195096, 42079, 917981, 77924, 42513, 77927,
+ 42842, 73985, 65285, 118974, 127003, 983693, 0, 0, 0, 11335, 64069,
+ 42093, 3920, 0, 0, 0, 0, 4580, 41967, 983723, 64384, 92167, 93984, 3021,
+ 42004, 0, 0, 42317, 41998, 0, 6946, 0, 0, 0, 128193, 65204, 0, 68113,
+ 42690, 9880, 42010, 74824, 64589, 10111, 64875, 127880, 68399, 43998,
+ 11360, 0, 0, 0, 118826, 42149, 0, 0, 0, 64941, 77919, 120421, 128077, 0,
+ 55247, 4110, 66005, 6959, 10929, 119110, 0, 66703, 77921, 8617, 41982,
+ 6025, 69242, 983176, 0, 0, 0, 9597, 42099, 43172, 983368, 10117, 983169,
92297, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 128339, 4963, 0,
- 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160,
- 10081, 13226, 42121, 42475, 42663, 128210, 41766, 0, 65882, 78849, 41760,
- 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835,
- 7888, 0, 3980, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867,
- 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 128843, 3103, 0,
- 41753, 128540, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756,
- 43347, 42560, 5391, 41746, 119147, 92591, 41259, 5561, 74360, 2691, 0,
- 65553, 7933, 5562, 69800, 128265, 41262, 128146, 64421, 74846, 41251, 0,
- 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 92524, 41266, 0, 0, 128836, 10585,
- 65741, 41737, 9574, 2666, 0, 41738, 831, 419, 13126, 10716, 0, 42822, 0,
- 6434, 0, 6939, 7766, 6432, 128106, 0, 916, 769, 41742, 11968, 74805,
- 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, 4497, 3754, 127056,
- 120424, 9039, 0, 41776, 0, 8716, 1595, 41615, 0, 0, 74260, 0, 42854,
- 43219, 128709, 0, 12185, 128879, 0, 68355, 68357, 0, 42856, 8634, 0, 0,
- 4209, 120702, 0, 65879, 41538, 65612, 127543, 669, 5679, 0, 69786, 92540,
- 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, 78050, 119022,
- 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0,
- 128079, 5792, 0, 0, 78501, 0, 2933, 12244, 0, 5683, 0, 0, 78119, 1549, 0,
- 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, 0, 69768, 1449,
- 10241, 78290, 128228, 0, 10552, 64342, 41922, 128548, 8584, 0, 5567,
- 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 128026, 0, 65708, 65709,
- 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468,
+ 127517, 0, 8964, 65676, 7775, 0, 41948, 0, 0, 0, 41942, 65449, 3160,
+ 10081, 13226, 42121, 42475, 42663, 128210, 41766, 119114, 65882, 78849,
+ 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625,
+ 73835, 7888, 0, 3980, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651,
+ 7867, 69218, 6236, 983134, 0, 10505, 0, 12851, 118948, 348, 5474, 128843,
+ 3103, 0, 41753, 128540, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931,
+ 41756, 43347, 42560, 5391, 41746, 119147, 92591, 41259, 5561, 69930,
+ 2691, 0, 65553, 7933, 5562, 69800, 128265, 41262, 128146, 64421, 74846,
+ 41251, 0, 0, 3979, 0, 0, 74813, 983730, 0, 0, 0, 92524, 41266, 0, 66566,
+ 128836, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, 13126,
+ 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 128106, 69932, 916, 769,
+ 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487,
+ 126537, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, 41615,
+ 0, 0, 74260, 0, 42854, 43219, 128709, 983452, 12185, 128879, 70072,
+ 68355, 68357, 0, 42856, 8634, 0, 983389, 4209, 120702, 0, 65879, 41538,
+ 65612, 127543, 669, 5679, 0, 69786, 92540, 0, 983456, 5678, 11821, 0,
+ 6711, 460, 0, 0, 983453, 0, 120747, 0, 0, 78050, 119022, 0, 983454, 0,
+ 7782, 9044, 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0, 128079,
+ 5792, 0, 0, 78501, 0, 2933, 12244, 0, 5683, 983384, 0, 78119, 1549, 0, 0,
+ 120398, 5682, 6206, 8670, 10256, 5680, 69935, 10001, 128512, 69768, 1449,
+ 10241, 78290, 128228, 0, 10552, 64342, 41922, 128548, 8584, 68030, 5567,
+ 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 983248, 128026, 0, 65708,
+ 65709, 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468,
120561, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647,
- 78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710,
+ 78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 119903, 8802, 78710,
65130, 11747, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694,
64485, 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0,
- 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667,
- 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0,
- 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875,
- 128662, 5477, 65692, 0, 128532, 120397, 12896, 10456, 917954, 0, 3874, 0,
- 0, 0, 0, 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536,
- 78740, 0, 78726, 74432, 724, 0, 1455, 78749, 7183, 64583, 78747, 68443,
- 4175, 78741, 43614, 69801, 939, 0, 43520, 68613, 74569, 917958, 0, 78763,
- 78764, 78760, 10788, 6088, 78759, 78755, 190, 0, 12593, 0, 8188, 64408,
- 0, 4417, 0, 92261, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 128205, 0, 0,
- 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972,
- 92679, 0, 917887, 92563, 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0,
- 9252, 917889, 4652, 68371, 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0,
- 120688, 6723, 78187, 0, 6993, 0, 0, 8333, 0, 0, 11390, 0, 74464, 0,
- 92320, 74080, 0, 0, 11910, 92559, 8278, 8963, 4034, 128560, 0, 65344,
- 120517, 41747, 0, 0, 8677, 0, 12707, 9350, 66037, 128180, 8836, 12315,
- 12747, 8300, 0, 0, 7491, 8856, 128064, 0, 43150, 127768, 120404, 65389,
- 120402, 120403, 10813, 2592, 12853, 43269, 7263, 120244, 6536, 120238,
- 120239, 65516, 12321, 120391, 120388, 55287, 10007, 120246, 9588, 120248,
- 1596, 120383, 41994, 65801, 128808, 0, 66572, 0, 0, 10613, 6697, 12805,
- 41928, 40981, 78403, 78409, 5006, 64328, 0, 9931, 0, 8825, 74555, 65940,
- 43259, 0, 6107, 0, 119177, 0, 78401, 128641, 11783, 335, 120227, 64689,
- 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231,
- 8096, 10284, 128515, 0, 0, 10380, 8733, 0, 128240, 41602, 0, 92308,
- 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 120820, 843, 11541,
- 0, 917898, 2065, 41935, 74496, 41902, 0, 0, 215, 41258, 77875, 43159,
- 1953, 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675,
- 10700, 8805, 1742, 0, 9333, 8202, 127750, 0, 0, 0, 0, 73882, 499, 0,
- 43467, 0, 43818, 0, 1712, 5932, 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0,
- 0, 128009, 9458, 0, 6470, 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0,
- 128309, 74777, 120669, 9414, 120382, 73782, 73969, 565, 42484, 5794, 201,
- 2662, 42292, 0, 8254, 0, 10975, 0, 120625, 74763, 1022, 4108, 3880,
- 74247, 0, 0, 92263, 917980, 7507, 0, 43149, 0, 65031, 7961, 1636, 0,
- 65029, 65024, 0, 12473, 6534, 0, 99, 98, 97, 120571, 67584, 4049, 74163,
- 127065, 7090, 0, 7892, 917969, 10777, 917803, 65310, 65562, 66599, 66722,
- 0, 8039, 3363, 66594, 43434, 0, 0, 12596, 66595, 42258, 42570, 5593,
- 119148, 120711, 92425, 10100, 6061, 64854, 119, 118, 117, 116, 12998,
- 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 102, 101,
- 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 77931, 1536, 64093,
- 73970, 77930, 127157, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266,
- 127813, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 128028, 2913,
- 73870, 127113, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, 3196,
- 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, 5258,
- 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 128781, 41169, 8939,
- 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0,
- 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249,
- 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369,
- 0, 128140, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0,
- 118902, 43005, 78448, 9552, 0, 0, 0, 12997, 0, 0, 0, 0, 2381, 12883,
- 10994, 10529, 41906, 0, 0, 0, 12425, 10661, 10856, 9614, 2428, 41478,
- 8582, 10064, 73930, 0, 0, 0, 64896, 119162, 1952, 92181, 8455, 10082,
- 11575, 0, 119566, 0, 12808, 12183, 6145, 118955, 64929, 92433, 0, 0,
- 43186, 42509, 0, 3922, 9187, 0, 0, 10191, 119057, 11752, 3353, 9358, 0,
- 917957, 66680, 120090, 8248, 7931, 8558, 9795, 68380, 0, 0, 120082,
- 120081, 120084, 41027, 120086, 0, 120088, 120087, 7019, 120073, 0, 11751,
- 120078, 78294, 64657, 8657, 120048, 8594, 120068, 0, 0, 120069, 120072,
- 120071, 0, 0, 43154, 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665,
- 7851, 0, 8375, 8699, 0, 42524, 0, 9085, 0, 7504, 9327, 6160, 128095, 0,
- 0, 8088, 0, 74012, 92500, 0, 4439, 6926, 0, 12924, 128227, 42369, 0,
- 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, 0, 0, 65825, 9577,
- 68199, 0, 64670, 0, 78056, 6793, 11295, 0, 78053, 73872, 0, 0, 10902, 0,
- 0, 78070, 78068, 10472, 2995, 0, 0, 64682, 2371, 78069, 120808, 259,
- 1009, 92171, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180,
- 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 43640, 8613,
- 0, 118989, 6736, 195092, 41492, 12005, 127889, 0, 1890, 120056, 0, 0, 0,
- 7293, 7991, 0, 10578, 0, 78076, 194738, 78077, 0, 0, 78800, 92653, 64445,
- 42668, 6635, 0, 6164, 65170, 0, 0, 7676, 11664, 0, 0, 69707, 0, 118812,
- 0, 0, 128045, 9175, 11925, 78045, 9088, 0, 64545, 1396, 0, 7546, 3847, 0,
- 127835, 4985, 13288, 672, 8098, 43196, 194746, 0, 128126, 0, 74043,
- 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0,
- 128584, 12622, 0, 0, 0, 194714, 127139, 13310, 773, 19933, 1539, 0,
- 126983, 42731, 92205, 0, 0, 0, 3051, 5862, 7823, 92478, 0, 120411, 3250,
- 43991, 69687, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0,
- 3505, 8707, 917968, 6725, 128013, 917971, 92314, 3471, 917970, 5479, 882,
- 6686, 119584, 11613, 120772, 42754, 0, 0, 92696, 0, 0, 0, 128523, 3225,
+ 65515, 9499, 10035, 13069, 71309, 0, 9889, 68184, 42806, 0, 7256, 0, 0,
+ 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101,
+ 3610, 983199, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549,
+ 10875, 128662, 5477, 65692, 0, 128532, 120397, 12896, 10456, 917954, 0,
+ 3874, 0, 0, 983619, 120331, 0, 0, 65603, 0, 65687, 0, 41038, 74009,
+ 119570, 42239, 8536, 78740, 78324, 78726, 74432, 724, 0, 1455, 78749,
+ 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, 0, 43520,
+ 68613, 74569, 917958, 0, 78763, 78764, 78760, 10788, 6088, 78759, 78755,
+ 190, 0, 12593, 0, 8188, 64408, 0, 4417, 983211, 92261, 6370, 0, 7827,
+ 68441, 6965, 0, 0, 13201, 128205, 69896, 0, 74382, 73781, 7918, 73988, 0,
+ 0, 917884, 1728, 0, 43764, 178, 12972, 92679, 0, 917887, 92563, 983373,
+ 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, 0,
+ 0, 0, 13065, 9923, 10806, 0, 11763, 70016, 120688, 6723, 78187, 0, 6993,
+ 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983307, 69911, 11910,
+ 92559, 8278, 8963, 4034, 128560, 0, 65344, 120517, 41747, 0, 0, 8677, 0,
+ 12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 983741, 0, 7491,
+ 8856, 71361, 0, 43150, 127768, 120404, 65389, 120402, 120403, 10813,
+ 2592, 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321,
+ 120391, 120388, 55287, 10007, 120246, 9588, 120248, 1596, 120383, 41994,
+ 65801, 128808, 0, 66572, 0, 0, 10613, 6697, 12805, 41928, 40981, 78403,
+ 78409, 5006, 64328, 0, 9931, 0, 8825, 74555, 65940, 43259, 0, 6107, 0,
+ 119177, 0, 78401, 128641, 11783, 335, 120227, 64689, 438, 4510, 5765,
+ 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, 8096, 10284,
+ 128515, 0, 0, 10380, 8733, 983072, 128240, 41602, 0, 92308, 74831,
+ 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 120820, 843, 11541, 0,
+ 917898, 2065, 41935, 74496, 41902, 0, 0, 215, 41258, 77875, 43159, 1953,
+ 9579, 41938, 1256, 3910, 9407, 6242, 0, 983100, 41257, 41900, 8675,
+ 10700, 8805, 1742, 0, 9333, 8202, 127750, 0, 983197, 0, 0, 73882, 499,
+ 983049, 43467, 0, 43818, 0, 1712, 5932, 77845, 41762, 983104, 0, 11967,
+ 1775, 0, 0, 0, 0, 128009, 9458, 0, 6470, 9180, 120380, 43176, 0, 0,
+ 42782, 0, 0, 0, 128309, 74777, 120669, 9414, 120382, 73782, 73969, 565,
+ 42484, 5794, 201, 2662, 42292, 0, 8254, 0, 10975, 0, 120625, 74763, 1022,
+ 4108, 3880, 74247, 0, 0, 92263, 917980, 7507, 0, 43149, 0, 65031, 7961,
+ 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, 98, 97, 120571, 67584,
+ 4049, 74163, 127065, 7090, 0, 7892, 917969, 10777, 917803, 65310, 65562,
+ 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, 66595, 42258,
+ 42570, 5593, 119148, 120711, 92425, 10100, 6061, 64854, 119, 118, 117,
+ 116, 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103,
+ 102, 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 77931, 1536,
+ 64093, 73970, 77930, 127157, 0, 6020, 12716, 127112, 12744, 475, 120394,
+ 13266, 127813, 127111, 0, 73926, 0, 10645, 1212, 6543, 983299, 8134,
+ 128028, 2913, 73870, 127113, 1866, 0, 195095, 0, 8923, 1645, 12059,
+ 66585, 71297, 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859,
+ 7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0,
+ 128781, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0,
+ 41172, 7855, 0, 0, 10480, 0, 0, 77936, 8264, 12610, 983300, 645, 126616,
+ 7609, 40973, 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 0, 7729,
+ 73982, 120518, 0, 195086, 43369, 0, 128140, 68415, 983093, 4538, 120406,
+ 43141, 0, 983208, 74214, 73886, 0, 0, 118902, 43005, 78448, 9552, 0, 0,
+ 983159, 12997, 0, 0, 0, 0, 2381, 12883, 10994, 10529, 41906, 0, 0, 0,
+ 12425, 10661, 10856, 9614, 2428, 41478, 8582, 10064, 73930, 0, 0, 0,
+ 64896, 119162, 1952, 92181, 8455, 10082, 11575, 983482, 119566, 0, 12808,
+ 12183, 6145, 118955, 64929, 92433, 0, 983193, 43186, 42509, 0, 3922,
+ 9187, 983614, 0, 10191, 119057, 11752, 3353, 9358, 0, 71366, 66680,
+ 120090, 8248, 7931, 8558, 9795, 68380, 983289, 0, 120082, 120081, 120084,
+ 41027, 120086, 0, 120088, 7366, 7019, 120073, 0, 11751, 120078, 78294,
+ 64657, 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0,
+ 43154, 41029, 0, 11332, 65380, 7728, 94077, 11294, 0, 66665, 7851, 0,
+ 8375, 8699, 0, 42524, 0, 9085, 94041, 7504, 9327, 6160, 128095, 983855,
+ 0, 8088, 0, 74012, 92500, 0, 4439, 6926, 983047, 12924, 128227, 42369,
+ 4350, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 983275, 0, 0,
+ 65825, 9577, 68199, 0, 64670, 983121, 78056, 6793, 11295, 0, 78053,
+ 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, 2371,
+ 78069, 120808, 259, 1009, 92171, 2402, 2333, 6440, 194741, 0, 65125,
+ 41244, 0, 13271, 9103, 2278, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178,
+ 127070, 41261, 119362, 43640, 8613, 0, 94049, 6736, 195092, 41492, 12005,
+ 69927, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 194738,
+ 78077, 69928, 0, 78800, 92653, 64445, 42668, 6635, 0, 6164, 65170, 0, 0,
+ 7676, 11664, 0, 983649, 69707, 0, 118812, 0, 0, 128045, 9175, 11925,
+ 78045, 9088, 0, 64545, 1396, 0, 7546, 3847, 127177, 127835, 4985, 13288,
+ 672, 8098, 43196, 194746, 983096, 128126, 42655, 74043, 65072, 1577,
+ 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0, 128584, 12622, 0,
+ 0, 0, 194714, 127139, 13310, 773, 19933, 1539, 0, 126983, 42731, 67972,
+ 0, 0, 0, 3051, 5862, 7823, 92478, 0, 120411, 3250, 43991, 69687, 66649,
+ 9510, 66237, 983294, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707,
+ 917968, 6725, 128013, 917971, 92314, 3471, 917970, 5479, 882, 6686,
+ 119584, 11613, 120772, 42754, 0, 983298, 92696, 0, 0, 0, 128523, 3225,
917996, 4433, 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757,
64879, 917949, 917950, 127848, 13227, 0, 10021, 5160, 1387, 0, 917953,
41418, 0, 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158,
- 119257, 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0,
- 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 0, 0, 4397,
+ 119257, 4274, 983292, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232,
+ 0, 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 0, 0, 4397,
128037, 128336, 41296, 9545, 41291, 128049, 0, 41485, 3511, 41282, 5923,
10400, 0, 128818, 760, 0, 12088, 5786, 0, 42256, 119869, 119860, 417,
- 41474, 119562, 41565, 0, 5934, 119867, 66583, 119231, 64877, 0, 64481,
+ 41474, 119562, 41565, 0, 5934, 119867, 66583, 119231, 64877, 2284, 64481,
78614, 66013, 41956, 43455, 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0,
- 0, 0, 65910, 127747, 10246, 120816, 0, 1237, 10274, 4552, 119576, 0, 0,
- 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, 7840,
- 0, 43630, 10252, 0, 128104, 43185, 0, 4396, 0, 119880, 10769, 9676,
- 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0,
- 120608, 66326, 0, 0, 0, 43811, 9330, 0, 7222, 10283, 10315, 10379, 4996,
- 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, 0, 0, 7565, 66363, 12952,
- 64806, 43180, 77928, 68096, 77929, 43982, 74288, 622, 74023, 885, 43405,
- 1602, 0, 0, 852, 0, 12160, 0, 10212, 65435, 0, 12071, 9609, 12156,
- 917983, 917984, 43586, 11035, 10411, 917988, 10255, 6710, 10279, 4194,
- 10375, 917993, 0, 4315, 12644, 127516, 77937, 43639, 43343, 0, 917998,
- 11501, 41177, 128689, 0, 917792, 0, 92413, 8715, 0, 41179, 0, 43313, 0,
- 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922,
- 118903, 77943, 4186, 92531, 127106, 127105, 6718, 0, 4406, 74601, 8480,
- 9192, 9747, 128699, 4413, 92196, 42268, 3198, 5924, 5920, 92469, 6921,
- 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, 10772,
- 65276, 5937, 1914, 2553, 11682, 6756, 128590, 128646, 8363, 0, 2993,
- 7772, 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718,
- 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381,
- 65390, 10067, 0, 1202, 0, 0, 65863, 0, 0, 0, 78182, 64542, 3260, 73829,
- 65388, 9945, 8419, 78042, 6738, 0, 43681, 69728, 2059, 0, 0, 55237, 1431,
- 0, 66565, 10821, 0, 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184,
- 4544, 0, 0, 0, 1740, 78097, 8758, 985, 12872, 64511, 78094, 12068, 78102,
- 0, 10141, 0, 63761, 8785, 4476, 78109, 63763, 12655, 8907, 78105, 78106,
- 78103, 78104, 0, 119572, 10665, 64616, 41572, 0, 127160, 0, 41573, 0,
- 3931, 120295, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 128016, 64484, 0, 41167,
- 0, 41735, 0, 717, 10754, 0, 0, 127979, 0, 63767, 0, 1780, 6936, 0, 0,
- 819, 10611, 9694, 126978, 0, 0, 0, 0, 8343, 8342, 8345, 8344, 6578, 7009,
+ 126643, 0, 65910, 127747, 10246, 120816, 65785, 1237, 10274, 4552,
+ 119576, 0, 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 69845,
+ 120794, 7840, 0, 43630, 10252, 0, 128104, 43185, 0, 4396, 0, 119880,
+ 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025,
+ 10299, 0, 0, 120608, 66326, 983439, 127794, 0, 43811, 9330, 120596, 7222,
+ 10283, 10315, 10379, 4996, 983773, 13281, 66517, 7865, 10087, 78343, 0,
+ 78347, 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 7414, 77929, 43982,
+ 74288, 622, 74023, 885, 43405, 1602, 0, 0, 852, 0, 12160, 0, 10212,
+ 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, 11035, 10411,
+ 917988, 10255, 6710, 10279, 4194, 10375, 73900, 0, 4315, 12644, 127516,
+ 77937, 43639, 43343, 78777, 917998, 11501, 41177, 128689, 0, 917792, 0,
+ 92413, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103,
+ 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 77943, 4186, 92531, 127106,
+ 127105, 6718, 0, 4406, 74601, 8480, 9192, 9747, 126530, 4413, 92196,
+ 42268, 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681,
+ 43169, 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682,
+ 6756, 128590, 128646, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141,
+ 42407, 8159, 718, 7572, 973, 0, 120718, 3235, 2415, 43164, 0, 8018,
+ 42333, 74756, 10675, 6937, 42486, 43381, 65390, 10067, 0, 1202, 0, 0,
+ 65863, 0, 0, 94013, 78182, 64542, 3260, 73829, 65388, 9945, 8419, 78042,
+ 6738, 0, 43681, 69728, 2059, 0, 0, 55237, 1431, 0, 66565, 10821, 0,
+ 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, 4544, 0, 0, 0,
+ 1740, 78097, 8758, 985, 12872, 64511, 78094, 12068, 78102, 0, 10141, 0,
+ 63761, 8785, 4476, 78109, 63763, 12655, 8907, 78105, 78106, 78103, 78104,
+ 0, 119572, 10665, 64616, 41572, 0, 127160, 0, 41573, 0, 3931, 120295,
+ 74143, 0, 0, 0, 78460, 11982, 0, 0, 0, 128016, 64484, 0, 41167, 0, 41735,
+ 94019, 717, 10754, 0, 0, 127979, 0, 63767, 0, 1780, 6936, 0, 92254, 819,
+ 10611, 9694, 126978, 0, 0, 0, 0, 8343, 8342, 8345, 8344, 6578, 7009,
7523, 6922, 8348, 8347, 7525, 3346, 8339, 128165, 128338, 575, 268,
78111, 8563, 5754, 120343, 41541, 65565, 8336, 5936, 7290, 78117, 8337,
8341, 308, 11388, 7522, 120721, 78123, 65466, 11090, 6953, 0, 120346, 0,
@@ -17128,1686 +18063,2642 @@ static unsigned int code_hash[] = {
7830, 11651, 13093, 64002, 0, 65742, 12874, 119597, 11590, 0, 74048,
128350, 8595, 0, 917947, 43703, 13097, 0, 64643, 13283, 12697, 0, 12381,
3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349,
- 42538, 0, 0, 65308, 9462, 917554, 0, 0, 0, 42736, 0, 5756, 0, 7638,
- 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 128827, 120635,
- 128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, 66230,
- 10080, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431,
+ 42538, 0, 0, 7411, 9462, 917554, 0, 0, 0, 42736, 0, 5756, 983219, 7638,
+ 41642, 42764, 0, 43109, 7637, 5752, 74037, 0, 73832, 128827, 120635,
+ 128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 120798, 291, 0, 0, 2027,
+ 66230, 10080, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431,
120430, 0, 128351, 127489, 127148, 0, 92499, 0, 119094, 74213, 7824, 0,
0, 41274, 5778, 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0,
- 74393, 11552, 0, 127855, 0, 65391, 0, 10172, 65453, 63789, 41264, 78658,
- 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, 41269, 120412,
- 41267, 4646, 120425, 865, 42034, 78274, 78273, 4645, 42033, 78270,
- 127982, 0, 64728, 0, 78673, 78674, 1659, 919, 42784, 1671, 195089, 6069,
- 9219, 195090, 1661, 13120, 63784, 69819, 10140, 9713, 119143, 0, 0, 0,
- 2306, 10485, 118943, 6068, 10612, 195099, 119567, 195101, 92561, 41462,
- 120470, 195079, 5422, 128234, 0, 0, 0, 10229, 10635, 826, 128081, 195082,
- 195085, 195084, 195087, 6483, 0, 1808, 7848, 0, 8100, 78227, 78669,
- 78670, 13301, 78667, 9667, 78665, 78872, 0, 11003, 9904, 0, 0, 120690,
- 9144, 10921, 0, 78680, 9840, 65131, 78678, 77841, 10313, 0, 0, 64320,
- 10265, 78686, 10962, 78684, 43008, 8945, 78683, 0, 41, 195072, 1792,
- 120515, 195073, 8655, 195075, 92544, 77951, 12066, 0, 385, 4152, 2585,
- 127804, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, 127873, 13157, 0, 0,
- 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, 0, 65216, 0,
- 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, 119912, 9691, 4411,
- 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, 13061, 8016, 78687,
- 19932, 64831, 0, 119923, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925,
- 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, 171, 5941, 12452,
- 917544, 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969,
- 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, 5209, 297,
- 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960, 74156,
- 6981, 92374, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505,
- 78876, 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0,
- 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0,
- 92339, 0, 0, 5782, 420, 0, 0, 43796, 10797, 63794, 0, 0, 64814, 63796,
- 77965, 0, 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0,
- 69673, 0, 0, 0, 329, 77968, 92707, 917548, 7399, 0, 41188, 13244, 120466,
- 42167, 7435, 78193, 5380, 119086, 69225, 1155, 11365, 43126, 77972, 0,
- 65684, 0, 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 69799, 6786,
- 43601, 120476, 74126, 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345,
- 0, 127384, 5347, 69802, 0, 73868, 118944, 10588, 0, 0, 63755, 0, 5343,
- 78422, 0, 4555, 5341, 0, 0, 128670, 5351, 0, 43104, 65244, 917892, 64541,
- 42519, 74472, 0, 0, 74765, 917888, 194892, 6638, 0, 65113, 271, 74180,
- 65370, 8835, 65368, 12653, 65366, 42172, 41086, 65363, 65362, 65361,
- 11912, 43410, 11323, 65357, 11800, 65355, 5345, 65353, 65352, 65351, 761,
- 65349, 19959, 69718, 63856, 0, 2423, 77958, 64647, 77959, 11957, 4699, 0,
- 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, 66563, 77955, 69773, 9773,
- 13167, 12918, 41096, 73980, 69245, 78254, 917893, 10684, 0, 917896, 0,
- 7946, 12541, 8182, 67586, 69780, 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 0,
- 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 92609, 0, 0, 3127, 2595, 65713,
- 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, 8764,
+ 74393, 11552, 0, 127855, 128217, 65391, 0, 10172, 65453, 63789, 41264,
+ 78658, 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, 41269,
+ 120412, 41267, 4646, 120425, 865, 42034, 78274, 78273, 4645, 42033,
+ 78270, 127982, 983172, 64728, 0, 78673, 78674, 1659, 919, 42784, 1671,
+ 195089, 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713,
+ 119143, 0, 0, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567,
+ 195101, 92561, 41462, 120470, 195079, 5422, 128234, 0, 0, 0, 10229,
+ 10635, 826, 128081, 195082, 195085, 195084, 195087, 6483, 92211, 1808,
+ 7848, 0, 8100, 78227, 78669, 78670, 13301, 78667, 9667, 78665, 78872, 0,
+ 11003, 9904, 0, 0, 120690, 9144, 10921, 0, 78680, 9840, 65131, 78678,
+ 77841, 10313, 0, 0, 64320, 10265, 78686, 10962, 78684, 43008, 8945,
+ 78683, 0, 41, 195072, 1792, 120515, 195073, 8655, 195075, 92544, 77951,
+ 12066, 0, 385, 4152, 2585, 127804, 119068, 3126, 0, 74136, 10957, 983694,
+ 43258, 119116, 127873, 13157, 0, 917544, 3570, 0, 7443, 0, 44006, 6997,
+ 68004, 126631, 7879, 8739, 11075, 0, 65216, 0, 69795, 2593, 8463, 7810,
+ 917862, 7839, 119913, 78806, 119912, 9691, 4411, 78802, 0, 0, 43442,
+ 69851, 65254, 10066, 983880, 0, 0, 0, 13061, 8016, 78687, 19932, 64831,
+ 0, 119923, 12390, 119171, 1634, 68115, 0, 11056, 983574, 119925, 0,
+ 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, 171, 5941, 12452,
+ 194709, 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969,
+ 120767, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, 5209,
+ 297, 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960,
+ 74156, 6981, 92374, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875,
+ 127505, 78876, 2503, 73778, 1762, 69794, 2495, 78873, 5844, 68031,
+ 118838, 0, 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0,
+ 8892, 0, 92339, 0, 983073, 5782, 420, 0, 0, 43796, 10797, 63794, 0, 0,
+ 64814, 63796, 77965, 0, 66581, 119204, 41608, 0, 0, 63792, 4659, 120788,
+ 0, 43676, 0, 69673, 0, 0, 0, 329, 77968, 92707, 917548, 7399, 0, 41188,
+ 13244, 120466, 42167, 7435, 78193, 5380, 119086, 69225, 1155, 11365,
+ 43126, 77972, 0, 65684, 0, 5601, 65192, 42765, 63752, 0, 7987, 128543,
+ 1172, 69799, 6786, 43601, 120476, 74126, 5603, 0, 4473, 0, 194823, 0,
+ 65347, 65346, 65345, 0, 127384, 5347, 69802, 983623, 73868, 118944,
+ 10588, 0, 0, 63755, 0, 5343, 78422, 120661, 4555, 5341, 0, 70071, 128670,
+ 5351, 78675, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765,
+ 917888, 127510, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653,
+ 65366, 42172, 41086, 65363, 65362, 65361, 11912, 43410, 11323, 65357,
+ 11800, 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 69718, 63856,
+ 126635, 2423, 77958, 64647, 77959, 11957, 4699, 0, 0, 0, 0, 64605, 0, 0,
+ 0, 4916, 0, 380, 10958, 66563, 77955, 69773, 9773, 13167, 12918, 41096,
+ 73980, 69245, 78254, 917893, 10684, 0, 917896, 0, 7946, 12541, 8182,
+ 67586, 69780, 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 0, 68011, 8847, 0,
+ 65876, 5535, 8329, 74590, 983206, 92609, 0, 0, 3127, 2595, 65713, 42013,
+ 983849, 5607, 41089, 0, 0, 74256, 2665, 11304, 43751, 74200, 4970, 8764,
120459, 8934, 92726, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254,
- 1100, 0, 128301, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, 4959,
- 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, 13304,
- 128290, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, 0,
- 73883, 92408, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396,
- 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 64446, 0, 10696,
- 0, 6073, 9838, 118920, 0, 6075, 128563, 282, 0, 6437, 74078, 128000,
- 9801, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 127843, 74076, 78879,
- 0, 0, 0, 0, 0, 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670,
- 92608, 120272, 0, 9642, 10912, 958, 0, 11387, 78878, 4666, 0, 4915, 0,
- 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 69775, 0, 43595, 7450, 0,
- 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251,
- 9772, 7255, 8886, 1389, 127932, 120257, 120258, 120259, 12941, 42661,
- 92381, 120255, 120256, 12301, 120266, 69820, 41102, 66604, 120262,
- 120263, 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789,
- 120613, 128704, 0, 119196, 11307, 66707, 917871, 127751, 11745, 7919, 0,
- 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, 6744, 128355, 1699, 74191, 74843, 0,
- 0, 6306, 10169, 0, 119251, 10068, 3766, 2389, 120456, 120455, 6611, 257,
- 43170, 13153, 0, 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033,
- 11447, 10541, 5622, 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0,
- 41435, 4352, 0, 2435, 120809, 5621, 120385, 4201, 3778, 4203, 4202, 4205,
- 4204, 120447, 3768, 68142, 765, 41440, 3764, 8473, 6373, 8469, 120438,
- 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, 6829, 5225, 128807, 127385,
- 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 127236, 128019, 0, 5353,
- 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, 120752,
- 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, 120027,
- 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 5627, 120017,
- 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, 0,
- 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 127878,
- 73891, 0, 0, 5694, 7689, 69798, 9323, 4325, 3047, 10317, 175, 0, 0,
- 69764, 0, 0, 1243, 42154, 5431, 6652, 0, 69770, 43651, 0, 68118, 128024,
- 1129, 0, 0, 65900, 1986, 7846, 78804, 8661, 917772, 65255, 0, 3845, 4490,
- 118969, 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342,
- 128568, 51, 41516, 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251,
- 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494,
- 92316, 4660, 0, 10405, 0, 78803, 0, 0, 42040, 73918, 119627, 7944, 41454,
- 12605, 0, 42205, 41455, 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0,
- 119589, 1969, 2384, 8097, 917864, 0, 127380, 78029, 8766, 0, 78079, 5854,
- 127974, 10583, 0, 119989, 0, 10416, 917869, 3872, 917868, 0, 8429, 0,
- 118806, 2838, 128802, 0, 917866, 0, 0, 0, 0, 0, 11096, 120813, 10553,
- 1662, 8483, 120396, 43605, 5892, 43418, 0, 73742, 66, 65, 68, 67, 70, 69,
- 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, 83, 86, 85, 88, 87,
- 90, 89, 119862, 10357, 7385, 8170, 1704, 8556, 0, 9659, 0, 0, 0, 9556, 0,
- 4503, 11353, 9647, 0, 78185, 0, 0, 92713, 78886, 0, 0, 74229, 66593,
- 6438, 917979, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0,
- 128042, 0, 0, 0, 6334, 0, 0, 19937, 0, 92368, 0, 5675, 254, 0, 0, 69686,
- 42425, 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0,
- 92645, 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0,
- 11785, 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775,
- 128293, 0, 74588, 120748, 3140, 128854, 7960, 43271, 0, 12518, 10909,
- 127508, 1428, 12472, 0, 128787, 7699, 12393, 0, 0, 0, 74518, 8223, 0,
- 4261, 0, 0, 0, 0, 0, 128302, 0, 128046, 43419, 0, 64554, 10574, 3878, 0,
- 42352, 1752, 73785, 0, 42506, 128541, 10199, 0, 0, 0, 65919, 0, 6695,
- 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 0, 0,
- 64041, 74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 0, 78861, 0, 0,
- 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, 65608, 3714, 0, 0, 0,
+ 1100, 0, 128301, 41081, 2912, 11749, 69792, 0, 68019, 3572, 10023, 4959,
+ 13079, 0, 983268, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450,
+ 13304, 128290, 127260, 41451, 0, 11095, 8273, 127533, 3451, 983301, 972,
+ 41453, 983434, 0, 73883, 68022, 73945, 983726, 2288, 19955, 9538, 0,
+ 69807, 0, 0, 0, 0, 11396, 983432, 11019, 0, 0, 0, 68020, 41078, 71365,
+ 261, 5927, 7791, 0, 7362, 0, 10696, 0, 6073, 9838, 118920, 0, 6075,
+ 93995, 282, 126510, 6437, 74078, 128000, 9801, 0, 74177, 0, 0, 3474,
+ 118787, 0, 120655, 6081, 0, 78874, 74076, 78879, 0, 0, 0, 0, 0, 8751,
+ 11499, 120273, 7816, 12636, 4665, 12628, 4670, 92608, 120272, 68017,
+ 9642, 10912, 958, 0, 11387, 78878, 4666, 0, 4915, 0, 4669, 0, 68099,
+ 13287, 4664, 10836, 120550, 0, 69775, 0, 43595, 7450, 0, 917875, 8664,
+ 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, 9772, 7255, 8886,
+ 1389, 127932, 120257, 120258, 120259, 12941, 42661, 92381, 120255,
+ 120256, 12301, 120266, 69820, 41102, 64428, 120262, 120263, 120264, 1017,
+ 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 120613, 128704, 0,
+ 73855, 11307, 66707, 917871, 127751, 11745, 7919, 0, 1641, 0, 0, 8966, 0,
+ 0, 5908, 0, 0, 6744, 128355, 1699, 69861, 74843, 917933, 0, 6306, 10169,
+ 71324, 119251, 10068, 3766, 2389, 120456, 120455, 6611, 257, 43170,
+ 13153, 0, 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447,
+ 10541, 5622, 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352,
+ 983610, 2435, 120809, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204,
+ 120447, 3768, 68142, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947,
+ 4564, 0, 0, 74271, 73753, 8374, 983156, 0, 6829, 5225, 128807, 127385, 0,
+ 0, 119615, 0, 74793, 5626, 73807, 11771, 74075, 127236, 128019, 42614,
+ 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 69942, 6952,
+ 983264, 120752, 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471,
+ 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400,
+ 5627, 120017, 120018, 120023, 64275, 120021, 8786, 0, 203, 0, 0, 0, 0,
+ 78350, 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065,
+ 126464, 73891, 0, 0, 5694, 7689, 69798, 9323, 4325, 3047, 10317, 175, 0,
+ 0, 69764, 0, 0, 1243, 42154, 5431, 6652, 0, 69770, 43651, 0, 68118,
+ 128024, 1129, 126574, 0, 65900, 1986, 7846, 78804, 8661, 917772, 65255,
+ 0, 3845, 4490, 118969, 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0,
+ 7756, 12342, 128568, 51, 41516, 0, 8570, 9568, 71318, 456, 7026, 8145,
+ 1168, 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121,
+ 0, 41494, 92316, 4660, 0, 10405, 0, 78803, 0, 0, 42040, 73918, 119627,
+ 7944, 41454, 12605, 0, 42205, 41455, 236, 64051, 78867, 8214, 0, 0, 0,
+ 41457, 983961, 119589, 1969, 2384, 8097, 917864, 7413, 68012, 78029,
+ 8766, 0, 78079, 5854, 127974, 10583, 0, 119989, 0, 10416, 917869, 3872,
+ 917868, 0, 8429, 0, 118806, 2838, 128802, 0, 917866, 0, 0, 0, 983958,
+ 94005, 11096, 120813, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 0,
+ 73742, 66, 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79,
+ 82, 81, 84, 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704,
+ 8556, 0, 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 78185, 0, 0,
+ 92713, 78886, 0, 0, 74229, 66593, 6438, 917979, 9109, 78882, 1289, 64599,
+ 0, 68009, 0, 65507, 2447, 0, 0, 128042, 126545, 983137, 0, 6334, 0, 0,
+ 19937, 0, 92368, 0, 5675, 254, 0, 0, 69686, 42425, 8918, 64003, 5716,
+ 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 92645, 74796, 64400,
+ 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 68008, 11785, 7412,
+ 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7103, 128293, 7102,
+ 74588, 120748, 3140, 128854, 7960, 43271, 0, 12518, 10909, 127508, 1428,
+ 12472, 0, 69864, 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0,
+ 0, 128302, 0, 128046, 43419, 0, 64554, 10574, 3878, 0, 42352, 1752,
+ 73785, 0, 42506, 128541, 10199, 0, 0, 68021, 65919, 0, 6695, 720, 324, 0,
+ 0, 43406, 983727, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 0, 0, 64041,
+ 74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 0, 78861, 119134, 0, 0,
+ 5204, 74774, 43404, 11835, 0, 3995, 68360, 65608, 3714, 92190, 0, 0,
10999, 11750, 0, 43251, 68660, 43301, 0, 120557, 8130, 8672, 10845,
- 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, 0, 468, 612, 0,
- 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 119017,
- 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684,
- 126992, 3359, 7800, 128644, 65177, 6226, 353, 12396, 0, 119612, 64742,
- 128682, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418,
- 0, 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0,
- 12409, 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0,
- 118986, 0, 4788, 0, 0, 65734, 0, 43790, 0, 13075, 74429, 0, 64569, 43532,
- 10837, 2492, 127197, 118901, 68637, 41136, 43785, 11813, 9649, 41154,
- 119617, 5128, 4038, 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0,
- 6734, 41343, 119848, 65439, 12709, 6986, 92364, 0, 0, 41349, 119123,
- 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, 10262, 77950, 41346, 0,
- 607, 0, 119853, 128846, 12923, 10314, 10282, 65477, 10378, 120297, 40976,
- 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, 0, 0, 0, 66444,
- 10538, 0, 2550, 119836, 6779, 0, 0, 3525, 6824, 118886, 0, 0, 5619,
- 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0,
- 120551, 42380, 64895, 43693, 66451, 808, 5455, 11347, 0, 1026, 5620,
- 194887, 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 128060, 1338,
- 120581, 0, 12739, 4603, 3084, 0, 92484, 9858, 6037, 0, 3974, 78213,
- 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, 0, 41032,
- 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, 194891, 0,
- 40963, 64952, 10402, 0, 0, 92304, 10603, 0, 0, 0, 0, 6714, 10083, 127069,
- 194895, 78367, 127377, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, 0,
- 74829, 0, 65423, 0, 128118, 9570, 0, 9525, 2689, 917626, 65426, 0,
- 917624, 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 74237,
+ 11964, 0, 983185, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 126629, 0, 468,
+ 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 983163, 12280, 0, 540,
+ 74564, 119017, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667,
+ 0, 64684, 126992, 3359, 7800, 69934, 65177, 6226, 353, 12396, 0, 119612,
+ 64742, 128682, 120282, 0, 983442, 12412, 19941, 0, 120277, 78847, 1884,
+ 9481, 42418, 70059, 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0,
+ 41328, 42344, 0, 12409, 0, 4360, 127009, 9739, 128550, 69933, 73921, 0,
+ 42521, 8539, 983716, 0, 118986, 0, 4788, 0, 68023, 65734, 983447, 43790,
+ 0, 13075, 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637,
+ 41136, 43785, 11813, 9649, 41154, 119617, 5128, 4038, 41143, 65604,
+ 64859, 41592, 6771, 1648, 5435, 917837, 6734, 41343, 119848, 65439,
+ 12709, 6986, 92364, 68015, 0, 41349, 70021, 12581, 10374, 5175, 0, 73806,
+ 10254, 0, 10278, 10262, 69858, 41346, 0, 607, 0, 119852, 128846, 12923,
+ 10314, 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840,
+ 42838, 0, 40978, 983888, 119840, 0, 983071, 0, 66444, 10538, 0, 2550,
+ 119836, 6779, 0, 0, 3525, 6824, 118886, 0, 0, 5619, 65822, 126567,
+ 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, 120551, 42380,
+ 64895, 43693, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, 0, 11350,
+ 5617, 0, 9225, 64639, 127073, 9145, 128060, 1338, 120581, 983158, 12739,
+ 4603, 3084, 983155, 92484, 9858, 6037, 0, 3974, 78213, 10290, 983695,
+ 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0,
+ 64700, 10011, 1445, 40961, 0, 119105, 0, 40960, 0, 194891, 0, 40963,
+ 64952, 10402, 0, 0, 92304, 10603, 0, 0, 983113, 0, 6714, 10083, 127069,
+ 194895, 78367, 127377, 0, 93963, 9073, 42585, 64302, 10704, 65030, 4787,
+ 0, 74829, 0, 65423, 0, 128118, 9570, 55260, 9525, 2689, 917626, 65426, 0,
+ 917624, 43740, 0, 40966, 917622, 13286, 3998, 42598, 42596, 503, 74237,
8735, 2690, 66488, 42836, 127150, 41954, 917617, 1652, 772, 6688, 8310,
65428, 3487, 43416, 3585, 10194, 43320, 119159, 128183, 194874, 6468,
- 41976, 9720, 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180,
- 65027, 64680, 13038, 43699, 0, 41488, 128087, 8527, 194917, 12362, 12435,
- 12360, 41053, 3266, 0, 12356, 8616, 41466, 0, 92588, 11450, 0, 3638,
- 12354, 0, 3216, 0, 2358, 92606, 8633, 0, 0, 119182, 69244, 0, 0, 11759,
- 194903, 6368, 74823, 0, 41423, 8078, 10504, 0, 41698, 42237, 0, 7002, 0,
- 41430, 42267, 41051, 41484, 0, 0, 41050, 41473, 10466, 13099, 0, 0, 0,
- 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, 3625, 78157, 41409, 0, 69639,
- 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, 41424, 917598, 120546, 0,
- 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, 0, 127538, 0, 78251,
- 0, 42290, 3275, 92472, 42329, 74759, 0, 0, 0, 92388, 69649, 10989, 74234,
- 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, 74603, 64504, 19928, 0, 0,
- 3917, 0, 11732, 0, 0, 41448, 41461, 128823, 0, 127912, 0, 8819, 12663, 0,
- 41184, 74014, 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758,
- 68425, 0, 1064, 42467, 128044, 10115, 19924, 92711, 0, 7862, 64551,
- 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, 2911, 0,
- 41178, 5427, 64823, 0, 0, 3787, 41174, 0, 41458, 0, 41463, 42413, 11292,
- 2406, 775, 0, 65584, 0, 6074, 9618, 128668, 0, 43440, 0, 194901, 41436,
- 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, 1613, 0, 68456,
- 12598, 0, 120734, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 0,
+ 41976, 9720, 917606, 11767, 41970, 194596, 5836, 12358, 0, 4355, 9048,
+ 12180, 65027, 64680, 13038, 43699, 0, 41488, 128087, 8527, 194917, 12362,
+ 12435, 12360, 41053, 3266, 0, 12356, 8616, 41466, 0, 92588, 11450, 0,
+ 3638, 12354, 0, 3216, 0, 2358, 92606, 8633, 0, 983736, 119182, 69244, 0,
+ 0, 11759, 194903, 6368, 74823, 0, 41423, 8078, 10504, 127558, 41698,
+ 42237, 0, 7002, 983669, 41430, 42267, 41051, 41484, 0, 0, 41050, 41473,
+ 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, 3625,
+ 78157, 41409, 0, 69639, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0,
+ 41424, 917598, 120546, 0, 128212, 0, 41417, 1261, 0, 0, 12102, 119662,
+ 41401, 0, 127538, 0, 78251, 0, 42290, 3275, 92472, 42329, 74759, 0, 0, 0,
+ 92388, 69649, 10989, 74234, 983140, 10598, 7410, 2669, 903, 0, 2920, 0,
+ 127232, 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 983180, 41448,
+ 41461, 128823, 0, 127912, 0, 8819, 12663, 0, 41184, 74014, 232, 74835,
+ 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467,
+ 128044, 10115, 19924, 92711, 0, 7862, 64551, 13224, 8516, 41862, 66650,
+ 7561, 78618, 69793, 1878, 0, 983261, 2911, 0, 41178, 5427, 64823, 0, 0,
+ 3787, 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584,
+ 69923, 6074, 9618, 128668, 983943, 43440, 0, 194901, 41436, 3656, 0,
+ 120600, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, 1613, 0, 68456, 12598,
+ 983191, 120734, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 70029,
9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, 11497, 64687,
74008, 42592, 3871, 0, 128305, 9111, 5741, 0, 194846, 120366, 119111,
120745, 0, 120368, 0, 11648, 0, 194873, 120364, 41587, 120365, 0, 74322,
42113, 0, 127155, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724,
- 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0,
- 41598, 3993, 0, 1545, 40971, 536, 128521, 43029, 0, 0, 65173, 65286, 0,
- 0, 0, 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326,
- 40969, 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242,
- 128513, 8020, 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0,
- 118942, 67667, 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0,
- 11755, 66305, 0, 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060,
- 1741, 42370, 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 194621,
- 0, 92293, 40984, 128306, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237,
- 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 2056, 41287, 92610, 0, 0,
- 42219, 128257, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 92590, 2796,
- 55291, 11683, 9902, 74521, 0, 11451, 0, 128822, 42631, 2359, 0, 67844,
- 74164, 41238, 548, 11405, 13133, 64368, 0, 128795, 0, 397, 43622, 42139,
- 9547, 9590, 128238, 1614, 43661, 64356, 66307, 6651, 1358, 0, 428, 9620,
- 1466, 78112, 10982, 118831, 1333, 7104, 407, 6425, 128834, 74253, 0, 0,
- 0, 5804, 11976, 8554, 92721, 0, 0, 9057, 42294, 41218, 0, 0, 78137, 1883,
- 10952, 8048, 78142, 41225, 92621, 42915, 0, 128684, 0, 4407, 0, 65809,
- 119074, 194821, 8448, 7141, 74183, 0, 12675, 12659, 0, 42363, 120624,
- 194824, 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585,
- 120500, 0, 7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042,
- 8709, 128283, 0, 120637, 42419, 64799, 42047, 0, 0, 8470, 11807, 65897,
- 577, 0, 0, 74300, 0, 127308, 74840, 0, 0, 128791, 92224, 8736, 1414,
- 42643, 9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, 0, 0, 0, 0, 66317,
- 917612, 66315, 2106, 120222, 11273, 0, 43004, 7541, 0, 0, 961, 64307,
- 66324, 64906, 128591, 3106, 65917, 41284, 1696, 0, 891, 12105, 0, 42624,
- 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 194826, 92688, 0, 2322,
- 120371, 0, 11449, 128187, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089,
- 78682, 0, 120578, 4170, 1029, 127761, 127036, 119224, 42374, 0, 744, 0,
- 0, 0, 65823, 127826, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136,
- 127136, 0, 0, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778, 78648,
- 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177,
- 9020, 78652, 78653, 6178, 120249, 120242, 128027, 67673, 7518, 8754, 0,
- 120237, 2137, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0,
- 74149, 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 42536, 65266, 120827,
- 74307, 0, 6970, 5404, 43332, 3667, 7936, 12925, 126989, 6385, 0, 0,
- 118949, 10874, 65505, 128083, 0, 42053, 2075, 42057, 11083, 42052, 0, 0,
- 67651, 0, 9665, 92300, 0, 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229,
- 120224, 74172, 41145, 0, 0, 0, 41148, 8683, 7594, 127519, 0, 119090,
- 10869, 43458, 41146, 92407, 11441, 0, 3512, 119633, 0, 8103, 0, 0, 65184,
- 11780, 41563, 42796, 0, 69742, 41544, 65146, 0, 0, 0, 0, 19942, 0,
- 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, 0, 3804, 13070,
- 11557, 42044, 0, 1095, 0, 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346,
- 66697, 0, 11684, 0, 92486, 0, 0, 42043, 43232, 66677, 0, 42046, 78241,
- 4036, 0, 0, 128213, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441,
- 92722, 0, 0, 127772, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492,
- 41190, 3973, 119365, 4575, 41193, 7982, 429, 0, 127194, 0, 194854, 65792,
- 0, 118968, 6417, 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0,
- 0, 64548, 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050,
- 0, 5015, 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0,
- 7555, 13103, 5408, 2817, 1214, 0, 92335, 0, 0, 0, 0, 127195, 7957, 8689,
- 64723, 1056, 42896, 74147, 194813, 0, 55286, 7073, 65850, 12327, 0,
- 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, 8461, 128102, 12153,
- 12799, 0, 43709, 43708, 9451, 7571, 13073, 0, 0, 681, 0, 703, 0, 3272,
- 8781, 12894, 0, 11709, 92288, 74446, 0, 92532, 0, 11338, 120768, 3276, 0,
- 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 78814, 3262, 78811, 42711,
- 0, 0, 68478, 163, 576, 9895, 1655, 78817, 74591, 78815, 78816, 0, 0, 0,
- 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, 41591, 11036, 65252, 92382, 0,
- 0, 0, 67848, 0, 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348,
- 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, 0, 8810, 74499, 686, 0,
- 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, 65118, 0,
- 119151, 74205, 92651, 0, 2401, 68144, 8792, 0, 0, 65455, 0, 92246, 0,
- 119129, 0, 12886, 127920, 66624, 0, 43557, 10300, 10161, 10396, 74135, 0,
- 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 128672, 0, 0,
- 11479, 0, 0, 6350, 12864, 69674, 78114, 1061, 64780, 2001, 43111, 55230,
- 128686, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, 0,
- 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 917627,
- 78084, 41443, 0, 128206, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567,
- 41442, 3988, 0, 78237, 118910, 0, 65274, 8564, 78199, 78238, 127515, 0,
- 0, 43446, 0, 66513, 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814,
- 0, 4488, 0, 127336, 68451, 10444, 118846, 127334, 11799, 74407, 68466,
- 4487, 127849, 42832, 1032, 120267, 43450, 78257, 7203, 0, 614, 78191,
- 127325, 120615, 0, 78262, 128669, 127323, 0, 43121, 0, 0, 92513, 1050,
- 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 127313, 0, 66504, 0, 0,
- 2307, 0, 64333, 127312, 128547, 73873, 0, 0, 0, 127973, 128708, 0, 10360,
- 6746, 0, 92245, 440, 0, 13085, 9233, 74216, 0, 0, 9957, 0, 66447, 8046,
- 64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0,
- 12527, 0, 7970, 0, 128660, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237,
- 69714, 0, 10103, 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0,
- 12087, 0, 55231, 41103, 0, 64565, 4773, 0, 92717, 0, 4770, 0, 917567,
- 8731, 65378, 127362, 120619, 9122, 128033, 0, 4774, 3019, 9997, 12834, 0,
- 9456, 10215, 120547, 0, 0, 0, 0, 74776, 4281, 4768, 0, 41535, 4099, 9017,
- 0, 0, 78095, 0, 78096, 0, 0, 0, 78098, 0, 42814, 880, 0, 0, 128021, 2134,
- 0, 10116, 9877, 92329, 0, 0, 7095, 0, 74116, 6778, 0, 78090, 8243, 2427,
- 128141, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, 0, 1434, 120254, 5637,
- 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, 74437, 1156, 8740,
- 92415, 3782, 64331, 0, 41370, 1014, 8261, 0, 0, 10835, 0, 65536, 0,
- 120463, 0, 7702, 118824, 0, 43010, 65779, 65783, 1150, 10547, 5700, 0,
- 120603, 65383, 2339, 42594, 5697, 118788, 0, 128576, 0, 42257, 5696,
- 92677, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722,
- 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 78067, 0,
- 78818, 92719, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712,
- 10744, 0, 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0,
- 3945, 92589, 0, 0, 0, 0, 78212, 127746, 1020, 73763, 0, 78731, 5648,
- 64748, 194910, 0, 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667,
- 0, 0, 0, 9911, 0, 65020, 10097, 119166, 127145, 0, 118836, 0, 78427,
- 1140, 78426, 0, 10159, 0, 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0,
- 3267, 92291, 0, 10123, 0, 4410, 1041, 10576, 6354, 92581, 580, 74232, 0,
+ 7928, 120354, 983095, 41595, 73730, 0, 42118, 73830, 66042, 10355,
+ 983110, 7875, 0, 41598, 3993, 0, 1545, 40971, 536, 128521, 43029, 0, 0,
+ 65173, 65286, 0, 0, 0, 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 917817,
+ 0, 78194, 64326, 40969, 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0,
+ 65460, 12242, 128513, 8020, 10843, 11554, 0, 0, 8266, 41006, 65722, 0,
+ 10710, 0, 118942, 67667, 64567, 119155, 195091, 0, 119636, 67857, 120687,
+ 0, 983066, 11755, 66305, 0, 0, 10917, 93979, 0, 11272, 2040, 41247,
+ 41326, 195060, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0,
+ 1984, 11830, 0, 92293, 40984, 128306, 9373, 0, 12916, 6284, 0, 41663, 0,
+ 0, 0, 9237, 9385, 41648, 0, 194580, 2299, 41666, 1830, 73783, 2056,
+ 41287, 92610, 0, 0, 42219, 128257, 0, 41987, 41676, 983059, 120823,
+ 983144, 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451,
+ 983111, 128822, 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133,
+ 64368, 983233, 128795, 0, 397, 43622, 42139, 9547, 9590, 128238, 1614,
+ 43661, 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 78112, 10982,
+ 118831, 1333, 7104, 407, 6425, 128834, 74253, 0, 0, 0, 5804, 11976, 8554,
+ 92721, 0, 0, 9057, 42294, 41218, 0, 0, 78137, 1883, 10952, 8048, 78142,
+ 41225, 92621, 42915, 983667, 128684, 0, 4407, 0, 65809, 119074, 194821,
+ 8448, 7141, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, 55273,
+ 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 119158,
+ 7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042, 8709, 128283,
+ 126477, 120637, 42419, 64799, 42047, 0, 0, 8470, 11807, 65897, 577, 0,
+ 983751, 74300, 0, 127308, 74840, 0, 0, 128791, 92224, 8736, 1414, 42643,
+ 9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 69945,
+ 66315, 2106, 120222, 11273, 0, 43004, 7541, 0, 0, 961, 64307, 66324,
+ 64906, 128591, 3106, 65917, 41284, 1696, 0, 891, 12105, 0, 42624, 12802,
+ 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 194826, 92688, 0, 2322, 120371,
+ 983584, 11449, 128187, 42868, 41285, 3547, 0, 0, 128793, 983390, 43216,
+ 6089, 78682, 0, 120578, 4170, 1029, 127761, 127036, 119224, 42374, 0,
+ 744, 0, 0, 0, 65823, 127826, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 983162,
+ 65136, 127136, 0, 0, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778,
+ 78648, 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, 120580, 0, 0,
+ 6177, 9020, 78652, 78653, 6178, 120249, 120242, 128027, 67673, 2214,
+ 8754, 0, 120237, 2137, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974,
+ 2308, 0, 74149, 0, 2318, 983183, 66361, 8198, 0, 64360, 12601, 42536,
+ 65266, 120827, 74307, 92462, 6970, 5404, 43332, 3667, 7936, 12925,
+ 126989, 6385, 0, 0, 118949, 10874, 65505, 128083, 0, 42053, 2075, 42057,
+ 11083, 42052, 0, 0, 67651, 0, 9665, 92300, 983657, 13181, 0, 0, 0, 70088,
+ 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 94096, 983937,
+ 41148, 8683, 7594, 127519, 0, 119090, 10869, 43458, 41146, 92407, 11441,
+ 0, 3512, 119633, 983700, 8103, 0, 0, 65184, 11780, 41563, 42796, 0,
+ 69742, 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273,
+ 3271, 73804, 64711, 0, 94064, 0, 0, 3804, 13070, 11557, 42044, 0, 1095,
+ 0, 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0,
+ 92486, 917603, 0, 42043, 43232, 66677, 0, 42046, 78241, 4036, 126481, 0,
+ 128213, 194861, 0, 11954, 93978, 1450, 12986, 1340, 0, 65441, 92722, 0,
+ 0, 127772, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190,
+ 3973, 119365, 4575, 41193, 7982, 429, 0, 127194, 0, 194854, 65792, 0,
+ 118968, 6417, 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 128556, 7755,
+ 0, 0, 64548, 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 983659,
+ 1617, 8050, 0, 5015, 0, 119174, 42590, 194871, 1756, 78181, 0, 65768,
+ 6352, 41892, 0, 7555, 13103, 5408, 2817, 1214, 69919, 92335, 983125, 0,
+ 0, 0, 127195, 7957, 8689, 64723, 1056, 42896, 74147, 194813, 0, 55286,
+ 7073, 65850, 12327, 983939, 119028, 0, 0, 0, 2341, 8450, 8484, 8474,
+ 983252, 0, 70079, 8461, 128102, 12153, 12799, 0, 43709, 43708, 9451,
+ 7571, 13073, 0, 0, 681, 983246, 703, 0, 3272, 8781, 12894, 70077, 11709,
+ 92288, 74446, 0, 92532, 0, 11338, 120768, 3276, 0, 0, 65928, 0, 0, 65021,
+ 64795, 74574, 0, 10047, 78814, 3262, 78811, 42711, 0, 0, 68478, 163, 576,
+ 9895, 1655, 78817, 74591, 78815, 78816, 983122, 0, 0, 0, 10039, 0,
+ 983936, 5623, 5717, 5776, 0, 0, 0, 41591, 11036, 65252, 92382, 0, 0, 0,
+ 67848, 0, 0, 0, 8887, 127521, 7295, 11031, 0, 43157, 0, 8946, 10348,
+ 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, 983702, 8810, 74499, 686,
+ 0, 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128,
+ 65118, 0, 119151, 74205, 92651, 0, 2401, 68144, 8792, 983639, 0, 65455,
+ 0, 92246, 0, 119129, 0, 12886, 127920, 66624, 0, 43557, 10300, 10161,
+ 10396, 74135, 983445, 118945, 78118, 73851, 3010, 6441, 78122, 1458,
+ 41475, 128672, 93975, 0, 11479, 0, 120356, 6350, 12864, 69674, 78114,
+ 1061, 64780, 2001, 43111, 55230, 128686, 4052, 0, 7626, 0, 0, 1045, 0,
+ 5631, 41113, 0, 0, 43707, 74127, 0, 0, 8486, 0, 73758, 2335, 4362,
+ 983195, 126561, 69221, 1025, 0, 42625, 917627, 78084, 41443, 0, 128206,
+ 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, 78237,
+ 118910, 0, 65274, 8564, 78199, 78238, 127515, 0, 0, 43446, 0, 66513,
+ 6256, 0, 579, 55218, 10206, 983075, 6375, 2673, 0, 11814, 0, 4488, 0,
+ 127336, 68451, 10444, 118846, 127334, 11799, 74407, 68466, 4487, 127849,
+ 42832, 1032, 120267, 43450, 78257, 7203, 0, 614, 78191, 127325, 120615,
+ 0, 78262, 128669, 127323, 0, 43121, 0, 0, 92513, 1050, 7549, 0, 0, 9314,
+ 0, 0, 120616, 0, 10057, 0, 127313, 0, 66504, 983171, 0, 2307, 0, 64333,
+ 127312, 128547, 73873, 0, 94035, 0, 127973, 128708, 0, 10360, 6746, 0,
+ 92245, 440, 0, 13085, 9233, 74216, 0, 0, 9957, 128285, 66447, 8046,
+ 64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 93965, 10487,
+ 69878, 12527, 0, 7970, 0, 128660, 0, 65769, 5243, 9849, 5239, 65771,
+ 983229, 0, 5237, 69714, 0, 10103, 5247, 4769, 0, 118977, 12873, 2283,
+ 983231, 0, 3008, 4896, 0, 12087, 0, 55231, 41103, 0, 64565, 4773, 0,
+ 92717, 70074, 4770, 0, 917567, 8731, 65378, 127362, 120619, 9122, 128033,
+ 126600, 4774, 3019, 9997, 12834, 0, 9456, 10215, 120547, 0, 0, 0, 0,
+ 74776, 4281, 4768, 0, 41535, 4099, 9017, 0, 0, 78095, 0, 78096, 0, 0, 0,
+ 78098, 0, 42814, 880, 0, 0, 128021, 2134, 0, 10116, 9877, 92329, 0, 0,
+ 7095, 0, 74116, 6778, 0, 78090, 8243, 2427, 128141, 7093, 0, 11585,
+ 195003, 9962, 0, 12223, 0, 0, 1434, 120254, 5637, 11573, 0, 0, 0, 19951,
+ 0, 78121, 0, 0, 55283, 0, 0, 74437, 1156, 8740, 92415, 3782, 64331, 0,
+ 41370, 1014, 8261, 0, 0, 10835, 0, 65536, 0, 120463, 0, 7702, 118824, 0,
+ 43010, 65779, 65783, 1150, 10547, 5700, 0, 120603, 65383, 2339, 42594,
+ 5697, 118788, 0, 128576, 0, 42257, 5696, 92677, 120465, 3862, 9643, 0, 0,
+ 7634, 65167, 9845, 0, 0, 5701, 9722, 41490, 983153, 1426, 68217, 0,
+ 68447, 42204, 55270, 8571, 194991, 78067, 0, 78818, 92719, 43182, 12184,
+ 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, 990, 5647, 0, 7387,
+ 78734, 41114, 11477, 5646, 12879, 11018, 983921, 3945, 92589, 0, 0, 0, 0,
+ 78212, 127746, 1020, 73763, 0, 78731, 5648, 64748, 194910, 78733, 10205,
+ 3545, 983585, 6984, 0, 74051, 983646, 43242, 120458, 2667, 0, 0, 0, 9911,
+ 0, 65020, 10097, 119166, 127145, 983653, 118836, 983739, 78427, 1140,
+ 78426, 0, 10159, 0, 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267,
+ 92291, 0, 10123, 0, 4410, 1041, 10576, 6354, 92581, 580, 74232, 0,
128347, 0, 0, 0, 19938, 65906, 127819, 0, 0, 3298, 5375, 10142, 0, 8215,
- 0, 6134, 41246, 64402, 0, 128215, 0, 0, 0, 41382, 0, 128653, 5173, 65348,
+ 0, 6134, 41246, 64402, 0, 69899, 0, 0, 0, 41382, 0, 128653, 5173, 65348,
527, 0, 0, 92612, 128250, 78797, 11915, 0, 0, 10072, 0, 42695, 2329,
- 42250, 0, 128864, 69667, 12245, 1568, 0, 0, 0, 128120, 0, 74328, 92708,
- 74769, 0, 119087, 9069, 6144, 0, 0, 73822, 0, 128010, 64917, 41521,
- 118934, 494, 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0,
- 0, 66449, 13263, 74281, 69217, 13171, 127796, 0, 0, 92294, 0, 1044,
- 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 917847,
- 68197, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566,
- 42696, 0, 3016, 42274, 43464, 66490, 12921, 66571, 78472, 92510, 3006,
- 4620, 127237, 0, 0, 0, 64659, 0, 127749, 55253, 6357, 6362, 8626, 0, 0,
- 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0, 43813, 1053, 0, 78269,
- 0, 0, 1052, 1051, 459, 1060, 74349, 66479, 0, 0, 0, 0, 42490, 689, 6508,
- 4163, 42298, 8639, 66641, 4246, 0, 0, 12130, 0, 42337, 64596, 64375,
- 66481, 127850, 0, 0, 6359, 0, 43471, 0, 0, 0, 127274, 0, 6358, 6361,
- 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069, 5830, 0, 43685, 0, 0, 0,
- 0, 8693, 78611, 119565, 0, 120413, 0, 127257, 65894, 0, 0, 0, 0, 0, 0,
- 119187, 2135, 78868, 0, 0, 78869, 42313, 5579, 92412, 0, 0, 0, 0, 5578,
- 41774, 128115, 42023, 6234, 5669, 92275, 0, 0, 0, 127506, 68202, 5583, 0,
- 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795,
- 65512, 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370,
- 0, 2931, 1638, 10966, 10188, 65878, 118848, 0, 69694, 0, 128830, 8172,
- 42017, 0, 10844, 0, 128195, 92424, 6374, 0, 0, 286, 78023, 1062, 0,
- 119999, 0, 7395, 0, 1070, 64900, 7153, 6095, 41865, 0, 3015, 128023,
- 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, 128829, 0,
- 118874, 42102, 41585, 128202, 0, 42101, 276, 78402, 0, 33, 74226, 127303,
- 9007, 118796, 41588, 66033, 427, 10763, 118819, 0, 127884, 0, 1031, 6257,
- 0, 42104, 0, 0, 2328, 92409, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0,
- 64790, 0, 69723, 10651, 0, 0, 0, 0, 92206, 119181, 5711, 41633, 12098,
- 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611,
- 41623, 195001, 5715, 69654, 0, 0, 5712, 2761, 41620, 68124, 3074, 5722,
- 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, 6479,
- 0, 0, 0, 78607, 9196, 69670, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010,
- 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0,
- 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0,
- 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0,
- 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0,
- 9218, 1731, 0, 0, 0, 195010, 0, 0, 0, 120001, 127018, 92492, 5155, 0,
- 5358, 0, 0, 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116,
- 43253, 65943, 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601,
- 12205, 0, 0, 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0,
- 10156, 12119, 92572, 0, 2544, 65074, 119211, 0, 0, 78011, 351, 119149, 0,
- 0, 55229, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0,
- 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 92219,
- 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, 5586, 118890, 0,
- 11356, 0, 0, 43452, 78609, 0, 42573, 67856, 0, 78129, 0, 0, 92535, 8135,
- 6450, 10055, 77996, 0, 0, 0, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939,
- 92573, 120799, 0, 0, 5652, 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0,
- 74509, 0, 5659, 0, 127510, 66729, 5655, 0, 42168, 0, 1055, 917628,
- 127792, 66310, 74030, 0, 12146, 73955, 73956, 11618, 0, 126990, 0, 10272,
- 10304, 10368, 42518, 594, 10244, 10248, 7407, 0, 64870, 0, 3467, 0, 0,
- 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 0, 69696,
- 69769, 64656, 0, 0, 194837, 0, 5666, 65227, 5318, 63994, 0, 9091, 10798,
- 0, 128166, 10186, 0, 7732, 0, 64556, 0, 0, 5668, 74445, 0, 0, 5670, 0,
- 127297, 11820, 2992, 7826, 5667, 19952, 120807, 0, 12749, 74551, 0, 0,
- 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, 13247, 0, 7973,
- 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, 0, 128554,
- 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0,
- 0, 64905, 0, 9512, 120671, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219,
- 128832, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0,
- 127270, 0, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 0,
- 69815, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373,
- 2986, 78292, 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657,
- 41561, 78299, 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0,
- 0, 41637, 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0,
- 5486, 0, 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0,
- 0, 1144, 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964,
- 8652, 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 67621, 119934, 9000,
- 0, 0, 92673, 1865, 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0,
- 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0,
- 8186, 9807, 74269, 0, 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0,
- 11704, 0, 92583, 10211, 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623,
- 7118, 0, 9133, 74262, 0, 1042, 0, 64779, 12171, 119240, 6185, 64776,
- 4984, 0, 708, 11391, 0, 12241, 92720, 0, 1308, 0, 2534, 810, 0, 0, 0, 0,
- 0, 1917, 3000, 0, 0, 120739, 2364, 92443, 74470, 66618, 65680, 0, 10027,
- 0, 128154, 12337, 120722, 127368, 0, 2980, 755, 69774, 931, 13124, 68182,
- 6363, 2748, 0, 0, 65041, 0, 44011, 8730, 0, 127854, 78312, 7274, 119250,
- 0, 7275, 78304, 935, 0, 65840, 377, 42325, 11649, 127363, 65253, 64301,
- 128835, 78308, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0,
- 194998, 0, 10673, 119217, 7248, 0, 128346, 1781, 5496, 3627, 62, 1649, 0,
- 964, 0, 127876, 78226, 128775, 127512, 0, 0, 0, 0, 43689, 127911, 13142,
- 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454,
- 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 92724,
- 6478, 9898, 43673, 65237, 6241, 7106, 4877, 0, 6238, 0, 10548, 127049,
- 4409, 0, 0, 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231,
+ 42250, 0, 128864, 69667, 12245, 1568, 94033, 0, 0, 128120, 0, 74328,
+ 92708, 74769, 0, 119087, 9069, 6144, 0, 0, 73822, 0, 128010, 64917,
+ 41521, 118934, 494, 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740,
+ 73734, 0, 0, 0, 66449, 13263, 74281, 69217, 13171, 127796, 0, 0, 92294,
+ 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526,
+ 11829, 68197, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 983446, 7098, 0,
+ 0, 1057, 566, 42696, 0, 3016, 42274, 43464, 66490, 12921, 66571, 78472,
+ 92510, 3006, 4620, 127237, 983578, 0, 0, 64659, 0, 127749, 55253, 6357,
+ 6362, 8626, 71337, 2216, 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0,
+ 43813, 1053, 0, 78269, 0, 126586, 1052, 1051, 459, 1060, 74349, 66479, 0,
+ 0, 0, 0, 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, 0, 0, 12130,
+ 0, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983759, 0,
+ 0, 127274, 0, 6358, 6361, 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069,
+ 5830, 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 983799, 120413, 0,
+ 127257, 65894, 0, 0, 0, 983914, 0, 0, 119187, 2135, 78868, 0, 0, 78869,
+ 42313, 5579, 92412, 0, 983082, 94002, 0, 5578, 41774, 128115, 42023,
+ 6234, 5669, 92275, 0, 0, 0, 127506, 68202, 5583, 0, 0, 42426, 5580,
+ 42276, 2923, 892, 2220, 42465, 41330, 194987, 5795, 65512, 119006, 65702,
+ 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, 2931, 1638, 10966,
+ 10188, 65878, 118848, 0, 69694, 69879, 128830, 8172, 42017, 0, 10844, 0,
+ 128195, 92424, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, 1070,
+ 64900, 7153, 6095, 41865, 0, 3015, 128023, 126465, 5211, 983083, 6400, 0,
+ 194983, 70054, 8189, 11276, 0, 0, 372, 128829, 0, 118874, 42102, 41585,
+ 128202, 0, 42101, 276, 78402, 0, 33, 74226, 127303, 9007, 118796, 41588,
+ 66033, 427, 10763, 118819, 0, 127884, 0, 1031, 6257, 0, 42104, 0, 983971,
+ 2328, 92409, 1071, 42899, 0, 74848, 0, 983580, 0, 1047, 0, 0, 64790, 0,
+ 69723, 10651, 0, 0, 0, 0, 92206, 119181, 5711, 41633, 12098, 65571, 9166,
+ 0, 5710, 0, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611, 41623, 195001,
+ 5715, 69654, 0, 0, 5712, 2761, 41620, 68124, 3074, 5722, 0, 8643, 73768,
+ 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, 6479, 0, 0, 0, 78607,
+ 9196, 69670, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, 8701, 68130,
+ 119616, 120522, 0, 42477, 194994, 12123, 4495, 43569, 0, 0, 0, 64946,
+ 10992, 0, 120009, 0, 0, 9318, 93986, 13249, 65679, 73808, 0, 65457,
+ 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, 983957,
+ 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, 9218,
+ 1731, 0, 983737, 0, 67990, 0, 0, 0, 120001, 127018, 92492, 5155, 120000,
+ 5358, 983735, 0, 917767, 64424, 983225, 3840, 64314, 41432, 0, 78315,
+ 68430, 67980, 43253, 65943, 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109,
+ 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, 67978, 74842, 983276,
+ 983712, 12149, 13088, 551, 0, 10156, 12119, 92572, 0, 2544, 65074,
+ 119211, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, 0, 42377,
+ 0, 0, 0, 983915, 0, 9013, 4054, 0, 983570, 0, 0, 73960, 5585, 65881,
+ 2549, 74469, 0, 0, 5584, 8358, 0, 64215, 92219, 10919, 0, 7980, 126601,
+ 983775, 2218, 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0,
+ 43452, 78609, 0, 42573, 67856, 0, 78129, 0, 0, 74392, 8135, 6450, 10055,
+ 77996, 0, 0, 119225, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 92573,
+ 120799, 0, 0, 5652, 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509,
+ 983843, 5659, 0, 78692, 66729, 5655, 0, 42168, 0, 1055, 917628, 127792,
+ 66310, 74030, 0, 12146, 73955, 73956, 11618, 0, 126990, 0, 10272, 10304,
+ 10368, 42518, 594, 10244, 10248, 7407, 983878, 64870, 0, 3467, 983882, 0,
+ 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 70036,
+ 69696, 69769, 64656, 983717, 0, 94020, 70056, 5666, 65227, 5318, 63994,
+ 0, 9091, 10798, 0, 128166, 10186, 0, 7732, 983715, 64556, 0, 0, 5668,
+ 74445, 0, 128663, 5670, 126610, 127297, 11820, 2992, 7826, 5667, 19952,
+ 120807, 0, 12749, 74551, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497,
+ 128286, 94004, 0, 0, 3571, 13247, 0, 7973, 66353, 68435, 78278, 67896,
+ 43192, 0, 78265, 553, 120653, 0, 128554, 5829, 0, 4587, 78285, 65912, 0,
+ 12746, 0, 0, 119924, 5633, 119927, 94101, 94102, 94099, 64905, 94105,
+ 9512, 94103, 12742, 6443, 983797, 0, 9135, 0, 41564, 0, 55219, 128832,
+ 983842, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270,
+ 0, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 983800,
+ 69815, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, 5635,
+ 3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0,
+ 1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, 78303, 983676, 78300,
+ 42227, 0, 0, 41637, 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705,
+ 5642, 0, 5486, 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 0, 1058,
+ 0, 67630, 0, 0, 1144, 78750, 0, 42228, 0, 73890, 118972, 0, 2800, 0,
+ 5645, 64964, 8652, 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 67621,
+ 119934, 9000, 0, 0, 92673, 1865, 0, 5613, 69950, 0, 0, 5610, 0, 0, 65826,
+ 2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 65376,
+ 2412, 0, 8186, 9807, 74269, 92547, 13130, 65874, 0, 5807, 0, 10030, 5306,
+ 12364, 128064, 0, 11704, 0, 92583, 10211, 0, 0, 0, 0, 11706, 9710, 0, 0,
+ 0, 413, 65623, 7118, 0, 9133, 74262, 0, 1042, 0, 64779, 12171, 119240,
+ 6185, 64776, 4984, 0, 708, 11391, 0, 12241, 92720, 983890, 1308, 0, 2534,
+ 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 92443, 74470, 66618,
+ 65680, 120779, 10027, 0, 128154, 12337, 120722, 127368, 983167, 2980,
+ 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 92276, 44011,
+ 8730, 983067, 127854, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840,
+ 377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, 42341, 65284,
+ 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0,
+ 128346, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 127876, 78226, 128775,
+ 127512, 0, 0, 0, 0, 43689, 127911, 13142, 78812, 42415, 66575, 4542,
+ 69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, 983909,
+ 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 92724, 6478, 9898,
+ 43673, 65237, 6241, 7106, 4877, 983786, 6238, 0, 10548, 127049, 4409, 0,
+ 0, 64798, 0, 5346, 0, 94047, 6237, 4874, 0, 9176, 0, 126553, 65231,
65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685,
0, 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 127820, 43635,
- 73928, 127529, 0, 0, 0, 128510, 65482, 0, 9142, 0, 0, 0, 10938, 0,
+ 73928, 127529, 0, 0, 0, 128510, 65482, 0, 9142, 0, 126470, 0, 10938, 0,
118790, 1182, 2542, 4826, 0, 0, 128176, 529, 8580, 0, 0, 10586, 10790,
- 10839, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376,
+ 10839, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, 0, 0, 983929, 11376,
74379, 10721, 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305,
- 0, 41873, 120575, 11324, 120531, 0, 8420, 64918, 128844, 41871, 41338,
- 3734, 7734, 43683, 8750, 66605, 66011, 0, 40965, 127937, 0, 5161, 10572,
- 0, 0, 0, 64349, 7287, 42162, 127552, 0, 0, 11948, 69220, 12359, 43429,
- 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, 0, 9870, 68645,
- 8620, 65824, 0, 11938, 0, 7285, 0, 119577, 42678, 0, 43677, 41583, 0,
- 65799, 92623, 0, 0, 0, 78169, 66199, 0, 3609, 68624, 0, 832, 120693,
- 120770, 78473, 66007, 78471, 65703, 0, 0, 42732, 5180, 92699, 41395,
- 41530, 11691, 64773, 92214, 74002, 0, 0, 128645, 6348, 243, 13200, 0,
- 6024, 92309, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, 66195,
- 0, 4230, 0, 13307, 43256, 92353, 7563, 42376, 0, 68442, 120512, 0, 0,
- 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 128277, 2603, 0,
- 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, 66453, 1016, 41107, 0,
- 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 2074, 0, 78283, 0, 12453,
- 128128, 0, 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 92358,
- 66637, 7995, 8759, 43421, 78277, 12449, 128552, 0, 0, 8752, 3197, 4720,
- 10165, 0, 119249, 0, 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934,
- 1946, 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0,
- 69734, 2960, 73779, 0, 8969, 128117, 43424, 127059, 0, 2950, 119579,
- 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 69230, 0, 0, 65688, 0, 5063,
- 3517, 2964, 43663, 917762, 6344, 74791, 10566, 10144, 66333, 8252, 729,
- 66016, 78253, 0, 0, 64923, 128040, 43669, 9032, 78263, 78264, 0, 41215,
- 0, 65883, 0, 917774, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850,
- 128191, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 127555, 43691, 41197, 0, 8978,
- 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, 127536,
- 65241, 5336, 0, 128786, 663, 0, 10780, 0, 0, 78767, 0, 127163, 68193,
- 347, 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143,
+ 120183, 41873, 120575, 11324, 120531, 0, 8420, 64918, 128844, 41871,
+ 41338, 3734, 7734, 43683, 8750, 66605, 66011, 92514, 40965, 127937, 0,
+ 5161, 10572, 0, 0, 0, 64349, 7287, 42162, 127552, 0, 126605, 11948,
+ 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031,
+ 0, 9870, 68645, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, 42678, 0,
+ 43677, 41583, 0, 65799, 92623, 0, 0, 983927, 78169, 66199, 0, 3609,
+ 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, 42732,
+ 5180, 92699, 41395, 41530, 11691, 64773, 92214, 74002, 0, 0, 128645,
+ 6348, 243, 13200, 983804, 6024, 92309, 9979, 10037, 41529, 10648, 8538,
+ 43687, 0, 0, 4285, 66195, 0, 4230, 0, 7367, 43256, 92353, 7563, 42376, 0,
+ 68442, 120512, 0, 0, 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311,
+ 65589, 128277, 2603, 0, 0, 0, 70047, 0, 6022, 0, 2884, 0, 11620, 0, 43,
+ 0, 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0,
+ 2074, 0, 78283, 0, 12453, 128128, 983817, 74241, 126568, 6791, 12457,
+ 78268, 0, 0, 0, 78279, 0, 0, 92358, 66637, 7995, 8759, 43421, 78277,
+ 12449, 128552, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, 11595, 64893,
+ 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, 4639, 983147,
+ 1990, 66589, 4498, 78664, 119183, 0, 0, 69734, 2960, 73779, 0, 8969,
+ 128117, 43424, 127059, 0, 2950, 119579, 6210, 65753, 370, 0, 0, 0, 4953,
+ 983673, 0, 0, 0, 69230, 0, 0, 65688, 983240, 5063, 3517, 2964, 43663,
+ 917762, 6344, 74791, 10566, 10144, 66333, 8252, 729, 66016, 78253, 0,
+ 71317, 64923, 128040, 43669, 9032, 78263, 78264, 0, 41215, 0, 65883, 0,
+ 917774, 120602, 3761, 0, 0, 70068, 0, 12912, 119012, 3850, 128191, 0, 0,
+ 0, 0, 908, 0, 8611, 0, 0, 127555, 43691, 41197, 0, 8978, 120540, 119135,
+ 41586, 10527, 0, 917848, 3848, 78739, 194937, 127536, 65241, 5336,
+ 983251, 128786, 663, 0, 10780, 0, 0, 78767, 983249, 127163, 68193, 347,
+ 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143,
69657, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 128859, 41584, 10681,
- 0, 0, 73938, 0, 128022, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609,
- 10434, 0, 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172,
- 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 69651, 0,
- 41140, 1209, 73978, 0, 73750, 1073, 6321, 77878, 41138, 0, 68213, 0,
- 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237, 78787, 66314,
- 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, 0, 0, 64398, 0,
- 119970, 12311, 0, 78796, 78798, 78794, 78795, 68434, 78793, 66670, 0, 0,
- 12290, 120169, 0, 119873, 42142, 9968, 8205, 0, 5131, 0, 9627, 78536,
- 78542, 78535, 0, 1944, 1248, 10148, 127755, 119990, 119991, 12701, 78376,
- 11308, 119995, 0, 119997, 119998, 65305, 65100, 4031, 42794, 120003,
- 7075, 8154, 119985, 120007, 41817, 73934, 42275, 120011, 120012, 78526,
- 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, 64332, 0, 7813,
- 9064, 119986, 10124, 7526, 8601, 7281, 78455, 7279, 12041, 1418, 10885,
- 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, 10933, 0,
- 77870, 0, 0, 0, 41599, 0, 128831, 0, 12950, 92160, 3486, 0, 78311, 4239,
- 0, 127799, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673,
- 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 9935, 0,
- 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120,
- 41736, 92546, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539,
- 127284, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272,
- 7115, 66030, 73932, 5498, 73942, 41536, 0, 68204, 92587, 3459, 8997, 0,
- 0, 0, 0, 92512, 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0,
- 92223, 127856, 78742, 9016, 43454, 63903, 63902, 43641, 0, 3971, 0,
- 73972, 2952, 78765, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332,
- 63887, 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882,
- 41198, 8555, 63878, 63877, 42460, 6050, 42708, 63881, 63872, 0, 42421, 0,
- 41723, 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0,
+ 0, 983686, 73938, 0, 128022, 4800, 66661, 0, 66306, 64715, 78534, 9518,
+ 6609, 10434, 0, 11319, 1097, 0, 917850, 41730, 983212, 0, 73847, 78761,
+ 65172, 41728, 41721, 0, 0, 0, 41203, 917612, 13110, 41726, 983846, 0,
+ 1000, 69651, 0, 41140, 1209, 73978, 0, 73750, 1073, 6321, 77878, 41138,
+ 0, 68213, 0, 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237,
+ 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, 0, 0,
+ 64398, 0, 119970, 12311, 983718, 78796, 78798, 78794, 78795, 68434,
+ 78793, 66670, 0, 0, 12290, 120169, 0, 119873, 42142, 9968, 8205, 0, 5131,
+ 0, 9627, 78536, 78542, 78535, 983210, 1944, 1248, 10148, 127755, 119990,
+ 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, 65100,
+ 4031, 42794, 120003, 7075, 8154, 119985, 120007, 41817, 73934, 42275,
+ 120011, 120012, 78526, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364,
+ 0, 0, 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 78455, 7279,
+ 12041, 1418, 10885, 12673, 0, 0, 9660, 983272, 13012, 4571, 0, 0, 120164,
+ 12078, 2970, 0, 10933, 0, 77870, 0, 127015, 0, 41599, 0, 128831, 0,
+ 12950, 92160, 3486, 0, 78311, 4239, 0, 127799, 66511, 0, 2637, 64629,
+ 8460, 127053, 8476, 983966, 0, 0, 0, 65673, 1019, 78495, 4148, 0, 12289,
+ 0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 0, 73864, 983201, 41734,
+ 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, 92546,
+ 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, 0, 73963,
+ 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, 7115, 66030,
+ 73932, 5498, 73942, 41536, 0, 68204, 92587, 3459, 8997, 0, 0, 0, 0,
+ 92512, 0, 66377, 69781, 0, 983690, 78511, 3161, 295, 120207, 0, 92223,
+ 127856, 78742, 9016, 43454, 63903, 63902, 43641, 0, 3971, 0, 70063, 2952,
+ 78765, 11038, 10901, 63900, 63899, 63898, 94043, 667, 12332, 63887, 6086,
+ 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, 8555,
+ 63878, 63877, 42460, 6050, 42708, 63881, 63872, 0, 42421, 0, 41723,
+ 63875, 63874, 11460, 7432, 1913, 41913, 63852, 126636, 0, 42348, 73892,
6752, 446, 41911, 127906, 63851, 63850, 41910, 0, 63846, 2972, 12932,
7262, 0, 63849, 63848, 63847, 128070, 6570, 8302, 7259, 63842, 4178,
10746, 7250, 13214, 10041, 8105, 63892, 0, 118983, 1105, 4180, 0, 12094,
9497, 0, 63891, 63890, 63889, 63888, 5538, 9987, 0, 118932, 1678, 13274,
552, 120654, 44010, 10785, 0, 119170, 4557, 74459, 9159, 10171, 13125,
63860, 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568,
- 63857, 1388, 74169, 0, 1077, 0, 65099, 11531, 5834, 0, 0, 0, 0, 42773, 0,
- 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, 0, 5334, 65081, 43249,
- 74778, 127968, 11077, 0, 6509, 0, 5327, 0, 19907, 63869, 3478, 7583,
- 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, 1915, 4846, 0,
- 66371, 118984, 42105, 2990, 120128, 805, 69238, 64438, 12070, 8760, 1117,
- 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, 78240, 12225,
- 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, 63820, 63819,
- 63818, 0, 5227, 9047, 63822, 127162, 6091, 0, 10691, 560, 5643, 8226,
- 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, 6047,
- 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, 1093,
- 9882, 63934, 2082, 63932, 128150, 63929, 3546, 1605, 77934, 9806, 43472,
- 77933, 8400, 11343, 2086, 0, 63926, 2984, 5968, 9287, 0, 4618, 42209,
- 43431, 13169, 5290, 2089, 1695, 10743, 1088, 63825, 7268, 1084, 1085,
- 63829, 1083, 10131, 7283, 0, 63970, 128358, 1092, 4754, 7273, 5252,
- 44016, 43627, 127921, 0, 7408, 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089,
- 4187, 63937, 42119, 42120, 0, 940, 5787, 10099, 63938, 0, 74494, 12463,
- 2994, 0, 118827, 0, 9664, 77939, 77940, 67892, 77938, 74343, 0, 0, 660,
- 10127, 666, 9022, 5532, 43667, 5533, 77941, 78507, 6118, 222, 979, 3884,
- 0, 74151, 92652, 6502, 0, 127118, 128695, 63951, 12465, 0, 0, 128782,
- 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038,
- 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 127773, 120444, 69730,
- 801, 43165, 1690, 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906,
- 2054, 2334, 78515, 63916, 5483, 63914, 69737, 63911, 5484, 63909, 63908,
- 2539, 0, 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0,
- 68208, 0, 9203, 74231, 0, 11530, 92542, 68668, 0, 128816, 0, 10474,
- 43426, 13257, 42354, 0, 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0,
- 13209, 64470, 65831, 78460, 195063, 0, 0, 0, 0, 0, 0, 0, 128133, 127767,
- 66608, 3111, 41863, 8804, 42913, 92187, 7270, 0, 66606, 6628, 1076, 7433,
- 1436, 73844, 55226, 128353, 63982, 7393, 12807, 43413, 63906, 1598,
- 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 128698, 0, 6218, 0,
- 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, 74032, 11549, 10735,
- 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0,
- 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 127149,
- 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0,
- 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 68464,
- 12633, 12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, 74251, 0,
- 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, 0, 13259, 4448, 0,
- 0, 0, 0, 67853, 0, 10640, 11539, 1151, 0, 917607, 127544, 127079, 195050,
- 127852, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, 11538, 8673,
- 12650, 11020, 0, 66467, 2105, 8087, 78163, 69632, 9894, 0, 0, 0, 4636,
- 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 128284, 12277, 194627,
- 11995, 92553, 0, 12158, 0, 8741, 10197, 0, 92426, 0, 6531, 0, 127846,
- 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716,
- 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058,
- 128863, 13295, 43191, 128030, 0, 1154, 3857, 1205, 0, 0, 13100, 12958,
- 120706, 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0,
- 6347, 0, 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290,
- 119180, 4997, 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0,
- 8044, 74834, 194643, 41789, 128142, 10809, 0, 0, 0, 1779, 6600, 6601,
- 41543, 5325, 642, 64187, 13058, 120449, 12875, 0, 92186, 13229, 0, 10575,
- 43399, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428,
- 6569, 0, 0, 0, 0, 6783, 0, 12993, 8049, 41548, 44021, 6458, 0, 128882,
- 4761, 63828, 4766, 64623, 1273, 43407, 0, 118876, 195045, 6912, 1313,
- 6322, 10483, 0, 41545, 0, 92449, 0, 0, 0, 0, 78624, 3484, 74337, 0, 0,
- 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, 41537, 69683, 8303, 8282, 11817,
- 73857, 10003, 73859, 65904, 194663, 1686, 0, 78406, 11467, 3664, 65921,
- 64299, 194664, 0, 0, 4324, 126, 42246, 119152, 0, 74378, 65926, 7744,
- 194636, 74277, 74302, 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0,
- 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, 2050, 10871, 43199,
- 1102, 0, 42236, 128867, 194667, 11546, 74794, 337, 0, 42591, 8627, 12279,
- 1111, 0, 92161, 4707, 68206, 10143, 7883, 127081, 7880, 4522, 8645, 5704,
- 13010, 0, 8304, 917561, 0, 119575, 0, 0, 66654, 0, 92676, 0, 13008, 0,
- 4385, 0, 13011, 0, 92569, 119161, 13009, 160, 2677, 0, 0, 41793, 65763,
- 74221, 120141, 41792, 42770, 0, 65762, 118829, 43821, 5709, 0, 127177,
- 43816, 0, 0, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791,
- 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 12540,
- 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654,
- 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586,
- 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 92226, 13246,
- 864, 0, 118926, 8972, 0, 7849, 120092, 92533, 13240, 195068, 5192, 4338,
- 0, 10948, 917601, 13199, 92575, 1236, 13208, 13261, 13189, 13188, 120164,
- 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780,
- 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 92168, 0, 917858,
- 11354, 0, 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334,
- 0, 4479, 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 194658,
- 0, 6809, 63786, 6031, 0, 63791, 63790, 1145, 63788, 7910, 63785, 43153,
- 754, 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0,
- 0, 41719, 63758, 3523, 1074, 13258, 9536, 74077, 0, 4427, 74242, 63757,
- 43145, 12217, 63754, 41532, 1349, 63750, 63749, 0, 0, 0, 63753, 63802,
- 41084, 120622, 68133, 41930, 63805, 63804, 43632, 63801, 41082, 8140,
- 63798, 6260, 0, 0, 119225, 63793, 11988, 3898, 128241, 10201, 12238,
- 63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945,
- 0, 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0,
- 0, 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0,
- 64803, 0, 8742, 0, 11053, 128796, 63744, 128107, 0, 7588, 63748, 1693,
- 63746, 43204, 5055, 68426, 917853, 1090, 120679, 128356, 11665, 74133,
- 4558, 65685, 9523, 0, 0, 78681, 11513, 0, 6157, 63775, 63774, 63773,
- 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, 78271, 13006, 64433,
- 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, 0, 0, 0, 92455,
- 7386, 0, 64444, 0, 119863, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916,
- 2918, 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 127829, 65393,
- 0, 74138, 0, 0, 0, 74139, 92712, 65394, 11548, 5270, 0, 65396, 0, 65813,
- 13256, 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0,
- 74259, 3304, 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794,
- 0, 43094, 0, 43650, 0, 0, 9035, 0, 0, 128005, 0, 92207, 68125, 0, 164, 0,
- 0, 0, 6958, 0, 43116, 0, 0, 13245, 0, 0, 127376, 0, 73893, 127756, 12666,
- 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449,
- 11306, 0, 73920, 3180, 0, 63808, 9054, 971, 13062, 0, 0, 65195, 10164,
- 92252, 74428, 0, 78146, 92611, 0, 0, 0, 10045, 12882, 13275, 128161,
- 11057, 0, 13276, 0, 41525, 78150, 7271, 11444, 0, 0, 0, 12229, 41523, 0,
- 43411, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, 73989,
- 68192, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 12292, 0,
- 65479, 0, 41781, 10486, 41480, 43002, 9899, 0, 0, 404, 12821, 3741, 0,
- 5788, 8092, 68212, 41222, 1831, 66020, 3982, 0, 4388, 0, 746, 120784, 0,
- 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430,
- 0, 11700, 4374, 0, 128179, 1364, 0, 8038, 0, 917597, 12868, 69814, 0,
- 6735, 73979, 13174, 73968, 13225, 0, 69808, 65835, 0, 2365, 7841, 0,
- 42855, 118856, 42866, 0, 0, 0, 66438, 41785, 12617, 64172, 13173, 4372,
- 119354, 0, 0, 0, 0, 92402, 128062, 12965, 384, 64512, 10404, 10340,
- 119352, 1556, 5274, 13210, 120125, 10017, 9733, 41787, 0, 126994, 41373,
- 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703,
- 119883, 12861, 4398, 8543, 65618, 128018, 1096, 0, 0, 42688, 12441,
- 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0,
- 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0,
- 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 128123,
- 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, 73849, 0, 43638, 78537,
- 128287, 6261, 119342, 43147, 66570, 1957, 10420, 982, 2756, 13292, 13206,
- 128828, 0, 2925, 73809, 13056, 127559, 13212, 43238, 0, 13190, 13187,
- 92541, 13198, 118793, 0, 5242, 119179, 64476, 1694, 8216, 0, 6770, 43331,
- 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, 9197, 5246, 119106,
- 13185, 9709, 120323, 120322, 12314, 65616, 5238, 119333, 0, 119337, 5236,
- 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, 41347, 127249, 13235,
- 8842, 41248, 0, 4379, 13239, 12692, 7969, 127266, 7219, 127250, 0,
- 120509, 0, 66224, 734, 2979, 120303, 65619, 9872, 957, 64921, 1846,
- 66631, 41477, 119256, 120310, 74511, 41770, 1670, 6442, 120317, 42446,
- 5379, 120318, 41163, 74832, 120315, 120314, 128025, 0, 42841, 13267, 0,
- 0, 41775, 0, 7130, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 42673, 65572,
- 65293, 65250, 13265, 13264, 64518, 0, 6100, 0, 92647, 5808, 65922, 0,
- 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 128524, 11965, 0, 68358, 0,
- 69789, 0, 92260, 68102, 9698, 7814, 74476, 119651, 128514, 0, 41921,
- 118858, 9756, 6985, 119258, 78490, 74219, 0, 0, 118997, 8012, 5674,
- 12353, 0, 12361, 5677, 5588, 0, 41925, 128124, 41920, 5673, 120534, 5676,
- 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 120725,
- 42436, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, 5826,
- 55232, 5813, 0, 120712, 5841, 5837, 55234, 0, 3105, 12829, 5838, 5796, 0,
- 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649,
- 5806, 42398, 0, 9037, 5671, 120041, 0, 0, 0, 128855, 0, 847, 128242,
- 9529, 0, 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0,
- 120039, 42683, 0, 0, 7114, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0,
- 5651, 2929, 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546,
- 69727, 68141, 8372, 0, 65116, 0, 120022, 10175, 10388, 42799, 0, 41013,
- 10568, 0, 0, 2869, 0, 41015, 194692, 2785, 4366, 0, 10954, 41802, 0,
+ 63857, 1388, 74169, 0, 1077, 983577, 65099, 11531, 5834, 0, 0, 0, 0,
+ 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, 0, 5334, 65081,
+ 43249, 74778, 127968, 11077, 0, 6509, 0, 5327, 0, 19907, 63869, 3478,
+ 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, 78626, 1915,
+ 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 64438, 12070,
+ 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, 78240,
+ 12225, 63838, 63837, 983844, 983795, 63833, 6042, 66360, 8083, 0, 0,
+ 63821, 63820, 63819, 63818, 983895, 5227, 9047, 63822, 127162, 6091, 0,
+ 10691, 560, 5643, 8226, 119578, 63812, 63811, 63810, 63809, 2289, 63815,
+ 63814, 63813, 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168,
+ 63930, 2076, 1093, 9882, 63934, 2082, 63932, 128150, 63929, 3546, 1605,
+ 77934, 9806, 43472, 77933, 8400, 11343, 2086, 0, 63926, 2984, 5968, 9287,
+ 0, 4618, 42209, 43431, 13169, 5290, 2089, 1695, 10743, 1088, 63825, 7268,
+ 1084, 1085, 63829, 1083, 10131, 7283, 0, 63970, 128358, 1092, 4754, 7273,
+ 5252, 44016, 43627, 127921, 0, 7408, 11809, 917618, 0, 0, 2965, 7258,
+ 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, 940, 5787, 10099, 63938, 0,
+ 74494, 12463, 2994, 0, 118827, 0, 9664, 77939, 77940, 67892, 77938,
+ 74343, 0, 0, 660, 10127, 666, 9022, 5532, 43667, 5533, 77941, 78507,
+ 6118, 222, 979, 3884, 0, 74151, 92652, 6502, 0, 127118, 128695, 63951,
+ 12465, 0, 0, 128782, 63946, 1707, 63924, 12461, 63950, 63897, 63948,
+ 63947, 63945, 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, 94076,
+ 0, 127773, 120444, 69730, 801, 43165, 1690, 63919, 63918, 63917, 13277,
+ 43659, 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, 63914, 69737,
+ 63911, 5484, 63909, 63908, 2539, 0, 43980, 5485, 0, 42697, 9061, 5534,
+ 10672, 4502, 0, 253, 0, 68208, 0, 9203, 74231, 0, 11530, 92542, 68668, 0,
+ 118907, 0, 10474, 43426, 13257, 42354, 128099, 983689, 70044, 195065, 0,
+ 8413, 983807, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, 195063, 0, 0,
+ 0, 126639, 0, 0, 94078, 128133, 127767, 66608, 3111, 41863, 8804, 42913,
+ 92187, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 128353,
+ 63982, 7393, 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307,
+ 0, 10515, 41589, 128698, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413,
+ 7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983624, 4518,
+ 10990, 65073, 5167, 4481, 3771, 120158, 2710, 0, 69243, 41724, 0, 43073,
+ 41690, 12479, 983626, 0, 0, 983809, 70046, 1628, 127149, 983479, 983722,
+ 65262, 6333, 10783, 42315, 0, 63855, 94056, 0, 0, 5339, 74323, 0, 13004,
+ 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 68464, 12633,
+ 12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, 74251, 0, 120647,
+ 0, 50, 10558, 9871, 42612, 43655, 0, 0, 0, 66468, 0, 13259, 4448, 0,
+ 983836, 0, 70043, 67853, 0, 10640, 11539, 1151, 0, 917607, 127544,
+ 127079, 195050, 127852, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0,
+ 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 69632, 9894, 0,
+ 0, 0, 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 128284,
+ 12277, 194627, 11995, 92553, 0, 12158, 0, 8741, 10197, 0, 92426, 0, 6531,
+ 0, 127846, 473, 43415, 0, 983641, 1873, 1087, 0, 0, 0, 78527, 66439,
+ 43218, 983123, 194716, 7237, 12504, 74282, 0, 983571, 0, 9489, 0, 0,
+ 4384, 74220, 63845, 2058, 128863, 13295, 43191, 128030, 0, 1154, 3857,
+ 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, 0, 495,
+ 119007, 41712, 7983, 0, 93997, 0, 6347, 120165, 7654, 41710, 4196, 0,
+ 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999,
+ 194642, 0, 126582, 4711, 120769, 0, 2739, 0, 8044, 74834, 194643, 41789,
+ 128142, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058,
+ 120449, 12875, 0, 92186, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, 0,
+ 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 69849, 6783, 0,
+ 12993, 8049, 41548, 44021, 6458, 983798, 128882, 4761, 63828, 4766,
+ 64623, 1273, 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 983603,
+ 41545, 0, 92449, 0, 0, 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527,
+ 0, 66320, 983802, 0, 0, 0, 41537, 69683, 8303, 8282, 11817, 73857, 10003,
+ 73859, 65904, 7363, 1686, 0, 78406, 11467, 3664, 65921, 64299, 194664, 0,
+ 0, 4324, 126, 42246, 119152, 0, 74378, 65926, 7744, 194636, 74277, 74302,
+ 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0,
+ 4765, 983484, 13078, 0, 4760, 63827, 2050, 10871, 43199, 1102, 0, 42236,
+ 128867, 194667, 11546, 74794, 337, 0, 42591, 8627, 12279, 1111, 0, 92161,
+ 4707, 68206, 10143, 7883, 127081, 7880, 4522, 8645, 5704, 13010, 0, 8304,
+ 917561, 0, 119575, 2293, 0, 66654, 0, 92676, 0, 13008, 0, 4385, 0, 13011,
+ 0, 92569, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, 120141,
+ 41792, 42770, 94054, 65762, 118829, 43821, 5709, 0, 94053, 43816, 0, 0,
+ 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791, 4005, 0, 10237,
+ 10991, 128816, 43459, 9173, 917581, 917580, 13170, 12540, 917577, 42605,
+ 120765, 126617, 68647, 917572, 10058, 0, 74867, 194654, 127078, 3339,
+ 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589,
+ 917588, 120541, 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 0,
+ 118926, 8972, 0, 7849, 120092, 92533, 13240, 195068, 5192, 4338, 67982,
+ 10948, 917601, 13199, 92575, 1236, 13208, 13261, 13189, 13188, 93993, 0,
+ 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780,
+ 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 983906, 92168,
+ 983763, 917858, 11354, 94071, 0, 42795, 0, 119195, 11394, 194646, 13236,
+ 13272, 13194, 1334, 69926, 4479, 1178, 65586, 120663, 66681, 119193,
+ 4601, 0, 0, 983756, 0, 0, 194658, 0, 6809, 63786, 6031, 0, 63791, 63790,
+ 1145, 63788, 7910, 63785, 43153, 754, 10192, 13105, 8183, 120741, 2037,
+ 0, 0, 10747, 125, 0, 64890, 0, 983131, 0, 41719, 63758, 3523, 1074,
+ 13258, 9536, 74077, 0, 4427, 74242, 63757, 43145, 12217, 63754, 41532,
+ 1349, 63750, 63749, 0, 0, 0, 63753, 63802, 41084, 120622, 68133, 41930,
+ 63805, 63804, 43632, 63801, 41082, 8140, 63798, 6260, 0, 0, 94074, 63793,
+ 11988, 3898, 128241, 10201, 12238, 63795, 42194, 10367, 12521, 10431,
+ 42114, 41932, 1068, 0, 12523, 12945, 983321, 42203, 7950, 10804, 63771,
+ 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 983119, 12232,
+ 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, 11053,
+ 128796, 63744, 128107, 0, 7588, 63748, 1693, 63746, 43204, 5055, 68426,
+ 917853, 1090, 120679, 128356, 11665, 74133, 4558, 65685, 9523, 0, 0,
+ 78681, 11513, 0, 6157, 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0,
+ 3170, 12485, 0, 10872, 78271, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541,
+ 11063, 0, 8228, 0, 42065, 0, 0, 94039, 0, 92455, 7386, 0, 64444, 0,
+ 119863, 43603, 94075, 65397, 288, 0, 0, 0, 10025, 69915, 2918, 0, 65300,
+ 119871, 9883, 64726, 2790, 65395, 3793, 0, 127829, 65393, 0, 74138, 0, 0,
+ 0, 74139, 92712, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282,
+ 120771, 0, 0, 10888, 983604, 65242, 0, 3330, 0, 0, 983965, 0, 0, 74259,
+ 3304, 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0,
+ 43094, 70023, 43650, 94037, 0, 9035, 0, 0, 128005, 0, 92207, 68125, 0,
+ 164, 0, 94067, 94000, 6958, 0, 43116, 0, 70019, 13245, 0, 0, 127376, 0,
+ 70031, 127756, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0,
+ 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, 971, 13062, 0, 0,
+ 65195, 10164, 92252, 74428, 0, 78146, 92611, 0, 0, 0, 10045, 12882,
+ 13275, 128161, 11057, 0, 13276, 0, 41525, 78150, 7271, 11444, 0, 0, 0,
+ 12229, 41523, 0, 43411, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932,
+ 64958, 0, 0, 73989, 68192, 0, 69847, 369, 0, 41784, 0, 64163, 0, 0, 0,
+ 65474, 4796, 12292, 126595, 65479, 0, 41781, 10486, 41480, 43002, 9899,
+ 0, 0, 404, 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 3982,
+ 0, 4388, 0, 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708,
+ 3799, 74292, 119357, 0, 74430, 0, 11700, 4374, 0, 128179, 1364, 0, 8038,
+ 0, 917597, 12868, 69814, 0, 6735, 73979, 13174, 73968, 13225, 0, 69808,
+ 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, 66438, 41785,
+ 12617, 64172, 13173, 4372, 119354, 0, 983568, 0, 0, 92402, 128062, 12965,
+ 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 120125, 10017, 9733,
+ 41787, 983237, 126994, 41373, 78039, 12303, 0, 13232, 13233, 349, 4863,
+ 41371, 11656, 0, 120703, 119883, 12861, 4398, 8543, 65618, 128018, 1096,
+ 0, 0, 42688, 12441, 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243,
+ 13237, 12719, 126646, 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864,
+ 0, 120785, 119874, 94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 0,
+ 119879, 66590, 128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536,
+ 73849, 0, 43638, 78537, 128287, 6261, 119342, 43147, 66570, 1957, 10420,
+ 982, 2756, 13292, 13206, 128828, 0, 2925, 73809, 13056, 127559, 13212,
+ 43238, 0, 13190, 13187, 92541, 13198, 118793, 0, 5242, 119179, 64476,
+ 1694, 8216, 71369, 6770, 43331, 0, 65620, 983719, 43544, 126466, 0,
+ 41444, 65621, 69955, 9197, 5246, 119106, 13185, 9709, 120323, 120322,
+ 12314, 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286,
+ 128537, 3936, 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379,
+ 13239, 12692, 7969, 127266, 7219, 127250, 128251, 120509, 0, 66224, 734,
+ 2979, 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, 119256,
+ 120310, 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, 41163,
+ 74832, 120315, 120314, 11506, 0, 42841, 13267, 0, 0, 41775, 0, 7130,
+ 41773, 0, 10663, 0, 0, 0, 6151, 12110, 42673, 65572, 65293, 65250, 13265,
+ 13264, 64518, 0, 6100, 0, 92647, 5808, 65922, 0, 12967, 66041, 5612,
+ 4583, 0, 0, 68097, 64575, 126637, 11965, 0, 68358, 0, 69789, 0, 92260,
+ 68102, 9698, 7814, 74476, 119651, 128514, 0, 41921, 118858, 9756, 6985,
+ 119258, 78490, 74219, 0, 0, 118997, 8012, 5674, 12353, 0, 12361, 5677,
+ 5588, 0, 41925, 128124, 41920, 5673, 120534, 5676, 41923, 12694, 118978,
+ 5672, 1294, 0, 78059, 0, 42511, 1727, 120725, 42436, 0, 0, 0, 74222,
+ 8718, 3550, 736, 10268, 4505, 10316, 74090, 5826, 55232, 5813, 0, 120712,
+ 5841, 5837, 55234, 0, 3105, 12829, 5838, 5796, 0, 119592, 5793, 0, 5866,
+ 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, 5806, 42398, 0, 9037,
+ 5671, 120041, 0, 0, 0, 128855, 0, 847, 128242, 9529, 0, 66657, 6980,
+ 78483, 120035, 78484, 983483, 0, 120033, 78486, 0, 0, 120039, 42683, 0,
+ 983055, 7114, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929,
+ 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69727,
+ 68141, 8372, 0, 65116, 0, 120022, 10175, 10388, 42799, 94100, 41013,
+ 10568, 0, 983618, 2869, 0, 41015, 194692, 2785, 4366, 0, 10954, 41802, 0,
42608, 78469, 9884, 4759, 0, 0, 10266, 41359, 1170, 43365, 69810, 73908,
1609, 902, 0, 63936, 128875, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028,
- 2554, 5158, 5714, 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553,
- 0, 42155, 0, 41356, 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941,
- 5798, 9349, 42018, 127858, 0, 0, 43609, 5906, 120553, 1440, 0, 128853,
- 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, 0, 43393, 10094, 0,
- 11529, 10857, 120643, 66436, 6546, 93, 8102, 0, 68405, 0, 0, 8171, 0,
- 119097, 127064, 917543, 383, 7154, 41656, 92634, 0, 0, 5187, 0, 127277,
- 11286, 68620, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074,
- 4980, 8860, 73947, 10028, 65291, 7076, 13182, 194705, 0, 0, 10631, 66031,
- 7972, 0, 78785, 0, 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 9995, 0,
- 92552, 0, 12931, 0, 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238,
- 74771, 0, 0, 12836, 0, 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0,
- 65865, 0, 194650, 127144, 0, 9342, 120464, 0, 64516, 0, 78792, 10129,
- 41007, 74375, 0, 40995, 12209, 41012, 119136, 0, 0, 69724, 40992, 92264,
- 127153, 68653, 43558, 5522, 0, 61, 0, 74105, 3633, 0, 65162, 41234,
- 12089, 78281, 9771, 0, 13251, 128701, 0, 6262, 2784, 42743, 0, 8126,
- 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 7108, 194779,
- 10890, 74481, 65834, 8324, 119103, 64417, 74817, 127465, 64737, 0, 0,
- 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0,
- 0, 77904, 92640, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, 10338,
- 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, 911, 7539,
- 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, 42812, 0, 0,
- 12326, 0, 0, 42808, 128337, 9348, 64901, 0, 0, 0, 0, 0, 0, 917584, 43702,
- 0, 5857, 65342, 92727, 119120, 120079, 8644, 0, 0, 0, 74296, 41909, 0,
- 120332, 2791, 69663, 1891, 69824, 0, 41907, 66647, 118939, 8761, 12942,
- 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 127185,
- 63931, 0, 65902, 2882, 0, 0, 12843, 4520, 120345, 92459, 0, 0, 0, 73860,
- 0, 0, 64345, 0, 9201, 128314, 194940, 0, 0, 43679, 917585, 65117, 92270,
- 0, 10427, 0, 3844, 120675, 9755, 1110, 6612, 12222, 0, 128789, 0, 0, 783,
- 194935, 0, 0, 0, 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933,
- 74250, 0, 67657, 10510, 4382, 66482, 0, 0, 127527, 9177, 8902, 0, 9839,
- 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155,
- 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 66017, 4508, 64883,
- 92456, 92522, 127814, 0, 64592, 74276, 120080, 6784, 78788, 68181, 0, 0,
- 0, 127534, 12147, 9024, 66378, 66472, 0, 64289, 65289, 78151, 66658,
- 194929, 64509, 78152, 0, 0, 11051, 0, 0, 11355, 65885, 0, 128310, 41214,
- 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, 68649, 0, 4040, 120570, 6167,
- 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, 63990, 19947, 63988,
- 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, 63986, 11446, 63984,
- 92641, 3435, 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748,
- 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, 63954, 63953,
- 63960, 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 0,
- 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, 0,
- 65551, 68205, 6633, 43387, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0,
- 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961,
- 4472, 0, 0, 78159, 69699, 917936, 42340, 4756, 128078, 7081, 10730, 7691,
- 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565,
- 10539, 69701, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992,
- 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189,
- 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973,
- 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0,
- 11302, 6259, 43395, 0, 0, 194670, 0, 92351, 0, 74425, 11299, 1561, 0,
- 92359, 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060,
- 0, 0, 119664, 5145, 12486, 65018, 66516, 5409, 127379, 194669, 7402,
- 5399, 9685, 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 127875,
- 64866, 0, 119583, 128345, 78784, 74248, 11330, 194723, 64690, 3254, 0, 0,
- 0, 42390, 43678, 194725, 0, 65077, 0, 6388, 3355, 9508, 9867, 5723,
- 11520, 5611, 0, 3377, 0, 0, 0, 0, 78228, 0, 0, 42691, 917886, 127198,
- 74767, 0, 127075, 1379, 246, 0, 0, 3788, 0, 11041, 92549, 66304, 0, 0,
- 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, 65214, 119242, 42567,
- 92217, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, 65889, 42169, 4755,
- 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, 3934, 64206, 11483,
- 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, 42482, 485, 128006,
- 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0,
- 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 120633, 43539, 5411,
- 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, 10643,
- 55271, 0, 12166, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, 74310,
+ 2554, 5158, 5714, 2213, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0,
+ 42155, 0, 41356, 74110, 118801, 126614, 0, 8676, 983283, 0, 5582, 451,
+ 63941, 5798, 9349, 42018, 127858, 0, 0, 43609, 5906, 120553, 1440, 0,
+ 128853, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, 0, 43393,
+ 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 8102, 0, 68405, 0, 0,
+ 8171, 0, 119097, 127064, 917543, 383, 7154, 41656, 92634, 94040, 0, 5187,
+ 71296, 127277, 11286, 68620, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0,
+ 983818, 8292, 195074, 4980, 8860, 73947, 10028, 65291, 7076, 13182,
+ 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, 7900, 0, 11309, 3806,
+ 4198, 42725, 0, 67656, 9995, 0, 92552, 0, 12931, 0, 42684, 74285, 2088,
+ 64213, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, 0, 74342, 8593,
+ 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 127144, 0, 9342,
+ 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, 12209, 41012,
+ 119136, 0, 0, 69724, 40992, 92264, 127153, 68653, 43558, 5522, 0, 61, 0,
+ 74105, 3633, 983891, 65162, 41234, 12089, 78281, 9771, 983896, 13251,
+ 128701, 0, 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0,
+ 41002, 40999, 119623, 43266, 7108, 194779, 10890, 74481, 65834, 8324,
+ 119103, 64417, 74817, 127465, 64737, 0, 983650, 8930, 66678, 74249, 1193,
+ 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 77904, 92640, 77905,
+ 9034, 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0,
+ 41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, 0, 0, 120339, 65159,
+ 64390, 0, 0, 5520, 11662, 0, 65330, 42812, 0, 0, 12326, 983847, 0, 42808,
+ 128337, 9348, 64901, 983852, 0, 0, 0, 0, 0, 917584, 43702, 983576, 5857,
+ 65342, 92727, 119120, 120079, 8644, 0, 0, 0, 74296, 41909, 0, 120332,
+ 2791, 69663, 1891, 69824, 0, 41907, 66647, 118939, 8761, 12942, 5748, 0,
+ 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 127185, 63931, 0,
+ 65902, 2882, 0, 0, 12843, 4520, 120345, 92459, 0, 983651, 0, 73860, 0, 0,
+ 64345, 0, 9201, 128314, 194940, 0, 0, 43679, 917585, 65117, 92270, 0,
+ 10427, 0, 3844, 120675, 9755, 1110, 6612, 12222, 0, 128789, 0, 0, 783,
+ 194935, 0, 0, 983064, 194720, 65056, 3620, 41180, 68378, 4556, 0, 0,
+ 194933, 74250, 0, 67657, 10510, 4382, 66482, 0, 0, 127527, 9177, 8902,
+ 93958, 9839, 0, 12891, 983746, 983627, 63999, 2016, 41917, 9788, 63928,
+ 0, 1862, 65800, 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0,
+ 66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, 74276, 120080, 6784,
+ 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, 983920, 64289,
+ 65289, 78151, 66658, 194929, 64509, 78152, 0, 126505, 11051, 983288, 0,
+ 11355, 65885, 0, 128310, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0,
+ 9963, 68649, 126609, 4040, 120570, 6167, 0, 63922, 6594, 983731, 0, 0,
+ 3624, 43036, 0, 6387, 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611,
+ 65605, 6803, 0, 7738, 63986, 11446, 63984, 92641, 3435, 78164, 43814,
+ 43810, 7029, 64258, 41292, 118898, 12748, 42742, 9517, 11518, 0, 78790,
+ 0, 67993, 63956, 42458, 63954, 63953, 63960, 9591, 4516, 10217, 68370,
+ 11469, 69697, 42306, 2723, 118947, 0, 0, 0, 0, 0, 11397, 2880, 0, 0,
+ 2872, 0, 0, 3498, 4378, 917539, 4270, 0, 65551, 68205, 6633, 43387, 0,
+ 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, 0, 126479, 415, 63964, 63963,
+ 42345, 92310, 5183, 1877, 42498, 0, 2927, 0, 63961, 4472, 0, 0, 78159,
+ 69699, 917936, 42340, 4756, 128078, 7081, 10730, 7691, 10331, 63830,
+ 119625, 42922, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 69701,
+ 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980,
+ 11801, 3622, 983124, 64336, 12017, 10463, 63981, 4967, 64189, 1966,
+ 43628, 0, 983284, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973,
+ 402, 0, 13147, 128692, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805,
+ 0, 11302, 6259, 43395, 0, 0, 194670, 0, 92351, 0, 74425, 11299, 1561, 0,
+ 92359, 64942, 983559, 194733, 983677, 194732, 0, 74301, 0, 11280, 0,
+ 69784, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, 5409, 127379,
+ 194669, 7402, 5399, 9685, 74089, 7952, 5401, 0, 66616, 68421, 983910, 0,
+ 5405, 127875, 64866, 0, 119583, 128345, 78784, 74248, 11330, 194723,
+ 64690, 3254, 0, 0, 128207, 42390, 43678, 194725, 983900, 65077, 0, 6388,
+ 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, 0, 78228, 0,
+ 983753, 42691, 917886, 127198, 74767, 0, 127075, 1379, 246, 0, 983752,
+ 3788, 983106, 11041, 92549, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0,
+ 983688, 10656, 0, 65214, 119242, 42567, 92217, 13163, 983202, 120831,
+ 74597, 3182, 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194621, 11443, 0,
+ 66319, 74598, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 0, 74485,
+ 42442, 65470, 983898, 64202, 13160, 7759, 42482, 485, 128006, 0, 9828, 0,
+ 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, 119631,
+ 11002, 42470, 0, 118946, 0, 0, 74041, 0, 70045, 43539, 5411, 42196, 0, 0,
+ 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, 10643, 55271,
+ 983179, 12166, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, 74310,
6554, 0, 11914, 5452, 0, 0, 0, 0, 0, 194681, 92560, 2713, 0, 9650, 43330,
0, 194675, 1406, 0, 0, 92659, 0, 68223, 4143, 194677, 0, 65748, 4141,
9682, 65287, 1508, 127013, 8779, 10569, 8725, 13299, 66638, 65750, 42263,
4145, 6380, 65751, 66613, 43994, 65738, 55250, 9185, 9550, 0, 43403, 0,
- 0, 0, 65736, 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657,
- 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 43552, 7501, 6328, 0,
- 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632,
- 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0,
- 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854,
- 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868,
- 128813, 13158, 92166, 7211, 0, 9371, 73973, 0, 6828, 1625, 92302, 0,
- 1342, 68440, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 128569, 0,
- 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0,
- 78025, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, 128282, 1149,
- 194970, 0, 0, 40990, 0, 0, 3492, 0, 127942, 0, 0, 0, 12838, 0, 19948, 0,
- 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 41309, 0, 0, 8152, 0, 64428,
- 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, 10386, 119574, 0, 0,
- 92680, 0, 68154, 0, 1743, 0, 0, 92239, 65186, 0, 0, 9606, 0, 0, 64439, 0,
- 0, 92686, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, 0,
- 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 127017, 6119, 12822, 42699, 0, 0,
- 74818, 5396, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0,
- 11929, 0, 7170, 9596, 6130, 128826, 43629, 11579, 194741, 0, 194740,
- 128691, 92185, 66699, 64440, 1004, 92584, 194737, 43234, 66008, 12627, 0,
- 68414, 0, 43619, 43382, 11300, 43304, 9686, 5890, 11776, 7558, 127158,
- 65627, 0, 10718, 13154, 3461, 9139, 0, 0, 0, 0, 65365, 73877, 65628,
- 78019, 0, 0, 41708, 12860, 2641, 12069, 10838, 5403, 10352, 73917, 10061,
- 43237, 0, 5140, 209, 128847, 41704, 41056, 43078, 128125, 118809, 0,
- 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 78693, 0, 0, 7232,
- 0, 119253, 0, 7110, 74462, 2066, 10489, 42166, 43463, 10659, 3600, 0,
- 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0,
- 0, 0, 272, 4263, 8793, 0, 0, 41502, 0, 983, 12549, 0, 0, 1190, 4109,
- 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 0, 0, 2099, 5120, 2409,
- 7799, 0, 74424, 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0,
- 0, 64914, 917787, 65101, 0, 11694, 92475, 11690, 5835, 127164, 66625,
- 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0,
- 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 128858, 0, 0, 10695, 0,
- 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321,
- 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142,
- 92328, 74152, 119078, 6051, 10497, 69668, 8985, 12109, 0, 0, 0, 0, 0,
- 3652, 10537, 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0,
- 3899, 1007, 42124, 0, 42122, 92337, 0, 0, 11985, 1345, 78600, 0, 0, 8956,
- 43083, 119830, 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603,
- 78612, 78613, 65942, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470,
- 64538, 7444, 78615, 78616, 41550, 0, 73837, 119823, 2527, 119824, 197,
- 2799, 92594, 41944, 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0,
- 119827, 119817, 119828, 78633, 10896, 0, 1799, 120497, 6971, 74336,
- 128342, 0, 65340, 118979, 41551, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407,
- 0, 6338, 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0,
- 3171, 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, 74390, 64603, 0,
- 69241, 9599, 78629, 43084, 78627, 78628, 78625, 2399, 69693, 8994, 10944,
- 41208, 0, 41168, 8178, 0, 3367, 92334, 42510, 78641, 78636, 6804, 78634,
- 1947, 0, 0, 92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, 65359, 0,
- 8017, 0, 65096, 66720, 0, 43475, 0, 4909, 12126, 128673, 120696, 4904, 0,
+ 0, 0, 65736, 41951, 64816, 65756, 983203, 12955, 10596, 2888, 194645, 0,
+ 0, 9657, 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 43552, 7501,
+ 6328, 0, 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986,
+ 126542, 10632, 11934, 11452, 1332, 0, 0, 126647, 0, 118887, 1791, 5191,
+ 9288, 64822, 2892, 0, 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512,
+ 7289, 74055, 64161, 8854, 64162, 5858, 41927, 10582, 0, 1784, 1361,
+ 195047, 0, 7905, 0, 64868, 128813, 13158, 92166, 7211, 0, 9371, 73973,
+ 917553, 6828, 1625, 92302, 0, 1342, 68440, 64171, 126704, 10903, 983486,
+ 0, 0, 0, 0, 4482, 41606, 0, 128569, 983112, 0, 64381, 0, 0, 195090,
+ 42245, 126467, 41972, 0, 444, 0, 9127, 66687, 66619, 126489, 78025, 0,
+ 11349, 40991, 917570, 0, 119599, 120830, 0, 1197, 128282, 1149, 194970,
+ 0, 0, 40990, 43765, 0, 3492, 0, 127942, 0, 0, 0, 12838, 983969, 19948, 0,
+ 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 41309, 0, 0, 8152, 0, 41550,
+ 12227, 983613, 0, 12828, 127511, 0, 0, 120708, 0, 0, 10386, 119574, 0, 0,
+ 92680, 983780, 68154, 0, 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 0,
+ 64439, 0, 0, 92686, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362,
+ 64830, 0, 126557, 41091, 3426, 1344, 8870, 0, 0, 4735, 127017, 6119,
+ 12822, 42699, 0, 983815, 74818, 1423, 0, 42637, 41080, 0, 12039, 10559,
+ 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 128826, 43629, 11579,
+ 78713, 0, 194740, 128691, 92185, 66699, 64440, 1004, 92584, 194737,
+ 43234, 66008, 12627, 0, 68414, 0, 43619, 43303, 11300, 43304, 9686, 5890,
+ 11776, 7558, 127158, 65627, 0, 10718, 13154, 3461, 9139, 0, 0, 0, 0,
+ 65365, 73877, 65628, 78019, 120319, 0, 41708, 12860, 2641, 12069, 10838,
+ 5403, 10352, 70085, 10061, 43237, 0, 5140, 209, 128847, 41704, 41056,
+ 43078, 128125, 118809, 0, 10899, 65469, 92362, 0, 0, 2410, 993, 0,
+ 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 0, 7110, 74462, 2066,
+ 10489, 42166, 43463, 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0,
+ 41139, 64820, 92538, 12966, 41134, 0, 0, 0, 0, 272, 4263, 8793, 0, 0,
+ 41502, 0, 983, 12549, 0, 0, 1190, 4109, 1335, 841, 5888, 41358, 64863,
+ 9544, 43481, 0, 194806, 70027, 2099, 5120, 2409, 7799, 0, 74424, 0, 0,
+ 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 64914, 917787,
+ 65101, 0, 11694, 92475, 11690, 5835, 127164, 66625, 10842, 41354, 42123,
+ 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, 0, 9972, 73865, 4519,
+ 6114, 10898, 43072, 0, 0, 93960, 983314, 126581, 10695, 0, 7540, 0, 881,
+ 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, 12689,
+ 0, 194594, 0, 983304, 983872, 68183, 0, 983306, 1287, 5436, 0, 983309,
+ 74142, 92328, 74152, 119078, 6051, 10497, 69668, 8985, 12109, 983315, 0,
+ 127242, 0, 0, 3652, 10537, 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0,
+ 1489, 0, 0, 0, 3899, 1007, 42124, 983557, 42122, 92337, 92367, 0, 11985,
+ 1345, 78600, 0, 0, 8956, 43083, 94057, 42138, 78610, 0, 12151, 78608,
+ 78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, 8685, 0, 983750, 0,
+ 78622, 43712, 2582, 11470, 64538, 7444, 78615, 78616, 2297, 0, 73837,
+ 119823, 2527, 119824, 197, 2799, 92594, 41944, 120276, 9933, 0, 66515,
+ 767, 5524, 7028, 0, 0, 119827, 119817, 119828, 78633, 10896, 0, 1799,
+ 120497, 6971, 74336, 128342, 0, 65340, 118979, 41551, 2434, 94018, 0,
+ 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, 3192, 0, 8414,
+ 0, 93983, 0, 0, 0, 9164, 66612, 93959, 3171, 6623, 4961, 68396, 886,
+ 55216, 8654, 78832, 9993, 74390, 64603, 70066, 69241, 9599, 78629, 43084,
+ 78627, 78628, 78625, 2399, 69693, 8994, 10944, 41208, 983704, 41168,
+ 8178, 0, 3367, 92334, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0,
+ 92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 119831,
+ 65096, 66720, 0, 43475, 0, 4909, 12126, 128673, 120696, 4904, 983325,
69650, 1365, 9253, 42757, 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0,
- 5398, 0, 127386, 0, 0, 0, 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0,
- 13005, 0, 3628, 0, 0, 92502, 3469, 42107, 42116, 917578, 64809, 2928,
- 4905, 9853, 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906,
- 3852, 2847, 119821, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0,
- 43222, 12646, 120269, 10259, 9865, 65821, 0, 6018, 92290, 0, 12276, 0,
- 68372, 0, 92259, 119244, 0, 0, 10467, 0, 2443, 10918, 78217, 119825,
- 1001, 9241, 1927, 0, 0, 73987, 127885, 0, 0, 118828, 120271, 65678,
- 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, 518, 65857, 0, 128674,
- 13204, 4387, 857, 0, 65369, 0, 92336, 43125, 120592, 0, 0, 0, 0, 5136,
- 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, 12877, 0,
- 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 128147, 43082, 6016, 0,
- 42284, 128507, 4276, 1206, 3619, 41638, 69691, 3843, 12011, 8853, 3361,
- 0, 490, 10715, 7578, 68384, 0, 65350, 10530, 12348, 8653, 74314, 42435,
- 6154, 9551, 65354, 78522, 784, 42397, 334, 0, 42416, 65356, 65273, 77987,
- 69666, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, 127275,
- 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, 0, 5415,
- 12176, 0, 74193, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, 78324,
- 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, 4051,
- 10460, 43364, 118917, 1356, 12161, 42713, 128857, 127268, 1619, 9703,
- 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305,
- 64907, 5289, 13144, 128658, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0,
- 0, 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759,
- 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178,
- 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557,
- 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0,
- 7651, 10296, 64443, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392,
- 10328, 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239,
- 6487, 3386, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200,
- 128583, 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0,
- 65338, 0, 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 128098,
- 1369, 0, 9959, 7927, 0, 4560, 0, 0, 92277, 0, 64948, 4430, 74347, 42601,
- 4514, 66434, 0, 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341,
- 0, 65829, 7925, 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279,
- 127102, 68207, 127100, 65605, 6040, 127097, 10071, 0, 9336, 128824, 0,
- 8899, 7798, 64474, 64259, 0, 65188, 7820, 43018, 0, 0, 7746, 1492, 78551,
- 10884, 77982, 0, 5127, 11285, 42501, 5495, 4273, 43095, 41426, 10849,
- 5730, 2999, 6342, 68636, 74304, 371, 64373, 6023, 169, 5497, 11708, 0, 0,
- 6323, 194684, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 194798, 0, 2589,
- 74332, 1689, 7802, 4683, 74318, 42704, 120296, 11905, 0, 0, 128516,
- 128163, 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731,
- 1381, 2387, 0, 0, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 9668,
- 9766, 0, 5729, 917833, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0,
- 3526, 6298, 0, 77897, 120095, 78519, 0, 8572, 6021, 77896, 128288, 77895,
+ 5398, 0, 127386, 93953, 0, 0, 119015, 0, 0, 9476, 0, 983768, 12763,
+ 126603, 3629, 0, 13005, 0, 3628, 0, 0, 92502, 3469, 42107, 42116, 917578,
+ 64809, 2928, 4905, 9853, 851, 9040, 0, 64665, 43086, 9114, 0, 42583,
+ 9315, 4822, 4906, 3852, 2847, 119821, 3236, 11317, 1251, 7777, 41852,
+ 11410, 10964, 0, 43222, 12646, 120269, 10259, 9865, 65821, 0, 6018,
+ 92290, 0, 12276, 0, 68372, 0, 92259, 119244, 0, 983224, 10467, 0, 2443,
+ 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 127885, 0, 0,
+ 118828, 120271, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904,
+ 518, 65857, 0, 128674, 13204, 4387, 857, 0, 65369, 0, 92336, 43125,
+ 120592, 0, 0, 0, 0, 5136, 1968, 983041, 126627, 1337, 64967, 1629, 0,
+ 796, 66506, 0, 74123, 12877, 120649, 42314, 43388, 0, 74403, 6120, 478,
+ 65151, 68128, 128147, 43082, 6016, 0, 42284, 128507, 4276, 1206, 3619,
+ 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, 68384, 0,
+ 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, 65354, 78522, 784,
+ 42397, 334, 0, 42416, 65356, 65273, 77987, 69666, 4442, 10364, 0, 778,
+ 41626, 42455, 7989, 74063, 3227, 69907, 127275, 73983, 2915, 11502,
+ 41022, 41702, 10309, 127035, 78320, 0, 6975, 0, 5415, 12176, 0, 74193,
+ 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, 70057, 127254, 8114,
+ 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, 4051, 10460, 43364,
+ 118917, 1356, 12161, 42713, 128857, 127268, 1619, 9703, 43152, 42489,
+ 42112, 127978, 1875, 10808, 42109, 120284, 41860, 64862, 13305, 64907,
+ 5289, 13144, 128658, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 983269,
+ 119830, 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151,
+ 73759, 43100, 69888, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753,
+ 65178, 4684, 78701, 119653, 0, 126551, 0, 6048, 74460, 42110, 73965,
+ 10870, 8557, 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731,
+ 6035, 0, 7651, 10296, 64443, 0, 983287, 917987, 0, 118966, 74144, 40997,
+ 0, 10392, 10328, 40998, 43462, 74488, 0, 9800, 8979, 0, 13307, 41000, 0,
+ 119239, 6487, 3386, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505,
+ 41200, 128583, 4425, 0, 0, 0, 43074, 73799, 983200, 78147, 0, 12173,
+ 78545, 0, 127011, 65338, 0, 0, 119582, 4474, 0, 43093, 128644, 1587, 0,
+ 127372, 64475, 128098, 1369, 983663, 9959, 7927, 0, 4560, 0, 0, 92277, 0,
+ 64948, 4430, 74347, 42601, 4514, 66434, 93955, 8194, 65462, 10626, 10965,
+ 0, 8893, 983293, 12542, 0, 65341, 0, 65829, 7925, 119822, 10475, 0, 0,
+ 1352, 11069, 7707, 127560, 126486, 65279, 127102, 68207, 127100, 7099,
+ 6040, 127097, 10071, 0, 9336, 43750, 0, 8899, 7798, 64474, 64259, 69873,
+ 65188, 7820, 43018, 127082, 0, 7746, 1492, 78551, 10884, 77982, 0, 5127,
+ 11285, 42501, 5495, 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636,
+ 74304, 371, 64373, 6023, 169, 5497, 11708, 0, 0, 6323, 194684, 8224, 0,
+ 8938, 6043, 12738, 0, 983076, 5321, 0, 194798, 0, 2589, 74332, 1689,
+ 7802, 4683, 74318, 42704, 120296, 11905, 0, 0, 128516, 128163, 74513,
+ 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 71312, 5731, 1381, 2387,
+ 0, 0, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 9668, 9766, 0,
+ 5729, 917833, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526,
+ 6298, 0, 77897, 120095, 78519, 0, 8572, 6021, 77896, 128288, 77895,
43155, 0, 119849, 3146, 10959, 9483, 0, 77893, 10981, 166, 917841, 8635,
- 0, 10623, 408, 119058, 127507, 13298, 0, 7426, 41641, 12717, 0, 7607,
- 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 10221, 41645, 66712,
- 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, 8697, 0, 0, 0, 0, 0, 0,
- 5809, 1950, 119356, 92432, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854,
- 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 194624, 0,
- 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 92592, 0, 41727, 0,
- 42848, 2396, 917766, 0, 74018, 917538, 64940, 7027, 3886, 0, 42457,
- 119008, 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939,
- 92454, 92460, 127801, 917592, 128359, 8534, 127154, 40983, 0, 0, 0, 7201,
- 12561, 0, 42371, 12558, 0, 917549, 10052, 40982, 0, 0, 1488, 0, 0, 0,
- 917559, 0, 0, 1563, 128034, 9619, 0, 0, 0, 127872, 0, 5803, 7797, 6070,
- 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 128703, 0, 41412, 0, 0, 3607,
- 9200, 10046, 9612, 42153, 8218, 9485, 0, 2032, 78354, 0, 0, 0, 0, 0,
- 43085, 6057, 508, 128585, 128015, 120265, 0, 92405, 0, 0, 638, 6083,
- 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, 3915,
- 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 92690, 3249,
- 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, 119350,
- 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, 73764, 0,
- 92376, 12745, 9678, 0, 120587, 9869, 128815, 1771, 0, 8936, 0, 0, 4208,
- 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 92422, 77997, 128788,
- 66475, 0, 5027, 78172, 128878, 0, 5069, 73862, 5028, 9897, 0, 73739,
- 5026, 0, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138,
- 119361, 0, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440,
- 78215, 1562, 128656, 127175, 119358, 1716, 0, 10600, 917867, 620, 41001,
- 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 0, 5025, 128269, 0, 0,
- 119328, 0, 65557, 0, 74541, 0, 11599, 128209, 11602, 6243, 11574, 11581,
- 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, 127096, 5755,
- 2636, 0, 10815, 11619, 78717, 41540, 7815, 11616, 6979, 12080, 7721,
- 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, 829, 0, 92406, 19950, 0,
- 128217, 6616, 0, 118875, 10953, 391, 0, 69785, 482, 42296, 11588, 0,
- 43606, 0, 68397, 66370, 74506, 42335, 0, 0, 0, 7538, 5315, 120644, 42491,
- 0, 42061, 128088, 4576, 0, 68417, 43809, 4277, 0, 4039, 64472, 42338,
- 368, 42058, 3960, 11043, 11337, 78209, 917820, 63989, 3958, 12132, 1849,
- 0, 9921, 42451, 4253, 41147, 42064, 11959, 42404, 41160, 0, 3618, 78338,
- 0, 43300, 5156, 92629, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, 66435,
- 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 128794, 41661,
- 78715, 43267, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0,
- 128522, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627,
- 917923, 8763, 128304, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0,
- 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924,
- 1576, 7735, 92398, 0, 73840, 0, 11374, 78043, 10889, 43461, 7757, 42462,
- 120226, 10029, 66493, 2718, 4168, 73842, 13308, 120112, 0, 1179, 4440, 0,
- 77948, 363, 11015, 77947, 77944, 64296, 127090, 66692, 120826, 0, 66492,
- 6593, 64625, 41963, 92177, 119329, 0, 10013, 64434, 92520, 127095, 9492,
- 11782, 64382, 12833, 77830, 0, 1297, 41630, 630, 127094, 0, 120774,
- 92465, 1043, 43652, 66223, 10090, 0, 128664, 313, 917563, 41881, 0,
- 42311, 7445, 0, 5750, 10759, 9419, 55222, 9405, 11268, 42919, 9398, 8526,
- 9399, 9422, 0, 66495, 0, 0, 127239, 41718, 10707, 1603, 0, 119003, 0,
- 631, 77952, 69703, 13161, 65272, 0, 10546, 74210, 78101, 11600, 77961,
- 2797, 73821, 42427, 306, 714, 3058, 42381, 77962, 127080, 12351, 42395,
- 0, 11607, 0, 42282, 77971, 77967, 9157, 73765, 66364, 42433, 77964, 7603,
- 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, 362, 92439, 0, 8037,
- 43777, 11535, 0, 74845, 5185, 7165, 5521, 10334, 2093, 77983, 10302,
- 128112, 10104, 1027, 5181, 0, 0, 10523, 1446, 42320, 41646, 991, 5189,
- 42472, 41647, 120105, 1722, 5581, 77979, 3405, 0, 194644, 5523, 0, 42620,
- 92447, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, 77910, 120026, 78708, 0,
- 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, 0, 1174, 77981, 42733,
- 77978, 77980, 66485, 77977, 42277, 77974, 42456, 65667, 127037, 12330,
- 128272, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, 74443, 0,
- 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, 65871,
- 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, 693,
- 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, 64154,
- 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, 12824, 0,
- 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, 3757, 0,
- 0, 0, 65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, 7921, 0,
- 74095, 127981, 41848, 2567, 66006, 0, 4044, 92646, 0, 12233, 0, 1023,
- 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 92518, 9835,
- 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133,
- 128008, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 92695,
- 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, 65583, 65802, 0,
- 64597, 43444, 119184, 92197, 0, 6464, 7036, 2996, 1937, 0, 0, 41835,
- 4047, 41842, 0, 64107, 0, 0, 11017, 0, 0, 293, 77966, 92169, 64791,
- 41827, 42466, 43422, 10579, 8560, 0, 65413, 77963, 4803, 12964, 1739,
- 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098,
- 64105, 128080, 42481, 11716, 66473, 7179, 42289, 0, 64103, 969, 0, 9352,
- 0, 6165, 64100, 0, 6632, 73861, 42402, 74327, 7806, 0, 8914, 0, 0, 3183,
- 1435, 64876, 2969, 6046, 64441, 6208, 67849, 5746, 73749, 0, 64416,
- 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, 42328, 10767, 0, 8115, 0,
- 74758, 0, 8227, 2073, 1218, 0, 0, 65848, 0, 0, 0, 0, 126987, 4486, 0, 0,
- 0, 10925, 0, 0, 0, 0, 42309, 10257, 65191, 10273, 0, 10305, 42461, 0,
- 42349, 8832, 78051, 64127, 10644, 42662, 78828, 42278, 74451, 126988,
- 917857, 7794, 0, 42429, 6377, 42316, 119026, 3669, 3968, 42468, 0, 69658,
- 0, 65402, 119581, 0, 0, 64933, 0, 41960, 6699, 0, 0, 128354, 6823, 42391,
- 1588, 65400, 8409, 78223, 19967, 65398, 787, 0, 917939, 127744, 6115,
- 2078, 41654, 42480, 0, 92650, 41655, 65401, 43975, 0, 0, 0, 644, 65500,
- 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 74457,
- 0, 0, 41554, 0, 8220, 917943, 41557, 0, 0, 11070, 119221, 5157, 4020,
- 73858, 41555, 9514, 64818, 65103, 64641, 64303, 78131, 7520, 0, 74377,
- 11029, 66651, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 127348, 120096,
- 74602, 9955, 119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630,
- 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 127357,
- 78835, 92410, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290,
- 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 128251,
+ 983606, 10623, 408, 119058, 127507, 13298, 0, 7426, 41641, 12717, 0,
+ 7607, 10639, 43396, 0, 0, 41643, 74134, 983054, 8713, 41640, 10221,
+ 41645, 66712, 6645, 646, 66726, 66711, 42129, 93994, 77901, 3472, 8697,
+ 0, 0, 983806, 0, 0, 0, 5809, 1950, 119356, 92432, 74572, 0, 42136, 0, 0,
+ 0, 0, 3247, 119854, 65017, 983944, 68428, 66668, 0, 0, 10983, 0, 0, 0,
+ 41567, 0, 0, 0, 194624, 119853, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0,
+ 40988, 92592, 74809, 41727, 0, 42848, 2396, 917766, 0, 74018, 917538,
+ 64940, 7027, 3886, 0, 42457, 119008, 0, 996, 68123, 94058, 4249, 0,
+ 917594, 11707, 8222, 0, 7939, 92454, 92460, 127801, 917592, 128359, 8534,
+ 127154, 40983, 0, 983234, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549,
+ 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 128034, 9619,
+ 983931, 0, 0, 127872, 71363, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0,
+ 65009, 983933, 12567, 128703, 0, 41412, 0, 0, 3607, 9200, 10046, 9612,
+ 42153, 8218, 9485, 0, 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508,
+ 93968, 128015, 67968, 0, 92405, 0, 0, 638, 6083, 119072, 0, 0, 2305,
+ 78348, 68096, 0, 6056, 6659, 67969, 0, 6085, 0, 0, 3915, 41634, 0, 41639,
+ 63912, 11941, 0, 4028, 1787, 42180, 43096, 43753, 3249, 1768, 93982,
+ 12328, 501, 93985, 10601, 0, 583, 0, 41977, 0, 66004, 119350, 6505,
+ 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, 73764, 0, 92376,
+ 12745, 9678, 0, 120587, 9869, 128815, 1771, 0, 8936, 0, 0, 4208, 78341,
+ 78567, 78342, 0, 983448, 74101, 0, 11762, 0, 92422, 77997, 68010, 66475,
+ 0, 5027, 78172, 128878, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026,
+ 983247, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138,
+ 119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, 0,
+ 3440, 78215, 1562, 128656, 127175, 119358, 1716, 983670, 10600, 917867,
+ 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 0, 5025,
+ 69892, 983207, 0, 118885, 0, 65557, 0, 74541, 983587, 11599, 128209,
+ 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569,
+ 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 2301, 41540, 7815,
+ 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048,
+ 917763, 829, 0, 92406, 19950, 0, 126482, 6616, 0, 118875, 10953, 391, 0,
+ 69785, 482, 42296, 11588, 0, 43606, 0, 68397, 66370, 74506, 42335,
+ 983188, 0, 0, 7538, 5315, 120644, 42491, 0, 42061, 128088, 4576, 0,
+ 68417, 43809, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043,
+ 11337, 78209, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 4253,
+ 41147, 42064, 11959, 42404, 41160, 0, 3618, 78338, 0, 43300, 5156, 92629,
+ 0, 929, 6827, 42035, 42437, 1555, 0, 8691, 66435, 2215, 41662, 94010, 0,
+ 0, 0, 93952, 4578, 64513, 41664, 983725, 42578, 128794, 41661, 78715,
+ 43267, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 983127, 42476, 7730,
+ 983850, 128522, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525,
+ 41627, 917923, 8763, 128304, 41628, 533, 11931, 65225, 8321, 42504,
+ 42581, 0, 6915, 42310, 4377, 8559, 0, 74360, 0, 13193, 64350, 11666,
+ 8679, 41924, 1576, 7735, 92398, 0, 73840, 983092, 11374, 78043, 10889,
+ 43461, 7757, 42462, 120226, 10029, 66493, 2718, 4168, 73842, 13308,
+ 120112, 0, 1179, 4440, 0, 77948, 363, 11015, 77947, 77944, 64296, 127090,
+ 66692, 120826, 0, 66492, 6593, 64625, 41963, 92177, 119329, 0, 10013,
+ 64434, 92520, 127095, 9492, 11782, 64382, 12833, 77830, 0, 1297, 41630,
+ 630, 127094, 0, 120774, 92465, 1043, 43652, 66223, 10090, 0, 128664, 313,
+ 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, 9405, 11268,
+ 42919, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, 10707,
+ 1603, 0, 119003, 0, 631, 77952, 69703, 13161, 65272, 0, 10546, 74210,
+ 78101, 11600, 77961, 2797, 73821, 42427, 306, 714, 3058, 42381, 77962,
+ 127080, 12351, 42395, 0, 11607, 0, 42282, 77971, 77967, 9157, 73765,
+ 66364, 42433, 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674,
+ 8244, 362, 92439, 0, 8037, 43777, 11535, 0, 74845, 5185, 7165, 5521,
+ 10334, 2093, 71329, 10302, 128112, 10104, 1027, 5181, 0, 0, 10523, 1446,
+ 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405,
+ 0, 194644, 5523, 0, 42620, 92447, 983810, 9549, 0, 10549, 55282, 9661,
+ 43682, 0, 77910, 120026, 78708, 0, 77911, 0, 41991, 983884, 0, 7630,
+ 9846, 7684, 10350, 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977,
+ 42277, 77974, 42456, 65667, 127037, 12330, 128272, 0, 42417, 42383,
+ 66630, 41344, 6293, 0, 66252, 77984, 74443, 0, 10209, 8313, 4195, 74435,
+ 1316, 66690, 120032, 6332, 64894, 0, 65871, 78060, 1736, 983675, 3901,
+ 12228, 120151, 65200, 3383, 10446, 78841, 693, 9130, 314, 64149, 42420,
+ 11949, 983660, 120152, 11026, 128788, 5332, 6940, 64154, 12635, 127007,
+ 42706, 1751, 273, 8165, 13166, 120763, 78840, 71368, 12824, 0, 4528,
+ 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, 3757, 0, 0, 0,
+ 65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, 7921, 983859,
+ 74095, 127981, 41848, 2567, 66006, 0, 4044, 92646, 0, 12233, 983862,
+ 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 127866, 42295, 0, 0, 71322,
+ 92518, 9835, 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251,
+ 10118, 3133, 128008, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868,
+ 0, 92695, 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, 65583,
+ 65802, 93970, 64597, 43444, 119184, 92197, 0, 6464, 7036, 2996, 1937,
+ 983742, 0, 41835, 4047, 41842, 0, 64107, 0, 0, 11017, 120601, 0, 293,
+ 77966, 92169, 64791, 41827, 42466, 43422, 10579, 8560, 71350, 65413,
+ 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407,
+ 42441, 41971, 6297, 120098, 64105, 128080, 42481, 11716, 66473, 7179,
+ 42289, 0, 64103, 969, 0, 9352, 0, 6165, 64100, 0, 6632, 73861, 42402,
+ 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 64441, 6208,
+ 67849, 5746, 73749, 0, 64416, 42422, 0, 983046, 7082, 73775, 338, 5059,
+ 194719, 0, 42328, 10767, 0, 8115, 0, 74758, 0, 8227, 2073, 1218, 917790,
+ 0, 65848, 0, 0, 69863, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 983586,
+ 42309, 10257, 65191, 10273, 0, 10305, 42461, 0, 42349, 8832, 78051,
+ 64127, 10644, 42662, 78828, 42278, 74451, 126988, 69874, 7794, 0, 42429,
+ 6377, 42316, 119026, 3669, 3968, 42468, 71319, 69658, 0, 65402, 119581,
+ 0, 0, 64933, 0, 41960, 6699, 0, 0, 128354, 6823, 42391, 1588, 65400,
+ 8409, 78223, 19967, 65398, 787, 71315, 917939, 127744, 6115, 2078, 41654,
+ 42480, 0, 92650, 41655, 65401, 43975, 0, 0, 0, 644, 65500, 41657, 10778,
+ 3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 74457, 0, 0, 41554, 0,
+ 8220, 917943, 41557, 0, 0, 11070, 119221, 5157, 4020, 73858, 41555, 9514,
+ 64818, 65103, 64641, 64303, 78131, 7520, 0, 74377, 11029, 66651, 983068,
+ 0, 118930, 64527, 0, 7877, 73803, 983789, 127348, 120096, 74602, 9955,
+ 119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630, 0, 78631,
+ 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 127357, 78835, 92410,
+ 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0,
+ 8636, 983918, 8315, 65444, 983784, 0, 74595, 6152, 0, 0, 6629, 127108,
120171, 0, 74589, 43993, 0, 69790, 64435, 0, 43690, 11046, 11490, 42730,
4485, 127107, 0, 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0,
12825, 0, 0, 12725, 0, 0, 78642, 223, 0, 69675, 120166, 42444, 0, 64499,
65245, 0, 1171, 0, 69717, 0, 1805, 8772, 43820, 0, 9930, 65247, 78619,
120111, 2338, 0, 118853, 0, 42676, 0, 64800, 65236, 67644, 68126, 1213,
- 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073,
- 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, 65436, 0, 2120,
- 43302, 1224, 0, 65576, 120158, 10701, 1764, 3101, 127815, 12858, 120159,
- 0, 11373, 6378, 127859, 120103, 8663, 9312, 41644, 4539, 2129, 0, 9222,
- 0, 0, 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0,
- 1293, 7947, 2132, 0, 74593, 120308, 2454, 42717, 3613, 128837, 0, 0,
- 65888, 8816, 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 8822, 0,
- 1157, 64903, 8638, 0, 0, 0, 0, 120319, 8235, 120316, 4405, 10086, 120247,
- 0, 69216, 0, 65430, 74013, 6079, 6817, 10764, 127910, 64291, 128051, 998,
- 120312, 11062, 1317, 64327, 1558, 0, 1991, 7882, 42254, 0, 41700, 530, 0,
- 10428, 119335, 12002, 119336, 5742, 43076, 4692, 64630, 41823, 4007,
- 5004, 119334, 7896, 751, 6595, 6596, 0, 66373, 0, 0, 64908, 92691, 6311,
- 0, 12004, 119192, 12049, 43108, 120326, 0, 41705, 92188, 6598, 0, 6599,
- 120334, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, 64745, 0, 0,
- 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, 78871, 120442,
- 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, 43789, 12841,
- 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, 8325, 0,
- 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, 12905,
- 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, 12934,
- 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, 127469,
- 194653, 41696, 467, 69823, 127463, 69797, 0, 0, 8421, 127472, 69682,
- 43705, 502, 0, 65431, 119056, 0, 12043, 1303, 316, 92462, 2029, 2136,
- 119246, 11533, 64365, 43480, 92639, 4860, 194645, 127877, 42488, 0, 9583,
- 128849, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, 5543,
- 77989, 63751, 12137, 5548, 77985, 0, 65727, 68388, 65726, 6077, 128352,
- 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, 0, 1319, 3050, 65410,
- 0, 0, 78016, 78017, 42830, 43996, 66716, 128137, 4691, 92242, 9345, 621,
- 92709, 128222, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474,
- 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716,
- 92363, 9996, 8508, 0, 7012, 8195, 127834, 9566, 0, 3722, 0, 41707, 8493,
- 545, 9575, 41379, 10050, 12718, 0, 8859, 6820, 74345, 65110, 120740, 0,
- 0, 9119, 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 78021,
- 78022, 410, 78020, 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396,
- 10126, 12116, 41673, 120370, 11422, 78141, 120373, 3860, 120367, 68412,
- 41345, 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104,
- 64858, 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 917919,
- 4569, 74130, 0, 43487, 194630, 611, 74129, 64871, 118891, 65629, 0,
- 194858, 0, 0, 127545, 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921,
- 0, 0, 74054, 127754, 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859,
- 64467, 0, 0, 118998, 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0,
- 127936, 804, 0, 0, 12298, 0, 66653, 0, 64924, 10091, 73931, 9468, 74245,
- 0, 0, 74246, 92503, 12839, 64669, 92202, 0, 1279, 1425, 6224, 119229,
- 11049, 0, 92697, 43239, 8482, 92440, 0, 5032, 69677, 11940, 67888, 664,
- 120437, 5034, 0, 0, 127525, 42702, 73888, 0, 13294, 67873, 64869, 6032,
- 0, 9115, 7430, 120377, 0, 120819, 68387, 120168, 73913, 120170, 41161,
- 5518, 4174, 10993, 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034,
- 41164, 64744, 9528, 118867, 128800, 524, 0, 74029, 788, 74027, 0, 194638,
- 0, 1663, 10419, 74025, 42636, 0, 69725, 0, 120656, 0, 67876, 0, 0, 0,
- 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 0, 0, 10855, 5445,
- 9355, 0, 65198, 7391, 8989, 221, 65686, 0, 0, 8010, 7191, 4962, 69772,
- 8855, 0, 0, 64469, 120426, 10555, 0, 43333, 92299, 0, 120427, 10451, 0,
- 67653, 7245, 12443, 74405, 9947, 120149, 78317, 3873, 8367, 0, 120146,
- 43433, 43649, 11987, 0, 0, 11010, 12723, 74059, 74062, 6217, 5896, 0,
- 7682, 74049, 1462, 10235, 0, 0, 0, 0, 0, 0, 42595, 0, 74402, 118860, 0,
- 120419, 92497, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765,
- 73923, 120417, 120662, 120730, 194702, 6216, 0, 10755, 9455, 0, 8124,
- 127042, 9470, 6944, 127540, 0, 69680, 2828, 0, 531, 42638, 0, 0, 0,
- 43428, 8204, 3614, 2827, 9696, 0, 0, 8728, 4354, 10904, 78562, 19936,
- 7833, 120691, 0, 42599, 42597, 42709, 120409, 127044, 0, 8537, 0, 0, 0,
- 0, 0, 41199, 10121, 2028, 0, 0, 69715, 0, 3062, 0, 74447, 12608, 0,
- 66440, 7545, 9700, 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0,
- 12713, 0, 0, 0, 78772, 0, 1734, 0, 0, 127040, 64594, 2456, 231, 0, 74167,
- 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 4446, 10584, 74235, 92215, 4037,
- 127938, 8352, 0, 5687, 0, 64515, 0, 194801, 55265, 67846, 78434, 9704, 0,
- 0, 74284, 128285, 0, 8660, 0, 0, 0, 78773, 74482, 4483, 1709, 69721,
- 9909, 6080, 0, 120358, 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0,
- 4480, 11266, 128152, 1226, 6930, 0, 0, 6360, 10897, 41230, 605, 0, 74785,
- 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, 64943, 74280, 10877,
- 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, 0, 74456, 64606, 9917,
- 0, 92231, 5037, 0, 1776, 8422, 0, 118814, 41508, 41201, 323, 43328, 0,
- 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 128772, 65123, 11293, 2668,
- 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, 4252, 5049, 42659,
- 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, 66702, 0,
- 12670, 1013, 0, 64919, 705, 0, 65422, 127803, 1183, 0, 7017, 42852, 0,
- 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, 0,
- 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, 0,
- 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, 0,
- 7805, 0, 0, 6935, 92292, 78325, 78326, 78323, 43327, 43989, 119046, 8492,
- 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832,
- 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0,
- 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108,
- 120617, 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 917879,
- 12455, 1793, 0, 0, 0, 6643, 92477, 65263, 0, 78330, 41293, 78328, 65923,
- 0, 13219, 9569, 0, 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0,
- 78340, 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324,
- 3360, 78344, 11523, 0, 92488, 9926, 7197, 0, 68429, 42894, 41821, 1249,
- 78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, 43162,
- 41815, 41150, 0, 10571, 10096, 0, 0, 78074, 6947, 41152, 887, 9249, 6565,
- 78510, 41990, 78509, 41811, 74466, 0, 6670, 77882, 0, 0, 43092, 43325, 0,
- 10168, 0, 9781, 128655, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670,
- 127383, 315, 12813, 0, 78432, 78256, 78351, 78352, 0, 0, 0, 0, 1378,
- 9509, 0, 0, 74475, 3066, 92220, 67847, 0, 92355, 0, 78365, 8787, 120379,
- 194616, 41618, 194615, 78261, 194614, 0, 64652, 0, 194612, 0, 78366,
- 42088, 0, 195061, 7176, 128833, 10137, 6121, 10995, 78259, 74534, 8119,
- 64874, 917816, 127199, 194939, 0, 74525, 0, 0, 12930, 1394, 74514, 0,
- 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0,
- 119100, 41236, 92235, 42005, 42003, 41237, 5848, 0, 0, 3670, 128657,
- 194600, 0, 0, 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635,
- 65080, 0, 128002, 4120, 65337, 65336, 0, 11808, 119214, 74115, 9366,
- 42790, 42006, 0, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320,
- 65335, 65334, 65333, 65332, 65331, 42059, 65329, 42689, 92427, 9128,
- 118885, 42073, 6785, 64590, 0, 4371, 7196, 65318, 2035, 65316, 4106,
- 65314, 65313, 42074, 127847, 41228, 0, 65609, 41241, 7903, 41239, 43533,
- 78459, 7189, 0, 0, 0, 12357, 42802, 78450, 8487, 9131, 0, 4615, 12695,
- 127752, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 69762,
- 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, 128263, 13098, 78442,
- 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, 127191, 0, 0,
- 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 92327, 0, 0, 120593,
- 13071, 0, 452, 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, 0,
- 64703, 119191, 42308, 7181, 0, 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187,
- 0, 42628, 78575, 0, 128777, 0, 3240, 128518, 12194, 0, 11591, 41065,
- 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 128856, 571, 0, 4918, 0, 5288,
- 127295, 8916, 65048, 1909, 8864, 0, 0, 10736, 92508, 11571, 7615, 127300,
- 92296, 4237, 92576, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751,
- 11403, 0, 0, 127146, 3796, 6800, 0, 3994, 11421, 0, 195076, 0, 0, 0, 0,
+ 0, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, 5005, 64070,
+ 64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, 65436, 0,
+ 2120, 43302, 1224, 0, 65576, 74192, 10701, 1764, 3101, 127815, 12858,
+ 120159, 0, 11373, 6378, 127859, 120103, 8663, 9312, 41644, 4539, 2129, 0,
+ 9222, 983729, 0, 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935,
+ 0, 0, 1293, 7947, 2132, 983758, 74593, 120308, 2454, 42717, 3613, 128837,
+ 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, 43087, 12595, 120304,
+ 983114, 8822, 0, 1157, 64903, 8638, 0, 0, 0, 0, 69848, 8235, 120316,
+ 4405, 10086, 120247, 0, 69216, 0, 65430, 71321, 6079, 6817, 10764,
+ 127910, 64291, 128051, 998, 120312, 11062, 1317, 64327, 1558, 0, 1991,
+ 7882, 42254, 0, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, 43076,
+ 4692, 64630, 41823, 4007, 5004, 119334, 7896, 751, 6595, 6596, 120325,
+ 66373, 0, 0, 64908, 92691, 6311, 0, 12004, 119192, 12049, 43108, 120326,
+ 0, 41705, 92188, 6598, 0, 6599, 120334, 0, 42148, 118825, 66027, 0, 6597,
+ 9412, 8340, 11824, 64745, 2281, 69904, 0, 1988, 5407, 67865, 2430, 41678,
+ 0, 120243, 2336, 983894, 0, 78871, 120442, 983760, 1921, 10947, 19927, 0,
+ 65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, 42285, 41674,
+ 19964, 41679, 65084, 3521, 0, 5774, 8325, 0, 65403, 983089, 1854, 10794,
+ 0, 67660, 69846, 0, 78359, 5280, 0, 4344, 12905, 65433, 6076, 64793,
+ 41610, 768, 12074, 442, 0, 68162, 64081, 12934, 41682, 65432, 41693, 0,
+ 6071, 65434, 127467, 4804, 4053, 0, 127469, 194653, 41696, 467, 69823,
+ 127463, 69797, 194652, 127473, 8421, 127472, 69682, 43705, 502, 0, 65431,
+ 119056, 69954, 12043, 1303, 316, 7364, 2029, 2136, 119246, 11533, 64365,
+ 43480, 92639, 4860, 126648, 127877, 42488, 0, 9583, 128849, 5546, 8019,
+ 73856, 0, 0, 0, 5544, 2355, 12150, 65725, 5543, 77989, 63751, 12137,
+ 5548, 77985, 0, 65727, 68388, 65726, 6077, 128352, 65452, 0, 11301,
+ 78013, 78008, 78010, 9874, 78007, 0, 1319, 3050, 65410, 0, 0, 78016,
+ 78017, 42830, 43996, 66716, 128137, 4691, 92242, 9345, 621, 92709,
+ 128222, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, 10545,
+ 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 92363, 9996,
+ 8508, 0, 7012, 8195, 127834, 9566, 0, 3722, 0, 41707, 8493, 545, 9575,
+ 41379, 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, 0, 0, 9119,
+ 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 78021, 78022, 410,
+ 78020, 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116,
+ 41673, 120370, 11422, 78141, 120373, 3860, 120367, 68412, 41345, 120362,
+ 120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104, 64858, 361,
+ 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 917919, 4569, 74130, 0,
+ 43487, 194630, 611, 74129, 64871, 118891, 65629, 0, 194858, 0, 0, 127545,
+ 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 983581, 74054,
+ 127754, 195029, 0, 839, 983311, 7695, 8769, 65246, 4829, 194663, 4859,
+ 64467, 0, 983954, 118998, 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210,
+ 983854, 127936, 804, 0, 0, 12298, 0, 66653, 0, 64924, 10091, 73931, 9468,
+ 74245, 0, 0, 74246, 92503, 12839, 64669, 92202, 0, 1279, 1425, 6224,
+ 119229, 11049, 0, 92697, 43239, 8482, 92440, 0, 5032, 69677, 11940,
+ 67888, 664, 120437, 5034, 0, 0, 127525, 42702, 73888, 983149, 13294,
+ 67873, 64869, 6032, 0, 9115, 7430, 120377, 0, 120819, 68387, 120168,
+ 73913, 120170, 41161, 5518, 4174, 10993, 41162, 120160, 64528, 1169, 434,
+ 41437, 1905, 6034, 41164, 64744, 9528, 118867, 128800, 524, 0, 74029,
+ 788, 74027, 0, 194638, 0, 1663, 10419, 74025, 42636, 0, 69725, 0, 120656,
+ 0, 67876, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 0,
+ 0, 10855, 5445, 9355, 0, 65198, 7391, 8989, 221, 65686, 0, 0, 8010, 7191,
+ 4962, 69772, 8855, 0, 0, 64469, 120426, 10555, 0, 43333, 92299, 0,
+ 120427, 10451, 0, 67653, 7245, 12443, 74405, 9947, 120149, 78317, 3873,
+ 8367, 0, 120146, 43433, 43649, 11987, 0, 0, 11010, 12723, 74059, 74062,
+ 6217, 5896, 0, 7682, 74049, 1462, 10235, 0, 0, 0, 0, 0, 0, 42595, 0,
+ 74402, 118860, 0, 120419, 92497, 74052, 0, 92378, 120549, 119082, 64295,
+ 120418, 0, 64765, 73923, 120417, 120662, 69920, 194702, 6216, 0, 10755,
+ 9455, 0, 8124, 127042, 9470, 6944, 127540, 0, 69680, 2828, 0, 531, 42638,
+ 0, 0, 0, 43428, 8204, 3614, 2827, 9696, 0, 0, 8728, 4354, 10904, 78562,
+ 19936, 7833, 120691, 0, 42599, 42597, 42709, 120409, 127044, 0, 8537, 0,
+ 0, 9354, 983164, 128833, 41199, 10121, 2028, 0, 983194, 69715, 0, 3062,
+ 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 92205, 120777, 120502,
+ 41155, 0, 74071, 0, 983449, 12713, 0, 0, 0, 78772, 0, 1734, 0, 0, 127040,
+ 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 983970, 1230, 0, 0, 3597,
+ 4446, 10584, 74235, 92215, 4037, 127938, 8352, 0, 5687, 0, 64515, 0,
+ 194801, 55265, 67846, 78434, 9704, 0, 0, 70080, 71338, 0, 8660, 126495,
+ 0, 0, 78773, 74482, 4483, 1709, 69721, 9909, 6080, 0, 120358, 1746, 1315,
+ 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 128152, 1226, 6930,
+ 67979, 983681, 6360, 10897, 41230, 605, 0, 74785, 69875, 0, 0, 41500, 0,
+ 311, 11453, 6221, 10608, 64943, 74280, 10877, 118868, 64885, 74272, 0, 0,
+ 128559, 120736, 74312, 345, 0, 74456, 64606, 9917, 0, 92231, 5037, 0,
+ 1776, 8422, 0, 118814, 41508, 41201, 323, 43328, 0, 42698, 1295, 194853,
+ 4625, 0, 4630, 13117, 0, 128772, 65123, 11293, 2668, 11288, 0, 42640,
+ 65666, 2519, 92369, 65420, 92479, 0, 4252, 5049, 42659, 119011, 706,
+ 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, 66702, 0, 12670, 1013,
+ 0, 64919, 705, 0, 65422, 127803, 1183, 126519, 7017, 42852, 0, 8157,
+ 9736, 64503, 65418, 0, 983869, 74035, 0, 11913, 73874, 6696, 0, 8920,
+ 119298, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777,
+ 1857, 194657, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818,
+ 119173, 0, 0, 7805, 0, 94007, 6935, 92292, 78325, 78326, 78323, 43327,
+ 43989, 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543,
+ 78335, 78332, 77832, 65849, 77831, 983952, 0, 12451, 0, 8684, 0, 6102, 0,
+ 5298, 0, 5294, 0, 0, 983451, 195062, 9949, 119826, 43617, 119215, 0,
+ 12073, 0, 0, 77863, 13108, 120617, 11439, 41468, 983748, 0, 5292, 55272,
+ 983874, 1939, 5302, 3970, 917879, 12455, 1793, 0, 0, 0, 6643, 92477,
+ 65263, 0, 78330, 41293, 78328, 65923, 0, 13219, 9569, 0, 74383, 0, 74197,
+ 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, 66443, 3784,
+ 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, 0, 92488,
+ 9926, 7197, 0, 68429, 42894, 41821, 1249, 78360, 78361, 78356, 78358,
+ 78353, 64899, 64763, 41149, 41807, 43162, 41815, 41150, 0, 10571, 10096,
+ 0, 0, 78074, 6947, 41152, 887, 9249, 6565, 78510, 41990, 78509, 41811,
+ 74466, 93966, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 128655,
+ 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813,
+ 983450, 78432, 78256, 78351, 78352, 0, 983648, 0, 0, 1378, 9509, 0, 0,
+ 74475, 3066, 92220, 67847, 0, 92355, 0, 78365, 8787, 120379, 194616,
+ 41618, 194615, 78261, 194614, 0, 64652, 0, 194612, 0, 78366, 42088, 0,
+ 195061, 7176, 43756, 10137, 6121, 10995, 78259, 74534, 8119, 64874,
+ 917816, 127199, 194939, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0,
+ 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100,
+ 41236, 92235, 42005, 42003, 41237, 5848, 0, 0, 3670, 128657, 194600, 0,
+ 0, 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0,
+ 128002, 4120, 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006,
+ 119115, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335,
+ 65334, 65333, 65332, 65331, 42059, 65329, 42689, 92427, 9128, 94045,
+ 42073, 6785, 64590, 983821, 4371, 7196, 65318, 2035, 65316, 4106, 65314,
+ 65313, 42074, 127847, 41228, 0, 65609, 41241, 7903, 41239, 43533, 78459,
+ 7189, 0, 0, 0, 12357, 42802, 78450, 8487, 9131, 0, 4615, 12695, 127752,
+ 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 69762, 66455, 64738,
+ 3219, 68654, 983778, 0, 1037, 0, 2025, 128263, 13098, 78442, 10637, 4568,
+ 549, 1570, 0, 2835, 0, 10624, 43623, 11072, 127191, 0, 0, 12606, 78433,
+ 2825, 0, 10825, 8079, 2821, 41046, 92327, 7365, 983744, 120593, 13071, 0,
+ 452, 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, 0, 64703,
+ 119191, 42308, 7181, 0, 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 983377,
+ 42628, 78575, 0, 128777, 0, 3240, 128518, 12194, 0, 11591, 41065, 5323,
+ 8166, 0, 0, 0, 74535, 1623, 65297, 128856, 571, 0, 4918, 0, 5288, 127295,
+ 8916, 65048, 1909, 8864, 0, 0, 10736, 92508, 11571, 7615, 127300, 92296,
+ 4237, 92576, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403,
+ 0, 0, 127146, 3796, 6800, 0, 3994, 11421, 0, 195076, 0, 983913, 0, 0,
64857, 128105, 2855, 127828, 66308, 41621, 68214, 127283, 127817, 10654,
0, 119226, 12164, 3246, 7906, 43972, 65847, 7182, 0, 13024, 194822,
- 74270, 128289, 0, 0, 0, 1496, 747, 0, 942, 2378, 43136, 127905, 8466, 0,
- 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, 6382, 0, 64634,
- 128279, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, 5286,
- 119297, 0, 0, 64925, 120283, 194584, 118982, 194583, 7705, 11942, 11305,
- 194581, 3309, 0, 0, 0, 0, 6802, 0, 41653, 1280, 1241, 7168, 12096, 0,
- 66615, 42565, 41651, 0, 0, 0, 41650, 66507, 66470, 0, 12914, 41491,
- 66010, 119552, 6078, 9954, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062,
- 0, 0, 3256, 128640, 42076, 43252, 78823, 917906, 8727, 0, 65875, 0, 0,
- 127762, 10562, 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635,
- 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613,
- 77909, 92420, 73997, 0, 0, 119218, 7984, 8600, 74434, 127770, 4176, 0,
- 2034, 92551, 120805, 65891, 127038, 0, 318, 2038, 128860, 78596, 0, 3649,
- 13149, 42145, 42798, 3634, 120291, 118927, 67677, 120124, 7866, 0, 11402,
- 42146, 120134, 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, 11812,
- 65379, 68386, 128185, 1159, 0, 69729, 0, 0, 7178, 194632, 0, 41680, 0,
- 128203, 11534, 1514, 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 66474,
- 9368, 12848, 1624, 43270, 0, 194563, 10818, 128207, 9953, 0, 78421, 1194,
- 3242, 9761, 9555, 8598, 120299, 6169, 12871, 1551, 2798, 65176, 4958,
- 42752, 119025, 0, 67875, 120301, 3495, 66648, 194768, 0, 68364, 0, 4891,
- 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, 194633, 7199, 64955, 0, 0, 0,
- 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 92318, 92517, 118882,
- 1362, 13297, 0, 128094, 0, 0, 73789, 0, 6658, 4426, 0, 92628, 0, 92319,
- 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, 0, 127977, 0, 0,
- 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 127763, 10807, 9558, 194613, 0,
- 8515, 8688, 12866, 0, 3294, 0, 8529, 128101, 43385, 7564, 0, 43329, 0,
- 92458, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 92198,
- 3215, 0, 7710, 1610, 73801, 0, 0, 65682, 0, 120537, 65924, 9974, 228,
- 66354, 1501, 0, 64395, 5179, 7200, 6225, 0, 65794, 1725, 65533, 8196,
- 7476, 74399, 0, 0, 7152, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474,
- 92571, 0, 0, 10414, 13001, 8141, 0, 42537, 1557, 43594, 128642, 6330,
- 6805, 8631, 2545, 120672, 127166, 0, 74190, 0, 0, 0, 42762, 0, 42914,
- 1650, 262, 1637, 0, 7901, 3238, 128173, 41861, 0, 0, 65158, 10860, 0,
- 43658, 7527, 0, 43319, 6419, 0, 45, 0, 64588, 0, 0, 119810, 7194, 5291,
- 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620,
- 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 78443, 118813, 0, 118996, 119009,
- 2850, 8084, 0, 73850, 2801, 92284, 42069, 119839, 74754, 119841, 42072,
- 119843, 119842, 10398, 0, 0, 8377, 127116, 8245, 68401, 3158, 92396,
- 3983, 43656, 923, 119857, 119856, 292, 13002, 119845, 119844, 3221, 1763,
- 92463, 4612, 119851, 119850, 7253, 127110, 68391, 0, 10782, 3637, 12996,
- 43542, 0, 64578, 0, 3228, 69636, 8783, 0, 119614, 2731, 0, 0, 78585,
- 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, 11283, 9089, 0, 73996, 0,
- 64500, 43674, 0, 64947, 1856, 0, 0, 6379, 0, 0, 0, 3208, 12975, 74775, 0,
- 0, 92389, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, 195026, 55254, 7740,
- 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, 74006, 64909, 6646,
- 11790, 74019, 0, 128066, 128031, 8561, 4573, 0, 5326, 0, 120605, 7230,
- 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, 65092, 73903,
- 66721, 11342, 128561, 0, 0, 128226, 127001, 0, 11810, 13164, 10723, 967,
- 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089,
- 870, 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 43692,
- 4563, 0, 0, 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874,
- 7644, 0, 875, 790, 128303, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181,
- 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, 42012,
- 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, 74122, 0,
- 0, 0, 66194, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 127189,
- 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 92714, 0,
- 92321, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427,
- 9958, 4588, 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793,
- 74404, 0, 305, 567, 67662, 842, 128519, 8208, 0, 41695, 1647, 118877, 0,
- 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594,
- 74086, 917615, 917614, 917613, 10973, 66359, 1372, 127172, 917608, 4969,
- 1254, 917605, 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0,
- 119982, 0, 0, 3245, 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 128528, 0,
- 917611, 127026, 128883, 0, 0, 43648, 120812, 0, 43322, 92662, 0, 0,
- 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 128779, 127821,
- 119988, 65610, 2391, 0, 92248, 671, 250, 7434, 618, 668, 610, 42800,
- 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, 128266,
- 64749, 67850, 2107, 0, 0, 4605, 128174, 0, 43372, 65945, 128838, 0,
- 119590, 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0,
- 128297, 0, 0, 0, 0, 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0,
- 4627, 0, 5208, 0, 128842, 10332, 5218, 7976, 9156, 0, 3244, 5529, 69647,
- 73894, 128852, 5432, 64965, 5527, 74033, 10516, 7790, 5528, 0, 42140,
- 120281, 0, 0, 43545, 9887, 0, 4000, 7429, 7428, 665, 7424, 3206, 120278,
- 7884, 0, 128566, 917989, 128666, 211, 2509, 0, 120573, 68672, 3220,
- 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 127258, 5852, 0,
- 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, 4698, 66509, 1066,
- 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 127265, 0, 7516, 0,
- 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, 0, 43384,
- 12660, 0, 0, 0, 74850, 41069, 0, 128156, 12099, 4310, 10032, 6252, 713,
- 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, 118800,
- 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, 64650,
- 94, 1880, 74766, 0, 8908, 0, 128707, 65913, 78470, 10752, 13003, 0, 0,
- 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419,
- 128055, 0, 127883, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299,
- 936, 13289, 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 119108,
- 0, 12913, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509,
- 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0,
- 9810, 127269, 0, 12970, 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0,
- 74291, 1965, 7069, 43312, 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0,
- 0, 74239, 41317, 92614, 2091, 74545, 2090, 0, 9353, 7117, 2077, 77886, 0,
- 10498, 2083, 77888, 0, 0, 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0,
- 9654, 12856, 6924, 0, 7066, 0, 0, 128135, 41037, 42692, 7786, 12959,
- 41039, 0, 0, 680, 6274, 128200, 1181, 7056, 3174, 0, 0, 92668, 65665,
- 127375, 0, 6920, 0, 92295, 0, 118965, 0, 64644, 126981, 0, 0, 41028, 0,
- 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, 0, 0, 40987, 4667, 0,
- 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 92675, 0, 921, 4744, 0,
- 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 128121, 74036, 74505, 43274,
- 5313, 951, 0, 0, 0, 7604, 0, 4009, 127816, 0, 120562, 0, 0, 64860,
- 119138, 119069, 0, 127370, 4048, 0, 0, 120596, 1646, 77890, 64534, 73995,
- 120705, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894,
- 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399,
- 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151,
- 1137, 69767, 749, 42366, 0, 5385, 128574, 128218, 0, 0, 5989, 0, 0,
- 128091, 0, 41685, 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0,
- 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 69688,
- 69771, 74479, 0, 6558, 0, 0, 69765, 120750, 252, 0, 41302, 0, 0, 0,
- 69763, 0, 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0,
- 11730, 0, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 0, 0, 7764, 0,
- 11094, 120825, 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 64449, 0, 127509, 63854,
- 8456, 0, 74783, 65670, 0, 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0,
- 120764, 0, 10019, 74762, 0, 3458, 4365, 0, 0, 3647, 0, 2602, 128341, 0,
- 194707, 41135, 0, 0, 0, 64631, 172, 4971, 41219, 41137, 1889, 7238, 6545,
- 0, 92193, 7597, 10528, 0, 0, 3732, 73910, 194588, 5344, 0, 43366, 43363,
- 9062, 119252, 0, 0, 0, 64479, 9232, 92596, 0, 0, 194712, 10900, 41531,
- 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, 127354,
- 127345, 299, 0, 8525, 127347, 3524, 917565, 8831, 127349, 92564, 3075,
- 67867, 127352, 0, 66362, 0, 64353, 0, 0, 5845, 0, 0, 0, 2581, 8200,
- 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680,
- 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 194631, 2883, 2749, 119563,
+ 74270, 128289, 0, 0, 0, 1496, 747, 0, 942, 2378, 43136, 127905, 8466,
+ 983575, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, 6382, 0,
+ 64634, 128279, 0, 11612, 0, 67600, 2374, 94066, 8475, 11609, 66313, 0, 0,
+ 5286, 119297, 0, 0, 64925, 120283, 194584, 118982, 194583, 7705, 11942,
+ 11305, 194581, 3309, 0, 0, 0, 0, 6802, 0, 41653, 1280, 1241, 7168, 12096,
+ 0, 66615, 42565, 41651, 0, 0, 0, 41650, 66507, 66470, 0, 12914, 41491,
+ 66010, 119552, 6078, 9954, 0, 1475, 119247, 9938, 6084, 917546, 41064,
+ 41062, 0, 0, 3256, 10189, 42076, 43252, 78823, 917906, 8727, 0, 65875, 0,
+ 0, 127762, 10562, 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 71351, 0,
+ 3635, 64337, 983273, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0,
+ 65613, 77909, 92420, 73997, 0, 0, 119218, 7984, 8600, 74434, 127770,
+ 4176, 70050, 2034, 92551, 120805, 65891, 127038, 0, 318, 2038, 128860,
+ 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, 118927, 67677, 120124,
+ 7866, 0, 11402, 42146, 94032, 74238, 42664, 2849, 127034, 0, 7938, 12960,
+ 1761, 11812, 65379, 68386, 128185, 1159, 0, 69729, 0, 0, 7178, 194632, 0,
+ 41680, 0, 128203, 11534, 1514, 11668, 67891, 9313, 7015, 0, 67877,
+ 194567, 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, 10818, 126644,
+ 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, 12871, 1551,
+ 2798, 65176, 4958, 42752, 119025, 0, 67875, 120301, 3495, 66648, 194768,
+ 0, 68364, 983222, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 194829,
+ 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0,
+ 5271, 92318, 92517, 118882, 1362, 13297, 0, 128094, 0, 983323, 73789, 0,
+ 6658, 4426, 0, 92628, 983833, 92319, 7276, 42163, 5220, 0, 0, 983322,
+ 2416, 3310, 42703, 0, 379, 0, 43755, 0, 0, 3223, 65492, 1284, 194771,
+ 4549, 0, 0, 983154, 127763, 10807, 9558, 194613, 0, 8515, 8688, 12866,
+ 65308, 3294, 983324, 8529, 128101, 43385, 7564, 0, 43329, 0, 92458,
+ 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 92198, 3215, 0,
+ 7710, 1610, 73801, 0, 0, 65682, 0, 120537, 65924, 9974, 228, 66354, 1501,
+ 0, 64395, 5179, 7200, 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0,
+ 0, 7152, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 77979, 0, 126507,
+ 10414, 13001, 8141, 0, 42537, 1557, 43594, 128642, 6330, 6805, 8631,
+ 2545, 70052, 127166, 0, 74190, 0, 0, 983777, 42762, 0, 42914, 1650, 262,
+ 1637, 0, 7901, 3238, 128173, 41861, 0, 128585, 65158, 10860, 94059,
+ 43658, 7527, 0, 43319, 6419, 0, 45, 0, 64588, 93989, 0, 119810, 7194,
+ 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912,
+ 2620, 0, 0, 0, 983866, 179, 65896, 0, 64756, 2853, 78443, 118813, 983881,
+ 118996, 119009, 2850, 8084, 983085, 73850, 2801, 92284, 42069, 119839,
+ 74754, 119841, 42072, 119843, 119842, 10398, 983056, 0, 8377, 127116,
+ 8245, 68401, 3158, 92396, 3983, 43656, 923, 119857, 119856, 292, 13002,
+ 119845, 119844, 3221, 1763, 92463, 4612, 119851, 119850, 7253, 127110,
+ 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 983666, 3228, 69636, 8783,
+ 0, 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316,
+ 4177, 11283, 9089, 0, 73996, 983173, 64500, 43674, 0, 64947, 1856, 0, 0,
+ 6379, 0, 0, 0, 3208, 12975, 74775, 127380, 983922, 92389, 74072, 55269,
+ 0, 0, 983674, 2033, 78577, 78576, 195026, 55254, 7740, 0, 0, 0, 73964, 0,
+ 93988, 67612, 65674, 128244, 94110, 41689, 0, 74006, 64909, 6646, 11790,
+ 74019, 0, 128066, 128031, 8561, 4573, 0, 5326, 0, 120605, 7230, 8257, 0,
+ 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, 65092, 73903, 66721,
+ 11342, 128561, 0, 0, 128226, 127001, 0, 11810, 13164, 10723, 967, 983942,
+ 126469, 11946, 0, 3257, 0, 12307, 1845, 983157, 43526, 0, 0, 1886, 42342,
+ 10089, 870, 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879,
+ 43692, 4563, 0, 0, 7591, 65887, 867, 9520, 872, 126607, 868, 873, 7642,
+ 0, 869, 874, 7644, 120674, 875, 790, 128303, 0, 0, 0, 66182, 983250,
+ 5429, 195055, 66180, 126480, 66181, 68452, 983281, 983242, 42067, 0,
+ 5433, 10657, 7911, 194622, 1547, 66176, 42012, 120576, 5425, 4977, 9999,
+ 5317, 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 66194, 4418, 66184,
+ 4628, 4245, 119648, 0, 0, 1851, 0, 127189, 11908, 0, 9360, 118897,
+ 983270, 42776, 66187, 12837, 8829, 7711, 92714, 0, 92321, 43318, 0, 8809,
+ 69881, 0, 983142, 120604, 983052, 983873, 0, 983262, 0, 0, 7427, 9958,
+ 4588, 43680, 0, 74484, 194968, 2433, 0, 119622, 3352, 74363, 983876, 0,
+ 793, 74404, 0, 305, 567, 67662, 842, 128519, 8208, 0, 41695, 1647,
+ 118877, 0, 7837, 917625, 818, 5337, 194628, 917621, 41376, 119978,
+ 126576, 120594, 74086, 917615, 917614, 917613, 10973, 66359, 1372,
+ 127172, 917608, 4969, 1254, 917605, 917604, 93967, 917602, 65228, 78221,
+ 126612, 0, 2840, 0, 119982, 983930, 0, 3245, 9068, 68194, 64725, 0, 0,
+ 12991, 0, 2651, 68016, 983257, 917611, 127026, 128883, 0, 0, 43648,
+ 120812, 0, 43322, 92662, 0, 0, 64372, 92698, 3226, 655, 752, 7457, 7456,
+ 7452, 3285, 128779, 127821, 119988, 65610, 2391, 0, 92248, 671, 250,
+ 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439,
+ 628, 3905, 73810, 0, 128266, 64749, 67850, 2107, 0, 0, 4605, 128174,
+ 983192, 43372, 65945, 128838, 0, 119590, 0, 0, 0, 987, 6927, 11572,
+ 42261, 11464, 3365, 9971, 0, 0, 128297, 0, 0, 0, 0, 11334, 43326, 12609,
+ 11519, 11503, 5530, 5210, 0, 4627, 983883, 5208, 0, 128842, 10332, 5218,
+ 7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, 5432, 64965, 5527,
+ 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000,
+ 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 128566, 917989, 128666,
+ 211, 2509, 128858, 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214,
+ 42474, 8118, 0, 7048, 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 983165,
+ 2623, 11943, 0, 69226, 0, 4698, 66509, 1066, 119921, 4701, 983867,
+ 120285, 74225, 94111, 8267, 0, 127265, 0, 7516, 0, 2625, 983968, 8034,
+ 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, 0, 43384, 12660, 0, 0,
+ 0, 74850, 41069, 0, 128156, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990,
+ 0, 983254, 66368, 5017, 64956, 7071, 0, 119144, 1030, 118800, 983120,
+ 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, 64650, 94,
+ 1880, 74766, 983829, 8908, 0, 128707, 65913, 78470, 10752, 13003, 0,
+ 126572, 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 120335, 64785, 7394,
+ 3641, 5419, 128055, 0, 127883, 0, 120344, 43988, 0, 8610, 43062, 7592,
+ 856, 74299, 936, 13289, 69894, 43171, 1459, 0, 65243, 78638, 19953, 0,
+ 1504, 70064, 0, 12913, 74206, 7529, 0, 128699, 983948, 120782, 4113, 0,
+ 2372, 336, 0, 7509, 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703,
+ 0, 983946, 8033, 69953, 0, 9810, 127269, 0, 12970, 0, 42351, 10109,
+ 917623, 0, 194693, 0, 92690, 0, 0, 74291, 1965, 7069, 43312, 0, 73887, 0,
+ 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 92614, 2091, 74545,
+ 2090, 0, 9353, 7117, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, 119236,
+ 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, 983710,
+ 0, 128135, 41037, 42692, 7786, 12959, 41039, 127483, 0, 680, 2302,
+ 128200, 1181, 7056, 3174, 126516, 0, 92668, 65665, 127375, 126506, 6920,
+ 0, 92295, 0, 118965, 0, 64644, 126981, 74119, 0, 41028, 0, 6231, 2613,
+ 65302, 40989, 0, 194696, 0, 42760, 0, 983566, 0, 40987, 4667, 0, 983923,
+ 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 92675, 0, 921, 4744, 0, 12702,
+ 242, 0, 1566, 8217, 0, 64653, 78386, 128121, 74036, 74505, 43274, 5313,
+ 951, 0, 0, 983858, 7604, 983282, 4009, 127816, 983701, 120562, 0, 983711,
+ 64860, 119138, 119069, 0, 127370, 4048, 983598, 0, 70024, 1646, 77890,
+ 64534, 73995, 120705, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107,
+ 3441, 119894, 2975, 74442, 9822, 983926, 55220, 10084, 73943, 118840, 0,
+ 917562, 194610, 3399, 9851, 983708, 11909, 9059, 0, 7687, 0, 6789, 0, 0,
+ 0, 71367, 0, 0, 1777, 9151, 1137, 69767, 749, 42366, 0, 5385, 128574,
+ 128218, 0, 0, 5989, 0, 0, 128091, 0, 41685, 69223, 0, 9769, 41684,
+ 983214, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, 41297, 0, 3666,
+ 74473, 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, 6558, 0, 0, 69765,
+ 120750, 252, 0, 41302, 0, 0, 0, 69763, 0, 11729, 8719, 9060, 0, 120139,
+ 10761, 0, 0, 0, 118792, 11734, 983221, 11730, 0, 9593, 5757, 2403, 64808,
+ 55275, 0, 11728, 43572, 0, 0, 7764, 983705, 11094, 120825, 0, 0, 4282,
+ 8298, 0, 0, 0, 0, 0, 64449, 0, 126650, 63854, 8456, 0, 74783, 65670, 0,
+ 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0,
+ 3458, 4365, 70053, 983703, 3647, 0, 2602, 128341, 0, 194707, 41135, 0, 0,
+ 0, 64631, 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 92193, 7597,
+ 10528, 0, 0, 3732, 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0,
+ 0, 0, 64479, 9232, 92596, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048,
+ 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, 127354, 127345, 299,
+ 917957, 8525, 127347, 3524, 917565, 8831, 127349, 92564, 3075, 67867,
+ 127352, 0, 66362, 0, 64353, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114,
+ 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, 7204,
+ 70065, 2588, 2914, 7011, 55281, 0, 2471, 194631, 2883, 2749, 119563,
73774, 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232,
- 10928, 0, 41153, 41229, 118967, 0, 3738, 127369, 0, 12711, 3181, 66212,
- 74289, 68472, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047,
- 0, 0, 64674, 0, 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, 0,
- 74461, 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932,
- 73728, 3214, 120461, 120468, 12128, 3207, 65486, 78729, 1901, 78727,
- 127326, 120460, 7425, 3205, 0, 78737, 78736, 78735, 43383, 78733, 65459,
- 2606, 78730, 73897, 0, 11496, 1173, 0, 41272, 119661, 0, 0, 0, 120737, 0,
- 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, 0, 120480, 120479,
- 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, 0, 65510, 0, 0,
- 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 120144, 1685, 595, 0, 73971,
- 1292, 8940, 7380, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, 9014,
- 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 78488, 0, 8458,
- 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, 2465, 0, 8193, 55279,
- 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, 92414, 8982, 0, 0, 0,
- 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, 68650, 0, 1832, 5604,
- 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, 42888, 65712, 0, 3869,
- 11937, 5725, 127539, 1783, 68648, 5728, 0, 0, 0, 11918, 66567, 5724, 0,
- 5727, 78521, 0, 0, 764, 0, 128116, 43531, 0, 9033, 0, 42532, 6223, 11042,
- 120749, 11423, 0, 119861, 0, 43465, 0, 128267, 6559, 64557, 0, 0, 120648,
- 43019, 43477, 10238, 0, 0, 43377, 92282, 0, 1478, 9783, 11825, 2607,
- 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 92438,
- 43537, 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0,
- 41295, 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0,
- 0, 1543, 3713, 41221, 12423, 42281, 917788, 74024, 12293, 0, 64357,
- 11794, 42082, 0, 1737, 8987, 42081, 0, 7205, 0, 9335, 12850, 119870,
- 6553, 7055, 0, 8277, 0, 0, 5475, 74795, 6780, 0, 0, 12990, 1160, 42084,
- 119650, 41217, 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0,
- 41216, 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143,
- 119139, 3142, 92451, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0,
- 6227, 0, 0, 69741, 0, 6163, 0, 0, 127314, 0, 0, 8603, 0, 119866, 3306,
- 10876, 43392, 119573, 127931, 5751, 0, 6222, 0, 0, 12086, 7403, 1600,
- 64309, 64939, 0, 64783, 92658, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0,
- 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585,
- 0, 6551, 0, 128229, 0, 41289, 0, 194602, 0, 8977, 602, 120814, 0, 128778,
- 128661, 0, 0, 41279, 0, 0, 0, 11081, 43615, 0, 0, 0, 0, 12727, 0, 0,
- 78397, 9475, 7112, 65105, 0, 9633, 10886, 43592, 7831, 0, 194571, 0,
- 73915, 8076, 43048, 8290, 8291, 43051, 92570, 0, 2596, 43584, 0, 13113,
- 0, 127757, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, 74058, 6376,
- 0, 0, 0, 0, 9854, 127748, 64696, 0, 128220, 0, 6994, 0, 1720, 0, 0, 0,
- 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557,
- 12430, 8137, 0, 92642, 0, 0, 245, 128097, 11456, 41233, 7070, 0, 0, 6136,
- 917609, 65677, 8682, 41235, 92595, 42045, 9804, 0, 432, 3595, 0, 65437,
- 0, 74455, 42399, 0, 0, 128274, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052,
- 64888, 7167, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0,
- 74137, 0, 10063, 12652, 12199, 92480, 0, 2566, 11971, 0, 0, 1065, 0, 0,
- 43400, 2576, 66696, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215,
- 64493, 5772, 12968, 0, 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564,
- 1463, 41342, 0, 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0,
- 13091, 0, 0, 0, 917915, 0, 127025, 0, 74821, 0, 0, 119042, 0, 127865,
- 13090, 66643, 0, 1270, 1132, 42360, 0, 74096, 66655, 42569, 127824, 0,
- 64761, 0, 41021, 8510, 42432, 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0,
- 7061, 41336, 3854, 69700, 13141, 68413, 43401, 42319, 13082, 0, 7067,
- 68221, 0, 0, 127171, 0, 0, 127797, 9029, 43543, 119315, 2353, 6308, 0,
- 74792, 2611, 119186, 0, 0, 0, 43664, 92399, 66627, 0, 4484, 8509, 118976,
- 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0,
- 12107, 44002, 10905, 65010, 194986, 697, 66018, 9284, 4244, 0, 0, 92644,
- 13121, 120036, 0, 12010, 128573, 128221, 0, 0, 0, 127193, 65816, 68111,
- 0, 127933, 65668, 92257, 6618, 118784, 66365, 0, 42234, 12648, 128039,
- 7123, 0, 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, 0, 0, 68365,
- 128258, 0, 0, 0, 13122, 0, 191, 74119, 8585, 8000, 64411, 120652, 42889,
+ 10928, 0, 41153, 41229, 118967, 0, 3738, 94016, 0, 12711, 3181, 66212,
+ 74289, 68472, 42857, 8262, 983371, 0, 983220, 0, 42347, 12092, 9615,
+ 7234, 74047, 983088, 0, 43744, 0, 0, 73846, 2934, 12722, 120762, 922,
+ 43983, 74507, 983126, 74461, 3218, 120471, 74290, 120469, 64562, 120475,
+ 8569, 11404, 11932, 73728, 3214, 120461, 120468, 12128, 3207, 65486,
+ 78729, 1901, 78727, 127326, 120460, 7425, 3205, 68003, 78737, 78736,
+ 78735, 43383, 69940, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, 41272,
+ 119661, 0, 0, 983313, 120737, 0, 983962, 983312, 378, 2610, 0, 65079,
+ 983317, 65695, 126559, 37, 7068, 0, 120480, 120479, 3209, 120477, 0,
+ 10638, 9768, 69952, 119909, 983391, 0, 0, 0, 0, 65510, 0, 0, 5233,
+ 983327, 64792, 983326, 0, 126633, 0, 7060, 9847, 120144, 1685, 595, 0,
+ 73971, 1292, 8940, 7380, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243,
+ 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 128132, 8203, 78488,
+ 983090, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, 2465,
+ 69901, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0,
+ 92414, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548,
+ 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0,
+ 0, 42888, 65712, 983296, 3869, 11937, 5725, 127539, 1783, 68648, 5728, 0,
+ 0, 0, 11918, 66567, 5724, 0, 5727, 78521, 0, 0, 764, 0, 128116, 43531, 0,
+ 9033, 0, 42532, 6223, 11042, 120749, 11423, 0, 119861, 71344, 43465, 0,
+ 128267, 6559, 64557, 71348, 92649, 120648, 43019, 43477, 10238, 74491, 0,
+ 43377, 92282, 71346, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0,
+ 0, 0, 6132, 0, 63765, 0, 70058, 41144, 0, 92438, 43537, 6761, 10093,
+ 4369, 917791, 0, 983148, 8820, 3947, 0, 0, 11515, 526, 128103, 41295,
+ 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 983374,
+ 1543, 3713, 41221, 12423, 42281, 917788, 74024, 12293, 0, 64357, 11794,
+ 42082, 0, 1737, 8987, 42081, 0, 7205, 0, 9335, 12850, 119870, 6553, 7055,
+ 0, 8277, 0, 0, 5475, 74795, 6780, 0, 0, 12990, 1160, 42084, 119650,
+ 41217, 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 983170,
+ 41216, 7844, 2616, 119190, 68461, 65234, 983286, 13076, 3135, 983279,
+ 78143, 119139, 3142, 92451, 94068, 10819, 119580, 10183, 0, 2608, 1470,
+ 73967, 94008, 6227, 0, 127173, 69741, 983582, 6163, 983558, 0, 127314, 0,
+ 0, 8603, 0, 119866, 3306, 10876, 43392, 119573, 127931, 5751, 0, 6222, 0,
+ 0, 12086, 7403, 1600, 64309, 64939, 0, 64783, 92658, 11310, 0, 8882, 0,
+ 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 983209, 5002, 0,
+ 41286, 69946, 127019, 0, 43585, 0, 6551, 983953, 128229, 0, 41289, 0,
+ 194602, 0, 8977, 602, 120814, 0, 128778, 128661, 0, 983367, 41279, 0, 0,
+ 0, 11081, 43615, 0, 0, 0, 983612, 12727, 0, 0, 78397, 9475, 7112, 65105,
+ 0, 9633, 10886, 43592, 7831, 983820, 194571, 0, 73915, 8076, 43048, 8290,
+ 8291, 43051, 92570, 0, 2596, 43584, 0, 13113, 0, 127757, 2393, 7058,
+ 9087, 74067, 68673, 41574, 78337, 0, 74058, 6376, 0, 0, 0, 0, 9854,
+ 127748, 64696, 0, 128220, 0, 6994, 0, 1720, 0, 0, 0, 6529, 7063, 983182,
+ 3751, 9120, 983477, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, 12430,
+ 8137, 94098, 92642, 0, 0, 245, 128097, 11456, 41233, 7070, 0, 94046,
+ 6136, 917609, 65677, 8682, 41235, 92595, 42045, 9804, 118963, 432, 3595,
+ 194945, 65437, 0, 74455, 42399, 0, 0, 128274, 0, 119658, 0, 0, 0, 77894,
+ 8797, 0, 9052, 64888, 7167, 2356, 95, 74784, 10580, 0, 42286, 0, 64640,
+ 0, 94109, 0, 74137, 70035, 10063, 12652, 12199, 92480, 0, 2566, 11971,
+ 983728, 0, 1065, 0, 0, 43400, 2576, 66696, 93999, 0, 43604, 0, 0, 74082,
+ 514, 74502, 70032, 2921, 43215, 64493, 5772, 12968, 70055, 194944, 74580,
+ 43398, 2580, 983801, 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, 0,
+ 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, 0,
+ 127025, 0, 74821, 0, 983724, 119042, 0, 127865, 13090, 66643, 0, 1270,
+ 1132, 42360, 0, 74096, 66655, 42569, 127824, 0, 64761, 0, 41021, 8510,
+ 42432, 0, 0, 194782, 0, 64496, 74109, 70030, 9915, 0, 983216, 7061,
+ 41336, 3854, 69700, 13141, 68413, 43401, 42319, 13082, 0, 7067, 68221, 0,
+ 127383, 127171, 0, 0, 127797, 9029, 43543, 119315, 2353, 6308, 0, 74792,
+ 2611, 119186, 0, 0, 0, 43664, 92399, 66627, 0, 4484, 8509, 118976, 11066,
+ 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, 12107,
+ 7100, 10905, 65010, 194986, 697, 66018, 9284, 4244, 0, 0, 92644, 13121,
+ 120036, 0, 12010, 128573, 128221, 0, 0, 0, 127193, 65816, 68111, 0,
+ 127933, 65668, 92257, 6618, 118784, 66365, 0, 42234, 12648, 78110, 7123,
+ 70038, 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, 0, 0, 68365,
+ 128258, 0, 0, 0, 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889,
64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683,
396, 41580, 68146, 0, 12901, 43058, 0, 343, 7129, 42680, 41360, 78154, 0,
- 4743, 0, 0, 74040, 74108, 8743, 1724, 1433, 119322, 0, 3739, 6263, 92514,
- 0, 3964, 6592, 0, 128693, 66040, 0, 42568, 69806, 0, 1778, 3956, 0,
- 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, 74531, 127969, 0,
- 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 92703, 118822, 1750,
- 0, 4394, 68368, 1807, 0, 92298, 0, 5889, 0, 7180, 0, 119145, 0, 917558,
- 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, 65230,
- 128109, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 92416, 3975, 0, 74087, 0,
- 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 2932,
- 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 128230,
- 41846, 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 128032, 0, 42531, 0,
- 1510, 0, 8256, 0, 11393, 0, 8879, 128075, 92474, 8770, 0, 0, 78377, 1910,
- 8671, 78374, 4283, 0, 127117, 68361, 78318, 2654, 7893, 195007, 0, 0, 0,
- 65106, 42761, 12857, 4581, 8411, 78372, 78371, 78370, 78369, 78368, 0, 0,
- 0, 1733, 4392, 2568, 10786, 69661, 0, 8184, 41486, 0, 7396, 7116, 0,
- 69788, 0, 7185, 7965, 0, 0, 92347, 0, 41350, 9129, 0, 0, 0, 0, 92489, 0,
- 10481, 0, 127486, 7171, 0, 340, 92498, 0, 0, 0, 92200, 0, 0, 6764,
- 127487, 0, 0, 0, 0, 65203, 11392, 119098, 119359, 0, 3210, 0, 0, 0, 0, 0,
- 127970, 917619, 0, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, 128244,
- 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, 128803, 3253,
- 120535, 0, 8630, 128544, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, 0, 0,
- 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 92285,
- 64558, 127122, 0, 127121, 0, 127913, 0, 5784, 0, 0, 0, 0, 4011, 917616,
- 68101, 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207,
- 120521, 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 194778, 194772,
- 9321, 0, 0, 0, 0, 1719, 68356, 68354, 9671, 1125, 4399, 127479, 917610,
- 0, 7631, 5488, 7128, 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490,
- 43046, 5489, 7212, 11768, 43043, 6300, 0, 7122, 0, 4390, 454, 41397, 0,
- 9875, 7593, 194792, 92274, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746,
- 11016, 65752, 120037, 0, 43423, 128683, 11989, 0, 0, 0, 0, 0, 8249,
- 128172, 0, 78531, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 127002,
- 65008, 0, 194784, 194989, 194795, 0, 92515, 68475, 0, 0, 0, 78637, 12647,
- 0, 128043, 0, 1036, 0, 92419, 1723, 128056, 0, 0, 41579, 2444, 0, 10705,
- 73876, 0, 74486, 0, 740, 119222, 194978, 194984, 0, 4238, 11071, 9459,
- 68437, 78140, 78139, 194985, 8121, 10438, 74487, 42574, 13285, 55263,
- 11907, 195000, 5690, 92255, 0, 0, 43181, 13095, 0, 127857, 64498, 0,
- 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 127845, 1122, 317, 0, 0, 0,
- 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, 5226,
- 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725,
+ 4743, 0, 0, 74040, 74108, 8743, 1724, 1433, 119322, 0, 3739, 6263, 71349,
+ 0, 3964, 6592, 0, 128693, 66040, 0, 42568, 69806, 128113, 1778, 3956, 0,
+ 42070, 6563, 43075, 9018, 94006, 983388, 12067, 41312, 0, 5547, 74531,
+ 127969, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 92703,
+ 118822, 1750, 0, 4394, 68368, 1807, 983879, 92298, 0, 5889, 0, 7180, 0,
+ 119145, 0, 917558, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583,
+ 4512, 119360, 65230, 128109, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 92416,
+ 3975, 0, 74087, 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0,
+ 41095, 3962, 0, 2932, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468,
+ 0, 0, 41851, 128230, 41846, 0, 55238, 7633, 41849, 68385, 4320, 3224, 0,
+ 128032, 0, 42531, 119108, 1510, 0, 8256, 0, 11393, 0, 8879, 128075,
+ 92474, 8770, 0, 0, 78377, 1910, 8671, 78374, 4283, 0, 127117, 68361,
+ 78318, 2654, 7893, 195007, 0, 0, 0, 65106, 42761, 12857, 4581, 8411,
+ 78372, 78371, 78370, 78369, 78368, 0, 0, 0, 1733, 4392, 2568, 10786,
+ 69661, 0, 8184, 41486, 0, 7396, 7116, 0, 69788, 0, 7185, 7965, 0, 0,
+ 92347, 983087, 41350, 9129, 0, 0, 2294, 0, 92489, 0, 10481, 0, 70022,
+ 7171, 0, 340, 92498, 93972, 0, 0, 92200, 0, 0, 6764, 127487, 0, 0, 0, 0,
+ 65203, 11392, 119098, 119359, 0, 3210, 0, 0, 118795, 0, 0, 127970,
+ 917619, 0, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, 126642, 3675, 5207,
+ 65062, 5213, 194769, 2617, 41348, 41568, 128803, 3253, 120535, 0, 8630,
+ 128544, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, 71336, 0, 0, 0, 64293,
+ 68098, 2635, 0, 0, 983837, 0, 983632, 7835, 70040, 0, 194988, 92285,
+ 64558, 127122, 0, 127121, 0, 127913, 0, 5784, 983102, 0, 0, 70033, 4011,
+ 917616, 68101, 0, 7864, 4254, 65095, 983488, 5600, 3903, 127083, 10447,
+ 5598, 1207, 120521, 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597,
+ 194778, 194772, 9321, 983476, 983473, 983474, 0, 1719, 68356, 68354,
+ 9671, 1125, 4399, 127479, 917610, 983480, 7631, 5488, 7128, 120532, 0,
+ 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043,
+ 6300, 0, 7122, 0, 4390, 454, 41397, 0, 9875, 7593, 194791, 92274, 118913,
+ 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, 120037, 0, 43423,
+ 128683, 11989, 0, 0, 0, 0, 0, 8249, 128172, 0, 78531, 6640, 74806, 2598,
+ 513, 0, 6586, 8656, 0, 120710, 65008, 0, 194784, 194989, 194795, 983465,
+ 92515, 68475, 93973, 0, 0, 78637, 12647, 0, 128043, 69893, 1036, 983469,
+ 92419, 1723, 128056, 74217, 0, 41579, 2444, 0, 10705, 73876, 983461,
+ 74486, 983459, 740, 119222, 194978, 194984, 0, 4238, 11071, 9459, 68437,
+ 78140, 78139, 194985, 8121, 10438, 74487, 42574, 13285, 55263, 11907,
+ 195000, 5690, 92255, 93992, 0, 43181, 13095, 0, 127857, 64498, 0, 9506,
+ 6978, 194993, 77992, 0, 0, 194992, 0, 127845, 1122, 317, 0, 0, 0, 0,
+ 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, 5226,
+ 12602, 94044, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725,
69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233,
- 127490, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0,
- 0, 0, 5296, 0, 42492, 43402, 92466, 3302, 0, 0, 6516, 6515, 6514, 6513,
- 6512, 0, 7856, 8690, 0, 0, 12122, 119602, 43976, 0, 1785, 92507, 68622,
- 65153, 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322,
- 4643, 5132, 0, 6389, 0, 5143, 0, 8790, 128694, 0, 194802, 0, 8869,
- 120601, 0, 42060, 0, 0, 194804, 127012, 10270, 10286, 10318, 10382,
- 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, 74376, 43139, 118815, 127084,
- 120627, 8767, 0, 74489, 9695, 120746, 5201, 0, 6215, 12714, 6214, 13101,
- 0, 194999, 65268, 0, 0, 0, 11027, 0, 10059, 10511, 42075, 9767, 789,
- 1749, 78890, 127071, 0, 320, 0, 8647, 0, 3049, 0, 6471, 42071, 43156,
- 9925, 127356, 127355, 66478, 4960, 5549, 127359, 127346, 8485, 4671,
- 5418, 127350, 3351, 127006, 127351, 10610, 5414, 3064, 6212, 4286, 5421,
- 127344, 9554, 0, 127794, 127109, 6653, 128811, 0, 64510, 6213, 12885, 0,
- 119045, 64720, 0, 120759, 73741, 12603, 7131, 11430, 4566, 7843, 9317,
- 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183,
- 127361, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224,
- 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126,
- 435, 0, 12014, 10377, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383,
- 10294, 10326, 128178, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112,
- 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 92170, 128659, 2624,
- 5364, 0, 11431, 120030, 9101, 11058, 78288, 0, 78293, 42271, 78289,
- 42917, 120793, 0, 65566, 6717, 10619, 43360, 78385, 78384, 78383, 78382,
- 78381, 78380, 78379, 9319, 7097, 119055, 77906, 3232, 73824, 74581,
- 120632, 0, 0, 41889, 92453, 0, 1161, 41895, 74103, 9701, 8622, 0, 0,
- 73819, 120588, 5012, 77912, 41362, 0, 78296, 11921, 0, 11769, 0, 68609,
- 41364, 0, 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 68422, 119915,
- 7134, 8199, 78389, 119917, 677, 119916, 0, 119932, 127169, 0, 0, 0, 3349,
- 74125, 7022, 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 10190, 120698,
- 65837, 128820, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, 10852, 0,
- 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, 0, 0, 5815, 5171,
- 65539, 68612, 6932, 78315, 42394, 41878, 74849, 120621, 0, 5169, 11935,
- 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, 4136, 4871, 78287, 0, 9833,
- 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, 9410, 9411, 3662, 9413,
- 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, 9423, 5165, 5126,
- 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, 7119, 9403, 9404, 3507,
- 9406, 7629, 0, 19925, 42669, 68463, 183, 43985, 2631, 0, 10627, 41130,
- 78260, 3996, 0, 78771, 0, 119313, 119307, 78768, 6580, 4332, 64825,
- 66329, 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922,
- 77825, 73828, 5448, 41058, 5446, 69709, 41322, 42211, 5442, 4190, 77834,
- 77835, 5451, 77833, 3616, 77828, 77837, 77838, 7708, 77836, 10859, 65867,
- 10345, 10409, 4191, 0, 77844, 73800, 42181, 77843, 77839, 2060, 0, 7111,
- 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, 9862,
- 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, 7125,
- 9819, 41357, 8011, 42885, 5507, 12044, 92636, 0, 10026, 5472, 7109, 1191,
- 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, 42876,
- 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, 0,
- 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 69731, 64633,
- 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 7137, 0,
- 128296, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199,
- 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894,
- 0, 0, 41171, 92511, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0,
- 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626,
- 10442, 10676, 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0,
- 0, 78853, 0, 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858,
- 120359, 11012, 0, 78856, 92400, 77879, 4973, 8784, 77877, 74804, 77874,
- 77869, 77871, 42440, 0, 43118, 0, 42364, 6774, 6773, 917560, 120369,
- 10346, 10410, 78859, 9243, 2464, 74263, 6108, 3372, 0, 6247, 43117,
- 74526, 7121, 74166, 0, 120355, 92537, 0, 0, 195034, 0, 0, 0, 74217, 3354,
- 195037, 4192, 9289, 118999, 41191, 3876, 0, 127983, 120660, 43696, 43380,
- 0, 0, 0, 0, 11603, 0, 0, 6589, 128588, 194679, 0, 0, 0, 0, 0, 42572,
- 128264, 10630, 74827, 1963, 118889, 127978, 11654, 0, 7550, 10686, 5903,
- 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 127927,
- 128300, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 43367, 64579,
+ 127490, 983433, 42816, 94036, 65140, 74797, 0, 8830, 6568, 42300, 10524,
+ 41175, 983440, 983437, 983438, 5296, 983436, 42492, 43402, 92466, 3302,
+ 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 0, 0, 12122, 119602,
+ 43976, 0, 1785, 69925, 68622, 65153, 194810, 5138, 0, 0, 118869, 0, 4540,
+ 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, 6389, 128533, 5143, 0,
+ 8790, 128694, 0, 194802, 0, 8869, 69916, 0, 42060, 71326, 9648, 194804,
+ 127012, 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234,
+ 0, 0, 74376, 43139, 118815, 127084, 120627, 8767, 0, 74489, 9695, 120746,
+ 5201, 0, 6215, 12714, 6214, 13101, 0, 194999, 65268, 0, 0, 0, 11027, 0,
+ 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 983661, 320, 0,
+ 8647, 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 66478, 4960,
+ 5549, 127359, 127346, 8485, 4671, 5418, 127350, 3351, 127006, 127351,
+ 10610, 5414, 3064, 6212, 4286, 5421, 127344, 9554, 0, 94048, 127109,
+ 6653, 128811, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741,
+ 12603, 7131, 11430, 4566, 7518, 9317, 3801, 10342, 10406, 0, 119259,
+ 42576, 0, 5200, 126611, 917948, 0, 9183, 127361, 74458, 73825, 395, 5482,
+ 5198, 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 0, 43307, 0,
+ 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, 10377, 8093, 9079,
+ 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, 128178, 5738,
+ 983213, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, 1260,
+ 3149, 5359, 120134, 0, 7914, 5357, 92170, 128659, 2624, 5364, 0, 11431,
+ 120030, 9101, 11058, 78288, 0, 78293, 42271, 78289, 42917, 120793, 0,
+ 65566, 6717, 10619, 43360, 78385, 78384, 11832, 78382, 78381, 78380,
+ 78379, 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0,
+ 41889, 92453, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588,
+ 5012, 77912, 41362, 69862, 78296, 11921, 0, 11769, 0, 68609, 41364, 0,
+ 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 68422, 119915, 7134,
+ 8199, 78389, 119917, 677, 119916, 0, 119932, 127169, 0, 0, 0, 3349,
+ 74125, 7022, 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 128819, 10190,
+ 120698, 65837, 128820, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305,
+ 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, 0, 0,
+ 5815, 5171, 65539, 68612, 6932, 74267, 42394, 41878, 74849, 120621, 0,
+ 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, 4136, 4871,
+ 78287, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, 9410, 9411,
+ 3662, 9413, 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, 9423,
+ 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, 7119, 9403,
+ 9404, 3507, 9406, 7629, 983617, 19925, 42669, 68463, 183, 43985, 2631, 0,
+ 10627, 41130, 78260, 3996, 0, 78771, 0, 119313, 119307, 78768, 6580,
+ 4332, 64825, 66329, 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0,
+ 574, 917922, 77825, 73828, 5448, 41058, 5446, 69709, 41322, 42211, 5442,
+ 4190, 77834, 77835, 5451, 77833, 3616, 77828, 77837, 77838, 7708, 77836,
+ 10859, 65867, 10345, 10409, 4191, 0, 77844, 73800, 42181, 77843, 77839,
+ 2060, 0, 7111, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351,
+ 119076, 0, 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503,
+ 8021, 0, 7125, 9819, 41357, 8011, 42885, 5507, 12044, 92636, 0, 10026,
+ 5472, 7109, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267,
+ 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 78411, 43762, 4367, 0, 0,
+ 5478, 5904, 5594, 0, 74150, 7291, 5590, 43761, 13067, 118909, 120372,
+ 983108, 9731, 69731, 64633, 77857, 77854, 77855, 77852, 77853, 77850,
+ 10750, 43714, 77858, 7137, 0, 128296, 12887, 10551, 194564, 77866, 77867,
+ 77864, 77865, 9929, 5199, 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839,
+ 55252, 73972, 1442, 0, 5894, 70069, 0, 41171, 92511, 74313, 0, 13162, 0,
+ 3334, 195010, 118803, 77881, 66022, 0, 0, 1651, 128771, 8861, 0, 0, 1142,
+ 0, 8271, 0, 983058, 126645, 12903, 0, 4002, 43626, 10442, 10676, 3344, 0,
+ 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, 78854,
+ 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, 78856,
+ 92400, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, 42440, 0,
+ 43118, 0, 42364, 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243,
+ 2464, 74263, 6108, 3372, 0, 6247, 43117, 74526, 7121, 74166, 0, 120355,
+ 92537, 0, 0, 195034, 0, 0, 0, 70083, 3354, 195037, 4192, 9289, 118999,
+ 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 0, 0, 11603,
+ 983945, 0, 6589, 128588, 194679, 0, 0, 983691, 0, 0, 42572, 128264,
+ 10630, 74827, 1963, 11622, 127098, 11654, 0, 7550, 10686, 5903, 0, 78009,
+ 41329, 9662, 917937, 64698, 3366, 10399, 0, 5542, 11013, 127927, 128300,
+ 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 983664, 43367, 64579,
917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416,
- 12296, 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 0, 0, 9532,
- 66355, 0, 0, 917925, 64343, 195032, 128281, 195031, 0, 0, 195057, 11445,
- 0, 2112, 195056, 128814, 10185, 1021, 128130, 9507, 10210, 74544, 8023,
- 1200, 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493, 3343, 4424,
- 11047, 1885, 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0,
- 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 64757, 0, 3913, 0, 0,
- 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239, 11791, 0, 0, 8221,
- 78307, 41864, 0, 0, 0, 0, 167, 0, 78301, 0, 74211, 41897, 68477, 0,
- 917583, 0, 0, 2493, 0, 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385,
- 0, 92450, 0, 917573, 43030, 42027, 12114, 0, 917579, 64936, 194695, 0,
- 120629, 10561, 0, 8365, 120539, 0, 65841, 120787, 11601, 0, 74121, 0,
- 917575, 7834, 74159, 0, 917574, 10298, 6624, 4908, 917596, 1639, 0, 0,
- 74157, 6327, 6724, 0, 128086, 92566, 0, 4817, 78446, 194759, 92536, 7043,
- 9600, 11022, 0, 0, 0, 0, 0, 0, 7548, 64794, 42050, 12291, 55289, 194761,
- 12343, 657, 195054, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, 0, 0,
- 0, 4456, 5206, 10720, 0, 42523, 127520, 0, 0, 917595, 65550, 260, 4816,
- 67658, 10687, 0, 4821, 4466, 0, 195043, 4818, 195048, 41403, 119977, 0,
- 0, 41406, 43273, 74160, 119983, 73939, 92638, 119984, 119979, 41404,
- 1165, 119980, 4451, 13087, 0, 11284, 119987, 73855, 65155, 43014, 5439,
- 9363, 127558, 3375, 128869, 5900, 0, 7889, 2722, 42262, 0, 0, 128774, 0,
- 0, 0, 127810, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, 7280, 127887, 0,
- 127381, 4868, 119967, 119966, 118798, 0, 0, 43161, 0, 92360, 0, 5182, 0,
- 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0,
- 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0, 786, 0, 43174,
- 64340, 0, 0, 120723, 43026, 7612, 10132, 64413, 65025, 0, 0, 0, 0, 0,
- 68444, 0, 92437, 0, 119160, 10204, 92656, 0, 127809, 0, 1399, 0, 65217,
- 0, 8852, 0, 241, 128780, 4907, 0, 0, 7932, 9727, 128873, 74255, 8748, 0,
- 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965,
- 119119, 6719, 0, 13300, 78439, 128261, 43057, 66588, 118991, 0, 0, 73815,
- 4420, 0, 6410, 7760, 0, 0, 0, 0, 0, 7294, 0, 0, 0, 9066, 0, 11993, 43188,
- 2626, 7762, 0, 0, 0, 92601, 42825, 41854, 5304, 0, 78516, 6919, 8619,
- 119655, 10038, 66454, 9592, 42851, 126993, 1542, 92303, 0, 0, 0, 0,
- 74311, 78497, 0, 10181, 0, 43624, 0, 7779, 0, 10195, 9479, 6029, 0,
- 92268, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, 127030, 7697, 69237,
- 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831,
- 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, 68140, 0, 9576,
- 128872, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, 7709, 41112,
- 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, 809, 0,
- 92283, 128316, 128004, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128,
- 78819, 64386, 65257, 0, 68616, 120607, 9347, 128067, 6532, 0, 0, 0,
- 127060, 65828, 0, 283, 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370,
- 0, 11361, 5443, 78778, 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706,
- 0, 43344, 0, 7144, 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0,
- 127178, 43264, 0, 0, 0, 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890,
- 127837, 0, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107, 77826, 0,
- 42562, 0, 0, 0, 128520, 11485, 6103, 127123, 0, 11718, 0, 12889, 92657,
- 127137, 0, 0, 0, 55245, 0, 1630, 128232, 65483, 0, 12565, 0, 65476,
- 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, 64593, 512, 3376,
- 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, 5957, 110593,
- 8926, 0, 0, 128273, 10745, 10174, 7379, 64581, 5386, 120686, 11713,
- 10633, 69708, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 128038,
- 0, 0, 127174, 64278, 92370, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835,
- 119029, 0, 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883,
- 0, 0, 128570, 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951,
- 9522, 74079, 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899,
+ 12296, 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 0, 983605,
+ 9532, 66355, 0, 983228, 917925, 64343, 195032, 128281, 195031, 0, 195030,
+ 195057, 11445, 0, 2112, 195056, 128814, 10185, 1021, 128130, 9507, 10210,
+ 74544, 8023, 1200, 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493,
+ 3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894,
+ 4391, 68139, 983062, 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 64757,
+ 0, 3913, 0, 0, 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239,
+ 11791, 0, 0, 8221, 78307, 41864, 0, 0, 0, 0, 167, 983897, 78301, 983644,
+ 74211, 41897, 68477, 0, 917583, 983625, 94065, 2493, 0, 118811, 0, 0,
+ 64354, 0, 8777, 0, 406, 8884, 2385, 0, 92450, 0, 917573, 43030, 42027,
+ 12114, 0, 917579, 64936, 194695, 0, 120629, 10561, 0, 8365, 120539,
+ 983765, 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0,
+ 917574, 10298, 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0,
+ 128086, 92566, 69910, 4817, 78446, 194759, 92536, 7043, 9600, 11022, 0,
+ 0, 0, 0, 0, 0, 7548, 64794, 42050, 12291, 55289, 194761, 12343, 657,
+ 195054, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, 0, 0, 0, 4456,
+ 5206, 10720, 0, 42523, 127520, 0, 0, 917595, 65550, 260, 4816, 67658,
+ 10687, 0, 4821, 4466, 0, 195043, 4818, 195048, 41403, 119977, 0, 0,
+ 41406, 43273, 74160, 119983, 73939, 92638, 119984, 119979, 41404, 1165,
+ 119980, 4451, 13087, 0, 11284, 119987, 70097, 65155, 43014, 5439, 9363,
+ 70070, 3375, 128869, 5900, 93990, 7889, 2722, 42262, 0, 0, 128774, 0,
+ 2282, 0, 127810, 11401, 983813, 0, 68459, 0, 0, 0, 0, 65438, 0, 7280,
+ 127887, 0, 127381, 4868, 119967, 119966, 118798, 0, 0, 43161, 0, 92360,
+ 0, 5182, 0, 120542, 0, 0, 4226, 119243, 12135, 5732, 4464, 0, 71330, 977,
+ 4458, 0, 0, 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0,
+ 786, 0, 43174, 64340, 0, 194767, 120723, 43026, 7612, 10132, 64413,
+ 65025, 0, 0, 0, 93956, 0, 68444, 0, 92437, 0, 119160, 10204, 92656, 0,
+ 127809, 983635, 1399, 983643, 65217, 0, 8852, 128571, 241, 128780, 4907,
+ 0, 983630, 7932, 9727, 128873, 74255, 8748, 0, 0, 983634, 0, 42780, 0, 0,
+ 0, 4217, 0, 8650, 0, 0, 0, 69900, 118872, 43099, 3965, 119119, 6719, 0,
+ 13300, 78439, 93971, 43057, 66588, 118991, 0, 0, 73815, 4420, 0, 6410,
+ 7760, 0, 0, 0, 0, 0, 7294, 0, 0, 0, 9066, 0, 11993, 43188, 2626, 7762, 0,
+ 0, 0, 92601, 42825, 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038,
+ 66454, 9592, 42851, 126993, 1542, 92303, 0, 0, 0, 0, 74311, 78497, 0,
+ 10181, 0, 43624, 0, 7779, 0, 10195, 9479, 6029, 0, 92268, 9689, 0, 65577,
+ 8993, 66358, 0, 42378, 3368, 606, 127030, 7697, 69237, 69787, 2030, 0,
+ 6027, 8370, 4322, 0, 65207, 0, 983331, 983330, 983329, 983328, 2735,
+ 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, 68140,
+ 983919, 9576, 128872, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063,
+ 7709, 41112, 983132, 66560, 42041, 4572, 12876, 66561, 983749, 6758,
+ 983917, 1615, 5855, 809, 0, 92283, 128316, 128004, 5799, 983320, 70100,
+ 983318, 7260, 983316, 43031, 64425, 65128, 78819, 64386, 65257, 0, 68616,
+ 120607, 9347, 128067, 6532, 0, 0, 0, 127060, 65828, 0, 283, 68665, 78813,
+ 532, 78663, 0, 983787, 120609, 0, 3370, 0, 11361, 5443, 78778, 8153,
+ 73767, 0, 10741, 0, 2298, 0, 983908, 65495, 64706, 983310, 43344, 983308,
+ 7144, 9466, 78866, 9824, 983303, 983302, 0, 0, 915, 43425, 0, 0, 0, 0,
+ 127178, 43264, 70096, 0, 0, 43038, 78864, 6730, 78862, 68161, 64550,
+ 5186, 7360, 127837, 0, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107,
+ 77826, 0, 42562, 0, 128821, 0, 128520, 11485, 6103, 127123, 983297,
+ 11718, 983295, 12889, 92657, 127137, 0, 0, 0, 55245, 0, 1630, 128232,
+ 65483, 0, 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690,
+ 65499, 0, 64593, 512, 3376, 68210, 0, 128677, 77892, 632, 12940, 77891,
+ 42529, 78587, 0, 5957, 110593, 8926, 983291, 983290, 128273, 10745,
+ 10174, 7379, 64581, 5386, 120686, 11713, 10633, 69708, 5056, 0, 0, 0,
+ 120773, 0, 9812, 0, 4460, 0, 0, 71307, 128038, 0, 0, 127174, 64278,
+ 92370, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, 73823, 0,
+ 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 983278, 983277,
+ 128570, 12106, 983274, 74207, 1755, 10482, 12863, 77898, 1163, 2951,
+ 9522, 74079, 78266, 66604, 0, 3384, 69227, 10702, 830, 77902, 77899,
77900, 8451, 0, 0, 0, 69739, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0,
- 12239, 0, 0, 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 9199, 0, 4056,
- 118992, 41890, 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 64437,
- 127935, 118816, 194742, 9684, 216, 0, 1401, 128053, 44012, 0, 0, 92585,
- 9158, 77842, 120664, 5768, 0, 0, 0, 484, 194739, 0, 0, 65895, 0, 0, 3338,
- 73935, 572, 7041, 2736, 67605, 0, 128680, 2794, 8807, 64491, 77847, 5438,
- 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, 77846, 194747, 9534, 0, 0,
- 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, 120536, 1824, 10908, 0, 7034,
- 41683, 64617, 0, 73754, 3957, 64358, 64547, 128259, 674, 63991, 0, 2946,
- 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, 119628, 5281, 5469,
- 5121, 119245, 118993, 0, 5130, 0, 0, 77990, 0, 120726, 1221, 2733, 11746,
- 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 195052, 0, 0, 120677,
- 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, 11739, 0,
- 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0,
- 126976, 0, 10009, 0, 41703, 0, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0,
- 0, 0, 92457, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 128340, 0,
- 0, 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 92345, 11468,
- 64636, 7575, 0, 2724, 0, 0, 12313, 110592, 515, 119947, 42791, 63987,
- 78286, 119943, 119940, 119941, 119938, 9775, 4046, 4589, 4521, 68629,
- 9141, 0, 78850, 2741, 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606,
- 3303, 41372, 11786, 9473, 66203, 66177, 92446, 11593, 43007, 4478, 66178,
- 0, 0, 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 43786, 119961,
- 66198, 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189,
- 73788, 7788, 4847, 0, 127759, 0, 0, 0, 1581, 6535, 78161, 12954, 430,
- 78160, 55259, 78158, 128036, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269,
- 0, 5964, 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0,
- 4944, 5467, 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931,
- 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824,
- 128676, 12091, 78893, 78894, 119816, 4673, 64804, 4678, 119820, 119819,
- 65059, 0, 6739, 0, 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677,
- 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166,
- 4674, 4548, 44005, 119949, 68658, 119946, 8025, 68630, 127024, 1855, 0,
- 68669, 0, 92445, 127554, 0, 0, 119652, 2745, 11797, 0, 128159, 9202,
- 4654, 0, 0, 68638, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0,
- 6246, 64950, 7828, 4650, 6777, 6776, 6775, 4653, 7822, 78005, 92384,
- 43187, 8669, 0, 6821, 65093, 0, 78881, 2716, 0, 0, 0, 0, 68369, 120054,
+ 12239, 0, 0, 4441, 0, 983271, 73940, 64352, 127513, 983267, 411, 983265,
+ 9199, 983263, 4056, 118992, 41890, 0, 2730, 41604, 983928, 5428, 194743,
+ 3364, 42265, 64437, 127935, 118816, 194742, 9684, 216, 0, 1401, 128053,
+ 44012, 0, 0, 92585, 9158, 77842, 69905, 5768, 0, 0, 0, 484, 194739, 0, 0,
+ 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 983255, 93962, 2794,
+ 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509,
+ 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 78717, 0, 981, 0, 4330, 73929,
+ 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547,
+ 128259, 674, 63991, 983243, 2946, 5354, 5251, 5328, 5307, 3759, 11411,
+ 8364, 5123, 119628, 5281, 5469, 5121, 119245, 118993, 0, 5130, 0, 0,
+ 77990, 0, 120726, 1221, 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033,
+ 9230, 5939, 195052, 0, 0, 120677, 68400, 7278, 10321, 10289, 64613,
+ 10385, 41706, 0, 0, 983405, 0, 11739, 983418, 41981, 0, 5938, 0, 43766,
+ 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0,
+ 41703, 983629, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0, 0, 0, 92457, 0,
+ 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 128340, 0, 0, 0, 10970,
+ 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 92345, 11468, 64636, 7575, 0,
+ 2724, 0, 0, 12313, 110592, 515, 119947, 42791, 63987, 78286, 119943,
+ 119940, 119941, 119938, 9775, 4046, 4589, 4521, 68629, 9141, 0, 78850,
+ 2741, 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372,
+ 11786, 9473, 66203, 66177, 92446, 11593, 43007, 4478, 66178, 0, 0, 2744,
+ 0, 4477, 118964, 814, 42066, 66183, 66204, 43786, 119961, 66198, 41880,
+ 66188, 11623, 78148, 11955, 66190, 66191, 41111, 66189, 73788, 7788,
+ 4847, 0, 127759, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259,
+ 78158, 128036, 5278, 4945, 42883, 4950, 983430, 68625, 983428, 7269, 0,
+ 5964, 12908, 983555, 0, 74764, 74477, 119146, 194936, 4949, 983421, 443,
+ 983419, 4944, 5467, 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0,
+ 194931, 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304,
+ 824, 128676, 12091, 78893, 78894, 119816, 4673, 64804, 4678, 119820,
+ 119819, 65059, 0, 6739, 0, 5481, 3490, 1199, 119811, 8356, 69947, 119832,
+ 4677, 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170,
+ 78166, 4674, 4548, 44005, 119949, 68658, 119946, 8025, 68630, 127024,
+ 1855, 983404, 68669, 983402, 92445, 127554, 0, 127339, 119652, 2745,
+ 11797, 983410, 128159, 9202, 4654, 983406, 983408, 68638, 73993, 10525,
+ 4649, 65209, 983409, 0, 4648, 43080, 983398, 983399, 983396, 6246, 64950,
+ 7828, 4650, 6777, 6776, 6775, 4653, 7822, 78005, 92384, 43187, 8669,
+ 983407, 6821, 65093, 0, 78881, 2716, 0, 983060, 983411, 0, 68369, 120054,
11060, 8547, 2711, 42165, 78027, 78026, 7992, 0, 0, 4662, 78033, 78032,
9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, 7811,
- 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 0, 0, 0,
- 64904, 9026, 10833, 74864, 7547, 4867, 0, 10008, 10222, 3054, 194956,
- 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, 0, 9045, 78888, 4225, 19926,
- 78887, 12880, 65307, 4617, 78883, 0, 41732, 4616, 10518, 10423, 10359, 0,
- 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, 5368, 0,
- 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, 2696, 0, 0, 4638, 0,
- 1790, 78242, 5965, 64363, 66569, 68646, 194968, 5376, 1835, 5335, 194966,
+ 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 983403,
+ 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, 10008, 10222, 3054,
+ 194956, 9744, 78860, 7605, 4622, 119656, 983387, 94070, 983385, 983386,
+ 983383, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883,
+ 983378, 41732, 4616, 10518, 10423, 10359, 983372, 5958, 0, 983425, 4215,
+ 9789, 917941, 4321, 4621, 983381, 41313, 522, 5368, 0, 65803, 0, 5366,
+ 12201, 5372, 0, 983401, 0, 7720, 7390, 2696, 983392, 0, 4638, 983397,
+ 1790, 78242, 5965, 64363, 66569, 68646, 127833, 5376, 1835, 5335, 194966,
128089, 4633, 0, 68119, 1180, 4632, 128093, 5387, 5333, 0, 0, 42094,
- 5331, 4634, 11928, 0, 5338, 4637, 128170, 5971, 42414, 0, 1268, 65097,
- 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0,
- 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0,
- 68377, 6248, 0, 0, 0, 42318, 92582, 5229, 4757, 0, 0, 2728, 4752, 64563,
- 65235, 5234, 0, 128145, 0, 10713, 7166, 0, 2622, 7460, 127302, 0, 0,
- 8954, 74760, 65189, 2632, 92230, 10108, 1011, 5574, 1853, 2709, 65139,
- 5577, 0, 0, 118871, 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572,
- 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498,
- 127851, 195009, 0, 74022, 0, 64609, 68643, 120634, 0, 5721, 0, 5519,
- 8632, 66465, 11267, 73961, 92278, 5720, 0, 1692, 4219, 4610, 8696, 4305,
- 0, 4609, 43478, 4614, 541, 0, 5287, 5309, 5285, 68389, 5961, 4647, 56,
- 4216, 10577, 41381, 601, 4613, 0, 0, 92276, 4608, 64260, 41124, 5190,
- 67628, 0, 68145, 7086, 0, 119243, 67620, 0, 2734, 11074, 0, 67627, 43593,
- 0, 67625, 5960, 0, 8992, 42593, 128260, 1782, 67622, 68114, 119939, 0,
- 68180, 5501, 119952, 42508, 7442, 43665, 359, 41253, 68392, 6239, 119956,
- 41256, 0, 68134, 0, 74209, 917550, 9346, 69660, 41254, 128047, 43291,
- 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 64724, 7193, 68137, 0,
- 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 128201, 6650, 0,
- 0, 0, 127890, 4870, 120445, 68661, 6716, 78176, 68667, 68382, 68676,
- 127925, 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745,
- 0, 195097, 92195, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0,
- 5966, 0, 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 128562, 68196,
- 43285, 10216, 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776,
- 73818, 11492, 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 194706,
- 1715, 4849, 8242, 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0,
- 4850, 0, 1607, 466, 4853, 118995, 4854, 127918, 5164, 0, 1350, 5124,
- 64420, 1993, 5362, 8471, 2708, 92471, 12445, 3785, 234, 3199, 0, 41268,
- 4848, 2530, 917909, 2068, 1964, 0, 73762, 10458, 0, 8576, 78543, 0, 2704,
- 4794, 0, 68211, 8322, 4797, 5753, 0, 2694, 4792, 0, 2439, 65104, 69804,
- 0, 303, 0, 92622, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292,
- 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 43379, 4937,
+ 5331, 4634, 11928, 983594, 5338, 4637, 128170, 5971, 42414, 0, 1268,
+ 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758,
+ 983366, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231,
+ 74384, 983370, 68377, 6248, 983354, 983355, 983352, 42318, 92582, 5229,
+ 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 128145, 0, 10713, 7166, 0,
+ 2622, 7460, 127302, 0, 0, 8954, 74760, 65189, 2632, 42617, 10108, 1011,
+ 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, 68641, 8965, 7635, 42177,
+ 5316, 0, 5314, 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 983412,
+ 983863, 194907, 44003, 0, 983472, 983415, 120498, 127851, 195009, 983856,
+ 74022, 983414, 64609, 68643, 120634, 983481, 5721, 983393, 5519, 8632,
+ 66465, 11267, 73961, 92278, 5720, 983344, 1692, 4219, 4610, 8696, 4305,
+ 0, 4609, 43478, 4614, 541, 983347, 5287, 5309, 5285, 68389, 5961, 4647,
+ 56, 4216, 10577, 41381, 601, 4613, 983341, 983338, 77849, 4608, 64260,
+ 41124, 5190, 67628, 0, 68145, 7086, 0, 67998, 67620, 0, 2734, 11074, 0,
+ 67627, 43593, 0, 67625, 5960, 0, 8992, 42593, 128260, 1782, 67622, 68114,
+ 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, 41253, 68392,
+ 6239, 119956, 41256, 0, 68134, 0, 74209, 917550, 9346, 69660, 41254,
+ 128047, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 64724,
+ 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 983831, 4869, 120563, 0,
+ 4223, 128201, 6650, 126509, 0, 983455, 127890, 4870, 120445, 68661, 6716,
+ 78176, 68667, 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 0,
+ 6245, 68652, 2732, 42734, 745, 0, 195097, 92195, 4777, 7821, 0, 68631,
+ 42775, 0, 194954, 0, 3097, 0, 5966, 983478, 4778, 0, 10863, 0, 4781, 0,
+ 64407, 0, 128323, 8577, 128562, 68196, 43285, 10216, 4782, 0, 0, 120757,
+ 68618, 12325, 43056, 8717, 0, 0, 4776, 73818, 11492, 8700, 0, 13176,
+ 68363, 10426, 0, 917599, 10362, 194706, 1715, 4849, 8242, 9561, 73922,
+ 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995,
+ 4854, 127918, 5164, 983861, 1350, 5124, 64420, 1993, 5362, 8471, 2708,
+ 92471, 12445, 3785, 234, 3199, 0, 41268, 4848, 2530, 917909, 2068, 1964,
+ 0, 73762, 10458, 0, 8576, 78543, 0, 2704, 4794, 0, 68211, 8322, 4797,
+ 5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983416, 303, 983101, 92622,
+ 983417, 2437, 0, 4221, 4844, 92216, 0, 0, 0, 70042, 0, 43292, 0, 2441,
+ 10739, 65090, 0, 119327, 126541, 2451, 2714, 119326, 0, 43379, 4937,
43376, 753, 5849, 10597, 43089, 11722, 9248, 92555, 42879, 11725, 0, 0,
2726, 3107, 73958, 4941, 64937, 119233, 9140, 1408, 5261, 4607, 0, 181,
- 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964,
- 5264, 64178, 64177, 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873,
- 41231, 1822, 42526, 128581, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0,
- 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 0, 3125, 9567, 0,
- 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0, 11494, 0, 9563, 10865,
- 74570, 43279, 64186, 0, 78714, 64191, 64190, 8898, 64188, 0, 41030,
- 78836, 0, 917835, 78820, 917834, 0, 78805, 41031, 78801, 11960, 6745,
- 3082, 0, 78539, 73919, 10573, 41744, 7079, 5856, 127043, 5163, 78809,
- 128162, 1817, 66724, 78538, 0, 10564, 7763, 13077, 41813, 4400, 41745,
- 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204,
- 64203, 64201, 64200, 64199, 64198, 0, 42156, 78688, 0, 64193, 64192,
- 65223, 9943, 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173,
- 78189, 846, 78186, 9965, 0, 0, 0, 0, 2543, 12163, 3108, 9745, 64167,
- 64166, 64165, 64164, 2110, 92176, 64169, 64168, 64949, 10972, 10251,
- 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, 11352,
- 550, 9910, 0, 0, 66579, 11551, 0, 195080, 9504, 7187, 0, 10373, 0,
- 120791, 10261, 10253, 6404, 10277, 78183, 11984, 1552, 65222, 6998,
- 78180, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, 5065,
- 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200,
- 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559,
- 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151,
- 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954,
- 64927, 4185, 41045, 127141, 41438, 41439, 68666, 10711, 4593, 127745,
- 120584, 0, 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888,
- 127800, 5148, 42834, 0, 78205, 78206, 43787, 78204, 64131, 3119, 917814,
- 0, 3060, 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836,
- 42741, 64137, 8320, 78640, 8863, 92431, 119960, 1477, 43289, 0, 74358,
- 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536,
- 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, 11950, 5392,
- 42248, 65129, 68656, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, 354,
- 68615, 119948, 78503, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780,
- 0, 0, 128874, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 128186, 0, 7145, 3918,
- 66452, 3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, 813,
- 119945, 68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, 42117,
- 92287, 128224, 0, 0, 74046, 120583, 4911, 988, 917807, 0, 0, 43061, 7054,
+ 983422, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257,
+ 983601, 0, 4964, 5264, 64178, 64177, 12979, 41411, 64182, 64181, 64180,
+ 64179, 9482, 4873, 41231, 1822, 42526, 128581, 12758, 3865, 0, 0, 10500,
+ 0, 119024, 78028, 92408, 9830, 43642, 389, 10893, 7521, 127879, 4872,
+ 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0,
+ 11494, 126492, 9563, 10865, 74570, 43279, 64186, 983431, 78714, 64191,
+ 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805,
+ 41031, 78801, 11960, 6745, 3082, 983429, 78539, 73919, 10573, 41744,
+ 7079, 5856, 127043, 5163, 78809, 128162, 1817, 66724, 78538, 0, 10564,
+ 7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, 41814,
+ 4248, 0, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, 126471,
+ 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, 64194,
+ 13282, 64175, 64174, 64173, 78189, 846, 78186, 9965, 0, 0, 0, 0, 2543,
+ 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, 92176, 64169, 64168,
+ 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, 9453, 5348, 10943,
+ 120378, 0, 11352, 550, 9910, 126705, 0, 66579, 11551, 0, 195080, 9504,
+ 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 78183, 11984, 1552,
+ 65222, 6998, 78180, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827,
+ 1146, 5065, 69890, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809,
+ 0, 78200, 78201, 5062, 1264, 64817, 13254, 11697, 126598, 9785, 64716, 0,
+ 3933, 74559, 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 983864,
+ 42130, 0, 5151, 917829, 917823, 0, 93980, 0, 7620, 3800, 65122, 0, 0,
+ 8355, 7854, 0, 954, 64927, 4185, 41045, 127141, 41438, 41439, 68666,
+ 10711, 4593, 127745, 120584, 983400, 64774, 8053, 10532, 66727, 0, 0, 0,
+ 64759, 6381, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787,
+ 78204, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 77876, 636, 11698,
+ 0, 983443, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 92431,
+ 119960, 1477, 43289, 0, 74358, 8618, 983394, 9908, 983972, 0, 0, 3937,
+ 12312, 0, 983395, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244,
+ 92209, 71341, 3935, 120665, 983468, 0, 11950, 5392, 42248, 65129, 68656,
+ 5397, 0, 12046, 12599, 0, 128261, 5395, 0, 5393, 354, 68615, 119948,
+ 78503, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 128874,
+ 0, 0, 43297, 983079, 4311, 4644, 8818, 0, 128186, 0, 7145, 3918, 66452,
+ 3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, 813, 119945,
+ 68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, 42117, 92287,
+ 128224, 0, 0, 74046, 43745, 4911, 988, 917807, 0, 983460, 43061, 7054,
64147, 0, 64920, 68195, 6698, 118933, 92506, 0, 120006, 11981, 12202, 0,
11032, 67654, 6093, 11608, 975, 68662, 65843, 170, 0, 0, 4169, 0, 41859,
6058, 120401, 13203, 120657, 0, 0, 68657, 9818, 10178, 10324, 42106,
5898, 74540, 4738, 41856, 7062, 917865, 4737, 11779, 4742, 120564, 92391,
- 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 92525, 0, 5300, 4741, 42108,
- 0, 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, 0, 127331,
- 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, 3928, 917870, 43378,
- 10706, 7198, 0, 4842, 12053, 128129, 0, 4841, 0, 4171, 12008, 6251, 3923,
- 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, 4845, 8332,
- 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, 69240, 917852,
- 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274,
- 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134,
- 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888,
- 1960, 7861, 917856, 78524, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0,
- 6211, 0, 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 92221,
- 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, 0, 0, 4017, 12827, 5241,
- 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844,
- 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139,
- 0, 0, 0, 0, 0, 12740, 128702, 4722, 6816, 127793, 12759, 4725, 0, 4726,
- 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0,
- 128294, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0,
+ 73736, 983356, 9825, 6448, 6715, 127008, 4831, 0, 92525, 0, 5300, 4741,
+ 42108, 983346, 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620,
+ 917916, 127331, 65549, 9496, 64598, 118866, 983358, 7876, 68132, 917872,
+ 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 128129, 0, 4841, 0,
+ 4171, 12008, 6251, 3923, 1490, 0, 119591, 126512, 40972, 5245, 0, 10114,
+ 42001, 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849,
+ 4825, 69240, 917852, 68655, 0, 983380, 0, 0, 68628, 983339, 9850, 118937,
+ 367, 1472, 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261,
+ 11023, 119559, 4830, 9134, 78666, 64126, 43011, 0, 126626, 64101, 0, 0,
+ 4824, 10614, 119659, 0, 1888, 1960, 7861, 917856, 78524, 41836, 43012,
+ 6052, 6064, 54, 43009, 12214, 0, 6211, 0, 358, 41997, 41833, 11442,
+ 10758, 65774, 0, 120384, 64115, 92221, 70018, 0, 0, 119053, 0, 12765,
+ 64118, 126998, 12962, 0, 126580, 4017, 12827, 5241, 120392, 0, 41118,
+ 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, 917564, 0, 11363,
+ 12057, 11917, 1567, 74000, 4721, 126641, 66202, 8957, 4139, 0, 0, 0, 0,
+ 0, 12740, 128702, 4722, 6816, 127793, 12759, 4725, 983375, 4726, 0,
+ 194892, 0, 128321, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0,
+ 128294, 64212, 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 0,
0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 127328, 8552, 64113, 41845,
3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, 0,
- 7935, 2420, 0, 1114, 92599, 67585, 78675, 120053, 92350, 120051, 3938,
+ 7935, 2420, 0, 1114, 92599, 67585, 70104, 120053, 92350, 120051, 3938,
120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955,
6452, 4713, 128196, 66249, 917885, 917890, 917891, 65152, 719, 120044,
78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, 66450,
4712, 917902, 917899, 917900, 65416, 8155, 4718, 3942, 4714, 9625, 0,
- 6383, 194744, 12006, 128565, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437,
- 66025, 78699, 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880,
+ 6383, 194744, 12006, 128565, 0, 0, 0, 0, 65414, 6454, 1229, 126606,
+ 66437, 66025, 78699, 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880,
917877, 917878, 65405, 68159, 12893, 917882, 5365, 4545, 8901, 92421,
119555, 4813, 128262, 0, 5925, 4808, 64330, 0, 65475, 118940, 195028,
- 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, 65404, 0, 195027,
+ 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 71335, 414, 65404, 0, 195027,
6456, 73820, 0, 6691, 42193, 92225, 128171, 0, 74495, 0, 0, 0, 118820,
9751, 65407, 128085, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0,
- 127233, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 127888,
- 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, 6732, 0, 0, 0,
- 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, 119203, 12526,
- 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199,
- 69692, 0, 69698, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0,
- 10799, 69690, 2587, 66372, 0, 4193, 92250, 4241, 0, 7998, 0, 0, 0, 0,
- 2316, 118821, 0, 0, 0, 64297, 74799, 92442, 74140, 0, 5373, 0, 0, 3762,
- 10015, 127335, 119232, 0, 41590, 0, 92378, 3780, 7485, 5779, 0, 42037, 0,
- 3906, 12349, 0, 8326, 0, 65498, 3763, 6983, 5618, 0, 3779, 0, 43613, 0,
- 0, 0, 0, 0, 0, 280, 74558, 127332, 68138, 13072, 1894, 0, 0, 65478,
- 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237,
- 0, 128805, 4470, 119613, 917557, 7780, 5369, 118958, 5249, 0, 5367, 8756,
- 127143, 0, 5377, 120585, 68143, 1688, 78245, 0, 69685, 0, 0, 0, 44020,
- 6808, 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850,
+ 127233, 64092, 983462, 64080, 0, 64090, 0, 69913, 10162, 10310, 0, 8454,
+ 127888, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, 6732,
+ 78116, 0, 983139, 0, 983074, 8896, 0, 375, 6976, 66582, 119005, 983865,
+ 0, 983426, 119202, 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529,
+ 119200, 119201, 119198, 119199, 69692, 983424, 69698, 13150, 64492, 0, 0,
+ 2291, 12902, 0, 42891, 66327, 74298, 917857, 10799, 69690, 2587, 66372,
+ 0, 4193, 92250, 4241, 983057, 7998, 0, 0, 0, 126640, 2316, 118821, 0, 0,
+ 0, 64297, 74799, 92442, 74140, 0, 5373, 0, 983877, 3762, 10015, 120672,
+ 119232, 0, 41590, 0, 70098, 3780, 7485, 5779, 0, 42037, 0, 3906, 12349,
+ 0, 8326, 0, 65498, 3763, 6983, 5618, 0, 3779, 0, 43613, 0, 0, 0, 0, 0, 0,
+ 280, 74558, 127332, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0,
+ 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 983743, 119237, 0, 128805,
+ 4470, 11826, 917557, 7780, 5369, 118958, 5249, 0, 5367, 8756, 127143, 0,
+ 5377, 120585, 68143, 1688, 78245, 983348, 69685, 983747, 0, 0, 44020,
+ 6808, 41319, 1300, 10650, 41692, 64505, 2290, 0, 119624, 1465, 10850,
3943, 0, 41205, 41315, 118961, 0, 0, 5352, 0, 0, 8839, 41314, 7384, 7785,
41204, 127322, 41209, 69637, 92241, 43607, 0, 0, 5420, 3897, 10134, 0,
74417, 4018, 7150, 68127, 0, 0, 0, 0, 127526, 2561, 68621, 3542, 7148,
12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 78751, 7146, 0, 65150,
- 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, 69641, 10753,
+ 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 983427, 69641, 10753,
10830, 0, 615, 64490, 7574, 92617, 77922, 0, 12909, 43016, 64559, 127028,
- 0, 0, 0, 2020, 0, 4022, 128783, 0, 77923, 0, 41691, 0, 0, 74329, 0,
- 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904, 0,
- 128198, 0, 118931, 119630, 13123, 10846, 3450, 127360, 7397, 118807, 0,
- 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 69634, 9367,
- 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763,
+ 0, 0, 67996, 2020, 0, 4022, 128783, 0, 77923, 126593, 41691, 0, 0, 74329,
+ 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904,
+ 0, 128198, 0, 118931, 119630, 13123, 10846, 3450, 127360, 7397, 118807,
+ 0, 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 69634,
+ 9367, 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763,
120280, 92192, 12347, 124, 12981, 41127, 2092, 92687, 0, 0, 0, 10820,
- 43987, 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0,
- 195058, 7795, 120300, 0, 4828, 1258, 127802, 2006, 0, 0, 9498, 127032,
+ 43987, 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 126500, 1538, 0, 43124,
+ 0, 195058, 7795, 120300, 0, 4828, 1258, 127802, 2006, 0, 0, 9498, 127032,
127033, 120289, 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650,
4491, 1961, 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, 0,
68675, 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0,
0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879,
- 55223, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998,
- 0, 92332, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014,
- 0, 0, 9765, 0, 0, 0, 195059, 78357, 65281, 127825, 10949, 0, 0, 0, 2015,
- 0, 0, 0, 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 10135, 65909,
- 6474, 794, 0, 12656, 128122, 119353, 128270, 1665, 0, 4833, 0, 119351,
- 127367, 0, 189, 12611, 0, 0, 2859, 4838, 0, 4834, 65078, 0, 0, 4837,
- 127061, 770, 0, 811, 0, 41042, 917551, 41318, 64427, 0, 0, 78848, 3895,
- 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, 0, 0, 0, 43686, 78846,
- 41877, 0, 2871, 64614, 128785, 999, 0, 6345, 41876, 2663, 2017, 0, 0,
- 11040, 10150, 0, 64308, 1522, 597, 4775, 12555, 12571, 12550, 12583,
- 12560, 2019, 12556, 12584, 3092, 0, 12562, 4783, 12566, 12569, 12554, 0,
- 10812, 78851, 0, 0, 3078, 1402, 0, 128275, 0, 0, 119248, 394, 3088, 0,
- 92172, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 69659, 73914, 0, 0, 0, 0,
- 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557,
- 12559, 12570, 8488, 1003, 2373, 9446, 7481, 9448, 48, 0, 9480, 481, 0,
- 9438, 9439, 9440, 9441, 8465, 9443, 9444, 9445, 9430, 9431, 9432, 9433,
- 9434, 9435, 3984, 9437, 0, 0, 9424, 9425, 9426, 9427, 9428, 9429, 64758,
- 2362, 9655, 0, 2004, 9096, 9782, 128848, 9172, 128545, 19965, 0, 5955,
- 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 92448, 65210, 8798, 0, 92165,
- 1392, 0, 0, 127364, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524,
- 92418, 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448,
- 119132, 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 128139, 0,
- 68678, 0, 0, 1049, 0, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775,
- 64760, 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733,
- 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 127142,
- 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718,
- 92716, 92598, 119950, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570,
- 65301, 44013, 4255, 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192,
- 69635, 0, 42251, 0, 42534, 65179, 11287, 6128, 0, 11034, 10923, 64423, 0,
- 65506, 0, 65861, 74083, 92600, 9932, 0, 92423, 119955, 0, 9817, 0,
- 120140, 0, 12117, 66586, 4183, 10540, 66250, 9063, 127045, 0, 119954, 0,
- 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, 41186, 41816, 41023,
- 41818, 41187, 11659, 7922, 12614, 2005, 8523, 78002, 0, 7513, 1863, 4710,
- 0, 5956, 7621, 78006, 92624, 4705, 716, 78004, 0, 4704, 120040, 120270,
- 42241, 161, 43977, 74546, 66214, 4706, 0, 0, 42672, 4709, 10680, 0,
- 43293, 119944, 0, 119164, 120328, 92467, 0, 1700, 119223, 0, 0, 128119,
- 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 78216, 4734,
- 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 92490,
- 120331, 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0,
- 42527, 12911, 43427, 1383, 8565, 2469, 120024, 6690, 6156, 68117, 43439,
- 7993, 4288, 120416, 2674, 13238, 11922, 0, 120330, 3510, 13234, 0,
- 120407, 5605, 42095, 11364, 0, 1380, 65617, 120253, 120261, 13196, 13197,
- 120309, 120682, 9495, 119346, 0, 5959, 0, 73976, 120305, 43371, 6941,
- 119349, 13205, 13211, 5801, 12769, 65905, 41697, 1283, 120302, 4779, 0,
- 3719, 4006, 0, 19957, 128773, 2021, 119332, 120699, 119150, 43028, 65493,
- 41838, 3875, 5962, 64341, 92616, 9814, 43457, 5827, 3314, 7787, 78234,
- 65494, 68153, 0, 0, 120636, 64531, 120692, 194626, 0, 0, 66316, 65467,
- 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, 7089,
- 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, 9841,
- 8843, 12145, 92470, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290,
- 8849, 0, 65855, 65112, 1796, 120505, 0, 69665, 8164, 41301, 3502, 0,
- 7388, 10621, 73838, 78553, 5825, 13007, 68165, 0, 120457, 12661, 7608,
- 10354, 10418, 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639,
- 1390, 0, 0, 421, 43536, 5846, 120120, 4130, 127775, 7595, 42588, 7600,
- 120121, 66035, 0, 0, 65851, 42607, 128190, 92403, 3168, 0, 42134, 0,
- 2370, 2846, 92605, 0, 0, 120132, 0, 1836, 0, 0, 92558, 3740, 92547, 6290,
+ 55223, 0, 128071, 41826, 8865, 6402, 0, 13279, 7917, 74755, 0, 7733, 0,
+ 4998, 983887, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 0, 10881, 0, 0,
+ 0, 74788, 2014, 0, 0, 9765, 0, 0, 0, 195059, 78357, 65281, 127825, 10949,
+ 0, 0, 0, 2015, 0, 0, 0, 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094,
+ 10135, 65909, 6474, 794, 0, 12656, 128122, 119353, 128270, 1665, 0, 4833,
+ 983053, 119351, 127367, 0, 189, 12611, 0, 0, 2859, 4838, 0, 4834, 65078,
+ 0, 0, 4837, 127061, 770, 0, 811, 0, 41042, 917551, 41318, 64427, 0,
+ 128208, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0,
+ 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 128785, 999, 0, 6345,
+ 41876, 2663, 2017, 0, 0, 11040, 10150, 0, 64308, 1522, 597, 4775, 12555,
+ 12571, 12550, 12583, 12560, 2019, 12556, 12584, 3092, 0, 12562, 4783,
+ 12566, 12569, 12554, 0, 10812, 78851, 0, 0, 3078, 1402, 0, 128275, 0, 0,
+ 119248, 394, 3088, 0, 92172, 0, 3991, 64391, 0, 128524, 424, 66328, 1999,
+ 69659, 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 983609, 2377,
+ 1298, 64011, 12572, 11318, 12557, 12559, 12570, 7479, 1003, 2373, 9446,
+ 7481, 9448, 48, 0, 9480, 481, 0, 9438, 9439, 9440, 9441, 8465, 9443,
+ 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, 9437, 0, 0, 9424,
+ 9425, 9426, 9427, 9428, 9429, 64758, 2362, 9655, 0, 2004, 9096, 9782,
+ 128848, 9172, 128545, 19965, 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782,
+ 3926, 92448, 65210, 8798, 0, 92165, 1392, 0, 0, 127364, 10606, 8065,
+ 118805, 10353, 10417, 0, 0, 64524, 92418, 4019, 0, 983280, 43280, 8219,
+ 68402, 1812, 119963, 983683, 0, 126488, 42410, 74448, 119132, 6054,
+ 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 128139, 983253, 68678,
+ 0, 0, 1049, 0, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760,
+ 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0,
+ 5153, 41805, 0, 73735, 763, 41808, 64910, 983130, 2009, 0, 0, 127142,
+ 9640, 119951, 0, 120695, 8621, 120523, 12852, 3031, 983050, 64361, 0,
+ 182, 194718, 92716, 92598, 119950, 42613, 9058, 366, 0, 9892, 5969,
+ 11754, 10848, 4570, 65301, 44013, 4255, 127889, 10102, 41189, 4003,
+ 41026, 68109, 13293, 41192, 69635, 0, 42251, 0, 42534, 65179, 11287,
+ 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 65861, 74083, 92600, 9932, 0,
+ 92423, 119955, 0, 9817, 0, 120140, 0, 12117, 66586, 4183, 10540, 66250,
+ 9063, 127045, 0, 119954, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715,
+ 8692, 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523,
+ 78002, 0, 7513, 1863, 4710, 0, 5956, 7621, 78006, 92624, 4705, 716,
+ 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, 66214, 4706, 0,
+ 69914, 42672, 4709, 10680, 119065, 43293, 119944, 0, 119164, 120328,
+ 92467, 10187, 1700, 119223, 0, 0, 128119, 4004, 0, 10968, 43296, 983633,
+ 8506, 0, 0, 126996, 1005, 937, 78216, 4734, 2870, 0, 78218, 983109, 7463,
+ 4729, 0, 235, 1384, 4728, 0, 120420, 92490, 74449, 8109, 43105, 983174,
+ 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, 43427, 1383,
+ 8565, 2469, 120024, 6690, 6156, 68117, 43439, 7993, 4288, 120416, 2674,
+ 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, 11364, 0,
+ 1380, 65617, 120253, 120261, 13196, 13197, 120309, 120682, 9495, 119346,
+ 0, 5959, 67984, 73976, 120305, 43371, 6941, 119349, 13205, 13211, 5801,
+ 12769, 65905, 41697, 1283, 120302, 4779, 0, 3719, 4006, 983569, 19957,
+ 128773, 2021, 119332, 120699, 119150, 43028, 65493, 41838, 3875, 5962,
+ 64341, 92616, 9814, 43457, 5827, 3314, 7787, 78234, 65494, 68153, 0, 0,
+ 120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, 983785,
+ 9742, 521, 0, 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 0,
+ 0, 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145,
+ 92470, 10074, 78548, 0, 3769, 0, 0, 0, 983107, 9573, 0, 65290, 8849, 0,
+ 65855, 65112, 1796, 120505, 0, 69665, 8164, 41301, 3502, 0, 7388, 10621,
+ 73838, 78553, 5825, 13007, 68165, 0, 120457, 12661, 7608, 10354, 10418,
+ 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421,
+ 43536, 5846, 120120, 4130, 127775, 7595, 42588, 7600, 120121, 66035,
+ 983904, 0, 65851, 42607, 128190, 92403, 3168, 0, 42134, 11831, 2370,
+ 2846, 92605, 0, 0, 120132, 0, 1836, 0, 0, 92558, 3740, 69843, 6290,
65374, 120451, 2390, 3944, 66628, 120434, 0, 6135, 3118, 74265, 119093,
- 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998,
- 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, 4975, 74809, 120130, 4267,
- 1631, 42206, 127866, 0, 195046, 65700, 66562, 0, 64645, 0, 0, 0, 12586,
- 0, 9242, 127922, 0, 4523, 5842, 10495, 3122, 0, 7793, 78275, 9328, 0,
- 78393, 12604, 0, 6615, 67650, 92344, 3986, 44025, 0, 8912, 64555, 7409,
- 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060,
- 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, 7020, 120353, 3765, 0,
- 0, 1606, 120348, 120351, 3093, 68436, 0, 0, 120649, 0, 0, 4312, 74091,
- 120337, 120336, 11923, 4023, 120333, 5763, 120335, 4827, 10894, 12810,
- 64406, 118785, 4455, 74321, 433, 119620, 66660, 2499, 0, 0, 0, 11973,
+ 120446, 0, 0, 8127, 8975, 64739, 7943, 983734, 0, 10618, 2584, 0, 0, 0,
+ 9998, 128564, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, 4975, 70075,
+ 120130, 4267, 1631, 42206, 77983, 0, 195046, 65700, 66562, 0, 64645, 0,
+ 0, 126588, 12586, 0, 9242, 127922, 0, 4523, 5842, 10495, 3122, 983788,
+ 7793, 78275, 9328, 119104, 78393, 12604, 0, 6615, 2285, 92344, 3986,
+ 44025, 0, 8912, 64555, 7409, 0, 983350, 9541, 78276, 0, 11275, 8540,
+ 11498, 0, 983349, 41040, 2459, 0, 13060, 41041, 74413, 983138, 0, 0,
+ 68427, 10450, 12551, 41043, 7020, 120353, 3765, 983342, 0, 1606, 120348,
+ 120351, 3093, 68436, 0, 983061, 119613, 0, 0, 4312, 74091, 120337,
+ 120336, 11923, 4023, 120333, 5763, 94015, 4827, 10894, 12810, 64406,
+ 118785, 4455, 74321, 433, 119620, 66660, 2499, 0, 0, 118837, 11973,
13089, 4293, 120329, 42224, 42758, 12196, 42837, 42226, 119319, 0,
- 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, 0, 10389, 0, 0, 4895,
- 65358, 0, 4359, 585, 2383, 3509, 194920, 486, 4290, 5758, 127546, 0, 0,
- 7004, 0, 65880, 127886, 119048, 2380, 11380, 0, 0, 2376, 0, 119320, 0,
- 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0,
- 0, 0, 0, 0, 0, 74188, 120241, 0, 0, 120047, 128575, 0, 0, 120049, 0,
- 1847, 0, 10339, 0, 42384, 0, 4227, 74158, 0, 92501, 43032, 0, 42365, 0,
- 12671, 11384, 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064,
- 120650, 42137, 9893, 2754, 12664, 120063, 0, 7377, 127867, 41799, 65530,
- 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0,
- 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, 127769, 41801, 119088,
- 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 127353, 0, 8360, 0, 78044,
- 321, 4229, 64543, 917946, 65563, 0, 917974, 2861, 43793, 10095, 0, 9195,
- 92386, 1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660,
- 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 0, 743, 4414,
+ 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, 0, 10389, 126485, 0, 4895,
+ 65358, 0, 4359, 585, 2383, 3509, 70037, 486, 4290, 5758, 127546, 0, 0,
+ 7004, 0, 65880, 127886, 119048, 2380, 11380, 0, 93996, 2376, 0, 119320,
+ 0, 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0,
+ 0, 0, 983084, 0, 0, 0, 74188, 71342, 983086, 983573, 120047, 128575, 0,
+ 0, 120049, 0, 1847, 0, 10339, 983357, 42384, 0, 4227, 74158, 0, 92501,
+ 43032, 0, 42365, 0, 12671, 11384, 0, 983457, 0, 64797, 983337, 5820,
+ 983336, 120052, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664,
+ 120063, 0, 7377, 127867, 41799, 65530, 1711, 12984, 43039, 3114, 6255,
+ 983332, 118938, 0, 10853, 926, 983361, 74184, 983360, 120055, 0, 43175,
+ 0, 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200,
+ 12699, 8331, 0, 3091, 41034, 127353, 983672, 8360, 0, 78044, 321, 4229,
+ 64543, 917946, 65563, 0, 917974, 2861, 43793, 10095, 0, 9195, 92386,
+ 1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660, 8209,
+ 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 0, 743, 4414,
120766, 0, 42632, 917973, 65161, 73896, 128589, 0, 1405, 119063, 43220,
43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, 43342,
119064, 65529, 65364, 128197, 0, 6485, 1397, 0, 41986, 92678, 0, 0,
- 74097, 0, 7471, 12079, 0, 12682, 43287, 92317, 0, 0, 0, 0, 0, 1099,
- 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346,
- 0, 917631, 64573, 64897, 423, 1818, 65144, 0, 8272, 127812, 19911, 4218,
- 3087, 64960, 127234, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0,
- 42642, 120230, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530,
- 2752, 0, 0, 0, 59, 0, 0, 0, 92371, 77873, 41810, 0, 7010, 0, 41809,
- 41495, 119364, 0, 42252, 42213, 8009, 3305, 43033, 511, 92700, 66255,
- 13127, 120067, 0, 0, 0, 917977, 65915, 1400, 41812, 10685, 194870, 2103,
- 10387, 4453, 43276, 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983,
- 74198, 6617, 9116, 119654, 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471,
- 6644, 11658, 0, 128245, 3452, 11906, 9581, 1385, 3098, 0, 119013, 43340,
- 0, 41033, 6493, 42626, 0, 0, 11426, 77887, 1681, 118789, 1204, 3755,
- 64661, 7235, 10170, 3966, 8911, 0, 41841, 43338, 0, 0, 5726, 64915,
- 42175, 0, 0, 41497, 65044, 120109, 2851, 43017, 0, 0, 4373, 78058, 0,
- 9587, 1789, 6671, 128840, 3100, 0, 65360, 0, 92365, 0, 64922, 0, 8190,
- 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 119125, 3439, 1825,
- 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, 0, 128223,
- 92528, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0,
- 64826, 0, 917798, 128348, 0, 19945, 8091, 558, 0, 12273, 194814, 0,
- 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, 2102, 65445,
- 78258, 64891, 0, 7725, 65108, 78255, 0, 8624, 69246, 12446, 43295, 0,
- 41894, 0, 6277, 41672, 41893, 10010, 128678, 3540, 128649, 835, 0, 69816,
+ 74097, 0, 7471, 12079, 67997, 12682, 43287, 92317, 0, 983143, 983698, 0,
+ 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 65283, 67663,
+ 78222, 1346, 0, 917631, 64573, 64897, 423, 1818, 65144, 0, 8272, 127812,
+ 19911, 4218, 3087, 64960, 127234, 43564, 0, 0, 9584, 10465, 983893,
+ 74359, 12626, 9106, 0, 42642, 120230, 64750, 9390, 0, 41797, 0, 0, 265,
+ 41795, 64666, 126508, 43530, 2752, 0, 0, 983485, 59, 0, 983593, 0, 92371,
+ 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, 8009,
+ 3305, 43033, 511, 92700, 66255, 13127, 120067, 0, 74397, 120235, 917977,
+ 65915, 1400, 41812, 10685, 194870, 2103, 10387, 4453, 43276, 917783,
+ 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 119654, 0,
+ 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 128245, 3452,
+ 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0,
+ 11426, 77887, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911,
+ 0, 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 120109,
+ 2851, 43017, 983589, 0, 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100,
+ 0, 65360, 0, 92365, 917789, 64922, 0, 8190, 12083, 0, 0, 6506, 64312,
+ 74374, 2368, 0, 4419, 983838, 119125, 3439, 1825, 1192, 120106, 8891,
+ 3080, 120228, 2347, 5430, 0, 8990, 2848, 0, 128223, 92528, 249, 0, 0, 0,
+ 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, 64826, 0, 917798,
+ 128348, 0, 19945, 8091, 558, 0, 12273, 194814, 983841, 12112, 69912, 0,
+ 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, 2102, 65445, 78258,
+ 64891, 0, 7725, 65108, 78255, 0, 8624, 69246, 12446, 43295, 0, 41894, 0,
+ 6277, 41672, 41893, 10010, 128678, 3540, 128649, 835, 71340, 69816,
119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 128127, 8283, 0, 5434,
- 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 128307, 3464, 6486,
- 4819, 128233, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0,
- 128182, 128096, 68167, 0, 13096, 128643, 0, 43408, 9516, 128538, 5268,
- 42230, 42220, 0, 4450, 120511, 11547, 43417, 128542, 356, 3477, 227,
- 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, 0, 6484, 2541, 66039, 0, 78718,
- 92723, 3549, 0, 9110, 119665, 2743, 0, 43290, 194812, 9097, 0, 43015,
- 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, 42694, 64944, 8952, 3856,
- 118818, 0, 5872, 6495, 0, 0, 0, 92543, 0, 120733, 12849, 3953, 1897, 0,
- 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 0, 68473, 74104, 5228,
- 128804, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, 1162, 0, 2671, 0,
- 0, 92632, 92631, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331,
- 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, 0,
- 43042, 119212, 1377, 12869, 4897, 42821, 9250, 0, 4438, 64385, 0, 1753,
- 11331, 6147, 194941, 43282, 8833, 0, 0, 6504, 78408, 126979, 10719, 0,
- 1898, 1413, 42443, 0, 802, 12141, 0, 194671, 6648, 10671, 2528, 0, 64789,
- 9169, 838, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, 917851,
- 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, 78712,
- 11761, 194655, 0, 41094, 0, 0, 0, 0, 92689, 6196, 6945, 194628, 194890,
- 128184, 120491, 11816, 194943, 5733, 2930, 0, 0, 41098, 0, 41093, 0,
- 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362,
- 0, 92485, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 127358, 66219,
- 127183, 43284, 194657, 7817, 1841, 11055, 120533, 194979, 194982, 1669,
- 10776, 194981, 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611,
- 127530, 41768, 6491, 0, 65324, 914, 65323, 8071, 3538, 0, 78713, 65328,
- 92441, 74367, 7614, 0, 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841,
- 43430, 5301, 0, 92618, 5734, 8960, 0, 92527, 65317, 77880, 0, 0, 0,
- 12304, 0, 0, 65315, 92670, 128511, 0, 0, 0, 119621, 92529, 74536, 12447,
- 64486, 127374, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 43695, 120520,
- 11975, 194878, 0, 92604, 2555, 8629, 0, 43168, 41872, 43706, 4496,
- 194879, 128148, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, 0, 65596,
- 92306, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, 74386,
- 0, 8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, 0, 1473,
- 42820, 64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0,
- 3406, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 65737, 917765,
- 128705, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, 9790,
- 8995, 128286, 0, 65937, 0, 41764, 10646, 0, 118833, 92372, 0, 74830,
- 78569, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335,
- 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 128271, 3955, 74254, 0, 0,
- 917861, 0, 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786,
- 127093, 12797, 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755,
- 128061, 78574, 0, 0, 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924,
- 43812, 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 917860,
- 119043, 0, 119134, 43137, 694, 0, 9876, 0, 119168, 0, 78822, 64537, 0,
- 277, 74385, 7229, 12761, 0, 0, 13025, 64811, 8757, 78824, 0, 1574, 7381,
- 0, 2525, 4852, 5749, 68465, 13027, 42824, 120574, 1039, 7151, 10155,
- 5745, 188, 41858, 11592, 0, 74015, 9055, 41853, 4858, 917780, 0, 436,
- 4771, 0, 2786, 0, 4856, 8051, 0, 119609, 0, 9644, 0, 0, 0, 194916,
- 120732, 66710, 118834, 0, 73906, 0, 127114, 0, 10234, 5843, 11939, 0,
- 42157, 0, 3157, 194918, 68393, 0, 3504, 119178, 0, 10822, 5149, 66029,
- 10226, 65142, 0, 3594, 42424, 194959, 40, 12657, 0, 0, 386, 0, 8834, 0,
- 12815, 43574, 0, 73907, 0, 74196, 7220, 74504, 0, 74316, 0, 77932, 4304,
- 74503, 8160, 78707, 194753, 0, 0, 0, 1348, 92349, 78597, 0, 13303, 0,
- 92392, 194755, 7599, 1278, 43616, 13269, 0, 0, 74387, 78179, 78598,
- 74492, 6097, 7568, 8780, 4982, 127464, 74501, 194763, 78592, 194762,
- 2672, 3735, 127471, 13138, 42266, 9484, 10724, 41202, 119024, 0, 43742,
- 0, 9487, 119959, 119117, 3842, 128768, 78668, 12442, 6193, 9791, 127976,
- 0, 42516, 7228, 7559, 74803, 78468, 7873, 11399, 119219, 194691, 194855,
- 194690, 194857, 3604, 0, 119188, 128877, 78540, 78541, 42507, 1962,
- 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173, 5437, 74174,
- 10669, 8702, 7964, 92352, 0, 199, 194843, 4105, 194845, 194699, 194847,
- 194710, 119875, 13148, 7560, 78479, 9226, 78480, 195070, 6472, 65814,
- 73954, 0, 4724, 0, 0, 9191, 0, 64432, 0, 0, 195024, 10196, 7886, 0, 6585,
- 0, 6680, 195042, 0, 195051, 6679, 74412, 92251, 194866, 74421, 11382, 0,
- 0, 127891, 127484, 194833, 194832, 6681, 127482, 12693, 194836, 42727,
- 194838, 128252, 78195, 65442, 119610, 69733, 9989, 43248, 66248, 194816,
- 0, 194818, 128845, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825,
- 73927, 92444, 194736, 65746, 127476, 74409, 74389, 128696, 4342, 42839,
- 194831, 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595,
- 10160, 0, 0, 7585, 65169, 2052, 4308, 92174, 74177, 7505, 543, 64916,
- 64736, 0, 0, 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0,
- 127170, 0, 0, 0, 0, 12994, 92728, 10828, 0, 6228, 4307, 3482, 128527, 0,
- 0, 0, 506, 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0,
- 516, 0, 2063, 119051, 34, 128850, 120186, 11504, 1612, 74333, 120182,
- 74520, 74308, 12001, 120178, 10242, 64564, 120179, 120174, 6584, 7749,
- 11037, 0, 1758, 0, 10667, 10560, 120197, 92593, 1935, 11517, 120193,
+ 983590, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 128307, 3464,
+ 6486, 4819, 128233, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 128539,
+ 431, 0, 0, 128182, 128096, 68167, 983654, 13096, 128643, 0, 43408, 9516,
+ 128538, 5268, 42230, 42220, 0, 4450, 120511, 11547, 43417, 128542, 356,
+ 3477, 227, 10488, 68203, 382, 11418, 0, 195066, 0, 0, 0, 0, 6484, 2541,
+ 66039, 0, 78718, 92723, 3549, 0, 9110, 119665, 2743, 0, 43290, 194812,
+ 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 126494, 0, 0, 42694,
+ 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 92543, 0, 120733,
+ 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 0,
+ 68473, 74104, 5228, 128804, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0,
+ 1162, 917847, 2671, 0, 0, 92632, 92631, 118865, 4553, 73811, 0, 195005,
+ 0, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, 983779, 55249, 4820,
+ 65239, 194662, 0, 194665, 43042, 119212, 1377, 12869, 4897, 42821, 9250,
+ 0, 4438, 64385, 0, 1753, 11331, 6147, 194941, 43282, 8833, 0, 0, 6504,
+ 78408, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, 0, 194671,
+ 6648, 10671, 2528, 0, 64789, 9169, 838, 120087, 120697, 844, 5014, 0,
+ 256, 0, 9990, 0, 42739, 917851, 7542, 65464, 9726, 0, 6489, 10048, 74326,
+ 78719, 66573, 0, 78724, 78712, 11761, 194655, 0, 41094, 0, 0, 194893, 0,
+ 92689, 6196, 6945, 93969, 194890, 128184, 120491, 11816, 194943, 5733,
+ 2930, 0, 0, 41098, 0, 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200,
+ 983205, 1660, 73916, 0, 118905, 74362, 0, 92485, 194651, 0, 983697, 3394,
+ 194894, 120668, 0, 0, 127358, 66219, 127183, 43284, 194656, 7817, 1841,
+ 11055, 120533, 194979, 194982, 1669, 10776, 194981, 7701, 194980, 0,
+ 194995, 1732, 4030, 0, 3963, 66611, 127530, 41768, 6491, 0, 65324, 914,
+ 65323, 8071, 3538, 0, 2287, 65328, 92441, 74367, 7614, 0, 11819, 0,
+ 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, 5734,
+ 8960, 0, 92527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 92670, 128511,
+ 0, 0, 0, 119621, 92529, 74536, 12447, 64486, 127374, 126562, 983129, 0,
+ 0, 983793, 42767, 10915, 0, 12007, 43695, 120520, 11975, 194878, 0,
+ 92604, 2555, 8629, 128640, 43168, 41872, 43706, 4496, 194879, 128148,
+ 120241, 0, 0, 0, 0, 64730, 70041, 66714, 68222, 0, 70076, 65596, 92306,
+ 11416, 4280, 67655, 8765, 12784, 7792, 1393, 126473, 67871, 74386, 0,
+ 8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, 0, 1473, 42820,
+ 64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 94003, 3406,
+ 1054, 71320, 1040, 65450, 0, 4434, 1069, 0, 118862, 65737, 917765,
+ 128705, 0, 983684, 9693, 41943, 126564, 41931, 41759, 12757, 4353, 0,
+ 1059, 9790, 8995, 119974, 983687, 65937, 0, 41764, 10646, 0, 118833,
+ 92372, 0, 74830, 78569, 12743, 983680, 6480, 917761, 41779, 42580, 66601,
+ 12207, 119619, 6335, 66602, 11312, 64807, 0, 0, 41767, 119629, 983755,
+ 43020, 128271, 3955, 74254, 0, 983745, 917861, 0, 77926, 9770, 9246,
+ 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, 2755, 64571, 78578,
+ 194927, 4857, 0, 4428, 12794, 73755, 128061, 78574, 0, 74284, 0, 5747,
+ 78825, 0, 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 0, 563, 0,
+ 983682, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 94051, 43137, 694, 0,
+ 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0,
+ 13025, 64811, 8757, 78824, 126478, 1574, 7381, 0, 2525, 4852, 5749,
+ 68465, 13027, 42824, 120574, 1039, 7151, 10155, 5745, 188, 41858, 11592,
+ 0, 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856,
+ 8051, 0, 119609, 71327, 9644, 0, 0, 0, 194916, 120732, 66710, 118834,
+ 983351, 73906, 128680, 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157,
+ 194918, 68393, 0, 3504, 119178, 0, 10822, 5149, 66029, 10226, 65142,
+ 128025, 3594, 42424, 194959, 40, 12657, 983656, 0, 386, 0, 8834, 0,
+ 12815, 43574, 0, 73907, 0, 74196, 7220, 74504, 0, 74316, 0, 65322, 4304,
+ 74503, 8160, 78707, 194753, 0, 0, 128526, 1348, 92349, 78597, 126539,
+ 13303, 0, 92392, 194755, 7599, 1278, 43616, 13269, 0, 0, 74387, 78179,
+ 78598, 74492, 6097, 7568, 8780, 4982, 127464, 74501, 194763, 78592,
+ 194762, 2672, 3735, 127470, 13138, 42266, 9484, 10724, 41202, 71364, 0,
+ 43742, 0, 9487, 119959, 119117, 3842, 128768, 78668, 12442, 6193, 9791,
+ 127976, 0, 42516, 7228, 7559, 74803, 78468, 7873, 11399, 119219, 194691,
+ 194855, 194690, 194857, 3604, 120683, 119188, 128877, 78540, 78541,
+ 42507, 1962, 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173,
+ 5437, 74174, 10669, 8702, 7964, 92352, 0, 199, 194843, 4105, 194845,
+ 194699, 194847, 194710, 119875, 13148, 7560, 78479, 9226, 78480, 195070,
+ 6472, 65814, 73954, 0, 4724, 0, 0, 9191, 0, 64432, 983808, 983241,
+ 195024, 10196, 7886, 0, 6585, 0, 6680, 195042, 0, 195051, 6679, 74412,
+ 92251, 194866, 74421, 11382, 983622, 983628, 127891, 127484, 194833,
+ 194832, 6681, 127482, 12693, 194836, 42727, 78196, 128252, 78195, 65442,
+ 119610, 69733, 9989, 43248, 66248, 194816, 0, 194818, 128845, 194820,
+ 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, 92444, 194736,
+ 65746, 127476, 69889, 74389, 128696, 4342, 42839, 194831, 1677, 0, 0,
+ 126590, 917855, 11091, 11011, 2719, 0, 0, 119595, 10160, 0, 0, 7585,
+ 65169, 2052, 4308, 92174, 43000, 7505, 543, 64916, 64736, 0, 0, 64655, 0,
+ 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, 0, 0, 0,
+ 12994, 92728, 10828, 983934, 6228, 4307, 3482, 128527, 0, 0, 0, 506,
+ 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 983671, 8841, 0, 516,
+ 93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, 74333, 120182,
+ 11827, 74308, 12001, 120178, 10242, 64564, 120179, 67986, 6584, 7749,
+ 11037, 0, 1758, 127092, 10667, 10560, 120197, 92593, 1935, 11517, 120193,
120196, 120195, 1931, 120189, 74839, 120191, 1217, 64702, 12643, 825,
127838, 194905, 12294, 92428, 78834, 9138, 78831, 78833, 12631, 78829,
11080, 74554, 64000, 5591, 1239, 0, 11313, 0, 3403, 0, 0, 64364, 92269,
- 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, 67589, 41850, 64290, 3433,
- 92393, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 67602,
- 67611, 4337, 0, 127296, 918, 65035, 41351, 7681, 194900, 42577, 41393,
- 12668, 194904, 2477, 127285, 0, 127301, 0, 67604, 194880, 127235, 573,
- 127282, 194884, 11417, 194886, 119814, 194888, 67599, 0, 194889, 67607,
- 11482, 0, 3981, 3357, 0, 42223, 4207, 1288, 78842, 78839, 68419, 78837,
- 11589, 42195, 194872, 194599, 127263, 64602, 67618, 92539, 0, 42788,
- 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, 997, 0, 0,
- 92577, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760,
- 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373,
+ 0, 74582, 8998, 12988, 0, 9152, 983840, 0, 126484, 67589, 41850, 64290,
+ 3433, 92393, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353,
+ 67602, 67611, 4337, 0, 127296, 918, 65035, 41351, 7681, 194900, 42577,
+ 41393, 12668, 194904, 2477, 127285, 0, 127301, 0, 67604, 194880, 127235,
+ 573, 127282, 194884, 11417, 194886, 119814, 194888, 67599, 0, 194889,
+ 67607, 11482, 0, 3981, 3357, 0, 42223, 4207, 1288, 78842, 78839, 68419,
+ 78837, 11589, 42195, 194872, 194599, 127263, 64602, 67618, 92539, 0,
+ 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, 997, 0,
+ 0, 92577, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760,
+ 73796, 0, 119228, 12035, 0, 2818, 0, 74411, 73793, 0, 4172, 0, 0, 8373,
10873, 12197, 0, 0, 92265, 69706, 0, 78210, 0, 128110, 194865, 126982,
74563, 64828, 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617,
- 3274, 127365, 0, 0, 0, 74522, 41989, 0, 0, 128798, 3263, 0, 65672, 0,
- 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 194776, 756, 194605, 0, 0,
- 0, 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856,
- 12800, 0, 74203, 64718, 0, 0, 92434, 118929, 0, 11578, 0, 119296, 0, 0,
- 0, 0, 74568, 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958,
- 120223, 3617, 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508,
- 120467, 41079, 10748, 5502, 119330, 4452, 0, 0, 92526, 4511, 0, 0, 64678,
- 11425, 0, 43245, 1231, 194783, 0, 0, 9003, 8192, 0, 5305, 9653, 10616,
- 8694, 9546, 0, 0, 120478, 120200, 65205, 120202, 64063, 9878, 74780,
- 119626, 78202, 64058, 8799, 42131, 0, 64062, 1028, 64060, 64059, 837,
- 10567, 0, 43103, 0, 120754, 11427, 2902, 64043, 64042, 66464, 10756, 0,
- 42606, 64045, 64044, 43979, 10076, 64040, 43060, 194942, 1034, 3392,
- 127771, 43091, 64033, 64032, 42735, 64038, 64037, 64036, 64035, 4291,
- 194928, 64015, 64014, 64681, 194930, 0, 78145, 0, 43090, 0, 3476, 8973,
- 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 78153, 2538, 64009,
- 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 0,
- 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, 43453, 64050,
- 41340, 118975, 194835, 10005, 12329, 41333, 0, 8489, 1942, 0, 194834,
- 42520, 128249, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025,
- 9167, 42151, 78244, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582,
- 78252, 78248, 77914, 78246, 78247, 0, 77915, 78766, 6788, 13094, 77920,
- 7532, 41414, 78520, 3179, 78518, 64769, 78514, 78517, 11461, 74454,
- 10751, 9051, 120720, 6708, 10535, 0, 68218, 55274, 2008, 64031, 64030,
- 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788,
- 194844, 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892,
- 119889, 11433, 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968,
- 3297, 9699, 194955, 1135, 0, 0, 128525, 1995, 6722, 0, 0, 2552, 41546,
- 60, 68394, 8649, 41549, 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0,
- 2013, 128291, 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537,
- 119908, 9137, 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0,
- 2002, 2000, 120175, 537, 0, 4179, 65119, 1998, 0, 1842, 0, 92674, 9628,
- 68446, 12081, 9826, 64502, 1767, 0, 0, 0, 120201, 0, 0, 0, 3059, 44024,
- 120204, 119953, 92693, 0, 0, 92452, 4100, 920, 1811, 1355, 0, 0, 3592,
- 10078, 0, 0, 0, 8592, 65870, 68164, 128792, 10742, 0, 42918, 1994, 9281,
- 3296, 12865, 1997, 1895,
+ 3274, 127365, 126523, 94042, 983941, 74522, 41989, 0, 0, 128798, 3263, 0,
+ 65672, 0, 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 194776, 756,
+ 194605, 0, 0, 0, 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612,
+ 12949, 64856, 12800, 983892, 74203, 64718, 11507, 0, 92434, 118929, 0,
+ 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, 64521, 5624,
+ 120220, 120221, 119958, 120223, 3617, 66636, 64886, 94061, 120212,
+ 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, 4452, 0,
+ 983762, 92526, 4511, 0, 983868, 64678, 11425, 0, 43245, 1231, 194783,
+ 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478,
+ 120200, 65205, 120202, 64063, 9878, 74780, 119626, 78202, 64058, 8799,
+ 42131, 0, 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 120754,
+ 11427, 2902, 64043, 64042, 43749, 10756, 64047, 42606, 64045, 64044,
+ 43979, 10076, 64040, 43060, 194942, 1034, 3392, 127771, 43091, 64033,
+ 64032, 42735, 64038, 64037, 64036, 64035, 4291, 194928, 64015, 64014,
+ 64681, 194930, 0, 78145, 0, 43090, 0, 3476, 8973, 64012, 42473, 64010,
+ 64008, 64007, 2003, 7706, 64517, 78153, 2538, 64009, 204, 0, 4802, 4111,
+ 8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 983258, 0, 4767, 9343,
+ 64049, 64048, 120034, 1133, 64053, 64052, 43453, 64050, 41340, 118975,
+ 194835, 10005, 12329, 41333, 0, 8489, 1942, 0, 194834, 42520, 128249, 0,
+ 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, 42151, 78244,
+ 983226, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248,
+ 77914, 78246, 78247, 0, 77915, 78766, 6788, 13094, 77920, 7532, 41414,
+ 78520, 3179, 78518, 64769, 78514, 78517, 11461, 74454, 10751, 9051,
+ 120720, 6708, 10535, 0, 68218, 55274, 2008, 64031, 64030, 294, 41874, 0,
+ 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, 0, 4351,
+ 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, 119895,
+ 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, 1135,
+ 0, 0, 128525, 1995, 6722, 983916, 0, 2552, 41546, 60, 68394, 8649, 41549,
+ 78496, 983319, 0, 6682, 0, 78679, 64710, 41547, 983621, 2013, 128291,
+ 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137,
+ 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000,
+ 120175, 537, 0, 4179, 65119, 1998, 0, 1842, 0, 92674, 9628, 68446, 12081,
+ 9826, 64502, 1767, 0, 0, 0, 120201, 983637, 0, 0, 3059, 44024, 120204,
+ 119953, 92693, 0, 0, 92452, 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0,
+ 0, 0, 8592, 65870, 68164, 128792, 10742, 0, 42918, 1994, 9281, 3296,
+ 12865, 1997, 1895,
};
#define code_magic 47
#define code_size 32768
#define code_poly 32771
+
+static const unsigned int aliases_start = 0xf0000;
+static const unsigned int aliases_end = 0xf01c1;
+static const unsigned int name_aliases[] = {
+ 0x0000,
+ 0x0000,
+ 0x0001,
+ 0x0001,
+ 0x0002,
+ 0x0002,
+ 0x0003,
+ 0x0003,
+ 0x0004,
+ 0x0004,
+ 0x0005,
+ 0x0005,
+ 0x0006,
+ 0x0006,
+ 0x0007,
+ 0x0007,
+ 0x0008,
+ 0x0008,
+ 0x0009,
+ 0x0009,
+ 0x0009,
+ 0x0009,
+ 0x000A,
+ 0x000A,
+ 0x000A,
+ 0x000A,
+ 0x000A,
+ 0x000A,
+ 0x000B,
+ 0x000B,
+ 0x000B,
+ 0x000C,
+ 0x000C,
+ 0x000D,
+ 0x000D,
+ 0x000E,
+ 0x000E,
+ 0x000E,
+ 0x000F,
+ 0x000F,
+ 0x000F,
+ 0x0010,
+ 0x0010,
+ 0x0011,
+ 0x0011,
+ 0x0012,
+ 0x0012,
+ 0x0013,
+ 0x0013,
+ 0x0014,
+ 0x0014,
+ 0x0015,
+ 0x0015,
+ 0x0016,
+ 0x0016,
+ 0x0017,
+ 0x0017,
+ 0x0018,
+ 0x0018,
+ 0x0019,
+ 0x0019,
+ 0x001A,
+ 0x001A,
+ 0x001B,
+ 0x001B,
+ 0x001C,
+ 0x001C,
+ 0x001C,
+ 0x001D,
+ 0x001D,
+ 0x001D,
+ 0x001E,
+ 0x001E,
+ 0x001E,
+ 0x001F,
+ 0x001F,
+ 0x001F,
+ 0x0020,
+ 0x007F,
+ 0x007F,
+ 0x0080,
+ 0x0080,
+ 0x0081,
+ 0x0081,
+ 0x0082,
+ 0x0082,
+ 0x0083,
+ 0x0083,
+ 0x0084,
+ 0x0084,
+ 0x0085,
+ 0x0085,
+ 0x0086,
+ 0x0086,
+ 0x0087,
+ 0x0087,
+ 0x0088,
+ 0x0088,
+ 0x0088,
+ 0x0089,
+ 0x0089,
+ 0x0089,
+ 0x008A,
+ 0x008A,
+ 0x008A,
+ 0x008B,
+ 0x008B,
+ 0x008B,
+ 0x008C,
+ 0x008C,
+ 0x008C,
+ 0x008D,
+ 0x008D,
+ 0x008D,
+ 0x008E,
+ 0x008E,
+ 0x008E,
+ 0x008F,
+ 0x008F,
+ 0x008F,
+ 0x0090,
+ 0x0090,
+ 0x0091,
+ 0x0091,
+ 0x0091,
+ 0x0092,
+ 0x0092,
+ 0x0092,
+ 0x0093,
+ 0x0093,
+ 0x0094,
+ 0x0094,
+ 0x0095,
+ 0x0095,
+ 0x0096,
+ 0x0096,
+ 0x0096,
+ 0x0097,
+ 0x0097,
+ 0x0097,
+ 0x0098,
+ 0x0098,
+ 0x0099,
+ 0x0099,
+ 0x009A,
+ 0x009A,
+ 0x009B,
+ 0x009B,
+ 0x009C,
+ 0x009C,
+ 0x009D,
+ 0x009D,
+ 0x009E,
+ 0x009E,
+ 0x009F,
+ 0x009F,
+ 0x00A0,
+ 0x00AD,
+ 0x01A2,
+ 0x01A3,
+ 0x034F,
+ 0x0CDE,
+ 0x0E9D,
+ 0x0E9F,
+ 0x0EA3,
+ 0x0EA5,
+ 0x0FD0,
+ 0x180B,
+ 0x180C,
+ 0x180D,
+ 0x180E,
+ 0x200B,
+ 0x200C,
+ 0x200D,
+ 0x200E,
+ 0x200F,
+ 0x202A,
+ 0x202B,
+ 0x202C,
+ 0x202D,
+ 0x202E,
+ 0x202F,
+ 0x205F,
+ 0x2060,
+ 0x2118,
+ 0x2448,
+ 0x2449,
+ 0xA015,
+ 0xFE18,
+ 0xFE00,
+ 0xFE01,
+ 0xFE02,
+ 0xFE03,
+ 0xFE04,
+ 0xFE05,
+ 0xFE06,
+ 0xFE07,
+ 0xFE08,
+ 0xFE09,
+ 0xFE0A,
+ 0xFE0B,
+ 0xFE0C,
+ 0xFE0D,
+ 0xFE0E,
+ 0xFE0F,
+ 0xFEFF,
+ 0xFEFF,
+ 0xFEFF,
+ 0x1D0C5,
+ 0xE0100,
+ 0xE0101,
+ 0xE0102,
+ 0xE0103,
+ 0xE0104,
+ 0xE0105,
+ 0xE0106,
+ 0xE0107,
+ 0xE0108,
+ 0xE0109,
+ 0xE010A,
+ 0xE010B,
+ 0xE010C,
+ 0xE010D,
+ 0xE010E,
+ 0xE010F,
+ 0xE0110,
+ 0xE0111,
+ 0xE0112,
+ 0xE0113,
+ 0xE0114,
+ 0xE0115,
+ 0xE0116,
+ 0xE0117,
+ 0xE0118,
+ 0xE0119,
+ 0xE011A,
+ 0xE011B,
+ 0xE011C,
+ 0xE011D,
+ 0xE011E,
+ 0xE011F,
+ 0xE0120,
+ 0xE0121,
+ 0xE0122,
+ 0xE0123,
+ 0xE0124,
+ 0xE0125,
+ 0xE0126,
+ 0xE0127,
+ 0xE0128,
+ 0xE0129,
+ 0xE012A,
+ 0xE012B,
+ 0xE012C,
+ 0xE012D,
+ 0xE012E,
+ 0xE012F,
+ 0xE0130,
+ 0xE0131,
+ 0xE0132,
+ 0xE0133,
+ 0xE0134,
+ 0xE0135,
+ 0xE0136,
+ 0xE0137,
+ 0xE0138,
+ 0xE0139,
+ 0xE013A,
+ 0xE013B,
+ 0xE013C,
+ 0xE013D,
+ 0xE013E,
+ 0xE013F,
+ 0xE0140,
+ 0xE0141,
+ 0xE0142,
+ 0xE0143,
+ 0xE0144,
+ 0xE0145,
+ 0xE0146,
+ 0xE0147,
+ 0xE0148,
+ 0xE0149,
+ 0xE014A,
+ 0xE014B,
+ 0xE014C,
+ 0xE014D,
+ 0xE014E,
+ 0xE014F,
+ 0xE0150,
+ 0xE0151,
+ 0xE0152,
+ 0xE0153,
+ 0xE0154,
+ 0xE0155,
+ 0xE0156,
+ 0xE0157,
+ 0xE0158,
+ 0xE0159,
+ 0xE015A,
+ 0xE015B,
+ 0xE015C,
+ 0xE015D,
+ 0xE015E,
+ 0xE015F,
+ 0xE0160,
+ 0xE0161,
+ 0xE0162,
+ 0xE0163,
+ 0xE0164,
+ 0xE0165,
+ 0xE0166,
+ 0xE0167,
+ 0xE0168,
+ 0xE0169,
+ 0xE016A,
+ 0xE016B,
+ 0xE016C,
+ 0xE016D,
+ 0xE016E,
+ 0xE016F,
+ 0xE0170,
+ 0xE0171,
+ 0xE0172,
+ 0xE0173,
+ 0xE0174,
+ 0xE0175,
+ 0xE0176,
+ 0xE0177,
+ 0xE0178,
+ 0xE0179,
+ 0xE017A,
+ 0xE017B,
+ 0xE017C,
+ 0xE017D,
+ 0xE017E,
+ 0xE017F,
+ 0xE0180,
+ 0xE0181,
+ 0xE0182,
+ 0xE0183,
+ 0xE0184,
+ 0xE0185,
+ 0xE0186,
+ 0xE0187,
+ 0xE0188,
+ 0xE0189,
+ 0xE018A,
+ 0xE018B,
+ 0xE018C,
+ 0xE018D,
+ 0xE018E,
+ 0xE018F,
+ 0xE0190,
+ 0xE0191,
+ 0xE0192,
+ 0xE0193,
+ 0xE0194,
+ 0xE0195,
+ 0xE0196,
+ 0xE0197,
+ 0xE0198,
+ 0xE0199,
+ 0xE019A,
+ 0xE019B,
+ 0xE019C,
+ 0xE019D,
+ 0xE019E,
+ 0xE019F,
+ 0xE01A0,
+ 0xE01A1,
+ 0xE01A2,
+ 0xE01A3,
+ 0xE01A4,
+ 0xE01A5,
+ 0xE01A6,
+ 0xE01A7,
+ 0xE01A8,
+ 0xE01A9,
+ 0xE01AA,
+ 0xE01AB,
+ 0xE01AC,
+ 0xE01AD,
+ 0xE01AE,
+ 0xE01AF,
+ 0xE01B0,
+ 0xE01B1,
+ 0xE01B2,
+ 0xE01B3,
+ 0xE01B4,
+ 0xE01B5,
+ 0xE01B6,
+ 0xE01B7,
+ 0xE01B8,
+ 0xE01B9,
+ 0xE01BA,
+ 0xE01BB,
+ 0xE01BC,
+ 0xE01BD,
+ 0xE01BE,
+ 0xE01BF,
+ 0xE01C0,
+ 0xE01C1,
+ 0xE01C2,
+ 0xE01C3,
+ 0xE01C4,
+ 0xE01C5,
+ 0xE01C6,
+ 0xE01C7,
+ 0xE01C8,
+ 0xE01C9,
+ 0xE01CA,
+ 0xE01CB,
+ 0xE01CC,
+ 0xE01CD,
+ 0xE01CE,
+ 0xE01CF,
+ 0xE01D0,
+ 0xE01D1,
+ 0xE01D2,
+ 0xE01D3,
+ 0xE01D4,
+ 0xE01D5,
+ 0xE01D6,
+ 0xE01D7,
+ 0xE01D8,
+ 0xE01D9,
+ 0xE01DA,
+ 0xE01DB,
+ 0xE01DC,
+ 0xE01DD,
+ 0xE01DE,
+ 0xE01DF,
+ 0xE01E0,
+ 0xE01E1,
+ 0xE01E2,
+ 0xE01E3,
+ 0xE01E4,
+ 0xE01E5,
+ 0xE01E6,
+ 0xE01E7,
+ 0xE01E8,
+ 0xE01E9,
+ 0xE01EA,
+ 0xE01EB,
+ 0xE01EC,
+ 0xE01ED,
+ 0xE01EE,
+ 0xE01EF,
+};
+
+typedef struct NamedSequence {
+ int seqlen;
+ Py_UCS2 seq[4];
+} named_sequence;
+
+static const unsigned int named_sequences_start = 0xf0200;
+static const unsigned int named_sequences_end = 0xf03a5;
+static const named_sequence named_sequences[] = {
+ {2, {0x0100, 0x0300}},
+ {2, {0x0101, 0x0300}},
+ {2, {0x0045, 0x0329}},
+ {2, {0x0065, 0x0329}},
+ {2, {0x00C8, 0x0329}},
+ {2, {0x00E8, 0x0329}},
+ {2, {0x00C9, 0x0329}},
+ {2, {0x00E9, 0x0329}},
+ {2, {0x00CA, 0x0304}},
+ {2, {0x00EA, 0x0304}},
+ {2, {0x00CA, 0x030C}},
+ {2, {0x00EA, 0x030C}},
+ {2, {0x012A, 0x0300}},
+ {2, {0x012B, 0x0300}},
+ {3, {0x0069, 0x0307, 0x0301}},
+ {3, {0x006E, 0x0360, 0x0067}},
+ {2, {0x004F, 0x0329}},
+ {2, {0x006F, 0x0329}},
+ {2, {0x00D2, 0x0329}},
+ {2, {0x00F2, 0x0329}},
+ {2, {0x00D3, 0x0329}},
+ {2, {0x00F3, 0x0329}},
+ {2, {0x0053, 0x0329}},
+ {2, {0x0073, 0x0329}},
+ {2, {0x016A, 0x0300}},
+ {2, {0x016B, 0x0300}},
+ {2, {0x0104, 0x0301}},
+ {2, {0x0105, 0x0301}},
+ {2, {0x0104, 0x0303}},
+ {2, {0x0105, 0x0303}},
+ {2, {0x0118, 0x0301}},
+ {2, {0x0119, 0x0301}},
+ {2, {0x0118, 0x0303}},
+ {2, {0x0119, 0x0303}},
+ {2, {0x0116, 0x0301}},
+ {2, {0x0117, 0x0301}},
+ {2, {0x0116, 0x0303}},
+ {2, {0x0117, 0x0303}},
+ {3, {0x0069, 0x0307, 0x0300}},
+ {3, {0x0069, 0x0307, 0x0303}},
+ {2, {0x012E, 0x0301}},
+ {3, {0x012F, 0x0307, 0x0301}},
+ {2, {0x012E, 0x0303}},
+ {3, {0x012F, 0x0307, 0x0303}},
+ {2, {0x004A, 0x0303}},
+ {3, {0x006A, 0x0307, 0x0303}},
+ {2, {0x004C, 0x0303}},
+ {2, {0x006C, 0x0303}},
+ {2, {0x004D, 0x0303}},
+ {2, {0x006D, 0x0303}},
+ {2, {0x0052, 0x0303}},
+ {2, {0x0072, 0x0303}},
+ {2, {0x0172, 0x0301}},
+ {2, {0x0173, 0x0301}},
+ {2, {0x0172, 0x0303}},
+ {2, {0x0173, 0x0303}},
+ {2, {0x016A, 0x0301}},
+ {2, {0x016B, 0x0301}},
+ {2, {0x016A, 0x0303}},
+ {2, {0x016B, 0x0303}},
+ {2, {0x00E6, 0x0300}},
+ {2, {0x0254, 0x0300}},
+ {2, {0x0254, 0x0301}},
+ {2, {0x028C, 0x0300}},
+ {2, {0x028C, 0x0301}},
+ {2, {0x0259, 0x0300}},
+ {2, {0x0259, 0x0301}},
+ {2, {0x025A, 0x0300}},
+ {2, {0x025A, 0x0301}},
+ {3, {0x0995, 0x09CD, 0x09B7}},
+ {2, {0x0B95, 0x0BCD}},
+ {2, {0x0B99, 0x0BCD}},
+ {2, {0x0B9A, 0x0BCD}},
+ {2, {0x0B9E, 0x0BCD}},
+ {2, {0x0B9F, 0x0BCD}},
+ {2, {0x0BA3, 0x0BCD}},
+ {2, {0x0BA4, 0x0BCD}},
+ {2, {0x0BA8, 0x0BCD}},
+ {2, {0x0BAA, 0x0BCD}},
+ {2, {0x0BAE, 0x0BCD}},
+ {2, {0x0BAF, 0x0BCD}},
+ {2, {0x0BB0, 0x0BCD}},
+ {2, {0x0BB2, 0x0BCD}},
+ {2, {0x0BB5, 0x0BCD}},
+ {2, {0x0BB4, 0x0BCD}},
+ {2, {0x0BB3, 0x0BCD}},
+ {2, {0x0BB1, 0x0BCD}},
+ {2, {0x0BA9, 0x0BCD}},
+ {2, {0x0B9C, 0x0BCD}},
+ {2, {0x0BB6, 0x0BCD}},
+ {2, {0x0BB7, 0x0BCD}},
+ {2, {0x0BB8, 0x0BCD}},
+ {2, {0x0BB9, 0x0BCD}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BCD}},
+ {2, {0x0B95, 0x0BBE}},
+ {2, {0x0B95, 0x0BBF}},
+ {2, {0x0B95, 0x0BC0}},
+ {2, {0x0B95, 0x0BC1}},
+ {2, {0x0B95, 0x0BC2}},
+ {2, {0x0B95, 0x0BC6}},
+ {2, {0x0B95, 0x0BC7}},
+ {2, {0x0B95, 0x0BC8}},
+ {2, {0x0B95, 0x0BCA}},
+ {2, {0x0B95, 0x0BCB}},
+ {2, {0x0B95, 0x0BCC}},
+ {2, {0x0B99, 0x0BBE}},
+ {2, {0x0B99, 0x0BBF}},
+ {2, {0x0B99, 0x0BC0}},
+ {2, {0x0B99, 0x0BC1}},
+ {2, {0x0B99, 0x0BC2}},
+ {2, {0x0B99, 0x0BC6}},
+ {2, {0x0B99, 0x0BC7}},
+ {2, {0x0B99, 0x0BC8}},
+ {2, {0x0B99, 0x0BCA}},
+ {2, {0x0B99, 0x0BCB}},
+ {2, {0x0B99, 0x0BCC}},
+ {2, {0x0B9A, 0x0BBE}},
+ {2, {0x0B9A, 0x0BBF}},
+ {2, {0x0B9A, 0x0BC0}},
+ {2, {0x0B9A, 0x0BC1}},
+ {2, {0x0B9A, 0x0BC2}},
+ {2, {0x0B9A, 0x0BC6}},
+ {2, {0x0B9A, 0x0BC7}},
+ {2, {0x0B9A, 0x0BC8}},
+ {2, {0x0B9A, 0x0BCA}},
+ {2, {0x0B9A, 0x0BCB}},
+ {2, {0x0B9A, 0x0BCC}},
+ {2, {0x0B9E, 0x0BBE}},
+ {2, {0x0B9E, 0x0BBF}},
+ {2, {0x0B9E, 0x0BC0}},
+ {2, {0x0B9E, 0x0BC1}},
+ {2, {0x0B9E, 0x0BC2}},
+ {2, {0x0B9E, 0x0BC6}},
+ {2, {0x0B9E, 0x0BC7}},
+ {2, {0x0B9E, 0x0BC8}},
+ {2, {0x0B9E, 0x0BCA}},
+ {2, {0x0B9E, 0x0BCB}},
+ {2, {0x0B9E, 0x0BCC}},
+ {2, {0x0B9F, 0x0BBE}},
+ {2, {0x0B9F, 0x0BBF}},
+ {2, {0x0B9F, 0x0BC0}},
+ {2, {0x0B9F, 0x0BC1}},
+ {2, {0x0B9F, 0x0BC2}},
+ {2, {0x0B9F, 0x0BC6}},
+ {2, {0x0B9F, 0x0BC7}},
+ {2, {0x0B9F, 0x0BC8}},
+ {2, {0x0B9F, 0x0BCA}},
+ {2, {0x0B9F, 0x0BCB}},
+ {2, {0x0B9F, 0x0BCC}},
+ {2, {0x0BA3, 0x0BBE}},
+ {2, {0x0BA3, 0x0BBF}},
+ {2, {0x0BA3, 0x0BC0}},
+ {2, {0x0BA3, 0x0BC1}},
+ {2, {0x0BA3, 0x0BC2}},
+ {2, {0x0BA3, 0x0BC6}},
+ {2, {0x0BA3, 0x0BC7}},
+ {2, {0x0BA3, 0x0BC8}},
+ {2, {0x0BA3, 0x0BCA}},
+ {2, {0x0BA3, 0x0BCB}},
+ {2, {0x0BA3, 0x0BCC}},
+ {2, {0x0BA4, 0x0BBE}},
+ {2, {0x0BA4, 0x0BBF}},
+ {2, {0x0BA4, 0x0BC0}},
+ {2, {0x0BA4, 0x0BC1}},
+ {2, {0x0BA4, 0x0BC2}},
+ {2, {0x0BA4, 0x0BC6}},
+ {2, {0x0BA4, 0x0BC7}},
+ {2, {0x0BA4, 0x0BC8}},
+ {2, {0x0BA4, 0x0BCA}},
+ {2, {0x0BA4, 0x0BCB}},
+ {2, {0x0BA4, 0x0BCC}},
+ {2, {0x0BA8, 0x0BBE}},
+ {2, {0x0BA8, 0x0BBF}},
+ {2, {0x0BA8, 0x0BC0}},
+ {2, {0x0BA8, 0x0BC1}},
+ {2, {0x0BA8, 0x0BC2}},
+ {2, {0x0BA8, 0x0BC6}},
+ {2, {0x0BA8, 0x0BC7}},
+ {2, {0x0BA8, 0x0BC8}},
+ {2, {0x0BA8, 0x0BCA}},
+ {2, {0x0BA8, 0x0BCB}},
+ {2, {0x0BA8, 0x0BCC}},
+ {2, {0x0BAA, 0x0BBE}},
+ {2, {0x0BAA, 0x0BBF}},
+ {2, {0x0BAA, 0x0BC0}},
+ {2, {0x0BAA, 0x0BC1}},
+ {2, {0x0BAA, 0x0BC2}},
+ {2, {0x0BAA, 0x0BC6}},
+ {2, {0x0BAA, 0x0BC7}},
+ {2, {0x0BAA, 0x0BC8}},
+ {2, {0x0BAA, 0x0BCA}},
+ {2, {0x0BAA, 0x0BCB}},
+ {2, {0x0BAA, 0x0BCC}},
+ {2, {0x0BAE, 0x0BBE}},
+ {2, {0x0BAE, 0x0BBF}},
+ {2, {0x0BAE, 0x0BC0}},
+ {2, {0x0BAE, 0x0BC1}},
+ {2, {0x0BAE, 0x0BC2}},
+ {2, {0x0BAE, 0x0BC6}},
+ {2, {0x0BAE, 0x0BC7}},
+ {2, {0x0BAE, 0x0BC8}},
+ {2, {0x0BAE, 0x0BCA}},
+ {2, {0x0BAE, 0x0BCB}},
+ {2, {0x0BAE, 0x0BCC}},
+ {2, {0x0BAF, 0x0BBE}},
+ {2, {0x0BAF, 0x0BBF}},
+ {2, {0x0BAF, 0x0BC0}},
+ {2, {0x0BAF, 0x0BC1}},
+ {2, {0x0BAF, 0x0BC2}},
+ {2, {0x0BAF, 0x0BC6}},
+ {2, {0x0BAF, 0x0BC7}},
+ {2, {0x0BAF, 0x0BC8}},
+ {2, {0x0BAF, 0x0BCA}},
+ {2, {0x0BAF, 0x0BCB}},
+ {2, {0x0BAF, 0x0BCC}},
+ {2, {0x0BB0, 0x0BBE}},
+ {2, {0x0BB0, 0x0BBF}},
+ {2, {0x0BB0, 0x0BC0}},
+ {2, {0x0BB0, 0x0BC1}},
+ {2, {0x0BB0, 0x0BC2}},
+ {2, {0x0BB0, 0x0BC6}},
+ {2, {0x0BB0, 0x0BC7}},
+ {2, {0x0BB0, 0x0BC8}},
+ {2, {0x0BB0, 0x0BCA}},
+ {2, {0x0BB0, 0x0BCB}},
+ {2, {0x0BB0, 0x0BCC}},
+ {2, {0x0BB2, 0x0BBE}},
+ {2, {0x0BB2, 0x0BBF}},
+ {2, {0x0BB2, 0x0BC0}},
+ {2, {0x0BB2, 0x0BC1}},
+ {2, {0x0BB2, 0x0BC2}},
+ {2, {0x0BB2, 0x0BC6}},
+ {2, {0x0BB2, 0x0BC7}},
+ {2, {0x0BB2, 0x0BC8}},
+ {2, {0x0BB2, 0x0BCA}},
+ {2, {0x0BB2, 0x0BCB}},
+ {2, {0x0BB2, 0x0BCC}},
+ {2, {0x0BB5, 0x0BBE}},
+ {2, {0x0BB5, 0x0BBF}},
+ {2, {0x0BB5, 0x0BC0}},
+ {2, {0x0BB5, 0x0BC1}},
+ {2, {0x0BB5, 0x0BC2}},
+ {2, {0x0BB5, 0x0BC6}},
+ {2, {0x0BB5, 0x0BC7}},
+ {2, {0x0BB5, 0x0BC8}},
+ {2, {0x0BB5, 0x0BCA}},
+ {2, {0x0BB5, 0x0BCB}},
+ {2, {0x0BB5, 0x0BCC}},
+ {2, {0x0BB4, 0x0BBE}},
+ {2, {0x0BB4, 0x0BBF}},
+ {2, {0x0BB4, 0x0BC0}},
+ {2, {0x0BB4, 0x0BC1}},
+ {2, {0x0BB4, 0x0BC2}},
+ {2, {0x0BB4, 0x0BC6}},
+ {2, {0x0BB4, 0x0BC7}},
+ {2, {0x0BB4, 0x0BC8}},
+ {2, {0x0BB4, 0x0BCA}},
+ {2, {0x0BB4, 0x0BCB}},
+ {2, {0x0BB4, 0x0BCC}},
+ {2, {0x0BB3, 0x0BBE}},
+ {2, {0x0BB3, 0x0BBF}},
+ {2, {0x0BB3, 0x0BC0}},
+ {2, {0x0BB3, 0x0BC1}},
+ {2, {0x0BB3, 0x0BC2}},
+ {2, {0x0BB3, 0x0BC6}},
+ {2, {0x0BB3, 0x0BC7}},
+ {2, {0x0BB3, 0x0BC8}},
+ {2, {0x0BB3, 0x0BCA}},
+ {2, {0x0BB3, 0x0BCB}},
+ {2, {0x0BB3, 0x0BCC}},
+ {2, {0x0BB1, 0x0BBE}},
+ {2, {0x0BB1, 0x0BBF}},
+ {2, {0x0BB1, 0x0BC0}},
+ {2, {0x0BB1, 0x0BC1}},
+ {2, {0x0BB1, 0x0BC2}},
+ {2, {0x0BB1, 0x0BC6}},
+ {2, {0x0BB1, 0x0BC7}},
+ {2, {0x0BB1, 0x0BC8}},
+ {2, {0x0BB1, 0x0BCA}},
+ {2, {0x0BB1, 0x0BCB}},
+ {2, {0x0BB1, 0x0BCC}},
+ {2, {0x0BA9, 0x0BBE}},
+ {2, {0x0BA9, 0x0BBF}},
+ {2, {0x0BA9, 0x0BC0}},
+ {2, {0x0BA9, 0x0BC1}},
+ {2, {0x0BA9, 0x0BC2}},
+ {2, {0x0BA9, 0x0BC6}},
+ {2, {0x0BA9, 0x0BC7}},
+ {2, {0x0BA9, 0x0BC8}},
+ {2, {0x0BA9, 0x0BCA}},
+ {2, {0x0BA9, 0x0BCB}},
+ {2, {0x0BA9, 0x0BCC}},
+ {2, {0x0B9C, 0x0BBE}},
+ {2, {0x0B9C, 0x0BBF}},
+ {2, {0x0B9C, 0x0BC0}},
+ {2, {0x0B9C, 0x0BC1}},
+ {2, {0x0B9C, 0x0BC2}},
+ {2, {0x0B9C, 0x0BC6}},
+ {2, {0x0B9C, 0x0BC7}},
+ {2, {0x0B9C, 0x0BC8}},
+ {2, {0x0B9C, 0x0BCA}},
+ {2, {0x0B9C, 0x0BCB}},
+ {2, {0x0B9C, 0x0BCC}},
+ {2, {0x0BB6, 0x0BBE}},
+ {2, {0x0BB6, 0x0BBF}},
+ {2, {0x0BB6, 0x0BC0}},
+ {2, {0x0BB6, 0x0BC1}},
+ {2, {0x0BB6, 0x0BC2}},
+ {2, {0x0BB6, 0x0BC6}},
+ {2, {0x0BB6, 0x0BC7}},
+ {2, {0x0BB6, 0x0BC8}},
+ {2, {0x0BB6, 0x0BCA}},
+ {2, {0x0BB6, 0x0BCB}},
+ {2, {0x0BB6, 0x0BCC}},
+ {2, {0x0BB7, 0x0BBE}},
+ {2, {0x0BB7, 0x0BBF}},
+ {2, {0x0BB7, 0x0BC0}},
+ {2, {0x0BB7, 0x0BC1}},
+ {2, {0x0BB7, 0x0BC2}},
+ {2, {0x0BB7, 0x0BC6}},
+ {2, {0x0BB7, 0x0BC7}},
+ {2, {0x0BB7, 0x0BC8}},
+ {2, {0x0BB7, 0x0BCA}},
+ {2, {0x0BB7, 0x0BCB}},
+ {2, {0x0BB7, 0x0BCC}},
+ {2, {0x0BB8, 0x0BBE}},
+ {2, {0x0BB8, 0x0BBF}},
+ {2, {0x0BB8, 0x0BC0}},
+ {2, {0x0BB8, 0x0BC1}},
+ {2, {0x0BB8, 0x0BC2}},
+ {2, {0x0BB8, 0x0BC6}},
+ {2, {0x0BB8, 0x0BC7}},
+ {2, {0x0BB8, 0x0BC8}},
+ {2, {0x0BB8, 0x0BCA}},
+ {2, {0x0BB8, 0x0BCB}},
+ {2, {0x0BB8, 0x0BCC}},
+ {2, {0x0BB9, 0x0BBE}},
+ {2, {0x0BB9, 0x0BBF}},
+ {2, {0x0BB9, 0x0BC0}},
+ {2, {0x0BB9, 0x0BC1}},
+ {2, {0x0BB9, 0x0BC2}},
+ {2, {0x0BB9, 0x0BC6}},
+ {2, {0x0BB9, 0x0BC7}},
+ {2, {0x0BB9, 0x0BC8}},
+ {2, {0x0BB9, 0x0BCA}},
+ {2, {0x0BB9, 0x0BCB}},
+ {2, {0x0BB9, 0x0BCC}},
+ {3, {0x0B95, 0x0BCD, 0x0BB7}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BBE}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BBF}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC0}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC1}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC2}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC6}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC7}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BC8}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BCA}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BCB}},
+ {4, {0x0B95, 0x0BCD, 0x0BB7, 0x0BCC}},
+ {4, {0x0BB6, 0x0BCD, 0x0BB0, 0x0BC0}},
+ {3, {0x0DCA, 0x200D, 0x0DBA}},
+ {3, {0x0DCA, 0x200D, 0x0DBB}},
+ {3, {0x0DBB, 0x0DCA, 0x200D}},
+ {2, {0x10E3, 0x0302}},
+ {2, {0x17D2, 0x1780}},
+ {2, {0x17D2, 0x1781}},
+ {2, {0x17D2, 0x1782}},
+ {2, {0x17D2, 0x1783}},
+ {2, {0x17D2, 0x1784}},
+ {2, {0x17D2, 0x1785}},
+ {2, {0x17D2, 0x1786}},
+ {2, {0x17D2, 0x1787}},
+ {2, {0x17D2, 0x1788}},
+ {2, {0x17D2, 0x1789}},
+ {2, {0x17D2, 0x178A}},
+ {2, {0x17D2, 0x178B}},
+ {2, {0x17D2, 0x178C}},
+ {2, {0x17D2, 0x178D}},
+ {2, {0x17D2, 0x178E}},
+ {2, {0x17D2, 0x178F}},
+ {2, {0x17D2, 0x1790}},
+ {2, {0x17D2, 0x1791}},
+ {2, {0x17D2, 0x1792}},
+ {2, {0x17D2, 0x1793}},
+ {2, {0x17D2, 0x1794}},
+ {2, {0x17D2, 0x1795}},
+ {2, {0x17D2, 0x1796}},
+ {2, {0x17D2, 0x1797}},
+ {2, {0x17D2, 0x1798}},
+ {2, {0x17D2, 0x1799}},
+ {2, {0x17D2, 0x179A}},
+ {2, {0x17D2, 0x179B}},
+ {2, {0x17D2, 0x179C}},
+ {2, {0x17D2, 0x179D}},
+ {2, {0x17D2, 0x179E}},
+ {2, {0x17D2, 0x179F}},
+ {2, {0x17D2, 0x17A0}},
+ {2, {0x17D2, 0x17A1}},
+ {2, {0x17D2, 0x17A2}},
+ {2, {0x17D2, 0x17A7}},
+ {2, {0x17D2, 0x17AB}},
+ {2, {0x17D2, 0x17AC}},
+ {2, {0x17D2, 0x17AF}},
+ {2, {0x17BB, 0x17C6}},
+ {2, {0x17B6, 0x17C6}},
+ {2, {0x304B, 0x309A}},
+ {2, {0x304D, 0x309A}},
+ {2, {0x304F, 0x309A}},
+ {2, {0x3051, 0x309A}},
+ {2, {0x3053, 0x309A}},
+ {2, {0x30AB, 0x309A}},
+ {2, {0x30AD, 0x309A}},
+ {2, {0x30AF, 0x309A}},
+ {2, {0x30B1, 0x309A}},
+ {2, {0x30B3, 0x309A}},
+ {2, {0x30BB, 0x309A}},
+ {2, {0x30C4, 0x309A}},
+ {2, {0x30C8, 0x309A}},
+ {2, {0x31F7, 0x309A}},
+ {2, {0x02E5, 0x02E9}},
+ {2, {0x02E9, 0x02E5}},
+};
diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c
index ec924f2117..661b6e294a 100644
--- a/Modules/xxlimited.c
+++ b/Modules/xxlimited.c
@@ -187,8 +187,7 @@ static PyType_Spec Str_Type_spec = {
static PyObject *
null_richcompare(PyObject *self, PyObject *other, int op)
{
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
+ Py_RETURN_NOTIMPLEMENTED;
}
static PyType_Slot Null_Type_slots[] = {
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index a8a93606d7..0feff662d5 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -102,42 +102,42 @@ static PyTypeObject Xxo_Type = {
sizeof(XxoObject), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
- (destructor)Xxo_dealloc, /*tp_dealloc*/
+ (destructor)Xxo_dealloc, /*tp_dealloc*/
0, /*tp_print*/
- (getattrfunc)0, /*tp_getattr*/
- (setattrfunc)Xxo_setattr, /*tp_setattr*/
+ (getattrfunc)0, /*tp_getattr*/
+ (setattrfunc)Xxo_setattr, /*tp_setattr*/
0, /*tp_reserved*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash*/
- 0, /*tp_call*/
- 0, /*tp_str*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
(getattrofunc)Xxo_getattro, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT, /*tp_flags*/
- 0, /*tp_doc*/
- 0, /*tp_traverse*/
- 0, /*tp_clear*/
- 0, /*tp_richcompare*/
- 0, /*tp_weaklistoffset*/
- 0, /*tp_iter*/
- 0, /*tp_iternext*/
- Xxo_methods, /*tp_methods*/
- 0, /*tp_members*/
- 0, /*tp_getset*/
- 0, /*tp_base*/
- 0, /*tp_dict*/
- 0, /*tp_descr_get*/
- 0, /*tp_descr_set*/
- 0, /*tp_dictoffset*/
- 0, /*tp_init*/
- 0, /*tp_alloc*/
- 0, /*tp_new*/
- 0, /*tp_free*/
- 0, /*tp_is_gc*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ 0, /*tp_doc*/
+ 0, /*tp_traverse*/
+ 0, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ Xxo_methods, /*tp_methods*/
+ 0, /*tp_members*/
+ 0, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ 0, /*tp_init*/
+ 0, /*tp_alloc*/
+ 0, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
};
/* --------------------------------------------------------------------- */
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index 7ae4f0a051..2feb2a827c 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -49,7 +49,7 @@ static PyObject *zip_directory_cache = NULL;
/* forward decls */
static PyObject *read_directory(PyObject *archive);
static PyObject *get_data(PyObject *archive, PyObject *toc_entry);
-static PyObject *get_module_code(ZipImporter *self, char *fullname,
+static PyObject *get_module_code(ZipImporter *self, PyObject *fullname,
int *p_ispackage, PyObject **p_modpath);
@@ -63,109 +63,109 @@ static PyObject *get_module_code(ZipImporter *self, char *fullname,
static int
zipimporter_init(ZipImporter *self, PyObject *args, PyObject *kwds)
{
- PyObject *pathobj, *files;
- Py_UNICODE *path, *p, *prefix, buf[MAXPATHLEN+2];
- Py_ssize_t len;
+ PyObject *path, *files, *tmp;
+ PyObject *filename = NULL;
+ Py_ssize_t len, flen;
+#ifdef ALTSEP
+ _Py_IDENTIFIER(replace);
+#endif
if (!_PyArg_NoKeywords("zipimporter()", kwds))
return -1;
if (!PyArg_ParseTuple(args, "O&:zipimporter",
- PyUnicode_FSDecoder, &pathobj))
+ PyUnicode_FSDecoder, &path))
+ return -1;
+
+ if (PyUnicode_READY(path) == -1)
return -1;
- /* copy path to buf */
- len = PyUnicode_GET_SIZE(pathobj);
+ len = PyUnicode_GET_LENGTH(path);
if (len == 0) {
PyErr_SetString(ZipImportError, "archive path is empty");
goto error;
}
- if (len >= MAXPATHLEN) {
- PyErr_SetString(ZipImportError,
- "archive path too long");
- goto error;
- }
- Py_UNICODE_strcpy(buf, PyUnicode_AS_UNICODE(pathobj));
#ifdef ALTSEP
- for (p = buf; *p; p++) {
- if (*p == ALTSEP)
- *p = SEP;
- }
+ tmp = _PyObject_CallMethodId(path, &PyId_replace, "CC", ALTSEP, SEP);
+ if (!tmp)
+ goto error;
+ Py_DECREF(path);
+ path = tmp;
#endif
- path = NULL;
- prefix = NULL;
+ filename = path;
+ Py_INCREF(filename);
+ flen = len;
for (;;) {
struct stat statbuf;
int rv;
- if (pathobj == NULL) {
- pathobj = PyUnicode_FromUnicode(buf, len);
- if (pathobj == NULL)
- goto error;
- }
- rv = _Py_stat(pathobj, &statbuf);
+ rv = _Py_stat(filename, &statbuf);
+ if (rv == -2)
+ goto error;
if (rv == 0) {
/* it exists */
- if (S_ISREG(statbuf.st_mode))
- /* it's a file */
- path = buf;
+ if (!S_ISREG(statbuf.st_mode))
+ /* it's a not file */
+ Py_CLEAR(filename);
break;
}
- else if (PyErr_Occurred())
- goto error;
+ Py_CLEAR(filename);
/* back up one path element */
- p = Py_UNICODE_strrchr(buf, SEP);
- if (prefix != NULL)
- *prefix = SEP;
- if (p == NULL)
+ flen = PyUnicode_FindChar(path, SEP, 0, flen, -1);
+ if (flen == -1)
break;
- *p = '\0';
- len = p - buf;
- prefix = p;
- Py_CLEAR(pathobj);
+ filename = PyUnicode_Substring(path, 0, flen);
}
- if (path == NULL) {
+ if (filename == NULL) {
PyErr_SetString(ZipImportError, "not a Zip file");
goto error;
}
- files = PyDict_GetItem(zip_directory_cache, pathobj);
+ if (PyUnicode_READY(filename) < 0)
+ goto error;
+
+ files = PyDict_GetItem(zip_directory_cache, filename);
if (files == NULL) {
- files = read_directory(pathobj);
+ files = read_directory(filename);
if (files == NULL)
goto error;
- if (PyDict_SetItem(zip_directory_cache, pathobj, files) != 0)
+ if (PyDict_SetItem(zip_directory_cache, filename, files) != 0)
goto error;
}
else
Py_INCREF(files);
self->files = files;
- self->archive = pathobj;
- pathobj = NULL;
+ /* Transfer reference */
+ self->archive = filename;
+ filename = NULL;
- if (prefix != NULL) {
- prefix++;
- len = Py_UNICODE_strlen(prefix);
- if (prefix[len-1] != SEP) {
+ /* Check if there is a prefix directory following the filename. */
+ if (flen != len) {
+ tmp = PyUnicode_Substring(path, flen+1,
+ PyUnicode_GET_LENGTH(path));
+ if (tmp == NULL)
+ goto error;
+ self->prefix = tmp;
+ if (PyUnicode_READ_CHAR(path, len-1) != SEP) {
/* add trailing SEP */
- prefix[len] = SEP;
- prefix[len + 1] = '\0';
- len++;
+ tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP);
+ if (tmp == NULL)
+ goto error;
+ Py_DECREF(self->prefix);
+ self->prefix = tmp;
}
}
else
- len = 0;
- self->prefix = PyUnicode_FromUnicode(prefix, len);
- if (self->prefix == NULL)
- goto error;
-
+ self->prefix = PyUnicode_New(0, 0);
+ Py_DECREF(path);
return 0;
error:
- Py_XDECREF(pathobj);
+ Py_DECREF(path);
+ Py_XDECREF(filename);
return -1;
}
@@ -193,7 +193,7 @@ zipimporter_repr(ZipImporter *self)
{
if (self->archive == NULL)
return PyUnicode_FromString("<zipimporter object \"???\">");
- else if (self->prefix != NULL && PyUnicode_GET_SIZE(self->prefix) != 0)
+ else if (self->prefix != NULL && PyUnicode_GET_LENGTH(self->prefix) != 0)
return PyUnicode_FromFormat("<zipimporter object \"%U%c%U\">",
self->archive, SEP, self->prefix);
else
@@ -202,49 +202,58 @@ zipimporter_repr(ZipImporter *self)
}
/* return fullname.split(".")[-1] */
-static char *
-get_subname(char *fullname)
+static PyObject *
+get_subname(PyObject *fullname)
{
- char *subname = strrchr(fullname, '.');
- if (subname == NULL)
- subname = fullname;
- else
- subname++;
- return subname;
+ Py_ssize_t len, dot;
+ if (PyUnicode_READY(fullname) < 0)
+ return NULL;
+ len = PyUnicode_GET_LENGTH(fullname);
+ dot = PyUnicode_FindChar(fullname, '.', 0, len, -1);
+ if (dot == -1) {
+ Py_INCREF(fullname);
+ return fullname;
+ } else
+ return PyUnicode_Substring(fullname, dot+1, len);
}
/* Given a (sub)modulename, write the potential file path in the
archive (without extension) to the path buffer. Return the
- length of the resulting string. */
-static int
-make_filename(PyObject *prefix_obj, char *name, char *path, size_t pathsize)
-{
- size_t len;
- char *p;
- PyObject *prefix;
+ length of the resulting string.
- prefix = PyUnicode_EncodeFSDefault(prefix_obj);
- if (prefix == NULL)
- return -1;
- len = PyBytes_GET_SIZE(prefix);
+ return self.prefix + name.replace('.', os.sep) */
+static PyObject*
+make_filename(PyObject *prefix, PyObject *name)
+{
+ PyObject *pathobj;
+ Py_UCS4 *p, *buf;
+ Py_ssize_t len;
- /* self.prefix + name [+ SEP + "__init__"] + ".py[co]" */
- if (len + strlen(name) + 13 >= pathsize - 1) {
- PyErr_SetString(ZipImportError, "path too long");
- Py_DECREF(prefix);
- return -1;
+ len = PyUnicode_GET_LENGTH(prefix) + PyUnicode_GET_LENGTH(name) + 1;
+ p = buf = PyMem_Malloc(sizeof(Py_UCS4) * len);
+ if (buf == NULL) {
+ PyErr_NoMemory();
+ return NULL;
}
- strcpy(path, PyBytes_AS_STRING(prefix));
- Py_DECREF(prefix);
- strcpy(path + len, name);
- for (p = path + len; *p; p++) {
+ if (!PyUnicode_AsUCS4(prefix, p, len, 0)) {
+ PyMem_Free(buf);
+ return NULL;
+ }
+ p += PyUnicode_GET_LENGTH(prefix);
+ len -= PyUnicode_GET_LENGTH(prefix);
+ if (!PyUnicode_AsUCS4(name, p, len, 1)) {
+ PyMem_Free(buf);
+ return NULL;
+ }
+ for (; *p; p++) {
if (*p == '.')
*p = SEP;
}
- len += strlen(name);
- assert(len < INT_MAX);
- return (int)len;
+ pathobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
+ buf, p-buf);
+ PyMem_Free(buf);
+ return pathobj;
}
enum zi_module_info {
@@ -254,32 +263,113 @@ enum zi_module_info {
MI_PACKAGE
};
+/* Does this path represent a directory?
+ on error, return < 0
+ if not a dir, return 0
+ if a dir, return 1
+*/
+static int
+check_is_directory(ZipImporter *self, PyObject* prefix, PyObject *path)
+{
+ PyObject *dirpath;
+ int res;
+
+ /* See if this is a "directory". If so, it's eligible to be part
+ of a namespace package. We test by seeing if the name, with an
+ appended path separator, exists. */
+ dirpath = PyUnicode_FromFormat("%U%U%c", prefix, path, SEP);
+ if (dirpath == NULL)
+ return -1;
+ /* If dirpath is present in self->files, we have a directory. */
+ res = PyDict_Contains(self->files, dirpath);
+ Py_DECREF(dirpath);
+ return res;
+}
+
/* Return some information about a module. */
static enum zi_module_info
-get_module_info(ZipImporter *self, char *fullname)
+get_module_info(ZipImporter *self, PyObject *fullname)
{
- char *subname, path[MAXPATHLEN + 1];
- int len;
+ PyObject *subname;
+ PyObject *path, *fullpath, *item;
struct st_zip_searchorder *zso;
subname = get_subname(fullname);
+ if (subname == NULL)
+ return MI_ERROR;
- len = make_filename(self->prefix, subname, path, sizeof(path));
- if (len < 0)
+ path = make_filename(self->prefix, subname);
+ Py_DECREF(subname);
+ if (path == NULL)
return MI_ERROR;
for (zso = zip_searchorder; *zso->suffix; zso++) {
- strcpy(path + len, zso->suffix);
- if (PyDict_GetItemString(self->files, path) != NULL) {
+ fullpath = PyUnicode_FromFormat("%U%s", path, zso->suffix);
+ if (fullpath == NULL) {
+ Py_DECREF(path);
+ return MI_ERROR;
+ }
+ item = PyDict_GetItem(self->files, fullpath);
+ Py_DECREF(fullpath);
+ if (item != NULL) {
+ Py_DECREF(path);
if (zso->type & IS_PACKAGE)
return MI_PACKAGE;
else
return MI_MODULE;
}
}
+ Py_DECREF(path);
return MI_NOT_FOUND;
}
+typedef enum {
+ FL_ERROR,
+ FL_NOT_FOUND,
+ FL_MODULE_FOUND,
+ FL_NS_FOUND
+} find_loader_result;
+
+/* The guts of "find_loader" and "find_module". Return values:
+ -1: error
+ 0: no loader or namespace portions found
+ 1: module/package found
+ 2: namespace portion found: *namespace_portion will point to the name
+*/
+static find_loader_result
+find_loader(ZipImporter *self, PyObject *fullname, PyObject **namespace_portion)
+{
+ enum zi_module_info mi;
+
+ *namespace_portion = NULL;
+
+ mi = get_module_info(self, fullname);
+ if (mi == MI_ERROR)
+ return FL_ERROR;
+ if (mi == MI_NOT_FOUND) {
+ /* Not a module or regular package. See if this is a directory, and
+ therefore possibly a portion of a namespace package. */
+ int is_dir = check_is_directory(self, self->prefix, fullname);
+ if (is_dir < 0)
+ return -1;
+ if (is_dir) {
+ /* This is possibly a portion of a namespace
+ package. Return the string representing its path,
+ without a trailing separator. */
+ *namespace_portion = PyUnicode_FromFormat("%U%c%U%U",
+ self->archive, SEP,
+ self->prefix, fullname);
+ if (*namespace_portion == NULL)
+ return FL_ERROR;
+ return FL_NS_FOUND;
+ }
+ return FL_NOT_FOUND;
+ }
+ /* This is a module or package. */
+ return FL_MODULE_FOUND;
+}
+
+
/* Check whether we can satisfy the import of the module named by
'fullname'. Return self if we can, None if we can't. */
static PyObject *
@@ -287,22 +377,64 @@ zipimporter_find_module(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
PyObject *path = NULL;
- char *fullname;
- enum zi_module_info mi;
+ PyObject *fullname;
+ PyObject *namespace_portion = NULL;
+ PyObject *result = NULL;
- if (!PyArg_ParseTuple(args, "s|O:zipimporter.find_module",
- &fullname, &path))
+ if (!PyArg_ParseTuple(args, "U|O:zipimporter.find_module", &fullname, &path))
return NULL;
- mi = get_module_info(self, fullname);
- if (mi == MI_ERROR)
+ switch (find_loader(self, fullname, &namespace_portion)) {
+ case FL_ERROR:
return NULL;
- if (mi == MI_NOT_FOUND) {
- Py_INCREF(Py_None);
- return Py_None;
+ case FL_NS_FOUND:
+ /* A namespace portion is not allowed via find_module, so return None. */
+ Py_DECREF(namespace_portion);
+ /* FALL THROUGH */
+ case FL_NOT_FOUND:
+ result = Py_None;
+ break;
+ case FL_MODULE_FOUND:
+ result = (PyObject *)self;
+ break;
}
- Py_INCREF(self);
- return (PyObject *)self;
+ Py_INCREF(result);
+ return result;
+}
+
+
+/* Check whether we can satisfy the import of the module named by
+ 'fullname', or whether it could be a portion of a namespace
+ package. Return self if we can load it, a string containing the
+ full path if it's a possible namespace portion, None if we
+ can't load it. */
+static PyObject *
+zipimporter_find_loader(PyObject *obj, PyObject *args)
+{
+ ZipImporter *self = (ZipImporter *)obj;
+ PyObject *path = NULL;
+ PyObject *fullname;
+ PyObject *result = NULL;
+ PyObject *namespace_portion = NULL;
+
+ if (!PyArg_ParseTuple(args, "U|O:zipimporter.find_module", &fullname, &path))
+ return NULL;
+
+ switch (find_loader(self, fullname, &namespace_portion)) {
+ case FL_ERROR:
+ return NULL;
+ case FL_NOT_FOUND: /* Not found, return (None, []) */
+ result = Py_BuildValue("O[]", Py_None);
+ break;
+ case FL_MODULE_FOUND: /* Return (self, []) */
+ result = Py_BuildValue("O[]", self);
+ break;
+ case FL_NS_FOUND: /* Return (None, [namespace_portion]) */
+ result = Py_BuildValue("O[O]", Py_None, namespace_portion);
+ Py_DECREF(namespace_portion);
+ return result;
+ }
+ return result;
}
/* Load and return the module named by 'fullname'. */
@@ -311,19 +443,21 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
PyObject *code = NULL, *mod, *dict;
- char *fullname;
- PyObject *modpath = NULL, *modpath_bytes;
+ PyObject *fullname;
+ PyObject *modpath = NULL;
int ispackage;
- if (!PyArg_ParseTuple(args, "s:zipimporter.load_module",
+ if (!PyArg_ParseTuple(args, "U:zipimporter.load_module",
&fullname))
return NULL;
+ if (PyUnicode_READY(fullname) == -1)
+ return NULL;
code = get_module_code(self, fullname, &ispackage, &modpath);
if (code == NULL)
goto error;
- mod = PyImport_AddModule(fullname);
+ mod = PyImport_AddModuleObject(fullname);
if (mod == NULL)
goto error;
dict = PyModule_GetDict(mod);
@@ -336,17 +470,17 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
/* add __path__ to the module *before* the code gets
executed */
PyObject *pkgpath, *fullpath;
- char *subname = get_subname(fullname);
+ PyObject *subname = get_subname(fullname);
int err;
- fullpath = PyUnicode_FromFormat("%U%c%U%s",
+ fullpath = PyUnicode_FromFormat("%U%c%U%U",
self->archive, SEP,
self->prefix, subname);
+ Py_DECREF(subname);
if (fullpath == NULL)
goto error;
- pkgpath = Py_BuildValue("[O]", fullpath);
- Py_DECREF(fullpath);
+ pkgpath = Py_BuildValue("[N]", fullpath);
if (pkgpath == NULL)
goto error;
err = PyDict_SetItemString(dict, "__path__", pkgpath);
@@ -354,18 +488,13 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
if (err != 0)
goto error;
}
- modpath_bytes = PyUnicode_EncodeFSDefault(modpath);
- if (modpath_bytes == NULL)
- goto error;
- mod = PyImport_ExecCodeModuleEx(fullname, code,
- PyBytes_AS_STRING(modpath_bytes));
- Py_DECREF(modpath_bytes);
+ mod = PyImport_ExecCodeModuleObject(fullname, code, modpath, NULL);
Py_CLEAR(code);
if (mod == NULL)
goto error;
if (Py_VerboseFlag)
- PySys_FormatStderr("import %s # loaded from Zip %U\n",
+ PySys_FormatStderr("import %U # loaded from Zip %U\n",
fullname, modpath);
Py_DECREF(modpath);
return mod;
@@ -380,12 +509,10 @@ static PyObject *
zipimporter_get_filename(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
- PyObject *code;
- char *fullname;
- PyObject *modpath;
+ PyObject *fullname, *code, *modpath;
int ispackage;
- if (!PyArg_ParseTuple(args, "s:zipimporter.get_filename",
+ if (!PyArg_ParseTuple(args, "U:zipimporter.get_filename",
&fullname))
return NULL;
@@ -404,10 +531,10 @@ static PyObject *
zipimporter_is_package(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
- char *fullname;
+ PyObject *fullname;
enum zi_module_info mi;
- if (!PyArg_ParseTuple(args, "s:zipimporter.is_package",
+ if (!PyArg_ParseTuple(args, "U:zipimporter.is_package",
&fullname))
return NULL;
@@ -415,71 +542,70 @@ zipimporter_is_package(PyObject *obj, PyObject *args)
if (mi == MI_ERROR)
return NULL;
if (mi == MI_NOT_FOUND) {
- PyErr_Format(ZipImportError, "can't find module '%s'", fullname);
+ PyErr_Format(ZipImportError, "can't find module %R", fullname);
return NULL;
}
return PyBool_FromLong(mi == MI_PACKAGE);
}
+
static PyObject *
zipimporter_get_data(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
- PyObject *pathobj, *key;
- const Py_UNICODE *path;
+ PyObject *path, *key;
#ifdef ALTSEP
- Py_UNICODE *p, buf[MAXPATHLEN + 1];
+ _Py_IDENTIFIER(replace);
#endif
- Py_UNICODE *archive;
PyObject *toc_entry;
- Py_ssize_t path_len, len;
+ Py_ssize_t path_start, path_len, len;
- if (!PyArg_ParseTuple(args, "U:zipimporter.get_data", &pathobj))
+ if (!PyArg_ParseTuple(args, "U:zipimporter.get_data", &path))
return NULL;
- path_len = PyUnicode_GET_SIZE(pathobj);
- path = PyUnicode_AS_UNICODE(pathobj);
#ifdef ALTSEP
- if (path_len >= MAXPATHLEN) {
- PyErr_SetString(ZipImportError, "path too long");
+ path = _PyObject_CallMethodId(path, &PyId_replace, "CC", ALTSEP, SEP);
+ if (!path)
return NULL;
- }
- Py_UNICODE_strcpy(buf, path);
- for (p = buf; *p; p++) {
- if (*p == ALTSEP)
- *p = SEP;
- }
- path = buf;
+#else
+ Py_INCREF(path);
#endif
- archive = PyUnicode_AS_UNICODE(self->archive);
- len = PyUnicode_GET_SIZE(self->archive);
- if ((size_t)len < Py_UNICODE_strlen(path) &&
- Py_UNICODE_strncmp(path, archive, len) == 0 &&
- path[len] == SEP) {
- path += len + 1;
- path_len -= len + 1;
+ if (PyUnicode_READY(path) == -1)
+ goto error;
+
+ path_len = PyUnicode_GET_LENGTH(path);
+
+ len = PyUnicode_GET_LENGTH(self->archive);
+ path_start = 0;
+ if (PyUnicode_Tailmatch(path, self->archive, 0, len, -1)
+ && PyUnicode_READ_CHAR(path, len) == SEP) {
+ path_start = len + 1;
}
- key = PyUnicode_FromUnicode(path, path_len);
+ key = PyUnicode_Substring(path, path_start, path_len);
if (key == NULL)
- return NULL;
+ goto error;
toc_entry = PyDict_GetItem(self->files, key);
if (toc_entry == NULL) {
PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, key);
Py_DECREF(key);
- return NULL;
+ goto error;
}
Py_DECREF(key);
+ Py_DECREF(path);
return get_data(self->archive, toc_entry);
+ error:
+ Py_DECREF(path);
+ return NULL;
}
static PyObject *
zipimporter_get_code(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
- char *fullname;
+ PyObject *fullname;
- if (!PyArg_ParseTuple(args, "s:zipimporter.get_code", &fullname))
+ if (!PyArg_ParseTuple(args, "U:zipimporter.get_code", &fullname))
return NULL;
return get_module_code(self, fullname, NULL, NULL);
@@ -490,34 +616,39 @@ zipimporter_get_source(PyObject *obj, PyObject *args)
{
ZipImporter *self = (ZipImporter *)obj;
PyObject *toc_entry;
- char *fullname, *subname, path[MAXPATHLEN+1];
- int len;
+ PyObject *fullname, *subname, *path, *fullpath;
enum zi_module_info mi;
- if (!PyArg_ParseTuple(args, "s:zipimporter.get_source", &fullname))
+ if (!PyArg_ParseTuple(args, "U:zipimporter.get_source", &fullname))
return NULL;
mi = get_module_info(self, fullname);
if (mi == MI_ERROR)
return NULL;
if (mi == MI_NOT_FOUND) {
- PyErr_Format(ZipImportError, "can't find module '%s'", fullname);
+ PyErr_Format(ZipImportError, "can't find module %R", fullname);
return NULL;
}
+
subname = get_subname(fullname);
+ if (subname == NULL)
+ return NULL;
- len = make_filename(self->prefix, subname, path, sizeof(path));
- if (len < 0)
+ path = make_filename(self->prefix, subname);
+ Py_DECREF(subname);
+ if (path == NULL)
return NULL;
- if (mi == MI_PACKAGE) {
- path[len] = SEP;
- strcpy(path + len + 1, "__init__.py");
- }
+ if (mi == MI_PACKAGE)
+ fullpath = PyUnicode_FromFormat("%U%c__init__.py", path, SEP);
else
- strcpy(path + len, ".py");
+ fullpath = PyUnicode_FromFormat("%U.py", path);
+ Py_DECREF(path);
+ if (fullpath == NULL)
+ return NULL;
- toc_entry = PyDict_GetItemString(self->files, path);
+ toc_entry = PyDict_GetItem(self->files, fullpath);
+ Py_DECREF(fullpath);
if (toc_entry != NULL) {
PyObject *res, *bytes;
bytes = get_data(self->archive, toc_entry);
@@ -543,6 +674,16 @@ instance itself if the module was found, or None if it wasn't.\n\
The optional 'path' argument is ignored -- it's there for compatibility\n\
with the importer protocol.");
+PyDoc_STRVAR(doc_find_loader,
+"find_loader(fullname, path=None) -> self, str or None.\n\
+\n\
+Search for a module specified by 'fullname'. 'fullname' must be the\n\
+fully qualified (dotted) module name. It returns the zipimporter\n\
+instance itself if the module was found, a string containing the\n\
+full path name if it's possibly a portion of a namespace package,\n\
+or None otherwise. The optional 'path' argument is ignored -- it's\n\
+ there for compatibility with the importer protocol.");
+
PyDoc_STRVAR(doc_load_module,
"load_module(fullname) -> module.\n\
\n\
@@ -584,6 +725,8 @@ Return the filename for the specified module.");
static PyMethodDef zipimporter_methods[] = {
{"find_module", zipimporter_find_module, METH_VARARGS,
doc_find_module},
+ {"find_loader", zipimporter_find_loader, METH_VARARGS,
+ doc_find_loader},
{"load_module", zipimporter_load_module, METH_VARARGS,
doc_load_module},
{"get_data", zipimporter_get_data, METH_VARARGS,
@@ -708,55 +851,46 @@ get_long(unsigned char *buf) {
data_size and file_offset are 0.
*/
static PyObject *
-read_directory(PyObject *archive_obj)
+read_directory(PyObject *archive)
{
- /* FIXME: work on Py_UNICODE* instead of char* */
PyObject *files = NULL;
FILE *fp;
unsigned short flags;
short compress, time, date, name_size;
long crc, data_size, file_size, header_size;
Py_ssize_t file_offset, header_position, header_offset;
- long i, l, count;
- size_t length;
- Py_UNICODE path[MAXPATHLEN + 5];
+ long l, count;
+ Py_ssize_t i;
char name[MAXPATHLEN + 5];
PyObject *nameobj = NULL;
char *p, endof_central_dir[22];
Py_ssize_t arc_offset; /* Absolute offset to start of the zip-archive. */
- PyObject *pathobj;
+ PyObject *path;
const char *charset;
int bootstrap;
- if (PyUnicode_GET_SIZE(archive_obj) > MAXPATHLEN) {
- PyErr_SetString(PyExc_OverflowError,
- "Zip path name is too long");
- return NULL;
- }
- Py_UNICODE_strcpy(path, PyUnicode_AS_UNICODE(archive_obj));
-
- fp = _Py_fopen(archive_obj, "rb");
+ fp = _Py_fopen(archive, "rb");
if (fp == NULL) {
if (!PyErr_Occurred())
- PyErr_Format(ZipImportError, "can't open Zip file: '%U'", archive_obj);
+ PyErr_Format(ZipImportError, "can't open Zip file: %R", archive);
return NULL;
}
if (fseek(fp, -22, SEEK_END) == -1) {
fclose(fp);
- PyErr_Format(ZipImportError, "can't read Zip file: %U", archive_obj);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
}
header_position = ftell(fp);
if (fread(endof_central_dir, 1, 22, fp) != 22) {
fclose(fp);
- PyErr_Format(ZipImportError, "can't read Zip file: '%U'", archive_obj);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
}
if (get_long((unsigned char *)endof_central_dir) != 0x06054B50) {
/* Bad: End of Central Dir signature */
fclose(fp);
- PyErr_Format(ZipImportError, "not a Zip file: '%U'", archive_obj);
+ PyErr_Format(ZipImportError, "not a Zip file: %R", archive);
return NULL;
}
@@ -769,9 +903,6 @@ read_directory(PyObject *archive_obj)
if (files == NULL)
goto error;
- length = Py_UNICODE_strlen(path);
- path[length] = SEP;
-
/* Start of Central Directory */
count = 0;
for (;;) {
@@ -803,7 +934,7 @@ read_directory(PyObject *archive_obj)
name_size = MAXPATHLEN;
p = name;
- for (i = 0; i < name_size; i++) {
+ for (i = 0; i < (Py_ssize_t)name_size; i++) {
*p = (char)getc(fp);
if (*p == '/')
*p = SEP;
@@ -836,12 +967,12 @@ read_directory(PyObject *archive_obj)
PY_MAJOR_VERSION, PY_MINOR_VERSION);
goto error;
}
- Py_UNICODE_strncpy(path + length + 1, PyUnicode_AS_UNICODE(nameobj), MAXPATHLEN - length - 1);
-
- pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path));
- if (pathobj == NULL)
+ if (PyUnicode_READY(nameobj) == -1)
+ goto error;
+ path = PyUnicode_FromFormat("%U%c%U", archive, SEP, nameobj);
+ if (path == NULL)
goto error;
- t = Py_BuildValue("Nhllnhhl", pathobj, compress, data_size,
+ t = Py_BuildValue("Nhllnhhl", path, compress, data_size,
file_size, file_offset, time, date, crc);
if (t == NULL)
goto error;
@@ -854,14 +985,14 @@ read_directory(PyObject *archive_obj)
}
fclose(fp);
if (Py_VerboseFlag)
- PySys_FormatStderr("# zipimport: found %ld names in %U\n",
- count, archive_obj);
+ PySys_FormatStderr("# zipimport: found %ld names in %R\n",
+ count, archive);
return files;
fseek_error:
fclose(fp);
Py_XDECREF(files);
Py_XDECREF(nameobj);
- PyErr_Format(ZipImportError, "can't read Zip file: %U", archive_obj);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
error:
fclose(fp);
@@ -879,6 +1010,7 @@ get_decompress_func(void)
static int importing_zlib = 0;
PyObject *zlib;
PyObject *decompress;
+ _Py_IDENTIFIER(decompress);
if (importing_zlib != 0)
/* Someone has a zlib.py[co] in their Zip file;
@@ -888,8 +1020,8 @@ get_decompress_func(void)
zlib = PyImport_ImportModuleNoBlock("zlib");
importing_zlib = 0;
if (zlib != NULL) {
- decompress = PyObject_GetAttrString(zlib,
- "decompress");
+ decompress = _PyObject_GetAttrId(zlib,
+ &PyId_decompress);
Py_DECREF(zlib);
}
else {
@@ -934,7 +1066,7 @@ get_data(PyObject *archive, PyObject *toc_entry)
/* Check to make sure the local file header is correct */
if (fseek(fp, file_offset, 0) == -1) {
fclose(fp);
- PyErr_Format(ZipImportError, "can't read Zip file: %U", archive);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
}
@@ -949,7 +1081,7 @@ get_data(PyObject *archive, PyObject *toc_entry)
}
if (fseek(fp, file_offset + 26, 0) == -1) {
fclose(fp);
- PyErr_Format(ZipImportError, "can't read Zip file: %U", archive);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
}
@@ -973,7 +1105,7 @@ get_data(PyObject *archive, PyObject *toc_entry)
bytes_read = fread(buf, 1, data_size, fp);
} else {
fclose(fp);
- PyErr_Format(ZipImportError, "can't read Zip file: %U", archive);
+ PyErr_Format(ZipImportError, "can't read Zip file: %R", archive);
return NULL;
}
fclose(fp);
@@ -1030,7 +1162,7 @@ eq_mtime(time_t t1, time_t t2)
to .py if available and we don't want to mask other errors).
Returns a new reference. */
static PyObject *
-unmarshal_code(char *pathname, PyObject *data, time_t mtime)
+unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime)
{
PyObject *code;
char *buf = PyBytes_AsString(data);
@@ -1044,8 +1176,8 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime)
if (get_long((unsigned char *)buf) != PyImport_GetMagicNumber()) {
if (Py_VerboseFlag)
- PySys_WriteStderr("# %s has bad magic\n",
- pathname);
+ PySys_FormatStderr("# %R has bad magic\n",
+ pathname);
Py_INCREF(Py_None);
return Py_None; /* signal caller to try alternative */
}
@@ -1053,19 +1185,21 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime)
if (mtime != 0 && !eq_mtime(get_long((unsigned char *)buf + 4),
mtime)) {
if (Py_VerboseFlag)
- PySys_WriteStderr("# %s has bad mtime\n",
- pathname);
+ PySys_FormatStderr("# %R has bad mtime\n",
+ pathname);
Py_INCREF(Py_None);
return Py_None; /* signal caller to try alternative */
}
- code = PyMarshal_ReadObjectFromString(buf + 8, size - 8);
+ /* XXX the pyc's size field is ignored; timestamp collisions are probably
+ unimportant with zip files. */
+ code = PyMarshal_ReadObjectFromString(buf + 12, size - 12);
if (code == NULL)
return NULL;
if (!PyCode_Check(code)) {
Py_DECREF(code);
PyErr_Format(PyExc_TypeError,
- "compiled module %s is not a code object",
+ "compiled module %R is not a code object",
pathname);
return NULL;
}
@@ -1079,11 +1213,12 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime)
static PyObject *
normalize_line_endings(PyObject *source)
{
- char *buf, *q, *p = PyBytes_AsString(source);
+ char *buf, *q, *p;
PyObject *fixed_source;
int len = 0;
- if (!p) {
+ p = PyBytes_AsString(source);
+ if (p == NULL) {
return PyBytes_FromStringAndSize("\n\0", 2);
}
@@ -1116,16 +1251,24 @@ normalize_line_endings(PyObject *source)
/* Given a string buffer containing Python source code, compile it
return and return a code object as a new reference. */
static PyObject *
-compile_source(char *pathname, PyObject *source)
+compile_source(PyObject *pathname, PyObject *source)
{
- PyObject *code, *fixed_source;
+ PyObject *code, *fixed_source, *pathbytes;
+
+ pathbytes = PyUnicode_EncodeFSDefault(pathname);
+ if (pathbytes == NULL)
+ return NULL;
fixed_source = normalize_line_endings(source);
- if (fixed_source == NULL)
+ if (fixed_source == NULL) {
+ Py_DECREF(pathbytes);
return NULL;
+ }
- code = Py_CompileString(PyBytes_AsString(fixed_source), pathname,
+ code = Py_CompileString(PyBytes_AsString(fixed_source),
+ PyBytes_AsString(pathbytes),
Py_file_input);
+ Py_DECREF(pathbytes);
Py_DECREF(fixed_source);
return code;
}
@@ -1154,14 +1297,22 @@ parse_dostime(int dostime, int dosdate)
modification time of the matching .py file, or 0 if no source
is available. */
static time_t
-get_mtime_of_source(ZipImporter *self, char *path)
+get_mtime_of_source(ZipImporter *self, PyObject *path)
{
- PyObject *toc_entry;
- time_t mtime = 0;
- Py_ssize_t lastchar = strlen(path) - 1;
- char savechar = path[lastchar];
- path[lastchar] = '\0'; /* strip 'c' or 'o' from *.py[co] */
- toc_entry = PyDict_GetItemString(self->files, path);
+ PyObject *toc_entry, *stripped;
+ time_t mtime;
+
+ /* strip 'c' or 'o' from *.py[co] */
+ if (PyUnicode_READY(path) == -1)
+ return (time_t)-1;
+ stripped = PyUnicode_FromKindAndData(PyUnicode_KIND(path),
+ PyUnicode_DATA(path),
+ PyUnicode_GET_LENGTH(path) - 1);
+ if (stripped == NULL)
+ return (time_t)-1;
+
+ toc_entry = PyDict_GetItem(self->files, stripped);
+ Py_DECREF(stripped);
if (toc_entry != NULL && PyTuple_Check(toc_entry) &&
PyTuple_Size(toc_entry) == 8) {
/* fetch the time stamp of the .py file for comparison
@@ -1170,8 +1321,8 @@ get_mtime_of_source(ZipImporter *self, char *path)
time = PyLong_AsLong(PyTuple_GetItem(toc_entry, 5));
date = PyLong_AsLong(PyTuple_GetItem(toc_entry, 6));
mtime = parse_dostime(time, date);
- }
- path[lastchar] = savechar;
+ } else
+ mtime = 0;
return mtime;
}
@@ -1181,24 +1332,17 @@ static PyObject *
get_code_from_data(ZipImporter *self, int ispackage, int isbytecode,
time_t mtime, PyObject *toc_entry)
{
- PyObject *data, *code;
- PyObject *modpath;
+ PyObject *data, *modpath, *code;
data = get_data(self->archive, toc_entry);
if (data == NULL)
return NULL;
- modpath = PyUnicode_EncodeFSDefault(PyTuple_GetItem(toc_entry, 0));
- if (modpath == NULL) {
- Py_DECREF(data);
- return NULL;
- }
-
+ modpath = PyTuple_GetItem(toc_entry, 0);
if (isbytecode)
- code = unmarshal_code(PyBytes_AS_STRING(modpath), data, mtime);
+ code = unmarshal_code(modpath, data, mtime);
else
- code = compile_source(PyBytes_AS_STRING(modpath), data);
- Py_DECREF(modpath);
+ code = compile_source(modpath, data);
Py_DECREF(data);
return code;
}
@@ -1206,35 +1350,45 @@ get_code_from_data(ZipImporter *self, int ispackage, int isbytecode,
/* Get the code object associated with the module specified by
'fullname'. */
static PyObject *
-get_module_code(ZipImporter *self, char *fullname,
+get_module_code(ZipImporter *self, PyObject *fullname,
int *p_ispackage, PyObject **p_modpath)
{
- PyObject *toc_entry;
- char *subname, path[MAXPATHLEN + 1];
- int len;
+ PyObject *code = NULL, *toc_entry, *subname;
+ PyObject *path, *fullpath = NULL;
struct st_zip_searchorder *zso;
subname = get_subname(fullname);
+ if (subname == NULL)
+ return NULL;
- len = make_filename(self->prefix, subname, path, sizeof(path));
- if (len < 0)
+ path = make_filename(self->prefix, subname);
+ Py_DECREF(subname);
+ if (path == NULL)
return NULL;
for (zso = zip_searchorder; *zso->suffix; zso++) {
- PyObject *code = NULL;
+ code = NULL;
+
+ fullpath = PyUnicode_FromFormat("%U%s", path, zso->suffix);
+ if (fullpath == NULL)
+ goto exit;
- strcpy(path + len, zso->suffix);
if (Py_VerboseFlag > 1)
- PySys_FormatStderr("# trying %U%c%s\n",
- self->archive, (int)SEP, path);
- toc_entry = PyDict_GetItemString(self->files, path);
+ PySys_FormatStderr("# trying %U%c%U\n",
+ self->archive, (int)SEP, fullpath);
+ toc_entry = PyDict_GetItem(self->files, fullpath);
if (toc_entry != NULL) {
time_t mtime = 0;
int ispackage = zso->type & IS_PACKAGE;
int isbytecode = zso->type & IS_BYTECODE;
- if (isbytecode)
- mtime = get_mtime_of_source(self, path);
+ if (isbytecode) {
+ mtime = get_mtime_of_source(self, fullpath);
+ if (mtime == (time_t)-1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ Py_CLEAR(fullpath);
if (p_ispackage != NULL)
*p_ispackage = ispackage;
code = get_code_from_data(self, ispackage,
@@ -1250,11 +1404,16 @@ get_module_code(ZipImporter *self, char *fullname,
*p_modpath = PyTuple_GetItem(toc_entry, 0);
Py_INCREF(*p_modpath);
}
- return code;
+ goto exit;
}
+ else
+ Py_CLEAR(fullpath);
}
- PyErr_Format(ZipImportError, "can't find module '%s'", fullname);
- return NULL;
+ PyErr_Format(ZipImportError, "can't find module %R", fullname);
+exit:
+ Py_DECREF(path);
+ Py_XDECREF(fullpath);
+ return code;
}
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index bb453aed63..1d1072dcea 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -43,7 +43,9 @@ typedef struct
z_stream zst;
PyObject *unused_data;
PyObject *unconsumed_tail;
+ char eof;
int is_initialised;
+ PyObject *zdict;
#ifdef WITH_THREAD
PyThread_type_lock lock;
#endif
@@ -79,14 +81,34 @@ zlib_error(z_stream zst, int err, char *msg)
}
PyDoc_STRVAR(compressobj__doc__,
-"compressobj([level]) -- Return a compressor object.\n"
+"compressobj(level=-1, method=DEFLATED, wbits=15, memlevel=8,\n"
+" strategy=Z_DEFAULT_STRATEGY[, zdict])\n"
+" -- Return a compressor object.\n"
"\n"
-"Optional arg level is the compression level, in 0-9.");
+"level is the compression level (an integer in the range 0-9; default is 6).\n"
+"Higher compression levels are slower, but produce smaller results.\n"
+"\n"
+"method is the compression algorithm. If given, this must be DEFLATED.\n"
+"\n"
+"wbits is the base two logarithm of the window size (range: 8..15).\n"
+"\n"
+"memlevel controls the amount of memory used for internal compression state.\n"
+"Valid values range from 1 to 9. Higher values result in higher memory usage,\n"
+"faster compression, and smaller output.\n"
+"\n"
+"strategy is used to tune the compression algorithm. Possible values are\n"
+"Z_DEFAULT_STRATEGY, Z_FILTERED, and Z_HUFFMAN_ONLY.\n"
+"\n"
+"zdict is the predefined compression dictionary - a sequence of bytes\n"
+"containing subsequences that are likely to occur in the input data.");
PyDoc_STRVAR(decompressobj__doc__,
-"decompressobj([wbits]) -- Return a decompressor object.\n"
+"decompressobj([wbits[, zdict]]) -- Return a decompressor object.\n"
+"\n"
+"Optional arg wbits is the window buffer size.\n"
"\n"
-"Optional arg wbits is the window buffer size.");
+"Optional arg zdict is the predefined compression dictionary. This must be\n"
+"the same dictionary as used by the compressor that produced the input data.");
static compobject *
newcompobject(PyTypeObject *type)
@@ -95,7 +117,9 @@ newcompobject(PyTypeObject *type)
self = PyObject_New(compobject, type);
if (self == NULL)
return NULL;
+ self->eof = 0;
self->is_initialised = 0;
+ self->zdict = NULL;
self->unused_data = PyBytes_FromStringAndSize("", 0);
if (self->unused_data == NULL) {
Py_DECREF(self);
@@ -297,7 +321,7 @@ PyZlib_decompress(PyObject *self, PyObject *args)
err = inflateEnd(&zst);
if (err != Z_OK) {
- zlib_error(zst, err, "while finishing data decompression");
+ zlib_error(zst, err, "while finishing decompression");
goto error;
}
@@ -314,19 +338,24 @@ PyZlib_decompress(PyObject *self, PyObject *args)
}
static PyObject *
-PyZlib_compressobj(PyObject *selfptr, PyObject *args)
+PyZlib_compressobj(PyObject *selfptr, PyObject *args, PyObject *kwargs)
{
compobject *self;
int level=Z_DEFAULT_COMPRESSION, method=DEFLATED;
int wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=0, err;
-
- if (!PyArg_ParseTuple(args, "|iiiii:compressobj", &level, &method, &wbits,
- &memLevel, &strategy))
+ Py_buffer zdict;
+ static char *kwlist[] = {"level", "method", "wbits",
+ "memLevel", "strategy", "zdict", NULL};
+
+ zdict.buf = NULL; /* Sentinel, so we can tell whether zdict was supplied. */
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiy*:compressobj",
+ kwlist, &level, &method, &wbits,
+ &memLevel, &strategy, &zdict))
return NULL;
self = newcompobject(&Comptype);
if (self==NULL)
- return(NULL);
+ goto error;
self->zst.zalloc = (alloc_func)NULL;
self->zst.zfree = (free_func)Z_NULL;
self->zst.next_in = NULL;
@@ -335,30 +364,57 @@ PyZlib_compressobj(PyObject *selfptr, PyObject *args)
switch(err) {
case (Z_OK):
self->is_initialised = 1;
- return (PyObject*)self;
+ if (zdict.buf == NULL) {
+ goto success;
+ } else {
+ err = deflateSetDictionary(&self->zst, zdict.buf, zdict.len);
+ switch (err) {
+ case (Z_OK):
+ goto success;
+ case (Z_STREAM_ERROR):
+ PyErr_SetString(PyExc_ValueError, "Invalid dictionary");
+ goto error;
+ default:
+ PyErr_SetString(PyExc_ValueError, "deflateSetDictionary()");
+ goto error;
+ }
+ }
case (Z_MEM_ERROR):
- Py_DECREF(self);
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory for compression object");
- return NULL;
+ goto error;
case(Z_STREAM_ERROR):
- Py_DECREF(self);
PyErr_SetString(PyExc_ValueError, "Invalid initialization option");
- return NULL;
+ goto error;
default:
zlib_error(self->zst, err, "while creating compression object");
- Py_DECREF(self);
- return NULL;
+ goto error;
}
+
+ error:
+ Py_CLEAR(self);
+ success:
+ if (zdict.buf != NULL)
+ PyBuffer_Release(&zdict);
+ return (PyObject*)self;
}
static PyObject *
-PyZlib_decompressobj(PyObject *selfptr, PyObject *args)
+PyZlib_decompressobj(PyObject *selfptr, PyObject *args, PyObject *kwargs)
{
+ static char *kwlist[] = {"wbits", "zdict", NULL};
int wbits=DEF_WBITS, err;
compobject *self;
- if (!PyArg_ParseTuple(args, "|i:decompressobj", &wbits))
+ PyObject *zdict=NULL;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:decompressobj",
+ kwlist, &wbits, &zdict))
return NULL;
+ if (zdict != NULL && !PyObject_CheckBuffer(zdict)) {
+ PyErr_SetString(PyExc_TypeError,
+ "zdict argument must support the buffer protocol");
+ return NULL;
+ }
self = newcompobject(&Decomptype);
if (self == NULL)
@@ -367,6 +423,10 @@ PyZlib_decompressobj(PyObject *selfptr, PyObject *args)
self->zst.zfree = (free_func)Z_NULL;
self->zst.next_in = NULL;
self->zst.avail_in = 0;
+ if (zdict != NULL) {
+ Py_INCREF(zdict);
+ self->zdict = zdict;
+ }
err = inflateInit2(&self->zst, wbits);
switch(err) {
case (Z_OK):
@@ -396,6 +456,7 @@ Dealloc(compobject *self)
#endif
Py_XDECREF(self->unused_data);
Py_XDECREF(self->unconsumed_tail);
+ Py_XDECREF(self->zdict);
PyObject_Del(self);
}
@@ -482,7 +543,7 @@ PyZlib_objcompress(compobject *self, PyObject *args)
*/
if (err != Z_OK && err != Z_BUF_ERROR) {
- zlib_error(self->zst, err, "while compressing");
+ zlib_error(self->zst, err, "while compressing data");
Py_DECREF(RetVal);
RetVal = NULL;
goto error;
@@ -598,6 +659,27 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
err = inflate(&(self->zst), Z_SYNC_FLUSH);
Py_END_ALLOW_THREADS
+ if (err == Z_NEED_DICT && self->zdict != NULL) {
+ Py_buffer zdict_buf;
+ if (PyObject_GetBuffer(self->zdict, &zdict_buf, PyBUF_SIMPLE) == -1) {
+ Py_DECREF(RetVal);
+ RetVal = NULL;
+ goto error;
+ }
+ err = inflateSetDictionary(&(self->zst), zdict_buf.buf, zdict_buf.len);
+ PyBuffer_Release(&zdict_buf);
+ if (err != Z_OK) {
+ zlib_error(self->zst, err, "while decompressing data");
+ Py_DECREF(RetVal);
+ RetVal = NULL;
+ goto error;
+ }
+ /* Repeat the call to inflate. */
+ Py_BEGIN_ALLOW_THREADS
+ err = inflate(&(self->zst), Z_SYNC_FLUSH);
+ Py_END_ALLOW_THREADS
+ }
+
/* While Z_OK and the output buffer is full, there might be more output.
So extend the output buffer and try again.
*/
@@ -634,15 +716,16 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
goto error;
}
- /* This is the logical place to call inflateEnd, but the old behaviour of
- only calling it on flush() is preserved. */
-
- if (err != Z_STREAM_END && err != Z_OK && err != Z_BUF_ERROR) {
+ if (err == Z_STREAM_END) {
+ /* This is the logical place to call inflateEnd, but the old behaviour
+ of only calling it on flush() is preserved. */
+ self->eof = 1;
+ } else if (err != Z_OK && err != Z_BUF_ERROR) {
/* We will only get Z_BUF_ERROR if the output buffer was full
but there wasn't more output when we tried again, so it is
not an error condition.
*/
- zlib_error(self->zst, err, "while decompressing");
+ zlib_error(self->zst, err, "while decompressing data");
Py_DECREF(RetVal);
RetVal = NULL;
goto error;
@@ -723,7 +806,7 @@ PyZlib_flush(compobject *self, PyObject *args)
if (err == Z_STREAM_END && flushmode == Z_FINISH) {
err = deflateEnd(&(self->zst));
if (err != Z_OK) {
- zlib_error(self->zst, err, "from deflateEnd()");
+ zlib_error(self->zst, err, "while finishing compression");
Py_DECREF(RetVal);
RetVal = NULL;
goto error;
@@ -787,10 +870,14 @@ PyZlib_copy(compobject *self)
}
Py_INCREF(self->unused_data);
Py_INCREF(self->unconsumed_tail);
+ Py_XINCREF(self->zdict);
Py_XDECREF(retval->unused_data);
Py_XDECREF(retval->unconsumed_tail);
+ Py_XDECREF(retval->zdict);
retval->unused_data = self->unused_data;
retval->unconsumed_tail = self->unconsumed_tail;
+ retval->zdict = self->zdict;
+ retval->eof = self->eof;
/* Mark it as being initialized */
retval->is_initialised = 1;
@@ -838,10 +925,14 @@ PyZlib_uncopy(compobject *self)
Py_INCREF(self->unused_data);
Py_INCREF(self->unconsumed_tail);
+ Py_XINCREF(self->zdict);
Py_XDECREF(retval->unused_data);
Py_XDECREF(retval->unconsumed_tail);
+ Py_XDECREF(retval->zdict);
retval->unused_data = self->unused_data;
retval->unconsumed_tail = self->unconsumed_tail;
+ retval->zdict = self->zdict;
+ retval->eof = self->eof;
/* Mark it as being initialized */
retval->is_initialised = 1;
@@ -915,14 +1006,13 @@ PyZlib_unflush(compobject *self, PyObject *args)
goto error;
}
- /* If flushmode is Z_FINISH, we also have to call deflateEnd() to free
- various data structures. Note we should only get Z_STREAM_END when
- flushmode is Z_FINISH */
+ /* If at end of stream, clean up any memory allocated by zlib. */
if (err == Z_STREAM_END) {
- err = inflateEnd(&(self->zst));
+ self->eof = 1;
self->is_initialised = 0;
+ err = inflateEnd(&(self->zst));
if (err != Z_OK) {
- zlib_error(self->zst, err, "from inflateEnd()");
+ zlib_error(self->zst, err, "while finishing decompression");
Py_DECREF(retval);
retval = NULL;
goto error;
@@ -971,6 +1061,7 @@ static PyMethodDef Decomp_methods[] =
static PyMemberDef Decomp_members[] = {
{"unused_data", T_OBJECT, COMP_OFF(unused_data), READONLY},
{"unconsumed_tail", T_OBJECT, COMP_OFF(unconsumed_tail), READONLY},
+ {"eof", T_BOOL, COMP_OFF(eof), READONLY},
{NULL},
};
@@ -1056,13 +1147,13 @@ static PyMethodDef zlib_methods[] =
adler32__doc__},
{"compress", (PyCFunction)PyZlib_compress, METH_VARARGS,
compress__doc__},
- {"compressobj", (PyCFunction)PyZlib_compressobj, METH_VARARGS,
+ {"compressobj", (PyCFunction)PyZlib_compressobj, METH_VARARGS|METH_KEYWORDS,
compressobj__doc__},
{"crc32", (PyCFunction)PyZlib_crc32, METH_VARARGS,
crc32__doc__},
{"decompress", (PyCFunction)PyZlib_decompress, METH_VARARGS,
decompress__doc__},
- {"decompressobj", (PyCFunction)PyZlib_decompressobj, METH_VARARGS,
+ {"decompressobj", (PyCFunction)PyZlib_decompressobj, METH_VARARGS|METH_KEYWORDS,
decompressobj__doc__},
{NULL, NULL}
};
@@ -1136,10 +1227,10 @@ PyDoc_STRVAR(zlib_module_documentation,
"\n"
"adler32(string[, start]) -- Compute an Adler-32 checksum.\n"
"compress(string[, level]) -- Compress string, with compression level in 0-9.\n"
-"compressobj([level]) -- Return a compressor object.\n"
+"compressobj([level[, ...]]) -- Return a compressor object.\n"
"crc32(string[, start]) -- Compute a CRC-32 checksum.\n"
"decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n"
-"decompressobj([wbits]) -- Return a decompressor object.\n"
+"decompressobj([wbits[, zdict]]]) -- Return a decompressor object.\n"
"\n"
"'wbits' is window buffer size.\n"
"Compressor objects support compress() and flush() methods; decompressor\n"
@@ -1193,6 +1284,10 @@ PyInit_zlib(void)
if (ver != NULL)
PyModule_AddObject(m, "ZLIB_VERSION", ver);
+ ver = PyUnicode_FromString(zlibVersion());
+ if (ver != NULL)
+ PyModule_AddObject(m, "ZLIB_RUNTIME_VERSION", ver);
+
PyModule_AddStringConstant(m, "__version__", "1.0");
return m;