# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Maintainer: Naveen M K <naveen521kk@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>

_primary_python="no"
_pybasever=3.14
_realname=python

if [[ "${_primary_python}" == "yes" ]]; then
  pkgbase="mingw-w64-${_realname}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
  provides=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
  conflicts=("${MINGW_PACKAGE_PREFIX}-python3"
             "${MINGW_PACKAGE_PREFIX}-python${_pybasever}"
            "${MINGW_PACKAGE_PREFIX}-python2<2.7.16-7")
  replaces=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
else
  pkgbase="mingw-w64-${_realname}${_pybasever}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}${_pybasever}")
fi
pkgver=${_pybasever}.2
pkgrel=3
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('spdx:PSF-2.0')
url="https://www.python.org/"
msys2_repository_url="https://github.com/python/cpython"
msys2_references=(
  "cpe: cpe:/a:python:python"
  "cpe: cpe:/a:python_software_foundation:python"
)
depends=("${MINGW_PACKAGE_PREFIX}-cc-libs"
         "${MINGW_PACKAGE_PREFIX}-expat"
         "${MINGW_PACKAGE_PREFIX}-bzip2"
         "${MINGW_PACKAGE_PREFIX}-libffi"
         "${MINGW_PACKAGE_PREFIX}-mpdecimal"
         "${MINGW_PACKAGE_PREFIX}-ncurses"
         "${MINGW_PACKAGE_PREFIX}-openssl"
         "${MINGW_PACKAGE_PREFIX}-sqlite3"
         "${MINGW_PACKAGE_PREFIX}-tcl"
         "${MINGW_PACKAGE_PREFIX}-tk"
         "${MINGW_PACKAGE_PREFIX}-zlib"
         "${MINGW_PACKAGE_PREFIX}-libb2"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-tzdata")
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-autotools"
  "autoconf-archive"
)
#options=('debug' '!strip')
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
        "EXTERNALLY-MANAGED"
        0001-build-add-with-nt-threads-and-make-it-default-on-min.patch
        0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch
        0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch
        0004-configure-add-MACHDEP-and-platform-on-MINGW.patch
        0005-build-Add-default-cross-configuration-for-MINGW.patch
        0006-configure-enable-largefile-support-by-default-for-Mi.patch
        0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch
        0008-build-add-MINGW-support-for-posixmodule.patch
        0009-exports.h-Add-support-for-MINGW.patch
        0010-configure-add-options-so-that-shared-build-is-possib.patch
        0011-build-Add-PYD_PLATFORM_TAG.patch
        0012-build-Add-dynload_win-support-for-MinGW.patch
        0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch
        0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch
        0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch
        0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch
        0017-socketmodule-add-MINGW-support.patch
        0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch
        0019-sysconfig-make-_sysconfigdata.py-relocatable.patch
        0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch
        0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch
        0022-build-semi-native-build-sysconfig.patch
        0023-ctypes-Add-support-for-stdcall-without-underscore.patch
        0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch
        0025-ctypes-find_library-c-should-return-None-with-ucrt.patch
        0026-site-Customize-for-MINGW.patch
        0027-site-Change-user-site-packages-path-to-include-the-e.patch
        0028-python-config-output-Windows-paths-for-the-shell-var.patch
        0029-python-config-use-the-Python-variant-of-python-confi.patch
        0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch
        0031-build-Remove-MAXPATHLEN-default.patch
        0032-build-dont-link-with-gettext.patch
        0033-use-gnu_printf-in-format.patch
        0034-build-remove-usage-of-MS_COREDLL.patch
        0035-getcompiler-expose-MINGW-toolchain-related-informati.patch
        0036-build-fix-signal-module-build.patch
        0037-build-build-winconsoleio-and-_testconsole.patch
        0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch
        0039-build-link-win-resource-files-and-build-pythonw.patch
        0040-pycore_fileutils-add-MINGW-support.patch
        0041-configure-fix-inet_pton-check.patch
        0042-importlib-bootstrap-path-sep.patch
        0043-configure-set-MINGW-stack-reserve.patch
        0044-tests-fix-test_bytes.patch
        0045-timemodule-add-MINGW-support.patch
        0046-configure-Disable-checks-for-dlopen-dlfcn.patch
        0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch
        0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch
        0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch
        0050-configure-don-t-check-for-clock_-functions.patch
        0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch
        0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch
        0053-tests-Fix-some-failing-tests.patch
        0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch
        0055-configure-correctly-find-native-python.patch
        0056-build-Add-extra-flags-for-_bootstrap_python.patch
        0057-getpath-add-support-for-mingw.patch
        0058-build-Don-t-build-_posixsubprocess-on-Windows.patch
        0059-ssl-module-add-MINGW-support.patch
        0060-configure-Include-winsock.h-when-checking-for-netdb-.patch
        0061-configure-always-build-_multiprocessing-on-Windows.patch
        0062-configure-build-mmap-module-on-win32.patch
        0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch
        0064-configure-fix-building-some-test-modules.patch
        0065-Always-convert-to-before-passing-though-pathcch-func.patch
        0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch
        0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch
        0068-dynload_win-Port-GetPythonImport-to-MINGW.patch
        0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch
        0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch
        0071-build-Build-and-install-libpython3.dll-stable-ABI.patch
        0072-configure-define-_DEBUG-for-a-debug-build.patch
        0073-configure-fix-multiprocessing-module.patch
        0074-build-add-MINGW-support-for-selectmodule.patch
        0075-configure-disable-various-modules-on-MINGW.patch
        0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch
        0077-configure-Enable-_uuid-on-MINGW.patch
        0078-configure-make-incompatible-pointer-types-a-warning.patch
        0079-tests-test_makefile-normalize-path.patch
        0080-Fix-include-naming-for-cross-build.patch
        0081-Fix-format-warning.patch
        0082-Fix-pragma-warnings.patch
        0083-math-pyhash-MINGW-support.patch
        0084-tests-Fix-test-for-library-name.patch
        0085-dictobject-MINGW-support.patch
        0086-build-Fix-export-Py_GetBuildInfo-symbol.patch
        0087-build-Allow-profile-tests-failure.patch
        0088-build-add-support-for-building-C-modules.patch
        0089-build-build-fix-the-wmi-module.patch
        0090-Fix-exports-for-_suggestions-module.patch
        0091-compileall-Normalize-paths.patch
        0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch
        0093-configure-Work-around-broken-pc-file.patch
        0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch
        0095-venv-also-install-the-versioned-launchers.patch
        0096-configure-set-_WIN32_WINNT-version.patch
        0097-tests-fix-sysconfig.test_get_platform.patch
        0098-pycore_time-fix-missing-timeval.patch
        0099-mmapmodule-define-DONT_USE_SEH.patch
        0100-build-Add-ABIFLAGS-to-targets-when-needed.patch
        0101-sysconfig-patch-nt-schemes-again.patch
        0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch
        0103-configure-allow-older-autoconf.patch
        0104-tests-allow-sys.abiflags-to-exist.patch
        0105-configure-fix-AC_PATH_TOOL-usage.patch)

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  cd "${srcdir}/Python-${pkgver}"

 apply_patch_with_msg 0001-build-add-with-nt-threads-and-make-it-default-on-min.patch \
  0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch \
  0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch \
  0004-configure-add-MACHDEP-and-platform-on-MINGW.patch \
  0005-build-Add-default-cross-configuration-for-MINGW.patch \
  0006-configure-enable-largefile-support-by-default-for-Mi.patch \
  0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch \
  0008-build-add-MINGW-support-for-posixmodule.patch \
  0009-exports.h-Add-support-for-MINGW.patch \
  0010-configure-add-options-so-that-shared-build-is-possib.patch \
  0011-build-Add-PYD_PLATFORM_TAG.patch \
  0012-build-Add-dynload_win-support-for-MinGW.patch \
  0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch \
  0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch \
  0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch \
  0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch \
  0017-socketmodule-add-MINGW-support.patch \
  0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch \
  0019-sysconfig-make-_sysconfigdata.py-relocatable.patch \
  0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch \
  0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch \
  0022-build-semi-native-build-sysconfig.patch \
  0023-ctypes-Add-support-for-stdcall-without-underscore.patch \
  0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch \
  0025-ctypes-find_library-c-should-return-None-with-ucrt.patch \
  0026-site-Customize-for-MINGW.patch \
  0027-site-Change-user-site-packages-path-to-include-the-e.patch \
  0028-python-config-output-Windows-paths-for-the-shell-var.patch \
  0029-python-config-use-the-Python-variant-of-python-confi.patch \
  0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch \
  0031-build-Remove-MAXPATHLEN-default.patch \
  0032-build-dont-link-with-gettext.patch \
  0033-use-gnu_printf-in-format.patch \
  0034-build-remove-usage-of-MS_COREDLL.patch \
  0035-getcompiler-expose-MINGW-toolchain-related-informati.patch \
  0036-build-fix-signal-module-build.patch \
  0037-build-build-winconsoleio-and-_testconsole.patch \
  0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch \
  0039-build-link-win-resource-files-and-build-pythonw.patch \
  0040-pycore_fileutils-add-MINGW-support.patch \
  0041-configure-fix-inet_pton-check.patch \
  0042-importlib-bootstrap-path-sep.patch \
  0043-configure-set-MINGW-stack-reserve.patch \
  0044-tests-fix-test_bytes.patch \
  0045-timemodule-add-MINGW-support.patch \
  0046-configure-Disable-checks-for-dlopen-dlfcn.patch \
  0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch \
  0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch \
  0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch \
  0050-configure-don-t-check-for-clock_-functions.patch \
  0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch \
  0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch \
  0053-tests-Fix-some-failing-tests.patch \
  0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch \
  0055-configure-correctly-find-native-python.patch \
  0056-build-Add-extra-flags-for-_bootstrap_python.patch \
  0057-getpath-add-support-for-mingw.patch \
  0058-build-Don-t-build-_posixsubprocess-on-Windows.patch \
  0059-ssl-module-add-MINGW-support.patch \
  0060-configure-Include-winsock.h-when-checking-for-netdb-.patch \
  0061-configure-always-build-_multiprocessing-on-Windows.patch \
  0062-configure-build-mmap-module-on-win32.patch \
  0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch \
  0064-configure-fix-building-some-test-modules.patch \
  0065-Always-convert-to-before-passing-though-pathcch-func.patch \
  0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch \
  0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch \
  0068-dynload_win-Port-GetPythonImport-to-MINGW.patch \
  0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch \
  0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch \
  0071-build-Build-and-install-libpython3.dll-stable-ABI.patch \
  0072-configure-define-_DEBUG-for-a-debug-build.patch \
  0073-configure-fix-multiprocessing-module.patch \
  0074-build-add-MINGW-support-for-selectmodule.patch \
  0075-configure-disable-various-modules-on-MINGW.patch \
  0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch \
  0077-configure-Enable-_uuid-on-MINGW.patch \
  0078-configure-make-incompatible-pointer-types-a-warning.patch \
  0079-tests-test_makefile-normalize-path.patch \
  0080-Fix-include-naming-for-cross-build.patch \
  0081-Fix-format-warning.patch \
  0082-Fix-pragma-warnings.patch \
  0083-math-pyhash-MINGW-support.patch \
  0084-tests-Fix-test-for-library-name.patch \
  0085-dictobject-MINGW-support.patch \
  0086-build-Fix-export-Py_GetBuildInfo-symbol.patch \
  0087-build-Allow-profile-tests-failure.patch \
  0088-build-add-support-for-building-C-modules.patch \
  0089-build-build-fix-the-wmi-module.patch \
  0090-Fix-exports-for-_suggestions-module.patch \
  0091-compileall-Normalize-paths.patch \
  0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch \
  0093-configure-Work-around-broken-pc-file.patch \
  0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch \
  0095-venv-also-install-the-versioned-launchers.patch \
  0096-configure-set-_WIN32_WINNT-version.patch \
  0097-tests-fix-sysconfig.test_get_platform.patch \
  0098-pycore_time-fix-missing-timeval.patch \
  0099-mmapmodule-define-DONT_USE_SEH.patch \
  0100-build-Add-ABIFLAGS-to-targets-when-needed.patch \
  0101-sysconfig-patch-nt-schemes-again.patch \
  0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch \
  0103-configure-allow-older-autoconf.patch \
  0104-tests-allow-sys.abiflags-to-exist.patch \
  0105-configure-fix-AC_PATH_TOOL-usage.patch
 
  autoreconf -vfi
}

