From 20932bfdc2e60e26bc7c5238f485e164e3c3d7cf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 27 Aug 2025 09:46:18 +0000 Subject: [PATCH 01/29] Initial plan From 05db2e798352837c971dae72dc153c494f59aae1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 27 Aug 2025 09:59:35 +0000 Subject: [PATCH 02/29] Fix Windows/MinGW compilation issues - phase 1 - Add Windows/MinGW platform detection in configure.ac - Fix io.h header conflict by reordering includes in streams.c - Add conditional compilation for termios.h in iostream.c and sysfiles.c - Provide fallbacks for getrusage on systems without it - Disable subprocess support on MinGW platforms - Make terminal raw mode functions conditional on termios availability Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- configure.ac | 13 +++++++++++++ src/gaptime.c | 19 +++++++++++++++++-- src/iostream.c | 2 ++ src/profile.c | 5 +++-- src/streams.c | 22 ++++++++++++---------- src/sysfiles.c | 13 +++++++++++++ 6 files changed, 60 insertions(+), 14 deletions(-) diff --git a/configure.ac b/configure.ac index 5004b7b37a..ed007f8477 100644 --- a/configure.ac +++ b/configure.ac @@ -955,6 +955,19 @@ case "$host_cpu" in ;; esac +dnl +dnl Detect Windows/MinGW platform +dnl +case "$host_os" in + *mingw* | *msys* ) + AC_DEFINE([SYS_IS_MINGW], [1], [define as 1 on MinGW/Windows]) + AC_DEFINE([GAP_DISABLE_SUBPROCESS_CODE], [1], [disable subprocess support on MinGW]) + ;; + *cygwin* ) + AC_DEFINE([SYS_IS_CYGWIN32], [1], [define as 1 on Cygwin]) + ;; +esac + dnl dnl check for the existence of various header files diff --git a/src/gaptime.c b/src/gaptime.c index c0fe220192..7254c817b9 100644 --- a/src/gaptime.c +++ b/src/gaptime.c @@ -62,7 +62,7 @@ UInt SyTime(void) // a substitute (it is not perfect, as NanosecondsSinceEpoch() // is walltime, while RUSAGE_SELF is CPU time). return SyNanosecondsSinceEpoch()/1000000000; -#else +#elif defined(HAVE_GETRUSAGE) struct rusage buf; if (getrusage(RUSAGE_SELF, &buf)) { @@ -71,6 +71,10 @@ UInt SyTime(void) (Int)strerror(errno), (Int)errno); } return buf.ru_utime.tv_sec * 1000 + buf.ru_utime.tv_usec / 1000; +#else + // Fallback for systems without getrusage (e.g., Windows/MinGW) + // Use wall clock time instead of CPU time as an approximation + return SyNanosecondsSinceEpoch()/1000000; #endif } @@ -210,9 +214,11 @@ static Obj FuncRuntime(Obj self) static Obj FuncRUNTIMES(Obj self) { UInt tmp; - struct rusage buf; Obj res = NEW_PLIST(T_PLIST, 4); +#ifdef HAVE_GETRUSAGE + struct rusage buf; + if (getrusage(RUSAGE_SELF, &buf)) { ErrorMayQuit("RUNTIMES: call to getrusage(RUSAGE_SELF) failed: " "%s (errno %d)", @@ -234,6 +240,15 @@ static Obj FuncRUNTIMES(Obj self) tmp = buf.ru_stime.tv_sec * 1000 + buf.ru_stime.tv_usec / 1000; ASS_LIST(res, 4, ObjInt_UInt(tmp)); +#else + // Fallback for systems without getrusage (e.g., Windows/MinGW) + // Return current time for user and system time, zero for children + tmp = SyTime(); + ASS_LIST(res, 1, ObjInt_UInt(tmp)); // user time + ASS_LIST(res, 2, ObjInt_UInt(0)); // system time (unavailable) + ASS_LIST(res, 3, ObjInt_UInt(0)); // children user time (unavailable) + ASS_LIST(res, 4, ObjInt_UInt(0)); // children system time (unavailable) +#endif return res; } diff --git a/src/iostream.c b/src/iostream.c index 68bdf6a4da..14869fd08c 100644 --- a/src/iostream.c +++ b/src/iostream.c @@ -44,7 +44,9 @@ #include #include #include +#ifdef HAVE_TERMIOS_H #include +#endif #include #ifdef HAVE_SYS_WAIT_H diff --git a/src/profile.c b/src/profile.c index c6c193adaa..5b79cb41e8 100644 --- a/src/profile.c +++ b/src/profile.c @@ -459,8 +459,9 @@ static inline Int8 CPUmicroseconds(void) return (Int8)buf.ru_utime.tv_sec * 1000000 + (Int8)buf.ru_utime.tv_usec; #else - // Should never get here! - abort(); + // Fallback for systems without getrusage (e.g., Windows/MinGW) + // Use wall clock time instead of CPU time + return SyNanosecondsSinceEpoch() / 1000; #endif } diff --git a/src/streams.c b/src/streams.c index 1a45a105ef..eff1217f79 100644 --- a/src/streams.c +++ b/src/streams.c @@ -13,6 +13,18 @@ #include "streams.h" +#include "config.h" + +// Include system headers first to avoid conflicts on Windows/MinGW +// where dirent.h includes system io.h which can conflict with GAP's io.h +#include +#include +#include +#include +#include +#include +#include + #include "bool.h" #include "calls.h" #include "error.h" @@ -38,16 +50,6 @@ #include "trycatch.h" #include "vars.h" -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - #ifdef HAVE_SELECT // For FuncUNIXSelect #include diff --git a/src/sysfiles.c b/src/sysfiles.c index c2cf83db00..4590bda0ba 100644 --- a/src/sysfiles.c +++ b/src/sysfiles.c @@ -44,7 +44,9 @@ #include #include #include +#ifdef HAVE_TERMIOS_H #include +#endif #include #include @@ -867,7 +869,9 @@ Int SyIsEndOfFile ( ** continue signals if this particular version of UNIX supports them, so we ** can turn the terminal line back to cooked mode before stopping GAP. */ +#ifdef HAVE_TERMIOS_H static struct termios syOld, syNew; // old and new terminal state +#endif #ifdef SIGTSTP @@ -898,6 +902,7 @@ UInt syStartraw ( Int fid ) else { return 0; } } +#ifdef HAVE_TERMIOS_H // try to get the terminal attributes, will fail if not terminal const int fd = SyBufFileno(fid); GAP_ASSERT(fd >= 0); @@ -928,6 +933,11 @@ UInt syStartraw ( Int fid ) // indicate success return 1; +#else + // On systems without termios (e.g., Windows), we can't do raw mode + // Return 0 to indicate that raw mode is not available + return 0; +#endif } @@ -943,6 +953,7 @@ void syStopraw ( if ( SyWindow ) return; +#ifdef HAVE_TERMIOS_H #ifdef SIGTSTP // remove signal handler for stop signal( SIGTSTP, SIG_DFL ); @@ -953,6 +964,8 @@ void syStopraw ( GAP_ASSERT(fd >= 0); if (tcsetattr(fd, TCSANOW, &syOld) == -1) fputs("gap: 'tcsetattr' could not turn off raw mode!\n",stderr); +#endif + // On systems without termios, nothing to do } From 3359e5bc3a4666d7a55fb9ea3f060a2f341fa7ef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 27 Aug 2025 10:13:29 +0000 Subject: [PATCH 03/29] Add MinGW CI support to test Windows compilation Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- .github/workflows/CI.yml | 26 ++++++++++++++++++++++++-- dev/ci-configure-gap.sh | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index dc0954679b..a32b2b54ae 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -137,6 +137,12 @@ jobs: shell: C:\cygwin64\bin\bash.exe --login -o igncr '{0}' test-suites: "testmockpkg testinstall" + # Test MinGW/MSYS2 compilation support + - os: windows-2022 + shell: msys2 {0} + test-suites: "testinstall" + extra: "MINGW=yes NO_COVERAGE=1" + env: TEST_SUITES: ${{ matrix.test-suites }} @@ -149,15 +155,31 @@ jobs: python-version: "3.11" - uses: gap-actions/setup-cygwin@v1 - if: ${{ runner.os == 'Windows' }} + if: ${{ runner.os == 'Windows' && !contains(matrix.extra, 'MINGW=yes') }} with: PKGS_TO_INSTALL: 'wget,git,gcc-g++,gcc-core,m4,libgmp-devel,make,automake,libtool,autoconf,autoconf2.5,zlib-devel,libreadline-devel,libmpc-devel,libmpfr-devel,xdg-utils,pkg-config' + - uses: msys2/setup-msys2@v2 + if: ${{ runner.os == 'Windows' && contains(matrix.extra, 'MINGW=yes') }} + with: + msystem: MINGW64 + install: >- + git + make + autoconf + automake + libtool + mingw-w64-x86_64-gcc + mingw-w64-x86_64-gmp + mingw-w64-x86_64-zlib + mingw-w64-x86_64-readline + mingw-w64-x86_64-pkg-config + # There are two cygwin installs on github actions (ours, # and a preinstalled one which we can't use as not enough packages are installed. # Due to conflicts between these two, we cannot spawn new Cygwin processes and # then use IO between processes - - if: ${{ runner.os == 'Windows' }} + - if: ${{ runner.os == 'Windows' && !contains(matrix.extra, 'MINGW=yes') }} name: "Remove tests which do not work on github actions in Windows" run: | rm tst/testinstall/testunix/streamio.tst tst/testinstall/testunix/streams.tst diff --git a/dev/ci-configure-gap.sh b/dev/ci-configure-gap.sh index c2dbd67540..a486afb702 100755 --- a/dev/ci-configure-gap.sh +++ b/dev/ci-configure-gap.sh @@ -5,7 +5,7 @@ set -ex SRCDIR=${SRCDIR:-$PWD} # print some data useful for debugging issues with the build -gcov --version +gcov --version || echo "gcov not available" printenv | sort git show --pretty=fuller -s From e576e984eef7f4288afb5be408bb074b69243ee4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 05:32:27 +0000 Subject: [PATCH 04/29] Add conda environment file for GAP development and testing Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- environment.yml | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 environment.yml diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000000..6ca69cce44 --- /dev/null +++ b/environment.yml @@ -0,0 +1,73 @@ +# GAP Development Environment +# +# This conda environment provides the necessary tools and libraries for +# developing and testing GAP (Groups, Algorithms, Programming). +# +# Usage: +# conda env create -f environment.yml +# conda activate gap-dev +# +# For Windows MinGW development specifically: +# 1. Install MSYS2 from https://www.msys2.org/ +# 2. Install MinGW packages via pacman: +# pacman -S git make autoconf automake libtool +# pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gmp +# pacman -S mingw-w64-x86_64-zlib mingw-w64-x86_64-readline +# pacman -S mingw-w64-x86_64-pkg-config +# 3. Use this conda environment for additional development tools +# +# Building GAP: +# ./autogen.sh +# ./configure --host=x86_64-w64-mingw32 # For MinGW on Windows +# make +# +# Testing: +# make check # Basic tests +# make citests # Comprehensive tests +# +# The CI configuration in .github/workflows/CI.yml shows the exact +# setup used for automated testing. + +name: gap-dev +channels: + - conda-forge + - defaults +dependencies: + # Core development tools + - git + - make + - autoconf + - automake + - libtool + - pkg-config + + # C/C++ compiler and build tools + - gcc_linux-64 # Linux GCC compiler + - gxx_linux-64 # Linux G++ compiler + + # Required libraries for GAP (cross-platform) + - gmp # GNU Multiple Precision Arithmetic Library + - zlib # Compression library + - readline # Command line editing library + + # Python tools for development and testing + - python >=3.8 + - gcovr # For coverage reporting + + # Optional but useful development tools + - wget + - tar + - gzip + - unzip + + # Build and debugging tools + - gdb + - ccache # For faster rebuilds + + # Documentation tools (optional) + - texlive-core # For manual building + + # Python packages via pip + - pip + - pip: + - pytest # For any Python-based tests \ No newline at end of file From 75e375dddfc4ff55f0dcb5a2bf4ec08d103844e6 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 14:52:05 +0800 Subject: [PATCH 05/29] Cleanup, more details about mingw setup --- INSTALL.md | 3 ++- README.md | 10 +++++++- environment.yml | 67 ++++++++++--------------------------------------- 3 files changed, 24 insertions(+), 56 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 41791b4d82..40e9d23c74 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -195,7 +195,8 @@ Change to the directory `gap-4.X.Y` (which you just created by unpacking). To get started quickly you may simply build GAP with default settings by issuing the two commands - ./configure + ./configure # Linux, macOS + bash ./configure # Windows make (note that on BSD systems you have to call `gmake` instead of `make`). diff --git a/README.md b/README.md index 2b9582a831..14da3e24b6 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,13 @@ On macOS, you can install the dependencies in several ways: * using Fink: `fink install autoconf2.6 gmp5 readline7` * using MacPorts: `port install autoconf gmp readline` +On Windows, you need to install the MinGW-w64 toolchain, for example by: + winget install -e --id RProject.Rtools + $env:Path = "$env:RTOOLS45_HOME\x86_64-w64-mingw32.static.posix\bin;$env:RTOOLS45_HOME\usr\bin;" + $env:Path # in PowerShell + set PATH=%RTOOLS45_HOME%\x86_64-w64-mingw32.static.posix\bin;%RTOOLS45_HOME%\usr\bin;%PATH% # in cmd.exe + pacman -Sy + pacman -S autoconf automake libtool + On other operating systems, you will need to figure out equivalent commands to install the required dependencies. @@ -89,7 +96,8 @@ to install the required dependencies. Then to build GAP, first run this command to generate the `configure` script: - ./autogen.sh + ./autogen.sh # Linux, macOS + bash autogen.sh # Windows Afterwards you can proceed as described in `INSTALL.md`. If you are on macOS, we recommend that you take a look at section "GAP for macOS" of `INSTALL.md` diff --git a/environment.yml b/environment.yml index 6ca69cce44..02d76dd574 100644 --- a/environment.yml +++ b/environment.yml @@ -7,67 +7,26 @@ # conda env create -f environment.yml # conda activate gap-dev # -# For Windows MinGW development specifically: -# 1. Install MSYS2 from https://www.msys2.org/ -# 2. Install MinGW packages via pacman: -# pacman -S git make autoconf automake libtool -# pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gmp -# pacman -S mingw-w64-x86_64-zlib mingw-w64-x86_64-readline -# pacman -S mingw-w64-x86_64-pkg-config -# 3. Use this conda environment for additional development tools -# -# Building GAP: -# ./autogen.sh -# ./configure --host=x86_64-w64-mingw32 # For MinGW on Windows -# make -# -# Testing: -# make check # Basic tests -# make citests # Comprehensive tests -# -# The CI configuration in .github/workflows/CI.yml shows the exact -# setup used for automated testing. +# For Windows, you have to install MinGW-w64 separately +# (see README.md for instructions). name: gap-dev channels: - conda-forge - - defaults dependencies: # Core development tools - - git - make - - autoconf - - automake - - libtool - pkg-config + # - autoconf # not available on Windows + # - automake # not available on Windows + # - libtool # not available on Windows + + # C/C++ compiler and build tools + # - compilers (not available on Windows) + - ccache - # C/C++ compiler and build tools - - gcc_linux-64 # Linux GCC compiler - - gxx_linux-64 # Linux G++ compiler - - # Required libraries for GAP (cross-platform) - - gmp # GNU Multiple Precision Arithmetic Library - - zlib # Compression library - - readline # Command line editing library - - # Python tools for development and testing - - python >=3.8 - - gcovr # For coverage reporting - - # Optional but useful development tools - - wget - - tar - - gzip - - unzip - - # Build and debugging tools - - gdb - - ccache # For faster rebuilds + # Required libraries + - gmp # GNU Multiple Precision Arithmetic Library + - zlib # Compression library + #- readline # Command line editing library (not available on Windows) - # Documentation tools (optional) - - texlive-core # For manual building - - # Python packages via pip - - pip - - pip: - - pytest # For any Python-based tests \ No newline at end of file From e3ebeba68d6bcb227882f3f521d3e21bdebc7e06 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 06:58:55 +0000 Subject: [PATCH 06/29] Fix realpath/readlink compilation errors on MinGW/Windows - Add AC_CHECK_FUNCS tests for realpath and readlink in configure.ac - Add conditional compilation in src/main.c for POSIX-specific functions - Provide fallback implementations when realpath/readlink are unavailable - Maintains full functionality on POSIX systems with graceful degradation on Windows - Fixes implicit function declaration errors on MinGW Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- configure.ac | 1 + src/main.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/configure.ac b/configure.ac index ed007f8477..020f20e13c 100644 --- a/configure.ac +++ b/configure.ac @@ -1029,6 +1029,7 @@ AC_CHECK_FUNCS([setitimer]) dnl check for functions dealing with virtual memory AC_CHECK_FUNCS([vm_allocate sbrk madvise sysconf]) +AC_CHECK_FUNCS([realpath readlink]) dnl check for large-file support (for accessing files whose sizes or inodes require 64bits) AC_SYS_LARGEFILE diff --git a/src/main.c b/src/main.c index 69d5e3dd95..8c761cd83d 100644 --- a/src/main.c +++ b/src/main.c @@ -60,9 +60,17 @@ find_yourself(const char * argv0, char * result, size_t resultsize) // absolute path, like '/usr/bin/gap' if (argv0[0] == '/') { +#ifdef HAVE_REALPATH if (realpath(argv0, result) && !access(result, F_OK)) { return; // success } +#else + // Fallback: just copy the path and check if it exists + gap_strlcpy(result, argv0, resultsize); + if (!access(result, F_OK)) { + return; // success + } +#endif } // relative path, like 'bin/gap.sh' else if (strchr(argv0, '/')) { @@ -70,9 +78,17 @@ find_yourself(const char * argv0, char * result, size_t resultsize) return; gap_strlcat(tmpbuf, "/", sizeof(tmpbuf)); gap_strlcat(tmpbuf, argv0, sizeof(tmpbuf)); +#ifdef HAVE_REALPATH if (realpath(tmpbuf, result) && !access(result, F_OK)) { return; // success } +#else + // Fallback: just copy the constructed path and check if it exists + gap_strlcpy(result, tmpbuf, resultsize); + if (!access(result, F_OK)) { + return; // success + } +#endif } // executable name, like 'gap' else { @@ -83,9 +99,17 @@ find_yourself(const char * argv0, char * result, size_t resultsize) gap_strlcpy(tmpbuf, pathitem, sizeof(tmpbuf)); gap_strlcat(tmpbuf, "/", sizeof(tmpbuf)); gap_strlcat(tmpbuf, argv0, sizeof(tmpbuf)); +#ifdef HAVE_REALPATH if (realpath(tmpbuf, result) && !access(result, F_OK)) { return; // success } +#else + // Fallback: just copy the constructed path and check if it exists + gap_strlcpy(result, tmpbuf, resultsize); + if (!access(result, F_OK)) { + return; // success + } +#endif } } @@ -108,23 +132,29 @@ static void SetupGAPLocation(const char * argv0, char * GAPExecLocation) // try Linux procfs if (!*locBuf) { +#ifdef HAVE_READLINK ssize_t ret = readlink("/proc/self/exe", locBuf, sizeof(locBuf)); if (ret < 0) *locBuf = 0; // reset buffer after error +#endif } // try FreeBSD / DragonFly BSD procfs if (!*locBuf) { +#ifdef HAVE_READLINK ssize_t ret = readlink("/proc/curproc/file", locBuf, sizeof(locBuf)); if (ret < 0) *locBuf = 0; // reset buffer after error +#endif } // try NetBSD procfs if (!*locBuf) { +#ifdef HAVE_READLINK ssize_t ret = readlink("/proc/curproc/exe", locBuf, sizeof(locBuf)); if (ret < 0) *locBuf = 0; // reset buffer after error +#endif } // if we are still failing, go and search the path @@ -133,8 +163,13 @@ static void SetupGAPLocation(const char * argv0, char * GAPExecLocation) } // resolve symlinks (if present) +#ifdef HAVE_REALPATH if (!realpath(locBuf, GAPExecLocation)) *GAPExecLocation = 0; // reset buffer after error +#else + // Fallback: just copy the path without resolving symlinks + gap_strlcpy(GAPExecLocation, locBuf, GAP_PATH_MAX); +#endif // now strip the executable name off length = strlen(GAPExecLocation); From 2730551296a4d7b0ad02523de2f39035a70b7826 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 07:11:27 +0000 Subject: [PATCH 07/29] Fix MinGW setjmp compilation error - use setjmp instead of _setjmp on Windows Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- src/read.c | 2 +- src/trycatch.h | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/read.c b/src/read.c index 1c12349574..255a63f0b8 100644 --- a/src/read.c +++ b/src/read.c @@ -77,7 +77,7 @@ #define TRY_IF_NO_ERROR \ if (!rs->s.NrError) { \ volatile Int recursionDepth = GetRecursionDepth(); \ - if (_setjmp(STATE(ReadJmpError))) { \ + if (GAP_SETJMP(STATE(ReadJmpError))) { \ SetRecursionDepth(recursionDepth); \ rs->s.NrError++; \ } \ diff --git a/src/trycatch.h b/src/trycatch.h index 939432cb82..e0eec290a4 100644 --- a/src/trycatch.h +++ b/src/trycatch.h @@ -20,6 +20,15 @@ #include #include // for memcpy +// Handle platform differences for setjmp +#ifdef SYS_IS_MINGW +// On MinGW/Windows, _setjmp requires two arguments, so use regular setjmp +#define GAP_SETJMP(jmp_buf) setjmp(jmp_buf) +#else +// On POSIX systems, use _setjmp for better performance +#define GAP_SETJMP(jmp_buf) _setjmp(jmp_buf) +#endif + /**************************************************************************** ** @@ -87,7 +96,7 @@ void InvokeTryCatchHandler(TryCatchMode mode); GAP_TryCatchEnv gap__env; \ gap_safe_trycatch(&gap__env); \ InvokeTryCatchHandler(TryEnter); \ - if (!_setjmp(STATE(ReadJmpError))) \ + if (!GAP_SETJMP(STATE(ReadJmpError))) \ for (gap__i = 1; gap__i; gap__i = 0, \ InvokeTryCatchHandler(TryLeave), \ gap_restore_trycatch(&gap__env)) From 691c6a22b72e7fa3a6ba2972566a432d2d9a82e6 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 15:16:37 +0800 Subject: [PATCH 08/29] Fix mingw special handling --- src/trycatch.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/trycatch.h b/src/trycatch.h index e0eec290a4..868d463594 100644 --- a/src/trycatch.h +++ b/src/trycatch.h @@ -16,6 +16,7 @@ #include "funcs.h" // for SetRecursionDepth #include "gapstate.h" #include "system.h" // for NORETURN +#include "config.h" // for SYS_IS_MINGW #include #include // for memcpy From b740141b707c4d31258c45a40452d72b99d74925 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 07:22:14 +0000 Subject: [PATCH 09/29] Fix mkdtemp and realpath compilation errors on MinGW/Windows Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- configure.ac | 2 +- src/streams.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 020f20e13c..d8294767da 100644 --- a/configure.ac +++ b/configure.ac @@ -1029,7 +1029,7 @@ AC_CHECK_FUNCS([setitimer]) dnl check for functions dealing with virtual memory AC_CHECK_FUNCS([vm_allocate sbrk madvise sysconf]) -AC_CHECK_FUNCS([realpath readlink]) +AC_CHECK_FUNCS([realpath readlink mkdtemp]) dnl check for large-file support (for accessing files whose sizes or inodes require 64bits) AC_SYS_LARGEFILE diff --git a/src/streams.c b/src/streams.c index eff1217f79..99ebdcbd6c 100644 --- a/src/streams.c +++ b/src/streams.c @@ -1043,8 +1043,17 @@ static Obj FuncTmpDirectory(Obj self) const char * extra = "/gaptempdirXXXXXX"; AppendCStr(name, extra, strlen(extra)); +#ifdef HAVE_MKDTEMP if (mkdtemp(CSTR_STRING(name)) == 0) return Fail; +#else + // Fallback for systems without mkdtemp (like MinGW) + if (mktemp(CSTR_STRING(name)) == 0) + return Fail; + // Try to create the directory + if (SyMkdir(CONST_CSTR_STRING(name)) == -1) + return Fail; +#endif return name; } @@ -1137,6 +1146,7 @@ static Obj FuncGAP_chdir(Obj self, Obj path) static Obj FuncGAP_realpath(Obj self, Obj path) { RequireStringRep(SELF_NAME, path); +#ifdef HAVE_REALPATH char resolved_path[PATH_MAX]; if (NULL == realpath(CONST_CSTR_STRING(path), resolved_path)) { @@ -1144,6 +1154,11 @@ static Obj FuncGAP_realpath(Obj self, Obj path) return Fail; } return MakeString(resolved_path); +#else + // Fallback for systems without realpath (like MinGW) + // Just return the original path as-is + return CopyObj(path, 0); +#endif } From 632642c4b516fcb2d1ad63bce2f164c400624ccb Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 15:53:23 +0800 Subject: [PATCH 10/29] Fix conditional inclusion of sys/utsname.h for MinGW compatibility --- src/sysfiles.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sysfiles.c b/src/sysfiles.c index 4590bda0ba..d4f38b8292 100644 --- a/src/sysfiles.c +++ b/src/sysfiles.c @@ -82,7 +82,9 @@ #include +#ifndef SYS_IS_MINGW #include +#endif // 'EndLineHook' is a GAP-level variable which can be set to a function to be @@ -358,6 +360,7 @@ static Obj FuncCrcString(Obj self, Obj str) Obj SyGetOsRelease(void) { Obj r = NEW_PREC(0); +#ifndef SYS_IS_MINGW struct utsname buf; if (!uname(&buf)) { AssPRec(r, RNamName("sysname"), MakeImmString(buf.sysname)); @@ -366,6 +369,7 @@ Obj SyGetOsRelease(void) AssPRec(r, RNamName("version"), MakeImmString(buf.version)); AssPRec(r, RNamName("machine"), MakeImmString(buf.machine)); } +#endif return r; } From f4eff25abe8220f24543d7993f3a9f6d674cc5ae Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 08:08:42 +0000 Subject: [PATCH 11/29] Fix MinGW compilation errors in sysfiles.c - Add proper function availability checks for lstat and ttyname in configure.ac - Fix sigaction usage to be conditional with fallback to signal() - Fix mkdir to use single argument on MinGW/Windows - Fix lstat/S_ISLNK usage to be conditional, fallback to stat - Fix ttyname usage to be conditional with appropriate fallbacks - Reorder includes to put system headers before GAP headers to avoid conflicts - Add MinGW POSIX compatibility layer with explicit function declarations - Add access() constants (F_OK, R_OK, W_OK, X_OK) for MinGW This addresses all the compilation errors mentioned in the issue and enables GAP to compile on MinGW/Windows with proper graceful degradation of features. Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- configure.ac | 1 + ffgen.exe | Bin 0 -> 254439 bytes src/sysfiles.c | 109 ++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 86 insertions(+), 24 deletions(-) create mode 100755 ffgen.exe diff --git a/configure.ac b/configure.ac index d8294767da..3230d011d1 100644 --- a/configure.ac +++ b/configure.ac @@ -1030,6 +1030,7 @@ AC_CHECK_FUNCS([setitimer]) dnl check for functions dealing with virtual memory AC_CHECK_FUNCS([vm_allocate sbrk madvise sysconf]) AC_CHECK_FUNCS([realpath readlink mkdtemp]) +AC_CHECK_FUNCS([lstat ttyname]) dnl check for large-file support (for accessing files whose sizes or inodes require 64bits) AC_SYS_LARGEFILE diff --git a/ffgen.exe b/ffgen.exe new file mode 100755 index 0000000000000000000000000000000000000000..bfddd86962df1ab4179d5fbb911aab385b27bd2e GIT binary patch literal 254439 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 F|G!JKTbKX< literal 0 HcmV?d00001 diff --git a/src/sysfiles.c b/src/sysfiles.c index d4f38b8292..58512b201b 100644 --- a/src/sysfiles.c +++ b/src/sysfiles.c @@ -14,31 +14,16 @@ // ensure we can access large files #define _FILE_OFFSET_BITS 64 -#include "sysfiles.h" - -#include "bool.h" -#include "calls.h" -#include "error.h" -#include "gapstate.h" -#include "gaputils.h" -#include "gvars.h" -#include "io.h" -#include "lists.h" -#include "modules.h" -#include "plist.h" -#include "precord.h" -#include "read.h" -#include "records.h" -#include "stats.h" -#include "stringobj.h" -#include "sysopt.h" -#include "sysstr.h" -#include "system.h" - -#include "hpc/thread.h" +#ifdef SYS_IS_MINGW +// Feature test macros needed for POSIX functions on MinGW +#define _GNU_SOURCE +#define _POSIX_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif #include "config.h" +// System includes first to avoid conflicts with GAP headers #include #include #include @@ -50,6 +35,34 @@ #include #include +#ifdef SYS_IS_MINGW +// On MinGW, some POSIX functions like access, read, write are in io.h +#include +// MinGW POSIX compatibility - declare functions explicitly if not found +extern int read(int fd, void *buf, unsigned int count); +extern int write(int fd, const void *buf, unsigned int count); +extern int open(const char *pathname, int flags, ...); +extern int close(int fd); +extern long lseek(int fd, long offset, int whence); +extern int isatty(int fd); +extern int access(const char *pathname, int mode); +extern int mkdir(const char *pathname); +extern int rmdir(const char *pathname); +// access() mode constants +#ifndef F_OK +#define F_OK 0 +#endif +#ifndef R_OK +#define R_OK 4 +#endif +#ifndef W_OK +#define W_OK 2 +#endif +#ifndef X_OK +#define X_OK 1 +#endif +#endif + #include #include #include @@ -86,6 +99,30 @@ #include #endif +// GAP includes after system includes to avoid header conflicts +#include "sysfiles.h" + +#include "bool.h" +#include "calls.h" +#include "error.h" +#include "gapstate.h" +#include "gaputils.h" +#include "gvars.h" +#include "io.h" +#include "lists.h" +#include "modules.h" +#include "plist.h" +#include "precord.h" +#include "read.h" +#include "records.h" +#include "stats.h" +#include "stringobj.h" +#include "sysopt.h" +#include "sysstr.h" +#include "system.h" + +#include "hpc/thread.h" + // 'EndLineHook' is a GAP-level variable which can be set to a function to be // called at end of each command line (i.e. after the user presses enter). @@ -1031,12 +1068,16 @@ static void syAnswerIntr(int signr) void SyInstallAnswerIntr ( void ) { +#ifdef HAVE_SIGACTION struct sigaction sa; sa.sa_handler = syAnswerIntr; sigemptyset(&(sa.sa_mask)); sa.sa_flags = SA_RESTART; sigaction( SIGINT, &sa, NULL ); +#elif defined(HAVE_SIGNAL) + signal(SIGINT, syAnswerIntr); +#endif } @@ -2942,7 +2983,11 @@ Int SyMkdir ( const Char * name ) { Int res; SyClearErrorNo(); +#ifdef SYS_IS_MINGW + res = mkdir(name); +#else res = mkdir(name, 0777); +#endif if (res == -1) SySetErrorNo(); return res; @@ -2981,7 +3026,11 @@ char SyFileType(const Char * path) int res; struct stat ourlstatbuf; +#ifdef HAVE_LSTAT res = lstat(path, &ourlstatbuf); +#else + res = stat(path, &ourlstatbuf); +#endif if (res < 0) { SySetErrorNo(); return 0; @@ -2990,8 +3039,10 @@ char SyFileType(const Char * path) return 'F'; if (S_ISDIR(ourlstatbuf.st_mode)) return 'D'; +#ifdef S_ISLNK if (S_ISLNK(ourlstatbuf.st_mode)) return 'L'; +#endif #ifdef S_ISCHR if (S_ISCHR(ourlstatbuf.st_mode)) return 'C'; @@ -3217,8 +3268,13 @@ void InitSysFiles(void) if (syBuf[0].isTTY) { // if stdin is on a terminal, make sure stdout in on the same terminal if (stat_in.st_dev != stat_out.st_dev || - stat_in.st_ino != stat_out.st_ino) + stat_in.st_ino != stat_out.st_ino) { +#ifdef HAVE_TTYNAME syBuf[0].echo = open(ttyname(fileno(stdin)), O_WRONLY); +#else + // fallback: keep the default stdout echo +#endif + } } // set up stdout @@ -3236,8 +3292,13 @@ void InitSysFiles(void) if (syBuf[2].isTTY) { // if stderr is on a terminal, make sure errin in on the same terminal if (stat_in.st_dev != stat_err.st_dev || - stat_in.st_ino != stat_err.st_ino) + stat_in.st_ino != stat_err.st_ino) { +#ifdef HAVE_TTYNAME syBuf[2].fp = open(ttyname(fileno(stderr)), O_RDONLY); +#else + // fallback: keep the default stdin fp +#endif + } } // set up errout From 5d3baa19536497970f4ee8b00029d4c9d35e56bf Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:18:36 +0800 Subject: [PATCH 12/29] cleanup --- src/sysfiles.c | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/src/sysfiles.c b/src/sysfiles.c index 58512b201b..e116db22fa 100644 --- a/src/sysfiles.c +++ b/src/sysfiles.c @@ -38,29 +38,6 @@ #ifdef SYS_IS_MINGW // On MinGW, some POSIX functions like access, read, write are in io.h #include -// MinGW POSIX compatibility - declare functions explicitly if not found -extern int read(int fd, void *buf, unsigned int count); -extern int write(int fd, const void *buf, unsigned int count); -extern int open(const char *pathname, int flags, ...); -extern int close(int fd); -extern long lseek(int fd, long offset, int whence); -extern int isatty(int fd); -extern int access(const char *pathname, int mode); -extern int mkdir(const char *pathname); -extern int rmdir(const char *pathname); -// access() mode constants -#ifndef F_OK -#define F_OK 0 -#endif -#ifndef R_OK -#define R_OK 4 -#endif -#ifndef W_OK -#define W_OK 2 -#endif -#ifndef X_OK -#define X_OK 1 -#endif #endif #include From 9fba4e5eda5891a41491183138a58f8ac82484d6 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:30:10 +0800 Subject: [PATCH 13/29] Add further platform-specific handling for setjmp/longjmp --- src/funcs.h | 12 ++++++++++++ src/gasman.c | 2 +- src/gasman.h | 1 + src/trycatch.c | 3 ++- src/trycatch.h | 11 +---------- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/funcs.h b/src/funcs.h index 56c3d1bc77..0f000351be 100644 --- a/src/funcs.h +++ b/src/funcs.h @@ -18,6 +18,7 @@ #define GAP_FUNCS_H #include "common.h" +#include "config.h" /**************************************************************************** ** @@ -64,4 +65,15 @@ EXPORT_INLINE void CheckRecursionBefore( void ) */ StructInitInfo * InitInfoFuncs ( void ); +// Handle platform differences for setjmp/longjmp +#ifdef SYS_IS_MINGW +// On MinGW/Windows, _setjmp requires two arguments, so use regular setjmp +#define GAP_SETJMP(jmp_buf) setjmp(jmp_buf) +#define GAP_LONGJMP(jmp_buf, val) longjmp(jmp_buf, val) +#else +// On POSIX systems, use _setjmp/_longjmp for better performance +#define GAP_SETJMP(jmp_buf) _setjmp(jmp_buf) +#define GAP_LONGJMP(jmp_buf, val) _longjmp(jmp_buf, val) +#endif + #endif // GAP_FUNCS_H diff --git a/src/gasman.c b/src/gasman.c index 6712ebec79..cd7d8beb1a 100644 --- a/src/gasman.c +++ b/src/gasman.c @@ -2009,7 +2009,7 @@ static UInt CollectBags_Mark(UInt FullBags) } // mark from the stack - _setjmp(RegsBags); + GAP_SETJMP(RegsBags); #if defined(SYS_IS_SPARC) SparcStackFuncBags(); #endif diff --git a/src/gasman.h b/src/gasman.h index b53c9eb8a4..e073750a67 100644 --- a/src/gasman.h +++ b/src/gasman.h @@ -36,6 +36,7 @@ #ifndef GAP_GASMAN_H #define GAP_GASMAN_H +#include "funcs.h" // for GAP_SETJMP/GAP_LONGJMP #include "common.h" diff --git a/src/trycatch.c b/src/trycatch.c index 12a68deb2e..187716fc23 100644 --- a/src/trycatch.c +++ b/src/trycatch.c @@ -58,5 +58,6 @@ void GAP_THROW(void) int depth = STATE(TryCatchDepth); for (int i = 0; i < ARRAY_SIZE(throwObservers) && throwObservers[i]; ++i) (throwObservers[i])(depth); - _longjmp(STATE(ReadJmpError), 1); + + GAP_LONGJMP(STATE(ReadJmpError), 1); } diff --git a/src/trycatch.h b/src/trycatch.h index 868d463594..856694fe3f 100644 --- a/src/trycatch.h +++ b/src/trycatch.h @@ -13,22 +13,13 @@ #ifndef GAP_TRYCATCH_H #define GAP_TRYCATCH_H -#include "funcs.h" // for SetRecursionDepth +#include "funcs.h" // for SetRecursionDepth, GAP_SETJMP/GAP_LONGJMP #include "gapstate.h" #include "system.h" // for NORETURN -#include "config.h" // for SYS_IS_MINGW #include #include // for memcpy -// Handle platform differences for setjmp -#ifdef SYS_IS_MINGW -// On MinGW/Windows, _setjmp requires two arguments, so use regular setjmp -#define GAP_SETJMP(jmp_buf) setjmp(jmp_buf) -#else -// On POSIX systems, use _setjmp for better performance -#define GAP_SETJMP(jmp_buf) _setjmp(jmp_buf) -#endif /**************************************************************************** From 2bce737ebc20a93c788af9bcf7dce6ff16c600df Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:32:43 +0800 Subject: [PATCH 14/29] Ensure calloc is available --- src/sysmem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sysmem.c b/src/sysmem.c index 039272385b..97aac8a411 100644 --- a/src/sysmem.c +++ b/src/sysmem.c @@ -23,8 +23,8 @@ #ifdef GAP_MEM_CHECK #include -#include // for qsort #endif +#include // for qsort, calloc #include // for fputs #include // for ftruncate, getpid, unlink, sbrk, sysconf From 7def32b9bd7338e5928fce6d0034d576cffe0de6 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:42:42 +0800 Subject: [PATCH 15/29] Fix MinGW issues when using inline functions --- src/common.h | 20 +++++++++++++++----- src/debug.c | 7 ++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/common.h b/src/common.h index 02818f567c..197219063a 100644 --- a/src/common.h +++ b/src/common.h @@ -63,11 +63,21 @@ GAP_STATIC_ASSERT(sizeof(void *) == SIZEOF_VOID_P, "sizeof(void *) is wrong"); // wanted to, a lot more work (and planning) would have to be invested into // that anyway. #ifndef EXPORT_INLINE -#ifdef HPCGAP -#define EXPORT_INLINE static inline -#else -#define EXPORT_INLINE inline -#endif +# ifdef HPCGAP +# define EXPORT_INLINE static inline +# elif defined(SYS_IS_MINGW) + // On MinGW we normally use 'static inline' to avoid multiple definition + // errors. A translation unit (debug.c) that wants externally visible + // inline symbols can define DEBUG_FORCE_EXTERN_INLINE before including + // this header to switch them to 'extern inline'. +# ifdef DEBUG_FORCE_EXTERN_INLINE +# define EXPORT_INLINE extern inline +# else +# define EXPORT_INLINE static inline +# endif +# else +# define EXPORT_INLINE inline +# endif #endif diff --git a/src/debug.c b/src/debug.c index d0e981b4f3..c69d30308e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -8,11 +8,8 @@ ** SPDX-License-Identifier: GPL-2.0-or-later */ -// set EXPORT_INLINE to 'extern inline' to force an instance of each -// function marked with EXPORT_INLINE to be actually emitted, so that -// it can e.g. be accessed from gdb or lldb, or from software using -// libgap as a shared library -#define EXPORT_INLINE extern inline +// Request that common.h use 'extern inline' (see common.h for details) +#define DEBUG_FORCE_EXTERN_INLINE 1 #include "common.h" From 680da4386545b9f90bcc74034c5c8c766ae9d0de Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:43:05 +0800 Subject: [PATCH 16/29] Fix 'environ' declaration for MinGW --- src/sysenv.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sysenv.h b/src/sysenv.h index 88661e2a58..7722a3dd49 100644 --- a/src/sysenv.h +++ b/src/sysenv.h @@ -21,10 +21,14 @@ #include #define environ (*_NSGetEnviron()) -#elif !defined(environ) - +#elif defined(SYS_IS_MINGW) +// MinGW: just declare 'environ' (provided by the C runtime); avoid remapping +// to '_environ' to prevent undeclared identifier issues in some toolchains. extern char ** environ; +#elif !defined(environ) +extern char ** environ; // generic fallback + #endif #endif // GAP_SYSENV_H From 4669aacd372dae298b15bb0fc1305ad9589118db Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 16:45:15 +0800 Subject: [PATCH 17/29] Remove ffgen.exe --- .gitignore | 1 + ffgen.exe | Bin 254439 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100755 ffgen.exe diff --git a/.gitignore b/.gitignore index 5d67442b54..a240b1809b 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ /extern/install/ /ffgen +ffgen.exe /gac /gap /sysinfo.gap diff --git a/ffgen.exe b/ffgen.exe deleted file mode 100755 index bfddd86962df1ab4179d5fbb911aab385b27bd2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254439 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 F|G!JKTbKX< From 0daca7fb8b515fb460873d36fd66be71e88bc023 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 09:03:06 +0000 Subject: [PATCH 18/29] Fix linking issues with inline functions on all platforms (not just MinGW) Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- src/common.h | 15 +++++++-------- src/gap_all.h | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/common.h b/src/common.h index 197219063a..ecd7aa1d22 100644 --- a/src/common.h +++ b/src/common.h @@ -65,16 +65,15 @@ GAP_STATIC_ASSERT(sizeof(void *) == SIZEOF_VOID_P, "sizeof(void *) is wrong"); #ifndef EXPORT_INLINE # ifdef HPCGAP # define EXPORT_INLINE static inline -# elif defined(SYS_IS_MINGW) - // On MinGW we normally use 'static inline' to avoid multiple definition - // errors. A translation unit (debug.c) that wants externally visible +# elif defined(DEBUG_FORCE_EXTERN_INLINE) + // A translation unit (debug.c) that wants externally visible // inline symbols can define DEBUG_FORCE_EXTERN_INLINE before including // this header to switch them to 'extern inline'. -# ifdef DEBUG_FORCE_EXTERN_INLINE -# define EXPORT_INLINE extern inline -# else -# define EXPORT_INLINE static inline -# endif +# define EXPORT_INLINE extern inline +# elif defined(SYS_IS_MINGW) + // On MinGW we normally use 'static inline' to avoid multiple definition + // errors. +# define EXPORT_INLINE static inline # else # define EXPORT_INLINE inline # endif diff --git a/src/gap_all.h b/src/gap_all.h index 1c69e2810a..c36e3848c5 100644 --- a/src/gap_all.h +++ b/src/gap_all.h @@ -37,6 +37,7 @@ extern "C" { #include "gap.h" #include "gapstate.h" #include "gaptime.h" +#include "gaputils.h" #include "gasman.h" #include "gvars.h" #include "info.h" @@ -76,6 +77,9 @@ extern "C" { #include "trans.h" #include "trycatch.h" #include "vars.h" +#include "vec8bit.h" +#include "vecffe.h" +#include "vecgf2.h" #include "vector.h" #include "version.h" #include "weakptr.h" From f25d948ccb2ce6c019e8c348e2225ff165ba21bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 09:12:22 +0000 Subject: [PATCH 19/29] Fix MinGW compilation issues: linker flags, inline functions, and environ Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- Makefile.rules | 10 ++++++++++ src/common.h | 1 + src/sysenv.h | 6 +++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Makefile.rules b/Makefile.rules index f69cf6e172..5855651668 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -438,6 +438,16 @@ ifneq (,$(findstring cygwin,$(host_os))) LIBGAP_FULL = libgap$(SHLIB_EXT) LINK_SHLIB_FLAGS = -shared -Wl,--enable-auto-image-base -Wl,--out-implib,libgap.dll.a +else ifneq (,$(findstring mingw,$(host_os))) + SHLIB_EXT=.dll + LIBGAP_FULL = libgap$(SHLIB_EXT) + + LINK_SHLIB_FLAGS = -shared -Wl,--enable-auto-image-base -Wl,--out-implib,libgap.dll.a + + GAP_CPPFLAGS += -DPIC + GAP_CFLAGS += -fPIC + GAP_CXXFLAGS += -fPIC + GAP_LDFLAGS += -Wl,--export-all-symbols else ifneq (,$(findstring darwin,$(host_os))) SHLIB_EXT=.dylib LIBGAP_FULL = libgap.$(SHLIB_MAJOR)$(SHLIB_EXT) diff --git a/src/common.h b/src/common.h index ecd7aa1d22..abc8bf0def 100644 --- a/src/common.h +++ b/src/common.h @@ -14,6 +14,7 @@ #include #include +#include "config.h" #include "debug.h" // check if we are on a 64 or 32 bit machine; in the former diff --git a/src/sysenv.h b/src/sysenv.h index 7722a3dd49..61782db605 100644 --- a/src/sysenv.h +++ b/src/sysenv.h @@ -22,9 +22,9 @@ #define environ (*_NSGetEnviron()) #elif defined(SYS_IS_MINGW) -// MinGW: just declare 'environ' (provided by the C runtime); avoid remapping -// to '_environ' to prevent undeclared identifier issues in some toolchains. -extern char ** environ; +// MinGW: Use _environ which is guaranteed to be available +extern char ** _environ; +#define environ _environ #elif !defined(environ) extern char ** environ; // generic fallback From 0b9ed9603a97e0224de6693869da6aca5819d5fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:02:46 +0000 Subject: [PATCH 20/29] Fix MinGW environ variable usage for cross-compilation Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- native-build/CITATION | 60 + native-build/GNUmakefile | 174 ++ native-build/build/config.h | 316 ++++ native-build/build/ffdata.c | 2643 +++++++++++++++++++++++++++++ native-build/build/ffdata.h | 23 + native-build/build/stamp-h | 1 + native-build/cnf/GAP-VERSION-FILE | 2 + native-build/config.status | 1127 ++++++++++++ native-build/doc/make_doc | 92 + native-build/doc/versiondata | 10 + native-build/ffgen | Bin 0 -> 16888 bytes native-build/libgap.pc | 11 + src/ffdata.c | 2643 +++++++++++++++++++++++++++++ src/ffdata.h | 23 + src/sysenv.h | 5 +- 15 files changed, 7127 insertions(+), 3 deletions(-) create mode 100644 native-build/CITATION create mode 100644 native-build/GNUmakefile create mode 100644 native-build/build/config.h create mode 100644 native-build/build/ffdata.c create mode 100644 native-build/build/ffdata.h create mode 100644 native-build/build/stamp-h create mode 100644 native-build/cnf/GAP-VERSION-FILE create mode 100755 native-build/config.status create mode 100755 native-build/doc/make_doc create mode 100644 native-build/doc/versiondata create mode 100755 native-build/ffgen create mode 100644 native-build/libgap.pc create mode 100644 src/ffdata.c create mode 100644 src/ffdata.h diff --git a/native-build/CITATION b/native-build/CITATION new file mode 100644 index 0000000000..b4d7bba575 --- /dev/null +++ b/native-build/CITATION @@ -0,0 +1,60 @@ +Please use one of the following samples to cite GAP version from this installation + +Text: + +[GAP] GAP – Groups, Algorithms, and Programming, Version 4.15dev, +The GAP Group (this year), https://www.gap-system.org. + +HTML: + +

+[GAP] + GAP – Groups, Algorithms, and Programming, Version 4.15dev, + The GAP Group (this year), +https://www.gap-system.org. +

+ +BibXML: + + + <C>GAP</C> – <C>G</C>roups, <C>A</C>lgorithms, + and <C>P</C>rogramming, <C>V</C>ersion 4.15dev + https://www.gap-system.org + this year + GAP + groups; *; gap; manual + The GAP Group + + +BibTeX: + +@misc{ GAP4.15dev, + title = {{GAP} {\textendash} {G}roups, {A}lgorithms, and {P}rogramming, {V}ersion 4.15dev}, + organization = {The GAP {G}roup}, + year = {this year}, + howpublished = {\href{https://www.gap-system.org}{\texttt{https://www.gap-system.org}}}, + key = {GAP}, + keywords = {groups; *; gap; manual} +} + +If you are not using BibTeX, here is the bibliography entry produced +by BibTeX (in bibliography style `alpha'): + +\bibitem[GAP]{GAP4} +\emph{GAP -- Groups, Algorithms, and Programming}, Version 4.15dev, +The GAP~Group (this year), \verb+https://www.gap-system.org+. + +If you have (predominantly) used one or more particular GAP packages, +please cite these packages in addition to GAP itself (either check the +the package documentation for the suggestions, or use a scheme like: + +[PKG] +, , , +Version (), (GAP package), +. + +You may also produce citation samples for a GAP package by entering + + Cite("packagename"); + +in a GAP installation with the working version of this package available. diff --git a/native-build/GNUmakefile b/native-build/GNUmakefile new file mode 100644 index 0000000000..303635dfe5 --- /dev/null +++ b/native-build/GNUmakefile @@ -0,0 +1,174 @@ +# GNUmakefile. Generated from GNUmakefile.in by configure. + +# This file is the part of the GAP build system. It is the first file +# processed by GNU make when build GAP. If you want to understand the +# build system, you can begin tracing it from here. +# +# To learn more about the GAP build system, see README.buildsys.md + + +# +# Set lots of variables to values computed by the configure script +# + +# GAP specific +ABI = 64 +ABI_CFLAGS = + +# HPC-GAP specific +HPCGAP = no + +# garbage collector source files +GC_SOURCES = src/gasman.c src/sysmem.c + +# GAP architecture string +GAPARCH = x86_64-pc-linux-gnu-default64-kv10 + +# maintainer mode +MAINTAINER_MODE = yes + +# GAP version and release date +GAP_VERSION = 4.15dev +GAP_RELEASEDAY = today + +# GAP kernel version +GAP_KERNEL_MINOR_VERSION = 0 +GAP_KERNEL_MAJOR_VERSION = 10 + +# autoconf host system information (= system *for* which we are compiling) +host = x86_64-pc-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = pc + +# autoconf build system information (= system *on* which we are compiling) +build = x86_64-pc-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = pc + +# compile and linker flags +CFLAGS = -g -O2 +CXXFLAGS = -g -O2 +CPPFLAGS = +LDFLAGS = +LIBS = -lm +GAP_DEFINES = -DUSE_GASMAN=1 + +WARN_CFLAGS = -fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but-set-variable -Wno-unused-parameter -Wwrite-strings -Wno-implicit-fallthrough -Wimplicit-function-declaration -Wjump-misses-init -Wnested-externs -Wold-style-definition -Wstrict-prototypes -Wno-error=cast-function-type -Wno-error=inline -Wno-error=pragmas -Wno-error=sign-compare -Wno-error=unused-parameter -Wno-error=implicit-fallthrough +WARN_CXXFLAGS = -fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but-set-variable -Wno-unused-parameter -Wwrite-strings -Wextra-semi + +BUILD_GMP = no +GMP_CPPFLAGS = -Ibundled/include +GMP_LDFLAGS = -Lbundled/lib +GMP_LIBS = -lgmp +GMP_PREFIX = bundled + +BUILD_ZLIB = no +ZLIB_CPPFLAGS = +ZLIB_LDFLAGS = +ZLIB_LIBS = -lz + +READLINE_CPPFLAGS = +READLINE_LDFLAGS = +READLINE_LIBS = + +JULIA_VERSION = +JULIA_CFLAGS = +JULIA_LDFLAGS = +JULIA_LIBS = + +BUILD_BOEHM_GC = +BOEHM_GC_CPPFLAGS = +BOEHM_GC_LDFLAGS = +BOEHM_GC_LIBS = + +BUILD_LIBATOMIC_OPS = +LIBATOMIC_OPS_CPPFLAGS = +LIBATOMIC_OPS_LDFLAGS = +LIBATOMIC_OPS_LIBS = + +PTHREAD_CFLAGS = -pthread +PTHREAD_LIBS = -lpthread + +# build tools +CC = gcc +CXX = g++ +INSTALL = /usr/bin/install -c +MKDIR_P = /usr/bin/mkdir -p +SED = /usr/bin/sed +SHELL = /bin/bash + +# misc +EXEEXT = + +# build paths +abs_builddir = /home/runner/work/gap/gap/native-build +abs_srcdir = /home/runner/work/gap/gap/native-build/.. +builddir = . +srcdir = .. + +# for compatibility: top_builddir is used by libtool for LIBTOOL variable; +# keeping the others makes it easier to "git bisect" back and forth +top_builddir = . +top_srcdir = .. +abs_top_builddir = /home/runner/work/gap/gap/native-build +abs_top_srcdir = /home/runner/work/gap/gap/native-build/.. + +# install paths +bindir = ${exec_prefix}/bin +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +exec_prefix = ${prefix} +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +pdfdir = ${docdir} +prefix = /usr/local +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc + + +# +# Set vpath values to make GNU make read source files from $(srcdir). +# +# The vpath directives below ensure that if we reference src/foo.c, then if it +# is not found in the build dir (e.g. because we are doing an out-of-tree +# build), GNU make automatically looks for $(srcdir)/src/foo.c +# # +# Note that `vpath' is a GNU make extension. Unlike VPATH, it can be +# restricted to certain file extensions. This way, we can mix in-tree and +# out-of-tree builds without accidentally picking up e.g. *.o files from the +# wrong tree. We still have to be careful about build/config.h, though. +# +vpath src/%.h $(srcdir) +vpath src/%.c $(srcdir) +vpath src/%.cc $(srcdir) +vpath src/%.s $(srcdir) + +vpath src/hpc/%.h $(srcdir) +vpath src/hpc/%.c $(srcdir) +vpath src/hpc/%.cc $(srcdir) +vpath src/hpc/%.s $(srcdir) + +vpath tst/testkernel/%.h $(srcdir) +vpath tst/testkernel/%.c $(srcdir) + +vpath tst/testlibgap/%.h $(srcdir) +vpath tst/testlibgap/%.c $(srcdir) + + +# +# Finally, include the actual make rules. +# +include $(srcdir)/Makefile.rules diff --git a/native-build/build/config.h b/native-build/build/config.h new file mode 100644 index 0000000000..ed88437ad0 --- /dev/null +++ b/native-build/build/config.h @@ -0,0 +1,316 @@ +/* build/config.h. Generated from config.h.in by configure. */ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* define as least offset which is still safe for an unaligned access */ +#define C_STACK_ALIGN 2 + +/* the GAP architecture, for kernel extensions */ +#define GAPARCH "x86_64-pc-linux-gnu-default64-kv10" + +/* disable subprocess support on MinGW */ +/* #undef GAP_DISABLE_SUBPROCESS_CODE */ + +/* to enable backtraces upon crashes */ +/* #undef GAP_PRINT_BACKTRACE */ + +/* Defined if backtrace() could be fully identified. */ +#define HAVE_BACKTRACE 1 + +/* Define to 1 if you have the `clock_getres' function. */ +#define HAVE_CLOCK_GETRES 1 + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* define if the compiler supports basic C++11 syntax */ +#define HAVE_CXX11 1 + +/* define as 1 if you have `dlopen' and `dlsym' */ +#define HAVE_DLOPEN 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_EXECINFO_H 1 + +/* Define to 1 if you have the `exp10' function. */ +#define HAVE_EXP10 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if the system has the `always_inline' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE 1 + +/* Define to 1 if the system has the `constructor' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR 1 + +/* Define to 1 if the system has the `fallthrough' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_FALLTHROUGH 1 + +/* Define to 1 if the system has the `format' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_FORMAT 1 + +/* Define to 1 if the system has the `noinline' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_NOINLINE 1 + +/* Define to 1 if the system has the `noreturn' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_NORETURN 1 + +/* Define to 1 if the system has the `pure' function attribute */ +#define HAVE_FUNC_ATTRIBUTE_PURE 1 + +/* Define to 1 if you have the `getrusage' function. */ +#define HAVE_GETRUSAGE 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `grantpt' function. */ +/* #undef HAVE_GRANTPT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have lib(e)readline */ +/* #undef HAVE_LIBREADLINE */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBUTIL_H */ + +/* Define to 1 if you have the `lstat' function. */ +#define HAVE_LSTAT 1 + +/* Define to 1 if you have the `madvise' function. */ +#define HAVE_MADVISE 1 + +/* Define to 1 if you have the `mkdtemp' function. */ +#define HAVE_MKDTEMP 1 + +/* define as 1 if you have `openpty' */ +#define HAVE_OPENPTY 1 + +/* Define to 1 if you have the `popen' function. */ +#define HAVE_POPEN 1 + +/* Define to 1 if you have the `posix_openpt' function. */ +/* #undef HAVE_POSIX_OPENPT */ + +/* Define to 1 if you have the `posix_spawn' function. */ +#define HAVE_POSIX_SPAWN 1 + +/* Define to 1 if you have the `posix_spawn_file_actions_addchdir' function. + */ +/* #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR */ + +/* Define to 1 if you have the `posix_spawn_file_actions_addchdir_np' + function. */ +#define HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP 1 + +/* Define if you have POSIX threads libraries and header files. */ +#define HAVE_PTHREAD 1 + +/* Have PTHREAD_PRIO_INHERIT. */ +#define HAVE_PTHREAD_PRIO_INHERIT 1 + +/* Define to 1 if you have the `ptsname' function. */ +/* #undef HAVE_PTSNAME */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PTY_H 1 + +/* Define to 1 if you have the `readlink' function. */ +#define HAVE_READLINK 1 + +/* Define to 1 if you have the `realpath' function. */ +#define HAVE_REALPATH 1 + +/* Define to 1 if you have the `sbrk' function. */ +#define HAVE_SBRK 1 + +/* Define to 1 if you have the `select' function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the `setitimer' function. */ +#define HAVE_SETITIMER 1 + +/* Define to 1 if you have the `setpgid' function. */ +#define HAVE_SETPGID 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the `signal' function. */ +#define HAVE_SIGNAL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Check for sig_atomic_t */ +/* #undef HAVE_SIG_ATOMIC_T */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SPAWN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `sysconf' function. */ +#define HAVE_SYSCONF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the `ttyname' function. */ +#define HAVE_TTYNAME 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `unlockpt' function. */ +/* #undef HAVE_UNLOCKPT */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UTIL_H */ + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the `vm_allocate' function. */ +/* #undef HAVE_VM_ALLOCATE */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if the system has the `__builtin_clz' built-in function */ +#define HAVE___BUILTIN_CLZ 1 + +/* Define to 1 if the system has the `__builtin_clzl' built-in function */ +#define HAVE___BUILTIN_CLZL 1 + +/* Define to 1 if the system has the `__builtin_clzll' built-in function */ +#define HAVE___BUILTIN_CLZLL 1 + +/* Define to 1 if the system has the `__builtin_mul_overflow' built-in + function */ +#define HAVE___BUILTIN_MUL_OVERFLOW 1 + +/* Define to 1 if the system has the `__builtin_popcountl' built-in function + */ +#define HAVE___BUILTIN_POPCOUNTL 1 + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "support@gap-system.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GAP" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GAP 4.15dev" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "gap-4.15dev" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "https://www.gap-system.org/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "4.15dev" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 8 + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG 8 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 8 + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* define as 1 on Cygwin */ +/* #undef SYS_IS_CYGWIN32 */ + +/* define as 1 on MinGW/Windows */ +/* #undef SYS_IS_MINGW */ + +/* define as 1 on SPARC architecture to flush register windows */ +/* #undef SYS_IS_SPARC */ + +/* define as 1 if we should try and use the __builtin_popcountl function if + available */ +#define USE_POPCNT 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Defined to return type of backtrace(). */ +#define backtrace_size_t int + +/* Define as a signed integer type capable of holding a process identifier. */ +/* #undef pid_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ diff --git a/native-build/build/ffdata.c b/native-build/build/ffdata.c new file mode 100644 index 0000000000..154ea2abae --- /dev/null +++ b/native-build/build/ffdata.c @@ -0,0 +1,2643 @@ +/* This file has been generated by etc/ffgen.c during build, + do not edit */ +#include "ffdata.h" + +/* Entries are ordered by value of p^d; can use binary search + * to find them. Indices start at 1. + */ + +const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 1, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 1, 1, 2, 3, + 1, 1, 5, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 1, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 7, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 5, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 7, 3, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, +}; + +const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 2, 3, 2, 5, 7, + 2, 3, 11, 13, 2, 17, + 19, 23, 5, 3, 29, 31, + 2, 37, 41, 43, 47, 7, + 53, 59, 61, 2, 67, 71, + 73, 79, 3, 83, 89, 97, + 101, 103, 107, 109, 113, 11, + 5, 127, 2, 131, 137, 139, + 149, 151, 157, 163, 167, 13, + 173, 179, 181, 191, 193, 197, + 199, 211, 223, 227, 229, 233, + 239, 241, 3, 251, 2, 257, + 263, 269, 271, 277, 281, 283, + 17, 293, 307, 311, 313, 317, + 331, 337, 7, 347, 349, 353, + 359, 19, 367, 373, 379, 383, + 389, 397, 401, 409, 419, 421, + 431, 433, 439, 443, 449, 457, + 461, 463, 467, 479, 487, 491, + 499, 503, 509, 2, 521, 523, + 23, 541, 547, 557, 563, 569, + 571, 577, 587, 593, 599, 601, + 607, 613, 617, 619, 5, 631, + 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, + 719, 727, 3, 733, 739, 743, + 751, 757, 761, 769, 773, 787, + 797, 809, 811, 821, 823, 827, + 829, 839, 29, 853, 857, 859, + 863, 877, 881, 883, 887, 907, + 911, 919, 929, 937, 941, 947, + 953, 31, 967, 971, 977, 983, + 991, 997, 1009, 1013, 1019, 1021, + 2, 1031, 1033, 1039, 1049, 1051, + 1061, 1063, 1069, 1087, 1091, 1093, + 1097, 1103, 1109, 1117, 1123, 1129, + 1151, 1153, 1163, 1171, 1181, 1187, + 1193, 1201, 1213, 1217, 1223, 1229, + 1231, 1237, 1249, 1259, 1277, 1279, + 1283, 1289, 1291, 1297, 1301, 1303, + 1307, 1319, 1321, 1327, 11, 1361, + 1367, 37, 1373, 1381, 1399, 1409, + 1423, 1427, 1429, 1433, 1439, 1447, + 1451, 1453, 1459, 1471, 1481, 1483, + 1487, 1489, 1493, 1499, 1511, 1523, + 1531, 1543, 1549, 1553, 1559, 1567, + 1571, 1579, 1583, 1597, 1601, 1607, + 1609, 1613, 1619, 1621, 1627, 1637, + 1657, 1663, 1667, 1669, 41, 1693, + 1697, 1699, 1709, 1721, 1723, 1733, + 1741, 1747, 1753, 1759, 1777, 1783, + 1787, 1789, 1801, 1811, 1823, 1831, + 1847, 43, 1861, 1867, 1871, 1873, + 1877, 1879, 1889, 1901, 1907, 1913, + 1931, 1933, 1949, 1951, 1973, 1979, + 1987, 1993, 1997, 1999, 2003, 2011, + 2017, 2027, 2029, 2039, 2, 2053, + 2063, 2069, 2081, 2083, 2087, 2089, + 2099, 2111, 2113, 2129, 2131, 2137, + 2141, 2143, 2153, 2161, 2179, 3, + 13, 2203, 2207, 47, 2213, 2221, + 2237, 2239, 2243, 2251, 2267, 2269, + 2273, 2281, 2287, 2293, 2297, 2309, + 2311, 2333, 2339, 2341, 2347, 2351, + 2357, 2371, 2377, 2381, 2383, 2389, + 2393, 2399, 7, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, + 2477, 2503, 2521, 2531, 2539, 2543, + 2549, 2551, 2557, 2579, 2591, 2593, + 2609, 2617, 2621, 2633, 2647, 2657, + 2659, 2663, 2671, 2677, 2683, 2687, + 2689, 2693, 2699, 2707, 2711, 2713, + 2719, 2729, 2731, 2741, 2749, 2753, + 2767, 2777, 2789, 2791, 2797, 2801, + 2803, 53, 2819, 2833, 2837, 2843, + 2851, 2857, 2861, 2879, 2887, 2897, + 2903, 2909, 2917, 2927, 2939, 2953, + 2957, 2963, 2969, 2971, 2999, 3001, + 3011, 3019, 3023, 3037, 3041, 3049, + 3061, 3067, 3079, 3083, 3089, 3109, + 3119, 3121, 5, 3137, 3163, 3167, + 3169, 3181, 3187, 3191, 3203, 3209, + 3217, 3221, 3229, 3251, 3253, 3257, + 3259, 3271, 3299, 3301, 3307, 3313, + 3319, 3323, 3329, 3331, 3343, 3347, + 3359, 3361, 3371, 3373, 3389, 3391, + 3407, 3413, 3433, 3449, 3457, 3461, + 3463, 3467, 3469, 59, 3491, 3499, + 3511, 3517, 3527, 3529, 3533, 3539, + 3541, 3547, 3557, 3559, 3571, 3581, + 3583, 3593, 3607, 3613, 3617, 3623, + 3631, 3637, 3643, 3659, 3671, 3673, + 3677, 3691, 3697, 3701, 3709, 3719, + 61, 3727, 3733, 3739, 3761, 3767, + 3769, 3779, 3793, 3797, 3803, 3821, + 3823, 3833, 3847, 3851, 3853, 3863, + 3877, 3881, 3889, 3907, 3911, 3917, + 3919, 3923, 3929, 3931, 3943, 3947, + 3967, 3989, 4001, 4003, 4007, 4013, + 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 2, 4099, + 4111, 4127, 4129, 4133, 4139, 4153, + 4157, 4159, 4177, 4201, 4211, 4217, + 4219, 4229, 4231, 4241, 4243, 4253, + 4259, 4261, 4271, 4273, 4283, 4289, + 4297, 4327, 4337, 4339, 4349, 4357, + 4363, 4373, 4391, 4397, 4409, 4421, + 4423, 4441, 4447, 4451, 4457, 4463, + 4481, 4483, 67, 4493, 4507, 4513, + 4517, 4519, 4523, 4547, 4549, 4561, + 4567, 4583, 4591, 4597, 4603, 4621, + 4637, 4639, 4643, 4649, 4651, 4657, + 4663, 4673, 4679, 4691, 4703, 4721, + 4723, 4729, 4733, 4751, 4759, 4783, + 4787, 4789, 4793, 4799, 4801, 4813, + 4817, 4831, 4861, 4871, 4877, 4889, + 4903, 4909, 17, 4919, 4931, 4933, + 4937, 4943, 4951, 4957, 4967, 4969, + 4973, 4987, 4993, 4999, 5003, 5009, + 5011, 5021, 5023, 5039, 71, 5051, + 5059, 5077, 5081, 5087, 5099, 5101, + 5107, 5113, 5119, 5147, 5153, 5167, + 5171, 5179, 5189, 5197, 5209, 5227, + 5231, 5233, 5237, 5261, 5273, 5279, + 5281, 5297, 5303, 5309, 5323, 73, + 5333, 5347, 5351, 5381, 5387, 5393, + 5399, 5407, 5413, 5417, 5419, 5431, + 5437, 5441, 5443, 5449, 5471, 5477, + 5479, 5483, 5501, 5503, 5507, 5519, + 5521, 5527, 5531, 5557, 5563, 5569, + 5573, 5581, 5591, 5623, 5639, 5641, + 5647, 5651, 5653, 5657, 5659, 5669, + 5683, 5689, 5693, 5701, 5711, 5717, + 5737, 5741, 5743, 5749, 5779, 5783, + 5791, 5801, 5807, 5813, 5821, 5827, + 5839, 5843, 5849, 5851, 5857, 5861, + 5867, 5869, 5879, 5881, 5897, 5903, + 5923, 5927, 5939, 5953, 5981, 5987, + 6007, 6011, 6029, 6037, 6043, 6047, + 6053, 6067, 6073, 6079, 6089, 6091, + 6101, 6113, 6121, 6131, 6133, 6143, + 6151, 6163, 6173, 6197, 6199, 6203, + 6211, 6217, 6221, 6229, 79, 6247, + 6257, 6263, 6269, 6271, 6277, 6287, + 6299, 6301, 6311, 6317, 6323, 6329, + 6337, 6343, 6353, 6359, 6361, 6367, + 6373, 6379, 6389, 6397, 6421, 6427, + 6449, 6451, 6469, 6473, 6481, 6491, + 6521, 6529, 6547, 6551, 6553, 3, + 6563, 6569, 6571, 6577, 6581, 6599, + 6607, 6619, 6637, 6653, 6659, 6661, + 6673, 6679, 6689, 6691, 6701, 6703, + 6709, 6719, 6733, 6737, 6761, 6763, + 6779, 6781, 6791, 6793, 6803, 6823, + 6827, 6829, 6833, 6841, 6857, 19, + 6863, 6869, 6871, 6883, 83, 6899, + 6907, 6911, 6917, 6947, 6949, 6959, + 6961, 6967, 6971, 6977, 6983, 6991, + 6997, 7001, 7013, 7019, 7027, 7039, + 7043, 7057, 7069, 7079, 7103, 7109, + 7121, 7127, 7129, 7151, 7159, 7177, + 7187, 7193, 7207, 7211, 7213, 7219, + 7229, 7237, 7243, 7247, 7253, 7283, + 7297, 7307, 7309, 7321, 7331, 7333, + 7349, 7351, 7369, 7393, 7411, 7417, + 7433, 7451, 7457, 7459, 7477, 7481, + 7487, 7489, 7499, 7507, 7517, 7523, + 7529, 7537, 7541, 7547, 7549, 7559, + 7561, 7573, 7577, 7583, 7589, 7591, + 7603, 7607, 7621, 7639, 7643, 7649, + 7669, 7673, 7681, 7687, 7691, 7699, + 7703, 7717, 7723, 7727, 7741, 7753, + 7757, 7759, 7789, 7793, 7817, 7823, + 7829, 7841, 7853, 7867, 7873, 7877, + 7879, 7883, 7901, 7907, 7919, 89, + 7927, 7933, 7937, 7949, 7951, 7963, + 7993, 8009, 8011, 8017, 8039, 8053, + 8059, 8069, 8081, 8087, 8089, 8093, + 8101, 8111, 8117, 8123, 8147, 8161, + 8167, 8171, 8179, 8191, 2, 8209, + 8219, 8221, 8231, 8233, 8237, 8243, + 8263, 8269, 8273, 8287, 8291, 8293, + 8297, 8311, 8317, 8329, 8353, 8363, + 8369, 8377, 8387, 8389, 8419, 8423, + 8429, 8431, 8443, 8447, 8461, 8467, + 8501, 8513, 8521, 8527, 8537, 8539, + 8543, 8563, 8573, 8581, 8597, 8599, + 8609, 8623, 8627, 8629, 8641, 8647, + 8663, 8669, 8677, 8681, 8689, 8693, + 8699, 8707, 8713, 8719, 8731, 8737, + 8741, 8747, 8753, 8761, 8779, 8783, + 8803, 8807, 8819, 8821, 8831, 8837, + 8839, 8849, 8861, 8863, 8867, 8887, + 8893, 8923, 8929, 8933, 8941, 8951, + 8963, 8969, 8971, 8999, 9001, 9007, + 9011, 9013, 9029, 9041, 9043, 9049, + 9059, 9067, 9091, 9103, 9109, 9127, + 9133, 9137, 9151, 9157, 9161, 9173, + 9181, 9187, 9199, 9203, 9209, 9221, + 9227, 9239, 9241, 9257, 9277, 9281, + 9283, 9293, 9311, 9319, 9323, 9337, + 9341, 9343, 9349, 9371, 9377, 9391, + 9397, 9403, 97, 9413, 9419, 9421, + 9431, 9433, 9437, 9439, 9461, 9463, + 9467, 9473, 9479, 9491, 9497, 9511, + 9521, 9533, 9539, 9547, 9551, 9587, + 9601, 9613, 9619, 9623, 9629, 9631, + 9643, 9649, 9661, 9677, 9679, 9689, + 9697, 9719, 9721, 9733, 9739, 9743, + 9749, 9767, 9769, 9781, 9787, 9791, + 9803, 9811, 9817, 9829, 9833, 9839, + 9851, 9857, 9859, 9871, 9883, 9887, + 9901, 9907, 9923, 9929, 9931, 9941, + 9949, 9967, 9973, 10007, 10009, 10037, + 10039, 10061, 10067, 10069, 10079, 10091, + 10093, 10099, 10103, 10111, 10133, 10139, + 10141, 10151, 10159, 10163, 10169, 10177, + 10181, 10193, 101, 10211, 10223, 10243, + 10247, 10253, 10259, 10267, 10271, 10273, + 10289, 10301, 10303, 10313, 10321, 10331, + 10333, 10337, 10343, 10357, 10369, 10391, + 10399, 10427, 10429, 10433, 10453, 10457, + 10459, 10463, 10477, 10487, 10499, 10501, + 10513, 10529, 10531, 10559, 10567, 10589, + 10597, 10601, 10607, 103, 10613, 10627, + 10631, 10639, 10651, 10657, 10663, 10667, + 10687, 10691, 10709, 10711, 10723, 10729, + 10733, 10739, 10753, 10771, 10781, 10789, + 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, + 10909, 10937, 10939, 10949, 10957, 10973, + 10979, 10987, 10993, 11003, 11027, 11047, + 11057, 11059, 11069, 11071, 11083, 11087, + 11093, 11113, 11117, 11119, 11131, 11149, + 11159, 11161, 11171, 11173, 11177, 11197, + 11213, 11239, 11243, 11251, 11257, 11261, + 11273, 11279, 11287, 11299, 11311, 11317, + 11321, 11329, 11351, 11353, 11369, 11383, + 11393, 11399, 11411, 11423, 11437, 11443, + 11447, 107, 11467, 11471, 11483, 11489, + 11491, 11497, 11503, 11519, 11527, 11549, + 11551, 11579, 11587, 11593, 11597, 11617, + 11621, 11633, 11657, 11677, 11681, 11689, + 11699, 11701, 11717, 11719, 11731, 11743, + 11777, 11779, 11783, 11789, 11801, 11807, + 11813, 11821, 11827, 11831, 11833, 11839, + 11863, 11867, 109, 11887, 11897, 11903, + 11909, 11923, 11927, 11933, 11939, 11941, + 11953, 11959, 11969, 11971, 11981, 11987, + 12007, 12011, 12037, 12041, 12043, 12049, + 12071, 12073, 12097, 12101, 12107, 12109, + 12113, 12119, 12143, 12149, 12157, 12161, + 12163, 23, 12197, 12203, 12211, 12227, + 12239, 12241, 12251, 12253, 12263, 12269, + 12277, 12281, 12289, 12301, 12323, 12329, + 12343, 12347, 12373, 12377, 12379, 12391, + 12401, 12409, 12413, 12421, 12433, 12437, + 12451, 12457, 12473, 12479, 12487, 12491, + 12497, 12503, 12511, 12517, 12527, 12539, + 12541, 12547, 12553, 12569, 12577, 12583, + 12589, 12601, 12611, 12613, 12619, 12637, + 12641, 12647, 12653, 12659, 12671, 12689, + 12697, 12703, 12713, 12721, 12739, 12743, + 12757, 12763, 113, 12781, 12791, 12799, + 12809, 12821, 12823, 12829, 12841, 12853, + 12889, 12893, 12899, 12907, 12911, 12917, + 12919, 12923, 12941, 12953, 12959, 12967, + 12973, 12979, 12983, 13001, 13003, 13007, + 13009, 13033, 13037, 13043, 13049, 13063, + 13093, 13099, 13103, 13109, 13121, 13127, + 13147, 13151, 13159, 13163, 13171, 13177, + 13183, 13187, 13217, 13219, 13229, 13241, + 13249, 13259, 13267, 13291, 13297, 13309, + 13313, 13327, 13331, 13337, 13339, 13367, + 13381, 13397, 13399, 13411, 13417, 13421, + 13441, 13451, 13457, 13463, 13469, 13477, + 13487, 13499, 13513, 13523, 13537, 13553, + 13567, 13577, 13591, 13597, 13613, 13619, + 13627, 13633, 13649, 13669, 13679, 13681, + 13687, 13691, 13693, 13697, 13709, 13711, + 13721, 13723, 13729, 13751, 13757, 13759, + 13763, 13781, 13789, 13799, 13807, 13829, + 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, + 13931, 13933, 13963, 13967, 13997, 13999, + 14009, 14011, 14029, 14033, 14051, 14057, + 14071, 14081, 14083, 14087, 14107, 14143, + 14149, 14153, 14159, 14173, 14177, 14197, + 14207, 14221, 14243, 14249, 14251, 14281, + 14293, 14303, 14321, 14323, 14327, 14341, + 14347, 14369, 14387, 14389, 14401, 14407, + 14411, 14419, 14423, 14431, 14437, 14447, + 14449, 14461, 14479, 14489, 14503, 14519, + 14533, 14537, 14543, 14549, 14551, 14557, + 14561, 14563, 14591, 14593, 14621, 14627, + 14629, 14633, 14639, 11, 14653, 14657, + 14669, 14683, 14699, 14713, 14717, 14723, + 14731, 14737, 14741, 14747, 14753, 14759, + 14767, 14771, 14779, 14783, 14797, 14813, + 14821, 14827, 14831, 14843, 14851, 14867, + 14869, 14879, 14887, 14891, 14897, 14923, + 14929, 14939, 14947, 14951, 14957, 14969, + 14983, 15013, 15017, 15031, 15053, 15061, + 15073, 15077, 15083, 15091, 15101, 15107, + 15121, 15131, 15137, 15139, 15149, 15161, + 15173, 15187, 15193, 15199, 15217, 15227, + 15233, 15241, 15259, 15263, 15269, 15271, + 15277, 15287, 15289, 15299, 15307, 15313, + 15319, 15329, 15331, 15349, 15359, 15361, + 15373, 15377, 15383, 15391, 15401, 15413, + 15427, 15439, 15443, 15451, 15461, 15467, + 15473, 15493, 15497, 15511, 15527, 15541, + 15551, 15559, 15569, 15581, 15583, 15601, + 15607, 15619, 5, 15629, 15641, 15643, + 15647, 15649, 15661, 15667, 15671, 15679, + 15683, 15727, 15731, 15733, 15737, 15739, + 15749, 15761, 15767, 15773, 15787, 15791, + 15797, 15803, 15809, 15817, 15823, 15859, + 15877, 15881, 15887, 15889, 15901, 15907, + 15913, 15919, 15923, 15937, 15959, 15971, + 15973, 15991, 16001, 16007, 16033, 16057, + 16061, 16063, 16067, 16069, 16073, 16087, + 16091, 16097, 16103, 16111, 16127, 127, + 16139, 16141, 16183, 16187, 16189, 16193, + 16217, 16223, 16229, 16231, 16249, 16253, + 16267, 16273, 16301, 16319, 16333, 16339, + 16349, 16361, 16363, 16369, 16381, 2, + 16411, 16417, 16421, 16427, 16433, 16447, + 16451, 16453, 16477, 16481, 16487, 16493, + 16519, 16529, 16547, 16553, 16561, 16567, + 16573, 16603, 16607, 16619, 16631, 16633, + 16649, 16651, 16657, 16661, 16673, 16691, + 16693, 16699, 16703, 16729, 16741, 16747, + 16759, 16763, 16787, 7, 16811, 16823, + 16829, 16831, 16843, 16871, 16879, 16883, + 16889, 16901, 16903, 16921, 16927, 16931, + 16937, 16943, 16963, 16979, 16981, 16987, + 16993, 17011, 17021, 17027, 17029, 17033, + 17041, 17047, 17053, 17077, 17093, 17099, + 17107, 17117, 17123, 17137, 17159, 131, + 17167, 17183, 17189, 17191, 17203, 17207, + 17209, 17231, 17239, 17257, 17291, 17293, + 17299, 17317, 17321, 17327, 17333, 17341, + 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, + 17449, 17467, 17471, 17477, 17483, 17489, + 17491, 17497, 17509, 17519, 17539, 17551, + 17569, 17573, 17579, 17581, 17597, 17599, + 17609, 17623, 17627, 17657, 17659, 17669, + 17681, 17683, 17707, 17713, 17729, 17737, + 17747, 17749, 17761, 17783, 17789, 17791, + 17807, 17827, 17837, 17839, 17851, 17863, + 17881, 17891, 17903, 17909, 17911, 17921, + 17923, 17929, 17939, 17957, 17959, 17971, + 17977, 17981, 17987, 17989, 18013, 18041, + 18043, 18047, 18049, 18059, 18061, 18077, + 18089, 18097, 18119, 18121, 18127, 18131, + 18133, 18143, 18149, 18169, 18181, 18191, + 18199, 18211, 18217, 18223, 18229, 18233, + 18251, 18253, 18257, 18269, 18287, 18289, + 18301, 18307, 18311, 18313, 18329, 18341, + 18353, 18367, 18371, 18379, 18397, 18401, + 18413, 18427, 18433, 18439, 18443, 18451, + 18457, 18461, 18481, 18493, 18503, 18517, + 18521, 18523, 18539, 18541, 18553, 18583, + 18587, 18593, 18617, 18637, 18661, 18671, + 18679, 18691, 18701, 18713, 18719, 18731, + 18743, 18749, 18757, 137, 18773, 18787, + 18793, 18797, 18803, 18839, 18859, 18869, + 18899, 18911, 18913, 18917, 18919, 18947, + 18959, 18973, 18979, 19001, 19009, 19013, + 19031, 19037, 19051, 19069, 19073, 19079, + 19081, 19087, 19121, 19139, 19141, 19157, + 19163, 19181, 19183, 19207, 19211, 19213, + 19219, 19231, 19237, 19249, 19259, 19267, + 19273, 19289, 19301, 19309, 19319, 139, + 19333, 19373, 19379, 19381, 19387, 19391, + 19403, 19417, 19421, 19423, 19427, 19429, + 19433, 19441, 19447, 19457, 19463, 19469, + 19471, 19477, 19483, 19489, 19501, 19507, + 19531, 19541, 19543, 19553, 19559, 19571, + 19577, 19583, 19597, 19603, 19609, 19661, + 19681, 3, 19687, 19697, 19699, 19709, + 19717, 19727, 19739, 19751, 19753, 19759, + 19763, 19777, 19793, 19801, 19813, 19819, + 19841, 19843, 19853, 19861, 19867, 19889, + 19891, 19913, 19919, 19927, 19937, 19949, + 19961, 19963, 19973, 19979, 19991, 19993, + 19997, 20011, 20021, 20023, 20029, 20047, + 20051, 20063, 20071, 20089, 20101, 20107, + 20113, 20117, 20123, 20129, 20143, 20147, + 20149, 20161, 20173, 20177, 20183, 20201, + 20219, 20231, 20233, 20249, 20261, 20269, + 20287, 20297, 20323, 20327, 20333, 20341, + 20347, 20353, 20357, 20359, 20369, 20389, + 20393, 20399, 20407, 20411, 20431, 20441, + 20443, 20477, 20479, 20483, 20507, 20509, + 20521, 20533, 20543, 20549, 20551, 20563, + 20593, 20599, 20611, 20627, 20639, 20641, + 20663, 20681, 20693, 20707, 20717, 20719, + 20731, 20743, 20747, 20749, 20753, 20759, + 20771, 20773, 20789, 20807, 20809, 20849, + 20857, 20873, 20879, 20887, 20897, 20899, + 20903, 20921, 20929, 20939, 20947, 20959, + 20963, 20981, 20983, 21001, 21011, 21013, + 21017, 21019, 21023, 21031, 21059, 21061, + 21067, 21089, 21101, 21107, 21121, 21139, + 21143, 21149, 21157, 21163, 21169, 21179, + 21187, 21191, 21193, 21211, 21221, 21227, + 21247, 21269, 21277, 21283, 21313, 21317, + 21319, 21323, 21341, 21347, 21377, 21379, + 21383, 21391, 21397, 21401, 21407, 21419, + 21433, 21467, 21481, 21487, 21491, 21493, + 21499, 21503, 21517, 21521, 21523, 21529, + 21557, 21559, 21563, 21569, 21577, 21587, + 21589, 21599, 21601, 21611, 21613, 21617, + 21647, 21649, 21661, 21673, 21683, 21701, + 21713, 21727, 21737, 21739, 21751, 21757, + 21767, 21773, 21787, 21799, 21803, 21817, + 21821, 21839, 21841, 21851, 21859, 21863, + 21871, 21881, 21893, 21911, 21929, 21937, + 21943, 21961, 21977, 21991, 21997, 22003, + 22013, 22027, 22031, 22037, 22039, 22051, + 22063, 22067, 22073, 22079, 22091, 22093, + 22109, 22111, 22123, 22129, 22133, 22147, + 22153, 22157, 22159, 22171, 22189, 22193, + 149, 22229, 22247, 22259, 22271, 22273, + 22277, 22279, 22283, 22291, 22303, 22307, + 22343, 22349, 22367, 22369, 22381, 22391, + 22397, 22409, 22433, 22441, 22447, 22453, + 22469, 22481, 22483, 22501, 22511, 22531, + 22541, 22543, 22549, 22567, 22571, 22573, + 22613, 22619, 22621, 22637, 22639, 22643, + 22651, 22669, 22679, 22691, 22697, 22699, + 22709, 22717, 22721, 22727, 22739, 22741, + 22751, 22769, 22777, 22783, 22787, 151, + 22807, 22811, 22817, 22853, 22859, 22861, + 22871, 22877, 22901, 22907, 22921, 22937, + 22943, 22961, 22963, 22973, 22993, 23003, + 23011, 23017, 23021, 23027, 23029, 23039, + 23041, 23053, 23057, 23059, 23063, 23071, + 23081, 23087, 23099, 23117, 23131, 23143, + 23159, 23167, 23173, 23189, 23197, 23201, + 23203, 23209, 23227, 23251, 23269, 23279, + 23291, 23293, 23297, 23311, 23321, 23327, + 23333, 23339, 23357, 23369, 23371, 23399, + 23417, 23431, 23447, 23459, 23473, 23497, + 23509, 23531, 23537, 23539, 23549, 23557, + 23561, 23563, 23567, 23581, 23593, 23599, + 23603, 23609, 23623, 23627, 23629, 23633, + 23663, 23669, 23671, 23677, 23687, 23689, + 23719, 23741, 23743, 23747, 23753, 23761, + 23767, 23773, 23789, 23801, 23813, 23819, + 23827, 23831, 23833, 23857, 23869, 23873, + 23879, 23887, 23893, 23899, 23909, 23911, + 23917, 23929, 23957, 23971, 23977, 23981, + 23993, 24001, 24007, 24019, 24023, 24029, + 24043, 24049, 24061, 24071, 24077, 24083, + 24091, 24097, 24103, 24107, 24109, 24113, + 24121, 24133, 24137, 24151, 24169, 24179, + 24181, 24197, 24203, 24223, 24229, 24239, + 24247, 24251, 24281, 24317, 24329, 24337, + 24359, 24371, 24373, 24379, 29, 24391, + 24407, 24413, 24419, 24421, 24439, 24443, + 24469, 24473, 24481, 24499, 24509, 24517, + 24527, 24533, 24547, 24551, 24571, 24593, + 24611, 24623, 24631, 157, 24659, 24671, + 24677, 24683, 24691, 24697, 24709, 24733, + 24749, 24763, 24767, 24781, 24793, 24799, + 24809, 24821, 24841, 24847, 24851, 24859, + 24877, 24889, 24907, 24917, 24919, 24923, + 24943, 24953, 24967, 24971, 24977, 24979, + 24989, 25013, 25031, 25033, 25037, 25057, + 25073, 25087, 25097, 25111, 25117, 25121, + 25127, 25147, 25153, 25163, 25169, 25171, + 25183, 25189, 25219, 25229, 25237, 25243, + 25247, 25253, 25261, 25301, 25303, 25307, + 25309, 25321, 25339, 25343, 25349, 25357, + 25367, 25373, 25391, 25409, 25411, 25423, + 25439, 25447, 25453, 25457, 25463, 25469, + 25471, 25523, 25537, 25541, 25561, 25577, + 25579, 25583, 25589, 25601, 25603, 25609, + 25621, 25633, 25639, 25643, 25657, 25667, + 25673, 25679, 25693, 25703, 25717, 25733, + 25741, 25747, 25759, 25763, 25771, 25793, + 25799, 25801, 25819, 25841, 25847, 25849, + 25867, 25873, 25889, 25903, 25913, 25919, + 25931, 25933, 25939, 25943, 25951, 25969, + 25981, 25997, 25999, 26003, 26017, 26021, + 26029, 26041, 26053, 26083, 26099, 26107, + 26111, 26113, 26119, 26141, 26153, 26161, + 26171, 26177, 26183, 26189, 26203, 26209, + 26227, 26237, 26249, 26251, 26261, 26263, + 26267, 26293, 26297, 26309, 26317, 26321, + 26339, 26347, 26357, 26371, 26387, 26393, + 26399, 26407, 26417, 26423, 26431, 26437, + 26449, 26459, 26479, 26489, 26497, 26501, + 26513, 26539, 26557, 26561, 163, 26573, + 26591, 26597, 26627, 26633, 26641, 26647, + 26669, 26681, 26683, 26687, 26693, 26699, + 26701, 26711, 26713, 26717, 26723, 26729, + 26731, 26737, 26759, 26777, 26783, 26801, + 26813, 26821, 26833, 26839, 26849, 26861, + 26863, 26879, 26881, 26891, 26893, 26903, + 26921, 26927, 26947, 26951, 26953, 26959, + 26981, 26987, 26993, 27011, 27017, 27031, + 27043, 27059, 27061, 27067, 27073, 27077, + 27091, 27103, 27107, 27109, 27127, 27143, + 27179, 27191, 27197, 27211, 27239, 27241, + 27253, 27259, 27271, 27277, 27281, 27283, + 27299, 27329, 27337, 27361, 27367, 27397, + 27407, 27409, 27427, 27431, 27437, 27449, + 27457, 27479, 27481, 27487, 27509, 27527, + 27529, 27539, 27541, 27551, 27581, 27583, + 27611, 27617, 27631, 27647, 27653, 27673, + 27689, 27691, 27697, 27701, 27733, 27737, + 27739, 27743, 27749, 27751, 27763, 27767, + 27773, 27779, 27791, 27793, 27799, 27803, + 27809, 27817, 27823, 27827, 27847, 27851, + 27883, 167, 27893, 27901, 27917, 27919, + 27941, 27943, 27947, 27953, 27961, 27967, + 27983, 27997, 28001, 28019, 28027, 28031, + 28051, 28057, 28069, 28081, 28087, 28097, + 28099, 28109, 28111, 28123, 28151, 28163, + 28181, 28183, 28201, 28211, 28219, 28229, + 28277, 28279, 28283, 28289, 28297, 28307, + 28309, 28319, 28349, 28351, 28387, 28393, + 28403, 28409, 28411, 28429, 28433, 28439, + 28447, 28463, 28477, 28493, 28499, 28513, + 28517, 28537, 28541, 28547, 28549, 28559, + 13, 28571, 28573, 28579, 28591, 28597, + 28603, 28607, 28619, 28621, 28627, 28631, + 28643, 28649, 28657, 28661, 28663, 28669, + 28687, 28697, 28703, 28711, 28723, 28729, + 28751, 28753, 28759, 28771, 28789, 28793, + 28807, 28813, 28817, 28837, 28843, 28859, + 28867, 28871, 28879, 28901, 28909, 28921, + 28927, 28933, 28949, 28961, 28979, 29009, + 29017, 29021, 29023, 29027, 29033, 29059, + 29063, 29077, 29101, 29123, 29129, 29131, + 29137, 29147, 29153, 29167, 29173, 29179, + 29191, 29201, 29207, 29209, 29221, 29231, + 29243, 29251, 29269, 29287, 29297, 29303, + 29311, 29327, 29333, 29339, 29347, 29363, + 29383, 29387, 29389, 29399, 29401, 29411, + 29423, 29429, 29437, 29443, 29453, 29473, + 29483, 29501, 29527, 29531, 29537, 29567, + 29569, 29573, 29581, 29587, 29599, 29611, + 29629, 29633, 29641, 29663, 29669, 29671, + 29683, 29717, 29723, 29741, 29753, 29759, + 29761, 29789, 31, 29803, 29819, 29833, + 29837, 29851, 29863, 29867, 29873, 29879, + 29881, 29917, 29921, 29927, 173, 29947, + 29959, 29983, 29989, 30011, 30013, 30029, + 30047, 30059, 30071, 30089, 30091, 30097, + 30103, 30109, 30113, 30119, 30133, 30137, + 30139, 30161, 30169, 30181, 30187, 30197, + 30203, 30211, 30223, 30241, 30253, 30259, + 30269, 30271, 30293, 30307, 30313, 30319, + 30323, 30341, 30347, 30367, 30389, 30391, + 30403, 30427, 30431, 30449, 30467, 30469, + 30491, 30493, 30497, 30509, 30517, 30529, + 30539, 30553, 30557, 30559, 30577, 30593, + 30631, 30637, 30643, 30649, 30661, 30671, + 30677, 30689, 30697, 30703, 30707, 30713, + 30727, 30757, 30763, 30773, 30781, 30803, + 30809, 30817, 30829, 30839, 30841, 30851, + 30853, 30859, 30869, 30871, 30881, 30893, + 30911, 30931, 30937, 30941, 30949, 30971, + 30977, 30983, 31013, 31019, 31033, 31039, + 31051, 31063, 31069, 31079, 31081, 31091, + 31121, 31123, 31139, 31147, 31151, 31153, + 31159, 31177, 31181, 31183, 31189, 31193, + 31219, 31223, 31231, 31237, 31247, 31249, + 31253, 31259, 31267, 31271, 31277, 31307, + 31319, 31321, 31327, 31333, 31337, 31357, + 31379, 31387, 31391, 31393, 31397, 31469, + 31477, 31481, 31489, 31511, 31513, 31517, + 31531, 31541, 31543, 31547, 31567, 31573, + 31583, 31601, 31607, 31627, 31643, 31649, + 31657, 31663, 31667, 31687, 31699, 31721, + 31723, 31727, 31729, 31741, 31751, 31769, + 31771, 31793, 31799, 31817, 31847, 31849, + 31859, 31873, 31883, 31891, 31907, 31957, + 31963, 31973, 31981, 31991, 32003, 32009, + 32027, 32029, 179, 32051, 32057, 32059, + 32063, 32069, 32077, 32083, 32089, 32099, + 32117, 32119, 32141, 32143, 32159, 32173, + 32183, 32189, 32191, 32203, 32213, 32233, + 32237, 32251, 32257, 32261, 32297, 32299, + 32303, 32309, 32321, 32323, 32327, 32341, + 32353, 32359, 32363, 32369, 32371, 32377, + 32381, 32401, 32411, 32413, 32423, 32429, + 32441, 32443, 32467, 32479, 32491, 32497, + 32503, 32507, 32531, 32533, 32537, 32561, + 32563, 32569, 32573, 32579, 32587, 32603, + 32609, 32611, 32621, 32633, 32647, 32653, + 32687, 32693, 32707, 32713, 32717, 32719, + 32749, 181, 2, 32771, 32779, 32783, + 32789, 32797, 32801, 32803, 32831, 32833, + 32839, 32843, 32869, 32887, 32909, 32911, + 32917, 32933, 32939, 32941, 32957, 32969, + 32971, 32983, 32987, 32993, 32999, 33013, + 33023, 33029, 33037, 33049, 33053, 33071, + 33073, 33083, 33091, 33107, 33113, 33119, + 33149, 33151, 33161, 33179, 33181, 33191, + 33199, 33203, 33211, 33223, 33247, 33287, + 33289, 33301, 33311, 33317, 33329, 33331, + 33343, 33347, 33349, 33353, 33359, 33377, + 33391, 33403, 33409, 33413, 33427, 33457, + 33461, 33469, 33479, 33487, 33493, 33503, + 33521, 33529, 33533, 33547, 33563, 33569, + 33577, 33581, 33587, 33589, 33599, 33601, + 33613, 33617, 33619, 33623, 33629, 33637, + 33641, 33647, 33679, 33703, 33713, 33721, + 33739, 33749, 33751, 33757, 33767, 33769, + 33773, 33791, 33797, 33809, 33811, 33827, + 33829, 33851, 33857, 33863, 33871, 33889, + 33893, 33911, 33923, 33931, 33937, 33941, + 33961, 33967, 33997, 34019, 34031, 34033, + 34039, 34057, 34061, 34123, 34127, 34129, + 34141, 34147, 34157, 34159, 34171, 34183, + 34211, 34213, 34217, 34231, 34253, 34259, + 34261, 34267, 34273, 34283, 34297, 34301, + 34303, 34313, 34319, 34327, 34337, 34351, + 34361, 34367, 34369, 34381, 34403, 34421, + 34429, 34439, 34457, 34469, 34471, 34483, + 34487, 34499, 34501, 34511, 34513, 34519, + 34537, 34543, 34549, 34583, 34589, 34591, + 34603, 34607, 34613, 34631, 34649, 34651, + 34667, 34673, 34679, 34687, 34693, 34703, + 34721, 34729, 34739, 34747, 34757, 34759, + 34763, 34781, 34807, 34819, 34841, 34843, + 34847, 34849, 34871, 34877, 34883, 34897, + 34913, 34919, 34939, 34949, 34961, 34963, + 34981, 35023, 35027, 35051, 35053, 35059, + 35069, 35081, 35083, 35089, 35099, 35107, + 35111, 35117, 35129, 35141, 35149, 35153, + 35159, 35171, 35201, 35221, 35227, 35251, + 35257, 35267, 35279, 35281, 35291, 35311, + 35317, 35323, 35327, 35339, 35353, 35363, + 35381, 35393, 35401, 35407, 35419, 35423, + 35437, 35447, 35449, 35461, 35491, 35507, + 35509, 35521, 35527, 35531, 35533, 35537, + 35543, 35569, 35573, 35591, 35593, 35597, + 35603, 35617, 35671, 35677, 35729, 35731, + 35747, 35753, 35759, 35771, 35797, 35801, + 35803, 35809, 35831, 35837, 35839, 35851, + 35863, 35869, 35879, 35897, 35899, 35911, + 35923, 35933, 35951, 35963, 35969, 35977, + 35983, 35993, 35999, 36007, 36011, 36013, + 36017, 36037, 36061, 36067, 36073, 36083, + 36097, 36107, 36109, 36131, 36137, 36151, + 36161, 36187, 36191, 36209, 36217, 36229, + 36241, 36251, 36263, 36269, 36277, 36293, + 36299, 36307, 36313, 36319, 36341, 36343, + 36353, 36373, 36383, 36389, 36433, 36451, + 36457, 36467, 36469, 36473, 36479, 191, + 36493, 36497, 36523, 36527, 36529, 36541, + 36551, 36559, 36563, 36571, 36583, 36587, + 36599, 36607, 36629, 36637, 36643, 36653, + 36671, 36677, 36683, 36691, 36697, 36709, + 36713, 36721, 36739, 36749, 36761, 36767, + 36779, 36781, 36787, 36791, 36793, 36809, + 36821, 36833, 36847, 36857, 36871, 36877, + 36887, 36899, 36901, 36913, 36919, 36923, + 36929, 36931, 36943, 36947, 36973, 36979, + 36997, 37003, 37013, 37019, 37021, 37039, + 37049, 37057, 37061, 37087, 37097, 37117, + 37123, 37139, 37159, 37171, 37181, 37189, + 37199, 37201, 37217, 37223, 37243, 193, + 37253, 37273, 37277, 37307, 37309, 37313, + 37321, 37337, 37339, 37357, 37361, 37363, + 37369, 37379, 37397, 37409, 37423, 37441, + 37447, 37463, 37483, 37489, 37493, 37501, + 37507, 37511, 37517, 37529, 37537, 37547, + 37549, 37561, 37567, 37571, 37573, 37579, + 37589, 37591, 37607, 37619, 37633, 37643, + 37649, 37657, 37663, 37691, 37693, 37699, + 37717, 37747, 37781, 37783, 37799, 37811, + 37813, 37831, 37847, 37853, 37861, 37871, + 37879, 37889, 37897, 37907, 37951, 37957, + 37963, 37967, 37987, 37991, 37993, 37997, + 38011, 38039, 38047, 38053, 38069, 38083, + 38113, 38119, 38149, 38153, 38167, 38177, + 38183, 38189, 38197, 38201, 38219, 38231, + 38237, 38239, 38261, 38273, 38281, 38287, + 38299, 38303, 38317, 38321, 38327, 38329, + 38333, 38351, 38371, 38377, 38393, 38431, + 38447, 38449, 38453, 38459, 38461, 38501, + 38543, 38557, 38561, 38567, 38569, 38593, + 38603, 38609, 38611, 38629, 38639, 38651, + 38653, 38669, 38671, 38677, 38693, 38699, + 38707, 38711, 38713, 38723, 38729, 38737, + 38747, 38749, 38767, 38783, 38791, 38803, + 197, 38821, 38833, 38839, 38851, 38861, + 38867, 38873, 38891, 38903, 38917, 38921, + 38923, 38933, 38953, 38959, 38971, 38977, + 38993, 39019, 39023, 39041, 39043, 39047, + 39079, 39089, 39097, 39103, 39107, 39113, + 39119, 39133, 39139, 39157, 39161, 39163, + 39181, 39191, 39199, 39209, 39217, 39227, + 39229, 39233, 39239, 39241, 39251, 39293, + 39301, 39313, 39317, 39323, 39341, 39343, + 39359, 39367, 39371, 39373, 39383, 39397, + 39409, 39419, 39439, 39443, 39451, 39461, + 39499, 39503, 39509, 39511, 39521, 39541, + 39551, 39563, 39569, 39581, 199, 39607, + 39619, 39623, 39631, 39659, 39667, 39671, + 39679, 39703, 39709, 39719, 39727, 39733, + 39749, 39761, 39769, 39779, 39791, 39799, + 39821, 39827, 39829, 39839, 39841, 39847, + 39857, 39863, 39869, 39877, 39883, 39887, + 39901, 39929, 39937, 39953, 39971, 39979, + 39983, 39989, 40009, 40013, 40031, 40037, + 40039, 40063, 40087, 40093, 40099, 40111, + 40123, 40127, 40129, 40151, 40153, 40163, + 40169, 40177, 40189, 40193, 40213, 40231, + 40237, 40241, 40253, 40277, 40283, 40289, + 40343, 40351, 40357, 40361, 40387, 40423, + 40427, 40429, 40433, 40459, 40471, 40483, + 40487, 40493, 40499, 40507, 40519, 40529, + 40531, 40543, 40559, 40577, 40583, 40591, + 40597, 40609, 40627, 40637, 40639, 40693, + 40697, 40699, 40709, 40739, 40751, 40759, + 40763, 40771, 40787, 40801, 40813, 40819, + 40823, 40829, 40841, 40847, 40849, 40853, + 40867, 40879, 40883, 40897, 40903, 40927, + 40933, 40939, 40949, 40961, 40973, 40993, + 41011, 41017, 41023, 41039, 41047, 41051, + 41057, 41077, 41081, 41113, 41117, 41131, + 41141, 41143, 41149, 41161, 41177, 41179, + 41183, 41189, 41201, 41203, 41213, 41221, + 41227, 41231, 41233, 41243, 41257, 41263, + 41269, 41281, 41299, 41333, 41341, 41351, + 41357, 41381, 41387, 41389, 41399, 41411, + 41413, 41443, 41453, 41467, 41479, 41491, + 41507, 41513, 41519, 41521, 41539, 41543, + 41549, 41579, 41593, 41597, 41603, 41609, + 41611, 41617, 41621, 41627, 41641, 41647, + 41651, 41659, 41669, 41681, 41687, 41719, + 41729, 41737, 41759, 41761, 41771, 41777, + 41801, 41809, 41813, 41843, 41849, 41851, + 41863, 41879, 41887, 41893, 41897, 41903, + 41911, 41927, 41941, 41947, 41953, 41957, + 41959, 41969, 41981, 41983, 41999, 42013, + 42017, 42019, 42023, 42043, 42061, 42071, + 42073, 42083, 42089, 42101, 42131, 42139, + 42157, 42169, 42179, 42181, 42187, 42193, + 42197, 42209, 42221, 42223, 42227, 42239, + 42257, 42281, 42283, 42293, 42299, 42307, + 42323, 42331, 42337, 42349, 42359, 42373, + 42379, 42391, 42397, 42403, 42407, 42409, + 42433, 42437, 42443, 42451, 42457, 42461, + 42463, 42467, 42473, 42487, 42491, 42499, + 42509, 42533, 42557, 42569, 42571, 42577, + 42589, 42611, 42641, 42643, 42649, 42667, + 42677, 42683, 42689, 42697, 42701, 42703, + 42709, 42719, 42727, 42737, 42743, 42751, + 42767, 42773, 42787, 42793, 42797, 42821, + 42829, 42839, 42841, 42853, 42859, 42863, + 42899, 42901, 42923, 42929, 42937, 42943, + 42953, 42961, 42967, 42979, 42989, 43003, + 43013, 43019, 43037, 43049, 43051, 43063, + 43067, 43093, 43103, 43117, 43133, 43151, + 43159, 43177, 43189, 43201, 43207, 43223, + 43237, 43261, 43271, 43283, 43291, 43313, + 43319, 43321, 43331, 43391, 43397, 43399, + 43403, 43411, 43427, 43441, 43451, 43457, + 43481, 43487, 43499, 43517, 43541, 43543, + 43573, 43577, 43579, 43591, 43597, 43607, + 43609, 43613, 43627, 43633, 43649, 43651, + 43661, 43669, 43691, 43711, 43717, 43721, + 43753, 43759, 43777, 43781, 43783, 43787, + 43789, 43793, 43801, 43853, 43867, 43889, + 43891, 43913, 43933, 43943, 43951, 43961, + 43963, 43969, 43973, 43987, 43991, 43997, + 44017, 44021, 44027, 44029, 44041, 44053, + 44059, 44071, 44087, 44089, 44101, 44111, + 44119, 44123, 44129, 44131, 44159, 44171, + 44179, 44189, 44201, 44203, 44207, 44221, + 44249, 44257, 44263, 44267, 44269, 44273, + 44279, 44281, 44293, 44351, 44357, 44371, + 44381, 44383, 44389, 44417, 44449, 44453, + 44483, 44491, 44497, 44501, 44507, 44519, + 211, 44531, 44533, 44537, 44543, 44549, + 44563, 44579, 44587, 44617, 44621, 44623, + 44633, 44641, 44647, 44651, 44657, 44683, + 44687, 44699, 44701, 44711, 44729, 44741, + 44753, 44771, 44773, 44777, 44789, 44797, + 44809, 44819, 44839, 44843, 44851, 44867, + 44879, 44887, 44893, 44909, 44917, 44927, + 44939, 44953, 44959, 44963, 44971, 44983, + 44987, 45007, 45013, 45053, 45061, 45077, + 45083, 45119, 45121, 45127, 45131, 45137, + 45139, 45161, 45179, 45181, 45191, 45197, + 45233, 45247, 45259, 45263, 45281, 45289, + 45293, 45307, 45317, 45319, 45329, 45337, + 45341, 45343, 45361, 45377, 45389, 45403, + 45413, 45427, 45433, 45439, 45481, 45491, + 45497, 45503, 45523, 45533, 45541, 45553, + 45557, 45569, 45587, 45589, 45599, 45613, + 45631, 45641, 45659, 45667, 45673, 45677, + 45691, 45697, 45707, 45737, 45751, 45757, + 45763, 45767, 45779, 45817, 45821, 45823, + 45827, 45833, 45841, 45853, 45863, 45869, + 45887, 45893, 45943, 45949, 45953, 45959, + 45971, 45979, 45989, 46021, 46027, 46049, + 46051, 46061, 46073, 46091, 46093, 46099, + 46103, 46133, 46141, 46147, 46153, 46171, + 46181, 46183, 46187, 46199, 46219, 46229, + 46237, 46261, 46271, 46273, 46279, 46301, + 46307, 46309, 46327, 46337, 46349, 46351, + 46381, 46399, 46411, 46439, 46441, 46447, + 46451, 46457, 46471, 46477, 46489, 46499, + 46507, 46511, 46523, 46549, 46559, 46567, + 46573, 46589, 46591, 46601, 46619, 46633, + 46639, 46643, 46649, 46663, 46679, 46681, + 46687, 46691, 46703, 46723, 46727, 46747, + 46751, 46757, 46769, 46771, 46807, 46811, + 46817, 46819, 46829, 46831, 46853, 46861, + 46867, 46877, 46889, 46901, 46919, 46933, + 46957, 46993, 46997, 47017, 47041, 47051, + 47057, 47059, 47087, 47093, 47111, 47119, + 47123, 47129, 47137, 47143, 47147, 47149, + 47161, 47189, 47207, 47221, 47237, 47251, + 47269, 47279, 47287, 47293, 47297, 47303, + 47309, 47317, 47339, 47351, 47353, 47363, + 47381, 47387, 47389, 47407, 47417, 47419, + 47431, 47441, 47459, 47491, 47497, 47501, + 47507, 47513, 47521, 47527, 47533, 47543, + 47563, 47569, 47581, 47591, 47599, 47609, + 47623, 47629, 47639, 47653, 47657, 47659, + 47681, 47699, 47701, 47711, 47713, 47717, + 47737, 47741, 47743, 47777, 47779, 47791, + 47797, 47807, 47809, 47819, 47837, 47843, + 47857, 47869, 47881, 47903, 47911, 47917, + 47933, 47939, 47947, 47951, 47963, 47969, + 47977, 47981, 48017, 48023, 48029, 48049, + 48073, 48079, 48091, 48109, 48119, 48121, + 48131, 48157, 48163, 48179, 48187, 48193, + 48197, 48221, 48239, 48247, 48259, 48271, + 48281, 48299, 48311, 48313, 48337, 48341, + 48353, 48371, 48383, 48397, 48407, 48409, + 48413, 48437, 48449, 48463, 48473, 48479, + 48481, 48487, 48491, 48497, 48523, 48527, + 48533, 48539, 48541, 48563, 48571, 48589, + 48593, 48611, 48619, 48623, 48647, 48649, + 48661, 48673, 48677, 48679, 48731, 48733, + 48751, 48757, 48761, 48767, 48779, 48781, + 48787, 48799, 48809, 48817, 48821, 48823, + 48847, 48857, 48859, 48869, 48871, 48883, + 48889, 48907, 48947, 48953, 48973, 48989, + 48991, 49003, 49009, 49019, 49031, 49033, + 49037, 49043, 49057, 49069, 49081, 49103, + 49109, 49117, 49121, 49123, 49139, 49157, + 49169, 49171, 49177, 49193, 49199, 49201, + 49207, 49211, 49223, 49253, 49261, 49277, + 49279, 49297, 49307, 49331, 49333, 49339, + 49363, 49367, 49369, 49391, 49393, 49409, + 49411, 49417, 49429, 49433, 49451, 49459, + 49463, 49477, 49481, 49499, 49523, 49529, + 49531, 49537, 49547, 49549, 49559, 49597, + 49603, 49613, 49627, 49633, 49639, 49663, + 49667, 49669, 49681, 49697, 49711, 49727, + 223, 49739, 49741, 49747, 49757, 49783, + 49787, 49789, 49801, 49807, 49811, 49823, + 49831, 49843, 49853, 49871, 49877, 49891, + 49919, 49921, 49927, 49937, 49939, 49943, + 49957, 49991, 49993, 49999, 50021, 50023, + 50033, 50047, 50051, 50053, 50069, 50077, + 50087, 50093, 50101, 50111, 50119, 50123, + 50129, 50131, 50147, 50153, 50159, 50177, + 50207, 50221, 50227, 50231, 50261, 50263, + 50273, 50287, 50291, 50311, 50321, 50329, + 50333, 50341, 50359, 50363, 50377, 50383, + 50387, 50411, 50417, 50423, 50441, 50459, + 50461, 50497, 50503, 50513, 50527, 50539, + 50543, 50549, 50551, 50581, 50587, 50591, + 50593, 50599, 50627, 50647, 50651, 37, + 50671, 50683, 50707, 50723, 50741, 50753, + 50767, 50773, 50777, 50789, 50821, 50833, + 50839, 50849, 50857, 50867, 50873, 50891, + 50893, 50909, 50923, 50929, 50951, 50957, + 50969, 50971, 50989, 50993, 51001, 51031, + 51043, 51047, 51059, 51061, 51071, 51109, + 51131, 51133, 51137, 51151, 51157, 51169, + 51193, 51197, 51199, 51203, 51217, 51229, + 51239, 51241, 51257, 51263, 51283, 51287, + 51307, 51329, 51341, 51343, 51347, 51349, + 51361, 51383, 51407, 51413, 51419, 51421, + 51427, 51431, 51437, 51439, 51449, 51461, + 51473, 51479, 51481, 51487, 51503, 51511, + 51517, 51521, 227, 51539, 51551, 51563, + 51577, 51581, 51593, 51599, 51607, 51613, + 51631, 51637, 51647, 51659, 51673, 51679, + 51683, 51691, 51713, 51719, 51721, 51749, + 51767, 51769, 51787, 51797, 51803, 51817, + 51827, 51829, 51839, 51853, 51859, 51869, + 51871, 51893, 51899, 51907, 51913, 51929, + 51941, 51949, 51971, 51973, 51977, 51991, + 52009, 52021, 52027, 52051, 52057, 52067, + 52069, 52081, 52103, 52121, 52127, 52147, + 52153, 52163, 52177, 52181, 52183, 52189, + 52201, 52223, 52237, 52249, 52253, 52259, + 52267, 52289, 52291, 52301, 52313, 52321, + 52361, 52363, 52369, 52379, 52387, 52391, + 52433, 229, 52453, 52457, 52489, 52501, + 52511, 52517, 52529, 52541, 52543, 52553, + 52561, 52567, 52571, 52579, 52583, 52609, + 52627, 52631, 52639, 52667, 52673, 52691, + 52697, 52709, 52711, 52721, 52727, 52733, + 52747, 52757, 52769, 52783, 52807, 52813, + 52817, 52837, 52859, 52861, 52879, 52883, + 52889, 52901, 52903, 52919, 52937, 52951, + 52957, 52963, 52967, 52973, 52981, 52999, + 53003, 53017, 53047, 53051, 53069, 53077, + 53087, 53089, 53093, 53101, 53113, 53117, + 53129, 53147, 53149, 53161, 53171, 53173, + 53189, 53197, 53201, 53231, 53233, 53239, + 53267, 53269, 53279, 53281, 53299, 53309, + 53323, 53327, 53353, 53359, 53377, 53381, + 53401, 53407, 53411, 53419, 53437, 53441, + 53453, 53479, 53503, 53507, 53527, 53549, + 53551, 53569, 53591, 53593, 53597, 53609, + 53611, 53617, 53623, 53629, 53633, 53639, + 53653, 53657, 53681, 53693, 53699, 53717, + 53719, 53731, 53759, 53773, 53777, 53783, + 53791, 53813, 53819, 53831, 53849, 53857, + 53861, 53881, 53887, 53891, 53897, 53899, + 53917, 53923, 53927, 53939, 53951, 53959, + 53987, 53993, 54001, 54011, 54013, 54037, + 54049, 54059, 54083, 54091, 54101, 54121, + 54133, 54139, 54151, 54163, 54167, 54181, + 54193, 54217, 54251, 54269, 54277, 54287, + 233, 54293, 54311, 54319, 54323, 54331, + 54347, 54361, 54367, 54371, 54377, 54401, + 54403, 54409, 54413, 54419, 54421, 54437, + 54443, 54449, 54469, 54493, 54497, 54499, + 54503, 54517, 54521, 54539, 54541, 54547, + 54559, 54563, 54577, 54581, 54583, 54601, + 54617, 54623, 54629, 54631, 54647, 54667, + 54673, 54679, 54709, 54713, 54721, 54727, + 54751, 54767, 54773, 54779, 54787, 54799, + 54829, 54833, 54851, 54869, 54877, 54881, + 54907, 54917, 54919, 54941, 54949, 54959, + 54973, 54979, 54983, 55001, 55009, 55021, + 55049, 55051, 55057, 55061, 55073, 55079, + 55103, 55109, 55117, 55127, 55147, 55163, + 55171, 55201, 55207, 55213, 55217, 55219, + 55229, 55243, 55249, 55259, 55291, 55313, + 55331, 55333, 55337, 55339, 55343, 55351, + 55373, 55381, 55399, 55411, 55439, 55441, + 55457, 55469, 55487, 55501, 55511, 55529, + 55541, 55547, 55579, 55589, 55603, 55609, + 55619, 55621, 55631, 55633, 55639, 55661, + 55663, 55667, 55673, 55681, 55691, 55697, + 55711, 55717, 55721, 55733, 55763, 55787, + 55793, 55799, 55807, 55813, 55817, 55819, + 55823, 55829, 55837, 55843, 55849, 55871, + 55889, 55897, 55901, 55903, 55921, 55927, + 55931, 55933, 55949, 55967, 55987, 55997, + 56003, 56009, 56039, 56041, 56053, 56081, + 56087, 56093, 56099, 56101, 56113, 56123, + 56131, 56149, 56167, 56171, 56179, 56197, + 56207, 56209, 56237, 56239, 56249, 56263, + 56267, 56269, 56299, 56311, 56333, 56359, + 56369, 56377, 56383, 56393, 56401, 56417, + 56431, 56437, 56443, 56453, 56467, 56473, + 56477, 56479, 56489, 56501, 56503, 56509, + 56519, 56527, 56531, 56533, 56543, 56569, + 56591, 56597, 56599, 56611, 56629, 56633, + 56659, 56663, 56671, 56681, 56687, 56701, + 56711, 56713, 56731, 56737, 56747, 56767, + 56773, 56779, 56783, 56807, 56809, 56813, + 56821, 56827, 56843, 56857, 56873, 56891, + 56893, 56897, 56909, 56911, 56921, 56923, + 56929, 56941, 56951, 56957, 56963, 56983, + 56989, 56993, 56999, 57037, 57041, 57047, + 57059, 57073, 57077, 57089, 57097, 57107, + 57119, 239, 57131, 57139, 57143, 57149, + 57163, 57173, 57179, 57191, 57193, 57203, + 57221, 57223, 57241, 57251, 57259, 57269, + 57271, 57283, 57287, 57301, 57329, 57331, + 57347, 57349, 57367, 57373, 57383, 57389, + 57397, 57413, 57427, 57457, 57467, 57487, + 57493, 57503, 57527, 57529, 57557, 57559, + 57571, 57587, 57593, 57601, 57637, 57641, + 57649, 57653, 57667, 57679, 57689, 57697, + 57709, 57713, 57719, 57727, 57731, 57737, + 57751, 57773, 57781, 57787, 57791, 57793, + 57803, 57809, 57829, 57839, 57847, 57853, + 57859, 57881, 57899, 57901, 57917, 57923, + 57943, 57947, 57973, 57977, 57991, 58013, + 58027, 58031, 58043, 58049, 58057, 58061, + 58067, 58073, 241, 58099, 58109, 58111, + 58129, 58147, 58151, 58153, 58169, 58171, + 58189, 58193, 58199, 58207, 58211, 58217, + 58229, 58231, 58237, 58243, 58271, 58309, + 58313, 58321, 58337, 58363, 58367, 58369, + 58379, 58391, 58393, 58403, 58411, 58417, + 58427, 58439, 58441, 58451, 58453, 58477, + 58481, 58511, 58537, 58543, 58549, 58567, + 58573, 58579, 58601, 58603, 58613, 58631, + 58657, 58661, 58679, 58687, 58693, 58699, + 58711, 58727, 58733, 58741, 58757, 58763, + 58771, 58787, 58789, 58831, 58889, 58897, + 58901, 58907, 58909, 58913, 58921, 58937, + 58943, 58963, 58967, 58979, 58991, 58997, + 59009, 59011, 59021, 59023, 59029, 3, + 59051, 59053, 59063, 59069, 59077, 59083, + 59093, 59107, 59113, 59119, 59123, 59141, + 59149, 59159, 59167, 59183, 59197, 59207, + 59209, 59219, 59221, 59233, 59239, 59243, + 59263, 59273, 59281, 59333, 59341, 59351, + 59357, 59359, 59369, 59377, 59387, 59393, + 59399, 59407, 59417, 59419, 59441, 59443, + 59447, 59453, 59467, 59471, 59473, 59497, + 59509, 59513, 59539, 59557, 59561, 59567, + 59581, 59611, 59617, 59621, 59627, 59629, + 59651, 59659, 59663, 59669, 59671, 59693, + 59699, 59707, 59723, 59729, 59743, 59747, + 59753, 59771, 59779, 59791, 59797, 59809, + 59833, 59863, 59879, 59887, 59921, 59929, + 59951, 59957, 59971, 59981, 59999, 60013, + 60017, 60029, 60037, 60041, 60077, 60083, + 60089, 60091, 60101, 60103, 60107, 60127, + 60133, 60139, 60149, 60161, 60167, 60169, + 60209, 60217, 60223, 60251, 60257, 60259, + 60271, 60289, 60293, 60317, 60331, 60337, + 60343, 60353, 60373, 60383, 60397, 60413, + 60427, 60443, 60449, 60457, 60493, 60497, + 60509, 60521, 60527, 60539, 60589, 60601, + 60607, 60611, 60617, 60623, 60631, 60637, + 60647, 60649, 60659, 60661, 60679, 60689, + 60703, 60719, 60727, 60733, 60737, 60757, + 60761, 60763, 60773, 60779, 60793, 60811, + 60821, 60859, 60869, 60887, 60889, 60899, + 60901, 60913, 60917, 60919, 60923, 60937, + 60943, 60953, 60961, 61001, 61007, 61027, + 61031, 61043, 61051, 61057, 61091, 61099, + 61121, 61129, 61141, 61151, 61153, 61169, + 61211, 61223, 61231, 61253, 61261, 61283, + 61291, 61297, 61331, 61333, 61339, 61343, + 61357, 61363, 61379, 61381, 61403, 61409, + 61417, 61441, 61463, 61469, 61471, 61483, + 61487, 61493, 61507, 61511, 61519, 61543, + 61547, 61553, 61559, 61561, 61583, 61603, + 61609, 61613, 61627, 61631, 61637, 61643, + 61651, 61657, 61667, 61673, 61681, 61687, + 61703, 61717, 61723, 61729, 61751, 61757, + 61781, 61813, 61819, 61837, 61843, 61861, + 61871, 61879, 61909, 61927, 61933, 61949, + 61961, 61967, 61979, 61981, 61987, 61991, + 62003, 62011, 62017, 62039, 62047, 62053, + 62057, 62071, 62081, 62099, 62119, 62129, + 62131, 62137, 62141, 62143, 62171, 62189, + 62191, 62201, 62207, 62213, 62219, 62233, + 62273, 62297, 62299, 62303, 62311, 62323, + 62327, 62347, 62351, 62383, 62401, 62417, + 62423, 62459, 62467, 62473, 62477, 62483, + 62497, 62501, 62507, 62533, 62539, 62549, + 62563, 62581, 62591, 62597, 62603, 62617, + 62627, 62633, 62639, 62653, 62659, 62683, + 62687, 62701, 62723, 62731, 62743, 62753, + 62761, 62773, 62791, 62801, 62819, 62827, + 62851, 62861, 62869, 62873, 62897, 62903, + 62921, 62927, 62929, 62939, 62969, 62971, + 62981, 62983, 62987, 62989, 251, 63029, + 63031, 63059, 63067, 63073, 63079, 63097, + 63103, 63113, 63127, 63131, 63149, 63179, + 63197, 63199, 63211, 63241, 63247, 63277, + 63281, 63299, 63311, 63313, 63317, 63331, + 63337, 63347, 63353, 63361, 63367, 63377, + 63389, 63391, 63397, 63409, 63419, 63421, + 63439, 63443, 63463, 63467, 63473, 63487, + 63493, 63499, 63521, 63527, 63533, 63541, + 63559, 63577, 63587, 63589, 63599, 63601, + 63607, 63611, 63617, 63629, 63647, 63649, + 63659, 63667, 63671, 63689, 63691, 63697, + 63703, 63709, 63719, 63727, 63737, 63743, + 63761, 63773, 63781, 63793, 63799, 63803, + 63809, 63823, 63839, 63841, 63853, 63857, + 63863, 63901, 63907, 63913, 63929, 63949, + 63977, 63997, 64007, 64013, 64019, 64033, + 64037, 64063, 64067, 64081, 64091, 64109, + 64123, 64151, 64153, 64157, 64171, 64187, + 64189, 64217, 64223, 64231, 64237, 64271, + 64279, 64283, 64301, 64303, 64319, 64327, + 64333, 64373, 64381, 64399, 64403, 64433, + 64439, 64451, 64453, 64483, 64489, 64499, + 64513, 64553, 64567, 64577, 64579, 64591, + 64601, 64609, 64613, 64621, 64627, 64633, + 64661, 64663, 64667, 64679, 64693, 64709, + 64717, 64747, 64763, 64781, 64783, 64793, + 64811, 64817, 64849, 64853, 64871, 64877, + 64879, 64891, 64901, 64919, 64921, 64927, + 64937, 64951, 64969, 64997, 65003, 65011, + 65027, 65029, 65033, 65053, 65063, 65071, + 65089, 65099, 65101, 65111, 65119, 65123, + 65129, 65141, 65147, 65167, 65171, 65173, + 65179, 65183, 65203, 65213, 65239, 65257, + 65267, 65269, 65287, 65293, 65309, 65323, + 65327, 65353, 65357, 65371, 65381, 65393, + 65407, 65413, 65419, 65423, 65437, 65447, + 65449, 65479, 65497, 65519, 65521, 2, + }; + +const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 2, 3, 4, 5, 7, + 8, 9, 11, 13, 16, 17, + 19, 23, 25, 27, 29, 31, + 32, 37, 41, 43, 47, 49, + 53, 59, 61, 64, 67, 71, + 73, 79, 81, 83, 89, 97, + 101, 103, 107, 109, 113, 121, + 125, 127, 128, 131, 137, 139, + 149, 151, 157, 163, 167, 169, + 173, 179, 181, 191, 193, 197, + 199, 211, 223, 227, 229, 233, + 239, 241, 243, 251, 256, 257, + 263, 269, 271, 277, 281, 283, + 289, 293, 307, 311, 313, 317, + 331, 337, 343, 347, 349, 353, + 359, 361, 367, 373, 379, 383, + 389, 397, 401, 409, 419, 421, + 431, 433, 439, 443, 449, 457, + 461, 463, 467, 479, 487, 491, + 499, 503, 509, 512, 521, 523, + 529, 541, 547, 557, 563, 569, + 571, 577, 587, 593, 599, 601, + 607, 613, 617, 619, 625, 631, + 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, + 719, 727, 729, 733, 739, 743, + 751, 757, 761, 769, 773, 787, + 797, 809, 811, 821, 823, 827, + 829, 839, 841, 853, 857, 859, + 863, 877, 881, 883, 887, 907, + 911, 919, 929, 937, 941, 947, + 953, 961, 967, 971, 977, 983, + 991, 997, 1009, 1013, 1019, 1021, + 1024, 1031, 1033, 1039, 1049, 1051, + 1061, 1063, 1069, 1087, 1091, 1093, + 1097, 1103, 1109, 1117, 1123, 1129, + 1151, 1153, 1163, 1171, 1181, 1187, + 1193, 1201, 1213, 1217, 1223, 1229, + 1231, 1237, 1249, 1259, 1277, 1279, + 1283, 1289, 1291, 1297, 1301, 1303, + 1307, 1319, 1321, 1327, 1331, 1361, + 1367, 1369, 1373, 1381, 1399, 1409, + 1423, 1427, 1429, 1433, 1439, 1447, + 1451, 1453, 1459, 1471, 1481, 1483, + 1487, 1489, 1493, 1499, 1511, 1523, + 1531, 1543, 1549, 1553, 1559, 1567, + 1571, 1579, 1583, 1597, 1601, 1607, + 1609, 1613, 1619, 1621, 1627, 1637, + 1657, 1663, 1667, 1669, 1681, 1693, + 1697, 1699, 1709, 1721, 1723, 1733, + 1741, 1747, 1753, 1759, 1777, 1783, + 1787, 1789, 1801, 1811, 1823, 1831, + 1847, 1849, 1861, 1867, 1871, 1873, + 1877, 1879, 1889, 1901, 1907, 1913, + 1931, 1933, 1949, 1951, 1973, 1979, + 1987, 1993, 1997, 1999, 2003, 2011, + 2017, 2027, 2029, 2039, 2048, 2053, + 2063, 2069, 2081, 2083, 2087, 2089, + 2099, 2111, 2113, 2129, 2131, 2137, + 2141, 2143, 2153, 2161, 2179, 2187, + 2197, 2203, 2207, 2209, 2213, 2221, + 2237, 2239, 2243, 2251, 2267, 2269, + 2273, 2281, 2287, 2293, 2297, 2309, + 2311, 2333, 2339, 2341, 2347, 2351, + 2357, 2371, 2377, 2381, 2383, 2389, + 2393, 2399, 2401, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, + 2477, 2503, 2521, 2531, 2539, 2543, + 2549, 2551, 2557, 2579, 2591, 2593, + 2609, 2617, 2621, 2633, 2647, 2657, + 2659, 2663, 2671, 2677, 2683, 2687, + 2689, 2693, 2699, 2707, 2711, 2713, + 2719, 2729, 2731, 2741, 2749, 2753, + 2767, 2777, 2789, 2791, 2797, 2801, + 2803, 2809, 2819, 2833, 2837, 2843, + 2851, 2857, 2861, 2879, 2887, 2897, + 2903, 2909, 2917, 2927, 2939, 2953, + 2957, 2963, 2969, 2971, 2999, 3001, + 3011, 3019, 3023, 3037, 3041, 3049, + 3061, 3067, 3079, 3083, 3089, 3109, + 3119, 3121, 3125, 3137, 3163, 3167, + 3169, 3181, 3187, 3191, 3203, 3209, + 3217, 3221, 3229, 3251, 3253, 3257, + 3259, 3271, 3299, 3301, 3307, 3313, + 3319, 3323, 3329, 3331, 3343, 3347, + 3359, 3361, 3371, 3373, 3389, 3391, + 3407, 3413, 3433, 3449, 3457, 3461, + 3463, 3467, 3469, 3481, 3491, 3499, + 3511, 3517, 3527, 3529, 3533, 3539, + 3541, 3547, 3557, 3559, 3571, 3581, + 3583, 3593, 3607, 3613, 3617, 3623, + 3631, 3637, 3643, 3659, 3671, 3673, + 3677, 3691, 3697, 3701, 3709, 3719, + 3721, 3727, 3733, 3739, 3761, 3767, + 3769, 3779, 3793, 3797, 3803, 3821, + 3823, 3833, 3847, 3851, 3853, 3863, + 3877, 3881, 3889, 3907, 3911, 3917, + 3919, 3923, 3929, 3931, 3943, 3947, + 3967, 3989, 4001, 4003, 4007, 4013, + 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 4096, 4099, + 4111, 4127, 4129, 4133, 4139, 4153, + 4157, 4159, 4177, 4201, 4211, 4217, + 4219, 4229, 4231, 4241, 4243, 4253, + 4259, 4261, 4271, 4273, 4283, 4289, + 4297, 4327, 4337, 4339, 4349, 4357, + 4363, 4373, 4391, 4397, 4409, 4421, + 4423, 4441, 4447, 4451, 4457, 4463, + 4481, 4483, 4489, 4493, 4507, 4513, + 4517, 4519, 4523, 4547, 4549, 4561, + 4567, 4583, 4591, 4597, 4603, 4621, + 4637, 4639, 4643, 4649, 4651, 4657, + 4663, 4673, 4679, 4691, 4703, 4721, + 4723, 4729, 4733, 4751, 4759, 4783, + 4787, 4789, 4793, 4799, 4801, 4813, + 4817, 4831, 4861, 4871, 4877, 4889, + 4903, 4909, 4913, 4919, 4931, 4933, + 4937, 4943, 4951, 4957, 4967, 4969, + 4973, 4987, 4993, 4999, 5003, 5009, + 5011, 5021, 5023, 5039, 5041, 5051, + 5059, 5077, 5081, 5087, 5099, 5101, + 5107, 5113, 5119, 5147, 5153, 5167, + 5171, 5179, 5189, 5197, 5209, 5227, + 5231, 5233, 5237, 5261, 5273, 5279, + 5281, 5297, 5303, 5309, 5323, 5329, + 5333, 5347, 5351, 5381, 5387, 5393, + 5399, 5407, 5413, 5417, 5419, 5431, + 5437, 5441, 5443, 5449, 5471, 5477, + 5479, 5483, 5501, 5503, 5507, 5519, + 5521, 5527, 5531, 5557, 5563, 5569, + 5573, 5581, 5591, 5623, 5639, 5641, + 5647, 5651, 5653, 5657, 5659, 5669, + 5683, 5689, 5693, 5701, 5711, 5717, + 5737, 5741, 5743, 5749, 5779, 5783, + 5791, 5801, 5807, 5813, 5821, 5827, + 5839, 5843, 5849, 5851, 5857, 5861, + 5867, 5869, 5879, 5881, 5897, 5903, + 5923, 5927, 5939, 5953, 5981, 5987, + 6007, 6011, 6029, 6037, 6043, 6047, + 6053, 6067, 6073, 6079, 6089, 6091, + 6101, 6113, 6121, 6131, 6133, 6143, + 6151, 6163, 6173, 6197, 6199, 6203, + 6211, 6217, 6221, 6229, 6241, 6247, + 6257, 6263, 6269, 6271, 6277, 6287, + 6299, 6301, 6311, 6317, 6323, 6329, + 6337, 6343, 6353, 6359, 6361, 6367, + 6373, 6379, 6389, 6397, 6421, 6427, + 6449, 6451, 6469, 6473, 6481, 6491, + 6521, 6529, 6547, 6551, 6553, 6561, + 6563, 6569, 6571, 6577, 6581, 6599, + 6607, 6619, 6637, 6653, 6659, 6661, + 6673, 6679, 6689, 6691, 6701, 6703, + 6709, 6719, 6733, 6737, 6761, 6763, + 6779, 6781, 6791, 6793, 6803, 6823, + 6827, 6829, 6833, 6841, 6857, 6859, + 6863, 6869, 6871, 6883, 6889, 6899, + 6907, 6911, 6917, 6947, 6949, 6959, + 6961, 6967, 6971, 6977, 6983, 6991, + 6997, 7001, 7013, 7019, 7027, 7039, + 7043, 7057, 7069, 7079, 7103, 7109, + 7121, 7127, 7129, 7151, 7159, 7177, + 7187, 7193, 7207, 7211, 7213, 7219, + 7229, 7237, 7243, 7247, 7253, 7283, + 7297, 7307, 7309, 7321, 7331, 7333, + 7349, 7351, 7369, 7393, 7411, 7417, + 7433, 7451, 7457, 7459, 7477, 7481, + 7487, 7489, 7499, 7507, 7517, 7523, + 7529, 7537, 7541, 7547, 7549, 7559, + 7561, 7573, 7577, 7583, 7589, 7591, + 7603, 7607, 7621, 7639, 7643, 7649, + 7669, 7673, 7681, 7687, 7691, 7699, + 7703, 7717, 7723, 7727, 7741, 7753, + 7757, 7759, 7789, 7793, 7817, 7823, + 7829, 7841, 7853, 7867, 7873, 7877, + 7879, 7883, 7901, 7907, 7919, 7921, + 7927, 7933, 7937, 7949, 7951, 7963, + 7993, 8009, 8011, 8017, 8039, 8053, + 8059, 8069, 8081, 8087, 8089, 8093, + 8101, 8111, 8117, 8123, 8147, 8161, + 8167, 8171, 8179, 8191, 8192, 8209, + 8219, 8221, 8231, 8233, 8237, 8243, + 8263, 8269, 8273, 8287, 8291, 8293, + 8297, 8311, 8317, 8329, 8353, 8363, + 8369, 8377, 8387, 8389, 8419, 8423, + 8429, 8431, 8443, 8447, 8461, 8467, + 8501, 8513, 8521, 8527, 8537, 8539, + 8543, 8563, 8573, 8581, 8597, 8599, + 8609, 8623, 8627, 8629, 8641, 8647, + 8663, 8669, 8677, 8681, 8689, 8693, + 8699, 8707, 8713, 8719, 8731, 8737, + 8741, 8747, 8753, 8761, 8779, 8783, + 8803, 8807, 8819, 8821, 8831, 8837, + 8839, 8849, 8861, 8863, 8867, 8887, + 8893, 8923, 8929, 8933, 8941, 8951, + 8963, 8969, 8971, 8999, 9001, 9007, + 9011, 9013, 9029, 9041, 9043, 9049, + 9059, 9067, 9091, 9103, 9109, 9127, + 9133, 9137, 9151, 9157, 9161, 9173, + 9181, 9187, 9199, 9203, 9209, 9221, + 9227, 9239, 9241, 9257, 9277, 9281, + 9283, 9293, 9311, 9319, 9323, 9337, + 9341, 9343, 9349, 9371, 9377, 9391, + 9397, 9403, 9409, 9413, 9419, 9421, + 9431, 9433, 9437, 9439, 9461, 9463, + 9467, 9473, 9479, 9491, 9497, 9511, + 9521, 9533, 9539, 9547, 9551, 9587, + 9601, 9613, 9619, 9623, 9629, 9631, + 9643, 9649, 9661, 9677, 9679, 9689, + 9697, 9719, 9721, 9733, 9739, 9743, + 9749, 9767, 9769, 9781, 9787, 9791, + 9803, 9811, 9817, 9829, 9833, 9839, + 9851, 9857, 9859, 9871, 9883, 9887, + 9901, 9907, 9923, 9929, 9931, 9941, + 9949, 9967, 9973, 10007, 10009, 10037, + 10039, 10061, 10067, 10069, 10079, 10091, + 10093, 10099, 10103, 10111, 10133, 10139, + 10141, 10151, 10159, 10163, 10169, 10177, + 10181, 10193, 10201, 10211, 10223, 10243, + 10247, 10253, 10259, 10267, 10271, 10273, + 10289, 10301, 10303, 10313, 10321, 10331, + 10333, 10337, 10343, 10357, 10369, 10391, + 10399, 10427, 10429, 10433, 10453, 10457, + 10459, 10463, 10477, 10487, 10499, 10501, + 10513, 10529, 10531, 10559, 10567, 10589, + 10597, 10601, 10607, 10609, 10613, 10627, + 10631, 10639, 10651, 10657, 10663, 10667, + 10687, 10691, 10709, 10711, 10723, 10729, + 10733, 10739, 10753, 10771, 10781, 10789, + 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, + 10909, 10937, 10939, 10949, 10957, 10973, + 10979, 10987, 10993, 11003, 11027, 11047, + 11057, 11059, 11069, 11071, 11083, 11087, + 11093, 11113, 11117, 11119, 11131, 11149, + 11159, 11161, 11171, 11173, 11177, 11197, + 11213, 11239, 11243, 11251, 11257, 11261, + 11273, 11279, 11287, 11299, 11311, 11317, + 11321, 11329, 11351, 11353, 11369, 11383, + 11393, 11399, 11411, 11423, 11437, 11443, + 11447, 11449, 11467, 11471, 11483, 11489, + 11491, 11497, 11503, 11519, 11527, 11549, + 11551, 11579, 11587, 11593, 11597, 11617, + 11621, 11633, 11657, 11677, 11681, 11689, + 11699, 11701, 11717, 11719, 11731, 11743, + 11777, 11779, 11783, 11789, 11801, 11807, + 11813, 11821, 11827, 11831, 11833, 11839, + 11863, 11867, 11881, 11887, 11897, 11903, + 11909, 11923, 11927, 11933, 11939, 11941, + 11953, 11959, 11969, 11971, 11981, 11987, + 12007, 12011, 12037, 12041, 12043, 12049, + 12071, 12073, 12097, 12101, 12107, 12109, + 12113, 12119, 12143, 12149, 12157, 12161, + 12163, 12167, 12197, 12203, 12211, 12227, + 12239, 12241, 12251, 12253, 12263, 12269, + 12277, 12281, 12289, 12301, 12323, 12329, + 12343, 12347, 12373, 12377, 12379, 12391, + 12401, 12409, 12413, 12421, 12433, 12437, + 12451, 12457, 12473, 12479, 12487, 12491, + 12497, 12503, 12511, 12517, 12527, 12539, + 12541, 12547, 12553, 12569, 12577, 12583, + 12589, 12601, 12611, 12613, 12619, 12637, + 12641, 12647, 12653, 12659, 12671, 12689, + 12697, 12703, 12713, 12721, 12739, 12743, + 12757, 12763, 12769, 12781, 12791, 12799, + 12809, 12821, 12823, 12829, 12841, 12853, + 12889, 12893, 12899, 12907, 12911, 12917, + 12919, 12923, 12941, 12953, 12959, 12967, + 12973, 12979, 12983, 13001, 13003, 13007, + 13009, 13033, 13037, 13043, 13049, 13063, + 13093, 13099, 13103, 13109, 13121, 13127, + 13147, 13151, 13159, 13163, 13171, 13177, + 13183, 13187, 13217, 13219, 13229, 13241, + 13249, 13259, 13267, 13291, 13297, 13309, + 13313, 13327, 13331, 13337, 13339, 13367, + 13381, 13397, 13399, 13411, 13417, 13421, + 13441, 13451, 13457, 13463, 13469, 13477, + 13487, 13499, 13513, 13523, 13537, 13553, + 13567, 13577, 13591, 13597, 13613, 13619, + 13627, 13633, 13649, 13669, 13679, 13681, + 13687, 13691, 13693, 13697, 13709, 13711, + 13721, 13723, 13729, 13751, 13757, 13759, + 13763, 13781, 13789, 13799, 13807, 13829, + 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, + 13931, 13933, 13963, 13967, 13997, 13999, + 14009, 14011, 14029, 14033, 14051, 14057, + 14071, 14081, 14083, 14087, 14107, 14143, + 14149, 14153, 14159, 14173, 14177, 14197, + 14207, 14221, 14243, 14249, 14251, 14281, + 14293, 14303, 14321, 14323, 14327, 14341, + 14347, 14369, 14387, 14389, 14401, 14407, + 14411, 14419, 14423, 14431, 14437, 14447, + 14449, 14461, 14479, 14489, 14503, 14519, + 14533, 14537, 14543, 14549, 14551, 14557, + 14561, 14563, 14591, 14593, 14621, 14627, + 14629, 14633, 14639, 14641, 14653, 14657, + 14669, 14683, 14699, 14713, 14717, 14723, + 14731, 14737, 14741, 14747, 14753, 14759, + 14767, 14771, 14779, 14783, 14797, 14813, + 14821, 14827, 14831, 14843, 14851, 14867, + 14869, 14879, 14887, 14891, 14897, 14923, + 14929, 14939, 14947, 14951, 14957, 14969, + 14983, 15013, 15017, 15031, 15053, 15061, + 15073, 15077, 15083, 15091, 15101, 15107, + 15121, 15131, 15137, 15139, 15149, 15161, + 15173, 15187, 15193, 15199, 15217, 15227, + 15233, 15241, 15259, 15263, 15269, 15271, + 15277, 15287, 15289, 15299, 15307, 15313, + 15319, 15329, 15331, 15349, 15359, 15361, + 15373, 15377, 15383, 15391, 15401, 15413, + 15427, 15439, 15443, 15451, 15461, 15467, + 15473, 15493, 15497, 15511, 15527, 15541, + 15551, 15559, 15569, 15581, 15583, 15601, + 15607, 15619, 15625, 15629, 15641, 15643, + 15647, 15649, 15661, 15667, 15671, 15679, + 15683, 15727, 15731, 15733, 15737, 15739, + 15749, 15761, 15767, 15773, 15787, 15791, + 15797, 15803, 15809, 15817, 15823, 15859, + 15877, 15881, 15887, 15889, 15901, 15907, + 15913, 15919, 15923, 15937, 15959, 15971, + 15973, 15991, 16001, 16007, 16033, 16057, + 16061, 16063, 16067, 16069, 16073, 16087, + 16091, 16097, 16103, 16111, 16127, 16129, + 16139, 16141, 16183, 16187, 16189, 16193, + 16217, 16223, 16229, 16231, 16249, 16253, + 16267, 16273, 16301, 16319, 16333, 16339, + 16349, 16361, 16363, 16369, 16381, 16384, + 16411, 16417, 16421, 16427, 16433, 16447, + 16451, 16453, 16477, 16481, 16487, 16493, + 16519, 16529, 16547, 16553, 16561, 16567, + 16573, 16603, 16607, 16619, 16631, 16633, + 16649, 16651, 16657, 16661, 16673, 16691, + 16693, 16699, 16703, 16729, 16741, 16747, + 16759, 16763, 16787, 16807, 16811, 16823, + 16829, 16831, 16843, 16871, 16879, 16883, + 16889, 16901, 16903, 16921, 16927, 16931, + 16937, 16943, 16963, 16979, 16981, 16987, + 16993, 17011, 17021, 17027, 17029, 17033, + 17041, 17047, 17053, 17077, 17093, 17099, + 17107, 17117, 17123, 17137, 17159, 17161, + 17167, 17183, 17189, 17191, 17203, 17207, + 17209, 17231, 17239, 17257, 17291, 17293, + 17299, 17317, 17321, 17327, 17333, 17341, + 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, + 17449, 17467, 17471, 17477, 17483, 17489, + 17491, 17497, 17509, 17519, 17539, 17551, + 17569, 17573, 17579, 17581, 17597, 17599, + 17609, 17623, 17627, 17657, 17659, 17669, + 17681, 17683, 17707, 17713, 17729, 17737, + 17747, 17749, 17761, 17783, 17789, 17791, + 17807, 17827, 17837, 17839, 17851, 17863, + 17881, 17891, 17903, 17909, 17911, 17921, + 17923, 17929, 17939, 17957, 17959, 17971, + 17977, 17981, 17987, 17989, 18013, 18041, + 18043, 18047, 18049, 18059, 18061, 18077, + 18089, 18097, 18119, 18121, 18127, 18131, + 18133, 18143, 18149, 18169, 18181, 18191, + 18199, 18211, 18217, 18223, 18229, 18233, + 18251, 18253, 18257, 18269, 18287, 18289, + 18301, 18307, 18311, 18313, 18329, 18341, + 18353, 18367, 18371, 18379, 18397, 18401, + 18413, 18427, 18433, 18439, 18443, 18451, + 18457, 18461, 18481, 18493, 18503, 18517, + 18521, 18523, 18539, 18541, 18553, 18583, + 18587, 18593, 18617, 18637, 18661, 18671, + 18679, 18691, 18701, 18713, 18719, 18731, + 18743, 18749, 18757, 18769, 18773, 18787, + 18793, 18797, 18803, 18839, 18859, 18869, + 18899, 18911, 18913, 18917, 18919, 18947, + 18959, 18973, 18979, 19001, 19009, 19013, + 19031, 19037, 19051, 19069, 19073, 19079, + 19081, 19087, 19121, 19139, 19141, 19157, + 19163, 19181, 19183, 19207, 19211, 19213, + 19219, 19231, 19237, 19249, 19259, 19267, + 19273, 19289, 19301, 19309, 19319, 19321, + 19333, 19373, 19379, 19381, 19387, 19391, + 19403, 19417, 19421, 19423, 19427, 19429, + 19433, 19441, 19447, 19457, 19463, 19469, + 19471, 19477, 19483, 19489, 19501, 19507, + 19531, 19541, 19543, 19553, 19559, 19571, + 19577, 19583, 19597, 19603, 19609, 19661, + 19681, 19683, 19687, 19697, 19699, 19709, + 19717, 19727, 19739, 19751, 19753, 19759, + 19763, 19777, 19793, 19801, 19813, 19819, + 19841, 19843, 19853, 19861, 19867, 19889, + 19891, 19913, 19919, 19927, 19937, 19949, + 19961, 19963, 19973, 19979, 19991, 19993, + 19997, 20011, 20021, 20023, 20029, 20047, + 20051, 20063, 20071, 20089, 20101, 20107, + 20113, 20117, 20123, 20129, 20143, 20147, + 20149, 20161, 20173, 20177, 20183, 20201, + 20219, 20231, 20233, 20249, 20261, 20269, + 20287, 20297, 20323, 20327, 20333, 20341, + 20347, 20353, 20357, 20359, 20369, 20389, + 20393, 20399, 20407, 20411, 20431, 20441, + 20443, 20477, 20479, 20483, 20507, 20509, + 20521, 20533, 20543, 20549, 20551, 20563, + 20593, 20599, 20611, 20627, 20639, 20641, + 20663, 20681, 20693, 20707, 20717, 20719, + 20731, 20743, 20747, 20749, 20753, 20759, + 20771, 20773, 20789, 20807, 20809, 20849, + 20857, 20873, 20879, 20887, 20897, 20899, + 20903, 20921, 20929, 20939, 20947, 20959, + 20963, 20981, 20983, 21001, 21011, 21013, + 21017, 21019, 21023, 21031, 21059, 21061, + 21067, 21089, 21101, 21107, 21121, 21139, + 21143, 21149, 21157, 21163, 21169, 21179, + 21187, 21191, 21193, 21211, 21221, 21227, + 21247, 21269, 21277, 21283, 21313, 21317, + 21319, 21323, 21341, 21347, 21377, 21379, + 21383, 21391, 21397, 21401, 21407, 21419, + 21433, 21467, 21481, 21487, 21491, 21493, + 21499, 21503, 21517, 21521, 21523, 21529, + 21557, 21559, 21563, 21569, 21577, 21587, + 21589, 21599, 21601, 21611, 21613, 21617, + 21647, 21649, 21661, 21673, 21683, 21701, + 21713, 21727, 21737, 21739, 21751, 21757, + 21767, 21773, 21787, 21799, 21803, 21817, + 21821, 21839, 21841, 21851, 21859, 21863, + 21871, 21881, 21893, 21911, 21929, 21937, + 21943, 21961, 21977, 21991, 21997, 22003, + 22013, 22027, 22031, 22037, 22039, 22051, + 22063, 22067, 22073, 22079, 22091, 22093, + 22109, 22111, 22123, 22129, 22133, 22147, + 22153, 22157, 22159, 22171, 22189, 22193, + 22201, 22229, 22247, 22259, 22271, 22273, + 22277, 22279, 22283, 22291, 22303, 22307, + 22343, 22349, 22367, 22369, 22381, 22391, + 22397, 22409, 22433, 22441, 22447, 22453, + 22469, 22481, 22483, 22501, 22511, 22531, + 22541, 22543, 22549, 22567, 22571, 22573, + 22613, 22619, 22621, 22637, 22639, 22643, + 22651, 22669, 22679, 22691, 22697, 22699, + 22709, 22717, 22721, 22727, 22739, 22741, + 22751, 22769, 22777, 22783, 22787, 22801, + 22807, 22811, 22817, 22853, 22859, 22861, + 22871, 22877, 22901, 22907, 22921, 22937, + 22943, 22961, 22963, 22973, 22993, 23003, + 23011, 23017, 23021, 23027, 23029, 23039, + 23041, 23053, 23057, 23059, 23063, 23071, + 23081, 23087, 23099, 23117, 23131, 23143, + 23159, 23167, 23173, 23189, 23197, 23201, + 23203, 23209, 23227, 23251, 23269, 23279, + 23291, 23293, 23297, 23311, 23321, 23327, + 23333, 23339, 23357, 23369, 23371, 23399, + 23417, 23431, 23447, 23459, 23473, 23497, + 23509, 23531, 23537, 23539, 23549, 23557, + 23561, 23563, 23567, 23581, 23593, 23599, + 23603, 23609, 23623, 23627, 23629, 23633, + 23663, 23669, 23671, 23677, 23687, 23689, + 23719, 23741, 23743, 23747, 23753, 23761, + 23767, 23773, 23789, 23801, 23813, 23819, + 23827, 23831, 23833, 23857, 23869, 23873, + 23879, 23887, 23893, 23899, 23909, 23911, + 23917, 23929, 23957, 23971, 23977, 23981, + 23993, 24001, 24007, 24019, 24023, 24029, + 24043, 24049, 24061, 24071, 24077, 24083, + 24091, 24097, 24103, 24107, 24109, 24113, + 24121, 24133, 24137, 24151, 24169, 24179, + 24181, 24197, 24203, 24223, 24229, 24239, + 24247, 24251, 24281, 24317, 24329, 24337, + 24359, 24371, 24373, 24379, 24389, 24391, + 24407, 24413, 24419, 24421, 24439, 24443, + 24469, 24473, 24481, 24499, 24509, 24517, + 24527, 24533, 24547, 24551, 24571, 24593, + 24611, 24623, 24631, 24649, 24659, 24671, + 24677, 24683, 24691, 24697, 24709, 24733, + 24749, 24763, 24767, 24781, 24793, 24799, + 24809, 24821, 24841, 24847, 24851, 24859, + 24877, 24889, 24907, 24917, 24919, 24923, + 24943, 24953, 24967, 24971, 24977, 24979, + 24989, 25013, 25031, 25033, 25037, 25057, + 25073, 25087, 25097, 25111, 25117, 25121, + 25127, 25147, 25153, 25163, 25169, 25171, + 25183, 25189, 25219, 25229, 25237, 25243, + 25247, 25253, 25261, 25301, 25303, 25307, + 25309, 25321, 25339, 25343, 25349, 25357, + 25367, 25373, 25391, 25409, 25411, 25423, + 25439, 25447, 25453, 25457, 25463, 25469, + 25471, 25523, 25537, 25541, 25561, 25577, + 25579, 25583, 25589, 25601, 25603, 25609, + 25621, 25633, 25639, 25643, 25657, 25667, + 25673, 25679, 25693, 25703, 25717, 25733, + 25741, 25747, 25759, 25763, 25771, 25793, + 25799, 25801, 25819, 25841, 25847, 25849, + 25867, 25873, 25889, 25903, 25913, 25919, + 25931, 25933, 25939, 25943, 25951, 25969, + 25981, 25997, 25999, 26003, 26017, 26021, + 26029, 26041, 26053, 26083, 26099, 26107, + 26111, 26113, 26119, 26141, 26153, 26161, + 26171, 26177, 26183, 26189, 26203, 26209, + 26227, 26237, 26249, 26251, 26261, 26263, + 26267, 26293, 26297, 26309, 26317, 26321, + 26339, 26347, 26357, 26371, 26387, 26393, + 26399, 26407, 26417, 26423, 26431, 26437, + 26449, 26459, 26479, 26489, 26497, 26501, + 26513, 26539, 26557, 26561, 26569, 26573, + 26591, 26597, 26627, 26633, 26641, 26647, + 26669, 26681, 26683, 26687, 26693, 26699, + 26701, 26711, 26713, 26717, 26723, 26729, + 26731, 26737, 26759, 26777, 26783, 26801, + 26813, 26821, 26833, 26839, 26849, 26861, + 26863, 26879, 26881, 26891, 26893, 26903, + 26921, 26927, 26947, 26951, 26953, 26959, + 26981, 26987, 26993, 27011, 27017, 27031, + 27043, 27059, 27061, 27067, 27073, 27077, + 27091, 27103, 27107, 27109, 27127, 27143, + 27179, 27191, 27197, 27211, 27239, 27241, + 27253, 27259, 27271, 27277, 27281, 27283, + 27299, 27329, 27337, 27361, 27367, 27397, + 27407, 27409, 27427, 27431, 27437, 27449, + 27457, 27479, 27481, 27487, 27509, 27527, + 27529, 27539, 27541, 27551, 27581, 27583, + 27611, 27617, 27631, 27647, 27653, 27673, + 27689, 27691, 27697, 27701, 27733, 27737, + 27739, 27743, 27749, 27751, 27763, 27767, + 27773, 27779, 27791, 27793, 27799, 27803, + 27809, 27817, 27823, 27827, 27847, 27851, + 27883, 27889, 27893, 27901, 27917, 27919, + 27941, 27943, 27947, 27953, 27961, 27967, + 27983, 27997, 28001, 28019, 28027, 28031, + 28051, 28057, 28069, 28081, 28087, 28097, + 28099, 28109, 28111, 28123, 28151, 28163, + 28181, 28183, 28201, 28211, 28219, 28229, + 28277, 28279, 28283, 28289, 28297, 28307, + 28309, 28319, 28349, 28351, 28387, 28393, + 28403, 28409, 28411, 28429, 28433, 28439, + 28447, 28463, 28477, 28493, 28499, 28513, + 28517, 28537, 28541, 28547, 28549, 28559, + 28561, 28571, 28573, 28579, 28591, 28597, + 28603, 28607, 28619, 28621, 28627, 28631, + 28643, 28649, 28657, 28661, 28663, 28669, + 28687, 28697, 28703, 28711, 28723, 28729, + 28751, 28753, 28759, 28771, 28789, 28793, + 28807, 28813, 28817, 28837, 28843, 28859, + 28867, 28871, 28879, 28901, 28909, 28921, + 28927, 28933, 28949, 28961, 28979, 29009, + 29017, 29021, 29023, 29027, 29033, 29059, + 29063, 29077, 29101, 29123, 29129, 29131, + 29137, 29147, 29153, 29167, 29173, 29179, + 29191, 29201, 29207, 29209, 29221, 29231, + 29243, 29251, 29269, 29287, 29297, 29303, + 29311, 29327, 29333, 29339, 29347, 29363, + 29383, 29387, 29389, 29399, 29401, 29411, + 29423, 29429, 29437, 29443, 29453, 29473, + 29483, 29501, 29527, 29531, 29537, 29567, + 29569, 29573, 29581, 29587, 29599, 29611, + 29629, 29633, 29641, 29663, 29669, 29671, + 29683, 29717, 29723, 29741, 29753, 29759, + 29761, 29789, 29791, 29803, 29819, 29833, + 29837, 29851, 29863, 29867, 29873, 29879, + 29881, 29917, 29921, 29927, 29929, 29947, + 29959, 29983, 29989, 30011, 30013, 30029, + 30047, 30059, 30071, 30089, 30091, 30097, + 30103, 30109, 30113, 30119, 30133, 30137, + 30139, 30161, 30169, 30181, 30187, 30197, + 30203, 30211, 30223, 30241, 30253, 30259, + 30269, 30271, 30293, 30307, 30313, 30319, + 30323, 30341, 30347, 30367, 30389, 30391, + 30403, 30427, 30431, 30449, 30467, 30469, + 30491, 30493, 30497, 30509, 30517, 30529, + 30539, 30553, 30557, 30559, 30577, 30593, + 30631, 30637, 30643, 30649, 30661, 30671, + 30677, 30689, 30697, 30703, 30707, 30713, + 30727, 30757, 30763, 30773, 30781, 30803, + 30809, 30817, 30829, 30839, 30841, 30851, + 30853, 30859, 30869, 30871, 30881, 30893, + 30911, 30931, 30937, 30941, 30949, 30971, + 30977, 30983, 31013, 31019, 31033, 31039, + 31051, 31063, 31069, 31079, 31081, 31091, + 31121, 31123, 31139, 31147, 31151, 31153, + 31159, 31177, 31181, 31183, 31189, 31193, + 31219, 31223, 31231, 31237, 31247, 31249, + 31253, 31259, 31267, 31271, 31277, 31307, + 31319, 31321, 31327, 31333, 31337, 31357, + 31379, 31387, 31391, 31393, 31397, 31469, + 31477, 31481, 31489, 31511, 31513, 31517, + 31531, 31541, 31543, 31547, 31567, 31573, + 31583, 31601, 31607, 31627, 31643, 31649, + 31657, 31663, 31667, 31687, 31699, 31721, + 31723, 31727, 31729, 31741, 31751, 31769, + 31771, 31793, 31799, 31817, 31847, 31849, + 31859, 31873, 31883, 31891, 31907, 31957, + 31963, 31973, 31981, 31991, 32003, 32009, + 32027, 32029, 32041, 32051, 32057, 32059, + 32063, 32069, 32077, 32083, 32089, 32099, + 32117, 32119, 32141, 32143, 32159, 32173, + 32183, 32189, 32191, 32203, 32213, 32233, + 32237, 32251, 32257, 32261, 32297, 32299, + 32303, 32309, 32321, 32323, 32327, 32341, + 32353, 32359, 32363, 32369, 32371, 32377, + 32381, 32401, 32411, 32413, 32423, 32429, + 32441, 32443, 32467, 32479, 32491, 32497, + 32503, 32507, 32531, 32533, 32537, 32561, + 32563, 32569, 32573, 32579, 32587, 32603, + 32609, 32611, 32621, 32633, 32647, 32653, + 32687, 32693, 32707, 32713, 32717, 32719, + 32749, 32761, 32768, 32771, 32779, 32783, + 32789, 32797, 32801, 32803, 32831, 32833, + 32839, 32843, 32869, 32887, 32909, 32911, + 32917, 32933, 32939, 32941, 32957, 32969, + 32971, 32983, 32987, 32993, 32999, 33013, + 33023, 33029, 33037, 33049, 33053, 33071, + 33073, 33083, 33091, 33107, 33113, 33119, + 33149, 33151, 33161, 33179, 33181, 33191, + 33199, 33203, 33211, 33223, 33247, 33287, + 33289, 33301, 33311, 33317, 33329, 33331, + 33343, 33347, 33349, 33353, 33359, 33377, + 33391, 33403, 33409, 33413, 33427, 33457, + 33461, 33469, 33479, 33487, 33493, 33503, + 33521, 33529, 33533, 33547, 33563, 33569, + 33577, 33581, 33587, 33589, 33599, 33601, + 33613, 33617, 33619, 33623, 33629, 33637, + 33641, 33647, 33679, 33703, 33713, 33721, + 33739, 33749, 33751, 33757, 33767, 33769, + 33773, 33791, 33797, 33809, 33811, 33827, + 33829, 33851, 33857, 33863, 33871, 33889, + 33893, 33911, 33923, 33931, 33937, 33941, + 33961, 33967, 33997, 34019, 34031, 34033, + 34039, 34057, 34061, 34123, 34127, 34129, + 34141, 34147, 34157, 34159, 34171, 34183, + 34211, 34213, 34217, 34231, 34253, 34259, + 34261, 34267, 34273, 34283, 34297, 34301, + 34303, 34313, 34319, 34327, 34337, 34351, + 34361, 34367, 34369, 34381, 34403, 34421, + 34429, 34439, 34457, 34469, 34471, 34483, + 34487, 34499, 34501, 34511, 34513, 34519, + 34537, 34543, 34549, 34583, 34589, 34591, + 34603, 34607, 34613, 34631, 34649, 34651, + 34667, 34673, 34679, 34687, 34693, 34703, + 34721, 34729, 34739, 34747, 34757, 34759, + 34763, 34781, 34807, 34819, 34841, 34843, + 34847, 34849, 34871, 34877, 34883, 34897, + 34913, 34919, 34939, 34949, 34961, 34963, + 34981, 35023, 35027, 35051, 35053, 35059, + 35069, 35081, 35083, 35089, 35099, 35107, + 35111, 35117, 35129, 35141, 35149, 35153, + 35159, 35171, 35201, 35221, 35227, 35251, + 35257, 35267, 35279, 35281, 35291, 35311, + 35317, 35323, 35327, 35339, 35353, 35363, + 35381, 35393, 35401, 35407, 35419, 35423, + 35437, 35447, 35449, 35461, 35491, 35507, + 35509, 35521, 35527, 35531, 35533, 35537, + 35543, 35569, 35573, 35591, 35593, 35597, + 35603, 35617, 35671, 35677, 35729, 35731, + 35747, 35753, 35759, 35771, 35797, 35801, + 35803, 35809, 35831, 35837, 35839, 35851, + 35863, 35869, 35879, 35897, 35899, 35911, + 35923, 35933, 35951, 35963, 35969, 35977, + 35983, 35993, 35999, 36007, 36011, 36013, + 36017, 36037, 36061, 36067, 36073, 36083, + 36097, 36107, 36109, 36131, 36137, 36151, + 36161, 36187, 36191, 36209, 36217, 36229, + 36241, 36251, 36263, 36269, 36277, 36293, + 36299, 36307, 36313, 36319, 36341, 36343, + 36353, 36373, 36383, 36389, 36433, 36451, + 36457, 36467, 36469, 36473, 36479, 36481, + 36493, 36497, 36523, 36527, 36529, 36541, + 36551, 36559, 36563, 36571, 36583, 36587, + 36599, 36607, 36629, 36637, 36643, 36653, + 36671, 36677, 36683, 36691, 36697, 36709, + 36713, 36721, 36739, 36749, 36761, 36767, + 36779, 36781, 36787, 36791, 36793, 36809, + 36821, 36833, 36847, 36857, 36871, 36877, + 36887, 36899, 36901, 36913, 36919, 36923, + 36929, 36931, 36943, 36947, 36973, 36979, + 36997, 37003, 37013, 37019, 37021, 37039, + 37049, 37057, 37061, 37087, 37097, 37117, + 37123, 37139, 37159, 37171, 37181, 37189, + 37199, 37201, 37217, 37223, 37243, 37249, + 37253, 37273, 37277, 37307, 37309, 37313, + 37321, 37337, 37339, 37357, 37361, 37363, + 37369, 37379, 37397, 37409, 37423, 37441, + 37447, 37463, 37483, 37489, 37493, 37501, + 37507, 37511, 37517, 37529, 37537, 37547, + 37549, 37561, 37567, 37571, 37573, 37579, + 37589, 37591, 37607, 37619, 37633, 37643, + 37649, 37657, 37663, 37691, 37693, 37699, + 37717, 37747, 37781, 37783, 37799, 37811, + 37813, 37831, 37847, 37853, 37861, 37871, + 37879, 37889, 37897, 37907, 37951, 37957, + 37963, 37967, 37987, 37991, 37993, 37997, + 38011, 38039, 38047, 38053, 38069, 38083, + 38113, 38119, 38149, 38153, 38167, 38177, + 38183, 38189, 38197, 38201, 38219, 38231, + 38237, 38239, 38261, 38273, 38281, 38287, + 38299, 38303, 38317, 38321, 38327, 38329, + 38333, 38351, 38371, 38377, 38393, 38431, + 38447, 38449, 38453, 38459, 38461, 38501, + 38543, 38557, 38561, 38567, 38569, 38593, + 38603, 38609, 38611, 38629, 38639, 38651, + 38653, 38669, 38671, 38677, 38693, 38699, + 38707, 38711, 38713, 38723, 38729, 38737, + 38747, 38749, 38767, 38783, 38791, 38803, + 38809, 38821, 38833, 38839, 38851, 38861, + 38867, 38873, 38891, 38903, 38917, 38921, + 38923, 38933, 38953, 38959, 38971, 38977, + 38993, 39019, 39023, 39041, 39043, 39047, + 39079, 39089, 39097, 39103, 39107, 39113, + 39119, 39133, 39139, 39157, 39161, 39163, + 39181, 39191, 39199, 39209, 39217, 39227, + 39229, 39233, 39239, 39241, 39251, 39293, + 39301, 39313, 39317, 39323, 39341, 39343, + 39359, 39367, 39371, 39373, 39383, 39397, + 39409, 39419, 39439, 39443, 39451, 39461, + 39499, 39503, 39509, 39511, 39521, 39541, + 39551, 39563, 39569, 39581, 39601, 39607, + 39619, 39623, 39631, 39659, 39667, 39671, + 39679, 39703, 39709, 39719, 39727, 39733, + 39749, 39761, 39769, 39779, 39791, 39799, + 39821, 39827, 39829, 39839, 39841, 39847, + 39857, 39863, 39869, 39877, 39883, 39887, + 39901, 39929, 39937, 39953, 39971, 39979, + 39983, 39989, 40009, 40013, 40031, 40037, + 40039, 40063, 40087, 40093, 40099, 40111, + 40123, 40127, 40129, 40151, 40153, 40163, + 40169, 40177, 40189, 40193, 40213, 40231, + 40237, 40241, 40253, 40277, 40283, 40289, + 40343, 40351, 40357, 40361, 40387, 40423, + 40427, 40429, 40433, 40459, 40471, 40483, + 40487, 40493, 40499, 40507, 40519, 40529, + 40531, 40543, 40559, 40577, 40583, 40591, + 40597, 40609, 40627, 40637, 40639, 40693, + 40697, 40699, 40709, 40739, 40751, 40759, + 40763, 40771, 40787, 40801, 40813, 40819, + 40823, 40829, 40841, 40847, 40849, 40853, + 40867, 40879, 40883, 40897, 40903, 40927, + 40933, 40939, 40949, 40961, 40973, 40993, + 41011, 41017, 41023, 41039, 41047, 41051, + 41057, 41077, 41081, 41113, 41117, 41131, + 41141, 41143, 41149, 41161, 41177, 41179, + 41183, 41189, 41201, 41203, 41213, 41221, + 41227, 41231, 41233, 41243, 41257, 41263, + 41269, 41281, 41299, 41333, 41341, 41351, + 41357, 41381, 41387, 41389, 41399, 41411, + 41413, 41443, 41453, 41467, 41479, 41491, + 41507, 41513, 41519, 41521, 41539, 41543, + 41549, 41579, 41593, 41597, 41603, 41609, + 41611, 41617, 41621, 41627, 41641, 41647, + 41651, 41659, 41669, 41681, 41687, 41719, + 41729, 41737, 41759, 41761, 41771, 41777, + 41801, 41809, 41813, 41843, 41849, 41851, + 41863, 41879, 41887, 41893, 41897, 41903, + 41911, 41927, 41941, 41947, 41953, 41957, + 41959, 41969, 41981, 41983, 41999, 42013, + 42017, 42019, 42023, 42043, 42061, 42071, + 42073, 42083, 42089, 42101, 42131, 42139, + 42157, 42169, 42179, 42181, 42187, 42193, + 42197, 42209, 42221, 42223, 42227, 42239, + 42257, 42281, 42283, 42293, 42299, 42307, + 42323, 42331, 42337, 42349, 42359, 42373, + 42379, 42391, 42397, 42403, 42407, 42409, + 42433, 42437, 42443, 42451, 42457, 42461, + 42463, 42467, 42473, 42487, 42491, 42499, + 42509, 42533, 42557, 42569, 42571, 42577, + 42589, 42611, 42641, 42643, 42649, 42667, + 42677, 42683, 42689, 42697, 42701, 42703, + 42709, 42719, 42727, 42737, 42743, 42751, + 42767, 42773, 42787, 42793, 42797, 42821, + 42829, 42839, 42841, 42853, 42859, 42863, + 42899, 42901, 42923, 42929, 42937, 42943, + 42953, 42961, 42967, 42979, 42989, 43003, + 43013, 43019, 43037, 43049, 43051, 43063, + 43067, 43093, 43103, 43117, 43133, 43151, + 43159, 43177, 43189, 43201, 43207, 43223, + 43237, 43261, 43271, 43283, 43291, 43313, + 43319, 43321, 43331, 43391, 43397, 43399, + 43403, 43411, 43427, 43441, 43451, 43457, + 43481, 43487, 43499, 43517, 43541, 43543, + 43573, 43577, 43579, 43591, 43597, 43607, + 43609, 43613, 43627, 43633, 43649, 43651, + 43661, 43669, 43691, 43711, 43717, 43721, + 43753, 43759, 43777, 43781, 43783, 43787, + 43789, 43793, 43801, 43853, 43867, 43889, + 43891, 43913, 43933, 43943, 43951, 43961, + 43963, 43969, 43973, 43987, 43991, 43997, + 44017, 44021, 44027, 44029, 44041, 44053, + 44059, 44071, 44087, 44089, 44101, 44111, + 44119, 44123, 44129, 44131, 44159, 44171, + 44179, 44189, 44201, 44203, 44207, 44221, + 44249, 44257, 44263, 44267, 44269, 44273, + 44279, 44281, 44293, 44351, 44357, 44371, + 44381, 44383, 44389, 44417, 44449, 44453, + 44483, 44491, 44497, 44501, 44507, 44519, + 44521, 44531, 44533, 44537, 44543, 44549, + 44563, 44579, 44587, 44617, 44621, 44623, + 44633, 44641, 44647, 44651, 44657, 44683, + 44687, 44699, 44701, 44711, 44729, 44741, + 44753, 44771, 44773, 44777, 44789, 44797, + 44809, 44819, 44839, 44843, 44851, 44867, + 44879, 44887, 44893, 44909, 44917, 44927, + 44939, 44953, 44959, 44963, 44971, 44983, + 44987, 45007, 45013, 45053, 45061, 45077, + 45083, 45119, 45121, 45127, 45131, 45137, + 45139, 45161, 45179, 45181, 45191, 45197, + 45233, 45247, 45259, 45263, 45281, 45289, + 45293, 45307, 45317, 45319, 45329, 45337, + 45341, 45343, 45361, 45377, 45389, 45403, + 45413, 45427, 45433, 45439, 45481, 45491, + 45497, 45503, 45523, 45533, 45541, 45553, + 45557, 45569, 45587, 45589, 45599, 45613, + 45631, 45641, 45659, 45667, 45673, 45677, + 45691, 45697, 45707, 45737, 45751, 45757, + 45763, 45767, 45779, 45817, 45821, 45823, + 45827, 45833, 45841, 45853, 45863, 45869, + 45887, 45893, 45943, 45949, 45953, 45959, + 45971, 45979, 45989, 46021, 46027, 46049, + 46051, 46061, 46073, 46091, 46093, 46099, + 46103, 46133, 46141, 46147, 46153, 46171, + 46181, 46183, 46187, 46199, 46219, 46229, + 46237, 46261, 46271, 46273, 46279, 46301, + 46307, 46309, 46327, 46337, 46349, 46351, + 46381, 46399, 46411, 46439, 46441, 46447, + 46451, 46457, 46471, 46477, 46489, 46499, + 46507, 46511, 46523, 46549, 46559, 46567, + 46573, 46589, 46591, 46601, 46619, 46633, + 46639, 46643, 46649, 46663, 46679, 46681, + 46687, 46691, 46703, 46723, 46727, 46747, + 46751, 46757, 46769, 46771, 46807, 46811, + 46817, 46819, 46829, 46831, 46853, 46861, + 46867, 46877, 46889, 46901, 46919, 46933, + 46957, 46993, 46997, 47017, 47041, 47051, + 47057, 47059, 47087, 47093, 47111, 47119, + 47123, 47129, 47137, 47143, 47147, 47149, + 47161, 47189, 47207, 47221, 47237, 47251, + 47269, 47279, 47287, 47293, 47297, 47303, + 47309, 47317, 47339, 47351, 47353, 47363, + 47381, 47387, 47389, 47407, 47417, 47419, + 47431, 47441, 47459, 47491, 47497, 47501, + 47507, 47513, 47521, 47527, 47533, 47543, + 47563, 47569, 47581, 47591, 47599, 47609, + 47623, 47629, 47639, 47653, 47657, 47659, + 47681, 47699, 47701, 47711, 47713, 47717, + 47737, 47741, 47743, 47777, 47779, 47791, + 47797, 47807, 47809, 47819, 47837, 47843, + 47857, 47869, 47881, 47903, 47911, 47917, + 47933, 47939, 47947, 47951, 47963, 47969, + 47977, 47981, 48017, 48023, 48029, 48049, + 48073, 48079, 48091, 48109, 48119, 48121, + 48131, 48157, 48163, 48179, 48187, 48193, + 48197, 48221, 48239, 48247, 48259, 48271, + 48281, 48299, 48311, 48313, 48337, 48341, + 48353, 48371, 48383, 48397, 48407, 48409, + 48413, 48437, 48449, 48463, 48473, 48479, + 48481, 48487, 48491, 48497, 48523, 48527, + 48533, 48539, 48541, 48563, 48571, 48589, + 48593, 48611, 48619, 48623, 48647, 48649, + 48661, 48673, 48677, 48679, 48731, 48733, + 48751, 48757, 48761, 48767, 48779, 48781, + 48787, 48799, 48809, 48817, 48821, 48823, + 48847, 48857, 48859, 48869, 48871, 48883, + 48889, 48907, 48947, 48953, 48973, 48989, + 48991, 49003, 49009, 49019, 49031, 49033, + 49037, 49043, 49057, 49069, 49081, 49103, + 49109, 49117, 49121, 49123, 49139, 49157, + 49169, 49171, 49177, 49193, 49199, 49201, + 49207, 49211, 49223, 49253, 49261, 49277, + 49279, 49297, 49307, 49331, 49333, 49339, + 49363, 49367, 49369, 49391, 49393, 49409, + 49411, 49417, 49429, 49433, 49451, 49459, + 49463, 49477, 49481, 49499, 49523, 49529, + 49531, 49537, 49547, 49549, 49559, 49597, + 49603, 49613, 49627, 49633, 49639, 49663, + 49667, 49669, 49681, 49697, 49711, 49727, + 49729, 49739, 49741, 49747, 49757, 49783, + 49787, 49789, 49801, 49807, 49811, 49823, + 49831, 49843, 49853, 49871, 49877, 49891, + 49919, 49921, 49927, 49937, 49939, 49943, + 49957, 49991, 49993, 49999, 50021, 50023, + 50033, 50047, 50051, 50053, 50069, 50077, + 50087, 50093, 50101, 50111, 50119, 50123, + 50129, 50131, 50147, 50153, 50159, 50177, + 50207, 50221, 50227, 50231, 50261, 50263, + 50273, 50287, 50291, 50311, 50321, 50329, + 50333, 50341, 50359, 50363, 50377, 50383, + 50387, 50411, 50417, 50423, 50441, 50459, + 50461, 50497, 50503, 50513, 50527, 50539, + 50543, 50549, 50551, 50581, 50587, 50591, + 50593, 50599, 50627, 50647, 50651, 50653, + 50671, 50683, 50707, 50723, 50741, 50753, + 50767, 50773, 50777, 50789, 50821, 50833, + 50839, 50849, 50857, 50867, 50873, 50891, + 50893, 50909, 50923, 50929, 50951, 50957, + 50969, 50971, 50989, 50993, 51001, 51031, + 51043, 51047, 51059, 51061, 51071, 51109, + 51131, 51133, 51137, 51151, 51157, 51169, + 51193, 51197, 51199, 51203, 51217, 51229, + 51239, 51241, 51257, 51263, 51283, 51287, + 51307, 51329, 51341, 51343, 51347, 51349, + 51361, 51383, 51407, 51413, 51419, 51421, + 51427, 51431, 51437, 51439, 51449, 51461, + 51473, 51479, 51481, 51487, 51503, 51511, + 51517, 51521, 51529, 51539, 51551, 51563, + 51577, 51581, 51593, 51599, 51607, 51613, + 51631, 51637, 51647, 51659, 51673, 51679, + 51683, 51691, 51713, 51719, 51721, 51749, + 51767, 51769, 51787, 51797, 51803, 51817, + 51827, 51829, 51839, 51853, 51859, 51869, + 51871, 51893, 51899, 51907, 51913, 51929, + 51941, 51949, 51971, 51973, 51977, 51991, + 52009, 52021, 52027, 52051, 52057, 52067, + 52069, 52081, 52103, 52121, 52127, 52147, + 52153, 52163, 52177, 52181, 52183, 52189, + 52201, 52223, 52237, 52249, 52253, 52259, + 52267, 52289, 52291, 52301, 52313, 52321, + 52361, 52363, 52369, 52379, 52387, 52391, + 52433, 52441, 52453, 52457, 52489, 52501, + 52511, 52517, 52529, 52541, 52543, 52553, + 52561, 52567, 52571, 52579, 52583, 52609, + 52627, 52631, 52639, 52667, 52673, 52691, + 52697, 52709, 52711, 52721, 52727, 52733, + 52747, 52757, 52769, 52783, 52807, 52813, + 52817, 52837, 52859, 52861, 52879, 52883, + 52889, 52901, 52903, 52919, 52937, 52951, + 52957, 52963, 52967, 52973, 52981, 52999, + 53003, 53017, 53047, 53051, 53069, 53077, + 53087, 53089, 53093, 53101, 53113, 53117, + 53129, 53147, 53149, 53161, 53171, 53173, + 53189, 53197, 53201, 53231, 53233, 53239, + 53267, 53269, 53279, 53281, 53299, 53309, + 53323, 53327, 53353, 53359, 53377, 53381, + 53401, 53407, 53411, 53419, 53437, 53441, + 53453, 53479, 53503, 53507, 53527, 53549, + 53551, 53569, 53591, 53593, 53597, 53609, + 53611, 53617, 53623, 53629, 53633, 53639, + 53653, 53657, 53681, 53693, 53699, 53717, + 53719, 53731, 53759, 53773, 53777, 53783, + 53791, 53813, 53819, 53831, 53849, 53857, + 53861, 53881, 53887, 53891, 53897, 53899, + 53917, 53923, 53927, 53939, 53951, 53959, + 53987, 53993, 54001, 54011, 54013, 54037, + 54049, 54059, 54083, 54091, 54101, 54121, + 54133, 54139, 54151, 54163, 54167, 54181, + 54193, 54217, 54251, 54269, 54277, 54287, + 54289, 54293, 54311, 54319, 54323, 54331, + 54347, 54361, 54367, 54371, 54377, 54401, + 54403, 54409, 54413, 54419, 54421, 54437, + 54443, 54449, 54469, 54493, 54497, 54499, + 54503, 54517, 54521, 54539, 54541, 54547, + 54559, 54563, 54577, 54581, 54583, 54601, + 54617, 54623, 54629, 54631, 54647, 54667, + 54673, 54679, 54709, 54713, 54721, 54727, + 54751, 54767, 54773, 54779, 54787, 54799, + 54829, 54833, 54851, 54869, 54877, 54881, + 54907, 54917, 54919, 54941, 54949, 54959, + 54973, 54979, 54983, 55001, 55009, 55021, + 55049, 55051, 55057, 55061, 55073, 55079, + 55103, 55109, 55117, 55127, 55147, 55163, + 55171, 55201, 55207, 55213, 55217, 55219, + 55229, 55243, 55249, 55259, 55291, 55313, + 55331, 55333, 55337, 55339, 55343, 55351, + 55373, 55381, 55399, 55411, 55439, 55441, + 55457, 55469, 55487, 55501, 55511, 55529, + 55541, 55547, 55579, 55589, 55603, 55609, + 55619, 55621, 55631, 55633, 55639, 55661, + 55663, 55667, 55673, 55681, 55691, 55697, + 55711, 55717, 55721, 55733, 55763, 55787, + 55793, 55799, 55807, 55813, 55817, 55819, + 55823, 55829, 55837, 55843, 55849, 55871, + 55889, 55897, 55901, 55903, 55921, 55927, + 55931, 55933, 55949, 55967, 55987, 55997, + 56003, 56009, 56039, 56041, 56053, 56081, + 56087, 56093, 56099, 56101, 56113, 56123, + 56131, 56149, 56167, 56171, 56179, 56197, + 56207, 56209, 56237, 56239, 56249, 56263, + 56267, 56269, 56299, 56311, 56333, 56359, + 56369, 56377, 56383, 56393, 56401, 56417, + 56431, 56437, 56443, 56453, 56467, 56473, + 56477, 56479, 56489, 56501, 56503, 56509, + 56519, 56527, 56531, 56533, 56543, 56569, + 56591, 56597, 56599, 56611, 56629, 56633, + 56659, 56663, 56671, 56681, 56687, 56701, + 56711, 56713, 56731, 56737, 56747, 56767, + 56773, 56779, 56783, 56807, 56809, 56813, + 56821, 56827, 56843, 56857, 56873, 56891, + 56893, 56897, 56909, 56911, 56921, 56923, + 56929, 56941, 56951, 56957, 56963, 56983, + 56989, 56993, 56999, 57037, 57041, 57047, + 57059, 57073, 57077, 57089, 57097, 57107, + 57119, 57121, 57131, 57139, 57143, 57149, + 57163, 57173, 57179, 57191, 57193, 57203, + 57221, 57223, 57241, 57251, 57259, 57269, + 57271, 57283, 57287, 57301, 57329, 57331, + 57347, 57349, 57367, 57373, 57383, 57389, + 57397, 57413, 57427, 57457, 57467, 57487, + 57493, 57503, 57527, 57529, 57557, 57559, + 57571, 57587, 57593, 57601, 57637, 57641, + 57649, 57653, 57667, 57679, 57689, 57697, + 57709, 57713, 57719, 57727, 57731, 57737, + 57751, 57773, 57781, 57787, 57791, 57793, + 57803, 57809, 57829, 57839, 57847, 57853, + 57859, 57881, 57899, 57901, 57917, 57923, + 57943, 57947, 57973, 57977, 57991, 58013, + 58027, 58031, 58043, 58049, 58057, 58061, + 58067, 58073, 58081, 58099, 58109, 58111, + 58129, 58147, 58151, 58153, 58169, 58171, + 58189, 58193, 58199, 58207, 58211, 58217, + 58229, 58231, 58237, 58243, 58271, 58309, + 58313, 58321, 58337, 58363, 58367, 58369, + 58379, 58391, 58393, 58403, 58411, 58417, + 58427, 58439, 58441, 58451, 58453, 58477, + 58481, 58511, 58537, 58543, 58549, 58567, + 58573, 58579, 58601, 58603, 58613, 58631, + 58657, 58661, 58679, 58687, 58693, 58699, + 58711, 58727, 58733, 58741, 58757, 58763, + 58771, 58787, 58789, 58831, 58889, 58897, + 58901, 58907, 58909, 58913, 58921, 58937, + 58943, 58963, 58967, 58979, 58991, 58997, + 59009, 59011, 59021, 59023, 59029, 59049, + 59051, 59053, 59063, 59069, 59077, 59083, + 59093, 59107, 59113, 59119, 59123, 59141, + 59149, 59159, 59167, 59183, 59197, 59207, + 59209, 59219, 59221, 59233, 59239, 59243, + 59263, 59273, 59281, 59333, 59341, 59351, + 59357, 59359, 59369, 59377, 59387, 59393, + 59399, 59407, 59417, 59419, 59441, 59443, + 59447, 59453, 59467, 59471, 59473, 59497, + 59509, 59513, 59539, 59557, 59561, 59567, + 59581, 59611, 59617, 59621, 59627, 59629, + 59651, 59659, 59663, 59669, 59671, 59693, + 59699, 59707, 59723, 59729, 59743, 59747, + 59753, 59771, 59779, 59791, 59797, 59809, + 59833, 59863, 59879, 59887, 59921, 59929, + 59951, 59957, 59971, 59981, 59999, 60013, + 60017, 60029, 60037, 60041, 60077, 60083, + 60089, 60091, 60101, 60103, 60107, 60127, + 60133, 60139, 60149, 60161, 60167, 60169, + 60209, 60217, 60223, 60251, 60257, 60259, + 60271, 60289, 60293, 60317, 60331, 60337, + 60343, 60353, 60373, 60383, 60397, 60413, + 60427, 60443, 60449, 60457, 60493, 60497, + 60509, 60521, 60527, 60539, 60589, 60601, + 60607, 60611, 60617, 60623, 60631, 60637, + 60647, 60649, 60659, 60661, 60679, 60689, + 60703, 60719, 60727, 60733, 60737, 60757, + 60761, 60763, 60773, 60779, 60793, 60811, + 60821, 60859, 60869, 60887, 60889, 60899, + 60901, 60913, 60917, 60919, 60923, 60937, + 60943, 60953, 60961, 61001, 61007, 61027, + 61031, 61043, 61051, 61057, 61091, 61099, + 61121, 61129, 61141, 61151, 61153, 61169, + 61211, 61223, 61231, 61253, 61261, 61283, + 61291, 61297, 61331, 61333, 61339, 61343, + 61357, 61363, 61379, 61381, 61403, 61409, + 61417, 61441, 61463, 61469, 61471, 61483, + 61487, 61493, 61507, 61511, 61519, 61543, + 61547, 61553, 61559, 61561, 61583, 61603, + 61609, 61613, 61627, 61631, 61637, 61643, + 61651, 61657, 61667, 61673, 61681, 61687, + 61703, 61717, 61723, 61729, 61751, 61757, + 61781, 61813, 61819, 61837, 61843, 61861, + 61871, 61879, 61909, 61927, 61933, 61949, + 61961, 61967, 61979, 61981, 61987, 61991, + 62003, 62011, 62017, 62039, 62047, 62053, + 62057, 62071, 62081, 62099, 62119, 62129, + 62131, 62137, 62141, 62143, 62171, 62189, + 62191, 62201, 62207, 62213, 62219, 62233, + 62273, 62297, 62299, 62303, 62311, 62323, + 62327, 62347, 62351, 62383, 62401, 62417, + 62423, 62459, 62467, 62473, 62477, 62483, + 62497, 62501, 62507, 62533, 62539, 62549, + 62563, 62581, 62591, 62597, 62603, 62617, + 62627, 62633, 62639, 62653, 62659, 62683, + 62687, 62701, 62723, 62731, 62743, 62753, + 62761, 62773, 62791, 62801, 62819, 62827, + 62851, 62861, 62869, 62873, 62897, 62903, + 62921, 62927, 62929, 62939, 62969, 62971, + 62981, 62983, 62987, 62989, 63001, 63029, + 63031, 63059, 63067, 63073, 63079, 63097, + 63103, 63113, 63127, 63131, 63149, 63179, + 63197, 63199, 63211, 63241, 63247, 63277, + 63281, 63299, 63311, 63313, 63317, 63331, + 63337, 63347, 63353, 63361, 63367, 63377, + 63389, 63391, 63397, 63409, 63419, 63421, + 63439, 63443, 63463, 63467, 63473, 63487, + 63493, 63499, 63521, 63527, 63533, 63541, + 63559, 63577, 63587, 63589, 63599, 63601, + 63607, 63611, 63617, 63629, 63647, 63649, + 63659, 63667, 63671, 63689, 63691, 63697, + 63703, 63709, 63719, 63727, 63737, 63743, + 63761, 63773, 63781, 63793, 63799, 63803, + 63809, 63823, 63839, 63841, 63853, 63857, + 63863, 63901, 63907, 63913, 63929, 63949, + 63977, 63997, 64007, 64013, 64019, 64033, + 64037, 64063, 64067, 64081, 64091, 64109, + 64123, 64151, 64153, 64157, 64171, 64187, + 64189, 64217, 64223, 64231, 64237, 64271, + 64279, 64283, 64301, 64303, 64319, 64327, + 64333, 64373, 64381, 64399, 64403, 64433, + 64439, 64451, 64453, 64483, 64489, 64499, + 64513, 64553, 64567, 64577, 64579, 64591, + 64601, 64609, 64613, 64621, 64627, 64633, + 64661, 64663, 64667, 64679, 64693, 64709, + 64717, 64747, 64763, 64781, 64783, 64793, + 64811, 64817, 64849, 64853, 64871, 64877, + 64879, 64891, 64901, 64919, 64921, 64927, + 64937, 64951, 64969, 64997, 65003, 65011, + 65027, 65029, 65033, 65053, 65063, 65071, + 65089, 65099, 65101, 65111, 65119, 65123, + 65129, 65141, 65147, 65167, 65171, 65173, + 65179, 65183, 65203, 65213, 65239, 65257, + 65267, 65269, 65287, 65293, 65309, 65323, + 65327, 65353, 65357, 65371, 65381, 65393, + 65407, 65413, 65419, 65423, 65437, 65447, + 65449, 65479, 65497, 65519, 65521, 65536, + }; diff --git a/native-build/build/ffdata.h b/native-build/build/ffdata.h new file mode 100644 index 0000000000..cbe57efd56 --- /dev/null +++ b/native-build/build/ffdata.h @@ -0,0 +1,23 @@ +/* This file has been generated by etc/ffgen.c during build, + do not edit */ +#ifndef GAP_FFDATA_H +#define GAP_FFDATA_H + +#include + +enum { + NUM_SHORT_FINITE_FIELDS = 6635, + MAXSIZE_GF_INTERNAL = 65536, + DEGREE_LARGEST_INTERNAL_FF = 16, + FIELD_BITS_FFE = 13, + VAL_BITS_FFE = 16 +}; + +extern const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1]; +extern const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1]; +extern const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1]; + +typedef uint16_t FF; +typedef uint16_t FFV; + +#endif // GAP_FFDATA_H diff --git a/native-build/build/stamp-h b/native-build/build/stamp-h new file mode 100644 index 0000000000..9788f70238 --- /dev/null +++ b/native-build/build/stamp-h @@ -0,0 +1 @@ +timestamp diff --git a/native-build/cnf/GAP-VERSION-FILE b/native-build/cnf/GAP-VERSION-FILE new file mode 100644 index 0000000000..94ff19573b --- /dev/null +++ b/native-build/cnf/GAP-VERSION-FILE @@ -0,0 +1,2 @@ +GAP_BUILD_VERSION = 4.15dev +GAP_BUILD_DATETIME = 2025-08-28 09:40:46+0000 diff --git a/native-build/config.status b/native-build/config.status new file mode 100755 index 0000000000..7abb0ebb21 --- /dev/null +++ b/native-build/config.status @@ -0,0 +1,1127 @@ +#! /bin/bash +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=${CONFIG_SHELL-/bin/bash} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + +# The user is always right. +if ${PATH_SEPARATOR+false} :; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else $as_nop + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else $as_nop + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GAP $as_me 4.15dev, which was +generated by GNU Autoconf 2.71. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" GNUmakefile CITATION libgap.pc doc/make_doc doc/versiondata" +config_headers=" build/config.h:src/config.h.in" +config_commands=" build/stamp-h" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +GAP home page: ." + +ac_cs_config='--without-readline --with-gmp=bundled' +ac_cs_version="\ +GAP config.status 4.15dev +configured by ../configure, generated by GNU Autoconf 2.71, + with options \"$ac_cs_config\" + +Copyright (C) 2021 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/home/runner/work/gap/gap/native-build' +srcdir='..' +INSTALL='/usr/bin/install -c' +MKDIR_P='/usr/bin/mkdir -p' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + printf "%s\n" "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + printf "%s\n" "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + printf "%s\n" "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X /bin/bash '../configure' '--without-readline' '--with-gmp=bundled' $ac_configure_extra_args --no-create --no-recursion + shift + \printf "%s\n" "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + printf "%s\n" "$ac_log" +} >&5 + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "build/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build/config.h:src/config.h.in" ;; + "build/stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS build/stamp-h" ;; + "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; + "CITATION") CONFIG_FILES="$CONFIG_FILES CITATION" ;; + "libgap.pc") CONFIG_FILES="$CONFIG_FILES libgap.pc" ;; + "doc/make_doc") CONFIG_FILES="$CONFIG_FILES doc/make_doc" ;; + "doc/versiondata") CONFIG_FILES="$CONFIG_FILES doc/versiondata" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["GAP_DEFINES"]=" -DUSE_GASMAN=1" +S["PTHREAD_CFLAGS"]="-pthread" +S["PTHREAD_LIBS"]="-lpthread" +S["PTHREAD_CXX"]="g++ " +S["PTHREAD_CC"]="gcc " +S["ax_pthread_config"]="" +S["EGREP"]="/usr/bin/grep -E" +S["GREP"]="/usr/bin/grep" +S["CPP"]="gcc -E" +S["GAPARCH"]="x86_64-pc-linux-gnu-default64-kv10" +S["gap_kernel_minor_version"]="0" +S["gap_kernel_major_version"]="10" +S["BOEHM_GC_LIBS"]="" +S["BOEHM_GC_LDFLAGS"]="" +S["BOEHM_GC_CPPFLAGS"]="" +S["BUILD_BOEHM_GC"]="" +S["LIBATOMIC_OPS_LIBS"]="" +S["LIBATOMIC_OPS_LDFLAGS"]="" +S["LIBATOMIC_OPS_CPPFLAGS"]="" +S["BUILD_LIBATOMIC_OPS"]="" +S["JULIA_LIBS"]="" +S["JULIA_LDFLAGS"]="" +S["JULIA_CFLAGS"]="" +S["JULIA_VERSION"]="" +S["JULIA"]="" +S["READLINE_LIBS"]="" +S["READLINE_LDFLAGS"]="" +S["READLINE_CPPFLAGS"]="" +S["ZLIB_LIBS"]="-lz" +S["ZLIB_LDFLAGS"]="" +S["ZLIB_CPPFLAGS"]="" +S["BUILD_ZLIB"]="no" +S["GMP_PREFIX"]="bundled" +S["GMP_LIBS"]="-lgmp" +S["GMP_LDFLAGS"]="-Lbundled/lib" +S["GMP_CPPFLAGS"]="-Ibundled/include" +S["BUILD_GMP"]="no" +S["WARN_CXXFLAGS"]="-fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonlit"\ +"eral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dir"\ +"s -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but"\ +"-set-variable -Wno-unused-parameter -Wwrite-strings -Wextra-semi" +S["WARN_CFLAGS"]="-fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonlit"\ +"eral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dir"\ +"s -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but"\ +"-set-variable -Wno-unused-parameter -Wwrite-strings -Wno-implicit-fallthrough -Wimplicit-function-declaration -Wjump-misses-init -Wnested-externs -W"\ +"old-style-definition -Wstrict-prototypes -Wno-error=cast-function-type -Wno-error=inline -Wno-error=pragmas -Wno-error=sign-compare -Wno-error=unuse"\ +"d-parameter -Wno-error=implicit-fallthrough" +S["SED"]="/usr/bin/sed" +S["MAINTAINER_MODE"]="yes" +S["GC_SOURCES"]="src/gasman.c src/sysmem.c" +S["HPCGAP"]="no" +S["MKDIR_P"]="/usr/bin/mkdir -p" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["ABI_CFLAGS"]="" +S["ABI"]="64" +S["HAVE_CXX11"]="1" +S["ac_ct_CXX"]="g++" +S["CXXFLAGS"]="-g -O2" +S["CXX"]="g++ " +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc " +S["host_os"]="linux-gnu" +S["host_vendor"]="pc" +S["host_cpu"]="x86_64" +S["host"]="x86_64-pc-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="pc" +S["build_cpu"]="x86_64" +S["build"]="x86_64-pc-linux-gnu" +S["GAP_RELEASEYEAR"]="this year" +S["GAP_RELEASEDAY"]="today" +S["GAP_VERSION"]="4.15dev" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-lm " +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["runstatedir"]="${localstatedir}/run" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="https://www.gap-system.org/" +S["PACKAGE_BUGREPORT"]="support@gap-system.org" +S["PACKAGE_STRING"]="GAP 4.15dev" +S["PACKAGE_VERSION"]="4.15dev" +S["PACKAGE_TARNAME"]="gap-4.15dev" +S["PACKAGE_NAME"]="GAP" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"GAP\"" +D["PACKAGE_TARNAME"]=" \"gap-4.15dev\"" +D["PACKAGE_VERSION"]=" \"4.15dev\"" +D["PACKAGE_STRING"]=" \"GAP 4.15dev\"" +D["PACKAGE_BUGREPORT"]=" \"support@gap-system.org\"" +D["PACKAGE_URL"]=" \"https://www.gap-system.org/\"" +D["HAVE_CXX11"]=" 1" +D["HAVE_STDIO_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["STDC_HEADERS"]=" 1" +D["SIZEOF_VOID_P"]=" 8" +D["HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_FALLTHROUGH"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_FORMAT"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_NOINLINE"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_NORETURN"]=" 1" +D["HAVE_FUNC_ATTRIBUTE_PURE"]=" 1" +D["HAVE___BUILTIN_MUL_OVERFLOW"]=" 1" +D["HAVE___BUILTIN_CLZ"]=" 1" +D["HAVE___BUILTIN_CLZL"]=" 1" +D["HAVE___BUILTIN_CLZLL"]=" 1" +D["HAVE___BUILTIN_POPCOUNTL"]=" 1" +D["SIZEOF_INT"]=" 4" +D["SIZEOF_LONG"]=" 8" +D["SIZEOF_LONG_LONG"]=" 8" +D["USE_POPCNT"]=" 1" +D["GAPARCH"]=" \"x86_64-pc-linux-gnu-default64-kv10\"" +D["C_STACK_ALIGN"]=" 2" +D["HAVE_TERMIOS_H"]=" 1" +D["HAVE_SYS_IOCTL_H"]=" 1" +D["HAVE_SYS_RESOURCE_H"]=" 1" +D["HAVE_OPENPTY"]=" 1" +D["HAVE_PTY_H"]=" 1" +D["HAVE_SIGNAL_H"]=" 1" +D["HAVE_SELECT"]=" 1" +D["HAVE_SPAWN_H"]=" 1" +D["HAVE_SYS_WAIT_H"]=" 1" +D["HAVE_FORK"]=" 1" +D["HAVE_VFORK"]=" 1" +D["HAVE_WORKING_VFORK"]=" 1" +D["HAVE_WORKING_FORK"]=" 1" +D["HAVE_POPEN"]=" 1" +D["HAVE_POSIX_SPAWN"]=" 1" +D["HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP"]=" 1" +D["HAVE_SIGNAL"]=" 1" +D["HAVE_SIGACTION"]=" 1" +D["HAVE_SETPGID"]=" 1" +D["HAVE_DLOPEN"]=" 1" +D["HAVE_SYS_TIME_H"]=" 1" +D["HAVE_GETRUSAGE"]=" 1" +D["HAVE_GETTIMEOFDAY"]=" 1" +D["HAVE_CLOCK_GETTIME"]=" 1" +D["HAVE_CLOCK_GETRES"]=" 1" +D["HAVE_SETITIMER"]=" 1" +D["HAVE_SBRK"]=" 1" +D["HAVE_MADVISE"]=" 1" +D["HAVE_SYSCONF"]=" 1" +D["HAVE_REALPATH"]=" 1" +D["HAVE_READLINK"]=" 1" +D["HAVE_MKDTEMP"]=" 1" +D["HAVE_LSTAT"]=" 1" +D["HAVE_TTYNAME"]=" 1" +D["HAVE_EXP10"]=" 1" +D["HAVE_PTHREAD_PRIO_INHERIT"]=" 1" +D["HAVE_PTHREAD"]=" 1" +D["HAVE_EXECINFO_H"]=" 1" +D["backtrace_size_t"]=" int" +D["HAVE_BACKTRACE"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`printf "%s\n" "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra=" + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "build/stamp-h":C) echo timestamp > build/stamp-h ;; + "doc/make_doc":F) chmod +x doc/make_doc ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/native-build/doc/make_doc b/native-build/doc/make_doc new file mode 100755 index 0000000000..082443b613 --- /dev/null +++ b/native-build/doc/make_doc @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +GAP=/home/runner/work/gap/gap/native-build/gap +GAPARGS="-b -m 1g -x 80 -q --quitonbreak" +if [ "$1" == "nopdf" ]; then + NOPDF=", \"nopdf\"" +else + NOPDF="" +fi +echo "--------------------" +echo "Building GAP manuals" +echo "--------------------" + +"$GAP" $GAPARGS -A < StartsWith(x, "#W ") and x <> "#W There are overfull boxes:");; +if Length(errors) = 0 then + QuitGap(true); +else + Print(errors, "\n"); + QuitGap(false); +fi; +EOF diff --git a/native-build/doc/versiondata b/native-build/doc/versiondata new file mode 100644 index 0000000000..73a44cc905 --- /dev/null +++ b/native-build/doc/versiondata @@ -0,0 +1,10 @@ + + + + + diff --git a/native-build/ffgen b/native-build/ffgen new file mode 100755 index 0000000000000000000000000000000000000000..b926ccfb60c1dc56fabe87c2c37cf7cd1f0929fd GIT binary patch literal 16888 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 literal 0 HcmV?d00001 diff --git a/native-build/libgap.pc b/native-build/libgap.pc new file mode 100644 index 0000000000..8a1547d26a --- /dev/null +++ b/native-build/libgap.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=/usr/local/include + +Name: GAP +Description: Library containing the kernel of GAP, a computer algebra system +URL: https://www.gap-system.org +Version: 4.15dev +Libs: -L${libdir} -lgap +Cflags: -I${includedir} diff --git a/src/ffdata.c b/src/ffdata.c new file mode 100644 index 0000000000..154ea2abae --- /dev/null +++ b/src/ffdata.c @@ -0,0 +1,2643 @@ +/* This file has been generated by etc/ffgen.c during build, + do not edit */ +#include "ffdata.h" + +/* Entries are ordered by value of p^d; can use binary search + * to find them. Indices start at 1. + */ + +const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 1, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 1, 1, 2, 3, + 1, 1, 5, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 1, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 7, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 5, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 7, 3, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, +}; + +const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 2, 3, 2, 5, 7, + 2, 3, 11, 13, 2, 17, + 19, 23, 5, 3, 29, 31, + 2, 37, 41, 43, 47, 7, + 53, 59, 61, 2, 67, 71, + 73, 79, 3, 83, 89, 97, + 101, 103, 107, 109, 113, 11, + 5, 127, 2, 131, 137, 139, + 149, 151, 157, 163, 167, 13, + 173, 179, 181, 191, 193, 197, + 199, 211, 223, 227, 229, 233, + 239, 241, 3, 251, 2, 257, + 263, 269, 271, 277, 281, 283, + 17, 293, 307, 311, 313, 317, + 331, 337, 7, 347, 349, 353, + 359, 19, 367, 373, 379, 383, + 389, 397, 401, 409, 419, 421, + 431, 433, 439, 443, 449, 457, + 461, 463, 467, 479, 487, 491, + 499, 503, 509, 2, 521, 523, + 23, 541, 547, 557, 563, 569, + 571, 577, 587, 593, 599, 601, + 607, 613, 617, 619, 5, 631, + 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, + 719, 727, 3, 733, 739, 743, + 751, 757, 761, 769, 773, 787, + 797, 809, 811, 821, 823, 827, + 829, 839, 29, 853, 857, 859, + 863, 877, 881, 883, 887, 907, + 911, 919, 929, 937, 941, 947, + 953, 31, 967, 971, 977, 983, + 991, 997, 1009, 1013, 1019, 1021, + 2, 1031, 1033, 1039, 1049, 1051, + 1061, 1063, 1069, 1087, 1091, 1093, + 1097, 1103, 1109, 1117, 1123, 1129, + 1151, 1153, 1163, 1171, 1181, 1187, + 1193, 1201, 1213, 1217, 1223, 1229, + 1231, 1237, 1249, 1259, 1277, 1279, + 1283, 1289, 1291, 1297, 1301, 1303, + 1307, 1319, 1321, 1327, 11, 1361, + 1367, 37, 1373, 1381, 1399, 1409, + 1423, 1427, 1429, 1433, 1439, 1447, + 1451, 1453, 1459, 1471, 1481, 1483, + 1487, 1489, 1493, 1499, 1511, 1523, + 1531, 1543, 1549, 1553, 1559, 1567, + 1571, 1579, 1583, 1597, 1601, 1607, + 1609, 1613, 1619, 1621, 1627, 1637, + 1657, 1663, 1667, 1669, 41, 1693, + 1697, 1699, 1709, 1721, 1723, 1733, + 1741, 1747, 1753, 1759, 1777, 1783, + 1787, 1789, 1801, 1811, 1823, 1831, + 1847, 43, 1861, 1867, 1871, 1873, + 1877, 1879, 1889, 1901, 1907, 1913, + 1931, 1933, 1949, 1951, 1973, 1979, + 1987, 1993, 1997, 1999, 2003, 2011, + 2017, 2027, 2029, 2039, 2, 2053, + 2063, 2069, 2081, 2083, 2087, 2089, + 2099, 2111, 2113, 2129, 2131, 2137, + 2141, 2143, 2153, 2161, 2179, 3, + 13, 2203, 2207, 47, 2213, 2221, + 2237, 2239, 2243, 2251, 2267, 2269, + 2273, 2281, 2287, 2293, 2297, 2309, + 2311, 2333, 2339, 2341, 2347, 2351, + 2357, 2371, 2377, 2381, 2383, 2389, + 2393, 2399, 7, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, + 2477, 2503, 2521, 2531, 2539, 2543, + 2549, 2551, 2557, 2579, 2591, 2593, + 2609, 2617, 2621, 2633, 2647, 2657, + 2659, 2663, 2671, 2677, 2683, 2687, + 2689, 2693, 2699, 2707, 2711, 2713, + 2719, 2729, 2731, 2741, 2749, 2753, + 2767, 2777, 2789, 2791, 2797, 2801, + 2803, 53, 2819, 2833, 2837, 2843, + 2851, 2857, 2861, 2879, 2887, 2897, + 2903, 2909, 2917, 2927, 2939, 2953, + 2957, 2963, 2969, 2971, 2999, 3001, + 3011, 3019, 3023, 3037, 3041, 3049, + 3061, 3067, 3079, 3083, 3089, 3109, + 3119, 3121, 5, 3137, 3163, 3167, + 3169, 3181, 3187, 3191, 3203, 3209, + 3217, 3221, 3229, 3251, 3253, 3257, + 3259, 3271, 3299, 3301, 3307, 3313, + 3319, 3323, 3329, 3331, 3343, 3347, + 3359, 3361, 3371, 3373, 3389, 3391, + 3407, 3413, 3433, 3449, 3457, 3461, + 3463, 3467, 3469, 59, 3491, 3499, + 3511, 3517, 3527, 3529, 3533, 3539, + 3541, 3547, 3557, 3559, 3571, 3581, + 3583, 3593, 3607, 3613, 3617, 3623, + 3631, 3637, 3643, 3659, 3671, 3673, + 3677, 3691, 3697, 3701, 3709, 3719, + 61, 3727, 3733, 3739, 3761, 3767, + 3769, 3779, 3793, 3797, 3803, 3821, + 3823, 3833, 3847, 3851, 3853, 3863, + 3877, 3881, 3889, 3907, 3911, 3917, + 3919, 3923, 3929, 3931, 3943, 3947, + 3967, 3989, 4001, 4003, 4007, 4013, + 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 2, 4099, + 4111, 4127, 4129, 4133, 4139, 4153, + 4157, 4159, 4177, 4201, 4211, 4217, + 4219, 4229, 4231, 4241, 4243, 4253, + 4259, 4261, 4271, 4273, 4283, 4289, + 4297, 4327, 4337, 4339, 4349, 4357, + 4363, 4373, 4391, 4397, 4409, 4421, + 4423, 4441, 4447, 4451, 4457, 4463, + 4481, 4483, 67, 4493, 4507, 4513, + 4517, 4519, 4523, 4547, 4549, 4561, + 4567, 4583, 4591, 4597, 4603, 4621, + 4637, 4639, 4643, 4649, 4651, 4657, + 4663, 4673, 4679, 4691, 4703, 4721, + 4723, 4729, 4733, 4751, 4759, 4783, + 4787, 4789, 4793, 4799, 4801, 4813, + 4817, 4831, 4861, 4871, 4877, 4889, + 4903, 4909, 17, 4919, 4931, 4933, + 4937, 4943, 4951, 4957, 4967, 4969, + 4973, 4987, 4993, 4999, 5003, 5009, + 5011, 5021, 5023, 5039, 71, 5051, + 5059, 5077, 5081, 5087, 5099, 5101, + 5107, 5113, 5119, 5147, 5153, 5167, + 5171, 5179, 5189, 5197, 5209, 5227, + 5231, 5233, 5237, 5261, 5273, 5279, + 5281, 5297, 5303, 5309, 5323, 73, + 5333, 5347, 5351, 5381, 5387, 5393, + 5399, 5407, 5413, 5417, 5419, 5431, + 5437, 5441, 5443, 5449, 5471, 5477, + 5479, 5483, 5501, 5503, 5507, 5519, + 5521, 5527, 5531, 5557, 5563, 5569, + 5573, 5581, 5591, 5623, 5639, 5641, + 5647, 5651, 5653, 5657, 5659, 5669, + 5683, 5689, 5693, 5701, 5711, 5717, + 5737, 5741, 5743, 5749, 5779, 5783, + 5791, 5801, 5807, 5813, 5821, 5827, + 5839, 5843, 5849, 5851, 5857, 5861, + 5867, 5869, 5879, 5881, 5897, 5903, + 5923, 5927, 5939, 5953, 5981, 5987, + 6007, 6011, 6029, 6037, 6043, 6047, + 6053, 6067, 6073, 6079, 6089, 6091, + 6101, 6113, 6121, 6131, 6133, 6143, + 6151, 6163, 6173, 6197, 6199, 6203, + 6211, 6217, 6221, 6229, 79, 6247, + 6257, 6263, 6269, 6271, 6277, 6287, + 6299, 6301, 6311, 6317, 6323, 6329, + 6337, 6343, 6353, 6359, 6361, 6367, + 6373, 6379, 6389, 6397, 6421, 6427, + 6449, 6451, 6469, 6473, 6481, 6491, + 6521, 6529, 6547, 6551, 6553, 3, + 6563, 6569, 6571, 6577, 6581, 6599, + 6607, 6619, 6637, 6653, 6659, 6661, + 6673, 6679, 6689, 6691, 6701, 6703, + 6709, 6719, 6733, 6737, 6761, 6763, + 6779, 6781, 6791, 6793, 6803, 6823, + 6827, 6829, 6833, 6841, 6857, 19, + 6863, 6869, 6871, 6883, 83, 6899, + 6907, 6911, 6917, 6947, 6949, 6959, + 6961, 6967, 6971, 6977, 6983, 6991, + 6997, 7001, 7013, 7019, 7027, 7039, + 7043, 7057, 7069, 7079, 7103, 7109, + 7121, 7127, 7129, 7151, 7159, 7177, + 7187, 7193, 7207, 7211, 7213, 7219, + 7229, 7237, 7243, 7247, 7253, 7283, + 7297, 7307, 7309, 7321, 7331, 7333, + 7349, 7351, 7369, 7393, 7411, 7417, + 7433, 7451, 7457, 7459, 7477, 7481, + 7487, 7489, 7499, 7507, 7517, 7523, + 7529, 7537, 7541, 7547, 7549, 7559, + 7561, 7573, 7577, 7583, 7589, 7591, + 7603, 7607, 7621, 7639, 7643, 7649, + 7669, 7673, 7681, 7687, 7691, 7699, + 7703, 7717, 7723, 7727, 7741, 7753, + 7757, 7759, 7789, 7793, 7817, 7823, + 7829, 7841, 7853, 7867, 7873, 7877, + 7879, 7883, 7901, 7907, 7919, 89, + 7927, 7933, 7937, 7949, 7951, 7963, + 7993, 8009, 8011, 8017, 8039, 8053, + 8059, 8069, 8081, 8087, 8089, 8093, + 8101, 8111, 8117, 8123, 8147, 8161, + 8167, 8171, 8179, 8191, 2, 8209, + 8219, 8221, 8231, 8233, 8237, 8243, + 8263, 8269, 8273, 8287, 8291, 8293, + 8297, 8311, 8317, 8329, 8353, 8363, + 8369, 8377, 8387, 8389, 8419, 8423, + 8429, 8431, 8443, 8447, 8461, 8467, + 8501, 8513, 8521, 8527, 8537, 8539, + 8543, 8563, 8573, 8581, 8597, 8599, + 8609, 8623, 8627, 8629, 8641, 8647, + 8663, 8669, 8677, 8681, 8689, 8693, + 8699, 8707, 8713, 8719, 8731, 8737, + 8741, 8747, 8753, 8761, 8779, 8783, + 8803, 8807, 8819, 8821, 8831, 8837, + 8839, 8849, 8861, 8863, 8867, 8887, + 8893, 8923, 8929, 8933, 8941, 8951, + 8963, 8969, 8971, 8999, 9001, 9007, + 9011, 9013, 9029, 9041, 9043, 9049, + 9059, 9067, 9091, 9103, 9109, 9127, + 9133, 9137, 9151, 9157, 9161, 9173, + 9181, 9187, 9199, 9203, 9209, 9221, + 9227, 9239, 9241, 9257, 9277, 9281, + 9283, 9293, 9311, 9319, 9323, 9337, + 9341, 9343, 9349, 9371, 9377, 9391, + 9397, 9403, 97, 9413, 9419, 9421, + 9431, 9433, 9437, 9439, 9461, 9463, + 9467, 9473, 9479, 9491, 9497, 9511, + 9521, 9533, 9539, 9547, 9551, 9587, + 9601, 9613, 9619, 9623, 9629, 9631, + 9643, 9649, 9661, 9677, 9679, 9689, + 9697, 9719, 9721, 9733, 9739, 9743, + 9749, 9767, 9769, 9781, 9787, 9791, + 9803, 9811, 9817, 9829, 9833, 9839, + 9851, 9857, 9859, 9871, 9883, 9887, + 9901, 9907, 9923, 9929, 9931, 9941, + 9949, 9967, 9973, 10007, 10009, 10037, + 10039, 10061, 10067, 10069, 10079, 10091, + 10093, 10099, 10103, 10111, 10133, 10139, + 10141, 10151, 10159, 10163, 10169, 10177, + 10181, 10193, 101, 10211, 10223, 10243, + 10247, 10253, 10259, 10267, 10271, 10273, + 10289, 10301, 10303, 10313, 10321, 10331, + 10333, 10337, 10343, 10357, 10369, 10391, + 10399, 10427, 10429, 10433, 10453, 10457, + 10459, 10463, 10477, 10487, 10499, 10501, + 10513, 10529, 10531, 10559, 10567, 10589, + 10597, 10601, 10607, 103, 10613, 10627, + 10631, 10639, 10651, 10657, 10663, 10667, + 10687, 10691, 10709, 10711, 10723, 10729, + 10733, 10739, 10753, 10771, 10781, 10789, + 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, + 10909, 10937, 10939, 10949, 10957, 10973, + 10979, 10987, 10993, 11003, 11027, 11047, + 11057, 11059, 11069, 11071, 11083, 11087, + 11093, 11113, 11117, 11119, 11131, 11149, + 11159, 11161, 11171, 11173, 11177, 11197, + 11213, 11239, 11243, 11251, 11257, 11261, + 11273, 11279, 11287, 11299, 11311, 11317, + 11321, 11329, 11351, 11353, 11369, 11383, + 11393, 11399, 11411, 11423, 11437, 11443, + 11447, 107, 11467, 11471, 11483, 11489, + 11491, 11497, 11503, 11519, 11527, 11549, + 11551, 11579, 11587, 11593, 11597, 11617, + 11621, 11633, 11657, 11677, 11681, 11689, + 11699, 11701, 11717, 11719, 11731, 11743, + 11777, 11779, 11783, 11789, 11801, 11807, + 11813, 11821, 11827, 11831, 11833, 11839, + 11863, 11867, 109, 11887, 11897, 11903, + 11909, 11923, 11927, 11933, 11939, 11941, + 11953, 11959, 11969, 11971, 11981, 11987, + 12007, 12011, 12037, 12041, 12043, 12049, + 12071, 12073, 12097, 12101, 12107, 12109, + 12113, 12119, 12143, 12149, 12157, 12161, + 12163, 23, 12197, 12203, 12211, 12227, + 12239, 12241, 12251, 12253, 12263, 12269, + 12277, 12281, 12289, 12301, 12323, 12329, + 12343, 12347, 12373, 12377, 12379, 12391, + 12401, 12409, 12413, 12421, 12433, 12437, + 12451, 12457, 12473, 12479, 12487, 12491, + 12497, 12503, 12511, 12517, 12527, 12539, + 12541, 12547, 12553, 12569, 12577, 12583, + 12589, 12601, 12611, 12613, 12619, 12637, + 12641, 12647, 12653, 12659, 12671, 12689, + 12697, 12703, 12713, 12721, 12739, 12743, + 12757, 12763, 113, 12781, 12791, 12799, + 12809, 12821, 12823, 12829, 12841, 12853, + 12889, 12893, 12899, 12907, 12911, 12917, + 12919, 12923, 12941, 12953, 12959, 12967, + 12973, 12979, 12983, 13001, 13003, 13007, + 13009, 13033, 13037, 13043, 13049, 13063, + 13093, 13099, 13103, 13109, 13121, 13127, + 13147, 13151, 13159, 13163, 13171, 13177, + 13183, 13187, 13217, 13219, 13229, 13241, + 13249, 13259, 13267, 13291, 13297, 13309, + 13313, 13327, 13331, 13337, 13339, 13367, + 13381, 13397, 13399, 13411, 13417, 13421, + 13441, 13451, 13457, 13463, 13469, 13477, + 13487, 13499, 13513, 13523, 13537, 13553, + 13567, 13577, 13591, 13597, 13613, 13619, + 13627, 13633, 13649, 13669, 13679, 13681, + 13687, 13691, 13693, 13697, 13709, 13711, + 13721, 13723, 13729, 13751, 13757, 13759, + 13763, 13781, 13789, 13799, 13807, 13829, + 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, + 13931, 13933, 13963, 13967, 13997, 13999, + 14009, 14011, 14029, 14033, 14051, 14057, + 14071, 14081, 14083, 14087, 14107, 14143, + 14149, 14153, 14159, 14173, 14177, 14197, + 14207, 14221, 14243, 14249, 14251, 14281, + 14293, 14303, 14321, 14323, 14327, 14341, + 14347, 14369, 14387, 14389, 14401, 14407, + 14411, 14419, 14423, 14431, 14437, 14447, + 14449, 14461, 14479, 14489, 14503, 14519, + 14533, 14537, 14543, 14549, 14551, 14557, + 14561, 14563, 14591, 14593, 14621, 14627, + 14629, 14633, 14639, 11, 14653, 14657, + 14669, 14683, 14699, 14713, 14717, 14723, + 14731, 14737, 14741, 14747, 14753, 14759, + 14767, 14771, 14779, 14783, 14797, 14813, + 14821, 14827, 14831, 14843, 14851, 14867, + 14869, 14879, 14887, 14891, 14897, 14923, + 14929, 14939, 14947, 14951, 14957, 14969, + 14983, 15013, 15017, 15031, 15053, 15061, + 15073, 15077, 15083, 15091, 15101, 15107, + 15121, 15131, 15137, 15139, 15149, 15161, + 15173, 15187, 15193, 15199, 15217, 15227, + 15233, 15241, 15259, 15263, 15269, 15271, + 15277, 15287, 15289, 15299, 15307, 15313, + 15319, 15329, 15331, 15349, 15359, 15361, + 15373, 15377, 15383, 15391, 15401, 15413, + 15427, 15439, 15443, 15451, 15461, 15467, + 15473, 15493, 15497, 15511, 15527, 15541, + 15551, 15559, 15569, 15581, 15583, 15601, + 15607, 15619, 5, 15629, 15641, 15643, + 15647, 15649, 15661, 15667, 15671, 15679, + 15683, 15727, 15731, 15733, 15737, 15739, + 15749, 15761, 15767, 15773, 15787, 15791, + 15797, 15803, 15809, 15817, 15823, 15859, + 15877, 15881, 15887, 15889, 15901, 15907, + 15913, 15919, 15923, 15937, 15959, 15971, + 15973, 15991, 16001, 16007, 16033, 16057, + 16061, 16063, 16067, 16069, 16073, 16087, + 16091, 16097, 16103, 16111, 16127, 127, + 16139, 16141, 16183, 16187, 16189, 16193, + 16217, 16223, 16229, 16231, 16249, 16253, + 16267, 16273, 16301, 16319, 16333, 16339, + 16349, 16361, 16363, 16369, 16381, 2, + 16411, 16417, 16421, 16427, 16433, 16447, + 16451, 16453, 16477, 16481, 16487, 16493, + 16519, 16529, 16547, 16553, 16561, 16567, + 16573, 16603, 16607, 16619, 16631, 16633, + 16649, 16651, 16657, 16661, 16673, 16691, + 16693, 16699, 16703, 16729, 16741, 16747, + 16759, 16763, 16787, 7, 16811, 16823, + 16829, 16831, 16843, 16871, 16879, 16883, + 16889, 16901, 16903, 16921, 16927, 16931, + 16937, 16943, 16963, 16979, 16981, 16987, + 16993, 17011, 17021, 17027, 17029, 17033, + 17041, 17047, 17053, 17077, 17093, 17099, + 17107, 17117, 17123, 17137, 17159, 131, + 17167, 17183, 17189, 17191, 17203, 17207, + 17209, 17231, 17239, 17257, 17291, 17293, + 17299, 17317, 17321, 17327, 17333, 17341, + 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, + 17449, 17467, 17471, 17477, 17483, 17489, + 17491, 17497, 17509, 17519, 17539, 17551, + 17569, 17573, 17579, 17581, 17597, 17599, + 17609, 17623, 17627, 17657, 17659, 17669, + 17681, 17683, 17707, 17713, 17729, 17737, + 17747, 17749, 17761, 17783, 17789, 17791, + 17807, 17827, 17837, 17839, 17851, 17863, + 17881, 17891, 17903, 17909, 17911, 17921, + 17923, 17929, 17939, 17957, 17959, 17971, + 17977, 17981, 17987, 17989, 18013, 18041, + 18043, 18047, 18049, 18059, 18061, 18077, + 18089, 18097, 18119, 18121, 18127, 18131, + 18133, 18143, 18149, 18169, 18181, 18191, + 18199, 18211, 18217, 18223, 18229, 18233, + 18251, 18253, 18257, 18269, 18287, 18289, + 18301, 18307, 18311, 18313, 18329, 18341, + 18353, 18367, 18371, 18379, 18397, 18401, + 18413, 18427, 18433, 18439, 18443, 18451, + 18457, 18461, 18481, 18493, 18503, 18517, + 18521, 18523, 18539, 18541, 18553, 18583, + 18587, 18593, 18617, 18637, 18661, 18671, + 18679, 18691, 18701, 18713, 18719, 18731, + 18743, 18749, 18757, 137, 18773, 18787, + 18793, 18797, 18803, 18839, 18859, 18869, + 18899, 18911, 18913, 18917, 18919, 18947, + 18959, 18973, 18979, 19001, 19009, 19013, + 19031, 19037, 19051, 19069, 19073, 19079, + 19081, 19087, 19121, 19139, 19141, 19157, + 19163, 19181, 19183, 19207, 19211, 19213, + 19219, 19231, 19237, 19249, 19259, 19267, + 19273, 19289, 19301, 19309, 19319, 139, + 19333, 19373, 19379, 19381, 19387, 19391, + 19403, 19417, 19421, 19423, 19427, 19429, + 19433, 19441, 19447, 19457, 19463, 19469, + 19471, 19477, 19483, 19489, 19501, 19507, + 19531, 19541, 19543, 19553, 19559, 19571, + 19577, 19583, 19597, 19603, 19609, 19661, + 19681, 3, 19687, 19697, 19699, 19709, + 19717, 19727, 19739, 19751, 19753, 19759, + 19763, 19777, 19793, 19801, 19813, 19819, + 19841, 19843, 19853, 19861, 19867, 19889, + 19891, 19913, 19919, 19927, 19937, 19949, + 19961, 19963, 19973, 19979, 19991, 19993, + 19997, 20011, 20021, 20023, 20029, 20047, + 20051, 20063, 20071, 20089, 20101, 20107, + 20113, 20117, 20123, 20129, 20143, 20147, + 20149, 20161, 20173, 20177, 20183, 20201, + 20219, 20231, 20233, 20249, 20261, 20269, + 20287, 20297, 20323, 20327, 20333, 20341, + 20347, 20353, 20357, 20359, 20369, 20389, + 20393, 20399, 20407, 20411, 20431, 20441, + 20443, 20477, 20479, 20483, 20507, 20509, + 20521, 20533, 20543, 20549, 20551, 20563, + 20593, 20599, 20611, 20627, 20639, 20641, + 20663, 20681, 20693, 20707, 20717, 20719, + 20731, 20743, 20747, 20749, 20753, 20759, + 20771, 20773, 20789, 20807, 20809, 20849, + 20857, 20873, 20879, 20887, 20897, 20899, + 20903, 20921, 20929, 20939, 20947, 20959, + 20963, 20981, 20983, 21001, 21011, 21013, + 21017, 21019, 21023, 21031, 21059, 21061, + 21067, 21089, 21101, 21107, 21121, 21139, + 21143, 21149, 21157, 21163, 21169, 21179, + 21187, 21191, 21193, 21211, 21221, 21227, + 21247, 21269, 21277, 21283, 21313, 21317, + 21319, 21323, 21341, 21347, 21377, 21379, + 21383, 21391, 21397, 21401, 21407, 21419, + 21433, 21467, 21481, 21487, 21491, 21493, + 21499, 21503, 21517, 21521, 21523, 21529, + 21557, 21559, 21563, 21569, 21577, 21587, + 21589, 21599, 21601, 21611, 21613, 21617, + 21647, 21649, 21661, 21673, 21683, 21701, + 21713, 21727, 21737, 21739, 21751, 21757, + 21767, 21773, 21787, 21799, 21803, 21817, + 21821, 21839, 21841, 21851, 21859, 21863, + 21871, 21881, 21893, 21911, 21929, 21937, + 21943, 21961, 21977, 21991, 21997, 22003, + 22013, 22027, 22031, 22037, 22039, 22051, + 22063, 22067, 22073, 22079, 22091, 22093, + 22109, 22111, 22123, 22129, 22133, 22147, + 22153, 22157, 22159, 22171, 22189, 22193, + 149, 22229, 22247, 22259, 22271, 22273, + 22277, 22279, 22283, 22291, 22303, 22307, + 22343, 22349, 22367, 22369, 22381, 22391, + 22397, 22409, 22433, 22441, 22447, 22453, + 22469, 22481, 22483, 22501, 22511, 22531, + 22541, 22543, 22549, 22567, 22571, 22573, + 22613, 22619, 22621, 22637, 22639, 22643, + 22651, 22669, 22679, 22691, 22697, 22699, + 22709, 22717, 22721, 22727, 22739, 22741, + 22751, 22769, 22777, 22783, 22787, 151, + 22807, 22811, 22817, 22853, 22859, 22861, + 22871, 22877, 22901, 22907, 22921, 22937, + 22943, 22961, 22963, 22973, 22993, 23003, + 23011, 23017, 23021, 23027, 23029, 23039, + 23041, 23053, 23057, 23059, 23063, 23071, + 23081, 23087, 23099, 23117, 23131, 23143, + 23159, 23167, 23173, 23189, 23197, 23201, + 23203, 23209, 23227, 23251, 23269, 23279, + 23291, 23293, 23297, 23311, 23321, 23327, + 23333, 23339, 23357, 23369, 23371, 23399, + 23417, 23431, 23447, 23459, 23473, 23497, + 23509, 23531, 23537, 23539, 23549, 23557, + 23561, 23563, 23567, 23581, 23593, 23599, + 23603, 23609, 23623, 23627, 23629, 23633, + 23663, 23669, 23671, 23677, 23687, 23689, + 23719, 23741, 23743, 23747, 23753, 23761, + 23767, 23773, 23789, 23801, 23813, 23819, + 23827, 23831, 23833, 23857, 23869, 23873, + 23879, 23887, 23893, 23899, 23909, 23911, + 23917, 23929, 23957, 23971, 23977, 23981, + 23993, 24001, 24007, 24019, 24023, 24029, + 24043, 24049, 24061, 24071, 24077, 24083, + 24091, 24097, 24103, 24107, 24109, 24113, + 24121, 24133, 24137, 24151, 24169, 24179, + 24181, 24197, 24203, 24223, 24229, 24239, + 24247, 24251, 24281, 24317, 24329, 24337, + 24359, 24371, 24373, 24379, 29, 24391, + 24407, 24413, 24419, 24421, 24439, 24443, + 24469, 24473, 24481, 24499, 24509, 24517, + 24527, 24533, 24547, 24551, 24571, 24593, + 24611, 24623, 24631, 157, 24659, 24671, + 24677, 24683, 24691, 24697, 24709, 24733, + 24749, 24763, 24767, 24781, 24793, 24799, + 24809, 24821, 24841, 24847, 24851, 24859, + 24877, 24889, 24907, 24917, 24919, 24923, + 24943, 24953, 24967, 24971, 24977, 24979, + 24989, 25013, 25031, 25033, 25037, 25057, + 25073, 25087, 25097, 25111, 25117, 25121, + 25127, 25147, 25153, 25163, 25169, 25171, + 25183, 25189, 25219, 25229, 25237, 25243, + 25247, 25253, 25261, 25301, 25303, 25307, + 25309, 25321, 25339, 25343, 25349, 25357, + 25367, 25373, 25391, 25409, 25411, 25423, + 25439, 25447, 25453, 25457, 25463, 25469, + 25471, 25523, 25537, 25541, 25561, 25577, + 25579, 25583, 25589, 25601, 25603, 25609, + 25621, 25633, 25639, 25643, 25657, 25667, + 25673, 25679, 25693, 25703, 25717, 25733, + 25741, 25747, 25759, 25763, 25771, 25793, + 25799, 25801, 25819, 25841, 25847, 25849, + 25867, 25873, 25889, 25903, 25913, 25919, + 25931, 25933, 25939, 25943, 25951, 25969, + 25981, 25997, 25999, 26003, 26017, 26021, + 26029, 26041, 26053, 26083, 26099, 26107, + 26111, 26113, 26119, 26141, 26153, 26161, + 26171, 26177, 26183, 26189, 26203, 26209, + 26227, 26237, 26249, 26251, 26261, 26263, + 26267, 26293, 26297, 26309, 26317, 26321, + 26339, 26347, 26357, 26371, 26387, 26393, + 26399, 26407, 26417, 26423, 26431, 26437, + 26449, 26459, 26479, 26489, 26497, 26501, + 26513, 26539, 26557, 26561, 163, 26573, + 26591, 26597, 26627, 26633, 26641, 26647, + 26669, 26681, 26683, 26687, 26693, 26699, + 26701, 26711, 26713, 26717, 26723, 26729, + 26731, 26737, 26759, 26777, 26783, 26801, + 26813, 26821, 26833, 26839, 26849, 26861, + 26863, 26879, 26881, 26891, 26893, 26903, + 26921, 26927, 26947, 26951, 26953, 26959, + 26981, 26987, 26993, 27011, 27017, 27031, + 27043, 27059, 27061, 27067, 27073, 27077, + 27091, 27103, 27107, 27109, 27127, 27143, + 27179, 27191, 27197, 27211, 27239, 27241, + 27253, 27259, 27271, 27277, 27281, 27283, + 27299, 27329, 27337, 27361, 27367, 27397, + 27407, 27409, 27427, 27431, 27437, 27449, + 27457, 27479, 27481, 27487, 27509, 27527, + 27529, 27539, 27541, 27551, 27581, 27583, + 27611, 27617, 27631, 27647, 27653, 27673, + 27689, 27691, 27697, 27701, 27733, 27737, + 27739, 27743, 27749, 27751, 27763, 27767, + 27773, 27779, 27791, 27793, 27799, 27803, + 27809, 27817, 27823, 27827, 27847, 27851, + 27883, 167, 27893, 27901, 27917, 27919, + 27941, 27943, 27947, 27953, 27961, 27967, + 27983, 27997, 28001, 28019, 28027, 28031, + 28051, 28057, 28069, 28081, 28087, 28097, + 28099, 28109, 28111, 28123, 28151, 28163, + 28181, 28183, 28201, 28211, 28219, 28229, + 28277, 28279, 28283, 28289, 28297, 28307, + 28309, 28319, 28349, 28351, 28387, 28393, + 28403, 28409, 28411, 28429, 28433, 28439, + 28447, 28463, 28477, 28493, 28499, 28513, + 28517, 28537, 28541, 28547, 28549, 28559, + 13, 28571, 28573, 28579, 28591, 28597, + 28603, 28607, 28619, 28621, 28627, 28631, + 28643, 28649, 28657, 28661, 28663, 28669, + 28687, 28697, 28703, 28711, 28723, 28729, + 28751, 28753, 28759, 28771, 28789, 28793, + 28807, 28813, 28817, 28837, 28843, 28859, + 28867, 28871, 28879, 28901, 28909, 28921, + 28927, 28933, 28949, 28961, 28979, 29009, + 29017, 29021, 29023, 29027, 29033, 29059, + 29063, 29077, 29101, 29123, 29129, 29131, + 29137, 29147, 29153, 29167, 29173, 29179, + 29191, 29201, 29207, 29209, 29221, 29231, + 29243, 29251, 29269, 29287, 29297, 29303, + 29311, 29327, 29333, 29339, 29347, 29363, + 29383, 29387, 29389, 29399, 29401, 29411, + 29423, 29429, 29437, 29443, 29453, 29473, + 29483, 29501, 29527, 29531, 29537, 29567, + 29569, 29573, 29581, 29587, 29599, 29611, + 29629, 29633, 29641, 29663, 29669, 29671, + 29683, 29717, 29723, 29741, 29753, 29759, + 29761, 29789, 31, 29803, 29819, 29833, + 29837, 29851, 29863, 29867, 29873, 29879, + 29881, 29917, 29921, 29927, 173, 29947, + 29959, 29983, 29989, 30011, 30013, 30029, + 30047, 30059, 30071, 30089, 30091, 30097, + 30103, 30109, 30113, 30119, 30133, 30137, + 30139, 30161, 30169, 30181, 30187, 30197, + 30203, 30211, 30223, 30241, 30253, 30259, + 30269, 30271, 30293, 30307, 30313, 30319, + 30323, 30341, 30347, 30367, 30389, 30391, + 30403, 30427, 30431, 30449, 30467, 30469, + 30491, 30493, 30497, 30509, 30517, 30529, + 30539, 30553, 30557, 30559, 30577, 30593, + 30631, 30637, 30643, 30649, 30661, 30671, + 30677, 30689, 30697, 30703, 30707, 30713, + 30727, 30757, 30763, 30773, 30781, 30803, + 30809, 30817, 30829, 30839, 30841, 30851, + 30853, 30859, 30869, 30871, 30881, 30893, + 30911, 30931, 30937, 30941, 30949, 30971, + 30977, 30983, 31013, 31019, 31033, 31039, + 31051, 31063, 31069, 31079, 31081, 31091, + 31121, 31123, 31139, 31147, 31151, 31153, + 31159, 31177, 31181, 31183, 31189, 31193, + 31219, 31223, 31231, 31237, 31247, 31249, + 31253, 31259, 31267, 31271, 31277, 31307, + 31319, 31321, 31327, 31333, 31337, 31357, + 31379, 31387, 31391, 31393, 31397, 31469, + 31477, 31481, 31489, 31511, 31513, 31517, + 31531, 31541, 31543, 31547, 31567, 31573, + 31583, 31601, 31607, 31627, 31643, 31649, + 31657, 31663, 31667, 31687, 31699, 31721, + 31723, 31727, 31729, 31741, 31751, 31769, + 31771, 31793, 31799, 31817, 31847, 31849, + 31859, 31873, 31883, 31891, 31907, 31957, + 31963, 31973, 31981, 31991, 32003, 32009, + 32027, 32029, 179, 32051, 32057, 32059, + 32063, 32069, 32077, 32083, 32089, 32099, + 32117, 32119, 32141, 32143, 32159, 32173, + 32183, 32189, 32191, 32203, 32213, 32233, + 32237, 32251, 32257, 32261, 32297, 32299, + 32303, 32309, 32321, 32323, 32327, 32341, + 32353, 32359, 32363, 32369, 32371, 32377, + 32381, 32401, 32411, 32413, 32423, 32429, + 32441, 32443, 32467, 32479, 32491, 32497, + 32503, 32507, 32531, 32533, 32537, 32561, + 32563, 32569, 32573, 32579, 32587, 32603, + 32609, 32611, 32621, 32633, 32647, 32653, + 32687, 32693, 32707, 32713, 32717, 32719, + 32749, 181, 2, 32771, 32779, 32783, + 32789, 32797, 32801, 32803, 32831, 32833, + 32839, 32843, 32869, 32887, 32909, 32911, + 32917, 32933, 32939, 32941, 32957, 32969, + 32971, 32983, 32987, 32993, 32999, 33013, + 33023, 33029, 33037, 33049, 33053, 33071, + 33073, 33083, 33091, 33107, 33113, 33119, + 33149, 33151, 33161, 33179, 33181, 33191, + 33199, 33203, 33211, 33223, 33247, 33287, + 33289, 33301, 33311, 33317, 33329, 33331, + 33343, 33347, 33349, 33353, 33359, 33377, + 33391, 33403, 33409, 33413, 33427, 33457, + 33461, 33469, 33479, 33487, 33493, 33503, + 33521, 33529, 33533, 33547, 33563, 33569, + 33577, 33581, 33587, 33589, 33599, 33601, + 33613, 33617, 33619, 33623, 33629, 33637, + 33641, 33647, 33679, 33703, 33713, 33721, + 33739, 33749, 33751, 33757, 33767, 33769, + 33773, 33791, 33797, 33809, 33811, 33827, + 33829, 33851, 33857, 33863, 33871, 33889, + 33893, 33911, 33923, 33931, 33937, 33941, + 33961, 33967, 33997, 34019, 34031, 34033, + 34039, 34057, 34061, 34123, 34127, 34129, + 34141, 34147, 34157, 34159, 34171, 34183, + 34211, 34213, 34217, 34231, 34253, 34259, + 34261, 34267, 34273, 34283, 34297, 34301, + 34303, 34313, 34319, 34327, 34337, 34351, + 34361, 34367, 34369, 34381, 34403, 34421, + 34429, 34439, 34457, 34469, 34471, 34483, + 34487, 34499, 34501, 34511, 34513, 34519, + 34537, 34543, 34549, 34583, 34589, 34591, + 34603, 34607, 34613, 34631, 34649, 34651, + 34667, 34673, 34679, 34687, 34693, 34703, + 34721, 34729, 34739, 34747, 34757, 34759, + 34763, 34781, 34807, 34819, 34841, 34843, + 34847, 34849, 34871, 34877, 34883, 34897, + 34913, 34919, 34939, 34949, 34961, 34963, + 34981, 35023, 35027, 35051, 35053, 35059, + 35069, 35081, 35083, 35089, 35099, 35107, + 35111, 35117, 35129, 35141, 35149, 35153, + 35159, 35171, 35201, 35221, 35227, 35251, + 35257, 35267, 35279, 35281, 35291, 35311, + 35317, 35323, 35327, 35339, 35353, 35363, + 35381, 35393, 35401, 35407, 35419, 35423, + 35437, 35447, 35449, 35461, 35491, 35507, + 35509, 35521, 35527, 35531, 35533, 35537, + 35543, 35569, 35573, 35591, 35593, 35597, + 35603, 35617, 35671, 35677, 35729, 35731, + 35747, 35753, 35759, 35771, 35797, 35801, + 35803, 35809, 35831, 35837, 35839, 35851, + 35863, 35869, 35879, 35897, 35899, 35911, + 35923, 35933, 35951, 35963, 35969, 35977, + 35983, 35993, 35999, 36007, 36011, 36013, + 36017, 36037, 36061, 36067, 36073, 36083, + 36097, 36107, 36109, 36131, 36137, 36151, + 36161, 36187, 36191, 36209, 36217, 36229, + 36241, 36251, 36263, 36269, 36277, 36293, + 36299, 36307, 36313, 36319, 36341, 36343, + 36353, 36373, 36383, 36389, 36433, 36451, + 36457, 36467, 36469, 36473, 36479, 191, + 36493, 36497, 36523, 36527, 36529, 36541, + 36551, 36559, 36563, 36571, 36583, 36587, + 36599, 36607, 36629, 36637, 36643, 36653, + 36671, 36677, 36683, 36691, 36697, 36709, + 36713, 36721, 36739, 36749, 36761, 36767, + 36779, 36781, 36787, 36791, 36793, 36809, + 36821, 36833, 36847, 36857, 36871, 36877, + 36887, 36899, 36901, 36913, 36919, 36923, + 36929, 36931, 36943, 36947, 36973, 36979, + 36997, 37003, 37013, 37019, 37021, 37039, + 37049, 37057, 37061, 37087, 37097, 37117, + 37123, 37139, 37159, 37171, 37181, 37189, + 37199, 37201, 37217, 37223, 37243, 193, + 37253, 37273, 37277, 37307, 37309, 37313, + 37321, 37337, 37339, 37357, 37361, 37363, + 37369, 37379, 37397, 37409, 37423, 37441, + 37447, 37463, 37483, 37489, 37493, 37501, + 37507, 37511, 37517, 37529, 37537, 37547, + 37549, 37561, 37567, 37571, 37573, 37579, + 37589, 37591, 37607, 37619, 37633, 37643, + 37649, 37657, 37663, 37691, 37693, 37699, + 37717, 37747, 37781, 37783, 37799, 37811, + 37813, 37831, 37847, 37853, 37861, 37871, + 37879, 37889, 37897, 37907, 37951, 37957, + 37963, 37967, 37987, 37991, 37993, 37997, + 38011, 38039, 38047, 38053, 38069, 38083, + 38113, 38119, 38149, 38153, 38167, 38177, + 38183, 38189, 38197, 38201, 38219, 38231, + 38237, 38239, 38261, 38273, 38281, 38287, + 38299, 38303, 38317, 38321, 38327, 38329, + 38333, 38351, 38371, 38377, 38393, 38431, + 38447, 38449, 38453, 38459, 38461, 38501, + 38543, 38557, 38561, 38567, 38569, 38593, + 38603, 38609, 38611, 38629, 38639, 38651, + 38653, 38669, 38671, 38677, 38693, 38699, + 38707, 38711, 38713, 38723, 38729, 38737, + 38747, 38749, 38767, 38783, 38791, 38803, + 197, 38821, 38833, 38839, 38851, 38861, + 38867, 38873, 38891, 38903, 38917, 38921, + 38923, 38933, 38953, 38959, 38971, 38977, + 38993, 39019, 39023, 39041, 39043, 39047, + 39079, 39089, 39097, 39103, 39107, 39113, + 39119, 39133, 39139, 39157, 39161, 39163, + 39181, 39191, 39199, 39209, 39217, 39227, + 39229, 39233, 39239, 39241, 39251, 39293, + 39301, 39313, 39317, 39323, 39341, 39343, + 39359, 39367, 39371, 39373, 39383, 39397, + 39409, 39419, 39439, 39443, 39451, 39461, + 39499, 39503, 39509, 39511, 39521, 39541, + 39551, 39563, 39569, 39581, 199, 39607, + 39619, 39623, 39631, 39659, 39667, 39671, + 39679, 39703, 39709, 39719, 39727, 39733, + 39749, 39761, 39769, 39779, 39791, 39799, + 39821, 39827, 39829, 39839, 39841, 39847, + 39857, 39863, 39869, 39877, 39883, 39887, + 39901, 39929, 39937, 39953, 39971, 39979, + 39983, 39989, 40009, 40013, 40031, 40037, + 40039, 40063, 40087, 40093, 40099, 40111, + 40123, 40127, 40129, 40151, 40153, 40163, + 40169, 40177, 40189, 40193, 40213, 40231, + 40237, 40241, 40253, 40277, 40283, 40289, + 40343, 40351, 40357, 40361, 40387, 40423, + 40427, 40429, 40433, 40459, 40471, 40483, + 40487, 40493, 40499, 40507, 40519, 40529, + 40531, 40543, 40559, 40577, 40583, 40591, + 40597, 40609, 40627, 40637, 40639, 40693, + 40697, 40699, 40709, 40739, 40751, 40759, + 40763, 40771, 40787, 40801, 40813, 40819, + 40823, 40829, 40841, 40847, 40849, 40853, + 40867, 40879, 40883, 40897, 40903, 40927, + 40933, 40939, 40949, 40961, 40973, 40993, + 41011, 41017, 41023, 41039, 41047, 41051, + 41057, 41077, 41081, 41113, 41117, 41131, + 41141, 41143, 41149, 41161, 41177, 41179, + 41183, 41189, 41201, 41203, 41213, 41221, + 41227, 41231, 41233, 41243, 41257, 41263, + 41269, 41281, 41299, 41333, 41341, 41351, + 41357, 41381, 41387, 41389, 41399, 41411, + 41413, 41443, 41453, 41467, 41479, 41491, + 41507, 41513, 41519, 41521, 41539, 41543, + 41549, 41579, 41593, 41597, 41603, 41609, + 41611, 41617, 41621, 41627, 41641, 41647, + 41651, 41659, 41669, 41681, 41687, 41719, + 41729, 41737, 41759, 41761, 41771, 41777, + 41801, 41809, 41813, 41843, 41849, 41851, + 41863, 41879, 41887, 41893, 41897, 41903, + 41911, 41927, 41941, 41947, 41953, 41957, + 41959, 41969, 41981, 41983, 41999, 42013, + 42017, 42019, 42023, 42043, 42061, 42071, + 42073, 42083, 42089, 42101, 42131, 42139, + 42157, 42169, 42179, 42181, 42187, 42193, + 42197, 42209, 42221, 42223, 42227, 42239, + 42257, 42281, 42283, 42293, 42299, 42307, + 42323, 42331, 42337, 42349, 42359, 42373, + 42379, 42391, 42397, 42403, 42407, 42409, + 42433, 42437, 42443, 42451, 42457, 42461, + 42463, 42467, 42473, 42487, 42491, 42499, + 42509, 42533, 42557, 42569, 42571, 42577, + 42589, 42611, 42641, 42643, 42649, 42667, + 42677, 42683, 42689, 42697, 42701, 42703, + 42709, 42719, 42727, 42737, 42743, 42751, + 42767, 42773, 42787, 42793, 42797, 42821, + 42829, 42839, 42841, 42853, 42859, 42863, + 42899, 42901, 42923, 42929, 42937, 42943, + 42953, 42961, 42967, 42979, 42989, 43003, + 43013, 43019, 43037, 43049, 43051, 43063, + 43067, 43093, 43103, 43117, 43133, 43151, + 43159, 43177, 43189, 43201, 43207, 43223, + 43237, 43261, 43271, 43283, 43291, 43313, + 43319, 43321, 43331, 43391, 43397, 43399, + 43403, 43411, 43427, 43441, 43451, 43457, + 43481, 43487, 43499, 43517, 43541, 43543, + 43573, 43577, 43579, 43591, 43597, 43607, + 43609, 43613, 43627, 43633, 43649, 43651, + 43661, 43669, 43691, 43711, 43717, 43721, + 43753, 43759, 43777, 43781, 43783, 43787, + 43789, 43793, 43801, 43853, 43867, 43889, + 43891, 43913, 43933, 43943, 43951, 43961, + 43963, 43969, 43973, 43987, 43991, 43997, + 44017, 44021, 44027, 44029, 44041, 44053, + 44059, 44071, 44087, 44089, 44101, 44111, + 44119, 44123, 44129, 44131, 44159, 44171, + 44179, 44189, 44201, 44203, 44207, 44221, + 44249, 44257, 44263, 44267, 44269, 44273, + 44279, 44281, 44293, 44351, 44357, 44371, + 44381, 44383, 44389, 44417, 44449, 44453, + 44483, 44491, 44497, 44501, 44507, 44519, + 211, 44531, 44533, 44537, 44543, 44549, + 44563, 44579, 44587, 44617, 44621, 44623, + 44633, 44641, 44647, 44651, 44657, 44683, + 44687, 44699, 44701, 44711, 44729, 44741, + 44753, 44771, 44773, 44777, 44789, 44797, + 44809, 44819, 44839, 44843, 44851, 44867, + 44879, 44887, 44893, 44909, 44917, 44927, + 44939, 44953, 44959, 44963, 44971, 44983, + 44987, 45007, 45013, 45053, 45061, 45077, + 45083, 45119, 45121, 45127, 45131, 45137, + 45139, 45161, 45179, 45181, 45191, 45197, + 45233, 45247, 45259, 45263, 45281, 45289, + 45293, 45307, 45317, 45319, 45329, 45337, + 45341, 45343, 45361, 45377, 45389, 45403, + 45413, 45427, 45433, 45439, 45481, 45491, + 45497, 45503, 45523, 45533, 45541, 45553, + 45557, 45569, 45587, 45589, 45599, 45613, + 45631, 45641, 45659, 45667, 45673, 45677, + 45691, 45697, 45707, 45737, 45751, 45757, + 45763, 45767, 45779, 45817, 45821, 45823, + 45827, 45833, 45841, 45853, 45863, 45869, + 45887, 45893, 45943, 45949, 45953, 45959, + 45971, 45979, 45989, 46021, 46027, 46049, + 46051, 46061, 46073, 46091, 46093, 46099, + 46103, 46133, 46141, 46147, 46153, 46171, + 46181, 46183, 46187, 46199, 46219, 46229, + 46237, 46261, 46271, 46273, 46279, 46301, + 46307, 46309, 46327, 46337, 46349, 46351, + 46381, 46399, 46411, 46439, 46441, 46447, + 46451, 46457, 46471, 46477, 46489, 46499, + 46507, 46511, 46523, 46549, 46559, 46567, + 46573, 46589, 46591, 46601, 46619, 46633, + 46639, 46643, 46649, 46663, 46679, 46681, + 46687, 46691, 46703, 46723, 46727, 46747, + 46751, 46757, 46769, 46771, 46807, 46811, + 46817, 46819, 46829, 46831, 46853, 46861, + 46867, 46877, 46889, 46901, 46919, 46933, + 46957, 46993, 46997, 47017, 47041, 47051, + 47057, 47059, 47087, 47093, 47111, 47119, + 47123, 47129, 47137, 47143, 47147, 47149, + 47161, 47189, 47207, 47221, 47237, 47251, + 47269, 47279, 47287, 47293, 47297, 47303, + 47309, 47317, 47339, 47351, 47353, 47363, + 47381, 47387, 47389, 47407, 47417, 47419, + 47431, 47441, 47459, 47491, 47497, 47501, + 47507, 47513, 47521, 47527, 47533, 47543, + 47563, 47569, 47581, 47591, 47599, 47609, + 47623, 47629, 47639, 47653, 47657, 47659, + 47681, 47699, 47701, 47711, 47713, 47717, + 47737, 47741, 47743, 47777, 47779, 47791, + 47797, 47807, 47809, 47819, 47837, 47843, + 47857, 47869, 47881, 47903, 47911, 47917, + 47933, 47939, 47947, 47951, 47963, 47969, + 47977, 47981, 48017, 48023, 48029, 48049, + 48073, 48079, 48091, 48109, 48119, 48121, + 48131, 48157, 48163, 48179, 48187, 48193, + 48197, 48221, 48239, 48247, 48259, 48271, + 48281, 48299, 48311, 48313, 48337, 48341, + 48353, 48371, 48383, 48397, 48407, 48409, + 48413, 48437, 48449, 48463, 48473, 48479, + 48481, 48487, 48491, 48497, 48523, 48527, + 48533, 48539, 48541, 48563, 48571, 48589, + 48593, 48611, 48619, 48623, 48647, 48649, + 48661, 48673, 48677, 48679, 48731, 48733, + 48751, 48757, 48761, 48767, 48779, 48781, + 48787, 48799, 48809, 48817, 48821, 48823, + 48847, 48857, 48859, 48869, 48871, 48883, + 48889, 48907, 48947, 48953, 48973, 48989, + 48991, 49003, 49009, 49019, 49031, 49033, + 49037, 49043, 49057, 49069, 49081, 49103, + 49109, 49117, 49121, 49123, 49139, 49157, + 49169, 49171, 49177, 49193, 49199, 49201, + 49207, 49211, 49223, 49253, 49261, 49277, + 49279, 49297, 49307, 49331, 49333, 49339, + 49363, 49367, 49369, 49391, 49393, 49409, + 49411, 49417, 49429, 49433, 49451, 49459, + 49463, 49477, 49481, 49499, 49523, 49529, + 49531, 49537, 49547, 49549, 49559, 49597, + 49603, 49613, 49627, 49633, 49639, 49663, + 49667, 49669, 49681, 49697, 49711, 49727, + 223, 49739, 49741, 49747, 49757, 49783, + 49787, 49789, 49801, 49807, 49811, 49823, + 49831, 49843, 49853, 49871, 49877, 49891, + 49919, 49921, 49927, 49937, 49939, 49943, + 49957, 49991, 49993, 49999, 50021, 50023, + 50033, 50047, 50051, 50053, 50069, 50077, + 50087, 50093, 50101, 50111, 50119, 50123, + 50129, 50131, 50147, 50153, 50159, 50177, + 50207, 50221, 50227, 50231, 50261, 50263, + 50273, 50287, 50291, 50311, 50321, 50329, + 50333, 50341, 50359, 50363, 50377, 50383, + 50387, 50411, 50417, 50423, 50441, 50459, + 50461, 50497, 50503, 50513, 50527, 50539, + 50543, 50549, 50551, 50581, 50587, 50591, + 50593, 50599, 50627, 50647, 50651, 37, + 50671, 50683, 50707, 50723, 50741, 50753, + 50767, 50773, 50777, 50789, 50821, 50833, + 50839, 50849, 50857, 50867, 50873, 50891, + 50893, 50909, 50923, 50929, 50951, 50957, + 50969, 50971, 50989, 50993, 51001, 51031, + 51043, 51047, 51059, 51061, 51071, 51109, + 51131, 51133, 51137, 51151, 51157, 51169, + 51193, 51197, 51199, 51203, 51217, 51229, + 51239, 51241, 51257, 51263, 51283, 51287, + 51307, 51329, 51341, 51343, 51347, 51349, + 51361, 51383, 51407, 51413, 51419, 51421, + 51427, 51431, 51437, 51439, 51449, 51461, + 51473, 51479, 51481, 51487, 51503, 51511, + 51517, 51521, 227, 51539, 51551, 51563, + 51577, 51581, 51593, 51599, 51607, 51613, + 51631, 51637, 51647, 51659, 51673, 51679, + 51683, 51691, 51713, 51719, 51721, 51749, + 51767, 51769, 51787, 51797, 51803, 51817, + 51827, 51829, 51839, 51853, 51859, 51869, + 51871, 51893, 51899, 51907, 51913, 51929, + 51941, 51949, 51971, 51973, 51977, 51991, + 52009, 52021, 52027, 52051, 52057, 52067, + 52069, 52081, 52103, 52121, 52127, 52147, + 52153, 52163, 52177, 52181, 52183, 52189, + 52201, 52223, 52237, 52249, 52253, 52259, + 52267, 52289, 52291, 52301, 52313, 52321, + 52361, 52363, 52369, 52379, 52387, 52391, + 52433, 229, 52453, 52457, 52489, 52501, + 52511, 52517, 52529, 52541, 52543, 52553, + 52561, 52567, 52571, 52579, 52583, 52609, + 52627, 52631, 52639, 52667, 52673, 52691, + 52697, 52709, 52711, 52721, 52727, 52733, + 52747, 52757, 52769, 52783, 52807, 52813, + 52817, 52837, 52859, 52861, 52879, 52883, + 52889, 52901, 52903, 52919, 52937, 52951, + 52957, 52963, 52967, 52973, 52981, 52999, + 53003, 53017, 53047, 53051, 53069, 53077, + 53087, 53089, 53093, 53101, 53113, 53117, + 53129, 53147, 53149, 53161, 53171, 53173, + 53189, 53197, 53201, 53231, 53233, 53239, + 53267, 53269, 53279, 53281, 53299, 53309, + 53323, 53327, 53353, 53359, 53377, 53381, + 53401, 53407, 53411, 53419, 53437, 53441, + 53453, 53479, 53503, 53507, 53527, 53549, + 53551, 53569, 53591, 53593, 53597, 53609, + 53611, 53617, 53623, 53629, 53633, 53639, + 53653, 53657, 53681, 53693, 53699, 53717, + 53719, 53731, 53759, 53773, 53777, 53783, + 53791, 53813, 53819, 53831, 53849, 53857, + 53861, 53881, 53887, 53891, 53897, 53899, + 53917, 53923, 53927, 53939, 53951, 53959, + 53987, 53993, 54001, 54011, 54013, 54037, + 54049, 54059, 54083, 54091, 54101, 54121, + 54133, 54139, 54151, 54163, 54167, 54181, + 54193, 54217, 54251, 54269, 54277, 54287, + 233, 54293, 54311, 54319, 54323, 54331, + 54347, 54361, 54367, 54371, 54377, 54401, + 54403, 54409, 54413, 54419, 54421, 54437, + 54443, 54449, 54469, 54493, 54497, 54499, + 54503, 54517, 54521, 54539, 54541, 54547, + 54559, 54563, 54577, 54581, 54583, 54601, + 54617, 54623, 54629, 54631, 54647, 54667, + 54673, 54679, 54709, 54713, 54721, 54727, + 54751, 54767, 54773, 54779, 54787, 54799, + 54829, 54833, 54851, 54869, 54877, 54881, + 54907, 54917, 54919, 54941, 54949, 54959, + 54973, 54979, 54983, 55001, 55009, 55021, + 55049, 55051, 55057, 55061, 55073, 55079, + 55103, 55109, 55117, 55127, 55147, 55163, + 55171, 55201, 55207, 55213, 55217, 55219, + 55229, 55243, 55249, 55259, 55291, 55313, + 55331, 55333, 55337, 55339, 55343, 55351, + 55373, 55381, 55399, 55411, 55439, 55441, + 55457, 55469, 55487, 55501, 55511, 55529, + 55541, 55547, 55579, 55589, 55603, 55609, + 55619, 55621, 55631, 55633, 55639, 55661, + 55663, 55667, 55673, 55681, 55691, 55697, + 55711, 55717, 55721, 55733, 55763, 55787, + 55793, 55799, 55807, 55813, 55817, 55819, + 55823, 55829, 55837, 55843, 55849, 55871, + 55889, 55897, 55901, 55903, 55921, 55927, + 55931, 55933, 55949, 55967, 55987, 55997, + 56003, 56009, 56039, 56041, 56053, 56081, + 56087, 56093, 56099, 56101, 56113, 56123, + 56131, 56149, 56167, 56171, 56179, 56197, + 56207, 56209, 56237, 56239, 56249, 56263, + 56267, 56269, 56299, 56311, 56333, 56359, + 56369, 56377, 56383, 56393, 56401, 56417, + 56431, 56437, 56443, 56453, 56467, 56473, + 56477, 56479, 56489, 56501, 56503, 56509, + 56519, 56527, 56531, 56533, 56543, 56569, + 56591, 56597, 56599, 56611, 56629, 56633, + 56659, 56663, 56671, 56681, 56687, 56701, + 56711, 56713, 56731, 56737, 56747, 56767, + 56773, 56779, 56783, 56807, 56809, 56813, + 56821, 56827, 56843, 56857, 56873, 56891, + 56893, 56897, 56909, 56911, 56921, 56923, + 56929, 56941, 56951, 56957, 56963, 56983, + 56989, 56993, 56999, 57037, 57041, 57047, + 57059, 57073, 57077, 57089, 57097, 57107, + 57119, 239, 57131, 57139, 57143, 57149, + 57163, 57173, 57179, 57191, 57193, 57203, + 57221, 57223, 57241, 57251, 57259, 57269, + 57271, 57283, 57287, 57301, 57329, 57331, + 57347, 57349, 57367, 57373, 57383, 57389, + 57397, 57413, 57427, 57457, 57467, 57487, + 57493, 57503, 57527, 57529, 57557, 57559, + 57571, 57587, 57593, 57601, 57637, 57641, + 57649, 57653, 57667, 57679, 57689, 57697, + 57709, 57713, 57719, 57727, 57731, 57737, + 57751, 57773, 57781, 57787, 57791, 57793, + 57803, 57809, 57829, 57839, 57847, 57853, + 57859, 57881, 57899, 57901, 57917, 57923, + 57943, 57947, 57973, 57977, 57991, 58013, + 58027, 58031, 58043, 58049, 58057, 58061, + 58067, 58073, 241, 58099, 58109, 58111, + 58129, 58147, 58151, 58153, 58169, 58171, + 58189, 58193, 58199, 58207, 58211, 58217, + 58229, 58231, 58237, 58243, 58271, 58309, + 58313, 58321, 58337, 58363, 58367, 58369, + 58379, 58391, 58393, 58403, 58411, 58417, + 58427, 58439, 58441, 58451, 58453, 58477, + 58481, 58511, 58537, 58543, 58549, 58567, + 58573, 58579, 58601, 58603, 58613, 58631, + 58657, 58661, 58679, 58687, 58693, 58699, + 58711, 58727, 58733, 58741, 58757, 58763, + 58771, 58787, 58789, 58831, 58889, 58897, + 58901, 58907, 58909, 58913, 58921, 58937, + 58943, 58963, 58967, 58979, 58991, 58997, + 59009, 59011, 59021, 59023, 59029, 3, + 59051, 59053, 59063, 59069, 59077, 59083, + 59093, 59107, 59113, 59119, 59123, 59141, + 59149, 59159, 59167, 59183, 59197, 59207, + 59209, 59219, 59221, 59233, 59239, 59243, + 59263, 59273, 59281, 59333, 59341, 59351, + 59357, 59359, 59369, 59377, 59387, 59393, + 59399, 59407, 59417, 59419, 59441, 59443, + 59447, 59453, 59467, 59471, 59473, 59497, + 59509, 59513, 59539, 59557, 59561, 59567, + 59581, 59611, 59617, 59621, 59627, 59629, + 59651, 59659, 59663, 59669, 59671, 59693, + 59699, 59707, 59723, 59729, 59743, 59747, + 59753, 59771, 59779, 59791, 59797, 59809, + 59833, 59863, 59879, 59887, 59921, 59929, + 59951, 59957, 59971, 59981, 59999, 60013, + 60017, 60029, 60037, 60041, 60077, 60083, + 60089, 60091, 60101, 60103, 60107, 60127, + 60133, 60139, 60149, 60161, 60167, 60169, + 60209, 60217, 60223, 60251, 60257, 60259, + 60271, 60289, 60293, 60317, 60331, 60337, + 60343, 60353, 60373, 60383, 60397, 60413, + 60427, 60443, 60449, 60457, 60493, 60497, + 60509, 60521, 60527, 60539, 60589, 60601, + 60607, 60611, 60617, 60623, 60631, 60637, + 60647, 60649, 60659, 60661, 60679, 60689, + 60703, 60719, 60727, 60733, 60737, 60757, + 60761, 60763, 60773, 60779, 60793, 60811, + 60821, 60859, 60869, 60887, 60889, 60899, + 60901, 60913, 60917, 60919, 60923, 60937, + 60943, 60953, 60961, 61001, 61007, 61027, + 61031, 61043, 61051, 61057, 61091, 61099, + 61121, 61129, 61141, 61151, 61153, 61169, + 61211, 61223, 61231, 61253, 61261, 61283, + 61291, 61297, 61331, 61333, 61339, 61343, + 61357, 61363, 61379, 61381, 61403, 61409, + 61417, 61441, 61463, 61469, 61471, 61483, + 61487, 61493, 61507, 61511, 61519, 61543, + 61547, 61553, 61559, 61561, 61583, 61603, + 61609, 61613, 61627, 61631, 61637, 61643, + 61651, 61657, 61667, 61673, 61681, 61687, + 61703, 61717, 61723, 61729, 61751, 61757, + 61781, 61813, 61819, 61837, 61843, 61861, + 61871, 61879, 61909, 61927, 61933, 61949, + 61961, 61967, 61979, 61981, 61987, 61991, + 62003, 62011, 62017, 62039, 62047, 62053, + 62057, 62071, 62081, 62099, 62119, 62129, + 62131, 62137, 62141, 62143, 62171, 62189, + 62191, 62201, 62207, 62213, 62219, 62233, + 62273, 62297, 62299, 62303, 62311, 62323, + 62327, 62347, 62351, 62383, 62401, 62417, + 62423, 62459, 62467, 62473, 62477, 62483, + 62497, 62501, 62507, 62533, 62539, 62549, + 62563, 62581, 62591, 62597, 62603, 62617, + 62627, 62633, 62639, 62653, 62659, 62683, + 62687, 62701, 62723, 62731, 62743, 62753, + 62761, 62773, 62791, 62801, 62819, 62827, + 62851, 62861, 62869, 62873, 62897, 62903, + 62921, 62927, 62929, 62939, 62969, 62971, + 62981, 62983, 62987, 62989, 251, 63029, + 63031, 63059, 63067, 63073, 63079, 63097, + 63103, 63113, 63127, 63131, 63149, 63179, + 63197, 63199, 63211, 63241, 63247, 63277, + 63281, 63299, 63311, 63313, 63317, 63331, + 63337, 63347, 63353, 63361, 63367, 63377, + 63389, 63391, 63397, 63409, 63419, 63421, + 63439, 63443, 63463, 63467, 63473, 63487, + 63493, 63499, 63521, 63527, 63533, 63541, + 63559, 63577, 63587, 63589, 63599, 63601, + 63607, 63611, 63617, 63629, 63647, 63649, + 63659, 63667, 63671, 63689, 63691, 63697, + 63703, 63709, 63719, 63727, 63737, 63743, + 63761, 63773, 63781, 63793, 63799, 63803, + 63809, 63823, 63839, 63841, 63853, 63857, + 63863, 63901, 63907, 63913, 63929, 63949, + 63977, 63997, 64007, 64013, 64019, 64033, + 64037, 64063, 64067, 64081, 64091, 64109, + 64123, 64151, 64153, 64157, 64171, 64187, + 64189, 64217, 64223, 64231, 64237, 64271, + 64279, 64283, 64301, 64303, 64319, 64327, + 64333, 64373, 64381, 64399, 64403, 64433, + 64439, 64451, 64453, 64483, 64489, 64499, + 64513, 64553, 64567, 64577, 64579, 64591, + 64601, 64609, 64613, 64621, 64627, 64633, + 64661, 64663, 64667, 64679, 64693, 64709, + 64717, 64747, 64763, 64781, 64783, 64793, + 64811, 64817, 64849, 64853, 64871, 64877, + 64879, 64891, 64901, 64919, 64921, 64927, + 64937, 64951, 64969, 64997, 65003, 65011, + 65027, 65029, 65033, 65053, 65063, 65071, + 65089, 65099, 65101, 65111, 65119, 65123, + 65129, 65141, 65147, 65167, 65171, 65173, + 65179, 65183, 65203, 65213, 65239, 65257, + 65267, 65269, 65287, 65293, 65309, 65323, + 65327, 65353, 65357, 65371, 65381, 65393, + 65407, 65413, 65419, 65423, 65437, 65447, + 65449, 65479, 65497, 65519, 65521, 2, + }; + +const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1] = { + 0, 2, 3, 4, 5, 7, + 8, 9, 11, 13, 16, 17, + 19, 23, 25, 27, 29, 31, + 32, 37, 41, 43, 47, 49, + 53, 59, 61, 64, 67, 71, + 73, 79, 81, 83, 89, 97, + 101, 103, 107, 109, 113, 121, + 125, 127, 128, 131, 137, 139, + 149, 151, 157, 163, 167, 169, + 173, 179, 181, 191, 193, 197, + 199, 211, 223, 227, 229, 233, + 239, 241, 243, 251, 256, 257, + 263, 269, 271, 277, 281, 283, + 289, 293, 307, 311, 313, 317, + 331, 337, 343, 347, 349, 353, + 359, 361, 367, 373, 379, 383, + 389, 397, 401, 409, 419, 421, + 431, 433, 439, 443, 449, 457, + 461, 463, 467, 479, 487, 491, + 499, 503, 509, 512, 521, 523, + 529, 541, 547, 557, 563, 569, + 571, 577, 587, 593, 599, 601, + 607, 613, 617, 619, 625, 631, + 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, + 719, 727, 729, 733, 739, 743, + 751, 757, 761, 769, 773, 787, + 797, 809, 811, 821, 823, 827, + 829, 839, 841, 853, 857, 859, + 863, 877, 881, 883, 887, 907, + 911, 919, 929, 937, 941, 947, + 953, 961, 967, 971, 977, 983, + 991, 997, 1009, 1013, 1019, 1021, + 1024, 1031, 1033, 1039, 1049, 1051, + 1061, 1063, 1069, 1087, 1091, 1093, + 1097, 1103, 1109, 1117, 1123, 1129, + 1151, 1153, 1163, 1171, 1181, 1187, + 1193, 1201, 1213, 1217, 1223, 1229, + 1231, 1237, 1249, 1259, 1277, 1279, + 1283, 1289, 1291, 1297, 1301, 1303, + 1307, 1319, 1321, 1327, 1331, 1361, + 1367, 1369, 1373, 1381, 1399, 1409, + 1423, 1427, 1429, 1433, 1439, 1447, + 1451, 1453, 1459, 1471, 1481, 1483, + 1487, 1489, 1493, 1499, 1511, 1523, + 1531, 1543, 1549, 1553, 1559, 1567, + 1571, 1579, 1583, 1597, 1601, 1607, + 1609, 1613, 1619, 1621, 1627, 1637, + 1657, 1663, 1667, 1669, 1681, 1693, + 1697, 1699, 1709, 1721, 1723, 1733, + 1741, 1747, 1753, 1759, 1777, 1783, + 1787, 1789, 1801, 1811, 1823, 1831, + 1847, 1849, 1861, 1867, 1871, 1873, + 1877, 1879, 1889, 1901, 1907, 1913, + 1931, 1933, 1949, 1951, 1973, 1979, + 1987, 1993, 1997, 1999, 2003, 2011, + 2017, 2027, 2029, 2039, 2048, 2053, + 2063, 2069, 2081, 2083, 2087, 2089, + 2099, 2111, 2113, 2129, 2131, 2137, + 2141, 2143, 2153, 2161, 2179, 2187, + 2197, 2203, 2207, 2209, 2213, 2221, + 2237, 2239, 2243, 2251, 2267, 2269, + 2273, 2281, 2287, 2293, 2297, 2309, + 2311, 2333, 2339, 2341, 2347, 2351, + 2357, 2371, 2377, 2381, 2383, 2389, + 2393, 2399, 2401, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, + 2477, 2503, 2521, 2531, 2539, 2543, + 2549, 2551, 2557, 2579, 2591, 2593, + 2609, 2617, 2621, 2633, 2647, 2657, + 2659, 2663, 2671, 2677, 2683, 2687, + 2689, 2693, 2699, 2707, 2711, 2713, + 2719, 2729, 2731, 2741, 2749, 2753, + 2767, 2777, 2789, 2791, 2797, 2801, + 2803, 2809, 2819, 2833, 2837, 2843, + 2851, 2857, 2861, 2879, 2887, 2897, + 2903, 2909, 2917, 2927, 2939, 2953, + 2957, 2963, 2969, 2971, 2999, 3001, + 3011, 3019, 3023, 3037, 3041, 3049, + 3061, 3067, 3079, 3083, 3089, 3109, + 3119, 3121, 3125, 3137, 3163, 3167, + 3169, 3181, 3187, 3191, 3203, 3209, + 3217, 3221, 3229, 3251, 3253, 3257, + 3259, 3271, 3299, 3301, 3307, 3313, + 3319, 3323, 3329, 3331, 3343, 3347, + 3359, 3361, 3371, 3373, 3389, 3391, + 3407, 3413, 3433, 3449, 3457, 3461, + 3463, 3467, 3469, 3481, 3491, 3499, + 3511, 3517, 3527, 3529, 3533, 3539, + 3541, 3547, 3557, 3559, 3571, 3581, + 3583, 3593, 3607, 3613, 3617, 3623, + 3631, 3637, 3643, 3659, 3671, 3673, + 3677, 3691, 3697, 3701, 3709, 3719, + 3721, 3727, 3733, 3739, 3761, 3767, + 3769, 3779, 3793, 3797, 3803, 3821, + 3823, 3833, 3847, 3851, 3853, 3863, + 3877, 3881, 3889, 3907, 3911, 3917, + 3919, 3923, 3929, 3931, 3943, 3947, + 3967, 3989, 4001, 4003, 4007, 4013, + 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 4096, 4099, + 4111, 4127, 4129, 4133, 4139, 4153, + 4157, 4159, 4177, 4201, 4211, 4217, + 4219, 4229, 4231, 4241, 4243, 4253, + 4259, 4261, 4271, 4273, 4283, 4289, + 4297, 4327, 4337, 4339, 4349, 4357, + 4363, 4373, 4391, 4397, 4409, 4421, + 4423, 4441, 4447, 4451, 4457, 4463, + 4481, 4483, 4489, 4493, 4507, 4513, + 4517, 4519, 4523, 4547, 4549, 4561, + 4567, 4583, 4591, 4597, 4603, 4621, + 4637, 4639, 4643, 4649, 4651, 4657, + 4663, 4673, 4679, 4691, 4703, 4721, + 4723, 4729, 4733, 4751, 4759, 4783, + 4787, 4789, 4793, 4799, 4801, 4813, + 4817, 4831, 4861, 4871, 4877, 4889, + 4903, 4909, 4913, 4919, 4931, 4933, + 4937, 4943, 4951, 4957, 4967, 4969, + 4973, 4987, 4993, 4999, 5003, 5009, + 5011, 5021, 5023, 5039, 5041, 5051, + 5059, 5077, 5081, 5087, 5099, 5101, + 5107, 5113, 5119, 5147, 5153, 5167, + 5171, 5179, 5189, 5197, 5209, 5227, + 5231, 5233, 5237, 5261, 5273, 5279, + 5281, 5297, 5303, 5309, 5323, 5329, + 5333, 5347, 5351, 5381, 5387, 5393, + 5399, 5407, 5413, 5417, 5419, 5431, + 5437, 5441, 5443, 5449, 5471, 5477, + 5479, 5483, 5501, 5503, 5507, 5519, + 5521, 5527, 5531, 5557, 5563, 5569, + 5573, 5581, 5591, 5623, 5639, 5641, + 5647, 5651, 5653, 5657, 5659, 5669, + 5683, 5689, 5693, 5701, 5711, 5717, + 5737, 5741, 5743, 5749, 5779, 5783, + 5791, 5801, 5807, 5813, 5821, 5827, + 5839, 5843, 5849, 5851, 5857, 5861, + 5867, 5869, 5879, 5881, 5897, 5903, + 5923, 5927, 5939, 5953, 5981, 5987, + 6007, 6011, 6029, 6037, 6043, 6047, + 6053, 6067, 6073, 6079, 6089, 6091, + 6101, 6113, 6121, 6131, 6133, 6143, + 6151, 6163, 6173, 6197, 6199, 6203, + 6211, 6217, 6221, 6229, 6241, 6247, + 6257, 6263, 6269, 6271, 6277, 6287, + 6299, 6301, 6311, 6317, 6323, 6329, + 6337, 6343, 6353, 6359, 6361, 6367, + 6373, 6379, 6389, 6397, 6421, 6427, + 6449, 6451, 6469, 6473, 6481, 6491, + 6521, 6529, 6547, 6551, 6553, 6561, + 6563, 6569, 6571, 6577, 6581, 6599, + 6607, 6619, 6637, 6653, 6659, 6661, + 6673, 6679, 6689, 6691, 6701, 6703, + 6709, 6719, 6733, 6737, 6761, 6763, + 6779, 6781, 6791, 6793, 6803, 6823, + 6827, 6829, 6833, 6841, 6857, 6859, + 6863, 6869, 6871, 6883, 6889, 6899, + 6907, 6911, 6917, 6947, 6949, 6959, + 6961, 6967, 6971, 6977, 6983, 6991, + 6997, 7001, 7013, 7019, 7027, 7039, + 7043, 7057, 7069, 7079, 7103, 7109, + 7121, 7127, 7129, 7151, 7159, 7177, + 7187, 7193, 7207, 7211, 7213, 7219, + 7229, 7237, 7243, 7247, 7253, 7283, + 7297, 7307, 7309, 7321, 7331, 7333, + 7349, 7351, 7369, 7393, 7411, 7417, + 7433, 7451, 7457, 7459, 7477, 7481, + 7487, 7489, 7499, 7507, 7517, 7523, + 7529, 7537, 7541, 7547, 7549, 7559, + 7561, 7573, 7577, 7583, 7589, 7591, + 7603, 7607, 7621, 7639, 7643, 7649, + 7669, 7673, 7681, 7687, 7691, 7699, + 7703, 7717, 7723, 7727, 7741, 7753, + 7757, 7759, 7789, 7793, 7817, 7823, + 7829, 7841, 7853, 7867, 7873, 7877, + 7879, 7883, 7901, 7907, 7919, 7921, + 7927, 7933, 7937, 7949, 7951, 7963, + 7993, 8009, 8011, 8017, 8039, 8053, + 8059, 8069, 8081, 8087, 8089, 8093, + 8101, 8111, 8117, 8123, 8147, 8161, + 8167, 8171, 8179, 8191, 8192, 8209, + 8219, 8221, 8231, 8233, 8237, 8243, + 8263, 8269, 8273, 8287, 8291, 8293, + 8297, 8311, 8317, 8329, 8353, 8363, + 8369, 8377, 8387, 8389, 8419, 8423, + 8429, 8431, 8443, 8447, 8461, 8467, + 8501, 8513, 8521, 8527, 8537, 8539, + 8543, 8563, 8573, 8581, 8597, 8599, + 8609, 8623, 8627, 8629, 8641, 8647, + 8663, 8669, 8677, 8681, 8689, 8693, + 8699, 8707, 8713, 8719, 8731, 8737, + 8741, 8747, 8753, 8761, 8779, 8783, + 8803, 8807, 8819, 8821, 8831, 8837, + 8839, 8849, 8861, 8863, 8867, 8887, + 8893, 8923, 8929, 8933, 8941, 8951, + 8963, 8969, 8971, 8999, 9001, 9007, + 9011, 9013, 9029, 9041, 9043, 9049, + 9059, 9067, 9091, 9103, 9109, 9127, + 9133, 9137, 9151, 9157, 9161, 9173, + 9181, 9187, 9199, 9203, 9209, 9221, + 9227, 9239, 9241, 9257, 9277, 9281, + 9283, 9293, 9311, 9319, 9323, 9337, + 9341, 9343, 9349, 9371, 9377, 9391, + 9397, 9403, 9409, 9413, 9419, 9421, + 9431, 9433, 9437, 9439, 9461, 9463, + 9467, 9473, 9479, 9491, 9497, 9511, + 9521, 9533, 9539, 9547, 9551, 9587, + 9601, 9613, 9619, 9623, 9629, 9631, + 9643, 9649, 9661, 9677, 9679, 9689, + 9697, 9719, 9721, 9733, 9739, 9743, + 9749, 9767, 9769, 9781, 9787, 9791, + 9803, 9811, 9817, 9829, 9833, 9839, + 9851, 9857, 9859, 9871, 9883, 9887, + 9901, 9907, 9923, 9929, 9931, 9941, + 9949, 9967, 9973, 10007, 10009, 10037, + 10039, 10061, 10067, 10069, 10079, 10091, + 10093, 10099, 10103, 10111, 10133, 10139, + 10141, 10151, 10159, 10163, 10169, 10177, + 10181, 10193, 10201, 10211, 10223, 10243, + 10247, 10253, 10259, 10267, 10271, 10273, + 10289, 10301, 10303, 10313, 10321, 10331, + 10333, 10337, 10343, 10357, 10369, 10391, + 10399, 10427, 10429, 10433, 10453, 10457, + 10459, 10463, 10477, 10487, 10499, 10501, + 10513, 10529, 10531, 10559, 10567, 10589, + 10597, 10601, 10607, 10609, 10613, 10627, + 10631, 10639, 10651, 10657, 10663, 10667, + 10687, 10691, 10709, 10711, 10723, 10729, + 10733, 10739, 10753, 10771, 10781, 10789, + 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, + 10909, 10937, 10939, 10949, 10957, 10973, + 10979, 10987, 10993, 11003, 11027, 11047, + 11057, 11059, 11069, 11071, 11083, 11087, + 11093, 11113, 11117, 11119, 11131, 11149, + 11159, 11161, 11171, 11173, 11177, 11197, + 11213, 11239, 11243, 11251, 11257, 11261, + 11273, 11279, 11287, 11299, 11311, 11317, + 11321, 11329, 11351, 11353, 11369, 11383, + 11393, 11399, 11411, 11423, 11437, 11443, + 11447, 11449, 11467, 11471, 11483, 11489, + 11491, 11497, 11503, 11519, 11527, 11549, + 11551, 11579, 11587, 11593, 11597, 11617, + 11621, 11633, 11657, 11677, 11681, 11689, + 11699, 11701, 11717, 11719, 11731, 11743, + 11777, 11779, 11783, 11789, 11801, 11807, + 11813, 11821, 11827, 11831, 11833, 11839, + 11863, 11867, 11881, 11887, 11897, 11903, + 11909, 11923, 11927, 11933, 11939, 11941, + 11953, 11959, 11969, 11971, 11981, 11987, + 12007, 12011, 12037, 12041, 12043, 12049, + 12071, 12073, 12097, 12101, 12107, 12109, + 12113, 12119, 12143, 12149, 12157, 12161, + 12163, 12167, 12197, 12203, 12211, 12227, + 12239, 12241, 12251, 12253, 12263, 12269, + 12277, 12281, 12289, 12301, 12323, 12329, + 12343, 12347, 12373, 12377, 12379, 12391, + 12401, 12409, 12413, 12421, 12433, 12437, + 12451, 12457, 12473, 12479, 12487, 12491, + 12497, 12503, 12511, 12517, 12527, 12539, + 12541, 12547, 12553, 12569, 12577, 12583, + 12589, 12601, 12611, 12613, 12619, 12637, + 12641, 12647, 12653, 12659, 12671, 12689, + 12697, 12703, 12713, 12721, 12739, 12743, + 12757, 12763, 12769, 12781, 12791, 12799, + 12809, 12821, 12823, 12829, 12841, 12853, + 12889, 12893, 12899, 12907, 12911, 12917, + 12919, 12923, 12941, 12953, 12959, 12967, + 12973, 12979, 12983, 13001, 13003, 13007, + 13009, 13033, 13037, 13043, 13049, 13063, + 13093, 13099, 13103, 13109, 13121, 13127, + 13147, 13151, 13159, 13163, 13171, 13177, + 13183, 13187, 13217, 13219, 13229, 13241, + 13249, 13259, 13267, 13291, 13297, 13309, + 13313, 13327, 13331, 13337, 13339, 13367, + 13381, 13397, 13399, 13411, 13417, 13421, + 13441, 13451, 13457, 13463, 13469, 13477, + 13487, 13499, 13513, 13523, 13537, 13553, + 13567, 13577, 13591, 13597, 13613, 13619, + 13627, 13633, 13649, 13669, 13679, 13681, + 13687, 13691, 13693, 13697, 13709, 13711, + 13721, 13723, 13729, 13751, 13757, 13759, + 13763, 13781, 13789, 13799, 13807, 13829, + 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, + 13931, 13933, 13963, 13967, 13997, 13999, + 14009, 14011, 14029, 14033, 14051, 14057, + 14071, 14081, 14083, 14087, 14107, 14143, + 14149, 14153, 14159, 14173, 14177, 14197, + 14207, 14221, 14243, 14249, 14251, 14281, + 14293, 14303, 14321, 14323, 14327, 14341, + 14347, 14369, 14387, 14389, 14401, 14407, + 14411, 14419, 14423, 14431, 14437, 14447, + 14449, 14461, 14479, 14489, 14503, 14519, + 14533, 14537, 14543, 14549, 14551, 14557, + 14561, 14563, 14591, 14593, 14621, 14627, + 14629, 14633, 14639, 14641, 14653, 14657, + 14669, 14683, 14699, 14713, 14717, 14723, + 14731, 14737, 14741, 14747, 14753, 14759, + 14767, 14771, 14779, 14783, 14797, 14813, + 14821, 14827, 14831, 14843, 14851, 14867, + 14869, 14879, 14887, 14891, 14897, 14923, + 14929, 14939, 14947, 14951, 14957, 14969, + 14983, 15013, 15017, 15031, 15053, 15061, + 15073, 15077, 15083, 15091, 15101, 15107, + 15121, 15131, 15137, 15139, 15149, 15161, + 15173, 15187, 15193, 15199, 15217, 15227, + 15233, 15241, 15259, 15263, 15269, 15271, + 15277, 15287, 15289, 15299, 15307, 15313, + 15319, 15329, 15331, 15349, 15359, 15361, + 15373, 15377, 15383, 15391, 15401, 15413, + 15427, 15439, 15443, 15451, 15461, 15467, + 15473, 15493, 15497, 15511, 15527, 15541, + 15551, 15559, 15569, 15581, 15583, 15601, + 15607, 15619, 15625, 15629, 15641, 15643, + 15647, 15649, 15661, 15667, 15671, 15679, + 15683, 15727, 15731, 15733, 15737, 15739, + 15749, 15761, 15767, 15773, 15787, 15791, + 15797, 15803, 15809, 15817, 15823, 15859, + 15877, 15881, 15887, 15889, 15901, 15907, + 15913, 15919, 15923, 15937, 15959, 15971, + 15973, 15991, 16001, 16007, 16033, 16057, + 16061, 16063, 16067, 16069, 16073, 16087, + 16091, 16097, 16103, 16111, 16127, 16129, + 16139, 16141, 16183, 16187, 16189, 16193, + 16217, 16223, 16229, 16231, 16249, 16253, + 16267, 16273, 16301, 16319, 16333, 16339, + 16349, 16361, 16363, 16369, 16381, 16384, + 16411, 16417, 16421, 16427, 16433, 16447, + 16451, 16453, 16477, 16481, 16487, 16493, + 16519, 16529, 16547, 16553, 16561, 16567, + 16573, 16603, 16607, 16619, 16631, 16633, + 16649, 16651, 16657, 16661, 16673, 16691, + 16693, 16699, 16703, 16729, 16741, 16747, + 16759, 16763, 16787, 16807, 16811, 16823, + 16829, 16831, 16843, 16871, 16879, 16883, + 16889, 16901, 16903, 16921, 16927, 16931, + 16937, 16943, 16963, 16979, 16981, 16987, + 16993, 17011, 17021, 17027, 17029, 17033, + 17041, 17047, 17053, 17077, 17093, 17099, + 17107, 17117, 17123, 17137, 17159, 17161, + 17167, 17183, 17189, 17191, 17203, 17207, + 17209, 17231, 17239, 17257, 17291, 17293, + 17299, 17317, 17321, 17327, 17333, 17341, + 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, + 17449, 17467, 17471, 17477, 17483, 17489, + 17491, 17497, 17509, 17519, 17539, 17551, + 17569, 17573, 17579, 17581, 17597, 17599, + 17609, 17623, 17627, 17657, 17659, 17669, + 17681, 17683, 17707, 17713, 17729, 17737, + 17747, 17749, 17761, 17783, 17789, 17791, + 17807, 17827, 17837, 17839, 17851, 17863, + 17881, 17891, 17903, 17909, 17911, 17921, + 17923, 17929, 17939, 17957, 17959, 17971, + 17977, 17981, 17987, 17989, 18013, 18041, + 18043, 18047, 18049, 18059, 18061, 18077, + 18089, 18097, 18119, 18121, 18127, 18131, + 18133, 18143, 18149, 18169, 18181, 18191, + 18199, 18211, 18217, 18223, 18229, 18233, + 18251, 18253, 18257, 18269, 18287, 18289, + 18301, 18307, 18311, 18313, 18329, 18341, + 18353, 18367, 18371, 18379, 18397, 18401, + 18413, 18427, 18433, 18439, 18443, 18451, + 18457, 18461, 18481, 18493, 18503, 18517, + 18521, 18523, 18539, 18541, 18553, 18583, + 18587, 18593, 18617, 18637, 18661, 18671, + 18679, 18691, 18701, 18713, 18719, 18731, + 18743, 18749, 18757, 18769, 18773, 18787, + 18793, 18797, 18803, 18839, 18859, 18869, + 18899, 18911, 18913, 18917, 18919, 18947, + 18959, 18973, 18979, 19001, 19009, 19013, + 19031, 19037, 19051, 19069, 19073, 19079, + 19081, 19087, 19121, 19139, 19141, 19157, + 19163, 19181, 19183, 19207, 19211, 19213, + 19219, 19231, 19237, 19249, 19259, 19267, + 19273, 19289, 19301, 19309, 19319, 19321, + 19333, 19373, 19379, 19381, 19387, 19391, + 19403, 19417, 19421, 19423, 19427, 19429, + 19433, 19441, 19447, 19457, 19463, 19469, + 19471, 19477, 19483, 19489, 19501, 19507, + 19531, 19541, 19543, 19553, 19559, 19571, + 19577, 19583, 19597, 19603, 19609, 19661, + 19681, 19683, 19687, 19697, 19699, 19709, + 19717, 19727, 19739, 19751, 19753, 19759, + 19763, 19777, 19793, 19801, 19813, 19819, + 19841, 19843, 19853, 19861, 19867, 19889, + 19891, 19913, 19919, 19927, 19937, 19949, + 19961, 19963, 19973, 19979, 19991, 19993, + 19997, 20011, 20021, 20023, 20029, 20047, + 20051, 20063, 20071, 20089, 20101, 20107, + 20113, 20117, 20123, 20129, 20143, 20147, + 20149, 20161, 20173, 20177, 20183, 20201, + 20219, 20231, 20233, 20249, 20261, 20269, + 20287, 20297, 20323, 20327, 20333, 20341, + 20347, 20353, 20357, 20359, 20369, 20389, + 20393, 20399, 20407, 20411, 20431, 20441, + 20443, 20477, 20479, 20483, 20507, 20509, + 20521, 20533, 20543, 20549, 20551, 20563, + 20593, 20599, 20611, 20627, 20639, 20641, + 20663, 20681, 20693, 20707, 20717, 20719, + 20731, 20743, 20747, 20749, 20753, 20759, + 20771, 20773, 20789, 20807, 20809, 20849, + 20857, 20873, 20879, 20887, 20897, 20899, + 20903, 20921, 20929, 20939, 20947, 20959, + 20963, 20981, 20983, 21001, 21011, 21013, + 21017, 21019, 21023, 21031, 21059, 21061, + 21067, 21089, 21101, 21107, 21121, 21139, + 21143, 21149, 21157, 21163, 21169, 21179, + 21187, 21191, 21193, 21211, 21221, 21227, + 21247, 21269, 21277, 21283, 21313, 21317, + 21319, 21323, 21341, 21347, 21377, 21379, + 21383, 21391, 21397, 21401, 21407, 21419, + 21433, 21467, 21481, 21487, 21491, 21493, + 21499, 21503, 21517, 21521, 21523, 21529, + 21557, 21559, 21563, 21569, 21577, 21587, + 21589, 21599, 21601, 21611, 21613, 21617, + 21647, 21649, 21661, 21673, 21683, 21701, + 21713, 21727, 21737, 21739, 21751, 21757, + 21767, 21773, 21787, 21799, 21803, 21817, + 21821, 21839, 21841, 21851, 21859, 21863, + 21871, 21881, 21893, 21911, 21929, 21937, + 21943, 21961, 21977, 21991, 21997, 22003, + 22013, 22027, 22031, 22037, 22039, 22051, + 22063, 22067, 22073, 22079, 22091, 22093, + 22109, 22111, 22123, 22129, 22133, 22147, + 22153, 22157, 22159, 22171, 22189, 22193, + 22201, 22229, 22247, 22259, 22271, 22273, + 22277, 22279, 22283, 22291, 22303, 22307, + 22343, 22349, 22367, 22369, 22381, 22391, + 22397, 22409, 22433, 22441, 22447, 22453, + 22469, 22481, 22483, 22501, 22511, 22531, + 22541, 22543, 22549, 22567, 22571, 22573, + 22613, 22619, 22621, 22637, 22639, 22643, + 22651, 22669, 22679, 22691, 22697, 22699, + 22709, 22717, 22721, 22727, 22739, 22741, + 22751, 22769, 22777, 22783, 22787, 22801, + 22807, 22811, 22817, 22853, 22859, 22861, + 22871, 22877, 22901, 22907, 22921, 22937, + 22943, 22961, 22963, 22973, 22993, 23003, + 23011, 23017, 23021, 23027, 23029, 23039, + 23041, 23053, 23057, 23059, 23063, 23071, + 23081, 23087, 23099, 23117, 23131, 23143, + 23159, 23167, 23173, 23189, 23197, 23201, + 23203, 23209, 23227, 23251, 23269, 23279, + 23291, 23293, 23297, 23311, 23321, 23327, + 23333, 23339, 23357, 23369, 23371, 23399, + 23417, 23431, 23447, 23459, 23473, 23497, + 23509, 23531, 23537, 23539, 23549, 23557, + 23561, 23563, 23567, 23581, 23593, 23599, + 23603, 23609, 23623, 23627, 23629, 23633, + 23663, 23669, 23671, 23677, 23687, 23689, + 23719, 23741, 23743, 23747, 23753, 23761, + 23767, 23773, 23789, 23801, 23813, 23819, + 23827, 23831, 23833, 23857, 23869, 23873, + 23879, 23887, 23893, 23899, 23909, 23911, + 23917, 23929, 23957, 23971, 23977, 23981, + 23993, 24001, 24007, 24019, 24023, 24029, + 24043, 24049, 24061, 24071, 24077, 24083, + 24091, 24097, 24103, 24107, 24109, 24113, + 24121, 24133, 24137, 24151, 24169, 24179, + 24181, 24197, 24203, 24223, 24229, 24239, + 24247, 24251, 24281, 24317, 24329, 24337, + 24359, 24371, 24373, 24379, 24389, 24391, + 24407, 24413, 24419, 24421, 24439, 24443, + 24469, 24473, 24481, 24499, 24509, 24517, + 24527, 24533, 24547, 24551, 24571, 24593, + 24611, 24623, 24631, 24649, 24659, 24671, + 24677, 24683, 24691, 24697, 24709, 24733, + 24749, 24763, 24767, 24781, 24793, 24799, + 24809, 24821, 24841, 24847, 24851, 24859, + 24877, 24889, 24907, 24917, 24919, 24923, + 24943, 24953, 24967, 24971, 24977, 24979, + 24989, 25013, 25031, 25033, 25037, 25057, + 25073, 25087, 25097, 25111, 25117, 25121, + 25127, 25147, 25153, 25163, 25169, 25171, + 25183, 25189, 25219, 25229, 25237, 25243, + 25247, 25253, 25261, 25301, 25303, 25307, + 25309, 25321, 25339, 25343, 25349, 25357, + 25367, 25373, 25391, 25409, 25411, 25423, + 25439, 25447, 25453, 25457, 25463, 25469, + 25471, 25523, 25537, 25541, 25561, 25577, + 25579, 25583, 25589, 25601, 25603, 25609, + 25621, 25633, 25639, 25643, 25657, 25667, + 25673, 25679, 25693, 25703, 25717, 25733, + 25741, 25747, 25759, 25763, 25771, 25793, + 25799, 25801, 25819, 25841, 25847, 25849, + 25867, 25873, 25889, 25903, 25913, 25919, + 25931, 25933, 25939, 25943, 25951, 25969, + 25981, 25997, 25999, 26003, 26017, 26021, + 26029, 26041, 26053, 26083, 26099, 26107, + 26111, 26113, 26119, 26141, 26153, 26161, + 26171, 26177, 26183, 26189, 26203, 26209, + 26227, 26237, 26249, 26251, 26261, 26263, + 26267, 26293, 26297, 26309, 26317, 26321, + 26339, 26347, 26357, 26371, 26387, 26393, + 26399, 26407, 26417, 26423, 26431, 26437, + 26449, 26459, 26479, 26489, 26497, 26501, + 26513, 26539, 26557, 26561, 26569, 26573, + 26591, 26597, 26627, 26633, 26641, 26647, + 26669, 26681, 26683, 26687, 26693, 26699, + 26701, 26711, 26713, 26717, 26723, 26729, + 26731, 26737, 26759, 26777, 26783, 26801, + 26813, 26821, 26833, 26839, 26849, 26861, + 26863, 26879, 26881, 26891, 26893, 26903, + 26921, 26927, 26947, 26951, 26953, 26959, + 26981, 26987, 26993, 27011, 27017, 27031, + 27043, 27059, 27061, 27067, 27073, 27077, + 27091, 27103, 27107, 27109, 27127, 27143, + 27179, 27191, 27197, 27211, 27239, 27241, + 27253, 27259, 27271, 27277, 27281, 27283, + 27299, 27329, 27337, 27361, 27367, 27397, + 27407, 27409, 27427, 27431, 27437, 27449, + 27457, 27479, 27481, 27487, 27509, 27527, + 27529, 27539, 27541, 27551, 27581, 27583, + 27611, 27617, 27631, 27647, 27653, 27673, + 27689, 27691, 27697, 27701, 27733, 27737, + 27739, 27743, 27749, 27751, 27763, 27767, + 27773, 27779, 27791, 27793, 27799, 27803, + 27809, 27817, 27823, 27827, 27847, 27851, + 27883, 27889, 27893, 27901, 27917, 27919, + 27941, 27943, 27947, 27953, 27961, 27967, + 27983, 27997, 28001, 28019, 28027, 28031, + 28051, 28057, 28069, 28081, 28087, 28097, + 28099, 28109, 28111, 28123, 28151, 28163, + 28181, 28183, 28201, 28211, 28219, 28229, + 28277, 28279, 28283, 28289, 28297, 28307, + 28309, 28319, 28349, 28351, 28387, 28393, + 28403, 28409, 28411, 28429, 28433, 28439, + 28447, 28463, 28477, 28493, 28499, 28513, + 28517, 28537, 28541, 28547, 28549, 28559, + 28561, 28571, 28573, 28579, 28591, 28597, + 28603, 28607, 28619, 28621, 28627, 28631, + 28643, 28649, 28657, 28661, 28663, 28669, + 28687, 28697, 28703, 28711, 28723, 28729, + 28751, 28753, 28759, 28771, 28789, 28793, + 28807, 28813, 28817, 28837, 28843, 28859, + 28867, 28871, 28879, 28901, 28909, 28921, + 28927, 28933, 28949, 28961, 28979, 29009, + 29017, 29021, 29023, 29027, 29033, 29059, + 29063, 29077, 29101, 29123, 29129, 29131, + 29137, 29147, 29153, 29167, 29173, 29179, + 29191, 29201, 29207, 29209, 29221, 29231, + 29243, 29251, 29269, 29287, 29297, 29303, + 29311, 29327, 29333, 29339, 29347, 29363, + 29383, 29387, 29389, 29399, 29401, 29411, + 29423, 29429, 29437, 29443, 29453, 29473, + 29483, 29501, 29527, 29531, 29537, 29567, + 29569, 29573, 29581, 29587, 29599, 29611, + 29629, 29633, 29641, 29663, 29669, 29671, + 29683, 29717, 29723, 29741, 29753, 29759, + 29761, 29789, 29791, 29803, 29819, 29833, + 29837, 29851, 29863, 29867, 29873, 29879, + 29881, 29917, 29921, 29927, 29929, 29947, + 29959, 29983, 29989, 30011, 30013, 30029, + 30047, 30059, 30071, 30089, 30091, 30097, + 30103, 30109, 30113, 30119, 30133, 30137, + 30139, 30161, 30169, 30181, 30187, 30197, + 30203, 30211, 30223, 30241, 30253, 30259, + 30269, 30271, 30293, 30307, 30313, 30319, + 30323, 30341, 30347, 30367, 30389, 30391, + 30403, 30427, 30431, 30449, 30467, 30469, + 30491, 30493, 30497, 30509, 30517, 30529, + 30539, 30553, 30557, 30559, 30577, 30593, + 30631, 30637, 30643, 30649, 30661, 30671, + 30677, 30689, 30697, 30703, 30707, 30713, + 30727, 30757, 30763, 30773, 30781, 30803, + 30809, 30817, 30829, 30839, 30841, 30851, + 30853, 30859, 30869, 30871, 30881, 30893, + 30911, 30931, 30937, 30941, 30949, 30971, + 30977, 30983, 31013, 31019, 31033, 31039, + 31051, 31063, 31069, 31079, 31081, 31091, + 31121, 31123, 31139, 31147, 31151, 31153, + 31159, 31177, 31181, 31183, 31189, 31193, + 31219, 31223, 31231, 31237, 31247, 31249, + 31253, 31259, 31267, 31271, 31277, 31307, + 31319, 31321, 31327, 31333, 31337, 31357, + 31379, 31387, 31391, 31393, 31397, 31469, + 31477, 31481, 31489, 31511, 31513, 31517, + 31531, 31541, 31543, 31547, 31567, 31573, + 31583, 31601, 31607, 31627, 31643, 31649, + 31657, 31663, 31667, 31687, 31699, 31721, + 31723, 31727, 31729, 31741, 31751, 31769, + 31771, 31793, 31799, 31817, 31847, 31849, + 31859, 31873, 31883, 31891, 31907, 31957, + 31963, 31973, 31981, 31991, 32003, 32009, + 32027, 32029, 32041, 32051, 32057, 32059, + 32063, 32069, 32077, 32083, 32089, 32099, + 32117, 32119, 32141, 32143, 32159, 32173, + 32183, 32189, 32191, 32203, 32213, 32233, + 32237, 32251, 32257, 32261, 32297, 32299, + 32303, 32309, 32321, 32323, 32327, 32341, + 32353, 32359, 32363, 32369, 32371, 32377, + 32381, 32401, 32411, 32413, 32423, 32429, + 32441, 32443, 32467, 32479, 32491, 32497, + 32503, 32507, 32531, 32533, 32537, 32561, + 32563, 32569, 32573, 32579, 32587, 32603, + 32609, 32611, 32621, 32633, 32647, 32653, + 32687, 32693, 32707, 32713, 32717, 32719, + 32749, 32761, 32768, 32771, 32779, 32783, + 32789, 32797, 32801, 32803, 32831, 32833, + 32839, 32843, 32869, 32887, 32909, 32911, + 32917, 32933, 32939, 32941, 32957, 32969, + 32971, 32983, 32987, 32993, 32999, 33013, + 33023, 33029, 33037, 33049, 33053, 33071, + 33073, 33083, 33091, 33107, 33113, 33119, + 33149, 33151, 33161, 33179, 33181, 33191, + 33199, 33203, 33211, 33223, 33247, 33287, + 33289, 33301, 33311, 33317, 33329, 33331, + 33343, 33347, 33349, 33353, 33359, 33377, + 33391, 33403, 33409, 33413, 33427, 33457, + 33461, 33469, 33479, 33487, 33493, 33503, + 33521, 33529, 33533, 33547, 33563, 33569, + 33577, 33581, 33587, 33589, 33599, 33601, + 33613, 33617, 33619, 33623, 33629, 33637, + 33641, 33647, 33679, 33703, 33713, 33721, + 33739, 33749, 33751, 33757, 33767, 33769, + 33773, 33791, 33797, 33809, 33811, 33827, + 33829, 33851, 33857, 33863, 33871, 33889, + 33893, 33911, 33923, 33931, 33937, 33941, + 33961, 33967, 33997, 34019, 34031, 34033, + 34039, 34057, 34061, 34123, 34127, 34129, + 34141, 34147, 34157, 34159, 34171, 34183, + 34211, 34213, 34217, 34231, 34253, 34259, + 34261, 34267, 34273, 34283, 34297, 34301, + 34303, 34313, 34319, 34327, 34337, 34351, + 34361, 34367, 34369, 34381, 34403, 34421, + 34429, 34439, 34457, 34469, 34471, 34483, + 34487, 34499, 34501, 34511, 34513, 34519, + 34537, 34543, 34549, 34583, 34589, 34591, + 34603, 34607, 34613, 34631, 34649, 34651, + 34667, 34673, 34679, 34687, 34693, 34703, + 34721, 34729, 34739, 34747, 34757, 34759, + 34763, 34781, 34807, 34819, 34841, 34843, + 34847, 34849, 34871, 34877, 34883, 34897, + 34913, 34919, 34939, 34949, 34961, 34963, + 34981, 35023, 35027, 35051, 35053, 35059, + 35069, 35081, 35083, 35089, 35099, 35107, + 35111, 35117, 35129, 35141, 35149, 35153, + 35159, 35171, 35201, 35221, 35227, 35251, + 35257, 35267, 35279, 35281, 35291, 35311, + 35317, 35323, 35327, 35339, 35353, 35363, + 35381, 35393, 35401, 35407, 35419, 35423, + 35437, 35447, 35449, 35461, 35491, 35507, + 35509, 35521, 35527, 35531, 35533, 35537, + 35543, 35569, 35573, 35591, 35593, 35597, + 35603, 35617, 35671, 35677, 35729, 35731, + 35747, 35753, 35759, 35771, 35797, 35801, + 35803, 35809, 35831, 35837, 35839, 35851, + 35863, 35869, 35879, 35897, 35899, 35911, + 35923, 35933, 35951, 35963, 35969, 35977, + 35983, 35993, 35999, 36007, 36011, 36013, + 36017, 36037, 36061, 36067, 36073, 36083, + 36097, 36107, 36109, 36131, 36137, 36151, + 36161, 36187, 36191, 36209, 36217, 36229, + 36241, 36251, 36263, 36269, 36277, 36293, + 36299, 36307, 36313, 36319, 36341, 36343, + 36353, 36373, 36383, 36389, 36433, 36451, + 36457, 36467, 36469, 36473, 36479, 36481, + 36493, 36497, 36523, 36527, 36529, 36541, + 36551, 36559, 36563, 36571, 36583, 36587, + 36599, 36607, 36629, 36637, 36643, 36653, + 36671, 36677, 36683, 36691, 36697, 36709, + 36713, 36721, 36739, 36749, 36761, 36767, + 36779, 36781, 36787, 36791, 36793, 36809, + 36821, 36833, 36847, 36857, 36871, 36877, + 36887, 36899, 36901, 36913, 36919, 36923, + 36929, 36931, 36943, 36947, 36973, 36979, + 36997, 37003, 37013, 37019, 37021, 37039, + 37049, 37057, 37061, 37087, 37097, 37117, + 37123, 37139, 37159, 37171, 37181, 37189, + 37199, 37201, 37217, 37223, 37243, 37249, + 37253, 37273, 37277, 37307, 37309, 37313, + 37321, 37337, 37339, 37357, 37361, 37363, + 37369, 37379, 37397, 37409, 37423, 37441, + 37447, 37463, 37483, 37489, 37493, 37501, + 37507, 37511, 37517, 37529, 37537, 37547, + 37549, 37561, 37567, 37571, 37573, 37579, + 37589, 37591, 37607, 37619, 37633, 37643, + 37649, 37657, 37663, 37691, 37693, 37699, + 37717, 37747, 37781, 37783, 37799, 37811, + 37813, 37831, 37847, 37853, 37861, 37871, + 37879, 37889, 37897, 37907, 37951, 37957, + 37963, 37967, 37987, 37991, 37993, 37997, + 38011, 38039, 38047, 38053, 38069, 38083, + 38113, 38119, 38149, 38153, 38167, 38177, + 38183, 38189, 38197, 38201, 38219, 38231, + 38237, 38239, 38261, 38273, 38281, 38287, + 38299, 38303, 38317, 38321, 38327, 38329, + 38333, 38351, 38371, 38377, 38393, 38431, + 38447, 38449, 38453, 38459, 38461, 38501, + 38543, 38557, 38561, 38567, 38569, 38593, + 38603, 38609, 38611, 38629, 38639, 38651, + 38653, 38669, 38671, 38677, 38693, 38699, + 38707, 38711, 38713, 38723, 38729, 38737, + 38747, 38749, 38767, 38783, 38791, 38803, + 38809, 38821, 38833, 38839, 38851, 38861, + 38867, 38873, 38891, 38903, 38917, 38921, + 38923, 38933, 38953, 38959, 38971, 38977, + 38993, 39019, 39023, 39041, 39043, 39047, + 39079, 39089, 39097, 39103, 39107, 39113, + 39119, 39133, 39139, 39157, 39161, 39163, + 39181, 39191, 39199, 39209, 39217, 39227, + 39229, 39233, 39239, 39241, 39251, 39293, + 39301, 39313, 39317, 39323, 39341, 39343, + 39359, 39367, 39371, 39373, 39383, 39397, + 39409, 39419, 39439, 39443, 39451, 39461, + 39499, 39503, 39509, 39511, 39521, 39541, + 39551, 39563, 39569, 39581, 39601, 39607, + 39619, 39623, 39631, 39659, 39667, 39671, + 39679, 39703, 39709, 39719, 39727, 39733, + 39749, 39761, 39769, 39779, 39791, 39799, + 39821, 39827, 39829, 39839, 39841, 39847, + 39857, 39863, 39869, 39877, 39883, 39887, + 39901, 39929, 39937, 39953, 39971, 39979, + 39983, 39989, 40009, 40013, 40031, 40037, + 40039, 40063, 40087, 40093, 40099, 40111, + 40123, 40127, 40129, 40151, 40153, 40163, + 40169, 40177, 40189, 40193, 40213, 40231, + 40237, 40241, 40253, 40277, 40283, 40289, + 40343, 40351, 40357, 40361, 40387, 40423, + 40427, 40429, 40433, 40459, 40471, 40483, + 40487, 40493, 40499, 40507, 40519, 40529, + 40531, 40543, 40559, 40577, 40583, 40591, + 40597, 40609, 40627, 40637, 40639, 40693, + 40697, 40699, 40709, 40739, 40751, 40759, + 40763, 40771, 40787, 40801, 40813, 40819, + 40823, 40829, 40841, 40847, 40849, 40853, + 40867, 40879, 40883, 40897, 40903, 40927, + 40933, 40939, 40949, 40961, 40973, 40993, + 41011, 41017, 41023, 41039, 41047, 41051, + 41057, 41077, 41081, 41113, 41117, 41131, + 41141, 41143, 41149, 41161, 41177, 41179, + 41183, 41189, 41201, 41203, 41213, 41221, + 41227, 41231, 41233, 41243, 41257, 41263, + 41269, 41281, 41299, 41333, 41341, 41351, + 41357, 41381, 41387, 41389, 41399, 41411, + 41413, 41443, 41453, 41467, 41479, 41491, + 41507, 41513, 41519, 41521, 41539, 41543, + 41549, 41579, 41593, 41597, 41603, 41609, + 41611, 41617, 41621, 41627, 41641, 41647, + 41651, 41659, 41669, 41681, 41687, 41719, + 41729, 41737, 41759, 41761, 41771, 41777, + 41801, 41809, 41813, 41843, 41849, 41851, + 41863, 41879, 41887, 41893, 41897, 41903, + 41911, 41927, 41941, 41947, 41953, 41957, + 41959, 41969, 41981, 41983, 41999, 42013, + 42017, 42019, 42023, 42043, 42061, 42071, + 42073, 42083, 42089, 42101, 42131, 42139, + 42157, 42169, 42179, 42181, 42187, 42193, + 42197, 42209, 42221, 42223, 42227, 42239, + 42257, 42281, 42283, 42293, 42299, 42307, + 42323, 42331, 42337, 42349, 42359, 42373, + 42379, 42391, 42397, 42403, 42407, 42409, + 42433, 42437, 42443, 42451, 42457, 42461, + 42463, 42467, 42473, 42487, 42491, 42499, + 42509, 42533, 42557, 42569, 42571, 42577, + 42589, 42611, 42641, 42643, 42649, 42667, + 42677, 42683, 42689, 42697, 42701, 42703, + 42709, 42719, 42727, 42737, 42743, 42751, + 42767, 42773, 42787, 42793, 42797, 42821, + 42829, 42839, 42841, 42853, 42859, 42863, + 42899, 42901, 42923, 42929, 42937, 42943, + 42953, 42961, 42967, 42979, 42989, 43003, + 43013, 43019, 43037, 43049, 43051, 43063, + 43067, 43093, 43103, 43117, 43133, 43151, + 43159, 43177, 43189, 43201, 43207, 43223, + 43237, 43261, 43271, 43283, 43291, 43313, + 43319, 43321, 43331, 43391, 43397, 43399, + 43403, 43411, 43427, 43441, 43451, 43457, + 43481, 43487, 43499, 43517, 43541, 43543, + 43573, 43577, 43579, 43591, 43597, 43607, + 43609, 43613, 43627, 43633, 43649, 43651, + 43661, 43669, 43691, 43711, 43717, 43721, + 43753, 43759, 43777, 43781, 43783, 43787, + 43789, 43793, 43801, 43853, 43867, 43889, + 43891, 43913, 43933, 43943, 43951, 43961, + 43963, 43969, 43973, 43987, 43991, 43997, + 44017, 44021, 44027, 44029, 44041, 44053, + 44059, 44071, 44087, 44089, 44101, 44111, + 44119, 44123, 44129, 44131, 44159, 44171, + 44179, 44189, 44201, 44203, 44207, 44221, + 44249, 44257, 44263, 44267, 44269, 44273, + 44279, 44281, 44293, 44351, 44357, 44371, + 44381, 44383, 44389, 44417, 44449, 44453, + 44483, 44491, 44497, 44501, 44507, 44519, + 44521, 44531, 44533, 44537, 44543, 44549, + 44563, 44579, 44587, 44617, 44621, 44623, + 44633, 44641, 44647, 44651, 44657, 44683, + 44687, 44699, 44701, 44711, 44729, 44741, + 44753, 44771, 44773, 44777, 44789, 44797, + 44809, 44819, 44839, 44843, 44851, 44867, + 44879, 44887, 44893, 44909, 44917, 44927, + 44939, 44953, 44959, 44963, 44971, 44983, + 44987, 45007, 45013, 45053, 45061, 45077, + 45083, 45119, 45121, 45127, 45131, 45137, + 45139, 45161, 45179, 45181, 45191, 45197, + 45233, 45247, 45259, 45263, 45281, 45289, + 45293, 45307, 45317, 45319, 45329, 45337, + 45341, 45343, 45361, 45377, 45389, 45403, + 45413, 45427, 45433, 45439, 45481, 45491, + 45497, 45503, 45523, 45533, 45541, 45553, + 45557, 45569, 45587, 45589, 45599, 45613, + 45631, 45641, 45659, 45667, 45673, 45677, + 45691, 45697, 45707, 45737, 45751, 45757, + 45763, 45767, 45779, 45817, 45821, 45823, + 45827, 45833, 45841, 45853, 45863, 45869, + 45887, 45893, 45943, 45949, 45953, 45959, + 45971, 45979, 45989, 46021, 46027, 46049, + 46051, 46061, 46073, 46091, 46093, 46099, + 46103, 46133, 46141, 46147, 46153, 46171, + 46181, 46183, 46187, 46199, 46219, 46229, + 46237, 46261, 46271, 46273, 46279, 46301, + 46307, 46309, 46327, 46337, 46349, 46351, + 46381, 46399, 46411, 46439, 46441, 46447, + 46451, 46457, 46471, 46477, 46489, 46499, + 46507, 46511, 46523, 46549, 46559, 46567, + 46573, 46589, 46591, 46601, 46619, 46633, + 46639, 46643, 46649, 46663, 46679, 46681, + 46687, 46691, 46703, 46723, 46727, 46747, + 46751, 46757, 46769, 46771, 46807, 46811, + 46817, 46819, 46829, 46831, 46853, 46861, + 46867, 46877, 46889, 46901, 46919, 46933, + 46957, 46993, 46997, 47017, 47041, 47051, + 47057, 47059, 47087, 47093, 47111, 47119, + 47123, 47129, 47137, 47143, 47147, 47149, + 47161, 47189, 47207, 47221, 47237, 47251, + 47269, 47279, 47287, 47293, 47297, 47303, + 47309, 47317, 47339, 47351, 47353, 47363, + 47381, 47387, 47389, 47407, 47417, 47419, + 47431, 47441, 47459, 47491, 47497, 47501, + 47507, 47513, 47521, 47527, 47533, 47543, + 47563, 47569, 47581, 47591, 47599, 47609, + 47623, 47629, 47639, 47653, 47657, 47659, + 47681, 47699, 47701, 47711, 47713, 47717, + 47737, 47741, 47743, 47777, 47779, 47791, + 47797, 47807, 47809, 47819, 47837, 47843, + 47857, 47869, 47881, 47903, 47911, 47917, + 47933, 47939, 47947, 47951, 47963, 47969, + 47977, 47981, 48017, 48023, 48029, 48049, + 48073, 48079, 48091, 48109, 48119, 48121, + 48131, 48157, 48163, 48179, 48187, 48193, + 48197, 48221, 48239, 48247, 48259, 48271, + 48281, 48299, 48311, 48313, 48337, 48341, + 48353, 48371, 48383, 48397, 48407, 48409, + 48413, 48437, 48449, 48463, 48473, 48479, + 48481, 48487, 48491, 48497, 48523, 48527, + 48533, 48539, 48541, 48563, 48571, 48589, + 48593, 48611, 48619, 48623, 48647, 48649, + 48661, 48673, 48677, 48679, 48731, 48733, + 48751, 48757, 48761, 48767, 48779, 48781, + 48787, 48799, 48809, 48817, 48821, 48823, + 48847, 48857, 48859, 48869, 48871, 48883, + 48889, 48907, 48947, 48953, 48973, 48989, + 48991, 49003, 49009, 49019, 49031, 49033, + 49037, 49043, 49057, 49069, 49081, 49103, + 49109, 49117, 49121, 49123, 49139, 49157, + 49169, 49171, 49177, 49193, 49199, 49201, + 49207, 49211, 49223, 49253, 49261, 49277, + 49279, 49297, 49307, 49331, 49333, 49339, + 49363, 49367, 49369, 49391, 49393, 49409, + 49411, 49417, 49429, 49433, 49451, 49459, + 49463, 49477, 49481, 49499, 49523, 49529, + 49531, 49537, 49547, 49549, 49559, 49597, + 49603, 49613, 49627, 49633, 49639, 49663, + 49667, 49669, 49681, 49697, 49711, 49727, + 49729, 49739, 49741, 49747, 49757, 49783, + 49787, 49789, 49801, 49807, 49811, 49823, + 49831, 49843, 49853, 49871, 49877, 49891, + 49919, 49921, 49927, 49937, 49939, 49943, + 49957, 49991, 49993, 49999, 50021, 50023, + 50033, 50047, 50051, 50053, 50069, 50077, + 50087, 50093, 50101, 50111, 50119, 50123, + 50129, 50131, 50147, 50153, 50159, 50177, + 50207, 50221, 50227, 50231, 50261, 50263, + 50273, 50287, 50291, 50311, 50321, 50329, + 50333, 50341, 50359, 50363, 50377, 50383, + 50387, 50411, 50417, 50423, 50441, 50459, + 50461, 50497, 50503, 50513, 50527, 50539, + 50543, 50549, 50551, 50581, 50587, 50591, + 50593, 50599, 50627, 50647, 50651, 50653, + 50671, 50683, 50707, 50723, 50741, 50753, + 50767, 50773, 50777, 50789, 50821, 50833, + 50839, 50849, 50857, 50867, 50873, 50891, + 50893, 50909, 50923, 50929, 50951, 50957, + 50969, 50971, 50989, 50993, 51001, 51031, + 51043, 51047, 51059, 51061, 51071, 51109, + 51131, 51133, 51137, 51151, 51157, 51169, + 51193, 51197, 51199, 51203, 51217, 51229, + 51239, 51241, 51257, 51263, 51283, 51287, + 51307, 51329, 51341, 51343, 51347, 51349, + 51361, 51383, 51407, 51413, 51419, 51421, + 51427, 51431, 51437, 51439, 51449, 51461, + 51473, 51479, 51481, 51487, 51503, 51511, + 51517, 51521, 51529, 51539, 51551, 51563, + 51577, 51581, 51593, 51599, 51607, 51613, + 51631, 51637, 51647, 51659, 51673, 51679, + 51683, 51691, 51713, 51719, 51721, 51749, + 51767, 51769, 51787, 51797, 51803, 51817, + 51827, 51829, 51839, 51853, 51859, 51869, + 51871, 51893, 51899, 51907, 51913, 51929, + 51941, 51949, 51971, 51973, 51977, 51991, + 52009, 52021, 52027, 52051, 52057, 52067, + 52069, 52081, 52103, 52121, 52127, 52147, + 52153, 52163, 52177, 52181, 52183, 52189, + 52201, 52223, 52237, 52249, 52253, 52259, + 52267, 52289, 52291, 52301, 52313, 52321, + 52361, 52363, 52369, 52379, 52387, 52391, + 52433, 52441, 52453, 52457, 52489, 52501, + 52511, 52517, 52529, 52541, 52543, 52553, + 52561, 52567, 52571, 52579, 52583, 52609, + 52627, 52631, 52639, 52667, 52673, 52691, + 52697, 52709, 52711, 52721, 52727, 52733, + 52747, 52757, 52769, 52783, 52807, 52813, + 52817, 52837, 52859, 52861, 52879, 52883, + 52889, 52901, 52903, 52919, 52937, 52951, + 52957, 52963, 52967, 52973, 52981, 52999, + 53003, 53017, 53047, 53051, 53069, 53077, + 53087, 53089, 53093, 53101, 53113, 53117, + 53129, 53147, 53149, 53161, 53171, 53173, + 53189, 53197, 53201, 53231, 53233, 53239, + 53267, 53269, 53279, 53281, 53299, 53309, + 53323, 53327, 53353, 53359, 53377, 53381, + 53401, 53407, 53411, 53419, 53437, 53441, + 53453, 53479, 53503, 53507, 53527, 53549, + 53551, 53569, 53591, 53593, 53597, 53609, + 53611, 53617, 53623, 53629, 53633, 53639, + 53653, 53657, 53681, 53693, 53699, 53717, + 53719, 53731, 53759, 53773, 53777, 53783, + 53791, 53813, 53819, 53831, 53849, 53857, + 53861, 53881, 53887, 53891, 53897, 53899, + 53917, 53923, 53927, 53939, 53951, 53959, + 53987, 53993, 54001, 54011, 54013, 54037, + 54049, 54059, 54083, 54091, 54101, 54121, + 54133, 54139, 54151, 54163, 54167, 54181, + 54193, 54217, 54251, 54269, 54277, 54287, + 54289, 54293, 54311, 54319, 54323, 54331, + 54347, 54361, 54367, 54371, 54377, 54401, + 54403, 54409, 54413, 54419, 54421, 54437, + 54443, 54449, 54469, 54493, 54497, 54499, + 54503, 54517, 54521, 54539, 54541, 54547, + 54559, 54563, 54577, 54581, 54583, 54601, + 54617, 54623, 54629, 54631, 54647, 54667, + 54673, 54679, 54709, 54713, 54721, 54727, + 54751, 54767, 54773, 54779, 54787, 54799, + 54829, 54833, 54851, 54869, 54877, 54881, + 54907, 54917, 54919, 54941, 54949, 54959, + 54973, 54979, 54983, 55001, 55009, 55021, + 55049, 55051, 55057, 55061, 55073, 55079, + 55103, 55109, 55117, 55127, 55147, 55163, + 55171, 55201, 55207, 55213, 55217, 55219, + 55229, 55243, 55249, 55259, 55291, 55313, + 55331, 55333, 55337, 55339, 55343, 55351, + 55373, 55381, 55399, 55411, 55439, 55441, + 55457, 55469, 55487, 55501, 55511, 55529, + 55541, 55547, 55579, 55589, 55603, 55609, + 55619, 55621, 55631, 55633, 55639, 55661, + 55663, 55667, 55673, 55681, 55691, 55697, + 55711, 55717, 55721, 55733, 55763, 55787, + 55793, 55799, 55807, 55813, 55817, 55819, + 55823, 55829, 55837, 55843, 55849, 55871, + 55889, 55897, 55901, 55903, 55921, 55927, + 55931, 55933, 55949, 55967, 55987, 55997, + 56003, 56009, 56039, 56041, 56053, 56081, + 56087, 56093, 56099, 56101, 56113, 56123, + 56131, 56149, 56167, 56171, 56179, 56197, + 56207, 56209, 56237, 56239, 56249, 56263, + 56267, 56269, 56299, 56311, 56333, 56359, + 56369, 56377, 56383, 56393, 56401, 56417, + 56431, 56437, 56443, 56453, 56467, 56473, + 56477, 56479, 56489, 56501, 56503, 56509, + 56519, 56527, 56531, 56533, 56543, 56569, + 56591, 56597, 56599, 56611, 56629, 56633, + 56659, 56663, 56671, 56681, 56687, 56701, + 56711, 56713, 56731, 56737, 56747, 56767, + 56773, 56779, 56783, 56807, 56809, 56813, + 56821, 56827, 56843, 56857, 56873, 56891, + 56893, 56897, 56909, 56911, 56921, 56923, + 56929, 56941, 56951, 56957, 56963, 56983, + 56989, 56993, 56999, 57037, 57041, 57047, + 57059, 57073, 57077, 57089, 57097, 57107, + 57119, 57121, 57131, 57139, 57143, 57149, + 57163, 57173, 57179, 57191, 57193, 57203, + 57221, 57223, 57241, 57251, 57259, 57269, + 57271, 57283, 57287, 57301, 57329, 57331, + 57347, 57349, 57367, 57373, 57383, 57389, + 57397, 57413, 57427, 57457, 57467, 57487, + 57493, 57503, 57527, 57529, 57557, 57559, + 57571, 57587, 57593, 57601, 57637, 57641, + 57649, 57653, 57667, 57679, 57689, 57697, + 57709, 57713, 57719, 57727, 57731, 57737, + 57751, 57773, 57781, 57787, 57791, 57793, + 57803, 57809, 57829, 57839, 57847, 57853, + 57859, 57881, 57899, 57901, 57917, 57923, + 57943, 57947, 57973, 57977, 57991, 58013, + 58027, 58031, 58043, 58049, 58057, 58061, + 58067, 58073, 58081, 58099, 58109, 58111, + 58129, 58147, 58151, 58153, 58169, 58171, + 58189, 58193, 58199, 58207, 58211, 58217, + 58229, 58231, 58237, 58243, 58271, 58309, + 58313, 58321, 58337, 58363, 58367, 58369, + 58379, 58391, 58393, 58403, 58411, 58417, + 58427, 58439, 58441, 58451, 58453, 58477, + 58481, 58511, 58537, 58543, 58549, 58567, + 58573, 58579, 58601, 58603, 58613, 58631, + 58657, 58661, 58679, 58687, 58693, 58699, + 58711, 58727, 58733, 58741, 58757, 58763, + 58771, 58787, 58789, 58831, 58889, 58897, + 58901, 58907, 58909, 58913, 58921, 58937, + 58943, 58963, 58967, 58979, 58991, 58997, + 59009, 59011, 59021, 59023, 59029, 59049, + 59051, 59053, 59063, 59069, 59077, 59083, + 59093, 59107, 59113, 59119, 59123, 59141, + 59149, 59159, 59167, 59183, 59197, 59207, + 59209, 59219, 59221, 59233, 59239, 59243, + 59263, 59273, 59281, 59333, 59341, 59351, + 59357, 59359, 59369, 59377, 59387, 59393, + 59399, 59407, 59417, 59419, 59441, 59443, + 59447, 59453, 59467, 59471, 59473, 59497, + 59509, 59513, 59539, 59557, 59561, 59567, + 59581, 59611, 59617, 59621, 59627, 59629, + 59651, 59659, 59663, 59669, 59671, 59693, + 59699, 59707, 59723, 59729, 59743, 59747, + 59753, 59771, 59779, 59791, 59797, 59809, + 59833, 59863, 59879, 59887, 59921, 59929, + 59951, 59957, 59971, 59981, 59999, 60013, + 60017, 60029, 60037, 60041, 60077, 60083, + 60089, 60091, 60101, 60103, 60107, 60127, + 60133, 60139, 60149, 60161, 60167, 60169, + 60209, 60217, 60223, 60251, 60257, 60259, + 60271, 60289, 60293, 60317, 60331, 60337, + 60343, 60353, 60373, 60383, 60397, 60413, + 60427, 60443, 60449, 60457, 60493, 60497, + 60509, 60521, 60527, 60539, 60589, 60601, + 60607, 60611, 60617, 60623, 60631, 60637, + 60647, 60649, 60659, 60661, 60679, 60689, + 60703, 60719, 60727, 60733, 60737, 60757, + 60761, 60763, 60773, 60779, 60793, 60811, + 60821, 60859, 60869, 60887, 60889, 60899, + 60901, 60913, 60917, 60919, 60923, 60937, + 60943, 60953, 60961, 61001, 61007, 61027, + 61031, 61043, 61051, 61057, 61091, 61099, + 61121, 61129, 61141, 61151, 61153, 61169, + 61211, 61223, 61231, 61253, 61261, 61283, + 61291, 61297, 61331, 61333, 61339, 61343, + 61357, 61363, 61379, 61381, 61403, 61409, + 61417, 61441, 61463, 61469, 61471, 61483, + 61487, 61493, 61507, 61511, 61519, 61543, + 61547, 61553, 61559, 61561, 61583, 61603, + 61609, 61613, 61627, 61631, 61637, 61643, + 61651, 61657, 61667, 61673, 61681, 61687, + 61703, 61717, 61723, 61729, 61751, 61757, + 61781, 61813, 61819, 61837, 61843, 61861, + 61871, 61879, 61909, 61927, 61933, 61949, + 61961, 61967, 61979, 61981, 61987, 61991, + 62003, 62011, 62017, 62039, 62047, 62053, + 62057, 62071, 62081, 62099, 62119, 62129, + 62131, 62137, 62141, 62143, 62171, 62189, + 62191, 62201, 62207, 62213, 62219, 62233, + 62273, 62297, 62299, 62303, 62311, 62323, + 62327, 62347, 62351, 62383, 62401, 62417, + 62423, 62459, 62467, 62473, 62477, 62483, + 62497, 62501, 62507, 62533, 62539, 62549, + 62563, 62581, 62591, 62597, 62603, 62617, + 62627, 62633, 62639, 62653, 62659, 62683, + 62687, 62701, 62723, 62731, 62743, 62753, + 62761, 62773, 62791, 62801, 62819, 62827, + 62851, 62861, 62869, 62873, 62897, 62903, + 62921, 62927, 62929, 62939, 62969, 62971, + 62981, 62983, 62987, 62989, 63001, 63029, + 63031, 63059, 63067, 63073, 63079, 63097, + 63103, 63113, 63127, 63131, 63149, 63179, + 63197, 63199, 63211, 63241, 63247, 63277, + 63281, 63299, 63311, 63313, 63317, 63331, + 63337, 63347, 63353, 63361, 63367, 63377, + 63389, 63391, 63397, 63409, 63419, 63421, + 63439, 63443, 63463, 63467, 63473, 63487, + 63493, 63499, 63521, 63527, 63533, 63541, + 63559, 63577, 63587, 63589, 63599, 63601, + 63607, 63611, 63617, 63629, 63647, 63649, + 63659, 63667, 63671, 63689, 63691, 63697, + 63703, 63709, 63719, 63727, 63737, 63743, + 63761, 63773, 63781, 63793, 63799, 63803, + 63809, 63823, 63839, 63841, 63853, 63857, + 63863, 63901, 63907, 63913, 63929, 63949, + 63977, 63997, 64007, 64013, 64019, 64033, + 64037, 64063, 64067, 64081, 64091, 64109, + 64123, 64151, 64153, 64157, 64171, 64187, + 64189, 64217, 64223, 64231, 64237, 64271, + 64279, 64283, 64301, 64303, 64319, 64327, + 64333, 64373, 64381, 64399, 64403, 64433, + 64439, 64451, 64453, 64483, 64489, 64499, + 64513, 64553, 64567, 64577, 64579, 64591, + 64601, 64609, 64613, 64621, 64627, 64633, + 64661, 64663, 64667, 64679, 64693, 64709, + 64717, 64747, 64763, 64781, 64783, 64793, + 64811, 64817, 64849, 64853, 64871, 64877, + 64879, 64891, 64901, 64919, 64921, 64927, + 64937, 64951, 64969, 64997, 65003, 65011, + 65027, 65029, 65033, 65053, 65063, 65071, + 65089, 65099, 65101, 65111, 65119, 65123, + 65129, 65141, 65147, 65167, 65171, 65173, + 65179, 65183, 65203, 65213, 65239, 65257, + 65267, 65269, 65287, 65293, 65309, 65323, + 65327, 65353, 65357, 65371, 65381, 65393, + 65407, 65413, 65419, 65423, 65437, 65447, + 65449, 65479, 65497, 65519, 65521, 65536, + }; diff --git a/src/ffdata.h b/src/ffdata.h new file mode 100644 index 0000000000..cbe57efd56 --- /dev/null +++ b/src/ffdata.h @@ -0,0 +1,23 @@ +/* This file has been generated by etc/ffgen.c during build, + do not edit */ +#ifndef GAP_FFDATA_H +#define GAP_FFDATA_H + +#include + +enum { + NUM_SHORT_FINITE_FIELDS = 6635, + MAXSIZE_GF_INTERNAL = 65536, + DEGREE_LARGEST_INTERNAL_FF = 16, + FIELD_BITS_FFE = 13, + VAL_BITS_FFE = 16 +}; + +extern const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1]; +extern const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1]; +extern const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1]; + +typedef uint16_t FF; +typedef uint16_t FFV; + +#endif // GAP_FFDATA_H diff --git a/src/sysenv.h b/src/sysenv.h index 61782db605..f7c037f7cd 100644 --- a/src/sysenv.h +++ b/src/sysenv.h @@ -22,9 +22,8 @@ #define environ (*_NSGetEnviron()) #elif defined(SYS_IS_MINGW) -// MinGW: Use _environ which is guaranteed to be available -extern char ** _environ; -#define environ _environ +// MinGW: On cross-compilation, just use environ directly +extern char ** environ; #elif !defined(environ) extern char ** environ; // generic fallback From 413a4eced8265df8e451970a04fdab736eef1aa7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:02:58 +0000 Subject: [PATCH 21/29] Remove build artifacts and temporary files --- native-build/CITATION | 60 - native-build/GNUmakefile | 174 -- native-build/build/config.h | 316 ---- native-build/build/ffdata.c | 2643 ----------------------------- native-build/build/ffdata.h | 23 - native-build/build/stamp-h | 1 - native-build/cnf/GAP-VERSION-FILE | 2 - native-build/config.status | 1127 ------------ native-build/doc/make_doc | 92 - native-build/doc/versiondata | 10 - native-build/ffgen | Bin 16888 -> 0 bytes native-build/libgap.pc | 11 - src/ffdata.c | 2643 ----------------------------- src/ffdata.h | 23 - 14 files changed, 7125 deletions(-) delete mode 100644 native-build/CITATION delete mode 100644 native-build/GNUmakefile delete mode 100644 native-build/build/config.h delete mode 100644 native-build/build/ffdata.c delete mode 100644 native-build/build/ffdata.h delete mode 100644 native-build/build/stamp-h delete mode 100644 native-build/cnf/GAP-VERSION-FILE delete mode 100755 native-build/config.status delete mode 100755 native-build/doc/make_doc delete mode 100644 native-build/doc/versiondata delete mode 100755 native-build/ffgen delete mode 100644 native-build/libgap.pc delete mode 100644 src/ffdata.c delete mode 100644 src/ffdata.h diff --git a/native-build/CITATION b/native-build/CITATION deleted file mode 100644 index b4d7bba575..0000000000 --- a/native-build/CITATION +++ /dev/null @@ -1,60 +0,0 @@ -Please use one of the following samples to cite GAP version from this installation - -Text: - -[GAP] GAP – Groups, Algorithms, and Programming, Version 4.15dev, -The GAP Group (this year), https://www.gap-system.org. - -HTML: - -

-[GAP] - GAP – Groups, Algorithms, and Programming, Version 4.15dev, - The GAP Group (this year), -https://www.gap-system.org. -

- -BibXML: - - - <C>GAP</C> – <C>G</C>roups, <C>A</C>lgorithms, - and <C>P</C>rogramming, <C>V</C>ersion 4.15dev - https://www.gap-system.org - this year - GAP - groups; *; gap; manual - The GAP Group - - -BibTeX: - -@misc{ GAP4.15dev, - title = {{GAP} {\textendash} {G}roups, {A}lgorithms, and {P}rogramming, {V}ersion 4.15dev}, - organization = {The GAP {G}roup}, - year = {this year}, - howpublished = {\href{https://www.gap-system.org}{\texttt{https://www.gap-system.org}}}, - key = {GAP}, - keywords = {groups; *; gap; manual} -} - -If you are not using BibTeX, here is the bibliography entry produced -by BibTeX (in bibliography style `alpha'): - -\bibitem[GAP]{GAP4} -\emph{GAP -- Groups, Algorithms, and Programming}, Version 4.15dev, -The GAP~Group (this year), \verb+https://www.gap-system.org+. - -If you have (predominantly) used one or more particular GAP packages, -please cite these packages in addition to GAP itself (either check the -the package documentation for the suggestions, or use a scheme like: - -[PKG] -, , , -Version (), (GAP package), -. - -You may also produce citation samples for a GAP package by entering - - Cite("packagename"); - -in a GAP installation with the working version of this package available. diff --git a/native-build/GNUmakefile b/native-build/GNUmakefile deleted file mode 100644 index 303635dfe5..0000000000 --- a/native-build/GNUmakefile +++ /dev/null @@ -1,174 +0,0 @@ -# GNUmakefile. Generated from GNUmakefile.in by configure. - -# This file is the part of the GAP build system. It is the first file -# processed by GNU make when build GAP. If you want to understand the -# build system, you can begin tracing it from here. -# -# To learn more about the GAP build system, see README.buildsys.md - - -# -# Set lots of variables to values computed by the configure script -# - -# GAP specific -ABI = 64 -ABI_CFLAGS = - -# HPC-GAP specific -HPCGAP = no - -# garbage collector source files -GC_SOURCES = src/gasman.c src/sysmem.c - -# GAP architecture string -GAPARCH = x86_64-pc-linux-gnu-default64-kv10 - -# maintainer mode -MAINTAINER_MODE = yes - -# GAP version and release date -GAP_VERSION = 4.15dev -GAP_RELEASEDAY = today - -# GAP kernel version -GAP_KERNEL_MINOR_VERSION = 0 -GAP_KERNEL_MAJOR_VERSION = 10 - -# autoconf host system information (= system *for* which we are compiling) -host = x86_64-pc-linux-gnu -host_alias = -host_cpu = x86_64 -host_os = linux-gnu -host_vendor = pc - -# autoconf build system information (= system *on* which we are compiling) -build = x86_64-pc-linux-gnu -build_alias = -build_cpu = x86_64 -build_os = linux-gnu -build_vendor = pc - -# compile and linker flags -CFLAGS = -g -O2 -CXXFLAGS = -g -O2 -CPPFLAGS = -LDFLAGS = -LIBS = -lm -GAP_DEFINES = -DUSE_GASMAN=1 - -WARN_CFLAGS = -fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but-set-variable -Wno-unused-parameter -Wwrite-strings -Wno-implicit-fallthrough -Wimplicit-function-declaration -Wjump-misses-init -Wnested-externs -Wold-style-definition -Wstrict-prototypes -Wno-error=cast-function-type -Wno-error=inline -Wno-error=pragmas -Wno-error=sign-compare -Wno-error=unused-parameter -Wno-error=implicit-fallthrough -WARN_CXXFLAGS = -fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but-set-variable -Wno-unused-parameter -Wwrite-strings -Wextra-semi - -BUILD_GMP = no -GMP_CPPFLAGS = -Ibundled/include -GMP_LDFLAGS = -Lbundled/lib -GMP_LIBS = -lgmp -GMP_PREFIX = bundled - -BUILD_ZLIB = no -ZLIB_CPPFLAGS = -ZLIB_LDFLAGS = -ZLIB_LIBS = -lz - -READLINE_CPPFLAGS = -READLINE_LDFLAGS = -READLINE_LIBS = - -JULIA_VERSION = -JULIA_CFLAGS = -JULIA_LDFLAGS = -JULIA_LIBS = - -BUILD_BOEHM_GC = -BOEHM_GC_CPPFLAGS = -BOEHM_GC_LDFLAGS = -BOEHM_GC_LIBS = - -BUILD_LIBATOMIC_OPS = -LIBATOMIC_OPS_CPPFLAGS = -LIBATOMIC_OPS_LDFLAGS = -LIBATOMIC_OPS_LIBS = - -PTHREAD_CFLAGS = -pthread -PTHREAD_LIBS = -lpthread - -# build tools -CC = gcc -CXX = g++ -INSTALL = /usr/bin/install -c -MKDIR_P = /usr/bin/mkdir -p -SED = /usr/bin/sed -SHELL = /bin/bash - -# misc -EXEEXT = - -# build paths -abs_builddir = /home/runner/work/gap/gap/native-build -abs_srcdir = /home/runner/work/gap/gap/native-build/.. -builddir = . -srcdir = .. - -# for compatibility: top_builddir is used by libtool for LIBTOOL variable; -# keeping the others makes it easier to "git bisect" back and forth -top_builddir = . -top_srcdir = .. -abs_top_builddir = /home/runner/work/gap/gap/native-build -abs_top_srcdir = /home/runner/work/gap/gap/native-build/.. - -# install paths -bindir = ${exec_prefix}/bin -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -exec_prefix = ${prefix} -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -pdfdir = ${docdir} -prefix = /usr/local -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -sysconfdir = ${prefix}/etc - - -# -# Set vpath values to make GNU make read source files from $(srcdir). -# -# The vpath directives below ensure that if we reference src/foo.c, then if it -# is not found in the build dir (e.g. because we are doing an out-of-tree -# build), GNU make automatically looks for $(srcdir)/src/foo.c -# # -# Note that `vpath' is a GNU make extension. Unlike VPATH, it can be -# restricted to certain file extensions. This way, we can mix in-tree and -# out-of-tree builds without accidentally picking up e.g. *.o files from the -# wrong tree. We still have to be careful about build/config.h, though. -# -vpath src/%.h $(srcdir) -vpath src/%.c $(srcdir) -vpath src/%.cc $(srcdir) -vpath src/%.s $(srcdir) - -vpath src/hpc/%.h $(srcdir) -vpath src/hpc/%.c $(srcdir) -vpath src/hpc/%.cc $(srcdir) -vpath src/hpc/%.s $(srcdir) - -vpath tst/testkernel/%.h $(srcdir) -vpath tst/testkernel/%.c $(srcdir) - -vpath tst/testlibgap/%.h $(srcdir) -vpath tst/testlibgap/%.c $(srcdir) - - -# -# Finally, include the actual make rules. -# -include $(srcdir)/Makefile.rules diff --git a/native-build/build/config.h b/native-build/build/config.h deleted file mode 100644 index ed88437ad0..0000000000 --- a/native-build/build/config.h +++ /dev/null @@ -1,316 +0,0 @@ -/* build/config.h. Generated from config.h.in by configure. */ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* define as least offset which is still safe for an unaligned access */ -#define C_STACK_ALIGN 2 - -/* the GAP architecture, for kernel extensions */ -#define GAPARCH "x86_64-pc-linux-gnu-default64-kv10" - -/* disable subprocess support on MinGW */ -/* #undef GAP_DISABLE_SUBPROCESS_CODE */ - -/* to enable backtraces upon crashes */ -/* #undef GAP_PRINT_BACKTRACE */ - -/* Defined if backtrace() could be fully identified. */ -#define HAVE_BACKTRACE 1 - -/* Define to 1 if you have the `clock_getres' function. */ -#define HAVE_CLOCK_GETRES 1 - -/* Define to 1 if you have the `clock_gettime' function. */ -#define HAVE_CLOCK_GETTIME 1 - -/* define if the compiler supports basic C++11 syntax */ -#define HAVE_CXX11 1 - -/* define as 1 if you have `dlopen' and `dlsym' */ -#define HAVE_DLOPEN 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_EXECINFO_H 1 - -/* Define to 1 if you have the `exp10' function. */ -#define HAVE_EXP10 1 - -/* Define to 1 if you have the `fork' function. */ -#define HAVE_FORK 1 - -/* Define to 1 if the system has the `always_inline' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE 1 - -/* Define to 1 if the system has the `constructor' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR 1 - -/* Define to 1 if the system has the `fallthrough' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_FALLTHROUGH 1 - -/* Define to 1 if the system has the `format' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_FORMAT 1 - -/* Define to 1 if the system has the `noinline' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_NOINLINE 1 - -/* Define to 1 if the system has the `noreturn' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_NORETURN 1 - -/* Define to 1 if the system has the `pure' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_PURE 1 - -/* Define to 1 if you have the `getrusage' function. */ -#define HAVE_GETRUSAGE 1 - -/* Define to 1 if you have the `gettimeofday' function. */ -#define HAVE_GETTIMEOFDAY 1 - -/* Define to 1 if you have the `grantpt' function. */ -/* #undef HAVE_GRANTPT */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define if you have lib(e)readline */ -/* #undef HAVE_LIBREADLINE */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_LIBUTIL_H */ - -/* Define to 1 if you have the `lstat' function. */ -#define HAVE_LSTAT 1 - -/* Define to 1 if you have the `madvise' function. */ -#define HAVE_MADVISE 1 - -/* Define to 1 if you have the `mkdtemp' function. */ -#define HAVE_MKDTEMP 1 - -/* define as 1 if you have `openpty' */ -#define HAVE_OPENPTY 1 - -/* Define to 1 if you have the `popen' function. */ -#define HAVE_POPEN 1 - -/* Define to 1 if you have the `posix_openpt' function. */ -/* #undef HAVE_POSIX_OPENPT */ - -/* Define to 1 if you have the `posix_spawn' function. */ -#define HAVE_POSIX_SPAWN 1 - -/* Define to 1 if you have the `posix_spawn_file_actions_addchdir' function. - */ -/* #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR */ - -/* Define to 1 if you have the `posix_spawn_file_actions_addchdir_np' - function. */ -#define HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP 1 - -/* Define if you have POSIX threads libraries and header files. */ -#define HAVE_PTHREAD 1 - -/* Have PTHREAD_PRIO_INHERIT. */ -#define HAVE_PTHREAD_PRIO_INHERIT 1 - -/* Define to 1 if you have the `ptsname' function. */ -/* #undef HAVE_PTSNAME */ - -/* Define to 1 if you have the header file. */ -#define HAVE_PTY_H 1 - -/* Define to 1 if you have the `readlink' function. */ -#define HAVE_READLINK 1 - -/* Define to 1 if you have the `realpath' function. */ -#define HAVE_REALPATH 1 - -/* Define to 1 if you have the `sbrk' function. */ -#define HAVE_SBRK 1 - -/* Define to 1 if you have the `select' function. */ -#define HAVE_SELECT 1 - -/* Define to 1 if you have the `setitimer' function. */ -#define HAVE_SETITIMER 1 - -/* Define to 1 if you have the `setpgid' function. */ -#define HAVE_SETPGID 1 - -/* Define to 1 if you have the `sigaction' function. */ -#define HAVE_SIGACTION 1 - -/* Define to 1 if you have the `signal' function. */ -#define HAVE_SIGNAL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SIGNAL_H 1 - -/* Check for sig_atomic_t */ -/* #undef HAVE_SIG_ATOMIC_T */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SPAWN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDIO_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `sysconf' function. */ -#define HAVE_SYSCONF 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_IOCTL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_RESOURCE_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#define HAVE_SYS_WAIT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_TERMIOS_H 1 - -/* Define to 1 if you have the `ttyname' function. */ -#define HAVE_TTYNAME 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `unlockpt' function. */ -/* #undef HAVE_UNLOCKPT */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_UTIL_H */ - -/* Define to 1 if you have the `vfork' function. */ -#define HAVE_VFORK 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_VFORK_H */ - -/* Define to 1 if you have the `vm_allocate' function. */ -/* #undef HAVE_VM_ALLOCATE */ - -/* Define to 1 if `fork' works. */ -#define HAVE_WORKING_FORK 1 - -/* Define to 1 if `vfork' works. */ -#define HAVE_WORKING_VFORK 1 - -/* Define to 1 if the system has the `__builtin_clz' built-in function */ -#define HAVE___BUILTIN_CLZ 1 - -/* Define to 1 if the system has the `__builtin_clzl' built-in function */ -#define HAVE___BUILTIN_CLZL 1 - -/* Define to 1 if the system has the `__builtin_clzll' built-in function */ -#define HAVE___BUILTIN_CLZLL 1 - -/* Define to 1 if the system has the `__builtin_mul_overflow' built-in - function */ -#define HAVE___BUILTIN_MUL_OVERFLOW 1 - -/* Define to 1 if the system has the `__builtin_popcountl' built-in function - */ -#define HAVE___BUILTIN_POPCOUNTL 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "support@gap-system.org" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "GAP" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GAP 4.15dev" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "gap-4.15dev" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "https://www.gap-system.org/" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "4.15dev" - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 8 - -/* The size of `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* The size of `void *', as computed by sizeof. */ -#define SIZEOF_VOID_P 8 - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#define STDC_HEADERS 1 - -/* define as 1 on Cygwin */ -/* #undef SYS_IS_CYGWIN32 */ - -/* define as 1 on MinGW/Windows */ -/* #undef SYS_IS_MINGW */ - -/* define as 1 on SPARC architecture to flush register windows */ -/* #undef SYS_IS_SPARC */ - -/* define as 1 if we should try and use the __builtin_popcountl function if - available */ -#define USE_POPCNT 1 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -/* Defined to return type of backtrace(). */ -#define backtrace_size_t int - -/* Define as a signed integer type capable of holding a process identifier. */ -/* #undef pid_t */ - -/* Define as `fork' if `vfork' does not work. */ -/* #undef vfork */ diff --git a/native-build/build/ffdata.c b/native-build/build/ffdata.c deleted file mode 100644 index 154ea2abae..0000000000 --- a/native-build/build/ffdata.c +++ /dev/null @@ -1,2643 +0,0 @@ -/* This file has been generated by etc/ffgen.c during build, - do not edit */ -#include "ffdata.h" - -/* Entries are ordered by value of p^d; can use binary search - * to find them. Indices start at 1. - */ - -const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 1, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 1, 1, 2, 3, - 1, 1, 5, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 1, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 7, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 5, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 7, 3, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, -}; - -const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 2, 3, 2, 5, 7, - 2, 3, 11, 13, 2, 17, - 19, 23, 5, 3, 29, 31, - 2, 37, 41, 43, 47, 7, - 53, 59, 61, 2, 67, 71, - 73, 79, 3, 83, 89, 97, - 101, 103, 107, 109, 113, 11, - 5, 127, 2, 131, 137, 139, - 149, 151, 157, 163, 167, 13, - 173, 179, 181, 191, 193, 197, - 199, 211, 223, 227, 229, 233, - 239, 241, 3, 251, 2, 257, - 263, 269, 271, 277, 281, 283, - 17, 293, 307, 311, 313, 317, - 331, 337, 7, 347, 349, 353, - 359, 19, 367, 373, 379, 383, - 389, 397, 401, 409, 419, 421, - 431, 433, 439, 443, 449, 457, - 461, 463, 467, 479, 487, 491, - 499, 503, 509, 2, 521, 523, - 23, 541, 547, 557, 563, 569, - 571, 577, 587, 593, 599, 601, - 607, 613, 617, 619, 5, 631, - 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, - 719, 727, 3, 733, 739, 743, - 751, 757, 761, 769, 773, 787, - 797, 809, 811, 821, 823, 827, - 829, 839, 29, 853, 857, 859, - 863, 877, 881, 883, 887, 907, - 911, 919, 929, 937, 941, 947, - 953, 31, 967, 971, 977, 983, - 991, 997, 1009, 1013, 1019, 1021, - 2, 1031, 1033, 1039, 1049, 1051, - 1061, 1063, 1069, 1087, 1091, 1093, - 1097, 1103, 1109, 1117, 1123, 1129, - 1151, 1153, 1163, 1171, 1181, 1187, - 1193, 1201, 1213, 1217, 1223, 1229, - 1231, 1237, 1249, 1259, 1277, 1279, - 1283, 1289, 1291, 1297, 1301, 1303, - 1307, 1319, 1321, 1327, 11, 1361, - 1367, 37, 1373, 1381, 1399, 1409, - 1423, 1427, 1429, 1433, 1439, 1447, - 1451, 1453, 1459, 1471, 1481, 1483, - 1487, 1489, 1493, 1499, 1511, 1523, - 1531, 1543, 1549, 1553, 1559, 1567, - 1571, 1579, 1583, 1597, 1601, 1607, - 1609, 1613, 1619, 1621, 1627, 1637, - 1657, 1663, 1667, 1669, 41, 1693, - 1697, 1699, 1709, 1721, 1723, 1733, - 1741, 1747, 1753, 1759, 1777, 1783, - 1787, 1789, 1801, 1811, 1823, 1831, - 1847, 43, 1861, 1867, 1871, 1873, - 1877, 1879, 1889, 1901, 1907, 1913, - 1931, 1933, 1949, 1951, 1973, 1979, - 1987, 1993, 1997, 1999, 2003, 2011, - 2017, 2027, 2029, 2039, 2, 2053, - 2063, 2069, 2081, 2083, 2087, 2089, - 2099, 2111, 2113, 2129, 2131, 2137, - 2141, 2143, 2153, 2161, 2179, 3, - 13, 2203, 2207, 47, 2213, 2221, - 2237, 2239, 2243, 2251, 2267, 2269, - 2273, 2281, 2287, 2293, 2297, 2309, - 2311, 2333, 2339, 2341, 2347, 2351, - 2357, 2371, 2377, 2381, 2383, 2389, - 2393, 2399, 7, 2411, 2417, 2423, - 2437, 2441, 2447, 2459, 2467, 2473, - 2477, 2503, 2521, 2531, 2539, 2543, - 2549, 2551, 2557, 2579, 2591, 2593, - 2609, 2617, 2621, 2633, 2647, 2657, - 2659, 2663, 2671, 2677, 2683, 2687, - 2689, 2693, 2699, 2707, 2711, 2713, - 2719, 2729, 2731, 2741, 2749, 2753, - 2767, 2777, 2789, 2791, 2797, 2801, - 2803, 53, 2819, 2833, 2837, 2843, - 2851, 2857, 2861, 2879, 2887, 2897, - 2903, 2909, 2917, 2927, 2939, 2953, - 2957, 2963, 2969, 2971, 2999, 3001, - 3011, 3019, 3023, 3037, 3041, 3049, - 3061, 3067, 3079, 3083, 3089, 3109, - 3119, 3121, 5, 3137, 3163, 3167, - 3169, 3181, 3187, 3191, 3203, 3209, - 3217, 3221, 3229, 3251, 3253, 3257, - 3259, 3271, 3299, 3301, 3307, 3313, - 3319, 3323, 3329, 3331, 3343, 3347, - 3359, 3361, 3371, 3373, 3389, 3391, - 3407, 3413, 3433, 3449, 3457, 3461, - 3463, 3467, 3469, 59, 3491, 3499, - 3511, 3517, 3527, 3529, 3533, 3539, - 3541, 3547, 3557, 3559, 3571, 3581, - 3583, 3593, 3607, 3613, 3617, 3623, - 3631, 3637, 3643, 3659, 3671, 3673, - 3677, 3691, 3697, 3701, 3709, 3719, - 61, 3727, 3733, 3739, 3761, 3767, - 3769, 3779, 3793, 3797, 3803, 3821, - 3823, 3833, 3847, 3851, 3853, 3863, - 3877, 3881, 3889, 3907, 3911, 3917, - 3919, 3923, 3929, 3931, 3943, 3947, - 3967, 3989, 4001, 4003, 4007, 4013, - 4019, 4021, 4027, 4049, 4051, 4057, - 4073, 4079, 4091, 4093, 2, 4099, - 4111, 4127, 4129, 4133, 4139, 4153, - 4157, 4159, 4177, 4201, 4211, 4217, - 4219, 4229, 4231, 4241, 4243, 4253, - 4259, 4261, 4271, 4273, 4283, 4289, - 4297, 4327, 4337, 4339, 4349, 4357, - 4363, 4373, 4391, 4397, 4409, 4421, - 4423, 4441, 4447, 4451, 4457, 4463, - 4481, 4483, 67, 4493, 4507, 4513, - 4517, 4519, 4523, 4547, 4549, 4561, - 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4639, 4643, 4649, 4651, 4657, - 4663, 4673, 4679, 4691, 4703, 4721, - 4723, 4729, 4733, 4751, 4759, 4783, - 4787, 4789, 4793, 4799, 4801, 4813, - 4817, 4831, 4861, 4871, 4877, 4889, - 4903, 4909, 17, 4919, 4931, 4933, - 4937, 4943, 4951, 4957, 4967, 4969, - 4973, 4987, 4993, 4999, 5003, 5009, - 5011, 5021, 5023, 5039, 71, 5051, - 5059, 5077, 5081, 5087, 5099, 5101, - 5107, 5113, 5119, 5147, 5153, 5167, - 5171, 5179, 5189, 5197, 5209, 5227, - 5231, 5233, 5237, 5261, 5273, 5279, - 5281, 5297, 5303, 5309, 5323, 73, - 5333, 5347, 5351, 5381, 5387, 5393, - 5399, 5407, 5413, 5417, 5419, 5431, - 5437, 5441, 5443, 5449, 5471, 5477, - 5479, 5483, 5501, 5503, 5507, 5519, - 5521, 5527, 5531, 5557, 5563, 5569, - 5573, 5581, 5591, 5623, 5639, 5641, - 5647, 5651, 5653, 5657, 5659, 5669, - 5683, 5689, 5693, 5701, 5711, 5717, - 5737, 5741, 5743, 5749, 5779, 5783, - 5791, 5801, 5807, 5813, 5821, 5827, - 5839, 5843, 5849, 5851, 5857, 5861, - 5867, 5869, 5879, 5881, 5897, 5903, - 5923, 5927, 5939, 5953, 5981, 5987, - 6007, 6011, 6029, 6037, 6043, 6047, - 6053, 6067, 6073, 6079, 6089, 6091, - 6101, 6113, 6121, 6131, 6133, 6143, - 6151, 6163, 6173, 6197, 6199, 6203, - 6211, 6217, 6221, 6229, 79, 6247, - 6257, 6263, 6269, 6271, 6277, 6287, - 6299, 6301, 6311, 6317, 6323, 6329, - 6337, 6343, 6353, 6359, 6361, 6367, - 6373, 6379, 6389, 6397, 6421, 6427, - 6449, 6451, 6469, 6473, 6481, 6491, - 6521, 6529, 6547, 6551, 6553, 3, - 6563, 6569, 6571, 6577, 6581, 6599, - 6607, 6619, 6637, 6653, 6659, 6661, - 6673, 6679, 6689, 6691, 6701, 6703, - 6709, 6719, 6733, 6737, 6761, 6763, - 6779, 6781, 6791, 6793, 6803, 6823, - 6827, 6829, 6833, 6841, 6857, 19, - 6863, 6869, 6871, 6883, 83, 6899, - 6907, 6911, 6917, 6947, 6949, 6959, - 6961, 6967, 6971, 6977, 6983, 6991, - 6997, 7001, 7013, 7019, 7027, 7039, - 7043, 7057, 7069, 7079, 7103, 7109, - 7121, 7127, 7129, 7151, 7159, 7177, - 7187, 7193, 7207, 7211, 7213, 7219, - 7229, 7237, 7243, 7247, 7253, 7283, - 7297, 7307, 7309, 7321, 7331, 7333, - 7349, 7351, 7369, 7393, 7411, 7417, - 7433, 7451, 7457, 7459, 7477, 7481, - 7487, 7489, 7499, 7507, 7517, 7523, - 7529, 7537, 7541, 7547, 7549, 7559, - 7561, 7573, 7577, 7583, 7589, 7591, - 7603, 7607, 7621, 7639, 7643, 7649, - 7669, 7673, 7681, 7687, 7691, 7699, - 7703, 7717, 7723, 7727, 7741, 7753, - 7757, 7759, 7789, 7793, 7817, 7823, - 7829, 7841, 7853, 7867, 7873, 7877, - 7879, 7883, 7901, 7907, 7919, 89, - 7927, 7933, 7937, 7949, 7951, 7963, - 7993, 8009, 8011, 8017, 8039, 8053, - 8059, 8069, 8081, 8087, 8089, 8093, - 8101, 8111, 8117, 8123, 8147, 8161, - 8167, 8171, 8179, 8191, 2, 8209, - 8219, 8221, 8231, 8233, 8237, 8243, - 8263, 8269, 8273, 8287, 8291, 8293, - 8297, 8311, 8317, 8329, 8353, 8363, - 8369, 8377, 8387, 8389, 8419, 8423, - 8429, 8431, 8443, 8447, 8461, 8467, - 8501, 8513, 8521, 8527, 8537, 8539, - 8543, 8563, 8573, 8581, 8597, 8599, - 8609, 8623, 8627, 8629, 8641, 8647, - 8663, 8669, 8677, 8681, 8689, 8693, - 8699, 8707, 8713, 8719, 8731, 8737, - 8741, 8747, 8753, 8761, 8779, 8783, - 8803, 8807, 8819, 8821, 8831, 8837, - 8839, 8849, 8861, 8863, 8867, 8887, - 8893, 8923, 8929, 8933, 8941, 8951, - 8963, 8969, 8971, 8999, 9001, 9007, - 9011, 9013, 9029, 9041, 9043, 9049, - 9059, 9067, 9091, 9103, 9109, 9127, - 9133, 9137, 9151, 9157, 9161, 9173, - 9181, 9187, 9199, 9203, 9209, 9221, - 9227, 9239, 9241, 9257, 9277, 9281, - 9283, 9293, 9311, 9319, 9323, 9337, - 9341, 9343, 9349, 9371, 9377, 9391, - 9397, 9403, 97, 9413, 9419, 9421, - 9431, 9433, 9437, 9439, 9461, 9463, - 9467, 9473, 9479, 9491, 9497, 9511, - 9521, 9533, 9539, 9547, 9551, 9587, - 9601, 9613, 9619, 9623, 9629, 9631, - 9643, 9649, 9661, 9677, 9679, 9689, - 9697, 9719, 9721, 9733, 9739, 9743, - 9749, 9767, 9769, 9781, 9787, 9791, - 9803, 9811, 9817, 9829, 9833, 9839, - 9851, 9857, 9859, 9871, 9883, 9887, - 9901, 9907, 9923, 9929, 9931, 9941, - 9949, 9967, 9973, 10007, 10009, 10037, - 10039, 10061, 10067, 10069, 10079, 10091, - 10093, 10099, 10103, 10111, 10133, 10139, - 10141, 10151, 10159, 10163, 10169, 10177, - 10181, 10193, 101, 10211, 10223, 10243, - 10247, 10253, 10259, 10267, 10271, 10273, - 10289, 10301, 10303, 10313, 10321, 10331, - 10333, 10337, 10343, 10357, 10369, 10391, - 10399, 10427, 10429, 10433, 10453, 10457, - 10459, 10463, 10477, 10487, 10499, 10501, - 10513, 10529, 10531, 10559, 10567, 10589, - 10597, 10601, 10607, 103, 10613, 10627, - 10631, 10639, 10651, 10657, 10663, 10667, - 10687, 10691, 10709, 10711, 10723, 10729, - 10733, 10739, 10753, 10771, 10781, 10789, - 10799, 10831, 10837, 10847, 10853, 10859, - 10861, 10867, 10883, 10889, 10891, 10903, - 10909, 10937, 10939, 10949, 10957, 10973, - 10979, 10987, 10993, 11003, 11027, 11047, - 11057, 11059, 11069, 11071, 11083, 11087, - 11093, 11113, 11117, 11119, 11131, 11149, - 11159, 11161, 11171, 11173, 11177, 11197, - 11213, 11239, 11243, 11251, 11257, 11261, - 11273, 11279, 11287, 11299, 11311, 11317, - 11321, 11329, 11351, 11353, 11369, 11383, - 11393, 11399, 11411, 11423, 11437, 11443, - 11447, 107, 11467, 11471, 11483, 11489, - 11491, 11497, 11503, 11519, 11527, 11549, - 11551, 11579, 11587, 11593, 11597, 11617, - 11621, 11633, 11657, 11677, 11681, 11689, - 11699, 11701, 11717, 11719, 11731, 11743, - 11777, 11779, 11783, 11789, 11801, 11807, - 11813, 11821, 11827, 11831, 11833, 11839, - 11863, 11867, 109, 11887, 11897, 11903, - 11909, 11923, 11927, 11933, 11939, 11941, - 11953, 11959, 11969, 11971, 11981, 11987, - 12007, 12011, 12037, 12041, 12043, 12049, - 12071, 12073, 12097, 12101, 12107, 12109, - 12113, 12119, 12143, 12149, 12157, 12161, - 12163, 23, 12197, 12203, 12211, 12227, - 12239, 12241, 12251, 12253, 12263, 12269, - 12277, 12281, 12289, 12301, 12323, 12329, - 12343, 12347, 12373, 12377, 12379, 12391, - 12401, 12409, 12413, 12421, 12433, 12437, - 12451, 12457, 12473, 12479, 12487, 12491, - 12497, 12503, 12511, 12517, 12527, 12539, - 12541, 12547, 12553, 12569, 12577, 12583, - 12589, 12601, 12611, 12613, 12619, 12637, - 12641, 12647, 12653, 12659, 12671, 12689, - 12697, 12703, 12713, 12721, 12739, 12743, - 12757, 12763, 113, 12781, 12791, 12799, - 12809, 12821, 12823, 12829, 12841, 12853, - 12889, 12893, 12899, 12907, 12911, 12917, - 12919, 12923, 12941, 12953, 12959, 12967, - 12973, 12979, 12983, 13001, 13003, 13007, - 13009, 13033, 13037, 13043, 13049, 13063, - 13093, 13099, 13103, 13109, 13121, 13127, - 13147, 13151, 13159, 13163, 13171, 13177, - 13183, 13187, 13217, 13219, 13229, 13241, - 13249, 13259, 13267, 13291, 13297, 13309, - 13313, 13327, 13331, 13337, 13339, 13367, - 13381, 13397, 13399, 13411, 13417, 13421, - 13441, 13451, 13457, 13463, 13469, 13477, - 13487, 13499, 13513, 13523, 13537, 13553, - 13567, 13577, 13591, 13597, 13613, 13619, - 13627, 13633, 13649, 13669, 13679, 13681, - 13687, 13691, 13693, 13697, 13709, 13711, - 13721, 13723, 13729, 13751, 13757, 13759, - 13763, 13781, 13789, 13799, 13807, 13829, - 13831, 13841, 13859, 13873, 13877, 13879, - 13883, 13901, 13903, 13907, 13913, 13921, - 13931, 13933, 13963, 13967, 13997, 13999, - 14009, 14011, 14029, 14033, 14051, 14057, - 14071, 14081, 14083, 14087, 14107, 14143, - 14149, 14153, 14159, 14173, 14177, 14197, - 14207, 14221, 14243, 14249, 14251, 14281, - 14293, 14303, 14321, 14323, 14327, 14341, - 14347, 14369, 14387, 14389, 14401, 14407, - 14411, 14419, 14423, 14431, 14437, 14447, - 14449, 14461, 14479, 14489, 14503, 14519, - 14533, 14537, 14543, 14549, 14551, 14557, - 14561, 14563, 14591, 14593, 14621, 14627, - 14629, 14633, 14639, 11, 14653, 14657, - 14669, 14683, 14699, 14713, 14717, 14723, - 14731, 14737, 14741, 14747, 14753, 14759, - 14767, 14771, 14779, 14783, 14797, 14813, - 14821, 14827, 14831, 14843, 14851, 14867, - 14869, 14879, 14887, 14891, 14897, 14923, - 14929, 14939, 14947, 14951, 14957, 14969, - 14983, 15013, 15017, 15031, 15053, 15061, - 15073, 15077, 15083, 15091, 15101, 15107, - 15121, 15131, 15137, 15139, 15149, 15161, - 15173, 15187, 15193, 15199, 15217, 15227, - 15233, 15241, 15259, 15263, 15269, 15271, - 15277, 15287, 15289, 15299, 15307, 15313, - 15319, 15329, 15331, 15349, 15359, 15361, - 15373, 15377, 15383, 15391, 15401, 15413, - 15427, 15439, 15443, 15451, 15461, 15467, - 15473, 15493, 15497, 15511, 15527, 15541, - 15551, 15559, 15569, 15581, 15583, 15601, - 15607, 15619, 5, 15629, 15641, 15643, - 15647, 15649, 15661, 15667, 15671, 15679, - 15683, 15727, 15731, 15733, 15737, 15739, - 15749, 15761, 15767, 15773, 15787, 15791, - 15797, 15803, 15809, 15817, 15823, 15859, - 15877, 15881, 15887, 15889, 15901, 15907, - 15913, 15919, 15923, 15937, 15959, 15971, - 15973, 15991, 16001, 16007, 16033, 16057, - 16061, 16063, 16067, 16069, 16073, 16087, - 16091, 16097, 16103, 16111, 16127, 127, - 16139, 16141, 16183, 16187, 16189, 16193, - 16217, 16223, 16229, 16231, 16249, 16253, - 16267, 16273, 16301, 16319, 16333, 16339, - 16349, 16361, 16363, 16369, 16381, 2, - 16411, 16417, 16421, 16427, 16433, 16447, - 16451, 16453, 16477, 16481, 16487, 16493, - 16519, 16529, 16547, 16553, 16561, 16567, - 16573, 16603, 16607, 16619, 16631, 16633, - 16649, 16651, 16657, 16661, 16673, 16691, - 16693, 16699, 16703, 16729, 16741, 16747, - 16759, 16763, 16787, 7, 16811, 16823, - 16829, 16831, 16843, 16871, 16879, 16883, - 16889, 16901, 16903, 16921, 16927, 16931, - 16937, 16943, 16963, 16979, 16981, 16987, - 16993, 17011, 17021, 17027, 17029, 17033, - 17041, 17047, 17053, 17077, 17093, 17099, - 17107, 17117, 17123, 17137, 17159, 131, - 17167, 17183, 17189, 17191, 17203, 17207, - 17209, 17231, 17239, 17257, 17291, 17293, - 17299, 17317, 17321, 17327, 17333, 17341, - 17351, 17359, 17377, 17383, 17387, 17389, - 17393, 17401, 17417, 17419, 17431, 17443, - 17449, 17467, 17471, 17477, 17483, 17489, - 17491, 17497, 17509, 17519, 17539, 17551, - 17569, 17573, 17579, 17581, 17597, 17599, - 17609, 17623, 17627, 17657, 17659, 17669, - 17681, 17683, 17707, 17713, 17729, 17737, - 17747, 17749, 17761, 17783, 17789, 17791, - 17807, 17827, 17837, 17839, 17851, 17863, - 17881, 17891, 17903, 17909, 17911, 17921, - 17923, 17929, 17939, 17957, 17959, 17971, - 17977, 17981, 17987, 17989, 18013, 18041, - 18043, 18047, 18049, 18059, 18061, 18077, - 18089, 18097, 18119, 18121, 18127, 18131, - 18133, 18143, 18149, 18169, 18181, 18191, - 18199, 18211, 18217, 18223, 18229, 18233, - 18251, 18253, 18257, 18269, 18287, 18289, - 18301, 18307, 18311, 18313, 18329, 18341, - 18353, 18367, 18371, 18379, 18397, 18401, - 18413, 18427, 18433, 18439, 18443, 18451, - 18457, 18461, 18481, 18493, 18503, 18517, - 18521, 18523, 18539, 18541, 18553, 18583, - 18587, 18593, 18617, 18637, 18661, 18671, - 18679, 18691, 18701, 18713, 18719, 18731, - 18743, 18749, 18757, 137, 18773, 18787, - 18793, 18797, 18803, 18839, 18859, 18869, - 18899, 18911, 18913, 18917, 18919, 18947, - 18959, 18973, 18979, 19001, 19009, 19013, - 19031, 19037, 19051, 19069, 19073, 19079, - 19081, 19087, 19121, 19139, 19141, 19157, - 19163, 19181, 19183, 19207, 19211, 19213, - 19219, 19231, 19237, 19249, 19259, 19267, - 19273, 19289, 19301, 19309, 19319, 139, - 19333, 19373, 19379, 19381, 19387, 19391, - 19403, 19417, 19421, 19423, 19427, 19429, - 19433, 19441, 19447, 19457, 19463, 19469, - 19471, 19477, 19483, 19489, 19501, 19507, - 19531, 19541, 19543, 19553, 19559, 19571, - 19577, 19583, 19597, 19603, 19609, 19661, - 19681, 3, 19687, 19697, 19699, 19709, - 19717, 19727, 19739, 19751, 19753, 19759, - 19763, 19777, 19793, 19801, 19813, 19819, - 19841, 19843, 19853, 19861, 19867, 19889, - 19891, 19913, 19919, 19927, 19937, 19949, - 19961, 19963, 19973, 19979, 19991, 19993, - 19997, 20011, 20021, 20023, 20029, 20047, - 20051, 20063, 20071, 20089, 20101, 20107, - 20113, 20117, 20123, 20129, 20143, 20147, - 20149, 20161, 20173, 20177, 20183, 20201, - 20219, 20231, 20233, 20249, 20261, 20269, - 20287, 20297, 20323, 20327, 20333, 20341, - 20347, 20353, 20357, 20359, 20369, 20389, - 20393, 20399, 20407, 20411, 20431, 20441, - 20443, 20477, 20479, 20483, 20507, 20509, - 20521, 20533, 20543, 20549, 20551, 20563, - 20593, 20599, 20611, 20627, 20639, 20641, - 20663, 20681, 20693, 20707, 20717, 20719, - 20731, 20743, 20747, 20749, 20753, 20759, - 20771, 20773, 20789, 20807, 20809, 20849, - 20857, 20873, 20879, 20887, 20897, 20899, - 20903, 20921, 20929, 20939, 20947, 20959, - 20963, 20981, 20983, 21001, 21011, 21013, - 21017, 21019, 21023, 21031, 21059, 21061, - 21067, 21089, 21101, 21107, 21121, 21139, - 21143, 21149, 21157, 21163, 21169, 21179, - 21187, 21191, 21193, 21211, 21221, 21227, - 21247, 21269, 21277, 21283, 21313, 21317, - 21319, 21323, 21341, 21347, 21377, 21379, - 21383, 21391, 21397, 21401, 21407, 21419, - 21433, 21467, 21481, 21487, 21491, 21493, - 21499, 21503, 21517, 21521, 21523, 21529, - 21557, 21559, 21563, 21569, 21577, 21587, - 21589, 21599, 21601, 21611, 21613, 21617, - 21647, 21649, 21661, 21673, 21683, 21701, - 21713, 21727, 21737, 21739, 21751, 21757, - 21767, 21773, 21787, 21799, 21803, 21817, - 21821, 21839, 21841, 21851, 21859, 21863, - 21871, 21881, 21893, 21911, 21929, 21937, - 21943, 21961, 21977, 21991, 21997, 22003, - 22013, 22027, 22031, 22037, 22039, 22051, - 22063, 22067, 22073, 22079, 22091, 22093, - 22109, 22111, 22123, 22129, 22133, 22147, - 22153, 22157, 22159, 22171, 22189, 22193, - 149, 22229, 22247, 22259, 22271, 22273, - 22277, 22279, 22283, 22291, 22303, 22307, - 22343, 22349, 22367, 22369, 22381, 22391, - 22397, 22409, 22433, 22441, 22447, 22453, - 22469, 22481, 22483, 22501, 22511, 22531, - 22541, 22543, 22549, 22567, 22571, 22573, - 22613, 22619, 22621, 22637, 22639, 22643, - 22651, 22669, 22679, 22691, 22697, 22699, - 22709, 22717, 22721, 22727, 22739, 22741, - 22751, 22769, 22777, 22783, 22787, 151, - 22807, 22811, 22817, 22853, 22859, 22861, - 22871, 22877, 22901, 22907, 22921, 22937, - 22943, 22961, 22963, 22973, 22993, 23003, - 23011, 23017, 23021, 23027, 23029, 23039, - 23041, 23053, 23057, 23059, 23063, 23071, - 23081, 23087, 23099, 23117, 23131, 23143, - 23159, 23167, 23173, 23189, 23197, 23201, - 23203, 23209, 23227, 23251, 23269, 23279, - 23291, 23293, 23297, 23311, 23321, 23327, - 23333, 23339, 23357, 23369, 23371, 23399, - 23417, 23431, 23447, 23459, 23473, 23497, - 23509, 23531, 23537, 23539, 23549, 23557, - 23561, 23563, 23567, 23581, 23593, 23599, - 23603, 23609, 23623, 23627, 23629, 23633, - 23663, 23669, 23671, 23677, 23687, 23689, - 23719, 23741, 23743, 23747, 23753, 23761, - 23767, 23773, 23789, 23801, 23813, 23819, - 23827, 23831, 23833, 23857, 23869, 23873, - 23879, 23887, 23893, 23899, 23909, 23911, - 23917, 23929, 23957, 23971, 23977, 23981, - 23993, 24001, 24007, 24019, 24023, 24029, - 24043, 24049, 24061, 24071, 24077, 24083, - 24091, 24097, 24103, 24107, 24109, 24113, - 24121, 24133, 24137, 24151, 24169, 24179, - 24181, 24197, 24203, 24223, 24229, 24239, - 24247, 24251, 24281, 24317, 24329, 24337, - 24359, 24371, 24373, 24379, 29, 24391, - 24407, 24413, 24419, 24421, 24439, 24443, - 24469, 24473, 24481, 24499, 24509, 24517, - 24527, 24533, 24547, 24551, 24571, 24593, - 24611, 24623, 24631, 157, 24659, 24671, - 24677, 24683, 24691, 24697, 24709, 24733, - 24749, 24763, 24767, 24781, 24793, 24799, - 24809, 24821, 24841, 24847, 24851, 24859, - 24877, 24889, 24907, 24917, 24919, 24923, - 24943, 24953, 24967, 24971, 24977, 24979, - 24989, 25013, 25031, 25033, 25037, 25057, - 25073, 25087, 25097, 25111, 25117, 25121, - 25127, 25147, 25153, 25163, 25169, 25171, - 25183, 25189, 25219, 25229, 25237, 25243, - 25247, 25253, 25261, 25301, 25303, 25307, - 25309, 25321, 25339, 25343, 25349, 25357, - 25367, 25373, 25391, 25409, 25411, 25423, - 25439, 25447, 25453, 25457, 25463, 25469, - 25471, 25523, 25537, 25541, 25561, 25577, - 25579, 25583, 25589, 25601, 25603, 25609, - 25621, 25633, 25639, 25643, 25657, 25667, - 25673, 25679, 25693, 25703, 25717, 25733, - 25741, 25747, 25759, 25763, 25771, 25793, - 25799, 25801, 25819, 25841, 25847, 25849, - 25867, 25873, 25889, 25903, 25913, 25919, - 25931, 25933, 25939, 25943, 25951, 25969, - 25981, 25997, 25999, 26003, 26017, 26021, - 26029, 26041, 26053, 26083, 26099, 26107, - 26111, 26113, 26119, 26141, 26153, 26161, - 26171, 26177, 26183, 26189, 26203, 26209, - 26227, 26237, 26249, 26251, 26261, 26263, - 26267, 26293, 26297, 26309, 26317, 26321, - 26339, 26347, 26357, 26371, 26387, 26393, - 26399, 26407, 26417, 26423, 26431, 26437, - 26449, 26459, 26479, 26489, 26497, 26501, - 26513, 26539, 26557, 26561, 163, 26573, - 26591, 26597, 26627, 26633, 26641, 26647, - 26669, 26681, 26683, 26687, 26693, 26699, - 26701, 26711, 26713, 26717, 26723, 26729, - 26731, 26737, 26759, 26777, 26783, 26801, - 26813, 26821, 26833, 26839, 26849, 26861, - 26863, 26879, 26881, 26891, 26893, 26903, - 26921, 26927, 26947, 26951, 26953, 26959, - 26981, 26987, 26993, 27011, 27017, 27031, - 27043, 27059, 27061, 27067, 27073, 27077, - 27091, 27103, 27107, 27109, 27127, 27143, - 27179, 27191, 27197, 27211, 27239, 27241, - 27253, 27259, 27271, 27277, 27281, 27283, - 27299, 27329, 27337, 27361, 27367, 27397, - 27407, 27409, 27427, 27431, 27437, 27449, - 27457, 27479, 27481, 27487, 27509, 27527, - 27529, 27539, 27541, 27551, 27581, 27583, - 27611, 27617, 27631, 27647, 27653, 27673, - 27689, 27691, 27697, 27701, 27733, 27737, - 27739, 27743, 27749, 27751, 27763, 27767, - 27773, 27779, 27791, 27793, 27799, 27803, - 27809, 27817, 27823, 27827, 27847, 27851, - 27883, 167, 27893, 27901, 27917, 27919, - 27941, 27943, 27947, 27953, 27961, 27967, - 27983, 27997, 28001, 28019, 28027, 28031, - 28051, 28057, 28069, 28081, 28087, 28097, - 28099, 28109, 28111, 28123, 28151, 28163, - 28181, 28183, 28201, 28211, 28219, 28229, - 28277, 28279, 28283, 28289, 28297, 28307, - 28309, 28319, 28349, 28351, 28387, 28393, - 28403, 28409, 28411, 28429, 28433, 28439, - 28447, 28463, 28477, 28493, 28499, 28513, - 28517, 28537, 28541, 28547, 28549, 28559, - 13, 28571, 28573, 28579, 28591, 28597, - 28603, 28607, 28619, 28621, 28627, 28631, - 28643, 28649, 28657, 28661, 28663, 28669, - 28687, 28697, 28703, 28711, 28723, 28729, - 28751, 28753, 28759, 28771, 28789, 28793, - 28807, 28813, 28817, 28837, 28843, 28859, - 28867, 28871, 28879, 28901, 28909, 28921, - 28927, 28933, 28949, 28961, 28979, 29009, - 29017, 29021, 29023, 29027, 29033, 29059, - 29063, 29077, 29101, 29123, 29129, 29131, - 29137, 29147, 29153, 29167, 29173, 29179, - 29191, 29201, 29207, 29209, 29221, 29231, - 29243, 29251, 29269, 29287, 29297, 29303, - 29311, 29327, 29333, 29339, 29347, 29363, - 29383, 29387, 29389, 29399, 29401, 29411, - 29423, 29429, 29437, 29443, 29453, 29473, - 29483, 29501, 29527, 29531, 29537, 29567, - 29569, 29573, 29581, 29587, 29599, 29611, - 29629, 29633, 29641, 29663, 29669, 29671, - 29683, 29717, 29723, 29741, 29753, 29759, - 29761, 29789, 31, 29803, 29819, 29833, - 29837, 29851, 29863, 29867, 29873, 29879, - 29881, 29917, 29921, 29927, 173, 29947, - 29959, 29983, 29989, 30011, 30013, 30029, - 30047, 30059, 30071, 30089, 30091, 30097, - 30103, 30109, 30113, 30119, 30133, 30137, - 30139, 30161, 30169, 30181, 30187, 30197, - 30203, 30211, 30223, 30241, 30253, 30259, - 30269, 30271, 30293, 30307, 30313, 30319, - 30323, 30341, 30347, 30367, 30389, 30391, - 30403, 30427, 30431, 30449, 30467, 30469, - 30491, 30493, 30497, 30509, 30517, 30529, - 30539, 30553, 30557, 30559, 30577, 30593, - 30631, 30637, 30643, 30649, 30661, 30671, - 30677, 30689, 30697, 30703, 30707, 30713, - 30727, 30757, 30763, 30773, 30781, 30803, - 30809, 30817, 30829, 30839, 30841, 30851, - 30853, 30859, 30869, 30871, 30881, 30893, - 30911, 30931, 30937, 30941, 30949, 30971, - 30977, 30983, 31013, 31019, 31033, 31039, - 31051, 31063, 31069, 31079, 31081, 31091, - 31121, 31123, 31139, 31147, 31151, 31153, - 31159, 31177, 31181, 31183, 31189, 31193, - 31219, 31223, 31231, 31237, 31247, 31249, - 31253, 31259, 31267, 31271, 31277, 31307, - 31319, 31321, 31327, 31333, 31337, 31357, - 31379, 31387, 31391, 31393, 31397, 31469, - 31477, 31481, 31489, 31511, 31513, 31517, - 31531, 31541, 31543, 31547, 31567, 31573, - 31583, 31601, 31607, 31627, 31643, 31649, - 31657, 31663, 31667, 31687, 31699, 31721, - 31723, 31727, 31729, 31741, 31751, 31769, - 31771, 31793, 31799, 31817, 31847, 31849, - 31859, 31873, 31883, 31891, 31907, 31957, - 31963, 31973, 31981, 31991, 32003, 32009, - 32027, 32029, 179, 32051, 32057, 32059, - 32063, 32069, 32077, 32083, 32089, 32099, - 32117, 32119, 32141, 32143, 32159, 32173, - 32183, 32189, 32191, 32203, 32213, 32233, - 32237, 32251, 32257, 32261, 32297, 32299, - 32303, 32309, 32321, 32323, 32327, 32341, - 32353, 32359, 32363, 32369, 32371, 32377, - 32381, 32401, 32411, 32413, 32423, 32429, - 32441, 32443, 32467, 32479, 32491, 32497, - 32503, 32507, 32531, 32533, 32537, 32561, - 32563, 32569, 32573, 32579, 32587, 32603, - 32609, 32611, 32621, 32633, 32647, 32653, - 32687, 32693, 32707, 32713, 32717, 32719, - 32749, 181, 2, 32771, 32779, 32783, - 32789, 32797, 32801, 32803, 32831, 32833, - 32839, 32843, 32869, 32887, 32909, 32911, - 32917, 32933, 32939, 32941, 32957, 32969, - 32971, 32983, 32987, 32993, 32999, 33013, - 33023, 33029, 33037, 33049, 33053, 33071, - 33073, 33083, 33091, 33107, 33113, 33119, - 33149, 33151, 33161, 33179, 33181, 33191, - 33199, 33203, 33211, 33223, 33247, 33287, - 33289, 33301, 33311, 33317, 33329, 33331, - 33343, 33347, 33349, 33353, 33359, 33377, - 33391, 33403, 33409, 33413, 33427, 33457, - 33461, 33469, 33479, 33487, 33493, 33503, - 33521, 33529, 33533, 33547, 33563, 33569, - 33577, 33581, 33587, 33589, 33599, 33601, - 33613, 33617, 33619, 33623, 33629, 33637, - 33641, 33647, 33679, 33703, 33713, 33721, - 33739, 33749, 33751, 33757, 33767, 33769, - 33773, 33791, 33797, 33809, 33811, 33827, - 33829, 33851, 33857, 33863, 33871, 33889, - 33893, 33911, 33923, 33931, 33937, 33941, - 33961, 33967, 33997, 34019, 34031, 34033, - 34039, 34057, 34061, 34123, 34127, 34129, - 34141, 34147, 34157, 34159, 34171, 34183, - 34211, 34213, 34217, 34231, 34253, 34259, - 34261, 34267, 34273, 34283, 34297, 34301, - 34303, 34313, 34319, 34327, 34337, 34351, - 34361, 34367, 34369, 34381, 34403, 34421, - 34429, 34439, 34457, 34469, 34471, 34483, - 34487, 34499, 34501, 34511, 34513, 34519, - 34537, 34543, 34549, 34583, 34589, 34591, - 34603, 34607, 34613, 34631, 34649, 34651, - 34667, 34673, 34679, 34687, 34693, 34703, - 34721, 34729, 34739, 34747, 34757, 34759, - 34763, 34781, 34807, 34819, 34841, 34843, - 34847, 34849, 34871, 34877, 34883, 34897, - 34913, 34919, 34939, 34949, 34961, 34963, - 34981, 35023, 35027, 35051, 35053, 35059, - 35069, 35081, 35083, 35089, 35099, 35107, - 35111, 35117, 35129, 35141, 35149, 35153, - 35159, 35171, 35201, 35221, 35227, 35251, - 35257, 35267, 35279, 35281, 35291, 35311, - 35317, 35323, 35327, 35339, 35353, 35363, - 35381, 35393, 35401, 35407, 35419, 35423, - 35437, 35447, 35449, 35461, 35491, 35507, - 35509, 35521, 35527, 35531, 35533, 35537, - 35543, 35569, 35573, 35591, 35593, 35597, - 35603, 35617, 35671, 35677, 35729, 35731, - 35747, 35753, 35759, 35771, 35797, 35801, - 35803, 35809, 35831, 35837, 35839, 35851, - 35863, 35869, 35879, 35897, 35899, 35911, - 35923, 35933, 35951, 35963, 35969, 35977, - 35983, 35993, 35999, 36007, 36011, 36013, - 36017, 36037, 36061, 36067, 36073, 36083, - 36097, 36107, 36109, 36131, 36137, 36151, - 36161, 36187, 36191, 36209, 36217, 36229, - 36241, 36251, 36263, 36269, 36277, 36293, - 36299, 36307, 36313, 36319, 36341, 36343, - 36353, 36373, 36383, 36389, 36433, 36451, - 36457, 36467, 36469, 36473, 36479, 191, - 36493, 36497, 36523, 36527, 36529, 36541, - 36551, 36559, 36563, 36571, 36583, 36587, - 36599, 36607, 36629, 36637, 36643, 36653, - 36671, 36677, 36683, 36691, 36697, 36709, - 36713, 36721, 36739, 36749, 36761, 36767, - 36779, 36781, 36787, 36791, 36793, 36809, - 36821, 36833, 36847, 36857, 36871, 36877, - 36887, 36899, 36901, 36913, 36919, 36923, - 36929, 36931, 36943, 36947, 36973, 36979, - 36997, 37003, 37013, 37019, 37021, 37039, - 37049, 37057, 37061, 37087, 37097, 37117, - 37123, 37139, 37159, 37171, 37181, 37189, - 37199, 37201, 37217, 37223, 37243, 193, - 37253, 37273, 37277, 37307, 37309, 37313, - 37321, 37337, 37339, 37357, 37361, 37363, - 37369, 37379, 37397, 37409, 37423, 37441, - 37447, 37463, 37483, 37489, 37493, 37501, - 37507, 37511, 37517, 37529, 37537, 37547, - 37549, 37561, 37567, 37571, 37573, 37579, - 37589, 37591, 37607, 37619, 37633, 37643, - 37649, 37657, 37663, 37691, 37693, 37699, - 37717, 37747, 37781, 37783, 37799, 37811, - 37813, 37831, 37847, 37853, 37861, 37871, - 37879, 37889, 37897, 37907, 37951, 37957, - 37963, 37967, 37987, 37991, 37993, 37997, - 38011, 38039, 38047, 38053, 38069, 38083, - 38113, 38119, 38149, 38153, 38167, 38177, - 38183, 38189, 38197, 38201, 38219, 38231, - 38237, 38239, 38261, 38273, 38281, 38287, - 38299, 38303, 38317, 38321, 38327, 38329, - 38333, 38351, 38371, 38377, 38393, 38431, - 38447, 38449, 38453, 38459, 38461, 38501, - 38543, 38557, 38561, 38567, 38569, 38593, - 38603, 38609, 38611, 38629, 38639, 38651, - 38653, 38669, 38671, 38677, 38693, 38699, - 38707, 38711, 38713, 38723, 38729, 38737, - 38747, 38749, 38767, 38783, 38791, 38803, - 197, 38821, 38833, 38839, 38851, 38861, - 38867, 38873, 38891, 38903, 38917, 38921, - 38923, 38933, 38953, 38959, 38971, 38977, - 38993, 39019, 39023, 39041, 39043, 39047, - 39079, 39089, 39097, 39103, 39107, 39113, - 39119, 39133, 39139, 39157, 39161, 39163, - 39181, 39191, 39199, 39209, 39217, 39227, - 39229, 39233, 39239, 39241, 39251, 39293, - 39301, 39313, 39317, 39323, 39341, 39343, - 39359, 39367, 39371, 39373, 39383, 39397, - 39409, 39419, 39439, 39443, 39451, 39461, - 39499, 39503, 39509, 39511, 39521, 39541, - 39551, 39563, 39569, 39581, 199, 39607, - 39619, 39623, 39631, 39659, 39667, 39671, - 39679, 39703, 39709, 39719, 39727, 39733, - 39749, 39761, 39769, 39779, 39791, 39799, - 39821, 39827, 39829, 39839, 39841, 39847, - 39857, 39863, 39869, 39877, 39883, 39887, - 39901, 39929, 39937, 39953, 39971, 39979, - 39983, 39989, 40009, 40013, 40031, 40037, - 40039, 40063, 40087, 40093, 40099, 40111, - 40123, 40127, 40129, 40151, 40153, 40163, - 40169, 40177, 40189, 40193, 40213, 40231, - 40237, 40241, 40253, 40277, 40283, 40289, - 40343, 40351, 40357, 40361, 40387, 40423, - 40427, 40429, 40433, 40459, 40471, 40483, - 40487, 40493, 40499, 40507, 40519, 40529, - 40531, 40543, 40559, 40577, 40583, 40591, - 40597, 40609, 40627, 40637, 40639, 40693, - 40697, 40699, 40709, 40739, 40751, 40759, - 40763, 40771, 40787, 40801, 40813, 40819, - 40823, 40829, 40841, 40847, 40849, 40853, - 40867, 40879, 40883, 40897, 40903, 40927, - 40933, 40939, 40949, 40961, 40973, 40993, - 41011, 41017, 41023, 41039, 41047, 41051, - 41057, 41077, 41081, 41113, 41117, 41131, - 41141, 41143, 41149, 41161, 41177, 41179, - 41183, 41189, 41201, 41203, 41213, 41221, - 41227, 41231, 41233, 41243, 41257, 41263, - 41269, 41281, 41299, 41333, 41341, 41351, - 41357, 41381, 41387, 41389, 41399, 41411, - 41413, 41443, 41453, 41467, 41479, 41491, - 41507, 41513, 41519, 41521, 41539, 41543, - 41549, 41579, 41593, 41597, 41603, 41609, - 41611, 41617, 41621, 41627, 41641, 41647, - 41651, 41659, 41669, 41681, 41687, 41719, - 41729, 41737, 41759, 41761, 41771, 41777, - 41801, 41809, 41813, 41843, 41849, 41851, - 41863, 41879, 41887, 41893, 41897, 41903, - 41911, 41927, 41941, 41947, 41953, 41957, - 41959, 41969, 41981, 41983, 41999, 42013, - 42017, 42019, 42023, 42043, 42061, 42071, - 42073, 42083, 42089, 42101, 42131, 42139, - 42157, 42169, 42179, 42181, 42187, 42193, - 42197, 42209, 42221, 42223, 42227, 42239, - 42257, 42281, 42283, 42293, 42299, 42307, - 42323, 42331, 42337, 42349, 42359, 42373, - 42379, 42391, 42397, 42403, 42407, 42409, - 42433, 42437, 42443, 42451, 42457, 42461, - 42463, 42467, 42473, 42487, 42491, 42499, - 42509, 42533, 42557, 42569, 42571, 42577, - 42589, 42611, 42641, 42643, 42649, 42667, - 42677, 42683, 42689, 42697, 42701, 42703, - 42709, 42719, 42727, 42737, 42743, 42751, - 42767, 42773, 42787, 42793, 42797, 42821, - 42829, 42839, 42841, 42853, 42859, 42863, - 42899, 42901, 42923, 42929, 42937, 42943, - 42953, 42961, 42967, 42979, 42989, 43003, - 43013, 43019, 43037, 43049, 43051, 43063, - 43067, 43093, 43103, 43117, 43133, 43151, - 43159, 43177, 43189, 43201, 43207, 43223, - 43237, 43261, 43271, 43283, 43291, 43313, - 43319, 43321, 43331, 43391, 43397, 43399, - 43403, 43411, 43427, 43441, 43451, 43457, - 43481, 43487, 43499, 43517, 43541, 43543, - 43573, 43577, 43579, 43591, 43597, 43607, - 43609, 43613, 43627, 43633, 43649, 43651, - 43661, 43669, 43691, 43711, 43717, 43721, - 43753, 43759, 43777, 43781, 43783, 43787, - 43789, 43793, 43801, 43853, 43867, 43889, - 43891, 43913, 43933, 43943, 43951, 43961, - 43963, 43969, 43973, 43987, 43991, 43997, - 44017, 44021, 44027, 44029, 44041, 44053, - 44059, 44071, 44087, 44089, 44101, 44111, - 44119, 44123, 44129, 44131, 44159, 44171, - 44179, 44189, 44201, 44203, 44207, 44221, - 44249, 44257, 44263, 44267, 44269, 44273, - 44279, 44281, 44293, 44351, 44357, 44371, - 44381, 44383, 44389, 44417, 44449, 44453, - 44483, 44491, 44497, 44501, 44507, 44519, - 211, 44531, 44533, 44537, 44543, 44549, - 44563, 44579, 44587, 44617, 44621, 44623, - 44633, 44641, 44647, 44651, 44657, 44683, - 44687, 44699, 44701, 44711, 44729, 44741, - 44753, 44771, 44773, 44777, 44789, 44797, - 44809, 44819, 44839, 44843, 44851, 44867, - 44879, 44887, 44893, 44909, 44917, 44927, - 44939, 44953, 44959, 44963, 44971, 44983, - 44987, 45007, 45013, 45053, 45061, 45077, - 45083, 45119, 45121, 45127, 45131, 45137, - 45139, 45161, 45179, 45181, 45191, 45197, - 45233, 45247, 45259, 45263, 45281, 45289, - 45293, 45307, 45317, 45319, 45329, 45337, - 45341, 45343, 45361, 45377, 45389, 45403, - 45413, 45427, 45433, 45439, 45481, 45491, - 45497, 45503, 45523, 45533, 45541, 45553, - 45557, 45569, 45587, 45589, 45599, 45613, - 45631, 45641, 45659, 45667, 45673, 45677, - 45691, 45697, 45707, 45737, 45751, 45757, - 45763, 45767, 45779, 45817, 45821, 45823, - 45827, 45833, 45841, 45853, 45863, 45869, - 45887, 45893, 45943, 45949, 45953, 45959, - 45971, 45979, 45989, 46021, 46027, 46049, - 46051, 46061, 46073, 46091, 46093, 46099, - 46103, 46133, 46141, 46147, 46153, 46171, - 46181, 46183, 46187, 46199, 46219, 46229, - 46237, 46261, 46271, 46273, 46279, 46301, - 46307, 46309, 46327, 46337, 46349, 46351, - 46381, 46399, 46411, 46439, 46441, 46447, - 46451, 46457, 46471, 46477, 46489, 46499, - 46507, 46511, 46523, 46549, 46559, 46567, - 46573, 46589, 46591, 46601, 46619, 46633, - 46639, 46643, 46649, 46663, 46679, 46681, - 46687, 46691, 46703, 46723, 46727, 46747, - 46751, 46757, 46769, 46771, 46807, 46811, - 46817, 46819, 46829, 46831, 46853, 46861, - 46867, 46877, 46889, 46901, 46919, 46933, - 46957, 46993, 46997, 47017, 47041, 47051, - 47057, 47059, 47087, 47093, 47111, 47119, - 47123, 47129, 47137, 47143, 47147, 47149, - 47161, 47189, 47207, 47221, 47237, 47251, - 47269, 47279, 47287, 47293, 47297, 47303, - 47309, 47317, 47339, 47351, 47353, 47363, - 47381, 47387, 47389, 47407, 47417, 47419, - 47431, 47441, 47459, 47491, 47497, 47501, - 47507, 47513, 47521, 47527, 47533, 47543, - 47563, 47569, 47581, 47591, 47599, 47609, - 47623, 47629, 47639, 47653, 47657, 47659, - 47681, 47699, 47701, 47711, 47713, 47717, - 47737, 47741, 47743, 47777, 47779, 47791, - 47797, 47807, 47809, 47819, 47837, 47843, - 47857, 47869, 47881, 47903, 47911, 47917, - 47933, 47939, 47947, 47951, 47963, 47969, - 47977, 47981, 48017, 48023, 48029, 48049, - 48073, 48079, 48091, 48109, 48119, 48121, - 48131, 48157, 48163, 48179, 48187, 48193, - 48197, 48221, 48239, 48247, 48259, 48271, - 48281, 48299, 48311, 48313, 48337, 48341, - 48353, 48371, 48383, 48397, 48407, 48409, - 48413, 48437, 48449, 48463, 48473, 48479, - 48481, 48487, 48491, 48497, 48523, 48527, - 48533, 48539, 48541, 48563, 48571, 48589, - 48593, 48611, 48619, 48623, 48647, 48649, - 48661, 48673, 48677, 48679, 48731, 48733, - 48751, 48757, 48761, 48767, 48779, 48781, - 48787, 48799, 48809, 48817, 48821, 48823, - 48847, 48857, 48859, 48869, 48871, 48883, - 48889, 48907, 48947, 48953, 48973, 48989, - 48991, 49003, 49009, 49019, 49031, 49033, - 49037, 49043, 49057, 49069, 49081, 49103, - 49109, 49117, 49121, 49123, 49139, 49157, - 49169, 49171, 49177, 49193, 49199, 49201, - 49207, 49211, 49223, 49253, 49261, 49277, - 49279, 49297, 49307, 49331, 49333, 49339, - 49363, 49367, 49369, 49391, 49393, 49409, - 49411, 49417, 49429, 49433, 49451, 49459, - 49463, 49477, 49481, 49499, 49523, 49529, - 49531, 49537, 49547, 49549, 49559, 49597, - 49603, 49613, 49627, 49633, 49639, 49663, - 49667, 49669, 49681, 49697, 49711, 49727, - 223, 49739, 49741, 49747, 49757, 49783, - 49787, 49789, 49801, 49807, 49811, 49823, - 49831, 49843, 49853, 49871, 49877, 49891, - 49919, 49921, 49927, 49937, 49939, 49943, - 49957, 49991, 49993, 49999, 50021, 50023, - 50033, 50047, 50051, 50053, 50069, 50077, - 50087, 50093, 50101, 50111, 50119, 50123, - 50129, 50131, 50147, 50153, 50159, 50177, - 50207, 50221, 50227, 50231, 50261, 50263, - 50273, 50287, 50291, 50311, 50321, 50329, - 50333, 50341, 50359, 50363, 50377, 50383, - 50387, 50411, 50417, 50423, 50441, 50459, - 50461, 50497, 50503, 50513, 50527, 50539, - 50543, 50549, 50551, 50581, 50587, 50591, - 50593, 50599, 50627, 50647, 50651, 37, - 50671, 50683, 50707, 50723, 50741, 50753, - 50767, 50773, 50777, 50789, 50821, 50833, - 50839, 50849, 50857, 50867, 50873, 50891, - 50893, 50909, 50923, 50929, 50951, 50957, - 50969, 50971, 50989, 50993, 51001, 51031, - 51043, 51047, 51059, 51061, 51071, 51109, - 51131, 51133, 51137, 51151, 51157, 51169, - 51193, 51197, 51199, 51203, 51217, 51229, - 51239, 51241, 51257, 51263, 51283, 51287, - 51307, 51329, 51341, 51343, 51347, 51349, - 51361, 51383, 51407, 51413, 51419, 51421, - 51427, 51431, 51437, 51439, 51449, 51461, - 51473, 51479, 51481, 51487, 51503, 51511, - 51517, 51521, 227, 51539, 51551, 51563, - 51577, 51581, 51593, 51599, 51607, 51613, - 51631, 51637, 51647, 51659, 51673, 51679, - 51683, 51691, 51713, 51719, 51721, 51749, - 51767, 51769, 51787, 51797, 51803, 51817, - 51827, 51829, 51839, 51853, 51859, 51869, - 51871, 51893, 51899, 51907, 51913, 51929, - 51941, 51949, 51971, 51973, 51977, 51991, - 52009, 52021, 52027, 52051, 52057, 52067, - 52069, 52081, 52103, 52121, 52127, 52147, - 52153, 52163, 52177, 52181, 52183, 52189, - 52201, 52223, 52237, 52249, 52253, 52259, - 52267, 52289, 52291, 52301, 52313, 52321, - 52361, 52363, 52369, 52379, 52387, 52391, - 52433, 229, 52453, 52457, 52489, 52501, - 52511, 52517, 52529, 52541, 52543, 52553, - 52561, 52567, 52571, 52579, 52583, 52609, - 52627, 52631, 52639, 52667, 52673, 52691, - 52697, 52709, 52711, 52721, 52727, 52733, - 52747, 52757, 52769, 52783, 52807, 52813, - 52817, 52837, 52859, 52861, 52879, 52883, - 52889, 52901, 52903, 52919, 52937, 52951, - 52957, 52963, 52967, 52973, 52981, 52999, - 53003, 53017, 53047, 53051, 53069, 53077, - 53087, 53089, 53093, 53101, 53113, 53117, - 53129, 53147, 53149, 53161, 53171, 53173, - 53189, 53197, 53201, 53231, 53233, 53239, - 53267, 53269, 53279, 53281, 53299, 53309, - 53323, 53327, 53353, 53359, 53377, 53381, - 53401, 53407, 53411, 53419, 53437, 53441, - 53453, 53479, 53503, 53507, 53527, 53549, - 53551, 53569, 53591, 53593, 53597, 53609, - 53611, 53617, 53623, 53629, 53633, 53639, - 53653, 53657, 53681, 53693, 53699, 53717, - 53719, 53731, 53759, 53773, 53777, 53783, - 53791, 53813, 53819, 53831, 53849, 53857, - 53861, 53881, 53887, 53891, 53897, 53899, - 53917, 53923, 53927, 53939, 53951, 53959, - 53987, 53993, 54001, 54011, 54013, 54037, - 54049, 54059, 54083, 54091, 54101, 54121, - 54133, 54139, 54151, 54163, 54167, 54181, - 54193, 54217, 54251, 54269, 54277, 54287, - 233, 54293, 54311, 54319, 54323, 54331, - 54347, 54361, 54367, 54371, 54377, 54401, - 54403, 54409, 54413, 54419, 54421, 54437, - 54443, 54449, 54469, 54493, 54497, 54499, - 54503, 54517, 54521, 54539, 54541, 54547, - 54559, 54563, 54577, 54581, 54583, 54601, - 54617, 54623, 54629, 54631, 54647, 54667, - 54673, 54679, 54709, 54713, 54721, 54727, - 54751, 54767, 54773, 54779, 54787, 54799, - 54829, 54833, 54851, 54869, 54877, 54881, - 54907, 54917, 54919, 54941, 54949, 54959, - 54973, 54979, 54983, 55001, 55009, 55021, - 55049, 55051, 55057, 55061, 55073, 55079, - 55103, 55109, 55117, 55127, 55147, 55163, - 55171, 55201, 55207, 55213, 55217, 55219, - 55229, 55243, 55249, 55259, 55291, 55313, - 55331, 55333, 55337, 55339, 55343, 55351, - 55373, 55381, 55399, 55411, 55439, 55441, - 55457, 55469, 55487, 55501, 55511, 55529, - 55541, 55547, 55579, 55589, 55603, 55609, - 55619, 55621, 55631, 55633, 55639, 55661, - 55663, 55667, 55673, 55681, 55691, 55697, - 55711, 55717, 55721, 55733, 55763, 55787, - 55793, 55799, 55807, 55813, 55817, 55819, - 55823, 55829, 55837, 55843, 55849, 55871, - 55889, 55897, 55901, 55903, 55921, 55927, - 55931, 55933, 55949, 55967, 55987, 55997, - 56003, 56009, 56039, 56041, 56053, 56081, - 56087, 56093, 56099, 56101, 56113, 56123, - 56131, 56149, 56167, 56171, 56179, 56197, - 56207, 56209, 56237, 56239, 56249, 56263, - 56267, 56269, 56299, 56311, 56333, 56359, - 56369, 56377, 56383, 56393, 56401, 56417, - 56431, 56437, 56443, 56453, 56467, 56473, - 56477, 56479, 56489, 56501, 56503, 56509, - 56519, 56527, 56531, 56533, 56543, 56569, - 56591, 56597, 56599, 56611, 56629, 56633, - 56659, 56663, 56671, 56681, 56687, 56701, - 56711, 56713, 56731, 56737, 56747, 56767, - 56773, 56779, 56783, 56807, 56809, 56813, - 56821, 56827, 56843, 56857, 56873, 56891, - 56893, 56897, 56909, 56911, 56921, 56923, - 56929, 56941, 56951, 56957, 56963, 56983, - 56989, 56993, 56999, 57037, 57041, 57047, - 57059, 57073, 57077, 57089, 57097, 57107, - 57119, 239, 57131, 57139, 57143, 57149, - 57163, 57173, 57179, 57191, 57193, 57203, - 57221, 57223, 57241, 57251, 57259, 57269, - 57271, 57283, 57287, 57301, 57329, 57331, - 57347, 57349, 57367, 57373, 57383, 57389, - 57397, 57413, 57427, 57457, 57467, 57487, - 57493, 57503, 57527, 57529, 57557, 57559, - 57571, 57587, 57593, 57601, 57637, 57641, - 57649, 57653, 57667, 57679, 57689, 57697, - 57709, 57713, 57719, 57727, 57731, 57737, - 57751, 57773, 57781, 57787, 57791, 57793, - 57803, 57809, 57829, 57839, 57847, 57853, - 57859, 57881, 57899, 57901, 57917, 57923, - 57943, 57947, 57973, 57977, 57991, 58013, - 58027, 58031, 58043, 58049, 58057, 58061, - 58067, 58073, 241, 58099, 58109, 58111, - 58129, 58147, 58151, 58153, 58169, 58171, - 58189, 58193, 58199, 58207, 58211, 58217, - 58229, 58231, 58237, 58243, 58271, 58309, - 58313, 58321, 58337, 58363, 58367, 58369, - 58379, 58391, 58393, 58403, 58411, 58417, - 58427, 58439, 58441, 58451, 58453, 58477, - 58481, 58511, 58537, 58543, 58549, 58567, - 58573, 58579, 58601, 58603, 58613, 58631, - 58657, 58661, 58679, 58687, 58693, 58699, - 58711, 58727, 58733, 58741, 58757, 58763, - 58771, 58787, 58789, 58831, 58889, 58897, - 58901, 58907, 58909, 58913, 58921, 58937, - 58943, 58963, 58967, 58979, 58991, 58997, - 59009, 59011, 59021, 59023, 59029, 3, - 59051, 59053, 59063, 59069, 59077, 59083, - 59093, 59107, 59113, 59119, 59123, 59141, - 59149, 59159, 59167, 59183, 59197, 59207, - 59209, 59219, 59221, 59233, 59239, 59243, - 59263, 59273, 59281, 59333, 59341, 59351, - 59357, 59359, 59369, 59377, 59387, 59393, - 59399, 59407, 59417, 59419, 59441, 59443, - 59447, 59453, 59467, 59471, 59473, 59497, - 59509, 59513, 59539, 59557, 59561, 59567, - 59581, 59611, 59617, 59621, 59627, 59629, - 59651, 59659, 59663, 59669, 59671, 59693, - 59699, 59707, 59723, 59729, 59743, 59747, - 59753, 59771, 59779, 59791, 59797, 59809, - 59833, 59863, 59879, 59887, 59921, 59929, - 59951, 59957, 59971, 59981, 59999, 60013, - 60017, 60029, 60037, 60041, 60077, 60083, - 60089, 60091, 60101, 60103, 60107, 60127, - 60133, 60139, 60149, 60161, 60167, 60169, - 60209, 60217, 60223, 60251, 60257, 60259, - 60271, 60289, 60293, 60317, 60331, 60337, - 60343, 60353, 60373, 60383, 60397, 60413, - 60427, 60443, 60449, 60457, 60493, 60497, - 60509, 60521, 60527, 60539, 60589, 60601, - 60607, 60611, 60617, 60623, 60631, 60637, - 60647, 60649, 60659, 60661, 60679, 60689, - 60703, 60719, 60727, 60733, 60737, 60757, - 60761, 60763, 60773, 60779, 60793, 60811, - 60821, 60859, 60869, 60887, 60889, 60899, - 60901, 60913, 60917, 60919, 60923, 60937, - 60943, 60953, 60961, 61001, 61007, 61027, - 61031, 61043, 61051, 61057, 61091, 61099, - 61121, 61129, 61141, 61151, 61153, 61169, - 61211, 61223, 61231, 61253, 61261, 61283, - 61291, 61297, 61331, 61333, 61339, 61343, - 61357, 61363, 61379, 61381, 61403, 61409, - 61417, 61441, 61463, 61469, 61471, 61483, - 61487, 61493, 61507, 61511, 61519, 61543, - 61547, 61553, 61559, 61561, 61583, 61603, - 61609, 61613, 61627, 61631, 61637, 61643, - 61651, 61657, 61667, 61673, 61681, 61687, - 61703, 61717, 61723, 61729, 61751, 61757, - 61781, 61813, 61819, 61837, 61843, 61861, - 61871, 61879, 61909, 61927, 61933, 61949, - 61961, 61967, 61979, 61981, 61987, 61991, - 62003, 62011, 62017, 62039, 62047, 62053, - 62057, 62071, 62081, 62099, 62119, 62129, - 62131, 62137, 62141, 62143, 62171, 62189, - 62191, 62201, 62207, 62213, 62219, 62233, - 62273, 62297, 62299, 62303, 62311, 62323, - 62327, 62347, 62351, 62383, 62401, 62417, - 62423, 62459, 62467, 62473, 62477, 62483, - 62497, 62501, 62507, 62533, 62539, 62549, - 62563, 62581, 62591, 62597, 62603, 62617, - 62627, 62633, 62639, 62653, 62659, 62683, - 62687, 62701, 62723, 62731, 62743, 62753, - 62761, 62773, 62791, 62801, 62819, 62827, - 62851, 62861, 62869, 62873, 62897, 62903, - 62921, 62927, 62929, 62939, 62969, 62971, - 62981, 62983, 62987, 62989, 251, 63029, - 63031, 63059, 63067, 63073, 63079, 63097, - 63103, 63113, 63127, 63131, 63149, 63179, - 63197, 63199, 63211, 63241, 63247, 63277, - 63281, 63299, 63311, 63313, 63317, 63331, - 63337, 63347, 63353, 63361, 63367, 63377, - 63389, 63391, 63397, 63409, 63419, 63421, - 63439, 63443, 63463, 63467, 63473, 63487, - 63493, 63499, 63521, 63527, 63533, 63541, - 63559, 63577, 63587, 63589, 63599, 63601, - 63607, 63611, 63617, 63629, 63647, 63649, - 63659, 63667, 63671, 63689, 63691, 63697, - 63703, 63709, 63719, 63727, 63737, 63743, - 63761, 63773, 63781, 63793, 63799, 63803, - 63809, 63823, 63839, 63841, 63853, 63857, - 63863, 63901, 63907, 63913, 63929, 63949, - 63977, 63997, 64007, 64013, 64019, 64033, - 64037, 64063, 64067, 64081, 64091, 64109, - 64123, 64151, 64153, 64157, 64171, 64187, - 64189, 64217, 64223, 64231, 64237, 64271, - 64279, 64283, 64301, 64303, 64319, 64327, - 64333, 64373, 64381, 64399, 64403, 64433, - 64439, 64451, 64453, 64483, 64489, 64499, - 64513, 64553, 64567, 64577, 64579, 64591, - 64601, 64609, 64613, 64621, 64627, 64633, - 64661, 64663, 64667, 64679, 64693, 64709, - 64717, 64747, 64763, 64781, 64783, 64793, - 64811, 64817, 64849, 64853, 64871, 64877, - 64879, 64891, 64901, 64919, 64921, 64927, - 64937, 64951, 64969, 64997, 65003, 65011, - 65027, 65029, 65033, 65053, 65063, 65071, - 65089, 65099, 65101, 65111, 65119, 65123, - 65129, 65141, 65147, 65167, 65171, 65173, - 65179, 65183, 65203, 65213, 65239, 65257, - 65267, 65269, 65287, 65293, 65309, 65323, - 65327, 65353, 65357, 65371, 65381, 65393, - 65407, 65413, 65419, 65423, 65437, 65447, - 65449, 65479, 65497, 65519, 65521, 2, - }; - -const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 2, 3, 4, 5, 7, - 8, 9, 11, 13, 16, 17, - 19, 23, 25, 27, 29, 31, - 32, 37, 41, 43, 47, 49, - 53, 59, 61, 64, 67, 71, - 73, 79, 81, 83, 89, 97, - 101, 103, 107, 109, 113, 121, - 125, 127, 128, 131, 137, 139, - 149, 151, 157, 163, 167, 169, - 173, 179, 181, 191, 193, 197, - 199, 211, 223, 227, 229, 233, - 239, 241, 243, 251, 256, 257, - 263, 269, 271, 277, 281, 283, - 289, 293, 307, 311, 313, 317, - 331, 337, 343, 347, 349, 353, - 359, 361, 367, 373, 379, 383, - 389, 397, 401, 409, 419, 421, - 431, 433, 439, 443, 449, 457, - 461, 463, 467, 479, 487, 491, - 499, 503, 509, 512, 521, 523, - 529, 541, 547, 557, 563, 569, - 571, 577, 587, 593, 599, 601, - 607, 613, 617, 619, 625, 631, - 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, - 719, 727, 729, 733, 739, 743, - 751, 757, 761, 769, 773, 787, - 797, 809, 811, 821, 823, 827, - 829, 839, 841, 853, 857, 859, - 863, 877, 881, 883, 887, 907, - 911, 919, 929, 937, 941, 947, - 953, 961, 967, 971, 977, 983, - 991, 997, 1009, 1013, 1019, 1021, - 1024, 1031, 1033, 1039, 1049, 1051, - 1061, 1063, 1069, 1087, 1091, 1093, - 1097, 1103, 1109, 1117, 1123, 1129, - 1151, 1153, 1163, 1171, 1181, 1187, - 1193, 1201, 1213, 1217, 1223, 1229, - 1231, 1237, 1249, 1259, 1277, 1279, - 1283, 1289, 1291, 1297, 1301, 1303, - 1307, 1319, 1321, 1327, 1331, 1361, - 1367, 1369, 1373, 1381, 1399, 1409, - 1423, 1427, 1429, 1433, 1439, 1447, - 1451, 1453, 1459, 1471, 1481, 1483, - 1487, 1489, 1493, 1499, 1511, 1523, - 1531, 1543, 1549, 1553, 1559, 1567, - 1571, 1579, 1583, 1597, 1601, 1607, - 1609, 1613, 1619, 1621, 1627, 1637, - 1657, 1663, 1667, 1669, 1681, 1693, - 1697, 1699, 1709, 1721, 1723, 1733, - 1741, 1747, 1753, 1759, 1777, 1783, - 1787, 1789, 1801, 1811, 1823, 1831, - 1847, 1849, 1861, 1867, 1871, 1873, - 1877, 1879, 1889, 1901, 1907, 1913, - 1931, 1933, 1949, 1951, 1973, 1979, - 1987, 1993, 1997, 1999, 2003, 2011, - 2017, 2027, 2029, 2039, 2048, 2053, - 2063, 2069, 2081, 2083, 2087, 2089, - 2099, 2111, 2113, 2129, 2131, 2137, - 2141, 2143, 2153, 2161, 2179, 2187, - 2197, 2203, 2207, 2209, 2213, 2221, - 2237, 2239, 2243, 2251, 2267, 2269, - 2273, 2281, 2287, 2293, 2297, 2309, - 2311, 2333, 2339, 2341, 2347, 2351, - 2357, 2371, 2377, 2381, 2383, 2389, - 2393, 2399, 2401, 2411, 2417, 2423, - 2437, 2441, 2447, 2459, 2467, 2473, - 2477, 2503, 2521, 2531, 2539, 2543, - 2549, 2551, 2557, 2579, 2591, 2593, - 2609, 2617, 2621, 2633, 2647, 2657, - 2659, 2663, 2671, 2677, 2683, 2687, - 2689, 2693, 2699, 2707, 2711, 2713, - 2719, 2729, 2731, 2741, 2749, 2753, - 2767, 2777, 2789, 2791, 2797, 2801, - 2803, 2809, 2819, 2833, 2837, 2843, - 2851, 2857, 2861, 2879, 2887, 2897, - 2903, 2909, 2917, 2927, 2939, 2953, - 2957, 2963, 2969, 2971, 2999, 3001, - 3011, 3019, 3023, 3037, 3041, 3049, - 3061, 3067, 3079, 3083, 3089, 3109, - 3119, 3121, 3125, 3137, 3163, 3167, - 3169, 3181, 3187, 3191, 3203, 3209, - 3217, 3221, 3229, 3251, 3253, 3257, - 3259, 3271, 3299, 3301, 3307, 3313, - 3319, 3323, 3329, 3331, 3343, 3347, - 3359, 3361, 3371, 3373, 3389, 3391, - 3407, 3413, 3433, 3449, 3457, 3461, - 3463, 3467, 3469, 3481, 3491, 3499, - 3511, 3517, 3527, 3529, 3533, 3539, - 3541, 3547, 3557, 3559, 3571, 3581, - 3583, 3593, 3607, 3613, 3617, 3623, - 3631, 3637, 3643, 3659, 3671, 3673, - 3677, 3691, 3697, 3701, 3709, 3719, - 3721, 3727, 3733, 3739, 3761, 3767, - 3769, 3779, 3793, 3797, 3803, 3821, - 3823, 3833, 3847, 3851, 3853, 3863, - 3877, 3881, 3889, 3907, 3911, 3917, - 3919, 3923, 3929, 3931, 3943, 3947, - 3967, 3989, 4001, 4003, 4007, 4013, - 4019, 4021, 4027, 4049, 4051, 4057, - 4073, 4079, 4091, 4093, 4096, 4099, - 4111, 4127, 4129, 4133, 4139, 4153, - 4157, 4159, 4177, 4201, 4211, 4217, - 4219, 4229, 4231, 4241, 4243, 4253, - 4259, 4261, 4271, 4273, 4283, 4289, - 4297, 4327, 4337, 4339, 4349, 4357, - 4363, 4373, 4391, 4397, 4409, 4421, - 4423, 4441, 4447, 4451, 4457, 4463, - 4481, 4483, 4489, 4493, 4507, 4513, - 4517, 4519, 4523, 4547, 4549, 4561, - 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4639, 4643, 4649, 4651, 4657, - 4663, 4673, 4679, 4691, 4703, 4721, - 4723, 4729, 4733, 4751, 4759, 4783, - 4787, 4789, 4793, 4799, 4801, 4813, - 4817, 4831, 4861, 4871, 4877, 4889, - 4903, 4909, 4913, 4919, 4931, 4933, - 4937, 4943, 4951, 4957, 4967, 4969, - 4973, 4987, 4993, 4999, 5003, 5009, - 5011, 5021, 5023, 5039, 5041, 5051, - 5059, 5077, 5081, 5087, 5099, 5101, - 5107, 5113, 5119, 5147, 5153, 5167, - 5171, 5179, 5189, 5197, 5209, 5227, - 5231, 5233, 5237, 5261, 5273, 5279, - 5281, 5297, 5303, 5309, 5323, 5329, - 5333, 5347, 5351, 5381, 5387, 5393, - 5399, 5407, 5413, 5417, 5419, 5431, - 5437, 5441, 5443, 5449, 5471, 5477, - 5479, 5483, 5501, 5503, 5507, 5519, - 5521, 5527, 5531, 5557, 5563, 5569, - 5573, 5581, 5591, 5623, 5639, 5641, - 5647, 5651, 5653, 5657, 5659, 5669, - 5683, 5689, 5693, 5701, 5711, 5717, - 5737, 5741, 5743, 5749, 5779, 5783, - 5791, 5801, 5807, 5813, 5821, 5827, - 5839, 5843, 5849, 5851, 5857, 5861, - 5867, 5869, 5879, 5881, 5897, 5903, - 5923, 5927, 5939, 5953, 5981, 5987, - 6007, 6011, 6029, 6037, 6043, 6047, - 6053, 6067, 6073, 6079, 6089, 6091, - 6101, 6113, 6121, 6131, 6133, 6143, - 6151, 6163, 6173, 6197, 6199, 6203, - 6211, 6217, 6221, 6229, 6241, 6247, - 6257, 6263, 6269, 6271, 6277, 6287, - 6299, 6301, 6311, 6317, 6323, 6329, - 6337, 6343, 6353, 6359, 6361, 6367, - 6373, 6379, 6389, 6397, 6421, 6427, - 6449, 6451, 6469, 6473, 6481, 6491, - 6521, 6529, 6547, 6551, 6553, 6561, - 6563, 6569, 6571, 6577, 6581, 6599, - 6607, 6619, 6637, 6653, 6659, 6661, - 6673, 6679, 6689, 6691, 6701, 6703, - 6709, 6719, 6733, 6737, 6761, 6763, - 6779, 6781, 6791, 6793, 6803, 6823, - 6827, 6829, 6833, 6841, 6857, 6859, - 6863, 6869, 6871, 6883, 6889, 6899, - 6907, 6911, 6917, 6947, 6949, 6959, - 6961, 6967, 6971, 6977, 6983, 6991, - 6997, 7001, 7013, 7019, 7027, 7039, - 7043, 7057, 7069, 7079, 7103, 7109, - 7121, 7127, 7129, 7151, 7159, 7177, - 7187, 7193, 7207, 7211, 7213, 7219, - 7229, 7237, 7243, 7247, 7253, 7283, - 7297, 7307, 7309, 7321, 7331, 7333, - 7349, 7351, 7369, 7393, 7411, 7417, - 7433, 7451, 7457, 7459, 7477, 7481, - 7487, 7489, 7499, 7507, 7517, 7523, - 7529, 7537, 7541, 7547, 7549, 7559, - 7561, 7573, 7577, 7583, 7589, 7591, - 7603, 7607, 7621, 7639, 7643, 7649, - 7669, 7673, 7681, 7687, 7691, 7699, - 7703, 7717, 7723, 7727, 7741, 7753, - 7757, 7759, 7789, 7793, 7817, 7823, - 7829, 7841, 7853, 7867, 7873, 7877, - 7879, 7883, 7901, 7907, 7919, 7921, - 7927, 7933, 7937, 7949, 7951, 7963, - 7993, 8009, 8011, 8017, 8039, 8053, - 8059, 8069, 8081, 8087, 8089, 8093, - 8101, 8111, 8117, 8123, 8147, 8161, - 8167, 8171, 8179, 8191, 8192, 8209, - 8219, 8221, 8231, 8233, 8237, 8243, - 8263, 8269, 8273, 8287, 8291, 8293, - 8297, 8311, 8317, 8329, 8353, 8363, - 8369, 8377, 8387, 8389, 8419, 8423, - 8429, 8431, 8443, 8447, 8461, 8467, - 8501, 8513, 8521, 8527, 8537, 8539, - 8543, 8563, 8573, 8581, 8597, 8599, - 8609, 8623, 8627, 8629, 8641, 8647, - 8663, 8669, 8677, 8681, 8689, 8693, - 8699, 8707, 8713, 8719, 8731, 8737, - 8741, 8747, 8753, 8761, 8779, 8783, - 8803, 8807, 8819, 8821, 8831, 8837, - 8839, 8849, 8861, 8863, 8867, 8887, - 8893, 8923, 8929, 8933, 8941, 8951, - 8963, 8969, 8971, 8999, 9001, 9007, - 9011, 9013, 9029, 9041, 9043, 9049, - 9059, 9067, 9091, 9103, 9109, 9127, - 9133, 9137, 9151, 9157, 9161, 9173, - 9181, 9187, 9199, 9203, 9209, 9221, - 9227, 9239, 9241, 9257, 9277, 9281, - 9283, 9293, 9311, 9319, 9323, 9337, - 9341, 9343, 9349, 9371, 9377, 9391, - 9397, 9403, 9409, 9413, 9419, 9421, - 9431, 9433, 9437, 9439, 9461, 9463, - 9467, 9473, 9479, 9491, 9497, 9511, - 9521, 9533, 9539, 9547, 9551, 9587, - 9601, 9613, 9619, 9623, 9629, 9631, - 9643, 9649, 9661, 9677, 9679, 9689, - 9697, 9719, 9721, 9733, 9739, 9743, - 9749, 9767, 9769, 9781, 9787, 9791, - 9803, 9811, 9817, 9829, 9833, 9839, - 9851, 9857, 9859, 9871, 9883, 9887, - 9901, 9907, 9923, 9929, 9931, 9941, - 9949, 9967, 9973, 10007, 10009, 10037, - 10039, 10061, 10067, 10069, 10079, 10091, - 10093, 10099, 10103, 10111, 10133, 10139, - 10141, 10151, 10159, 10163, 10169, 10177, - 10181, 10193, 10201, 10211, 10223, 10243, - 10247, 10253, 10259, 10267, 10271, 10273, - 10289, 10301, 10303, 10313, 10321, 10331, - 10333, 10337, 10343, 10357, 10369, 10391, - 10399, 10427, 10429, 10433, 10453, 10457, - 10459, 10463, 10477, 10487, 10499, 10501, - 10513, 10529, 10531, 10559, 10567, 10589, - 10597, 10601, 10607, 10609, 10613, 10627, - 10631, 10639, 10651, 10657, 10663, 10667, - 10687, 10691, 10709, 10711, 10723, 10729, - 10733, 10739, 10753, 10771, 10781, 10789, - 10799, 10831, 10837, 10847, 10853, 10859, - 10861, 10867, 10883, 10889, 10891, 10903, - 10909, 10937, 10939, 10949, 10957, 10973, - 10979, 10987, 10993, 11003, 11027, 11047, - 11057, 11059, 11069, 11071, 11083, 11087, - 11093, 11113, 11117, 11119, 11131, 11149, - 11159, 11161, 11171, 11173, 11177, 11197, - 11213, 11239, 11243, 11251, 11257, 11261, - 11273, 11279, 11287, 11299, 11311, 11317, - 11321, 11329, 11351, 11353, 11369, 11383, - 11393, 11399, 11411, 11423, 11437, 11443, - 11447, 11449, 11467, 11471, 11483, 11489, - 11491, 11497, 11503, 11519, 11527, 11549, - 11551, 11579, 11587, 11593, 11597, 11617, - 11621, 11633, 11657, 11677, 11681, 11689, - 11699, 11701, 11717, 11719, 11731, 11743, - 11777, 11779, 11783, 11789, 11801, 11807, - 11813, 11821, 11827, 11831, 11833, 11839, - 11863, 11867, 11881, 11887, 11897, 11903, - 11909, 11923, 11927, 11933, 11939, 11941, - 11953, 11959, 11969, 11971, 11981, 11987, - 12007, 12011, 12037, 12041, 12043, 12049, - 12071, 12073, 12097, 12101, 12107, 12109, - 12113, 12119, 12143, 12149, 12157, 12161, - 12163, 12167, 12197, 12203, 12211, 12227, - 12239, 12241, 12251, 12253, 12263, 12269, - 12277, 12281, 12289, 12301, 12323, 12329, - 12343, 12347, 12373, 12377, 12379, 12391, - 12401, 12409, 12413, 12421, 12433, 12437, - 12451, 12457, 12473, 12479, 12487, 12491, - 12497, 12503, 12511, 12517, 12527, 12539, - 12541, 12547, 12553, 12569, 12577, 12583, - 12589, 12601, 12611, 12613, 12619, 12637, - 12641, 12647, 12653, 12659, 12671, 12689, - 12697, 12703, 12713, 12721, 12739, 12743, - 12757, 12763, 12769, 12781, 12791, 12799, - 12809, 12821, 12823, 12829, 12841, 12853, - 12889, 12893, 12899, 12907, 12911, 12917, - 12919, 12923, 12941, 12953, 12959, 12967, - 12973, 12979, 12983, 13001, 13003, 13007, - 13009, 13033, 13037, 13043, 13049, 13063, - 13093, 13099, 13103, 13109, 13121, 13127, - 13147, 13151, 13159, 13163, 13171, 13177, - 13183, 13187, 13217, 13219, 13229, 13241, - 13249, 13259, 13267, 13291, 13297, 13309, - 13313, 13327, 13331, 13337, 13339, 13367, - 13381, 13397, 13399, 13411, 13417, 13421, - 13441, 13451, 13457, 13463, 13469, 13477, - 13487, 13499, 13513, 13523, 13537, 13553, - 13567, 13577, 13591, 13597, 13613, 13619, - 13627, 13633, 13649, 13669, 13679, 13681, - 13687, 13691, 13693, 13697, 13709, 13711, - 13721, 13723, 13729, 13751, 13757, 13759, - 13763, 13781, 13789, 13799, 13807, 13829, - 13831, 13841, 13859, 13873, 13877, 13879, - 13883, 13901, 13903, 13907, 13913, 13921, - 13931, 13933, 13963, 13967, 13997, 13999, - 14009, 14011, 14029, 14033, 14051, 14057, - 14071, 14081, 14083, 14087, 14107, 14143, - 14149, 14153, 14159, 14173, 14177, 14197, - 14207, 14221, 14243, 14249, 14251, 14281, - 14293, 14303, 14321, 14323, 14327, 14341, - 14347, 14369, 14387, 14389, 14401, 14407, - 14411, 14419, 14423, 14431, 14437, 14447, - 14449, 14461, 14479, 14489, 14503, 14519, - 14533, 14537, 14543, 14549, 14551, 14557, - 14561, 14563, 14591, 14593, 14621, 14627, - 14629, 14633, 14639, 14641, 14653, 14657, - 14669, 14683, 14699, 14713, 14717, 14723, - 14731, 14737, 14741, 14747, 14753, 14759, - 14767, 14771, 14779, 14783, 14797, 14813, - 14821, 14827, 14831, 14843, 14851, 14867, - 14869, 14879, 14887, 14891, 14897, 14923, - 14929, 14939, 14947, 14951, 14957, 14969, - 14983, 15013, 15017, 15031, 15053, 15061, - 15073, 15077, 15083, 15091, 15101, 15107, - 15121, 15131, 15137, 15139, 15149, 15161, - 15173, 15187, 15193, 15199, 15217, 15227, - 15233, 15241, 15259, 15263, 15269, 15271, - 15277, 15287, 15289, 15299, 15307, 15313, - 15319, 15329, 15331, 15349, 15359, 15361, - 15373, 15377, 15383, 15391, 15401, 15413, - 15427, 15439, 15443, 15451, 15461, 15467, - 15473, 15493, 15497, 15511, 15527, 15541, - 15551, 15559, 15569, 15581, 15583, 15601, - 15607, 15619, 15625, 15629, 15641, 15643, - 15647, 15649, 15661, 15667, 15671, 15679, - 15683, 15727, 15731, 15733, 15737, 15739, - 15749, 15761, 15767, 15773, 15787, 15791, - 15797, 15803, 15809, 15817, 15823, 15859, - 15877, 15881, 15887, 15889, 15901, 15907, - 15913, 15919, 15923, 15937, 15959, 15971, - 15973, 15991, 16001, 16007, 16033, 16057, - 16061, 16063, 16067, 16069, 16073, 16087, - 16091, 16097, 16103, 16111, 16127, 16129, - 16139, 16141, 16183, 16187, 16189, 16193, - 16217, 16223, 16229, 16231, 16249, 16253, - 16267, 16273, 16301, 16319, 16333, 16339, - 16349, 16361, 16363, 16369, 16381, 16384, - 16411, 16417, 16421, 16427, 16433, 16447, - 16451, 16453, 16477, 16481, 16487, 16493, - 16519, 16529, 16547, 16553, 16561, 16567, - 16573, 16603, 16607, 16619, 16631, 16633, - 16649, 16651, 16657, 16661, 16673, 16691, - 16693, 16699, 16703, 16729, 16741, 16747, - 16759, 16763, 16787, 16807, 16811, 16823, - 16829, 16831, 16843, 16871, 16879, 16883, - 16889, 16901, 16903, 16921, 16927, 16931, - 16937, 16943, 16963, 16979, 16981, 16987, - 16993, 17011, 17021, 17027, 17029, 17033, - 17041, 17047, 17053, 17077, 17093, 17099, - 17107, 17117, 17123, 17137, 17159, 17161, - 17167, 17183, 17189, 17191, 17203, 17207, - 17209, 17231, 17239, 17257, 17291, 17293, - 17299, 17317, 17321, 17327, 17333, 17341, - 17351, 17359, 17377, 17383, 17387, 17389, - 17393, 17401, 17417, 17419, 17431, 17443, - 17449, 17467, 17471, 17477, 17483, 17489, - 17491, 17497, 17509, 17519, 17539, 17551, - 17569, 17573, 17579, 17581, 17597, 17599, - 17609, 17623, 17627, 17657, 17659, 17669, - 17681, 17683, 17707, 17713, 17729, 17737, - 17747, 17749, 17761, 17783, 17789, 17791, - 17807, 17827, 17837, 17839, 17851, 17863, - 17881, 17891, 17903, 17909, 17911, 17921, - 17923, 17929, 17939, 17957, 17959, 17971, - 17977, 17981, 17987, 17989, 18013, 18041, - 18043, 18047, 18049, 18059, 18061, 18077, - 18089, 18097, 18119, 18121, 18127, 18131, - 18133, 18143, 18149, 18169, 18181, 18191, - 18199, 18211, 18217, 18223, 18229, 18233, - 18251, 18253, 18257, 18269, 18287, 18289, - 18301, 18307, 18311, 18313, 18329, 18341, - 18353, 18367, 18371, 18379, 18397, 18401, - 18413, 18427, 18433, 18439, 18443, 18451, - 18457, 18461, 18481, 18493, 18503, 18517, - 18521, 18523, 18539, 18541, 18553, 18583, - 18587, 18593, 18617, 18637, 18661, 18671, - 18679, 18691, 18701, 18713, 18719, 18731, - 18743, 18749, 18757, 18769, 18773, 18787, - 18793, 18797, 18803, 18839, 18859, 18869, - 18899, 18911, 18913, 18917, 18919, 18947, - 18959, 18973, 18979, 19001, 19009, 19013, - 19031, 19037, 19051, 19069, 19073, 19079, - 19081, 19087, 19121, 19139, 19141, 19157, - 19163, 19181, 19183, 19207, 19211, 19213, - 19219, 19231, 19237, 19249, 19259, 19267, - 19273, 19289, 19301, 19309, 19319, 19321, - 19333, 19373, 19379, 19381, 19387, 19391, - 19403, 19417, 19421, 19423, 19427, 19429, - 19433, 19441, 19447, 19457, 19463, 19469, - 19471, 19477, 19483, 19489, 19501, 19507, - 19531, 19541, 19543, 19553, 19559, 19571, - 19577, 19583, 19597, 19603, 19609, 19661, - 19681, 19683, 19687, 19697, 19699, 19709, - 19717, 19727, 19739, 19751, 19753, 19759, - 19763, 19777, 19793, 19801, 19813, 19819, - 19841, 19843, 19853, 19861, 19867, 19889, - 19891, 19913, 19919, 19927, 19937, 19949, - 19961, 19963, 19973, 19979, 19991, 19993, - 19997, 20011, 20021, 20023, 20029, 20047, - 20051, 20063, 20071, 20089, 20101, 20107, - 20113, 20117, 20123, 20129, 20143, 20147, - 20149, 20161, 20173, 20177, 20183, 20201, - 20219, 20231, 20233, 20249, 20261, 20269, - 20287, 20297, 20323, 20327, 20333, 20341, - 20347, 20353, 20357, 20359, 20369, 20389, - 20393, 20399, 20407, 20411, 20431, 20441, - 20443, 20477, 20479, 20483, 20507, 20509, - 20521, 20533, 20543, 20549, 20551, 20563, - 20593, 20599, 20611, 20627, 20639, 20641, - 20663, 20681, 20693, 20707, 20717, 20719, - 20731, 20743, 20747, 20749, 20753, 20759, - 20771, 20773, 20789, 20807, 20809, 20849, - 20857, 20873, 20879, 20887, 20897, 20899, - 20903, 20921, 20929, 20939, 20947, 20959, - 20963, 20981, 20983, 21001, 21011, 21013, - 21017, 21019, 21023, 21031, 21059, 21061, - 21067, 21089, 21101, 21107, 21121, 21139, - 21143, 21149, 21157, 21163, 21169, 21179, - 21187, 21191, 21193, 21211, 21221, 21227, - 21247, 21269, 21277, 21283, 21313, 21317, - 21319, 21323, 21341, 21347, 21377, 21379, - 21383, 21391, 21397, 21401, 21407, 21419, - 21433, 21467, 21481, 21487, 21491, 21493, - 21499, 21503, 21517, 21521, 21523, 21529, - 21557, 21559, 21563, 21569, 21577, 21587, - 21589, 21599, 21601, 21611, 21613, 21617, - 21647, 21649, 21661, 21673, 21683, 21701, - 21713, 21727, 21737, 21739, 21751, 21757, - 21767, 21773, 21787, 21799, 21803, 21817, - 21821, 21839, 21841, 21851, 21859, 21863, - 21871, 21881, 21893, 21911, 21929, 21937, - 21943, 21961, 21977, 21991, 21997, 22003, - 22013, 22027, 22031, 22037, 22039, 22051, - 22063, 22067, 22073, 22079, 22091, 22093, - 22109, 22111, 22123, 22129, 22133, 22147, - 22153, 22157, 22159, 22171, 22189, 22193, - 22201, 22229, 22247, 22259, 22271, 22273, - 22277, 22279, 22283, 22291, 22303, 22307, - 22343, 22349, 22367, 22369, 22381, 22391, - 22397, 22409, 22433, 22441, 22447, 22453, - 22469, 22481, 22483, 22501, 22511, 22531, - 22541, 22543, 22549, 22567, 22571, 22573, - 22613, 22619, 22621, 22637, 22639, 22643, - 22651, 22669, 22679, 22691, 22697, 22699, - 22709, 22717, 22721, 22727, 22739, 22741, - 22751, 22769, 22777, 22783, 22787, 22801, - 22807, 22811, 22817, 22853, 22859, 22861, - 22871, 22877, 22901, 22907, 22921, 22937, - 22943, 22961, 22963, 22973, 22993, 23003, - 23011, 23017, 23021, 23027, 23029, 23039, - 23041, 23053, 23057, 23059, 23063, 23071, - 23081, 23087, 23099, 23117, 23131, 23143, - 23159, 23167, 23173, 23189, 23197, 23201, - 23203, 23209, 23227, 23251, 23269, 23279, - 23291, 23293, 23297, 23311, 23321, 23327, - 23333, 23339, 23357, 23369, 23371, 23399, - 23417, 23431, 23447, 23459, 23473, 23497, - 23509, 23531, 23537, 23539, 23549, 23557, - 23561, 23563, 23567, 23581, 23593, 23599, - 23603, 23609, 23623, 23627, 23629, 23633, - 23663, 23669, 23671, 23677, 23687, 23689, - 23719, 23741, 23743, 23747, 23753, 23761, - 23767, 23773, 23789, 23801, 23813, 23819, - 23827, 23831, 23833, 23857, 23869, 23873, - 23879, 23887, 23893, 23899, 23909, 23911, - 23917, 23929, 23957, 23971, 23977, 23981, - 23993, 24001, 24007, 24019, 24023, 24029, - 24043, 24049, 24061, 24071, 24077, 24083, - 24091, 24097, 24103, 24107, 24109, 24113, - 24121, 24133, 24137, 24151, 24169, 24179, - 24181, 24197, 24203, 24223, 24229, 24239, - 24247, 24251, 24281, 24317, 24329, 24337, - 24359, 24371, 24373, 24379, 24389, 24391, - 24407, 24413, 24419, 24421, 24439, 24443, - 24469, 24473, 24481, 24499, 24509, 24517, - 24527, 24533, 24547, 24551, 24571, 24593, - 24611, 24623, 24631, 24649, 24659, 24671, - 24677, 24683, 24691, 24697, 24709, 24733, - 24749, 24763, 24767, 24781, 24793, 24799, - 24809, 24821, 24841, 24847, 24851, 24859, - 24877, 24889, 24907, 24917, 24919, 24923, - 24943, 24953, 24967, 24971, 24977, 24979, - 24989, 25013, 25031, 25033, 25037, 25057, - 25073, 25087, 25097, 25111, 25117, 25121, - 25127, 25147, 25153, 25163, 25169, 25171, - 25183, 25189, 25219, 25229, 25237, 25243, - 25247, 25253, 25261, 25301, 25303, 25307, - 25309, 25321, 25339, 25343, 25349, 25357, - 25367, 25373, 25391, 25409, 25411, 25423, - 25439, 25447, 25453, 25457, 25463, 25469, - 25471, 25523, 25537, 25541, 25561, 25577, - 25579, 25583, 25589, 25601, 25603, 25609, - 25621, 25633, 25639, 25643, 25657, 25667, - 25673, 25679, 25693, 25703, 25717, 25733, - 25741, 25747, 25759, 25763, 25771, 25793, - 25799, 25801, 25819, 25841, 25847, 25849, - 25867, 25873, 25889, 25903, 25913, 25919, - 25931, 25933, 25939, 25943, 25951, 25969, - 25981, 25997, 25999, 26003, 26017, 26021, - 26029, 26041, 26053, 26083, 26099, 26107, - 26111, 26113, 26119, 26141, 26153, 26161, - 26171, 26177, 26183, 26189, 26203, 26209, - 26227, 26237, 26249, 26251, 26261, 26263, - 26267, 26293, 26297, 26309, 26317, 26321, - 26339, 26347, 26357, 26371, 26387, 26393, - 26399, 26407, 26417, 26423, 26431, 26437, - 26449, 26459, 26479, 26489, 26497, 26501, - 26513, 26539, 26557, 26561, 26569, 26573, - 26591, 26597, 26627, 26633, 26641, 26647, - 26669, 26681, 26683, 26687, 26693, 26699, - 26701, 26711, 26713, 26717, 26723, 26729, - 26731, 26737, 26759, 26777, 26783, 26801, - 26813, 26821, 26833, 26839, 26849, 26861, - 26863, 26879, 26881, 26891, 26893, 26903, - 26921, 26927, 26947, 26951, 26953, 26959, - 26981, 26987, 26993, 27011, 27017, 27031, - 27043, 27059, 27061, 27067, 27073, 27077, - 27091, 27103, 27107, 27109, 27127, 27143, - 27179, 27191, 27197, 27211, 27239, 27241, - 27253, 27259, 27271, 27277, 27281, 27283, - 27299, 27329, 27337, 27361, 27367, 27397, - 27407, 27409, 27427, 27431, 27437, 27449, - 27457, 27479, 27481, 27487, 27509, 27527, - 27529, 27539, 27541, 27551, 27581, 27583, - 27611, 27617, 27631, 27647, 27653, 27673, - 27689, 27691, 27697, 27701, 27733, 27737, - 27739, 27743, 27749, 27751, 27763, 27767, - 27773, 27779, 27791, 27793, 27799, 27803, - 27809, 27817, 27823, 27827, 27847, 27851, - 27883, 27889, 27893, 27901, 27917, 27919, - 27941, 27943, 27947, 27953, 27961, 27967, - 27983, 27997, 28001, 28019, 28027, 28031, - 28051, 28057, 28069, 28081, 28087, 28097, - 28099, 28109, 28111, 28123, 28151, 28163, - 28181, 28183, 28201, 28211, 28219, 28229, - 28277, 28279, 28283, 28289, 28297, 28307, - 28309, 28319, 28349, 28351, 28387, 28393, - 28403, 28409, 28411, 28429, 28433, 28439, - 28447, 28463, 28477, 28493, 28499, 28513, - 28517, 28537, 28541, 28547, 28549, 28559, - 28561, 28571, 28573, 28579, 28591, 28597, - 28603, 28607, 28619, 28621, 28627, 28631, - 28643, 28649, 28657, 28661, 28663, 28669, - 28687, 28697, 28703, 28711, 28723, 28729, - 28751, 28753, 28759, 28771, 28789, 28793, - 28807, 28813, 28817, 28837, 28843, 28859, - 28867, 28871, 28879, 28901, 28909, 28921, - 28927, 28933, 28949, 28961, 28979, 29009, - 29017, 29021, 29023, 29027, 29033, 29059, - 29063, 29077, 29101, 29123, 29129, 29131, - 29137, 29147, 29153, 29167, 29173, 29179, - 29191, 29201, 29207, 29209, 29221, 29231, - 29243, 29251, 29269, 29287, 29297, 29303, - 29311, 29327, 29333, 29339, 29347, 29363, - 29383, 29387, 29389, 29399, 29401, 29411, - 29423, 29429, 29437, 29443, 29453, 29473, - 29483, 29501, 29527, 29531, 29537, 29567, - 29569, 29573, 29581, 29587, 29599, 29611, - 29629, 29633, 29641, 29663, 29669, 29671, - 29683, 29717, 29723, 29741, 29753, 29759, - 29761, 29789, 29791, 29803, 29819, 29833, - 29837, 29851, 29863, 29867, 29873, 29879, - 29881, 29917, 29921, 29927, 29929, 29947, - 29959, 29983, 29989, 30011, 30013, 30029, - 30047, 30059, 30071, 30089, 30091, 30097, - 30103, 30109, 30113, 30119, 30133, 30137, - 30139, 30161, 30169, 30181, 30187, 30197, - 30203, 30211, 30223, 30241, 30253, 30259, - 30269, 30271, 30293, 30307, 30313, 30319, - 30323, 30341, 30347, 30367, 30389, 30391, - 30403, 30427, 30431, 30449, 30467, 30469, - 30491, 30493, 30497, 30509, 30517, 30529, - 30539, 30553, 30557, 30559, 30577, 30593, - 30631, 30637, 30643, 30649, 30661, 30671, - 30677, 30689, 30697, 30703, 30707, 30713, - 30727, 30757, 30763, 30773, 30781, 30803, - 30809, 30817, 30829, 30839, 30841, 30851, - 30853, 30859, 30869, 30871, 30881, 30893, - 30911, 30931, 30937, 30941, 30949, 30971, - 30977, 30983, 31013, 31019, 31033, 31039, - 31051, 31063, 31069, 31079, 31081, 31091, - 31121, 31123, 31139, 31147, 31151, 31153, - 31159, 31177, 31181, 31183, 31189, 31193, - 31219, 31223, 31231, 31237, 31247, 31249, - 31253, 31259, 31267, 31271, 31277, 31307, - 31319, 31321, 31327, 31333, 31337, 31357, - 31379, 31387, 31391, 31393, 31397, 31469, - 31477, 31481, 31489, 31511, 31513, 31517, - 31531, 31541, 31543, 31547, 31567, 31573, - 31583, 31601, 31607, 31627, 31643, 31649, - 31657, 31663, 31667, 31687, 31699, 31721, - 31723, 31727, 31729, 31741, 31751, 31769, - 31771, 31793, 31799, 31817, 31847, 31849, - 31859, 31873, 31883, 31891, 31907, 31957, - 31963, 31973, 31981, 31991, 32003, 32009, - 32027, 32029, 32041, 32051, 32057, 32059, - 32063, 32069, 32077, 32083, 32089, 32099, - 32117, 32119, 32141, 32143, 32159, 32173, - 32183, 32189, 32191, 32203, 32213, 32233, - 32237, 32251, 32257, 32261, 32297, 32299, - 32303, 32309, 32321, 32323, 32327, 32341, - 32353, 32359, 32363, 32369, 32371, 32377, - 32381, 32401, 32411, 32413, 32423, 32429, - 32441, 32443, 32467, 32479, 32491, 32497, - 32503, 32507, 32531, 32533, 32537, 32561, - 32563, 32569, 32573, 32579, 32587, 32603, - 32609, 32611, 32621, 32633, 32647, 32653, - 32687, 32693, 32707, 32713, 32717, 32719, - 32749, 32761, 32768, 32771, 32779, 32783, - 32789, 32797, 32801, 32803, 32831, 32833, - 32839, 32843, 32869, 32887, 32909, 32911, - 32917, 32933, 32939, 32941, 32957, 32969, - 32971, 32983, 32987, 32993, 32999, 33013, - 33023, 33029, 33037, 33049, 33053, 33071, - 33073, 33083, 33091, 33107, 33113, 33119, - 33149, 33151, 33161, 33179, 33181, 33191, - 33199, 33203, 33211, 33223, 33247, 33287, - 33289, 33301, 33311, 33317, 33329, 33331, - 33343, 33347, 33349, 33353, 33359, 33377, - 33391, 33403, 33409, 33413, 33427, 33457, - 33461, 33469, 33479, 33487, 33493, 33503, - 33521, 33529, 33533, 33547, 33563, 33569, - 33577, 33581, 33587, 33589, 33599, 33601, - 33613, 33617, 33619, 33623, 33629, 33637, - 33641, 33647, 33679, 33703, 33713, 33721, - 33739, 33749, 33751, 33757, 33767, 33769, - 33773, 33791, 33797, 33809, 33811, 33827, - 33829, 33851, 33857, 33863, 33871, 33889, - 33893, 33911, 33923, 33931, 33937, 33941, - 33961, 33967, 33997, 34019, 34031, 34033, - 34039, 34057, 34061, 34123, 34127, 34129, - 34141, 34147, 34157, 34159, 34171, 34183, - 34211, 34213, 34217, 34231, 34253, 34259, - 34261, 34267, 34273, 34283, 34297, 34301, - 34303, 34313, 34319, 34327, 34337, 34351, - 34361, 34367, 34369, 34381, 34403, 34421, - 34429, 34439, 34457, 34469, 34471, 34483, - 34487, 34499, 34501, 34511, 34513, 34519, - 34537, 34543, 34549, 34583, 34589, 34591, - 34603, 34607, 34613, 34631, 34649, 34651, - 34667, 34673, 34679, 34687, 34693, 34703, - 34721, 34729, 34739, 34747, 34757, 34759, - 34763, 34781, 34807, 34819, 34841, 34843, - 34847, 34849, 34871, 34877, 34883, 34897, - 34913, 34919, 34939, 34949, 34961, 34963, - 34981, 35023, 35027, 35051, 35053, 35059, - 35069, 35081, 35083, 35089, 35099, 35107, - 35111, 35117, 35129, 35141, 35149, 35153, - 35159, 35171, 35201, 35221, 35227, 35251, - 35257, 35267, 35279, 35281, 35291, 35311, - 35317, 35323, 35327, 35339, 35353, 35363, - 35381, 35393, 35401, 35407, 35419, 35423, - 35437, 35447, 35449, 35461, 35491, 35507, - 35509, 35521, 35527, 35531, 35533, 35537, - 35543, 35569, 35573, 35591, 35593, 35597, - 35603, 35617, 35671, 35677, 35729, 35731, - 35747, 35753, 35759, 35771, 35797, 35801, - 35803, 35809, 35831, 35837, 35839, 35851, - 35863, 35869, 35879, 35897, 35899, 35911, - 35923, 35933, 35951, 35963, 35969, 35977, - 35983, 35993, 35999, 36007, 36011, 36013, - 36017, 36037, 36061, 36067, 36073, 36083, - 36097, 36107, 36109, 36131, 36137, 36151, - 36161, 36187, 36191, 36209, 36217, 36229, - 36241, 36251, 36263, 36269, 36277, 36293, - 36299, 36307, 36313, 36319, 36341, 36343, - 36353, 36373, 36383, 36389, 36433, 36451, - 36457, 36467, 36469, 36473, 36479, 36481, - 36493, 36497, 36523, 36527, 36529, 36541, - 36551, 36559, 36563, 36571, 36583, 36587, - 36599, 36607, 36629, 36637, 36643, 36653, - 36671, 36677, 36683, 36691, 36697, 36709, - 36713, 36721, 36739, 36749, 36761, 36767, - 36779, 36781, 36787, 36791, 36793, 36809, - 36821, 36833, 36847, 36857, 36871, 36877, - 36887, 36899, 36901, 36913, 36919, 36923, - 36929, 36931, 36943, 36947, 36973, 36979, - 36997, 37003, 37013, 37019, 37021, 37039, - 37049, 37057, 37061, 37087, 37097, 37117, - 37123, 37139, 37159, 37171, 37181, 37189, - 37199, 37201, 37217, 37223, 37243, 37249, - 37253, 37273, 37277, 37307, 37309, 37313, - 37321, 37337, 37339, 37357, 37361, 37363, - 37369, 37379, 37397, 37409, 37423, 37441, - 37447, 37463, 37483, 37489, 37493, 37501, - 37507, 37511, 37517, 37529, 37537, 37547, - 37549, 37561, 37567, 37571, 37573, 37579, - 37589, 37591, 37607, 37619, 37633, 37643, - 37649, 37657, 37663, 37691, 37693, 37699, - 37717, 37747, 37781, 37783, 37799, 37811, - 37813, 37831, 37847, 37853, 37861, 37871, - 37879, 37889, 37897, 37907, 37951, 37957, - 37963, 37967, 37987, 37991, 37993, 37997, - 38011, 38039, 38047, 38053, 38069, 38083, - 38113, 38119, 38149, 38153, 38167, 38177, - 38183, 38189, 38197, 38201, 38219, 38231, - 38237, 38239, 38261, 38273, 38281, 38287, - 38299, 38303, 38317, 38321, 38327, 38329, - 38333, 38351, 38371, 38377, 38393, 38431, - 38447, 38449, 38453, 38459, 38461, 38501, - 38543, 38557, 38561, 38567, 38569, 38593, - 38603, 38609, 38611, 38629, 38639, 38651, - 38653, 38669, 38671, 38677, 38693, 38699, - 38707, 38711, 38713, 38723, 38729, 38737, - 38747, 38749, 38767, 38783, 38791, 38803, - 38809, 38821, 38833, 38839, 38851, 38861, - 38867, 38873, 38891, 38903, 38917, 38921, - 38923, 38933, 38953, 38959, 38971, 38977, - 38993, 39019, 39023, 39041, 39043, 39047, - 39079, 39089, 39097, 39103, 39107, 39113, - 39119, 39133, 39139, 39157, 39161, 39163, - 39181, 39191, 39199, 39209, 39217, 39227, - 39229, 39233, 39239, 39241, 39251, 39293, - 39301, 39313, 39317, 39323, 39341, 39343, - 39359, 39367, 39371, 39373, 39383, 39397, - 39409, 39419, 39439, 39443, 39451, 39461, - 39499, 39503, 39509, 39511, 39521, 39541, - 39551, 39563, 39569, 39581, 39601, 39607, - 39619, 39623, 39631, 39659, 39667, 39671, - 39679, 39703, 39709, 39719, 39727, 39733, - 39749, 39761, 39769, 39779, 39791, 39799, - 39821, 39827, 39829, 39839, 39841, 39847, - 39857, 39863, 39869, 39877, 39883, 39887, - 39901, 39929, 39937, 39953, 39971, 39979, - 39983, 39989, 40009, 40013, 40031, 40037, - 40039, 40063, 40087, 40093, 40099, 40111, - 40123, 40127, 40129, 40151, 40153, 40163, - 40169, 40177, 40189, 40193, 40213, 40231, - 40237, 40241, 40253, 40277, 40283, 40289, - 40343, 40351, 40357, 40361, 40387, 40423, - 40427, 40429, 40433, 40459, 40471, 40483, - 40487, 40493, 40499, 40507, 40519, 40529, - 40531, 40543, 40559, 40577, 40583, 40591, - 40597, 40609, 40627, 40637, 40639, 40693, - 40697, 40699, 40709, 40739, 40751, 40759, - 40763, 40771, 40787, 40801, 40813, 40819, - 40823, 40829, 40841, 40847, 40849, 40853, - 40867, 40879, 40883, 40897, 40903, 40927, - 40933, 40939, 40949, 40961, 40973, 40993, - 41011, 41017, 41023, 41039, 41047, 41051, - 41057, 41077, 41081, 41113, 41117, 41131, - 41141, 41143, 41149, 41161, 41177, 41179, - 41183, 41189, 41201, 41203, 41213, 41221, - 41227, 41231, 41233, 41243, 41257, 41263, - 41269, 41281, 41299, 41333, 41341, 41351, - 41357, 41381, 41387, 41389, 41399, 41411, - 41413, 41443, 41453, 41467, 41479, 41491, - 41507, 41513, 41519, 41521, 41539, 41543, - 41549, 41579, 41593, 41597, 41603, 41609, - 41611, 41617, 41621, 41627, 41641, 41647, - 41651, 41659, 41669, 41681, 41687, 41719, - 41729, 41737, 41759, 41761, 41771, 41777, - 41801, 41809, 41813, 41843, 41849, 41851, - 41863, 41879, 41887, 41893, 41897, 41903, - 41911, 41927, 41941, 41947, 41953, 41957, - 41959, 41969, 41981, 41983, 41999, 42013, - 42017, 42019, 42023, 42043, 42061, 42071, - 42073, 42083, 42089, 42101, 42131, 42139, - 42157, 42169, 42179, 42181, 42187, 42193, - 42197, 42209, 42221, 42223, 42227, 42239, - 42257, 42281, 42283, 42293, 42299, 42307, - 42323, 42331, 42337, 42349, 42359, 42373, - 42379, 42391, 42397, 42403, 42407, 42409, - 42433, 42437, 42443, 42451, 42457, 42461, - 42463, 42467, 42473, 42487, 42491, 42499, - 42509, 42533, 42557, 42569, 42571, 42577, - 42589, 42611, 42641, 42643, 42649, 42667, - 42677, 42683, 42689, 42697, 42701, 42703, - 42709, 42719, 42727, 42737, 42743, 42751, - 42767, 42773, 42787, 42793, 42797, 42821, - 42829, 42839, 42841, 42853, 42859, 42863, - 42899, 42901, 42923, 42929, 42937, 42943, - 42953, 42961, 42967, 42979, 42989, 43003, - 43013, 43019, 43037, 43049, 43051, 43063, - 43067, 43093, 43103, 43117, 43133, 43151, - 43159, 43177, 43189, 43201, 43207, 43223, - 43237, 43261, 43271, 43283, 43291, 43313, - 43319, 43321, 43331, 43391, 43397, 43399, - 43403, 43411, 43427, 43441, 43451, 43457, - 43481, 43487, 43499, 43517, 43541, 43543, - 43573, 43577, 43579, 43591, 43597, 43607, - 43609, 43613, 43627, 43633, 43649, 43651, - 43661, 43669, 43691, 43711, 43717, 43721, - 43753, 43759, 43777, 43781, 43783, 43787, - 43789, 43793, 43801, 43853, 43867, 43889, - 43891, 43913, 43933, 43943, 43951, 43961, - 43963, 43969, 43973, 43987, 43991, 43997, - 44017, 44021, 44027, 44029, 44041, 44053, - 44059, 44071, 44087, 44089, 44101, 44111, - 44119, 44123, 44129, 44131, 44159, 44171, - 44179, 44189, 44201, 44203, 44207, 44221, - 44249, 44257, 44263, 44267, 44269, 44273, - 44279, 44281, 44293, 44351, 44357, 44371, - 44381, 44383, 44389, 44417, 44449, 44453, - 44483, 44491, 44497, 44501, 44507, 44519, - 44521, 44531, 44533, 44537, 44543, 44549, - 44563, 44579, 44587, 44617, 44621, 44623, - 44633, 44641, 44647, 44651, 44657, 44683, - 44687, 44699, 44701, 44711, 44729, 44741, - 44753, 44771, 44773, 44777, 44789, 44797, - 44809, 44819, 44839, 44843, 44851, 44867, - 44879, 44887, 44893, 44909, 44917, 44927, - 44939, 44953, 44959, 44963, 44971, 44983, - 44987, 45007, 45013, 45053, 45061, 45077, - 45083, 45119, 45121, 45127, 45131, 45137, - 45139, 45161, 45179, 45181, 45191, 45197, - 45233, 45247, 45259, 45263, 45281, 45289, - 45293, 45307, 45317, 45319, 45329, 45337, - 45341, 45343, 45361, 45377, 45389, 45403, - 45413, 45427, 45433, 45439, 45481, 45491, - 45497, 45503, 45523, 45533, 45541, 45553, - 45557, 45569, 45587, 45589, 45599, 45613, - 45631, 45641, 45659, 45667, 45673, 45677, - 45691, 45697, 45707, 45737, 45751, 45757, - 45763, 45767, 45779, 45817, 45821, 45823, - 45827, 45833, 45841, 45853, 45863, 45869, - 45887, 45893, 45943, 45949, 45953, 45959, - 45971, 45979, 45989, 46021, 46027, 46049, - 46051, 46061, 46073, 46091, 46093, 46099, - 46103, 46133, 46141, 46147, 46153, 46171, - 46181, 46183, 46187, 46199, 46219, 46229, - 46237, 46261, 46271, 46273, 46279, 46301, - 46307, 46309, 46327, 46337, 46349, 46351, - 46381, 46399, 46411, 46439, 46441, 46447, - 46451, 46457, 46471, 46477, 46489, 46499, - 46507, 46511, 46523, 46549, 46559, 46567, - 46573, 46589, 46591, 46601, 46619, 46633, - 46639, 46643, 46649, 46663, 46679, 46681, - 46687, 46691, 46703, 46723, 46727, 46747, - 46751, 46757, 46769, 46771, 46807, 46811, - 46817, 46819, 46829, 46831, 46853, 46861, - 46867, 46877, 46889, 46901, 46919, 46933, - 46957, 46993, 46997, 47017, 47041, 47051, - 47057, 47059, 47087, 47093, 47111, 47119, - 47123, 47129, 47137, 47143, 47147, 47149, - 47161, 47189, 47207, 47221, 47237, 47251, - 47269, 47279, 47287, 47293, 47297, 47303, - 47309, 47317, 47339, 47351, 47353, 47363, - 47381, 47387, 47389, 47407, 47417, 47419, - 47431, 47441, 47459, 47491, 47497, 47501, - 47507, 47513, 47521, 47527, 47533, 47543, - 47563, 47569, 47581, 47591, 47599, 47609, - 47623, 47629, 47639, 47653, 47657, 47659, - 47681, 47699, 47701, 47711, 47713, 47717, - 47737, 47741, 47743, 47777, 47779, 47791, - 47797, 47807, 47809, 47819, 47837, 47843, - 47857, 47869, 47881, 47903, 47911, 47917, - 47933, 47939, 47947, 47951, 47963, 47969, - 47977, 47981, 48017, 48023, 48029, 48049, - 48073, 48079, 48091, 48109, 48119, 48121, - 48131, 48157, 48163, 48179, 48187, 48193, - 48197, 48221, 48239, 48247, 48259, 48271, - 48281, 48299, 48311, 48313, 48337, 48341, - 48353, 48371, 48383, 48397, 48407, 48409, - 48413, 48437, 48449, 48463, 48473, 48479, - 48481, 48487, 48491, 48497, 48523, 48527, - 48533, 48539, 48541, 48563, 48571, 48589, - 48593, 48611, 48619, 48623, 48647, 48649, - 48661, 48673, 48677, 48679, 48731, 48733, - 48751, 48757, 48761, 48767, 48779, 48781, - 48787, 48799, 48809, 48817, 48821, 48823, - 48847, 48857, 48859, 48869, 48871, 48883, - 48889, 48907, 48947, 48953, 48973, 48989, - 48991, 49003, 49009, 49019, 49031, 49033, - 49037, 49043, 49057, 49069, 49081, 49103, - 49109, 49117, 49121, 49123, 49139, 49157, - 49169, 49171, 49177, 49193, 49199, 49201, - 49207, 49211, 49223, 49253, 49261, 49277, - 49279, 49297, 49307, 49331, 49333, 49339, - 49363, 49367, 49369, 49391, 49393, 49409, - 49411, 49417, 49429, 49433, 49451, 49459, - 49463, 49477, 49481, 49499, 49523, 49529, - 49531, 49537, 49547, 49549, 49559, 49597, - 49603, 49613, 49627, 49633, 49639, 49663, - 49667, 49669, 49681, 49697, 49711, 49727, - 49729, 49739, 49741, 49747, 49757, 49783, - 49787, 49789, 49801, 49807, 49811, 49823, - 49831, 49843, 49853, 49871, 49877, 49891, - 49919, 49921, 49927, 49937, 49939, 49943, - 49957, 49991, 49993, 49999, 50021, 50023, - 50033, 50047, 50051, 50053, 50069, 50077, - 50087, 50093, 50101, 50111, 50119, 50123, - 50129, 50131, 50147, 50153, 50159, 50177, - 50207, 50221, 50227, 50231, 50261, 50263, - 50273, 50287, 50291, 50311, 50321, 50329, - 50333, 50341, 50359, 50363, 50377, 50383, - 50387, 50411, 50417, 50423, 50441, 50459, - 50461, 50497, 50503, 50513, 50527, 50539, - 50543, 50549, 50551, 50581, 50587, 50591, - 50593, 50599, 50627, 50647, 50651, 50653, - 50671, 50683, 50707, 50723, 50741, 50753, - 50767, 50773, 50777, 50789, 50821, 50833, - 50839, 50849, 50857, 50867, 50873, 50891, - 50893, 50909, 50923, 50929, 50951, 50957, - 50969, 50971, 50989, 50993, 51001, 51031, - 51043, 51047, 51059, 51061, 51071, 51109, - 51131, 51133, 51137, 51151, 51157, 51169, - 51193, 51197, 51199, 51203, 51217, 51229, - 51239, 51241, 51257, 51263, 51283, 51287, - 51307, 51329, 51341, 51343, 51347, 51349, - 51361, 51383, 51407, 51413, 51419, 51421, - 51427, 51431, 51437, 51439, 51449, 51461, - 51473, 51479, 51481, 51487, 51503, 51511, - 51517, 51521, 51529, 51539, 51551, 51563, - 51577, 51581, 51593, 51599, 51607, 51613, - 51631, 51637, 51647, 51659, 51673, 51679, - 51683, 51691, 51713, 51719, 51721, 51749, - 51767, 51769, 51787, 51797, 51803, 51817, - 51827, 51829, 51839, 51853, 51859, 51869, - 51871, 51893, 51899, 51907, 51913, 51929, - 51941, 51949, 51971, 51973, 51977, 51991, - 52009, 52021, 52027, 52051, 52057, 52067, - 52069, 52081, 52103, 52121, 52127, 52147, - 52153, 52163, 52177, 52181, 52183, 52189, - 52201, 52223, 52237, 52249, 52253, 52259, - 52267, 52289, 52291, 52301, 52313, 52321, - 52361, 52363, 52369, 52379, 52387, 52391, - 52433, 52441, 52453, 52457, 52489, 52501, - 52511, 52517, 52529, 52541, 52543, 52553, - 52561, 52567, 52571, 52579, 52583, 52609, - 52627, 52631, 52639, 52667, 52673, 52691, - 52697, 52709, 52711, 52721, 52727, 52733, - 52747, 52757, 52769, 52783, 52807, 52813, - 52817, 52837, 52859, 52861, 52879, 52883, - 52889, 52901, 52903, 52919, 52937, 52951, - 52957, 52963, 52967, 52973, 52981, 52999, - 53003, 53017, 53047, 53051, 53069, 53077, - 53087, 53089, 53093, 53101, 53113, 53117, - 53129, 53147, 53149, 53161, 53171, 53173, - 53189, 53197, 53201, 53231, 53233, 53239, - 53267, 53269, 53279, 53281, 53299, 53309, - 53323, 53327, 53353, 53359, 53377, 53381, - 53401, 53407, 53411, 53419, 53437, 53441, - 53453, 53479, 53503, 53507, 53527, 53549, - 53551, 53569, 53591, 53593, 53597, 53609, - 53611, 53617, 53623, 53629, 53633, 53639, - 53653, 53657, 53681, 53693, 53699, 53717, - 53719, 53731, 53759, 53773, 53777, 53783, - 53791, 53813, 53819, 53831, 53849, 53857, - 53861, 53881, 53887, 53891, 53897, 53899, - 53917, 53923, 53927, 53939, 53951, 53959, - 53987, 53993, 54001, 54011, 54013, 54037, - 54049, 54059, 54083, 54091, 54101, 54121, - 54133, 54139, 54151, 54163, 54167, 54181, - 54193, 54217, 54251, 54269, 54277, 54287, - 54289, 54293, 54311, 54319, 54323, 54331, - 54347, 54361, 54367, 54371, 54377, 54401, - 54403, 54409, 54413, 54419, 54421, 54437, - 54443, 54449, 54469, 54493, 54497, 54499, - 54503, 54517, 54521, 54539, 54541, 54547, - 54559, 54563, 54577, 54581, 54583, 54601, - 54617, 54623, 54629, 54631, 54647, 54667, - 54673, 54679, 54709, 54713, 54721, 54727, - 54751, 54767, 54773, 54779, 54787, 54799, - 54829, 54833, 54851, 54869, 54877, 54881, - 54907, 54917, 54919, 54941, 54949, 54959, - 54973, 54979, 54983, 55001, 55009, 55021, - 55049, 55051, 55057, 55061, 55073, 55079, - 55103, 55109, 55117, 55127, 55147, 55163, - 55171, 55201, 55207, 55213, 55217, 55219, - 55229, 55243, 55249, 55259, 55291, 55313, - 55331, 55333, 55337, 55339, 55343, 55351, - 55373, 55381, 55399, 55411, 55439, 55441, - 55457, 55469, 55487, 55501, 55511, 55529, - 55541, 55547, 55579, 55589, 55603, 55609, - 55619, 55621, 55631, 55633, 55639, 55661, - 55663, 55667, 55673, 55681, 55691, 55697, - 55711, 55717, 55721, 55733, 55763, 55787, - 55793, 55799, 55807, 55813, 55817, 55819, - 55823, 55829, 55837, 55843, 55849, 55871, - 55889, 55897, 55901, 55903, 55921, 55927, - 55931, 55933, 55949, 55967, 55987, 55997, - 56003, 56009, 56039, 56041, 56053, 56081, - 56087, 56093, 56099, 56101, 56113, 56123, - 56131, 56149, 56167, 56171, 56179, 56197, - 56207, 56209, 56237, 56239, 56249, 56263, - 56267, 56269, 56299, 56311, 56333, 56359, - 56369, 56377, 56383, 56393, 56401, 56417, - 56431, 56437, 56443, 56453, 56467, 56473, - 56477, 56479, 56489, 56501, 56503, 56509, - 56519, 56527, 56531, 56533, 56543, 56569, - 56591, 56597, 56599, 56611, 56629, 56633, - 56659, 56663, 56671, 56681, 56687, 56701, - 56711, 56713, 56731, 56737, 56747, 56767, - 56773, 56779, 56783, 56807, 56809, 56813, - 56821, 56827, 56843, 56857, 56873, 56891, - 56893, 56897, 56909, 56911, 56921, 56923, - 56929, 56941, 56951, 56957, 56963, 56983, - 56989, 56993, 56999, 57037, 57041, 57047, - 57059, 57073, 57077, 57089, 57097, 57107, - 57119, 57121, 57131, 57139, 57143, 57149, - 57163, 57173, 57179, 57191, 57193, 57203, - 57221, 57223, 57241, 57251, 57259, 57269, - 57271, 57283, 57287, 57301, 57329, 57331, - 57347, 57349, 57367, 57373, 57383, 57389, - 57397, 57413, 57427, 57457, 57467, 57487, - 57493, 57503, 57527, 57529, 57557, 57559, - 57571, 57587, 57593, 57601, 57637, 57641, - 57649, 57653, 57667, 57679, 57689, 57697, - 57709, 57713, 57719, 57727, 57731, 57737, - 57751, 57773, 57781, 57787, 57791, 57793, - 57803, 57809, 57829, 57839, 57847, 57853, - 57859, 57881, 57899, 57901, 57917, 57923, - 57943, 57947, 57973, 57977, 57991, 58013, - 58027, 58031, 58043, 58049, 58057, 58061, - 58067, 58073, 58081, 58099, 58109, 58111, - 58129, 58147, 58151, 58153, 58169, 58171, - 58189, 58193, 58199, 58207, 58211, 58217, - 58229, 58231, 58237, 58243, 58271, 58309, - 58313, 58321, 58337, 58363, 58367, 58369, - 58379, 58391, 58393, 58403, 58411, 58417, - 58427, 58439, 58441, 58451, 58453, 58477, - 58481, 58511, 58537, 58543, 58549, 58567, - 58573, 58579, 58601, 58603, 58613, 58631, - 58657, 58661, 58679, 58687, 58693, 58699, - 58711, 58727, 58733, 58741, 58757, 58763, - 58771, 58787, 58789, 58831, 58889, 58897, - 58901, 58907, 58909, 58913, 58921, 58937, - 58943, 58963, 58967, 58979, 58991, 58997, - 59009, 59011, 59021, 59023, 59029, 59049, - 59051, 59053, 59063, 59069, 59077, 59083, - 59093, 59107, 59113, 59119, 59123, 59141, - 59149, 59159, 59167, 59183, 59197, 59207, - 59209, 59219, 59221, 59233, 59239, 59243, - 59263, 59273, 59281, 59333, 59341, 59351, - 59357, 59359, 59369, 59377, 59387, 59393, - 59399, 59407, 59417, 59419, 59441, 59443, - 59447, 59453, 59467, 59471, 59473, 59497, - 59509, 59513, 59539, 59557, 59561, 59567, - 59581, 59611, 59617, 59621, 59627, 59629, - 59651, 59659, 59663, 59669, 59671, 59693, - 59699, 59707, 59723, 59729, 59743, 59747, - 59753, 59771, 59779, 59791, 59797, 59809, - 59833, 59863, 59879, 59887, 59921, 59929, - 59951, 59957, 59971, 59981, 59999, 60013, - 60017, 60029, 60037, 60041, 60077, 60083, - 60089, 60091, 60101, 60103, 60107, 60127, - 60133, 60139, 60149, 60161, 60167, 60169, - 60209, 60217, 60223, 60251, 60257, 60259, - 60271, 60289, 60293, 60317, 60331, 60337, - 60343, 60353, 60373, 60383, 60397, 60413, - 60427, 60443, 60449, 60457, 60493, 60497, - 60509, 60521, 60527, 60539, 60589, 60601, - 60607, 60611, 60617, 60623, 60631, 60637, - 60647, 60649, 60659, 60661, 60679, 60689, - 60703, 60719, 60727, 60733, 60737, 60757, - 60761, 60763, 60773, 60779, 60793, 60811, - 60821, 60859, 60869, 60887, 60889, 60899, - 60901, 60913, 60917, 60919, 60923, 60937, - 60943, 60953, 60961, 61001, 61007, 61027, - 61031, 61043, 61051, 61057, 61091, 61099, - 61121, 61129, 61141, 61151, 61153, 61169, - 61211, 61223, 61231, 61253, 61261, 61283, - 61291, 61297, 61331, 61333, 61339, 61343, - 61357, 61363, 61379, 61381, 61403, 61409, - 61417, 61441, 61463, 61469, 61471, 61483, - 61487, 61493, 61507, 61511, 61519, 61543, - 61547, 61553, 61559, 61561, 61583, 61603, - 61609, 61613, 61627, 61631, 61637, 61643, - 61651, 61657, 61667, 61673, 61681, 61687, - 61703, 61717, 61723, 61729, 61751, 61757, - 61781, 61813, 61819, 61837, 61843, 61861, - 61871, 61879, 61909, 61927, 61933, 61949, - 61961, 61967, 61979, 61981, 61987, 61991, - 62003, 62011, 62017, 62039, 62047, 62053, - 62057, 62071, 62081, 62099, 62119, 62129, - 62131, 62137, 62141, 62143, 62171, 62189, - 62191, 62201, 62207, 62213, 62219, 62233, - 62273, 62297, 62299, 62303, 62311, 62323, - 62327, 62347, 62351, 62383, 62401, 62417, - 62423, 62459, 62467, 62473, 62477, 62483, - 62497, 62501, 62507, 62533, 62539, 62549, - 62563, 62581, 62591, 62597, 62603, 62617, - 62627, 62633, 62639, 62653, 62659, 62683, - 62687, 62701, 62723, 62731, 62743, 62753, - 62761, 62773, 62791, 62801, 62819, 62827, - 62851, 62861, 62869, 62873, 62897, 62903, - 62921, 62927, 62929, 62939, 62969, 62971, - 62981, 62983, 62987, 62989, 63001, 63029, - 63031, 63059, 63067, 63073, 63079, 63097, - 63103, 63113, 63127, 63131, 63149, 63179, - 63197, 63199, 63211, 63241, 63247, 63277, - 63281, 63299, 63311, 63313, 63317, 63331, - 63337, 63347, 63353, 63361, 63367, 63377, - 63389, 63391, 63397, 63409, 63419, 63421, - 63439, 63443, 63463, 63467, 63473, 63487, - 63493, 63499, 63521, 63527, 63533, 63541, - 63559, 63577, 63587, 63589, 63599, 63601, - 63607, 63611, 63617, 63629, 63647, 63649, - 63659, 63667, 63671, 63689, 63691, 63697, - 63703, 63709, 63719, 63727, 63737, 63743, - 63761, 63773, 63781, 63793, 63799, 63803, - 63809, 63823, 63839, 63841, 63853, 63857, - 63863, 63901, 63907, 63913, 63929, 63949, - 63977, 63997, 64007, 64013, 64019, 64033, - 64037, 64063, 64067, 64081, 64091, 64109, - 64123, 64151, 64153, 64157, 64171, 64187, - 64189, 64217, 64223, 64231, 64237, 64271, - 64279, 64283, 64301, 64303, 64319, 64327, - 64333, 64373, 64381, 64399, 64403, 64433, - 64439, 64451, 64453, 64483, 64489, 64499, - 64513, 64553, 64567, 64577, 64579, 64591, - 64601, 64609, 64613, 64621, 64627, 64633, - 64661, 64663, 64667, 64679, 64693, 64709, - 64717, 64747, 64763, 64781, 64783, 64793, - 64811, 64817, 64849, 64853, 64871, 64877, - 64879, 64891, 64901, 64919, 64921, 64927, - 64937, 64951, 64969, 64997, 65003, 65011, - 65027, 65029, 65033, 65053, 65063, 65071, - 65089, 65099, 65101, 65111, 65119, 65123, - 65129, 65141, 65147, 65167, 65171, 65173, - 65179, 65183, 65203, 65213, 65239, 65257, - 65267, 65269, 65287, 65293, 65309, 65323, - 65327, 65353, 65357, 65371, 65381, 65393, - 65407, 65413, 65419, 65423, 65437, 65447, - 65449, 65479, 65497, 65519, 65521, 65536, - }; diff --git a/native-build/build/ffdata.h b/native-build/build/ffdata.h deleted file mode 100644 index cbe57efd56..0000000000 --- a/native-build/build/ffdata.h +++ /dev/null @@ -1,23 +0,0 @@ -/* This file has been generated by etc/ffgen.c during build, - do not edit */ -#ifndef GAP_FFDATA_H -#define GAP_FFDATA_H - -#include - -enum { - NUM_SHORT_FINITE_FIELDS = 6635, - MAXSIZE_GF_INTERNAL = 65536, - DEGREE_LARGEST_INTERNAL_FF = 16, - FIELD_BITS_FFE = 13, - VAL_BITS_FFE = 16 -}; - -extern const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1]; -extern const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1]; -extern const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1]; - -typedef uint16_t FF; -typedef uint16_t FFV; - -#endif // GAP_FFDATA_H diff --git a/native-build/build/stamp-h b/native-build/build/stamp-h deleted file mode 100644 index 9788f70238..0000000000 --- a/native-build/build/stamp-h +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/native-build/cnf/GAP-VERSION-FILE b/native-build/cnf/GAP-VERSION-FILE deleted file mode 100644 index 94ff19573b..0000000000 --- a/native-build/cnf/GAP-VERSION-FILE +++ /dev/null @@ -1,2 +0,0 @@ -GAP_BUILD_VERSION = 4.15dev -GAP_BUILD_DATETIME = 2025-08-28 09:40:46+0000 diff --git a/native-build/config.status b/native-build/config.status deleted file mode 100755 index 7abb0ebb21..0000000000 --- a/native-build/config.status +++ /dev/null @@ -1,1127 +0,0 @@ -#! /bin/bash -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/bash} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. -as_nl=' -' -export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi - -# The user is always right. -if ${PATH_SEPARATOR+false} :; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - printf "%s\n" "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else $as_nop - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else $as_nop - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by GAP $as_me 4.15dev, which was -generated by GNU Autoconf 2.71. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" GNUmakefile CITATION libgap.pc doc/make_doc doc/versiondata" -config_headers=" build/config.h:src/config.h.in" -config_commands=" build/stamp-h" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to . -GAP home page: ." - -ac_cs_config='--without-readline --with-gmp=bundled' -ac_cs_version="\ -GAP config.status 4.15dev -configured by ../configure, generated by GNU Autoconf 2.71, - with options \"$ac_cs_config\" - -Copyright (C) 2021 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/home/runner/work/gap/gap/native-build' -srcdir='..' -INSTALL='/usr/bin/install -c' -MKDIR_P='/usr/bin/mkdir -p' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X /bin/bash '../configure' '--without-readline' '--with-gmp=bundled' $ac_configure_extra_args --no-create --no-recursion - shift - \printf "%s\n" "running CONFIG_SHELL=/bin/bash $*" >&6 - CONFIG_SHELL='/bin/bash' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - printf "%s\n" "$ac_log" -} >&5 - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "build/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build/config.h:src/config.h.in" ;; - "build/stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS build/stamp-h" ;; - "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; - "CITATION") CONFIG_FILES="$CONFIG_FILES CITATION" ;; - "libgap.pc") CONFIG_FILES="$CONFIG_FILES libgap.pc" ;; - "doc/make_doc") CONFIG_FILES="$CONFIG_FILES doc/make_doc" ;; - "doc/versiondata") CONFIG_FILES="$CONFIG_FILES doc/versiondata" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["GAP_DEFINES"]=" -DUSE_GASMAN=1" -S["PTHREAD_CFLAGS"]="-pthread" -S["PTHREAD_LIBS"]="-lpthread" -S["PTHREAD_CXX"]="g++ " -S["PTHREAD_CC"]="gcc " -S["ax_pthread_config"]="" -S["EGREP"]="/usr/bin/grep -E" -S["GREP"]="/usr/bin/grep" -S["CPP"]="gcc -E" -S["GAPARCH"]="x86_64-pc-linux-gnu-default64-kv10" -S["gap_kernel_minor_version"]="0" -S["gap_kernel_major_version"]="10" -S["BOEHM_GC_LIBS"]="" -S["BOEHM_GC_LDFLAGS"]="" -S["BOEHM_GC_CPPFLAGS"]="" -S["BUILD_BOEHM_GC"]="" -S["LIBATOMIC_OPS_LIBS"]="" -S["LIBATOMIC_OPS_LDFLAGS"]="" -S["LIBATOMIC_OPS_CPPFLAGS"]="" -S["BUILD_LIBATOMIC_OPS"]="" -S["JULIA_LIBS"]="" -S["JULIA_LDFLAGS"]="" -S["JULIA_CFLAGS"]="" -S["JULIA_VERSION"]="" -S["JULIA"]="" -S["READLINE_LIBS"]="" -S["READLINE_LDFLAGS"]="" -S["READLINE_CPPFLAGS"]="" -S["ZLIB_LIBS"]="-lz" -S["ZLIB_LDFLAGS"]="" -S["ZLIB_CPPFLAGS"]="" -S["BUILD_ZLIB"]="no" -S["GMP_PREFIX"]="bundled" -S["GMP_LIBS"]="-lgmp" -S["GMP_LDFLAGS"]="-Lbundled/lib" -S["GMP_CPPFLAGS"]="-Ibundled/include" -S["BUILD_GMP"]="no" -S["WARN_CXXFLAGS"]="-fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonlit"\ -"eral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dir"\ -"s -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but"\ -"-set-variable -Wno-unused-parameter -Wwrite-strings -Wextra-semi" -S["WARN_CFLAGS"]="-fno-strict-aliasing -Wall -Wextra -Warray-bounds -Wno-cast-function-type -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wformat-nonlit"\ -"eral -Wformat-security -Wformat=2 -Winit-self -Wno-inline -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dir"\ -"s -Wno-pragmas -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wreturn-type -Wshadow -Wno-sign-compare -Wstrict-aliasing -Wundef -Wunused-but"\ -"-set-variable -Wno-unused-parameter -Wwrite-strings -Wno-implicit-fallthrough -Wimplicit-function-declaration -Wjump-misses-init -Wnested-externs -W"\ -"old-style-definition -Wstrict-prototypes -Wno-error=cast-function-type -Wno-error=inline -Wno-error=pragmas -Wno-error=sign-compare -Wno-error=unuse"\ -"d-parameter -Wno-error=implicit-fallthrough" -S["SED"]="/usr/bin/sed" -S["MAINTAINER_MODE"]="yes" -S["GC_SOURCES"]="src/gasman.c src/sysmem.c" -S["HPCGAP"]="no" -S["MKDIR_P"]="/usr/bin/mkdir -p" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["ABI_CFLAGS"]="" -S["ABI"]="64" -S["HAVE_CXX11"]="1" -S["ac_ct_CXX"]="g++" -S["CXXFLAGS"]="-g -O2" -S["CXX"]="g++ " -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]="-g -O2" -S["CC"]="gcc " -S["host_os"]="linux-gnu" -S["host_vendor"]="pc" -S["host_cpu"]="x86_64" -S["host"]="x86_64-pc-linux-gnu" -S["build_os"]="linux-gnu" -S["build_vendor"]="pc" -S["build_cpu"]="x86_64" -S["build"]="x86_64-pc-linux-gnu" -S["GAP_RELEASEYEAR"]="this year" -S["GAP_RELEASEDAY"]="today" -S["GAP_VERSION"]="4.15dev" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="-lm " -S["ECHO_T"]="" -S["ECHO_N"]="-n" -S["ECHO_C"]="" -S["DEFS"]="-DHAVE_CONFIG_H" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["runstatedir"]="${localstatedir}/run" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="https://www.gap-system.org/" -S["PACKAGE_BUGREPORT"]="support@gap-system.org" -S["PACKAGE_STRING"]="GAP 4.15dev" -S["PACKAGE_VERSION"]="4.15dev" -S["PACKAGE_TARNAME"]="gap-4.15dev" -S["PACKAGE_NAME"]="GAP" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/bash" -_ACAWK -cat >>"$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -D["PACKAGE_NAME"]=" \"GAP\"" -D["PACKAGE_TARNAME"]=" \"gap-4.15dev\"" -D["PACKAGE_VERSION"]=" \"4.15dev\"" -D["PACKAGE_STRING"]=" \"GAP 4.15dev\"" -D["PACKAGE_BUGREPORT"]=" \"support@gap-system.org\"" -D["PACKAGE_URL"]=" \"https://www.gap-system.org/\"" -D["HAVE_CXX11"]=" 1" -D["HAVE_STDIO_H"]=" 1" -D["HAVE_STDLIB_H"]=" 1" -D["HAVE_STRING_H"]=" 1" -D["HAVE_INTTYPES_H"]=" 1" -D["HAVE_STDINT_H"]=" 1" -D["HAVE_STRINGS_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_SYS_TYPES_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["STDC_HEADERS"]=" 1" -D["SIZEOF_VOID_P"]=" 8" -D["HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_FALLTHROUGH"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_FORMAT"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_NOINLINE"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_NORETURN"]=" 1" -D["HAVE_FUNC_ATTRIBUTE_PURE"]=" 1" -D["HAVE___BUILTIN_MUL_OVERFLOW"]=" 1" -D["HAVE___BUILTIN_CLZ"]=" 1" -D["HAVE___BUILTIN_CLZL"]=" 1" -D["HAVE___BUILTIN_CLZLL"]=" 1" -D["HAVE___BUILTIN_POPCOUNTL"]=" 1" -D["SIZEOF_INT"]=" 4" -D["SIZEOF_LONG"]=" 8" -D["SIZEOF_LONG_LONG"]=" 8" -D["USE_POPCNT"]=" 1" -D["GAPARCH"]=" \"x86_64-pc-linux-gnu-default64-kv10\"" -D["C_STACK_ALIGN"]=" 2" -D["HAVE_TERMIOS_H"]=" 1" -D["HAVE_SYS_IOCTL_H"]=" 1" -D["HAVE_SYS_RESOURCE_H"]=" 1" -D["HAVE_OPENPTY"]=" 1" -D["HAVE_PTY_H"]=" 1" -D["HAVE_SIGNAL_H"]=" 1" -D["HAVE_SELECT"]=" 1" -D["HAVE_SPAWN_H"]=" 1" -D["HAVE_SYS_WAIT_H"]=" 1" -D["HAVE_FORK"]=" 1" -D["HAVE_VFORK"]=" 1" -D["HAVE_WORKING_VFORK"]=" 1" -D["HAVE_WORKING_FORK"]=" 1" -D["HAVE_POPEN"]=" 1" -D["HAVE_POSIX_SPAWN"]=" 1" -D["HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP"]=" 1" -D["HAVE_SIGNAL"]=" 1" -D["HAVE_SIGACTION"]=" 1" -D["HAVE_SETPGID"]=" 1" -D["HAVE_DLOPEN"]=" 1" -D["HAVE_SYS_TIME_H"]=" 1" -D["HAVE_GETRUSAGE"]=" 1" -D["HAVE_GETTIMEOFDAY"]=" 1" -D["HAVE_CLOCK_GETTIME"]=" 1" -D["HAVE_CLOCK_GETRES"]=" 1" -D["HAVE_SETITIMER"]=" 1" -D["HAVE_SBRK"]=" 1" -D["HAVE_MADVISE"]=" 1" -D["HAVE_SYSCONF"]=" 1" -D["HAVE_REALPATH"]=" 1" -D["HAVE_READLINK"]=" 1" -D["HAVE_MKDTEMP"]=" 1" -D["HAVE_LSTAT"]=" 1" -D["HAVE_TTYNAME"]=" 1" -D["HAVE_EXP10"]=" 1" -D["HAVE_PTHREAD_PRIO_INHERIT"]=" 1" -D["HAVE_PTHREAD"]=" 1" -D["HAVE_EXECINFO_H"]=" 1" -D["backtrace_size_t"]=" int" -D["HAVE_BACKTRACE"]=" 1" - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { - line = $ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra=" - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - printf "%s\n" "/* $configure_input */" >&1 \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - printf "%s\n" "/* $configure_input */" >&1 \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "build/stamp-h":C) echo timestamp > build/stamp-h ;; - "doc/make_doc":F) chmod +x doc/make_doc ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/native-build/doc/make_doc b/native-build/doc/make_doc deleted file mode 100755 index 082443b613..0000000000 --- a/native-build/doc/make_doc +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -GAP=/home/runner/work/gap/gap/native-build/gap -GAPARGS="-b -m 1g -x 80 -q --quitonbreak" -if [ "$1" == "nopdf" ]; then - NOPDF=", \"nopdf\"" -else - NOPDF="" -fi -echo "--------------------" -echo "Building GAP manuals" -echo "--------------------" - -"$GAP" $GAPARGS -A < StartsWith(x, "#W ") and x <> "#W There are overfull boxes:");; -if Length(errors) = 0 then - QuitGap(true); -else - Print(errors, "\n"); - QuitGap(false); -fi; -EOF diff --git a/native-build/doc/versiondata b/native-build/doc/versiondata deleted file mode 100644 index 73a44cc905..0000000000 --- a/native-build/doc/versiondata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/native-build/ffgen b/native-build/ffgen deleted file mode 100755 index b926ccfb60c1dc56fabe87c2c37cf7cd1f0929fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16888 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 diff --git a/native-build/libgap.pc b/native-build/libgap.pc deleted file mode 100644 index 8a1547d26a..0000000000 --- a/native-build/libgap.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=/usr/local -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=/usr/local/include - -Name: GAP -Description: Library containing the kernel of GAP, a computer algebra system -URL: https://www.gap-system.org -Version: 4.15dev -Libs: -L${libdir} -lgap -Cflags: -I${includedir} diff --git a/src/ffdata.c b/src/ffdata.c deleted file mode 100644 index 154ea2abae..0000000000 --- a/src/ffdata.c +++ /dev/null @@ -1,2643 +0,0 @@ -/* This file has been generated by etc/ffgen.c during build, - do not edit */ -#include "ffdata.h" - -/* Entries are ordered by value of p^d; can use binary search - * to find them. Indices start at 1. - */ - -const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 1, 1, 2, 1, 1, 3, 2, 1, 1, 4, 1, 1, 1, 2, 3, - 1, 1, 5, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 1, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 7, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 5, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 7, 3, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, -}; - -const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 2, 3, 2, 5, 7, - 2, 3, 11, 13, 2, 17, - 19, 23, 5, 3, 29, 31, - 2, 37, 41, 43, 47, 7, - 53, 59, 61, 2, 67, 71, - 73, 79, 3, 83, 89, 97, - 101, 103, 107, 109, 113, 11, - 5, 127, 2, 131, 137, 139, - 149, 151, 157, 163, 167, 13, - 173, 179, 181, 191, 193, 197, - 199, 211, 223, 227, 229, 233, - 239, 241, 3, 251, 2, 257, - 263, 269, 271, 277, 281, 283, - 17, 293, 307, 311, 313, 317, - 331, 337, 7, 347, 349, 353, - 359, 19, 367, 373, 379, 383, - 389, 397, 401, 409, 419, 421, - 431, 433, 439, 443, 449, 457, - 461, 463, 467, 479, 487, 491, - 499, 503, 509, 2, 521, 523, - 23, 541, 547, 557, 563, 569, - 571, 577, 587, 593, 599, 601, - 607, 613, 617, 619, 5, 631, - 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, - 719, 727, 3, 733, 739, 743, - 751, 757, 761, 769, 773, 787, - 797, 809, 811, 821, 823, 827, - 829, 839, 29, 853, 857, 859, - 863, 877, 881, 883, 887, 907, - 911, 919, 929, 937, 941, 947, - 953, 31, 967, 971, 977, 983, - 991, 997, 1009, 1013, 1019, 1021, - 2, 1031, 1033, 1039, 1049, 1051, - 1061, 1063, 1069, 1087, 1091, 1093, - 1097, 1103, 1109, 1117, 1123, 1129, - 1151, 1153, 1163, 1171, 1181, 1187, - 1193, 1201, 1213, 1217, 1223, 1229, - 1231, 1237, 1249, 1259, 1277, 1279, - 1283, 1289, 1291, 1297, 1301, 1303, - 1307, 1319, 1321, 1327, 11, 1361, - 1367, 37, 1373, 1381, 1399, 1409, - 1423, 1427, 1429, 1433, 1439, 1447, - 1451, 1453, 1459, 1471, 1481, 1483, - 1487, 1489, 1493, 1499, 1511, 1523, - 1531, 1543, 1549, 1553, 1559, 1567, - 1571, 1579, 1583, 1597, 1601, 1607, - 1609, 1613, 1619, 1621, 1627, 1637, - 1657, 1663, 1667, 1669, 41, 1693, - 1697, 1699, 1709, 1721, 1723, 1733, - 1741, 1747, 1753, 1759, 1777, 1783, - 1787, 1789, 1801, 1811, 1823, 1831, - 1847, 43, 1861, 1867, 1871, 1873, - 1877, 1879, 1889, 1901, 1907, 1913, - 1931, 1933, 1949, 1951, 1973, 1979, - 1987, 1993, 1997, 1999, 2003, 2011, - 2017, 2027, 2029, 2039, 2, 2053, - 2063, 2069, 2081, 2083, 2087, 2089, - 2099, 2111, 2113, 2129, 2131, 2137, - 2141, 2143, 2153, 2161, 2179, 3, - 13, 2203, 2207, 47, 2213, 2221, - 2237, 2239, 2243, 2251, 2267, 2269, - 2273, 2281, 2287, 2293, 2297, 2309, - 2311, 2333, 2339, 2341, 2347, 2351, - 2357, 2371, 2377, 2381, 2383, 2389, - 2393, 2399, 7, 2411, 2417, 2423, - 2437, 2441, 2447, 2459, 2467, 2473, - 2477, 2503, 2521, 2531, 2539, 2543, - 2549, 2551, 2557, 2579, 2591, 2593, - 2609, 2617, 2621, 2633, 2647, 2657, - 2659, 2663, 2671, 2677, 2683, 2687, - 2689, 2693, 2699, 2707, 2711, 2713, - 2719, 2729, 2731, 2741, 2749, 2753, - 2767, 2777, 2789, 2791, 2797, 2801, - 2803, 53, 2819, 2833, 2837, 2843, - 2851, 2857, 2861, 2879, 2887, 2897, - 2903, 2909, 2917, 2927, 2939, 2953, - 2957, 2963, 2969, 2971, 2999, 3001, - 3011, 3019, 3023, 3037, 3041, 3049, - 3061, 3067, 3079, 3083, 3089, 3109, - 3119, 3121, 5, 3137, 3163, 3167, - 3169, 3181, 3187, 3191, 3203, 3209, - 3217, 3221, 3229, 3251, 3253, 3257, - 3259, 3271, 3299, 3301, 3307, 3313, - 3319, 3323, 3329, 3331, 3343, 3347, - 3359, 3361, 3371, 3373, 3389, 3391, - 3407, 3413, 3433, 3449, 3457, 3461, - 3463, 3467, 3469, 59, 3491, 3499, - 3511, 3517, 3527, 3529, 3533, 3539, - 3541, 3547, 3557, 3559, 3571, 3581, - 3583, 3593, 3607, 3613, 3617, 3623, - 3631, 3637, 3643, 3659, 3671, 3673, - 3677, 3691, 3697, 3701, 3709, 3719, - 61, 3727, 3733, 3739, 3761, 3767, - 3769, 3779, 3793, 3797, 3803, 3821, - 3823, 3833, 3847, 3851, 3853, 3863, - 3877, 3881, 3889, 3907, 3911, 3917, - 3919, 3923, 3929, 3931, 3943, 3947, - 3967, 3989, 4001, 4003, 4007, 4013, - 4019, 4021, 4027, 4049, 4051, 4057, - 4073, 4079, 4091, 4093, 2, 4099, - 4111, 4127, 4129, 4133, 4139, 4153, - 4157, 4159, 4177, 4201, 4211, 4217, - 4219, 4229, 4231, 4241, 4243, 4253, - 4259, 4261, 4271, 4273, 4283, 4289, - 4297, 4327, 4337, 4339, 4349, 4357, - 4363, 4373, 4391, 4397, 4409, 4421, - 4423, 4441, 4447, 4451, 4457, 4463, - 4481, 4483, 67, 4493, 4507, 4513, - 4517, 4519, 4523, 4547, 4549, 4561, - 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4639, 4643, 4649, 4651, 4657, - 4663, 4673, 4679, 4691, 4703, 4721, - 4723, 4729, 4733, 4751, 4759, 4783, - 4787, 4789, 4793, 4799, 4801, 4813, - 4817, 4831, 4861, 4871, 4877, 4889, - 4903, 4909, 17, 4919, 4931, 4933, - 4937, 4943, 4951, 4957, 4967, 4969, - 4973, 4987, 4993, 4999, 5003, 5009, - 5011, 5021, 5023, 5039, 71, 5051, - 5059, 5077, 5081, 5087, 5099, 5101, - 5107, 5113, 5119, 5147, 5153, 5167, - 5171, 5179, 5189, 5197, 5209, 5227, - 5231, 5233, 5237, 5261, 5273, 5279, - 5281, 5297, 5303, 5309, 5323, 73, - 5333, 5347, 5351, 5381, 5387, 5393, - 5399, 5407, 5413, 5417, 5419, 5431, - 5437, 5441, 5443, 5449, 5471, 5477, - 5479, 5483, 5501, 5503, 5507, 5519, - 5521, 5527, 5531, 5557, 5563, 5569, - 5573, 5581, 5591, 5623, 5639, 5641, - 5647, 5651, 5653, 5657, 5659, 5669, - 5683, 5689, 5693, 5701, 5711, 5717, - 5737, 5741, 5743, 5749, 5779, 5783, - 5791, 5801, 5807, 5813, 5821, 5827, - 5839, 5843, 5849, 5851, 5857, 5861, - 5867, 5869, 5879, 5881, 5897, 5903, - 5923, 5927, 5939, 5953, 5981, 5987, - 6007, 6011, 6029, 6037, 6043, 6047, - 6053, 6067, 6073, 6079, 6089, 6091, - 6101, 6113, 6121, 6131, 6133, 6143, - 6151, 6163, 6173, 6197, 6199, 6203, - 6211, 6217, 6221, 6229, 79, 6247, - 6257, 6263, 6269, 6271, 6277, 6287, - 6299, 6301, 6311, 6317, 6323, 6329, - 6337, 6343, 6353, 6359, 6361, 6367, - 6373, 6379, 6389, 6397, 6421, 6427, - 6449, 6451, 6469, 6473, 6481, 6491, - 6521, 6529, 6547, 6551, 6553, 3, - 6563, 6569, 6571, 6577, 6581, 6599, - 6607, 6619, 6637, 6653, 6659, 6661, - 6673, 6679, 6689, 6691, 6701, 6703, - 6709, 6719, 6733, 6737, 6761, 6763, - 6779, 6781, 6791, 6793, 6803, 6823, - 6827, 6829, 6833, 6841, 6857, 19, - 6863, 6869, 6871, 6883, 83, 6899, - 6907, 6911, 6917, 6947, 6949, 6959, - 6961, 6967, 6971, 6977, 6983, 6991, - 6997, 7001, 7013, 7019, 7027, 7039, - 7043, 7057, 7069, 7079, 7103, 7109, - 7121, 7127, 7129, 7151, 7159, 7177, - 7187, 7193, 7207, 7211, 7213, 7219, - 7229, 7237, 7243, 7247, 7253, 7283, - 7297, 7307, 7309, 7321, 7331, 7333, - 7349, 7351, 7369, 7393, 7411, 7417, - 7433, 7451, 7457, 7459, 7477, 7481, - 7487, 7489, 7499, 7507, 7517, 7523, - 7529, 7537, 7541, 7547, 7549, 7559, - 7561, 7573, 7577, 7583, 7589, 7591, - 7603, 7607, 7621, 7639, 7643, 7649, - 7669, 7673, 7681, 7687, 7691, 7699, - 7703, 7717, 7723, 7727, 7741, 7753, - 7757, 7759, 7789, 7793, 7817, 7823, - 7829, 7841, 7853, 7867, 7873, 7877, - 7879, 7883, 7901, 7907, 7919, 89, - 7927, 7933, 7937, 7949, 7951, 7963, - 7993, 8009, 8011, 8017, 8039, 8053, - 8059, 8069, 8081, 8087, 8089, 8093, - 8101, 8111, 8117, 8123, 8147, 8161, - 8167, 8171, 8179, 8191, 2, 8209, - 8219, 8221, 8231, 8233, 8237, 8243, - 8263, 8269, 8273, 8287, 8291, 8293, - 8297, 8311, 8317, 8329, 8353, 8363, - 8369, 8377, 8387, 8389, 8419, 8423, - 8429, 8431, 8443, 8447, 8461, 8467, - 8501, 8513, 8521, 8527, 8537, 8539, - 8543, 8563, 8573, 8581, 8597, 8599, - 8609, 8623, 8627, 8629, 8641, 8647, - 8663, 8669, 8677, 8681, 8689, 8693, - 8699, 8707, 8713, 8719, 8731, 8737, - 8741, 8747, 8753, 8761, 8779, 8783, - 8803, 8807, 8819, 8821, 8831, 8837, - 8839, 8849, 8861, 8863, 8867, 8887, - 8893, 8923, 8929, 8933, 8941, 8951, - 8963, 8969, 8971, 8999, 9001, 9007, - 9011, 9013, 9029, 9041, 9043, 9049, - 9059, 9067, 9091, 9103, 9109, 9127, - 9133, 9137, 9151, 9157, 9161, 9173, - 9181, 9187, 9199, 9203, 9209, 9221, - 9227, 9239, 9241, 9257, 9277, 9281, - 9283, 9293, 9311, 9319, 9323, 9337, - 9341, 9343, 9349, 9371, 9377, 9391, - 9397, 9403, 97, 9413, 9419, 9421, - 9431, 9433, 9437, 9439, 9461, 9463, - 9467, 9473, 9479, 9491, 9497, 9511, - 9521, 9533, 9539, 9547, 9551, 9587, - 9601, 9613, 9619, 9623, 9629, 9631, - 9643, 9649, 9661, 9677, 9679, 9689, - 9697, 9719, 9721, 9733, 9739, 9743, - 9749, 9767, 9769, 9781, 9787, 9791, - 9803, 9811, 9817, 9829, 9833, 9839, - 9851, 9857, 9859, 9871, 9883, 9887, - 9901, 9907, 9923, 9929, 9931, 9941, - 9949, 9967, 9973, 10007, 10009, 10037, - 10039, 10061, 10067, 10069, 10079, 10091, - 10093, 10099, 10103, 10111, 10133, 10139, - 10141, 10151, 10159, 10163, 10169, 10177, - 10181, 10193, 101, 10211, 10223, 10243, - 10247, 10253, 10259, 10267, 10271, 10273, - 10289, 10301, 10303, 10313, 10321, 10331, - 10333, 10337, 10343, 10357, 10369, 10391, - 10399, 10427, 10429, 10433, 10453, 10457, - 10459, 10463, 10477, 10487, 10499, 10501, - 10513, 10529, 10531, 10559, 10567, 10589, - 10597, 10601, 10607, 103, 10613, 10627, - 10631, 10639, 10651, 10657, 10663, 10667, - 10687, 10691, 10709, 10711, 10723, 10729, - 10733, 10739, 10753, 10771, 10781, 10789, - 10799, 10831, 10837, 10847, 10853, 10859, - 10861, 10867, 10883, 10889, 10891, 10903, - 10909, 10937, 10939, 10949, 10957, 10973, - 10979, 10987, 10993, 11003, 11027, 11047, - 11057, 11059, 11069, 11071, 11083, 11087, - 11093, 11113, 11117, 11119, 11131, 11149, - 11159, 11161, 11171, 11173, 11177, 11197, - 11213, 11239, 11243, 11251, 11257, 11261, - 11273, 11279, 11287, 11299, 11311, 11317, - 11321, 11329, 11351, 11353, 11369, 11383, - 11393, 11399, 11411, 11423, 11437, 11443, - 11447, 107, 11467, 11471, 11483, 11489, - 11491, 11497, 11503, 11519, 11527, 11549, - 11551, 11579, 11587, 11593, 11597, 11617, - 11621, 11633, 11657, 11677, 11681, 11689, - 11699, 11701, 11717, 11719, 11731, 11743, - 11777, 11779, 11783, 11789, 11801, 11807, - 11813, 11821, 11827, 11831, 11833, 11839, - 11863, 11867, 109, 11887, 11897, 11903, - 11909, 11923, 11927, 11933, 11939, 11941, - 11953, 11959, 11969, 11971, 11981, 11987, - 12007, 12011, 12037, 12041, 12043, 12049, - 12071, 12073, 12097, 12101, 12107, 12109, - 12113, 12119, 12143, 12149, 12157, 12161, - 12163, 23, 12197, 12203, 12211, 12227, - 12239, 12241, 12251, 12253, 12263, 12269, - 12277, 12281, 12289, 12301, 12323, 12329, - 12343, 12347, 12373, 12377, 12379, 12391, - 12401, 12409, 12413, 12421, 12433, 12437, - 12451, 12457, 12473, 12479, 12487, 12491, - 12497, 12503, 12511, 12517, 12527, 12539, - 12541, 12547, 12553, 12569, 12577, 12583, - 12589, 12601, 12611, 12613, 12619, 12637, - 12641, 12647, 12653, 12659, 12671, 12689, - 12697, 12703, 12713, 12721, 12739, 12743, - 12757, 12763, 113, 12781, 12791, 12799, - 12809, 12821, 12823, 12829, 12841, 12853, - 12889, 12893, 12899, 12907, 12911, 12917, - 12919, 12923, 12941, 12953, 12959, 12967, - 12973, 12979, 12983, 13001, 13003, 13007, - 13009, 13033, 13037, 13043, 13049, 13063, - 13093, 13099, 13103, 13109, 13121, 13127, - 13147, 13151, 13159, 13163, 13171, 13177, - 13183, 13187, 13217, 13219, 13229, 13241, - 13249, 13259, 13267, 13291, 13297, 13309, - 13313, 13327, 13331, 13337, 13339, 13367, - 13381, 13397, 13399, 13411, 13417, 13421, - 13441, 13451, 13457, 13463, 13469, 13477, - 13487, 13499, 13513, 13523, 13537, 13553, - 13567, 13577, 13591, 13597, 13613, 13619, - 13627, 13633, 13649, 13669, 13679, 13681, - 13687, 13691, 13693, 13697, 13709, 13711, - 13721, 13723, 13729, 13751, 13757, 13759, - 13763, 13781, 13789, 13799, 13807, 13829, - 13831, 13841, 13859, 13873, 13877, 13879, - 13883, 13901, 13903, 13907, 13913, 13921, - 13931, 13933, 13963, 13967, 13997, 13999, - 14009, 14011, 14029, 14033, 14051, 14057, - 14071, 14081, 14083, 14087, 14107, 14143, - 14149, 14153, 14159, 14173, 14177, 14197, - 14207, 14221, 14243, 14249, 14251, 14281, - 14293, 14303, 14321, 14323, 14327, 14341, - 14347, 14369, 14387, 14389, 14401, 14407, - 14411, 14419, 14423, 14431, 14437, 14447, - 14449, 14461, 14479, 14489, 14503, 14519, - 14533, 14537, 14543, 14549, 14551, 14557, - 14561, 14563, 14591, 14593, 14621, 14627, - 14629, 14633, 14639, 11, 14653, 14657, - 14669, 14683, 14699, 14713, 14717, 14723, - 14731, 14737, 14741, 14747, 14753, 14759, - 14767, 14771, 14779, 14783, 14797, 14813, - 14821, 14827, 14831, 14843, 14851, 14867, - 14869, 14879, 14887, 14891, 14897, 14923, - 14929, 14939, 14947, 14951, 14957, 14969, - 14983, 15013, 15017, 15031, 15053, 15061, - 15073, 15077, 15083, 15091, 15101, 15107, - 15121, 15131, 15137, 15139, 15149, 15161, - 15173, 15187, 15193, 15199, 15217, 15227, - 15233, 15241, 15259, 15263, 15269, 15271, - 15277, 15287, 15289, 15299, 15307, 15313, - 15319, 15329, 15331, 15349, 15359, 15361, - 15373, 15377, 15383, 15391, 15401, 15413, - 15427, 15439, 15443, 15451, 15461, 15467, - 15473, 15493, 15497, 15511, 15527, 15541, - 15551, 15559, 15569, 15581, 15583, 15601, - 15607, 15619, 5, 15629, 15641, 15643, - 15647, 15649, 15661, 15667, 15671, 15679, - 15683, 15727, 15731, 15733, 15737, 15739, - 15749, 15761, 15767, 15773, 15787, 15791, - 15797, 15803, 15809, 15817, 15823, 15859, - 15877, 15881, 15887, 15889, 15901, 15907, - 15913, 15919, 15923, 15937, 15959, 15971, - 15973, 15991, 16001, 16007, 16033, 16057, - 16061, 16063, 16067, 16069, 16073, 16087, - 16091, 16097, 16103, 16111, 16127, 127, - 16139, 16141, 16183, 16187, 16189, 16193, - 16217, 16223, 16229, 16231, 16249, 16253, - 16267, 16273, 16301, 16319, 16333, 16339, - 16349, 16361, 16363, 16369, 16381, 2, - 16411, 16417, 16421, 16427, 16433, 16447, - 16451, 16453, 16477, 16481, 16487, 16493, - 16519, 16529, 16547, 16553, 16561, 16567, - 16573, 16603, 16607, 16619, 16631, 16633, - 16649, 16651, 16657, 16661, 16673, 16691, - 16693, 16699, 16703, 16729, 16741, 16747, - 16759, 16763, 16787, 7, 16811, 16823, - 16829, 16831, 16843, 16871, 16879, 16883, - 16889, 16901, 16903, 16921, 16927, 16931, - 16937, 16943, 16963, 16979, 16981, 16987, - 16993, 17011, 17021, 17027, 17029, 17033, - 17041, 17047, 17053, 17077, 17093, 17099, - 17107, 17117, 17123, 17137, 17159, 131, - 17167, 17183, 17189, 17191, 17203, 17207, - 17209, 17231, 17239, 17257, 17291, 17293, - 17299, 17317, 17321, 17327, 17333, 17341, - 17351, 17359, 17377, 17383, 17387, 17389, - 17393, 17401, 17417, 17419, 17431, 17443, - 17449, 17467, 17471, 17477, 17483, 17489, - 17491, 17497, 17509, 17519, 17539, 17551, - 17569, 17573, 17579, 17581, 17597, 17599, - 17609, 17623, 17627, 17657, 17659, 17669, - 17681, 17683, 17707, 17713, 17729, 17737, - 17747, 17749, 17761, 17783, 17789, 17791, - 17807, 17827, 17837, 17839, 17851, 17863, - 17881, 17891, 17903, 17909, 17911, 17921, - 17923, 17929, 17939, 17957, 17959, 17971, - 17977, 17981, 17987, 17989, 18013, 18041, - 18043, 18047, 18049, 18059, 18061, 18077, - 18089, 18097, 18119, 18121, 18127, 18131, - 18133, 18143, 18149, 18169, 18181, 18191, - 18199, 18211, 18217, 18223, 18229, 18233, - 18251, 18253, 18257, 18269, 18287, 18289, - 18301, 18307, 18311, 18313, 18329, 18341, - 18353, 18367, 18371, 18379, 18397, 18401, - 18413, 18427, 18433, 18439, 18443, 18451, - 18457, 18461, 18481, 18493, 18503, 18517, - 18521, 18523, 18539, 18541, 18553, 18583, - 18587, 18593, 18617, 18637, 18661, 18671, - 18679, 18691, 18701, 18713, 18719, 18731, - 18743, 18749, 18757, 137, 18773, 18787, - 18793, 18797, 18803, 18839, 18859, 18869, - 18899, 18911, 18913, 18917, 18919, 18947, - 18959, 18973, 18979, 19001, 19009, 19013, - 19031, 19037, 19051, 19069, 19073, 19079, - 19081, 19087, 19121, 19139, 19141, 19157, - 19163, 19181, 19183, 19207, 19211, 19213, - 19219, 19231, 19237, 19249, 19259, 19267, - 19273, 19289, 19301, 19309, 19319, 139, - 19333, 19373, 19379, 19381, 19387, 19391, - 19403, 19417, 19421, 19423, 19427, 19429, - 19433, 19441, 19447, 19457, 19463, 19469, - 19471, 19477, 19483, 19489, 19501, 19507, - 19531, 19541, 19543, 19553, 19559, 19571, - 19577, 19583, 19597, 19603, 19609, 19661, - 19681, 3, 19687, 19697, 19699, 19709, - 19717, 19727, 19739, 19751, 19753, 19759, - 19763, 19777, 19793, 19801, 19813, 19819, - 19841, 19843, 19853, 19861, 19867, 19889, - 19891, 19913, 19919, 19927, 19937, 19949, - 19961, 19963, 19973, 19979, 19991, 19993, - 19997, 20011, 20021, 20023, 20029, 20047, - 20051, 20063, 20071, 20089, 20101, 20107, - 20113, 20117, 20123, 20129, 20143, 20147, - 20149, 20161, 20173, 20177, 20183, 20201, - 20219, 20231, 20233, 20249, 20261, 20269, - 20287, 20297, 20323, 20327, 20333, 20341, - 20347, 20353, 20357, 20359, 20369, 20389, - 20393, 20399, 20407, 20411, 20431, 20441, - 20443, 20477, 20479, 20483, 20507, 20509, - 20521, 20533, 20543, 20549, 20551, 20563, - 20593, 20599, 20611, 20627, 20639, 20641, - 20663, 20681, 20693, 20707, 20717, 20719, - 20731, 20743, 20747, 20749, 20753, 20759, - 20771, 20773, 20789, 20807, 20809, 20849, - 20857, 20873, 20879, 20887, 20897, 20899, - 20903, 20921, 20929, 20939, 20947, 20959, - 20963, 20981, 20983, 21001, 21011, 21013, - 21017, 21019, 21023, 21031, 21059, 21061, - 21067, 21089, 21101, 21107, 21121, 21139, - 21143, 21149, 21157, 21163, 21169, 21179, - 21187, 21191, 21193, 21211, 21221, 21227, - 21247, 21269, 21277, 21283, 21313, 21317, - 21319, 21323, 21341, 21347, 21377, 21379, - 21383, 21391, 21397, 21401, 21407, 21419, - 21433, 21467, 21481, 21487, 21491, 21493, - 21499, 21503, 21517, 21521, 21523, 21529, - 21557, 21559, 21563, 21569, 21577, 21587, - 21589, 21599, 21601, 21611, 21613, 21617, - 21647, 21649, 21661, 21673, 21683, 21701, - 21713, 21727, 21737, 21739, 21751, 21757, - 21767, 21773, 21787, 21799, 21803, 21817, - 21821, 21839, 21841, 21851, 21859, 21863, - 21871, 21881, 21893, 21911, 21929, 21937, - 21943, 21961, 21977, 21991, 21997, 22003, - 22013, 22027, 22031, 22037, 22039, 22051, - 22063, 22067, 22073, 22079, 22091, 22093, - 22109, 22111, 22123, 22129, 22133, 22147, - 22153, 22157, 22159, 22171, 22189, 22193, - 149, 22229, 22247, 22259, 22271, 22273, - 22277, 22279, 22283, 22291, 22303, 22307, - 22343, 22349, 22367, 22369, 22381, 22391, - 22397, 22409, 22433, 22441, 22447, 22453, - 22469, 22481, 22483, 22501, 22511, 22531, - 22541, 22543, 22549, 22567, 22571, 22573, - 22613, 22619, 22621, 22637, 22639, 22643, - 22651, 22669, 22679, 22691, 22697, 22699, - 22709, 22717, 22721, 22727, 22739, 22741, - 22751, 22769, 22777, 22783, 22787, 151, - 22807, 22811, 22817, 22853, 22859, 22861, - 22871, 22877, 22901, 22907, 22921, 22937, - 22943, 22961, 22963, 22973, 22993, 23003, - 23011, 23017, 23021, 23027, 23029, 23039, - 23041, 23053, 23057, 23059, 23063, 23071, - 23081, 23087, 23099, 23117, 23131, 23143, - 23159, 23167, 23173, 23189, 23197, 23201, - 23203, 23209, 23227, 23251, 23269, 23279, - 23291, 23293, 23297, 23311, 23321, 23327, - 23333, 23339, 23357, 23369, 23371, 23399, - 23417, 23431, 23447, 23459, 23473, 23497, - 23509, 23531, 23537, 23539, 23549, 23557, - 23561, 23563, 23567, 23581, 23593, 23599, - 23603, 23609, 23623, 23627, 23629, 23633, - 23663, 23669, 23671, 23677, 23687, 23689, - 23719, 23741, 23743, 23747, 23753, 23761, - 23767, 23773, 23789, 23801, 23813, 23819, - 23827, 23831, 23833, 23857, 23869, 23873, - 23879, 23887, 23893, 23899, 23909, 23911, - 23917, 23929, 23957, 23971, 23977, 23981, - 23993, 24001, 24007, 24019, 24023, 24029, - 24043, 24049, 24061, 24071, 24077, 24083, - 24091, 24097, 24103, 24107, 24109, 24113, - 24121, 24133, 24137, 24151, 24169, 24179, - 24181, 24197, 24203, 24223, 24229, 24239, - 24247, 24251, 24281, 24317, 24329, 24337, - 24359, 24371, 24373, 24379, 29, 24391, - 24407, 24413, 24419, 24421, 24439, 24443, - 24469, 24473, 24481, 24499, 24509, 24517, - 24527, 24533, 24547, 24551, 24571, 24593, - 24611, 24623, 24631, 157, 24659, 24671, - 24677, 24683, 24691, 24697, 24709, 24733, - 24749, 24763, 24767, 24781, 24793, 24799, - 24809, 24821, 24841, 24847, 24851, 24859, - 24877, 24889, 24907, 24917, 24919, 24923, - 24943, 24953, 24967, 24971, 24977, 24979, - 24989, 25013, 25031, 25033, 25037, 25057, - 25073, 25087, 25097, 25111, 25117, 25121, - 25127, 25147, 25153, 25163, 25169, 25171, - 25183, 25189, 25219, 25229, 25237, 25243, - 25247, 25253, 25261, 25301, 25303, 25307, - 25309, 25321, 25339, 25343, 25349, 25357, - 25367, 25373, 25391, 25409, 25411, 25423, - 25439, 25447, 25453, 25457, 25463, 25469, - 25471, 25523, 25537, 25541, 25561, 25577, - 25579, 25583, 25589, 25601, 25603, 25609, - 25621, 25633, 25639, 25643, 25657, 25667, - 25673, 25679, 25693, 25703, 25717, 25733, - 25741, 25747, 25759, 25763, 25771, 25793, - 25799, 25801, 25819, 25841, 25847, 25849, - 25867, 25873, 25889, 25903, 25913, 25919, - 25931, 25933, 25939, 25943, 25951, 25969, - 25981, 25997, 25999, 26003, 26017, 26021, - 26029, 26041, 26053, 26083, 26099, 26107, - 26111, 26113, 26119, 26141, 26153, 26161, - 26171, 26177, 26183, 26189, 26203, 26209, - 26227, 26237, 26249, 26251, 26261, 26263, - 26267, 26293, 26297, 26309, 26317, 26321, - 26339, 26347, 26357, 26371, 26387, 26393, - 26399, 26407, 26417, 26423, 26431, 26437, - 26449, 26459, 26479, 26489, 26497, 26501, - 26513, 26539, 26557, 26561, 163, 26573, - 26591, 26597, 26627, 26633, 26641, 26647, - 26669, 26681, 26683, 26687, 26693, 26699, - 26701, 26711, 26713, 26717, 26723, 26729, - 26731, 26737, 26759, 26777, 26783, 26801, - 26813, 26821, 26833, 26839, 26849, 26861, - 26863, 26879, 26881, 26891, 26893, 26903, - 26921, 26927, 26947, 26951, 26953, 26959, - 26981, 26987, 26993, 27011, 27017, 27031, - 27043, 27059, 27061, 27067, 27073, 27077, - 27091, 27103, 27107, 27109, 27127, 27143, - 27179, 27191, 27197, 27211, 27239, 27241, - 27253, 27259, 27271, 27277, 27281, 27283, - 27299, 27329, 27337, 27361, 27367, 27397, - 27407, 27409, 27427, 27431, 27437, 27449, - 27457, 27479, 27481, 27487, 27509, 27527, - 27529, 27539, 27541, 27551, 27581, 27583, - 27611, 27617, 27631, 27647, 27653, 27673, - 27689, 27691, 27697, 27701, 27733, 27737, - 27739, 27743, 27749, 27751, 27763, 27767, - 27773, 27779, 27791, 27793, 27799, 27803, - 27809, 27817, 27823, 27827, 27847, 27851, - 27883, 167, 27893, 27901, 27917, 27919, - 27941, 27943, 27947, 27953, 27961, 27967, - 27983, 27997, 28001, 28019, 28027, 28031, - 28051, 28057, 28069, 28081, 28087, 28097, - 28099, 28109, 28111, 28123, 28151, 28163, - 28181, 28183, 28201, 28211, 28219, 28229, - 28277, 28279, 28283, 28289, 28297, 28307, - 28309, 28319, 28349, 28351, 28387, 28393, - 28403, 28409, 28411, 28429, 28433, 28439, - 28447, 28463, 28477, 28493, 28499, 28513, - 28517, 28537, 28541, 28547, 28549, 28559, - 13, 28571, 28573, 28579, 28591, 28597, - 28603, 28607, 28619, 28621, 28627, 28631, - 28643, 28649, 28657, 28661, 28663, 28669, - 28687, 28697, 28703, 28711, 28723, 28729, - 28751, 28753, 28759, 28771, 28789, 28793, - 28807, 28813, 28817, 28837, 28843, 28859, - 28867, 28871, 28879, 28901, 28909, 28921, - 28927, 28933, 28949, 28961, 28979, 29009, - 29017, 29021, 29023, 29027, 29033, 29059, - 29063, 29077, 29101, 29123, 29129, 29131, - 29137, 29147, 29153, 29167, 29173, 29179, - 29191, 29201, 29207, 29209, 29221, 29231, - 29243, 29251, 29269, 29287, 29297, 29303, - 29311, 29327, 29333, 29339, 29347, 29363, - 29383, 29387, 29389, 29399, 29401, 29411, - 29423, 29429, 29437, 29443, 29453, 29473, - 29483, 29501, 29527, 29531, 29537, 29567, - 29569, 29573, 29581, 29587, 29599, 29611, - 29629, 29633, 29641, 29663, 29669, 29671, - 29683, 29717, 29723, 29741, 29753, 29759, - 29761, 29789, 31, 29803, 29819, 29833, - 29837, 29851, 29863, 29867, 29873, 29879, - 29881, 29917, 29921, 29927, 173, 29947, - 29959, 29983, 29989, 30011, 30013, 30029, - 30047, 30059, 30071, 30089, 30091, 30097, - 30103, 30109, 30113, 30119, 30133, 30137, - 30139, 30161, 30169, 30181, 30187, 30197, - 30203, 30211, 30223, 30241, 30253, 30259, - 30269, 30271, 30293, 30307, 30313, 30319, - 30323, 30341, 30347, 30367, 30389, 30391, - 30403, 30427, 30431, 30449, 30467, 30469, - 30491, 30493, 30497, 30509, 30517, 30529, - 30539, 30553, 30557, 30559, 30577, 30593, - 30631, 30637, 30643, 30649, 30661, 30671, - 30677, 30689, 30697, 30703, 30707, 30713, - 30727, 30757, 30763, 30773, 30781, 30803, - 30809, 30817, 30829, 30839, 30841, 30851, - 30853, 30859, 30869, 30871, 30881, 30893, - 30911, 30931, 30937, 30941, 30949, 30971, - 30977, 30983, 31013, 31019, 31033, 31039, - 31051, 31063, 31069, 31079, 31081, 31091, - 31121, 31123, 31139, 31147, 31151, 31153, - 31159, 31177, 31181, 31183, 31189, 31193, - 31219, 31223, 31231, 31237, 31247, 31249, - 31253, 31259, 31267, 31271, 31277, 31307, - 31319, 31321, 31327, 31333, 31337, 31357, - 31379, 31387, 31391, 31393, 31397, 31469, - 31477, 31481, 31489, 31511, 31513, 31517, - 31531, 31541, 31543, 31547, 31567, 31573, - 31583, 31601, 31607, 31627, 31643, 31649, - 31657, 31663, 31667, 31687, 31699, 31721, - 31723, 31727, 31729, 31741, 31751, 31769, - 31771, 31793, 31799, 31817, 31847, 31849, - 31859, 31873, 31883, 31891, 31907, 31957, - 31963, 31973, 31981, 31991, 32003, 32009, - 32027, 32029, 179, 32051, 32057, 32059, - 32063, 32069, 32077, 32083, 32089, 32099, - 32117, 32119, 32141, 32143, 32159, 32173, - 32183, 32189, 32191, 32203, 32213, 32233, - 32237, 32251, 32257, 32261, 32297, 32299, - 32303, 32309, 32321, 32323, 32327, 32341, - 32353, 32359, 32363, 32369, 32371, 32377, - 32381, 32401, 32411, 32413, 32423, 32429, - 32441, 32443, 32467, 32479, 32491, 32497, - 32503, 32507, 32531, 32533, 32537, 32561, - 32563, 32569, 32573, 32579, 32587, 32603, - 32609, 32611, 32621, 32633, 32647, 32653, - 32687, 32693, 32707, 32713, 32717, 32719, - 32749, 181, 2, 32771, 32779, 32783, - 32789, 32797, 32801, 32803, 32831, 32833, - 32839, 32843, 32869, 32887, 32909, 32911, - 32917, 32933, 32939, 32941, 32957, 32969, - 32971, 32983, 32987, 32993, 32999, 33013, - 33023, 33029, 33037, 33049, 33053, 33071, - 33073, 33083, 33091, 33107, 33113, 33119, - 33149, 33151, 33161, 33179, 33181, 33191, - 33199, 33203, 33211, 33223, 33247, 33287, - 33289, 33301, 33311, 33317, 33329, 33331, - 33343, 33347, 33349, 33353, 33359, 33377, - 33391, 33403, 33409, 33413, 33427, 33457, - 33461, 33469, 33479, 33487, 33493, 33503, - 33521, 33529, 33533, 33547, 33563, 33569, - 33577, 33581, 33587, 33589, 33599, 33601, - 33613, 33617, 33619, 33623, 33629, 33637, - 33641, 33647, 33679, 33703, 33713, 33721, - 33739, 33749, 33751, 33757, 33767, 33769, - 33773, 33791, 33797, 33809, 33811, 33827, - 33829, 33851, 33857, 33863, 33871, 33889, - 33893, 33911, 33923, 33931, 33937, 33941, - 33961, 33967, 33997, 34019, 34031, 34033, - 34039, 34057, 34061, 34123, 34127, 34129, - 34141, 34147, 34157, 34159, 34171, 34183, - 34211, 34213, 34217, 34231, 34253, 34259, - 34261, 34267, 34273, 34283, 34297, 34301, - 34303, 34313, 34319, 34327, 34337, 34351, - 34361, 34367, 34369, 34381, 34403, 34421, - 34429, 34439, 34457, 34469, 34471, 34483, - 34487, 34499, 34501, 34511, 34513, 34519, - 34537, 34543, 34549, 34583, 34589, 34591, - 34603, 34607, 34613, 34631, 34649, 34651, - 34667, 34673, 34679, 34687, 34693, 34703, - 34721, 34729, 34739, 34747, 34757, 34759, - 34763, 34781, 34807, 34819, 34841, 34843, - 34847, 34849, 34871, 34877, 34883, 34897, - 34913, 34919, 34939, 34949, 34961, 34963, - 34981, 35023, 35027, 35051, 35053, 35059, - 35069, 35081, 35083, 35089, 35099, 35107, - 35111, 35117, 35129, 35141, 35149, 35153, - 35159, 35171, 35201, 35221, 35227, 35251, - 35257, 35267, 35279, 35281, 35291, 35311, - 35317, 35323, 35327, 35339, 35353, 35363, - 35381, 35393, 35401, 35407, 35419, 35423, - 35437, 35447, 35449, 35461, 35491, 35507, - 35509, 35521, 35527, 35531, 35533, 35537, - 35543, 35569, 35573, 35591, 35593, 35597, - 35603, 35617, 35671, 35677, 35729, 35731, - 35747, 35753, 35759, 35771, 35797, 35801, - 35803, 35809, 35831, 35837, 35839, 35851, - 35863, 35869, 35879, 35897, 35899, 35911, - 35923, 35933, 35951, 35963, 35969, 35977, - 35983, 35993, 35999, 36007, 36011, 36013, - 36017, 36037, 36061, 36067, 36073, 36083, - 36097, 36107, 36109, 36131, 36137, 36151, - 36161, 36187, 36191, 36209, 36217, 36229, - 36241, 36251, 36263, 36269, 36277, 36293, - 36299, 36307, 36313, 36319, 36341, 36343, - 36353, 36373, 36383, 36389, 36433, 36451, - 36457, 36467, 36469, 36473, 36479, 191, - 36493, 36497, 36523, 36527, 36529, 36541, - 36551, 36559, 36563, 36571, 36583, 36587, - 36599, 36607, 36629, 36637, 36643, 36653, - 36671, 36677, 36683, 36691, 36697, 36709, - 36713, 36721, 36739, 36749, 36761, 36767, - 36779, 36781, 36787, 36791, 36793, 36809, - 36821, 36833, 36847, 36857, 36871, 36877, - 36887, 36899, 36901, 36913, 36919, 36923, - 36929, 36931, 36943, 36947, 36973, 36979, - 36997, 37003, 37013, 37019, 37021, 37039, - 37049, 37057, 37061, 37087, 37097, 37117, - 37123, 37139, 37159, 37171, 37181, 37189, - 37199, 37201, 37217, 37223, 37243, 193, - 37253, 37273, 37277, 37307, 37309, 37313, - 37321, 37337, 37339, 37357, 37361, 37363, - 37369, 37379, 37397, 37409, 37423, 37441, - 37447, 37463, 37483, 37489, 37493, 37501, - 37507, 37511, 37517, 37529, 37537, 37547, - 37549, 37561, 37567, 37571, 37573, 37579, - 37589, 37591, 37607, 37619, 37633, 37643, - 37649, 37657, 37663, 37691, 37693, 37699, - 37717, 37747, 37781, 37783, 37799, 37811, - 37813, 37831, 37847, 37853, 37861, 37871, - 37879, 37889, 37897, 37907, 37951, 37957, - 37963, 37967, 37987, 37991, 37993, 37997, - 38011, 38039, 38047, 38053, 38069, 38083, - 38113, 38119, 38149, 38153, 38167, 38177, - 38183, 38189, 38197, 38201, 38219, 38231, - 38237, 38239, 38261, 38273, 38281, 38287, - 38299, 38303, 38317, 38321, 38327, 38329, - 38333, 38351, 38371, 38377, 38393, 38431, - 38447, 38449, 38453, 38459, 38461, 38501, - 38543, 38557, 38561, 38567, 38569, 38593, - 38603, 38609, 38611, 38629, 38639, 38651, - 38653, 38669, 38671, 38677, 38693, 38699, - 38707, 38711, 38713, 38723, 38729, 38737, - 38747, 38749, 38767, 38783, 38791, 38803, - 197, 38821, 38833, 38839, 38851, 38861, - 38867, 38873, 38891, 38903, 38917, 38921, - 38923, 38933, 38953, 38959, 38971, 38977, - 38993, 39019, 39023, 39041, 39043, 39047, - 39079, 39089, 39097, 39103, 39107, 39113, - 39119, 39133, 39139, 39157, 39161, 39163, - 39181, 39191, 39199, 39209, 39217, 39227, - 39229, 39233, 39239, 39241, 39251, 39293, - 39301, 39313, 39317, 39323, 39341, 39343, - 39359, 39367, 39371, 39373, 39383, 39397, - 39409, 39419, 39439, 39443, 39451, 39461, - 39499, 39503, 39509, 39511, 39521, 39541, - 39551, 39563, 39569, 39581, 199, 39607, - 39619, 39623, 39631, 39659, 39667, 39671, - 39679, 39703, 39709, 39719, 39727, 39733, - 39749, 39761, 39769, 39779, 39791, 39799, - 39821, 39827, 39829, 39839, 39841, 39847, - 39857, 39863, 39869, 39877, 39883, 39887, - 39901, 39929, 39937, 39953, 39971, 39979, - 39983, 39989, 40009, 40013, 40031, 40037, - 40039, 40063, 40087, 40093, 40099, 40111, - 40123, 40127, 40129, 40151, 40153, 40163, - 40169, 40177, 40189, 40193, 40213, 40231, - 40237, 40241, 40253, 40277, 40283, 40289, - 40343, 40351, 40357, 40361, 40387, 40423, - 40427, 40429, 40433, 40459, 40471, 40483, - 40487, 40493, 40499, 40507, 40519, 40529, - 40531, 40543, 40559, 40577, 40583, 40591, - 40597, 40609, 40627, 40637, 40639, 40693, - 40697, 40699, 40709, 40739, 40751, 40759, - 40763, 40771, 40787, 40801, 40813, 40819, - 40823, 40829, 40841, 40847, 40849, 40853, - 40867, 40879, 40883, 40897, 40903, 40927, - 40933, 40939, 40949, 40961, 40973, 40993, - 41011, 41017, 41023, 41039, 41047, 41051, - 41057, 41077, 41081, 41113, 41117, 41131, - 41141, 41143, 41149, 41161, 41177, 41179, - 41183, 41189, 41201, 41203, 41213, 41221, - 41227, 41231, 41233, 41243, 41257, 41263, - 41269, 41281, 41299, 41333, 41341, 41351, - 41357, 41381, 41387, 41389, 41399, 41411, - 41413, 41443, 41453, 41467, 41479, 41491, - 41507, 41513, 41519, 41521, 41539, 41543, - 41549, 41579, 41593, 41597, 41603, 41609, - 41611, 41617, 41621, 41627, 41641, 41647, - 41651, 41659, 41669, 41681, 41687, 41719, - 41729, 41737, 41759, 41761, 41771, 41777, - 41801, 41809, 41813, 41843, 41849, 41851, - 41863, 41879, 41887, 41893, 41897, 41903, - 41911, 41927, 41941, 41947, 41953, 41957, - 41959, 41969, 41981, 41983, 41999, 42013, - 42017, 42019, 42023, 42043, 42061, 42071, - 42073, 42083, 42089, 42101, 42131, 42139, - 42157, 42169, 42179, 42181, 42187, 42193, - 42197, 42209, 42221, 42223, 42227, 42239, - 42257, 42281, 42283, 42293, 42299, 42307, - 42323, 42331, 42337, 42349, 42359, 42373, - 42379, 42391, 42397, 42403, 42407, 42409, - 42433, 42437, 42443, 42451, 42457, 42461, - 42463, 42467, 42473, 42487, 42491, 42499, - 42509, 42533, 42557, 42569, 42571, 42577, - 42589, 42611, 42641, 42643, 42649, 42667, - 42677, 42683, 42689, 42697, 42701, 42703, - 42709, 42719, 42727, 42737, 42743, 42751, - 42767, 42773, 42787, 42793, 42797, 42821, - 42829, 42839, 42841, 42853, 42859, 42863, - 42899, 42901, 42923, 42929, 42937, 42943, - 42953, 42961, 42967, 42979, 42989, 43003, - 43013, 43019, 43037, 43049, 43051, 43063, - 43067, 43093, 43103, 43117, 43133, 43151, - 43159, 43177, 43189, 43201, 43207, 43223, - 43237, 43261, 43271, 43283, 43291, 43313, - 43319, 43321, 43331, 43391, 43397, 43399, - 43403, 43411, 43427, 43441, 43451, 43457, - 43481, 43487, 43499, 43517, 43541, 43543, - 43573, 43577, 43579, 43591, 43597, 43607, - 43609, 43613, 43627, 43633, 43649, 43651, - 43661, 43669, 43691, 43711, 43717, 43721, - 43753, 43759, 43777, 43781, 43783, 43787, - 43789, 43793, 43801, 43853, 43867, 43889, - 43891, 43913, 43933, 43943, 43951, 43961, - 43963, 43969, 43973, 43987, 43991, 43997, - 44017, 44021, 44027, 44029, 44041, 44053, - 44059, 44071, 44087, 44089, 44101, 44111, - 44119, 44123, 44129, 44131, 44159, 44171, - 44179, 44189, 44201, 44203, 44207, 44221, - 44249, 44257, 44263, 44267, 44269, 44273, - 44279, 44281, 44293, 44351, 44357, 44371, - 44381, 44383, 44389, 44417, 44449, 44453, - 44483, 44491, 44497, 44501, 44507, 44519, - 211, 44531, 44533, 44537, 44543, 44549, - 44563, 44579, 44587, 44617, 44621, 44623, - 44633, 44641, 44647, 44651, 44657, 44683, - 44687, 44699, 44701, 44711, 44729, 44741, - 44753, 44771, 44773, 44777, 44789, 44797, - 44809, 44819, 44839, 44843, 44851, 44867, - 44879, 44887, 44893, 44909, 44917, 44927, - 44939, 44953, 44959, 44963, 44971, 44983, - 44987, 45007, 45013, 45053, 45061, 45077, - 45083, 45119, 45121, 45127, 45131, 45137, - 45139, 45161, 45179, 45181, 45191, 45197, - 45233, 45247, 45259, 45263, 45281, 45289, - 45293, 45307, 45317, 45319, 45329, 45337, - 45341, 45343, 45361, 45377, 45389, 45403, - 45413, 45427, 45433, 45439, 45481, 45491, - 45497, 45503, 45523, 45533, 45541, 45553, - 45557, 45569, 45587, 45589, 45599, 45613, - 45631, 45641, 45659, 45667, 45673, 45677, - 45691, 45697, 45707, 45737, 45751, 45757, - 45763, 45767, 45779, 45817, 45821, 45823, - 45827, 45833, 45841, 45853, 45863, 45869, - 45887, 45893, 45943, 45949, 45953, 45959, - 45971, 45979, 45989, 46021, 46027, 46049, - 46051, 46061, 46073, 46091, 46093, 46099, - 46103, 46133, 46141, 46147, 46153, 46171, - 46181, 46183, 46187, 46199, 46219, 46229, - 46237, 46261, 46271, 46273, 46279, 46301, - 46307, 46309, 46327, 46337, 46349, 46351, - 46381, 46399, 46411, 46439, 46441, 46447, - 46451, 46457, 46471, 46477, 46489, 46499, - 46507, 46511, 46523, 46549, 46559, 46567, - 46573, 46589, 46591, 46601, 46619, 46633, - 46639, 46643, 46649, 46663, 46679, 46681, - 46687, 46691, 46703, 46723, 46727, 46747, - 46751, 46757, 46769, 46771, 46807, 46811, - 46817, 46819, 46829, 46831, 46853, 46861, - 46867, 46877, 46889, 46901, 46919, 46933, - 46957, 46993, 46997, 47017, 47041, 47051, - 47057, 47059, 47087, 47093, 47111, 47119, - 47123, 47129, 47137, 47143, 47147, 47149, - 47161, 47189, 47207, 47221, 47237, 47251, - 47269, 47279, 47287, 47293, 47297, 47303, - 47309, 47317, 47339, 47351, 47353, 47363, - 47381, 47387, 47389, 47407, 47417, 47419, - 47431, 47441, 47459, 47491, 47497, 47501, - 47507, 47513, 47521, 47527, 47533, 47543, - 47563, 47569, 47581, 47591, 47599, 47609, - 47623, 47629, 47639, 47653, 47657, 47659, - 47681, 47699, 47701, 47711, 47713, 47717, - 47737, 47741, 47743, 47777, 47779, 47791, - 47797, 47807, 47809, 47819, 47837, 47843, - 47857, 47869, 47881, 47903, 47911, 47917, - 47933, 47939, 47947, 47951, 47963, 47969, - 47977, 47981, 48017, 48023, 48029, 48049, - 48073, 48079, 48091, 48109, 48119, 48121, - 48131, 48157, 48163, 48179, 48187, 48193, - 48197, 48221, 48239, 48247, 48259, 48271, - 48281, 48299, 48311, 48313, 48337, 48341, - 48353, 48371, 48383, 48397, 48407, 48409, - 48413, 48437, 48449, 48463, 48473, 48479, - 48481, 48487, 48491, 48497, 48523, 48527, - 48533, 48539, 48541, 48563, 48571, 48589, - 48593, 48611, 48619, 48623, 48647, 48649, - 48661, 48673, 48677, 48679, 48731, 48733, - 48751, 48757, 48761, 48767, 48779, 48781, - 48787, 48799, 48809, 48817, 48821, 48823, - 48847, 48857, 48859, 48869, 48871, 48883, - 48889, 48907, 48947, 48953, 48973, 48989, - 48991, 49003, 49009, 49019, 49031, 49033, - 49037, 49043, 49057, 49069, 49081, 49103, - 49109, 49117, 49121, 49123, 49139, 49157, - 49169, 49171, 49177, 49193, 49199, 49201, - 49207, 49211, 49223, 49253, 49261, 49277, - 49279, 49297, 49307, 49331, 49333, 49339, - 49363, 49367, 49369, 49391, 49393, 49409, - 49411, 49417, 49429, 49433, 49451, 49459, - 49463, 49477, 49481, 49499, 49523, 49529, - 49531, 49537, 49547, 49549, 49559, 49597, - 49603, 49613, 49627, 49633, 49639, 49663, - 49667, 49669, 49681, 49697, 49711, 49727, - 223, 49739, 49741, 49747, 49757, 49783, - 49787, 49789, 49801, 49807, 49811, 49823, - 49831, 49843, 49853, 49871, 49877, 49891, - 49919, 49921, 49927, 49937, 49939, 49943, - 49957, 49991, 49993, 49999, 50021, 50023, - 50033, 50047, 50051, 50053, 50069, 50077, - 50087, 50093, 50101, 50111, 50119, 50123, - 50129, 50131, 50147, 50153, 50159, 50177, - 50207, 50221, 50227, 50231, 50261, 50263, - 50273, 50287, 50291, 50311, 50321, 50329, - 50333, 50341, 50359, 50363, 50377, 50383, - 50387, 50411, 50417, 50423, 50441, 50459, - 50461, 50497, 50503, 50513, 50527, 50539, - 50543, 50549, 50551, 50581, 50587, 50591, - 50593, 50599, 50627, 50647, 50651, 37, - 50671, 50683, 50707, 50723, 50741, 50753, - 50767, 50773, 50777, 50789, 50821, 50833, - 50839, 50849, 50857, 50867, 50873, 50891, - 50893, 50909, 50923, 50929, 50951, 50957, - 50969, 50971, 50989, 50993, 51001, 51031, - 51043, 51047, 51059, 51061, 51071, 51109, - 51131, 51133, 51137, 51151, 51157, 51169, - 51193, 51197, 51199, 51203, 51217, 51229, - 51239, 51241, 51257, 51263, 51283, 51287, - 51307, 51329, 51341, 51343, 51347, 51349, - 51361, 51383, 51407, 51413, 51419, 51421, - 51427, 51431, 51437, 51439, 51449, 51461, - 51473, 51479, 51481, 51487, 51503, 51511, - 51517, 51521, 227, 51539, 51551, 51563, - 51577, 51581, 51593, 51599, 51607, 51613, - 51631, 51637, 51647, 51659, 51673, 51679, - 51683, 51691, 51713, 51719, 51721, 51749, - 51767, 51769, 51787, 51797, 51803, 51817, - 51827, 51829, 51839, 51853, 51859, 51869, - 51871, 51893, 51899, 51907, 51913, 51929, - 51941, 51949, 51971, 51973, 51977, 51991, - 52009, 52021, 52027, 52051, 52057, 52067, - 52069, 52081, 52103, 52121, 52127, 52147, - 52153, 52163, 52177, 52181, 52183, 52189, - 52201, 52223, 52237, 52249, 52253, 52259, - 52267, 52289, 52291, 52301, 52313, 52321, - 52361, 52363, 52369, 52379, 52387, 52391, - 52433, 229, 52453, 52457, 52489, 52501, - 52511, 52517, 52529, 52541, 52543, 52553, - 52561, 52567, 52571, 52579, 52583, 52609, - 52627, 52631, 52639, 52667, 52673, 52691, - 52697, 52709, 52711, 52721, 52727, 52733, - 52747, 52757, 52769, 52783, 52807, 52813, - 52817, 52837, 52859, 52861, 52879, 52883, - 52889, 52901, 52903, 52919, 52937, 52951, - 52957, 52963, 52967, 52973, 52981, 52999, - 53003, 53017, 53047, 53051, 53069, 53077, - 53087, 53089, 53093, 53101, 53113, 53117, - 53129, 53147, 53149, 53161, 53171, 53173, - 53189, 53197, 53201, 53231, 53233, 53239, - 53267, 53269, 53279, 53281, 53299, 53309, - 53323, 53327, 53353, 53359, 53377, 53381, - 53401, 53407, 53411, 53419, 53437, 53441, - 53453, 53479, 53503, 53507, 53527, 53549, - 53551, 53569, 53591, 53593, 53597, 53609, - 53611, 53617, 53623, 53629, 53633, 53639, - 53653, 53657, 53681, 53693, 53699, 53717, - 53719, 53731, 53759, 53773, 53777, 53783, - 53791, 53813, 53819, 53831, 53849, 53857, - 53861, 53881, 53887, 53891, 53897, 53899, - 53917, 53923, 53927, 53939, 53951, 53959, - 53987, 53993, 54001, 54011, 54013, 54037, - 54049, 54059, 54083, 54091, 54101, 54121, - 54133, 54139, 54151, 54163, 54167, 54181, - 54193, 54217, 54251, 54269, 54277, 54287, - 233, 54293, 54311, 54319, 54323, 54331, - 54347, 54361, 54367, 54371, 54377, 54401, - 54403, 54409, 54413, 54419, 54421, 54437, - 54443, 54449, 54469, 54493, 54497, 54499, - 54503, 54517, 54521, 54539, 54541, 54547, - 54559, 54563, 54577, 54581, 54583, 54601, - 54617, 54623, 54629, 54631, 54647, 54667, - 54673, 54679, 54709, 54713, 54721, 54727, - 54751, 54767, 54773, 54779, 54787, 54799, - 54829, 54833, 54851, 54869, 54877, 54881, - 54907, 54917, 54919, 54941, 54949, 54959, - 54973, 54979, 54983, 55001, 55009, 55021, - 55049, 55051, 55057, 55061, 55073, 55079, - 55103, 55109, 55117, 55127, 55147, 55163, - 55171, 55201, 55207, 55213, 55217, 55219, - 55229, 55243, 55249, 55259, 55291, 55313, - 55331, 55333, 55337, 55339, 55343, 55351, - 55373, 55381, 55399, 55411, 55439, 55441, - 55457, 55469, 55487, 55501, 55511, 55529, - 55541, 55547, 55579, 55589, 55603, 55609, - 55619, 55621, 55631, 55633, 55639, 55661, - 55663, 55667, 55673, 55681, 55691, 55697, - 55711, 55717, 55721, 55733, 55763, 55787, - 55793, 55799, 55807, 55813, 55817, 55819, - 55823, 55829, 55837, 55843, 55849, 55871, - 55889, 55897, 55901, 55903, 55921, 55927, - 55931, 55933, 55949, 55967, 55987, 55997, - 56003, 56009, 56039, 56041, 56053, 56081, - 56087, 56093, 56099, 56101, 56113, 56123, - 56131, 56149, 56167, 56171, 56179, 56197, - 56207, 56209, 56237, 56239, 56249, 56263, - 56267, 56269, 56299, 56311, 56333, 56359, - 56369, 56377, 56383, 56393, 56401, 56417, - 56431, 56437, 56443, 56453, 56467, 56473, - 56477, 56479, 56489, 56501, 56503, 56509, - 56519, 56527, 56531, 56533, 56543, 56569, - 56591, 56597, 56599, 56611, 56629, 56633, - 56659, 56663, 56671, 56681, 56687, 56701, - 56711, 56713, 56731, 56737, 56747, 56767, - 56773, 56779, 56783, 56807, 56809, 56813, - 56821, 56827, 56843, 56857, 56873, 56891, - 56893, 56897, 56909, 56911, 56921, 56923, - 56929, 56941, 56951, 56957, 56963, 56983, - 56989, 56993, 56999, 57037, 57041, 57047, - 57059, 57073, 57077, 57089, 57097, 57107, - 57119, 239, 57131, 57139, 57143, 57149, - 57163, 57173, 57179, 57191, 57193, 57203, - 57221, 57223, 57241, 57251, 57259, 57269, - 57271, 57283, 57287, 57301, 57329, 57331, - 57347, 57349, 57367, 57373, 57383, 57389, - 57397, 57413, 57427, 57457, 57467, 57487, - 57493, 57503, 57527, 57529, 57557, 57559, - 57571, 57587, 57593, 57601, 57637, 57641, - 57649, 57653, 57667, 57679, 57689, 57697, - 57709, 57713, 57719, 57727, 57731, 57737, - 57751, 57773, 57781, 57787, 57791, 57793, - 57803, 57809, 57829, 57839, 57847, 57853, - 57859, 57881, 57899, 57901, 57917, 57923, - 57943, 57947, 57973, 57977, 57991, 58013, - 58027, 58031, 58043, 58049, 58057, 58061, - 58067, 58073, 241, 58099, 58109, 58111, - 58129, 58147, 58151, 58153, 58169, 58171, - 58189, 58193, 58199, 58207, 58211, 58217, - 58229, 58231, 58237, 58243, 58271, 58309, - 58313, 58321, 58337, 58363, 58367, 58369, - 58379, 58391, 58393, 58403, 58411, 58417, - 58427, 58439, 58441, 58451, 58453, 58477, - 58481, 58511, 58537, 58543, 58549, 58567, - 58573, 58579, 58601, 58603, 58613, 58631, - 58657, 58661, 58679, 58687, 58693, 58699, - 58711, 58727, 58733, 58741, 58757, 58763, - 58771, 58787, 58789, 58831, 58889, 58897, - 58901, 58907, 58909, 58913, 58921, 58937, - 58943, 58963, 58967, 58979, 58991, 58997, - 59009, 59011, 59021, 59023, 59029, 3, - 59051, 59053, 59063, 59069, 59077, 59083, - 59093, 59107, 59113, 59119, 59123, 59141, - 59149, 59159, 59167, 59183, 59197, 59207, - 59209, 59219, 59221, 59233, 59239, 59243, - 59263, 59273, 59281, 59333, 59341, 59351, - 59357, 59359, 59369, 59377, 59387, 59393, - 59399, 59407, 59417, 59419, 59441, 59443, - 59447, 59453, 59467, 59471, 59473, 59497, - 59509, 59513, 59539, 59557, 59561, 59567, - 59581, 59611, 59617, 59621, 59627, 59629, - 59651, 59659, 59663, 59669, 59671, 59693, - 59699, 59707, 59723, 59729, 59743, 59747, - 59753, 59771, 59779, 59791, 59797, 59809, - 59833, 59863, 59879, 59887, 59921, 59929, - 59951, 59957, 59971, 59981, 59999, 60013, - 60017, 60029, 60037, 60041, 60077, 60083, - 60089, 60091, 60101, 60103, 60107, 60127, - 60133, 60139, 60149, 60161, 60167, 60169, - 60209, 60217, 60223, 60251, 60257, 60259, - 60271, 60289, 60293, 60317, 60331, 60337, - 60343, 60353, 60373, 60383, 60397, 60413, - 60427, 60443, 60449, 60457, 60493, 60497, - 60509, 60521, 60527, 60539, 60589, 60601, - 60607, 60611, 60617, 60623, 60631, 60637, - 60647, 60649, 60659, 60661, 60679, 60689, - 60703, 60719, 60727, 60733, 60737, 60757, - 60761, 60763, 60773, 60779, 60793, 60811, - 60821, 60859, 60869, 60887, 60889, 60899, - 60901, 60913, 60917, 60919, 60923, 60937, - 60943, 60953, 60961, 61001, 61007, 61027, - 61031, 61043, 61051, 61057, 61091, 61099, - 61121, 61129, 61141, 61151, 61153, 61169, - 61211, 61223, 61231, 61253, 61261, 61283, - 61291, 61297, 61331, 61333, 61339, 61343, - 61357, 61363, 61379, 61381, 61403, 61409, - 61417, 61441, 61463, 61469, 61471, 61483, - 61487, 61493, 61507, 61511, 61519, 61543, - 61547, 61553, 61559, 61561, 61583, 61603, - 61609, 61613, 61627, 61631, 61637, 61643, - 61651, 61657, 61667, 61673, 61681, 61687, - 61703, 61717, 61723, 61729, 61751, 61757, - 61781, 61813, 61819, 61837, 61843, 61861, - 61871, 61879, 61909, 61927, 61933, 61949, - 61961, 61967, 61979, 61981, 61987, 61991, - 62003, 62011, 62017, 62039, 62047, 62053, - 62057, 62071, 62081, 62099, 62119, 62129, - 62131, 62137, 62141, 62143, 62171, 62189, - 62191, 62201, 62207, 62213, 62219, 62233, - 62273, 62297, 62299, 62303, 62311, 62323, - 62327, 62347, 62351, 62383, 62401, 62417, - 62423, 62459, 62467, 62473, 62477, 62483, - 62497, 62501, 62507, 62533, 62539, 62549, - 62563, 62581, 62591, 62597, 62603, 62617, - 62627, 62633, 62639, 62653, 62659, 62683, - 62687, 62701, 62723, 62731, 62743, 62753, - 62761, 62773, 62791, 62801, 62819, 62827, - 62851, 62861, 62869, 62873, 62897, 62903, - 62921, 62927, 62929, 62939, 62969, 62971, - 62981, 62983, 62987, 62989, 251, 63029, - 63031, 63059, 63067, 63073, 63079, 63097, - 63103, 63113, 63127, 63131, 63149, 63179, - 63197, 63199, 63211, 63241, 63247, 63277, - 63281, 63299, 63311, 63313, 63317, 63331, - 63337, 63347, 63353, 63361, 63367, 63377, - 63389, 63391, 63397, 63409, 63419, 63421, - 63439, 63443, 63463, 63467, 63473, 63487, - 63493, 63499, 63521, 63527, 63533, 63541, - 63559, 63577, 63587, 63589, 63599, 63601, - 63607, 63611, 63617, 63629, 63647, 63649, - 63659, 63667, 63671, 63689, 63691, 63697, - 63703, 63709, 63719, 63727, 63737, 63743, - 63761, 63773, 63781, 63793, 63799, 63803, - 63809, 63823, 63839, 63841, 63853, 63857, - 63863, 63901, 63907, 63913, 63929, 63949, - 63977, 63997, 64007, 64013, 64019, 64033, - 64037, 64063, 64067, 64081, 64091, 64109, - 64123, 64151, 64153, 64157, 64171, 64187, - 64189, 64217, 64223, 64231, 64237, 64271, - 64279, 64283, 64301, 64303, 64319, 64327, - 64333, 64373, 64381, 64399, 64403, 64433, - 64439, 64451, 64453, 64483, 64489, 64499, - 64513, 64553, 64567, 64577, 64579, 64591, - 64601, 64609, 64613, 64621, 64627, 64633, - 64661, 64663, 64667, 64679, 64693, 64709, - 64717, 64747, 64763, 64781, 64783, 64793, - 64811, 64817, 64849, 64853, 64871, 64877, - 64879, 64891, 64901, 64919, 64921, 64927, - 64937, 64951, 64969, 64997, 65003, 65011, - 65027, 65029, 65033, 65053, 65063, 65071, - 65089, 65099, 65101, 65111, 65119, 65123, - 65129, 65141, 65147, 65167, 65171, 65173, - 65179, 65183, 65203, 65213, 65239, 65257, - 65267, 65269, 65287, 65293, 65309, 65323, - 65327, 65353, 65357, 65371, 65381, 65393, - 65407, 65413, 65419, 65423, 65437, 65447, - 65449, 65479, 65497, 65519, 65521, 2, - }; - -const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1] = { - 0, 2, 3, 4, 5, 7, - 8, 9, 11, 13, 16, 17, - 19, 23, 25, 27, 29, 31, - 32, 37, 41, 43, 47, 49, - 53, 59, 61, 64, 67, 71, - 73, 79, 81, 83, 89, 97, - 101, 103, 107, 109, 113, 121, - 125, 127, 128, 131, 137, 139, - 149, 151, 157, 163, 167, 169, - 173, 179, 181, 191, 193, 197, - 199, 211, 223, 227, 229, 233, - 239, 241, 243, 251, 256, 257, - 263, 269, 271, 277, 281, 283, - 289, 293, 307, 311, 313, 317, - 331, 337, 343, 347, 349, 353, - 359, 361, 367, 373, 379, 383, - 389, 397, 401, 409, 419, 421, - 431, 433, 439, 443, 449, 457, - 461, 463, 467, 479, 487, 491, - 499, 503, 509, 512, 521, 523, - 529, 541, 547, 557, 563, 569, - 571, 577, 587, 593, 599, 601, - 607, 613, 617, 619, 625, 631, - 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, - 719, 727, 729, 733, 739, 743, - 751, 757, 761, 769, 773, 787, - 797, 809, 811, 821, 823, 827, - 829, 839, 841, 853, 857, 859, - 863, 877, 881, 883, 887, 907, - 911, 919, 929, 937, 941, 947, - 953, 961, 967, 971, 977, 983, - 991, 997, 1009, 1013, 1019, 1021, - 1024, 1031, 1033, 1039, 1049, 1051, - 1061, 1063, 1069, 1087, 1091, 1093, - 1097, 1103, 1109, 1117, 1123, 1129, - 1151, 1153, 1163, 1171, 1181, 1187, - 1193, 1201, 1213, 1217, 1223, 1229, - 1231, 1237, 1249, 1259, 1277, 1279, - 1283, 1289, 1291, 1297, 1301, 1303, - 1307, 1319, 1321, 1327, 1331, 1361, - 1367, 1369, 1373, 1381, 1399, 1409, - 1423, 1427, 1429, 1433, 1439, 1447, - 1451, 1453, 1459, 1471, 1481, 1483, - 1487, 1489, 1493, 1499, 1511, 1523, - 1531, 1543, 1549, 1553, 1559, 1567, - 1571, 1579, 1583, 1597, 1601, 1607, - 1609, 1613, 1619, 1621, 1627, 1637, - 1657, 1663, 1667, 1669, 1681, 1693, - 1697, 1699, 1709, 1721, 1723, 1733, - 1741, 1747, 1753, 1759, 1777, 1783, - 1787, 1789, 1801, 1811, 1823, 1831, - 1847, 1849, 1861, 1867, 1871, 1873, - 1877, 1879, 1889, 1901, 1907, 1913, - 1931, 1933, 1949, 1951, 1973, 1979, - 1987, 1993, 1997, 1999, 2003, 2011, - 2017, 2027, 2029, 2039, 2048, 2053, - 2063, 2069, 2081, 2083, 2087, 2089, - 2099, 2111, 2113, 2129, 2131, 2137, - 2141, 2143, 2153, 2161, 2179, 2187, - 2197, 2203, 2207, 2209, 2213, 2221, - 2237, 2239, 2243, 2251, 2267, 2269, - 2273, 2281, 2287, 2293, 2297, 2309, - 2311, 2333, 2339, 2341, 2347, 2351, - 2357, 2371, 2377, 2381, 2383, 2389, - 2393, 2399, 2401, 2411, 2417, 2423, - 2437, 2441, 2447, 2459, 2467, 2473, - 2477, 2503, 2521, 2531, 2539, 2543, - 2549, 2551, 2557, 2579, 2591, 2593, - 2609, 2617, 2621, 2633, 2647, 2657, - 2659, 2663, 2671, 2677, 2683, 2687, - 2689, 2693, 2699, 2707, 2711, 2713, - 2719, 2729, 2731, 2741, 2749, 2753, - 2767, 2777, 2789, 2791, 2797, 2801, - 2803, 2809, 2819, 2833, 2837, 2843, - 2851, 2857, 2861, 2879, 2887, 2897, - 2903, 2909, 2917, 2927, 2939, 2953, - 2957, 2963, 2969, 2971, 2999, 3001, - 3011, 3019, 3023, 3037, 3041, 3049, - 3061, 3067, 3079, 3083, 3089, 3109, - 3119, 3121, 3125, 3137, 3163, 3167, - 3169, 3181, 3187, 3191, 3203, 3209, - 3217, 3221, 3229, 3251, 3253, 3257, - 3259, 3271, 3299, 3301, 3307, 3313, - 3319, 3323, 3329, 3331, 3343, 3347, - 3359, 3361, 3371, 3373, 3389, 3391, - 3407, 3413, 3433, 3449, 3457, 3461, - 3463, 3467, 3469, 3481, 3491, 3499, - 3511, 3517, 3527, 3529, 3533, 3539, - 3541, 3547, 3557, 3559, 3571, 3581, - 3583, 3593, 3607, 3613, 3617, 3623, - 3631, 3637, 3643, 3659, 3671, 3673, - 3677, 3691, 3697, 3701, 3709, 3719, - 3721, 3727, 3733, 3739, 3761, 3767, - 3769, 3779, 3793, 3797, 3803, 3821, - 3823, 3833, 3847, 3851, 3853, 3863, - 3877, 3881, 3889, 3907, 3911, 3917, - 3919, 3923, 3929, 3931, 3943, 3947, - 3967, 3989, 4001, 4003, 4007, 4013, - 4019, 4021, 4027, 4049, 4051, 4057, - 4073, 4079, 4091, 4093, 4096, 4099, - 4111, 4127, 4129, 4133, 4139, 4153, - 4157, 4159, 4177, 4201, 4211, 4217, - 4219, 4229, 4231, 4241, 4243, 4253, - 4259, 4261, 4271, 4273, 4283, 4289, - 4297, 4327, 4337, 4339, 4349, 4357, - 4363, 4373, 4391, 4397, 4409, 4421, - 4423, 4441, 4447, 4451, 4457, 4463, - 4481, 4483, 4489, 4493, 4507, 4513, - 4517, 4519, 4523, 4547, 4549, 4561, - 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4639, 4643, 4649, 4651, 4657, - 4663, 4673, 4679, 4691, 4703, 4721, - 4723, 4729, 4733, 4751, 4759, 4783, - 4787, 4789, 4793, 4799, 4801, 4813, - 4817, 4831, 4861, 4871, 4877, 4889, - 4903, 4909, 4913, 4919, 4931, 4933, - 4937, 4943, 4951, 4957, 4967, 4969, - 4973, 4987, 4993, 4999, 5003, 5009, - 5011, 5021, 5023, 5039, 5041, 5051, - 5059, 5077, 5081, 5087, 5099, 5101, - 5107, 5113, 5119, 5147, 5153, 5167, - 5171, 5179, 5189, 5197, 5209, 5227, - 5231, 5233, 5237, 5261, 5273, 5279, - 5281, 5297, 5303, 5309, 5323, 5329, - 5333, 5347, 5351, 5381, 5387, 5393, - 5399, 5407, 5413, 5417, 5419, 5431, - 5437, 5441, 5443, 5449, 5471, 5477, - 5479, 5483, 5501, 5503, 5507, 5519, - 5521, 5527, 5531, 5557, 5563, 5569, - 5573, 5581, 5591, 5623, 5639, 5641, - 5647, 5651, 5653, 5657, 5659, 5669, - 5683, 5689, 5693, 5701, 5711, 5717, - 5737, 5741, 5743, 5749, 5779, 5783, - 5791, 5801, 5807, 5813, 5821, 5827, - 5839, 5843, 5849, 5851, 5857, 5861, - 5867, 5869, 5879, 5881, 5897, 5903, - 5923, 5927, 5939, 5953, 5981, 5987, - 6007, 6011, 6029, 6037, 6043, 6047, - 6053, 6067, 6073, 6079, 6089, 6091, - 6101, 6113, 6121, 6131, 6133, 6143, - 6151, 6163, 6173, 6197, 6199, 6203, - 6211, 6217, 6221, 6229, 6241, 6247, - 6257, 6263, 6269, 6271, 6277, 6287, - 6299, 6301, 6311, 6317, 6323, 6329, - 6337, 6343, 6353, 6359, 6361, 6367, - 6373, 6379, 6389, 6397, 6421, 6427, - 6449, 6451, 6469, 6473, 6481, 6491, - 6521, 6529, 6547, 6551, 6553, 6561, - 6563, 6569, 6571, 6577, 6581, 6599, - 6607, 6619, 6637, 6653, 6659, 6661, - 6673, 6679, 6689, 6691, 6701, 6703, - 6709, 6719, 6733, 6737, 6761, 6763, - 6779, 6781, 6791, 6793, 6803, 6823, - 6827, 6829, 6833, 6841, 6857, 6859, - 6863, 6869, 6871, 6883, 6889, 6899, - 6907, 6911, 6917, 6947, 6949, 6959, - 6961, 6967, 6971, 6977, 6983, 6991, - 6997, 7001, 7013, 7019, 7027, 7039, - 7043, 7057, 7069, 7079, 7103, 7109, - 7121, 7127, 7129, 7151, 7159, 7177, - 7187, 7193, 7207, 7211, 7213, 7219, - 7229, 7237, 7243, 7247, 7253, 7283, - 7297, 7307, 7309, 7321, 7331, 7333, - 7349, 7351, 7369, 7393, 7411, 7417, - 7433, 7451, 7457, 7459, 7477, 7481, - 7487, 7489, 7499, 7507, 7517, 7523, - 7529, 7537, 7541, 7547, 7549, 7559, - 7561, 7573, 7577, 7583, 7589, 7591, - 7603, 7607, 7621, 7639, 7643, 7649, - 7669, 7673, 7681, 7687, 7691, 7699, - 7703, 7717, 7723, 7727, 7741, 7753, - 7757, 7759, 7789, 7793, 7817, 7823, - 7829, 7841, 7853, 7867, 7873, 7877, - 7879, 7883, 7901, 7907, 7919, 7921, - 7927, 7933, 7937, 7949, 7951, 7963, - 7993, 8009, 8011, 8017, 8039, 8053, - 8059, 8069, 8081, 8087, 8089, 8093, - 8101, 8111, 8117, 8123, 8147, 8161, - 8167, 8171, 8179, 8191, 8192, 8209, - 8219, 8221, 8231, 8233, 8237, 8243, - 8263, 8269, 8273, 8287, 8291, 8293, - 8297, 8311, 8317, 8329, 8353, 8363, - 8369, 8377, 8387, 8389, 8419, 8423, - 8429, 8431, 8443, 8447, 8461, 8467, - 8501, 8513, 8521, 8527, 8537, 8539, - 8543, 8563, 8573, 8581, 8597, 8599, - 8609, 8623, 8627, 8629, 8641, 8647, - 8663, 8669, 8677, 8681, 8689, 8693, - 8699, 8707, 8713, 8719, 8731, 8737, - 8741, 8747, 8753, 8761, 8779, 8783, - 8803, 8807, 8819, 8821, 8831, 8837, - 8839, 8849, 8861, 8863, 8867, 8887, - 8893, 8923, 8929, 8933, 8941, 8951, - 8963, 8969, 8971, 8999, 9001, 9007, - 9011, 9013, 9029, 9041, 9043, 9049, - 9059, 9067, 9091, 9103, 9109, 9127, - 9133, 9137, 9151, 9157, 9161, 9173, - 9181, 9187, 9199, 9203, 9209, 9221, - 9227, 9239, 9241, 9257, 9277, 9281, - 9283, 9293, 9311, 9319, 9323, 9337, - 9341, 9343, 9349, 9371, 9377, 9391, - 9397, 9403, 9409, 9413, 9419, 9421, - 9431, 9433, 9437, 9439, 9461, 9463, - 9467, 9473, 9479, 9491, 9497, 9511, - 9521, 9533, 9539, 9547, 9551, 9587, - 9601, 9613, 9619, 9623, 9629, 9631, - 9643, 9649, 9661, 9677, 9679, 9689, - 9697, 9719, 9721, 9733, 9739, 9743, - 9749, 9767, 9769, 9781, 9787, 9791, - 9803, 9811, 9817, 9829, 9833, 9839, - 9851, 9857, 9859, 9871, 9883, 9887, - 9901, 9907, 9923, 9929, 9931, 9941, - 9949, 9967, 9973, 10007, 10009, 10037, - 10039, 10061, 10067, 10069, 10079, 10091, - 10093, 10099, 10103, 10111, 10133, 10139, - 10141, 10151, 10159, 10163, 10169, 10177, - 10181, 10193, 10201, 10211, 10223, 10243, - 10247, 10253, 10259, 10267, 10271, 10273, - 10289, 10301, 10303, 10313, 10321, 10331, - 10333, 10337, 10343, 10357, 10369, 10391, - 10399, 10427, 10429, 10433, 10453, 10457, - 10459, 10463, 10477, 10487, 10499, 10501, - 10513, 10529, 10531, 10559, 10567, 10589, - 10597, 10601, 10607, 10609, 10613, 10627, - 10631, 10639, 10651, 10657, 10663, 10667, - 10687, 10691, 10709, 10711, 10723, 10729, - 10733, 10739, 10753, 10771, 10781, 10789, - 10799, 10831, 10837, 10847, 10853, 10859, - 10861, 10867, 10883, 10889, 10891, 10903, - 10909, 10937, 10939, 10949, 10957, 10973, - 10979, 10987, 10993, 11003, 11027, 11047, - 11057, 11059, 11069, 11071, 11083, 11087, - 11093, 11113, 11117, 11119, 11131, 11149, - 11159, 11161, 11171, 11173, 11177, 11197, - 11213, 11239, 11243, 11251, 11257, 11261, - 11273, 11279, 11287, 11299, 11311, 11317, - 11321, 11329, 11351, 11353, 11369, 11383, - 11393, 11399, 11411, 11423, 11437, 11443, - 11447, 11449, 11467, 11471, 11483, 11489, - 11491, 11497, 11503, 11519, 11527, 11549, - 11551, 11579, 11587, 11593, 11597, 11617, - 11621, 11633, 11657, 11677, 11681, 11689, - 11699, 11701, 11717, 11719, 11731, 11743, - 11777, 11779, 11783, 11789, 11801, 11807, - 11813, 11821, 11827, 11831, 11833, 11839, - 11863, 11867, 11881, 11887, 11897, 11903, - 11909, 11923, 11927, 11933, 11939, 11941, - 11953, 11959, 11969, 11971, 11981, 11987, - 12007, 12011, 12037, 12041, 12043, 12049, - 12071, 12073, 12097, 12101, 12107, 12109, - 12113, 12119, 12143, 12149, 12157, 12161, - 12163, 12167, 12197, 12203, 12211, 12227, - 12239, 12241, 12251, 12253, 12263, 12269, - 12277, 12281, 12289, 12301, 12323, 12329, - 12343, 12347, 12373, 12377, 12379, 12391, - 12401, 12409, 12413, 12421, 12433, 12437, - 12451, 12457, 12473, 12479, 12487, 12491, - 12497, 12503, 12511, 12517, 12527, 12539, - 12541, 12547, 12553, 12569, 12577, 12583, - 12589, 12601, 12611, 12613, 12619, 12637, - 12641, 12647, 12653, 12659, 12671, 12689, - 12697, 12703, 12713, 12721, 12739, 12743, - 12757, 12763, 12769, 12781, 12791, 12799, - 12809, 12821, 12823, 12829, 12841, 12853, - 12889, 12893, 12899, 12907, 12911, 12917, - 12919, 12923, 12941, 12953, 12959, 12967, - 12973, 12979, 12983, 13001, 13003, 13007, - 13009, 13033, 13037, 13043, 13049, 13063, - 13093, 13099, 13103, 13109, 13121, 13127, - 13147, 13151, 13159, 13163, 13171, 13177, - 13183, 13187, 13217, 13219, 13229, 13241, - 13249, 13259, 13267, 13291, 13297, 13309, - 13313, 13327, 13331, 13337, 13339, 13367, - 13381, 13397, 13399, 13411, 13417, 13421, - 13441, 13451, 13457, 13463, 13469, 13477, - 13487, 13499, 13513, 13523, 13537, 13553, - 13567, 13577, 13591, 13597, 13613, 13619, - 13627, 13633, 13649, 13669, 13679, 13681, - 13687, 13691, 13693, 13697, 13709, 13711, - 13721, 13723, 13729, 13751, 13757, 13759, - 13763, 13781, 13789, 13799, 13807, 13829, - 13831, 13841, 13859, 13873, 13877, 13879, - 13883, 13901, 13903, 13907, 13913, 13921, - 13931, 13933, 13963, 13967, 13997, 13999, - 14009, 14011, 14029, 14033, 14051, 14057, - 14071, 14081, 14083, 14087, 14107, 14143, - 14149, 14153, 14159, 14173, 14177, 14197, - 14207, 14221, 14243, 14249, 14251, 14281, - 14293, 14303, 14321, 14323, 14327, 14341, - 14347, 14369, 14387, 14389, 14401, 14407, - 14411, 14419, 14423, 14431, 14437, 14447, - 14449, 14461, 14479, 14489, 14503, 14519, - 14533, 14537, 14543, 14549, 14551, 14557, - 14561, 14563, 14591, 14593, 14621, 14627, - 14629, 14633, 14639, 14641, 14653, 14657, - 14669, 14683, 14699, 14713, 14717, 14723, - 14731, 14737, 14741, 14747, 14753, 14759, - 14767, 14771, 14779, 14783, 14797, 14813, - 14821, 14827, 14831, 14843, 14851, 14867, - 14869, 14879, 14887, 14891, 14897, 14923, - 14929, 14939, 14947, 14951, 14957, 14969, - 14983, 15013, 15017, 15031, 15053, 15061, - 15073, 15077, 15083, 15091, 15101, 15107, - 15121, 15131, 15137, 15139, 15149, 15161, - 15173, 15187, 15193, 15199, 15217, 15227, - 15233, 15241, 15259, 15263, 15269, 15271, - 15277, 15287, 15289, 15299, 15307, 15313, - 15319, 15329, 15331, 15349, 15359, 15361, - 15373, 15377, 15383, 15391, 15401, 15413, - 15427, 15439, 15443, 15451, 15461, 15467, - 15473, 15493, 15497, 15511, 15527, 15541, - 15551, 15559, 15569, 15581, 15583, 15601, - 15607, 15619, 15625, 15629, 15641, 15643, - 15647, 15649, 15661, 15667, 15671, 15679, - 15683, 15727, 15731, 15733, 15737, 15739, - 15749, 15761, 15767, 15773, 15787, 15791, - 15797, 15803, 15809, 15817, 15823, 15859, - 15877, 15881, 15887, 15889, 15901, 15907, - 15913, 15919, 15923, 15937, 15959, 15971, - 15973, 15991, 16001, 16007, 16033, 16057, - 16061, 16063, 16067, 16069, 16073, 16087, - 16091, 16097, 16103, 16111, 16127, 16129, - 16139, 16141, 16183, 16187, 16189, 16193, - 16217, 16223, 16229, 16231, 16249, 16253, - 16267, 16273, 16301, 16319, 16333, 16339, - 16349, 16361, 16363, 16369, 16381, 16384, - 16411, 16417, 16421, 16427, 16433, 16447, - 16451, 16453, 16477, 16481, 16487, 16493, - 16519, 16529, 16547, 16553, 16561, 16567, - 16573, 16603, 16607, 16619, 16631, 16633, - 16649, 16651, 16657, 16661, 16673, 16691, - 16693, 16699, 16703, 16729, 16741, 16747, - 16759, 16763, 16787, 16807, 16811, 16823, - 16829, 16831, 16843, 16871, 16879, 16883, - 16889, 16901, 16903, 16921, 16927, 16931, - 16937, 16943, 16963, 16979, 16981, 16987, - 16993, 17011, 17021, 17027, 17029, 17033, - 17041, 17047, 17053, 17077, 17093, 17099, - 17107, 17117, 17123, 17137, 17159, 17161, - 17167, 17183, 17189, 17191, 17203, 17207, - 17209, 17231, 17239, 17257, 17291, 17293, - 17299, 17317, 17321, 17327, 17333, 17341, - 17351, 17359, 17377, 17383, 17387, 17389, - 17393, 17401, 17417, 17419, 17431, 17443, - 17449, 17467, 17471, 17477, 17483, 17489, - 17491, 17497, 17509, 17519, 17539, 17551, - 17569, 17573, 17579, 17581, 17597, 17599, - 17609, 17623, 17627, 17657, 17659, 17669, - 17681, 17683, 17707, 17713, 17729, 17737, - 17747, 17749, 17761, 17783, 17789, 17791, - 17807, 17827, 17837, 17839, 17851, 17863, - 17881, 17891, 17903, 17909, 17911, 17921, - 17923, 17929, 17939, 17957, 17959, 17971, - 17977, 17981, 17987, 17989, 18013, 18041, - 18043, 18047, 18049, 18059, 18061, 18077, - 18089, 18097, 18119, 18121, 18127, 18131, - 18133, 18143, 18149, 18169, 18181, 18191, - 18199, 18211, 18217, 18223, 18229, 18233, - 18251, 18253, 18257, 18269, 18287, 18289, - 18301, 18307, 18311, 18313, 18329, 18341, - 18353, 18367, 18371, 18379, 18397, 18401, - 18413, 18427, 18433, 18439, 18443, 18451, - 18457, 18461, 18481, 18493, 18503, 18517, - 18521, 18523, 18539, 18541, 18553, 18583, - 18587, 18593, 18617, 18637, 18661, 18671, - 18679, 18691, 18701, 18713, 18719, 18731, - 18743, 18749, 18757, 18769, 18773, 18787, - 18793, 18797, 18803, 18839, 18859, 18869, - 18899, 18911, 18913, 18917, 18919, 18947, - 18959, 18973, 18979, 19001, 19009, 19013, - 19031, 19037, 19051, 19069, 19073, 19079, - 19081, 19087, 19121, 19139, 19141, 19157, - 19163, 19181, 19183, 19207, 19211, 19213, - 19219, 19231, 19237, 19249, 19259, 19267, - 19273, 19289, 19301, 19309, 19319, 19321, - 19333, 19373, 19379, 19381, 19387, 19391, - 19403, 19417, 19421, 19423, 19427, 19429, - 19433, 19441, 19447, 19457, 19463, 19469, - 19471, 19477, 19483, 19489, 19501, 19507, - 19531, 19541, 19543, 19553, 19559, 19571, - 19577, 19583, 19597, 19603, 19609, 19661, - 19681, 19683, 19687, 19697, 19699, 19709, - 19717, 19727, 19739, 19751, 19753, 19759, - 19763, 19777, 19793, 19801, 19813, 19819, - 19841, 19843, 19853, 19861, 19867, 19889, - 19891, 19913, 19919, 19927, 19937, 19949, - 19961, 19963, 19973, 19979, 19991, 19993, - 19997, 20011, 20021, 20023, 20029, 20047, - 20051, 20063, 20071, 20089, 20101, 20107, - 20113, 20117, 20123, 20129, 20143, 20147, - 20149, 20161, 20173, 20177, 20183, 20201, - 20219, 20231, 20233, 20249, 20261, 20269, - 20287, 20297, 20323, 20327, 20333, 20341, - 20347, 20353, 20357, 20359, 20369, 20389, - 20393, 20399, 20407, 20411, 20431, 20441, - 20443, 20477, 20479, 20483, 20507, 20509, - 20521, 20533, 20543, 20549, 20551, 20563, - 20593, 20599, 20611, 20627, 20639, 20641, - 20663, 20681, 20693, 20707, 20717, 20719, - 20731, 20743, 20747, 20749, 20753, 20759, - 20771, 20773, 20789, 20807, 20809, 20849, - 20857, 20873, 20879, 20887, 20897, 20899, - 20903, 20921, 20929, 20939, 20947, 20959, - 20963, 20981, 20983, 21001, 21011, 21013, - 21017, 21019, 21023, 21031, 21059, 21061, - 21067, 21089, 21101, 21107, 21121, 21139, - 21143, 21149, 21157, 21163, 21169, 21179, - 21187, 21191, 21193, 21211, 21221, 21227, - 21247, 21269, 21277, 21283, 21313, 21317, - 21319, 21323, 21341, 21347, 21377, 21379, - 21383, 21391, 21397, 21401, 21407, 21419, - 21433, 21467, 21481, 21487, 21491, 21493, - 21499, 21503, 21517, 21521, 21523, 21529, - 21557, 21559, 21563, 21569, 21577, 21587, - 21589, 21599, 21601, 21611, 21613, 21617, - 21647, 21649, 21661, 21673, 21683, 21701, - 21713, 21727, 21737, 21739, 21751, 21757, - 21767, 21773, 21787, 21799, 21803, 21817, - 21821, 21839, 21841, 21851, 21859, 21863, - 21871, 21881, 21893, 21911, 21929, 21937, - 21943, 21961, 21977, 21991, 21997, 22003, - 22013, 22027, 22031, 22037, 22039, 22051, - 22063, 22067, 22073, 22079, 22091, 22093, - 22109, 22111, 22123, 22129, 22133, 22147, - 22153, 22157, 22159, 22171, 22189, 22193, - 22201, 22229, 22247, 22259, 22271, 22273, - 22277, 22279, 22283, 22291, 22303, 22307, - 22343, 22349, 22367, 22369, 22381, 22391, - 22397, 22409, 22433, 22441, 22447, 22453, - 22469, 22481, 22483, 22501, 22511, 22531, - 22541, 22543, 22549, 22567, 22571, 22573, - 22613, 22619, 22621, 22637, 22639, 22643, - 22651, 22669, 22679, 22691, 22697, 22699, - 22709, 22717, 22721, 22727, 22739, 22741, - 22751, 22769, 22777, 22783, 22787, 22801, - 22807, 22811, 22817, 22853, 22859, 22861, - 22871, 22877, 22901, 22907, 22921, 22937, - 22943, 22961, 22963, 22973, 22993, 23003, - 23011, 23017, 23021, 23027, 23029, 23039, - 23041, 23053, 23057, 23059, 23063, 23071, - 23081, 23087, 23099, 23117, 23131, 23143, - 23159, 23167, 23173, 23189, 23197, 23201, - 23203, 23209, 23227, 23251, 23269, 23279, - 23291, 23293, 23297, 23311, 23321, 23327, - 23333, 23339, 23357, 23369, 23371, 23399, - 23417, 23431, 23447, 23459, 23473, 23497, - 23509, 23531, 23537, 23539, 23549, 23557, - 23561, 23563, 23567, 23581, 23593, 23599, - 23603, 23609, 23623, 23627, 23629, 23633, - 23663, 23669, 23671, 23677, 23687, 23689, - 23719, 23741, 23743, 23747, 23753, 23761, - 23767, 23773, 23789, 23801, 23813, 23819, - 23827, 23831, 23833, 23857, 23869, 23873, - 23879, 23887, 23893, 23899, 23909, 23911, - 23917, 23929, 23957, 23971, 23977, 23981, - 23993, 24001, 24007, 24019, 24023, 24029, - 24043, 24049, 24061, 24071, 24077, 24083, - 24091, 24097, 24103, 24107, 24109, 24113, - 24121, 24133, 24137, 24151, 24169, 24179, - 24181, 24197, 24203, 24223, 24229, 24239, - 24247, 24251, 24281, 24317, 24329, 24337, - 24359, 24371, 24373, 24379, 24389, 24391, - 24407, 24413, 24419, 24421, 24439, 24443, - 24469, 24473, 24481, 24499, 24509, 24517, - 24527, 24533, 24547, 24551, 24571, 24593, - 24611, 24623, 24631, 24649, 24659, 24671, - 24677, 24683, 24691, 24697, 24709, 24733, - 24749, 24763, 24767, 24781, 24793, 24799, - 24809, 24821, 24841, 24847, 24851, 24859, - 24877, 24889, 24907, 24917, 24919, 24923, - 24943, 24953, 24967, 24971, 24977, 24979, - 24989, 25013, 25031, 25033, 25037, 25057, - 25073, 25087, 25097, 25111, 25117, 25121, - 25127, 25147, 25153, 25163, 25169, 25171, - 25183, 25189, 25219, 25229, 25237, 25243, - 25247, 25253, 25261, 25301, 25303, 25307, - 25309, 25321, 25339, 25343, 25349, 25357, - 25367, 25373, 25391, 25409, 25411, 25423, - 25439, 25447, 25453, 25457, 25463, 25469, - 25471, 25523, 25537, 25541, 25561, 25577, - 25579, 25583, 25589, 25601, 25603, 25609, - 25621, 25633, 25639, 25643, 25657, 25667, - 25673, 25679, 25693, 25703, 25717, 25733, - 25741, 25747, 25759, 25763, 25771, 25793, - 25799, 25801, 25819, 25841, 25847, 25849, - 25867, 25873, 25889, 25903, 25913, 25919, - 25931, 25933, 25939, 25943, 25951, 25969, - 25981, 25997, 25999, 26003, 26017, 26021, - 26029, 26041, 26053, 26083, 26099, 26107, - 26111, 26113, 26119, 26141, 26153, 26161, - 26171, 26177, 26183, 26189, 26203, 26209, - 26227, 26237, 26249, 26251, 26261, 26263, - 26267, 26293, 26297, 26309, 26317, 26321, - 26339, 26347, 26357, 26371, 26387, 26393, - 26399, 26407, 26417, 26423, 26431, 26437, - 26449, 26459, 26479, 26489, 26497, 26501, - 26513, 26539, 26557, 26561, 26569, 26573, - 26591, 26597, 26627, 26633, 26641, 26647, - 26669, 26681, 26683, 26687, 26693, 26699, - 26701, 26711, 26713, 26717, 26723, 26729, - 26731, 26737, 26759, 26777, 26783, 26801, - 26813, 26821, 26833, 26839, 26849, 26861, - 26863, 26879, 26881, 26891, 26893, 26903, - 26921, 26927, 26947, 26951, 26953, 26959, - 26981, 26987, 26993, 27011, 27017, 27031, - 27043, 27059, 27061, 27067, 27073, 27077, - 27091, 27103, 27107, 27109, 27127, 27143, - 27179, 27191, 27197, 27211, 27239, 27241, - 27253, 27259, 27271, 27277, 27281, 27283, - 27299, 27329, 27337, 27361, 27367, 27397, - 27407, 27409, 27427, 27431, 27437, 27449, - 27457, 27479, 27481, 27487, 27509, 27527, - 27529, 27539, 27541, 27551, 27581, 27583, - 27611, 27617, 27631, 27647, 27653, 27673, - 27689, 27691, 27697, 27701, 27733, 27737, - 27739, 27743, 27749, 27751, 27763, 27767, - 27773, 27779, 27791, 27793, 27799, 27803, - 27809, 27817, 27823, 27827, 27847, 27851, - 27883, 27889, 27893, 27901, 27917, 27919, - 27941, 27943, 27947, 27953, 27961, 27967, - 27983, 27997, 28001, 28019, 28027, 28031, - 28051, 28057, 28069, 28081, 28087, 28097, - 28099, 28109, 28111, 28123, 28151, 28163, - 28181, 28183, 28201, 28211, 28219, 28229, - 28277, 28279, 28283, 28289, 28297, 28307, - 28309, 28319, 28349, 28351, 28387, 28393, - 28403, 28409, 28411, 28429, 28433, 28439, - 28447, 28463, 28477, 28493, 28499, 28513, - 28517, 28537, 28541, 28547, 28549, 28559, - 28561, 28571, 28573, 28579, 28591, 28597, - 28603, 28607, 28619, 28621, 28627, 28631, - 28643, 28649, 28657, 28661, 28663, 28669, - 28687, 28697, 28703, 28711, 28723, 28729, - 28751, 28753, 28759, 28771, 28789, 28793, - 28807, 28813, 28817, 28837, 28843, 28859, - 28867, 28871, 28879, 28901, 28909, 28921, - 28927, 28933, 28949, 28961, 28979, 29009, - 29017, 29021, 29023, 29027, 29033, 29059, - 29063, 29077, 29101, 29123, 29129, 29131, - 29137, 29147, 29153, 29167, 29173, 29179, - 29191, 29201, 29207, 29209, 29221, 29231, - 29243, 29251, 29269, 29287, 29297, 29303, - 29311, 29327, 29333, 29339, 29347, 29363, - 29383, 29387, 29389, 29399, 29401, 29411, - 29423, 29429, 29437, 29443, 29453, 29473, - 29483, 29501, 29527, 29531, 29537, 29567, - 29569, 29573, 29581, 29587, 29599, 29611, - 29629, 29633, 29641, 29663, 29669, 29671, - 29683, 29717, 29723, 29741, 29753, 29759, - 29761, 29789, 29791, 29803, 29819, 29833, - 29837, 29851, 29863, 29867, 29873, 29879, - 29881, 29917, 29921, 29927, 29929, 29947, - 29959, 29983, 29989, 30011, 30013, 30029, - 30047, 30059, 30071, 30089, 30091, 30097, - 30103, 30109, 30113, 30119, 30133, 30137, - 30139, 30161, 30169, 30181, 30187, 30197, - 30203, 30211, 30223, 30241, 30253, 30259, - 30269, 30271, 30293, 30307, 30313, 30319, - 30323, 30341, 30347, 30367, 30389, 30391, - 30403, 30427, 30431, 30449, 30467, 30469, - 30491, 30493, 30497, 30509, 30517, 30529, - 30539, 30553, 30557, 30559, 30577, 30593, - 30631, 30637, 30643, 30649, 30661, 30671, - 30677, 30689, 30697, 30703, 30707, 30713, - 30727, 30757, 30763, 30773, 30781, 30803, - 30809, 30817, 30829, 30839, 30841, 30851, - 30853, 30859, 30869, 30871, 30881, 30893, - 30911, 30931, 30937, 30941, 30949, 30971, - 30977, 30983, 31013, 31019, 31033, 31039, - 31051, 31063, 31069, 31079, 31081, 31091, - 31121, 31123, 31139, 31147, 31151, 31153, - 31159, 31177, 31181, 31183, 31189, 31193, - 31219, 31223, 31231, 31237, 31247, 31249, - 31253, 31259, 31267, 31271, 31277, 31307, - 31319, 31321, 31327, 31333, 31337, 31357, - 31379, 31387, 31391, 31393, 31397, 31469, - 31477, 31481, 31489, 31511, 31513, 31517, - 31531, 31541, 31543, 31547, 31567, 31573, - 31583, 31601, 31607, 31627, 31643, 31649, - 31657, 31663, 31667, 31687, 31699, 31721, - 31723, 31727, 31729, 31741, 31751, 31769, - 31771, 31793, 31799, 31817, 31847, 31849, - 31859, 31873, 31883, 31891, 31907, 31957, - 31963, 31973, 31981, 31991, 32003, 32009, - 32027, 32029, 32041, 32051, 32057, 32059, - 32063, 32069, 32077, 32083, 32089, 32099, - 32117, 32119, 32141, 32143, 32159, 32173, - 32183, 32189, 32191, 32203, 32213, 32233, - 32237, 32251, 32257, 32261, 32297, 32299, - 32303, 32309, 32321, 32323, 32327, 32341, - 32353, 32359, 32363, 32369, 32371, 32377, - 32381, 32401, 32411, 32413, 32423, 32429, - 32441, 32443, 32467, 32479, 32491, 32497, - 32503, 32507, 32531, 32533, 32537, 32561, - 32563, 32569, 32573, 32579, 32587, 32603, - 32609, 32611, 32621, 32633, 32647, 32653, - 32687, 32693, 32707, 32713, 32717, 32719, - 32749, 32761, 32768, 32771, 32779, 32783, - 32789, 32797, 32801, 32803, 32831, 32833, - 32839, 32843, 32869, 32887, 32909, 32911, - 32917, 32933, 32939, 32941, 32957, 32969, - 32971, 32983, 32987, 32993, 32999, 33013, - 33023, 33029, 33037, 33049, 33053, 33071, - 33073, 33083, 33091, 33107, 33113, 33119, - 33149, 33151, 33161, 33179, 33181, 33191, - 33199, 33203, 33211, 33223, 33247, 33287, - 33289, 33301, 33311, 33317, 33329, 33331, - 33343, 33347, 33349, 33353, 33359, 33377, - 33391, 33403, 33409, 33413, 33427, 33457, - 33461, 33469, 33479, 33487, 33493, 33503, - 33521, 33529, 33533, 33547, 33563, 33569, - 33577, 33581, 33587, 33589, 33599, 33601, - 33613, 33617, 33619, 33623, 33629, 33637, - 33641, 33647, 33679, 33703, 33713, 33721, - 33739, 33749, 33751, 33757, 33767, 33769, - 33773, 33791, 33797, 33809, 33811, 33827, - 33829, 33851, 33857, 33863, 33871, 33889, - 33893, 33911, 33923, 33931, 33937, 33941, - 33961, 33967, 33997, 34019, 34031, 34033, - 34039, 34057, 34061, 34123, 34127, 34129, - 34141, 34147, 34157, 34159, 34171, 34183, - 34211, 34213, 34217, 34231, 34253, 34259, - 34261, 34267, 34273, 34283, 34297, 34301, - 34303, 34313, 34319, 34327, 34337, 34351, - 34361, 34367, 34369, 34381, 34403, 34421, - 34429, 34439, 34457, 34469, 34471, 34483, - 34487, 34499, 34501, 34511, 34513, 34519, - 34537, 34543, 34549, 34583, 34589, 34591, - 34603, 34607, 34613, 34631, 34649, 34651, - 34667, 34673, 34679, 34687, 34693, 34703, - 34721, 34729, 34739, 34747, 34757, 34759, - 34763, 34781, 34807, 34819, 34841, 34843, - 34847, 34849, 34871, 34877, 34883, 34897, - 34913, 34919, 34939, 34949, 34961, 34963, - 34981, 35023, 35027, 35051, 35053, 35059, - 35069, 35081, 35083, 35089, 35099, 35107, - 35111, 35117, 35129, 35141, 35149, 35153, - 35159, 35171, 35201, 35221, 35227, 35251, - 35257, 35267, 35279, 35281, 35291, 35311, - 35317, 35323, 35327, 35339, 35353, 35363, - 35381, 35393, 35401, 35407, 35419, 35423, - 35437, 35447, 35449, 35461, 35491, 35507, - 35509, 35521, 35527, 35531, 35533, 35537, - 35543, 35569, 35573, 35591, 35593, 35597, - 35603, 35617, 35671, 35677, 35729, 35731, - 35747, 35753, 35759, 35771, 35797, 35801, - 35803, 35809, 35831, 35837, 35839, 35851, - 35863, 35869, 35879, 35897, 35899, 35911, - 35923, 35933, 35951, 35963, 35969, 35977, - 35983, 35993, 35999, 36007, 36011, 36013, - 36017, 36037, 36061, 36067, 36073, 36083, - 36097, 36107, 36109, 36131, 36137, 36151, - 36161, 36187, 36191, 36209, 36217, 36229, - 36241, 36251, 36263, 36269, 36277, 36293, - 36299, 36307, 36313, 36319, 36341, 36343, - 36353, 36373, 36383, 36389, 36433, 36451, - 36457, 36467, 36469, 36473, 36479, 36481, - 36493, 36497, 36523, 36527, 36529, 36541, - 36551, 36559, 36563, 36571, 36583, 36587, - 36599, 36607, 36629, 36637, 36643, 36653, - 36671, 36677, 36683, 36691, 36697, 36709, - 36713, 36721, 36739, 36749, 36761, 36767, - 36779, 36781, 36787, 36791, 36793, 36809, - 36821, 36833, 36847, 36857, 36871, 36877, - 36887, 36899, 36901, 36913, 36919, 36923, - 36929, 36931, 36943, 36947, 36973, 36979, - 36997, 37003, 37013, 37019, 37021, 37039, - 37049, 37057, 37061, 37087, 37097, 37117, - 37123, 37139, 37159, 37171, 37181, 37189, - 37199, 37201, 37217, 37223, 37243, 37249, - 37253, 37273, 37277, 37307, 37309, 37313, - 37321, 37337, 37339, 37357, 37361, 37363, - 37369, 37379, 37397, 37409, 37423, 37441, - 37447, 37463, 37483, 37489, 37493, 37501, - 37507, 37511, 37517, 37529, 37537, 37547, - 37549, 37561, 37567, 37571, 37573, 37579, - 37589, 37591, 37607, 37619, 37633, 37643, - 37649, 37657, 37663, 37691, 37693, 37699, - 37717, 37747, 37781, 37783, 37799, 37811, - 37813, 37831, 37847, 37853, 37861, 37871, - 37879, 37889, 37897, 37907, 37951, 37957, - 37963, 37967, 37987, 37991, 37993, 37997, - 38011, 38039, 38047, 38053, 38069, 38083, - 38113, 38119, 38149, 38153, 38167, 38177, - 38183, 38189, 38197, 38201, 38219, 38231, - 38237, 38239, 38261, 38273, 38281, 38287, - 38299, 38303, 38317, 38321, 38327, 38329, - 38333, 38351, 38371, 38377, 38393, 38431, - 38447, 38449, 38453, 38459, 38461, 38501, - 38543, 38557, 38561, 38567, 38569, 38593, - 38603, 38609, 38611, 38629, 38639, 38651, - 38653, 38669, 38671, 38677, 38693, 38699, - 38707, 38711, 38713, 38723, 38729, 38737, - 38747, 38749, 38767, 38783, 38791, 38803, - 38809, 38821, 38833, 38839, 38851, 38861, - 38867, 38873, 38891, 38903, 38917, 38921, - 38923, 38933, 38953, 38959, 38971, 38977, - 38993, 39019, 39023, 39041, 39043, 39047, - 39079, 39089, 39097, 39103, 39107, 39113, - 39119, 39133, 39139, 39157, 39161, 39163, - 39181, 39191, 39199, 39209, 39217, 39227, - 39229, 39233, 39239, 39241, 39251, 39293, - 39301, 39313, 39317, 39323, 39341, 39343, - 39359, 39367, 39371, 39373, 39383, 39397, - 39409, 39419, 39439, 39443, 39451, 39461, - 39499, 39503, 39509, 39511, 39521, 39541, - 39551, 39563, 39569, 39581, 39601, 39607, - 39619, 39623, 39631, 39659, 39667, 39671, - 39679, 39703, 39709, 39719, 39727, 39733, - 39749, 39761, 39769, 39779, 39791, 39799, - 39821, 39827, 39829, 39839, 39841, 39847, - 39857, 39863, 39869, 39877, 39883, 39887, - 39901, 39929, 39937, 39953, 39971, 39979, - 39983, 39989, 40009, 40013, 40031, 40037, - 40039, 40063, 40087, 40093, 40099, 40111, - 40123, 40127, 40129, 40151, 40153, 40163, - 40169, 40177, 40189, 40193, 40213, 40231, - 40237, 40241, 40253, 40277, 40283, 40289, - 40343, 40351, 40357, 40361, 40387, 40423, - 40427, 40429, 40433, 40459, 40471, 40483, - 40487, 40493, 40499, 40507, 40519, 40529, - 40531, 40543, 40559, 40577, 40583, 40591, - 40597, 40609, 40627, 40637, 40639, 40693, - 40697, 40699, 40709, 40739, 40751, 40759, - 40763, 40771, 40787, 40801, 40813, 40819, - 40823, 40829, 40841, 40847, 40849, 40853, - 40867, 40879, 40883, 40897, 40903, 40927, - 40933, 40939, 40949, 40961, 40973, 40993, - 41011, 41017, 41023, 41039, 41047, 41051, - 41057, 41077, 41081, 41113, 41117, 41131, - 41141, 41143, 41149, 41161, 41177, 41179, - 41183, 41189, 41201, 41203, 41213, 41221, - 41227, 41231, 41233, 41243, 41257, 41263, - 41269, 41281, 41299, 41333, 41341, 41351, - 41357, 41381, 41387, 41389, 41399, 41411, - 41413, 41443, 41453, 41467, 41479, 41491, - 41507, 41513, 41519, 41521, 41539, 41543, - 41549, 41579, 41593, 41597, 41603, 41609, - 41611, 41617, 41621, 41627, 41641, 41647, - 41651, 41659, 41669, 41681, 41687, 41719, - 41729, 41737, 41759, 41761, 41771, 41777, - 41801, 41809, 41813, 41843, 41849, 41851, - 41863, 41879, 41887, 41893, 41897, 41903, - 41911, 41927, 41941, 41947, 41953, 41957, - 41959, 41969, 41981, 41983, 41999, 42013, - 42017, 42019, 42023, 42043, 42061, 42071, - 42073, 42083, 42089, 42101, 42131, 42139, - 42157, 42169, 42179, 42181, 42187, 42193, - 42197, 42209, 42221, 42223, 42227, 42239, - 42257, 42281, 42283, 42293, 42299, 42307, - 42323, 42331, 42337, 42349, 42359, 42373, - 42379, 42391, 42397, 42403, 42407, 42409, - 42433, 42437, 42443, 42451, 42457, 42461, - 42463, 42467, 42473, 42487, 42491, 42499, - 42509, 42533, 42557, 42569, 42571, 42577, - 42589, 42611, 42641, 42643, 42649, 42667, - 42677, 42683, 42689, 42697, 42701, 42703, - 42709, 42719, 42727, 42737, 42743, 42751, - 42767, 42773, 42787, 42793, 42797, 42821, - 42829, 42839, 42841, 42853, 42859, 42863, - 42899, 42901, 42923, 42929, 42937, 42943, - 42953, 42961, 42967, 42979, 42989, 43003, - 43013, 43019, 43037, 43049, 43051, 43063, - 43067, 43093, 43103, 43117, 43133, 43151, - 43159, 43177, 43189, 43201, 43207, 43223, - 43237, 43261, 43271, 43283, 43291, 43313, - 43319, 43321, 43331, 43391, 43397, 43399, - 43403, 43411, 43427, 43441, 43451, 43457, - 43481, 43487, 43499, 43517, 43541, 43543, - 43573, 43577, 43579, 43591, 43597, 43607, - 43609, 43613, 43627, 43633, 43649, 43651, - 43661, 43669, 43691, 43711, 43717, 43721, - 43753, 43759, 43777, 43781, 43783, 43787, - 43789, 43793, 43801, 43853, 43867, 43889, - 43891, 43913, 43933, 43943, 43951, 43961, - 43963, 43969, 43973, 43987, 43991, 43997, - 44017, 44021, 44027, 44029, 44041, 44053, - 44059, 44071, 44087, 44089, 44101, 44111, - 44119, 44123, 44129, 44131, 44159, 44171, - 44179, 44189, 44201, 44203, 44207, 44221, - 44249, 44257, 44263, 44267, 44269, 44273, - 44279, 44281, 44293, 44351, 44357, 44371, - 44381, 44383, 44389, 44417, 44449, 44453, - 44483, 44491, 44497, 44501, 44507, 44519, - 44521, 44531, 44533, 44537, 44543, 44549, - 44563, 44579, 44587, 44617, 44621, 44623, - 44633, 44641, 44647, 44651, 44657, 44683, - 44687, 44699, 44701, 44711, 44729, 44741, - 44753, 44771, 44773, 44777, 44789, 44797, - 44809, 44819, 44839, 44843, 44851, 44867, - 44879, 44887, 44893, 44909, 44917, 44927, - 44939, 44953, 44959, 44963, 44971, 44983, - 44987, 45007, 45013, 45053, 45061, 45077, - 45083, 45119, 45121, 45127, 45131, 45137, - 45139, 45161, 45179, 45181, 45191, 45197, - 45233, 45247, 45259, 45263, 45281, 45289, - 45293, 45307, 45317, 45319, 45329, 45337, - 45341, 45343, 45361, 45377, 45389, 45403, - 45413, 45427, 45433, 45439, 45481, 45491, - 45497, 45503, 45523, 45533, 45541, 45553, - 45557, 45569, 45587, 45589, 45599, 45613, - 45631, 45641, 45659, 45667, 45673, 45677, - 45691, 45697, 45707, 45737, 45751, 45757, - 45763, 45767, 45779, 45817, 45821, 45823, - 45827, 45833, 45841, 45853, 45863, 45869, - 45887, 45893, 45943, 45949, 45953, 45959, - 45971, 45979, 45989, 46021, 46027, 46049, - 46051, 46061, 46073, 46091, 46093, 46099, - 46103, 46133, 46141, 46147, 46153, 46171, - 46181, 46183, 46187, 46199, 46219, 46229, - 46237, 46261, 46271, 46273, 46279, 46301, - 46307, 46309, 46327, 46337, 46349, 46351, - 46381, 46399, 46411, 46439, 46441, 46447, - 46451, 46457, 46471, 46477, 46489, 46499, - 46507, 46511, 46523, 46549, 46559, 46567, - 46573, 46589, 46591, 46601, 46619, 46633, - 46639, 46643, 46649, 46663, 46679, 46681, - 46687, 46691, 46703, 46723, 46727, 46747, - 46751, 46757, 46769, 46771, 46807, 46811, - 46817, 46819, 46829, 46831, 46853, 46861, - 46867, 46877, 46889, 46901, 46919, 46933, - 46957, 46993, 46997, 47017, 47041, 47051, - 47057, 47059, 47087, 47093, 47111, 47119, - 47123, 47129, 47137, 47143, 47147, 47149, - 47161, 47189, 47207, 47221, 47237, 47251, - 47269, 47279, 47287, 47293, 47297, 47303, - 47309, 47317, 47339, 47351, 47353, 47363, - 47381, 47387, 47389, 47407, 47417, 47419, - 47431, 47441, 47459, 47491, 47497, 47501, - 47507, 47513, 47521, 47527, 47533, 47543, - 47563, 47569, 47581, 47591, 47599, 47609, - 47623, 47629, 47639, 47653, 47657, 47659, - 47681, 47699, 47701, 47711, 47713, 47717, - 47737, 47741, 47743, 47777, 47779, 47791, - 47797, 47807, 47809, 47819, 47837, 47843, - 47857, 47869, 47881, 47903, 47911, 47917, - 47933, 47939, 47947, 47951, 47963, 47969, - 47977, 47981, 48017, 48023, 48029, 48049, - 48073, 48079, 48091, 48109, 48119, 48121, - 48131, 48157, 48163, 48179, 48187, 48193, - 48197, 48221, 48239, 48247, 48259, 48271, - 48281, 48299, 48311, 48313, 48337, 48341, - 48353, 48371, 48383, 48397, 48407, 48409, - 48413, 48437, 48449, 48463, 48473, 48479, - 48481, 48487, 48491, 48497, 48523, 48527, - 48533, 48539, 48541, 48563, 48571, 48589, - 48593, 48611, 48619, 48623, 48647, 48649, - 48661, 48673, 48677, 48679, 48731, 48733, - 48751, 48757, 48761, 48767, 48779, 48781, - 48787, 48799, 48809, 48817, 48821, 48823, - 48847, 48857, 48859, 48869, 48871, 48883, - 48889, 48907, 48947, 48953, 48973, 48989, - 48991, 49003, 49009, 49019, 49031, 49033, - 49037, 49043, 49057, 49069, 49081, 49103, - 49109, 49117, 49121, 49123, 49139, 49157, - 49169, 49171, 49177, 49193, 49199, 49201, - 49207, 49211, 49223, 49253, 49261, 49277, - 49279, 49297, 49307, 49331, 49333, 49339, - 49363, 49367, 49369, 49391, 49393, 49409, - 49411, 49417, 49429, 49433, 49451, 49459, - 49463, 49477, 49481, 49499, 49523, 49529, - 49531, 49537, 49547, 49549, 49559, 49597, - 49603, 49613, 49627, 49633, 49639, 49663, - 49667, 49669, 49681, 49697, 49711, 49727, - 49729, 49739, 49741, 49747, 49757, 49783, - 49787, 49789, 49801, 49807, 49811, 49823, - 49831, 49843, 49853, 49871, 49877, 49891, - 49919, 49921, 49927, 49937, 49939, 49943, - 49957, 49991, 49993, 49999, 50021, 50023, - 50033, 50047, 50051, 50053, 50069, 50077, - 50087, 50093, 50101, 50111, 50119, 50123, - 50129, 50131, 50147, 50153, 50159, 50177, - 50207, 50221, 50227, 50231, 50261, 50263, - 50273, 50287, 50291, 50311, 50321, 50329, - 50333, 50341, 50359, 50363, 50377, 50383, - 50387, 50411, 50417, 50423, 50441, 50459, - 50461, 50497, 50503, 50513, 50527, 50539, - 50543, 50549, 50551, 50581, 50587, 50591, - 50593, 50599, 50627, 50647, 50651, 50653, - 50671, 50683, 50707, 50723, 50741, 50753, - 50767, 50773, 50777, 50789, 50821, 50833, - 50839, 50849, 50857, 50867, 50873, 50891, - 50893, 50909, 50923, 50929, 50951, 50957, - 50969, 50971, 50989, 50993, 51001, 51031, - 51043, 51047, 51059, 51061, 51071, 51109, - 51131, 51133, 51137, 51151, 51157, 51169, - 51193, 51197, 51199, 51203, 51217, 51229, - 51239, 51241, 51257, 51263, 51283, 51287, - 51307, 51329, 51341, 51343, 51347, 51349, - 51361, 51383, 51407, 51413, 51419, 51421, - 51427, 51431, 51437, 51439, 51449, 51461, - 51473, 51479, 51481, 51487, 51503, 51511, - 51517, 51521, 51529, 51539, 51551, 51563, - 51577, 51581, 51593, 51599, 51607, 51613, - 51631, 51637, 51647, 51659, 51673, 51679, - 51683, 51691, 51713, 51719, 51721, 51749, - 51767, 51769, 51787, 51797, 51803, 51817, - 51827, 51829, 51839, 51853, 51859, 51869, - 51871, 51893, 51899, 51907, 51913, 51929, - 51941, 51949, 51971, 51973, 51977, 51991, - 52009, 52021, 52027, 52051, 52057, 52067, - 52069, 52081, 52103, 52121, 52127, 52147, - 52153, 52163, 52177, 52181, 52183, 52189, - 52201, 52223, 52237, 52249, 52253, 52259, - 52267, 52289, 52291, 52301, 52313, 52321, - 52361, 52363, 52369, 52379, 52387, 52391, - 52433, 52441, 52453, 52457, 52489, 52501, - 52511, 52517, 52529, 52541, 52543, 52553, - 52561, 52567, 52571, 52579, 52583, 52609, - 52627, 52631, 52639, 52667, 52673, 52691, - 52697, 52709, 52711, 52721, 52727, 52733, - 52747, 52757, 52769, 52783, 52807, 52813, - 52817, 52837, 52859, 52861, 52879, 52883, - 52889, 52901, 52903, 52919, 52937, 52951, - 52957, 52963, 52967, 52973, 52981, 52999, - 53003, 53017, 53047, 53051, 53069, 53077, - 53087, 53089, 53093, 53101, 53113, 53117, - 53129, 53147, 53149, 53161, 53171, 53173, - 53189, 53197, 53201, 53231, 53233, 53239, - 53267, 53269, 53279, 53281, 53299, 53309, - 53323, 53327, 53353, 53359, 53377, 53381, - 53401, 53407, 53411, 53419, 53437, 53441, - 53453, 53479, 53503, 53507, 53527, 53549, - 53551, 53569, 53591, 53593, 53597, 53609, - 53611, 53617, 53623, 53629, 53633, 53639, - 53653, 53657, 53681, 53693, 53699, 53717, - 53719, 53731, 53759, 53773, 53777, 53783, - 53791, 53813, 53819, 53831, 53849, 53857, - 53861, 53881, 53887, 53891, 53897, 53899, - 53917, 53923, 53927, 53939, 53951, 53959, - 53987, 53993, 54001, 54011, 54013, 54037, - 54049, 54059, 54083, 54091, 54101, 54121, - 54133, 54139, 54151, 54163, 54167, 54181, - 54193, 54217, 54251, 54269, 54277, 54287, - 54289, 54293, 54311, 54319, 54323, 54331, - 54347, 54361, 54367, 54371, 54377, 54401, - 54403, 54409, 54413, 54419, 54421, 54437, - 54443, 54449, 54469, 54493, 54497, 54499, - 54503, 54517, 54521, 54539, 54541, 54547, - 54559, 54563, 54577, 54581, 54583, 54601, - 54617, 54623, 54629, 54631, 54647, 54667, - 54673, 54679, 54709, 54713, 54721, 54727, - 54751, 54767, 54773, 54779, 54787, 54799, - 54829, 54833, 54851, 54869, 54877, 54881, - 54907, 54917, 54919, 54941, 54949, 54959, - 54973, 54979, 54983, 55001, 55009, 55021, - 55049, 55051, 55057, 55061, 55073, 55079, - 55103, 55109, 55117, 55127, 55147, 55163, - 55171, 55201, 55207, 55213, 55217, 55219, - 55229, 55243, 55249, 55259, 55291, 55313, - 55331, 55333, 55337, 55339, 55343, 55351, - 55373, 55381, 55399, 55411, 55439, 55441, - 55457, 55469, 55487, 55501, 55511, 55529, - 55541, 55547, 55579, 55589, 55603, 55609, - 55619, 55621, 55631, 55633, 55639, 55661, - 55663, 55667, 55673, 55681, 55691, 55697, - 55711, 55717, 55721, 55733, 55763, 55787, - 55793, 55799, 55807, 55813, 55817, 55819, - 55823, 55829, 55837, 55843, 55849, 55871, - 55889, 55897, 55901, 55903, 55921, 55927, - 55931, 55933, 55949, 55967, 55987, 55997, - 56003, 56009, 56039, 56041, 56053, 56081, - 56087, 56093, 56099, 56101, 56113, 56123, - 56131, 56149, 56167, 56171, 56179, 56197, - 56207, 56209, 56237, 56239, 56249, 56263, - 56267, 56269, 56299, 56311, 56333, 56359, - 56369, 56377, 56383, 56393, 56401, 56417, - 56431, 56437, 56443, 56453, 56467, 56473, - 56477, 56479, 56489, 56501, 56503, 56509, - 56519, 56527, 56531, 56533, 56543, 56569, - 56591, 56597, 56599, 56611, 56629, 56633, - 56659, 56663, 56671, 56681, 56687, 56701, - 56711, 56713, 56731, 56737, 56747, 56767, - 56773, 56779, 56783, 56807, 56809, 56813, - 56821, 56827, 56843, 56857, 56873, 56891, - 56893, 56897, 56909, 56911, 56921, 56923, - 56929, 56941, 56951, 56957, 56963, 56983, - 56989, 56993, 56999, 57037, 57041, 57047, - 57059, 57073, 57077, 57089, 57097, 57107, - 57119, 57121, 57131, 57139, 57143, 57149, - 57163, 57173, 57179, 57191, 57193, 57203, - 57221, 57223, 57241, 57251, 57259, 57269, - 57271, 57283, 57287, 57301, 57329, 57331, - 57347, 57349, 57367, 57373, 57383, 57389, - 57397, 57413, 57427, 57457, 57467, 57487, - 57493, 57503, 57527, 57529, 57557, 57559, - 57571, 57587, 57593, 57601, 57637, 57641, - 57649, 57653, 57667, 57679, 57689, 57697, - 57709, 57713, 57719, 57727, 57731, 57737, - 57751, 57773, 57781, 57787, 57791, 57793, - 57803, 57809, 57829, 57839, 57847, 57853, - 57859, 57881, 57899, 57901, 57917, 57923, - 57943, 57947, 57973, 57977, 57991, 58013, - 58027, 58031, 58043, 58049, 58057, 58061, - 58067, 58073, 58081, 58099, 58109, 58111, - 58129, 58147, 58151, 58153, 58169, 58171, - 58189, 58193, 58199, 58207, 58211, 58217, - 58229, 58231, 58237, 58243, 58271, 58309, - 58313, 58321, 58337, 58363, 58367, 58369, - 58379, 58391, 58393, 58403, 58411, 58417, - 58427, 58439, 58441, 58451, 58453, 58477, - 58481, 58511, 58537, 58543, 58549, 58567, - 58573, 58579, 58601, 58603, 58613, 58631, - 58657, 58661, 58679, 58687, 58693, 58699, - 58711, 58727, 58733, 58741, 58757, 58763, - 58771, 58787, 58789, 58831, 58889, 58897, - 58901, 58907, 58909, 58913, 58921, 58937, - 58943, 58963, 58967, 58979, 58991, 58997, - 59009, 59011, 59021, 59023, 59029, 59049, - 59051, 59053, 59063, 59069, 59077, 59083, - 59093, 59107, 59113, 59119, 59123, 59141, - 59149, 59159, 59167, 59183, 59197, 59207, - 59209, 59219, 59221, 59233, 59239, 59243, - 59263, 59273, 59281, 59333, 59341, 59351, - 59357, 59359, 59369, 59377, 59387, 59393, - 59399, 59407, 59417, 59419, 59441, 59443, - 59447, 59453, 59467, 59471, 59473, 59497, - 59509, 59513, 59539, 59557, 59561, 59567, - 59581, 59611, 59617, 59621, 59627, 59629, - 59651, 59659, 59663, 59669, 59671, 59693, - 59699, 59707, 59723, 59729, 59743, 59747, - 59753, 59771, 59779, 59791, 59797, 59809, - 59833, 59863, 59879, 59887, 59921, 59929, - 59951, 59957, 59971, 59981, 59999, 60013, - 60017, 60029, 60037, 60041, 60077, 60083, - 60089, 60091, 60101, 60103, 60107, 60127, - 60133, 60139, 60149, 60161, 60167, 60169, - 60209, 60217, 60223, 60251, 60257, 60259, - 60271, 60289, 60293, 60317, 60331, 60337, - 60343, 60353, 60373, 60383, 60397, 60413, - 60427, 60443, 60449, 60457, 60493, 60497, - 60509, 60521, 60527, 60539, 60589, 60601, - 60607, 60611, 60617, 60623, 60631, 60637, - 60647, 60649, 60659, 60661, 60679, 60689, - 60703, 60719, 60727, 60733, 60737, 60757, - 60761, 60763, 60773, 60779, 60793, 60811, - 60821, 60859, 60869, 60887, 60889, 60899, - 60901, 60913, 60917, 60919, 60923, 60937, - 60943, 60953, 60961, 61001, 61007, 61027, - 61031, 61043, 61051, 61057, 61091, 61099, - 61121, 61129, 61141, 61151, 61153, 61169, - 61211, 61223, 61231, 61253, 61261, 61283, - 61291, 61297, 61331, 61333, 61339, 61343, - 61357, 61363, 61379, 61381, 61403, 61409, - 61417, 61441, 61463, 61469, 61471, 61483, - 61487, 61493, 61507, 61511, 61519, 61543, - 61547, 61553, 61559, 61561, 61583, 61603, - 61609, 61613, 61627, 61631, 61637, 61643, - 61651, 61657, 61667, 61673, 61681, 61687, - 61703, 61717, 61723, 61729, 61751, 61757, - 61781, 61813, 61819, 61837, 61843, 61861, - 61871, 61879, 61909, 61927, 61933, 61949, - 61961, 61967, 61979, 61981, 61987, 61991, - 62003, 62011, 62017, 62039, 62047, 62053, - 62057, 62071, 62081, 62099, 62119, 62129, - 62131, 62137, 62141, 62143, 62171, 62189, - 62191, 62201, 62207, 62213, 62219, 62233, - 62273, 62297, 62299, 62303, 62311, 62323, - 62327, 62347, 62351, 62383, 62401, 62417, - 62423, 62459, 62467, 62473, 62477, 62483, - 62497, 62501, 62507, 62533, 62539, 62549, - 62563, 62581, 62591, 62597, 62603, 62617, - 62627, 62633, 62639, 62653, 62659, 62683, - 62687, 62701, 62723, 62731, 62743, 62753, - 62761, 62773, 62791, 62801, 62819, 62827, - 62851, 62861, 62869, 62873, 62897, 62903, - 62921, 62927, 62929, 62939, 62969, 62971, - 62981, 62983, 62987, 62989, 63001, 63029, - 63031, 63059, 63067, 63073, 63079, 63097, - 63103, 63113, 63127, 63131, 63149, 63179, - 63197, 63199, 63211, 63241, 63247, 63277, - 63281, 63299, 63311, 63313, 63317, 63331, - 63337, 63347, 63353, 63361, 63367, 63377, - 63389, 63391, 63397, 63409, 63419, 63421, - 63439, 63443, 63463, 63467, 63473, 63487, - 63493, 63499, 63521, 63527, 63533, 63541, - 63559, 63577, 63587, 63589, 63599, 63601, - 63607, 63611, 63617, 63629, 63647, 63649, - 63659, 63667, 63671, 63689, 63691, 63697, - 63703, 63709, 63719, 63727, 63737, 63743, - 63761, 63773, 63781, 63793, 63799, 63803, - 63809, 63823, 63839, 63841, 63853, 63857, - 63863, 63901, 63907, 63913, 63929, 63949, - 63977, 63997, 64007, 64013, 64019, 64033, - 64037, 64063, 64067, 64081, 64091, 64109, - 64123, 64151, 64153, 64157, 64171, 64187, - 64189, 64217, 64223, 64231, 64237, 64271, - 64279, 64283, 64301, 64303, 64319, 64327, - 64333, 64373, 64381, 64399, 64403, 64433, - 64439, 64451, 64453, 64483, 64489, 64499, - 64513, 64553, 64567, 64577, 64579, 64591, - 64601, 64609, 64613, 64621, 64627, 64633, - 64661, 64663, 64667, 64679, 64693, 64709, - 64717, 64747, 64763, 64781, 64783, 64793, - 64811, 64817, 64849, 64853, 64871, 64877, - 64879, 64891, 64901, 64919, 64921, 64927, - 64937, 64951, 64969, 64997, 65003, 65011, - 65027, 65029, 65033, 65053, 65063, 65071, - 65089, 65099, 65101, 65111, 65119, 65123, - 65129, 65141, 65147, 65167, 65171, 65173, - 65179, 65183, 65203, 65213, 65239, 65257, - 65267, 65269, 65287, 65293, 65309, 65323, - 65327, 65353, 65357, 65371, 65381, 65393, - 65407, 65413, 65419, 65423, 65437, 65447, - 65449, 65479, 65497, 65519, 65521, 65536, - }; diff --git a/src/ffdata.h b/src/ffdata.h deleted file mode 100644 index cbe57efd56..0000000000 --- a/src/ffdata.h +++ /dev/null @@ -1,23 +0,0 @@ -/* This file has been generated by etc/ffgen.c during build, - do not edit */ -#ifndef GAP_FFDATA_H -#define GAP_FFDATA_H - -#include - -enum { - NUM_SHORT_FINITE_FIELDS = 6635, - MAXSIZE_GF_INTERNAL = 65536, - DEGREE_LARGEST_INTERNAL_FF = 16, - FIELD_BITS_FFE = 13, - VAL_BITS_FFE = 16 -}; - -extern const uint32_t SizeFF[NUM_SHORT_FINITE_FIELDS+1]; -extern const uint8_t DegrFF[NUM_SHORT_FINITE_FIELDS+1]; -extern const uint32_t CharFF[NUM_SHORT_FINITE_FIELDS+1]; - -typedef uint16_t FF; -typedef uint16_t FFV; - -#endif // GAP_FFDATA_H From d5d24dc243f0cc1cc7ac99d6468a31370f82b3e5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:06:51 +0000 Subject: [PATCH 22/29] Add .gitignore entries for build artifacts and temporary files Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index a240b1809b..23de23948a 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,11 @@ /extern/build/ /extern/install/ +# Temporary build directories and artifacts +native-build/ +src/ffdata.c +src/ffdata.h + /ffgen ffgen.exe /gac From eb614cb20b9e121c344c54f92e64c0628fbfee3f Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 18:17:44 +0800 Subject: [PATCH 23/29] Fix handling of environ for MinGW --- src/sysenv.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sysenv.h b/src/sysenv.h index f7c037f7cd..38f03b1e26 100644 --- a/src/sysenv.h +++ b/src/sysenv.h @@ -22,12 +22,12 @@ #define environ (*_NSGetEnviron()) #elif defined(SYS_IS_MINGW) -// MinGW: On cross-compilation, just use environ directly -extern char ** environ; +// MinGW exposes environ via +#include +#endif -#elif !defined(environ) +#ifndef environ extern char ** environ; // generic fallback - #endif #endif // GAP_SYSENV_H From 5414f0d3582779be46d4a6c41478936e03a94a6e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:54:57 +0000 Subject: [PATCH 24/29] Fix MinGW cross-compilation issues: linker flags, zlib build, and test skipping Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- .gitignore | 5 +++++ Makefile.rules | 12 ++++++++++++ cnf/build-extern.sh | 30 ++++++++++++++++++++++++------ cnf/build-mingw-zlib.sh | 15 +++++++++++++++ configure.ac | 18 ++++++++++++++++-- 5 files changed, 72 insertions(+), 8 deletions(-) create mode 100755 cnf/build-mingw-zlib.sh diff --git a/.gitignore b/.gitignore index 23de23948a..20c65db923 100644 --- a/.gitignore +++ b/.gitignore @@ -81,6 +81,11 @@ doc/ref/user_pref_list.xml # external dependencies /extern/gmp*/ +# Ignore zlib build artifacts +/extern/zlib/*.o +/extern/zlib/*.a +/extern/zlib/*.so* +/extern/zlib/zlibrc.o # tests, test logs, package build logs /dev/log diff --git a/Makefile.rules b/Makefile.rules index 5855651668..337b38c4f9 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -746,11 +746,19 @@ EXTERN_FILES += $(GMP_FILES) gmp: $(GMP_FILES) $(GMP_FILES): touch "$(abs_srcdir)/extern/gmp/doc/gmp.info" +ifneq (,$(findstring mingw,$(host_os))) + MAKE=$(MAKE) $(srcdir)/cnf/build-extern.sh gmp "$(abs_srcdir)/extern/gmp" \ + $(EXTERN_CONFIGFLAGS) \ + ABI="$(ABI)" \ + --enable-static \ + --disable-shared +else MAKE=$(MAKE) $(srcdir)/cnf/build-extern.sh gmp "$(abs_srcdir)/extern/gmp" \ $(EXTERN_CONFIGFLAGS) \ ABI="$(ABI)" \ --disable-static \ --enable-shared +endif .PHONY: gmp @@ -785,6 +793,10 @@ ifneq (,$(findstring cygwin,$(host_os))) $(ZLIB_FILES): MAKE=$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" $(srcdir)/cnf/build-cygwin-zlib.sh +else ifneq (,$(findstring mingw,$(host_os))) +$(ZLIB_FILES): + MAKE=$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" $(srcdir)/cnf/build-mingw-zlib.sh + else $(ZLIB_FILES): diff --git a/cnf/build-extern.sh b/cnf/build-extern.sh index 9d02c96dde..e4ce64ecfd 100755 --- a/cnf/build-extern.sh +++ b/cnf/build-extern.sh @@ -26,12 +26,30 @@ if [[ ( ! "$builddir/config.status" -nt "$src/configure" ) fi $MAKE -C "$builddir" -if ! $MAKE -C "$builddir" check; then - echo "=== FAILED checking $pkg ===" - echo "The copy of $pkg distributed with GAP has failed to pass its internal checks" - echo "You can either install the library from a different source, or use" - echo "a newer release of GAP" - exit 1 +# Skip tests for cross-compilation as they cannot run on host system +# Check if --host was passed and differs from --build (cross-compilation) +if echo "$@" | grep -q -- "--host=" && echo "$@" | grep -q -- "--build="; then + host_arg=$(echo "$@" | grep -o -- "--host=[^ ]*" | cut -d= -f2) + build_arg=$(echo "$@" | grep -o -- "--build=[^ ]*" | cut -d= -f2) + if [ "$host_arg" != "$build_arg" ]; then + echo "=== SKIPPING tests for $pkg (cross-compilation: build=$build_arg, host=$host_arg) ===" + else + if ! $MAKE -C "$builddir" check; then + echo "=== FAILED checking $pkg ===" + echo "The copy of $pkg distributed with GAP has failed to pass its internal checks" + echo "You can either install the library from a different source, or use" + echo "a newer release of GAP" + exit 1 + fi + fi +else + if ! $MAKE -C "$builddir" check; then + echo "=== FAILED checking $pkg ===" + echo "The copy of $pkg distributed with GAP has failed to pass its internal checks" + echo "You can either install the library from a different source, or use" + echo "a newer release of GAP" + exit 1 + fi fi $MAKE -C "$builddir" install diff --git a/cnf/build-mingw-zlib.sh b/cnf/build-mingw-zlib.sh new file mode 100755 index 0000000000..cf11a9a552 --- /dev/null +++ b/cnf/build-mingw-zlib.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# zlib on MinGW requires a special build procedure +# Build only static library to avoid cross-compilation linking issues + +cd extern/zlib && + +# Build static library first +make -f win32/Makefile.gcc \ + CC="${CC}" \ + libz.a && + +# Install static library and headers +mkdir -p ../install/zlib/lib ../install/zlib/include && +cp libz.a ../install/zlib/lib/ && +cp zlib.h zconf.h ../install/zlib/include/ \ No newline at end of file diff --git a/configure.ac b/configure.ac index 3230d011d1..1a4cb8fc33 100644 --- a/configure.ac +++ b/configure.ac @@ -595,7 +595,14 @@ AS_IF([test x$gmp_found = xno],[ GMP_PREFIX='${abs_builddir}/extern/install/gmp' GMP_CPPFLAGS='-I${abs_builddir}/extern/install/gmp/include' GMP_LDFLAGS='-L${abs_builddir}/extern/install/gmp/lib' - GMP_LIBS='-Wl,-rpath,${abs_builddir}/extern/install/gmp/lib -lgmp' + case "$host_os" in + *mingw* | *msys* ) + GMP_LIBS='-lgmp' + ;; + *) + GMP_LIBS='-Wl,-rpath,${abs_builddir}/extern/install/gmp/lib -lgmp' + ;; + esac ]) AC_SUBST([BUILD_GMP]) @@ -673,7 +680,14 @@ AS_IF([test x$zlib_found = xno],[ BUILD_ZLIB=yes ZLIB_CPPFLAGS='-I${abs_builddir}/extern/install/zlib/include' ZLIB_LDFLAGS='-L${abs_builddir}/extern/install/zlib/lib' - ZLIB_LIBS='-Wl,-rpath,${abs_builddir}/extern/install/zlib/lib -lz' + case "$host_os" in + *mingw* | *msys* ) + ZLIB_LIBS='-lz' + ;; + *) + ZLIB_LIBS='-Wl,-rpath,${abs_builddir}/extern/install/zlib/lib -lz' + ;; + esac ]) AC_SUBST([BUILD_ZLIB]) From cd2ec2ec240fdecc189b6d31cd51188bb392ee29 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:58:12 +0000 Subject: [PATCH 25/29] Complete MinGW cross-compilation fix: resolve zlib static library format issue Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- cnf/build-mingw-zlib.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cnf/build-mingw-zlib.sh b/cnf/build-mingw-zlib.sh index cf11a9a552..0f460504f1 100755 --- a/cnf/build-mingw-zlib.sh +++ b/cnf/build-mingw-zlib.sh @@ -1,12 +1,16 @@ #!/usr/bin/env bash # zlib on MinGW requires a special build procedure -# Build only static library to avoid cross-compilation linking issues +# Build static library with proper cross-compilation cd extern/zlib && -# Build static library first +# Extract prefix from CC (e.g., "x86_64-w64-mingw32-gcc " -> "x86_64-w64-mingw32-") +PREFIX=$(echo "${CC}" | sed 's/gcc.*$//') + +# Build static library with cross-compiler make -f win32/Makefile.gcc \ CC="${CC}" \ + PREFIX="${PREFIX}" \ libz.a && # Install static library and headers From abe6e5788022833811144899e1bfc12e939aea3f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:14:58 +0000 Subject: [PATCH 26/29] Fix critical MinGW memory allocation overflow and verify linker flags Co-authored-by: tobiasdiez <5037600+tobiasdiez@users.noreply.github.com> --- src/system.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system.c b/src/system.c index 43a109574c..2622464d71 100644 --- a/src/system.c +++ b/src/system.c @@ -573,9 +573,9 @@ static void InitSysOpts(void) #endif // defined(SYS_IS_64_BIT) #ifdef SYS_IS_64_BIT - SyAllocPool = 4096L*1024*1024; // Note this is in bytes! + SyAllocPool = 4096LL*1024*1024; // Note this is in bytes! #else - SyAllocPool = 1536L*1024*1024; // Note this is in bytes! + SyAllocPool = 1536LL*1024*1024; // Note this is in bytes! #endif // defined(SYS_IS_64_BIT) SyStorOverrun = SY_STOR_OVERRUN_CLEAR; SyStorKill = 0; From 907e79cc6c6842475685ead00c91dc558fe7ccaf Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 20:38:39 +0800 Subject: [PATCH 27/29] Fix warning about 'export-all-symbols' when using msys --- Makefile.rules | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile.rules b/Makefile.rules index 337b38c4f9..60cf87dbe5 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -438,12 +438,12 @@ ifneq (,$(findstring cygwin,$(host_os))) LIBGAP_FULL = libgap$(SHLIB_EXT) LINK_SHLIB_FLAGS = -shared -Wl,--enable-auto-image-base -Wl,--out-implib,libgap.dll.a -else ifneq (,$(findstring mingw,$(host_os))) +else ifneq (,$(findstring mingw,$(host_os))$(findstring msys,$(host_os))) SHLIB_EXT=.dll - LIBGAP_FULL = libgap$(SHLIB_EXT) + LIBGAP_FULL = libgap$(SHLIB_MAJOR)$(SHLIB_EXT) LINK_SHLIB_FLAGS = -shared -Wl,--enable-auto-image-base -Wl,--out-implib,libgap.dll.a - + GAP_CPPFLAGS += -DPIC GAP_CFLAGS += -fPIC GAP_CXXFLAGS += -fPIC @@ -746,7 +746,7 @@ EXTERN_FILES += $(GMP_FILES) gmp: $(GMP_FILES) $(GMP_FILES): touch "$(abs_srcdir)/extern/gmp/doc/gmp.info" -ifneq (,$(findstring mingw,$(host_os))) +ifneq (,$(findstring mingw,$(host_os))$(findstring msys,$(host_os))) MAKE=$(MAKE) $(srcdir)/cnf/build-extern.sh gmp "$(abs_srcdir)/extern/gmp" \ $(EXTERN_CONFIGFLAGS) \ ABI="$(ABI)" \ @@ -793,7 +793,7 @@ ifneq (,$(findstring cygwin,$(host_os))) $(ZLIB_FILES): MAKE=$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" $(srcdir)/cnf/build-cygwin-zlib.sh -else ifneq (,$(findstring mingw,$(host_os))) +else ifneq (,$(findstring mingw,$(host_os))$(findstring msys,$(host_os))) $(ZLIB_FILES): MAKE=$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" $(srcdir)/cnf/build-mingw-zlib.sh From 0f47e74f6bdfd38f5bb7f62329519b72318ae58b Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 20:39:35 +0800 Subject: [PATCH 28/29] Update .gitignore to include gap.exe --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 20c65db923..afb23102e7 100644 --- a/.gitignore +++ b/.gitignore @@ -28,9 +28,10 @@ src/ffdata.c src/ffdata.h /ffgen -ffgen.exe +/ffgen.exe /gac /gap +/gap.exe /sysinfo.gap /sysinfo.gap-* /libgap*.dylib* From 6b1ec7ab82bb306a591be3d7b5a953a8d02f0877 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 28 Aug 2025 22:30:32 +0800 Subject: [PATCH 29/29] Improve conda env files --- environment-win.yml | 29 +++++++++++++++++++++++++++++ environment.yml | 15 ++++++--------- 2 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 environment-win.yml diff --git a/environment-win.yml b/environment-win.yml new file mode 100644 index 0000000000..05e4651b88 --- /dev/null +++ b/environment-win.yml @@ -0,0 +1,29 @@ +# GAP Development Environment +# +# This conda environment provides the necessary tools and libraries for +# developing and testing GAP on Windows. +# +# Usage: +# conda env create -f environment-win.yml +# conda activate gap-dev + +name: gap-dev +channels: + - conda-forge +dependencies: + # Core development tools + - make + - pkg-config + - m2-autoconf + - m2-libtool + - m2-m4 + - m2-grep + - m2-sed + + # C/C++ compiler and build tools + - m2w64-gcc + - ccache + + # Required libraries + - m2w64-gmp # GNU Multiple Precision Arithmetic Library + - m2w64-zlib # Compression library diff --git a/environment.yml b/environment.yml index 02d76dd574..d26f940639 100644 --- a/environment.yml +++ b/environment.yml @@ -1,14 +1,11 @@ # GAP Development Environment # # This conda environment provides the necessary tools and libraries for -# developing and testing GAP (Groups, Algorithms, Programming). +# developing and testing GAP on Linux and macOS. # # Usage: # conda env create -f environment.yml # conda activate gap-dev -# -# For Windows, you have to install MinGW-w64 separately -# (see README.md for instructions). name: gap-dev channels: @@ -17,16 +14,16 @@ dependencies: # Core development tools - make - pkg-config - # - autoconf # not available on Windows - # - automake # not available on Windows - # - libtool # not available on Windows + - autoconf + - automake + - libtool # C/C++ compiler and build tools - # - compilers (not available on Windows) + - compilers - ccache # Required libraries - gmp # GNU Multiple Precision Arithmetic Library - zlib # Compression library - #- readline # Command line editing library (not available on Windows) + - readline # Command line editing library