build() {
  declare -a _extra_config
  if check_option "debug" "n"; then
    _extra_config+=("--enable-optimizations")
    # Upstream defaults to -O3, so we can do too
    CFLAGS+=" -O3"
    # FIXME: https://github.com/msys2-contrib/cpython-mingw/issues/10
    if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
      _extra_config+=("--with-lto=full")
    fi
  else
    CFLAGS+=" -O0 -ggdb"
    CXXFLAGS+=" -O0 -ggdb"
    _extra_config+=("--with-pydebug")
  fi

  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  ../Python-${pkgver}/configure \
    --prefix=${MINGW_PREFIX} \
    --host=${MINGW_CHOST} \
    --build=${MINGW_CHOST} \
    --enable-shared \
    --with-system-expat \
    --with-system-ffi \
    --with-system-libmpdec \
    --without-ensurepip \
    --enable-loadable-sqlite-extensions \
    --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \
    "${_extra_config[@]}"

  make
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"

  # Some basic tests to ensure nothing major or MSYS2 specific features are broken
  ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
  MSYSTEM= ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"

  make -j1 install DESTDIR="${pkgdir}"

  # gdb pretty printers for debugging Python itself; to use:
  # python
  # sys.path.append('C:/msys64/mingw64/share/gdb/python3')
  # import python_gdb
  # reload(python_gdb)
  # end
  if [[ "${_primary_python}" == "yes" ]]; then
    [[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/
    cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/python_gdb.py
  fi

  # some useful "stuff"
  install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts}
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/

  # License
  install -Dm644 "${srcdir}/Python-${pkgver}/LICENSE" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}${_pybasever}/LICENSE"

  # PEP668
  install -Dm644 "${srcdir}/EXTERNALLY-MANAGED" -t "${pkgdir}${MINGW_PREFIX}/lib/python${_pybasever}/"

  # fixup shebangs
  for fscripts in idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
    sed -e '1 { s|^#!.*$|#!/usr/bin/env python'"${_pybasever}"'.exe| }' -i "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
  done

  # default aliases for all scripts/binaries
  if [[ "${_primary_python}" == "yes" ]]; then
    # Default names are aliases for Python now
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config
    cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle
    cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc
  fi

  # delete anything that could conflict with the primary Python
  if [[ "${_primary_python}" != "yes" ]]; then
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3-config
    rm "${pkgdir}${MINGW_PREFIX}"/bin/idle3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/libpython3.dll
    rm "${pkgdir}${MINGW_PREFIX}"/lib/libpython3.dll.a
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3-embed.pc
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3.pc
    rm "${pkgdir}${MINGW_PREFIX}"/share/man/man1/python3.1
  fi
}

sha256sums=('ce543ab854bc256b61b71e9b27f831ffd1bfd60a479d639f8be7f9757cf573e9'
            '3981fed74ee7d43ad69bd67e634e03d7bf6890558a87062380112e195688728a'
            '739d2a92f409bf7821a1570c399646f19a15373c1276e544ad834a880737072e'
            'b4bfb3f9a47951c935faa88a43553e2ec8f829ce953c7462a4c511b5e3d8404b'
            'd7e13f264134c5ec8de5616d34c45beeac6721f792e7f50e1acd860072513f9d'
            'f00c894b83e6636ae9d94811d8305724d98216580a17fd69b0a884dc6ba32925'
            '01c2572e009081751c64e475c3b4307e243d67d9d80f7a636ebe71d1289603c8'
            'fcc1977b0fcb7578558ea5c12e7ffdf04457af11e42862299fc651cb80f689bc'
            'a37cec4f6296989af868f241a5648ef5d7829f39b5a0e11b8e50177ad9631f85'
            'f463cb1aef115b38128471e498e7dd77f34dab9306fb7c7ad1092861ca177267'
            '31d5bd623095bd5e02ebac684a4d4f7162a31d8dc75251ab7438146cb1f7cf38'
            '2ffe52c7053c09ed7cce7f40fb1e1589ae27e9ad94e64cd8acf09a1969730028'
            '7eaf3453f674711969b0a1cd4a5dfbfada1baeb6b7a50c294d39db53567a466d'
            '19bf586545a04320597bb5dbc56e83b3b68fda97931b1d010950d2c1d0779669'
            '658c4b9d83aad7bfc32246e7f71b88ad4e7c42ea5a4670f7fa0814a8b577976c'
            'e2e9308d6a4cf90f0409cd40a67ce38c8bf23d12a554d5b538fa8493bf1f602c'
            '7c22aa98956862464c205004a73c0d609132170a4ad7e0b822b1b7fe6f7e0e3b'
            '74de59717d729d904f6461445d83084ff55ceb3167c742f85b9f16d886b0052f'
            '9ae1344196d351a807ef713f7fe46d50825e87da9e3d53c907f5b9dae56700ac'
            'c7c236debb84a13f39c44577204d68648ea9d12f659afe01937b35a500005e86'
            '590239c5d4e4cffe230eb13ea0476a3137fe69e29afbc03a640ad1cc92930a67'
            'a1f0b361e84c8c10a5fa3a7b858a2182943e180bd94449c8740e282492b828b9'
            '35f18d99bf7061563dcfc40705468e7b9a291e1a7fd0fbd07edd0b85fdf13284'
            'bc30a922c4eb43b1c4874dcae28889acdad6769d65ca08ad6942fa66721532b9'
            '21df63481e77ff0616b68d11735fe9f66a07db22637e7dc9ceec81b912270d07'
            '96ce9493e7c364cdb7565df6c97c47298bee18cabe0fefbea71c750fd570e4ec'
            '13df322079af080c4936628749078388b01dfaea3bd9dc16e36bcfb6e19dd233'
            '0b05979f42360abb802c3db9828f842bd6d7804eed1445daf04a510d93e708f9'
            'fcae86460355c8867bb054fe511b9025a1be8dc5e8ae69128fd09a3bf092855d'
            '949c7610fba34c5f37f292d2ee50d699bd50224f2fcd471ec92079b206fe9cca'
            'cb65f5048d65265d41340141f109cedd98dee231ebbfed2e0995baa6813f9391'
            '6d0810862b3ba0a15c02211b2f6222f3a6d2847acf8e8eeee719138655afa8ed'
            '0661693ee93476dd0fe8d6603d746bbc5e0f757bac31c3c66e2a67d2bd11bd6c'
            '6fe8188266e14080a4d0c85f5fadb439759b1bd1f7275af2fa31ba3ef7327a77'
            '4bfe87a9aac121ce90f489fad3d2892dceb082c46c3715ce68dbd2bcb0aaef44'
            'd486b0a14f4dff6d5f3a9155bf18c1b154ef11e553ac178c7712a0fd0464912f'
            'b1a5870ff7b33395ef81564e8507920c6a752100a6447e7e1c3f74570fab4aea'
            '6aa911049c44d122e52d17f5e2ee8d9dcf80c550b447665172fe99fb3d10d6c4'
            'cc9b2abf6359b818debd6596e58007dc1260ee640b5787d8f41ea15746c1c83f'
            '42b0de82b978eefa4768aa6a865b6369d834d3209850147ff6762aa7089fd06b'
            'ea76f7059ae2ca4ef8d81f901f22fd1717f5a5271bc22ac35d23099b144c81a1'
            '30d2394e3599b8875d9bcb785c177d8aff0d8ce1d03fe10c60b1b542940c88ab'
            'd321587cbf6496780736a3ac533bb99f510a0ed02b90222b2abeedeed8c437c0'
            '3af36d2871c1abea0a47103ed382ed85fdbca495c234e0525c37356d55bcf1ca'
            '8add3841f2e601b28d7965ca346583eef05ff438d8f79c1fd17ebfd6025d8c36'
            'a2e343b48bcf3005135459f3c2c096a1fa85ecef852768a5b0d3a6b950e92810'
            'b81fbddb9c70e52ceceec5a9688fe30bda0a27135ac1c36d8058b2835f8d0ce1'
            '7ad5fd9bbe2f1313832a3a42afdfdd262774202efc17c3e41fd8b2943d753fd1'
            '0ff4ba2bdcd8ea0078efd9c0104ee35922703fa5613e00eda5068afbfd0ea316'
            '89a8d216d8947027e761a3bdfb2211c7f5f7be9a9ffdaf20e8b79e19064640e8'
            'c7a0ee60b6460de7f1729154b9bfc0fa702d47c4808a0d18b3c338b3db93a384'
            '51b3c023b6ca577b37b3a7a8b6c6938c43cf7b255ccc5c4b8618afbeaf41f449'
            '90271ca1bfd8d4258e707bd566851dc82728045aab3138a122b9fcdfd9f34f70'
            'f162672df7180750c6b6487a0c2e14bfe9c0f012a47b635228fe3f320a487280'
            'e797a4d539b2e27313d0ad87d870eda7e61e089e03dd6a3a3f6d98fdd4a7ad24'
            '2bb0433445bbbc98f477ef2293288eb6d0e14b0d3c3f06397c15c2bce555438e'
            'a61c40e688c60c93c965a8ba89c21d7cbb211f71061cd9a0da4c2bc87b995eec'
            '36d97139f0d1f90949bdfe3f58894572eeb3db31e25df95ba51ca9cc1dad1308'
            '66b8e10cc659a306bd81b17cc25143423d3c186f76563b9dd7a53c68dd0b97a5'
            'bd1b00af1abb9d2e8a8bb0cd825aca6d7b9c82701e627b2c070385d586ff4cbc'
            '7bd65c18bc07920567752ef426192165ea0f59a2b609b44412ffd7359e0e1b98'
            'c1ba0fcd6cf3290d562bd3a5a24f74fa66836207facfe4b2ab8e2f8e5c82fa53'
            'd32d95cac2c43d21c73d89dedf029bdbfdfa0568dc54a2820929804dc873c9af'
            'cdec185633219ee2635e13889300ad12502dddc11d8036c75ebfa0dbab2e9939'
            'c3965458997392f83e84fff99ea59c702eb8b101a3d4cc5e8e822fb6e9a28be7'
            '43ebad033aea662cdf3bc874cd472669b78f35154ee2e77cd7aa545532ca737d'
            '9a9c94dc4bd0c31cd533773a6948ed724770d376ba2ad7f239ab553ccba609d5'
            '83f2ace4c41f5c5299265f2fc947f0842f08d3fa88ebe20792cdaf87b54d69e7'
            'b97d43fc3fd646ef941d22267307893e0e531e883b9768783e38f18a64ece8cf'
            '897fe6107adc398c5da879f29d5d266d84e5f0dedeca247f19e98e69474a9bea'
            '8616ddeb845d531a4a34ece9d26d1a462c30f03bde2d07125bb523ae46b42859'
            '687418fe40e7a0bd8e64513c2b2043596e295989a42abd6cf6e237e8c3a6a9c1'
            'a93a0ad4cbd5de54835dd3d9fcb8f03a55cb33ab433be9e9ff21623787092bb6'
            '4f331f7cb13f3fcc93ae1667bb10f7db5b2d1272d5831aa68cfc6449c2d968e8'
            '9dcc404d489fb1cd61777f8b38c3dbed256426e1d645f064ef7a9164c48b2421'
            '88fe59e1cf8be13ce08d9c5c4d16391e505e11c21e5f76b4fbcabfa13296efea'
            'bf808e8f934eab9ff3d1dfe80a06983c7b1359c0266426b394d7a2172cc580a6'
            '2414d1882b16f157e89648611b60482e07b678f478e71b2a07ba87e2b3190e9e'
            'f1b66e1b1a559647c3b7d7db411d248087165d4df48165f8def3b72aa5b2cbfd'
            '4142856b2341593885552bc2b4e00e12b94377c5dc7e019e14ac86e725091e2f'
            '7b85a07743a131b4667a4afbba54467a19924adf31b7c5fd8aa237ae2ccaca7b'
            '425319c852818ffef0d08ad3ab736102b9aa394f6c9bfd44a98edfd435b248f7'
            'fc16bceacfe536e65dfa629516462256adf48420519b63bde96d780c86cf15a2'
            '42585c0d9b3483c5f885f7be491c2a3532151a3994fe9427d23cc3f05afd04d7'
            'c16a57523656b48f13b5488a1f477715e14ec19946484e13089395973b0ea7ad'
            '81a69b93fc79c10487117b99df06412683d0c26820637a5b3f3e83e91bca8bef'
            '898fa82aace864a6877a7460969efc3976e5fb73d48d0de852aa3989a4876813'
            '9c3ecb398bb8809b33f39cb15fc72d8ba8f03342f910aedbf6e4e11b2a5f55a1'
            '19305bf2a29ea4eff1f5814e51b9c102711264b4bed4fa940f07ef55aada1c4d'
            'ca31f04abb2aad663fe14653e022679345ab6f169ce3fd34eb8d41def7e54709'
            '21fa9ba2604b5b20d2d04242395d0998179b71cc49623d9c8c0e0c4b44550c98'
            'a8e8fd099d0dc250932da266c7773f61b6fcc5996053dab08915f92015433649'
            '86252bca21daca60fd3aaff50e510faecbfb219026d6088082e405ffe46c2e23'
            'eb677ff0807ec368444c5b887a62aa87fa32f8a974b69d3a17e80cc25600d221'
            'da9392fcb9f9cdf596094fc790c967a89d399f20964071e817819a863809eda1'
            'a945835a6673238e8455ffd30675fcba22d9922effbd4a22a9b6e2e342230ea3'
            '98b256d36026f18f8bcb349ea2af5337595c3fc294a8d7c5448baf6c291e2826'
            '68248afc90d414143da21a906491e74191b3e4eeda5e97c9442de1a3de09db5f'
            '66c4a88bb004238ef1cf521d46eeabd6270754f714f0f22e90490f8cd0574c9d'
            'f59798621a4d3fd687775ac00989b393d5b46ea2afa7b4ca81b129d16d056b1d'
            '214552e15ae2c4fda6effc973cc16c655ea74a94eb1f11da47daa44262bb7a5b'
            '269e46e31953632857ba669101e08cff0d3c991176e4b41ba081ac4e53637f39'
            '3de4bb81880ce692d2d7b78add8d39216a8f00df0f9f6d8301e60d42ab99e0dc'
            'ae044116e5815bc40459f09a638d9ddd703dc13b7ae69f5f48fa15733c4e504f'
            '3f31781e4515c2f3c70b9573f478002f393846b6bebdd1d29aa8394ccd0153d0'
            '6405328b65091e7bea951c1d63e16dbf65705df0492eae62d71170446d5f6229'
            '6fe02c951a5ef96ee9429cb08dfbd6d49b1ce875d222895eab389be83a5b8e52')
