GeographicLib-2.4/cmake/FindGeographicLib.cmake0000644000771000077100000000323514644775140021335 0ustar ckarneyckarney# Look for GeographicLib # # Set # GeographicLib_FOUND = TRUE # GeographicLib_INCLUDE_DIRS = /usr/local/include # GeographicLib_LIBRARIES = /usr/local/lib/libGeographicLib.so # GeographicLib_LIBRARY_DIRS = /usr/local/lib find_library (GeographicLib_LIBRARIES GeographicLib PATHS "${CMAKE_INSTALL_PREFIX}/../GeographicLib/lib") if (GeographicLib_LIBRARIES) get_filename_component (GeographicLib_LIBRARY_DIRS "${GeographicLib_LIBRARIES}" PATH) get_filename_component (_ROOT_DIR "${GeographicLib_LIBRARY_DIRS}" PATH) set (GeographicLib_INCLUDE_DIRS "${_ROOT_DIR}/include") set (GeographicLib_BINARY_DIRS "${_ROOT_DIR}/bin") if (NOT EXISTS "${GeographicLib_INCLUDE_DIRS}/GeographicLib/Config.h") # On Debian systems the library is in e.g., # /usr/lib/x86_64-linux-gnu/libGeographicLib.so # so try stripping another element off _ROOT_DIR get_filename_component (_ROOT_DIR "${_ROOT_DIR}" PATH) set (GeographicLib_INCLUDE_DIRS "${_ROOT_DIR}/include") set (GeographicLib_BINARY_DIRS "${_ROOT_DIR}/bin") if (NOT EXISTS "${GeographicLib_INCLUDE_DIRS}/GeographicLib/Config.h") unset (GeographicLib_INCLUDE_DIRS) unset (GeographicLib_LIBRARIES) unset (GeographicLib_LIBRARY_DIRS) unset (GeographicLib_BINARY_DIRS) endif () endif () unset (_ROOT_DIR) endif () # This sets GeographicLib_FOUND (and GEOGRAPHICLIB_FOUND, deprecated) to TRUE include (FindPackageHandleStandardArgs) find_package_handle_standard_args (GeographicLib DEFAULT_MSG GeographicLib_LIBRARY_DIRS GeographicLib_LIBRARIES GeographicLib_INCLUDE_DIRS) mark_as_advanced (GeographicLib_LIBRARY_DIRS GeographicLib_LIBRARIES GeographicLib_INCLUDE_DIRS) GeographicLib-2.4/cmake/project-config.cmake.in0000644000771000077100000001041014644775140021344 0ustar ckarneyckarney# Configure @PROJECT_NAME@ # # Set # @PROJECT_NAME@_FOUND = TRUE # @PROJECT_NAME@_INCLUDE_DIRS = /usr/local/include # @PROJECT_NAME@_SHARED_LIBRARIES = GeographicLib_SHARED (or empty) # @PROJECT_NAME@_STATIC_LIBRARIES = GeographicLib_STATIC (or empty) # @PROJECT_NAME@_LIBRARY_DIRS = /usr/local/lib # @PROJECT_NAME@_BINARY_DIRS = /usr/local/bin # @PROJECT_NAME@_VERSION = 1.34 (for example) # @PROJECT_NAME_UPPER@_DATA = /usr/local/share/GeographicLib (for example) # Depending on @PROJECT_NAME@_USE_STATIC_LIBS # @PROJECT_NAME@_LIBRARIES = ${@PROJECT_NAME@_SHARED_LIBRARIES}, if OFF # @PROJECT_NAME@_LIBRARIES = ${@PROJECT_NAME@_STATIC_LIBRARIES}, if ON # If only one of the libraries is provided, then # @PROJECT_NAME@_USE_STATIC_LIBS is ignored. # # Since cmake 2.8.11 or later, there's no need to include # include_directories (${GeographicLib_INCLUDE_DIRS}) # The variables are retained for information. # # The following variables are only relevant if the library has been # compiled with a default precision different from double: # @PROJECT_NAME_UPPER@_PRECISION = the precision of the library (usually 2) # @PROJECT_NAME@_HIGHPREC_LIBRARIES = the libraries need for high precision message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}") # @PROJECT_NAME@_VERSION is set by version file message (STATUS "@PROJECT_NAME@ configuration, version ${@PROJECT_NAME@_VERSION}") # Tell the user project where to find our headers and libraries get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) if (IS_ABSOLUTE "@PROJECT_ROOT_DIR@") # This is an uninstalled package (still in the build tree) set (_ROOT "@PROJECT_ROOT_DIR@") set (@PROJECT_NAME@_INCLUDE_DIRS "@PROJECT_INCLUDE_DIRS@") set (@PROJECT_NAME@_LIBRARY_DIRS "${_ROOT}/src") set (@PROJECT_NAME@_BINARY_DIRS "${_ROOT}/tools") else () # This is an installed package; figure out the paths relative to the # current directory. get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE) set (@PROJECT_NAME@_INCLUDE_DIRS "${_ROOT}/include") set (@PROJECT_NAME@_LIBRARY_DIRS "${_ROOT}/lib@LIB_SUFFIX@") set (@PROJECT_NAME@_BINARY_DIRS "${_ROOT}/bin") endif () set (@PROJECT_NAME_UPPER@_DATA "@GEOGRAPHICLIB_DATA@") set (@PROJECT_NAME_UPPER@_PRECISION @GEOGRAPHICLIB_PRECISION@) set (@PROJECT_NAME@_HIGHPREC_LIBRARIES "@HIGHPREC_LIBRARIES@") set (@PROJECT_NAME@_SHARED_LIBRARIES @CONFIG_SHARED_LIBRARIES@) set (@PROJECT_NAME@_STATIC_LIBRARIES @CONFIG_STATIC_LIBRARIES@) # Read in the exported definition of the library include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake") # For interoperability with older installations of GeographicLib and # with packages which depend on GeographicLib, @PROJECT_NAME@_LIBRARIES # etc. still point to the non-namespace variables. Tentatively plan to # transition to namespace variables as follows: # # * namespace targets were introduced with version 1.47 (2017-02-15) # * switch @PROJECT_NAME@_LIBRARIES to point to namespace variable after # 2020-02 # * remove non-namespace variables after 2023-02 unset (_ROOT) unset (_DIR) if ((NOT @PROJECT_NAME@_SHARED_LIBRARIES) OR (@PROJECT_NAME@_USE_STATIC_LIBS AND @PROJECT_NAME@_STATIC_LIBRARIES)) set (@PROJECT_NAME@_LIBRARIES ${@PROJECT_NAME@_STATIC_LIBRARIES}) message (STATUS " \${@PROJECT_NAME@_LIBRARIES} set to static library") else () set (@PROJECT_NAME@_LIBRARIES ${@PROJECT_NAME@_SHARED_LIBRARIES}) message (STATUS " \${@PROJECT_NAME@_LIBRARIES} set to shared library") endif () # Check for the components requested. This only supports components # STATIC and SHARED by checking the value of # @PROJECT_NAME@_${comp}_LIBRARIES. No need to check if the component # is required or not--the version file took care of that. # @PROJECT_NAME@_${comp}_FOUND is set appropriately for each component. if (@PROJECT_NAME@_FIND_COMPONENTS) foreach (comp ${@PROJECT_NAME@_FIND_COMPONENTS}) if (@PROJECT_NAME@_${comp}_LIBRARIES) set (@PROJECT_NAME@_${comp}_FOUND TRUE) message (STATUS "@PROJECT_NAME@ component ${comp} found") else () set (@PROJECT_NAME@_${comp}_FOUND FALSE) message (WARNING "@PROJECT_NAME@ component ${comp} not found") endif () endforeach () endif () # @PROJECT_NAME@_FOUND is set to TRUE automatically set (@PROJECT_NAME_UPPER@_FOUND TRUE) # for backwards compatibility, deprecated GeographicLib-2.4/cmake/project.pc.in0000644000771000077100000000050214644775140017424 0ustar ckarneyckarneyprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ bindir=@bindir@ Name: @PACKAGE_NAME@ Description: A library for geographic projections Version: @PACKAGE_VERSION@ URL: https://geographiclib.sourceforge.io Requires: Libs: -L${libdir} -l@PACKAGE_NAME@@lib_postfix@ Cflags: -I${includedir} GeographicLib-2.4/cmake/Makefile.am0000644000771000077100000000055114644775140017065 0ustar ckarneyckarney# # Makefile.am # # Copyright (C) 2011-2022, Charles Karney cmakedir=$(datadir)/cmake/GeographicLib install: $(INSTALL) -d $(DESTDIR)$(cmakedir) $(INSTALL) -m 644 $(srcdir)/FindGeographicLib.cmake \ $(DESTDIR)$(cmakedir) EXTRA_DIST = CMakeLists.txt FindGeographicLib.cmake \ project-config-version.cmake.in project-config.cmake.in GeographicLib-2.4/cmake/CMakeLists.txt0000644000771000077100000000746314644775140017602 0ustar ckarneyckarney# config file support for find_package (GeographicLib). This needs to # deal with two environments: (1) finding the build tree and (2) # finding the install tree. geographiclib-config.cmake detects which # situation it is handing by looking at @PROJECT_ROOT_DIR@. If # this is an absolute path, it's in the build tree; otherwise, it's in the # install tree. (Note that the whole install tree can be relocated.) # Variables needed by ${PROJECT_NAME_LOWER}-config-version.cmake if (MSVC) # For checking the compatibility of MSVC_TOOLSET_VERSION; see # https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp # Assume major version number is obtained by dropping the last decimal # digit. math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10") else () set (MSVC_TOOLSET_VERSION 0) set (MSVC_TOOLSET_MAJOR 0) endif () # geographiclib-config.cmake for the build tree set (PROJECT_ROOT_DIR "${PROJECT_BINARY_DIR}") set (PROJECT_INCLUDE_DIRS "${PROJECT_BINARY_DIR}/include" "${PROJECT_SOURCE_DIR}/include") if (PROJECT_STATIC_LIBRARIES) set (CONFIG_STATIC_LIBRARIES "${PROJECT_NAME}::${PROJECT_STATIC_LIBRARIES}") else () set (CONFIG_STATIC_LIBRARIES) endif () if (PROJECT_SHARED_LIBRARIES) set (CONFIG_SHARED_LIBRARIES "${PROJECT_NAME}::${PROJECT_SHARED_LIBRARIES}") else () set (CONFIG_SHARED_LIBRARIES) endif () configure_file (project-config.cmake.in "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake" @ONLY) configure_file (project-config-version.cmake.in "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake" @ONLY) export (TARGETS ${PROJECT_ALL_LIBRARIES} ${TOOLS} NAMESPACE ${PROJECT_NAME}:: FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-targets.cmake") # geographiclib-config.cmake for the install tree. It's installed in # ${CMAKEDIR} and @PROJECT_ROOT_DIR@ is the relative path to the root # from there. (Note that the whole install tree can be relocated.) if (CMAKEDIR) # Find root of install tree relative to CMAKEDIR file (RELATIVE_PATH PROJECT_ROOT_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKEDIR}" "${CMAKE_INSTALL_PREFIX}") # strip trailing slash get_filename_component (PROJECT_ROOT_DIR "${PROJECT_ROOT_DIR}/." PATH) # @PROJECT_INCLUDE_DIRS@ is not used in the install tree; reset # it to prevent the source and build paths appearing in the installed # config files set (PROJECT_INCLUDE_DIRS) configure_file (project-config.cmake.in project-config.cmake @ONLY) configure_file (project-config-version.cmake.in project-config-version.cmake @ONLY) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake" DESTINATION "${CMAKEDIR}" RENAME "${PROJECT_NAME_LOWER}-config.cmake") install (FILES "${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake" DESTINATION "${CMAKEDIR}" RENAME "${PROJECT_NAME_LOWER}-config-version.cmake") # Make information about the cmake targets (the library and the tools) # available. install (EXPORT targets NAMESPACE ${PROJECT_NAME}:: FILE ${PROJECT_NAME_LOWER}-targets.cmake DESTINATION "${CMAKEDIR}") if (MSVC AND PACKAGE_DEBUG_LIBS) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Export/${CMAKEDIR}/${PROJECT_NAME_LOWER}-targets-debug.cmake" DESTINATION "${CMAKEDIR}" CONFIGURATIONS Release) endif () endif () # Support for pkgconfig/geographiclib.pc set (prefix ${CMAKE_INSTALL_PREFIX}) set (exec_prefix "\${prefix}") set (lib_postfix ${CMAKE_DEBUG_POSTFIX}) set (libdir "\${exec_prefix}/${LIBDIR}") set (includedir "\${prefix}/${INCDIR}") set (bindir "\${exec_prefix}/${BINDIR}") set (PACKAGE_NAME "${PROJECT_NAME}") set (PACKAGE_VERSION "${PROJECT_VERSION}") configure_file (project.pc.in geographiclib.pc @ONLY) if (PKGDIR) install (FILES "${CMAKE_CURRENT_BINARY_DIR}/geographiclib.pc" DESTINATION "${PKGDIR}") endif () GeographicLib-2.4/cmake/project-config-version.cmake.in0000644000771000077100000000675314644775140023046 0ustar ckarneyckarney# Version checking for @PROJECT_NAME@ set (PACKAGE_VERSION "@PROJECT_VERSION@") set (PACKAGE_VERSION_MAJOR "@PROJECT_VERSION_MAJOR@") set (PACKAGE_VERSION_MINOR "@PROJECT_VERSION_MINOR@") set (PACKAGE_VERSION_PATCH "@PROJECT_VERSION_PATCH@") # These variable definitions parallel those in @PROJECT_NAME@'s # cmake/CMakeLists.txt. if (MSVC) # For checking the compatibility of MSVC_TOOLSET_VERSION; see # https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp # Assume major version number is obtained by dropping the last decimal # digit. math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10") endif () if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_NAME@") # Check package name (in particular, because of the way cmake finds # package config files, the capitalization could easily be "wrong"). # This is necessary to ensure that the automatically generated # variables, e.g., _FOUND, are consistently spelled. set (REASON "package = @PROJECT_NAME@, NOT ${PACKAGE_FIND_NAME}") set (PACKAGE_VERSION_UNSUITABLE TRUE) elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@)) # Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple # since a multi-architecture library is built for that platform). set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@") set (PACKAGE_VERSION_UNSUITABLE TRUE) elseif (MSVC AND NOT ( # toolset version must be at least as great as @PROJECT_NAME@'s. MSVC_TOOLSET_VERSION GREATER_EQUAL @MSVC_TOOLSET_VERSION@ # and major versions must match AND MSVC_TOOLSET_MAJOR EQUAL @MSVC_TOOLSET_MAJOR@ )) # Reject if there's a mismatch in MSVC compiler versions. set (REASON "MSVC_TOOLSET_VERSION = @MSVC_TOOLSET_VERSION@") set (PACKAGE_VERSION_UNSUITABLE TRUE) elseif (GEOGRAPHICLIB_PRECISION MATCHES "^[1-5]\$" AND NOT ( GEOGRAPHICLIB_PRECISION EQUAL @GEOGRAPHICLIB_PRECISION@ )) # Reject if the user asks for an incompatible precsision. set (REASON "GEOGRAPHICLIB_PRECISION = @GEOGRAPHICLIB_PRECISION@") set (PACKAGE_VERSION_UNSUITABLE TRUE) elseif (CMAKE_CROSSCOMPILING AND NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@")) # Reject if cross-compiling and there's a mismatch in the target system. set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@") set (PACKAGE_VERSION_UNSUITABLE TRUE) elseif (PACKAGE_FIND_VERSION) if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) set (PACKAGE_VERSION_EXACT TRUE) elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR) set (PACKAGE_VERSION_COMPATIBLE TRUE) endif () endif () set (@PROJECT_NAME@_SHARED_FOUND @GEOGRAPHICLIB_SHARED_LIB@) set (@PROJECT_NAME@_STATIC_FOUND @GEOGRAPHICLIB_STATIC_LIB@) # Check for the components requested. The convention is that # @PROJECT_NAME@_${comp}_FOUND should be true for all the required # components. if (@PROJECT_NAME@_FIND_COMPONENTS) foreach (comp ${@PROJECT_NAME@_FIND_COMPONENTS}) if (@PROJECT_NAME@_FIND_REQUIRED_${comp} AND NOT @PROJECT_NAME@_${comp}_FOUND) set (REASON "without ${comp}") set (PACKAGE_VERSION_UNSUITABLE TRUE) endif () endforeach () endif () # If unsuitable, append the reason to the package version so that it's # visible to the user. if (PACKAGE_VERSION_UNSUITABLE) set (PACKAGE_VERSION "${PACKAGE_VERSION} (${REASON})") endif () GeographicLib-2.4/cmake/Makefile.in0000644000771000077100000003212114644775150017075 0ustar ckarneyckarney# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile.am # # Copyright (C) 2011-2022, Charles Karney VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = cmake ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.h CONFIG_CLEAN_FILES = geographiclib.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/project.pc.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@ GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@ GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ lib_postfix = @lib_postfix@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ cmakedir = $(datadir)/cmake/GeographicLib EXTRA_DIST = CMakeLists.txt FindGeographicLib.cmake \ project-config-version.cmake.in project-config.cmake.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cmake/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cmake/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): geographiclib.pc: $(top_builddir)/config.status $(srcdir)/project.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile install: $(INSTALL) -d $(DESTDIR)$(cmakedir) $(INSTALL) -m 644 $(srcdir)/FindGeographicLib.cmake \ $(DESTDIR)$(cmakedir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: GeographicLib-2.4/doc/gauss-krueger-convergence-scale.png0000644000771000077100000007607214644775140023404 0ustar ckarneyckarneyPNG  IHDRCJPLTEnОXXlleYYjjllmdd``__zzOKKff?A󅷷b[RR}}}YYEETQQ``LLggSSSSSIIInn@@EEEZZuu555TFFaaPvMMhhbbd^^`TToo}9[[vvbb}}NNruUU&#\\wwzzzHHcc~~k7[JJXؕOOjjffffVVqq\\\::]]II>>>;KI:PPkku((***noWWrrxx"""^^yyv͖eeQQll΃| IDATxy\TI/J{0St 8djDZ-(@疬rA|u"Fg(q j̽ 2~M3vi)%.UM'(L¥]j_'"N%3%3O{N`,˯ua`Kύ07 >k:Vm-[eY@:G?R#Pn}8-JCsI9Kkq0([Sa߃j55Q})W$pk*@,|ox 0׺ % AA{."Z hX;<<?={ߒ.AXKAJ[˜!^AV\þ'@' o"@$TVWhupB2KAReg7]2mMdR~Vعԟ٠{i:=d?Y|Gk̓_-h;m-g^?~bn:BRjZߡȼ##Zu"?p#k,`Q¾{u*Ly8շXYS2sڵ o=6tUL9&~/a*'Z5@ ?A5Sz@0 -VoVVd9Ȋ {3V\ӧm0!fe4oTqrN9ўZSu۱N˕m`4j= 3BGKGim'>TQk%y5ۺT"#زDx'vV[/ŲXhb2$Kin{^z_c荩b\cuKlqڵJqr+j2% p%i5*eY?>rPnMe.=BXMuS2P3JwKb\dpFy+hٸa%"PC#Nxw 0t鯙7~/6(JoS3D>Z6BiUo@~R&C:GAu ;p2I v#UpQ'윫ɒo:l")85A/RO/ $QVR_ދDŤOnò+~w͐|Ngc OB`V_U$*[yT8LF|m- k,@)f{}b2G2ݡ0SuL_X*H'lbo* Q^RSqȧ&Mf^nl`_.Q3{xR)dzp-uøӲ2FltH{s>僺Wyt=4ĦtnPn~ɊϏzH#9]˖Z{3yYMm1iKl[=XAH gW鱗U9p G2gyfk QQ@a$kAF?o$kmb-7T ͷFniaskr ʪs_Nz)FWljxK|b9V):ww`KM_ojh?*s̰᪻Y(cƹl鑭)H|.|}SKJ-4՝u}H:O)r7{0lT)Ȩ,lN^2/ -n}0H5b.i*JfOX׋wΨ[I&.GR8N:,^BKJ5XΖ™t搤,TL䢄Lv^ӯ"Yʘ5-I^nǦV[_LRN[hK=d lm m;Pa 2 EFpubcPPJZDX3s/!wT1)wcƱy ozqnezyp4 6Zbzъ%cc1 2Vi%nX5Zn݆β%vuieEZV:FoF0-.[janjڣwys8K;~#y%37 7 /h-Pn͆P&#ۚ Ȑ DžwIg͵QA H{:P dQ|u o~տ(9 w0kiMQ5Ƕ@%*h>#6[ R<<ԹY&8y#╌崓 g}ڟ#A 񑅎9_H6=1EC QL0}\3(bzǷ·$k6&x=q2O:O'[^&xEgA<=4Qf9LV- +s}hCaD {˘i,딙1[|c1A3;Q dd$$K[&2]=_+54"o,9MlN|C9tKC2 --͘x VO[4%y"?־"`ǖf'6⿗vSuU;τz/4~%mz48 {rsѱĆr`|bàQ [$b E;r|~4p5N4zSR<T͌N=q xzM?a:b D$^G2%\lp$a}X=jM S1lC)kKBB,j:U>%% )q ]3]pa󛲁ӻ'^/$Urɨv|ώr=_t]5R^K>[ZR#W[3LKQ$Ml0 u+d=KvҊ*A%nK :Nw6o;AW[$r5 " LE䣽DV'CECvϟQ %iݢ=2|S&  >SvީyrO*A*񺼬k7BCYDvYAH74KW~E>a(:ċ8k;pCa6>̓\n]P$ЁL7nfXH+rlÚ@CggLs0<`ґWDH\' tk'9a,WA+PPX4}%͠?$M>QqP \k}V##qE[DK7^4פc~FBq#|ngg\>FTDd"m‚diYPr%7B{$!F^r~zoHC&.H7vqfm>MҍqzJC~[W"(owJkD }tO~&ƸϑHHy_uiqrٌr^@7l(ljKh(/_)'W "$\u%XhNNG2>,/Y(C^G':O~Dz1PXKd7A ;/31SC7$Vih$H4By` 1jhݦ*M,%1O.$￴v l0,iqn5-ZC}yD1lYBL%Ϳ9HcugS0d< 47t#:(hШ3eslnE E;keɄ<2,߱hfx(yRz;Y.h4b,H``$lV%#7pkfV+et[RnXbJob\c;+~[z} z le"cRA=cPLBpb14 cp|툺2Rg?Z>?>{~ɾ~0IUrp, 2X2}g_?5O/`pZG+-C$ e""9t 39[J>tCEnIVx\\vr\&.¹#jNGY Ghf_5TCVYFt d5 Sj2Mn~R..eswֶ;%+r>%|9n8Ym5M!-J{D&D2vq3D]N} +f?f%&75 zvU-\Q )}4|N?qF9!MV?5ME塢3l*CKsȅ!fYJm[5f*nCzh'l"&YT> sπNXN&؁θI̤FUrEkE??2=>FrSx\i-Pw|? Ϯ3vWZVZ[n'bvkΊuzn>I?%\A<4t5 @+q0iqQXli8/*W1D骶2bCVb2I_߂GPQw;D1)ѳkZOcBsͥ,軬,=167$;K}Pqi@c! ϐZOKĚaSJmT@VaQhM6dَ(~㍿q@?^Xw/7M2y՗'hZ`6Pn=av1*jm#vd.G0GY+ Nd; T+oKDIn;6VVȌ>#&C|wEy;d Et"~^!sg9Ю'KF0\]S>OVL5U{o n?Q1D-U'L 7?W) !R(s$/ 1_ϙQ`l^ M6" fX:>uN#CPD5s>5\m>N;pd0%r ՙÂ?i= Q(~/xDIiD.Fm|]{]+u]8&Dq.ĭ%< = {e5f\ QTmC'R> E3Esc"hFZNv_Rfg9|oAfd#ubmCf!q/o \FDU$Di~Z!ʘs 7|[VN V?8x8JNʮ6QjB30/wf`7xȔQۯ 2`dY`XņN6õEc ?plF_^Ѭ, Ĥ~FIGS:UG9ҳr;C*[SjrV*2T,g;mT a"_ۇhWq|Npߛ uDݠ {oV TNB;(9!"Z6Q3~7l_kf>Sc%!?/ & !I.a JnD|o;nDH--NcMK1.2T%^bc7G)˩ od׆UGt lѱ0F8GD 皔vJBE웤12T?!/Z3nO:=uM~"8ˋXCz5%.a"aŊ$Ο>qw(%B]|LKմ Q|92 )I%Fl JA^םຐ(<.xo IDATzKhR?b* l?lYJ >̲ۈ(J#L3959IbK- cnw:1UҰڤڶQIGۍJ2#KTv/ۀdtMoPa [AAoG3"f5vV/-&2UTBl[(>ΦӔ/\&=ԭ`<.Mq9VG'*^E#zKt˄Diq9ID|K2|mW:m9_nY~ANy*)K0MDmYPy" .%suD+dB,&ۿ͌&"c.;DH9KSU#f*{Sݸl"3oHFbܪL:ZyYKϜZbC#sVz]$ ZW7]YOwW*x+lyPiyl)R!tuUQ3QD#:28『q@tr@_\/ 1NM =y5RpO']u{̵Q-GV0urgytv4؍:SXuiVuEfz ٺg60 .z8[oxt3{O&DI/Xn5%ՁM}_t3ffuYEѴZ[\Z\RsjS3XK{cV4.o[;h#N 3vu͝27(@?C>FY@cgyƙuL֖I;%vnLP M꟏PV0\2rl)h^ Qd[bdv̢Фͥ= f`#h T)ޠ(bWڰc$l5OQ\/F(6e›r,u~~>U*hW|fK}QgQvCP@?H| Ӿ#Do*+繐};#~VSL[NQ7j=qG?!23?Y)^_vƬ~[=Hr q&E/ito!"{ rSrW j@mJK1ˊ1t0t)~n-t˺hvܺ 8EYO @)@.\G~0[zdFƾ"r@ Ѝch35M u)I=*]M[P; }ɱ PHTЙa|g`Ο,Sn9Mrp.WPo*^p;qSː[@'Ћҹ-v|Lf9͝=tO]He Mƿ9ɿ<=sPn TB8AXJWЎBf eSOբE/^'= [hl+y1/Op蹙\upCޤ$0kߋaL_) TMeePN֋C!N*{,]a .XP[XmE<O/KgbӤvüwaO@{T򌂨U Эk3[gG8l?ZV\%vds̮%;„*78Ptj0R"@|s,a6BQCq&oIPmpSJmr&@5(3'ʴ.L#cŎ.;h=4s2)S;gLq?j$G )/aJ–n =MXWT&bL"y̒! mPO /cs9!3IɆURF%~EfXx`%嫓q0iQw/˵v!J—*/,'}9I{LU9; (݊\I\OXT(VүƯ\o7qk8[ cr.sŁ7-h]m5i‡8?MDߜ Y@CAӊ#  '@ ?FɁjW֮U:*49JJ/_@/XLyB1-?PЯ!@Y#¼š5,\ EW⹃ aq_کWl /m52>c!Pb6}359|i"=Ls[ߡ*]ʁ*rF{j(!ApZVYnqU8 Cv &VBCjJQxrqkcA"ͥ"'>Ze4%3^k]~o{@õ'ge~s ,'-Ċ-nb蘦HD<DŽ,l3Hah {.*:dM I9qX$mB%vj?[-iʪ)[.CfS%R Sj9pк M]܁\xg(!h 3INV\eo,~َ1{sSxhS ' / V2Se+G}庼Zwxˉ$"4ȠzCaOMfbJX]ء.*mU{)$ew~~ÓIP'b"(T2EEwXlb!kI߂mb U];hVi]0AIz PM)*?o6 ZRt;j]t((>3$1!,¨?.?=%@(9? t)h,&G~K6k0b"p@ l/bKCvo~MЪOX{6@MWw"~6xY;HmW#F@yEX]V3e4Wg@ȵAL<M||qa?:5Y#+0z-M2 yIL"$3R&UB~)^ _'٭P ŠMB ~DWB %wܞh[-$& S+b&J!'ǜ )E9 Gyf̀Nx 0NrB_P>*z] /ߑk$@E+}kوgzi5Hw9R_+x0| (uR@̑p{E%/@ϰ+!)+ͅ:Q@9 f!^aR<CYq[;;S[LJ""f Ll İ5%!:ih,\-#C!^eck PLp;#^纪!Ȭl=u~hԿD i2fdFЀDH!^ EmxY+*?W#4S[b^W{ƇC*'@5˧"^3dGFXr7RPF{@=.AxWDs@+݌b̿Sޒ~  8{7с:1wAѺk7:"BK> 7/FE9D@5;a E{ډ]N:'(J?oD @zʝ 48*$3J %Q,AU!|G2_Nc谏=&V6&)Lo?;Cu*RhXS +YCА T"йߪ'2 J+;t(g܆d U{=$EF,hӾ'|ϟ7d2On?7] ddų!,BmNw`o˲KPJawyf~=': a>m?W:~2PS) ni" !@: f,&{}d-fGjPAW[4idnݫp!eAr:_ `+QO7gݷ Ppx;PT,| 23J7 Gsǩz^8< k@2a"i/l`C C[L5 A%4߳Cbَbğw@0:ȏy@SLζL;k162` H- >,+@@CC <5tUa݁u3Tx6 $4.j2FfD׋@=պ|h褳g< tq́!a?DiǘgO49}ٸ=X 7"Br)H(h9Vz(,"'P(`LoMk&犞<Ej^ѥP C5tJ9YrRcbǛ@Qo&,ެsfՠxR4/Bp05.r5es(e5#JŰ[#N)xЎPR!tp H_/4&i2nHg"g0sFVI Oۏ$_Mc4( g9wgBŧK>&f>B!>Ue"0./P~=AZmDo39 #1P΂%gwȮ'?"[@^\e{C&$ ͥ/[-9qLR(2?}fwy6v?| ̏R֪A*o  ZE.^fA79ޝ"kS28xzR-+0ɋ дg U x &~w=&Sl7t;astI&V+ )b>{cK'u}{R)ʥ5 ܥf'~By!7PfQt עqM Qb t)TE< IDAT-  d@>.O EelK鞴`ɇu:Ɣ\ʛ(4Ehm] _ᘷP|~]~,_9^溽H(Q~3uDU^Be`~%H2+/!(oU=g[$Y=_>s<)0(yd(ˑTJ/F @%.smjgio(SHogIfdɀFB4 1~;&‚q$Gvpr?ʏ qIr-bشeDoR9nͰ-z1vD-員(Do+dotP1<2㗓bvՄv=vT8fj]"Nk@%V2RLf8nQ `A䕮%묷% kS@2ܓiC(o G׭ 38\B(i2!R h]]{l{!;ƿuDe׽sʄC(ZIH,s X [Lo gݗqo"䬼R Ōc& ݫ\>ˁFl!qRq۶˗- f4q0N[tmVqw pwѺ$5ƸuxVPSqq1Y<|fFA{ђe5.]2]폱.}iFsLC|5s nIho3)s7Z;uwGǶefFo.[*N\ڶqI;%r֥7ԭ.1uV~pWPk\\VdZ{wnkiڽ☇\3 f>`G}V{Z]>kݴIlZRkLiԹu)9hαM.1c?(Z}2=FۡnnmXtoOuvqf 0з,ٔ9Rݙ=2^t:ӳxye(k2ec 50pO_` {{qo~0/?Ixz'3'⡶ 9 v&:(-dad4'dn{,wtr{&/}mo7C3"6h } 2ܲ\oigc e7CkOg(]ˎ κr9p&et Ɔ1Qz! Dw^P&:0t}*uZHzyK%3* WP'Wj(3T_Jw>_8Dй00|Q.mK-h$%Tp#w{(C=cДzR3ѵW! $w#Q CoU1D:-L ha.%;;61^j}`j6GG50%j3f-Fe MbёV׀)}%'+_El}Z41$CC;>[޿zCe7|`;/gzgrՉ 5^MGa.n l`̲bί| 33c]>vЂ?ݖ,C:SGgٽUCB&Qe247JS=n؁l|l1P%YxNOw#a5 t%4(l*1?pCqkL۷} *AAAG#ª2tuE}JHx8Dh1t?\#9U| j&}p%zߍ2C2-[t0:)=2&yU@g[nϚT]'I;JYI1&O^[PҡN~,u5T@6YĊO/ {/~X츪*&6>#=_b^:g3 ɻTOR{J8%M2.KI <) k?} g15H~eˑ=m}^wkxh14BظaGl:g2T8QxՔЉ2f7 ^aW[NY{ |Ϝ3tW܆|axcc\biȭjKPuνTyZ~qabZdz }7M< ]dɔ)QG*K&Eu2hথs?Y-䕀 WiCY1jL ^]~uճ, TCJ( K *mu<Z2fÏ`iLkYΕ;s>=yI1FʾG i浰A%321nC㲿{7m*AƕGQ6&gEnb@?_2F!Z:G(ݜ'=GvлkWgr %G_oMC( k)Sx_M h`F֕8TI }.,4So8N,E(y kO5$Ӂ(Bw* gЎgOkrfv nIF2YCY'_ ur|k % a;ֺ“kRC' e].&>eJNB`lO d=n}2_ج6Xl_ yGk}Cwke(Q^6x|_[TC^^G8VxޭoȒoo{TV%nK::XrH٩CyNɇnF@Y/4 au@68p"AڽY(U̥҅2SUriDcI!s9c nYjzܼ%G09W.@(.}}@:QǍHʻJbm^4"nQtd4v_6Ƒ$/vua!ر?#\/zZlCØ1ԟ_`0{r!.ɺ0qU l;BʅB˻SOw"⚪^5P,ԁh=`gЍ.DYj :syf$*V] s;5q^NEڬkZu|Fɉ' |f~Jbɭ7|qG ę(7)8Ts.4assA[j`1]y+QC =+tezXC)h` Cy~6g]υ0&#Lg%fIZ[#uQ64ʖ jBa',Uj4T+t<> oK(']>9(q,P mV`$i>!Sx|jgQ6rZ&s6}NS1+M-FSr*s" :%趩ZEd!68X7|. odK֜]t{%,PqmO cOQj#( R-:mQ:tsk oǖ:HPNUt$kyԺ_ytZE2,=Ua] [|˴$JussY38,MTIgEqᓃHF$R@Po^"EGNm A]+8=`Igγ]q!DwOEWl`jGFTwL{*U َN\!|R)v)ݻӍ3 SȈBe6_L9t_X#q*d&N}PVV\>+2xBǰE.XvTL!0kl2CoP 5 k3=wo/b#zy~tx< kS>E#% Ar_Qg:n>';'4#ciWaO=XhZG`6dc36FPEy6jX2+3Щ# P^ [q uR9TU1C@hq X ȿ9 5#skx N^!>j Kw\fYzǼ$Cj eX{ n8_3%P\o#wUNȺ'I rTDZ&lBCUFҹ{'Z$4<9IDAT\tϕG+Фѐ {}TUy? a- e>v⋄I/6tҹ=8;B߄DX8ejd p'#t^ÃJni_Ql Ќ Q kJuZJ+ (2Ti"q&d)Ð'=}MWqׄΎHy+PÍD93)뿆_CJeP?HG3̘.a(l ]|#PUmm?&S?ooܳKꀣmAzǟ93p0=JC3FPu63~jdd35W^&5lQu oG1&#tv[!8)HȨ g$\ѡܵ .C'}A/TŦ$"ÜR|QYt 6˴۩hN** s{,eTIE%cD! q!h62<,sNA-iwtՎ^z$0߽4RG*П/+]I,Sdn;IЁ]ߩ-QFcl(qWG 4!|AQvGSA ɼ~ bGy E6 zg3Qށ{T'^ CQV9Ѱ6Pt.HM h>Sh֦fA6 JCÞ Z"],0֪lN|;doR{!+ %j лV)yy)LM xz78G~-J^ufp$:>>y]KCJ ,In8) Y zpmXB%ܐU h9oV%ApBϱq9N%[-!Ъ^(\8zΪUaEx# {]X( e2x]Mr-5ĵۧGhb螙$.25.>~ξ5,'_eeͯK z`Q]#أ.Y/ $LNΉA"f#mkmSez,fhPدV2xՕYzcr*~'ԁOt?ﷱʻ Yf"e쳄DTܦЊ? We7`KlB,T6A,OkԒ&5)b= Mu]&|XA(ᕐ#e을旜5JFb>e,HXOY7wNlҥóJb+q]QArg} 5C@k*_WƸ<:fyA;5r>cw 3Id èdSf8ESC'e}.9Ull\EPJ^X}oo~_꒡ƞbŽ{Դ&3ԇܡ6gUVCVWX7[8u?8d /ͷH^g+7\2 5lĆy"2WθWpҼ>^P$؍#[TDo/r/ѸĦ=;<@ w`ђp|@^Ɠ5Eq@'_w煲} 7G[5Kۭ̍>WD`@;d& Ц۠| 7"?hec-tvJ]J<ߐd˼wii-\eYvb=..jii4GOfKnAA.MqQly 6ͻVvoa%@=# o4S\(-<4INޕ(zEaaaoہɲɲfsRQ7@ۚCPا%hR3!6tp<8xVNwG+RQȿ?A}:(JC{-,FkCCOE_vM6z_٬wx_ͧ=MEנy"Cy\M<.ըsÚU.r[6J$;JiBҥ?}Nlۣ_R4'6_Z?v>1{E-N9ݟFzqVZ1N-waVřuq**(7P*" NI[/$6>{,!R'Yll_va#>ӝ tw>Crd ].T*ZI QN;*+5x P.'9v.#/ܭ;fp-$^+9\jsZvs뭯yAh j$?$N pBf2=;Kb Ɛ0,>c,|9gd,lE? M<`Id}n芹jcn('4$ Ym=_,z;V;mwfX\OP iS ]$3IYVM_hf (wBe@!!T:}t >sa]誺(n.8n6#]1wg`*.FRZhn'aO\3Ab!RtKvSP΄+J[nڈYWvI]&_AyeY-%VF>#Vi g OC62zpJ*&ʙP_޿qQ6va(rZGC{FF;u86_?0^SnR.zy'z6=x}YH( BryktV8_QxpW;eS,!5M0H']7wn8V! {sH(+PKw9VW5 r6  3?ݑۉ$Lc=YJl(!gg"@(R7; 5pIdy$nUm#sV T~~7Y9)zZ$4pVyt<[,o_knzAT_uZ*GAx]"A!+]aZ+rzuSho'syKtXRGT[=舠I,DBDhŢ:Nj_M%Tsuv<#T86gNo? LuKLN.e ABJEB;~~w=JsyOb2c@H &uUfT;E7ʫ?3>sj l[5Ŧc "!i(x&'0hS*y$ 0ɬsh92I+ius}H"[&{7s"9FAkVQWӹ_Zg\J8eWyp}zhz}1]}&nCSeZH菌Ђ{OI"/Hf*(WG~ŷz'T}ZR%ffPs8eXM1c҇|5@9Y.-J k!OΦQz9n"oн#i}v{ -5F%L~)|WNƵ½H_WyMe05L?oglK3>c0 d(PDDl#U3?Ĩ=lt6jt*kcb˅ 0q-lol j5JϭE$S52Hdu 5q>I3x'9NZۻ[Z$>:DK%/r| F Nd kǻ=N| J2RQ?ƍBgN>OޓEB3#2M3;6V۵ Onw˚.WgRjBRxt}o@|4ЍH9| Y;k\}}On^jm; V9"21r;KoՄO 82~! F _(5Tzz=Fm*4()w !Rjuyf+f^H5](nL^CV7X=-@!tqu#B5!@deE r^ ء (Xu@:|)[,b&C;dCج"D(qGm&F9{h"zģ.vw$*BA$ËtЀ!tlLضtP W*}[޽b~ ),4#"@脾cXx4yrX6jLccLt_|v@(nhOm.=APy+/ʬʬ̬ʂB3ڦr9y*qΉ' J}2 Bhj | }i'݃5?ו=?WEd*EŬ%=U`fz{ 70_R !R_.]#CzP;.EVEc!@E]z[naȷ{4D.`>H?:[= ґ.0t;MsS~J ^ʻ> QNJUIu W*u,(*fyr煒 i<ˍzJ)&J_qǵȇs!e R.|%K)~d0LdoIː}2E;F#oCR% Ts9H%_Ԟz2[H+m" 7fd2R%cI~=mH AEE*@l*mk]m;UNF:HK^i.R%SrS(Y(vv dw# Zc0ѵDM]=YWsgoUq{+qn,g Sd:/5Zh"Ӗ392[T䲧R&Uz(*J=njG-u!ƒ7Wz\iE=PҸW+94ׄJIuBاC'v7Zr saO_t< ,F.ކh`%W~Vi x3`SFK; )޶[|Ԥ??qushoϿુJwsJ5PAFr瑖JMUIn ZfV~1^[0wt fKT,~FGuPhyƘ)"yV:oV)xN_1N[cW醎b١ 4%Pȕ ^&R~H\{I+=$P6U3^yjeՙ#|zaZb-ޥ"iQSFULlJg-$3M]8iQb({)I:\ۿTQ٪|r YόJcԄdD5 JN˙z 0Ev6o SÉRwƟH/(TOI*l$I0):9I"#sJ?֢rI4U  'I"92#{"PqKo7tvQr3p(P'2l؈S3l'ψ,rHv${(+sŦER(p¿tyBq%1lzbB8[&7|gSϱ\ c…uGfiIu,>B3;6R4psCāy:[W oP[3g%1|'td٢f~>f*5UhN*Œ2,T)VPP^i,;Di .K\pêYg7*S*T*=XVIg9`$z\w]mv@4>-?hA cc'PZTf4 := }\gh;_RYeEȨD웋 CPI/|/]hih2;spǧZvUI'e$wo FPS%ǘQ2#B} i )VȏHZ=%e*LT7:QzLp*PF3OU ;)iN D<=gJCNk,}n7F\ud-Qga4OSVF &R}ωȀCJ9Έ+wC:i\Z¥3K)]GzDhG0,y#pO=#8)Yld`#,KN7Ll $*FR?sXVOBhq ҷR3t01@t5$ z19^ O^'RFϡ,{X4%Зc&eHR9/̶ךW/"EF A@W @ kq@1!E `-alALTŮs ;}ቶ(0%^߆?{QfaxQ%ؼWʨ0 <e;g4 1zU2{V3Z(AC +Oj1鈦;꘶2{`26uG A7+3Q|8*-btܔxnuEJ.{*qй쁚Q,ݫ M\CW{ Wg[vcWM `% yMF)/˝ 4~rj:!P3];.Z8i`{0kDgVra>){(u%yYVa#B%a XT'gQ܅q(z4&@g5>%h]9lb9aMі)-G3"-ŋut/Vg.Z_G[A~@-t0C>nh1QX'|@_̛aHRsCn%d:4٧M55m`D-#FPM&*OrQsܿK J5ͪKCDCН4薱S3+i%,DW5.c8Ft')]f!3HrhlҲ@ڎ{Y# ˚k"nEWU¦%T`46*[E]@qK%Yw_2B% ~>a:+ -8څ:t!C wOb( ƜNdAʦ#WQ1:Z(juQ}\9M3M(!2~\y݂Q̞Ҽ ԏ_,/ X~M0VǷ|_٪3cR,ۖ%tu݅Tgan:$'&%PʎWl>awxmBWw`^l‰¤/r D.TC^ ^2pC?`·fv~ٮ窘V=1#,o4Bt) wALAsnRvw'Nϑ4uSz_ Kf߽$ݔI2ړ_XKխ$6^؆ʎ30?|MClI%}PЕ%K`1]٫7ڭĆoǐTBlg?&N q$q ђdixk ʣPHv1ޅ2p-Bh5,ͶpAǘ%?WŪ:/b,˔Ni xIbP KqÐdXa9KE#>1lōB KIv(]mVH-KV.eħ&3M/-#V5)aT/WB:lMms I iU$i`S K@HmehxI}!*k `cl6cή L?`j1lfR]WWCč.L̉xSFTVPχ%#S*0zzԹ :5a}OI.\>`ɨAӤIDofe75H#M* x}L&ғ mKF*"Yb "1R},SOWKpyGnef2_NŘRU0|Q(ww )l\TpNp詁FUt>O\|Na[5{0F^`Crdz҇V2*^"O271n[et`Hk4g1q0 )y ԃh ם ZBdT(- ZE#EFG6'OQ̧OQ/S({ODX!޼-3Jt'v:$>]p}*=1)4uG <$Ɍ{B-o1vNs'[S^~|ui=_ǎ ;TH1\߿#/qzR(Ӣ6A K Qd(h# h[a/'O4!]&^VSTݓdg)J  %-0+ WEHh=t.P ^B:zE ]Ƈ!éx8;T`5zK({ A&D0/)tXйs#8<;!'hPm#81>Q_B) T$Y@J90,}Zm*+PJW@]t!#.Um8?.IS}iЯFsYy@9}[|Ŀx@$so,fd$%]GP5d~0qT%2z'jAgy@ƣ; No8؝QɣCdn XiHǺ`Ф]N+@.7J(67uΝ?ѮsY98t $S7n'V)9uoldQ76O4UWz2U*Ci| `v Ig݀6X4#Wme\l_FZcEH',2+N MM \So5޿4K!liΒ҄*eny !_Sg{'0pIJopEMESQd\=@͗f ׸ߵ\7aѹqoeUhIPљ3q ZlvFyER.^ʢ- ؕDC)cXJq.BM8t]?go^'3B]nӱ=?M1궣FӧL_(l|~zyG,Z?[Z@1I_t+лM{4yTڠV~[ϱ2MNnBP׀ܸ.ک$407A0J::l* .MT%Y #PJ"0uFkTmWSvӉI_O:!A  6X`(l#v|0*?Bn$WSIÿ>/a_ 7{TF=KC%D5Ve-@_l{2:{ЖVtYrnr#Ԯ+xOJM5 hNڼQ4?瑩΋N\WL$_աz4z{Ú)Dzu7U^܊U ,cˋz_2"znccBL>Sܝ0u $؄|4tJRs_,oJ;Wcʸ5^B$w'þ jW6@Gż?- R6V^pJ @#CTw5k]x7$K- wwޟИNú0nHE4Sdb(Nǀ~V}W $TG 3Xp-@-Gi]ז0_PYrV|lc }3Ê7F>9 ;]TOxMMyS>3QIv44@5C _Jrsn_rņ]*U|,&%UndgUe72i(}5VOD'כ͜:l5R IDATNg>&ٞocdu y<-r>g-:Z1"\+jB=Y.EK#aӎr9#i)3P/f[d;jKjUL Bpӄٳ{B{R̥SQF+f);<"gyʚB׫ HN2R _n'K2WɁPChSJDGqHU|w/{A b|ԔSw)LdH}u %3MOԕşFo&{%O|ocX$EK@_0ٯP R3q7-Oas蜚\ =8r؇_LfLfa _+ {{61R-4+@W/S_'dXrh׏Jzq$y>R@CL9+9L_Ody%F;c$N|8e{\$2U%4ǧi;xCg_ akFJp&Bry֖Nkko`r%Nr^p!h4#@m!j6ݬ" ;9<7HI] ]$; n 7_nG\`$R*>/1+дlq=)ϤО87-5*lr!"Qt fd7d,?NhXoZҞe !ToO{84cާRg˻=qC+FM4իt^BSYwSylugEMg{=Wk JwM%E{%@uoLVoLnƣCAI.L46 ƒfTejH;гdMU4q].|._ .c)F3@SƔs*LCx:9pATPHZ%dҽFcN@OA#@G(-P{bYoT]*Ka`>z@|PP PKtl 8fL4))yquQ1 :W]J<=9C_=F'3 l,P禐%5nLQeqVs49t{w>7aenX"Sd*pR#JhY }Dݭz0+N=)tȑv cBY63"vb+\V~tv Y$51T|F/a*̢$ɣ>f63@3?A`u5#F՚[KEc ngk~&g02Ze" ХxNe^B,h *MLf4c8T4Ytlz~K2[[Kxe QfCRo*h-1?rZb.\k@I]ck>"sdMͪD htAL%T~ F_1,փ/gk"av0J7Xx 8bX5MqJ̀6}AG =:uXkA&wE`2wxR|G90ȯ'ݧOqџKrE-|aɴ~g~9bSy a:eq`MwG^.ehӌ0gW ;]-LgBCX@\SGS[~\~MWz0 A\MQT3'h2WN! 2S{DCZe尠VwA4KyuA/!\A@[)f]B&((((O<<<mmErb"c=v>>}yK-Y$;b/~z ӡh)ۀqaaY?"=*XBͰǪ ||`K|B3n'D Sp=Vq/,Xԣ?M^ Ő bs+ 1 а1o;wƇxhW_TCk7D A;! _A"SЊZn @lOA/`s>x!l;ha) z%i) COAA rE ˃]!L@[!\ 8i>)\JoE <(ʓ&=| ZmW ڟaˌ>4ҽ [M 'Ʌy@;L=.6ƈ̈́?Cr3K]@yع6q//\PxY{JI Nd9&-93$-_U#Zt=F~`Y/~PRꏴwP9d93Qz.fl~8yT~: F3T4s B֢ۭWڟ4eI8]r5F4Gۏ Cnx(cr)es c^Å <dZC^%=:f5ң'Fat$13MZrϡ[*<ף!{ahE hK|섵yF=mB >2geppL}J8<1`)LBBpT"3\V\Cgp:=xB( iRݡFSWo!ݸlD,=F؏N(QS\l?QGD2:#=uXgm)g5To[>wIU@DFcص н| tEGйE9JBiFkM;`/<)xKo7.Lz-b`Oo)#&#zzͿ:3)%o' Sَ4sPy04260<_gΛu'0SBwP'Kډ?P( 'hn/-)o0TŜSӘ*VXˏqdžGO sV:jlbe6@As3jŋ!2g}z` p|Z"J:b#^, X%9j<:h7êOXM8i9Zh5}4dY+wQhۣm9J+Ɩich@/X;cV!n| w OEYe@1T@[VB}HZ'͇0 mh۷{p> T;S秏\&#T\f(X6d*5b pGU@! ,P[-stueJ /d4U"'a:ZHgF+99)QFIQR@8V)Qa>r.b"R 7!+wwn\B}H/! tqAH*.*\ct÷/B%v ݆9bON ÄB'*/м[AWϡDD;Pc3rŀ^3S٘*Ck脷=UzPu4#lu`"0S_pd.*:J>Bo5n\"l " h'Z;$ቶݣѡZ޼)'PYNLEXnW]3nꁶz@GTQuo |wIvɎ"m།BnɾK/>:>ƙiYrNH^Q/>(KkN>WF; Tݶ&uI>̰KxtnAjޛIfCHuzyiD8EJhq ]YK 7%ٹ澡XANȒVnX*1J4Ud<!+b!=ښ$kJ:\:,ag}eNY^h5v=f;}EfSg^`4kui{?з4}I3@w.0QKC=58h&EdWɂ%*2}g {tD/PUަW{ϴ2IG,[@m"X?WzLyJmW5$7#Hmܩ(*rP͐n E-聚l jNax?WD 0[@`t=zjh4^~\cxE} `O>9 2Pq]Sv-yiu*;;kCp/ѫ-,$֞=G,E8'ўImPFb&7R@VS[(GVOR@-zV(li.bJ&Ց\";&@sttuGM eVЀ\8q43ݥ0^G&ǍZ="1ϓ ~g,'N lmx~A9 tNVk@~c\!Sϡ$Y*DS5m^ݖQܙ(wg4Bg"5 ܪ(HP()i?nm{[e}}I<]=FY5Ng5$gQ(0'pI苕BTc&&zL,(M̔stT;b@)$Útↄ14>ymWO hDE z$J!)& $rB'5g0L$0teMw瀾ܜ8pSqPYA7`XԄ4yfbtK`5έߋQ*}#gy6opEF0YVq\L-@MBg ±l 4 2%)W5qwF ԑ/50wKK@Gh?%hG\eg\[[n{i怿!9Z(%x iفUv?CD *c< GeDף|;G;@SVa_B]5md4Wf٪9)\\n%=Nݿ.` bt A۟&03cN`:2 QZf QΤC<|>g}3(T ~zB ~s߯SwZ@#DKgfWSbd,NH!@=Vf#LG,%7ߑPD{/;jw ic'8*uZ&jEWb5E׺K~j4r03K yC7c]x"H|šWBI ,mS>a;x>vr2i.K%tgpVFf~h [Rݹ0grPC~*GtЎNx߬&q*ic臭Twv+mƱi a=.Lf pkgR('tP:8oQegQLyT >ɬЇfT4#˳<}mb( c' /M*=IT%ɥג<3<[Ef~cTlٕd" O2ivf}z85^TǾU8vpQKSsNc7yeo'QП~f.J"p6 7#L7T( ǛIcEq跀wޔ4_՝=4><g@?U~` 2&xF~Ag$4ˡrt06rw2+=hm)oƫ1(ȪZ脥P?N0F~"~T<)H}8{3KRVѱtZ_&3əb_87Ϟ IXeYf15-TI5!z|_(Lfh۷U~ah@͌l& Pi?Ap1/*1x`cv`Od|Œ >GSŌ|uBd% [3]B(y! (Cb& _q hbhnJMT_ qh7+q۟ JIKY% ۷JfΒ=咺"hcaPr$-Vetf*|: 'Mlv*Ǜ'8OV",%~eGA SIj^'Œ2-v@[_?qI"8(E43 v Eqe: 7!y2EY}ER. ȂnF5u|퀆A2(rT} '2\- N215m2vx^àŮ0)t@\!_3O#h hKǦb@TkpA @ bW6`{pCM<(((((O<O (O<O_TvZoZlX4*}dfx:0XpZߖCMOZ!t9Ԛ=뛪}3,Z7ma[}neӶ8Sr ڢ>ق qAEeQO\N%&JU!֝Yi2>1> ĠhN3;Qoq/:`':O\8 i[{o[;=/6'zm{"5>qlNL (OE\lAP0/}+_oݰKY? (O}LSbd s5׭`{P 2/;-A`]vì'y婏uc]uXZm5O?߼.ъ1؁@~?Sԋ;\'ydw:w'O^ޡr ZHo>H't@ ]n8yxIJUTýYإa1ֵɓyIsyH xNI#N9q[;:*'PU[jB#Bq;~x~^?v:r\^@y#>wOB_2Ӈ&K~j,'xvWwr^;nvdn7 ?԰QE_][O#K&9+o$@9r!,5zX~'tyjw֛r$B?I':NFw$}X{o6ĘZ^Zk=w\P{$7_I3ʠv}BT'2qO]~]:vﻣh6U.$Gx~asyvB1YS/͵jvG9̛:^ gOr.Eau'> jZS ~ Rg?obJΛKqz=~ji[C`\Xryn2o3f%guYqг9̙fJ^UcDi՛I xF+h7Ԓ`}7 ڢ8_'$WD뤄f, a 'oYsB CS3q<zT> LQP+xţms/’}"Ƈ<{,1)wmcރ##V/|Q**Ѯ+)ǜ~Dm9k4b liy|9ܥJqHf`sEuYM0V= &}쁥{NTTL-_|Jcμ\ޝCSd;.}YBޫ@ 2c30M#@ԱBaP$\}k]ʝs&݋.W%o투LQB*v6ȺOc-;޴/0#vÆ}ǎ] Y)kB1}x#C,+]7V Z]V$3viWz֊/NA4>t0ްaCŋ:::υscZY 9sfOhHc׷\ݼλb隩@PF>,jޥdNJo,#2EGkމD:fg59;z~Zo#:kȌod'^<b3Iw?c gzGY5 ɞ߼qDōHպOnI:L#Bgݍ ;Ao K/Uj*{D+)#"{M*v5Q:AN˷FHӭ[q3xj!`n*ŝ3)G?z~tlnG:f59+ie*Ddp1~BT<H٨ϳprШak: }| vq^IU`؄## ~qZ䩔o1dj1 u㯺÷ r_K/ ?w(A{"^eHdž޾" ¸ς@#SW/5aiԉ W/mk:֕u3 cf4vf…|¿bq!=R_Di4ҳ,D'5K'?}S4 txh OV4笧VU=*`:ȻPU'ZV\.Q@N^:~R?k x+ +L΁59Y)Z6bl5I;Q3_,;%כ%Mn4\{/*yU>7 VL9[;'^7ZՌV&bf]-Fbv ^JA6 FCp[rx>Z'=ۢ͜@0:r ePx.iLcP̚{f"=䭔Ј-幈`NQ_0QLM_֎,/1T?w,wQMd[e@@|@8(s LKB 㡨D`_d0TBp8ҡ>iQ؊  CURjI%U'U~uOVMJK(s ўSIcRM{wZ=п!$:rܻ՗J,!٫JwaY(;|Bm1io7<̃^y{=03 VM`%:f-L9nT: q2|pi_}wou}>^*`7gB$+RwLvdcKgn: F>u}^|{Kdb@+PdV^ӓyku5s0_vfe!)ϥϿ?P5,Cc\:NޟVMjjrUf˧= p6=̖\3v̞`?Y7s]'~nI捙hN  gt˘Ru&4}K],FVA羖B=%ČJK(X3E؂CZt4XeIu{yRBu휜lljI0 bDŽu<)WmİM?@QA %j霈Y_@>PfdKX^14A24D#+Ő\N7Q$I jY1,ѱ};r6QpkԈeX~Xߪ珕Ӵ[4.4h;w+vHTҪ02]cvλ(LZ 7)_c3Msִj^#)ŪD=ŏkORۋy9+9BcJQ~m+\|x1aQ %f@La$@9D?jsy5^m;ɿS$`y"_C%5_fi8IF(3' 8ιki^摠NR^S|Ja}?f3Umb,W陞Y:<}t'L@9QNQ6|R+S,@41[3'2 hJ&)B\C1(8CPC5m_ :PZ@)~~ g\gMaFܹC7iX*> 'LJq~t>&Bw5<ɭ?VfiTᱢy`j,SG ,~/G?Ǻ=j~mN^\tCb5C֊ٺ,36Yf k-$w]Rd쐠q&ñy.?kRPf{1p k]I ;_ *u&FNLQ|| sY_o`Pf9m$ۦ H5 *5qTq-ȷk%p^\OLvt'sbmHW1JޘhFn9`av*Ճ*] TyțN|Zfl;j$ M Y>>}qÌL][CG.=՜'2mec.;ֿQOJq{Hw ^MvW x:,6Yi'qm?ԣn.a@SY+/FV]qA߷G‹u0 h`@[/0>[ B!o X_)9%S)?a8<4++>Ph#t!s,=\D7L"P6]^0\>ZEtyޯkZq ۭuQ^\kӰqy4r,M?DZ~E d)v鲸(g_)<&sIC6Lj4]oIJ{Z6#<;v/Xaa11ÂCs_\,> פ&[D ݕn\5ـj_|..,%yˡ߾w}/|_-Dิmc{؛V;$?Âq.6r$IDwP|+wqa<T(kAtXr>W+h襫.̋~>Px{G؝|2UnrӋWm*(g(a%ylnNr gItυuz%YS3>QUETwgYН~JNoDL %:8!4k)銠 hyY&/lFI1ʱ1!ׄ72*t%;%V IeNmV&T=k-Ѓ&E LU닕hpQ#`B63+"(#BxT,8E9SYO 68l.x= Tdj'#DJ;ɿ\-LDkC j;O"( 5Scyf'&=* У'6^UL.Rv^AO3q~<)-X=@ҰZSP,A߀yQ?Zi h\(5p$ryo'k.[ցMWX&D= (zSQYF."['i|@D24Om/$>'@@-lbMdE/5H&w?Nbp1ze`tvO69 EN&:ɪ]Óv[y r 4Fjh(ԑ:bh?/xK) q&@2o+}%Q 9eƦr0+~`bvId)xφ)1& e^B~,Aq]A)C:&]9L]G{,XXNi*Oa~4$ sYxR`bYq7nFx}Ƙ!L3k nHK ;p[qGPWYn{|x>Mƴ7E _ANe/fh QH@'R9 .7eNx9;nkD5XHж(EtM]]`e !njO hpw %{VVf"LpSsOယB%o@$^"uQ@vw7G=`Ptr X_+:ھ[IL3 D+&D oS pH]ooO%PΓUM[HC(Ҭ@~ |U׋^>ZyAkjiytК5q52iv͏=9 8#q)Kr,YDAJVA]]e{m q{\UNRZ/u}ހ[O_CQzy !*`Qy>t%M"H`?|NW;ˮâuw%؂N0l5A)%n]cʌ)B1&fV @mZ:#! ho8aC{"t .p~J= &Y'\ < :,xOXTlu,:W8w),NDMjL S.:j9n'xyVZ{_͍?HK8 YܮցV nc޹TtSބm9}MOz1*2CdSU [" Kɫ^@dsnzk $3-g(= L2%%~MdkX)! C Y,pw~{TMmxhN_bEJ)tg;JW{3M vҷO^9e]R^%ßr'F;\hG?)(Bxh;J=H-\hꑭ' 34y':j KޥEIj([ )6>U#mRȍ9u蘍1*A?g *vp/g,Pd"W@oP:PQvٷ/[$E0"n3펂 R3N9H +F$QHO!)\k|EP,dwۙVrF"zgq@3Vr@ bŧ"}bɲAb\ʝ@3Cduv[lLsf̋0l%wI]2o#>s7PS:oU,(aTUtK#x 3ITs[vV-%)n)$G?I0n vԋ+kAɳUe@%T?ñi@o־-he:^An}eT^呂ZI@z`Gam&Yt&.TxS*݋YS1po~Oo(=Fpd6%~:%7=QRB/!h=KOdݥ>z#&E-ćgr9KZRFSvfM >Q5$]H*'}\2 ?bT.D([9k#dR=v!L$d/qH:zLv34 ObU*c_%N~O',&/)2ms/nX`i&&wsmK֋MOޫbK^2 $XS.+si.Rqk/aM㗷t f4Y=8eVC:Wښ?ZF FB}]>>oLs[^ ^sgEq"9'h}$o십"ٹ 3t|! U]f3[gr Oc]!.nf9SUѮtHz?dٺJqo~K8g4 'WM=xD̴]J`0x:Q- evN2S)>egG눻O*,.j+'F 1pI*̢'w6?=.IDAT.ɟP8 @%KR#?dUP8 @%8PjH̹$E-v˫SN 4P'lT p!>UEu1k|kD(*Imcr)=P2'Ƕj}iD(|&Vl(Y<zKt v#l"+Β44%tPDz4JhJ22!3PMOsh?Gf翴N,A* 8]5613-g XZIs]…D&93ecx2l]*]=&MI,5rm?ql?n$n2(\yL"qhUC6Z&tj~P"= 䗯wx5D+|%o'}b?7,MF`КZy8p/@opYOJBΦZ|uPMcQb>![Px/|/G#a4^k2cr@k9Z 1DNBjA4 Y4U]ք@"c+^z@5]Z2+Vt0?"D3t}$jE [b! .Q\"!,! }ce.f@6yTJ!#F( "{zzj%!JoB(!zN̥^\շ2^c{H!JtB̄i.MX$']󊁕 [oEFz׬H[ N껚:apxj 2(kwtq/`jpvY7h X 糹fZ##k]UPiZkk-"uد8VZV!m! \u#PYG]_ ]R]>J_j_,ӐOrzi_>B<i-*PA5Ѝ>Z{ⳁ(Sň'*qBӧhJG8DbT)PBX->,gp=«}4ZtӀP%Xy ןjǹ4jnӑPW=\4l< ?Uo׉)%xCw3St )(bamm75=mi\<4d@ܵoz" Vi'MM(oZYUJ"E T-OT`$-BO"WPGBOX-%;]epצrn: ='dA( ]V'[aNrΥ=?[ޠࡹ9 .+گsVPBUB/"TځWu|-WE2Cv?x-FIV}nұ7NF@Py^F(jshP:y{5O҂> G=vY7.`UG:se8Y}-[7gq'Aoq{` n 긨aWmwзQ#G_u#` >,Jy@BU.z[,ZZo`X %ZPBG LV #B@ !PB!%d[!7v)IENDB`GeographicLib-2.4/doc/gauss-krueger-graticule-a.png0000644000771000077100000007572614644775140022223 0ustar ckarneyckarneyPNG  IHDR1s$PLTE}}yywwttppnnXXssllffddbb__]]\\YY__WWVVUUTTSSRRQQPPNNMMLLKKJJIIHHGGFFEEffCCAARRmm$$qqqYY}~OP""``{{aaaLLSSGGGZZuu7HFF///aa%%%MMhhTTooHH[[:VGGbbWWiigUUww~~TdOOzCCVVqqTTTBB]]dd緷勸:::kk׼PWXyyJJeeQQn IDATx \NY?PBor<ΧR< Q!Sx#?dH6zºj"r f {&ܟwZku<]ڿ]wo5uI) Ma@_2CAb9ܐfe:?{fm$Un{@2tj'_~-d iWc @C0N>^]Λ䓆;[Kt9fq:zYw/R^NgO;xRL[#~ U 5^ēvb^=]+Z=tʾc . R+^_e;K>)3 gC y`TB|@>it}8q$bƾ.I`6X _ wl }ȦN?~x!I=B+1ҙr&NSDvug}ۻ!->M㋳>c%g\3z[7Vkw-i[9oޝ׬ nUs___~چ)C">ϡHgz3_9­v=ܿ;4K0B4IqYnoD/!" '7Q ?$Th1sIg$3CDϥot 4 C棔璵w}DGYdpX6&q?]npB=틥*޴}ڦxiE *@'&P\o؜ۗ[>:ֻ<l 6EqE훂˚o+&4AEoE'1tތt'1s"q DB1s>% 5]3tbXs#o>݅LŒ3[Ek)Mz?%¥ )K-y擘c.ff iGZWҐPr%[W8@Z(d#RL;y'n7pEOr2\\lHv4Q =1GmTu##gTqATO86sUxODy^/m > &WRL5M$ɺ?ywU+I2a}ߡLvy>Hɻ .#aFQӐ' YN\Hqډ!}#\|%*yȋ8{ElvI=Mb8 {!M& 7?2Byڝ~<.0kB ~8S:F9҃a,]q`GT牒-0:- ݈@J4gӗ3!ā})`s3"HeHCY%25CNuK&sKJPD:$~Ggc 0v~c5A+煯_H!Dg3,7)*|w(\( Gy9f$?SrF8KR5K_%RL9ӗm| shzD80 iV}5Y b>#=lW>ˀSxT9x=t^{p9&3"ǯΉ>g7 VG^3qw1oSԺDJ\|yDI4,`@Z*!|Aq: %|a4~@;@T\ !T;.<ڋjxWY3ZكcKhMi4fM'ƺ;QN!iSId ρ+^@P 58SuRbT~ltFxpo+`U?2O< S"վWhe\ȿ>4j?}e͋g{gF6eGAfQ&!7F&67_?e~jPTWv'ƁM%ƂeA~аMߔMMYN, 7Ys_%!\n<ՊvxM|h[5d.\%<#4Ow/mlQ:YWзö:'Ź((V,c]'?2~6` IT> #GG$4yѸVwvXڗQnv KIYdz9Q,M@wVq1ۜVi_9-<#YR3 y; i6Si>j,V-LɈ8OvSlI%)+&殥SԐ5ٌ(Vxz0}|Z?$JȜ!:¯e9:|0y" K$6xS>U<7Qmv?z OځEvee5VW$`罝r-@SCgN pnE/F~(Q40o& n v9)K |8K#Q.IKluw89g5W+{%)#f`d א#Gk 3C7$[7σ:wJX\U(w4Ls7)sux*%eG zhPQ gqLWBʤO9 @gn(5Wӄ-橼iqCQ NJ;80OVRzRuK|e΃[/C @Fh"@WqU=Bj>z?GMoL2JI(9#,TW̯\pt2i 5(bL,&9">Z<ܢW.L6u ZO9ahem4nYSY|@[P=myWk7qLMSĖ{F=D2 X's1g& jʢ]=|z<'.B+$繖5[&TYlFSA\,y{R\T*TG M#1fKx8j=Zp2 OĦY( S;VyVt] T/f0IZejmk\xy@~'R!؊(@uDx"K." Cz?ś42gk*O<RXaOC|nq$=ceH@ˊϚ0?o)" m; !哹aY2PHWyZFTyG31IÝ1rMTM-'O;lѠ! :hH>'$E] liw)pV^OͺxK'#}zBm?0Kh9&\)ဂm=3HnELp{̛jmVÞ$]c>Lvit+3y={FǑPW+RFgA|`q?':0QSp{pu lCKr?)q-_Gc߉\߉‘ڰۤk*t)5XK޻3@b?'(S <?AMV:Xqp˹~Vaxlφ~ q}+*HoS m ĴzAiQ, >H2~J6D8m23' M`S{V""@AԦ)ato 6M`oni~oAUzGgshh6'&|Joo=?Ou,g?5Ӊ^ ?i Zl`GVS[qGNeTY좘Lғ [_6 Sua@CCXEV׆E٠C9ܯO~[ ^_@jC$>7?P/+g1kSH-Ra7Siq&!_q.e^;0yO~WεG伞DA!AN@)~q~!̶.oDҕ4/nMw>UC6_As$}}q+0t]ݚ_S笨~s%?kɮˢ]1Űq@E)0> T)P^$W,~ 3i_tq`άOaك3UoP(1eXӘgr{!B],$d߳XY^ABt3M⧁ek`A-c<9&~Z@ϻ䔥F:ߧ⤷vuHg-?v8Yr^lLwԃHI ܬ3P3vMC6W- bV oS/`]H7-KϯHfWzK)2[9;-L*Y%wOOsZr{II|g_aW8?NSbi7UԒ 2†%G9},GUZ>gqi 9J?KQҠgSZmr9:,S'd+Nep΂b'4̦&#@H s!YTl5.ΩoSRq#Wӳ LJ"NLb 6荛¡ŒYy'5eh){G_وU޽_xTG.Stwr;΍_v"ZZ$"F#vSn?-]Ҹ4M 4KnH(/NВ=$R!rx⬅?USHI6'zմZNoD%1+Ii3~U[p@V㞃.zNE_8^?c9DZHvT/S^Z){M Zu>wF K~\.% 3$euUQA:`*ts{85۩x&F߯M^82:Ÿ]OeCnPN߃emzf岭SnrXG. T?g#1LLz3:y6.4LE; cܮpD*DK뤷V㚈螣Bo|Rk=޾SԔfDcղN43Jqz[P(f蝰IxYz)h0Fd!VuǦMed)|WL`}.k16uO} SLO6>1DvG8Ñ1B ׬Jt(eǛ9X*R"J&~}O\\""P5k>1Nq~4gE7Bd#3!r"AEAHDrRPy̽^ ~^YLx澋1w}iLl?l3RS.F|ǴyhDvzɚ<*nm%IЁswgeL[@ BxNqR/dL({~c}`AK/@0:+‡yy)ȅU(Pg:®>>](=Eb# W[C#^8t8T0a/& |^tӦBI5rH- !l'vp促vŷ p[M X;jt j5&CԤSGChF}E AQ ܀%MU-Nh31j.Pۨ*1zlDu_GP%P8XC3łM%'<ÖFi&](s$ };_ {g$>[w{n/h8hCS<5 4s5Ģg#vtQDG3ijnP'LBr '|h&"QK&@2RԥbB^h(j :t lF"<㧈Z8cEO V,"PcGWpn] Hom,V>`qmn "X9vфӴwK'<C8}wiȑؙ+ْh&E] r ZIc{ALq NXϕ:Mt~ߢ&7;`IRWo<{D{&+ Y^S,ϲ+~ztK7R N"I<7xڇɀQz9D5V:~qnl%7>Na*l< Oq9q[4=D*`8 *C\$&)a6|YB!]&hrK V IDAT| #Q._&x1gήthVb"M">޶ǠA'\th.lx&i[*Giʇ[ǯ9&~(p,;;i8zẊ y^v 9PT|Dg8Á`ݣNb-I&Mk`!'X@'°uȨVSVS ;"z?':qNSC wJKX+%-%/ I.`e3 NVS1@ -VknrAbq76h9-ܑV3qZ?Xe-BQ*f*A-|jd8IEhu*1Zc z Oоnڿ6H,nmcA jjqwʭpaA-><2Cc @fP8Y~O`Sl\M+[|堠,?4[rCe:mo8mbC0Z8 ͆ i6HSk,TDh6V%LL+T6=in߄Eٱ ybu_f4(4(zKy6q;e8i8FA nh!hCby MbEfg2 w- /'D bCC>lkB۰N70; 0 k+M46͋ڀMٓnbj(4L6 ro&Do&P,LH ѡBc/̂A`q`yPdh7GeXһ EE47왋BA/+߄ѡ˦c c&+BV)`lz4 b#d* t3\>ذ+HG[nG/Ɛ7 *+Sqe˖5W&Mۋc;J'Q`,`_H,jW'ff<%8SJseqi y$y3֊aT<]W` 6 KZGvOb?lX IS~gm;rȏ#$;Y-HTy:j!fp `[$zSP*Gj-id;L7 .JqgaE2q8g:N iuLe{5)`wUB7EեyQ<8QVZ>* kXe,?0]5 ]et}CM-ЁonL|YO6)J΢4IhJ׊HMUut{+lwaNPꐦ#g!sUҭ%`r| Pn|`VϿLq*MyGVI>[޴4}\7nɖqҔW=u I7muC,[C6Ɨ:^͐]ɡ7Cy͋Z!}a_I{%~drӌZ?bD)a0CnRqEyщzidɺ!dt,It; ZEjN7.ɨOx]z؟EJ/* ^/wt| PgpQ~~MsAJqTwn">|48'ft4rvP?_wq}|Db4$N1VV]jLiBoO⟀VD$}qyGu6dG[f$@#&:+P}Dϟ_l𙲔<ޖ$`^0,|u DFP[N]Ҝ)F1{M Cʅ0N*AЅ8$Ʋޕ0$ x?c35HiK\,Úo=P )0%czԗoJ-^7F",LV!q |ZzA cK-x5dV"*4%˸ &|Q# Gơ),&] BCp 7S$ljaBmփ}rMRWX0L*1RH4["(Q(gqivBi8nkJ{7SM42L)Hh{W|5i+/Z'6 %0wԚ+智K@ls ƥ=})[f ug 5!7- ys;?ޠ/|l!"t=yG$1?ƚYyjs6WPBLN68qid ҫ#ssrQtpI6<%O~"s:+8. h̗=UtkYbݥ}B1).W ltHs/:k3$<wj.DvM2Al#FiH'L:[yiKUyЭן|v۵I:mrVi6F4?Dd;'sS͚˟cJFL8Eo*qU"H_)HĘ_ /!E}$+kIӚ } rr9p | Z $FF]`WH`5W4s괜d M{1Kbݚ@B2"'ϕm4&d'Ml͑`Wy&y7R>yUWZH5ނhFR}8s_~]oKV֓#x*$dl…d#\ɐ4` _JbKtfe59T܎+_sP5iTrs(7Ɠ3&M$!z &g08~tҢMώtx:,ނEi3B|s; Q|fv&qa?! 9 ,Uw l[]= @7Z5%ýÀ4  ^v)z@IZfB9!kUjLܠ싲xʺbs2D[Ҭ;c}!=|Ҝn4xp:SB LTÏ ^'GPCpdyg3ֹBS2R/m-qg Z]\`$k#RюA+rm DGꞏ d8 {Y]$8+q/' )M&i> iT\ܧn*t}PS!\ۥEr49CBvƞ]Fahq&X1vEc4!v415s8C]QDOq3k/(|m=aR ~ ̃y yMڻ+4%5iB>ib×#8,:-3i;#d)Ġ1XO# P) YZ-P5ГF3?!5rMb}sT[ T/|g ܧ8%'>A H V'da@n8; 4C~?mnj'ga1[ade07t䄌Zr`uDZ 6s;.O\a$/ĸo`>:΀4zzʹج~l'ϣJx3+-Z 0a)A)OiyTz9r083 E|y1tqre<)8:ї|ktd NISNm@T&/)hO0e܄huOCd(]єO} y~/hL3G7]qpY!A*Y6A8BC4V磄4`-t!QD*̝!邁hi-CG2Dq&sX ,4L?$FNDzL.kk-mG)Xy'Cc_w;WgIdN}P4 6m)]9$V+o*j?>jևƅ蝯;b/y"q>yrH.pK:Cttp@̀U&Db 7-9ƦuS2q<;Qs2<4JJ΋ a{iڙ !H&;*pPx~5?kHx%;&Ł"}GM6}eh|3k%@0%"˜0)s]b#a8Ax# i'@lt*HNA766 M(1q̯R؂&‘ !hH8>@n"mYztfm4/˽{]ФM^d($M>EW2"rck"DQk!g K"/Ժj"w񘔄4Ff8ٙխ`(A^i~I e:OS5222_Mu&‹1F*.'oˎ@f&XW3+jdg#ٯ9j /MtyH–Dw|jU;K*:EOƻ*ES$@Xa{غs2)JiV 3τ)*8M&t ^2QcwӎȻ$K$HuT\[Joܻ`Ap闍g<|tRQz*'WqSW҃0 RZ ޼VK|4i$aMZ (g[*L*;1F5Z,Hyo~ $}'ckOG0Dc!M=s] ZC <]?= N-ѳT*LSI-M8=ky K?,Zxo׿DP  CazskĊS1QqU&D=fd9~وCXCOѐ s2ɩ\IqqB4.ŋRA\Xl%M!V4 V e*57S옠6 Qk('1a(#>O=xPyf"6GZ.ӧ'N$'9SV\ N(&E8iev~Hu&腰636oF25DaA=zfYnp%UPz\f1\[Aq!kLH7, ]3)5D5]*pǂH V@Z5Pr;&(J9M#OZQC&[,m2hrբ2j'pl$M]A[CYMdqx MjLhy<#s%U-,mqI> W=S7B8K5ylj LF6Sep,f ي$"Shz5bt›o8H. u pE | Oc[9Ҥ$EvڕJ3ʑD=*j8nrU6l&gs$SA4ͨ:>0>FrׁO?Y,ȈVҕ%% p>^q8|uІ<yJw,P(ҿ9w]QAcV(q|bʅ)<ɗo<(*8.ShbfD`ci&meE>~42)Ro\*,~(ɉEpvB6!OJڻO19dc֔5C׆jL>+B(\?\`( l"͛7Ĝ #9*$yn`8eIhSiqU)jE4D:ƧK;<~f4X DIKMÍyWujOR5C /ϛ H-o ,t2x=9%זwF`5Ҹ/fG$ ԓ4w(F=)dtn|lb_r#)%M̩+HpyDDhP$sp05M&]꣱py͐ qʼ5|՜Pg9tRiGѠ IDAT.vF4,2VHs/QY2C ub;h[ hq҄: y=ltuu-wt1yˆi4$AD _͂+ќ21)Gao90rS-4 ٶi;v ?~lh)^m%B>V5莅a-wG뇠n ,JsNB2{zE#_##WJH b'ݗ[Q:Hfh>fEV>sͺV}j5daN]Ȁ4wϏ k\"Ue*@ ԛ4_R @J4wZs:dϬVIR S6f5> T:?OuRKGٸA3K$amr-[ISڼKn iPX+*Fײ4!<#+>;I{ru&51훦nCv[[ISՍAMOzr7ȻU4l+i6m6)I=4$;eHP￈4!ՙڛ,pAsՑ>EA؟b~cgY|he ,*͆fC+ MCiR Ҵ]+]  i6i6l6ր͆ր͆ lFSMb&n}eLjDž2EjE~$e> U^I~i,h?{c~+XQeX9;% H fuH{o([濆 ]Mo(MﰂТȂ#Cgn ^4 -k[y,( |CqYELlZ[,498lMhw쯉oC@X6AAs+alۀ6A4PP˜!314)u72gϞo 'o|ئEEl ;.ַi AsocyX6m߂аM낰XAozћ>*а`6 ̣Abe1~iCd>m ؟y7eƛrN!let|oSo :AAMo_$>wx ̷sgdzـ[TavbtotqEZ ڗv/MnQ{v"wd2F/kf9, cL,/aMʃBck/`Lp& #)l` a~X|[^T'5/e]]Tbn2g< }! 2`s + uj~n lh 6HM( g[͏T6R+yکjg,{2XA)_yֵX ߮^+~PspbWnɛ $aT|^j݆1lfj`sKaUBllAYڀMؐm[<}-A  W\d61m1|C]xGA7lk6quh[q;\)_Y5ّs׉ޤA7aJqʓ#of^"FoΚYw\GRc.}J[-j*V%3aeUiMtEw4JI8ċ"G ]gi{=wįn9C25 I6>Uㄝ'7}Ͷ*ظ6.>yײmnnnv/\)GZ1J^iCs=w:ܿN9B !c+􉟿Q۰tn ʗ<;Zƕo=׶kѮ~5nŠ'*]|@ͪl<|;CInWp^Fr]N>f> ilkӬzfxtqFžiy蠮.vgkbxKZ/^Pb+`Qϝ֚l=x,iYa7&ݩJ\^T*ot6=Yz&vgP07@b&pMk/=!.и.zTP6ysmik[,(OwZIh&tF#?MRqy3{fb^O=>y۲s.\Jh G7N3: ^2" }׈Q셞_K㠌UNK񻵮4۞1ak~&vurgl~H#oӿQPaIA4e k:wֶ/zEӵnBn=6^~|ǑNKOnʉYpyLP㘬*{)4IYygcmH{{6nZryuwЪtdPqS]uq.z_4䵞;i5g:qd ޠgsk R!qyP5ikTɭ8B[Z8<-8LSbj&4#]?x5[g%"77dM\Yo#^oһteUK7榞[=e#ιε'{d#=QFnH|:~SulYӪɻ<~?AL1Iu(~v#G-Ӻ2xϛukY;GBi1@XV-%Q$l=id`s/>t>:4I!yW9z*'fBn[t,B<,ܾc77-nz~~]wA;J]N|ς"ë.U^p>%8ApwZMzݵks AYכ/v-(@廁}为\g+l{PM*oi$)__R_P EКEЇȤɗ;v#֡&cc}͗ijXһw.4%G&Ze5-ݺRyi6CZ&J hL hLM5,^ Ͽp:mBhjl]\y.Wá fw%^,7ުiFxo\^x<`56QK)+|]"f(EPK4M`]׫B'_[M֡fz&p&l M1ysTfnpռ֚agaur'OB֡fN}d&߷yYEKf{碑GgWqڝfsuR3б^I1MCԯ>E sQTBLez !5KJ'_iE~G]7[ lMIdMOἱkY $'pc П؋Gv~)Qڝ(&[ݓvc{ZlV*r4S6nㅧ:Sewۨf'~lClm\s2'"iG߆+P|8w)j N ,淪k:ӒhW 7=[0uS瞹ufܕr)d5=!}ƭ}qJAh;fcl>(6h+ Afв.|FR‘}Ut=XvZ3`ĢݧmW Hz߀fppxJb2(77]{qM}RoX"[`s\DNf[cqttal]]Y{? >3||Rl}X|e.P9sC9iQʕ7ږIYɫusIwRɘǏC>\gklKY`e2,yG<@~5g]TݮFx 2j~(u^LBVC1CT8eڋLQ,_̾={Kj>dYo`̉[ƅDlF~N`3> :!Noo׵Rv'˔/eig=#\W$t~XJ)l^289jgvߧZ>kB04C6\P?b\tEj6NVqu>MuBmOC(}zҥ}dyjF,uQ-Lt媁 Ѭ %|Y#dUiQ\k9G GXl{O`1=z<kBxЧҧyvm+SMWί lBUY,L~Y?vҤNM@zO)${>6so̬3uD]uu2zw=.G?"(ASzyHL&CY6mMZkzE) $*K1ށdG]JS͉k9FWh]#UӌopJ|DT(M"Wr/yQAO#hщNRҦ髵>pwr211=K1dJ;-`p< ({DVb 6 4ӆ!ok*Eڊ5i~֮^qR5UΌ7 S C[vVkѫԦ1<}%6S>i! b("94j%x~R^Qm8<݃SHZF͵94wSyc(!w#IbSj9ż.ne"εܢY=Vٶ׻(S,8d#lO p7Ua\lb-f>C/'my5WT@93rݗl-<jr{j 柫ܹFɌ/@aԧ{ Ǫ*toz=RV^`QHpw|8~ҫ%5bf1=q)L[\ђ54x2I_gYp{ˈ}ێ7=w/X}QsZbK7z>Ж̙3W%';ٜ7acp;#$uR@:M F4#YoMUz}]-gk+^A4>I+.K~TVR|NL|u+%M9Vzs2M@ #T"ЄZL늹2ofq{W]G}0 SK;L^Ai #mN>"2`(aLiՎQgŘMJfkvKb-G7xOU/ VvkBs6wǰgB/"/'Elv%?,Iz44ZDžpLNPLGxSJQtĮ; .z 髞bH{ݷ<zNMO$6w`a7úz)ñOJ<}3pg 5tVR~VQ:]խl۠l$r*A4QYgpȖPcB#ot[7env|OPbipe(!M,Zi{.1kuʯ: n;w/z8w`\:PQU%tc#ȳA析6 >gyOzAY!5Ds:f{-=sJ2qy* ǚViP~D~+()Kk&-bK)OpGU@;0𼮨Fu+й}*`H V!xW3YA?A${WrnWsp Y_NjELuTj(6ETj_c1ATҠ-ZC+^ =^8W?P\Kz 3yebV.1!<퇗f6}V0mY^"+l3TS;1kE#GkNlxZ9Dpnc`^b|՗+-a>͹d ĔgjCpEׇJrʲj)tJϝ[RvGY3y"DV!z_қ0>zpz~:<x ]sjph pẈWʉw= WjZ_ףRgKlSF)HnTD ʨlҜ'X^zp΄ &`c`P MߔB~Uz~7zz\Hc$l_pIDAT=} vT[kXYNS .8 Ul"MdoaykTA4Lvntzpa}w Mul6͌hEyXy&ڏ)"a䐴^񺃅yC~(uwGU)~AQrYva:Fɽ2پ4~rPd7 ^mPY}. y;ڔ^ PrtQ%\yo{^'~6& j.  qoEl2-67W'jS`yWD"R4"77.wE_Yrs!W|oAUs= <.#f۴U |м _u6ӚFAѳAXsVI&qfD-G8G\8U3iE{/LRem02Etc{g~en֤Aʩ^t~JUݥ RBpZd?wSV?JsYHٹU>aߪ;o*Bٔ5Gt/ &}i.+kΫ]kӞ#o+_cZ7vPP:Yﳳ16grOv 8S& Ҧ"719iPe8͊G}m+d.ݾOGi^N^w**foU!"teb 73d/y舽ouһ:GVk la}}{gcE¿LjDHb4/ӓ2>$M7E nd] dbɺ 2tcڝ%jT@(Ģ/Xs }`! 1 A9$^'^2]Ϫw3zNSym7/&xDbڎ`p2-OT-K}WJeۿb.]"ZqLedih!{J {0 ~ juD>võ16SLTq>X[ꤿ*Į{s2sB{dGL^bg-@ýn*}қ@L/젳8=Jjy\Іv#!6&~Hr6 dcP} *pgڼK ȼԂKJFT*SC.!/`iv_xH?d,hB|ӍTb lN g}AYts T\-&vFQS-(d"#G%&p%S+G2?W~idABm+"ٽbĎOUn/OK_y?Xkt';[cseMrBi3CV~v^ߧLe]m# snVRra%s]D`tg[%Q,4#]QIT'cP-s婤&#*L\S ڤ,hSR߄>NgȞ4drU >7P<k^^\ͺgEMrI/8%lXz)""(]NZlb9A69+H  5 A9JA(F(u9DJ"H =*Z*bv#JPFc~xaRMw}zpM`h#SAZCπWl5NgfW k}WaNY#:g65~+"O-d >?c@T!< j/6G9z1ք'{/1ms13K5:ҙJ|0 -6Hۣw,A ݸVGjW]=0o8a{}+ӽ?NZC+yIp /^ GMuVS/'f5„MQOn:$ވcA+P;IUJc]3۾L ;[BFwEe!h8DK-Q<(q|6b.!U9~ܳ;#g&8q$%aLJ"Y?'kcSyBZw`n .s٠ӠW&Ґ"/mL?6LEΝXS]θ=C+cU`6O`w>t^Խo6743.!S9?Ac¦;J<;ߝ$B4ˇa<}G3maDI\zqhN(HQĨQ7hS궚8+ζ Jz5ZKV,`0 =yL7EE/YZ9vy">SW^5 ߧ4C=;Uޘ@EgN[rV#ղnMW;ئ9 y)g2V/k]K]Vx(Yq^6AD+MT/eĥ>COÓ] kXfR(Fw#3";4y;\6ӻ3VIx8?@h<⺼;XǿdrMr/8Cge'd \'6W}z-H'՛mb;ykrcx/˓isz1>팍\n%#^o}61~e.oRi/>D3:Y2z zw]USuևƴci ω_.!7*c |MϗKtG(-z@Gŋ, pn4+۷>fѼF+[֌ i UZEm] b$lc‹L'XϹ]|ʘU~s!}Ae6A>!Z~A69gzSX@kX' !nA̻E~DG 8! 98 Yy/9+9l`N-הb)(~"QEy71Txow5a$87* E4!:رe&ˆg8QȰ.V>nϏI%\$:9qr]vJ-.*N~3݉Y>ϑu \ڃTIu8uÃ}elh_OFqo'Zaw( ت,klFkG!c=룕RmJgVY#}88Rab\h 8`%k'!ǖN}J9eDd9XǍYȰlo*(rA`wѼo8ӟ<+ XRO?KM,RQb0Xf-n̴.}w|0F*~SF۝ A4;&Ȇ1& mMkȫ`7RcL^qrn`' Gb,G?G7[B.xZ׎MZ85Vj{YY ^ i"? }RR.Y8M)o`*)G،w ,[nmN1ޭ!ƶu5ؔd~]cd|>RCCfYt0h XV6~2fNѵDjtN#.8cEoTL6?:DiĤ8zRb,ȯEaT1g]=r4#GMLk L&˭dQ^A ('[h8?D~!bӶIg 6/bnFmTŗ/hf0)W{4i@1kfPN=>\;Nlbu,6㩊 o 3ĿCIcIfp A()'y &Vys"|ؤFO CzPl, ]*A Vٌf3֗8O/B~iK{a{g&M_p 6!@iQx5=Tnf^$lC;^D 1J̣AjNHa,ta |C GRU^}:odxl2Ôx'+LXqtxX\VQw QKǹ˱zu14rD33Å+,$k3Ùyl^]gO?r X|O[Mh w2rGUԡlkZ5Eef%Kh1asU\E>*'[>%-˧E7\$}ľ.^kK_iȄ660ērOzp9/'!6UVXf \YlYr% N0Y3ROp@ól036# P}ݐH|KnYmxETur5H_\ m?< cP"5U"@ZT` r/?ó\z5_bj]u?un-<DX7ޥO،4rɗc .rRUa#ڑy'-O<6y&Znzc?sU>bc_^­xlc'xlMxl]K, IENDB`GeographicLib-2.4/doc/gauss-krueger-graticule.png0000644000771000077100000010067014644775140021770 0ustar ckarneyckarneyPNG  IHDRCJPLTE}}{{yywwvvttssqqoo^bXXssmmllkkiiggffddccaa``__^^]]\\[[ZZYYDD__XXWWVVUUTTSSRRQQPPOONNLLKKJJIIGGFFEEDDBBNaAAzz88CC=AmmXZGGYYaaa>>ggJJSSGGG999B||MMTT][[󴴴žbbpptzHH\\zzzimlllOOHe""VVVxᮮII쵵ס...WW¨ս$$$HU^^yyÞeeQQim IDATxyXɖ/*r"N#AE@B*ZFelASy>zԖ؀< T88A()e9rΈȈGT;wȕ+[+V4 њ}^7&.\>$:)0I G룆o^cb?j=]6y bٗ2~;8Ы5躇t ^lһ+-PGv҇v^&3/!? vL0U̿*_ D p4='|U~?{"R7Ǵ[=镹&pH?Ht(Whj Zb_żS: [ϕ뢿 /T^yAduah?lJ>wVS`RB"˖@_utdUz7}!LBbT?qrko%:{0bl,_r1b?T*NT*&fOβ $!Ñ^p'\^ZJ] }:3(zO$QxGW*Q1D-Yp^ jH>2[|۫ ~ }2ԫu^ ,ıKqjИ'_xC̀]N+Q6>a.[z^Gԕ\{*})SzmO}5 @( 泜07`L1w?my)(mn^`KS^cķوy^pz)#͆\er,һMfDkoN%0%WXR@77VqV/d<2ұ5LWM14n3$:: G֢bA GVZO)$tMX 2.`-':WDm..Ȓ|`>/qzik.vXsY{ ˴⠻z mZǣ] 3R[e\9ԑx\YL1L1ԡVr*`10p㜵Rpb?,>iAYslዣ-HQmHe#as8\ ex[F =枝T`5'did4Yܒ3HmaDGIX4Ń6qf l`|'7tb8m)$!9U[nְα4DZP{5y ,G3D٠i?h@=Lm-9iKjAP/ bx+;X(T q )*-$#cU;? xŒHsW8si X|_v H3EZTE4C}f!rR xKch;%PƖceq^>bS\y^%3G Ʊdjg*ÿz5ҥ^~8D g0.Q>@:lki:MɞM(0~(XǐyH=66g,1!U-ӊmجe;:Bb LQcAZ-am+XGyݔy@l Y 퉶`ym874Fc|HI9ϴVx.E5x8H}A5E%qyu)#~g.Q jddÏ  (' ͿM;cs=2OiVHh{ߒϑȐx'J ?F*#q&bw/e)/e+FRql]}&Ns7:fN5e`B$M߃@ILGG_Ϗ/_nIG]wG]颽h'uNjsyI4dǾ=h7A\.yu qҩxw;H17@mu)9wkkX6@ /xP9G4?yA`oSK@LϖP VXF̙pݎ-u nvz΍oi|h" r쒝sq? y@/ҷM@[`OӾýV'~*%qMPV }#x [,s rl :'g Ϝ)5~J&)N JN,|[{B{` .`8piĐ"em`T9n]NVo=h)Cj:Ẓ4E6m1Y|+EÏ8tjF(ݺ]>M@%8EA2XkQxuWоIRXL~] }\#!cW_";Nm>)ȤB!6=3A˔dᖧ҂2a źL2 Ǥ%JLx Tr\QfKH9u3D9)j]CrD]no5, [|Yzl~EҺ ә}I; k~0,9EeH`IOƁ_UZ7A^GMJG:JE=+yYNanq"*9>Pk7=1;)J}}N#bvJyy9 ~{vnńy/o']tFkř$UᄀW4 q}pAcU,6&"N2r1g{/p{E9e|&n60:a!$Np'l/r j^R >pO8kq^DPr&wGcȟdSRM8;T8wP 4(w5h7.Vs0])A aQhajjdRۓ[ '>DVKZz&<ч8˭@ zV҄94HpIиZ<9l#!"[Ggu(.bMW1=e.Eq ژNQSV93ظms ӉSpH~Gyf,])YW 8Fp,sYCioEm`d^oѶKy#xuÙ/2PKZh8ߐf`I?pɃt71\>~A_8C@JA߈(n>l$42YBǵlLj^}XC R2>' ^@vP#y\A}}YAP3e{'SRƏ/5;`?E[PcI2d&&bgw`S_4WL86/hs0dcmUD*,NVG2@oˏպN߹׿>+tk Ke˵fi(} ^TP]t|K0^0X=mejog+9=x`sEMe%*Yme:x9d&a{O s'(z%LR6ރsmeG[ote{o8E(/dKqb4]K0}趺O}5srcx"xJvN ˃NS{AȞX'(5qOGڣR2BTkv`iv$ƲYolZ8F\ v"+d- []]i&|5;Q/ $Rfx<ʡVk2;i$!>6YVkeh OMYl8c'+\t=@Z]aZ!7Q9!O:!0*)Z 4qI aQlx]D]Klx椤AѿJ(>vl}"-O|S;yrAj wY+Lv^i^ *f y, 歛!oRãت# s~GyͶK _7Mb2q S yK80q%P|ʮOV_v5絓&&mZ K7k>:K}=#ӹ|.A,ݫY$΃*kY!}h>F_"WD0=[Y@u>q5{FEOu/ZOfdLe!#Np\TҀU),A iU.\Jg{YU۹.'T ARtqYR,<]a+FAb*xL^w̚D~eK Ώ2-~ q4\.vV7zLdfqәiֲBB]گ-eZqQ2Rĥ..05vyj|E*Ij?LPDU$=Tm@k}BCfsjeb- Z˿LY}ɾn?1 :!ǿia:ZMjf: %!#d@==K$JAvICf+éy{'M“^&F ߅Oq3J$ lSzG 1B2f#;ǮD+@~,DDݿU\u1p¾T4{MɅ\aEJ@BHL%m *9TC=V@ɰ1q\\7*@H܊XwF@zY1pJ )6q{30 E# .W@{goLښ8!XpY%HwY7Nn0ts3b> ~ @ȚSQ›:)ZVob *ɀB3;NL&CG==jSXdK9y8Bxy.U(NB1Ht-TH Jэ\GH<ϴɎ ;'L L# ^XN0i^l氧2r8#5EXfJ:*z绞'n/yrTWm̀aڴ Lea-nV[b8(5XH m.e{I2mG[&R4!"RKEZi =uI2*!ZqH8ll'_b)<2ޏ4{&Kw?G(s[-UĕQ+͇<*^NFICj$+OS0Qc"]ǽ;TLG9WZ<]X]VD!"$%:0FٮYN%幓K{')7IP*i#@Byz|S84D 0ۤ&{E}9HpKq[HQEl)3oڼ-'W&#%/Go48c(?H#M]E 9%-Z_R-(&Ț/ Sˆhڂ¯8ٸk;y+&lWcmɺI*x E˹]`HRA T}BUg4}j"̍Nrf5b=u 0c nx>\HS)3|2Ƭ,ZjP_4Ѫf9e)lw S#8O' IDATZ+9oW'$fŶ6?dqȄڿʆ? n Tvz^iFR/>KQ%y G43]MaA|KSo ɿ"ԏz<*)dzLsK_ (Zw)!):yL7a1ShPm}Θ*H6ƙvW~j%Std`<".R8dE~`vI@lK5 Pt5l#Ei# ; 3rnu+SXH*TURh(&=yz$=8[}).Iy K E P&s<>`2Go˙^ <΍:-azTVBe54rRC=~LDk hf/t3G"Cj|g`#C$ɭS _ fsL߸aw!0LYS oYR#- 1ϊs`S - %g)NQa 9"3,KгK@xoeI -L ʜ_1204rH,rP0!hP,Zxv9| A6zl,uVJ7gO_}oKy/A)VPCd6}foYCg"oꥺg:TyW.*ִ/GEP\:V hQ*h?j_xM Z'eyRC$eqWEN5-W>G{orUp]Զ &Q+ˣ\W<Ҿ47A\v`,9&&@m*8oxֱ,2% C7Dۅ6ަt1,dۓqqnH,F2S:8,d(b4;tV!Ժߔ"(Xip=AGU-.n K]b,,t"AUE'}H#^sÚAUD@o |H]gGrzJq典u7םwd 4P$]\y@/FRpJ(b5gS :DT/*f.M(݆7nב2#GZ9|H%^&D Q©kBET0jԦ2{H;-_[A+D: : >`֘jar8ku#FWR5V@(~huw+Хb4J܋ &t2#?)' &lD=C|Bj+(ynV;eMgyK:lXQr5グdi(*o7L Y B@f`T5p u'APnz)߂ԋhmdA3wA?)$ "c&ԛ QI,.a'|S>B4:yc) mcF&Mr1'r5T h[),qˋ$_Ky;OBj?ݒ8pdkWrՊKA.o؉v> Iüb5Z8j8R}ؔfǁ NJ/h~nKbQD5'fo9| ocXfsgY}h[;Q"T\b _ qbj`;a%I:$t1c"]ɈȩD/:1('=j!#8{bJjpt jrHKYzO 2` "$[8SJeqJYJpjw8Rܼ;\Y?94g4"s׻VFQtpLd b %b&M$ji14:{$."'W% OH>*6X4{ aC :CdAXB ~/u{Cwt8o2۬#ʶ8#D5nP'Ҏ ?"cۍޖՍ`sn/%e*3~N.w{/)ˊ$-hȗ5>kUuN#P5:QD`4qʛ)$s%'4IT"(H%`V f`rV`UhK {?~ 9ꩻGowG7 3K 3TkB 8~IZv+0\vRFA;_(PKc<";\eA۷JEۥ!xZǛ7?E6-8-4޲ Y 0m,$>ʞԙS)5ty,(KNV}hÅj&V @+/S=-d-=x06 {`Ry)b'[Ģ,[v|%nF= ~y2r$|NS'ѱSbOl$|f dnN])fM(ҫY@R;X smKl9"0{3J.sFС4y#[R?dj$%+?Ze'aǥA`w JtZCKQPgȟ-4q{qQG@*f8oAdQ@6JjUI1d%7hΊ>ANՄe~a"9 $(ٶIxCz 4%MT7 s3\*\"Gkaˋ;(,eS(G$44>+'O,(B.=OwEnq޼r&"Fª:=Ig>t H (r`]=x'v ${8Z*ͼBo/+zZ,a 7(q[@[^7Ayt!rhg0t$HĀH.H3։卥XqlM*8?MʸJbQo%ߎ#Yz5o4?)X"$Xcz37 N`̓ynUX_ck44k}HRbAM[OD"Yu cȂ@)jϑG(Zl5w~534;6LM.)˫C.UlLOHzbE Cﹺ(%Q{s"/ AH/AYt0.DQqwy\'sU1{|`I޼%_~g.q>@r:dJ`3?5*/uռ:E(lMLdqZn !O$EK,n-q]-|A2f$dE2b`g p~GFBma,"/H]9B2liȡ!:> 'KSqIDettw`YO4u9\ AşvFe>>6_zJL͚ P+8 ɖY0gʏ{FI庻I?3y'0p-T!/oL-Ziԑ _md0h1*ichύh wAjfP F{^Bʒޘ k'ѭiwŌ1rXFyx3|׷b7G;$]1V_9^Abrn8Z/䧹M OVK'iKqWfAN~qGoĔdDp ր}|tt$] dJ$]+rǞa,O91O+ ([w{[4w9+ACY+{$9Vy(^ A#i?7i-]ֿDJ/Q3k>^?LWQԚ^i4Yeeؓ)]%(`!}FH='e*rJԇ[+.C$%/#&:I ^J3 AqX26W3pELPoi#=˕Z# M,(|;yYqˤX>;B 9?{mOBRi#ɣx^ d#Op8H x wTJ/N,^\odEJOn0m3Ar'rx5.x O\XlvԱ9["3 k,c;ɛN 6="45'XGIEwC::el3!u*^ uhS)d2J(dϽ3 7n{vz{N85 ?.~V}!o5(D1pX#"\Mm5o#ItƌE:>͞U"Q/]Ճ8Nl@AFcw"+λa@ӯҤ{tx}Gjh7 .mi(qD,3=hts"e=,7Rlxdյv'xw<|>.g7Mߔ[+V‡F.8Ad'-'St?ǩ⊥ԻضHxIЕ".^vTzⶨ&;!ѐd^ix"r#!%E1,w$b$vK=UM9QWh2A-I\=*g/Y@_T\Sdb[HsEyҶD}By#A?5TWE/hPWG/2)NO58޺ SB^ɮmSGNdvu$JlokyTB Yt(6t*:mb :i4J}rauQ OZi7M6 }Hx|]e=1Fh252-Ϣ>-AEj/p ܄&I9'0E=!=MChj j4Dᷨ `/ %hW sIY {-#(hڬj։3Ą4A)AqYzO\LCV \z닝C(؎) R1Zv Fl,j[= @[nЅH;f-Nٵ^~DA<Ya~ŦNe* PJ;8g!l-]7LE'4 ʷ>S>QBPq]yp`B>gT x}/ڈJADP>#JZ.]@s觨 =e-J9 7(R`~D&'$O ~7E^mx+ Qtձ^ai"\ȚB,Zn}.΀XN=C~¡64Vw*g|VhݺzQ:hxEm~z T`tZ=ԏxsukPIGc-/ʹ[o<0ŶMt۱alYm`% P K >4IbԏX:Fp\m{}j+u j*\%X^?14Ehv-GՅI՟KЎ$+թa:5? A?e* S(Jw`(1|(zХ)mĿ ]vJ3~R@b? &lcՔPz2&F"ĎO 35sL 3ؐdm 6fWd{ѼՀ*xK UMVLޓlHW@NN$)]N\^MtR7;Z8E:-Eo~ m- IDAT7WgHbO`(4$1USsU|2(1p WK&(IB# Va PnPP74FO-ݨg"@yZ(n 19PVu kC-T<텯ڹJu$&qes:d *xCCnkm/O5Gee"8g%(+۶}+Cߒ!pF*-ƞt{Ha]Aۉ i5EZpAԝF@Ћ-4Q(A~4|mCeIv/_Vqzܓa(ʦ Lye<[%}?Ԧk\o$\1OGpQz *=M.HwPHW zh\V9'Au*vhYnF x16h UVRGNP*E;VA!rnӚv5)ѧF9Fߓ*k66*3c6 ;Fe 6U j}H:t!q J |JAsAI ޯ5eu[j RzTԧݢNdJ"SFHP4^ > Dyefن BĆ!.B'mtXH|R.2B)wsA%hF_WDP!+b;RNV /kbMWDa;|mTID6Fw7) F* :sP r75C'%4fM$)I ^\<Ĺ4) ݆ܨD̋A炅:/_%zǨ(˗=C (1҄A|P O,KDF. Aй݄wdM:Ϯ{;U[I`aP`;=ݜ`^DxNIz>p@MJI7&o l"h&6ЦD&655qhSkjMԚ85&mjMClU/`Nu0AX8<9&AH̷l-Q7wSġV 6 w;,}Mƿ-$R&EO|I`LPRMi`PiDK@F@P$ߍ33gF̠Hc̤`gJBfd&r?c *p 2k>2gM1lfLf8sCÙlbfGsM粬4&4p&e8tab26"Mʬ1p/ˡ7 N9#%1Tġl|/8d. .)J d\VFNKCO?[Hm XN53lfvg&E+IA`IMirjtȲ%k̵#}&mmnA`]\'SvbhЦɮ"hjMO,Cy5m?Cg򋎄m;"ې{ V=5_?0~ hXPZDЇ7hǻh/>&\G*q0 ^:ncISH:sh(CW)n E9׶  ^j PoΩ>PzM9٪q(phktlEg嶛L2KrK~¡ ]:ˇ҈ 6ᣭ"m܋̡QC6- i=룧mt >N=#׋[5"Z~)^[2VՇd?H5h6kaޅ.(]6)e Yc壿JjS V 99ֈǶU2?8WQZ{:̥Ѫwqϑ_ FقQWtWZ}tW2X)/-׳HImqph@[ݙG߬|ѲA?!'B6Z MuHS^3Uѫ_Ü1G.+t[ODb*]C,8^4X>+֘pξEa&+i;DO|D: vø! S?+ ꢝ@K{zTF n8L]`=,^ͮ5ݑef 2":hg@r?ekJ&>8Hr -ns7aP׏Ko) >kV&a7:x߮MRPЄ^y %3 l7h/[Yfu%wwDcr{j+yoF_lY? !A'4*s)&e[ws٭|EҦ,k0uDT2^zf^K(F1z@h"QMgYaySm&g8UO#Cn̼F:x|nt:aNgukwwnGE Xי8zrzrd|P@2Ԃ=́~Ӹ/|䡥Y 2K1`.Ξ]d \)XR! <8e2f ެPP%Dc_?X9mY{+RT2~8@:v'2 c`wXsHFJﵓLey-cvp KKa8?],v{m'2p_ETrac>|0_KDRWQ*톆CY<嬐 '\6!O"'EX,aUK^cX3ia$B%RށwU?׫_~\d:(BEw+i[0[כ\};J-ґ Z-DOY43`d-`ngקe3WظVoL]Cyu٬d*@P~͂κz`IW1YKMA3'%c D5xWiȠw׶Q$ ^hTK&wa7˛Gϥ* ߚJțC95C y&1'ed`KKkY &JB M&+fOy1F>vQ0(Mό- w"B;?C1ۃJ[ /"ןi1χ G㼯Y]x,Ⲧo s>.]lIGevXV9'*LǔP? ,9`FɈ߇@k8O2u5n㉟ފ=7/EN@nu] UU.}LvRC59![xbshSf3< $E!( )d9ڷSYT_+qCt0ɾMJL=ޥ- G& ǰ.1lța$ș)e(OطV~9ԡĮ=5446/|V.He\?d4(̫Ykyo9[B@;`Sֶ4L']@:gX4pφ#>7ދ[DA[-FsG=Hm~JKVZ5O3zt34]p(/COd8)b(F} ~ _&M+X]TT$ĠqRXf>*uܤNҥIgtTie7.y-B]#vq0QZ] f.e$M^rnCr#Fk%'gs22Aɣbjjrj$=X˱Yà$gU I59/0`UJ!z~dL}݄wrFbz/խ8tX.LmhPgh0vYL* EBfak<j0`P~e鄫$B=rYw?1=5p I}|_`=&*=:r4xݦjۖ?hwho~L%PQ&y"D@o>&/K&,W:5+/<ٺ\4F%?^y!Iġ~Ǭ+3*G{|9OHE0jk:zeRV={ΛC.ohİn?tݡi lťe%&h$4[}e?~-NnFC%5f $oԄ/ƼY KѕL? Ƙr*6$&KS SΠr#\0vtl X|T)Z靁ʅv(eIyλ?نKS:n1ݴiԌ? tgjCsh`$,/Zd*!V{ tdSW2z1QYuLm?Z 09ʑoeu41m2;~ϠkME ĝbieC^anѓa~ 6!y}̫Nlw(o, x4WH[6|Ű_Gr#{y/dS3.oBEM/ ^i..`0=_7][#a/ˍG\:V9wȽNꉷ{nL/L'돳ۼ?mg[W (Y^#y+ٔ؎G坼fQI7mܔhiMqV@~2;>K)#w{ĭw)-|ɉ6.!/VY1-~݈֗s;N3!9d zZLV#_]RD4%"ެ $UnU7"W43wUWAu Q]V̷`Ir7ru29&[#[<;c!'ڍzO|F'$L5?חI&~nxE%P#R,@Zq]Ed=C3hc'\lK]C?{݄랸к7%vз F>RB0YJXMsWR=dVK׳dC*\&\*ʥr [QGAAb\fYyZLJ pڎo2Ab|g ܍E:vˡ{*3 ڭ4䉆K7;]a"4Kp(Rs,?zBz?$̞ x>SJX%z=^nii1PK[bƉ?;gl? ߊlG޹\“̶'ȰklVcP q>F (W( fgi6S֛4rTei}r= HXfuI(97c(£+fѸ#q Ht3 hc'7FsIG;hE7z+,w+Ҫj?x0A)U8*VI6k?F?hkTZ/á06leh9)ӄ}֮P#{ﮜVQX)]慃:) ?wGk-'o[g+, #wc { Ό| ~cëUĵ=)hrǻURP -mҡ]( jzLj5ICr|lE/ F,LSB3M`ҝXO[A~jU0k{3a*ly˾zK+Q%WrAcS(dfsOz ·1F]ָ+H+) pV UY@~CJ3oH{Xcok=dِ=yr왈TĨh`?[OH٦}F {<ύ;ÿmsGn()Aʵ.I{3XFC?Z`Ϋݔc *wBZqG?|HMMwzw0iv PaQ'h`|j' 8gTZ[wlO|s'pCZ g3vd׷³m;lQRFUJ{ɱ:(}@HvuSfkx? fJ/|~;LzzYnjKq 1$[Vi6MbgX!&XCx$ W1K9JY՝?P2~йڸ_[JkWu-؂Z֚ܞc5덮5퐎O+lb~J%MSk27.9 y"!ԡjF ^Htg,[SOk9IO`[xW&XL wV@5VX=c?O{g'3i_[a;Aw[AϽVa)6Ѻ0 C}^G32FYbNMhYfr^2W0lq GLЕ= Įk`c \[c.<ƜFbѿBe1;}(Qphѓ= #{9 =ܥ9Uݡ޺ޅǟji;Arh$ʘj&y0D ZxV".vbq+!]$Zk4mv<7ClSXIDAT݆d*=$cndh#CbT^d[+ɉo o.=AQ%\5Vndto7wm}^so9#Ak%ȡIs}ƍ3}|_\B["2lFB.HuaAQ׉c\9>s$7qq ,S Ap#.d4ox~NoAٟZ9F*URfݯ&d+P2L_X`ҏArh,h>m*gO%?2]&ֻE 5OIJ_Oiq|AwG#>(s_|CΈqJ \ð)wܭ=怫urhHيڨn,f] Hz@?]9o.JC|y|-3?ϢQ>]UD[yjxWr~sW<+H˖&,H"?E[vRgR^[ag嵮0ޢ8 oS9eqE֢a7WRGogqx{KOb̡1k:@3|E2A)V'ͲMsK[*=$t-^Ϝ#Rqr ,z>`V;cQw-Vk;ۨL:3M ^}\hNs9lll?ˎ/?\-%B2}0kK` j[}EZH,F5㴘ќ<57 Gs uM4Z}'ZGK*5ϻk=Ssmpg% חd }jCzЪu#e榖2*Q`$]/[TZֈ͖RWj0cZf(:egHIjn k ~Ċ!6"6lr{iΔ7vRp ;nASc4'-.}bB8TWϭ51i)oPŮgEWu}E;=Rg+>dV}l%,}<"eWz]iPjIGo^F)r9~+(9>A%^nJmCX_n䐛s'fTF+ԫ||BdZ-"ux~` ='YYvn<]ntg7;klRb1M`FaΔwV"vv$!GkiQ;D7SMݯs5PBXX̜¢] &@V73M lďؤv2JFW fUqGn2ڏ[2Ԯ<\TԷG*ePB4 OnҕIZ /4,̞ {hsxQX4xE6`Rab&-8 #7S[IM;Oht*"]` M`~]uh/&@prQd#\H;3ayJM_etkp(~߼P 'C|r֥yq&Td s.w)e;5 2:hܯ<3PqI[o fQ7-9U7Jz=J8REu~^,ŰZzjJU7n):2Z[$ex<1i":bF)nnR%JsR{Gko\L!An:J?˳_CPw BB]%7jS%yؔa=49I?&7:RgFhE>ynsEz]v?Gm ^tw?wAQ%iWAXE–R (pj]"TtVqQu5p¦Qbw,@/hPA[<[Qр\Dc xG2_"]GVf֯c 70>O=)@<_˞3m>WP)UJxlO%VO#ML 6^pkϦ9bq; ) +ȯ` WiBTCi#׆dsy^xD9-^[I"A%7H?XQb+!U^?}oΑ":Q528-G-3ca U@`Lf!{pQ{692_\B.evmP &WVO!iS>dٯJώivsd"2nWX|ؙ*r`GѬjG&|{M&s80 /]s0iCGZ;[5ϧO. dHzw5TY _2{4TV雁iL&PF &4:9ɿFgdžNXCE[W ̮eu,C#L:^hBRb)k356U }]?^)cڳ~HV (Ի/t^n N8p,B-q_kﲽpKKEoKG^dϳ&jAWzl\ Npjo~lqŸ'Z%gːT=}VUGh3]~ 9t87~Z58hcծcѕ[z~ex R(>͹٩>>ٛ$?mkFbc§f9Q5|Ȋv7&'UMչ}4~ @@BQΡIӮ]ۛj+~x.G6m֪?S_5׆yd^ux0s%Tuxkiio'mdn3+O!O 9Na3QQ m)8o >74 $u#6eicAQxlwm6 (E](mWLz*ݫ3җtr>CLhNrLі3_ZALaBpycz7sɰw[wpɵ~u( @dGo)}AŰEIaLRbFAZ薝.acǻ<8->I~{jԕ(Z/ &4{l&$Kj3Nm5[N(bN ۳$ F9y8gNk)&ݧs/j.fu Cp jY+%,TnOܟܥΕ766 8.\s~N0B@0ƺyul|xmCK6^;wԄ< #Dא[iΜJє/͊q@ %I$ZP^¯BJ?=82wylCcWč{vV%O5# Pr+[躨vLG}'%B}1pttr-( FCfq;=)iˑMnsRdNhC<\g'WګG%b-5q?dV/9(v1GI@"#ց]8:Tr buq<p-P76?3,9¸cy`M`CJ5|RAot8M3&q' "=tnn®əlZF V hhvEPY~f5^08O8*{<u]xS rGq5&}6ف7$~$U3Kvpq7E嬀87oxZq(2Y1R}lUpeһe_428tCm5 B.JXM߸3bŃht9b(ZU;i|t;)m\aYP2зo_62~ NZ(Ij^"j1_qf Ly,_->jil>Jo P1]leM Jg< ~1#7 BY^=186t|]r SRͤvo] U}  r!R kĒQ $YLMf`uNs}CF\[S H`K;*gbԝ暪]C'F4Yϴ&%[ ՏP y|F-т<9̏l }m7Vi?UT˴q"@ 6g6mK^%'!\ CݬL`*Ǡi~J}^7EBPr%S!KyvFX!o2U׃R?dZ>. o142Sp{&[ELX!*Ҕ%:> "Nmbys?vSKW,M4@$8M F +: Mt;~DɩhƯ+8"A(זGH/kR*Cjy#yRC"2Un 5B/YsPW=W!(:Ҋ _+ڝO#cP#!F6k~D@lw )&~Tk390K]Pc!W+{Dz'LuWsf]*j,&ymiȟ̌ h3ऌ;[x7ʉueDBІFH+7!i>LhG sd 7z QjH"c7= hl\UaiUXqUE/6$lʩo 5B?dS{;7* Js,at1ݘsobX"@hRAM,OEe8tkn910վč{G  BtƊ\4= I 5a|jRqOk"xfP%_~3%pG)P/x-GNcیlwu YcrчxELDB ;Jų^5>=ev}cTԭ?DuwMJ"prʘbT paz/.jL*/)i6:qi5$ln)9DBP0&lUQ0{)uigB.E "CТшu0Kv?Z?=( @NyҮi4?K$t윧6L&}r`qq;vh9~EBl o͏pcO%jţ`BMl!d,СE(pEVV:흘$c| 9"CPq75u]|pmv/)>FLСC(mmkp3#%K/!Vf9СB(E_|˺"ݳoL̕SH  =tzRYֳ=HnW"B4 &O[TBC&?4^J0< r챞n }.CW&D`GDUj*;111F|k4&T؎3Bb"= [9YЮW%Oaُx($D/;a#+Txvo@D_^0LVyU~ SgI_x>s dL:QseS8V>'KG8 l**}g<J.*>fT> t|7gWLXt@hȑ;Qݰ=KWvDW/ E놘}¾ \9S{$Kj]T?6t[批ajl! g ߅%ouV93Ȑ?(2|ψŵ6&sh({gpCff붻tǩ)0!8vc,(h[crE>Ǡ@X>Aga8W 4}@gC@ܦKd.WV,0e*./>a񖪪 .;=22XD%,sXt;&)j8$)9Q Sd mqz|xɍ8i<6;ݭ[;#[ !qU^oQX9u%'ԤT`GU ,Ye-mw$+4~mqg` CT *7ys}_B8m0ϙ=EzHBRx ]8CB5n1LXaؽmm )&,Ȟ\ѡ$ |f`-×fsy1CȋShYh2ĄQLxtw 5;ua"[yToood TŔԚqE-HT6ܞSى8e*JfyE <6$pؓH7eb3W@&m`d6E] #Id,6"}(z6+LF*4ܻ|\v jQ*yиCS2ѧ< .3~-H4 ܄ew'9}0NA5uh5f:MgWӉ}J48-ǹ/Dn݌L)qfv„~0Dx[gx5H1*,[>I\ܹ~H55u[!G!-exj )&j)US읰 aw†_Ye+ YT~8Gvt?FD"F4Ax1h$=Ӹq|qf|71[rg'،F6wM Π881f1=gH OLjn!*ʈq)9=ƙL^rAU)-X [J\c0/g6Jn[<)dh܌90Of@nF%ʸ@~*Xy+.qy!wgq]%w+.0,6)`( U[[[qr$A#}Lcy#Qvr.k>Py>{{W:Ճ_3:HOrII}Tw 3i7m9e.>|SٓA@Rqe658t%T9z?FztH\q"~E^VNoҐԉ(wR^𶕔xț!v+< ].t[u8R'qK+ )´ׯgkEL&]I}/RYj~]zx;!wg4kxr|fq(_pգ%[2Q* qY.,A<Lͭς^WF{;mԐ@9sә5R\}c3f7~ ~ xi0dL<% e3`C,AyМ H}P.ʪL f\)k3Az8R3Z$a(_;;Dp݈I֪ *8q-Cc4$$Z>*ǣ>EmG{OPޮf$HȾ)Jm!*k%Pndx%?4cV#<%m:[};NΣ_%YoYAm6x, r\&%Qnё+Ml!‰{u^kr[aneos1H(\,?dgH%gl Ibr>'BWg.!_f}Z`*NROz"cC?3s2=̎" iPeh}yƞ2ǹ2"Qdn繯]S{(]AX_xuq{|tZ0+{C;]/{.eLz:Ϋҩ0D*x.Q깭K! j+q>G^ Ӊe$;/"9 鸹?q\s2Hzgo;sgh{w]K|v܂aA!JQg +{B 7aLk2'8HOwTc?ǧ5BXB?% NISEz! }mr$NM17P%q7IA9#GP|D@/@JjXD (*gJ<EK I0xOu᭞6= i@-F'{jzr[GQ=֗I1[@p!ϙ3gN /Ӭ0WgẈ7S&ԄnQl_ڤ Z|OgTg5qg[pS,}>47Zf1RIZ>I:^Il(\U#F knXFFQ5/ Qo'^t)ՓWMW~0™T]k{+z1&uJwX9H[o{O5&MvS&Φs4!6 ]ܲ2q:N9Tc&JD}]v`W ">m,mRXFǙ= e=öMgH85# +5.VǙb1Nh \]7κq֍Ց9V⢹Ȗ*3Q\UEN DJ (?aœAH8j)49d[*b/|z#UbSYzwP _ 18;%b'CbpXd3ADlJ/s7Zjd8s!g*k5HN3MݒѯNY*C|hI?|_A';МH"j 8A2%?4T \Lf΃SY%Hlv*A e>>7vUj*"=o$'\2Y8f #jnJ95_ltL߳k@<9dL5s cXzk lo6^]DhA8 >@SF=Lr{-"K%gE1z 6SNą&ԬK2+:Ѫ^DyDqsM W$qA)cAT?ЀUVM]v67%J B: n|w)x7MSnBX"7M8& a(y7z6NeU@q@ܻvigޛ(' )(|'UXKB4!ٗOj*+Q f-0h./zm$P1XPپJI> yiJmNmv9/8FN9.εv=LA]yBЩV3Eґ ;XN\&sH,QSV69NvV(1y?QfLE%Z#G~"hcNtn]ʺUm;!b2D2pɕǵ!r2 *G1f/$ɕ(IYۗjBX' rDFEX7Ur-Q号:nf-1}rbʀ)r稅Xڌ((ᐢyBe" TY#jan%3osc eIDIEa)'hĉa*kCjL.`x|ВP{W/th !dD_|3ij8"682޷ /<=rA>vŞ`;aMUXH'tRQjJAg{`5%Mŗ":>SÏR5!R=}bfweOϝd2yʷ lY턥ueZH0HTΗq;e*O.nyn5DHXj,q;LGrv""oqW/6O[HlI$}鎻Rlvȁg94fQ+%G 3%gxe@δ" o_ǑcAW=Dxa~r2 4 LGц)z MOȂ*&HUtՐ #=H"`ݶT=3B́mL K=KI>hW.Մ" 9oBc0|T,9۩S!^KY^y?%Kh+,׵.;0N΅wt'!cƧΩknZRGOnQ/02U*)ޮVؽtEXM;z2֊+ƍg3ֽO~!8kYESĸ\><7&ËW1+yP֯4=/ޫBby]^MEؕupho|Ėd"_X5gR.BTGN W R+C-(2yKx34_JrϕGerzH0ƼlX=5p>lv0`q]IjByzIGla%dQO?'=a}J޵;t-y|[/?nREg/@ ihu\GT~g s*Y*~m쉋J-Tu+z89s\g#g*Яh-ޔ~dlKsL a.,<_'W0f,m&=k+J=̣npm/XJ{n3zp']ZΧX2hҊhKx4V&Hݦ9 W-aiiV"|MNnˬ9km:5LZ>1N8gSuL?CCӏOiI³p 8"D~"FЃ }9rChn>M9|?/vdYi{:sQĂ&i߿F. o@+̜O鏄k)h4"nd +6p\`t\#q0SoۂlE'Ar,Vxh>7-%a, ʲEЯ9чPv8Մ!g+ n5zqi3jeG9[ xG +1lFw&5su@s.ٶOJ۟cR9f͗N;YasσBAjvrVmsvvN>12-ZMNV5&o*#gdku䬣f5Z5YGMv7+y\RgsT`hwu6%~LɶhodSDֱ)Wrt+/]:$ SyD9H-*c|gD8K1G*K_@yUmyj|DU_@ĉA`iqH9G*cSY`J(RtSXhL* + KܦxjAiH82d[N 4hd05~Jt< Vrr B,SNB8*o 9AMKCMΚ|,>u1_ č+9drȦ!U`@ͥ1!)&xA#˳8p 7wlJ&]lQs*0%ȸP|KAvxP| ħVmnQ'8@s%4NMt'#9:{-M줦rB晄"J |ӭzM@Ӆ)Fĵ0{ Ij>N c)ݞY:M~.j&`qs%fS=rzu cg?UPJ8k#EYbgj/)]]д@4#ZjrR&\WO+bѳ멯mqז=m4 1OM QO 9U0vB3 N c z;4i5(Rzeե\u ?ЁzZ9L䫘 DZO8<.HG 7N)ierFH=UxC;_/خn[n:S;/ &U0wpɀ7B$-ĖFmHJrQLoh+5H \JpV{}VDn4IVV,:6)ƧvS{]V( y2#t*Y ֣m;X( XT33s9g?#2jhRXr{%4( QQ6ef'/vQs0 e ,l 6B(4UHQ}f8KdhÍk|Jң<䁰͠TgQiXYf4mݨ5 Xoy<ߢjݩ&3Z}yB7AQ8QrLvȵ$*8bJY ~J#jf%Z9i^#m2sXlCAqx#Oj|wDޠ~x.yJ &%͜`ȁg1[(\h:h$/LVj97̔XZ+Yx+j-$ *6/Å/d7s]T|u=u?3[)#2!+oK:SD?R{/b2.S|An0e~`ևE'u:*a'S9SvjMcIU|A\NdS#7NMIy12gBCg+aqGŞP\SQx=)k4]DJglf"n2Cޠ)2sTɥj? =cJ~OUsNc[S)SbdދxN 4 Id"e?a[ޖ[\u:O|c.rn>M\yj6j ?c7iA[|MYt)<{]+hT!ҺDyr>Dks45[B◰GC"g|ڒq:%yy.6V򙁫^.X.Ư(%<}lVGl4G 7! G,Pu,JNV6ݿG"ZW OnᵟV&p^@HRK69s UtcJIQJVKp<{,ʶK.FMpNU׵OeLP4*˔CNsFZq.v1KA㠤2 e&ۼ4muKqFVUDnUA|"qQti"w\ڂu$if;.8EՆ~)n BCkwS{BÈC4XaGU/Il"l7Ew /yYjYdվ{_#3]V _c|_43UYXgc+ `(Re:l3;paj㞊@ULB"pAqILr!eѹOgTR[oM-}}p}1'{t֢X, YÖ෉ %HRy@H}+ OzKKX⏕95BZC-ClK.d_ϞF)#q&O-#ҋ'U kgH-yQUVB?j+fVZ}UUi`t~N8%@WzA{LrΥ܇9>#V.{-eXXm!+k<_opH!I׾#5sμs`p0SL"(S[ WsFͿ ֢C.Trl/0Muh1 Q")+)7zBb& z9H|nj"8l0C1絔;`ұQS]KsdX DtFs%Dˑzg|.PkN !E*IT6jNCBU l!!h-&2;_. GJEܤϗ|)&E R:z^$ 5SD9̟D6wi %GMh -bbx(e y8|wkY7R65RS!j8T糒fD؏)Cӧym0%y 訤lQ ux^% bZ"%Gț_}[`+T-jfgS`l3x$*X*d++f{h@Dȹ.~TIޏ3_mt@`ϭ7):;GΆZ7%*4%/:,ױNHgD]ox r'OI9VRڭK5'KAa5tO\m5tܙocGSId`DČnR~[9\I-1%78 N-fSspp"(xcYbn>A>SU| a6MܿkGV8@)XQ7,!gAVr0)y#͉bVt0' qQHфqf.$5: r~z晞>tbrT&!5@q}![4Q d4_7Oxanc}%o#0%)Vij6Hl?B[YH#ҝcRE=-.?JM3MQJtIl&ϷF(ިL,GBje;I !k`%ټ@JBh=f3IGY͌qHLV#.wTe$/AQYƻKkڹ"5_[JJ}]DV[1˙_r䕡7 lJzSZl3y4˿TOΒ:ZxRf&"y~MYKDz_rS7?Y/lWݍ=Pl$ӝF]-fFت°Yd!*VQoTJ8%=RYm90Bkhzڕ~ӏ9VW[d:CW'*qx9e]O[3Gci9v>. /?6yBx^cd+6jH GfNЮ`_)6S:ǛXMT:7 1r0nͣL CaǷ]sM3<`'3Hk7"+X󤴹%Km#Ӽ a-% IDAT͠X:] 5m{ʫ{(fݯwOej̷-['ΟghPkɋR8 <>0)_fUUɁ3["1qf76Gib"gsmH`WSd1::m{9OԣMf=BP53ӕ%gݛ]Ƿ`D/=nT Ssij>bW@wm 5r)RdO%4:M3?fk5u[6wVE8&7 Z{9_ÉD7Nztq^򙥐x/Nf0ÌCZSllF#GS5u{?bƁkQeVxnw{4׶PslmST2?R:+IZ\r <{yHnD#k;PH ;S&$Q{oFIGL6U R~h:æSmԴęf?.5oԄ0 ^5C6 GfGٰ& ؿ5s9c@]~)'lR <;TziUnq,jZ[{CW+qb/-W@Yck  B"j~6xEs* Ͷl/dg+wvoV յ:jQd˶Q&YG͚kqY7Z5YGͺVGͺVͺVYYZ6Z]ͬ@|vBy<*yC'#?Ň`f1h P }lV|J} XjRVUUq#ƕOpʏe[6-O]*/0Vf[bʸ)1C%bcUSBl rbdj(O},&b\/!q~ z̲'bbʫ,11Se2?!SROˠɕqCBL1XqrشpCO*0hq%"8lrϷ!uGmqvb 2RfsjUeeSB@*0%>XBb"&s  A3UhwA˥ ;K-UY $tHU͸ƍ=$Fbq8l~nCێeUN Jݔ]1.8;kSUeeDL\yehUU\Y X*+OADzG.]ZY<&>D1ИnC:lֵk<ע* f]k6RR]囂ku퍶'dd͂uT!dnF0}8:; Pj<ue[c+Ouēw :<7Tӵ9fnR[c>ljl:L)ljisMTb!l6_ϱikf#Zwy_f/fFy䰄oP՜2un &{uO9R6#5uпmbsfDZ~V&,\◤uZC;c:|;rZLxVc,jQPb{pزd* ls~kn;/.-y]cm IM|.vmmM _GF< {+Fq)w2ņFg쌡¥y-Bx \vQ3{u?L _͌; 22N6Coq0ҦGм빅Х}&O/!1|=muV߽l~?e5>U6(|ĖiL\lm/W[W؜ǃ]w.&.BfzQMEzN3`D@G1mV?$*y}`ҴYc/\jUov~:8vtoWFty]p/:6OBbWƋ/]F5x]lR\=6PG̽5-DKzX-B3W&<3ܽtѦQ nьW\ryJ4H%zC'a(W`e})s}.*o+_=śɷ}^$ިElkI{o@/wX[;ƭ5l?tX4gx{*z5^7WDل28WK?A#k̽l5y I7 ;9 ٻ[zn8~{N0.&~vg>"GPBy-}Lai+{zAJ#~x;M2E{>DZx|;[ixTHۍ{vnpeo.Dw8OΛ{&܍cDHM,Vn\pxFwI-}dh1II_FZssV݋BW"6[z7G~kRNv_O^z%zУs/4Nf5>@-b3S))*Б߁^U>R}¶n aYwt2槉fJ呯 BPhqYtVW6=kǥ%mrKwZx6zڮݽ/fb-v&68I 6W>BA E.A0%5cWg>>gHAkb.H;x4#\Ou\ޥE%{Zx;]43rD | !Q^(Y? ѼA&c+QDnpSeҝ 7bB{rt %&s=^Ѭ5/4nU}˥ݛ/MсvR s0yhA1>Ãd 9HMI YЊ NN{1hR-b T[mQl#b^ZlpzuM }sP؜$13>ƹQb& D`ay kN󑰹 N^ЌƷE_]#㖊}L߯\Y;j{n;e5,el* h=M#?]v-ʧ(k]#휅M O=kA@q m]"W.Tw\Ӹ2xXĽ=ɳmlNB~2[܉{݋-%ŵ!zOKO{? Տe\hSګmoYt{ߐn!ùk-<"F}u)^_]=Yå {꽾ֱ9X^S4hKwF~YOc<.O,job2.ݣ75]g:Ua0UtŸt ߌ#>M#"-6YuL( Guaث9an_~Rs,tX//#8O;DUr+SМ!M<.K,Iq;^x=A2IFBx^?N\wUG$ ={> !lQ}T9*bb|Ls WmV-AʹZft2+wvZŏ_#k/EHn"\znݍ\ɫylaٔ;,H_X)iCmÖ|)^Ź2h˾}aZ=_nƢ抴Em*hmbILs1N9-Ӈ.N+ktԺCHI?ꢦQmy1qƭ 1ѷxvhUSC[5BmK_{5-Z!ڧпlYRV؄WyH±>M9t $WeD8iTmBGUB0y64qu5ZDRlxpF9ZCKiH=ygٟϠn\桹$=-gG;8[v&h \x6B]Cu=~}Y x,Z& pNI9-skazIdϞ@3FB 𒺿Vs>uMkSŽt{e]-F)p͓m7`{͚f0;&UT:ەĵaMu9o9ip Xi7VFƏ|97ꍱU_!96g}De _Ag?G\u#*Ͻu[\mTtaM} ?O28qJǫuZz v,{$͎$\]0h|&WPy7vESU?JtmLѰTvsgNQ3"={.0D@4W1tFψ>iGr .lyWKRra{_ iW\w'5 .%/yhڏQ׏߲_^)hk=3ɟ  WB,]M?[ vcŹPې46&?aAXX'}85|qȭ̸Ɨ*u-+,FYkbqE]roFr-c~Sk}/Ǭ"`c"X)=pɫBwhokk rʑG_6=֞z.kUdϓ}b5V9/vY߳(rղ(|lZXI1%E"rخo箩]3f$ZAܷ2Xߞsd|hCvRy~K:~6uKgW1OYyߩA;tt`%;ׯJK̘B"B)ӡm4#p  `h_g;ˆ.kYH'+m}}[W![Z){zB['Ozg@bg/(+Mrδ|DQ)gc/6>_s؜e>&ۯ o畑pPXfQz*8ͷi_>.%KuT:t~Q s%wkI_?OMh/*6^mU%9l~^Df1vݜ v H}45lJf̢6Y{F 糿*>EotCJ;P-g ᮀgjĂ#N}=g<՗Nt,gSP|לOL5,PmFdO>x͞Hpc>cmGQ]ʋB ]}xKޖzkĶ.w/vq/2]DttaiV{ 3)@Rq5鴚6y>iE;=lpx% yBoz$pHQ:v˝n"Ao;=7z~OۼO{X#|r-([9࿵ר r;P-;6̚3g ~ggh>oUFIؚNJ[y~Ʈ=0s]VRbsY5dvwFJvrZFVx\58:v:NYoF;gjaW%] ^y!u3þJ7,0yDthh[_aYT]>d8Va@M ɟzW˦pص頽_t!e}<-̜94>(ip{t3KE~e=l};c0o'HԲm=TZyf bk3>K~[6> ZTC4` Ez3:xܙҸYaPڲr@˳kܵ/cB7gd9K_'rJ[j Nr~OV{ClzߣiZ #Ҟ<^/E<F0}VMg;Z}֚{ j 㧉Ms& 6{*2p*B<+ڜM s2rM=k16[ER W> -~w` kb\&_ozG-asv[4vGHfd%!{48`bSRPW'H-<jcE](t}F_W~o|h$֔t6۫ `3iĈ6LXPPy;+a è!@- N/KDmaœj;J#~\)B]!{ܷY^u N/Y;zV2J7vdB@a@ nE5v=/vND >qn*ɪ2g'Ϳ?"';EFSAbK~-(7-w%/bm񺓾Z =|zIv:Χ^5~c3R|1q؎$2 eE2:5M84@cqo38+O.Yr: z/5n =+o]_l^›&@K;#Y&΋gxB #cnx4|؉cڸEe~ߨFwK^~ugT*(9Fkk=z=RcT?i$@7͇xeh2b/LтߪU&j"mi,G}jDAm"B/ m_ў$`7z9fw+Fޚ3mϾYlCr je|gH11V2F' a#VښaI;C*|]N+ws 9z;P֙ /Dz[ݎ::bɏQl.ϱ`p_ļ儚gưtJ"i6\\+p )׋pڃ V`ǯlXur}>۱ b_̷C?3&_1l>d,s1=Ԧ4Jo⁆ }p̘@cjBuy,>hݺ/&߾g}}hBX/юC5Kmcד83~rtC҄Hc*;WOw >38#O3Fh(y_u|Y$[OeQ\;B5\׿\~WjZ ;.o/CJXTOO*aN$\mrj 5`3jsuKٲyMޥ/ᘢ'}|& [lŶ^ڜԵd{Inwyl&/aM345`enZ]|&F+H8`6@m ߴis[{} (oZn-l1;nσ[{K2,JH(DwU0ٛbRMIвjͪ{!'8 J24x:ξ .536zH>|!N(WkjVY:S+VH lGC/jUtl>jnp۔BcEGnZ,E}UvLXf]|ҏҀ󲣍nӐ =8ޚۋ\iTx E}i.aauzdcO:DNRAzؔ0ڛ N2s`?]}VG҃"$ٜd8bHs:Kg Zp؝~EZW.788XBnCZK}Q/gQ*2#?\|_8Hɬf_:uh2DYKO_4eAg5I&ʐ}3g7ӻ~t!`==i?z5t|e-X$Fw4Id={3/T4+ibf`,hc]xHfq5a9@sVLٗ;l?Xv?)좄{ $:R<z9x>JXҌфFT.OƏn{PF<6MTk3)UChv$F3@v69%aMY<ėiA`=Me4x}~VƐ(جi[7$H rC(dF3/U+׍ۆcݟn8mQ+)|r^=1|~X6/ g=WJ~S [븸KI?~6`{kSvLx&:q'NgfMo  (*gL Bӳ zoHh#[ZIoO7rR kqeݘ-amCvPfmG&K#p~bs`ebw$HQZljmPmpVIپHn1X7z",+:f 8{+qO xZEϠX䪭ۗ?١ K)v=~ziA0dx{c}p5:cq!=+vl9_C`,ca]Ċzl?j$D ^1af=/8O"ymsϧ\2.泘|?"ӜTVW1hHR!߮!θUN 5V0l äY$N_!O++TNZ7<.pY9!sERUc6AۓyJ'{[[ M뒁78t7oN G/d*Z^ƹٝ#*/nR3#iE"LJľM?iLb|l8/'X(pbgzyPzYaƍrMb#wx}J岄E kE2:H:S,|K0%@|8U&8Ы,¥||li|ͅnod ~JD> {f6!!" qCyCԏVgǖ/ՠK~ʡFz}Hfw_'\ k9|&[Z;ӹ4 C&]NTmpG|wRM>ކw'PpI'}blMtq$@%/weDaټ&MhRܺ)49`yoJCڇqxe%^RC&% Q1yZV/  ȅ\Th< 2 []&M`9~I{G/]$nX#}*oqrm$zǦ4p(!2v,5.,,a$1l _.[I-푉iHg%^9, q~p㔎vle;ܦԣ@'Wev[/gU uaJq2k柣mhhrr@@YY,}tWdG=PKA Ҫa4q(u/3PXei$wf/| {Auhۣsi/`+l>Acfff!uix&Uoc1QFAbsӴh:omySޏ=n#dY1R, % -! fu!Y%d)BQ*;K=MfUZ cCE0X`tlB~͈{xX90%\Vp,FJ=ǯiH53JZy=Pl0ι^zդ,w-^bbݺPݭ6 Z;[/sX!U B466\!N143jթa e.(cXc)54Y,v{ˉ& hh%ѣncny؄"fPo击+,~ClެWӥ *;g\af3T@Jcw7~yUsz$;U@Tt8b &,066BN}S7ޘ,be,c%}1]ȑ ]zHϾmYL"疱>ؤj[- rɎw)c`d3K3/\bzSs tX#l}A06q xeC{LZv.8ȯn#iWacvh/ڃd.5g%7V&)|J@'XѯicaSThPl^]sZc0r͇ I涙2ݲacbCbsP͈ }+L32 uQFhfvxe2 J /P+wu}"N>^]fX9A<9!u@yfKs7239ᚃ'5dž E_Dim(y`1~̨=_@&A? oχ?/0S4ƞv~9#!s@װOpLcoCy#Bq"$=Zlڛ/~j[;Aˆ~ka\peQ _ܓM힅y`UԶLPޱMx2U_'xlMCf xl"8OOǦ)Ҟkc'$ZG*3Z rc[w_-f#O/jB! S.]dnh M69Tp/ UE,ۢp^x ǖZ}'/rE]R 9Rˎۀ JC*=)Z8dXݧ$P Z3@P|Gyްza!Dz =jqLW7Pƅ&tҮg9$6\o ."vB7q㖰e (iq%rAh˥x h ]ɍluLEIo)aϥz2E7AqUGd'MsWl&M&fh2(K--,p5*k2@F>[ !LcZ M0oįaS4'M87ot&h*pl㍪ xa⛔&`x{VrEBWe"]O7iw>/{jMϧMRSТRP=aC?ǵX0Qp(07 gDM 7veiotSأ'6;E[b^&Slb˯&2bŜKXEb=>5bKy<4b-X\ӆ/\f{' 04m|τ\m}fC7C6D#vM4M$M1*6ܺvoe4l&̥m :ϣ%?_os\d!hiȖ2hӘHӪ_@Wv`7ni * ؕLIt|?z3} /{ onjet><~oo檕+dtc@{sA1youPz2YcPzC:oUڜ܈E4$2=}&8xqvPn̻]DoaAUV: BdAlp(L.vI[Q.W'B ?6dLobZcV*,:D:  r)1nZ#v&, P:DT 85@k2ɓȦ-&wiqi7zf(])(5<Ty)LA"G rDj"' ٣c1c,||x_$ W]ۍ:\SH,%8'~{]V6?/$`.b1sKd]{u.SrjXb֌Ӻ8V(-95WR$aZ&o\n( (7jBOo&׵(CW1\ +*`LsȏV'tYOf{d [1NL)U[T$" +%NJASdJ@Lb|I[M@,|V Η niA. L|RK7ݡ 1_ AHL2R30قb')xXTB<:frd :( L@gGd @i}BCY@2_ǀ:;!N0]yLVŃƭQI,CRxfR2/7x =𤦂PzXbAou7;0(f \ ~H-.;)s ECSTVUCQAbh#wWiX.uY=Ff- + ʺ[70)Ibd t7 W)R')72ߧ|K)42Rderjt'h=YYB)+W,U2LBy Fe#|q*<<zˈW*ܜ +Qfo ^dC-0mMQ#E`w[9I%uu~0vNC.A->\\0y @*DхZ+;THAH94+M T`|hVwV# Ӑ;ܬ@(PLhTp ;|aJ͑rO$42aw$z􄳂Tmthu@-I!Uia2VPt{IhOdrk |:*@*sL t2UIi)X:]k) @,T;MF-e JM!Bp I1OLV j j ku6H@e+tSUɢLb5R[3*=@{6o2@* ,%[:;QbyۻDώ?4v+/4HÌ$}hM&NLVd &s4F(ԂZ?z߆|㉼1_}nl[&(wlC#xѱQe\t7?^6f-^O hWiZXݞvվdGOk@7 1I'쵃Nvn~ ~zZ~wA'4Ֆ90>rr H,wۉ;T&eʔ X{a[0)>Rk,5Dmox[[ߤ ww/vxYsykv9 n߇8}) |qG s^p6!/ΒT%jU[Tu̲YGXGε)kYѻE"jTUrjʳ/ ޠ!js j"#q(>Z=hJzYfSMr-xAmؾLQHu{&Y Qu}`&4g9 Q@DN2u+G_l fq 3D&D|aR Lb*'sg9黋YE%XaGu.(5 @~ɴDK 9P-!U uy(~%y*"7X^U)G: D*+JUs*zxS* u4f`h^rF|[e",%?̗WDP mӐ<Ԯ ઉ>fIJq G$_lӔn$#u3ĝ["Q,#xڡ*'-4L5hF^UbZPqDb.$D@PQ5ER/K+X ]D`\xxbJѲss `1t%DH+2)3u<сD3:T&$']m N?GU V?,C"*ɧ ?S>D%PK"ȔyTY/uD* BP#ŵ^Ֆaf";2MW!b"!YF+jqWbpW YN" TebJ"Fa-+%ݨMݍkG(#s!Mz!JG (DtZ1u\ Ox"X4 JZcM:ԚS]:d <ҠtZ$<ڑQ2GVER]6v3;ڑYd9W#It#S֎@i2LUIFIJ$e k-rMډ@h3MD r,{s"ұ#Kݪ DTC"Z}vSu* jh:< Da0Rv!<4KTD-{(`.{dQQbGI?IEH3yxIЙIE=]{f2,8xF? bZ+M]f$ _rΨH"AYߞ2ib1>!%D*bMʪ"^"W`dUQ$Q5~S8"8U mMLd%pfe;B "nL: ȉ*ژ<8!|M==~Y>COwFUyC"9[Y1.b1#ˊؘm)g3+Q,hђ"UU 5"vhq1C^C+hGГsDL&rejmv]&rCs.ȬWE "TXfdSCtjQ~DŰn)@*UDNDSYڊG02CX_EzafD:PY64QX";{v-т*f>Tc"Xge] HFTm萠번FT$#HB5"ȫ4"(>p]т:\Kyj{1kpM,Fฒ Th(|mfnsO䚛0XW "s j(%h: _<6pD닄Ph[KöO3|g%2fѧ޺4S>P3xS W0X"OSDF-;2<͢_Y3[vq &/JZ,ju BUy!Z fQ鲂.Cs5DypBDKgԑ̾+6uD&5#@v+7kyX y*u$T񹇯8w6aԑ7w./$yPhᚳgfmx]= J[W/b쨪w:ëh^T*KWRhPWRu%5 V(G hJ:® D=Et-G>#-ßi)=E4.l}dwåhnFusݙu`?DCuX(_FBBdpDf (yOׁf{ÿڴ #m, g+t !մl`n2.KN4߻Rsld_.:f^%F']CtU'*a@9|#$߭Y"}g}_m1M)w4L̳N;k ~z<:pYPP k*Ĺaɋ*ь-'/*DwB@ Qc!ʅ]5$ Z"LIG:cwP#vf]8kUzg zԬDAmTJF#Pm(״ۛTm 0T/u @]7TqmӍ>Ѷaua6:#j-Յ ~hOmM5c#|5E*o7l*;IAϬIENDB`GeographicLib-2.4/doc/normal-gravity-potential-1.svg0000644000771000077100000014441514644775140022355 0ustar ckarneyckarney 0123R012Z GeographicLib-2.4/doc/thompson-tm-graticule-a.png0000644000771000077100000006471514644775140021720 0ustar ckarneyckarneyPNG  IHDR1s$PLTE~~xxuurrooXXllhhee``^^\\ZZDD__WWUUTTRRQQPPKKJJHHDDffJK<<6XRRmmyyyrttmmmEE``ccc{{zzSSIIInn===??ZZ555FFaa---Oء%%%4FMMhh!!!XmWXTT[[vvGG}}NNiiUUppAA\\W\HHcc~~OOjjuuVV\\\JSTTT]]xxIIddPPWWrrͮyyۛ "QQll{` IDATx\U׺/`]\a!E# (rAFU/e?,;FEEuLlGĖQD-A">Q,h1"k1_F`j)n:Q80O #s$0YfM-?2/ɿ(v _17@mܐkSb#_?ԛ/CNr7-zJo%O&y^!ZC;f'}/eXɛM_%ڳؓ9Ni uQ3m{go9o:\بF ۛ.* m S$ =o6[?o^ p<C$n:|]G0ڍn. R2-BfWא/C` PMx~W-I=C? ۤ[X7^Rpeo17B7޾CGl}Aa8m[@?HF=~K4~iq!y(ҝOӨ7LUJD'&藠*:Ato̥~}%7TÍK fdMǛRr[oWFox5IOco 4JHHˇEq ɹ?SSGD1Lc/eϗo'ahM],6r8O»3s;[VU} $s/ U槴J#uW;"L@ThpOKPhI4b;vef%^$.igt;[KrQxčrnF8y{ Eu]b@<^yf]K+^"%j -$_eڹy*wäJoln^ ( % icIV{@H*Xue#2=/@΋뇭Xȹj,u@kQldwoT.tPKuAklXBtxY{>?lVѳ2AB8Ș2ks:h(ĸIQ#'$Li+_HZ&0K8} Yb LaFCV<b (xF~kժa;'ȏO pG7ät-)u{hmg;mnl*\jiR*v/l꣪vv#Y9V ?8cd*yrR#yrW. 鑯+3l_P^*ylPGsm{Tp%[寞~a_qez(~Rr[`_}5{6KY\j' 7`\0Sp4Ү"a%&ɮpY;B{ x.E{)\]ljg0lA+4 Ћ`Tdǫ~uv:Me]G"ဇՐ Ims0@fCQ\ϦYHI^,nTngD⟌΍06?Qz(Qɤ$?֍  z\R( rKhŋFw>b}_\1uB*<;3)ڏU'0w0 a*r cHwNXGʶ ڞ7:ƕ:?En+&4c?bTM`ݍR@"~wQB5ĕ{fAQ u_E32f0'V[QxBG\GkG =2Un6cћ,mpF3W):`D;Iȅ:WP4Xkml;(oUS j#'|Eڙs D:@.^3X2ϒ; e/ǟ/aNk;?q;7+=#XBh<.sϤ)`"hЬ=gbY@H2f%ܷ̚7?W~fԬf U>nVTs;׃ 䜳w!gJy ȉ8xA Wsl&覇vh)je" Pb &C 9 Fg~o-#۹(l:8uA[~WxLwV0لjCaPu@w<@ $\w_Bw=Ki _.%E(3uĴz6MUÌAI@2GG,?B32;7>Ri?NۃSa6R~sYƘNj74[@YGʶmAg Zʩc|;uڛå$=HYBlZF˺\0),B6Njs ڏo(HL!@%oPAğ$4Ե{" },њ c9Jyt.0sdP3:# a@ϧ$+F%Vw&3:K??! Vo؉Dژ=wJ4BJ.lJB d1n99S:xH6ğKKB\'Ɍ*$l< <#WpT3݇mmLx"4]G\*oN&CnV>/7%kk.!=:*GMά{bN.;U\U0gEt43r) q>3TuibFT'f'd9%O=|K!])z4wq>|;@+/H7GmK.Z. T*(sjڹPX> *2dŠRui"/F7 +}5|xl|i!CUٟm4$ ; e0-N.+"/4Q3Tvum?ķsby-3/%{|;'ɝn 32ݭοz;촲ho '%;VF3"/ο|Q{@fpI;q п:du!s cH;9n]qEOAZU6DFhxܫO:-)ইyGg~ճhǭ!ߋu6,P@KLAVH*`T:=3ܽ >J^>CVfEH nЫ疽!Qe]YFх~ Hy)Ge@;/%.qɁk, wZIftB7o]`ӈ6<2,<;֡tg3hgOOG+=K!Ȳ.-ByӉPy\ڵyw+lo'p0bcBY38a'֔tqR˫dRJXٚMԔm]NҐ!?V/Թad-5+3j(ZP~Zd-xt٩k< V߃j~yt!˫-ٞB#J0/֨I(>"NkXJх0?j;3}j wTlöcg . w͏C[Q(((%maZ.lKǟ=D:?DvD;śSavu@`ܑa[rFI2|\n9u,g?4Wp0t u9Ԭ;y~yZ <,߇!,W,QYIœJ{ )R-XjY"-Q:;&!l0 ~\0sTrKu߃}γaLXOxp;+bRU3xcrpA\ %J.X!&} p&pʳYaxa>M Z|WeMh# 4] *65ggC72Kf0}JjD+I&|xS&T-RpS[\r NXL}iQH_"puh>{:bW/˰S'!RhUsbi1?IWKhbl]f~f'xVc1F߁mgԬc}RȾl4Iy{ )Nɠ׏ DUrC",ͺӄ8XHUqԢ ?8'NA8z0pLWDz^?Yw sn [K<\SY ,T0.HH]UCN00ՈwNX=P2( `GY]Jɗngvv"#!rʏs Pto<}-(pU:$N(:8QsRv{vF}@amkn憧jhZ闚)55*x~X]pppUHJF-߽CksS K!gTDgGMg6>3E̫Pqk٩0^LdEVvʏ/S~˘w<̙볋(R?7j6uU Ra ):fdi*^`vv&{20I#;3)XefH狼Wlgў_տʚ1EӼkbg4YDљdV=A{G`Xf#`BjXf3/ϟdΒ\m; ܄Z@$ܿ_:)}26j?-keh҈VvZ;rM+Yi妕GW`Ol4/t01.7aXYQg)Aóҧd2dEqfOO5bǾ`J,y^ ~2s~VaInq{3,gԨf-C}fX| dNqITf&E/ãM fėIgdDO_PN'73Gq)' @▽F`7ˣHn6Ec9,s:&F5> S@ҔIQ=DQq`J8M,srZ3FDFLO*f3ڨD+FpӪӭV_"}鐭DM0_ZJ"bvrְY$X#n!^t^ RY X#S#K& ƕ2i%J ZѹbNGl IDATNM 5>} tj)pS8蕸YDiv*M,{kx67`ԝcU&5Pzg VP,nbRY%5K$K+_x]TQnVڴl窯EnеP-!w^)*Z(Ir9DCjn ΐdֱ+o:8΋׺k*#U[ x:u{$8S50P'ҕĔiyJû@rVtd^ %n~`9[ܓ3 %H` B2V̔?T7ÌVg59U i~${kZn$OӲSđO/}u)ƜdT(M RXn΋!|4!]uU\*7hrf]ׅdB cx5+{vyv#8n"N܌V:*HMzٔJ6=rw;3HbS::Mt-4[8@O1e+$ⷕolz}us|X%l~O*E]s"6訂|4J,GOٮ%V3[X):0eiSȳ'[D/-kF-S4b l;|s]uɁpG-*HJ8S< jYhgl59vKX1|p XKsus2VlDpVSGLJ s̾>豗5lQXZ?G7#o-Mݳ)(v8h2ѠyTCnGEޡ#e-Be&z&=Ksvi6p8?ÈQ5o|GĦuX|kw< n5ԩ87/: L(ʤ=ޛ)n6rJi[e7NWk\NY-a–_7kALT{7OWOlX@N;`Sl87I0jP4 )e«&Nj.2M^d$6E(7S6ZKXEs@w4֧@`|y*C RR&Z&y3&iİ zt6T`qn}{=BAX%- qm?w*:BAG#6bݦ_gu9S:h3ܜ`{ۊXW ^rfSMAwSO\g-BW(79$̢+>nap]tUhqęw! ۞ftGWy`&.69lX/tѷ&į&eh cxN Ć+c˩RiM**6s <*4r ŕS z5PQȫS)sa/cW-c0^zؽO]JJa\K^|ڭhqbXX-G֚"zXB-6k&٨@k|tڪyvM0n$Ո,MJ|Kzf~&_k ǍniցMAGryP^vrE iIK2z4IW3 #]uwiI]9Y~}Y[ Ź"ܤ fӌKC &ؔE"  @}0:2)T RA#YthiU -"f8;kMk _Q]a^V" }q@R"X&s*Y8Z{nË4sVAy\Gp"|p̅=F0ooǢt@jE8ۇw|*|X[o;J0c@/~X܄ֽkQnp/ H<` (+:ׇ:P. .2Tr\uz&V(PZ\[W,;F;UZ Z>V rrodWp.Z+ՂČpE!r,;qTO6`ua՛<@$ϟtUŀc(7yzɧ=( [}1%Lntc| 愋,P z{|r8; B 9֒ܤ'#.f6s~a43M)S? 9axou볗*e,Ւ\'bYW!D#a$OH6"$kl@KZ7z~T믶ɿOYDm_BjfqMGCuTrY H[t6zo2#I_qqS;t F;)Tf~Tq \f I~_M{x"jAnr_!i(E'+; 5G(8td|к ffT8 @Ftg&gL-T5[p%v={gxx@t;Cp Cshp_?rѦ/1BJx,^(=Sm@1j[ N\B7` +.\1)z/\48мS͛޿Ec*;7}/o>ӃbKvbCvjeRR3Q&哢!l#s=F^=q>g l(";YMVrܤJ=LCrJU>DܼE3&Ƥw ^-+"88Hh+/3 ׻a>k_{SxKt(r(ѥ:1 Er6J;\`Ka9M>?gcϠW)wm)n^P>` 8ӱF2Wj d-D^'_f{2r)ѭZX_h6." Fl -smR`,PLuv*0f nn=߾@H:?H AoBnD< ,P~S|0 a20:D,\ _Լils[] >!y]lIsߡQf^l#cM1dԽױm߹'[ =7/ڿt7sr Fwj/4A#RiUGVѥBÇ<zx4~e5/HtQ|%P%A>S'ZR+ gec#U&ܥlW$z)hWc?p8& 'д""N-)4&I 5'[8D2v,MDztgExR<|*xFbyh*,l= {wp3K!xmܦhЂGwJ KgJ/g(u~rB<0 goAq$}хx៪2iܠM yO 襐xD-M8D{*#9C9<;wƒK`d\<4H[&u`‚ XE?&FQi柳NY0y7 Dסq{eJg:'[ઽKo*O[wPݣo/Bb*2/7aG]Pq0_$U;P"?M<$l4 %Gq|+_|ҼFLpOY#qWYcTAgVnޑpx/AVGs4T# wCJ0+7u"sx\‘DLg:)jVq[;K+]B3(q]U8|5o]L5}#lVKCUEP ̜ UR+c(hPGG&r322 ~K|X$lA*2a׶D;V|6_ SC,t]q4Ϝ 6^=7QD3R`ث4RtL"qCaᥢPrݽ;jf<73S qۧ:.R6,CimsLVn0c:ϏԟC'\8dnʿP`J)"`^nfySw7ST WVƥR~>&sFþF4V7`HGT$^ZBп䕙bP.KMИ`3*1T+ Wuև+iy)7y ]ނojC5V7HƉ֟y*[J-G':) #oZOO ^ sp1PSe9DτfT7'PںM,]TpHjTQ`Q^~66wʙjzVtIgnnjCAd47I䒜>377-|XnɁ%Qnaz]n\(*2772k1k WG^ Nqsv[kvvjvW/6F\=Ӹ& *qS: r4b)з7Unˁ_PjvC 6;7Z֗dQnPMSLfqfqẆZK94#{H%ԭUn H)xPwaY'90.JO~ Xd ՜t_Or3TA-/_> 7MnTInFd~&pn5pF Mvd,93rE֌q58ύ~rT@[Rt{=xYh“'t)8xlM q3ߍ~pT3ys!:[G/>K"iՋh'7j!+YiVM3R棸qQVnZ妕ܴrM+Yi%+6d%+6dŦdŦͿ$# SF7o8K3 6j>L/6ʈJ 463 8io`ϗ}'I2AҞ3v ̊ kTGqQR̤qqQ#9ǍJ+H"׫wkbTTtQHtF8ϩI# }{5$dR̀s_4dDܤ@f3@a]XYfE}B*#43'0)ad)2Xl:& 48 ѰtпaIII^0yʸa4hbxfRLb8 {2IlN@߿ϊ)GIlΟD`3fF/& OI^2)?ι/)I$QجгQL. Dl7'O?"oB\#P=%4"qI\7BcSLw!jxD7 66ulD֘RTtpkpͰ*||%<6@|YjŦfl.UzLq0^vɁԕJ8گmS` Ծd2=y* KeZlx#yQ U}Ŧ!fiB̾d9wP‘%j"B!|qnN/fsl~_$ \aݣ֟!\RqUuU䴕5xﴹf^.]z^Ɔj^󪰉l$6 1|)ÙQPօ$MWc/NK-Fu9~ /NVv3ƅ}?:o M>B_G?iݸLlaWͫH 9sͪz״@q mU;Ŀږu&C]w j 4NiXFl~fe6n?'n>j[qF\HSM$l"N~:c5E_ݩb mn ˱YwNSV/\`ӱ9˙' +8yzzڿ}x;WK2l<ɝO]J[* 9C| 9T@4`(>2p5-Ϙ#Qɫe}}r`ZeJGV-!$@+ba{zz׸ 7` ˣ8?|kO ީfYfC ubȏ3ڿ;33r!`f?Y}`J;UMڐ ?^luQlnZmsr qc.6A ']TU]iccӄ<2ڑ9J6*_;Db6~Ft,@gK 9+ozta; MgSMпAq!a{ʈFT㙠1[lna35c ng )?Qc[o>8ם}Լe:>Pw-c2JηI2#Nj1܎{lA0]MLizaЂ\1r(Xӣ~MwY@M9l6E6z]ى},~<Ό/TWr~*ϡڔ/H?Uv,ELo\PɫmK6'orD=@s4ױbCֳW d0wENP{+7] =-,հN[cV h%0BwHxBw߈<#iٸKC$tB0?JoѱbC/oA2 E疘#%nj,7`4NxߨۭnBiō.bna"Bz"yfҗzm=Mm^TbE^⇕5M=<<\TwxUsf{lvo͙|c!E'a8ѤWw$Õh*FYjjc% .li}saso2"C-]ē%rDSA,\߱ه (P9sQxt~&>v$a1PrN)j}(IK {] .r*!AOO;cڃןQSʻFGڟ׆%Bs=&2+o8Л"au˿3LZtbvg[#5f F1˜A1r=ogOUc *ҿ}(Pʂx sPϓcHɹk7mn^c dI)uvFܓ+5H` G>0g2v?MΣ]?'z{6Ϣc%/?hY)'07~Hn2`ͫh6sl:&ط}݀`\% َFztS6aدIwTv!~w[޴ErlK^y&*KoxfNm<<<ؖ̀zMtl1˄ǟ/KB;6- f&Ei6Sƚ`N k\ʲeDCnXǵg (y.lzMdvQW F 99YZTUЕ`8жH$lqsĬe2Nߔt?һ) lG/qzGJ~dA5 !`󈧨aol5b{6Hn:>)ԞǚF6 ەnZUʣexK=[j&ZL6:;ll&qj42>JmHqVV ٤6~7+hRZ a5 43Zj~T#K{D3޶vzxxB"aI$G1'Lh#a-Py PtRq93+ >Ӛ+v:j5&tJ+܇lpi׻^y 7|GmڶP‹gO){MOiwP1^ŞlH١*q}>]ϐP4(>bU+:Qs^]qK\=JP`,e%^n˛pU6 rK[zGh}&B d~-B sӳK gMԾ=xj'Q܌.qZ|24i zx/ymð 0yO/ol^egx\~һZ -Z,ThOEm-?ș G@cCiڀMcrXA\>d[[=+46oە=*o6 /~ijP CK}rYpe^lu f kU: $1/]';ԎU(1t> I4s|,@:<<{N#_mxmoh<0Gt k16EEVV\z#65-SI!y3ҖuNiRG?=5׬0 Bum'W<-F6 X- |}.P!zܺc3@h! /V0`%rYʝ`zIͲ,WSubNv7\obj9]P9yYtC :avsyɋQxBTぷ`s%HbS"@s1N7;)zbM37޶3x$G?{bT{ğRԚ<z(6Vۢ5[lD&3*tُgXM]uRIQVܹ@ev{睄޶ )\{_4"~@7_Gv/=Jl66zM0_>Png?bMr?`eu_Lޠ n{"1~ik7{#/|o<ۍPA/R>R& qMd6"-6[Gvqt2ɕd*u\GkoxbRny%#o|6a]l} I[ >=DS^>Mлpe4ǵTKߺbSvu/ 1{/g!p`3!GЮukKޟ4`=ۻ좗¥surgpPxc 7ؖyJ5o<; F(*wPѭ`On;` ;^[CNj5\~" 3~)gj{uۤXW-P.W&DzhR[/Wč,ŶXVח[73l@lK*H̡rιUV{oªMQQ6m4CK6D~ž-0i74Z p@3 ݨvjaSƻbW %*mӴgܳbs8Z87l*\MN~TLkucX2uKsMbyup|ͧ<%M6-ySƠV=={|PhUCj^y]$k܈I?$7 ]`Ӡf q\O]Σ|eo۷-hG0< ߾z鶷ĭ51ѿ-,60_q4u|G~*Uc>Nڧo֘IKsiLOeG i1 NpNoI.8Y2Wx!>u )#@DǬY~$[D [ oJA*g]# z*麢)zZo'3Oy[ V;CD+ۺ/?V6N39 $ 6&F8hDK(oNb'>.PepxL rIsBk8 Zro7~f5K󡥣Oh'efY9ۛ2FWB\t>p 'J_G16W* (K֙h4+h_ȸ&r/al< {ࣘF(I7u *|!- KAܽ{ .cYKicGsfheMJe&3zy4ƘB<D>ФR.ilQ26cq t?? Z T~WY8!c<0fpU*Nxs!_dE%V?!B!%SMZyh}æl@w^w[ /TbOI2\cu-Ldrí?}G=:;w}EXȥ7[lGo;-Hܮ۹lǧx}ϝ[Y%aӒZĨ,uK3 \^C-Q7}p^6`C#2b\l){06cȒ3w6uA8ED2WV jXr(~-lX`,n<_j?Hȷe}wy  p{.6qr> Qң@HPI߫2Ӛ;t1Mq0߷JHNys1$$#e'F6x9Q_6+l|s$*Y,d2+/BPJנj`Ǭbg'՚]ź>f\_񃞔ux.HGlH.yûC(zM?씋>RtF(- =n>TM;LHߴx/<1lAIɻ4))/WN<\m^>+.<;ٲ476vH)o?ɨc&ege }IZ,fW}rG>҉Ho*%@!~rHeS~G (U;^N~ZՂZ7M^P-P]|ˎlq7_ vV{_z|\=Td_fD\h Ah e-*cղT@'wSV X!CX_I}XA`S%.u̐)V0Eߟ/Tmu7-.^X)q.9 w7؜/MǽΝv$CrELĎhd@SYKXVKj_\rЅWh"45t 1qfwS9CcM6nU?6acW-ڦaB`qoFh^h 6vEoiCR#eOWj^ JG3&sm3 > CM,ZQe 0ƽ~`Q%KY@0]4)l{GΎ;>s1f̶ۙZ=فOHASs=kHx^l|N[0fu&Fr:]YfTѲtU-d2:sq>55X}JG`J٠͈31A}Ag^DzW5?]I0XZ7Xh?}JxRMonCYFwyk|n`%SuL&ô-;زMe?Oӫw*O[u :,'ڛ?ql]uc=oɦ:0M]U<9pNZ%s5s|}66%uq%R,-ʽ4Ss{N|U1jt×i vIy  ܑUj4|wW vr 8At_uTd66ǃ]&;t'93un' 32NXFNGU5uJ=BS%^_( -c6fTp13?绐Ad.Qm<.uҎ:!H4?{nȯ Ψ v42tD'Hݧ̇@>7L}칓z/z~zGн!W~MYZI =vcWW)_&H[/`Ci~ׯh=wr.“v@.ӺdMp_UhU7bRl}UUՏ`Ԫ5`Ҕ=uNWM9KBޏa:ăJ ] ~YfҺ)7OKO^#TuDU5;wR7G{u d^𙓌|̮dSw؜Bo˩Ot\a{%gIDATk&΂3Y'1pqrfZC:9r\NUZ~'!’,(1,5^av^)UwuFFdϺM2B tNM`b>; 7hŠ|] R21~`KæN+W'Baȅ]u;mqQiu?kk5-lICh=G*<4tb/`LaZ[k6ЯNc|f0}˴u!cte:WjupAvsL3OuߙsU<&|6egllw$Fx%HmY@-2˷882Ww(T>맯6ȈpYk A!u`ݣ3_vjrw29kJ忶W"؜bCC7Xx?Ad c1Di19<h5'c,>m{o\ԯv\h-M_TO5m4+`duls-r>OoXؔ2z=jPjO(c39>Bw7?%y/n`sLmKҌT׫_##z`:/8,(>RvؔK")%芺!hK -[WM6nu:>O?[je_,Zg'ش,M?a_f28^ :CJ|+i%YY^k*sM,仐kT鼓ecl>nc&e}_lR Nmi=ҷ]9UbS-Dl]POΆ}C'ƦY W*!J]A uɵ=$*jeݕ T뇌RѼ G*ݫk,/zOa'>:img([Ry5MxJ '\̬sW?WBUҩN,j1lfIe<6CQlbl^iP9-` ҥ-hS}Ź0m>>T`dHw (ɏ"-@fݴiOUmM?} jq4 dZ'E(nϞp+TIӤ={&~ ;2?sz}/R>I9iϰF;)g9C+6@_^И F$?7Jʯ}%9Ϫ;Nf /{D3L"?s8rәkdo'ɲ`O >tYnMȈKW=yq Z51?n=fg+a|ab3Zx40׺{&Ԩrg &loZJuشش$gzVlEpNau{YdVbJVbJVbJVlZJZMѴӞIENDB`GeographicLib-2.4/doc/thompson-tm-graticule.png0000644000771000077100000010313614644775140021471 0ustar ckarneyckarneyPNG  IHDRAfϔPLTE~~{{xxwwuurrnnXXsslljjhhffddbb``__]]XXzzWWUUTTSSQQPPOONN``LLJJIIGGFFEEF2ffCC::mmNfOLѺYYfeEE``[][LLSSک???uu4_RK{ײaasrߗhh߼TT[[-5ΜGG}}DByAZMNNUUpplg1\\HHccϟgrrrOOjjhʅA>Ю__lxxIIddּ444ԻWW(((ӂô^^ɦH;'JJ $W.τQQ9 IDATx \UG'( * pAɽ.=QAEvب3.<{4kx%XE%"*E%%sQ|y&Qq:u{G%^9:uVeMu緮ut=Sk5;UCeԿs`xmPg:UyN«U @9S70E9RЁ3N; H5+[Tm<`4EM ̔[ԗEBܤrt/sͅdIIGQ];:3RE}&R>`:H3WnnWB>/cOݏѼ#?q`T,\oJ: _vwt1 _b)`4;bJ|#-&T}HrIU% Sx ᙍݼ|v;  ![pT'8)>". A 8 Dhmi2gG3{R|#LDD%:Bs:X|$:]$,(c ۘw=2JR}r*'^ AkU62EJ<82Ha%miR IiUx3SM G}`>vw$ENGZ]zP(EZP`K}Z'd(ٜطwzY·OH?B6BY::pD_z5DVz `[)D/Δ<.c8kE3^h 5ʓc:É:jhydHUK\@%vLqyE :22LmV{һb4gv!3WI&&J=z9[0UqNs't=ĔŐ5\;YNÛNKw5pB5OJ*)X.HoZ_onԑ ԟܡ'e}5쥾Kx#-V`Ӗ4\4zooys O A4RbW{Ag+P8}_ W`@G' Re7@4꬗ޘjq?ARN.j"SD+HK-A.Puv~DxN :?~F?)?qn-A`뜒0lD*״^Bw swD"xnfuǓIx{ (7sZMzoS:0eǷf&mOS5fɛȪto+O@m5BJoGYӈofSaz9?cn+ θL"z*Ǚq]P*Ky)T&G6 CޔS&p!)cfďgA(IhheKO@<`,tLWҠ={I_ ޳0)XdL\'h "9䌨T /ʖRAQ nC3&X}mv3 h)/]5E iz> 9:ɘ9/SbYǙՃl|B F/g|?X" s [vE㶜OKwJ7Os} v;;U^4ItȲ:IHO)@wHa,lr+ug$IpW]{'($q;U\$. |*{9! EhNوg#?PzoN}  MSo ׅ\MUrKYѪE/ o5+0FHRaH;MmN2E`Xu~ O Ll*:#\4<6FIO5s)O8̽غ |["L7j*n\DX#IDoz8<8 QǦ#LI|LSZ6)yOzT+'M0v 8:)kkf+i5>jfF3f򯢕zk|kښn5=ݫlʌZ7e.ꓭuuX[A޺jjܚL'Ar&%,Y?:S|ek=j2{#_Lբ͠%pL;yd owZ;BuEJDJðliul d\8f%[#I+F:}";W d'm+jhq#N0./zMccWWPfJ;?rφ nZrVke K$iGl| A{bcT_,W97WF23ANFJ[8fO^LtO^r}|Q< аLZ*]Dgr+i}*se Eq1GGVt+}p8SWR/a 2 ZEۥT,09(,Bfhx9TbfymA BVn5$ZrM[pslr.Qxٙ"Vy R,SAK:<]хF22/[cEW%AO e;3GWcxN6UM}C8B&h#3BVxvA4y! }~WeZ9kuq JzȘc=ڸ@qHdl)f jnT/vhcY5ğcy,LGM8<469l{hgSW.IANc;)E|7qBC &$O&G<妗Gs|u?3"hc=qW9+l9k!f( fv4`ㅵKǸ8`c!V Vb<P~مh䎠%_RV9蒽Xd4MN'HOAe-FB X/s,tXs~ 4mPL,=B'c7X16<5F{ ~e%,8Z_ÇVv3Iު u7 \#gpfF<"YMx(#x!Bspm ukXyob蛂ϊ-}(Ds*p\5"[JbU617EyI-4 ~>h*Ivݞ62T\H+3dUq6MMP h2gi<`7IU䗜 w<#Rg8+KkP2kql(suM Bî!hݭ2yQ5K%ͷU[ &,"a%gT%mX!gm%-G%!nłl {gv*D 碧Hq㍖phE ˏrͭhM~JB꜂(@¨M:u @J*oVVAӏTt $i/"Vl赫چm*|Ha$Ih2VZZRu98haoZ,Of#6+覕q<.Qĺ&KiG8R(^at/V)!2kjtNw|m|R .--e?V%O/d-iy .sZI R)8xSԉSGK~f` ꈝ7r/`!y8:n~K-+!Zz_v|X\w, k~>,#vu#>"9U.eJCyEF^)jdYf[NAaIAx3)S$ˋ;݂eSb,]׺GgmFYlE}J()6鯽2VcُeVJ慳 VqskKzū_[yu J!Jg2[7 ěA|:S)>XO2SVQ:!j[ʨx$Lʭc\YY )Y:~,p}?Dy/%gI93v-w!:|s_s 9.1SKn?c9؆Fat0D#ߧN>,PT\|8oOϗƦZ:h wy4qPz 0:7cFp3q; `0xtrӚ~{cua >j nRa v ]bɭ*7ІH]q ^c+ %t)ᗅlDݖb !qb)Umj]l0θB+"qne)>/81tNo6q~SoF_,徯\nLpQ fhp4!NO:dY\[δ,UqhGCА 6AbY@t'lWʞjaTa R] 4KvaYI6$d%o9@aœ:٥j]o"̧BO8';{߿sw@cgS%TeMg_3$RU&ЫXZ&?\.ݙ":3;3˼/#pd/H9ihIW0.z0.rGʧ!)^2֧O Y),M 8fn=QOp`3iGW$,m`Aݵ|6'9[Ӏbɑ EWB:y4|ʎU0]U0>7*w7~edhV2&1,"#EqkٳaV,sIW\ș^3:;vR˫ }}L\k4_`{y=UKv0}*-!^!Ú S,(BMdILS0RW+Y7.7?=.ħ @PU !y2h^|5aM ]2]\\ C;c5%;i|S2\l Ji1$>ɛ 5:p'bz] %_ w`?ˌ 9*X.Df0#D| ~[ yw*Y[1לub [/ iw1蓾hgp7o^>]y,oHEPrVKκr~.*bu#fJy J6#AKi tBɚHyD%[ĊODǣλ1]f4;װ>NV"-<|XMGp+lGwE~ e+I :V#"+Giǒe&QAV ،2D*r<_ Z&3#D-+#C0As.]?8ط[SKH_Wy y㣴b/Җfò Y (XV([N4y UJ%KG`Hr(upGecf',K[( qdW_-)4Verq<ςa;<` *ð<ЊXr߭qR,V,!6d|ALKЛb9 +^:@Ʌ!Çy{\/A&ASx1.EǼ ctⰙܯPC ]K+O d'pl/jϙqیS` Yd0ENgHፗA?{K$aj ]22tF6M̈́K(NBnb̃) IB}X@(u)CU2C"fU C IAց4,] k7,DΚeTQš+͍lN''&7f/^x=wŌ!?L%H6ӂ%Y( 8r@LO O}K\Se\L5R y&8OI bML`9P̻i޶S#$њ2דPcp$m{+~Nm)XK?BT`k%|`9QGr`jfJX^pE-yf\ :Iz 'SJW6ƀ7ք*HH$e nxZəl;dX@2M$ dĪͶajkEMsqsӄ2Ҳ|Ryux{(+ P1:̳okƲudTo'ڃ&_)Wp[zcV|:漭˺tΔb_A"x|% AQq E nM4߁bAk8,0Bgv{K4:`7JUk٨_h:D1S{LM)Mj˫Jl2_>gb Jy;0qc* )Ch'rXau3%~/P|с?{wLZ懆j-m3tKw[w`| [4{&Hq9*$QY$T۶64nX54zWs)>Oy_$i[Ns.)om+VDzPu Vu0ɼb!iwܶKppWdI.) q9I^䀦7?`BT 5t_mr"v4 hz9pؤ_hy%?P:J#!m[Wd/`J3SR\cDj|/ԺFs ۀ%& vh˰=_*7rLbNgXbyS,>m[IH-U)\]` tyg3 2ӷþA}3]e˫0AvbCuvRH袍6 a}GhtXbND|TIʱ~z`!guaD̖~Zg Km/ 6̏*{_'NU;0mW]Dao׋W/칹^?^(e!X擱JdlyM S+jNު6iyv@Y ԅ_%?Me5mau5+/=R3Uc#] LayOғMԫXfO꭛5jH˺, CTӆe1Z[bJDz~,쇲Ce?iP2W0[!38MZYoK4k]k,z!xXo]D|݉t gZ7śMu{Lkfjzkfk|enSB+m{?CҩZ3MVS+`]=2et>i=}N@}]}z4DսLG| ̦Lp= L4ئxV!HgMV|`P;@ޚ\z2n;NKCuÍ2ߔt""xs֡3ө'[[MPLЎj"vC/K?n(M#~&Izķ74aqt~Aqs.B J_sN@}_D28BdgcTF>ʈ^[ȥEofLP:1z2"bsmUDw+cPJ^C p/텒NEZH'e#G؝OX縑jVB{JoJ-PB"L81*(hCd94%Ǯ[AOWFNjCZLb#:݋^ ŸB9%[lJO{[8 CT vҊJڑB&˽*\f2jC;7JJn~S@p"4PtO~7KGJZ8dcȑB^I_ JdMjJtyu8z'z:lT]-eůڜ  \FQf}DZ2h G 53J6 eLμ̻.0qJVUCU 5//N#SFS_::z])fld !gvzwtyTLyrXQL.{<< eMѶ\bc*_DQ*Y27D+Q@_C^gt%̟K-W ue(/,=9)}w R AMP:{^5_}eo3!2{ +rѺZrYfI @lC0EŠD@O bz&0F*ⓧ*B1d3]8"cN дU&4Ajsqr0PY@993΀ 6gT4gL(yt,i*@yA2I4E\XiJ9O= õ K d Cv*v'eh7ИN=~qae &fM>F.I3/Y#ͭ<=e>юvi0$45vXc9/5^SzXd"e,dH« sdQ`sTDFm5lP*>B^k?/TD[]zPPm6(A²xn8-<Ŷy)A>7]%G 1e#Ldnܶ[fo^̟3L(Z*=vLKZe\ƺ\%pV u]IJHEM'[n B{ V1`B ii$4.a0 ۲/g-<2-{Q5)J)}[7 Zfc5ʇz(B9re+?VQj:ˊdye0<9W.Hf6Pᒶܳ1T8d ɡ,pt^(䳖)_fvWуqw:O:QkRN+}Z%S?Nin0X!)h/? mY&\i ǰʢۍ1\(86,^z`=MN]o%F}O6( X^OBM?]'jD6gPҼwx8 9;E/e bܗjr [BU{Ȃ Ku;*bu*};JT=pd(AK\BkQ9E CcˑxiA AJ:9R;l;m4l6V{K<+EI܋HJwdh'ɉ8^fV4|,%Z:%>9sIY#+yȹCa?8#<'H-yQjX"AcrS%Gsh鉡 MUAh)5%x&XSXPf>~G gN{sr_3ߠ!wxmHe,'zGk'mhC3LEn0O(K<QAkߵd~2 |uLm &bo_o?f  sޠyNJQE[V& MJ 2ڼ1 tj  1BDGGA?9[{7!h ~`~@R&g=UӈΕnTL4PÊL6(qEH4 ЦPо (`e\ȷv d9Hp&-%+3'h1tI%z^v\+b@8,Фs;ۗR38GZ#)YpعuyU(RbDhw3"H˄Ʊ- ҷ'G (p zhٌC %tȄ׷#"Arf.H)QK3\*=}-W!nGW@0 ˥P3ȹ30|p!m56o\A\TJ#1YP{3qn(>h ƣ@J/8i|j ypHg1"sNq%&Цؒ^u&l(cs*/ÛK5>݂]z v7/WVh(D4J.WRX+_8h 9 57d+ IRŷe2J+A63=rHEhBș#%!838z>($o8?VX{\aIЏtQAc,mZ5)Rxy֍vAsZYFo]eM[  src~`zku`6k^Y"V8VJQ |W?pX{N6=p唨hyzY*^K K%ž VX74H8G3DJ!_ 4GprOvf;b)z}^^7#X#g ː關8L)͜a *J1F*OCgJ( P}. !0Q, T ¬WoE^GGƸ.(b:\0}&-4E nLrs eAqj;F\mΗ!GEکRԢ𺤘%7f߫ 2|ȰJnEF,)hWQ9u ^T>џXM藳7 ^;? 3Y8_D*D/jbKNB Aae@Qg*Q[vDkw@9\*+J~]P҅ :C qf̮C -;HekFҌLer> kiXy%I?@*^JCBӄrPY'wpލ3-ٽFNAPL(whI sj s|(gA;Ez6L׉qq \Qo93ϻu>$YƯhz1kT)'knHNM= Uy8Rys֏ԯM|aeyS5X()$ mHf>5: x.(B]mΒ_ Y)xDVT@m 1WKz`K[Jno^3JX~[UB,_cHjvBWĘ k_$ ;Jˬ QE(G+]Priꢂ}!Ǣd,} K@ElQ_< ae#)DJzTڍ) Vf8@;bbTAqJr$iyr戳/KrPN͎ ʸaqy\W@N#*6R ;\42[Cn >= * otBEEಡGX? Q^)m|"AĴ(ԑk3aӾw,4P luYL^*RϸmBF([[KGj[fG8RHpb3BYGM(HYIE\]:G82J1%NY\l4h>sScE,T+ر))JuV(]Z )?VNnbBfCjUo7 %V'V@HCZŸ:NdP#Um+ܓ[=k;а|n6GPk;{K Rίtv(.]:)55%ƓIlGɥI+ L<)*Omۨ>NND]X M;n,u(+%$#o7۠LG1(|DI,},_Q{mLSt7|i#Pf%HL,Rmr"& aCZS2kIyl۶@9E'4Kɗj(%+fqK%2MD}+[4ŞSi)^jP(J6@ܾٯbitm,К L\, VMPfuں:㵽xїjH$Ie<eVnʤe(7mS4_4:mGsek|pT׫$~mLSUSlfiVp(_K~(+-VE?zMV?UYC+K?PC_/T_K?U~/*K?Umu.ggk?<_tk: : gWJc{jʿ%h&ݺVu頾.93<{Lޣi=:1zJ~B|!Ld&$0SϡZ__GUٺ%j]]!ꖇO&КOcҴfYY1E_T>L'Lu4s)*u韨6:DOM֬{ 7m]Woi2eQ'2[3J:^ eo>->G M4fӕmoe4c~ɢgRI:S6O#%TgbS1[)oߔoN[7sQdn ut+E6z쏱 (o(J`u Nv{;c˽oLW2s[O*I6$_N)ZʗTy&۪4ܹ'?~{.B~Ws!?r TTȉQeB$b/\їT UlP%η.|7A=7tNuMq BL搽jB5şWTzOlV.ѻIa?;r{F޲[T S :'pM&t[ac ûf3g0v&06ܔ.8ʏ7)ReF!1Rvtˊ~X_JӘnr~j_3U΁Zo*JQ4S%Œ6ߟ_U[n5QejxU]A_H!>㼽~u~t،JqgaoZ' &_e1PZhu&u%F^3_o͔A¤|QؼIg'VQCI7@oO3IxژDHrvo b=2!NlLzTV0bofdx9z9~$42HvE@$%1[T*޸>z`O2-iL~EoۛtҒI3M=T9>dJdw[;>96Q!o0ml02ܲ<W~%xx1O b)bK9p[lZl5sa74(KۖroVj\uv{+;fX_%R;L wCm3c0Jxک뢬I3NkIޭ dCP[N02>U:j|o]HItNݹ/q{jzK!Iuvz77o&j%azolF:x5Qʻ[.]+`ތ=[^"MxuhT'=#L4*:sHy3` ~'{y̛6܌h^u빇`qikFdJ )Ydmf#QgCtsϫ60%_K[J3\e#O#F?fD6]\ aې7Iz1 Ƶ[yJZdŐhߡ[I6߼ۧTB/ûCWoyv8ԧY4yQP/4JaҒSZ]`pydX Msow;3qTD@ޔ<p5cG๴`̕Ş[Np߬X {UoW!R6Lknͻ$}IWC$S]r1KࣞsH>J i8FûT+;z{`S;OgBCgFs{{ʙ1[n3U&2bz&KK8{,%EVRWwYqw*#UH&!<=Q2Q(SU:!~ؑ0z8zmPE7RDH'oaI>=<0k" zXbQ xLjqwDnȘ=ԴxYVZ^JZlVI6Sj)|wwpdJ_%[`%ZFn*:!scd萦gP 7ߦmrc?2ª֗wsn+NǏ~̎m1Ss!ҿP2;vR437|4oh7 pO}d;Y%fv1bjboˀcZA #RoxD5[ΡNW$򱞠`FcBc7o Qѭj 0 %E,k#%-GNqWxy 9bJyqXy[Anq[fEV)cVabr6DjєT_p0hk'75TdKUV:24rRy@y(xX&翍UGC9C =VG{T["8%N19|E(ӶLB?Ms搞iX8#s/}Pm̖re4jh1=7.WK=HבÛJd4n|t2ŒQE8hZG1lhsmt`gB~M^iP䝎Ӂljj`L~B=яi8g^…lL<=kvY:^^اD9싩@8A!FHŹNGg>瞞Ζ; ϻr:cq u o[݌YP6GFOZ v=.\0O_ vP4޸Y͢5"?R V Ijw,t80+!rB{ɦoYe⟼rG K(BHC!hݘt?DC\/ lؼ]}0 Q #|YؙcavPwot^O Q:t%'Unj>v}6BqNkrN5I}K ї6<5η+@/n!Lp`(R0;Hŗ $|M%k͔u9yEG"I^9\S%oAPCo1}rXXF@cg#2pT\.Oܲg-[orgw6t{U3Ծe7Tp?wt%:ȨG%J.L.= k')۬ z*Euj KUI6D8=)51,PPvu[~te u:g-U^l<ʅΆ.II43Ekrx9z<6b#ݰPŶo(G ΰ| [x@ޠ!"ᭅ_d4ď?n_g|(E'?dyWg/KIƌ5Vؿor([b #}zϰKQ{0zu=ROZ5B~ 7q|shQ5#L0مȁʦgN ݔ% D>xV3*C:.M,am4d-qCUҙV1Wvc A/(C;=Y&[# /3sԁt ]бWFFo D A ] /6S2QUXW?r?57RFո]JUrb2UCZ/b 6 PbgDP|"^617ӜC?u ? 7XX<=&J +pZaN@zX<||efEO%&},-p#O-%cVj<` q>`5 -yMrD;.G hxA(ZZZq=09AQg=({M-~J/ut%Ӗ _ҳ5Sw"IKX&80v TcAdA:{= ^G}Lfw_jCnV &)*,F'5y$eEhx68 .ډlN7s`bZi q*-7퐜v, Md15x̀q Y\MRԕ1\Q.?} dlP۔K#O2gR1u>cts9&,`&vrYe `˓c 1&XSyU1⍬[tp 5%hhT9VWTFý'r\#p w'SCL4t2N*dfG;ϛ>(5"ՂyhXTKo3*`qtl%u1N Ke~"m$bݳFEedtZt+IeM2iQpfwN `#bameؿ^=AA;. Na L/=úkz̓Y`k3z^nOXq>ۛT V~Gt? IDATlX((GDSWLci iLNvKN66Q-9́v9 LM`!q= %Jn b)Y#W׷98I]pɄ 6pJ4nIGj:F{Tۄ1nI ^IMhio|:$|IgkvSL*'gE,ߤu$;>,=wˉ*ih=2OF*2;)Gͣ?+r 6jm ~>hϕ&<7 9[1{sX].Nq sXPd;xlq͖!xf]wwQϐ1OUzulFw؜呾f&[n2\ ޮoxgo/ Geӱˋ_okG ƐQM Ì-KPᕵujXi{1};9OfbY#_(O>wҹ˵!r}!"[@_h+'7F(=a:f]n8]~elp+ ]L(]:@*}*,^K9e˨ q~`'f3nrQ0U>Y"np%2YfIFԎJH:UQ vBWl5o8Tf B4g7OaJct%S5~lQ߃FJ]Lx ~Nh3JcY'#u^kTcZ>;o LWyX^cIf$=}6?#g&㏼3yk?6g~+ 7=ۺ:&`W޲$Ex 8*AiwwSގPu+EbcKM9<poP5A '6|hmÏg En!slS^X,D8{7*=  z!s{#ة$mé.rS|G$}Sg9. Ǹ~8qprc ~_rn~nn^m_ݾ bVug'N<68@Ծ dӐds, N b%LFQYvJC<]_Vve33|7w[|7OsǠ0yVx}_*5q8a"[Rscc&L"<3A/\?CM`! u<ԁj1_޾}BQYK PYu' 8K S*KPlgʤag#EX L6OLabJ Hg7gu:߂9]5Q=gn@ob.}e2#\+%z'a3=UdAd"„=ɄCR'T@Jb-iZޟ&r,U7)Y}9'숓8ѽEh>%f琙YN!BiWh05K](4&h˳ vX=+cs54VX*1'|a<Cz6?3m2 '0wlaxCz oAURC% /r[t8JY^ȱF-.͚tl42'-Fjt泚MQ%Opg دb<,]@vTI44+6 (Yv=s}d0\~&偩nX P P Mn[vP;/@s769Nbi(;Se-#LiU<[$dJs56D LvWʊejn5p\=JjTfBh 0*6-<3QziLTE?UzQio.̧J.JLmE;fm\/b4.bҩ׾L?ATAE*aڭ܂{{V]܀D9:E8ISUc) P˓ܟHpIP^qBd-qT HK-{,} NiЏyMS^\iqwN4?x[o둿l )* 7%S;M1uVڕvIY-Bb,!ǰ&`b9 1R[{Ƴ^c:EeSk>p0,IʴKDk| 1QiARYqS| E2F1KyXaB7 頻 $+c_0)h(}pk5Uu$G0 5Y<17xؘ|Fx;?Ny n`dGc;S:IQD}ȑeA<=q7 @6 li-gyܗ,Af^ !*3Po]񞥱} ""O!LzK@`*Rɧ]/:f6~1uO`3e TK,C$?;s=e\rDl0TOp&Eƹ|TN5C?}tؿdI*%MT~Ǎ,Z"dSbGFղ akHQ0ʲE`=42~biz?lN\E{-i23ynT&Jw0hn"XG`SܓxJJ S5l/{9Y6[-}AbBڨ\nbҝ@w*sQD2$hL*>zOZ)FeفG!oxA}MM[/A|w?SFee(XWaI:WR$8+HhHԮɈ b,~sqIO4F䚛Iz7s wa?k^Y_5T\pn]7%zJh;!i0')5}Yv߈ܲl*#^$!ffXx[M䀇Ka@Jg`2|SE5lnػԊ[.4{`r#?g,7}ͺMDcC ^rznX|$ղW%Bm ޭ: vS5la/!mGkI"rXҴN++c0k2.qh\ d] ?%~}_~ 5ٟr(P 0#茨=CmG %]T12LVTv,T}W$^# ᖖ)|boXkEgΟ"%]Tbo;qSZ#HQpzo,JS-WmYpדWsX c?mqzxBW[6 +b\9דּ`71+^Eh] eCMJ#dMds颒$Dޕ(R#7*}>1xX9J4" {J #9j>drg֞=>K[Z_dhSSRY S")N㒛Ƿm@ vUTSM N>KRqYӻҏ`IWvb^o '(+:jWHv#wVX Gn>^`]#Kʨ,)"`HkA__ejz N^ tŝ#H 'V$[@Z D|EA+&楀;.sA' Kʨ\aG &nVIZ D=rjjr8!+l0*Xw)P9%,zܱ͝y7i,U (Y%mTb;ڵRs"IUx>΂SOA%x+rQvX[ `xGWuG:i!XpOc(1T߈˓u0P0:{svj*7W{?,ǻGfIz5E#ّETfL^Wu jd(; u#[p7%L눁NiuN4%fP,~axjEL!&潋4>iդlKJMwьTdY26*vi]]] { 4Ri~Q&>*;ͧ"}E9{&#x@|}1 T+'zi}=ybA#HNy%̒r4HܯÇv `S++ k\W`Y .%(UތK<}V: T]տhR ?xX(ĂYgIAHBer;Yd%-/uMo| Y2pl}̟_ TVn:}W% ҐeQ۝!yiExTʺiQ ^zhOTvPaFe~W RT}2N%j*|[k |6Y$t量K&~__B%%Äs6Ph$ȗ$;&T@$ yo~u@^MXBq12Ph rt {7*e:js]2MCc[8'rwVmд4Y6o^bAڤ8,Ǎ evgY5-ݾZKc]) 2iO쌕޵=Aþ#oѳ(wg!lf:҆ ]kȸˁ꾀 yb鱭!_?fo)ێ]Z&s1fF7d_``Ԗ-n Oݾ&< / 5bAu+;EDSq\KaDtIN|KH Kh10f|ԵP**E_8&I!]C}+TTCh3ʕ skI|ʍh*lF?I2s$qt|n5&"A= gz1LH~0Y<h.Z23"e"DR=<JuTЍ&g˟Ny/OqSn1B_GI=KtqX\~P5 C9ŝs ^i=Zzw=AfbsIV2XKWj]CIne:z8tTCYɘ;XUԛ#EDSS_5inC"Vs'&68jPf*we-RЅb9 ]#_ ɡ]ىČ0*e(*:YQx.&p 5z.*ңowa@1{|+6}'Ah1$Sp~P1wsmuyC eAIb3KK0h4Ȏy׋x2h2ls:2LTpn3Yыfcr8w6};N^˅5Qr7H$}]5zi"Pu0](2OSM+"ki|ΆuMmX嶴Vs%gv.I~>Z< S]oz tsݛHVA K;A;~^|c_gǨqD'B:[bBc(x]7 \L+}?rV)M"G_i맯BTWWԡ/r4q<爊8]v]ꥫJVPh*pzɭmYrɳ72J;٩{0cS}QnޗEb4PObh䇧u=K<:]d.>lpV~ߟTEs.VW{X;{eF-o>`yYkg*{/im%J9Wl|TW+|ߕqq]Tpw;^.dv6 oDk%5k47spTfZJ~"xp|/~ЂcM6=1q5mAD7?s0y޷Q@j 1zɣp;xVoO^ƁbQ%W9sy7E24t0HWgU(C}BTܧ~+Tj|uօDcGkHN8Z[{bVjȂ:Cp膿E|g{xXfFLSfexsVlGWiWy/zJW8ʇuƆ+g}VfI،^jyX^1NAȋ{sLJc!Gڥlv#Xy17̆8(cTpxu ֎qnv5W(+egq(U<ȍzXxgvQh="ᇏgAFHC(~uyE"k7pg8'pbP495 t:i֐T'o8ox=fO)%g7x(IvXItuY@WSxu_ՖFI3pIKDQax{p[iKE |Wdjyta >.ǘɕ7\kI'yXY %Bs2 6u#d.؊ov֘!BqMyɀg):='y91)S1$>ɛjtM4Q gtD[zwXy:ri_g$Owx׏LN)IQԳvR(*:3gy/՟;G(Ḋg'}DhZ#hoi!J`)y&g,mTX2g7(c~yS2 Hjp9ǒteyN B5J?;ZwGɂoS9PÙW~ !Ɍpf_uќsQ\' fZSuXVJQ@*8DTZw^(M=-DdNɢSn)tJYtJ}w5UaɠHM *jZ='/EalFVjMڒ=EW٦]^6بX> :;L[IGf]g\y9jti6*tj"} Cz^8Tpì` Ijvbo)!Q!!Gp<4"["rHMZ$zCµeɴBc똚@Z@J8Wqyt||˴ -;};s+Zn a H:3rD4Z<5$ 4*Zh&`Y^3{W3Ab26YǟQNWfvDӺK sX;:({QY@kND艾c40 )RJY1& r2Xɫ{:nžд;"GL_i % .xIKi^rp R슸qO'KteH/k^rn$?&wdEM0kˮ_˞M۸sͻ NȧNnt9sKNس\4Ȣ{7xIśzn3Y"hϿW_! E }W vėP q!i ɐx }pxz Jhu~Bx^|4BG?:cCr4K <>UHIJĕPEy 'ε"fGbd mjW'fEr4g8fw`N5|V8ݟF,ר/TU"&}h_yɨ]*Kkim؞ʚV,%zUSl66A֫'izR3cNP{e(~N2<nWV+חF&hAbr&_]OzJ˄ЛG3B9/ͥ/wgqQ4CK:(L4D#Q*plq$/ Ze2wi,_TωJq,!HY\t75D+3+AS[I s]OOBc}Y+ϘMaF(7Uᔦn.N 'rm7h3E }gJ/=F7[x[sÞ_^鼺r.pz9⭛vY"j\7algy~3ޭƺ(X Vw{g:)Yս[zsU8k9g[s5JVB1ֽx}GX!aK?ÝBiL Efņ*M :azw>tDq\U9 ށFC3u6 aÏ[eB98Z2X,xb|&7\1}DXHq=$e&F\ 1(1|1KYˠ'7F%BG5?;n{ĬR4*O\RX;4 ԰}2.vձL9Nj%u)+WPS!J M] $)Y{yѐf!ԃ2  IBY Lr$P"˴URb3T;ˑ K !M nܑakg?M'NhR" TS`= j:bx=\Kůn(nEb =kp\9{5|fygn|M->^7tSᇰ!E}#]J'z+ه\eOLc5&>mȿ_QoOMF~< s~Vɷg8瞋kfR?w}"(2śK_t'ZxGSWdnu@{F{afs^sG'qq*faqG]"Ho0Yo7+eRqPh@Xu_ tgUЉKzF4PyHdU'i.%]U.4Guh7vAXr;BŸhzI7e?ЇW5j߈^77EWW}`8{Me`e稆$hs8NnwbxOt @ 4wlezO8He2"qz:z|t$|RطiTiqc$ZQIhŔ$iF*u|uuOgjN`8зV΄7sxvirTy&rE9tٗ v2p(G:wx8GPu8_uЗchcdyY6~1)PD[ΈB|ZՆ5d^dMgՙogy4X腛=NVy # uuֈe)P(y0hНH ؐp$h O idYVI[%ןhPEKOU{ }[w |[3Rp֘z :U\7h(Mh6ɗ"g4P~7V)9ReMĞ9|C"ItF58KfsHJ_hT{qx}I{Vs0KK#'ij?WAɣGrIV U:fTI h8,Y? *Z h~:X#|㦠6:|鈅XuȪxzhx4':J:JwJ%u"\`@EPH[N]:8a6emK4xSWesJ#$ͩQaPdTB§sFy}UR0*U'.qxYȟ! h6-RY3I~ Z75HXsZdʣC+>NTܚW/ۏjr,9;G#D/8`DI;uKU ᬤ )&a@J)x=ɢ7`4 [ʴl'lK˗"3fhO 2=)oYp/{˱[j%\@K'dK@ꘋ orKʔXbY\I>R14jL=ҹպa][~UƂEMH ;E۲ěxL[M \ 6UT r 25G2۟YxRjpsjʧdTZwfv5fG2 bxYgk Ka|@vltz+rJ\ֵ`:q‡9Z%b(裏Tt: KF`S mQ+…R&7pBD1`JX iIDnA0̏\Bi^yh(ePn6GMJ)bR#2"`(&,EdKF'7ŬJz5˳sX@ŤtkpgQQ#lnF̾kDU9<ɋE~,<(^1!Җ}\ݻX K :11x3ƂZj>F11iҫcފeٸޝwhēj級& ,~[jqmß2nYTE ?>t˧7}D)R e&xIk 68zFxvVHSfxHvHbh~&,0(4h8<㏖rBI\|F&L6PdQUbeUe_z\Bayav HTw-p)qi:pm-й8)&7~ڊ谠mi$AH8$Y9[ni J , {ʩ%RHTVk$~q첊4~*"ީnR-#"{͹\Zș] Onzf!;I.*6.Ϣ9y ,+6 ${O7^"䱊{Rʔ5<,K3&6T779G=x!ݲ< n׾tum5itJAvn_a Z nlmow0l]-!iT7nH͵banWSzG\$neޮ=5ٔgߕZy6!@+$Y޺RS *~4]g藿.𼓄ZϒSu.Q>KOaF#Ff]<8!Ćkd_@ăRdV 6aӢM=Y)g/CV"+j}0;E^` /*zӻ0'VwKb\GxMd,VEam-Fle;4lSkM\Lsjfq T]ngwFLrxu{:nM_#[]~UpCb`^FK=Zbm+P)fW}lh FE%,`>ņa?.Fl.;2@H7g^Ep#'"4VxEH2"af+w+a ._QA[_yTPhHs7|^Yf2'Tۍ&e- 4$YdR]]1f ge*eZe[Kb˗.6&dTAB-9T-%P4w2{T}'c]N,la8!r6WlTY͵9+m3ͩ1r_K[U0»akmgfy&36ѧ\yzCjI. 3c"qVxOڦuܴhy.>/&X'x&r|BUU#(#:X5qَn/p2jkr1^.1D+$W6zϋg 4cq$vxf'՜[lv29i~S?V`%(S9_+|8]"D^m[U8(Нw ȯ֓J<C7눉x([q i7 )$~|؇{!!u C 0tr8׋I>sxxiSosdQHp.THx %o~yb6ՉM18kp4 ņV Iyu%O߈wQQBdErta I<HsoHJ{ j3%oy@1+Ԅ{;%  -Vʰ kDJ1; +˲*q>Zj`>*2;8VH;ף=Xa9Q:ުUH6j&9lʔ9N`;dBoɖkIڱ?cSQ\WCJK+nz5YDtk;X K3J#{nZVk}G+l`\9$6@T;O^*=d&sQAK 6ksBjP%uW@"H67Iz'dj+Dh aEgh<ׯfȾ@c b[[:I1{vTxXFi ˶c$bҳP;ec{uE"\Nasr%s?c;FϑKAv㈳{968pW;Z?H\@~{:; 5f :v |7iK 3Ak b\!03{ KgOlA-Gi ŠRxP ,C\:\kzTeLTIn/Hǵ{ngȶ^{|ɓf,aXJɣe7e]NS9s.LuصFJAZw\Z船<RȘ/UTf:3ڬ9cgSy؞kOXm8ߌm&ƥxFnUsWt\ ]X6[U;v\mtSCSM!-X I X(2znɶxp%}d#vβ[1뙀4D b— {̼ѯYN9cLS_G>!ib Zgw**o(Ϳhؚ9&\WjN͡Ekǐ_a*Ԕ:1uJtyVc*d-qy֩" 8|zNۃs}mNߚݥ7i˗繷ݥq͋7MN$׾V_!O]"Qx`x=p<"d%0.&rߛE"-z>Q}n|矺罳U NK0mt64#NUnL5R$̒)]#(:ꍵS=~H{Z0[K>B{w»ECj'c{ܶArm iЩ&} S=addؽhNw :qM@9yX8g^Gn.b,: ۣ͹d?s7*K/L$V=^'tի@f|:r;ևf^F/DH8fX2(Z >ywo<Ζn_dosdG$Ty?TvOƏM<>Fob՚_F`.  zI^*?C<)/*Kb{!,E '''///111666u=+z;*8`;IV7sEIIIKKKOOOQQQUUUXXXZZZdddfffmmmssswww' ##$$++-->>AAEEJJSSTTUU\\]]^^__ccddllssuuvvzz}}0Ճքٍڑ۔ޞߟߡࣣ⨨⩩㫫䮮峳縸繹軻齽鿿xʹhNOkӎW( +f;; 6 1uH@>J L lǟAJ;q&8"FL@ \AvRyGZdJws#M}=# SkDe@DS'%P~`$XU:eDF sUd.iK{7*Roax؀Ҕz C46fB\2lFG֪d_ jǞ|}0Ȑ MWœ>w& z-#]VλYӣ|O=j̗ܽ:! XHp1(ax:8фᆓLᇏG≇y/b$H8<@)DiH&L2ic= euNiXf\vI$zRz)ՌWv |x gpb_&yMsR'*蠄 g4 JC*ƵM:)BˢeYe*jڊ)+ny*)RG0ze_񒪨Ȋº:Bp窸Z""lm6ž\gnWnVtd.s\^F/KpkY".P v J*PtBqW_zS1|d+oR (-_XwLΡ3|r)-)%z 7/DfpK@ 'Wc4Y \xݹH#ַuVvqm/kLw{22= xXp2xeRR!\ղn"&]|9MzH9:v}2- 'Ὰq*Hy>U7_7"X'M I뵈K˭ɡx %@bgIE p4 m8 "A,pxB8Cg/Q`Ax?p2#ܤDN`$*il׌ WNVr޸FngEu>s*ծsz2y]q)=oG~o&4Xx{骀䝪U&X{ F{އ{;ોa.h^*E;B swrZ^L0'-3Cxn̷e6W&r8/XmܹaܐnXj`"C7ksTtsmz&iA%Je@R hSw]jmj u;ׄb r?obN]B&0(c"vY;>06ld#m7Qs'Hn&qcn q+NF&>;38*0ԂBV.7 %V+Ti5sƅgu=wiVw4ORndžw6f\\a0Hhqii6c&h!Zk~ BbtsL8Tm`7cwXhP_ȂmUPX]s#Yp`Y W2FT9اcXZ@shbv;a`TWfwZ%uK}$(q}'ifC8fG Ս7I]le;chxmXJFIWS\W䨏Iq\; yBKF Ia^gv(Cbd3Eĉ_wTi9!AuXS˱!AƘC2؏;G4B8Io8$9r901( "0 Gd:v]RF9" GF`tÏ߆2y{Q{' Y>HSdaڈH~c4YbP0E&sg,^wG G(Sybuk攦ŀ d`)jp<ȷpGEEP?ԗǕzc@GOLWc`~v!ȾkL"Wש 懱 ee;k Ẅ9c8ۮ '<-mLR&ƕKڼJ.~FĹ8#sZ`wLPwlDe!P4\~#K hnѤ]+A* 05W#lfB20) <̈%eЍw]jfE M)=P0rt:Lc6=4fu~w}MMuObtwI)ȷl4!m dVf~7ל׍qctZU3l5{;8ղW^\W(<)Jڅ}eT=؛K/qYJ!4mĝ۪Wx8rRI=왁9o{V3WBhFzY"SDc]ڂ1mJJFT5-~쮗ꥮA'mֳ~>O`/Wy2N6([it•4~eS9kmM  tC'dzC&+INS A^0?!lvpOj븠 &;W3,2L]/_/7N،#LUA/㶢?Ï#9#|#*$#?R^Bb>uC>ZJ]rO6O%HO#GgH)9IY8h J(x)X +::xx *Q{(<{Yl JZ<ٺ L ,zh[;jmKޮO?%C3 6Vȡd'1J1n4ˆKQ#3|K!< 3fyM<-%2{j+n:w3ibH-B׫i|$*zRPP*m*i%ֱk5eUu(!}R:yW9ϻ)8~Q6g/_|HƜƖʦ  $By^HPwLxfbbIeX&:eUng>%\'p(&jJ@h 0 gFzZ!y h4h駡!,E 888u=+y;*9_;7`>@@AAEEHHIIJJLLNNOOUUXX[[^^__ddggiikkmmooqqrrssttvvwwzz{{||~~0Ԁքׇ׈،ڐܗݙݛࣣᥥᦦ㫫䯯山岲浵輼龾鿿#H*\ȰÇ#F81ŋ3jȱǏ CTHQȓ(S\ɲK%_ʜI͛#cɳϟ))haѣHAL(ӧP*UӪX&]֯`}R5ٳ4B-ەcZ;7Is2Qy RkqK4p\/O)Dp@6|R (I']BUL#ԲZnZ%s{2&_f|M o:9K߾s3`ڑ)7z92>?L(!n}=ddQ |jl5f߃ E&ن!6!:(؄d(Q"eP6>BVh^9.cLh?GdCC.u 6yJ:ieVFY@^xQ"d!B[l~eyXZ'%sHdA])Q8"&ZDY?Fj)R㥜42e(:ң4"I3Z`wх%(ĮdȞtcP&묄ٕxޙfkj-Aڢjz;n oқナol'Kp0 /kɪFGknTƣ~ 2"li&CrʉS]b\/Ū3׼WG*>Wen]4T=1bkKX]\w.CTWڏ*0)-hf0ܴCa5XZOe76C[vD^{F}*8- Ⓩ >.G++ptt',\ 8I%DV!bļ䁰!_Dx `A$JEς 3nSS(7"Ōm2^H%HC#U%Ϊ!Mxb2IfԨDo'h@xh) dH=*}9WA"3ԪCM򩊛DeI .S&Rqd s) Kmxae0yCѝ!.c[0< %>T3i%H`H,0w4rUKύ+ίlJbw%JR>&}bU$?Y&G-mHlҿXM\_B% *vtc=?RtQ)-^4Ћ )D1ܤ#Dƈ"u7; M\?cĚZUZ2UR9e XԮ*/Ljԑ4kۜD,)Y*Z;fNR8xrZR,\A*e+K%{U1k>`̓cr_ \N, dy˅IZ#؄e%aRO 7&1)%.<|ےڝzNyD ^o\_&QL$ SM?ސA ~T8BX;V2[/;Si|#K.d , ꇧLz79KM;AX;S Qiy֭駒29 HƇ1LjTx%"ac,4UzَeRb8"m+)JNHVeձߋ]@z-[$ePH4{.FVh .s˧GG-_D?iSBW$*I$Ù#(4HEPӠnuږ%[fWODr:~ q+l`1mV0Bꂵ^E;34kZ9s#fy,LpOଊ0Z⭗` k>+ZڕSAݐq>:|Smy/n8e+, LŇ[Wv7zqk*(0Rks GZeBxYe*6 9)""tnMŖE&2;PF/ 8e$^JTFn<>y0o˵4ғl a˚B}mLb HEqw}`gnr`dbprģgSPWG;zWY(j>۳<}ɤxny(ә"l+؋ܻ0-J~;fF>{3텈lbچI՟V,Tbdÿ4bdLe}%mgGW%W`^Ms>:&|]Ewv*e7GuwF>jjV$QFǀ{(4T2,3GxH:jr7J\B]cKIF4<}w#XNNSƆfY^PײERJEFq.6L=6K`x&E7eqqNL1~n(o;WdWckYoJ(OăT~yng}d&uiHox؆xX1^Zs$c"QV{}>)eFH(vEfr>XCH}=,3&VH#}dqSΥn ,>'Md>kXXOУUK|`u3t7J׎؂⅏5RP;D[kցM*u`LPS~lc~aXh,ʥJ$gGX,ǎ"dIy'oFEf%}83b (Gx0bl(`$;G\,0Vj~u}]Òѵ}J׏lz`h;&5lrTij\6I0VKXghC[Rw'i{{E8w7 _OEWvl4$G,Řmom^5${"Ye7T!Zvfwt9hC!sVMF"'D뢉y+ҴRs6bؚ;R)f:ot9WIRYe%+n Ǐ94yEԝwtL W($$҈uBsez!BrPn%{ZL餐 &a20jHLjr ʗTJؔ0r!J'h}tբVchP)utZFf`BR~{ɢ$D05E^R5Lem{ءǣI,%S7/X9(d@Ca1t9uc:0EK5CFlEwsJ-<6*'.vN èڊڢ0d񔩌&$ARb)1Csf9M"jPb<6ÖmsQ.vkBZt2RUqVʩٸ5n`(W`@3? ӵ3g`hӈmz*gٕ*Hj5'!&oDuʆhétFɫt5bDwiwFђ @kŇZ+[gIC~t_IzVhQQ:quswԪ?c3k0~las]I ?[|++n9i︩ ?AttS^{H Cj6ws Pʬo\L4zo--QZqzpQ߲,75~JhZ+XぎZ7S}ykrgoiR‹[YBWIhogYX",mD=\\ՄDK52wBF 6S7}j+5벭Q,r밇ۼŚqOsR[zqGV!= )~j#ԫBw;.z$.U+T3)8sz+ʢ"j)dV(nD/1T.Fk+& å*X%w4c4j@~ R򪼇[Y,S${Q1PQ[LH":=ۛiÝu\w,[Üy)GfkIR<`w;8g}L?#'Xҩɭ|Shmyâzi,+<>HM2H܋TLx)xt: 3 3mm}̹D͑u̬6[|RKhiiTRVI\X̤RaŖgFL| ϋLf| qZi9y (h$x`KL;]\Q!?H1kҭZ}JjĽgnR6\T}A^]_9,5钼޼. mYq|r..雃p{ ޠDAgN}aAGg=W^NS)+@uD෦ǟĮ"|\dؾھf΄nZ1"Rn%JK]KسJ*6wF!P&XE8@YQi8YDI=c_r|t@j4&-e!Œ;<̭:Tۀ>hޗO&X Rd{DORG*3o KCތ8ukyDN#Ӳaa- :d)^Yo@)vmkoQXeU}l%}TŖF>,P J󉪾=F|y f$Z"nms"7z92M4d2;Hg!l Yi׌( ? :2S1ЫjA;Pj% g qKK: s4S\mFBl$ rDlqq3RKԨ\&Gp +8t7ɀLȄ{Cк;>7|ŒtJ;uE:kL<+n7ij2G 2]00]KB QKe45.P/RӔ,XM/qX[,Y_L 6_Ea\(Eu+eۖY.:BFȶi6Z6]su==5|U_w6>l;r[=#t*G3P,^DHWwT ֫lTG)<We$OFS Xފfxd9F٢SCHu cuquJrq#Y~]Tg{0]$R?X;r;5C, ohgc; HXw:*#4 xR ]x!@-ij4CE|rr+ $, =OG|\ؘh@'&bHla(Y# Ҩ5Z f2qpuaxgl1S&>^ Ȯ=9 ,뒘$k&NZ&gǷ%FG)qfMF0&cjY$Z~쓨(iXѕ⯈=U%7)&lM8җf 7zL$p*3R(vZdizok/d8eYXxz(Ww or*e=ouD9!a<9fAo?lh"Ta~Ӟc`C'A)BO#bԊ+NW?7ũQPzA:4?S;\KNe[ It5Hf7Μͭ%TY!*_U,8:^ K%Wݕ;<`uxDj1Z3UJvvh$:3+g9Kڐ6Cej-ڙU^xh\)[!7:~X=K=hYmL|Uvbe>F]T&́n 0Jqm>ݦ pBEH..Nï 1> K&:o}6 Ãc (տ.5깴ĢnI[fh ; c6 φ&PȔkyA~, &w8*ɤ a]0i5&șiTf+pQL!,E """'''111333666s>+y;*z:*?[93b=0d>UO4VO4]J1\K2ZM2@[9CZ9DY8SP4jD.oCnBsEqD%jA$kAQQQ\\\^^^```bbbuuuwww~~~#%/$' +"-#)"*"5'1%0% ##''))++..112233446688::<<>>EEGGHHJJKKMMNNOOPPQQRRSSVV[[]]^^``aabbddeeffjjllmmnnoossuuvvwwxxyyzz{{||0ԀՂքօׇ؋،ٍَڐڑڒۓܗݙݚݛޜޝޞߟߡࣣ᧧⨨㫫䮮䯯䰰山岲峳洴浵緷縸繹躺軻輼?HH*\Ȱ!C#J$bʼn3jqcĎCIF&5ZDA.9ƜI̋61̙fL<  thFU -ӐL(aTWjJ1V\z%96Ye՚j۳piUKj[MV)n߉u%ãE]QٵK3B/3t7pд-ܸiѣfͨo։ssFѡ:$(:sչ6r_vs(#(_`NkusC&#{w\q9sh7&וY|md#.>g7|Wwyz XwC%Wrs6\c7J4#0 Ix%! h|9Ġo c15#`IxyXH$D>9Ndc}5UV U)c[LgfF'Bo@M8З:!Y$|>oc-"[8os0B qrriX$8}s(PbUe969թ&E웩+jБBwlJ,6;խK -FnO.l+nhf k]Kj&l/[oo Sp2oE^q̱#{%<1a~6㜃zb]秧:͠.2C_;ڻ;[E{,cHJn#_+4<Ѷ>==߾=~?2?}%SMbZKzZX>P(X&H RJp*ȔĂ*_gB `DH0K_t`ޚ@kbFh-P:&CWr/%PW\Oy%C=IRՖ r<|V?-, "3P"EǰQwct?M= :#(4-w:$jf[I(ɽI"1BZ JetDI:G_,ACQ3;Ȧ7Kh]9*ٕDga)KX7T&[u̔wN ʕnacFԔG\.唊ʶif [8=rv6ŝ>GUX̕Yrf2<)6"McI4- :S}"aw"E"~& d c{ǛdFd#GУvFgM hP ZӈQzjkfGlK>MZ֗R4r&Pe%e배$L *&Vd±ib^M:X7^$i-@iYȯHBA4PE;Hx O3rDLTq q$蒘Y1nm^"Xzڏp X RqtJm[5m㺻篳;KEzJAHGd=ZUӉ7>=ж kXza+mlA<(?lSv`2y]!Z>n%x'NfkͮqMk&>V!SF[b  _0ӯO떛5C?Q@bh˞hʠiY zFTYQyᦞAMSj=0Ͷs\D"N UE E4p\le3ŖŐbŀ í߲ Hl2{L8w!&3O2ɷ-Ye~o*$+7䇻i ?I3]VAŻAuMTzvq}l?^ bUo1Ʈ4ѫkg n0 ebOK;K04H[($7}Y~_[]fR _G2PS[U0f y{@y#e[hP_uxDz'0Y ttUiWQ'RGixg6с8FUZtK'-NP^11'V?.HlF}vKX8;SL|pFօyjֆcde8+Q>W#qlIe+A@jWvfMW'pgE gpGS&"fwlMY(##SCրZpgT!ocD!"%9b.CFR/&4ƈL#RVwGLsgdy$o@,ANXec'@btqɨ}sX#q9=\aoň`W]s+T8˶<xxa 9ܨ3:وAp] d(eSR=%7+*5v'؎_AdS*iRmǐ+|o{LHbRVN=&,O,V 1gAS{wdtpEi5t%FY`Wt†C85dLaHVYԔHThy6njjf&"Gb^kzgHщjHDtI:oI4el2}U6fH%=,/W-p`N{'4('ꢩi>+B-DzIG3jVp79<)cr9y3<H1y}2]|l!#bESVgL@wxm&gf0lX:wi߄*>C9S?3Vqzפ.IFtzGƧvj&nPFJهk n^CFh[gu(U; g n@XyP(xXʨꓦ2J1/@ h?5gLJSb' Tr;Xc酟IOTh_:Dv\)DLc744Xj: Iz _Q˃⪠ǤnZqdN7Opţ\"}ZzR}Z)JLCp`(!k$N b96Aq5g?1:k6XǏ=;?9>+ZڒagQ@;QNS!JhVx@CQӲ%i&Jٞ*k8T:ӈ(ZʈLvy(Ojוr dt;>E| e$hA8X*?_7%/w'J+~JrA;yg6MvmtWbQ:G8ZՔ~ p:j*W䲢i9^|ָ5N ĸSR|6oqa+&TV+~ 60qrk,jWgSu!rTC1caKKK,0KdiIYو$E!|S5 yz{Вo)B(!LXT{ Sfv +XKCiKy\|GsѪJlB{m0 tKUR4%"\h4Q6Ub^X)qhp,+'yʍĉ5_9ˮMPq| {MvȣilMgK5/ņRv&;ʻ bsyvHj N"kșxeJR 2 H<+Uv:ڙ_|<`JLDan` B SSkܬQ7KM\1y2qG d~Փ]}Na`vڬby8GyLXM(,{#|ٻw9N CPqG9[#=4 ҤRtLCR)5j m:] \:_0Mxh$-3}X+|h/\>͔FM{՟:7QHK/i֚1-`yPWDs餰fu*KD:#rahb@ QM83O~s&p@-eA;)ngo>ZJ8PV#2|FKk^O3=|H -paQ7 6pӭnub^Ylil)Ԓ < dHU.gi濭Q^Q گavy?^y5nwK֑ㅨUsz>\씣v&٘br&uayi'0>.v& {!wjO³K+UlwNx&G9x@,Jzb ^\ Psz>`|Nٰ8!Qp{%8l f_f6cd=M^O];;"߅~'AY*N=;: n?qϾE[P1,_~j-_Ʉ|L)Ń|g{IzczXp/tq?צ|= Z@94Dw+䒏[^8Fƪ.a :4`}IAN"7K-?cm UM c;)dy*ɭOoedGO FOP9ۛVQKQ ?UXSQa!M@ D >Q"A7-^$ŠYF%4) e"/nLsL5) bːu|J M jeR6H4bρ-B)SjUG^Ucn}hTd fzCىW9ҕIխ[{u(ۖ~}ڕvn_v bcu3-xΉ%FH%_/Lpvr5iϺQ= p L\U[Wm7]&=9eַŅ_fXn=!_|]4I=7G%b(EdŒ9fS*{8MQ Fd9$|,~^*ja;׫bkͺ6{Uk>{5ޤcwpՎ ,h{% |U.ƒ]+(ٕ I j:9k,ֵrښmCA& ,(u"bi&=M}c2]kbD?++j[Y_{ɗJ)5}]( ~sv`ķR˞ O\cKx& QkB?h=; ~g0$@sI*؄7i{'@PVYKڈ O虷 %q!IgV%[ !!^znWV׿-#/Ť݋wO5]cJh/|9όg#niQOs|4>;Os" !GaRVoLyNMF=/s1jH ›{1{<GJ6qgZ_(=Wh,iFztKyK_to0wLfڄ8Q&֝_,d": qd%8,4t @.1Qg!8IΈ-8]IǨĥ0\VZ5c z?ؚL&3n\OD+7Q44!"qE/ EșKے 5g$mfEG 8>ryJ(ڲ)/:d~ҙQ8$I @F 1EOQԶe[V=6%R[Tա.F.)F3d4 }ubEsg-z0>@Dpil6g, KcWWt_M+*+YFQ^ױĮݢ\o:s*8o!_5{l ōQQ֚SrVZm4N_O <&,]emzw$"S $h25SZx]ٝ򽄄Q*GcؚefRS>M*vDLI#gPӼ!hzߛq\7{Ù&$-LEШ߷|okʧE[PI5l)V?64Ba#3؉"27~#;.lڿÐP:373T>K2bAԿ"<ԂAﱽ+4d4]A#ڠ@X)lB 7'l4]?Y 0;# $T%0qA.?!? ; 6lCs@0B;8^ڕvi H-Ĵ43)CF>?8sD>34d8Ѷ;TC877MT@?EAi*X؉EA&4,B'|LCGD>t,o`U4}jA ګ7 lTNF` 9v쭺 4x%PC:yFf=+e/h A!F<@'ÚQѴnõ۵A%94x+C dEitz DRM6L$ 2ӰtL6;^7$KߔLCܜ%{2N"DTN;s" "^;L~tʬ34O4DH|NbN,LỰQPلODUt y'+{:*<]:6aK0MmQAlud˗ICe`'?2y2c,F - JO ~Nj':zb+OaA[S9r: u$4)P4,C[/#5+v65cQ&a[#WOPT+b<ޗtyn)Iy@_Bl.z袣6<쳫~;T w5:A|/}[:oo4~WW);]%,KAЃ7qYwK\~9\Y^ r-}BXI%V彞hcP SQ³Td!AڭUXU0[a-n,,`[G ' cQ %.ya?7c1Pȥ,b41Ӓ鄆gW'մ81[b2S#ôXǠԑXy8vC! A=#=((m[RdEM΀#ؕ@p˹Y>҂P^VJJ,cZ1$L9!H3]7sr9mAO 'NqCh N!  `2Qr@XSǘI/}0Ny VgaJR213r\:mYwYJ{h8,J:T+yaG53fAe@NzqETYӒʍ?C&dJXS[9:by3Tݦ3eUZ[i`9+~V_QFB<1dRSqU7G*Vm)9 ;-&C}(vCհ6G`N=ŒlK`4ބNݒ 8}ΧkcRW*Bl b[j ?<v!ͨs'<"L!~ xiѐ^ŏUNaf)\s+G!JY^' Ob+2a$5m]o)=l0Na-HJ]b RC_A6e $1:`N\m޸:7E "2B{kEH%TfsɋW'Kd3(7ƻtY3}c[_C S"ejQt\_q @`~Pғ4ׅD\eO(Y:ĭtubh3\O,ڞGH·9"+ ZV Hh{0B9(p2l$ B! 6_WKpwpWOy3 #y@\gaF[%] c]f6 YP Dp0TGHCAGq+ 48`H*PC=Ftʲ&bd? B&,qn0i:D[;[P-`1vX(+%arPW+wH 9XWFNj+J2 nq/Kn&KH',[2B rd.hxA, aWfeJpBiV6Y6gGAX1]DDG1tTIyqwT8hG8!H*{h_0q*5's;vd%K6CD|R~ԑA6c;=Cr"]ڦnHY[cKp%-,pv)>&zqI'B&YF׃؋YBbC5#HJ' .Hy@mH2a" <8)|90j&QYu\/iJ9fWfЈzT ^IiZ@씟]dĠ4Ơ9.I9Y`X&(+`4G?'uY B?Q+^QVJ0{Ee$ӢVSoG NQUEj؉F$ "e3J*ŘRqFK"%b8y8KȢ&Ewc~g|Չyh1zS6U#Pmt5Bz]V=/s4v"^ NuI/2(!$]90 u!'ͥQVVɀ (v5S5rehHƪB@ˊħ%E+/ dg`4z6ZX8Iu.>Ks+5) v=j F%B"q3eUcFƵAa77RzF 10BK窨#b%[ ڊHɫ* `0&'zƌ *; |T vas< *7:GK/LK+-|Xl)w!jTG05F sZ6.J6:A Яu59T6;lGU; WjgjW ׷TbzL WpCn8?uIjK&'qnRSoZ=O R>*rE&gS~A6ȕ"IʕīZX";ŋ'En6bËx'8v`WuRI1ຊ5 ݛ׸*5-QB~[S{m:+iH@ xizxu3 s Y\-ױ|YkzRǒP牽/oj`i<9܍ Uh!4pwQi.ng:!ļhW35@or5FRJ(<^[%$w(`zdV}N#^A>UzIFR@?yݕ ,A7WfC,.A1鹝Z`F)r@bPE`@/|_U;v@~i6X 2pLS8{ҀAH1g \J.,,n&7KP{ ~|!9"': wTE,č]8vM-K SX݅=+EP݆ %S Ѣt7: gj y)zTywִI NQ'_nzSۧ}ɍoP~PE%|f&޲|Eď||Ţ𦤞zn̿1+~8աPM+L[GE偣Hތ呚^8z:w z0IbQ;G셌쪌FbH^)NvghAH@)!_U _7&g*a-*w f6* n1\"Ѕò8: ,E; -l]Y6jN߹a5_c_o]Q]Ty]g0߳lr(_pbW;:bTpdGf 5v΃'ZF7b r?M2ˈ^v Sd_nAȚS6ֵ)j6ža )*HewKd nc%[X< vf~XݲŎwj1O:^ٞ2ސ.ܗGﻞM5Ky942Kx;抢zn|؝|iJ-6 -#sR?X8\*&xrbb3Ͻ[Z Ԋ_+PT ij@N<􁮁 IJl#%t:YPöBЄ\Caa(5DzˀcW4f!mu*| ¬of?r6Iט ug36Eb+У6z{+nB Dt0Yid<6l|V*njFn3DD"#Z1&Gh2sZP!b=AJ02,./B7\J݋N vR-PQHt *b#'(#ˇ@#pAMJ )бN6+L I!R$NxaM/n\c1w7O~R^LaJD.ԭE 5{9K$zp¢]Y qW$|G~`Ҋ~N xzz2<N- PeƐuD)35)2Ur}0׋vlʂ]%4䠥&Y )4RK&_|,RLƟW> 8PϜ6W)eaюc]$Y֢V åRosҨTfuxDFOK^9]>0 aS=f /IE] dLQz1V.Pa$ 9D/S0M M`9:{&*5kc5C+9Ư~% u%22ԫzY M,WE.ǥY4;Ed+2ř8HBocR>،C^P>M1 d;'O|3̹؉*@Ss_rwf2T%~e*L~+ֈ0e UDZwczv4;0p Zב2S)2ޮL:z'/:=iQoD͹Pl)vw7VX&ȥ\ $Ѵlknxf^"zϳŦk}9-ΪX@U KV8@klKucpNdÞwVf[ɖس@h ,WH4[xqH,9۳>/ }=n̰F"^.-kヹ0Fqs:>8קs! ń 5Oʅ`Kc,\'ځwTZ!}֋@BYvFZiyY'5إ?V\<{>Ey{ijޮUFS+탫(p!b|Iۅdvy٤H$hW x=Ν:%]hzd( g wN=42C5,zgcCFg>{j^x^WOs{Y7SY@u&}wwyW%01,Uz]5> R Y;k RtbB'xXR-hwfL8 D"(Z $6Nw>rDX@T? 0VE8UI^]XQ?%D-UHmQuT(Eu~x~W}nUDOgRQP.hL=1[=a }8>eB 24#H9~4#b6-ꔞZ*; 90%xⴰkjOdȯ |װ~}ۮڱ"[ %Mʰar;E#{SI7.*7F e7 ;pDzydx ֖9oy-^Y<{bGXAI*5;>R/`4jwjc+B|<֯gG5`22LK6s:k>kβ;-,S+:0>zRD=[X%YnKcŸ뺷tɋ)g76:PZ;Z9Kv)$`9ɫGqʽ{qKH% )t`zk?w+*[ڹݳRY۰![y&뒐8  IzDoZj4觘na52 +z*3Pm #)\ʱ.,%kdW^ 9鑞r)1̲$aS:x3ؒ.c_f[l wrڒOw9 p:p}ƞIZ#u9*ӂ]0GuĹM,U'75DJgH2J[zսI+{:*=]:-f?)h?3c=VO4\K2GW7KU6CY9RQ5eF/lB-p@,dG0aI1nBsEqD#lA(i@DDDIIIZZZ```mmmrrr# /$& ,#(!5'1%6(##))--44;;AAEELLUUYY\\ddllqqtt{{0Ճ׈؍ۓݛߡᤤ㫫洴縸齽__ƿɪ˅Է׊ȃنܜvic+[($t"o j$Сd ق SZSPp"{d,sd#YtR)(_dbtUKl`{k#Iz`ܙv xWMJH>uE 0mbl)ºNܬs>ǛJDܡY/wZT]@*%K#:0Tkڔf{ȏ7wușBg<D ?k` [p&(h7%AΝk۷a1}c}~U tqyHcA%wD`JʹsXa\%`#{q,vW~c`[Ku@#`R6K\-}PH=tWWM4n <9Ў# 7iI*I#9d *<'ԆTXX@93\C 1ejT; *Nz).phgt}aJ͖J7}jkrj1ReV[r}EݱB=:y*jjwCUr~{MP 2eX\喬JP?jf br9o$5k]{J /G9>;tJ?86h4"% ز# 42 RP0ۜ?? $ Dpz)Ta"*H0)BP:K3v fHXAFX0+T@SPHEzOu2qubFx :WDF/rh0IUK8c:vr48!+| ^Ѓ)$ !5yKJc U p]X n3ҟ^*RZE-!O lc>!ԥyDUæ/TMl/ |RsJ0U {B΀E34+{ھvUǢLbkM:őPXT}LII9>]% lT8EiԚJU4'Dnz&.F D+eU^s`2#?2˧ HdV5m{k74~S^v8}XPD ?3y#~7M[iKlB$6SNk F y*UM(٪ǭKG*Jժxo 1Z2 I>(p]YamFgZ Jf9XβO8|Hs /W 1 }o:vS~uوl+LAu>iha')rʦ𚵭&8vBzQ({;u9~Pu )SW˺[Ŗ&#fDcY]/F:g`MSJ-uF`wŹBh·V7o=?n"ň>2P)>V3=>X;e8*l\6kEtu/4YNgƶV%;!`De\34wNy>!e @;A3-cㅷuvێ3h{P/ԽM^nbЃL fp6[BF_bO =xGj-ۙ7AANA}. Mj59L>恧`[a4G"BSO45pK5V g:W'm/UAL6hPF+nB*Hw°YFA\D優-P `r;r CSD[_v?jH[J4~e fB WFh2.UtQGSo8)1[nS/{9[}S7oM3qe;HXA5n-O6! ӋAOd F*%m w ~17,%2l&XkXrhCF(l_Fga4P/$K]3z]d%JoB#8p1F3^SMGi?+82:KLuP !)(P.p b/HZ~wmԎ,\(F]VFVB(1}cTt$.f{DV6I<77hU&QH'_.W>GHe~F@(hSE1^{ _YlaiKP(P$IpsS>㇭ə$ J33A-rSn.uȈ tmIW&@." %2@4N@CJ]+EhU W ըkPBTvY+dV^| ,xhbg?ZfA@* pW3dYN*]-‰+3R0Jh#uPJYR*b3dPd^J9gAQި28pDA9Ii&Tz6/30\T9GU_CE8% t gUVB x"umA:+8o"& Q_tՅU}SP΁/!]t«CB"rYs4?Bfa14 "Qa[P0/:E'E*3 IMYP3!YӇ,7Vڤ)-8Os ix-`nG MlzmxesZVY؄$`Ƈpnf4~N~hs 7Z6PmkbWRZUsEy 8)rTuptר!;(gOX=\6(Nyky;^pk 4*`fJuzt D38LfXs^Pg1zG:'e@f81ꖋx_g3Ⱥgx3&hqLU4k{~ Sm}6G>#LyA5ײ _&j1!pʉ|RXt K2'90}X*T*XҴ٧g%# )&ႮؾjVy*Z&wr5DhF{_nz.` WÄ1GG[((Xx̊r9 /`pd>)bA٥+(GN ]̅WU۵>\ fܐ8US']"w]Ė Dl|\,~Lr:0DS2 eX9mɆl(2vS:c2h.eZ]FH] uԇmeT\ZWidmʬDŽ~fԻrZ45Lj/}Ga &lf;kmwFexfu|T𡲔c <}LC1Wyz(R* ]r+ɩY`eSPͪQkdT (gK(S!cx0lZsOˋJ @ؘCKĭڢ4r}1XKѩvƢjݰB `,{+.=\8)ph ŌDnh\{Z.'(p3AIڣ,; 4e㝵޼X7+ ^3NP~(<=7@F=Gs⬬N%ރ(3Ր;w2-d๸砝ޔ*u3飨L?,i6)iW=`:[jJT!FCV8P,:/qaΊ%@вpJ=4=.#Ϊ ( +y+~jL;p$Bɤqe:Ιv.p 15ފ-gc( :#޻z}fH2߽&SBGOȀ7r/ʡO q]\P~}2 BBvʇH{W?n-G_4?y{|8Z {2ĕZIJyo\>O}@{i.FĵYh_^1[jo4'vˢҰ{r+BrwYB݁}g.-%8HXa(3)9IYiIəi5":H::3ZJ:iykٛ8j*l|LH`U|: kٳܬyb,Q1QF"&:Xq#wB4(qƍ*^7aJF j+r 2^2N{ ӡA6tD&nՐRU2LXR)^Vx3l:Ƅ~A(PJr׻@# z$/K,+р.%ɭZOt'W\`Y%(<ց-Ձ]AR/zt:YXP3ꐺYnAQ5Pd(t;^YjQu$9N۝ ݧ 'xs'Z4Ie x{ zGx `G!X!CTx"A -РDrނ7WsyQ @ƌ\'f; M Sha8`,ԐDuT\9ޘ,f5_qXp5!f{J+n5^V>";eT_[Ls~MIo2Y=OO(9XI(\ Xʢ4De/P!TAJx0*9Q1nduaR㎥C?5:o洚J @Л(\ ,e])h:|#2DL"վ$?ɢ.K0 ToA +T3WOLH T"AލjfvP@L5~LEj@yH wBq7pv >-]DKO Rpps}Mhy0gb(ל9J0K xUK\R}DAX'C~:Wz-zb 0 MD&\PXΤ-LkD(&M7WntSӘ 6FJ G0 &p#(e,,1^JsDIM1jq FըpJ,Ig&ƦSꩂܲB@%'PxfVu*$X(7N@QҨ56~q?)U*'\5!k0Ux'%OS:3p5Y4z[ ,!;x,p( 0GNs\:,`2Tt1) H]3r5,o>W@ ftkWJyv"#yp`ie- "X@ 9l&#%cHJ)׿mzV E(2ݣ>S|a cbï7)Wx"-My"]&2ҥ|]ńε;IrgveKh+=B6spʛ,[b8D`;e'2xO374=e]$ s-'L@h\݈jX+ӒG_r_=p;tH·\6;&b5 VJŐ33bVv-!ZXZP-BuN٩xgEg)ikضGؓL6jmw8k< ^@ob&)[PG3zԏ3 p]њ7y.Am`Α-7s[f9g~¡2u$7Ie<~dZMIנv 6[{b8%O@k3do+seFZ#׬Uv\mIZ(DymzwIuG2Cw9IN2 0<`aINR9tYQ=' Qk M7p3Zܱ%WXO06PDBx(K2# 93@lVfs/]h6AL'f)A U lmOIĥAh<ĠAgU%;LR{HLx~LHu*,+\k2Il* vG895oaCNc̔@AfBA6 $M&}ƒ}̭󳲞sC|yU-CPcgкqWWz !sz ڇ, @SP,4"v7Ο C̼|&J@da'aVI B!ԭkBk-Z0R{,bרн)` x9Yr8r}4cDd?U&D)֘k1QuGNt%( )<(x3fφ ݁}wM Pht0}<~ S0=<[pb=Œn2&VM_~8(K!o P/$i/0\Lb( naչq7Ya(3sP Ҽ,-k'Sྎ-:hmGd>77NdVG<1gcS@ ,"{vjY:=.Tc.3s!~ݗzq /~Pmv 0 RyMcCy.T-3mur;Q#PI^B'>(MT}آ m7_N5JKSiY-GyVTf H \ ?+_@9)훖[ukMzV͟Dl~X3vzS[ACdLj^- 5J)u/) H6:􎹲1OXԄw)un|O㋺b7^qhO֯r]%/oQ%g+b[̃˻__==_ŦʂΆѼӑȵ۷ڹ#࿴ܓP-R' `6m ;wL>d4"J.""琙;C ^-$1&27NM},N̖q4DF9o%MHS9ݘm^#::!Ω@?D*љf]nUHFȕiܮQeWlqSIr %^#{`îdX/ 9tפVm1`"yOMSսʖYWl)cC!gQr{!e5VKf}3;e $4ůi|<`R=wXeM_vԶ@`^ !'3ႇ}U#Op I V`seU9#JCV=2`JU 6eDu 6;_?N&|%* 2E u9T#fI=2R) b؇y\U` evR]{^Avmfriaq^$ hghtO]"xߎJ}9flKG=tm}j9a%Z"(b0E-8{6H0`-MW㧝ϧuUhm0EZgfhc/C)+{:);^;-f?)h?3b=8`9*2$t1 F)NjL ;ׄ p-A!=g Ai {I :+s5aqDf!!ynByPiVXaB T ]Bv1r6"2*%YZL! v[]?t@Rf;Ep%^p)y>nO\OEf2T[nLdt#_P\ޭV-D,urrӓkD} D2ɵd-[l6 `сT 4[Z|7 X#j[B`\qqjc[ P< C Zl&}TXս~By[^qTޏm˛.5t,*HPEYd wKE>$9,wDy`TJcH\zs5oy+u.&V cpg5LlKO t #-;j"`"bpYxeB \/DYr#ȻӱBN1c}He~f9uA*> yTB`)H݋1{Ӆ3a<깡4J3!̠%`A΋uJ5{^UTl0CLPpc<Ẓ4Ɋho m(Vԯ'P l=#zγ J73DW܎U-ץh{zSPT6wM|\|k[3K_qL`fFz|\)c qNs>Zc94&4&*&3|a1QAK!qY@U $O!JK_6@iZ.n*\7LTG11 ~UAs`>)#|k]t|~c]"'}Dp/U7tFr})I˰bBC x}N9CV |:~$ORG"Jwwpn'Ujq|il};2g`z0Q4w)`Iq~-usM@DWb AU i -lB$U4<Gd8(7p{5z!BZ~2d0(NS -T00RNWiw,]㴅}<?0:ɢ -e}3`(K b7y ]0V$-ED)+0q+zXg#T'V=ˆ+LVuhB'tZSQbaQS[ #Vnc^rP](n{rW\LHQBB lCfU.jC0T8F3%-<'uG,h (P(?GUeC2G[`M%&(]VtQ?Al/0~QO 5}>`]JMC (pUs; Ou'S֕T).g+1[ 1y'M15̂3'&HUnv;xi)A8WՖ&:U`bDr4'S &&>8Ч~S6̂1]IP8Qi^tU1?S-5P&Y!҄>nk54LY]jdb//,)x zwh3@^0>3bpdłRH31p5i@0[iM O: c``W_$6Cvh@)NfpI$T`N9!Yq4iy)'ch0"B v(Ep-bVEa ҞW9qT  (=àsv:L0aVqv Oē>BLEog)#t?C ߷w6HTm$eWad"^-a 6? &nB:S  S>9sd(jy&:2Aa]j#Ll/5pݢpb ]+XZY-`6 " c xpD?I^$LKerf5[P&C:ڪnƉcyoA %4Z۲N3 IX#PK&FZHm:FVdb Tڬs }:!B jht@!m7EW*n YgzO!"T 6r*VNne);%m:fYjBS0)GC! {.Gė 5ksC87@ҟ7pT" M+.=0[oB Cw]ۜQʫsIvH6WxH3g!Ն`0nPj$6 ~h,Pϥ?DoGJ6&<ϔ7`-_/Zl Ϥˑ2r<b2|q%n7V@Իb-vS@a /pWT:a(ࡧ7xjQ @`0UӮd7EΛtP,ѥ-Q+[fJSHy@ [0B0-N);ijAO(@CH"kK͢6k|0ń(!۩ A)2TC";%i, Cufđ 6(pjG7EFȳ H)uZqU\ˬ)f췫u0:03*@.|J<sŁ,3|>봧P:_|hVvYLĸs >1\ȼO Iܯ\E-$H g acp'q,U;L(,ëU|F2ыA5v^nB AJΓ@.PLtitȅ `o1DgAx>˜y f11 EM ȩQGqU">EMZ>aϻ[.(kAeƄU|0Hu%g;º`.z#Ұ6K_1PUݼs\cɇyVy2`ǙA"[Z30;G])^W`lm;֑عKC/<lgѦ> {i# QR|GIN*MHYA)[U-v)|91 +ݟ865 ܂i}=ȫsUlYZyGsl)g~d-hּB4.jH Zz 2 )*)ʡ8)aga,ۍ`y6@#פXAaNMiaz3^bV 5+ڇh:v(h,-sYԘ|}'b01 `oNbyøk*i]dST5vxzPbݛH+tFsh<]3&4{; ڻyn0f7~HI* ALiۛ軦Lmde` ˉ6 ݶ\NnFdxʍ; 76-iK}Vx/f>EBx|/ܮſsfx}^S;$beʗRHǁu:dp{|h[Վ SyE&x4Kcn )_5P>@:J>>\<4(?Oi\KO??{剓G`;08| ;1 [1s]/Z% "j x8,0̘&e֤ TU0kzxyBG&bhPQ͊ͼM7Z ( Rśt- 4VKH2aֽ|Qy=Xs,u"CÌ$\F iA#$R)K. d" ^v F0^!\ 1OPO 1|kOCG(x䩪{5liBZ@+6 f;Č>ZvVagcJbf\8p\w')g\re7PNFU@ȓ@^ɭR`ux`1yV)V!7`xIY'c)h`)cd+7~фr.%xqxE&+@YfD)%9f!"S ,5RMID=y )S]%cTQ%oRMg}!ԨX"MљJi,  Q84aWtɗT+_uc:РCQڜLp O@d02U _n58P|` 2ܰEW&-&\Ja;@YQ R,TSNFb]Q (76Yp4DPKfFjfr :H&Bzq]8-S2{[ P0!;w3BrH&rѼPXqQخ|伔_(68de  #Pޡ{Ck1LmMR6`k/ڭKkk:ym xI멈?vP:aOA5 B<䛪y" =(@)DP܋vRN<++=98Bg6PMK:V0VK: EC/.wcZd+en/T8N+r+| 2r.`(B[ }g$dȄO-<dKv1葟M@ cWF<㞁ÝDR9ZE>A `5-*!@Q WFim袱9 JOt;٩hȇ]?eae6hlmbA2PGLX0@B(ONZ~1Qe#E!ׅ0xuke7PphR_\$B8@&#, AT8J*Br&bD3i4 [ JN58P?a]A=7"8˙ĹE_xέ!gĐlKeMJ-.8qО~HD@DR&eB(:3218g=^L9Y8u}S|t|8j1G&DcT%36N]o)>3'`hfŬS >մq3 0B!*DQ`f%Xm1T[[F8Y#U!3W! n4TFBwgaB c_P Uܐڞa nkY`iNB:0rv wO7v"G Y/ˑkѲ7Z-<3{?nF28n*wѾ-2)Z ZIt~isI^_ʒX&VtsDژv~[ _t`FM.r,C+, С~9GWIU%$ڱ 3OaXcjOtpoͣxĊaA& h l}=p{ߤ~hhi&uthP b( FX H1[XEE9lwiM!.`UZߕ̓fF|B?sK΃[OYG8rizx64tk'•k+RJvnd gy_.A`60~/9~@PU" }aN;-^@ r,x&3%c'N2QVG(Z3=@bM`RX%g@RCDF,sV/$0\ Zs&5'j% q @uVzcBj1QB5XD U"Op(H"j|eB#ANXdFC ї".0EkJTM,BKcw(HsM؍0u/x@ ,p#Pq&$(g)15jXt'[uHg  akW~csst T0@T4 Bs}dp!*T08_(Os!>(p`ՐAnw5Y:B_b8-oO0? $PGC BS|̡,`  li֧wi(<Q+6d keqwy'")Qy9l☘jc97&L)(PÃ~3Ll6%\.cO6P+fn%J] fB3ChfĔV3 Xe[7lmdH(L)?Dk> ː)yHf4T@pZYK- ,p9,KrA鐼YÀ*@;@.az~`~tL$(,W7u;D$9UcJ;\";$Y\yj_1EUy3 ,@ u1R`0CړiזeRyiQga3kXN% P8c'n=$bW Lp:{'%;ez>:`Su߲-f%fĖ^iзV$UW6(-mx"){I{7/:13.\c3ʚ Cp`ꊈv5n&闶jP{dٜlǕ f8g1FG&䡧Z4mAeiYe O;1PE里M&(ucF,ydh zP8B/ mdS1eu#nՉ-f8)oes^pUV]ePF z':f"t;4huzDdXăn{ zu$rv.J*HJc0qr:tvx*:kನMpzDx&듃^a5Ag0U=P:D8;着 2IT+ۦ35O%xʹA9 R:nPɲGM\5:릿H+]bZ Z9 r]ʛFҽaE@'8gӹ*+RCۻ)F$ '+!^`n4Qp dOzM3T .@CpK'q6;wVk}'ts)ev-" [=O+yTW8,5F(u .\0oL(`Ti}J٭–ʍbeũXY{mM5/Y'e8(j'TCK^tjx̌ ۀ"3Hv^rj3uМR}ƏqDoeP0 gti[5!^@$b.H#m̹3ruImt{j r3@C O wFMV!S qK6qhh@ёWG;5s)ƬU$mŒ˜1#D4 Ȏfn]˦:}i)= qޜU\Ň&JNP'xkjbk˹Z V W$|p0@Z{2h. =. 6̗ D *ѹb*hŨ͐MSHTBsL\ðPQRygsA`e$U׋J̑ɬI@čNpr#" W83ܼ`=!+*ޯ9NեZ4G-ی P7Ӭsl& RU{=eC@^YK)~E9!T:Sгil ]_J78+%"[2 Brq-+yc3@?CN, Ӕ ǃo=inY|7k2Ѻ s];򠽘 C ʬ7t|JYpH>x̌0!s'茓~( \~wC<?2NZXv̾/q̵6RFTn㫔eA]5T)̣MJ^6Qg@vz;4͋@tb)<'."S,C1.VW1wc+͆320Bl"A?)`}X3$ mrnPO3RwIֱ20-V9C[mTvͺY<+w1 .E7}%lBE|b"ޖ!9Eb:kX3Tn 8OZ3 V QRhC/8#IЪ)ʿmA1e~@\ ;psocU,erh(bM?B^gC((C(CC-(gʟͶδϺg˯Ҫڦݺ㽋B(4RɊʵџj@Sҹ8ZCX EE\;iJ NT8r?H Ȫr:)Dg3+kL1Uf54MǵءcK/ Wzꕕa"ҍggPӁMi1 H tQXJCRQӓ\%w!k"6x w(ׇ(0FJtҘx"E?[$h6`O|1b99]:wJZw`&lƤk2^(F7h`M,Lx~)6"yfiYk.WY{P!6H5l)zfBC!:J>CJO-٦!ܭX֮ SƓ <\j6䣮4e'U@ vc1a-eeO^b\ˈí <+#G|Κ!,;8")옥LI;Аd0OV2gp`!UXV*\THÌ=FH=R~5v۫L˶)[\7׎=c$pEr3:"N*"Oq75D-${'$ӃZ+'ztyEJg7q]*`oADPAi5l0~>ɵ7$ aL(hF6݂r\aO|1)a0,@_ݚumOLOF!%|9ܜS @@ip+TJx E 0sPBv:'Yx߄fLK !)(4X;S$\2:p #2EgS/rFbXpc*=1ISP`aBRux,}ɰ/BdM/9b8T1 A=Xg@31R ]SB;'b ISҰ݂!eC%/Q Qz+H)@6[aZDyIP3w5/X/X y$'>}H ͂4FbwI) 頄Q&#mH_ `6py8Rf 4G $ &[ye/ϳ "[S+dN@>.)_xW&h0fʮ9L<"uh SM痫ps1m]la5 N$oytP< j\*toAz|3ϊxXhx#<㞼!^w2\0 `VfpK)1r iئQ8c5r{6ÊJ޴D@Bu|mp <_*^%bUqorJ260$p!\|N  Y kW.μⲺ)nxV/92`T%zì^sHZr6|CU4=eϹv^TN*7e%WZuӪux\kq&7.PtQ4٣1o؉ T4t %FP"~B*疾}?o$U_˧$*K{6>#~Y)$GLx{'{7.DdP #B}&(\=%bno@ӄhu hM6> 23HGO6;)L#hw%~IH #OhOQHq=CHd9_%fgz?X-l8.Qi[@o]x|)}_7!3Wb\Ey,RhCh87 /E.bO`r>'-&8{Y}y§f@Q1D Q.ZJibȃ 1i[ CVoI4X~h{bVt\W@)Cq:ʗpiBM3#i&E5 qF "=n/9L6 J4|w!D*C|XOXb=>"F#>Ԋ|ڀ!ثj$^SG Q;_#W E(Dh 8{⚏++zb n:# q>@!e O* kO<h>'e"vGjH[sĴOwZlj"4Z\;&j  Ni x+@9d/hy`ˠ() ָeRA Tt믳_W >nY( +`+Q~˹f+ٷ ._Bg_aP1Cæ:;J-ޡ`c(s5'Mp4,sZgd(50C4Ck 7[r:p{s\`0<E9!o+k+t~K{U{H_(B,KQW j^ak܃69[, 88*[̴A}cG7pDQ<t_L- ȸN l;9v}C M 8X-l95 ;@a-,lܓV\@d ?ܨbUE S$MLfZƟ{mXҗ~;̣ (GblN<ǞW M ʈZp{_!)Q.i|&k!,E %%%+++333:::7(t=+|:)<]:-f>3b=8`ɵ:,tB(*m\zo8`h$3 t-e]XPecw_<̉6R&]c$Vd W+o*D)J I#Ayn@ƛIը`@~3dKWFV"0Z]P&&e&C"L,!c0Z`R+ eXF {%9|拀 hej"`$wL: BR_:jgR7]J|iZ͡ivVç q>Pz0yz촥A)6ݴѡj4(޷!im{ 1}ʸgh>;pinYހU 2]0.wæSpPpB{*8sD &oyˤ &T !DmH klHVmPI48Q@tCfXcO? 1(ob6pYwmbi< .~ΝM[D D{aN)y;g,n5LG4IX˅{׆Fzqf ,μloUnE^oZ*% y,?>ͳx1Y֦?W=ߖlDOS?xjX֮95Ё2THeb~`x'l`<[:Mex#.B~TCZ9Y/56cB4BFĝDDvDI!` u*=ˢ&vJNˢH2&3FlSFh:veˣ'tr-?-)YHCXn+EH1#J鏘,&uI(n1{dZQt T gpDڐ@h~%mtҏr?p9̼X-($* >&#Mz ` |@x.<Ӏ%'<H!(e YC=u.1 .2?ZoOŀc`%"~_,3z @*# vJu= (竰8i:#/zπڂŤ_jV"ggq=_%rj( ecֳ&ܡ(>\XkM) *bp Ip+7TptX['\P@`Ƞ/X4E,jJ T!~޺p?S"DdQ;&!:̭x h.2NVfu ^VkvN.hD[t拶g%0(yn,(ec fgTbp;R]P(;w(Aqn5%U)vO8K)eXu\DD^\uӡEM8sw|azKnp%[8Xɭ'"@=^۲!3aox#O#⤓TZ=S@%\+yc +Ӂ!CBHwNdy4-gU.cdkj2Á|)vL@Bi!>{W,·f1dwg14R`i@V9'4 (mnEEO豀ne&i$ Qx& hpƳ)03 w#K xd`9x5t9D$huvV*k.Wa3z\zdE2|>d}C,Gq5/WKAN8 pLOxy;cX#(4cG/z㑋0g˔aс-edjYLYoHUu1O**\p6v1'~A$0DpQ?8 x)Ppx@d L' t;Z&(=#V u9X8ŨI ͨs[EXom֣?%p8{U`(cH'*!a.(O#3OTH?B;A8@t$1'sSp<`6QUV:Q8`yxU3K D95@/PKJ|br9u% 'pi~/$x%f-'i{+$+V8^D j3 cm&/ML@aD@M4E%fVXhleXP%c1鞑@'3BΆ(/MeOK:\0?e/D-j yصZb@cN`H `6:P2'tj8Sp'1Sp' c5`7RFB2Bn0?7#x9Zh}ӥL w7ǵ6Xꑉw@ ehS{v၊ _sd ~*D(paaa(px+u8k8F&oGDw9ngT5wsV%N7X6K:[j鷂*rXW+̰)gT( $Ornvnt`x9wrՖC. w1"X~ZJ s9@`jkC _(QC J`7p6`eI0,GQ[]l*,) bvI"SZvW\ ɗ_I8CMQKePKD0@:s1B7` 7ڲE,k {sb[E\*aG &;@N ` ~[KAp:8~0AsgPKPSk[n:Ebx?S3c}b!9 p %y$.曝ik'Aж[]!y1`+@rg}}ZTu~ m P0Y0][q_nUqv7AdwSICL8Sv8(eZwaq6 Ԫy LهeR_dUw}hæ(!TDJ9,ͩ!jpڸ\WP[vJgRpZkAt`w+9#u}`iKuK$} iGG8#6Ŝ5.қKa_!әPLeZ1w "fU'qbѓÊuƊ1S:ﹿ5![Rb9vfxV$T`r]b8N+oK_B'uIM GE(D+ycF!{0H{6#Q!\TR7ƆArvz:+ ]%4${wkLS.B7[=%Ќvk%CA@<]\ HavAADsAL+|V,I00p2a l|;QqWN82',ʩw`0S*b{zC*7[ <>UǤaEүL)dpKaa5?0+,Mm%E cՊlY>{Ia3&GOvpr &ܩ1Ǽr7~xtKk~Kxّ}iM#[!EMqqTm8(ɿ'&N=}Շ-ҿO0gS<6zr8z\Y >P'ꍃ&Ql{R]Z`(j*-,О)Q@ @iYJ]R?]e$p\u 퐪V@c*+΃!  չ*޹)5P46~Np'#LЫ/ R.4⹑de(^GN1סh%p4}ڇ V sd#.[uz'7I j逽I|M2Gn ;>|`Y`(RmN>+iCoW9#SVχK.4xӜU.4 p2HF뉭|^-d~ޅxtsx'1o*^$ю\`tƦ(кz/0Riϼ'>L>ZθΡ:,/r 0KԦϲ-eޓ`Zah~lrRcb IM?!{`Vӗ &.F9|+.xʽx\kǕP}7;IjSf!zD(-X ΪN}*0QKơƐ>Z?|UѤGH,;&);0Nv~Uc>ț6liKM1PZ s؁{0\91 )@@,&4ͣ.C[ʎHw6ȚLS(['M-ZHIpX91ᩜ1Q6HXhxh(HHXRظR9Y HY9JZjz ڊ:()Zֈx눋Kzk k( 9yʹYx*]l}m)ݚ ˫{Hĵl(T:L8+>MJ]-0`+ocT*qnݸ$(J\*nzED[7jKwHk -ԇG;~ĥ |8dK ޡf+TѤr E`:%EXMpͣ'bB2oTZL۪V˔PdIc2q )#$- 6e%6ѥ.>m jT(jtZ{Ym1QAI.Gǖ{,}&D@%̼q[7ωrTA2G|Q& ֳ{{G㧻DzRHӢۛ|;y Ѐ8q {a2̣K"LZ Ã37& RÀHM6W,90$w2b;D0*<:tb*L-LDRj# H 11DV >4NĤrfP!D2c>zPt3,]舋0$ inD!㰩Ά‚x) >dL'5KΪ^fN%Y01齺K yZb.Lhk&'%2P1k餴zg6vi4|[:gC =K|Ɉe!ӆ8`IVGymxbSK4D@~onIZa4/%6ʠ1nUメt taIɨM _| !Z OMqnVks.₦uJ\M3~tT|DWC^,y:M-B,DDW H1zm ,\MbRƩ\$3[/ZF#{K -gFhLw^I$D )ZӦ-/w)2vߢ_@&cI 86-1>䀉7L s0|j_:u*>`w%%l"㿛Brn>&Po]El]kt 7@ Y2RYVS" BU>0 1ܤ5+ N/d 3Zk%K &eqv'Yp #*ahlc̡!`Ip,Ј ($иEą0y1@B90@p QII{Hb!< H"&`8F$&;yDe1i'=iXa>eRhG7FeQr:{Qr:ykX8xĀS$6qx$"N3GhJЈ&lD1ش9/1! 9/ܘ-1 ޡ>%Ig,9R:zrp\()5Nd>$ zPL  `"F `` &JHuɨj6Qb .T-L!%>6Ѐ  |VH?B|& ?jcffqbn-Ǟ9;9'ǖN$"l(/5Gse[BRZef6i) d믮9([mXr{pM&5fxp-%1E&o9"|Y6XxA"hY@#m`}mCgY߉e {7 m5[3h%nBC2sO3k#NB BT8ғo@)ȁe2뮆h[M`Ye:^!`b$z;1[ɧ}sz?&M\pYjlQ;|]WAչ:PXl^M*8G/Ζ\\==j3kC@D!~zmJ pܹO{ax,.&`@*&yp$Au롾!5 @# `nt0r*FO\sEuk>Qls 0@r XvtGWUat C#;300UBLP\F25C/48lA*vm"|Fg6y%@8h\%k(pIT#?U cc?uB,x^]Cw~YcĤ:p%qg@3\U[0-jWkUxIS.gar!{tB0;r L`r-](s7b b,43Gt p!#+(U8J"N }E{HgymWE{cQ@?p&#=U`qX~g/8 8`&3|gA V*'p $ GuUx C[#"|ecyȋjބ]#~ȇwTU: /91͗@p72' R>}$nuGCp|Q7:(u ]PR5e R.x`{0b-)=A7e1DR*XH(QI)֚ u ÚԲQHe )@YÅ-<>ZhxfOtW"/ScbnhfyHu[ė0C Z ):$7[4V'.cv `_^w8ŅdMG)ZzA .`N!2HH&"jiZ]5VĢ=c(wTU 6\QkzpW뤢)zh&kDvQ" % Yt!9k*^ |{}7GdB\vãy@R,C d)jsYZd&YA 0juɋM"ꉠ%$3yWƹy꬐ )vm0 MZ[F  袧Ț/sW% 8s: 1Xv40:d0 MԘقd[縦SuF AIGeXeEb#_2oч7Ir u7FُqscҲv ?PU:Aӷ"үv4FQot0G1cQ(f5k5RDD$A4}6˶E%ʫ4pk2 Q G)4z(6.rW{Gl٭ 9s (IXٴFƥ:00C(l5O$L7~yoŅLU*B=FKL42pcEK󵊻B˜+[9MC#.J5ݩ0/B{{ RD3{vϪY2L ۶[Q)%i7EW" 9L]pw0z0;d/*$ [s¾i}HO ' qfgm!u0,J}YK:r Rx j`\0V] ```B`h'/c!GgCC|ZlY{JC]  tiK!A+N@P $ܸ~Y77|tH(`1 'BKGE2hQck9.orlW˅\d: |c(9SYDY'˓'fѼ%g'vBF7vN)c99x깉ΌuQm?/ ɣ"e /Wl;B@!]Pξr$V%B lG#QZ o5wb(Auư,۷P2pZ"X[D":J+2t$~yʕ'O*\K<#4kdAS 1 ]MpG!l_&t)o,,]]5(b$NVhG?#dpZǶhT[j &秵"ݕW|I u;ЙX&r'ڱrt+; &ollNIf( Zb CV ڨ4 r`mVu,xf0g퓌_?cMٞGKЍ8xDy_%`kMMS}iϒ,gWqC~:0fwX1b aͺpMfڍ6?d4M߃![C I.V9|d= Jy;@I쥲QC\HJMFT5Ct3U L]N`t^.^y9oMi4ni͊, |K^X( sO.`eX Jm>.lF rL#|p߲wP~Q MmKrd]3ƒZw6«*@](>e\ %>5}u=Ծ%D0DxVҐh{w>mt{]zIV^=!LdQzBŮ@t%PEL~x.^6'-qGB3fˮn<$¤'*oJ|P4tWcµd>~=_ѧ̣Z3$/dV(p̻4LPeaz D%.K"CC(. 5lOqcv6fY 0cM>'; xoʫ\YN`;q̅0z z4v[uXܨPY.=z>Bi|wsQv["?y(O0Heo\CeeDDe(e(e?(D2B4DND7ʃb,6Dψõɢǐ痌5@`YICհ̡*Đ ( RԩB>mX $q#+ծ?%[&4U.RPiCV)_zi(|$dp": "`raǯ \<@49H߄s 7(h0ؕM̗ E#6Y?Ox,ݐbٍT8g\mrٲ[[e'e*SeU(z+ ƇT:Վqj2\PB B@E1Zv/&OJ"YR\~cδ_NJd5,̈>Uc+5o6M$Mײګu 1娌A X 0!0(;NE2: ,v4Qr % Chnv̏.!c1⍒^>86G-l:F[-:jŠѩkJ6Zl! #adAN7C@uX`xvЀ i|ܧBZ8HxZ"`Đb.,:$lJjgTLa aSNx.}ɒG`\\. o"Ջ<]Q&0Q A[%E IF6P@E.[ sHQїW\hX:+kn^&o4)]ITFeN-At3c˔}%䐬(kGG 1N9uCr{cIZ"K,l-s fmЙyrg\c.A'PU`N{p8,3)>Xv%Ar!v~P],$2`@(\nNeeh0p$9*}:jR :#UD%P@3 %c?y/ g JDPPSȽxgV&j)@ %AjҦHsÜ6"  Y{$ZT*lP? Lf%۽s&g `1DF5*F Q%Y8#܈x};!B\6ʭjNv^] p[?K$b`{W^Wlz{.Er:sZ8r({P[`oJ)`5@ 6/QG2c X*<(H D"lʚJ£ƝU< -Tž1<)a'ؠ  gQg ݭTP$c񅞐hJrBa quF cHKL[B4b]Jy:-tOMb|>?6Vh2P e<*b3Ħ*սֶuQTŕ*$IL(2B^(dq63` qQLENG rSw^W*gdzRQ `b)7כdK cݍhKٲ2t Lho.R'D^k 6 )H*, }4ZW\W=XQ|wo!n;Iޮ;qm=?%c3fXQl:#`@6pe{'&0 d|T`FPyRm:Sy^ZB~Щ8(`B(pFggiLE 8ACF7! R*K9!d,yIEl 4rfؐmHaS٭iKX j'Dh[G*Wߓiew]BjQF3 Ak*uuEgwfYp>`qe&f3u sfWJRR[ DMDTG#BPYaQwQe,W!/@&dpR;ETwHf<*\| CF 5V8ǡFQBR'@0I8bKHi&j\,bf/ sXE1g?OBM87O׆gU DrrR@<(0Lx@&7b%"RGZD N7P*po% O 7D`I L!Ty>E48Wx30pt(N4ODq B.SDpz8[2Nt&ax.xC1>{z5[t!|1Dӥ mU/9P53 _f"7a0P$>iŽ; 87GR-(:@Ȅ1?{}6-<\aGhOzBscF26(I'^EAU_Ef!N(xpQ=XLㅈ>W[@b7M:%D)" rXX8{GJik0!Vk;PR 8aTU`.$"z4%R2Uf& [H;kG 7cuw,>҅ :$.wvT5UXN0cȇЌ-83iqX[BGW4;D @GU9E7‡vt;9@_q/eK!^PͣJS A6uÞt=_I@&>@F=٢xDٔI7Do\_/ Y ]p{S,Y: 8Cd\r!JeZ0 ωBЧKO#Oc0N6uACixq3"Y`)AXF(ԛe(Q(8 t7Z!ҊUoe|ؚz)6 sC6ة FZʤYHS-D Cuz4=BP1atziQUC3fT1;7:KBA&F&y x<zbv~DDܴO;Pƅ*ǥ_PQ4:>^Ex`@ci5C6r(x+A_ pQ7p:&stQ:àpW ȗt)2ej\#@eteBgC (=L#1W0aph&Dj$~R rLD6zCb12@8-s1k9")G@pUqɱxy18% XR`X{kUտ_ڰq_5v&i[xL`42mk_*L"v;L:rQk<ͭ̋,Oٕn} NpbϷq x9Z*|տ D͘A\(k4;]BGsR:C3j}c{(n5]izYy+ ;0,lTIdcMvPP [m-w ƽځ=@qRxwy:K$#_x B)$Mz=sH; lpe0<z ]ܟ ·v$jIG4 {-n/t 3n_0ac@EyzMj(َ|[gpx-kZ3F|{@wV]FJ1lm˄?8qbYװ7+-Kdt~ Ҧ5\AR d;R>wA`n~͘.I1/uy煨=4(YfqʅhٵNޔ⫎d Y0Y6["ql,nu^˘Rբ pl'%NGގs~1wWm>  .Rʬt4E%%7I{95gt%xi-em1=@Em@n~Y!Y:+K= $Q`ꭞ WKj %x.JUpF(0@vGf^qa< 7pBZUL+)u찷}HԅD&s,{ae)g[j<UNu8 ]Kè>` DoN}6`&oBTD,(H`V\_݀Q6HXXh8HRFX(H8XBBJYZFIyyj +;:kjkk)Xy!Z Y{Hlxى;rIj =^n+J(J.ݾMTŅ,/ - &v<\Bn K7Q%J 8C ^1cjСJu'|ii\FZfL)MGB+:0dڴt4²(( DN*3 ~((;%kBB-/pMmWl8OMo`?ݭ$YI9uҭq.ɐ碋̪RA| *1''_IRVZ9nSʱoلJfh'< rӏ0snbɉwv혳ְ_y >-⛜y„xv:o~}/Ya_8)H߂afu QEVLV]98Y}\t! !&%M B`)ceA^b8+!R P,ÏQ*$0E>H6-3B#X]]aJ$! >`Õs*,*I|`Hwa~͙'{g.IFDQVMi5裟B(Le2-?A( EЩK)Fg[יPӰdk+t)v9ٮ5#5̰UOeں煄Q;UhfN.d֧`6KtSBZ(E2'Z+8BMuPR;_І(.iaa3@!02j(J,UI'Ṱ),0Uȶ,rnHr}1<387uDE`U)AELY+}H7dFQ0j׉gd=7v ᐢt+|:)<]:-f?)h?3b=8`;VO3\K2GW7LT6CY8RQ5eF/lB.p@,dG0aH0oCsEqD#lA(h@@@@KKKTTT[[[ccciiittt|||%# /$& ,#)!4'1%6(##((,,44;;AADDLLTTXX]]ddmmqquu||0Ճ׈،۔ޛߡᤤ㫫峳繹齽eeƿɪ˅Է׊ȃنܜ꠻%IP^CI蘱4a7h j$c.A,!7QeD)!2aw-W̸\S1+D1~$/EFP˗ؑJfMaP.ڰ&:-2Ȯjݔ\~"6\OG! C.׭C/ 2jГw'd0{/ΓBʂP DVٯ0:\{pE !PŸKg<.]tPA&0tw<ϋNI^ ye@@ UtYWyyBeH|bPI)gaMC@ER"BW!W $bdb,8l(1"B` 0XxBl}kxvOA[`a4C'{okU)\J?\AV-᝽ +e"q%`@kT[r o ȫ4Ak({eI$Ƕ;Re+sF~UR>B,ZwWR}bIO]DVc0p6TN+#|k*l\YIѬ&[{RjIM0jR$RnMla,0 Wx%_7]$f-ADy V#zS՛BfaZwtyZv~%lcq|IM2fz"kuP|xo\%B/cҬ; zjbƦMW>|ВᅲP"$}kvO.;JHD]]e-VM-uҭ'_0jx5c$86|8 d-=$R$1hCnS\(=9S卛3ځ>؎܋ _zwJ[A7' K~N;򻃑KESXy( CfxAԂbPi;DmWc%$ [vgx 8D^z L{ؗ#Kf.U};omiI_!}.I@} ȋ/^EN?4wUf$+T8S`ND6dC 6"X 2\VYmrW~Z4$5}v$R&&!~%1=-`GkX|ǥK)]5ld-5v x`nV{E($jo(NP}3M3%G|aNwctT Y85,3]-Wl7pfgmp~ˇXvS^51K}Zf6A,8~j)g\U@(<30AS\/&i(؊wx3؁rHCψUը2TO2.XEi@U?@*q~dq~QeCSCw@*47"Z80N ϊAd[6%R`u plz3:W87C@u"5H E?`4Z(p2)jU)p6061ާre;( uLFM\A; 6I@IA)z3mY4;)v6"a\ `Ȯ֘iNC<hbV-įk*|]/[ (6VT9/6!Eq-ˡrXqFsԎ䄂$`2:֚Hx U;9 HJE@NJihrJYDj+)N)ԓ'Pq ;l]6}SaڛDn!*U`b #7C(K4(y$\#.e1 6{ICtĽŽG( Tű1uPwĕ#^tcF,D! wN9F;E؇]1c CpqwOmSLNZg_K}yғOYˆ]G;C>edxwXHPh=! OǴ2ӁŐ):tʧ3ĵڬkF\U4#emrj}ot!u n\W'=sM3$  g|B}b ʊYPI])T>حͰĠ?baJ#Ty70͏|CY\$"+DNw)۽ ='Upb0e$;{_lvK0\հ/0;m/L!AzB=PCNxdvWؼ!Xa`$/;v;tk,/Wx=Q@4y-4Xe)/)w76}"֫ʡ^ o޽:G*'Y`|B\LIJ^@e6޽4EѴne9Y,: l춸~aSwތO~a"[&]L +7`-;$c]Αz1﹆d'lD1Ȇ' ȘӄK \aw_4ڛS;^6j-J1Ϩnƾn: O3\VCa^_QR|:+WY͡͵*lYK<]i_ɼFoL+D1b뾘tR_\J8l( H[s4sj8l\|574>ޚ=,jR2y{-?7]8nʈ)ȿOڹ^$aCsZ͕.6w# 〰Q6HX82Uˆ28)(Xٸ!Hi: *jZFZ 2(UZ{J+I;:,HKiWEHJ9NJ1Ӄ蜣ެ|zޭ(B ?,q~QRu ;4z&EY.LÄ(<֙8N./bfˡE@)H$tD(@ВCD\\a& {-~Rמ302,fŊ;w,Y\bz˖+ܰ%#ab#nq/$snDt$WE;Qi??Bj66*ơvF#*!Z3dСk bmKy ؋jĩ/DQs.e :D45 K vA_:NibG$ BbLmjN,zR/0,8rhsK1011-<7%0z2ƳDu9x@䘫XhaeB$f P 빉UKr @!-B#^PE B $p2!cB \7xŞl@-IHĉ0TBX"?peI7sB;ƱbpW&k?ˊsDq&g !T|jY>^ >ޞA 8+xC2'E\T"{NT)@ Ty&ic]y6{5LLaݾU[231!JU1f9mcKDJr*7KDuh<\xDAH)ORt/%SJv"LfTh/Św(B[qWk$ ǃZ$ )!|lqEd]ҳ|\H`_Bv@TKa!zaEHV!x?iPUR1m *"pKQjMVY*H:tu>E}` $zU[ )NBꕯsPv[櫅DA.q (jBL7>I- m` "ɨ0T4 MDO Ej4UҒ|8d(m@BIx! sIDJ5 $VKXRK*y'XKPp=[xY->]nrûNjEC @Svv@*1 K &@7"q##VM؞;/m,לjW%̑Pu ;V#3A ٹJ )eBkܿ$ϔtL(:r hq]eTe:S29HGőzDd$ !g mMWZB[*E:v$PP$z3H,[igi0G i.P̒?U5VqlCHYV-@̸ R#f%u'pDNByI3$a.PXAIϕa?趃e AX.&y!TU~GI&!zU]-cZ`~%S3%)$sQSĞ̙XNYat:g#Oq}l4w Eb ASI#Nj[4Xk F?}] (@K@M@.l6M1fNzRNhxnZ(/-"A(p[3g 3(RT 'vX1,Α;e$B`/,8<ĊDh ZGݗytteN \)@Msq6qA1}lUXSvW4ZJ1c^(Q(MQ p"V:$hn5+IA\茦S@uXN= !U7Qf6 5>!ƅ SDLg۲|[\Ò\sGdP>Ц e*{M]VTum;Sf< sHYN|CtJPo[ Ə4#2).Osc\DrAƅK4y2GePB Ƙs0vgSQogJh2%yGCRt ;7Tؐj?gW49GE 31(0 Ɠsǔ2HW6"tiASZ2 URyZHE-tKL8f fay©&h(! 5S3'j6xdPSDKCa =(y:PId38Ĝ+vIGec 2ab ~AwwɠY(s8#I39l.P^u r1"`0 ʱy63J'fʗ; L3 O;[UYQ0qBQ(^UJ\]]R{Hiqɣ#(P-: PUݡ qR1x*w *uhڧJƗP/jV9:B`%Em(+>f0~Iڝ8Ffu9b}Q4^ƢV7 u Sp} !d[ IiyIAQg2%T8h=#1*>""0ƨ'3k\JXR4] vI$`}1XC PgwJ!Ap5 bK"H6; a@CUqو;V 7";U 0$ ylۗF61@100\ 5ibY0/8%>61 /˶v$   {/M in"F 4` @GzqOZtcQY<\JʸBU?s k+%_; ZK\iE[T b\Rb布̀8~)udo,;䙼M§D[@ !w "FWۻHj!*xqTtD˅w'k,0itIMG@XR ֔ )`;@Iʰ9 M Y<˽UR 69G) \oeR?@q\Ӿ f$}26!$0q `wPk @]I3Lj{#c%A+]]%W<@0] ª {t-"V$!;UtC:o!Sg Fe[|4^s3d05!T \62ey2Aw~%wl1f97p-h!̀RτC>@ y.`z\k >S*wHj^sfUK@Jb/9&< $0}dŒl9]]@]G4( !&d ٱwv;Һy.SlRlؚC0YPZݱN {P A6IGD†bjr8ue],%\Ѷ!3VgUOI(|X{ܽ-!0M7Sc`CPсڃЁP0<ǻ.]U, KƦ\= {3\ZPͻ˽C[EJ$1-1'FC2 oN<5Qr]P '%݈.c()8Fً;rE䦀 RRdscV(: z[;sEX3]*=tda3E5JU3Ci9.m$"1>mW &̓]ZC>97sj3 Uc+| ds`ȶ U{W0Ǽ}Fqx*5HHk0Vg2[KJܖ ]pP6B AΠ*?9e m*sk~Qt!g(@[~݈Zg.5? kl vp܇Jɢ Yl`fLS^ՉM<;k1VQpG؆XLمuߕ=26 ԅdב``ԍnt cj t(''p!?l[f"+{J|l'5(i6 ;q5s7bpdi4S| 򀆲7Z[b=">ꓬ̨K:3A}jV&͗: )s=ɸwrW!,]Ov/ S":H ia&AV x| ,?DB< Yphr#~h~ S~ :}*1pU {ƨ@3P@. dB@ShnpiY]8B >rqb증1Xᘂ #;8w{s5<_.? ^0w /]&mY€ x~\g SOZbW)q6WT C6c ;RH{.̑n)K傂8T|c#c 0F XGW.#R"aAF\AxO88b;3vuotFo`5b54tI0vzX8|'' wh]cGbEgH':"sdhM?0G <X]~r ^XG|~xn0ep05SWp5` B0]1V8P7C5%z&E0[ fm gy Q j('mdDo%s "HLappksoѳDuH|iz2!Z)V+VÈhRX;]}|5^ghATRB~25P;4hH?]uD}oޤ=gt)}%9kipEp#+H 9A L`%~{hxP(u6=17vcd1S{5L|B=5.^sCrI''3P+.{q5_r1(y!US0apT J8K3s!w'_CB1b#SN<f>)2xUT0CT0>;ep{dRZxV~,uwqP߸Ȣ- $Sz] +*U(К( b U *oc'>@P@W'] /Jz WZ>0 *u 7u X(P[^CBCx6j楹ƒTz.!Fw?Jj11/j|f.sƹZj 7#%;P,p<`0A@::ba~e D٫J:(P%SM`9T{O05^4A57CB`vAڭ`8$xW?)OAQ1*9'M@)vjuŌdCUGK`fDŲ/h8i0-F ʑ"1A (]9+U$ zzt,N!<0Qv7Ѥ<ĕ-2]O>w 0@Rp5XM*tOD0aFC 8uQ,)I3C߆[x "I %2-*. i7q-odșL8h_(-H]QZw$V ?`SH!fx] |՗vԬCfmv;Sfa Iؚ㸋P:H?.)qCWVp$ YA`v97yfT ;ifA<>Q~ B JU[}c!AD땑˴J |Jߋ«X̠gCU`+G!Kp^FA6b<m*Ѓ!zʵ+CVDPR&}P:K Ŕ+jҤ`X8S!CT89wʨjFD1=* U!D"qÊ,Ot wf4A!J==*kf5pP5pueV& lɃ,jZQ0pl"g ۨ 6Z^L; P >.C E^C @6N=8 `="NDU="Rw g_˦JhRНUW5H0, ^ 2;,d8w43պ끱yP` " )WFpQO;b2/Y$R;w@Pu>!Վ$} #DΚBDN#}SP  5*fUϧ«G 9p fTM!>{HA7 17 kܰURK͞:b/* Fr;-4T#\\ "㌣;in|Fpk1C`%A'~9YG*qP:5@qZGb]WRrZ2q^؀b'@\~ x(Q0 fKDPp?K~~6F[4%PR RCl{ֹ z[RPD+)}QlJ ;Uj`@[FfP(0GMnWr 2*\j`-[KF.! 4exx!rk2:[ OnT_!?ـ]-v_ZeE>oUD fw7w[>ty򒇻,2N 86"MN +s}{Zoppx铦 4m.Fz&;=,ORhkbro)8dYڻkURZj"9+Qv θE)UWi[x%pݭ[ *`Y/σ20ӋAjNڍ&vO q4U1ɼڀP&81hx(QXhIIXx8iH6T5JiyyZ) {*Y*ur3E;j(*H올iZYxJی834U,l*:LΈn>K;9 <;H;l @K \vA E +X228k#}"XȘ3NQ )%q񠘨%ȖT\͍I-1*xr"@tVk24CAE6.]eēDm2֬BI3,KRY#rP˔N]uƨdO}*Kj\XU:!?Hʔto9:vRs9:SWyֵީPT!S!**YК'K;-= c"y~ Q\Cd|w~Wzb)[ ^J{ŬjRFOh!UO&%A;SdI p<\2F\"`p"X(hؖ" BfdrU](&4’0DBTH/8A`^e5Vf`]gR֔iQUId&"H-c}l2ä~Ny4nve1yO>RPãեR x2^%Rz*Z #$^ t0G>v5Ii!QFlvmlMP9Ѓc9UؐihomԀ%5q[)7]H4<'c!sh򤟭|L%d2B>,ŃpBs#ŲCj_%Y2'w)4`TK|~#n3 /Xfȁš5#/0:kζY~p:M/=glQ\(ZAxt d' hpIQVXLэٸřы \oV[c֮ \0Włtф|7kCh= :B# i\t 'Q?qAEL 6u!n_`>W'~{hRŋj7/z(y`qߨvb|odEF@ߠg@a=^;ȌaT/?$|!+':O"eq܈Xx% . S+ᕊͭm‡ :p@ G@ԾS!*;>@s ,@4))g"+|t\@ ТCS;z  h˙N}I Ju=rqnFVH /GEdi  ŬHڔ"bWh)3,NbCD)؃"[21 Yry%5弈>'c6 [cfIJNJXyC|hu|Hj*AxaR!A`|Dy Aу4U,edD"3E .4 +\Aa)*ru\ CC!!TH֒42'…I2}'{GhBeNAk(Cp biP #Ɵ,="iyzd~ilp!H|X qy4]]V `Zrzu n(l0wpR -W]!d׮LUlSqhϵ XZ55iXY3\:[LU0kP |1S/ [qT@l8Sc7h_^%~='Yb{gԛer\ej%/s[(K |`-h~ʆ Sx2G6~UYڝ3mb|bNp9Kbm$DZr|寻0p>\XU1 V!H4P6 8x /xQKOK;oY8^\ BHbDY@  } }w$qZe/RZ#{:IXKkCTL#>AS49e\#WFrtmu%饕ل|֫,ZjhHRnG`Xհ,)+~ϭq1,.MdnS!I@5jT ]ݹv$L gzs ۃ2vJz[#@5.@!,E 6667(t>+{:)<]:-f>&i?)h?3b=8`;VO3[L2GW7LU6CX7EW8DY8RQ5fF/lC.p@,dG0aH0nCsEqD#kA(h@KKKUUUXXX%# /$' ,#)!4'1%6(% ##)),,44<nYD{eX˸%{F7yA2hɕ,,aɣȋ,'RM[ϞihO>뼰YBKpvFE>QBZC>ZWgn|Tė[;WJg$^Kkw'`^|͗f!O~wQv-ҧo㡃V,Z1\]%i*R}!J32UTbWrsuםwↆxO=8K'!L= X]L Ht+fxaItM|EP,]6'pBĜrY'%)//E5w&v0B"ZkAȣ%)Qb#vZnU`٨t M{&z*jSh`FKdH#P"DJ l0Gx&Y%.Cw]RHḴYHBW6Sk,ܢ oP `vC!ԛԸ*UX qlpDTK٫Tz/\LuJKUPT,{'3T4˒[T R3􍹞RKEB(q\Q46-5C{6`qzpjL"ZL,z5l]Ɋ1R:܅{)ȻBfvN{O_UV@<.l, y ڲN8g"o(a?טFWw{~:';+?8X bɛJ?yn@X%b 8 V2ȜC7 q̕T 9 &CtI{nfnF_8L1j[4~pd?1nъ]4|c>/ C"hDNM,@EF~5S .p@:퐄B JwE2d S#&9BX(.`?yD zڄdCVnDeRXw㉐N#V… 0 X s{eB@Kよ ,-k[yMN *(|IMYyNqlJBGNeәG-(!eA轂ԥ90@'|EYljS[;Mt >,婠)Ar %ǧ~<= O3Qxo@RTk̗tvIzt(,Uz:u#*0o'@5,N*pʘMwy/Bi)*WԚ$%iar&OFCI'6uR"jhԂ Uh%Q8ɂ ,rU$XHB ^#o&ƒG˳/V*znm3q(t[V#V Ɋ=U6NbXdo_HBM83U"h%{LcLC=dWo/"0}1"f&}-g)|92ԉc0];!uL5V %g-8,Uzy*x~-q\֝ ʱ2Hp٣pGg9WWqu#2~fZDCZtsc*z6$""Q2obTdj٭J'$b&IhBZzaM_$ (\`hgM_q_1:eܥ(^r#W nj#cNI6AتfhE%A`"z:PY"c.zk7@sv" HhNq VsyqCsZB6,$AӑH cQLdكSoc14z",QD-FD΢`!0Auu1ѧ51Omsd> L8Qk2w (. p,=т{=X FAEP#d= ygܭ|13p>E Ta"a龹L1Nk%ju]r&?7J  0Ѻ(V`J25-s6o~o?KT 77D n`ee2Y%}(KV?CCv>:Z&!&0*`'PFQx1,:r5#,l4hc3 &Q/6 ʧ)BtG\FEc8\gOd*p逅&%C +p>jFkq=8w@J}_FІAm7rTY2w yH )Zw !PW"\MXdRx!KpQ@#Em"'΃](E.E1!Qp7b`AxLntvRV"P}"g=[?20 dt "h /@k6$')1"4,L`wgRi֌*K7dj?1DJjA%y5o!̧thT\L `\7Pz5}HMh9SQ3%6Q [guu10LipWИaHg及5TCT(p(D@lKYǂS8q#CH@)YhFgxw?4% g@ XQD?)Py*ebT/~z3ЇM79iO]%07H"đw/@QyQU`9>"&;swD> V>ѩ`xii׉)A+i4`.G>t9NzhR >S2""PvZcAF1zƵ#wa239EpX|Շ;ěf*@a?< ūFXu7IݡNBvw BM2bd飇pBje 87A5bJl"zj pJ'IX$q|Oh2\?y7&g3YW J0 rG3Zu16AJo 9- "0DeiulJ+@ nCkx%sKPb'nVE`,l0LW-gڪjxC23oF2S"!dV2lJklo7!p!)R}p9d*-fy;vn WP jb6FTHY[o2R*,Tٜzj6<v!e7a4Pa3\PCIILP9`7:hM}*}qU-ywQS(![3MCK[o5-.ks8d,5#&/\CNGu!gMU{!=@FҸHvlב$x͌pʖ?MK-ιЏmXrùhJuO1'YԁE1pї'#jr)~rQ<27|eLOEx"ty(+'&p y5$ȒRwjp NNPnd.Tݜ`z|\lz[-b]D4O^Sݭ|NbN&,1 0j;#(p>GBem}u拺?Z`Zݻ΍ÃJxW"܍ZQqh0{% nN~~!4xꪡG ng;nQ~V;݄fgjuײ̞<ѕnȽƮAwlp?h"&dӝa׏.f*a1 SpчǙ@ʑ0remO^ڮASQ]]y?}v&^9)-V1YR}Oߚ wګ70PzsRB_di04ю+-=(Ep(&`x_kg ȏܰ8EQ)I<{j{v"N[:IXcKրySnUCCO١`"a#W0\Зyt͖M y FQP;kՒ?8ZD#]+дFK`r=.1<{:~%88A BxaX%bysiy鸨)$( ˸Yۚ ,x`I̐nQF&)J}&̤AZ]¡˞v& |5hrzv@ !ThΫ̜" dɸ~4ХoJgi\o;RY+kCDߣxz{Y3K&;R΄xWKl"HF/`[woq]·Q~"/Wх- M:'2HSDve%XOBa]3]s-[ lyJ(RB80!qQdUc tߌ 7[ixP@*1^b$&1-2h#Jf9R=!G%D7{DP&#Y0S964rx1Ѐ6+)$P{ P?ɓX SR~Ugx] J(^ GAA9XD EC)Uiq>Qt Uh0pg=]$`MI @ >, Fw..6,GH^7jQ$ghH ZW Y+!`L \KJ(9(qcy\('ć(1Cz -{HZBK;Kɽpr\l?S|ϡi6Bupp+U aXi"\ZmP suG^Rgš*a0Dhrp1nE7f\&2,.q1K``[$$1Bb` #tFʎU UP@ HJĔKe9F P0Aplx6HX+S_*P\lBBlH-{bPfUڰ^R?ENxќB ՄEm DKт 8l~)KC8AHMB$c"聕 OaZKD66mLp;Z_th!*iHu`K9,Y CnTR#{ xAЃ t06M ""V4P$Ieg =GMRUӶɵ24PE`ltQfBka4<, 6$!"S %P/Щ%|z$ɥCO;? Tu^Sa)F9x(4i# AtFiexhBIR2yicN۳LBf }`ŴXբtjA T229| `%Ѓ!D*AB&S2nT8`}ԩ< 97p Q^D[x =@- >'] ‚P,oD L8P.i8aX= ubGDCg"bp7:IY*x\[N(@7v4 bqm!kFqt&O-.,9_7+rjpIp`gbʜ3E$ d2/ʹT viB TO!22#lEl {%X9\j!9K8V*CSSrVYl̖axDM@GoĸR" AZ`i!8"`w"P\|wTX"w'ix@/ { c Tp4p Cb0Zg2fEO`P2!,Q ;E(1Ru>'\YEװI͠OUwfUsblA IpD`u *2W cW(5Z`T0vakaN@hs{NbF/3Y0 s& 4=уCanXr057 ;+`FWP >p.M Zf|3ffhV1!* }lCQ"ۨ-(-`9J>}9q9a؏7qB3!bUp=9a?K099q#6()n,a(n 3*$E[%WS<"+3`DG|KA';Tw V gLFp0ـ[fJp( 7LAC+0$``{UXHy?Qzj?|2[C$d ii@q}Zce|1i+iyC&zwKq>0EW#_#G x7`429ʹXf*quv?=w>mgW f .x yy4`3JԨZ%_d4@b6)B Q#p/7t)h#  [ 1*(uȢ Y`>@ ءC@9-"P -yK7Fgh6[KS3 !18p (">`:aUQ,S[@PD`L@9fy0 s ]*J&X%;BoI`rZIKB6ЪU"q@Y@Lq._s97!ZcdCz6E@ZKVPiLGQaqD1P4`wq)S (`s+PP\&|Tbv P_*c%z'5Y,R0# y&kj>z&G@}6 8Mr<2{rST)\5hr_h&$БS79"ZYpz +Nks "g # kj8G)yD_a3m>HnK8UֆVKa۸u!ڥV{Ṵ̑67X@(=*-~0A @@@Z" Pk h/dȒegEzҴwHA,v::ϥ |Q)$j 8^@VJǰ`:"HvG ےɹ6 o#\) /&#]a B Q]čb9vT;B>k~lEk*KNƙP`VV2]:jb3f1Hb8_8~ =P'lCՉ+d%RS7 A IDY+9/'90 F"J"4 ;"{3s GZ ɇЇꊬy7s Mdl^Xcq]aIБ gفF<9 ڎZe50M k K" }as|J 0h `EoTda(Y'`UjlfF^ {쥮oR"ͳR;x*@@uՊ{tbU`)0b>ġ ?)@ӭPu8i_7N? Ȍ 祜9p M[59:=.iࣧf<}2e`DIS`/~yȝ vi4QxMWJ@Mz,1$-$PO*%z ʓRmO5# ~Mll;qC*nk?);(2m`M#P أH1k֊cZfP>/uL.Kmp5=g`N Ʋ"p+#%>N};vr|?O'*Nd` ʥ09p%8~_q :#y kdPgpD YhUh:$.IǑE$QΖ "-|8!Jq $O渷v?V`Q5sY"""ZZ9>"191"=""> >>"4Ï>Zľ΍2ȓ˂ڿϓK727KZ /"FZTU"%Q)֪Z5]rELXR Å=2A ^)ƑRKFH 4->mGdo*LfY6"͒JJeMD )K %#p%yğ$]LDX$\Jt,d԰QۚſDx5+ۆR^hjl%5>6#&,Pk&~&C*M>]=r\ Yjp #>{ Uh؇7JB䚊|ޭ:⇌`nVBEJZVlׂ-5Ey,Ȉ&Inp _„|fLcԀVi4IU"<QhHt Aց);4Уv2R}0V Z{u# EoL BG4 fDK]יnO &hw el<` ,ϕU4!Hj9AO I U%٦% iUhOlB ~(>M,2h=B sifÍ1r:+e#C㆛4C\ ]rֱ* Bik4 +#k/]( ks?F7>ʳ Έ"̠խFXU @N7+'CAֽN"'v-ƲJV'>l+ ehEEU* >v|X^bJrhC&1q[-S'1q+*'R%' UT:S4rFI)j1_UaQ|RK Ql>M0qYfwBcHD&%iat&2qK4,HYܛ6Jk6DtOˮ5-B(}CHIC kI3(DLYVǯ_scXw cw7Fd!7 %~x r؇xݯ~䁐=73"8[PuSLhVHi-; v?ci_"P.?@ґ ˆot3]@"hpD,5f9 BDf@ ȴOoTx,鱫W"`B*& 8ȶbKpG+&pEMBػ X!C% }EtݸC&t㭈0 }ĞBPamS7>Z!kte%*QQURpLpI\bUTM6 ͮn LQÈddO@L!0ImKcH6Fj0Dޣ)ZOwZb ~4lS[(rɒ(&7Z C(]0Q9/nBTB% :+-\$gR[l2Γƴ6ƛDZ%>-1RKWQ6H?*Vx?W^tT0iդ䡉/5t&N%n9,:^0PbA1H70A+U',C4’icN Rj:Q#M/I QA!pcD,0 7`> =R;&!jv33PJ^U}c TD4@oEh$^dSlvIpan͙Όz1F"mv~ +d1 AB: kU!/ptᴵ&_;7 ȁZ4|᫕ 00B@ýoB!Z&` 5X70UW #e0"ACFf}$ wB7(bT`O X*Y IrA|ٺgTĭ.ddl@[%-,Q|+.%RJ X'=w1yҾGHUЁ3q@ ʹ__@&#҇>kL*THtnuhXQKWfuűFv/JʂօA+ͪ ꭳr * B^kۉuW. ٤Upأ A$6 "xV@xqe2 1K!70/>7Z%F=&0,( -%'mwR d)# d4J!*fq|d'YէZ\S"(k0ff29Po*Fq?Ǡl]W< eD-L4}J"7rnH^;vVhU 17"&SXOu"> aJP)#&Kdv cQJ(=N3uBp50 DdHEt腋5 7#vn@Gx3bXtl@_2z4e$P" K RX' IpE& zy.ȧ=8TAWF1W `kPNPryCSP )VMd4 4 rIMi #Gݨ[OYeFj:e7Nc+A@fAfP *&0;_A&ElC L+ %rBrl'$S** LCP7&Qgw:@f ȁp<4BQ#*kI hfg*i:u$M@"JS@%4gY6|j--!0?DXs^ߒL]4{ ) c8P`:Byi4L0"@F(0=X[uhQ#vhP!GB"(Ĩ!%EEfhp ­fUNp5`r$E7٠D8>@ #\v.rkpdZqhJdqPJX7MsNTZL #Vy  D4i0Zp<h0HZj<'TdoJV'a erV@)2@@+0=@&3'Q`6G$`ߊIlnPIP !7VYu\!9RI}FǵNq)K }2|+K76ƞS Ah7379z"X57,:g[7;JE`.BqS;@%Bk įB`U$`S]yԖXT[)KkfL[iaKSx_$ t=An@7qٮ %KTc0>JTiiR]6P?"`:Q@D>yz?eI@JjMëtm`j=* $1@+l3͔w+ )%$%)S<UpC/ĒM>Fp<=RPY>h ¿?=: 1yxZiNJ “aҘR$l95]g_#KpnY iH(b,ʔ2PAt\kDvX\TpXwn`2'R2R 끫 ˚\|kٕ Ǹa$T{R膽Fڭ.@680AKEs4x)jVYa .$R&dD،AhqKT$0\5.V)fi-їGkijMrOη]9\H& A DY4I^E9Ts7x ֚BYARJr4]ܞ q T\"uuJymvFоڵ 5Ug.1$GrXn'g,2WjNs@5"K[U8Mf\th"0'rţÀ%8H8Qa"(#""(Rx):I))3:z(yJH[cx{h*ɚںXሺ1|T%B] n*NzX٬== }JJj<o/-IΖz(sdؽ13xU$2"ġ -72ߣ"X|ΡRd!Y%mэUjX^6`:rQdІu{K4k4V"#23Z"A#9٣4GLpa|T%F_yBBnOODEBե8PZ8IlF-6CvPi2Q,8 i" 2`P'AS%zO}+eVlM ~+MS44_ {(\-i谂'V "dqK|ˑcWYU#i;ViFvqo7vJ}A}1v LA'wh_!`cT YPqh: P -Csl$ .LrL}X7 qLa{OS dWwGCZ$iۖ8:`PUy[RC06&1iQLg9u',Oq>>HD՘U>b\( X0A]"EMܹxLYX^LCEUibEey582DC""/"lJ3q0B*~PC'Bu#@8Fڋcj'+C'WGuА @$Ψ|B6S5`$:Tqbu4 I|(L碠ZxA'`w2eW"+BtzNdʮ >L h靉7S5!qE=eiQ#ȁ)B-vHP h'20 W:hcV`ŕZ˶uvnfHhs+SX:( Jhe+]_<D8bm;Q˦HD+)7F!ANJ-RԌY̊!ެ _I걠-vTqD%ZfK.lE 70-'jU0P+t"%A Xaw& B4I!| 9ZA ?@Њaj dѢZ @ԉ ~VBэfQ]")5ЁR H_^$É`P|4 cC3aka=b|+2%FkED9wZfeBuNJkl܈y$WD!BDtѸB|P#UX?1#s)|ErW4e B2sRD h!;5fwH2 ȼ/rswo=YAH4ΨHlλEȢ^j[<$<Љ]*Wȉ_B5Ǟ{r 4~ݙ0mBN4"$`)hzMMHv' HGZTĊ\2\)mYúq/$=/:XdXŌ9 k! 5!st5 2V!sb)l8k` 0dB=ppݣ+ D d[Aw{Cd"Ag5` P: B\t`sS4rt-9 P 07? c"0U:2iD 0',.J<Э"d㤇}M$9& 7G8Ԡ-ʅۃ_*Cd@xI 8QcvF?p(`G:"# p b$0Gr}!2(1Lb8'G(0G7Xx1Js -1k!A=P.; oVcavSt*R_#$4+w%.Qs"P!@8 9`$)=D\my2 Z0}7cqb,T~b>|ɇd(Ng_PZ("0`k>^-ЇKS(0wÂwdqh Aqu @(aw*ffA~),X7#x@;}(6UgHXlאׁ,y_(+Q3Ay{=P"6P`'kH`1 M'?RF;FYrF p^ѵI23wP&9^0T#al,kh6_w@6 Y N ofg.EfRc,g:@-jT+Ya"X M>`}d+Y.}1"~6ׁ w3Ww7P=u"oՇ)SѰh郩Ffv!I Z@& E1,+u a}q֜L9gU͐lcF2@10RPuS1'IД`g5u JsX8T1 ݗ :/A7ó!e/^$k%1!D9H=@V8I㏂u}3yH('YX>= 0@“ v)y'@[ʥ(6)G"-@5Fo>(*y]ldu"!dP @@(Af4%DI)NDj`&I>Ѐ`&Xu ]\WUc$- Q"'XbYP|p 9=)*ЛQxG 0 究)yʙՌ[<,^"*`F**Ш0YRp(0 =I8`F wѪa!QpC6`&@į(|#zA&ײB ś@ > Jj*IeHY\K-:`>{ħA{olPp& $'ux.Q躜,j+3_pEPfSz[OqGQm{j  Jh룓˘;t{lF`cT*Efئ\r],y4ؚ0~"%̮~۶n `:t)( }-ƈq=gR0\y. Ƞ"btͷa}+]TPCQp!)dH݈tX!@?D X EB Xv9̕?ꔥ,u_uhaքN"Ly;XPE$oN&0/@I2ȐZ b (`=] kd#Dnq;_rVQŠG8P Y n@?"2+ T=,DL!Cnx\XDHp|9F rp{,$K8ѩ яC҅']`1 XDKS0yiJQĴyqlYq1ӹNr8LzNz`f5E jt.ىOnĐ3B Y,"BP'G|mR)Sd єIT#+'`? mzW: )(`p1Rs !AW5"QUw BZB VCbX[I0d EIA`9|+2FNCrbA?];XzѬbh pgh :*~xM!+ :pAxiI* --&*g95Í К  [P,VYjHV07NuUyPdfW X5/RxH6 s7U۫D/(<TNq3PT) 3Q@/'v M vm2E$ɱ@YuW78(x@`79ЀAˑHwqqm{Y.H_Tp"T<#a~ka.|?equ̢QTc\0IjI, r@n/@ mkt`scr:(XA-5V̨i8#Z;`Su %mj1p;rvQmA 9ÎU\5W}(2аB_K\:D8[f{@`/g9k-On~m3_wyY\ʓi  L_~Y|Dł^0*1dM80`y}]Aȣ!s.&0/Ā)A{lS9>~Ԩ0B̄S.u7qj*ٗg,p-x&P nT4KLn+l2Ng e C<d;-2pgP0 JE 9Da6CTR}pJy-e&X=pjpu#3_Q10g0[y*oSL}O7Xgz`D?@:28Uud!@@"<08P{X89^BN 0LNHB?$e4/XE gPi0Q(cxԔcMtc6C7AFw>T(0@h2w ,pAPrv e!UGg;guEbaHX X8 '_90?h BkcWS(VJb[fg47hKp`C W49foZ!e[&TKGq89ሲ@ t\h'g%2 1\4@p$cYk)8} pf. u81/QpP6Ak1d; El$cPP'qb0q&e;5_93 3qG_…RgYObV 1S)M/PFXWb")| ` "ॖbQ553_#7 UW0?CDSP>EaBUFU(%P6wsB97=D5Q@)CPIrDQ@SsщйIvQjHZ] X4`5!Xr7*=0?O8rylIg38peϑ;@42Yh8=?yt}dU"2svc.8\)1ZVp7%`jyvzӸ2<gp8 e75Squ#9cdPv{e(Fu$FbFViX70`/٤:@0/$ 'U5?uE0/`P} Ew3:4wE< V<@4)քC9ţFg6mC5¤!D"x2cx2@eWg0c07_`OdLh[ݕ7b$8Ti*=Qh'7GZosy"(@p #n:``YavArzlbC$EPc1P I951u'xJȱ_Zj hU?4:*THЮH eBe[Ɋxb 6^DJ狨Y:,]U9@&uAX!7J/%kiYd@;Ai ݅E>=U _~A e3ajqXqfdS}G_ 51XbiW>q3A2DW W4:*qzW_'0ZDP]+a ) pFwd4 d g4Vba7H(O  PZ'(pp]U prh& /`E8W2:3_z*I 5O 3{Pa8z5`=l9kl9  ?ydUPe,rF@A9uR`@ʭJd U_^89PrI,דg/T;` H2Q0cQ'6LGh 9h`~!>2iPVYK?K @$QyYY)@ Ez`آT†;DCSd, q`.6 ; Wuh]:E.$N zMT3l"05D1QLIӐDCL h| 3E2SZ;Mzcsue8M@Qĺ\RD2 XE㉪\~qGbqQ`6|50n]l-p2"G78V\rM/C;g.@0=W 2,E <+{`To#K -\R gRU"95cTk ПÃH=Z쓠 0i{9M 'PTDk 0,5]9p&E@EqPWFmI3 c%/ =gMz0)yOFxJ+Qp pA(8ES(e|E-p=3BY"K;5p/OzgR=U}ԭdfZbW =PUp+C3_Lph \~Q_Mߝv4mF= |v*)Lq94Be &1P40m8C;\ǝ>k=PH /GMPa2JbZG7|\4Wbϊ1?Ezz\3/U&OfW/睤eBٟ `€PRRRxXTCihyֱHZZ:hjQ$j+: [ * \l1Iy XÙYYYXB; z\ZK~nn>L,O[ei3;֨'aP[n@ ]>Vd='ѣHdff0F<8DCЛ744SfX7z8*O⹤AsǴ)T 0hӔ q(X$N=ȐΗ>TN>Uzp Wݼ %*5 oV *"A`^P3"ҏ6C4Ppp@^&8X$<}qCz8(g jqro˓[ *tyVB+Upr;_t.i@dC]yUy0-A.DL!,o vRbE7EKj=UA?P@X  5 `@CE0\-閇RDc[9Ue`׹"k"-5 !Ʋ(܀ +!TMriEɝxZx2 ӡ sV0h M5`p[䥠I%)'HNIȴ{M)|%SHdmAO!DFފp--V%h4?)u3^Dg~eqxf[E6V)04]* &<a J=*3p`ЊU@FHY^  >#P{/(\48D!T^GڒByNS`ȰE_Ž:ѽ z8T$*"2;0(q ":(+pN2'j[7tC"Lg I5^ #dFfr x pp1Vg +=ѫ}!^=@0Aw2ppT.MuTr0/X4Ax!|<'K9^0StBj x 1k \pXH0"-? 01ĵ$D1Ev`k82Δ8 H݀Lӡv€:G3U⨖Us3ا<#Qe-sf+#nDiR0(gX  I`Wm +|1-s %2,)kkWq"ye] )' B5g < F| C¶'Mμ=¤,6̣L;C==q@; >Dͮ5)O "E, ب1G,IZHU=j3s% We M͗0vR \;.:Bz@2ϭ;+_0\ã)0:քCkh:\:c5^aB/""@Ihnًkȓz{rN`Lҳ[X<ׁ%1y aJ=H<xj!|EtPΤ_K=P~}pL H|q6g]@>} nw~g2 X%3 JKE`&^v WX0<0A+ n$4c  ZbzU%(=-WyEL3@R uW,ST *}3U!NE_$8 cT-:hM @+ T)( :X/s-GP[]=Vm@)eI}D9!u,Z]LĤ.[9(p>`*cډ"LJiҮ:^1N+Y%8|Nj^0?#Q# Q!'g&<2~Xym:AI,{؏9SDǕ?:' S'}QR]PLe;Rh0(-P>'N_ȧmH4)۟>^@!L8!aPQ}r]\Py P 7FM\d3ҭQ{37IzU3ߍ}]K$2VO @R PL0A^")@//O3wZN95E (1d) pX +=SI0R9''=ΕK2w:C RM4^;@Qc(י9eJE)))(E, 3+* DE@hhEhV EE  hQ1>E9`3)2)5+]`A9\И̥,=(-{8}*ʗfL  a \=d֡. tq L"Z C)'HHKVXp USbs>>&ig G^Λ,;wgZOH?l@%"8-!Y: ?_U$ '#0<A&[tW0FEB岝W$D уo:H+B9MS@iRj(@7EQZ(&4 )\[yAS՚ZdL|6o'c{ @D]*uh|a!\q,P3<`O0ê fƸ)!P9i l-CR G̖Vpd.% TF,z@ u%woeP1^htu EE`FD%GW( d`$DZ'aQ㳄dXV2D MPPH?"!Ea#g0L~&7UdX bqQcA% C/#6Xr(#>WR{W+TpHո16#w1jW,Bpa$'B Gp5sS'9Oɀ AA09*e8T3()ekNp 3QU`'؄!W8}i2?aE[ЉA@iW\ϸx QCsq g0'e ;8[Y2LKPE 9HM1gD>7tPx ][YdVK']g{=)Yȇu d@eI9f#cQG)X~{THXT r3x}Ӑs? _XE~}29<^}al9 x}5 `T@ mFh= [4<1@@ f q3ORa8/yxZH;XzqÖˠy3j_,b@(/zaP0ѥ.84'cAO٤@aN8WSg +7/ ]GL#РyNQ-V]9`5bVW>W&R2/1!*rTk0ڷ'P"e{&Wbdc&N19h6FLJ4haRX'qXZT FL$Ry \apap7) BRlx#;|`My~n*-`4/V`R԰=rӿYzD8)c0 @PEO l3-=vQV qlň?# mNxEzag@C~5=<ǿw^Gd{!`CouD .pSc%~ܞXzmqŞ+9KNe S4? 1Hyۯ v!6P- :o0չgZ,< 6a/ӺN,1@ȁcj_C)0Q# _z3\UT"|MQl,u=MH@{懧dPeʤ5g0'ΡX#ӝ=U#W0 ;m?i P,4$6ΘPGɹ]/˽} ݏ*QG yY5EցFXhx(H(8HX)yvR"Ay(Z$ZShk8ۋ[ۉf9;Q -: zjZ(M!SD%.,+hkK}L P]4x1ɊVհAH5PQVAuTSQ2[ѣJ@c? 3n 5)Qhh<qJV@Ë^X4tЗ@5!O$2]΀gҗ c4 ü{ 9oɘ9\x *[4f1P}E杴hM0iFMU]PdFGL(J ߸2=sVgBBhځU2CɴZ%yRC )];0*S\ P7" d4aAE{"Y2 1OPA!=3U)ЀLg8m.R0bO]FI:@q:8a`Iɕ~!'JJP ؀] Rm@sJQ)[B'M2M?I&ITyv$pxgT&zѽ2&Á+&bC69 %*Qe*PJgaA =tj-{{ MD ki霒+ i2[,uBj6BD A @VZYXRyG%+%r;zQkK\`;@U`p f,d,lH?ދFo@@Q de%@2aE 0d`l6sF9^.`%" D⌭Rx?2 ـk--+Lz@" @@3Xa1@YCBc*8PD-^8htaEh<_7V2I⅜Ș?b@uvZpAVBhxt_t'Ϛ#sUB@UB8XA='[݊hp( Pf 60Bû&kf_>l"rF9p 8)3>mN H(% P @qyu) ,aϙ[Dh >ACpEv0_SX&hY"cn(` `(s0Q 7#TDBuXekᏐV <8㦕T !7̕KxV Q!4BH@PAq/ ` `p nkK9-k|)!2Y 6 pB6.P@ p6r@HRҁ`L4&q.rx"hJS|w[%Q<"fSrT2(02P/|gp)P6HXƨ&V2 &Rʄߝ(j$SL&!5"9pW~!YSMց XDd6PBVM{@UK(i'o CH4@pa3p:ƼIK4t  \ B.(O A8ʚҬHe=X9!'gpUeV и1EOvB l !jo"I)Xh W^) ȁb4Ɩ)S jD@IA? Pɐgt!B8Q,JFVf21 \m5;H 0n9 ; _nV(.bj?0kQؽs<&KP@ܧm ]9?7"(QQUx㮰At@x 5lc~Kj" ߔ& crDo!5 o´65TS_J&CԔe̠ԑw| ";)9.Fs*4@Ufv16xߪΨ"!f18  B , p@~gycHE5X~!l`a=IpAP dA8##' 8T*V U"mz%+2 V 8WgE`|cBv!̢GϢ1 0pOpw$sC 71a1@o^6A $eic2gE7&2fwWxN/ 5, `YWGVAO]UD;4/B87@: q$UTRPr<@0͆W4@ 8w)pCP‘A@nkal`zP4OE'@rű{`}hp4PrG) 3P7|@D9P+bG=C ]@@@d0<8Hn ` Tt>=PCR)`Ԁ/ `LT7CBQ)p ]?DL]g|RhCɘK30O3s@+aCU]E2A1oUDl)pATP5zpVl Q)%h,QpU/d QUToG  -G{4i-@*7UcPz6. @ ]P%6 ]E ѠI6v5t D.Q 7FD_2&m0@Y0PWt',$8R P 2 3F5:0C ljih0?.& dإXao zV ;ԁ_PY 6pd{*`&0?Qx 0?OM.GE.>4 p-*C @EؙsQCCEH&X"G_98&/:S:<5`g~6T2ሶ{:@fŀBIsxE,h0@x@р2 pW}VCBe AgTP."mCK x[/w5*A\_dԂ_GEBn 'zb(w!M yҰ<9N1D*JyPSD  oE`:=<90d3 *hjQ`NP`yi 0`vE `C@o0@:`ذ `EE@D0~4CU`rӯBqe03/@lw5p4 P/ q2hAt K(g%S0\4rSDvrBc9W}' ,P pgDGwp@L0:R 3h@n`,&+Dd/zw;*% xڍ&EQt- ڧ ncYY; h0' [Wi";V(}16_)HhU ND`ykeK]{IՍY8$AImwB{:g@QpbH(a 3KTp3;hTw E Pa6C(s`?t-HǕGP컔x Qڙ| SIu/o {`y)}%>OZC OЧE`ػ7 SheDB3+CG,0d@DCC bVLJŇ~pA4eZ[Y VpkĎ`2 gB8JS4Ą5z<Pp\Ȓ ^8+ \4p)5pUN"lTCЋcxDTW=ho{j$6A144V 10yԄ*?0q4@WÏ:A 1 1y 208 ?e0UPR$O XX PDXU|eX(`|;X'R>*TYUH)<7/qv}m<4/ A( 8pBQC zf.ʻ\7JZ9P,'tQS A􋂅" qڸWךzbKD? NБ PV /p=J{~T)4p]l *`ihD@̿-[_o2 Ԟ =@ WP>u[瘾O֯h { `7hh0E.g?)E)EEh7d_Қٔݙ̦V5).B^Ւhê $6U䴏\AU丗"ʧx*F"*S Ѹ'D%,c2DRHŗIhAi"/X*P))KUe4+%\r(QCbJBʶEl Ff޿ DtDqhEí4v5|˵Uz/^t tH^uBUpuZNVuvWeͳF}w"j`(vBSp|Pĉ\ ^bE/UD‚-"%uzT8d]"L@.pPEQZŵ^0O@C&C])DFXHF29C S=.|N:;T ==b4%,wJ\EC.(P0hCD `81[hTS <B 0(p0'Pre?Xru~b5Y26$0)\P}Pz.$a&DO L{Rh g"? 5倶JW]@ g{@gv0@64ᆨG+ikƫ;K0>X !| 7墋7&z[>0Y.@XP<[ NA+^Kr+BY&E@‘($T!a%qsW-!ğ7T].ӲX?UYQ L-@@J4]IEp; @EL-N¸_a4=:;0S .5UbtӜc9ۤ {QȂ8 .?Jk;paAh/#qK q ^oWQ9J2\@!C'ۮ `:k/] EOS_ w)B/.*?gRr*X KsH$(K3Ţ L"idN]^Hjm,h` BJ2LECˆ0Y܅00B_5(C WA!4 ^BÅ'b8#K"}kQ`XCEcVh%*|u2:I\VHO!,E  '''///111666sEIIIKKKOOOQQQUUUXXXZZZdddfffmmmssswww0nH,Ȥrl2ΨVجVFްxL.ofnnn|Nϯv:'VS~|jNExwJCF\H`{yPǒʲRToքÇOMYrDmtK倁*B`Ųы'd_;k" I ʓX&_-2B! 'h fbղnFIb `RiL/ Hm&T)UDb٤ 2?pf6I$G3=ܮau2x/&9bHhc\cj16-)CÅM̦c:h" *PX 1"-#(+spӈAf?ů_{~D ՝Z}eajƮT9> ?7I {(!=gWуOh yFtztQ3"w_?ĕjp2@ ՝gf qFhl%"^.D $HBF$@#x0AX-4:8#blxԀaBI%0 @Re"JDS;*'6-Garmfz猋v2}v 鏉(~R΃יqiQ-~醫~*W gԺ- [Z* KLDf#w8\dxuLH9ּgnf,LTxynm&u W)}F:ڔ"[>8ĒKkg;8&\r) 9tX!# @D"C,-ׁ3}']uE O<|BSCVIGҤJZP<[iuRo( Ym~mbM,~~9cc|o+x1+m3wF.7kB_*%䐇.z62íʈ.;~%`EGJz\G|tʏ.x"Otq†|[>~m5B/iƋ>3s c= )Ѐ2Rl@,O_P!q-u1T?bdOw$( d'X Dy-%pB@>rn,tt-.rI8QVR]E(?bl |eFYG饢fۡ8DD] * غyL2I%;߈hR7-+Z1FXCEJ{XX3f$bFHUؽ+,շXyamFKuS%rSY n@Оyẹ#{Ut*rZEPmmd}l)B\=īUjSA;p-;cmbo=-Vv :zս7,~ǫE`=ID]m*zeM}*b+(v;bdkӥ}M~Z2 \(Բt?h7w;<0ZP8x;f~5@h.f\e~EՑP޾cY=f)"/ MTڸ5xI9t-M%; BgNŞ6}d?Ǝg#8evy[!5ԝfD(ƥ%,mڟV)asY9SViOp O趣QbErߕld/ m,|*8Z^KsE Imo39\=]{*A8 ^:[s"?[O56qb&d3J.U2yd]|(X'vtxsYv;k`eѾG9T\u_GBj]*eUvp`Ysۼ˲#4Q4K=skGMEiGkFhf j\5U2wS~(|?Qa33kw{1*4t@Y0G5cm7_G%h`+'WSf6 yuCQYuG1l4]Rv/t͵tIw d^ەk e-oІ##el6k5{*`4 /D`3r d"5szfXdG@7kri,a〃p~G6X|2z'SD#?V^7hgeV5wm49XGJnJ^"a z3`/U/v06= qp\.J;C1TЅHP) 58gJVBewP!mG~d26$T#bkϧ{!.V$u{; ZRV5} ҉*SYniwHz FʗCѦ p_='?tMg~IVDHaW/#s8x[eh*eqDfnA &(dq@GA7 xh687VevA( }UT,NwfStCQb%đU(1CpMpvb#IkzWj3GアDžkx|%097I|xtqyBC(U!9r4EgS'y](t?'.՘~81J '`y0eo= 2a-"}oSO#xwn]vJVqv;08,hc*:/&ԏzW)F`(Kmɢج#zrH^y90s&DoQڊ4WԩRT/st8ȉfCEH([{ IFioxeK)eSel(~+Ǭs /cҥ"EW~unϘu6YhJ6:4.0(i:l@8<۳|xqYZUaf53泞:U[6 M֢" b}9t[8ڲ,Z=-Ebr$6LJΊ{kC*T)IOnT÷Q[yyc{%vv}m'ՒI 繌{t.ʌv4cWZzï=Pۻ`>{d{p귱]̔BMvpP1ǹ[ԫy;eYS3F?LJ 8 E2f[Fc IFX/Fyv<{rA=֠k+˽;)*Gz_9fLD\z;$cřk}š7ŢǎS2X9u{yC[;ˣc/\Xrd0v;XI]@tlcȴ+,8h`O:zc&}8u- JwWڊb]dy鱓6p8*9r2E|R;aV2+D*F#40-iźL<$cLJU{%qE}3lt^&p5xML򝲅UŁ clS$/U_{qٕXUJUr,^A<{=I U9vgXEJ$)|BwsRZX7&P:Y uFrl^7O*}x`ZJNdfhKs2쎃F ~)Un!|ZC͂MBW"TX "L^_Cm-@\1\ݔuFh "2[8ܼJzՉϗC[h|>`7<4HCR^egʁ~lc\F^Xd@rN@};}'YݛTzHvo.1xu蟶rw߬t1yy7H5?IhD{LBch[sm˴̙OwBRI˼{?ä0~09yz瀟&5R:*ݟ_-k"yYFXw h[LYwCw jA5hFO>.o\cViBm.L˘͈Zb#ԒR6F1&VY*iGDlWl}XhǫSNS&'hUڒgk-y> .d%"YM+$ډm5^E!*|℃Gp[hكʃJ=/@f־_8~rZL' aƸjMj'g n 0'0 p#P5 n@d 4{KD<7Z1;nl?/iRl.EH@oE&sۊF QsĬ@ |,rLEypIkrf2f`źshƠEJN,zr^|3\AL.MR"B TcR%ιB퀜ت%JTC,IlsFsܻ < BR(cJ'J) T\JrM#ͻ{e%xO:O\?mD: @;,4EsEUS';(Œ.ؼEo*Lm~<1 Ia"` eH>5;=?`[cdOnfSc$>RJ],Ng`Qi:iWBj1~wh~Yn$3nx%yl7{^Td"{i“z6|K';@d ?WzGw''MَP#/R ZGtludG5[aƴOf}c5XyFd5x&Lc) BJE Eg?ʝ 5.N-лn"ٍ=\E+D3+l7<(sEšZb%9nZ3B&nU lB#0#fN?t !Ce 33`{H/H2I>LTS5E4 < r`PLֲH (zӎS'Bh]lXU\Us0켮 BK)׌3j"EB;T˅F7Bm5/ЬR@ %G3-.UAՅ3f*®&'M&# |O^R]Eh5p[ ,&u咑ߛffv ]=C8ƞo殄? ^dRg0.EjS&/%=@_k7;L;4l7.r޹?ٗTqډ̴* 56XZ.1 8r+AOfݹ8 .{CZd+!oSnGTF&Mʜڕ[6Atgʩ•rF'eixӤdFfꔜS+֟6Xѩ8j|\ٗm&GrSTtJ\l2c>_m'rIZZC@`aT)$WI%XXhcNMn=-Mz[67E3Ngkn5 ? m~yrv7MM<*u / )BͅTI|LΞ]a)z;m{M탦C:Àtka}۝ߛ13HŊoxw ]$l ƊC!z>j>շCtR{M]5--u uZ2,YÉ5Y̜< 6y50Ӟ"pmV{QI9]AbGpJ7b9}Vm-􁮔R]sMUڧ؋vPo ̷$I5@nބheFV6ggÅFIVZfl*lzΩnĭpw IF(PBpTF ʅWCn0aNIN*mk~j$OGQhh/ Yt0nP@DmJr!I n@̰0,"€E&d*YK)+ԮȜ䭲zne}|mH\*ċ *, 2/Јpbok\ 8^q#0ˆ~pOsc]jn-İ #hȒo[jF~BnB8rk/dkq.!  鄘ofv4mQȋ@-2"(O}'YUif&= $o ʰ4*"uLqp+0DƐ! ݂ "M񚺱Rkk+%F+Pk.ާ 1$TRVI˯r1KGd' Or)1̵.kwd6 1;((l&0#5d50"xQTTF%70B7jckFo/pҼ 27%,ˑXfts^WN2`> `E3MG::5 䘲;:o+$͢'2Ni$4r.Us~y&ڮn0ԅ:n+o0]~FDSJ'ȓL`JH kn %93}&<1jQm&0-0Vi6;bTn+nΐD$Be ELCh-_vgKu:ij~"j=Aʙ4 @0gJRȏf+ަ4Q!~r'~,MITAȌlT3ב**O5col#bHT2g ͔6W&Ss,LFs48{5.U\3Q)%b[j^! G S،UD)42r< k_V(_5- 닦8QVcm0L+,ɄGdsjY5;)of \4.;ʵXy:Zv4`=S*uuHH[9TI(nP &Q>CH1 Vb}U(M8]cVRn,^Pc@6:gV@sѤ[.ft7N,j]+V2RctUlihb;3X;046c7VESU#u@Kr!a a[Ñgr`VuuohtRƴiK'/u7K.1EK>w*n 7Vf,ͬy N2770-é:f6Fi7kR̡=C8b]۶kiYs F!i6\?6xn5~GNzgk*tEs/1X1b! 4Zُv+g֒H$UuY^#mZ+_T|RWdkQFxp)t~preIs i1GMul0WsB4Sz j1>g\x3|Wm=BDN^DkvƎ2ɺOڶGgY}]RN:8mbaxK>sX·]Mt &թ]EE*yeMAɭ1b^IiUYU%]6N־EҊ.9Z}v!QA r5e^U?ZCa>Mמ%CM3ױQRd헟riHlQR3fLs#D:kאM:OYQZe0P=D,kr6u,G#CDHG&_ݨ\xXDo|6uAy碘$EG˷u9li jKGgK/”+-7pf.QLz)1?cD/I eہ.bjಲ(&Q\7[eF+yU sLqÖMEz낟fȊgV{ptL,Y7zP"G2rӍy2QoՆ#~\4U mwJ˨s4P Z_wRtZ7^T940A>XYqЌBxTdcPaPԹ(e2N<-i_eSBe(Xa(mXDK0^i$P6Z gDܘ& ]6$'ZOeBpbM)*ml2#ɗ&p"z)VM哒0j[qDϙYX-O9jC>lRʧsZ:w޺ѨD+y.z,^[f|j:&XҺ$f& ~ n\qZ3^Vh /q9btsBmviwæ6LrE,!!%ߦol((72GX$gmAO5$*Euŀ5q)ga,SN2,o K_u׍>v(;73]vSxKӟs-(3zʚ[E $j=L=p#"qƬyϑK3k/dcjvNT.̶tҗ֓{M-|R֪7s]HVI>><5dvAaw3 ~1h0js{_D .QY*erA[d/D]Y &ٹSGlJ%'o_sG/ /T=PZJH2K-,bאވc~eyبj4@hr"nd 4RS`5q7'19Q%\R7OjkluxGml Y;DVP".8&SLS5nS^͖d"קU&r8ǔlf#r-`G0dk\xyQ{orU(`l|j 9Z’f|Q^DL;WO XM;^DsW2#JH4Q};V&?H툺2=qwudJ҂N:JQcZr?oY3qh6q.WfxRw/BgYSc EhCŏ&,W^2C.]:nL%M'D+aV4Uf]y **EeَȨdVC3Ֆn@1ZgvGQ#G;ڬ&hca2=wתҦm-iEiGq#-oټl6"^Z)[ qH ov~Vr-=\eAb3xgrYdtڭÆs䶤J]+hƙof?P&Uw|s&aXA^[P%փjt`H K3ܙ{{^=f\.*&qsk/m~6ȣ2{:KxT':IyT $ y5Yz8(OyR\!b}r'}-mJvq:jjyW}﹫mRޓv|Inb/v_>;ta՝UUY]s``;GeographicLib-2.4/doc/utilities.html.in0000644000771000077100000000145114644775140020024 0ustar ckarneyckarney GeographicLib-@PROJECT_VERSION@ utilities

Online documentation for utilities for GeographicLib version @PROJECT_VERSION@ is available at
https://geographiclib.sourceforge.io/C++/@PROJECT_VERSION@/utilities.html.

You will be redirected there. Click on the link to go there directly.

GeographicLib-2.4/doc/.htaccess0000644000771000077100000000027214644775140016314 0ustar ckarneyckarneyOptions +Indexes +FollowSymLinks IndexOptions FancyIndexing SuppressSize SuppressDescription IndexOrderDefault Descending Date IndexIgnore HEADER.html FOOTER.html ReadmeName FOOTER.html GeographicLib-2.4/doc/FOOTER.html0000644000771000077100000000007214644775140016400 0ustar ckarneyckarney GeographicLib home GeographicLib-2.4/doc/HEADER.html0000644000771000077100000000072414644775140016336 0ustar ckarneyckarney Index of https://geographiclib.sourceforge.io/C++

C++ library GeographicLib

Each numbered directory gives the documentation for that specific version. doc points to the latest stable version.

GeographicLib-2.4/doc/geodseries30.html0000644000771000077100000120361314644775140017705 0ustar ckarneyckarney Series for geodesic calculations

Series for geodesic calculations

This extends the series given here to 30th order in the flattening. See
Charles F. F. Karney,
Algorithms for geodesics,
J. Geodesy 87(1), 43–55 (Jan. 2013);
DOI: 10.1007/s00190-012-0578-z (pdf); addenda: geod-addenda.html.
// Generated by Maxima on 2012-10-19 10:41:58-04:00

A1 = (1 + 1/4 * eps^2
        + 1/64 * eps^4
        + 1/256 * eps^6
        + 25/16384 * eps^8
        + 49/65536 * eps^10
        + 441/1048576 * eps^12
        + 1089/4194304 * eps^14
        + 184041/1073741824 * eps^16
        + 511225/4294967296 * eps^18
        + 5909761/68719476736 * eps^20
        + 17631601/274877906944 * eps^22
        + 863948449/17592186044416 * eps^24
        + 2704312009/70368744177664 * eps^26
        + 34493775625/1125899906842624 * eps^28
        + 111759833025/4503599627370496 * eps^30) / (1 - eps);

C1[1] = - 1/2 * eps
        + 3/16 * eps^3
        - 1/32 * eps^5
        + 19/2048 * eps^7
        - 3/4096 * eps^9
        + 53/65536 * eps^11
        + 29/131072 * eps^13
        + 13827/67108864 * eps^15
        + 17321/134217728 * eps^17
        + 205579/2147483648 * eps^19
        + 302847/4294967296 * eps^21
        + 29656189/549755813888 * eps^23
        + 46250107/1099511627776 * eps^25
        + 588536103/17592186044416 * eps^27
        + 951224759/35184372088832 * eps^29;
C1[2] = - 1/16 * eps^2
        + 1/32 * eps^4
        - 9/2048 * eps^6
        + 7/4096 * eps^8
        + 1/65536 * eps^10
        + 27/131072 * eps^12
        + 5735/67108864 * eps^14
        + 8995/134217728 * eps^16
        + 96543/2147483648 * eps^18
        + 142801/4294967296 * eps^20
        + 13684121/549755813888 * eps^22
        + 21112497/1099511627776 * eps^24
        + 265707563/17592186044416 * eps^26
        + 425659393/35184372088832 * eps^28
        + 1417935787335/144115188075855872 * eps^30;
C1[3] = - 1/48 * eps^3
        + 3/256 * eps^5
        - 3/2048 * eps^7
        + 17/24576 * eps^9
        + 3/65536 * eps^11
        + 843/8388608 * eps^13
        + 9719/201326592 * eps^15
        + 9801/268435456 * eps^17
        + 54189/2147483648 * eps^19
        + 3873871/206158430208 * eps^21
        + 7822227/549755813888 * eps^23
        + 24333681/2199023255552 * eps^25
        + 462823139/52776558133248 * eps^27
        + 127352837355/18014398509481984 * eps^29;
C1[4] = - 5/512 * eps^4
        + 3/512 * eps^6
        - 11/16384 * eps^8
        + 3/8192 * eps^10
        + 651/16777216 * eps^12
        + 1009/16777216 * eps^14
        + 16763/536870912 * eps^16
        + 1569/67108864 * eps^18
        + 2263733/137438953472 * eps^20
        + 1698897/137438953472 * eps^22
        + 41547591/4398046511104 * eps^24
        + 16273415/2199023255552 * eps^26
        + 212683932395/36028797018963968 * eps^28
        + 172435304205/36028797018963968 * eps^30;
C1[5] = - 7/1280 * eps^5
        + 7/2048 * eps^7
        - 3/8192 * eps^9
        + 117/524288 * eps^11
        + 253/8388608 * eps^13
        + 13419/335544320 * eps^15
        + 5855/268435456 * eps^17
        + 70025/4294967296 * eps^19
        + 800595/68719476736 * eps^21
        + 4842105/549755813888 * eps^23
        + 74591411/10995116277760 * eps^25
        + 6021893805/1125899906842624 * eps^27
        + 77302095005/18014398509481984 * eps^29;
C1[6] = - 7/2048 * eps^6
        + 9/4096 * eps^8
        - 117/524288 * eps^10
        + 467/3145728 * eps^12
        + 1569/67108864 * eps^14
        + 3813/134217728 * eps^16
        + 206677/12884901888 * eps^18
        + 103137/8589934592 * eps^20
        + 4770087/549755813888 * eps^22
        + 21782093/3298534883328 * eps^24
        + 5765474835/1125899906842624 * eps^26
        + 9142699905/2251799813685248 * eps^28
        + 1415580640915/432345564227567616 * eps^30;
C1[7] = - 33/14336 * eps^7
        + 99/65536 * eps^9
        - 77/524288 * eps^11
        + 55/524288 * eps^13
        + 1233/67108864 * eps^15
        + 11345/536870912 * eps^17
        + 52591/4294967296 * eps^19
        + 552591/60129542144 * eps^21
        + 3685111/549755813888 * eps^23
        + 722278195/140737488355328 * eps^25
        + 4507296795/1125899906842624 * eps^27
        + 1795935355/562949953421312 * eps^29;
C1[8] = - 429/262144 * eps^8
        + 143/131072 * eps^10
        - 429/4194304 * eps^12
        + 325/4194304 * eps^14
        + 31525/2147483648 * eps^16
        + 8733/536870912 * eps^18
        + 165251/17179869184 * eps^20
        + 124411/17179869184 * eps^22
        + 2996969235/562949953421312 * eps^24
        + 1153418845/281474976710656 * eps^26
        + 28941724625/9007199254740992 * eps^28
        + 23168297355/9007199254740992 * eps^30;
C1[9] = - 715/589824 * eps^9
        + 429/524288 * eps^11
        - 39/524288 * eps^13
        + 11921/201326592 * eps^15
        + 6399/536870912 * eps^17
        + 55233/4294967296 * eps^19
        + 199205/25769803776 * eps^21
        + 25677825/4398046511104 * eps^23
        + 608155005/140737488355328 * eps^25
        + 33866001805/10133099161583616 * eps^27
        + 1482164085/562949953421312 * eps^29;
C1[10] = - 2431/2621440 * eps^10
        + 663/1048576 * eps^12
        - 3757/67108864 * eps^14
        + 6239/134217728 * eps^16
        + 42177/4294967296 * eps^18
        + 446131/42949672960 * eps^20
        + 27835817/4398046511104 * eps^22
        + 42180321/8796093022208 * eps^24
        + 4019599397/1125899906842624 * eps^26
        + 6244603111/2251799813685248 * eps^28
        + 316153750539/144115188075855872 * eps^30;
C1[11] = - 4199/5767168 * eps^11
        + 4199/8388608 * eps^13
        - 2907/67108864 * eps^15
        + 10013/268435456 * eps^17
        + 35207/4294967296 * eps^19
        + 4694805/549755813888 * eps^21
        + 23148175/4398046511104 * eps^23
        + 70365265/17592186044416 * eps^25
        + 3370190355/1125899906842624 * eps^27
        + 42049539055/18014398509481984 * eps^29;
C1[12] = - 29393/50331648 * eps^12
        + 6783/16777216 * eps^14
        - 18411/536870912 * eps^16
        + 6137/201326592 * eps^18
        + 7611495/1099511627776 * eps^20
        + 7835163/1099511627776 * eps^22
        + 468146111/105553116266496 * eps^24
        + 59462469/17592186044416 * eps^26
        + 91557125181/36028797018963968 * eps^28
        + 214950398465/108086391056891904 * eps^30;
C1[13] = - 52003/109051904 * eps^13
        + 22287/67108864 * eps^15
        - 7429/268435456 * eps^17
        + 869193/34359738368 * eps^19
        + 3247347/549755813888 * eps^21
        + 26486133/4398046511104 * eps^23
        + 66500935/17592186044416 * eps^25
        + 12703797/4398046511104 * eps^27
        + 39283195529/18014398509481984 * eps^29;
C1[14] = - 185725/469762048 * eps^14
        + 37145/134217728 * eps^16
        - 780045/34359738368 * eps^18
        + 1461765/68719476736 * eps^20
        + 22372215/4398046511104 * eps^22
        + 45260895/8796093022208 * eps^24
        + 57244355/17592186044416 * eps^26
        + 306953515/123145302310912 * eps^28
        + 272204273085/144115188075855872 * eps^30;
C1[15] = - 22287/67108864 * eps^15
        + 1002915/4294967296 * eps^17
        - 648945/34359738368 * eps^19
        + 1243265/68719476736 * eps^21
        + 19425915/4398046511104 * eps^23
        + 78089301/17592186044416 * eps^25
        + 12427015/4398046511104 * eps^27
        + 610648965/281474976710656 * eps^29;
C1[16] = - 9694845/34359738368 * eps^16
        + 1710855/8589934592 * eps^18
        - 4372185/274877906944 * eps^20
        + 4272135/274877906944 * eps^22
        + 543781755/140737488355328 * eps^24
        + 271745805/70368744177664 * eps^26
        + 5567912565/2251799813685248 * eps^28
        + 4284219735/2251799813685248 * eps^30;
C1[17] = - 17678835/73014444032 * eps^17
        + 5892945/34359738368 * eps^19
        - 930465/68719476736 * eps^21
        + 59239605/4398046511104 * eps^23
        + 59859915/17592186044416 * eps^25
        + 930465/274877906944 * eps^27
        + 613284315/281474976710656 * eps^29;
C1[18] = - 21607465/103079215104 * eps^18
        + 10235115/68719476736 * eps^20
        - 51175575/4398046511104 * eps^22
        + 103488385/8796093022208 * eps^24
        + 53036505/17592186044416 * eps^26
        + 52551045/17592186044416 * eps^28
        + 278415054335/144115188075855872 * eps^30;
C1[19] = - 119409675/652835028992 * eps^19
        + 71645805/549755813888 * eps^21
        - 44352165/4398046511104 * eps^23
        + 182060985/17592186044416 * eps^25
        + 2953215/1099511627776 * eps^27
        + 47776802115/18014398509481984 * eps^29;
C1[20] = - 176726319/1099511627776 * eps^20
        + 126233085/1099511627776 * eps^22
        - 309844845/35184372088832 * eps^24
        + 161159235/17592186044416 * eps^26
        + 86652277095/36028797018963968 * eps^28
        + 426519840213/180143985094819840 * eps^30;
C1[21] = - 547010035/3848290697216 * eps^21
        + 447553665/4398046511104 * eps^23
        - 136211985/17592186044416 * eps^25
        + 9182417465/1125899906842624 * eps^27
        + 38976086565/18014398509481984 * eps^29;
C1[22] = - 6116566755/48378511622144 * eps^22
        + 797813055/8796093022208 * eps^24
        - 7712192865/1125899906842624 * eps^26
        + 16434948933/2251799813685248 * eps^28
        + 281701652697/144115188075855872 * eps^30;
C1[23] = - 11435320455/101155069755392 * eps^23
        + 11435320455/140737488355328 * eps^25
        - 6861192273/1125899906842624 * eps^27
        + 3694488147/562949953421312 * eps^29;
C1[24] = - 57176602275/562949953421312 * eps^24
        + 20583576819/281474976710656 * eps^26
        - 49083913953/9007199254740992 * eps^28
        + 160153129039/27021597764222976 * eps^30;
C1[25] = - 322476036831/3518437208883200 * eps^25
        + 74417546961/1125899906842624 * eps^27
        - 2756205443/562949953421312 * eps^29;
C1[26] = - 1215486600363/14636698788954112 * eps^26
        + 135054066707/2251799813685248 * eps^28
        - 636683457333/144115188075855872 * eps^30;
C1[27] = - 2295919134019/30399297484750848 * eps^27
        + 983965343151/18014398509481984 * eps^29;
C1[28] = - 2483341104143/36028797018963968 * eps^28
        + 1798281489207/36028797018963968 * eps^30;
C1[29] = - 32968493968795/522417556774977536 * eps^29;
C1[30] = - 125280277081421/2161727821137838080 * eps^30;

C1'[1] = + 1/2 * eps
         - 9/32 * eps^3
         + 205/1536 * eps^5
         - 4879/73728 * eps^7
         + 9039/327680 * eps^9
         - 1050467/88473600 * eps^11
         + 512031157/118908518400 * eps^13
         - 1086005273/591900180480 * eps^15
         + 4075676109451/7671026339020800 * eps^17
         - 794840669327713/2761569482047488000 * eps^19
         + 2239087029841367/77148607752437760000 * eps^21
         - 40730402540905726093/641567822069272412160000 * eps^23
         - 97668067278655185143/4927240873492012125388800 * eps^25
         - 741941887011669089199917/28784819522671853552271360000 * eps^27
         - 68324470839108426239947872773/3917038240645185831393086668800000 * eps^29;
C1'[2] = + 5/16 * eps^2
         - 37/96 * eps^4
         + 1335/4096 * eps^6
         - 86171/368640 * eps^8
         + 4119073/28311552 * eps^10
         - 18357853/220200960 * eps^12
         + 167645485631/3805072588800 * eps^14
         - 2133468723257/95887829237760 * eps^16
         + 59947666093201/5682241732608000 * eps^18
         - 29889474712770151/6075452860504473600 * eps^20
         + 3112904386445139443/1458108686521073664000 * eps^22
         - 4531132450329984761/4728107532256542720000 * eps^24
         + 1671560053825711640749861/4483789194877731034103808000 * eps^26
         - 1539092646053487110737563637/8743388930011575516502425600000 * eps^28
         + 3620358411657954539738131669/69636235389247748113654874112000 * eps^30;
C1'[3] = + 29/96 * eps^3
         - 75/128 * eps^5
         + 2901/4096 * eps^7
         - 443327/655360 * eps^9
         + 1152507/2097152 * eps^11
         - 1170339447/2936012800 * eps^13
         + 14896648073/56371445760 * eps^15
         - 1719099273321/10522669875200 * eps^17
         + 440255022166233/4629974745088000 * eps^19
         - 4689329894241941/88895515105689600 * eps^21
         + 4309464445273351209/154085559516528640000 * eps^23
         - 77740899024366984327/5423811694981808128000 * eps^25
         + 4025440507207669842667/569500227973089853440000 * eps^27
         - 10783702637849849812840017/3158827931157405053747200000 * eps^29;
C1'[4] = + 539/1536 * eps^4
         - 2391/2560 * eps^6
         + 1082857/737280 * eps^8
         - 2722891/1548288 * eps^10
         + 6190623251/3523215360 * eps^12
         - 2198240553463/1426902220800 * eps^14
         + 835898387989583/684913065984000 * eps^16
         - 62186045114429/69759664128000 * eps^18
         + 39435262997832698047/64804830512047718400 * eps^20
         - 14876456230497799912553/37910825849547915264000 * eps^22
         + 1136134446936925800945877/4717791661277073899520000 * eps^24
         - 45093458223482404762480843/318450937136202488217600000 * eps^26
         + 3448586228525796468187820868401/43044376270826217927396556800000 * eps^28
         - 9267292123878690223760617403717/211395714574502092487880867840000 * eps^30;
C1'[5] = + 3467/7680 * eps^5
         - 28223/18432 * eps^7
         + 1361343/458752 * eps^9
         - 211942939/49545216 * eps^11
         + 289319933243/57076088832 * eps^13
         - 2641923029237/507343011840 * eps^15
         + 164922300524827/34441342746624 * eps^17
         - 326226244879987219/81006038140059648 * eps^19
         + 905728657830831557/288021468942434304 * eps^21
         - 78322584746542259177147/33968099961194932076544 * eps^23
         + 13053248693785337495272007/8152343990686783698370560 * eps^25
         - 1878086576945897568602243/1771373509087498680139776 * eps^27
         + 39401408426156638969274880529/58540351728323656381259317248 * eps^29;
C1'[6] = + 38081/61440 * eps^6
         - 733437/286720 * eps^8
         + 10820079/1835008 * eps^10
         - 547525831/55050240 * eps^12
         + 45741465549/3355443200 * eps^14
         - 41464506827097/2583691264000 * eps^16
         + 33307900611667019/1984274890752000 * eps^18
         - 29549592050928009/1851989898035200 * eps^20
         + 1510642276897435153959/107859891661570048000 * eps^22
         - 3379725045215031439859/294163340895191040000 * eps^24
         + 3068085809843886425921127/345151653317024153600000 * eps^26
         - 120481724276440955567319861/18440959762938147635200000 * eps^28
         + 5351579260607165516870592929/1166336466888888019845120000 * eps^30;
C1'[7] = + 459485/516096 * eps^7
         - 709743/163840 * eps^9
         + 983638957/84934656 * eps^11
         - 570327360331/25480396800 * eps^13
         + 2524677004673/72477573120 * eps^15
         - 3979901788209089/86103356866560 * eps^17
         + 145501072048061969477/2686424734236672000 * eps^19
         - 767257565495432565461/13372425343755878400 * eps^21
         + 576429350583276368332877/10315870979468820480000 * eps^23
         - 15049813241233902040230469/297097084208702029824000 * eps^25
         + 1656087831553847819569877/38371513250126757888000 * eps^27
         - 222870544090985685701249717628901/6400184226857542607280537600000 * eps^29;
C1'[8] = + 109167851/82575360 * eps^8
         - 550835669/74317824 * eps^10
         + 29797006823/1321205760 * eps^12
         - 13775344174277/280284364800 * eps^14
         + 51602655250575029/602723498065920 * eps^16
         - 229269121915303969/1813751267328000 * eps^18
         + 83019178881141641377/506287738375372800 * eps^20
         - 132324024533588768532907/691082762882383872000 * eps^22
         + 396326201752354956063673999/1935504271293158522880000 * eps^24
         - 703889408095319694872984797279/3464746196041883071807488000 * eps^26
         + 673066976958864232412288090929279/3563738944500222588144844800000 * eps^28
         - 3842435239091994304467908471778509/23172222559128113984248479744000 * eps^30;
C1'[9] = + 83141299/41287680 * eps^9
         - 1172993649/91750400 * eps^11
         + 1409193884757/32296140800 * eps^13
         - 8205463797521/77510737920 * eps^15
         + 6267340235329209/30709016166400 * eps^17
         - 9985904736500570067/30094835843072000 * eps^19
         + 6818098564242858298663/14445521204674560000 * eps^21
         - 81179814711559538793297/134824864576962560000 * eps^23
         + 8228623619106009640781583/11735156212778821222400 * eps^25
         - 10637423815896802535794719059/14082187455334585466880000 * eps^27
         + 2713138463299280056775410984179/3567487488684761651609600000 * eps^29;
C1'[10] = + 9303339907/2972712960 * eps^10
         - 32258337779/1453326336 * eps^12
         + 105458791111591/1255673954304 * eps^14
         - 21991423000897853/97942568435712 * eps^16
         + 440758100714976799/928640648871936 * eps^18
         - 4436414286264685342183/5265392479103877120 * eps^20
         + 11983230751430888047165/9190503236254040064 * eps^22
         - 438407397616490706337835/243037752247606837248 * eps^24
         + 503750725100748248754169576435/221743756546680516595679232 * eps^26
         - 200204949675864221817037957885535/75836364738964736675722297344 * eps^28
         + 15426622123776978643737455613179549/5392808159215270163606918922240 * eps^30;
C1'[11] = + 230944143253/46714060800 * eps^11
         - 13820996202863/356725555200 * eps^13
         + 530891275077073/3297729576960 * eps^15
         - 5861919724284516433/12465417800908800 * eps^17
         + 25885301781901909490837/23933602177744896000 * eps^19
         - 110706057667150724184229/53185782617210880000 * eps^21
         + 2719521302806552306469953613/781192775081593405440000 * eps^23
         - 233567275961905041708130573/44996703844699780153344 * eps^25
         + 798884301221118236917664805229/113666887205034582343680000 * eps^27
         - 9934805882969858378831722690837171/1133916936886434459864268800000 * eps^29;
C1'[12] = + 306777964441/38755368960 * eps^12
         - 57044595387963/839699660800 * eps^14
         + 11568981229047951/37618544803840 * eps^16
         - 687397289384966383/705347715072000 * eps^18
         + 233327560280127272763/96303474697830400 * eps^20
         - 3739229605202668172763/744163213574144000 * eps^22
         + 65835782650063594518691/7289762092154880000 * eps^24
         - 14792936433071373028889379/1024668970784915456000 * eps^26
         + 74599042152248060866262559758871/3567487488684761651609600000 * eps^28
         - 16680060316657855648846944446971/599337898099039957470412800 * eps^30;
C1'[13] = + 2615671472444983/204047017574400 * eps^13
         - 1167820427927323/9766352977920 * eps^15
         + 24715664579918728243/42190644864614400 * eps^17
         - 5067175041833532570683/2531438691876864000 * eps^19
         + 93543614041472271515281/17487017757219225600 * eps^21
         - 11792083140833533278156043493/991513906834330091520000 * eps^23
         + 8268814159710166088320187726251/361704273213163617386496000 * eps^25
         - 24380431693719066689532645995167/625167879627690202890240000 * eps^27
         + 40946727771183021563590563999653687303/680582760477888662474430873600000 * eps^29;
C1'[14] = + 34216519493594561/1632376140595200 * eps^14
         - 1477329715340046517/6995897745408000 * eps^16
         + 9229913663063228233/8291434364928000 * eps^18
         - 18633370679636805385039/4566922048202342400 * eps^20
         + 613651924549596407462456317/52610941995290984448000 * eps^22
         - 30737516008559329681484121827/1110675442122809671680000 * eps^24
         + 271813271604582464710892651024459/4798117909970537781657600000 * eps^26
         - 20699812425639174189936631117519897/201520952218762586829619200000 * eps^28
         + 1211662551734777607545609062337329843/7206133351721085009678827520000 * eps^30;
C1'[15] = + 177298287500753/5129801564160 * eps^15
         - 5627790514610829/15047417921536 * eps^17
         + 17279798906736629091/8185795349315584 * eps^19
         - 115931060832532759571/14032792027398144 * eps^21
         + 2003356613292569725398363/79631417158142001152 * eps^23
         - 101051987173195622011224471/1592628343162840023040 * eps^25
         + 756303360522076489366917931/5488442290284248694784 * eps^27
         - 5815559636408944974046175630559/21975722930298131773915136 * eps^29;
C1'[16] = + 1259425185539653127243/21939135329599488000 * eps^16
         - 2293308899647899314723/3453382412992512000 * eps^18
         + 21460336637287899464532611/5370700328685954662400 * eps^20
         - 25456489696915892609916529129/1530649593675497078784000 * eps^22
         + 2553846684009183021840672953/47515526935735173120000 * eps^24
         - 29538537350054556934382434071434011/205719305389986807388569600000 * eps^26
         + 3770295466320560881269963263089000511/11433662446938214136964710400000 * eps^28
         - 519676261197496743489350631148600190213/777234965004088823221667758080000 * eps^30;
C1'[17] = + 1789450487559418666447/18648265030159564800 * eps^17
         - 233343808292218091539949/197452217966395392000 * eps^19
         + 20146628393835035886855197/2667798856079297740800 * eps^21
         - 239929099187527215432793286501/7203056911414103900160000 * eps^23
         + 62988069927933679012075753421807/553194770796603179532288000 * eps^25
         - 3378232317776013495553552510617097/10517530210207023413329920000 * eps^27
         + 7314657081705017862640836634319879174339/9405196215175528617136147660800000 * eps^29;
C1'[18] = + 212221079284639273481/1315574252568576000 * eps^18
         - 1260552943986821598063/598192737065369600 * eps^20
         + 3546697789798651658576181/248848178619193753600 * eps^22
         - 78517248057208956823851421/1182310350905671680000 * eps^24
         + 1067601202019151639052958889147/4459359360855952064512000 * eps^26
         - 40116098461444544658667493570308857/56410895914827793616076800000 * eps^28
         + 392210563613343460551402383435826349/216617840312938727485734912000 * eps^30;
C1'[19] = + 69532546869173713149501223/255108265612582846464000 * eps^19
         - 112316728120020126447652781/29837224048255303680000 * eps^21
         + 4848022300045341835150543297447/180455531043848076656640000 * eps^23
         - 125642956497967669586988251237879/952805203911517844747059200 * eps^25
         + 33298130071722823747096176158055463/66596830966654998455255040000 * eps^27
         - 6563632449843987460043036353052098320209/4207587780473262802403013427200000 * eps^29;
C1'[20] = + 5810177473683430838091097/12559176153234847825920 * eps^20
         - 4618600293785993240609142923/685731017966622691295232 * eps^22
         + 1356670146516048832626691899799/26819702036027909703991296 * eps^24
         - 2172503519024023685991761815076867/8327517482186665963089297408 * eps^26
         + 3793117143067735304052463936462682647/3654590529325348262658617376768 * eps^28
         - 48227737126007159325773215007655970673/14212296502931909910339067576320 * eps^30;
C1'[21] = + 80853671585727628548617/102547326354063360000 * eps^21
         - 33710670766735229663452761/2793193841644011520000 * eps^23
         + 7824467166805891507557010233/82231626697999699148800 * eps^25
         - 12690496274820158383049352282653/24669488009399909744640000 * eps^27
         + 56382836432185917384773311978295199/26314120543359903727616000000 * eps^29;
C1'[22] = + 924898009889615635728755915083/685731017966622691295232000 * eps^22
         - 34498885534979583771510062454227/1593112465983062818160640000 * eps^24
         + 579153806014612787074377437506223/3238703930845567705625395200 * eps^26
         - 1569950058036065954085485531335819511/1552386282642142415290368000000 * eps^28
         + 13441093380769154612428393473490856259941/3053881893191980641891039313920000 * eps^30;
C1'[23] = + 4016551943902862119978017069801911/1734899475455555408976936960000 * eps^23
         - 7042743315770579684284446742015447/181032988743188390501941248000 * eps^25
         + 600397969311873169056555916083822001/1787980135735193980266086400000 * eps^27
         - 223977408534083722217209433995298286356287/112964584975749555673211338752000000 * eps^29;
C1'[24] = + 33730424938117851020161782371647/8461634387224169042411520000 * eps^24
         - 2466848731962947446637554898208789/35256809946767371010048000000 * eps^26
         + 9241553981242966860439405699656735351/14666832937855226340179968000000 * eps^28
         - 34121931746328650162120952716097657509/8800099762713135804107980800000 * eps^30;
C1'[25] = + 251959060076566669691445659637541/36604472449172158079513395200 * eps^25
         - 10775075917257378388661547627353189/85536969693571680015929573376 * eps^27
         + 7072923673224417550895367212096744699801/5986219287034920454234815263145984 * eps^29;
C1'[26] = + 18043464502912016496703680586663352917/1514094087670302902379872256000000 * eps^26
         - 15705330809648579467084357186039173723679/69182452928935378770280316928000000 * eps^28
         + 762509129435444486126998095414252687404107/344374876801811663212062022041600000 * eps^30;
C1'[27] = + 819021838914972651233426418104059459/39600448932209111118485913600000 * eps^27
         - 4425211305648392775905209005851207973/10807140059472272040132608000000 * eps^29;
C1'[28] = + 137344334847260471742767128830849077140799/3817741892241658452955877081088000000 * eps^28
         - 3056545074816755404384556140143837530441/4134995887021777596105338388480000 * eps^30;
C1'[29] = + 2381352350093111938327626556685002210278872879/37975078602127776631552109325582336000000 * eps^29;
C1'[30] = + 20034557328168749612075941075238883149/182929433787470496587153418485760 * eps^30;

A2 = (1 - 3/4 * eps^2
        - 7/64 * eps^4
        - 11/256 * eps^6
        - 375/16384 * eps^8
        - 931/65536 * eps^10
        - 10143/1048576 * eps^12
        - 29403/4194304 * eps^14
        - 5705271/1073741824 * eps^16
        - 17892875/4294967296 * eps^18
        - 230480679/68719476736 * eps^20
        - 758158843/274877906944 * eps^22
        - 40605577103/17592186044416 * eps^24
        - 137919912459/70368744177664 * eps^26
        - 1897157659375/1125899906842624 * eps^28
        - 6593830148475/4503599627370496 * eps^30) / (1 + eps);

C2[1] = + 1/2 * eps
        + 1/16 * eps^3
        + 1/32 * eps^5
        + 41/2048 * eps^7
        + 59/4096 * eps^9
        + 727/65536 * eps^11
        + 1171/131072 * eps^13
        + 498409/67108864 * eps^15
        + 848479/134217728 * eps^17
        + 11768921/2147483648 * eps^19
        + 20705249/4294967296 * eps^21
        + 2359256231/549755813888 * eps^23
        + 4242171053/1099511627776 * eps^25
        + 61534748221/17592186044416 * eps^27
        + 112374407161/35184372088832 * eps^29;
C2[2] = + 3/16 * eps^2
        + 1/32 * eps^4
        + 35/2048 * eps^6
        + 47/4096 * eps^8
        + 557/65536 * eps^10
        + 875/131072 * eps^12
        + 365987/67108864 * eps^14
        + 615099/134217728 * eps^16
        + 8448195/2147483648 * eps^18
        + 14747697/4294967296 * eps^20
        + 1669842701/549755813888 * eps^22
        + 2986894505/1099511627776 * eps^24
        + 43136495023/17592186044416 * eps^26
        + 78481301201/35184372088832 * eps^28
        + 294392827406755/144115188075855872 * eps^30;
C2[3] = + 5/48 * eps^3
        + 5/256 * eps^5
        + 23/2048 * eps^7
        + 191/24576 * eps^9
        + 385/65536 * eps^11
        + 39277/8388608 * eps^13
        + 778613/201326592 * eps^15
        + 879927/268435456 * eps^17
        + 6084639/2147483648 * eps^19
        + 512739193/206158430208 * eps^21
        + 1215236729/549755813888 * eps^23
        + 4364918719/2199023255552 * eps^25
        + 94882584065/52776558133248 * eps^27
        + 29549676515117/18014398509481984 * eps^29;
C2[4] = + 35/512 * eps^4
        + 7/512 * eps^6
        + 133/16384 * eps^8
        + 47/8192 * eps^10
        + 73859/16777216 * eps^12
        + 59533/16777216 * eps^14
        + 1587387/536870912 * eps^16
        + 169365/67108864 * eps^18
        + 301539693/137438953472 * eps^20
        + 265958173/137438953472 * eps^22
        + 7594835095/4398046511104 * eps^24
        + 3421780579/2199023255552 * eps^26
        + 50930607972739/36028797018963968 * eps^28
        + 46591933629593/36028797018963968 * eps^30;
C2[5] = + 63/1280 * eps^5
        + 21/2048 * eps^7
        + 51/8192 * eps^9
        + 2343/524288 * eps^11
        + 29099/8388608 * eps^13
        + 946609/335544320 * eps^15
        + 635521/268435456 * eps^17
        + 8729875/4294967296 * eps^19
        + 122017589/68719476736 * eps^21
        + 864489227/549755813888 * eps^23
        + 15483449661/10995116277760 * eps^25
        + 1433014740399/1125899906842624 * eps^27
        + 20884832418219/18014398509481984 * eps^29;
C2[6] = + 77/2048 * eps^6
        + 33/4096 * eps^8
        + 2607/524288 * eps^10
        + 11363/3145728 * eps^12
        + 189893/67108864 * eps^14
        + 311117/134217728 * eps^16
        + 25213345/12884901888 * eps^18
        + 14502017/8589934592 * eps^20
        + 814144243/549755813888 * eps^22
        + 4341484325/3298534883328 * eps^24
        + 1331147570487/1125899906842624 * eps^26
        + 2412694071441/2251799813685248 * eps^28
        + 422949801695839/432345564227567616 * eps^30;
C2[7] = + 429/14336 * eps^7
        + 429/65536 * eps^9
        + 2145/524288 * eps^11
        + 1573/524288 * eps^13
        + 158899/67108864 * eps^15
        + 1047631/536870912 * eps^17
        + 7110437/4294967296 * eps^19
        + 86245121/60129542144 * eps^21
        + 694168021/549755813888 * eps^23
        + 158428784829/140737488355328 * eps^25
        + 1141580229945/1125899906842624 * eps^27
        + 518508038199/562949953421312 * eps^29;
C2[8] = + 6435/262144 * eps^8
        + 715/131072 * eps^10
        + 14443/4194304 * eps^12
        + 10673/4194304 * eps^14
        + 4339205/2147483648 * eps^16
        + 898561/536870912 * eps^18
        + 24498667/17179869184 * eps^20
        + 21302303/17179869184 * eps^22
        + 616428279683/562949953421312 * eps^24
        + 275528165297/281474976710656 * eps^26
        + 7960491282361/9007199254740992 * eps^28
        + 7246735300607/9007199254740992 * eps^30;
C2[9] = + 12155/589824 * eps^9
        + 2431/524288 * eps^11
        + 1547/524288 * eps^13
        + 441779/201326592 * eps^15
        + 940321/536870912 * eps^17
        + 6258091/4294967296 * eps^19
        + 32109515/25769803776 * eps^21
        + 4780137299/4398046511104 * eps^23
        + 135454151123/140737488355328 * eps^25
        + 8739550412095/10133099161583616 * eps^27
        + 439310252633/562949953421312 * eps^29;
C2[10] = + 46189/2621440 * eps^10
        + 4199/1048576 * eps^12
        + 172159/67108864 * eps^14
        + 257431/134217728 * eps^16
        + 6604381/4294967296 * eps^18
        + 55148051/42949672960 * eps^20
        + 4844658589/4398046511104 * eps^22
        + 8475408793/8796093022208 * eps^24
        + 963016659745/1125899906842624 * eps^26
        + 1729685026007/2251799813685248 * eps^28
        + 100354915132471/144115188075855872 * eps^30;
C2[11] = + 88179/5767168 * eps^11
        + 29393/8388608 * eps^13
        + 151487/67108864 * eps^15
        + 455107/268435456 * eps^17
        + 5860189/4294967296 * eps^19
        + 628398115/549755813888 * eps^21
        + 4324974541/4398046511104 * eps^23
        + 15169948479/17592186044416 * eps^25
        + 863724574545/1125899906842624 * eps^27
        + 12434905703529/18014398509481984 * eps^29;
C2[12] = + 676039/50331648 * eps^12
        + 52003/16777216 * eps^14
        + 1077205/536870912 * eps^16
        + 304589/201326592 * eps^18
        + 1343185487/1099511627776 * eps^20
        + 1128482143/1099511627776 * eps^22
        + 93435460751/105553116266496 * eps^24
        + 13685462553/17592186044416 * eps^26
        + 24983462965221/36028797018963968 * eps^28
        + 67559103579581/108086391056891904 * eps^30;
C2[13] = + 1300075/109051904 * eps^13
        + 185725/67108864 * eps^15
        + 482885/268435456 * eps^17
        + 46765555/34359738368 * eps^19
        + 605955125/549755813888 * eps^21
        + 4083133535/4398046511104 * eps^23
        + 14117902665/17592186044416 * eps^25
        + 776981055/1099511627776 * eps^27
        + 11367459987135/18014398509481984 * eps^29;
C2[14] = + 5014575/469762048 * eps^14
        + 334305/134217728 * eps^16
        + 55828935/34359738368 * eps^18
        + 84736485/68719476736 * eps^20
        + 4403236035/4398046511104 * eps^22
        + 7434490215/8796093022208 * eps^24
        + 12878639895/17592186044416 * eps^26
        + 79525490115/123145302310912 * eps^28
        + 83239672976625/144115188075855872 * eps^30;
C2[15] = + 646323/67108864 * eps^15
        + 9694845/4294967296 * eps^17
        + 50755365/34359738368 * eps^19
        + 77241935/68719476736 * eps^21
        + 4023100545/4398046511104 * eps^23
        + 13613065131/17592186044416 * eps^25
        + 738265615/1099511627776 * eps^27
        + 166992644595/281474976710656 * eps^29;
C2[16] = + 300540195/34359738368 * eps^16
        + 17678835/8589934592 * eps^18
        + 371255535/274877906944 * eps^20
        + 283171515/274877906944 * eps^22
        + 118236358635/140737488355328 * eps^24
        + 50102128545/70368744177664 * eps^26
        + 1393471517565/2251799813685248 * eps^28
        + 1233068062875/2251799813685248 * eps^30;
C2[17] = + 583401555/73014444032 * eps^17
        + 64822395/34359738368 * eps^19
        + 85292625/68719476736 * eps^21
        + 4172515215/4398046511104 * eps^23
        + 13636584885/17592186044416 * eps^25
        + 2894056305/4398046511104 * eps^27
        + 161224515885/281474976710656 * eps^29;
C2[18] = + 756261275/103079215104 * eps^18
        + 119409675/68719476736 * eps^20
        + 5039088285/4398046511104 * eps^22
        + 7718413945/8796093022208 * eps^24
        + 12634163925/17592186044416 * eps^26
        + 10741625085/17592186044416 * eps^28
        + 76701028811195/144115188075855872 * eps^30;
C2[19] = + 4418157975/652835028992 * eps^19
        + 883631595/549755813888 * eps^21
        + 4670624145/4398046511104 * eps^23
        + 14333193015/17592186044416 * eps^25
        + 2937289215/4398046511104 * eps^27
        + 10243215614805/18014398509481984 * eps^29;
C2[20] = + 6892326441/1099511627776 * eps^20
        + 1641030105/1099511627776 * eps^22
        + 34760001315/35184372088832 * eps^24
        + 13355260815/17592186044416 * eps^26
        + 22452476602335/36028797018963968 * eps^28
        + 95701981543233/180143985094819840 * eps^30;
C2[21] = + 22427411435/3848290697216 * eps^21
        + 6116566755/4398046511104 * eps^23
        + 16222198785/17592186044416 * eps^25
        + 798965451635/1125899906842624 * eps^27
        + 10507463872035/18014398509481984 * eps^29;
C2[22] = + 263012370465/48378511622144 * eps^22
        + 11435320455/8796093022208 * eps^24
        + 972002238675/1125899906842624 * eps^26
        + 1498026979605/2251799813685248 * eps^28
        + 78899312939325/144115188075855872 * eps^30;
C2[23] = + 514589420475/101155069755392 * eps^23
        + 171529806825/140737488355328 * eps^25
        + 912538572309/1125899906842624 * eps^27
        + 352031942007/562949953421312 * eps^29;
C2[24] = + 2687300306925/562949953421312 * eps^24
        + 322476036831/281474976710656 * eps^26
        + 6871220169399/9007199254740992 * eps^28
        + 15922598844211/27021597764222976 * eps^30;
C2[25] = + 15801325804719/3518437208883200 * eps^25
        + 1215486600363/1125899906842624 * eps^27
        + 405162200121/562949953421312 * eps^29;
C2[26] = + 61989816618513/14636698788954112 * eps^26
        + 2295919134019/2251799813685248 * eps^28
        + 98068545867383/144115188075855872 * eps^30;
C2[27] = + 121683714103007/30399297484750848 * eps^27
        + 17383387729001/18014398509481984 * eps^29;
C2[28] = + 136583760727865/36028797018963968 * eps^28
        + 32968493968795/36028797018963968 * eps^30;
C2[29] = + 1879204156221315/522417556774977536 * eps^29;
C2[30] = + 7391536347803839/2161727821137838080 * eps^30;

A3 = 1 - (1/2 - 1/2*n) * eps
       - (1/4 + 1/8*n - 3/8*n^2) * eps^2
       - (1/16 + 3/16*n + 1/16*n^2 - 5/16*n^3) * eps^3
       - (3/64 + 1/32*n + 5/32*n^2 + 5/128*n^3 - 35/128*n^4) * eps^4
       - (3/128 + 5/128*n + 5/256*n^2 + 35/256*n^3 + 7/256*n^4 - 63/256*n^5) * eps^5
       - (5/256 + 15/1024*n + 35/1024*n^2 + 7/512*n^3 + 63/512*n^4 + 21/1024*n^5 - 231/1024*n^6) * eps^6
       - (25/2048 + 35/2048*n + 21/2048*n^2 + 63/2048*n^3 + 21/2048*n^4 + 231/2048*n^5 + 33/2048*n^6 - 429/2048*n^7) * eps^7
       - (175/16384 + 35/4096*n + 63/4096*n^2 + 63/8192*n^3 + 231/8192*n^4 + 33/4096*n^5 + 429/4096*n^6 + 429/32768*n^7 - 6435/32768*n^8) * eps^8
       - (245/32768 + 315/32768*n + 105/16384*n^2 + 231/16384*n^3 + 99/16384*n^4 + 429/16384*n^5 + 429/65536*n^6 + 6435/65536*n^7 + 715/65536*n^8 - 12155/65536*n^9) * eps^9
       - (441/65536 + 735/131072*n + 1155/131072*n^2 + 165/32768*n^3 + 429/32768*n^4 + 1287/262144*n^5 + 6435/262144*n^6 + 715/131072*n^7 + 12155/131072*n^8 + 2431/262144*n^9 - 46189/262144*n^10) * eps^10
       - (1323/262144 + 1617/262144*n + 1155/262144*n^2 + 2145/262144*n^3 + 2145/524288*n^4 + 6435/524288*n^5 + 2145/524288*n^6 + 12155/524288*n^7 + 2431/524288*n^8 + 46189/524288*n^9 + 4199/524288*n^10 - 88179/524288*n^11) * eps^11
       - (4851/1048576 + 2079/524288*n + 3003/524288*n^2 + 15015/4194304*n^3 + 32175/4194304*n^4 + 3575/1048576*n^5 + 12155/1048576*n^6 + 7293/2097152*n^7 + 46189/2097152*n^8 + 4199/1048576*n^9 + 88179/1048576*n^10 + 29393/4194304*n^11 - 676039/4194304*n^12) * eps^12
       - (7623/2097152 + 9009/2097152*n + 27027/8388608*n^2 + 45045/8388608*n^3 + 25025/8388608*n^4 + 60775/8388608*n^5 + 12155/4194304*n^6 + 46189/4194304*n^7 + 12597/4194304*n^8 + 88179/4194304*n^9 + 29393/8388608*n^10 + 676039/8388608*n^11 + 52003/8388608*n^12 - 1300075/8388608*n^13) * eps^13
       - (14157/4194304 + 99099/33554432*n + 135135/33554432*n^2 + 45045/16777216*n^3 + 85085/16777216*n^4 + 85085/33554432*n^5 + 230945/33554432*n^6 + 20995/8388608*n^7 + 88179/8388608*n^8 + 88179/33554432*n^9 + 676039/33554432*n^10 + 52003/16777216*n^11 + 1300075/16777216*n^12 + 185725/33554432*n^13 - 5014575/33554432*n^14) * eps^14
       - (184041/67108864 + 212355/67108864*n + 165165/67108864*n^2 + 255255/67108864*n^3 + 153153/67108864*n^4 + 323323/67108864*n^5 + 146965/67108864*n^6 + 440895/67108864*n^7 + 146965/67108864*n^8 + 676039/67108864*n^9 + 156009/67108864*n^10 + 1300075/67108864*n^11 + 185725/67108864*n^12 + 5014575/67108864*n^13 + 334305/67108864*n^14) * eps^15
       - (2760615/1073741824 + 306735/134217728*n + 401115/134217728*n^2 + 561561/268435456*n^3 + 969969/268435456*n^4 + 264537/134217728*n^5 + 617253/134217728*n^6 + 1028755/536870912*n^7 + 3380195/536870912*n^8 + 260015/134217728*n^9 + 1300075/134217728*n^10 + 557175/268435456*n^11 + 5014575/268435456*n^12 + 334305/134217728*n^13) * eps^16
       - (4601025/2147483648 + 5214495/2147483648*n + 1042899/536870912*n^2 + 1524237/536870912*n^3 + 969969/536870912*n^4 + 1851759/536870912*n^5 + 1851759/1073741824*n^6 + 4732273/1073741824*n^7 + 1820105/1073741824*n^8 + 6500375/1073741824*n^9 + 928625/536870912*n^10 + 5014575/536870912*n^11 + 1002915/536870912*n^12) * eps^17
       - (8690825/4294967296 + 15643485/8589934592*n + 19815081/8589934592*n^2 + 1801371/1073741824*n^3 + 2909907/1073741824*n^4 + 6789783/4294967296*n^5 + 14196819/4294967296*n^6 + 3276189/2147483648*n^7 + 9100525/2147483648*n^8 + 6500375/4294967296*n^9 + 25072875/4294967296*n^10 + 1671525/1073741824*n^11) * eps^18
       - (29548805/17179869184 + 33025135/17179869184*n + 27020565/17179869184*n^2 + 37828791/17179869184*n^3 + 12609597/8589934592*n^4 + 22309287/8589934592*n^5 + 12012693/8589934592*n^6 + 27301575/8589934592*n^7 + 11700675/8589934592*n^8 + 35102025/8589934592*n^9 + 11700675/8589934592*n^10) * eps^19
       - (112285459/68719476736 + 51038845/34359738368*n + 63047985/34359738368*n^2 + 189143955/137438953472*n^3 + 290020731/137438953472*n^4 + 22309287/17179869184*n^5 + 42902475/17179869184*n^6 + 42902475/34359738368*n^7 + 105306075/34359738368*n^8 + 21061215/17179869184*n^9) * eps^20
       - (193947611/137438953472 + 214363149/137438953472*n + 357271915/274877906944*n^2 + 483367885/274877906944*n^3 + 334639305/274877906944*n^4 + 557732175/274877906944*n^5 + 79676025/68719476736*n^6 + 165480975/68719476736*n^7 + 77224455/68719476736*n^8) * eps^21
       - (370263621/274877906944 + 1357633277/1099511627776*n + 1643450809/1099511627776*n^2 + 632096465/549755813888*n^3 + 929553625/549755813888*n^4 + 1195140375/1099511627776*n^5 + 2151252675/1099511627776*n^6 + 143416845/137438953472*n^7) * eps^22
       - (2591845347/2199023255552 + 2838687761/2199023255552*n + 2401966567/2199023255552*n^2 + 3160482325/2199023255552*n^3 + 2257487375/2199023255552*n^4 + 3585421125/2199023255552*n^5 + 2151252675/2199023255552*n^6) * eps^23
       - (19870814327/17592186044416 + 4585572537/4398046511104*n + 5459014925/4398046511104*n^2 + 8578452025/8796093022208*n^3 + 12190431825/8796093022208*n^4 + 4063477275/4398046511104*n^5) * eps^24
       - (35156056117/35184372088832 + 38213104475/35184372088832*n + 16377044775/17592186044416*n^2 + 21056200425/17592186044416*n^3 + 15441213645/17592186044416*n^4) * eps^25
       - (67607800225/70368744177664 + 125557343275/140737488355328*n + 147393402975/140737488355328*n^2 + 29478680595/35184372088832*n^3) * eps^26
       - (241456429375/281474976710656 + 260772943725/281474976710656*n + 226003217895/281474976710656*n^2) * eps^27
       - (931331941875/1125899906842624 + 434621572875/562949953421312*n) * eps^28
       - 1676397495375/2251799813685248 * eps^29;

C3[1] = + (1/4 - 1/4*n) * eps
        + (1/8 - 1/8*n^2) * eps^2
        + (3/64 + 3/64*n - 1/64*n^2 - 5/64*n^3) * eps^3
        + (5/128 + 1/64*n + 1/64*n^2 - 1/64*n^3 - 7/128*n^4) * eps^4
        + (3/128 + 11/512*n + 3/512*n^2 + 1/256*n^3 - 7/512*n^4 - 21/512*n^5) * eps^5
        + (21/1024 + 5/512*n + 13/1024*n^2 + 1/512*n^3 - 1/1024*n^4 - 3/256*n^5 - 33/1024*n^6) * eps^6
        + (243/16384 + 189/16384*n + 83/16384*n^2 + 127/16384*n^3 + 3/16384*n^4 - 51/16384*n^5 - 165/16384*n^6 - 429/16384*n^7) * eps^7
        + (435/32768 + 109/16384*n + 1/128*n^2 + 45/16384*n^3 + 39/8192*n^4 - 11/16384*n^5 - 33/8192*n^6 - 143/16384*n^7 - 715/32768*n^8) * eps^8
        + (345/32768 + 953/131072*n + 259/65536*n^2 + 365/65536*n^3 + 95/65536*n^4 + 47/16384*n^5 - 143/131072*n^6 - 143/32768*n^7 - 1001/131072*n^8 - 2431/131072*n^9) * eps^9
        + (2511/262144 + 317/65536*n + 1355/262144*n^2 + 165/65536*n^3 + 531/131072*n^4 + 89/131072*n^5 + 107/65536*n^6 - 169/131072*n^7 - 1157/262144*n^8 - 221/32768*n^9 - 4199/262144*n^10) * eps^10
        + (8401/1048576 + 5327/1048576*n + 807/262144*n^2 + 8243/2097152*n^3 + 3415/2097152*n^4 + 6235/2097152*n^5 + 429/2097152*n^6 + 845/1048576*n^7 - 2873/2097152*n^8 - 9061/2097152*n^9 - 12597/2097152*n^10 - 29393/2097152*n^11) * eps^11
        + (15477/2097152 + 969/262144*n + 15445/4194304*n^2 + 2237/1048576*n^3 + 6429/2097152*n^4 + 2183/2097152*n^5 + 9169/4194304*n^6 - 197/2097152*n^7 + 1019/4194304*n^8 - 2907/2097152*n^9 - 8721/2097152*n^10 - 11305/2097152*n^11 - 52003/4194304*n^12) * eps^12
        + (26789/4194304 + 63733/16777216*n + 40995/16777216*n^2 + 1517/524288*n^3 + 25475/16777216*n^4 + 40625/16777216*n^5 + 5365/8388608*n^6 + 839/524288*n^7 - 595/2097152*n^8 - 2431/16777216*n^9 - 22933/16777216*n^10 - 33269/8388608*n^11 - 81719/16777216*n^12 - 185725/16777216*n^13) * eps^13
        + (199327/33554432 + 49237/16777216*n + 93101/33554432*n^2 + 29853/16777216*n^3 + 78579/33554432*n^4 + 285/262144*n^5 + 64637/33554432*n^6 + 3015/8388608*n^7 + 38843/33554432*n^8 - 6783/16777216*n^9 - 13889/33554432*n^10 - 22287/16777216*n^11 - 126293/33554432*n^12 - 37145/8388608*n^13 - 334305/33554432*n^14) * eps^14
        + (5651931/1073741824 + 3197305/1073741824*n + 2129255/1073741824*n^2 + 2385073/1073741824*n^3 + 1438067/1073741824*n^4 + 2065081/1073741824*n^5 + 830627/1073741824*n^6 + 1651687/1073741824*n^7 + 172907/1073741824*n^8 + 879393/1073741824*n^9 - 515185/1073741824*n^10 - 645031/1073741824*n^11 - 1374365/1073741824*n^12 - 3825935/1073741824*n^13 - 4345965/1073741824*n^14) * eps^15
        + (10594535/2147483648 + 2577049/1073741824*n + 2340339/1073741824*n^2 + 1599809/1073741824*n^3 + 1974139/1073741824*n^4 + 1095805/1073741824*n^5 + 855347/536870912*n^6 + 580477/1073741824*n^7 + 330109/268435456*n^8 + 20577/1073741824*n^9 + 598443/1073741824*n^10 - 564167/1073741824*n^11 - 783541/1073741824*n^12 - 1317555/1073741824*n^13) * eps^16
        + (9550675/2147483648 + 20752127/8589934592*n + 7056899/4294967296*n^2 + 7580255/4294967296*n^3 + 4992507/4294967296*n^4 + 3321125/2147483648*n^5 + 3349163/4294967296*n^6 + 5700229/4294967296*n^7 + 1567945/4294967296*n^8 + 263547/268435456*n^9 - 355965/4294967296*n^10 + 1518119/4294967296*n^11 - 2366355/4294967296*n^12) * eps^17
        + (72058593/17179869184 + 8629549/4294967296*n + 30360645/17179869184*n^2 + 5413229/4294967296*n^3 + 12734831/8589934592*n^4 + 3957093/4294967296*n^5 + 11280727/8589934592*n^6 + 2549757/4294967296*n^7 + 9531415/8589934592*n^8 + 993989/4294967296*n^9 + 6705875/8589934592*n^10 - 671807/4294967296*n^11) * eps^18
        + (263253385/68719476736 + 138258975/68719476736*n + 23816915/17179869184*n^2 + 198093717/137438953472*n^3 + 69240987/68719476736*n^4 + 87088843/68719476736*n^5 + 50514007/68719476736*n^6 + 77115649/68719476736*n^7 + 30761115/68719476736*n^8 + 63886991/68719476736*n^9 + 8860067/68719476736*n^10) * eps^19
        + (499116509/137438953472 + 29445517/17179869184*n + 403691887/274877906944*n^2 + 37063307/34359738368*n^3 + 336216217/274877906944*n^4 + 56373745/68719476736*n^5 + 9400419/8589934592*n^6 + 40361177/68719476736*n^7 + 4136725/4294967296*n^8 + 22806365/68719476736*n^9) * eps^20
        + (921106197/274877906944 + 1880398291/1099511627776*n + 326574877/274877906944*n^2 + 661516723/549755813888*n^3 + 482354011/549755813888*n^4 + 1162954687/1099511627776*n^5 + 185209863/274877906944*n^6 + 261495221/274877906944*n^7 + 64353371/137438953472*n^8) * eps^21
        + (7015755337/2199023255552 + 408123935/274877906944*n + 2737209361/2199023255552*n^2 + 128335869/137438953472*n^3 + 2262026963/2199023255552*n^4 + 100083329/137438953472*n^5 + 2032983351/2199023255552*n^6 + 152722157/274877906944*n^7) * eps^22
        + (52217815849/17592186044416 + 25998927035/17592186044416*n + 18152051013/17592186044416*n^2 + 17993187773/17592186044416*n^3 + 13531950573/17592186044416*n^4 + 15783055573/17592186044416*n^5 + 1342789487/2199023255552*n^6) * eps^23
        + (99797592861/35184372088832 + 22918110427/17592186044416*n + 9429859753/8796093022208*n^2 + 14370219019/17592186044416*n^3 + 15464224607/17592186044416*n^4 + 5696035625/8796093022208*n^5) * eps^24
        + (93477766213/35184372088832 + 182178015931/140737488355328*n + 63784112813/70368744177664*n^2 + 15523581719/17592186044416*n^3 + 47802611279/70368744177664*n^4) * eps^25
        + (716876091533/281474976710656 + 81306684531/70368744177664*n + 263375014467/281474976710656*n^2 + 50762313771/70368744177664*n^3) * eps^26
        + (2701098070323/1125899906842624 + 1291014428313/1125899906842624*n + 905405918351/1125899906842624*n^2) * eps^27
        + (5192918413211/2251799813685248 + 1164465998161/1125899906842624*n) * eps^28
        + 4914956648311/2251799813685248 * eps^29;
C3[2] = + (1/16 - 3/32*n + 1/32*n^2) * eps^2
        + (3/64 - 1/32*n - 3/64*n^2 + 1/32*n^3) * eps^3
        + (3/128 + 1/128*n - 9/256*n^2 - 3/128*n^3 + 7/256*n^4) * eps^4
        + (5/256 + 1/256*n - 1/128*n^2 - 7/256*n^3 - 3/256*n^4 + 3/128*n^5) * eps^5
        + (27/2048 + 69/8192*n - 39/8192*n^2 - 47/4096*n^3 - 41/2048*n^4 - 45/8192*n^5 + 165/8192*n^6) * eps^6
        + (187/16384 + 39/8192*n + 31/16384*n^2 - 63/8192*n^3 - 185/16384*n^4 - 119/8192*n^5 - 33/16384*n^6 + 143/8192*n^7) * eps^7
        + (287/32768 + 47/8192*n + 31/65536*n^2 - 3/2048*n^3 - 537/65536*n^4 - 41/4096*n^5 - 693/65536*n^6 + 1001/65536*n^8) * eps^8
        + (255/32768 + 249/65536*n + 43/16384*n^2 - 119/65536*n^3 - 25/8192*n^4 - 507/65536*n^5 - 35/4096*n^6 - 507/65536*n^7 + 39/32768*n^8 + 221/16384*n^9) * eps^9
        + (1675/262144 + 2127/524288*n + 753/524288*n^2 + 357/524288*n^3 - 3109/1048576*n^4 - 3873/1048576*n^5 - 1821/262144*n^6 - 1885/262144*n^7 - 2977/524288*n^8 + 1989/1048576*n^9 + 12597/1048576*n^10) * eps^10
        + (6065/1048576 + 1551/524288*n + 75/32768*n^2 - 5/262144*n^3 - 1085/2097152*n^4 - 1815/524288*n^5 - 8057/2097152*n^6 - 1597/262144*n^7 - 12633/2097152*n^8 - 4369/1048576*n^9 + 4845/2097152*n^10 + 11305/1048576*n^11) * eps^11
        + (10377/2097152 + 1585/524288*n + 12521/8388608*n^2 + 73/65536*n^3 - 7799/8388608*n^4 - 645/524288*n^5 - 1883/524288*n^6 - 7843/2097152*n^7 - 2769/524288*n^8 - 21165/4194304*n^9 - 25517/8388608*n^10 + 10659/4194304*n^11 + 81719/8388608*n^12) * eps^12
        + (2381/524288 + 19679/8388608*n + 3951/2097152*n^2 + 4591/8388608*n^3 + 1267/4194304*n^4 - 6211/4194304*n^5 - 6839/4194304*n^6 - 3691/1048576*n^7 - 29513/8388608*n^8 - 38199/8388608*n^9 - 17765/4194304*n^10 - 18411/8388608*n^11 + 22287/8388608*n^12 + 37145/4194304*n^13) * eps^13
        + (267955/67108864 + 1262293/536870912*n + 723929/536870912*n^2 + 300995/268435456*n^3 - 28407/268435456*n^4 - 136037/536870912*n^5 - 962677/536870912*n^6 - 122923/67108864*n^7 - 897497/268435456*n^8 - 1743367/536870912*n^9 - 2103053/536870912*n^10 - 957049/268435456*n^11 - 52003/33554432*n^12 + 1448655/536870912*n^13 + 4345965/536870912*n^14) * eps^14
        + (3976491/1073741824 + 1022503/536870912*n + 1663043/1073741824*n^2 + 377461/536870912*n^3 + 604683/1073741824*n^4 - 298493/536870912*n^5 - 671633/1073741824*n^6 - 1045847/536870912*n^7 - 2047913/1073741824*n^8 - 1673607/536870912*n^9 - 3182937/1073741824*n^10 - 1808097/536870912*n^11 - 3232489/1073741824*n^12 - 565915/536870912*n^13 + 2890755/1073741824*n^14) * eps^15
        + (7129743/2147483648 + 1015025/536870912*n + 5052845/4294967296*n^2 + 1096857/1073741824*n^3 + 1006901/4294967296*n^4 + 10157/67108864*n^5 - 3691453/4294967296*n^6 - 232785/268435456*n^7 - 8591613/4294967296*n^8 - 2045245/1073741824*n^9 - 12341583/4294967296*n^10 - 1443525/536870912*n^11 - 12440079/4294967296*n^12 - 2737805/1073741824*n^13) * eps^16
        + (6667727/2147483648 + 6786587/4294967296*n + 2765703/2147483648*n^2 + 3065499/4294967296*n^3 + 1341327/2147483648*n^4 - 481047/4294967296*n^5 - 80463/536870912*n^6 - 4538443/4294967296*n^7 - 2183311/2147483648*n^8 - 8533921/4294967296*n^9 - 3983383/2147483648*n^10 - 11294905/4294967296*n^11 - 5218401/2147483648*n^12) * eps^17
        + (48519273/17179869184 + 53624999/34359738368*n + 35043145/34359738368*n^2 + 31055675/34359738368*n^3 + 25399201/68719476736*n^4 + 10932099/34359738368*n^5 - 25183979/68719476736*n^6 - 12612269/34359738368*n^7 - 80897803/68719476736*n^8 - 37844017/34359738368*n^9 - 132790935/68719476736*n^10 - 61071857/34359738368*n^11) * eps^18
        + (182709161/68719476736 + 45893303/34359738368*n + 37309115/34359738368*n^2 + 2893075/4294967296*n^3 + 21013705/34359738368*n^4 + 7175491/68719476736*n^5 + 2804597/34359738368*n^6 - 37828469/68719476736*n^7 - 17888297/34359738368*n^8 - 85404217/68719476736*n^9 - 39202063/34359738368*n^10) * eps^19
        + (336130837/137438953472 + 180823959/137438953472*n + 487608355/549755813888*n^2 + 218243165/274877906944*n^3 + 227499107/549755813888*n^4 + 104333133/274877906944*n^5 - 13837431/137438953472*n^6 - 27388031/274877906944*n^7 - 93516413/137438953472*n^8 - 172126779/274877906944*n^9) * eps^20
        + (636339537/274877906944 + 630601557/549755813888*n + 510119863/549755813888*n^2 + 339882125/549755813888*n^3 + 157181907/274877906944*n^4 + 57322697/274877906944*n^5 + 53319741/274877906944*n^6 - 35494201/137438953472*n^7 - 65167699/274877906944*n^8) * eps^21
        + (4724647749/2199023255552 + 9924101863/8796093022208*n + 6828890391/8796093022208*n^2 + 3070661829/4398046511104*n^3 + 229152657/549755813888*n^4 + 3452592737/8796093022208*n^5 + 390195853/8796093022208*n^6 + 403726013/8796093022208*n^7) * eps^22
        + (35940468233/17592186044416 + 8781999081/8796093022208*n + 14121810537/17592186044416*n^2 + 4938417863/8796093022208*n^3 + 9227803497/17592186044416*n^4 + 2245716697/8796093022208*n^5 + 2160045085/8796093022208*n^6) * eps^23
        + (67197451821/35184372088832 + 8631642763/8796093022208*n + 48175476253/70368744177664*n^2 + 5424112681/8796093022208*n^3 + 28247205103/70368744177664*n^4 + 421237869/1099511627776*n^5) * eps^24
        + (64142976365/35184372088832 + 61855152171/70368744177664*n + 385976459/549755813888*n^2 + 35768834103/70368744177664*n^3 + 16801928753/35184372088832*n^4) * eps^25
        + (482598495517/281474976710656 + 486224128685/562949953421312*n + 342398306855/562949953421312*n^2 + 2408805385/4398046511104*n^3) * eps^26
        + (1848743160243/1125899906842624 + 439979250473/562949953421312*n + 698099481901/1125899906842624*n^2) * eps^27
        + (3494999262339/2251799813685248 + 1729207092437/2251799813685248*n) * eps^28
        + 6713540223121/4503599627370496 * eps^29;
C3[3] = + (5/192 - 3/64*n + 5/192*n^2 - 1/192*n^3) * eps^3
        + (3/128 - 5/192*n - 1/64*n^2 + 5/192*n^3 - 1/128*n^4) * eps^4
        + (7/512 - 1/384*n - 77/3072*n^2 + 5/3072*n^3 + 65/3072*n^4 - 9/1024*n^5) * eps^5
        + (3/256 - 1/1024*n - 71/6144*n^2 - 47/3072*n^3 + 9/1024*n^4 + 25/1536*n^5 - 55/6144*n^6) * eps^6
        + (139/16384 + 143/49152*n - 383/49152*n^2 - 179/16384*n^3 - 121/16384*n^4 + 547/49152*n^5 + 605/49152*n^6 - 143/16384*n^7) * eps^7
        + (243/32768 + 95/49152*n - 41/16384*n^2 - 147/16384*n^3 - 389/49152*n^4 - 109/49152*n^5 + 557/49152*n^6 + 455/49152*n^7 - 273/32768*n^8) * eps^8
        + (581/98304 + 377/131072*n - 33/16384*n^2 - 907/196608*n^3 - 515/65536*n^4 - 1937/393216*n^5 + 89/98304*n^6 + 2093/196608*n^7 + 455/65536*n^8 - 1547/196608*n^9) * eps^9
        + (1383/262144 + 103/49152*n - 17/262144*n^2 - 127/32768*n^3 - 3853/786432*n^4 - 25/4096*n^5 - 2011/786432*n^6 + 265/98304*n^7 + 1895/196608*n^8 + 85/16384*n^9 - 969/131072*n^10) * eps^10
        + (4649/1048576 + 7447/3145728*n - 77/393216*n^2 - 3663/2097152*n^3 - 9285/2097152*n^4 - 27433/6291456*n^5 - 27545/6291456*n^6 - 2627/3145728*n^7 + 22993/6291456*n^8 + 17969/2097152*n^9 + 8075/2097152*n^10 - 14535/2097152*n^11) * eps^11
        + (8439/2097152 + 241/131072*n + 7829/12582912*n^2 - 1667/1048576*n^3 - 5295/2097152*n^4 - 26867/6291456*n^5 - 14817/4194304*n^6 - 18287/6291456*n^7 + 1505/4194304*n^8 + 25823/6291456*n^9 + 15827/2097152*n^10 + 17765/6291456*n^11 - 81719/12582912*n^12) * eps^12
        + (58663/16777216 + 48239/25165824*n + 81155/201326592*n^2 - 108067/201326592*n^3 - 467735/201326592*n^4 - 550477/201326592*n^5 - 380633/100663296*n^6 - 269125/100663296*n^7 - 174181/100663296*n^8 + 9707/8388608*n^9 + 854981/201326592*n^10 + 444125/67108864*n^11 + 408595/201326592*n^12 - 408595/67108864*n^13) * eps^13
        + (53929/16777216 + 313117/201326592*n + 317377/402653184*n^2 - 114511/201326592*n^3 - 62369/50331648*n^4 - 21877/8388608*n^5 - 1055003/402653184*n^6 - 106461/33554432*n^7 - 381119/201326592*n^8 - 55243/67108864*n^9 + 672619/402653184*n^10 + 846887/201326592*n^11 + 1166353/201326592*n^12 + 142025/100663296*n^13 - 766935/134217728*n^14) * eps^14
        + (9205697/3221225472 + 1685361/1073741824*n + 631247/1073741824*n^2 - 12349/1073741824*n^3 - 1279425/1073741824*n^4 - 1722535/1073741824*n^5 - 8411347/3221225472*n^6 - 7543081/3221225472*n^7 - 2745069/1073741824*n^8 - 1319223/1073741824*n^9 - 150233/1073741824*n^10 + 6386185/3221225472*n^11 + 4360823/1073741824*n^12 + 16332875/3221225472*n^13 + 994175/1073741824*n^14) * eps^15
        + (5698375/2147483648 + 1411153/1073741824*n + 633185/805306368*n^2 - 312125/3221225472*n^3 - 906475/1610612736*n^4 - 4985293/3221225472*n^5 - 1865903/1073741824*n^6 - 2632335/1073741824*n^7 - 2142387/1073741824*n^8 - 2132439/1073741824*n^9 - 137693/201326592*n^10 + 1176251/3221225472*n^11 + 3469849/1610612736*n^12 + 12431155/3221225472*n^13) * eps^16
        + (5151335/2147483648 + 11221815/8589934592*n + 4004635/6442450944*n^2 + 352181/1610612736*n^3 - 7504877/12884901888*n^4 - 23563667/25769803776*n^5 - 7348445/4294967296*n^6 - 924507/536870912*n^7 - 4740015/2147483648*n^8 - 14053273/8589934592*n^9 - 2388169/1610612736*n^10 - 1600145/6442450944*n^11 + 9427907/12884901888*n^12) * eps^17
        + (38568657/17179869184 + 2405303/2147483648*n + 12559943/17179869184*n^2 + 101021/805306368*n^3 - 3473571/17179869184*n^4 - 11685365/12884901888*n^5 - 57369983/51539607552*n^6 - 22445501/12884901888*n^7 - 27767351/17179869184*n^8 - 776185/402653184*n^9 - 22223933/17179869184*n^10 - 6776669/6442450944*n^11) * eps^18
        + (141238745/68719476736 + 227781229/206158430208*n + 15439981/25769803776*n^2 + 129846877/412316860416*n^3 - 17007629/68719476736*n^4 - 34417161/68719476736*n^5 - 227700493/206158430208*n^6 - 82496459/68719476736*n^7 - 347760895/206158430208*n^8 - 100402157/68719476736*n^9 - 338650721/206158430208*n^10) * eps^19
        + (266070741/137438953472 + 24865997/25769803776*n + 546610979/824633720832*n^2 + 23564155/103079215104*n^3 - 1988681/274877906944*n^4 - 35689789/68719476736*n^5 - 18022529/25769803776*n^6 - 82884377/68719476736*n^7 - 62369083/51539607552*n^8 - 108501709/68719476736*n^9) * eps^20
        + (1476084109/824633720832 + 1042422451/1099511627776*n + 1838348957/3298534883328*n^2 + 1148287217/3298534883328*n^3 - 65602265/1099511627776*n^4 - 25911799/103079215104*n^5 - 1166561623/1649267441664*n^6 - 450241025/549755813888*n^7 - 4082983123/3298534883328*n^8) * eps^21
        + (3727307793/2199023255552 + 2771727475/3298534883328*n + 1965618587/3298534883328*n^2 + 299691921/1099511627776*n^3 + 648655007/6597069766656*n^4 - 232283647/824633720832*n^5 - 1414792807/3298534883328*n^6 - 1364945647/1649267441664*n^7) * eps^22
        + (27791243081/17592186044416 + 43484270377/52776558133248*n + 8988365213/17592186044416*n^2 + 6177195751/17592186044416*n^3 + 821647265/17592186044416*n^4 - 5244741905/52776558133248*n^5 - 5898760729/13194139533312*n^6) * eps^23
        + (52866931869/35184372088832 + 13002628835/17592186044416*n + 28235801693/52776558133248*n^2 + 15115493921/52776558133248*n^3 + 1357399595/8796093022208*n^4 - 1176448685/8796093022208*n^5) * eps^24
        + (49596004877/35184372088832 + 101897209187/140737488355328*n + 16392942713/35184372088832*n^2 + 35874509113/105553116266496*n^3 + 11256301655/105553116266496*n^4) * eps^25
        + (378812456237/281474976710656 + 23082024431/35184372088832*n + 406385867693/844424930131968*n^2 + 30062357575/105553116266496*n^3) * eps^26
        + (4287844495145/3377699720527872 + 723291681375/1125899906842624*n + 477936436199/1125899906842624*n^2) * eps^27
        + (2738088177221/2251799813685248 + 1982787518731/3377699720527872*n) * eps^28
        + 41515375436483/36028797018963968 * eps^29;
C3[4] = + (7/512 - 7/256*n + 5/256*n^2 - 7/1024*n^3 + 1/1024*n^4) * eps^4
        + (7/512 - 5/256*n - 7/2048*n^2 + 9/512*n^3 - 21/2048*n^4 + 1/512*n^5) * eps^5
        + (9/1024 - 43/8192*n - 129/8192*n^2 + 39/4096*n^3 + 91/8192*n^4 - 91/8192*n^5 + 11/4096*n^6) * eps^6
        + (127/16384 - 23/8192*n - 165/16384*n^2 - 47/8192*n^3 + 213/16384*n^4 + 11/2048*n^5 - 175/16384*n^6 + 13/4096*n^7) * eps^7
        + (193/32768 + 3/8192*n - 505/65536*n^2 - 227/32768*n^3 + 75/65536*n^4 + 801/65536*n^5 + 165/131072*n^6 - 637/65536*n^7 + 455/131072*n^8) * eps^8
        + (171/32768 + 25/65536*n - 259/65536*n^2 - 471/65536*n^3 - 351/131072*n^4 + 605/131072*n^5 + 41/4096*n^6 - 189/131072*n^7 - 1127/131072*n^8 + 119/32768*n^9) * eps^9
        + (1121/262144 + 339/262144*n - 801/262144*n^2 - 2525/524288*n^3 - 2519/524288*n^4 + 73/131072*n^5 + 1539/262144*n^6 + 1989/262144*n^7 - 1633/524288*n^8 - 3927/524288*n^9 + 969/262144*n^10) * eps^10
        + (2017/524288 + 273/262144*n - 1467/1048576*n^2 - 277/65536*n^3 - 4123/1048576*n^4 - 153/65536*n^5 + 1331/524288*n^6 + 1549/262144*n^7 + 5677/1048576*n^8 - 1071/262144*n^9 - 6783/1048576*n^10 + 969/262144*n^11) * eps^11
        + (55215/16777216 + 11307/8388608*n - 2363/2097152*n^2 - 177843/67108864*n^3 - 268499/67108864*n^4 - 41907/16777216*n^5 - 6403/16777216*n^6 + 118801/33554432*n^7 + 179785/33554432*n^8 + 30345/8388608*n^9 - 154071/33554432*n^10 - 373065/67108864*n^11 + 245157/67108864*n^12) * eps^12
        + (50365/16777216 + 2327/2097152*n - 47759/134217728*n^2 - 76829/33554432*n^3 - 383837/134217728*n^4 - 105473/33554432*n^5 - 74037/67108864*n^6 + 16197/16777216*n^7 + 260819/67108864*n^8 + 153431/33554432*n^9 + 294443/134217728*n^10 - 80465/16777216*n^11 - 639331/134217728*n^12 + 120175/33554432*n^13) * eps^13
        + (2769/1048576 + 654529/536870912*n - 163129/536870912*n^2 - 372645/268435456*n^3 - 1430285/536870912*n^4 - 1335009/536870912*n^5 - 284489/134217728*n^6 + 987/33554432*n^7 + 482449/268435456*n^8 + 2057345/536870912*n^9 + 2007901/536870912*n^10 + 293645/268435456*n^11 - 2581359/536870912*n^12 - 2187185/536870912*n^13 + 937365/268435456*n^14) * eps^14
        + (2615571/1073741824 + 552353/536870912*n + 90895/1073741824*n^2 - 652503/536870912*n^3 - 1983405/1073741824*n^4 - 680875/268435456*n^5 - 2001037/1073741824*n^6 - 156103/134217728*n^7 + 920027/1073741824*n^8 + 1204095/536870912*n^9 + 3815723/1073741824*n^10 + 1584867/536870912*n^11 + 278231/1073741824*n^12 - 315445/67108864*n^13 - 3736005/1073741824*n^14) * eps^15
        + (4692619/2147483648 + 572057/536870912*n + 260179/4294967296*n^2 - 2984769/4294967296*n^3 - 3625809/2147483648*n^4 - 8162427/4294967296*n^5 - 18409849/8589934592*n^6 - 639067/536870912*n^7 - 3156661/8589934592*n^8 + 3027631/2147483648*n^9 + 162319/67108864*n^10 + 13593091/4294967296*n^11 + 9656343/4294967296*n^12 - 1568255/4294967296*n^13) * eps^16
        + (4367867/2147483648 + 3942989/4294967296*n + 2323595/8589934592*n^2 - 2679169/4294967296*n^3 - 2473899/2147483648*n^4 - 15712829/8589934592*n^5 - 14665951/8589934592*n^6 - 14129447/8589934592*n^7 - 2450171/4294967296*n^8 + 529403/2147483648*n^9 + 14965037/8589934592*n^10 + 5189391/2147483648*n^11 + 5874821/2147483648*n^12) * eps^17
        + (31803789/17179869184 + 31805471/34359738368*n + 7655783/34359738368*n^2 - 10716843/34359738368*n^3 - 18130187/17179869184*n^4 - 23156361/17179869184*n^5 - 60088211/34359738368*n^6 - 11928127/8589934592*n^7 - 9775259/8589934592*n^8 - 1657343/34359738368*n^9 + 23786693/34359738368*n^10 + 65561705/34359738368*n^11) * eps^18
        + (119278493/68719476736 + 27869745/34359738368*n + 2944971/8589934592*n^2 - 10021441/34359738368*n^3 - 48412679/68719476736*n^4 - 43782451/34359738368*n^5 - 46594423/34359738368*n^6 - 52867989/34359738368*n^7 - 70453029/68719476736*n^8 - 23159185/34359738368*n^9 + 12551255/34359738368*n^10) * eps^19
        + (109782837/68719476736 + 110884309/137438953472*n + 159981789/549755813888*n^2 - 106745493/1099511627776*n^3 - 717924527/1099511627776*n^4 - 15979315/17179869184*n^5 - 732221291/549755813888*n^6 - 21353761/17179869184*n^7 - 347832177/274877906944*n^8 - 732828227/1099511627776*n^9) * eps^20
        + (414212295/274877906944 + 394066451/549755813888*n + 797767751/2199023255552*n^2 - 13938969/137438953472*n^3 - 922185663/2199023255552*n^4 - 241117663/274877906944*n^5 - 70260475/68719476736*n^6 - 702480169/549755813888*n^7 - 2332298309/2199023255552*n^8) * eps^21
        + (3077054969/2199023255552 + 6225526419/8796093022208*n + 2760680993/8796093022208*n^2 + 107993597/4398046511104*n^3 - 3483012103/8796093022208*n^4 - 5569520181/8796093022208*n^5 - 4345994585/4398046511104*n^6 - 8944055483/8796093022208*n^7) * eps^22
        + (23336011385/17592186044416 + 5594946455/8796093022208*n + 6303559381/17592186044416*n^2 + 78999975/8796093022208*n^3 - 4164504717/17592186044416*n^4 - 330002595/549755813888*n^5 - 3315820133/4398046511104*n^6) * eps^23
        + (43652141925/35184372088832 + 5501899769/8796093022208*n + 22131275675/70368744177664*n^2 + 820267293/8796093022208*n^3 - 16179701905/70368744177664*n^4 - 1872775091/4398046511104*n^5) * eps^24
        + (41556934973/35184372088832 + 39939504101/70368744177664*n + 753834291/2199023255552*n^2 + 5148539461/70368744177664*n^3 - 4176807933/35184372088832*n^4) * eps^25
        + (312802619769/281474976710656 + 78374027619/140737488355328*n + 42845064993/140737488355328*n^2 + 18460662479/140737488355328*n^3) * eps^26
        + (298867963845/281474976710656 + 71700391575/140737488355328*n + 45431388475/140737488355328*n^2) * eps^27
        + (36174484487935/36028797018963968 + 8994085968251/18014398509481984*n) * eps^28
        + 34671257326469/36028797018963968 * eps^29;
C3[5] = + (21/2560 - 9/512*n + 15/1024*n^2 - 7/1024*n^3 + 9/5120*n^4 - 1/5120*n^5) * eps^5
        + (9/1024 - 15/1024*n + 3/2048*n^2 + 57/5120*n^3 - 5/512*n^4 + 9/2560*n^5 - 1/2048*n^6) * eps^6
        + (99/16384 - 91/16384*n - 781/81920*n^2 + 883/81920*n^3 + 319/81920*n^4 - 783/81920*n^5 + 387/81920*n^6 - 13/16384*n^7) * eps^7
        + (179/32768 - 55/16384*n - 79/10240*n^2 - 27/81920*n^3 + 461/40960*n^4 - 139/81920*n^5 - 65/8192*n^6 + 441/81920*n^7 - 35/32768*n^8) * eps^8
        + (141/32768 - 109/131072*n - 217/32768*n^2 - 219/65536*n^3 + 1559/327680*n^4 + 5431/655360*n^5 - 203/40960*n^6 - 1943/327680*n^7 + 369/65536*n^8 - 85/65536*n^9) * eps^9
        + (1013/262144 - 15/32768*n - 5399/1310720*n^2 - 199/40960*n^3 + 1267/1310720*n^4 + 1007/163840*n^5 + 6277/1310720*n^6 - 527/81920*n^7 - 659/163840*n^8 + 459/81920*n^9 - 969/655360*n^10) * eps^10
        + (6787/2097152 + 797/2097152*n - 34683/10485760*n^2 - 257/65536*n^3 - 7753/4194304*n^4 + 72641/20971520*n^5 + 115867/20971520*n^6 + 38817/20971520*n^7 - 142119/20971520*n^8 - 50133/20971520*n^9 + 113373/20971520*n^10 - 6783/4194304*n^11) * eps^11
        + (12315/4194304 + 799/2097152*n - 41519/20971520*n^2 - 19671/5242880*n^3 - 93317/41943040*n^4 + 12949/20971520*n^5 + 18211/4194304*n^6 + 86317/20971520*n^7 - 2971/10485760*n^8 - 135789/20971520*n^9 - 11229/10485760*n^10 + 107217/20971520*n^11 - 14421/8388608*n^12) * eps^12
        + (42753/16777216 + 11749/16777216*n - 534457/335544320*n^2 - 914519/335544320*n^3 - 953267/335544320*n^4 - 128591/335544320*n^5 + 354589/167772160*n^6 + 703457/167772160*n^7 + 433157/167772160*n^8 - 17697/10485760*n^9 - 1961579/335544320*n^10 - 2717/67108864*n^11 + 1600731/335544320*n^12 - 120175/67108864*n^13) * eps^13
        + (78439/33554432 + 41589/67108864*n - 606887/671088640*n^2 - 813811/335544320*n^3 - 795669/335544320*n^4 - 126481/83886080*n^5 + 693943/671088640*n^6 + 92775/33554432*n^7 + 1181311/335544320*n^8 + 409551/335544320*n^9 - 1692661/671088640*n^10 - 1705561/335544320*n^11 + 124729/167772160*n^12 + 148005/33554432*n^13 - 246675/134217728*n^14) * eps^14
        + (11153319/5368709120 + 806753/1073741824*n - 3945181/5368709120*n^2 - 9244317/5368709120*n^3 - 12780537/5368709120*n^4 - 8161927/5368709120*n^5 - 291353/1073741824*n^6 + 10250183/5368709120*n^7 + 15202259/5368709120*n^8 + 14255529/5368709120*n^9 + 710823/5368709120*n^10 - 3162357/1073741824*n^11 - 23067781/5368709120*n^12 + 1424137/1073741824*n^13 + 4351347/1073741824*n^14) * eps^15
        + (4132007/2147483648 + 710105/1073741824*n - 969349/2684354560*n^2 - 1619999/1073741824*n^3 - 5011741/2684354560*n^4 - 9930299/5368709120*n^5 - 1564801/2684354560*n^6 + 3561709/5368709120*n^7 + 1553999/671088640*n^8 + 13695849/5368709120*n^9 + 4792721/2684354560*n^10 - 3635919/5368709120*n^11 - 8283611/2684354560*n^12 - 3808363/1073741824*n^13) * eps^16
        + (3734859/2147483648 + 6155471/8589934592*n - 789297/2684354560*n^2 - 11355613/10737418240*n^3 - 37704683/21474836480*n^4 - 67981809/42949672960*n^5 - 4910633/4294967296*n^6 + 122353/536870912*n^7 + 13584809/10737418240*n^8 + 102204983/42949672960*n^9 + 22521571/10737418240*n^10 + 5393991/5368709120*n^11 - 26677631/21474836480*n^12) * eps^17
        + (27894537/17179869184 + 341135/536870912*n - 6919577/85899345920*n^2 - 9962193/10737418240*n^3 - 116140263/85899345920*n^4 - 35024383/21474836480*n^5 - 93895333/85899345920*n^6 - 9724319/21474836480*n^7 + 71547201/85899345920*n^8 + 16957261/10737418240*n^9 + 38167643/17179869184*n^10 + 4254817/2684354560*n^11) * eps^18
        + (102149077/68719476736 + 45149747/68719476736*n - 5268353/85899345920*n^2 - 438238873/687194767360*n^3 - 21374577/17179869184*n^4 - 229885771/171798691840*n^5 - 111314271/85899345920*n^6 - 190649511/343597383680*n^7 + 21780193/171798691840*n^8 + 42150359/34359738368*n^9 + 575291951/343597383680*n^10) * eps^19
        + (191992897/137438953472 + 10102641/17179869184*n + 91038377/1374389534720*n^2 - 48406631/85899345920*n^3 - 1306192047/1374389534720*n^4 - 111829633/85899345920*n^5 - 775578061/687194767360*n^6 - 75280887/85899345920*n^7 - 41514599/687194767360*n^8 + 38659177/68719476736*n^9) * eps^20
        + (355055163/274877906944 + 653193131/1099511627776*n + 347941049/5497558138880*n^2 - 2051760759/5497558138880*n^3 - 4780409067/5497558138880*n^4 - 2891926301/2748779069440*n^5 - 3246633917/2748779069440*n^6 - 2255299589/2748779069440*n^7 - 500938259/1099511627776*n^8) * eps^21
        + (2684106857/2199023255552 + 589926107/1099511627776*n + 391603487/2748779069440*n^2 - 1831096049/5497558138880*n^3 - 7250179399/10995116277760*n^4 - 687030501/687194767360*n^5 - 2742957537/2748779069440*n^6 - 2629744457/2748779069440*n^7) * eps^22
        + (20014266089/17592186044416 + 9415408371/17592186044416*n + 2280678869/17592186044416*n^2 - 18044662719/87960930222080*n^3 - 10627395203/17592186044416*n^4 - 70583370027/87960930222080*n^5 - 10917838539/10995116277760*n^6) * eps^23
        + (38001723933/35184372088832 + 8573148395/17592186044416*n + 7931117147/43980465111040*n^2 - 16302072297/87960930222080*n^3 - 39871150043/87960930222080*n^4 - 33222569643/43980465111040*n^5) * eps^24
        + (178265154501/175921860444160 + 67917412749/140737488355328*n + 7195977601/43980465111040*n^2 - 17107988587/175921860444160*n^3 - 73408496063/175921860444160*n^4) * eps^25
        + (271858418651/281474976710656 + 3893205391/8796093022208*n + 277112865109/1407374883553280*n^2 - 1966777807/21990232555520*n^3) * eps^26
        + (4103246283741/4503599627370496 + 1965390008631/4503599627370496*n + 4035517048233/22517998136852480*n^2) * eps^27
        + (7848710341433/9007199254740992 + 1814136297259/4503599627370496*n) * eps^28
        + 29752988542989/36028797018963968 * eps^29;
C3[6] = + (11/2048 - 99/8192*n + 275/24576*n^2 - 77/12288*n^3 + 9/4096*n^4 - 11/24576*n^5 + 1/24576*n^6) * eps^6
        + (99/16384 - 275/24576*n + 55/16384*n^2 + 167/24576*n^3 - 407/49152*n^4 + 35/8192*n^5 - 55/49152*n^6 + 1/8192*n^7) * eps^7
        + (143/32768 - 253/49152*n - 1105/196608*n^2 + 481/49152*n^3 - 73/196608*n^4 - 169/24576*n^5 + 1067/196608*n^6 - 11/6144*n^7 + 15/65536*n^8) * eps^8
        + (33/8192 - 221/65536*n - 23/4096*n^2 + 457/196608*n^3 + 267/32768*n^4 - 329/65536*n^5 - 69/16384*n^6 + 375/65536*n^7 - 77/32768*n^8 + 17/49152*n^9) * eps^9
        + (1711/524288 - 4333/3145728*n - 16885/3145728*n^2 - 1343/1572864*n^3 + 17381/3145728*n^4 + 8519/2097152*n^5 - 42985/6291456*n^6 - 4885/3145728*n^7 + 8549/1572864*n^8 - 5797/2097152*n^9 + 969/2097152*n^10) * eps^10
        + (6223/2097152 - 2827/3145728*n - 23731/6291456*n^2 - 8959/3145728*n^3 + 11937/4194304*n^4 + 32207/6291456*n^5 + 5071/12582912*n^6 - 42571/6291456*n^7 + 7489/12582912*n^8 + 10115/2097152*n^9 - 12749/4194304*n^10 + 1197/2097152*n^11) * eps^11
        + (31829/12582912 - 647/4194304*n - 13305/4194304*n^2 - 23369/8388608*n^3 + 981/4194304*n^4 + 53003/12582912*n^5 + 161989/50331648*n^6 - 25313/12582912*n^7 - 288887/50331648*n^8 + 8937/4194304*n^9 + 204725/50331648*n^10 - 80465/25165824*n^11 + 33649/50331648*n^12) * eps^12
        + (19409/8388608 - 143/4194304*n - 108221/50331648*n^2 - 37559/12582912*n^3 - 11319/16777216*n^4 + 110569/50331648*n^5 + 49103/12582912*n^6 + 19233/16777216*n^7 - 6811/2097152*n^8 - 73151/16777216*n^9 + 156973/50331648*n^10 + 165187/50331648*n^11 - 164197/50331648*n^12 + 6325/8388608*n^13) * eps^13
        + (136403/67108864 + 149829/536870912*n - 951655/536870912*n^2 - 1940579/805306368*n^3 - 1290821/805306368*n^4 + 1817813/1610612736*n^5 + 4654573/1610612736*n^6 + 374953/134217728*n^7 - 210217/402653184*n^8 - 1945219/536870912*n^9 - 1593647/536870912*n^10 + 2958659/805306368*n^11 + 2038421/805306368*n^12 - 5245955/1610612736*n^13 + 444015/536870912*n^14) * eps^14
        + (2013531/1073741824 + 153447/536870912*n - 3812959/3221225472*n^2 - 3623809/1610612736*n^3 - 1720969/1073741824*n^4 - 155419/1610612736*n^5 + 2321319/1073741824*n^6 + 1446653/536870912*n^7 + 4820965/3221225472*n^8 - 881605/536870912*n^9 - 11135251/3221225472*n^10 - 927839/536870912*n^11 + 12596617/3221225472*n^12 + 2976545/1610612736*n^13 - 3437005/1073741824*n^14) * eps^15
        + (3610319/2147483648 + 689891/1610612736*n - 4192091/4294967296*n^2 - 5626007/3221225472*n^3 - 23482225/12884901888*n^4 - 63477/134217728*n^5 + 13148195/12884901888*n^6 + 2657655/1073741824*n^7 + 8738873/4294967296*n^8 + 89999/268435456*n^9 - 9718455/4294967296*n^10 - 9643399/3221225472*n^11 - 9027109/12884901888*n^12 + 1580215/402653184*n^13) * eps^16
        + (3357815/2147483648 + 5140585/12884901888*n - 1357887/2147483648*n^2 - 20205383/12884901888*n^3 - 10165433/6442450944*n^4 - 12859795/12884901888*n^5 + 3376837/6442450944*n^6 + 20985541/12884901888*n^7 + 14739271/6442450944*n^8 + 5247007/4294967296*n^9 - 3621415/6442450944*n^10 - 32175059/12884901888*n^11 - 15465929/6442450944*n^12) * eps^17
        + (73325191/51539607552 + 16029851/34359738368*n - 17954851/34359738368*n^2 - 124000031/103079215104*n^3 - 107691583/68719476736*n^4 - 26099447/25769803776*n^5 - 10228585/68719476736*n^6 + 124145675/103079215104*n^7 + 371070857/206158430208*n^8 + 11745371/6442450944*n^9 + 91139599/206158430208*n^10 - 30320905/25769803776*n^11) * eps^18
        + (91563605/68719476736 + 44091817/103079215104*n - 10830499/34359738368*n^2 - 27517235/25769803776*n^3 - 268855985/206158430208*n^4 - 82123075/68719476736*n^5 - 69647705/206158430208*n^6 + 109205227/206158430208*n^7 + 319534237/206158430208*n^8 + 114455667/68719476736*n^9 + 64469791/51539607552*n^10) * eps^19
        + (168518401/137438953472 + 189582913/412316860416*n - 142520949/549755813888*n^2 - 671006539/824633720832*n^3 - 2036680639/1649267441664*n^4 - 888938183/824633720832*n^5 - 275851423/412316860416*n^6 + 73762303/274877906944*n^7 + 200547467/206158430208*n^8 + 445330347/274877906944*n^9) * eps^20
        + (317520693/274877906944 + 231509165/549755813888*n - 214107557/1649267441664*n^2 - 396525643/549755813888*n^3 - 278406799/274877906944*n^4 - 920067617/824633720832*n^5 - 564306103/824633720832*n^6 - 58960025/412316860416*n^7 + 595823299/824633720832*n^8) * eps^21
        + (2358489413/2199023255552 + 11489787637/26388279066624*n - 908814505/8796093022208*n^2 - 2396614237/4398046511104*n^3 - 12411634453/13194139533312*n^4 - 8522185111/8796093022208*n^5 - 21849837611/26388279066624*n^6 - 2193761283/8796093022208*n^7) * eps^22
        + (17864718441/17592186044416 + 10555835899/26388279066624*n - 1055263841/52776558133248*n^2 - 4259460285/8796093022208*n^3 - 40456260929/52776558133248*n^4 - 25125823283/26388279066624*n^5 - 20228133965/26388279066624*n^6) * eps^23
        + (100244499991/105553116266496 + 7127188931/17592186044416*n - 2047769071/211106232532992*n^2 - 19029851431/52776558133248*n^3 - 49723762631/70368744177664*n^4 - 21473509045/26388279066624*n^5) * eps^24
        + (7943510175/8796093022208 + 78919576567/211106232532992*n + 2396202703/52776558133248*n^2 - 67906408573/211106232532992*n^3 - 30263574227/52776558133248*n^4) * eps^25
        + (956603287889/1125899906842624 + 2527332335909/6755399441055744*n + 105375782699/2251799813685248*n^2 - 394588464167/1688849860263936*n^3) * eps^26
        + (3651975781065/4503599627370496 + 780981164949/2251799813685248*n + 378631414483/4503599627370496*n^2) * eps^27
        + (6906351178529/9007199254740992 + 9311073056275/27021597764222976*n) * eps^28
        + 13225333818489/18014398509481984 * eps^29;
C3[7] = + (429/114688 - 143/16384*n + 143/16384*n^2 - 91/16384*n^3 + 39/16384*n^4 - 11/16384*n^5 + 13/114688*n^6 - 1/114688*n^7) * eps^7
        + (143/32768 - 143/16384*n + 65/16384*n^2 + 65/16384*n^3 - 109/16384*n^4 + 507/114688*n^5 - 27/16384*n^6 + 39/114688*n^7 - 1/32768*n^8) * eps^8
        + (429/131072 - 299/65536*n - 13/4096*n^2 + 269/32768*n^3 - 601/229376*n^4 - 989/229376*n^5 + 9475/1835008*n^6 - 4667/1835008*n^7 + 1157/1835008*n^8 - 17/262144*n^9) * eps^9
        + (403/131072 - 13/4096*n - 521/131072*n^2 + 393/114688*n^3 + 1209/229376*n^4 - 11001/1835008*n^5 - 3979/3670016*n^6 + 8821/1835008*n^7 - 833/262144*n^8 + 429/458752*n^9 - 57/524288*n^10) * eps^10
        + (5343/2097152 - 3345/2097152*n - 8863/2097152*n^2 + 2511/3670016*n^3 + 146613/29360128*n^4 + 27159/29360128*n^5 - 185267/29360128*n^6 + 47549/29360128*n^7 + 112179/29360128*n^8 - 103371/29360128*n^9 + 35815/29360128*n^10 - 665/4194304*n^11) * eps^11
        + (9825/4194304 - 2337/2097152*n - 13661/4194304*n^2 - 1405/1048576*n^3 + 205965/58720256*n^4 + 98019/29360128*n^5 - 15733/7340032*n^6 - 145237/29360128*n^7 + 99087/29360128*n^8 + 76233/29360128*n^9 - 106087/29360128*n^10 + 6149/4194304*n^11 - 1771/8388608*n^12) * eps^12
        + (2125/1048576 - 3903/8388608*n - 96259/33554432*n^2 - 410489/234881024*n^3 + 341577/234881024*n^4 + 441667/117440512*n^5 + 102545/117440512*n^6 - 411905/117440512*n^7 - 44531/14680064*n^8 + 996015/234881024*n^9 + 324603/234881024*n^10 - 118019/33554432*n^11 + 55913/33554432*n^12 - 8855/33554432*n^13) * eps^13
        + (31337/16777216 - 9845/33554432*n - 141287/67108864*n^2 - 514903/234881024*n^3 + 213351/469762048*n^4 + 158209/58720256*n^5 + 299101/117440512*n^6 - 132045/117440512*n^7 - 1686973/469762048*n^8 - 284559/234881024*n^9 + 1041819/234881024*n^10 + 72061/234881024*n^11 - 773421/234881024*n^12 + 213785/117440512*n^13 - 148005/469762048*n^14) * eps^14
        + (1780203/1073741824 + 2521/1073741824*n - 1916449/1073741824*n^2 - 14648021/7516192768*n^3 - 606289/1073741824*n^4 + 2068453/1073741824*n^5 + 19266365/7516192768*n^6 + 1015577/1073741824*n^7 - 17180199/7516192768*n^8 - 22143117/7516192768*n^9 + 1831549/7516192768*n^10 + 4498521/1073741824*n^11 - 4339571/7516192768*n^12 - 22471345/7516192768*n^13 + 14517945/7516192768*n^14) * eps^15
        + (3302903/2147483648 + 61025/1073741824*n - 1392303/1073741824*n^2 - 14509913/7516192768*n^3 - 6298927/7516192768*n^4 + 6457051/7516192768*n^5 + 17971091/7516192768*n^6 + 12735795/7516192768*n^7 - 3219137/7516192768*n^8 - 20216205/7516192768*n^9 - 15046077/7516192768*n^10 + 9532867/7516192768*n^11 + 3961599/1073741824*n^12 - 9497345/7516192768*n^13) * eps^16
        + (2983837/2147483648 + 1733855/8589934592*n - 4685403/4294967296*n^2 - 48201865/30064771072*n^3 - 36259515/30064771072*n^4 + 5527869/15032385536*n^5 + 1536743/939524096*n^6 + 63232859/30064771072*n^7 + 73671/117440512*n^8 - 1449355/1073741824*n^9 - 76937885/30064771072*n^10 - 30946235/30064771072*n^11 + 3570999/1879048192*n^12) * eps^17
        + (22292529/17179869184 + 899355/4294967296*n - 13492583/17179869184*n^2 - 44700791/30064771072*n^3 - 70120189/60129542144*n^4 - 3471339/15032385536*n^5 + 72969301/60129542144*n^6 + 478067/268435456*n^7 + 85725937/60129542144*n^8 - 9546319/30064771072*n^9 - 109115611/60129542144*n^10 - 63656897/30064771072*n^11) * eps^18
        + (81611253/68719476736 + 19508379/68719476736*n - 2837849/4294967296*n^2 - 1163707393/962072674304*n^3 - 75492929/60129542144*n^4 - 25075777/60129542144*n^5 + 141589169/240518168576*n^6 + 109200085/68719476736*n^7 + 51248003/34359738368*n^8 + 19485265/30064771072*n^9 - 68932559/68719476736*n^10) * eps^19
        + (153351409/137438953472 + 1171063/4294967296*n - 128254133/274877906944*n^2 - 32936875/30064771072*n^3 - 2152615067/1924145348608*n^4 - 167428859/240518168576*n^5 + 297094515/962072674304*n^6 + 261663431/240518168576*n^7 + 1509210613/962072674304*n^8 + 472288869/481036337152*n^9) * eps^20
        + (1984807995/1924145348608 + 342786907/1099511627776*n - 215809073/549755813888*n^2 - 3403522219/3848290697216*n^3 - 2125818367/1924145348608*n^4 - 5503162739/7696581394432*n^5 - 36779903/481036337152*n^6 + 1607563715/1924145348608*n^7 + 4856829545/3848290697216*n^8) * eps^21
        + (2142375089/2199023255552 + 161430897/549755813888*n - 585488823/2199023255552*n^2 - 3056980555/3848290697216*n^3 - 14718114487/15393162788864*n^4 - 793901309/962072674304*n^5 - 3165663579/15393162788864*n^6 + 420223757/962072674304*n^7) * eps^22
        + (15972732585/17592186044416 + 5524675807/17592186044416*n - 3921720195/17592186044416*n^2 - 78636170271/123145302310912*n^3 - 112176079097/123145302310912*n^4 - 94959230613/123145302310912*n^5 - 12796244065/30786325577728*n^6) * eps^23
        + (30308424633/35184372088832 + 5175108963/17592186044416*n - 2441010467/17592186044416*n^2 - 70491037987/123145302310912*n^3 - 47936493201/61572651155456*n^4 - 49286431235/61572651155456*n^5) * eps^24
        + (227458182793/281474976710656 + 85653158665/281474976710656*n - 16050121299/140737488355328*n^2 - 451259285829/985162418487296*n^3 - 718664673347/985162418487296*n^4) * eps^25
        + (433302064951/562949953421312 + 40095993459/140737488355328*n - 31913675941/562949953421312*n^2 - 57834268753/140737488355328*n^3) * eps^26
        + (3269693185065/4503599627370496 + 1302630681669/4503599627370496*n - 195127280595/4503599627370496*n^2) * eps^27
        + (6249998138435/9007199254740992 + 1221397131411/4503599627370496*n) * eps^28
        + 5922672166091/9007199254740992 * eps^29;
C3[8] = + (715/262144 - 429/65536*n + 455/65536*n^2 - 637/131072*n^3 + 315/131072*n^4 - 55/65536*n^5 + 13/65536*n^6 - 15/524288*n^7 + 1/524288*n^8) * eps^8
        + (429/131072 - 455/65536*n + 1053/262144*n^2 + 35/16384*n^3 - 1361/262144*n^4 + 69/16384*n^5 - 2095/1048576*n^6 + 77/131072*n^7 - 105/1048576*n^8 + 1/131072*n^9) * eps^9
        + (663/262144 - 4173/1048576*n - 1717/1048576*n^2 + 3485/524288*n^3 - 3825/1048576*n^4 - 9469/4194304*n^5 + 18469/4194304*n^6 - 6137/2097152*n^7 + 4455/4194304*n^8 - 885/4194304*n^9 + 19/1048576*n^10) * eps^10
        + (5057/2097152 - 3043/1048576*n - 5771/2097152*n^2 + 3893/1048576*n^3 + 25381/8388608*n^4 - 24103/4194304*n^5 + 8933/8388608*n^6 + 14179/4194304*n^7 - 28533/8388608*n^8 + 399/262144*n^9 - 2925/8388608*n^10 + 35/1048576*n^11) * eps^11
        + (4269/2097152 - 3449/2097152*n - 27455/8388608*n^2 + 104101/67108864*n^3 + 268897/67108864*n^4 - 17303/16777216*n^5 - 162199/33554432*n^6 + 27987/8388608*n^7 + 61363/33554432*n^8 - 115233/33554432*n^9 + 127809/67108864*n^10 - 33495/67108864*n^11 + 1771/33554432*n^12) * eps^12
        + (991/524288 - 10081/8388608*n - 365791/134217728*n^2 - 9717/33554432*n^3 + 465795/134217728*n^4 + 27547/16777216*n^5 - 106205/33554432*n^6 - 89529/33554432*n^7 + 289573/67108864*n^8 + 17427/67108864*n^9 - 420741/134217728*n^10 + 146465/67108864*n^11 - 87285/134217728*n^12 + 1265/16777216*n^13) * eps^13
        + (55563/33554432 - 344251/536870912*n - 1348101/536870912*n^2 - 244277/268435456*n^3 + 1091783/536870912*n^4 + 1517573/536870912*n^5 - 219671/268435456*n^6 - 915171/268435456*n^7 - 65579/134217728*n^8 + 2300175/536870912*n^9 - 565193/536870912*n^10 - 705799/268435456*n^11 + 1263413/536870912*n^12 - 426075/536870912*n^13 + 13455/134217728*n^14) * eps^14
        + (1650255/1073741824 - 242867/536870912*n - 2099405/1073741824*n^2 - 798587/536870912*n^3 + 1248445/1073741824*n^4 + 85085/33554432*n^5 + 1183963/1073741824*n^6 - 612017/268435456*n^7 - 2724453/1073741824*n^8 + 612213/536870912*n^9 + 3906577/1073741824*n^10 - 1079195/536870912*n^11 - 2173807/1073741824*n^12 + 651625/268435456*n^13 - 991575/1073741824*n^14) * eps^15
        + (92379/67108864 - 96367/536870912*n - 7319885/4294967296*n^2 - 6313853/4294967296*n^3 + 429327/2147483648*n^4 + 9301893/4294967296*n^5 + 15031227/8589934592*n^6 - 2278773/4294967296*n^7 - 22903967/8589934592*n^8 - 2725917/2147483648*n^9 + 4500833/2147483648*n^10 + 11631693/4294967296*n^11 - 5617393/2147483648*n^12 - 12008165/8589934592*n^13) * eps^16
        + (2756519/2147483648 - 430227/4294967296*n - 11245169/8589934592*n^2 - 6724689/4294967296*n^3 - 53143/268435456*n^4 + 11801191/8589934592*n^5 + 4420815/2147483648*n^6 + 4422845/8589934592*n^7 - 13431985/8589934592*n^8 - 1236311/536870912*n^9 - 519961/8589934592*n^10 + 5300279/2147483648*n^11 + 29579711/17179869184*n^12) * eps^17
        + (20057037/17179869184 + 1437191/34359738368*n - 38619865/34359738368*n^2 - 47458715/34359738368*n^3 - 11051395/17179869184*n^4 + 31753819/34359738368*n^5 + 923369/536870912*n^6 + 22435517/17179869184*n^7 - 20287619/34359738368*n^8 - 16694191/8589934592*n^9 - 53676765/34359738368*n^10 + 60038145/68719476736*n^11) * eps^18
        + (75219653/68719476736 + 2460657/34359738368*n - 3690307/4294967296*n^2 - 45693585/34359738368*n^3 - 12731745/17179869184*n^4 + 3014801/8589934592*n^5 + 102479649/68719476736*n^6 + 95223/67108864*n^7 + 12997523/34359738368*n^8 - 45081435/34359738368*n^9 - 250602523/137438953472*n^10) * eps^19
        + (138411809/137438953472 + 20479031/137438953472*n - 404248825/549755813888*n^2 - 623123853/549755813888*n^3 - 249636485/274877906944*n^4 + 24599285/274877906944*n^5 + 278247109/274877906944*n^6 + 206754789/137438953472*n^7 + 433813329/549755813888*n^8 - 463032277/1099511627776*n^9) * eps^20
        + (260886645/274877906944 + 85615081/549755813888*n - 614045309/1099511627776*n^2 - 577943525/549755813888*n^3 - 959520737/1099511627776*n^4 - 65018321/274877906944*n^5 + 412167595/549755813888*n^6 + 341178333/274877906944*n^7 + 2517056589/2199023255552*n^8) * eps^21
        + (1937599123/2199023255552 + 875827069/4398046511104*n - 2101908333/4398046511104*n^2 - 1944837617/2199023255552*n^3 - 4013825043/4398046511104*n^4 - 1514642649/4398046511104*n^5 + 52220173/137438953472*n^6 + 9631735815/8796093022208*n^7) * eps^22
        + (7338112607/8796093022208 + 858111205/4398046511104*n - 3151357309/8796093022208*n^2 - 3552063895/4398046511104*n^3 - 7304761733/8796093022208*n^4 - 1117242591/2199023255552*n^5 + 3576385429/17592186044416*n^6) * eps^23
        + (439177896603/562949953421312 + 30926258881/140737488355328*n - 43123141703/140737488355328*n^2 - 190181338763/281474976710656*n^3 - 230252313827/281474976710656*n^4 - 74140886391/140737488355328*n^5) * eps^24
        + (208758190031/281474976710656 + 29681117575/140737488355328*n - 126131044829/562949953421312*n^2 - 21573269697/35184372088832*n^3 - 409510620075/562949953421312*n^4) * eps^25
        + (392781497985/562949953421312 + 506107726005/2251799813685248*n - 429816687963/2251799813685248*n^2 - 575742720763/1125899906842624*n^3) * eps^26
        + (2997989980695/4503599627370496 + 481944654003/2251799813685248*n - 599801259897/4503599627370496*n^2) * eps^27
        + (2834595204413/4503599627370496 + 997668129067/4503599627370496*n) * eps^28
        + 2712992943545/4503599627370496 * eps^29;
C3[9] = + (2431/1179648 - 663/131072*n + 1105/196608*n^2 - 833/196608*n^3 + 153/65536*n^4 - 187/196608*n^5 + 221/786432*n^6 - 15/262144*n^7 + 17/2359296*n^8 - 1/2359296*n^9) * eps^9
        + (663/262144 - 1105/196608*n + 1003/262144*n^2 + 187/196608*n^3 - 391/98304*n^4 + 1003/262144*n^5 - 3425/1572864*n^6 + 1921/2359296*n^7 - 13/65536*n^8 + 17/589824*n^9 - 1/524288*n^10) * eps^10
        + (4199/2097152 - 21743/6291456*n - 4199/6291456*n^2 + 33269/6291456*n^3 - 50065/12582912*n^4 - 9443/12582912*n^5 + 14573/4194304*n^6 - 112667/37748736*n^7 + 53599/37748736*n^8 - 15487/37748736*n^9 + 2567/37748736*n^10 - 21/4194304*n^11) * eps^11
        + (8109/4194304 - 5491/2097152*n - 3893/2097152*n^2 + 11305/3145728*n^3 + 11799/8388608*n^4 - 187397/37748736*n^5 + 2753/1179648*n^6 + 24241/12582912*n^7 - 118771/37748736*n^8 + 73177/37748736*n^9 - 693/1048576*n^10 + 4675/37748736*n^11 - 253/25165824*n^12) * eps^12
        + (6953/4194304 - 80971/50331648*n - 252263/100663296*n^2 + 199465/100663296*n^3 + 895717/301989888*n^4 - 52205/25165824*n^5 - 482759/150994944*n^6 + 591815/150994944*n^7 + 2911/37748736*n^8 - 277705/100663296*n^9 + 689963/301989888*n^10 - 276985/301989888*n^11 + 58259/301989888*n^12 - 575/33554432*n^13) * eps^13
        + (52105/33554432 - 122417/100663296*n - 450521/201326592*n^2 + 40603/100663296*n^3 + 1865333/603979776*n^4 + 23971/75497472*n^5 - 972811/301989888*n^6 - 36503/50331648*n^7 + 811127/201326592*n^8 - 149813/100663296*n^9 - 153359/75497472*n^10 + 81805/33554432*n^11 - 43547/37748736*n^12 + 40885/150994944*n^13 - 1755/67108864*n^14) * eps^14
        + (4429673/3221225472 - 788207/1073741824*n - 6941611/3221225472*n^2 - 897577/3221225472*n^3 + 2356975/1073741824*n^4 + 17574277/9663676416*n^5 - 17208913/9663676416*n^6 - 8196295/3221225472*n^7 + 3937649/3221225472*n^8 + 10299955/3221225472*n^9 - 2716857/1073741824*n^10 - 3753553/3221225472*n^11 + 23362279/9663676416*n^12 - 13084435/9663676416*n^13 + 379015/1073741824*n^14) * eps^15
        + (2758463/2147483648 - 1758869/3221225472*n - 5672105/3221225472*n^2 - 973687/1073741824*n^3 + 14858035/9663676416*n^4 + 19887425/9663676416*n^5 - 32501/536870912*n^6 - 24418015/9663676416*n^7 - 5340461/4831838208*n^8 + 2428553/1073741824*n^9 + 19060745/9663676416*n^10 - 29342159/9663676416*n^11 - 2979365/9663676416*n^12 + 21844849/9663676416*n^13) * eps^16
        + (2490257/2147483648 - 7674811/25769803776*n - 20315813/12884901888*n^2 - 4435023/4294967296*n^3 + 27370555/38654705664*n^4 + 26375911/12884901888*n^5 + 1831967/2147483648*n^6 - 54254453/38654705664*n^7 - 10497871/4831838208*n^8 + 3956369/12884901888*n^9 + 32001391/12884901888*n^10 + 28530035/38654705664*n^11 - 59974063/19327352832*n^12) * eps^17
        + (18666393/17179869184 - 889513/4294967296*n - 21696367/17179869184*n^2 - 15580247/12884901888*n^3 + 3662981/12884901888*n^4 + 14977259/9663676416*n^5 + 9479491/6442450944*n^6 - 2887897/6442450944*n^7 - 73237177/38654705664*n^8 - 16269899/12884901888*n^9 + 50631997/38654705664*n^10 + 83059381/38654705664*n^11) * eps^18
        + (68321333/68719476736 - 14723375/206158430208*n - 56990675/51539607552*n^2 - 155817437/137438953472*n^3 - 18588719/103079215104*n^4 + 41892585/34359738368*n^5 + 57054647/38654705664*n^6 + 283540243/618475290624*n^7 - 22561439/17179869184*n^8 - 174386747/103079215104*n^9 - 158151485/618475290624*n^10) * eps^19
        + (128591121/137438953472 - 1479029/51539607552*n - 726294569/824633720832*n^2 - 305943/268435456*n^3 - 295907705/824633720832*n^4 + 113271359/154618822656*n^5 + 1807217413/1236950581248*n^6 + 32409209/38654705664*n^7 - 581666617/1236950581248*n^8 - 111277655/68719476736*n^9) * eps^20
        + (713238475/824633720832 + 53664037/1099511627776*n - 1263187013/1649267441664*n^2 - 1670261267/1649267441664*n^3 - 474955129/824633720832*n^4 + 4600090009/9895604649984*n^5 + 1438755463/1236950581248*n^6 + 314620739/274877906944*n^7 + 247598477/4947802324992*n^8) * eps^21
        + (1797792591/2199023255552 + 110680117/1649267441664*n - 4012013791/6597069766656*n^2 - 1590584081/1649267441664*n^3 - 1351592063/2199023255552*n^4 + 41953639/309237645312*n^5 + 19375684513/19791209299968*n^6 + 85456501/77309411328*n^7) * eps^22
        + (26806607255/35184372088832 + 11900807335/105553116266496*n - 55739761391/105553116266496*n^2 - 88591049429/105553116266496*n^3 - 24583779341/35184372088832*n^4 - 1960568177/105553116266496*n^5 + 212797419253/316659348799488*n^6) * eps^23
        + (50883408771/70368744177664 + 4164850661/35184372088832*n - 14681082863/35184372088832*n^2 - 82400553121/105553116266496*n^3 - 70910402069/105553116266496*n^4 - 67176278281/316659348799488*n^5) * eps^24
        + (190930903235/281474976710656 + 15383945467/105553116266496*n - 38240500283/105553116266496*n^2 - 35530344527/52776558133248*n^3 - 437558257621/633318697598976*n^4) * eps^25
        + (45468475229/70368744177664 + 15280317955/105553116266496*n - 19959778025/70368744177664*n^2 - 32689473503/52776558133248*n^3) * eps^26
        + (24702973639945/40532396646334464 + 726357235713/4503599627370496*n - 3324932711075/13510798882111488*n^2) * eps^27
        + (5246222852159/9007199254740992 + 706735196961/4503599627370496*n) * eps^28
        + 310707493777/562949953421312 * eps^29;
C3[10] = + (4199/2621440 - 4199/1048576*n + 4845/1048576*n^2 - 969/262144*n^3 + 2907/1310720*n^4 - 10659/10485760*n^5 + 741/2097152*n^6 - 95/1048576*n^7 + 17/1048576*n^8 - 19/10485760*n^9 + 1/10485760*n^10) * eps^10
        + (4199/2097152 - 4845/1048576*n + 7429/2097152*n^2 + 969/5242880*n^3 - 12597/4194304*n^4 + 35397/10485760*n^5 - 9329/4194304*n^6 + 2087/2097152*n^7 - 6479/20971520*n^8 + 135/2097152*n^9 - 171/20971520*n^10 + 1/2097152*n^11) * eps^11
        + (6783/4194304 - 12597/4194304*n - 2261/41943040*n^2 + 174743/41943040*n^3 - 164901/41943040*n^4 + 1539/5242880*n^5 + 214809/83886080*n^6 - 29519/10485760*n^7 + 139141/83886080*n^8 - 1631/2621440*n^9 + 12559/83886080*n^10 - 893/41943040*n^11 + 23/16777216*n^12) * eps^12
        + (13243/8388608 - 19703/8388608*n - 101099/83886080*n^2 + 138073/41943040*n^3 + 24719/83886080*n^4 - 337423/83886080*n^5 + 12363/4194304*n^6 + 57103/83886080*n^7 - 27323/10485760*n^8 + 178529/83886080*n^9 - 81173/83886080*n^10 + 4485/16777216*n^11 - 3553/83886080*n^12 + 25/8388608*n^13) * eps^13
        + (92055/67108864 - 822035/536870912*n - 1020015/536870912*n^2 + 574655/268435456*n^3 + 2734037/1342177280*n^4 - 6716637/2684354560*n^5 - 4712349/2684354560*n^6 + 158653/41943040*n^7 - 320995/268435456*n^8 - 4870931/2684354560*n^9 + 6209363/2684354560*n^10 - 1727177/1342177280*n^11 + 272823/671088640*n^12 - 38285/536870912*n^13 + 2925/536870912*n^14) * eps^14
        + (1390515/1073741824 - 638609/536870912*n - 9739457/5368709120*n^2 + 2244193/2684354560*n^3 + 2762359/1073741824*n^4 - 1609109/2684354560*n^5 - 14885329/5368709120*n^6 + 1720321/2684354560*n^7 + 3362447/1073741824*n^8 - 6643351/2684354560*n^9 - 4107621/5368709120*n^10 + 5967063/2684354560*n^11 - 8268441/5368709120*n^12 + 1490177/2684354560*n^13 - 575757/5368709120*n^14) * eps^15
        + (2486055/2147483648 - 416271/536870912*n - 39210607/21474836480*n^2 + 939667/5368709120*n^3 + 9060325/4294967296*n^4 + 2491453/2684354560*n^5 - 46473241/21474836480*n^6 - 3953531/2684354560*n^7 + 44317207/21474836480*n^8 + 9488381/5368709120*n^9 - 64785587/21474836480*n^10 + 739973/2684354560*n^11 + 41224629/21474836480*n^12 - 9171349/5368709120*n^13) * eps^16
        + (2335727/2147483648 - 2563477/4294967296*n - 16701111/10737418240*n^2 - 9668041/21474836480*n^3 + 17992927/10737418240*n^4 + 31720101/21474836480*n^5 - 2271699/2684354560*n^6 - 47531759/21474836480*n^7 + 1536949/10737418240*n^8 + 10243175/4294967296*n^9 + 3586031/10737418240*n^10 - 63134341/21474836480*n^11 + 12279279/10737418240*n^12) * eps^17
        + (16987677/17179869184 - 12817701/34359738368*n - 245571871/171798691840*n^2 - 113240313/171798691840*n^3 + 346569259/343597383680*n^4 + 74555269/42949672960*n^5 + 27207641/343597383680*n^6 - 297892471/171798691840*n^7 - 90518711/68719476736*n^8 + 56969301/42949672960*n^9 + 132544051/68719476736*n^10 - 17233729/21474836480*n^11) * eps^18
        + (63952469/68719476736 - 9581357/34359738368*n - 203499591/171798691840*n^2 - 76181293/85899345920*n^3 + 212001921/343597383680*n^4 + 103062223/68719476736*n^5 + 287585989/343597383680*n^6 - 73169205/68719476736*n^7 - 114638241/68719476736*n^8 - 59443911/343597383680*n^9 + 159059379/85899345920*n^10) * eps^19
        + (588367381/687194767360 - 20787795/137438953472*n - 2904705599/2748779069440*n^2 - 1224194119/1374389534720*n^3 + 476022861/2748779069440*n^4 + 1802954677/1374389534720*n^5 + 739674421/687194767360*n^6 - 326887271/1374389534720*n^7 - 530422339/343597383680*n^8 - 279426503/274877906944*n^9) * eps^20
        + (222258195/274877906944 - 55829477/549755813888*n - 477453485/549755813888*n^2 - 2590977593/2748779069440*n^3 - 58684921/1374389534720*n^4 + 1291134563/1374389534720*n^5 + 1706006381/1374389534720*n^6 + 33790047/137438953472*n^7 - 1348338613/1374389534720*n^8) * eps^21
        + (3301594169/4398046511104 - 453528367/17592186044416*n - 67434894591/87960930222080*n^2 - 38367823899/43980465111040*n^3 - 2503383779/8796093022208*n^4 + 62281465759/87960930222080*n^5 + 98226145519/87960930222080*n^6 + 5981539941/8796093022208*n^7) * eps^22
        + (25036620431/35184372088832 - 3706957/17592186044416*n - 110515260937/175921860444160*n^2 - 75242715363/87960930222080*n^3 - 13113832313/35184372088832*n^4 + 35799902519/87960930222080*n^5 + 181849615997/175921860444160*n^6) * eps^23
        + (46828608507/70368744177664 + 1623985719/35184372088832*n - 77781379687/140737488355328*n^2 - 135023615257/175921860444160*n^3 - 343735176087/703687441776640*n^4 + 21076200917/87960930222080*n^5) * eps^24
        + (22273557181/35184372088832 + 8209167567/140737488355328*n - 79486039261/175921860444160*n^2 - 512388782813/703687441776640*n^3 - 35491170583/70368744177664*n^4) * eps^25
        + (670564680061/1125899906842624 + 196582254575/2251799813685248*n - 4472224828261/11258999068426240*n^2 - 3626987174247/5629499534213120*n^3) * eps^26
        + (2559941004369/4503599627370496 + 206983074593/2251799813685248*n - 7284964906539/22517998136852480*n^2) * eps^27
        + (4841011900185/9007199254740992 + 992966911831/9007199254740992*n) * eps^28
        + 9267877312991/18014398509481984 * eps^29;
C3[11] = + (29393/23068672 - 6783/2097152*n + 8075/2097152*n^2 - 6783/2097152*n^3 + 8721/4194304*n^4 - 4389/4194304*n^5 + 1729/4194304*n^6 - 525/4194304*n^7 + 119/4194304*n^8 - 19/4194304*n^9 + 21/46137344*n^10 - 1/46137344*n^11) * eps^11
        + (6783/4194304 - 8075/2097152*n + 6783/2097152*n^2 - 323/1048576*n^3 - 18753/8388608*n^4 + 12255/4194304*n^5 - 9135/4194304*n^6 + 4711/4194304*n^7 - 219/524288*n^8 + 5131/46137344*n^9 - 85/4194304*n^10 + 105/46137344*n^11 - 1/8388608*n^12) * eps^12
        + (22287/16777216 - 5491/2097152*n + 22287/67108864*n^2 + 218937/67108864*n^3 - 247779/67108864*n^4 + 65849/67108864*n^5 + 58673/33554432*n^6 - 84249/33554432*n^7 + 655201/369098752*n^8 - 300367/369098752*n^9 + 187059/738197504*n^10 - 38619/738197504*n^11 + 4809/738197504*n^12 - 25/67108864*n^13) * eps^13
        + (5491/4194304 - 141151/67108864*n - 98363/134217728*n^2 + 196213/67108864*n^3 - 29417/67108864*n^4 - 52095/16777216*n^5 + 419083/134217728*n^6 - 103155/369098752*n^7 - 718191/369098752*n^8 + 1557273/738197504*n^9 - 1788277/1476395008*n^10 + 325161/738197504*n^11 - 6875/67108864*n^12 + 5187/369098752*n^13 - 117/134217728*n^14) * eps^14
        + (1235475/1073741824 - 1541223/1073741824*n - 1529937/1073741824*n^2 + 2296199/1073741824*n^3 + 1365211/1073741824*n^4 - 2738587/1073741824*n^5 - 7375295/11811160064*n^6 + 38530187/11811160064*n^7 - 23317551/11811160064*n^8 - 10011949/11811160064*n^9 + 24284837/11811160064*n^10 - 18010915/11811160064*n^11 + 7660305/11811160064*n^12 - 1998361/11811160064*n^13 + 300321/11811160064*n^14) * eps^15
        + (2349103/2147483648 - 1224911/1073741824*n - 781795/536870912*n^2 + 1166537/1073741824*n^3 + 1094423/536870912*n^4 - 13807153/11811160064*n^5 - 25077685/11811160064*n^6 + 17157263/11811160064*n^7 + 24268865/11811160064*n^8 - 33106325/11811160064*n^9 + 2076575/5905580032*n^10 + 19838275/11811160064*n^11 - 10084007/5905580032*n^12 + 10078335/11811160064*n^13) * eps^16
        + (2117379/2147483648 - 6739785/8589934592*n - 1646453/1073741824*n^2 + 261625/536870912*n^3 + 8131213/4294967296*n^4 + 20997261/94489280512*n^5 - 101979543/47244640256*n^6 - 530353/1073741824*n^7 + 828023/369098752*n^8 + 43716997/94489280512*n^9 - 65673747/23622320128*n^10 + 31841459/23622320128*n^11 + 52076665/47244640256*n^12) * eps^17
        + (15999297/17179869184 - 665231/1073741824*n - 23300153/17179869184*n^2 - 221463/2147483648*n^3 + 28505205/17179869184*n^4 + 3924281/4294967296*n^5 - 243226535/188978561024*n^6 - 77376389/47244640256*n^7 + 188744355/188978561024*n^8 + 45186567/23622320128*n^9 - 160724471/188978561024*n^10 - 25713125/11811160064*n^11) * eps^18
        + (58546741/68719476736 - 28776169/68719476736*n - 10980371/8589934592*n^2 - 48605103/137438953472*n^3 + 39670397/34359738368*n^4 + 31828611/23622320128*n^5 - 187541869/377957122048*n^6 - 115448809/68719476736*n^7 - 42158467/94489280512*n^8 + 82411933/47244640256*n^9 + 753396595/755914244096*n^10) * eps^19
        + (110659725/137438953472 - 2797611/8589934592*n - 299770405/274877906944*n^2 - 10459603/17179869184*n^3 + 226651699/274877906944*n^4 + 497934925/377957122048*n^5 + 409147909/1511828488192*n^6 - 510313799/377957122048*n^7 - 1751353333/1511828488192*n^8 + 493141905/755914244096*n^9) * eps^20
        + (818467293/1099511627776 - 56886273/274877906944*n - 2178023121/2199023255552*n^2 - 1468259459/2199023255552*n^3 + 936005777/2199023255552*n^4 + 30592744379/24189255811072*n^5 + 483964345/755914244096*n^6 - 2151235101/3023656976384*n^7 - 17107054983/12094627905536*n^8) * eps^21
        + (96937173/137438953472 - 338878191/2199023255552*n - 3672830975/4398046511104*n^2 - 1657202547/2199023255552*n^3 + 445677205/2199023255552*n^4 + 12225739435/12094627905536*n^5 + 45022865775/48378511622144*n^6 - 743433509/3023656976384*n^7) * eps^22
        + (23130670543/35184372088832 - 2857753463/35184372088832*n - 26305948157/35184372088832*n^2 - 25618373853/35184372088832*n^3 - 1549180705/35184372088832*n^4 + 324075281367/387028092977152*n^5 + 367058948627/387028092977152*n^6) * eps^23
        + (43968565791/70368744177664 - 1805535203/35184372088832*n - 2760991455/4398046511104*n^2 - 25963357003/35184372088832*n^3 - 177189123/1099511627776*n^4 + 225673037041/387028092977152*n^5) * eps^24
        + (41252640009/70368744177664 - 1485684057/281474976710656*n - 39333792359/70368744177664*n^2 - 95968855991/140737488355328*n^3 - 41727255371/140737488355328*n^4) * eps^25
        + (314637345025/562949953421312 + 791327487/70368744177664*n - 263720191503/562949953421312*n^2 - 5813138145/8796093022208*n^3) * eps^26
        + (2374498758045/4503599627370496 + 184441277827/4503599627370496*n - 1875159093121/4503599627370496*n^2) * eps^27
        + (4540838699861/9007199254740992 + 223044732129/4503599627370496*n) * eps^28
        + 17213216597955/36028797018963968 * eps^29;
C3[12] = + (52003/50331648 - 22287/8388608*n + 81719/25165824*n^2 - 572033/201326592*n^3 + 129789/67108864*n^4 - 52877/50331648*n^5 + 23023/50331648*n^6 - 5313/33554432*n^7 + 4301/100663296*n^8 - 437/50331648*n^9 + 21/16777216*n^10 - 23/201326592*n^11 + 1/201326592*n^12) * eps^12
        + (22287/16777216 - 81719/25165824*n + 393737/134217728*n^2 - 62491/100663296*n^3 - 658559/402653184*n^4 + 83743/33554432*n^5 - 417197/201326592*n^6 + 60467/50331648*n^7 - 34569/67108864*n^8 + 8287/50331648*n^9 - 15479/402653184*n^10 + 209/33554432*n^11 - 253/402653184*n^12 + 1/33554432*n^13) * eps^13
        + (37145/33554432 - 3692213/1610612736*n + 919885/1610612736*n^2 + 2047345/805306368*n^3 - 1807685/536870912*n^4 + 2268145/1610612736*n^5 + 107525/100663296*n^6 - 287615/134217728*n^7 + 1439165/805306368*n^8 - 1554985/1610612736*n^9 + 196337/536870912*n^10 - 78625/805306368*n^11 + 28451/1610612736*n^12 - 3151/1610612736*n^13 + 27/268435456*n^14) * eps^14
        + (1181211/1073741824 - 1011655/536870912*n - 1258123/3221225472*n^2 + 1368385/536870912*n^3 - 966345/1073741824*n^4 - 1845635/805306368*n^5 + 3249555/1073741824*n^6 - 32195/33554432*n^7 - 4125455/3221225472*n^8 + 1038315/536870912*n^9 - 1464041/1073741824*n^10 + 330167/536870912*n^11 - 602911/3221225472*n^12 + 5049/134217728*n^13 - 14651/3221225472*n^14) * eps^15
        + (2097163/2147483648 - 716243/536870912*n - 13577935/12884901888*n^2 + 26345695/12884901888*n^3 + 539465/805306368*n^4 - 30721445/12884901888*n^5 + 1671665/8589934592*n^6 + 16667215/6442450944*n^7 - 60325345/25769803776*n^8 - 7435/2147483648*n^9 + 3478199/2147483648*n^10 - 20654597/12884901888*n^11 + 11205989/12884901888*n^12 - 1294237/4294967296*n^13) * eps^16
        + (2006267/2147483648 - 4643355/4294967296*n - 29853701/25769803776*n^2 + 15623785/12884901888*n^3 + 19883891/12884901888*n^4 - 37991705/25769803776*n^5 - 12448665/8589934592*n^6 + 47094413/25769803776*n^7 + 6739069/6442450944*n^8 - 2864351/1073741824*n^9 + 30201445/25769803776*n^10 + 1058057/1073741824*n^11 - 10580051/6442450944*n^12) * eps^17
        + (43720079/51539607552 - 26598603/34359738368*n - 43949251/34359738368*n^2 + 71325415/103079215104*n^3 + 6957895/4294967296*n^4 - 2536467/8589934592*n^5 - 198525719/103079215104*n^6 + 13878817/51539607552*n^7 + 34508611/17179869184*n^8 - 52928069/103079215104*n^9 - 220720771/103079215104*n^10 + 66852739/34359738368*n^11) * eps^18
        + (55326431/68719476736 - 64299007/103079215104*n - 120784247/103079215104*n^2 + 15781747/103079215104*n^3 + 106472291/68719476736*n^4 + 14611239/34359738368*n^5 - 150547861/103079215104*n^6 - 103209593/103079215104*n^7 + 99804641/68719476736*n^8 + 123227375/103079215104*n^9 - 12788579/8589934592*n^10) * eps^19
        + (814404171/1099511627776 - 732481345/1649267441664*n - 466819643/412316860416*n^2 - 734752241/6597069766656*n^3 + 2621301201/2199023255552*n^4 + 785792285/824633720832*n^5 - 1433859853/1649267441664*n^6 - 770153889/549755813888*n^7 + 432049963/1649267441664*n^8 + 5608251079/3298534883328*n^9) * eps^20
        + (772604523/1099511627776 - 48760475/137438953472*n - 13077992689/13194139533312*n^2 - 1241891819/3298534883328*n^3 + 4110854519/4398046511104*n^4 + 3534181601/3298534883328*n^5 - 586500377/3298534883328*n^6 - 2275702691/1649267441664*n^7 - 3789336937/6597069766656*n^8) * eps^21
        + (358745439/549755813888 - 12934264661/52776558133248*n - 48333688039/52776558133248*n^2 - 4146286613/8796093022208*n^3 + 31281974437/52776558133248*n^4 + 59718172567/52776558133248*n^5 + 2095950701/8796093022208*n^6 - 25516746833/26388279066624*n^7) * eps^22
        + (21821485195/35184372088832 - 10108238849/52776558133248*n - 27769272537/35184372088832*n^2 - 10217136851/17592186044416*n^3 + 13447296309/35184372088832*n^4 + 2169033311/2199023255552*n^5 + 21069180867/35184372088832*n^6) * eps^23
        + (122479921063/211106232532992 - 2150084801/17592186044416*n - 302356197395/422212465065984*n^2 - 62203620647/105553116266496*n^3 + 20409605765/140737488355328*n^4 + 370492702933/422212465065984*n^5) * eps^24
        + (38901506935/70368744177664 - 12663469807/140737488355328*n - 43169763871/70368744177664*n^2 - 262080088265/422212465065984*n^3 + 4124183297/281474976710656*n^4) * eps^25
        + (292863078097/562949953421312 - 1583046845/35184372088832*n - 29152993591/52776558133248*n^2 - 1996652856445/3377699720527872*n^3) * eps^26
        + (69950118165/140737488355328 - 1807466357/70368744177664*n - 1063027613707/2251799813685248*n^2) * eps^27
        + (16935196336601/36028797018963968 + 223223833507/54043195528445952*n) * eps^28
        + 16221720992423/36028797018963968 * eps^29;
C3[13] = + (185725/218103808 - 37145/16777216*n + 185725/67108864*n^2 - 168245/67108864*n^3 + 120175/67108864*n^4 - 69575/67108864*n^5 + 16445/33554432*n^6 - 6325/33554432*n^7 + 1955/33554432*n^8 - 475/33554432*n^9 + 175/67108864*n^10 - 23/67108864*n^11 + 25/872415232*n^12 - 1/872415232*n^13) * eps^13
        + (37145/33554432 - 185725/67108864*n + 356155/134217728*n^2 - 54625/67108864*n^3 - 39215/33554432*n^4 + 8855/4194304*n^5 - 259325/134217728*n^6 + 41515/33554432*n^7 - 625/1048576*n^8 + 14765/67108864*n^9 - 8297/134217728*n^10 + 11225/872415232*n^11 - 63/33554432*n^12 + 75/436207616*n^13 - 1/134217728*n^14) * eps^14
        + (1002915/1073741824 - 2165335/1073741824*n + 766935/1073741824*n^2 + 2116575/1073741824*n^3 - 3237825/1073741824*n^4 + 1772265/1073741824*n^5 + 558555/1073741824*n^6 - 1889505/1073741824*n^7 + 1846575/1073741824*n^8 - 1148355/1073741824*n^9 + 6621687/13958643712*n^10 - 2147433/13958643712*n^11 + 502623/13958643712*n^12 - 80975/13958643712*n^13 + 8075/13958643712*n^14) * eps^15
        + (2008015/2147483648 - 1815735/1073741824*n - 76705/536870912*n^2 + 2357385/1073741824*n^3 - 19665/16777216*n^4 - 1726035/1073741824*n^5 + 1491465/536870912*n^6 - 1503195/1073741824*n^7 - 363375/536870912*n^8 + 23156505/13958643712*n^9 - 9914347/6979321856*n^10 + 10709897/13958643712*n^11 - 501361/1744830464*n^12 + 1052013/13958643712*n^13) * eps^16
        + (1798255/2147483648 - 10601045/8589934592*n - 1641165/2147483648*n^2 + 4086755/2147483648*n^3 + 913905/4294967296*n^4 - 18130905/8589934592*n^5 + 3204135/4294967296*n^6 + 1017741/536870912*n^7 - 33577953/13958643712*n^8 + 73063651/111669149696*n^9 + 1928075/1744830464*n^10 - 10703707/6979321856*n^11 + 57707979/55834574848*n^12) * eps^17
        + (13840365/17179869184 - 2184195/2147483648*n - 15684505/17179869184*n^2 + 1348605/1073741824*n^3 + 19080865/17179869184*n^4 - 6839475/4294967296*n^5 - 14431629/17179869184*n^6 + 105895953/55834574848*n^7 + 48950133/223338299392*n^8 - 7886043/3489660928*n^9 + 372503147/223338299392*n^10 + 8024167/27917287424*n^11) * eps^18
        + (101195745/137438953472 - 103316805/137438953472*n - 145814825/137438953472*n^2 + 56137605/68719476736*n^3 + 45844365/34359738368*n^4 - 11127843/17179869184*n^5 - 176827545/111669149696*n^6 + 177367791/223338299392*n^7 + 43666839/27917287424*n^8 - 502109665/446676598784*n^9 - 608048583/446676598784*n^10) * eps^19
        + (192942285/274877906944 - 84667255/137438953472*n - 276352515/274877906944*n^2 + 46276975/137438953472*n^3 + 190922955/137438953472*n^4 + 544527/17179869184*n^5 - 80867391/55834574848*n^6 - 46739031/111669149696*n^7 + 1413025611/893353197568*n^8 + 208444667/446676598784*n^9) * eps^20
        + (713651475/1099511627776 - 500804215/1099511627776*n - 2189663055/2199023255552*n^2 + 166841355/2199023255552*n^3 + 2545633095/2199023255552*n^4 + 1301305233/2199023255552*n^5 - 73499007/68719476736*n^6 - 3649124073/3573412790272*n^7 + 10673011569/14293651161088*n^8) * eps^21
        + (1358850675/2199023255552 - 816309985/2199023255552*n - 3925550751/4398046511104*n^2 - 411093181/2199023255552*n^3 + 1069809697/1099511627776*n^4 + 887786559/1099511627776*n^5 - 28489507799/57174604644352*n^6 - 4430888365/3573412790272*n^7) * eps^22
        + (20273133015/35184372088832 - 9511268919/35184372088832*n - 29503243001/35184372088832*n^2 - 10679084579/35184372088832*n^3 + 24333880611/35184372088832*n^4 + 33531947513/35184372088832*n^5 - 43359239675/457396837154816*n^6) * eps^23
        + (38647569279/70368744177664 - 7657024935/35184372088832*n - 25922041023/35184372088832*n^2 - 15045539631/35184372088832*n^3 + 17766942325/35184372088832*n^4 + 31659609403/35184372088832*n^5) * eps^24
        + (36274342699/70368744177664 - 42850331919/281474976710656*n - 11911257957/17592186044416*n^2 - 64900868793/140737488355328*n^3 + 40343787423/140737488355328*n^4) * eps^25
        + (277172296351/562949953421312 - 2094012549/17592186044416*n - 332189237881/562949953421312*n^2 - 35829993671/70368744177664*n^3) * eps^26
        + (1046221099377/2251799813685248 - 170172833119/2251799813685248*n - 604554123131/1125899906842624*n^2) * eps^27
        + (2003125009747/4503599627370496 - 61476552589/1125899906842624*n) * eps^28
        + 15190705138949/36028797018963968 * eps^29;
C3[14] = + (334305/469762048 - 1002915/536870912*n + 1278225/536870912*n^2 - 596505/268435456*n^3 + 444015/268435456*n^4 - 542685/536870912*n^5 + 1924065/3758096384*n^6 - 201825/939524096*n^7 + 9945/134217728*n^8 - 11115/536870912*n^9 + 2457/536870912*n^10 - 207/268435456*n^11 + 25/268435456*n^12 - 27/3758096384*n^13 + 1/3758096384*n^14) * eps^14
        + (1002915/1073741824 - 1278225/536870912*n + 2576115/1073741824*n^2 - 497835/536870912*n^3 - 865605/1073741824*n^4 + 6660225/3758096384*n^5 - 1906125/1073741824*n^6 + 4658355/3758096384*n^7 - 707265/1073741824*n^8 + 146835/536870912*n^9 - 95481/1073741824*n^10 + 11985/536870912*n^11 - 31527/7516192768*n^12 + 299/536870912*n^13 - 351/7516192768*n^14) * eps^15
        + (1710855/2147483648 - 478515/268435456*n + 3411705/4294967296*n^2 + 1630815/1073741824*n^3 - 80250105/30064771072*n^4 + 6633315/3758096384*n^5 + 2765295/30064771072*n^6 - 10456095/7516192768*n^7 + 48041487/30064771072*n^8 - 604737/536870912*n^9 + 2449717/4294967296*n^10 - 1624435/7516192768*n^11 + 1847371/30064771072*n^12 - 48169/3758096384*n^13) * eps^16
        + (1723965/2147483648 - 6533265/4294967296*n + 76935/2147483648*n^2 + 56398185/30064771072*n^3 - 19759875/15032385536*n^4 - 31583175/30064771072*n^5 + 36921495/15032385536*n^6 - 49642983/30064771072*n^7 - 355569/2147483648*n^8 + 40109813/30064771072*n^9 - 20948701/15032385536*n^10 + 26526277/30064771072*n^11 - 5886663/15032385536*n^12) * eps^17
        + (24894855/34359738368 - 78264285/68719476736*n - 36988485/68719476736*n^2 + 418581945/240518168576*n^3 - 60094815/481036337152*n^4 - 107991795/60129542144*n^5 + 522459795/481036337152*n^6 + 303630087/240518168576*n^7 - 1091940219/481036337152*n^8 + 33522753/30064771072*n^9 + 40499933/68719476736*n^10 - 324917351/240518168576*n^11) * eps^18
        + (96292605/137438953472 - 65462715/68719476736*n - 97786455/137438953472*n^2 + 85607565/68719476736*n^3 + 359327175/481036337152*n^4 - 762768759/481036337152*n^5 - 159920877/481036337152*n^6 + 852547365/481036337152*n^7 - 189618327/481036337152*n^8 - 831922211/481036337152*n^9 + 903295221/481036337152*n^10) * eps^19
        + (177052965/274877906944 - 198593385/274877906944*n - 120299805/137438953472*n^2 + 850632495/962072674304*n^3 + 255130545/240518168576*n^4 - 1668127191/1924145348608*n^5 - 2324152365/1924145348608*n^6 + 2128566621/1924145348608*n^7 + 2025323859/1924145348608*n^8 - 2724276899/1924145348608*n^9) * eps^20
        + (338946975/549755813888 - 82552875/137438953472*n - 471549795/549755813888*n^2 + 446058513/962072674304*n^3 + 4645483323/3848290697216*n^4 - 514236729/1924145348608*n^5 - 2539636863/1924145348608*n^6 + 110256645/1924145348608*n^7 + 2860511727/1924145348608*n^8) * eps^21
        + (2519012745/4398046511104 - 8042808615/17592186044416*n - 15323258283/17592186044416*n^2 + 13365078339/61572651155456*n^3 + 2371903421/2199023255552*n^4 + 34764704609/123145302310912*n^5 - 139920418129/123145302310912*n^6 - 38482766489/61572651155456*n^7) * eps^22
        + (19248770055/35184372088832 - 6660671445/17592186044416*n - 28084233477/35184372088832*n^2 - 4351178653/123145302310912*n^3 + 236611923917/246290604621824*n^4 + 68150566051/123145302310912*n^5 - 172847147773/246290604621824*n^6) * eps^23
        + (36031799979/70368744177664 - 5033314047/17592186044416*n - 107266336785/140737488355328*n^2 - 20083658499/123145302310912*n^3 + 727351416229/985162418487296*n^4 + 46669684549/61572651155456*n^5) * eps^24
        + (34437446319/70368744177664 - 33102303575/140737488355328*n - 187327049/274877906944*n^2 - 290583351929/985162418487296*n^3 + 10224940189/17592186044416*n^4) * eps^25
        + (259380435671/562949953421312 - 195750751369/1125899906842624*n - 713851834615/1125899906842624*n^2 - 2727777187263/7881299347898368*n^3) * eps^26
        + (993200127657/2251799813685248 - 158323530281/1125899906842624*n - 631656315671/1125899906842624*n^2) * eps^27
        + (13155294584639/31525197391593472 - 13930847115/140737488355328*n) * eps^28
        + 112658685443/281474976710656 * eps^29;
C3[15] = + (646323/1073741824 - 1710855/1073741824*n + 2217775/1073741824*n^2 - 2124395/1073741824*n^3 + 1638819/1073741824*n^4 - 1049191/1073741824*n^5 + 563615/1073741824*n^6 - 254475/1073741824*n^7 + 96135/1073741824*n^8 - 150423/5368709120*n^9 + 38367/5368709120*n^10 - 4669/3221225472*n^11 + 725/3221225472*n^12 - 27/1073741824*n^13 + 29/16106127360*n^14) * eps^15
        + (1710855/2147483648 - 2217775/1073741824*n + 2331165/1073741824*n^2 - 1059863/1073741824*n^3 - 563615/1073741824*n^4 + 1586793/1073741824*n^5 - 1732315/1073741824*n^6 + 1306305/1073741824*n^7 - 3776409/5368709120*n^8 + 346173/1073741824*n^9 - 1902313/16106127360*n^10 + 36917/1073741824*n^11 - 25153/3221225472*n^12 + 21547/16106127360*n^13) * eps^16
        + (5892945/8589934592 - 6800065/4294967296*n + 3577121/4294967296*n^2 + 4983157/4294967296*n^3 - 10069699/4294967296*n^4 + 7701733/4294967296*n^5 - 502541/2147483648*n^6 - 1414127/1342177280*n^7 + 968223/671088640*n^8 - 6128483/5368709120*n^9 + 41761247/64424509440*n^10 - 18009853/64424509440*n^11 + 5979931/64424509440*n^12) * eps^17
        + (5972985/8589934592 - 5892945/4294967296*n + 22011/134217728*n^2 + 6844087/4294967296*n^3 - 5882157/4294967296*n^4 - 326337/536870912*n^5 + 18126537/8589934592*n^6 - 18908667/10737418240*n^7 + 2622383/10737418240*n^8 + 21415079/21474836480*n^9 - 55870711/42949672960*n^10 + 4095751/4294967296*n^11) * eps^18
        + (86853405/137438953472 - 144315455/137438953472*n - 49728185/137438953472*n^2 + 108068645/68719476736*n^3 - 12628253/34359738368*n^4 - 25408437/17179869184*n^5 + 43573631/34359738368*n^6 + 24761157/34359738368*n^7 - 17319235/8589934592*n^8 + 240067131/171798691840*n^9 + 31601183/257698037760*n^10) * eps^19
        + (168754335/274877906944 - 122304455/137438953472*n - 150252509/274877906944*n^2 + 165190351/137438953472*n^3 + 308731767/687194767360*n^4 - 257790947/171798691840*n^5 + 4546243/68719476736*n^6 + 264538841/171798691840*n^7 - 69252419/85899345920*n^8 - 101279697/85899345920*n^9) * eps^20
        + (9748205/17179869184 - 2961915/4294967296*n - 789535179/1099511627776*n^2 + 2502565179/2748779069440*n^3 + 892979397/1099511627776*n^4 - 4058500961/4123168604160*n^5 - 348426329/412316860416*n^6 + 858120331/687194767360*n^7 + 2315189833/4123168604160*n^8) * eps^21
        + (299705865/549755813888 - 638342925/1099511627776*n - 4003125229/5497558138880*n^2 + 3007831367/5497558138880*n^3 + 16848959603/16492674416640*n^4 - 1323821551/2748779069440*n^5 - 9300135223/8246337208320*n^6 + 169736315/412316860416*n^7) * eps^22
        + (17894468415/35184372088832 - 15913542447/35184372088832*n - 133457144181/175921860444160*n^2 + 56414449099/175921860444160*n^3 + 514339794913/527765581332480*n^4 + 15799330939/527765581332480*n^5 - 116951809217/105553116266496*n^6) * eps^23
        + (34289203599/70368744177664 - 13355533647/35184372088832*n - 37471080293/52776558133248*n^2 + 8836479539/105553116266496*n^3 + 80449237869/87960930222080*n^4 + 171417192913/527765581332480*n^5) * eps^24
        + (32203691103/70368744177664 - 249040377061/844424930131968*n - 484768709513/703687441776640*n^2 - 100719650663/2111062325329920*n^3 + 525315006811/703687441776640*n^4) * eps^25
        + (246854172911/562949953421312 - 104020069985/422212465065984*n - 5286374681359/8444249301319680*n^2 - 384367611317/2111062325329920*n^3) * eps^26
        + (932306372777/2251799813685248 - 425703913753/2251799813685248*n - 3317960448433/5629499534213120*n^2) * eps^27
        + (1788762256877/4503599627370496 - 528241493161/3377699720527872*n) * eps^28
        + 3392857970671/9007199254740992 * eps^29;
C3[16] = + (17678835/34359738368 - 5892945/4294967296*n + 7753875/4294967296*n^2 - 15197595/8589934592*n^3 + 12096045/8589934592*n^4 - 4032015/4294967296*n^5 + 2278965/4294967296*n^6 - 4382625/17179869184*n^7 + 1788111/17179869184*n^8 - 153729/4294967296*n^9 + 44051/4294967296*n^10 - 20677/8589934592*n^11 + 3875/8589934592*n^12 - 279/4294967296*n^13) * eps^16
        + (5892945/8589934592 - 7753875/4294967296*n + 33806895/17179869184*n^2 - 2171085/2147483648*n^3 - 5272635/17179869184*n^4 + 2629575/2147483648*n^5 - 49961925/34359738368*n^6 + 315549/268435456*n^7 - 25144131/34359738368*n^8 + 97991/268435456*n^9 - 2539675/17179869184*n^10 + 104315/2147483648*n^11 - 220193/17179869184*n^12) * eps^17
        + (10235115/17179869184 - 97078515/68719476736*n + 57998985/68719476736*n^2 + 30085035/34359738368*n^3 - 140769915/68719476736*n^4 + 242500755/137438953472*n^5 - 65388765/137438953472*n^6 - 51866007/68719476736*n^7 + 174649629/137438953472*n^8 - 154238733/137438953472*n^9 + 48486449/68719476736*n^10 - 11678227/34359738368*n^11) * eps^18
        + (83431695/137438953472 - 85292625/68719476736*n + 35047515/137438953472*n^2 + 92601495/68719476736*n^3 - 375786495/274877906944*n^4 - 36110133/137438953472*n^5 + 486541497/274877906944*n^6 - 243255915/137438953472*n^7 + 153035871/274877906944*n^8 + 46310869/68719476736*n^9 - 319425953/274877906944*n^10) * eps^19
        + (38149065/68719476736 - 133056495/137438953472*n - 123158505/549755813888*n^2 + 3098731635/2199023255552*n^3 - 1178980065/2199023255552*n^4 - 324619011/274877906944*n^5 + 183751105/137438953472*n^6 + 76834833/274877906944*n^7 - 937074355/549755813888*n^8 + 1685222465/1099511627776*n^9) * eps^20
        + (4652325/8589934592 - 456372855/549755813888*n - 1811480505/4398046511104*n^2 + 1251405303/1099511627776*n^3 + 925958313/4398046511104*n^4 - 1506611625/1099511627776*n^5 + 99867213/274877906944*n^6 + 172997329/137438953472*n^7 - 2305540773/2199023255552*n^8) * eps^21
        + (1106107125/2199023255552 - 11527530885/17592186044416*n - 10297013847/17592186044416*n^2 + 7988241603/8796093022208*n^3 + 10444117217/17592186044416*n^4 - 18068838281/17592186044416*n^5 - 4569806627/8796093022208*n^6 + 11141677047/8796093022208*n^7) * eps^22
        + (17062152465/35184372088832 - 9812616465/17592186044416*n - 21645687783/35184372088832*n^2 + 10515729759/17592186044416*n^3 + 29676530299/35184372088832*n^4 - 2748637785/4398046511104*n^5 - 31988983111/35184372088832*n^6) * eps^23
        + (63917467893/140737488355328 - 15585334599/35184372088832*n - 92640075585/140737488355328*n^2 + 55477610943/140737488355328*n^3 + 60444721971/70368744177664*n^4 - 23535121849/140737488355328*n^5) * eps^24
        + (15353322477/35184372088832 - 52919675455/140737488355328*n - 176994259657/281474976710656*n^2 + 24691209499/140737488355328*n^3 + 119255343701/140737488355328*n^4) * eps^25
        + (231447333341/562949953421312 - 336197745329/1125899906842624*n - 697975437421/1125899906842624*n^2 + 51290363939/1125899906842624*n^3) * eps^26
        + (889178086077/2251799813685248 - 284507373851/1125899906842624*n - 644017953049/1125899906842624*n^2) * eps^27
        + (1683573628847/4503599627370496 - 897506094655/4503599627370496*n) * eps^28
        + 3236675038231/9007199254740992 * eps^29;
C3[17] = + (64822395/146028888064 - 10235115/8589934592*n + 3411705/2147483648*n^2 - 3411705/2147483648*n^3 + 2791395/2147483648*n^4 - 1928355/2147483648*n^5 + 2278965/4294967296*n^6 - 1157013/4294967296*n^7 + 504339/4294967296*n^8 - 187891/4294967296*n^9 + 29667/2147483648*n^10 - 7843/2147483648*n^11 + 1705/2147483648*n^12) * eps^17
        + (10235115/17179869184 - 3411705/2147483648*n + 30705345/17179869184*n^2 - 2171085/2147483648*n^3 - 148335/1073741824*n^4 + 4328685/4294967296*n^5 - 11184459/8589934592*n^6 + 4819539/4294967296*n^7 - 801009/1073741824*n^8 + 860343/2147483648*n^9 - 1518473/8589934592*n^10 + 138105/2147483648*n^11) * eps^18
        + (71645805/137438953472 - 173996955/137438953472*n + 115067505/137438953472*n^2 + 89230245/137438953472*n^3 - 122538195/68719476736*n^4 + 116788191/68719476736*n^5 - 44648835/68719476736*n^6 - 34126939/68719476736*n^7 + 75175279/68719476736*n^8 - 73970743/68719476736*n^9 + 51014623/68719476736*n^10) * eps^19
        + (146703315/274877906944 - 154767345/137438953472*n + 43785795/137438953472*n^2 + 156007965/137438953472*n^3 - 364998495/274877906944*n^4 + 115971/68719476736*n^5 + 24948149/17179869184*n^6 - 117523573/68719476736*n^7 + 53786953/68719476736*n^8 + 26103457/68719476736*n^9) * eps^20
        + (134917425/274877906944 - 982018155/1099511627776*n - 128013105/1099511627776*n^2 + 172486635/137438953472*n^3 - 712641795/1099511627776*n^4 - 1003151847/1099511627776*n^5 + 365003889/274877906944*n^6 - 17906623/274877906944*n^7 - 94572227/68719476736*n^8) * eps^21
        + (1057102635/2199023255552 - 850997895/1099511627776*n - 663815307/2199023255552*n^2 + 1169497413/1099511627776*n^3 + 49560971/2199023255552*n^4 - 669423269/549755813888*n^5 + 1259901225/2199023255552*n^6 + 266092003/274877906944*n^7) * eps^22
        + (15777490455/35184372088832 - 21840324879/35184372088832*n - 16655962689/35184372088832*n^2 + 31191967407/35184372088832*n^3 + 14292320879/35184372088832*n^4 - 35796602007/35184372088832*n^5 - 8516465049/35184372088832*n^6) * eps^23
        + (30518839359/70368744177664 - 18775799295/35184372088832*n - 9098510199/17592186044416*n^2 + 21950540481/35184372088832*n^3 + 93296577/137438953472*n^4 - 25028086871/35184372088832*n^5) * eps^24
        + (28684124199/70368744177664 - 121237396839/281474976710656*n - 80108249325/140737488355328*n^2 + 62476546353/140737488355328*n^3 + 104269770907/140737488355328*n^4) * eps^25
        + (221067686111/562949953421312 - 51971219667/140737488355328*n - 312369078125/562949953421312*n^2 + 34424571581/140737488355328*n^3) * eps^26
        + (835594467657/2251799813685248 - 672205282129/2251799813685248*n - 9778893735/17592186044416*n^2) * eps^27
        + (1608685463477/4503599627370496 - 1123143299/4398046511104*n) * eps^28
        + 3053457067201/9007199254740992 * eps^29;
C3[18] = + (39803225/103079215104 - 71645805/68719476736*n + 96664975/68719476736*n^2 - 12302815/8589934592*n^3 + 10316025/8589934592*n^4 - 29419775/34359738368*n^5 + 18079789/34359738368*n^6 - 4814145/17179869184*n^7 + 20005447/154618822656*n^8 - 15970735/309237645312*n^9 + 608685/34359738368*n^10 - 133331/25769803776*n^11) * eps^18
        + (71645805/137438953472 - 96664975/68719476736*n + 223621755/137438953472*n^2 - 68391425/68719476736*n^3 - 534905/68719476736*n^4 + 28288833/34359738368*n^5 - 79700845/68719476736*n^6 + 328110727/309237645312*n^7 - 51427295/68719476736*n^8 + 132652751/309237645312*n^9 - 42045641/206158430208*n^10) * eps^19
        + (126233085/274877906944 - 313153165/274877906944*n + 450214705/549755813888*n^2 + 128894125/274877906944*n^3 - 851033855/549755813888*n^4 + 27708079/17179869184*n^5 - 635023933/824633720832*n^6 - 10743949/38654705664*n^7 + 2277775685/2473901162496*n^8 - 39095495/38654705664*n^9) * eps^20
        + (259599735/549755813888 - 563308905/549755813888*n + 6216585/17179869184*n^2 + 523725935/549755813888*n^3 - 696028275/549755813888*n^4 + 248241769/1236950581248*n^5 + 360205027/309237645312*n^6 - 1324703563/824633720832*n^7 + 578515831/618475290624*n^8) * eps^21
        + (1919738085/4398046511104 - 14510296015/17592186044416*n - 571757707/17592186044416*n^2 + 9787185553/8796093022208*n^3 - 14198943547/19791209299968*n^4 - 35731280915/52776558133248*n^5 + 200707555277/158329674399744*n^6 - 1602798301/4947802324992*n^7) * eps^22
        + (15095149455/35184372088832 - 12695123317/17592186044416*n - 7461993973/35184372088832*n^2 + 17320543045/17592186044416*n^3 - 38933502733/316659348799488*n^4 - 167508491351/158329674399744*n^5 + 225029316355/316659348799488*n^6) * eps^23
        + (28276211939/70368744177664 - 10324749795/17592186044416*n - 160063685731/422212465065984*n^2 + 44977263973/52776558133248*n^3 + 34943975527/140737488355328*n^4 - 76982106281/79164837199872*n^5) * eps^24
        + (27428616759/70368744177664 - 214928208341/422212465065984*n - 1901680771/4398046511104*n^2 + 266821592123/422212465065984*n^3 + 168025657159/316659348799488*n^4) * eps^25
        + (206917174391/562949953421312 - 1407328813243/3377699720527872*n - 1656940587997/3377699720527872*n^2 + 1604700872215/3377699720527872*n^3) * eps^26
        + (799328663817/2251799813685248 - 405743161697/1125899906842624*n - 17171897611/35184372088832*n^2) * eps^27
        + (1514801868617/4503599627370496 - 1997506016729/6755399441055744*n) * eps^28
        + 1461210130553/4503599627370496 * eps^29;
C3[19] = + (883631595/2611340115968 - 126233085/137438953472*n + 172136025/137438953472*n^2 - 178123365/137438953472*n^3 + 76338585/68719476736*n^4 - 55981629/68719476736*n^5 + 35624673/68719476736*n^6 - 19791485/68719476736*n^7 + 9613007/68719476736*n^8 - 4075291/68719476736*n^9 + 1501423/68719476736*n^10) * eps^19
        + (126233085/274877906944 - 172136025/137438953472*n + 204068505/137438953472*n^2 - 133218315/137438953472*n^3 + 25446195/274877906944*n^4 + 45803151/68719476736*n^5 - 70683875/68719476736*n^6 + 68421991/68719476736*n^7 - 12732847/17179869184*n^8 + 30944913/68719476736*n^9) * eps^20
        + (447553665/1099511627776 - 282901815/274877906944*n + 1744810665/2199023255552*n^2 + 714788607/2199023255552*n^3 - 2949064317/2199023255552*n^4 + 3330058719/2199023255552*n^5 - 466513575/549755813888*n^6 - 52627801/549755813888*n^7 + 415894171/549755813888*n^8) * eps^21
        + (231011535/549755813888 - 2056152345/2199023255552*n + 1715472699/4398046511104*n^2 + 1751396739/2199023255552*n^3 - 2620093247/2199023255552*n^4 + 381959029/1099511627776*n^5 + 4006284039/4398046511104*n^6 - 811840865/549755813888*n^7) * eps^22
        + (13730467455/35184372088832 - 26834758935/35184372088832*n + 1154658519/35184372088832*n^2 + 34587765501/35184372088832*n^3 - 26560472237/35184372088832*n^4 - 16713828219/35184372088832*n^5 + 41375557803/35184372088832*n^6) * eps^23
        + (27079840719/70368744177664 - 23683023159/35184372088832*n - 4885170495/35184372088832*n^2 + 31837181505/35184372088832*n^3 - 8213174937/35184372088832*n^4 - 31695410011/35184372088832*n^5) * eps^24
        + (25457271579/70368744177664 - 156005632095/281474976710656*n - 10545202575/35184372088832*n^2 + 114004448877/140737488355328*n^3 + 16505168273/140737488355328*n^4) * eps^25
        + (198096366191/562949953421312 - 17051245797/35184372088832*n - 202196269517/562949953421312*n^2 + 44120523793/70368744177664*n^3) * eps^26
        + (749484543777/2251799813685248 - 904154339527/2251799813685248*n - 237166138569/562949953421312*n^2) * eps^27
        + (1451001339947/4503599627370496 - 197052059395/562949953421312*n) * eps^28
        + 11027253546199/36028797018963968 * eps^29;
C3[20] = + (328206021/1099511627776 - 447553665/549755813888*n + 616197075/549755813888*n^2 - 2588027715/2199023255552*n^3 + 11313378297/10995116277760*n^4 - 1063650951/1374389534720*n^5 + 139671337/274877906944*n^6 - 161159235/549755813888*n^7 + 81876301/549755813888*n^8 - 91508807/1374389534720*n^9) * eps^20
        + (447553665/1099511627776 - 616197075/549755813888*n + 5973868485/4398046511104*n^2 - 5151407547/5497558138880*n^3 + 745124463/4398046511104*n^4 + 2933098077/5497558138880*n^5 - 999187257/1099511627776*n^6 + 255261409/274877906944*n^7 - 3993414699/5497558138880*n^8) * eps^21
        + (797813055/2199023255552 - 16416787335/17592186044416*n + 67175859231/87960930222080*n^2 + 9242357391/43980465111040*n^3 - 102015059749/87960930222080*n^4 + 124091978953/87960930222080*n^5 - 39356567111/43980465111040*n^6 + 592399119/10995116277760*n^7) * eps^22
        + (13225535115/35184372088832 - 15052072971/17592186044416*n + 71611679859/175921860444160*n^2 + 58313997297/87960930222080*n^3 - 195393281759/175921860444160*n^4 + 4977760923/10995116277760*n^5 + 24290150905/35184372088832*n^6) * eps^23
        + (24669936369/70368744177664 - 12424628601/17592186044416*n + 11746262979/140737488355328*n^2 + 30472467141/35184372088832*n^3 - 541082739303/703687441776640*n^4 - 214208596351/703687441776640*n^5) * eps^24
        + (24401503959/70368744177664 - 88423598371/140737488355328*n - 27848548649/351843720888320*n^2 + 582032816309/703687441776640*n^3 - 443970412913/1407374883553280*n^4) * eps^25
        + (184144866101/562949953421312 - 73617505285/140737488355328*n - 163863036307/703687441776640*n^2 + 4297898591023/5629499534213120*n^3) * eps^26
        + (89787248319/281474976710656 - 64845907663/140737488355328*n - 3332997588781/11258999068426240*n^2) * eps^27
        + (10901346434011/36028797018963968 - 6951464328397/18014398509481984*n) * eps^28
        + 10575447871909/36028797018963968 * eps^29;
C3[21] = + (2038855585/7696581394432 - 797813055/1099511627776*n + 2216147375/2199023255552*n^2 - 2357980807/2199023255552*n^3 + 2098862037/2199023255552*n^4 - 4845520999/6597069766656*n^5 + 5726524817/11544872091648*n^6 - 1139229075/3848290697216*n^7 + 258225257/1649267441664*n^8) * eps^21
        + (797813055/2199023255552 - 2216147375/2199023255552*n + 5478316311/4398046511104*n^2 - 1981576699/2199023255552*n^3 + 751444433/3298534883328*n^4 + 3238984625/7696581394432*n^5 - 10556856095/13194139533312*n^6 + 9949267255/11544872091648*n^7) * eps^22
        + (11435320455/35184372088832 - 29873666615/35184372088832*n + 25744131691/35184372088832*n^2 + 4163629499/35184372088832*n^3 - 739894554773/738871813865472*n^4 + 965405949493/738871813865472*n^5 - 677248006993/738871813865472*n^6) * eps^23
        + (23774829039/70368744177664 - 27620697099/35184372088832*n + 10971634235/26388279066624*n^2 + 405631341473/738871813865472*n^3 - 126601433727/123145302310912*n^4 + 129456725059/246290604621824*n^5) * eps^24
        + (22261029909/70368744177664 - 553102652395/844424930131968*n + 8620472343/70368744177664*n^2 + 2249783201615/2955487255461888*n^3 - 2263819350305/2955487255461888*n^4) * eps^25
        + (176646720641/562949953421312 - 123911959597/211106232532992*n - 51597036833/1688849860263936*n^2 + 39733441489/52776558133248*n^3) * eps^26
        + (1337288787659/4503599627370496 - 2222831651699/4503599627370496*n - 795233577023/4503599627370496*n^2) * eps^27
        + (2614429242859/9007199254740992 - 5913700976995/13510798882111488*n) * eps^28
        + 9945743757025/36028797018963968 * eps^29;
C3[22] = + (11435320455/48378511622144 - 11435320455/17592186044416*n + 16009448637/17592186044416*n^2 - 8620472343/8796093022208*n^3 + 7799474977/8796093022208*n^4 - 12256317821/17592186044416*n^5 + 8491054039/17592186044416*n^6 - 653158003/2199023255552*n^7) * eps^22
        + (11435320455/35184372088832 - 16009448637/17592186044416*n + 40287513603/35184372088832*n^2 - 15188451271/17592186044416*n^3 + 9558755047/35184372088832*n^4 + 5724737791/17592186044416*n^5 - 24704740937/35184372088832*n^6) * eps^23
        + (20583576819/70368744177664 - 27268841085/35184372088832*n + 98343755913/140737488355328*n^2 + 1583352063/35184372088832*n^3 - 121489410719/140737488355328*n^4 + 21194269441/17592186044416*n^5) * eps^24
        + (10731608427/35184372088832 - 101627745377/140737488355328*n + 14719309919/35184372088832*n^2 + 63574719679/140737488355328*n^3 - 66603916857/70368744177664*n^4) * eps^25
        + (322710607507/1125899906842624 - 1370068675847/2251799813685248*n + 343057591489/2251799813685248*n^2 + 751691842047/1125899906842624*n^3) * eps^26
        + (1283746667079/4503599627370496 - 1236043889089/2251799813685248*n + 40279424959/4503599627370496*n^2) * eps^27
        + (2436782869279/9007199254740992 - 4195124656575/9007199254740992*n) * eps^28
        + 4774615334345/18014398509481984 * eps^29;
C3[23] = + (171529806825/809240558043136 - 20583576819/35184372088832*n + 29028121155/35184372088832*n^2 - 31608398591/35184372088832*n^3 + 29028121155/35184372088832*n^4 - 23244740695/35184372088832*n^5 + 16482634311/35184372088832*n^6) * eps^23
        + (20583576819/70368744177664 - 29028121155/35184372088832*n + 37120809477/35184372088832*n^2 - 29028121155/35184372088832*n^3 + 10699253851/35184372088832*n^4 + 8608339377/35184372088832*n^5) * eps^24
        + (74417546961/281474976710656 - 99868465307/140737488355328*n + 46855492531/70368744177664*n^2 - 475207835/35184372088832*n^3 - 26136430925/35184372088832*n^4) * eps^25
        + (77818821763/281474976710656 - 46855492531/70368744177664*n + 117206473721/281474976710656*n^2 + 25946347791/70368744177664*n^3) * eps^26
        + (1173967590711/4503599627370496 - 2549380838081/4503599627370496*n + 787609465729/4503599627370496*n^2) * eps^27
        + (2340726177457/9007199254740992 - 2314357198017/4503599627370496*n) * eps^28
        + 556913250205/2251799813685248 * eps^29;
C3[24] = + (107492012277/562949953421312 - 74417546961/140737488355328*n + 316963625945/422212465065984*n^2 - 697319977079/844424930131968*n^3 + 216409648059/281474976710656*n^4 - 264500680961/422212465065984*n^5) * eps^24
        + (74417546961/281474976710656 - 316963625945/422212465065984*n + 548484883157/562949953421312*n^2 - 41533164779/52776558133248*n^3 + 553046878373/1688849860263936*n^4) * eps^25
        + (135054066707/562949953421312 - 4401660092471/6755399441055744*n + 4279816803577/6755399441055744*n^2 - 202913745545/3377699720527872*n^3) * eps^26
        + (1132800437073/4503599627370496 - 1385801088427/2251799813685248*n + 1851694849861/4503599627370496*n^2) * eps^27
        + (1071403584791/4503599627370496 - 7127072067763/13510798882111488*n) * eps^28
        + 1045457237/4398046511104 * eps^29;
C3[25] = + (1215486600363/7036874417766400 - 135054066707/281474976710656*n + 96467190505/140737488355328*n^2 - 107111846009/140737488355328*n^3 + 504955845471/703687441776640*n^4) * eps^25
        + (135054066707/562949953421312 - 96467190505/140737488355328*n + 507617009347/562949953421312*n^2 - 527575738417/703687441776640*n^3) * eps^26
        + (983965343151/4503599627370496 - 2701746625109/4503599627370496*n + 13560625821127/22517998136852480*n^2) * eps^27
        + (2068389622621/9007199254740992 - 2567357849371/4503599627370496*n) * eps^28
        + 1961943067581/9007199254740992 * eps^29;
C3[26] = + (2295919134019/14636698788954112 - 983965343151/2251799813685248*n + 1413743309125/2251799813685248*n^2 - 395848126555/562949953421312*n^3) * eps^26
        + (983965343151/4503599627370496 - 1413743309125/2251799813685248*n + 3766212175509/4503599627370496*n^2) * eps^27
        + (1798281489207/9007199254740992 - 4987686394593/9007199254740992*n) * eps^28
        + 3788832068455/18014398509481984 * eps^29;
C3[27] = + (17383387729001/121597189939003392 - 1798281489207/4503599627370496*n + 7792553119897/13510798882111488*n^2) * eps^27
        + (1798281489207/9007199254740992 - 7792553119897/13510798882111488*n) * eps^28
        + 6593698793759/36028797018963968 * eps^29;
C3[28] = + (4709784852685/36028797018963968 - 6593698793759/18014398509481984*n) * eps^28
        + 6593698793759/36028797018963968 * eps^29;
C3[29] = + 125280277081421/1044835113549955072 * eps^29;

C4[0] = + (2/3 - 4/15*n + 8/105*n^2 + 4/315*n^3 + 16/3465*n^4 + 20/9009*n^5 + 8/6435*n^6 + 28/36465*n^7 + 32/62985*n^8 + 4/11305*n^9 + 40/156009*n^10 + 44/229425*n^11 + 16/108675*n^12 + 52/450225*n^13 + 56/606825*n^14 + 20/267003*n^15 + 64/1038345*n^16 + 68/1324785*n^17 + 8/185185*n^18 + 76/2070705*n^19 + 80/2544009*n^20 + 28/1031355*n^21 + 88/3728745*n^22 + 92/4456305*n^23 + 32/1761795*n^24 + 100/6225009*n^25 + 104/7284585*n^26 + 12/941545*n^27 + 112/9803145*n^28 + 116/11282865*n^29)
        - (1/5 - 16/35*n + 32/105*n^2 - 16/385*n^3 - 64/15015*n^4 - 16/15015*n^5 - 32/85085*n^6 - 112/692835*n^7 - 128/1616615*n^8 - 144/3380195*n^9 - 32/1300075*n^10 - 176/11700675*n^11 - 64/6653325*n^12 - 208/32566275*n^13 - 224/51175575*n^14 - 16/5191725*n^15 - 256/115256295*n^16 - 272/166481315*n^17 - 288/235370135*n^18 - 304/326481155*n^19 - 64/89040315*n^20 - 112/199280705*n^21 - 352/791736855*n^22 - 368/1035348195*n^23 - 128/446125645*n^24 - 16/68475099*n^25 - 416/2168378135*n^26 - 432/2722006595*n^27 - 448/3388620455*n^28) * eps
        - (2/105 + 32/315*n - 1088/3465*n^2 + 1184/5005*n^3 - 128/3465*n^4 - 3232/765765*n^5 - 1856/1616615*n^6 - 6304/14549535*n^7 - 65792/334639305*n^8 - 288/2860165*n^9 - 25664/456326325*n^10 - 34144/1017958725*n^11 - 73856/3506302275*n^12 - 281632/20419054425*n^13 - 10048/1074687075*n^14 - 28832/4418157975*n^15 - 20992/4494995505*n^16 - 48416/14176524285*n^17 - 747072/293506558345*n^18 - 175712/91088242245*n^19 - 204928/138101528565*n^20 - 11296/9764754545*n^21 - 104896/114923649645*n^22 - 1558112/2140064719065*n^23 - 118016/201202665895*n^24 - 80032/167832467649*n^25 - 450112/1151408789685*n^26 - 2520288/7803992907865*n^27) * eps^2
        + (11/315 - 368/3465*n - 32/6435*n^2 + 976/4095*n^3 - 154048/765765*n^4 + 368/11115*n^5 + 5216/1322685*n^6 + 372208/334639305*n^7 + 13184/30421755*n^8 + 29008/143416845*n^9 + 15459424/145568097675*n^10 + 24876368/410237366175*n^11 + 107584/2917007775*n^12 + 8182096/347123925225*n^13 + 1076896/68682273975*n^14 + 5572816/516924483075*n^15 + 419584/55049100795*n^16 + 3975824/720425188665*n^17 + 32325856/7924677075315*n^18 + 4950032/1612380184155*n^19 + 10050752/4281147385515*n^20 + 29925872/16434081899235*n^21 + 6663008/4657787917965*n^22 + 141444848/124429477237065*n^23 + 408253312/447273526284585*n^24 + 27307792/36907885385721*n^25 + 261022112/431449322191965*n^26) * eps^3
        + (4/1155 + 1088/45045*n - 128/1287*n^2 + 64/3927*n^3 + 2877184/14549535*n^4 - 370112/2078505*n^5 + 3369088/111546435*n^6 + 6158272/1673196525*n^7 + 1772032/1673196525*n^8 + 582592/1386362835*n^9 + 69229184/347123925225*n^10 + 479862464/4512611027925*n^11 + 13232896/214886239425*n^12 + 487333184/12843585233325*n^13 + 4097514368/166966608033225*n^14 + 2215403584/134228057438475*n^15 + 22961152/2002940359695*n^16 + 7455695168/911337863661225*n^17 + 3709076864/620766370899675*n^18 + 552729152/124153274179935*n^19 + 7124808448/2110605661058895*n^20 + 23396048576/9000398853481035*n^21 + 353516672/174201268131891*n^22 + 58336832/36371693346219*n^23 + 417179454976/325466035959749685*n^24 + 333125284288/321947484219644283*n^25) * eps^4
        + (97/15015 - 464/45045*n + 4192/153153*n^2 - 88240/969969*n^3 + 31168/1322685*n^4 + 11513072/66927861*n^5 - 90038048/557732175*n^6 + 56656/2028117*n^7 + 11176576/3234846615*n^8 + 1514798224/1504203675975*n^9 + 364902368/902522205585*n^10 + 875443216/4512611027925*n^11 + 1163297728/11131107202215*n^12 + 65826704/1077203922795*n^13 + 260103719072/6845630929362225*n^14 + 44215340656/1784012908864095*n^15 + 290929029376/17315419409563275*n^16 + 100721472976/8566575918415515*n^17 + 14151520/1674794900961*n^18 + 65554773104/10553028305294475*n^19 + 104193472576/22372420007224287*n^20 + 927092143568/261011566750950015*n^21 + 282176032480/102604546929683799*n^22 + 421431700016/195279621575849811*n^23 + 34028203613312/19853428193544730785*n^24) * eps^5
        + (10/9009 + 4192/765765*n - 188096/14549535*n^2 + 23392/855855*n^3 - 2550656/30421755*n^4 + 44131552/1673196525*n^5 + 257683264/1673196525*n^6 - 31240736/210054975*n^7 + 451386112/17289697425*n^8 + 14726527328/4512611027925*n^9 + 4331513024/4512611027925*n^10 + 12975935008/33393321606645*n^11 + 31373075584/166966608033225*n^12 + 698039074144/6845630929362225*n^13 + 29703628096/494726268844665*n^14 + 1005634034464/26760193632961425*n^15 + 341277050932736/13835020108241056725*n^16 + 2337486955424/138945682579178475*n^17 + 5486091652672/463373879223384675*n^18 + 110047548877984/12864141504153965025*n^19 + 207975286912/32900617657682775*n^20 + 116341576864/24429654030877095*n^21 + 3202897200884032/877781898983444900445*n^22 + 5239237147019168/1846368821999659963005*n^23) * eps^6
        + (193/85085 - 6832/2078505*n + 106976/14549535*n^2 - 26672/1956955*n^3 + 521792/19684665*n^4 - 130524976/1673196525*n^5 + 3724256/135917925*n^6 + 3355734064/23876248825*n^7 - 9928194688/71628746475*n^8 + 649052336/26389538175*n^9 + 27235216864/8787716212275*n^10 + 1802925232/1964313035685*n^11 + 56875960256/152125131763605*n^12 + 89961920528/494726268844665*n^13 + 834516960736/8410346570359305*n^14 + 12897954159632/219603493781604075*n^15 + 188320698409216/5097112671457231425*n^16 + 2360065137403504/96845140757687397075*n^17 + 9522329813406688/570310273350825782775*n^18 + 1062828903347216/90048990529077755175*n^19 + 44538234246208/5200397629338836925*n^20 + 15623861307536/2458772826284159385*n^21 + 1934793328169696/402591698030001044565*n^22) * eps^7
        + (632/1322685 + 3456/1616615*n - 517376/111546435*n^2 + 27264/3380195*n^3 - 13728256/1003917915*n^4 + 337485952/13233463425*n^5 - 3335807744/45581929575*n^6 + 5933931904/214886239425*n^7 + 773057536/5945469075*n^8 - 2417337857408/18551845337025*n^9 + 35074718464/1504203675975*n^10 + 122682333568/41488672299165*n^11 + 5759356066304/6541380665835015*n^12 + 21217115597696/58872425992515135*n^13 + 6327384910592/35935117164262485*n^14 + 45144358136704/467850921534721725*n^15 + 168307641997312/2934701235081436275*n^16 + 114971778089344/3174268682843186175*n^17 + 279118225250048/11638985170425015975*n^18 + 2565033841015936/155539165459316122575*n^19 + 22281895799258624/1904621101567852142475*n^20 + 499531826463207808/58644190679703485491635*n^21) * eps^8
        + (107/101745 - 4976/3380195*n + 582496/185910725*n^2 - 88112/16787925*n^3 + 241875008/29113619535*n^4 - 60768482384/4512611027925*n^5 + 110550963232/4512611027925*n^6 - 103976595664/1504203675975*n^7 + 80357441408/2929238737425*n^8 + 6763222232848/55655536011075*n^9 - 67861105568/550247643225*n^10 + 2212522672/99570961035*n^11 + 3295501210304/1163486679693975*n^12 + 901465527762928/1064232316018542825*n^13 + 6742139143828448/19369028151537479415*n^14 + 16530402013984624/96845140757687397075*n^15 + 12353373376796416/131610063080959796025*n^16 + 95765418832375792/1710930820052477348325*n^17 + 60673550827813472/1710930820052477348325*n^18 + 81981470164643248/3480859254589522881075*n^19 + 4349006711700386752/267723479189950694635725*n^20) * eps^9
        + (1270/5148297 + 1376/1300075*n - 9664/4345965*n^2 + 2352160/646969323*n^3 - 1466054528/265447707525*n^4 + 1074734176/128931743655*n^5 - 129362368/9831396575*n^6 + 262162305568/11131107202215*n^7 - 38465435392/585847747485*n^8 + 267247345312/9878255309325*n^9 + 204209273106368/1784012908864095*n^10 - 3241185114016/27616298898825*n^11 + 6531220421504/307137753540705*n^12 + 3098495334496/1138216380768495*n^13 + 6086870028208448/7449626212129799775*n^14 + 38423353322878112/114062054670165156555*n^15 + 40496366139608576/244418688578925335475*n^16 + 665236142568416/7280556681074371695*n^17 + 367678743052291904/6729661225539744236745*n^18 + 30529744338007608544/879662860195552282374525*n^19) * eps^10
        + (481/841225 - 27632/35102025*n + 238304/145422675*n^2 - 2354704/893763325*n^3 + 1351995712/347123925225*n^4 - 3628654736/644658718275*n^5 + 30646053728/3710369067405*n^6 - 2139721666448/166966608033225*n^7 + 14114295321472/622330084487475*n^8 - 409450644752/6534845820015*n^9 + 10307920635808/387828893231325*n^10 + 3499011467373232/32249464121774025*n^11 - 1206016607114944/10749821373924675*n^12 + 9545159677072/467383537996725*n^13 + 15013719882592/5721927876221025*n^14 + 34656665188077392/43870021026986598675*n^15 + 389398246998784/1192286285750855295*n^16 + 73559957119861936/456764336575095762675*n^17 + 182732593408974929312/2052546673789621992207225*n^18) * eps^11
        + (2228/15540525 + 36032/59879925*n - 39261056/31556720475*n^2 + 1244864/629988975*n^3 - 12932462848/4512611027925*n^4 + 671728862912/166966608033225*n^5 - 37698002816/6678664321329*n^6 + 11134144068416/1369126185872445*n^7 - 733991428969984/58872425992515135*n^8 + 1232714276672/56337249753603*n^9 - 4429833678464/73797400736325*n^10 + 840415474013504/32249464121774025*n^11 + 3333478527060224/32249464121774025*n^12 - 2666448379438912/24771327513826425*n^13 + 16284062335255936/827736245792199975*n^14 + 333689425966716992/131610063080959796025*n^15 + 15659534365696/20459768715569799*n^16 + 22977355952311693888/72442823780810187960255*n^17) * eps^12
        + (673/1950975 - 45968/97698825*n + 19761248/20419054425*n^2 - 5684848/3732515325*n^3 + 27973845952/12843585233325*n^4 - 500069826512/166966608033225*n^5 + 372104734816/91275079058163*n^6 - 1627062252976/290011950702045*n^7 + 12698466842752/1591146648446355*n^8 - 172098932532272/14189764213580571*n^9 + 4774693008614176/225746248852418175*n^10 - 13025415886952528/225746248852418175*n^11 + 4848026099408192/189913510939335925*n^12 + 619763904190141936/6267145860998085525*n^13 - 649317315038718944/6267145860998085525*n^14 + 31106397870170704/1637148159767368325*n^15 + 2385779859697408/971669556445713741*n^16) * eps^13
        + (238/2629575 + 57568/153526725*n - 825536/1074687075*n^2 + 1194848/995395275*n^3 - 283558943872/166966608033225*n^4 + 2715755872/1180892000925*n^5 - 780655005376/254858986980585*n^6 + 171825550350112/42051732851796525*n^7 - 996847690701056/179675585821312425*n^8 + 1628471419526944/208269119909005155*n^9 - 29311863367971392/2483208737376599925*n^10 + 10654809266315936/520197877790354925*n^11 - 2080206830396032/37399847422835975*n^12 + 156667139836595552/6267145860998085525*n^13 + 187740421210774336/1977334790368379925*n^14 - 44223083570335579744/442263881445727643225*n^15) * eps^14
        + (299/1335015 - 14192/46725525*n + 4932448/7952684355*n^2 - 19928240/20676979323*n^3 + 41885845312/30975705562725*n^4 - 106538926231952/58872425992515135*n^5 + 698069390155552/294362129962575675*n^6 - 1222675417496752/395286288806887335*n^7 + 3426171103075456/842131658762499105*n^8 - 1101372339312272/201341248976481075*n^9 + 53459494241119136/6983391102255009585*n^10 - 30879408909358352/2685919654713465225*n^11 + 522986071597155776/26322012616191959205*n^12 - 1636740144692612656/30450955771673050845*n^13 + 1047772560655445344/42799730462489771925*n^14) * eps^15
        + (1072/17651865 + 86272/345768885*n - 11421184/22474977525*n^2 + 16677632/21215118925*n^3 - 18154021888/16569779339295*n^4 + 25154349615872/17315419409563275*n^5 - 70485959553536/37493279426127525*n^6 + 17021847805184/7060227510219975*n^7 - 300116388621985792/96845140757687397075*n^8 + 53507403275733248/13263029612809901925*n^9 - 4780406888960512/887872765984679475*n^10 + 2564172609357098752/342186164010495469665*n^11 - 1706337226816984064/152254778858365254225*n^12 + 179287783277363696896/9287541510360280507725*n^13) * eps^16
        + (1153/7507115 - 34544/166481315*n + 3700832/8775943605*n^2 - 1518032/2335595955*n^3 + 14928483904/16569779339295*n^4 - 5708509424/4814305899975*n^5 + 45794146362208/30141656009239775*n^6 - 5643458496441232/2934701235081436275*n^7 + 4156028415620301184/1710930820052477348325*n^8 - 1159757261134928/375451134529839225*n^9 + 525138269596488544/131610063080959796025*n^10 - 6287452560651272656/1187587275095248982955*n^11 + 25307469319858098112/3449658275276675617155*n^12) * eps^17
        + (2554/59814755 + 41056/235370135*n - 14837824/41929508335*n^2 + 3390304/6234993765*n^3 - 279486378368/372459822539805*n^4 + 42044271006688/42832879592077575*n^5 - 908499403281088/728158953065318775*n^6 + 2673843470669421536/1710930820052477348325*n^7 - 3332038388900879104/1710930820052477348325*n^8 + 594639889428168928/244418688578925335475*n^9 - 309769385066082483008/100944918383096163551175*n^10 + 4852059199993865385248/1231528004273773195324335*n^11) * eps^18
        + (1441/13114465 - 48336/326481155*n + 9106016/30362747415*n^2 - 13405488/29164499455*n^3 + 235380121664/372459822539805*n^4 - 2367311016464/2878098628716675*n^5 + 404878095158752/389822469822847425*n^6 - 116162066506295792/90048990529077755175*n^7 + 247341466765626752/155539165459316122575*n^8 - 65920898026272999856/33648306127698721183725*n^9 + 14943489055072437854816/6157640021368865976621675*n^10) * eps^19
        + (10540/338353197 + 33856/267120945*n - 7082368/27620305713*n^2 + 261152960/665956259969*n^3 - 7940593572608/14774239627412265*n^4 + 916716116672/1316024706307311*n^5 - 163090405515904/186436833393535725*n^6 + 10548437608477504/9776747543157013419*n^7 - 26616602067570450944/20188983676619232710235*n^8 + 173518074547495685824/108028772304716946958275*n^9) * eps^20
        + (587/7219485 - 196112/1793526345*n + 3884000/17576558181*n^2 - 637552/1890061173*n^3 + 12449720852672/27001196560443105*n^4 - 466255241229968/783034700252850045*n^5 + 527323603107424/708459966895435755*n^6 - 572248526956172944/626987070702460643175*n^7 + 973916019063553575808/879662860195552282374525*n^8) * eps^21
        + (1562/66703105 + 225632/2375210565*n - 286544192/1494007445385*n^2 + 84782368/290045401485*n^3 - 49602255488/124429477237065*n^4 + 263298573036064/513022734648418995*n^5 - 186977038393815616/292593966327814966815*n^6 + 5964364063236744416/7649242262570019846735*n^7) * eps^22
        + (2113/34165005 - 257968/3106044585*n + 358566688/2140064719065*n^2 - 106220624/416550139005*n^3 + 5743685513024/16549120472529645*n^4 - 435137683275536/976398107879249055*n^5 + 340361707744440224/615456273999886654335*n^6) * eps^23
        + (3656/202606425 + 293248/4015130805*n - 38087936/258689141865*n^2 + 43924864/196258677615*n^3 - 1343496883712/4418090985878955*n^4 + 80846540749696/207527123974335165*n^5) * eps^24
        + (2497/51875075 - 13264/205425297*n + 3118880/23976066807*n^2 - 810041200/4100876153969*n^3 + 86272944083264/321947484219644283*n^4) * eps^25
        + (4654/327806325 + 124384/2168378135*n - 44329792/383802929895*n^2 + 65844896/375780173615*n^3) * eps^26
        + (971/25421715 - 139344/2722006595*n + 804004512/7803992907865*n^2) * eps^27
        + (29092/2558620845 + 155456/3388620455*n) * eps^28
        + 3361/109067695 * eps^29;
C4[1] = + (1/45 - 16/315*n + 32/945*n^2 - 16/3465*n^3 - 64/135135*n^4 - 16/135135*n^5 - 32/765765*n^6 - 112/6235515*n^7 - 128/14549535*n^8 - 16/3380195*n^9 - 32/11700675*n^10 - 176/105306075*n^11 - 64/59879925*n^12 - 208/293096475*n^13 - 224/460580175*n^14 - 16/46725525*n^15 - 256/1037306655*n^16 - 272/1498331835*n^17 - 32/235370135*n^18 - 304/2938330395*n^19 - 64/801362835*n^20 - 112/1793526345*n^21 - 352/7125631695*n^22 - 368/9318133755*n^23 - 128/4015130805*n^24 - 16/616275891*n^25 - 416/19515403215*n^26 - 48/2722006595*n^27 - 448/30497584095*n^28) * eps
        - (2/105 - 64/945*n + 128/1485*n^2 - 1984/45045*n^3 + 256/45045*n^4 + 64/109395*n^5 + 128/855855*n^6 + 2368/43648605*n^7 + 24064/1003917915*n^8 + 64/5311735*n^9 + 9088/1368978975*n^10 + 704/179639775*n^11 + 11008/4508102925*n^12 + 10816/6806351475*n^13 + 128/119409675*n^14 + 29632/39763421775*n^15 + 1024/1926426645*n^16 + 214336/552884447115*n^17 + 84608/293506558345*n^18 + 8512/39037818105*n^19 + 69376/414304585695*n^20 + 11456/87882790905*n^21 + 153472/1494007445385*n^22 + 1472/17983737135*n^23 + 119296/1810823993055*n^24 + 26944/503497402947*n^25 + 21632/493460909865*n^26 + 282432/7803992907865*n^27) * eps^2
        - (1/105 - 16/2079*n - 5792/135135*n^2 + 3568/45045*n^3 - 103744/2297295*n^4 + 264464/43648605*n^5 + 544/855855*n^6 + 165328/1003917915*n^7 + 303488/5019589575*n^8 + 135664/5019589575*n^9 + 6000928/436704293025*n^10 + 554224/72394829325*n^11 + 63424/13884957009*n^12 + 598832/208274355135*n^13 + 4282016/2266515041175*n^14 + 664784/516924483075*n^15 + 57332992/63581711418225*n^16 + 77073104/118870156129725*n^17 + 3775712/7924677075315*n^18 + 132893296/372459822539805*n^19 + 3489344/12843442156545*n^20 + 3450352/16434081899235*n^21 + 39053344/237547183816215*n^22 + 20023984/153707001292845*n^23 + 9334144/89454705256917*n^24 + 102792464/1217960217728793*n^25 + 124807072/1812087153206253*n^26) * eps^3
        + (4/1155 - 2944/135135*n + 256/9009*n^2 + 17536/765765*n^3 - 3053056/43648605*n^4 + 1923968/43648605*n^5 - 2061568/334639305*n^6 - 1104256/1673196525*n^7 - 289792/1673196525*n^8 - 3114112/48522699225*n^9 - 391369984/13537833083775*n^10 - 98944/6685349671*n^11 - 7490048/902522205585*n^12 - 7679360/1541230227999*n^13 - 316086016/100179964819935*n^14 - 839709568/402684172315425*n^15 - 433629184/303779287887075*n^16 - 2751201664/2734013590983675*n^17 - 451501312/620766370899675*n^18 - 200058752/372459822539805*n^19 - 853023232/2110605661058895*n^20 - 8347485824/27001196560443105*n^21 - 626995456/2613019021978365*n^22 - 35348608/187348533651279*n^23 - 146563836928/976398107879249055*n^24 - 38855441792/321947484219644283*n^25) * eps^4
        + (1/9009 + 16/19305*n - 2656/153153*n^2 + 65072/2078505*n^3 + 526912/43648605*n^4 - 658160/10567557*n^5 + 14198752/334639305*n^6 - 1812592/295269975*n^7 - 97587328/145568097675*n^8 - 267846032/1504203675975*n^9 - 2119456/31853724903*n^10 - 45372848/1504203675975*n^11 - 2592068672/166966608033225*n^12 - 4380850576/500899824099675*n^13 - 5700161696/1080889094109825*n^14 - 39480194224/11774485198503027*n^15 - 12840471296/5771806469854425*n^16 - 196425584176/128498638776232725*n^17 - 108093549856/99943385714847675*n^18 - 11590396112/14774239627412265*n^19 - 273127762240/469820820151710027*n^20 - 343667608688/783034700252850045*n^21 - 518367866144/1539068203945256985*n^22 - 153626698640/585838864727549433*n^23 - 38138000512/184397165884316385*n^24) * eps^5
        + (10/9009 - 1472/459459*n + 106112/43648605*n^2 - 204352/14549535*n^3 + 4359424/143416845*n^4 + 29558336/5019589575*n^5 - 4479616/79676025*n^6 + 282120896/6931814175*n^7 - 3037689344/501401225325*n^8 - 159800512/237505843575*n^9 - 128742272/712517530725*n^10 - 34081066304/500899824099675*n^11 - 739998464/23852372576175*n^12 - 329429443264/20536892788086675*n^13 - 1144477661056/126155198555389575*n^14 - 1615718080576/294362129962575675*n^15 - 145301040063488/41505060324723170175*n^16 - 39812087684416/17090318957238952425*n^17 - 8181314153344/5097112671457231425*n^18 - 307611729639616/270146971587233265525*n^19 - 9726206064896/11745520503792750675*n^20 - 1307488226368/2125379900686307265*n^21 - 1226010709111168/2633345696950334701335*n^22 - 1983732571347776/5539106465998979889015*n^23) * eps^6
        + (349/2297295 + 28144/43648605*n - 32288/8729721*n^2 + 375344/111546435*n^3 - 12041408/1003917915*n^4 + 432232496/15058768725*n^5 + 310326496/145568097675*n^6 - 99405970096/1933976154825*n^7 + 17050659712/436704293025*n^8 - 1790101232/300840735195*n^9 - 4867489888/7259417740575*n^10 - 30362471408/166966608033225*n^11 - 472100207296/6845630929362225*n^12 - 1213812473968/38395060429901175*n^13 - 2070794882336/126155198555389575*n^14 - 128880963219824/13835020108241056725*n^15 - 5213913887488/922334673882737115*n^16 - 350085462103024/96845140757687397075*n^17 - 100618233981856/41730020001279935325*n^18 - 1349417396371216/810440914761699796575*n^19 - 18226976199582272/15398377380472296134925*n^20 - 324481362977936/376192242421476385905*n^21 - 309392942008518752/481902262541911250344305*n^22) * eps^7
        + (632/1322685 - 44288/43648605*n + 52736/47805615*n^2 - 2034944/557732175*n^3 + 3396608/885809925*n^4 - 4651476224/436704293025*n^5 + 376863232/13970931975*n^6 - 521047808/1933976154825*n^7 - 33839405056/712517530725*n^8 + 71989123328/1919156414175*n^9 - 2920335016448/500899824099675*n^10 - 167196416/251311112325*n^11 - 332813237248/1828336210947675*n^12 - 189963362048/2734013590983675*n^13 - 189790575759872/5929294332103310025*n^14 - 1615852457389312/96845140757687397075*n^15 - 2759847897165824/290535422273062191225*n^16 - 89000869775895808/15398377380472296134925*n^17 - 6338477357045248/1710930820052477348325*n^18 - 38129485424793344/15398377380472296134925*n^19 - 53670222315578368/31327733291305705929675*n^20 - 189395928218833664/155234622387450402771975*n^21) * eps^8
        + (43/479655 + 122576/334639305*n - 2304352/1673196525*n^2 + 2336816/1673196525*n^3 - 12805184/3669783975*n^4 + 54763949168/13537833083775*n^5 - 122726048/12640367025*n^6 + 114617716208/4512611027925*n^7 - 34612052864/18551845337025*n^8 - 2463842008976/55655536011075*n^9 + 247179941367712/6845630929362225*n^10 - 2994094055984/524709679077675*n^11 - 64595765995328/98120709987525225*n^12 - 3099595834864/17073245711527425*n^13 - 20252388370301728/290535422273062191225*n^14 - 94673925881072/2934701235081436275*n^15 - 4125115670603008/244418688578925335475*n^16 - 49466563811083856/5132792460157432044975*n^17 - 1436846393866144/244418688578925335475*n^18 - 381175372440689776/100944918383096163551175*n^19 - 6673125752239886656/2638988580586656847123575*n^20) * eps^9
        + (1270/5148297 - 34624/77224455*n + 8999296/15058768725*n^2 - 219421376/145568097675*n^3 + 245188352/155607276825*n^4 - 8995427648/2707566616755*n^5 + 62537856/15193976525*n^6 - 300772218944/33393321606645*n^7 + 12025681693184/500899824099675*n^8 - 6752231485504/2281876976454075*n^9 - 7341173985537152/176617277977545405*n^10 + 2796003983106368/80280580898884275*n^11 - 5941399696481024/1064232316018542825*n^12 - 692086460430784/1064232316018542825*n^13 - 1345434958946432/7449626212129799775*n^14 - 71571032546168768/1026558492031486408995*n^15 - 45358930642410496/1399852489133845103175*n^16 - 261920528055495616/15398377380472296134925*n^17 - 97300359399296/9989601027520649535*n^18 - 330035192316442762432/55418760192319793789595075*n^19) * eps^10
        + (15881/295269975 + 3275312/15058768725*n - 290237344/436704293025*n^2 + 3374142608/4512611027925*n^3 - 2324047552/1504203675975*n^4 + 22749713104/13537833083775*n^5 - 9287415008/2929238737425*n^6 + 2059124453296/500899824099675*n^7 - 1828414788736/216177818821965*n^8 + 2236007478391408/98120709987525225*n^9 - 3289422168026144/883086389887727025*n^10 - 1559442395410064/39717761076290115*n^11 + 93137685335849536/2767004021648211345*n^12 - 36715264470352/6721467259064481*n^13 - 395250439858913504/615935095218891845397*n^14 - 920542128392325776/5132792460157432044975*n^15 - 1071330999526287616/15398377380472296134925*n^16 - 69392630410138352/2137657095171448169319*n^17 - 105265368113339870944/6157640021368865976621675*n^18) * eps^11
        + (2228/15540525 - 6120832/25688487825*n + 691211008/1933976154825*n^2 - 3492371072/4512611027925*n^3 + 208152064/246142419705*n^4 - 773080659584/500899824099675*n^5 + 290139660544/166966608033225*n^6 - 3669101648768/1208052516946275*n^7 + 3589606756281344/883086389887727025*n^8 - 181420012122752/22643240766351975*n^9 + 411019605061888/18926156098824975*n^10 - 37593628401801344/8804103705244308825*n^11 - 48134971208650240/1291268543435831961*n^12 + 857893200414386816/26322012616191959205*n^13 - 9146937940412344064/1710930820052477348325*n^14 - 3175025851183744/5017392434171487825*n^15 - 102210624046413824/574639004078346282075*n^16 - 75317795379180637568/1086642356712152819403825*n^17) * eps^12
        + (733/21460725 + 5764688/41912795925*n - 3194656/8562829275*n^2 + 185012432/410237366175*n^3 - 2374742464/2862284709141*n^4 + 65055690512/71557117728525*n^5 - 10435905969184/6845630929362225*n^6 + 74203317689008/42051732851796525*n^7 - 83189743940224/28486657738313775*n^8 + 970218654799696/242719651021772925*n^9 - 12979601134119328/1699037557152410475*n^10 + 182872846566647344/8804103705244308825*n^11 - 106352279311029184/22812410934033031311*n^12 - 311872072090752592/8774004205397319735*n^13 + 702432581536430432/22219880779902303225*n^14 - 3453730558896213488/659770708386249434975*n^15 - 677845730256054991616/1086642356712152819403825*n^16) * eps^13
        + (238/2629575 - 851648/5987542275*n + 458368/1995847425*n^2 - 4444753088/9821565178425*n^3 + 257876621056/500899824099675*n^4 - 926189860672/1080889094109825*n^5 + 16440112590464/17315419409563275*n^6 - 62997095167168/42051732851796525*n^7 + 14708637300203008/8301012064944634035*n^8 - 12992021530058176/4611673369413685575*n^9 + 126514656768577664/32281713585895799025*n^10 - 934589810873408/127665525684801195*n^11 + 2273402066071352576/114062054670165156555*n^12 - 8678130264714688/1754800841079463947*n^13 - 60752587029024640/1785845526459021027*n^14 + 1236016674552098630336/40246013211561215533475*n^15) * eps^14
        + (1349/59007663 + 569168/6195804615*n - 6094472992/26363148636825*n^2 + 2579500208/8787716212275*n^3 - 10278771378368/20536892788086675*n^4 + 5804486242864/10389251645737965*n^5 - 986666922848/1136533320318825*n^6 + 1154950393173904/1185858866420662005*n^7 - 25102872528546944/17090318957238952425*n^8 + 171093766520283664/96845140757687397075*n^9 - 90252717369684512/33114790065531819645*n^10 + 856168540797233296/223164889572062262825*n^11 - 523921065908336192/74388296524020754275*n^12 + 148934374703642746192/7764993721776627965475*n^13 - 4530223920051850971488/879662860195552282374525*n^14) * eps^15
        + (1072/17651865 - 1621504/17634213135*n + 25527296/163746264825*n^2 - 103998194176/360296364703275*n^3 + 5248424757248/15492743682240825*n^4 - 467691403586048/883086389887727025*n^5 + 301694693856256/512408152157076175*n^6 - 252813007696723456/290535422273062191225*n^7 + 286904030108225536/290535422273062191225*n^8 - 351698678463165952/244418688578925335475*n^9 + 37866741710291968/21596602216651186725*n^10 - 3343357802501632/1264961585514852225*n^11 + 87427882477068703744/23294981165329883896425*n^12 - 179996219456280053248/26478146293511607161775*n^13) * eps^16
        + (4105/256743333 + 839312/13080031965*n - 27420423136/178581676418145*n^2 + 69811484144/345901445314425*n^3 - 96146193098048/294362129962575675*n^4 + 15405921597572848/41505060324723170175*n^5 - 2522567523013984/4611673369413685575*n^6 + 58989773513135888/96845140757687397075*n^7 - 13345966126725050752/15398377380472296134925*n^8 + 1699738669400076688/1710930820052477348325*n^9 - 21702598557454157792/15398377380472296134925*n^10 + 1576193121961143720976/908504265447865471960575*n^11 - 2497177697166830532544/972258950742452522624475*n^12) * eps^17
        + (2554/59814755 - 14367296/228073660815*n + 1013644928/9174446936655*n^2 - 167156355008/853223565108915*n^3 + 84963738158848/360913568041071045*n^4 - 14611840804674368/41505060324723170175*n^5 + 1819399468775296/4611673369413685575*n^6 - 2858231484366780352/5132792460157432044975*n^7 + 837914285761024/1346129677460643075*n^8 - 7953299207910592/9248274702986364045*n^9 + 301043012700456113536/302834755149288490653525*n^10 - 8502565529331757967296/6157640021368865976621675*n^11) * eps^18
        + (23263/2006513145 + 44125168/949080717585*n - 1895498144/17652901347081*n^2 + 5803380481936/40101507560119005*n^3 - 19655652872896/87117068147844735*n^4 + 3287964577171024/12631974881437486575*n^5 - 46210682062489376/125190060003839805975*n^6 + 372537686814738512/905786904733664478525*n^7 - 8650226115503323264/15398377380472296134925*n^8 + 101222691712671952/160484766904763376075*n^9 - 47176442350469959824736/55418760192319793789595075*n^10) * eps^19
        + (10540/338353197 - 3712/82302129*n + 14840576/183064816935*n^2 - 2144136832/15388989250635*n^3 + 5316349300224/31190061435648115*n^4 - 6607647772488064/26779786748647471539*n^5 + 66555255361792/238679026280280495*n^6 - 44052878135978368/115777273537385685225*n^7 + 384486668476460567552/908504265447865471960575*n^8 - 3468834561318140695424/6157640021368865976621675*n^9) * eps^20
        + (27329/3154914945 + 13289392/382771889955*n - 1286021216/16459191268065*n^2 + 770506950736/7181693789965695*n^3 - 1152005167333952/7079713738148182131*n^4 + 195075922055654512/1026558492031486408995*n^5 - 8145969897756512/31107833091863224515*n^6 + 12664143027275104208/43262107878469784379075*n^7 - 651402398229792722048/1679356369464236175442275*n^8) * eps^21
        + (1562/66703105 - 127424/3811384395*n + 2102950784/34362171243855*n^2 - 37430848576/364239015184863*n^3 + 696434041088/5463585227772945*n^4 - 6373599267875264/35398568690740910655*n^5 + 545772421678208/2661698573054612091*n^6 - 8466792971121000512/31046924477490080554395*n^7) * eps^22
        + (3401/512475075 + 28492208/1071585381825*n - 5331168/90848077775*n^2 + 8186753917904/100165729175837325*n^3 - 99012798127808/815635223288961075*n^4 + 1929159053254544/13474293888733636959*n^5 - 5854490607967819616/30333202075708699392225*n^6) * eps^23
        + (3656/202606425 - 35305216/1385220127725*n + 29556996608/624734277603975*n^2 - 4014261183232/51436455522727275*n^3 + 32964315529286656/336857347218340923975*n^4 - 29338515257596672/216297875582303119605*n^5) * eps^24
        + (100381/19328652945 + 22113584/1063075911975*n - 39278656544/868533020083575*n^2 + 44603405612432/700327125194055975*n^3 - 9121454090180288/98004601813921127325*n^4) * eps^25
        + (4654/327806325 - 17462848/878193144675*n + 276219008/7401913647975*n^2 - 2750176959296/45302178830156325*n^3) * eps^26
        + (45767/11058446025 + 176617072/10656655819425*n - 1087907102432/30552632234291475*n^2) * eps^27
        + (29092/2558620845 - 125915776/7959869448795*n) * eps^28
        + 917561/273868982145 * eps^29;
C4[2] = + (4/525 - 32/1575*n + 64/3465*n^2 - 32/5005*n^3 + 128/225225*n^4 + 32/765765*n^5 + 64/8083075*n^6 + 32/14549535*n^7 + 256/334639305*n^8 + 288/929553625*n^9 + 64/456326325*n^10 + 352/5089793625*n^11 + 128/3506302275*n^12 + 416/20419054425*n^13 + 64/5373435375*n^14 + 32/4418157975*n^15 + 512/112374887625*n^16 + 544/184294815705*n^17 + 576/293506558345*n^18 + 608/455441211225*n^19 + 128/138101528565*n^20 + 32/48823772725*n^21 + 704/1494007445385*n^22 + 736/2140064719065*n^23 + 256/1006013329475*n^24 + 32/167832467649*n^25 + 832/5757043948425*n^26 + 864/7803992907865*n^27) * eps^2
        - (8/1575 - 128/5775*n + 256/6825*n^2 - 6784/225225*n^3 + 4608/425425*n^4 - 128/124355*n^5 - 5888/72747675*n^6 - 9088/557732175*n^7 - 1024/214512375*n^8 - 3968/2281631625*n^9 - 35584/48522699225*n^10 - 235136/683728943625*n^11 - 303616/1735619626125*n^12 - 1664/17531511375*n^13 - 22784/419725007625*n^14 - 16768/516924483075*n^15 - 710656/35323173010125*n^16 - 850816/66038975627625*n^17 - 25856/3047952721275*n^18 - 1184384/206922123633225*n^19 - 512/129731738955*n^20 - 17536/6320800730475*n^21 - 87296/43990219225225*n^22 - 697728/483892411477475*n^23 - 216064/203306148311175*n^24 - 107392/135328913080977*n^25 - 3018496/5033575425572925*n^26) * eps^3
        - (8/1925 - 1856/225225*n - 128/17325*n^2 + 42176/1276275*n^3 - 2434816/72747675*n^4 + 195136/14549535*n^5 - 761984/557732175*n^6 - 947392/8365982625*n^7 - 199168/8365982625*n^8 - 250816/34659070875*n^9 - 12285568/4512611027925*n^10 - 2049728/1735619626125*n^11 - 854272/1504203675975*n^12 - 3794752/12843585233325*n^13 - 136569728/834833040166125*n^14 - 983872/10325235187575*n^15 - 263816192/4556689318306125*n^16 - 166125632/4556689318306125*n^17 - 73477504/3103831854498375*n^18 - 68603072/4345364596297725*n^19 - 159244544/14774239627412265*n^20 - 338106304/45001994267405175*n^21 - 3319168/622147386185325*n^22 - 318736576/82745602362648225*n^23 - 353437184/125179244599903725*n^24 - 675465152/321947484219644283*n^25) * eps^4
        + (8/10725 - 128/17325*n + 64256/3828825*n^2 - 128/25935*n^3 - 266752/10392525*n^4 + 11222912/334639305*n^5 - 8292608/557732175*n^6 + 4484992/2788660875*n^7 + 340992/2450641375*n^8 + 11977088/395843072625*n^9 + 2246912/237505843575*n^10 + 82282624/22563055139625*n^11 + 4942336/3057996484125*n^12 + 661387648/834833040166125*n^13 + 5904128/14079866164875*n^14 + 23140740736/98120709987525225*n^15 + 12064565248/86577097047816375*n^16 + 18372231296/214164397960387875*n^17 + 27322100992/499716928574238375*n^18 + 241091456/6715563467005575*n^19 + 1114236416/46060864720755885*n^20 + 21761259136/1305057833754750075*n^21 + 859481344/73288962092631285*n^22 + 40995250048/4881990539396245275*n^23 + 606575260672/99267140967723653925*n^24) * eps^5
        - (4/25025 + 928/3828825*n + 292288/72747675*n^2 - 106528/6613425*n^3 + 6139264/557732175*n^4 + 10832608/557732175*n^5 - 162679232/5019589575*n^6 + 85724192/5472484875*n^7 - 3655690496/2051186830875*n^8 - 3604983136/22563055139625*n^9 - 7007552/196200479475*n^10 - 9537699488/834833040166125*n^11 - 13154432/2929238737425*n^12 - 200866912/99212042454525*n^13 - 6420816704/6371474674514625*n^14 - 17688656864/32706903329175075*n^15 - 21307711227392/69175100541205283625*n^16 - 5244426197152/28483864928731587375*n^17 - 417090283072/3640794765326593875*n^18 - 362186962528/4911763119767877555*n^19 - 573931129472/11745520503792750675*n^20 - 1058701197088/31880698510294608975*n^21 - 33756633788608/1462969831639074834075*n^22 - 50313491799008/3077281369999433271675*n^23) * eps^6
        + (464/1276275 - 17152/10392525*n + 83456/72747675*n^2 - 181504/79676025*n^3 + 115303424/8365982625*n^4 - 4580096/334639305*n^5 - 508046848/34659070875*n^6 + 2213207296/71628746475*n^7 - 17261467648/1074431197125*n^8 + 4782020864/2507006126625*n^9 + 1014518272/5757469242525*n^10 + 33657011968/834833040166125*n^11 + 149965386752/11409384882270375*n^12 + 1104106298624/210258664258982625*n^13 + 16287375872/6782537556741375*n^14 + 18546580736/15321173984763075*n^15 + 45457260285952/69175100541205283625*n^16 + 5907631030528/15620183993175386625*n^17 + 130174950780416/570310273350825782775*n^18 + 247185478912/1725076446917198375*n^19 + 4546015751168/48883737715785067095*n^20 + 194686818012928/3134935353512303215875*n^21 + 541960491316736/12748737104283366411225*n^22) * eps^7
        + (1168/72747675 + 128/1865325*n - 12032/7436429*n^2 + 5669504/2788660875*n^3 - 42320384/25097947875*n^4 + 1690753408/145568097675*n^5 - 3812261632/259345461375*n^6 - 1083259264/97675563375*n^7 + 220583066624/7521018379875*n^8 - 1505036615552/92759226685125*n^9 + 1611235072/806601971175*n^10 + 6334750336/33458606692875*n^11 + 1667637018112/37738734610586625*n^12 + 937077639296/63991767383168625*n^13 + 4509356511488/760165940013244875*n^14 + 294484214656/107248217893341525*n^15 + 32262664812544/23058366847068427875*n^16 + 729031420097152/950517122251376304625*n^17 + 25918478235392/58194925852125079875*n^18 + 2318317188006784/8554654100262386741625*n^19 + 558196229800448/3256287689777295598425*n^20 + 492800344582544512/4398314300977761411872625*n^21) * eps^8
        + (208/1119195 - 192256/334639305*n + 34304/91933875*n^2 - 164096/121246125*n^3 + 1760402432/727840488375*n^4 - 7092326144/4512611027925*n^5 + 223317267968/22563055139625*n^6 - 17696559872/1187529217875*n^7 - 7016842532864/834833040166125*n^8 + 860408727296/30919742228375*n^9 - 22226861374976/1369126185872445*n^10 + 21222698179328/10292382166523625*n^11 + 88454767616/442649819492595*n^12 + 50501718260992/1064232316018542825*n^13 + 7723646961783296/484225703788436985375*n^14 + 314323524352/48062104594385805*n^15 + 2532668227735552/827869751638295491125*n^16 + 40384078766338816/25663962300787160224875*n^17 + 19229411505664/22105049354683169875*n^18 + 770798397212533504/1514173775746442453267625*n^19 + 250556302305381376/803170437569852083907175*n^20) * eps^9
        + (236/9561123 + 50272/557732175*n - 180416/253514625*n^2 + 4019104/6220858875*n^3 - 25917758848/22563055139625*n^4 + 494758496/196200479475*n^5 - 12204703424/7521018379875*n^6 + 4056672544/472457860875*n^7 - 22131315968/1504203675975*n^8 - 314109390176/49391276546625*n^9 + 288234585666624/10902301109725025*n^10 - 31315082826784/1939144466156625*n^11 + 111197020252288/52765141526472375*n^12 + 14390751017248/69105994546658625*n^13 + 24312743742913856/484225703788436985375*n^14 + 622105174713376/36402783405371858475*n^15 + 60584296191732224/8554654100262386741625*n^16 + 4228371181856/1264546060644846525*n^17 + 12685404296720576/7314849158195374170375*n^18 + 29737849987907314208/30788200106844329883108375*n^19) * eps^10
        + (3464/32807775 - 1302656/5019589575*n + 153380608/727840488375*n^2 - 45513088/64282208375*n^3 + 18741801472/22563055139625*n^4 - 925614464/902522205585*n^5 + 692308704512/278277680055375*n^6 - 1431548425856/834833040166125*n^7 + 37095814581248/4889736378115875*n^8 - 57202079464576/3988646747460375*n^9 - 156331212808448/32706903329175075*n^10 + 2294120744984192/91139789909361375*n^11 - 22462403210597888/1403552764604165175*n^12 + 1062101785588352/496641747475319985*n^13 + 1839082934090104576/8554654100262386741625*n^14 + 89891107232678272/1710930820052477348325*n^15 + 513933681977344/28420777741735504125*n^16 + 74871039262438528/9896560625793741524625*n^17 + 36964023452909851904/10262733368948109961036125*n^18) * eps^11
        + (296/15540525 + 1728/24395525*n - 49758848/136745788725*n^2 + 427124032/1327238537625*n^3 - 5044327168/7521018379875*n^4 + 298545088/318031634349*n^5 - 801131699072/834833040166125*n^6 + 6305965926464/2632934972831625*n^7 - 378931864297984/210258664258982625*n^8 + 911863359318208/133800968164807125*n^9 - 192205122085248128/13835020108241056725*n^10 - 6780515998533184/1913935588096588875*n^11 + 38905530524711168/1619483959158652125*n^12 - 946513267068414656/59822755945890816375*n^13 + 83570609810086528/38708842082635234125*n^14 + 1131108186078795712/5132792460157432044975*n^15 + 131223039038073856/2407271503571450641125*n^16 + 9360216457260964928/493928343960069463365375*n^17) * eps^12
        + (56/858429 - 55168/399169485*n + 5211904/37921101075*n^2 - 3002446208/7521018379875*n^3 + 48699457024/119261862880875*n^4 - 919739008/1451883548115*n^5 + 365596999424/368044673621625*n^6 - 10263813181312/11066245487314875*n^7 + 3358672820415488/1471810649812878375*n^8 - 43146790366966912/23058366847068427875*n^9 + 200474306313855232/32281713585895799025*n^10 - 1223232504628096/91139789909361375*n^11 - 5571695531272704/2175096389591250125*n^12 + 117245774985483904/5101165235696116125*n^13 - 6362058788044060928/407364480964875559125*n^14 + 1432428366354690688/659770708386249434975*n^15 + 406876011841654183936/1811070594520254699006375*n^16) * eps^13
        + (6748/491730525 + 2464/47453715*n - 35434816/169647031125*n^2 + 2367228064/12099029567625*n^3 - 338914889344/834833040166125*n^4 + 643139268064/1369126185872445*n^5 - 42372035912768/70086221419660875*n^6 + 528871923808/521733658210875*n^7 - 9028483998408448/9882157220172183375*n^8 + 375698992716832/173371179301266375*n^9 - 3261967803906496/1699037557152410475*n^10 + 4454132788010992864/777695827296580612875*n^11 - 324957881336448/25082916539157575*n^12 - 51719952215776/29149515632549235*n^13 + 40751993548714355392/1848808028994435229875*n^14 - 1505262899486918255456/97740317799505809152725*n^15) * eps^14
        + (63392/1475191575 - 40448/491730525*n + 22100992/232479264875*n^2 - 10707459584/43938581061375*n^3 + 395889698816/1629912126038625*n^4 - 1272720851456/3165184193145975*n^5 + 57785079583744/113216203831759875*n^6 - 5771910533522944/9882157220172183375*n^7 + 400461014478848/395286288806887335*n^8 - 8980497036868096/9882157220172183375*n^9 + 861739038708736/418695852855651525*n^10 - 7151522689996655104/3666280328683880032125*n^11 + 136923421975731791872/25663962300787160224875*n^12 - 21113609897148018176/1688042113429701731625*n^13 - 121850848500674573312/107275958560433205167625*n^14) * eps^15
        + (216352/21800053275 + 276003584/7259417740575*n - 364665344/2792083746375*n^2 + 45336414464/345738935826375*n^3 - 54656669920256/210258664258982625*n^4 + 2651168079104/9495552579437925*n^5 - 9112145249388032/23058366847068427875*n^6 + 259248276999003392/484225703788436985375*n^7 - 25094568739469312/44020518526221544125*n^8 + 2852336745721263872/2851551366754128913875*n^9 - 215254033283584/237135248794522155*n^10 + 16753729491723017984/8554654100262386741625*n^11 - 39706593780549643264/20188983676619232710235*n^12 + 2373769153328288102144/473664617028374305893975*n^13) * eps^16
        + (1248/41951525 - 14245376/268867323725*n + 10222592/149641089675*n^2 - 1801381376/11340026117875*n^3 + 236349194786816/1471810649812878375*n^4 - 3691013040948736/13835020108241056725*n^5 + 371324256164864/1213598255108864625*n^6 - 2021022934670848/5206727997725128875*n^7 + 427036746482839552/777695827296580612875*n^8 - 1598379187657077248/2851551366754128913875*n^9 + 1279883225050112/1305057833754750075*n^10 - 35243011544058408448/38824968608883139827375*n^11 + 57528704095634149967872/30788200106844329883108375*n^12) * eps^17
        + (2188/299073775 + 118112/4177173275*n - 1651234880/18960523669087*n^2 + 396968969632/4266117825544575*n^3 - 527133283672192/3007613067008925375*n^4 + 712898585518304/3873805630307495883*n^5 - 102467165232448/380980097394521625*n^6 + 1667960274927658784/5132792460157432044975*n^7 - 9803797102758335744/25663962300787160224875*n^8 + 1582433972899100512/2851551366754128913875*n^9 - 167731799286812796352/302834755149288490653525*n^10 + 2057307675985255174816/2148013960942627666263375*n^11) * eps^18
        + (4776/222945905 - 545152/15064773295*n + 75166464/1485934456825*n^2 - 2430966148992/22278615311177225*n^3 + 25097198606848/221613594411183975*n^4 - 777828977914496/4210658293812495525*n^5 + 346053142459467008/1710930820052477348325*n^6 - 2300283426585485696/8554654100262386741625*n^7 + 2890306701807143936/8554654100262386741625*n^8 - 63408372990350273152/168241530638493605918625*n^9 + 379976274656827151616/684182224596540664069075*n^10) * eps^19
        + (729128/132296100027 + 1037632/48401012205*n - 312986836352/5129781278546925*n^2 + 8491740695488/123684726382742525*n^3 - 569171041087744/4611673369413685575*n^4 + 14781690121669568/114062054670165156555*n^5 - 325240456165524608/1710930820052477348325*n^6 + 264121805570445376/1222093442894626677375*n^7 - 15019589271866087936/56080510212831201972875*n^8 + 322915232383134423488/932975760813464541912375*n^9) * eps^20
        + (50248/3154914945 - 4224/163387745*n + 351214336/9143995148925*n^2 - 13428756608/171810856219275*n^3 + 149145346743808/1787806499532369225*n^4 - 15142621991500672/114062054670165156555*n^5 + 3607505909629184/25284691921957793325*n^6 - 1346982356013579136/6977759335237061996625*n^7 + 426802317284889955328/1884991843276183462231125*n^8) * eps^21
        + (402908/95051924625 + 61416608/3707025060375*n - 1594343872/35872596353475*n^2 + 176968781792/3392422200251175*n^3 - 11134005164416/123581094437721375*n^4 + 5634047312627936/58997614484568184425*n^5 - 23365464365584673216/168241530638493605918625*n^6 + 7084481509357518688/46298045273450120124975*n^7) * eps^22
        + (10384/854125125 - 34177792/1785975636375*n + 36665846272/1230537213462375*n^2 - 878996127488/15176625632702625*n^3 + 54887110257664/865067661064049625*n^4 - 850509595404544/8637367877393357025*n^5 + 909150023994065408/8631398964632556737625*n^6) * eps^23
        + (10096/3039096375 + 90261376/6926100638625*n - 104352359168/3123671388019875*n^2 + 31307137302656/771546832840909125*n^3 - 38042941521183232/561428912030568206625*n^4 + 498270120528775552/6849432726772932120825*n^5) * eps^24
        + (509392/53690702625 - 8609536/590597728875*n + 1032951296/43865304044625*n^2 - 971880602368/22022865572140125*n^3 + 391353414474752/7911102710525447125*n^4) * eps^25
        + (2894476/1093234093875 + 3389629984/325419348610125*n - 164895679936/6399913855999125*n^2 + 1620742521773024/50360922132857114625*n^3) * eps^26
        + (139048/18430743375 - 86549632/7611897013875*n + 412763643136/21823308738779625*n^2) * eps^27
        + (4247096/1982931154875 + 5788830656/685433202535125*n) * eps^28
        + 185528/30429886905 * eps^29;
C4[3] = + (8/2205 - 256/24255*n + 512/45045*n^2 - 256/45045*n^3 + 1024/765765*n^4 - 256/2909907*n^5 - 512/101846745*n^6 - 256/334639305*n^7 - 2048/11712375675*n^8 - 256/5019589575*n^9 - 512/29113619535*n^10 - 2816/410237366175*n^11 - 1024/347123925225*n^12 - 3328/2429867476575*n^13 - 512/755505013725*n^14 - 256/723694276305*n^15 - 4096/21193903806075*n^16 - 4352/39623385376575*n^17 - 512/7924677075315*n^18 - 4864/124153274179935*n^19 - 1024/41955244378047*n^20 - 256/16434081899235*n^21 - 5632/554276762237835*n^22 - 5888/871006340659455*n^23 - 2048/447273526284585*n^24 - 1280/405986739242931*n^25 - 6656/3020145255343755*n^26) * eps^3
        - (16/8085 - 1024/105105*n + 2048/105105*n^2 - 1024/51051*n^3 + 4096/373065*n^4 - 1024/357357*n^5 + 161792/780825045*n^6 + 1024/79676025*n^7 + 8192/3904125225*n^8 + 13312/26127607275*n^9 + 2048/13080031965*n^10 + 84992/1504203675975*n^11 + 241664/10529425731825*n^12 + 13312/1302972414975*n^13 + 2048/418462676775*n^14 + 467968/187919280413865*n^15 + 2834432/2126455015209525*n^16 + 17408/23367637529775*n^17 + 268288/620766370899675*n^18 + 175104/675945603868535*n^19 + 1101824/6894645159459057*n^20 + 130048/1285771264783005*n^21 + 2048/31266894280083*n^22 + 1672192/38614614435902505*n^23 + 499712/17129791366302615*n^24 + 2145280/107315828073214761*n^25) * eps^4
        - (136/63063 - 256/45045*n + 512/1072071*n^2 + 494336/33948915*n^3 - 44032/1996995*n^4 + 204032/14196819*n^5 - 42496/10140585*n^6 + 1651456/5019589575*n^7 + 3172352/145568097675*n^8 + 39570176/10529425731825*n^9 + 6040064/6317655439095*n^10 + 9663232/31588277195475*n^11 + 44557312/389588752077525*n^12 + 156928/3273855059475*n^13 + 50066944/2281876976454075*n^14 + 211489024/19624141997505045*n^15 + 61804544/11018903260631175*n^16 + 83527936/27257287013140275*n^17 + 1220781568/699603700003933725*n^18 + 319501568/310259032175657565*n^19 + 294585344/469820820151710027*n^20 + 6025472/15353621573585295*n^21 + 6149632/24429654030877095*n^22 + 1419008/8597216044219803*n^23 + 15341295616/138973997354813115495*n^24) * eps^5
        + (64/315315 - 16384/5360355*n + 966656/101846745*n^2 - 868352/101846745*n^3 - 3506176/468495027*n^4 + 966656/46293975*n^5 - 2736128/168120225*n^6 + 254590976/48522699225*n^7 - 930414592/2105885146365*n^8 - 975978496/31588277195475*n^9 - 175947776/31588277195475*n^10 - 1719713792/1168766256232575*n^11 - 189497344/389588752077525*n^12 - 471973888/2522074552922925*n^13 - 23683022848/294362129962575675*n^14 - 2875506688/76316107768075175*n^15 - 166335741952/8804103705244308825*n^16 - 7264288768/725043834549531315*n^17 - 8638251008/1551295160878287825*n^18 - 43198234624/13411551780926474175*n^19 - 5872648192/3045134945427750175*n^20 - 10622910464/8926595582882490513*n^21 - 4633606045696/6144473292884114303115*n^22 - 6324103528448/12924581753997619741035*n^23) * eps^6
        - (16/97461 + 14848/101846745*n + 74752/101846745*n^2 - 1180160/156165009*n^3 + 1804288/156165009*n^4 + 21661184/11712375675*n^5 - 6329863168/339658894575*n^6 + 77686373888/4512611027925*n^7 - 191476584448/31588277195475*n^8 + 1902050816/3509808577275*n^9 + 602135552/15178782548475*n^10 + 1734961664/233753251246515*n^11 + 32315783168/15973138835178525*n^12 + 4767689216/6937827978915925*n^13 + 354268160/1308276133167003*n^14 + 3839243089408/32281713585895799025*n^15 + 5498545266688/96845140757687397075*n^16 + 19638642446848/677915985303811779525*n^17 + 62312623694848/3992171913455780479425*n^18 + 16645612231168/1891028801110632858675*n^19 + 185414359607296/35929547221102024314825*n^20 + 2746091096576/877781898983444900445*n^21 + 146389811987456/74962574173186194498003*n^22) * eps^7
        + (5024/33948915 - 96256/101846745*n + 2363392/2342475135*n^2 - 223232/3904125225*n^3 + 179101696/35137127025*n^4 - 12169295872/1018976683725*n^5 + 21649608704/10529425731825*n^6 + 73147930624/4512611027925*n^7 - 110974713856/6317655439095*n^8 + 45664495616/6834890387325*n^9 - 38688231424/61514013485925*n^10 - 6727825408/140526148110075*n^11 - 204859727872/22156289352021825*n^12 - 5333835708416/2060534909738029725*n^13 - 12449383788544/13835020108241056725*n^14 - 11682410842112/32281713585895799025*n^15 - 15675688321024/96845140757687397075*n^16 - 564491569272832/7185909444220404862965*n^17 - 162424807264256/3992171913455780479425*n^18 - 25758343960576/1159017652293613687575*n^19 - 867930864951296/68382041485323207566925*n^20 - 986317559527424/131013617475933318651525*n^21) * eps^8
        - (1744/101846745 + 512/15935205*n + 2819072/3904125225*n^2 - 574976/354920475*n^3 + 293840896/1018976683725*n^4 - 104608193024/31588277195475*n^5 + 50770254848/4512611027925*n^6 - 2319237632/501401225325*n^7 - 70544060416/5059594182825*n^8 + 152043321856/8657527823945*n^9 - 12686255881216/1774793203908725*n^10 + 1910603827712/2714802252619275*n^11 + 4965264541696/89588474336436075*n^12 + 11708566053376/1064232316018542825*n^13 + 27753253723136/8804103705244308825*n^14 + 8328847653376/7449626212129799775*n^15 + 12046676107264/26322012616191959205*n^16 + 118607935682048/570310273350825782775*n^17 + 136251371367424/1330723971151926826475*n^18 + 3451317953686016/64237675334697558623475*n^19 + 60965191496247296/2052546673789621992207225*n^20) * eps^9
        + (13760/156165009 - 868352/2342475135*n + 2834432/11712375675*n^2 - 7192576/16174233075*n^3 + 7776468992/4512611027925*n^4 - 4603068416/6317655439095*n^5 + 23153426432/10529425731825*n^6 - 68229349376/6678664321329*n^7 + 7325440344064/1168766256232575*n^8 + 63577941262336/5324379611726175*n^9 - 44408364941312/2559670695326745*n^10 + 28661243789312/3822884804708775*n^11 - 24786086817923072/32281713585895799025*n^12 - 3817219702784/61277771427624675*n^13 - 1226804449460224/96845140757687397075*n^14 - 8872730492715008/2395303148073468287655*n^15 - 623934886248448/466617496377948367725*n^16 - 2853622228533248/5132792460157432044975*n^17 - 1724063864471552/6729661225539744236745*n^18 - 16517156456001093632/129310440448746185509055175*n^19) * eps^10
        + (2824/688963275 + 169216/11712375675*n - 776704/1940907969*n^2 + 22551296/45581929575*n^3 - 485960704/1504203675975*n^4 + 304217344/191444104215*n^5 - 2695489024/2419805913525*n^6 + 8952644864/5757469242525*n^7 - 5695372408832/622330084487475*n^8 + 17565250440448/2409982350570795*n^9 + 22610939298304/2213249097462975*n^10 - 21402530278491392/1257729100749186975*n^11 + 1752626126402468864/225971995101270593175*n^12 - 14296223366555392/17382461161636199475*n^13 - 288001255055872/4203761228630165475*n^14 - 170463009837350144/11976515740367341438275*n^15 - 30452830506323968/7185909444220404862965*n^16 - 1203551903703808/774513440279510206275*n^17 - 1344666689909348864/2052546673789621992207225*n^18) * eps^11
        + (848/15540525 - 1506304/8562829275*n + 494897152/4512611027925*n^2 - 1525812224/4512611027925*n^3 + 1189474304/1858133952675*n^4 - 74582428672/233753251246515*n^5 + 1436219392/1037059677225*n^6 - 9475007491072/6845630929362225*n^7 + 70856261853184/58872425992515135*n^8 - 16848457551905792/2060534909738029725*n^9 + 254950781338028032/32281713585895799025*n^10 + 19961192018277376/2282545405063339325*n^11 - 11266641625872879616/677915985303811779525*n^12 + 20501971947705344/2580589472175682275*n^13 - 70802116737542144/81472896192975111825*n^14 - 54344855357336576/733256065736776006425*n^15 - 19768531954614272/1259562261464658012225*n^16 - 104711917718588416/22047815933290057205295*n^17) * eps^12
        + (2456/364832325 + 1801984/79168614525*n - 339889664/1504203675975*n^2 + 205509376/957220521075*n^3 - 109868782592/389588752077525*n^4 + 54139545344/77917750415505*n^5 - 312640051712/840691517640975*n^6 + 349164957867776/294362129962575675*n^7 - 58011733055488/37464271086145995*n^8 + 33115510536049408/32281713585895799025*n^9 - 215925931198897664/29474608056687468675*n^10 + 507489742441723648/61628725936710161775*n^11 + 9972967174487194624/1330723971151926826475*n^12 - 34133956918870784/2108170346834596275*n^13 + 1256638470211792384/155539165459316122575*n^14 - 1517965285997460736/1670483282935397505575*n^15 - 10235580119040855076864/129310440448746185509055175*n^16) * eps^13
        + (17536/491730525 - 32768/342721275*n + 32768/479809785*n^2 - 87051763712/389588752077525*n^3 + 115073417216/389588752077525*n^4 - 809341124608/3194627767035705*n^5 + 476140039995392/686844969912676575*n^6 - 7648126664704/17315419409563275*n^7 + 2295366957006848/2252212575760172025*n^8 - 1505996592152576/922334673882737115*n^9 + 642554502878101504/677915985303811779525*n^10 - 937147600273702912/142014020636766894525*n^11 + 44138249302114304/5259778542102477575*n^12 + 31679339599003648/4926579901426302525*n^13 - 38784788290715746304/2462071180075516184175*n^14 + 910141441476937023488/111378501678506619732175*n^15) * eps^14
        + (6752/1121145597 + 828416/39240095895*n - 22733400064/166966608033225*n^2 + 12663202816/106251477839325*n^3 - 9940302737408/47919416505535575*n^4 + 142477291621376/412106981947605945*n^5 - 511499016656896/2060534909738029725*n^6 + 1833727522382848/2767004021648211345*n^7 - 49222696013062144/96845140757687397075*n^8 + 1755522210632704/1976431444034436675*n^9 - 3980569541165627392/2395303148073468287655*n^10 + 3693492679339365376/3992171913455780479425*n^11 - 214983640335726014464/35929547221102024314825*n^12 + 152736093675883697152/18118318684145465252775*n^13 + 1030498930683129116672/186595152162692908382475*n^14) * eps^15
        + (7104/290667377 - 5550080/96792236541*n + 116482048/2419805913525*n^2 - 37516668928/253541886272675*n^3 + 112198220398592/686844969912676575*n^4 - 12087336398848/62440451810243325*n^5 + 9147933925376/24661354916650725*n^6 - 24968440568492032/96845140757687397075*n^7 + 60100118709960704/96845140757687397075*n^8 - 12851567387414528/22812410934033031311*n^9 + 578870590466711552/733256065736776006425*n^10 - 94517652107104256/57121696694915777925*n^11 + 658362218889165488128/706614428681673144858225*n^12 - 2587762813002169044992/473664617028374305893975*n^13) * eps^16
        + (63136/12979801835 + 6603776/376414253215*n - 115496960/1322827232727*n^2 + 887622656/11561294920175*n^3 - 43488723791872/294362129962575675*n^4 + 75193702847488/382787117619317775*n^5 - 3822735799883776/20542908645570053925*n^6 + 36656101850983424/96845140757687397075*n^7 - 1972951098707156992/7185909444220404862965*n^8 + 328771821253526528/570310273350825782775*n^9 - 3105328344576980992/5132792460157432044975*n^10 + 217025910651311236096/302834755149288490653525*n^11 - 70045496023034800943104/43103480149582061836351725*n^12) * eps^17
        + (384/22037015 - 19693568/532171875235*n + 23750672384/663618328418045*n^2 - 906788864/8981300685357*n^3 + 2473671458816/24060904536071403*n^4 - 97688010118627328/677915985303811779525*n^5 + 458602279763968/2098811100011801175*n^6 - 3630274708209664/19665871494856061475*n^7 + 4490469276862251008/11976515740367341438275*n^8 - 1171359654445416448/3992171913455780479425*n^9 + 18008930028582633472/33648306127698721183725*n^10 - 1241396166426066944/1957914156238113188115*n^11) * eps^18
        + (7256/1889173195 + 4900096/346489785785*n - 31059853824/526317984607415*n^2 + 38700561003264/717371413019906645*n^3 - 2876286797818880/27116639412152471181*n^4 + 84142172780774656/677915985303811779525*n^5 - 5603644391945728/39789088838429705775*n^6 + 107992837810298624/466617496377948367725*n^7 - 192399843750455296/1026558492031486408995*n^8 + 1829483213954652416/5011449848806192516725*n^9 - 92159294855156056576/295904898052050767755275*n^10) * eps^19
        + (208560/16246889477 - 23395328/926072700189*n + 5966964736/217627084544415*n^2 - 59040218112/828510128879615*n^3 + 96692817891328/1369527243038003595*n^4 - 203186292622336/1893520275156891927*n^5 + 17678406396274688/126068586740708857245*n^6 - 714429587557256192/5132792460157432044975*n^7 + 45769716805203484672/192713026004092675870425*n^8 - 2770267341515812025344/14367826716527353945450575*n^9) * eps^20
        + (5695096/1877174392275 + 37023086848/3264406268166225*n - 135977211392/3264406268166225*n^2 + 19436995328/486188167599225*n^3 - 2916383737510912/37543936490179753725*n^4 + 1016222889010513664/11976515740367341438275*n^5 - 3851462753392374272/35929547221102024314825*n^6 + 67996526692104448/448644081702649615783*n^7 - 6002521005978183563264/43103480149582061836351725*n^8) * eps^21
        + (1293248/133072694475 - 31178752/1729945028175*n + 23344955392/1088135422722075*n^2 - 20955891089408/403698241829889825*n^3 + 31312543744/608896292352775*n^4 - 3711165786734592/45887033487997476775*n^5 + 22699071565427326976/235538142893891048286075*n^6 - 1975768440081947803648/18472920064106597929865025*n^7) * eps^22
        + (70576/29211079275 + 7439872/814404890187*n - 61061929984/2004017747638725*n^2 + 1769998572032/57671177404269975*n^3 - 70447795996672/1211094725489669475*n^4 + 48276040517729792/786000476842795489275*n^5 - 307128224790756352/3725130079472998170975*n^6) * eps^23
        + (4576/607819275 - 292864/21987621075*n + 323268608/18931341745575*n^2 - 204679168/5263836485355*n^3 + 30640655949824/785215261581214275*n^4 - 20770366119528448/335286916695178495425*n^5) * eps^24
        + (363376/186843645135 + 76231168/10276400482425*n - 192745499648/8395819194141225*n^2 + 163618760840704/6769828876875874425*n^3 - 6126423998867456/137653187163142779975*n^4) * eps^25
        + (433472/72882272925 - 1978056704/195251609166075*n + 158870945792/11519844940798425*n^2 - 1279016321024/42860359262006055*n^3) * eps^26
        + (4160936/2628224005275 + 3079920896/506546373283335*n - 128748399563264/7261342261016607225*n^2) * eps^27
        + (631696/132195410325 - 3245452288/411259921521075*n) * eps^28
        + 594728/456448303575 * eps^29;
C4[4] = + (64/31185 - 512/81081*n + 1024/135135*n^2 - 512/109395*n^3 + 2048/1247103*n^4 - 2560/8729721*n^5 + 1024/66927861*n^6 + 512/717084225*n^7 + 4096/45176306175*n^8 + 512/29113619535*n^9 + 1024/232077138579*n^10 + 512/386795230965*n^11 + 2048/4512611027925*n^12 + 6656/38530755699975*n^13 + 1024/14311423545705*n^14 + 512/16107366892617*n^15 + 8192/546802718196735*n^16 + 8704/1171720110421575*n^17 + 1024/266042730385575*n^18 + 9728/4692993764001543*n^19 + 10240/8864543776447359*n^20 + 512/771462758869803*n^21 + 1024/2613019021978365*n^22 + 11776/49647361417588935*n^23 + 4096/27897088796549973*n^24 + 12800/137977493236990407*n^25) * eps^4
        - (128/135135 - 2048/405405*n + 77824/6891885*n^2 - 198656/14549535*n^3 + 8192/855855*n^4 - 256000/66927861*n^5 + 1282048/1673196525*n^6 - 284672/6453758025*n^7 - 2932736/1310112879075*n^8 - 1378304/4512611027925*n^9 - 102400/1624539970053*n^10 - 677888/40613499251325*n^11 - 876544/166966608033225*n^12 - 2048/1091285019825*n^13 - 241664/325982425207725*n^14 - 3737600/11774485198503027*n^15 - 22642688/155838774686069475*n^16 - 661504/9402339422651175*n^17 - 10719232/299830157144543025*n^18 - 37783552/1994522349700655775*n^19 - 1024000/98334590264311401*n^20 - 38912/6580123531536555*n^21 - 1773568/513022734648418995*n^22 - 47104/22706932741377885*n^23 - 1851392/1452689867820346155*n^24) * eps^5
        - (512/405405 - 2048/530145*n + 299008/130945815*n^2 + 280576/43648605*n^3 - 14114816/1003917915*n^4 + 63039488/5019589575*n^5 - 87683072/15058768725*n^6 + 243132416/187158982725*n^7 - 3305586688/40613499251325*n^8 - 1816576/410237366175*n^9 - 26021888/40613499251325*n^10 - 208984064/1502699472299025*n^11 - 1482752/38530755699975*n^12 - 258390016/20536892788086675*n^13 - 1101824/236688927871275*n^14 - 1674704896/883086389887727025*n^15 - 103952580608/124515180974169510525*n^16 - 20090607616/51270956871716857275*n^17 - 141357056/728158953065318775*n^18 - 244905162752/2431322744285099389725*n^19 - 5751365632/105709684534134756075*n^20 - 52934656/1738947191470615035*n^21 - 46270369792/2633345696950334701335*n^22 - 57764907008/5539106465998979889015*n^23) * eps^6
        + (128/2297295 - 2048/1438965*n + 241664/43648605*n^2 - 1071104/143416845*n^3 - 598016/3011753745*n^4 + 27613184/2377700325*n^5 - 863424512/62386327575*n^6 + 14341695488/1933976154825*n^7 - 10573889536/5801928464475*n^8 + 554350592/4512611027925*n^9 + 10652495872/1502699472299025*n^10 + 19990528/18551845337025*n^11 + 385441792/1579760983698975*n^12 + 26510989312/378465595666168725*n^13 + 36253696/1532249375166675*n^14 + 53436065792/5929294332103310025*n^15 + 52137918464/13835020108241056725*n^16 + 1480593344512/871606266819186573675*n^17 + 4181365755904/5132792460157432044975*n^18 + 1000732862464/2431322744285099389725*n^19 + 43487879168/199978927019120729025*n^20 + 134786934784/1128576727264429157715*n^21 + 14014785654784/206529541089390535861845*n^22) * eps^7
        - (17536/130945815 + 1024/43648605*n - 333824/3011753745*n^2 - 3402752/1003917915*n^3 + 76509184/9035261235*n^4 - 506510336/119101170825*n^5 - 544454656/64774320975*n^6 + 81273324544/5801928464475*n^7 - 116438441984/13537833083775*n^8 + 384681841664/166966608033225*n^9 - 9210947584/55655536011075*n^10 - 56273062912/5600970760387275*n^11 - 1406799613952/883086389887727025*n^12 - 17382315008/46478231046722475*n^13 - 7065012224/63755853033368925*n^14 - 1597517556736/41505060324723170175*n^15 - 13088473088/870735531287898675*n^16 - 96767968256/15052177302514463475*n^17 - 2168797042688/733256065736776006425*n^18 - 22253970224128/15398377380472296134925*n^19 - 2024631116115968/2725512796343596415881725*n^20 - 631344565525504/1583393148351994108274145*n^21) * eps^8
        + (2944/43648605 - 1722368/3011753745*n + 13266944/15058768725*n^2 + 108544/717084225*n^3 + 19259392/13790661885*n^4 - 304229926912/40613499251325*n^5 + 13166350336/1933976154825*n^6 + 217784215552/40613499251325*n^7 - 1070803042304/79089445910475*n^8 + 1576695216128/166966608033225*n^9 - 7317091151872/2678725146272175*n^10 + 71083022336/342591383636775*n^11 + 332174286848/25231039711077915*n^12 + 180362430464/83287746471016395*n^13 + 457253050314752/871606266819186573675*n^14 + 66028500992/413279405793829575*n^15 + 2626638683471872/46195132141416888404775*n^16 + 1048407575824384/46195132141416888404775*n^17 + 1373352398848/138724120544795460675*n^18 + 341593997830144/73662508009286389618425*n^19 + 382965711284199424/166256280576959381368785225*n^20) * eps^9
        - (14848/602350749 + 63488/1673196525*n + 413696/1368978975*n^2 - 58701824/48522699225*n^3 + 71114752/164427122475*n^4 - 241801216/738427259115*n^5 + 890097664/148767396525*n^6 - 185319725056/23118453419985*n^7 - 14710882304/5272629727365*n^8 + 87149336576/6838792137225*n^9 - 1769065070153728/176617277977545405*n^10 + 39343512737792/12675881194560675*n^11 - 10281234043641856/41505060324723170175*n^12 - 1581078206464/96748392365322075*n^13 - 806631639658496/290535422273062191225*n^14 - 112074429466624/162088182952339959315*n^15 - 269338565378048/1248517084903159146075*n^16 - 18582400043008/236898113545727632845*n^17 - 1933197962104832/60566951029857698130705*n^18 - 60399947547314176/4262981553255368753045775*n^19) * eps^10
        + (13696/295269975 - 1263616/5019589575*n + 93507584/436704293025*n^2 - 143448064/1504203675975*n^3 + 14614028288/13537833083775*n^4 - 609875968/624823065405*n^5 - 1237520384/26363148636825*n^6 - 253546190848/55655536011075*n^7 + 5681519509504/677040421585275*n^8 + 214664647481344/294362129962575675*n^9 - 31278745921441792/2649259169663181075*n^10 + 290271896455168/27949535572204155*n^11 - 994793732507705344/290535422273062191225*n^12 + 1007756234246144/3528770311008852525*n^13 + 180209601368526848/9239026428283377680955*n^14 + 52513246916810752/15398377380472296134925*n^15 + 4467930789675008/5132792460157432044975*n^16 + 1202387450415104/4333088706428611154025*n^17 + 146144562349641728/1420993851085122917681925*n^18) * eps^11
        - (2752/792566775 + 3126784/436704293025*n + 278027264/1230712098525*n^2 - 1906406912/4512611027925*n^3 + 13318144/148767396525*n^4 - 385723904/479329975215*n^5 + 651327491072/500899824099675*n^6 + 2585190754816/61610678364260025*n^7 + 1285145378811904/378465595666168725*n^8 - 1896715047424/228719603700525*n^9 + 108991838453582848/124515180974169510525*n^10 + 34341601112433152/3169477333887951177*n^11 - 616093273555376128/58107084454612438245*n^12 + 79626751390577152/21536192140520693895*n^13 - 611808984871936/1906919799439293639*n^14 - 348075945959202304/15398377380472296134925*n^15 - 11052858295372292096/2725512796343596415881725*n^16 - 16246381930177024/15352874741615973900525*n^17) * eps^12
        + (34048/1094496975 - 4296704/33929406225*n + 9199616/113763303225*n^2 - 666202112/4512611027925*n^3 + 11972722688/23852372576175*n^4 - 19444084736/100179964819935*n^5 + 97002643456/175528998188775*n^6 - 539677367382016/378465595666168725*n^7 + 37863377108992/294362129962575675*n^8 - 849685773930496/337439514835147725*n^9 + 2307997411351846912/290535422273062191225*n^10 - 952506302124032/452782476269707311*n^11 - 10149533533759029248/1026558492031486408995*n^12 + 2536635024778391552/236898113545727632845*n^13 - 345761202095071232/87990727888413120771*n^14 + 170146429996470272/481454300714290128225*n^15 + 4257384430093558022144/166256280576959381368785225*n^16) * eps^13
        + (7168/4946230575 + 8974336/1933976154825*n - 93282304/644658718275*n^2 + 1573646336/8787716212275*n^3 - 1366114304/12843585233325*n^4 + 202461184/415348221015*n^5 - 411651006464/1274294934902925*n^6 + 3839857856512/10228799882869425*n^7 - 494905525829632/348782019535488825*n^8 + 3102394617856/8943128706038175*n^9 - 23750499115491328/12631974881437486575*n^10 + 6281828177286582272/839911493480307061905*n^11 - 362043035983265792/119367266515289117325*n^12 - 66153523158142976/7357084271606448225*n^13 + 278535696937581191168/25957264727081870627445*n^14 - 10888422776491155263488/2638988580586656847123575*n^15) * eps^14
        + (120064/5605727985 - 192512/2712449025*n + 3118014464/71557117728525*n^2 - 661172224/5386019613975*n^3 + 716483084288/2933841826869525*n^4 - 51287781376/468480843441765*n^5 + 378645470961664/883086389887727025*n^6 - 307621081034752/711515319852397203*n^7 + 14911080071168/54731947680953631*n^8 - 881401908588544/658810481344812225*n^9 + 5137439471148163072/9239026428283377680955*n^10 - 1347004173866315776/942757798804426293975*n^11 + 107407504440093753344/15398377380472296134925*n^12 - 260611080305794551808/69884943495989651689275*n^13 - 64625496610661007302656/7916965741759970541370725*n^14) * eps^15
        + (6400/2616006393 + 1107968/140504859495*n - 2029686784/21778253221725*n^2 + 1198225408/12989812010175*n^3 - 1367443873792/13585944459811185*n^4 + 719433310676992/2649259169663181075*n^5 - 63814622162944/456099564007946925*n^6 + 157784678176768/438213306595870575*n^7 - 442694333281845248/871606266819186573675*n^8 + 4703020945135616/20780536275941020425*n^9 - 174940641115230208/143018984957947022925*n^10 + 179184835005863936/244418688578925335475*n^11 - 3826143738499702784/3428317982822133856455*n^12 + 16560752844714960140288/2557788931953221251827465*n^13) * eps^16
        + (84736/5562772215 - 1101824/25471641195*n + 5169913856/178581676418145*n^2 - 233627242496/2559670695326745*n^3 + 70218421682176/529851833932636215*n^4 - 367435176251392/4016618741102242275*n^5 + 11260909794107392/41505060324723170175*n^6 - 157314981962559488/871606266819186573675*n^7 + 4600932081707548672/15398377380472296134925*n^8 - 2826045097184792576/5132792460157432044975*n^9 + 3358887872888479744/15398377380472296134925*n^10 - 2997036152580109078528/2725512796343596415881725*n^11 + 48333318506986607427584/55418760192319793789595075*n^12) * eps^17
        + (29696/12381654285 + 126963712/15737082596235*n - 174095884288/2803448856786435*n^2 + 192265793536/3463083881912655*n^3 - 2065111023763456/24903036194833902105*n^4 + 137907822072991744/871606266819186573675*n^5 - 1454755457867776/15291338014371694275*n^6 + 16143676059275264/63194435213976591525*n^7 - 923844554893459456/4199557467401535309525*n^8 + 1290691679389454336/5132792460157432044975*n^9 - 90880238263941996544/160324282137858612698925*n^10 + 38669172193378346979328/166256280576959381368785225*n^11) * eps^18
        + (171776/15383267445 - 4296704/152649346185*n + 786882560/36910611907533*n^2 - 1117064032256/16769721343322493*n^3 + 1268559669477376/15847386669439755885*n^4 - 6079247310737408/79236933347198779425*n^5 + 238252404104617984/1399852489133845103175*n^6 - 4954857180036468736/46195132141416888404775*n^7 + 3590745911011278848/15398377380472296134925*n^8 - 10935270658690822144/43262107878469784379075*n^9 + 4039796192998858153984/18472920064106597929865025*n^10) * eps^19
        + (244288/116731852965 + 16665088/2289740192775*n - 60094358528/1399031257785525*n^2 + 3775697939968/101196594313152975*n^3 - 11699335030784/179675585821312425*n^4 + 16586730946151936/167982298696061412381*n^5 - 60983345813341184/810440914761699796575*n^6 + 378264738379902464/2199768197210328019275*n^7 - 19768926062753615872/160324282137858612698925*n^8 + 9935173508449188352/47245319857050122582775*n^9) * eps^20
        + (2254208/268167770325 - 202909696/10519032013425*n + 1358934016/82295956340325*n^2 - 160058079232/3264406268166225*n^3 + 850193500332032/16090258495791323025*n^4 - 321074139364931584/5132792460157432044975*n^5 + 243713411755012096/2199768197210328019275*n^6 - 707822781060487168/9054859788516931614225*n^7 + 3972497411381290090496/23750897225279911624112175*n^8) * eps^21
        + (46064128/26177300041725 + 2135226368/340304900542425*n - 129082421248/4197093773356575*n^2 + 14011652593664/519040596638429775*n^3 - 11242059096064/222445969987898475*n^4 + 34969938420373504/530978530361113659825*n^5 - 31791272768638976/519442118609414220675*n^6 + 64623481105209387008/552346447099532828467725*n^7) * eps^22
        + (567424/87633237825 - 2525366272/183241100292075*n + 127744077824/9711778315479975*n^2 - 1465656547328/39926199741417675*n^3 + 64825892864/1735921727887725*n^4 - 434460028991488/8637367877393357025*n^5 + 3702905819309092864/48999787968452514402825*n^6) * eps^23
        + (4411264/3014175784725 + 36530244608/6869306613388275*n - 6393343404032/281641571148919275*n^2 + 1926123498496/93880523716306425*n^3 - 8066704574943232/204941183272696925775*n^4 + 83042824808834048/1785916025662073210325*n^5) * eps^24
        + (14258816/2802654677025 - 85649408/8407964031075*n + 24432791552/2289768871129425*n^2 - 155146314299392/5538950899262079075*n^3 + 28150215791353856/1013628014564960470725*n^4) * eps^25
        + (74207744/61002462438225 + 81445824512/18158399652444975*n - 55287432851456/3214036738482760575*n^2 + 45322371937982464/2810139455013426996075*n^3) * eps^26
        + (32066944/7884672015825 - 75653347328/9769108627607175*n + 245769011032064/28008034435349770725*n^2) * eps^27
        + (83335616/82093349811825 + 9767500288/2579721325904925*n) * eps^28
        + 4519424/1369344910725 * eps^29;
C4[5] = + (128/99099 - 2048/495495*n + 4096/765765*n^2 - 6144/1616615*n^3 + 8192/4849845*n^4 - 10240/22309287*n^5 + 12288/185910725*n^6 - 2048/717084225*n^7 - 16384/145568097675*n^8 - 2048/167133741775*n^9 - 4096/1985548852287*n^10 - 2048/4512611027925*n^11 - 8192/68023432902425*n^12 - 2048/55655536011075*n^13 - 4096/325982425207725*n^14 - 2048/436092044389001*n^15 - 32768/17315419409563275*n^16 - 34816/42832879592077575*n^17 - 4096/11104820634983075*n^18 - 38912/221613594411183975*n^19 - 40960/469820820151710027*n^20 - 6144/136720344488592865*n^21 - 4096/171007578216139665*n^22 - 47104/3580126395557246535*n^23 - 49152/6617809397848243595*n^24) * eps^5
        - (256/495495 - 8192/2807805*n + 376832/53348295*n^2 - 8192/855855*n^3 + 294912/37182145*n^4 - 761856/185910725*n^5 + 6373376/5019589575*n^6 - 1417216/6931814175*n^7 + 14614528/1504203675975*n^8 + 6873088/16546240435725*n^9 + 114688/2363748633675*n^10 + 483328/55655536011075*n^11 + 3702784/1836632688365475*n^12 + 1564672/2788960748999425*n^13 + 16384/91615975711975*n^14 + 434176/6845630929362225*n^15 + 113115136/4611673369413685575*n^16 + 19357696/1898924328582105825*n^17 + 7651328/1699037557152410475*n^18 + 188801024/90048990529077755175*n^19 + 2588672/2533347559641573675*n^20 + 36364288/70137536722648139745*n^21 + 26591232/97531322109271655605*n^22 + 334061568/2256673004666251065895*n^23) * eps^6
        - (6784/8423415 - 432128/160044885*n + 397312/160044885*n^2 + 3233792/1227010785*n^3 - 90112/10140585*n^4 + 16893952/1673196525*n^5 - 304615424/48522699225*n^6 + 129972224/58605338025*n^7 - 19623657472/49638721307175*n^8 + 112556032/5515413478575*n^9 + 1717645312/1836632688365475*n^10 + 1488896/12843585233325*n^11 + 548397056/25100646740994825*n^12 + 1909467136/359775936620925825*n^13 + 26341376/17132187458139325*n^14 + 212998144/419243033583062325*n^15 + 2574811136/13835020108241056725*n^16 + 7177459712/96845140757687397075*n^17 + 1640075264/51846388486438707525*n^18 + 42549766144/2971616687459565920775*n^19 + 384894803968/56460717061731752494725*n^20 + 4678068224/1379371555545413414985*n^21 + 93907152896/53544695837990138927145*n^22) * eps^7
        + (512/53348295 - 16384/22863555*n + 950272/283156335*n^2 - 7094272/1227010785*n^3 + 27459584/11043097065*n^4 + 44056576/7661478825*n^5 - 15664185344/1504203675975*n^6 + 55903043584/7091245901025*n^7 - 156559081472/49638721307175*n^8 + 125727391744/204070298707275*n^9 - 62808752128/1836632688365475*n^10 - 11392663552/6845630929362225*n^11 - 33476509696/154189687123253925*n^12 - 138500489216/3237983429588332425*n^13 - 950960128/88019214106796775*n^14 - 1150632968192/355098849444853789275*n^15 - 106967072768/96845140757687397075*n^16 - 305122557952/733256065736776006425*n^17 - 22689579008/133476872486363481075*n^18 - 4193065713664/56460717061731752494725*n^19 - 114398135779328/3331182306642173397188775*n^20 - 32269630521344/1935258292430215021223955*n^21) * eps^8
        - (16768/160044885 - 18432/409003595*n - 1716224/6135053925*n^2 - 784384/557732175*n^3 + 358162432/64049962977*n^4 - 21357307904/3818363177475*n^5 - 8616275968/3818363177475*n^6 + 393340928/41057668575*n^7 - 4234428416/475688341975*n^8 + 84470368256/21110720555925*n^9 - 102917165056/121259162999975*n^10 + 4928882046976/98120709987525225*n^11 + 8343515193344/3237983429588332425*n^12 + 178912274432/508980672878433525*n^13 + 633749204992/8804103705244308825*n^14 + 20039994431488/1065296548334561367825*n^15 + 2233706971136/384086510624025527175*n^16 + 4259891402752/2091137668953027870175*n^17 + 1138831732736/1447710693890557756275*n^18 + 283557603328/862777080197403107275*n^19 + 26333931741184/179665889217659219477025*n^20) * eps^9
        + (40192/1227010785 - 6627328/18405161775*n + 13451264/18405161775*n^2 - 1220608/177916563825*n^3 + 625639424/49638721307175*n^4 - 40023105536/9927744261435*n^5 + 8635301888/1272787725825*n^6 - 3905085440/5651177502663*n^7 - 601491439616/73465307534619*n^8 + 78960137363456/8366882246998275*n^9 - 3063088825974784/647596685917666485*n^10 + 318151765925888/294362129962575675*n^11 - 3436000146980864/50728407063550541325*n^12 - 141582966784/38892210884398575*n^13 - 18976575045632/36734363735674529925*n^14 - 14207981707264/129794751866050005735*n^15 - 1664495212691456/56460717061731752494725*n^16 - 105714509602816/11292143412346350498945*n^17 - 248688188440576/74026273480937186604195*n^18 - 20727065127968768/15630932361936352094501175*n^19) * eps^10
        - (451456/18405161775 + 468992/18405161775*n + 2215936/21349987659*n^2 - 186566656/220616539143*n^3 + 10790330368/16546240435725*n^4 + 69511168/174170951955*n^5 + 1481088978944/612210896121825*n^6 - 336223479808/49638721307175*n^7 + 216393505521664/75301940222984475*n^8 + 2378698436777984/359775936620925825*n^9 - 31129006450757632/3237983429588332425*n^10 + 14764481067108352/2767004021648211345*n^11 - 6488450473984/4973860874943675*n^12 + 335812940167168/3902185158734657025*n^13 + 955302786666496/198107779163971061385*n^14 + 13339668624545792/18820239020577250831575*n^15 + 8742367278497792/56460717061731752494725*n^16 + 763066338654208/17813809126428734744325*n^17 + 8502065922936832/610216578694211943629175*n^18) * eps^11
        + (75776/2906078175 - 21692416/123173005725*n + 1413349376/7091245901025*n^2 + 807206912/49638721307175*n^3 + 29159063552/49638721307175*n^4 - 392668971008/367326537673095*n^5 - 141528793088/612210896121825*n^6 - 91066548813824/75301940222984475*n^7 + 19940018063147008/3237983429588332425*n^8 - 14101050299973632/3237983429588332425*n^9 - 20817214190780416/4113114086233827675*n^10 + 36951885405552640/3873805630307495883*n^11 - 95511505657397248/16389177666685559505*n^12 + 1316229674909106176/868626416334334653765*n^13 - 18190456006246400/173725283266866930753*n^14 - 9295527959658496/1525965325992750067425*n^15 - 3078599776131874816/3331182306642173397188775*n^16 - 2480267930475757568/11953065923833681013442075*n^17) * eps^12
        - (157952/25416651975 + 63254528/5515413478575*n + 684187648/5515413478575*n^2 - 531623936/1504203675975*n^3 + 4810227712/68023432902425*n^4 - 384561152/1316582572305*n^5 + 4242336096256/3585806677284975*n^6 - 3859307081728/27209944786456575*n^7 + 7701409398784/17315419409563275*n^8 - 546830624075776/102897377410853025*n^9 + 330876058407968768/62664502843209492225*n^10 + 14091916227989504/3873805630307495883*n^11 - 34993139294239965184/3764047804115450166315*n^12 + 1800608637785731072/289542138778111551255*n^13 - 355896986804224/208015905173553477*n^14 + 19560882727191252992/158627728887722542723275*n^15 + 1508191457506470068224/203202120705172577228515275*n^16) * eps^13
        + (1938944/102771679725 - 17088512/181826817975*n + 34045952/472749726735*n^2 - 6395052032/122442179224365*n^3 + 25022234624/68023432902425*n^4 - 35317563392/152125131763605*n^5 + 591038611456/5771806469854425*n^6 - 506800255483904/462569061369761775*n^7 + 124425632874496/241947887425519275*n^8 - 98713540640768/2984023944914737725*n^9 + 205916220474097664/46317241231937450775*n^10 - 349988448862552064/60385793648910965235*n^11 - 3447444843814387712/1447710693890557756275*n^12 + 563260537104941056/62943943212632945925*n^13 - 15920738443405656064/2440426598272654503435*n^14 + 156734826902743629824/82905802001294401154025*n^15) * eps^14
        - (12032/12332601567 + 4599808/2158205274225*n + 170288193536/1836632688365475*n^2 - 290734034944/1836632688365475*n^3 + 267831984128/6845630929362225*n^4 - 1040046419968/3463083881912655*n^5 + 12144070811648/32706903329175075*n^6 - 12323923677184/395286288806887335*n^7 + 10271238256623616/11213647877205909135*n^8 - 45081806458482688/56068239386029545675*n^9 - 81270905450586112/594323337491913184155*n^10 - 26646047229472768/7301269502357655825*n^11 + 20005720522276225024/3321218650690103087925*n^12 + 47542518825522900992/36606398974089817551525*n^13 - 4201054759030906560512/492014820109376700311175*n^14) * eps^15
        + (218112/15986705735 - 290357248/5323573009755*n + 131006464/3802552149825*n^2 - 842694656/13344309803825*n^3 + 790763536384/3924828399501009*n^4 - 7426755887104/98120709987525225*n^5 + 75745991262208/354744105339514275*n^6 - 3377930257793024/7449626212129799775*n^7 + 4306377448357888/96845140757687397075*n^8 - 27137013481472/37825596510476775*n^9 + 2956012676751097856/2971616687459565920775*n^10 + 801788666804862976/5132792460157432044975*n^11 + 3289715296102045057024/1110394102214057799062925*n^12 - 31552966617464087478272/5210310787312117364833725*n^13) * eps^16
        + (294656/469127123465 + 25858048/13604686580485*n - 9844842496/152125131763605*n^2 + 175265755136/2180460221945005*n^3 - 2666742562816/58872425992515135*n^4 + 215614078521344/1064232316018542825*n^5 - 46888924340224/354744105339514275*n^6 + 28689645211648/201341248976481075*n^7 - 11152793875152896/23225305249581140475*n^8 + 650630500139831296/6273413006859083610525*n^9 - 30411772176709967872/56460717061731752494725*n^10 + 332517313573568196608/302834755149288490653525*n^11 + 6147866059759464267776/67734040235057525742838425*n^12) * eps^17
        + (13824/1375739365 - 59359232/1748564732915*n + 45142409216/2180460221945005*n^2 - 1079315316736/19624141997505045*n^3 + 13677762117632/120304522680357015*n^4 - 21487658647552/446290971233582475*n^5 + 107709256466432/601522613401785075*n^6 - 317939842858467328/1710930820052477348325*n^7 + 32625224557920256/330179631939951768975*n^8 - 8782461881349357568/18820239020577250831575*n^9 + 66561309202129190912/370131367404685933020975*n^10 - 9846754133827698688/24929716685703910836525*n^11) * eps^18
        + (27392/25638779075 + 8081408/2425428500495*n - 739467264/16345279025075*n^2 + 23711257718784/512408152157076175*n^3 - 4197953748992/94483064153841363*n^4 + 66534864318464/517888453249665225*n^5 - 113093248480108544/1710930820052477348325*n^6 + 8321651132554350592/56460717061731752494725*n^7 - 12728279499474894848/56460717061731752494725*n^8 + 30034408600463986688/370131367404685933020975*n^9 - 3791666672669202522112/8834874813268372922978925*n^10) * eps^19
        + (362496/47933369575 - 73990144/3307402500675*n + 24686231552/1709927092848975*n^2 - 5424909975552/123684726382742525*n^3 + 737167248982016/10760571195298599675*n^4 - 2806535039418368/68437232802099093933*n^5 + 141729549396082688/1107072883563367695975*n^6 - 2818897757929472/31142149510056123825*n^7 + 110767543318740992/937568901390986039175*n^8 - 1624194242334359552/6542455349662660653225*n^9) * eps^20
        + (179072/160900662195 + 5079242752/1399031257785525*n - 45133008896/1399031257785525*n^2 + 3194148988928/107725406849485425*n^3 - 300531459629056/7695341019726284925*n^4 + 4673381031931672576/56460717061731752494725*n^5 - 2564296548162482176/56460717061731752494725*n^6 + 3314224376139778048/27993128627245154598225*n^7 - 1369582736990797021184/11953065923833681013442075*n^8) * eps^21
        + (5634304/969529631175 - 104833024/6786707418225*n + 2751414272/251108174474325*n^2 - 23908622336/700459644586275*n^3 + 158037016576/3570635749232475*n^4 - 1796889271328768/49921058410019232975*n^5 + 7584413032870494208/85414930939542907620225*n^6 - 568203943290363904/10290278052624326592825*n^7) * eps^22
        + (14777984/14401062082575 + 2047571968/590443545385575*n - 105351344128/4470501129347925*n^2 + 87661905668096/4245485905837412775*n^3 - 15411476668416/471720656204156975*n^4 + 16965096326715392/306146705876497876775*n^5 - 189726703450447433728/5210310787312117364833725*n^6) * eps^23
        + (1524224/334908420525 - 8459829248/763256290376475*n + 2999519051776/344228586959790225*n^2 - 9129476276224/344228586959790225*n^3 + 22885325392510976/751451005333222061175*n^4 - 1421006686098669568/45838511325326545731675*n^5) * eps^24
        + (99522176/110050906984515 + 655403008/208717237384425*n - 4588589584384/260270395018377975*n^2 + 3208194018019328/209864695183152107175*n^3 - 4971722761576448/185532556611192442575*n^4) * eps^25
        + (356096/98232628725 - 49703919616/6052799884148325*n + 51891453952/7288065166627575*n^2 - 6483388995346432/312237717223714110675*n^3) * eps^26
        + (22625408/28910464058025 + 25774721024/9286683510194475*n - 4256878292992/315710533087678575*n^2) * eps^27
        + (98029568/33445438812225 - 650254352384/104048760144831975*n) * eps^28
        + 3108352/4619256832179 * eps^29;
C4[6] = + (512/585585 - 4096/1422135*n + 8192/2078505*n^2 - 4096/1322685*n^3 + 16384/10140585*n^4 - 4096/7243275*n^5 + 8192/65189475*n^6 - 28672/1890494775*n^7 + 32768/58605338025*n^8 + 4096/214886239425*n^9 + 8192/4512611027925*n^10 + 4096/15178782548475*n^11 + 16384/310080843490275*n^12 + 4096/325982425207725*n^13 + 57344/16565834153738025*n^14 + 4096/3822884804708775*n^15 + 65536/179675585821312425*n^16 + 69632/517888453249665225*n^17 + 8192/154457959741128225*n^18 + 77824/3508402228405626825*n^19 + 16384/1677931500541821525*n^20 + 4096/910877100294131685*n^21 + 8192/3799921640620973595*n^22 + 94208/87922324857126664905*n^23) * eps^6
        - (1024/3318315 - 16384/9006855*n + 98304/21015995*n^2 - 770048/111546435*n^3 + 65536/10140585*n^4 - 606208/152108775*n^5 + 1015808/630164925*n^6 - 114688/283117575*n^7 + 11665408/214886239425*n^8 - 1097728/501401225325*n^9 - 4489216/55655536011075*n^10 - 180224/21924908125575*n^11 - 38469632/29664400693902975*n^12 - 3751936/14017244283932175*n^13 - 12156928/182224175691118275*n^14 - 14925824/778594205225687175*n^15 - 262144/42531901957701975*n^16 - 6373376/2934701235081436275*n^17 - 42827776/51846388486438707525*n^18 - 30195712/90048990529077755175*n^19 - 11730944/81472896192975111825*n^20 - 1163264/17913916305784589805*n^21 - 360448/11786197631078613015*n^22) * eps^7
        - (103424/189143955 - 8192/4203199*n + 3260416/1450103655*n^2 + 253952/315239925*n^3 - 28082176/5019589575*n^4 + 103325696/13233463425*n^5 - 822099968/136745788725*n^6 + 1433600/505614681*n^7 - 401801216/501401225325*n^8 + 2190548992/18551845337025*n^9 - 73121792/14186705257725*n^10 - 547889152/2696763699445725*n^11 - 28002254848/1275569229837827925*n^12 - 1073225728/294362129962575675*n^13 - 20235665408/25693608772447676775*n^14 - 85799051264/419662276616645387325*n^15 - 2324824064/38151116056058671575*n^16 - 1049976832/51846388486438707525*n^17 - 838811648/114062054670165156555*n^18 - 1639800832/570310273350825782775*n^19 - 5253726208/4388909494917224502225*n^20 - 66113314816/125666122885078897482075*n^21) * eps^8
        - (1024/189143955 + 1654784/4350310965*n - 45842432/21751554825*n^2 + 31342592/7250518275*n^3 - 6135283712/1892385269775*n^4 - 10298703872/4512611027925*n^5 + 6553174016/902522205585*n^6 - 1929592832/265447707525*n^7 + 668086697984/166966608033225*n^8 - 913531224064/723521968143975*n^9 + 1061266948096/5234894240100525*n^10 - 3303047708672/347882517228498525*n^11 - 1519936274432/3826707689513483775*n^12 - 625052991488/13835020108241056725*n^13 - 340739325952/43413338960342626275*n^14 - 76600623104/43413338960342626275*n^15 - 31673898237952/66726301982046616584675*n^16 - 9749494448128/66726301982046616584675*n^17 - 85542404096/1710930820052477348325*n^18 - 27544600576/1477242708045309710505*n^19 - 138002181062656/18472920064106597929865025*n^20) * eps^9
        - (71168/870062193 - 36864/483367885*n - 8192/31387525*n^2 - 99487744/210265029975*n^3 + 206400176128/58663943363025*n^4 - 157536256/30474775773*n^5 + 1459478528/1504203675975*n^6 + 314377302016/55655536011075*n^7 - 124925476864/16078265958755*n^8 + 640587280384/128417319021225*n^9 - 9891103023104/5669196577057013*n^10 + 35120897650688/115960839076166175*n^11 - 129391717695488/8564536257482558925*n^12 - 838089404416/1257729100749186975*n^13 - 5874723561472/74058048814702127175*n^14 - 12759336988672/889684026427288221129*n^15 - 1516148424704/453920421646575623025*n^16 - 91688259584/98853780714143135681*n^17 - 128511000682496/437427979660083375388425*n^18 - 10085039747072/97740317799505809152725*n^19) * eps^10
        + (118784/7250518275 - 15269888/65254664475*n + 158990336/270340752825*n^2 - 1072234496/6518215929225*n^3 - 71041024/180504441117*n^4 - 3131899904/1676112667515*n^5 + 767602327552/144704393628795*n^6 - 7247836020736/2170565904431925*n^7 - 326399017091072/88993202081708925*n^8 + 35920955899904/4672414761310725*n^9 - 22026456501714944/3826707689513483775*n^10 + 36243071515820032/16350478309739430675*n^11 - 24770945246560256/59951753802377912475*n^12 + 17755041759232/813824712249473925*n^13 + 1642198110175232/1627470780049917477675*n^14 + 2782922322673664/22242100660682205528225*n^15 + 223455531237376/9532328854578088083525*n^16 + 100384158318592/17813809126428734744325*n^17 + 42957093661179904/26683106759265085898693925*n^18) * eps^11
        - (1445888/65254664475 + 7897088/630795089925*n + 2424832/197521694825*n^2 - 6604095488/11732788672605*n^3 + 14287765504/19554647787675*n^4 + 906395648/2630988975069*n^5 + 22769893376/42560115773175*n^6 - 4711849558016/1046978848020105*n^7 + 1066871483531264/225100452324322575*n^8 + 35504692166656/20463677484029325*n^9 - 76345812706066432/10579721259243161025*n^10 + 6068059858960384/961792841749378275*n^11 - 478285812169048064/179855261407133737425*n^12 + 11756726194307072/22219880779902303225*n^13 - 654323284159299584/22242100660682205528225*n^14 - 94770142918180864/66726301982046616584675*n^15 - 719292224190808064/3936851816940750378495825*n^16 - 499369150090805248/14126350637257986652249725*n^17) * eps^12
        + (1380352/90113584275 - 7386628096/58663943363025*n + 368705536/2022894598725*n^2 + 6750208/205838397765*n^3 + 18468306944/70018254981675*n^4 - 82814894080/86822636177277*n^5 + 2978608709632/29664400693902975*n^6 + 9194635264/44354768930901*n^7 + 764169233629184/225100452324322575*n^8 - 18918718461771776/3526573753081053675*n^9 - 3627328171802624/74058048814702127175*n^10 + 745621946343817216/114453348168176014725*n^11 - 21203780625144479744/3177442951526029361175*n^12 + 320789326680752128/104750866533825143775*n^13 - 6167729552277241856/9532328854578088083525*n^14 + 49486985870301790208/1312283938980250126165275*n^15 + 454620391029060141056/240147960833385773088245325*n^16) * eps^13
        - (846848/121457439675 + 2760704/270340752825*n + 3755098112/58663943363025*n^2 - 10839138304/38080103586525*n^3 + 47457796096/434113180886385*n^4 - 38041296896/1618058219667435*n^5 + 574179688448/662633366149521*n^6 - 16095472541696/28772238267018675*n^7 - 852568899584/1849925032215975*n^8 - 3031959594082304/1299264014293019775*n^9 + 199399103086592/36548518879726425*n^10 - 60421317679783936/45609228969273148725*n^11 - 6672117285593513984/1170636876878010817275*n^12 + 5045150093198467072/733256065736776006425*n^13 - 1924429501006250622976/562407402420107196927975*n^14 + 8739482245092077723648/11435617182542179670868825*n^15) * eps^14
        + (10240/857346633 - 1343488/18893379505*n + 49142628352/723521968143975*n^2 - 800620544/94372430627475*n^3 + 29913645056/120098788234425*n^4 - 14168250155008/51022769193513117*n^5 - 24690420416512/425189743279275975*n^6 - 16306272150519808/25693608772447676775*n^7 + 1053863745683456/1204772085980800155*n^8 + 2085142575153152/5097112671457231425*n^9 + 205141644672696320/140476425225361298073*n^10 - 18323705530956218368/3511910630634032451825*n^11 + 159481393476014047232/66726301982046616584675*n^12 + 489546767922423037952/100944918383096163551175*n^13 - 79622081860613047779328/11435617182542179670868825*n^14) * eps^15
        - (2717696/1303643185845 + 1836138496/434113180886385*n + 4381376512/74847100152825*n^2 - 1375220350976/9888133564634325*n^3 + 90641821007872/3826707689513483775*n^4 - 593210015105024/3826707689513483775*n^5 + 350306565259264/922334673882737115*n^6 + 159804932096/11168854890749325*n^7 + 488092323692281856/1258986829849936161975*n^8 - 23509815515070464/22953664252510016025*n^9 - 723446958058078208/3511910630634032451825*n^10 - 53863391092240203776/66726301982046616584675*n^11 + 6298552764167390298112/1312283938980250126165275*n^12 - 33340680555495243776/10478116882646964225675*n^13) * eps^16
        + (264192/29180156005 - 22183936/518653740605*n + 459997184/14869373781405*n^2 - 4054633644032/141729914426425325*n^3 + 35892774436864/225100452324322575*n^4 - 165276001992704/1976431444034436675*n^5 + 330119439908864/4611673369413685575*n^6 - 2591369816276992/6456342717179159805*n^7 + 3979077460688896/43870021026986598675*n^8 - 202257437979738112/1059147650508676453725*n^9 + 7722684046167310336/7414033553560735176075*n^10 - 60600652525666336768/1312283938980250126165275*n^11 + 4062175202748267102208/11435617182542179670868825*n^12) * eps^17
        - (29696/89423058725 + 86007808/113656707639475*n + 909564624896/20247130632346475*n^2 - 4874605256704/67135222623043575*n^3 + 8913665490944/446290971233582475*n^4 - 147497164496896/1064232316018542825*n^5 + 411105742077952/2767004021648211345*n^6 - 140225607434297344/5132792460157432044975*n^7 + 1872239470911094784/5132792460157432044975*n^8 - 18411038875648/89301676499424675*n^9 + 10877741177165627392/171167470301771755586775*n^10 - 10158457386319702188032/10441215688408077090793275*n^11) * eps^18
        + (135168/19606125175 - 390529024/14332077502925*n + 303955968/17771776103627*n^2 - 77308821504/2451713646684575*n^3 + 121867688738816/1257729100749186975*n^4 - 2378965909504/66196268460483525*n^5 + 173125825593344/1709221598454023325*n^6 - 14482771405635584/74388296524020754275*n^7 + 4249471492292608/190103424450275260925*n^8 - 529596339336839168/1770963480405195851775*n^9 + 27063289888053788672/89241159729983564878575*n^10) * eps^19
        + (8065024/25797739505265 + 352878592/386966092578975*n - 46464827392/1399031257785525*n^2 + 14703099904/355075769519835*n^3 - 198597506367488/8804103705244308825*n^4 + 1332322775498752/13331928467941381935*n^5 - 2265423354462208/34916955511275047925*n^6 + 49038258159517696/733256065736776006425*n^7 - 81549844466630656/379017215455930526475*n^8 + 1082408332765528064/24147607926936729320085*n^9) * eps^20
        + (45056/8468455905 - 242941952/13324107217005*n + 1904607232/171810856219275*n^2 - 12027756544/425792121934725*n^3 + 107565505839104/1787806499532369225*n^4 - 4677584484237312/190103424450275260925*n^5 + 64934853946507264/733256065736776006425*n^6 - 48138266780041216/508965975040820992695*n^7 + 6948561124651958272/155234622387450402771975*n^8) * eps^21
        + (14907904/28116359304075 + 12387831808/7675766090012475*n - 1394830041088/56800669066092315*n^2 + 129385368375296/5017392434171487825*n^3 - 339203576086528/15052177302514463475*n^4 + 352973598659203072/5132792460157432044975*n^5 - 19296744227725312/539812397770567719525*n^6 + 11106387256285720576/155234622387450402771975*n^7) * eps^22
        + (20016128/4800354027525 - 7508672512/590443545385575*n + 3266801139712/406815602770661175*n^2 - 4080124248064/173013532212809925*n^3 + 30916335173632/792219858027077025*n^4 - 206717405857660928/9768863069331886795275*n^5 + 420161316872027275264/6157640021368865976621675*n^6) * eps^23
        + (664576/1153573448475 + 43416952832/23660945001670725*n - 509581410304/27717107001957135*n^2 + 11525019836416/663751772941605075*n^3 - 189239766700490752/9176810762099651231925*n^4 + 3799119443637886976/79969350926868389306775*n^5) * eps^24
        + (24341504/7336727132301 - 1010843648/110050906984515*n + 21086830592/3380135000238675*n^2 - 15924466597888/829504724044079475*n^3 + 1205956028389326848/45388009985519896633575*n^4) * eps^25
        + (71266816/128782976258475 + 21557248/11798830183525*n - 333133422592/23807679544316745*n^2 + 125585723838464/10072184426571422925*n^3) * eps^26
        + (7036928/2628224005275 - 51925090304/7598195599250025*n + 110139925594112/21784026783049821675*n^2) * eps^27
        + (4612096/9121483312425 + 601554944/350332525740175*n) * eps^28
        + 139264/63626127165 * eps^29;
C4[7] = + (1024/1640925 - 65536/31177575*n + 131072/43648605*n^2 - 65536/25741485*n^3 + 262144/175510125*n^4 - 65536/105306075*n^5 + 131072/727113375*n^6 - 458752/13524308775*n^7 + 524288/148767396525*n^8 - 65536/578539875375*n^9 - 131072/38530755699975*n^10 - 65536/227681738227125*n^11 - 262144/6845630929362225*n^12 - 65536/9704246042722275*n^13 - 917504/630775992776947875*n^14 - 65536/179675585821312425*n^15 - 1048576/10158581198358817875*n^16 - 65536/2031716239671763575*n^17 - 131072/11964551189178163275*n^18 - 1245184/311708044139115306375*n^19 - 262144/169212938246948309175*n^20 - 65536/103349517148757248875*n^21 - 131072/481420841700211039305*n^22) * eps^7
        - (2048/10392525 - 262144/218243025*n + 16252928/5019589575*n^2 - 42729472/8365982625*n^3 + 30408704/5791834125*n^4 - 11272192/3053876175*n^5 + 283639808/157783602375*n^6 - 442236928/743836982625*n^7 + 652214272/5206858878375*n^8 - 306970624/21405975388875*n^9 + 251133952/500899824099675*n^10 + 151257088/9334951267312125*n^11 + 2152726528/1471810649812878375*n^12 + 23330816/113216203831759875*n^13 + 378011648/9882157220172183375*n^14 + 835452928/96845140757687397075*n^15 + 297795584/132061555578664632375*n^16 + 356777984/538404803513017347375*n^17 + 141033472/658050315404798980125*n^18 + 444858368/5922452838643190821125*n^19 + 1970274304/69884943495989651689275*n^20 + 1628176384/144999372559706420171625*n^21) * eps^8
        - (84992/218243025 - 2424832/1673196525*n + 5373952/2788660875*n^2 - 65536/760543875*n^3 - 7635992576/2183521465125*n^4 + 6166740992/1041371775675*n^5 - 347209728/64282208375*n^6 + 1813970944/578539875375*n^7 - 6911688704/5837993287875*n^8 + 25729630208/92759226685125*n^9 - 237436534784/6845630929362225*n^10 + 19432800256/14866774240534125*n^11 + 4423155712/98120709987525225*n^12 + 13752664064/3192696948055628475*n^13 + 84292272128/132061555578664632375*n^14 + 97583104/787358867948678025*n^15 + 82997936128/2851551366754128913875*n^16 + 202549035008/25663962300787160224875*n^17 + 525991936/219350105134932993375*n^18 + 8466399232/10588627802422674498375*n^19 + 136503885824/473664617028374305893975*n^20) * eps^9
        - (16384/1673196525 + 1048576/5019589575*n - 14680064/10756263375*n^2 + 137363456/42814146375*n^3 - 217512411136/67689165418875*n^4 - 208666624/644658718275*n^5 + 266338304/55987729875*n^6 - 237490929664/38530755699975*n^7 + 10820641619968/2504499120498375*n^8 - 3027063799808/1629912126038625*n^9 + 424329152036864/883086389887727025*n^10 - 235471372288/3616242382832625*n^11 + 8647887290368/3294052406724061125*n^12 + 1531605680128/15963484740278142375*n^13 + 14010378354688/1452677111365310956125*n^14 + 2557180116992/1710930820052477348325*n^15 + 5922357248/19605777158737326375*n^16 + 5662418403328/76991886902361480674625*n^17 + 2079991005184/100944918383096163551175*n^18 + 19640114741248/3044986823753834823604125*n^19) * eps^10
        - (323584/5019589575 - 262144/3011753745*n - 3670016/18348919875*n^2 - 92536832/2051186830875*n^3 + 48279584768/22563055139625*n^4 - 43778048/10342118475*n^5 + 118776922112/49107825892125*n^6 + 133187239936/49107825892125*n^7 - 369268621312/61012753381125*n^8 + 21431886020608/4122718907038875*n^9 - 131710776246272/51946258228689825*n^10 + 18575217393664/25808394680215875*n^11 - 3164393701376/30141656009239775*n^12 + 14365663428608/3192696948055628475*n^13 + 1212658841288704/6999262445669225515875*n^14 + 1834384359424/100642989414851608725*n^15 + 610225094656/207525301623615850875*n^16 + 164609601568768/267207136896431021164875*n^17 + 251045778817024/1620431584570754204374125*n^18) * eps^11
        + (8192/1003917915 - 1048576/6718527585*n + 6314524672/13537833083775*n^2 - 189792256/727840488375*n^3 - 28491907072/67689165418875*n^4 - 326575849472/500899824099675*n^5 + 180915011584/49107825892125*n^6 - 24383142756352/6040262584731375*n^7 - 145899963547648/259731291143449125*n^8 + 461865768452096/86577097047816375*n^9 - 14004622345633792/2441474136748421775*n^10 + 3512761381289984/1109760971249282625*n^11 - 5214964780367872/5321161580092714125*n^12 + 129418252933660672/846064691234741545875*n^13 - 41050864514760704/5922452838643190821125*n^14 - 1436339103858688/5132792460157432044975*n^15 - 12667925961900032/412956484294484305436625*n^16 - 83652980966948864/16299635350682292291057375*n^17) * eps^12
        - (937984/48522699225 + 35913728/13537833083775*n - 122159104/4512611027925*n^2 - 736362496/2051186830875*n^3 + 1751018110976/2504499120498375*n^4 + 52370341888/500899824099675*n^5 - 495914057728/1801481823516375*n^6 - 1636748754944/650955616900875*n^7 + 5727152242688/1242733450447125*n^8 - 91166448287744/71388132653462625*n^9 - 3851787754274816/899490471433629075*n^10 + 13822108124315648/2316869396116923375*n^11 - 717165187245801472/192962122562309475375*n^12 + 1293029046747136/1035574897472143875*n^13 - 207432010174038016/999894635095603645125*n^14 + 2995763339444092928/302834755149288490653525*n^15 + 939434993543806976/2252795129769097308520125*n^16) * eps^13
        + (606208/65400159825 - 13631488/148767396525*n + 216006656/1327238537625*n^2 + 13716422656/834833040166125*n^3 + 182775185408/2504499120498375*n^4 - 15302162120704/20536892788086675*n^5 + 86374671712256/210258664258982625*n^6 + 553624010752/1006022317028625*n^7 + 123755061837824/91784741983023375*n^8 - 54365938253824/12188217770103375*n^9 + 40612998252855296/15291338014371694275*n^10 + 380996869807931392/122794077994196938875*n^11 - 123568266508500992/20780536275941020425*n^12 + 706765068528779264/169212938246948309175*n^13 - 2440372655440789504/1610252154285475845375*n^14 + 41420770302229479424/155234622387450402771975*n^15) * eps^14
        - (1243136/180504441117 + 101318656/13537833083775*n + 72173748224/2504499120498375*n^2 - 26437353472/119261862880875*n^3 + 2168374951936/14669209134347625*n^4 + 72842321199104/883086389887727025*n^5 + 774414801829888/1471810649812878375*n^6 - 4627044041621504/5929294332103310025*n^7 - 992466414075904/2466344841027692625*n^8 - 11629158270631936/25485563357286157125*n^9 + 3172029662252761088/810440914761699796575*n^10 - 14495633009888854016/4052204573808498982875*n^11 - 49622588403021774848/25663962300787160224875*n^12 + 2005821013245790650368/349424717479948258446375*n^13 - 3394298700190297358336/746883560543393447299125*n^14) * eps^15
        + (782336/100280245065 - 5467799552/100179964819935*n + 160890355712/2504499120498375*n^2 + 273797349376/34228154646811125*n^3 + 75710926422016/490603549937626125*n^4 - 23330738929664/80280580898884275*n^5 - 29193338355712/483741961826610375*n^6 - 9256022006300672/37248131060648998875*n^7 + 14381676595511296/15620183993175386625*n^8 + 769074433359872/10470812852218343625*n^9 - 87967869218848768/810440914761699796575*n^10 - 246744717810779815936/76991886902361480674625*n^11 + 414848533771432493056/100944918383096163551175*n^12 + 3642053818971149828096/4262981553255368753045775*n^13) * eps^16
        - (24430592/9595782070875 + 1219100672/278277680055375*n + 105279913984/2933841826869525*n^2 - 175938815000576/1471810649812878375*n^3 + 5660664659968/191975302149505875*n^4 - 4267311104/74709183293685*n^5 + 162669271973888/483741961826610375*n^6 - 6997871323119616/111744393181946996625*n^7 + 9176096709804032/257497949506225687875*n^8 - 2742583007248384/3125558677479863625*n^9 + 184000164420386816/669494668716186788475*n^10 + 25825509353978724352/65833642423758367533375*n^11 + 474430975810962194432/191231056564250496168375*n^12) * eps^17
        + (16384/2645652625 - 4459593728/131142354968625*n + 683694620672/23362073806553625*n^2 - 4708587536384/490603549937626125*n^3 + 4981810735874048/41505060324723170175*n^4 - 4141263468101632/41505060324723170175*n^5 - 128620429312/61488978258849141*n^6 - 846813328864968704/2851551366754128913875*n^7 + 1788171473911808/8804103705244308825*n^8 + 1326028891881472/17711499172385893875*n^9 + 9596814579755646976/13166728484751673506675*n^10 - 750111204931779166208/1338617395949753473178625*n^11) * eps^18
        - (2904064/3461235175125 + 2958819328/1637164237834125*n + 4705547190272/152256274118573625*n^2 - 146247378010112/2231454856167912375*n^3 + 262034852675584/23058366847068427875*n^4 - 3520094671732736/41505060324723170175*n^5 + 192477728515555328/1222093442894626677375*n^6 + 197600147073138688/25663962300787160224875*n^7 + 16561239183333523456/76991886902361480674625*n^8 - 60789556653064192/195251292810630877275*n^9 - 4137720727496818688/43809296594719204576755*n^10) * eps^19
        + (34512896/7087291072875 - 9907994624/446499337591125*n + 3823108096/246887869020975*n^2 - 25192398061568/1517948914697294625*n^3 + 3534351694299136/44020518526221544125*n^4 - 204278900719616/5404835865381641325*n^5 + 18176218480246784/407364480964875559125*n^6 - 49000957506224128/268264414293942441375*n^7 + 632282024639463424/24291557899675547378625*n^8 - 46549976629564669952/362214118904050939801275*n^9) * eps^20
        - (2117632/16664711441625 + 26093551616/86939799590957625*n + 103808499187712/4260050179956923625*n^2 - 53918297227264/1420016726652307875*n^3 + 78919969518125056/6999262445669225515875*n^4 - 224942358339518464/3079675476094459226985*n^5 + 368415416516608/5142048146821711125*n^6 - 17484436828061696/931035320196623767125*n^7 + 410932027851051892736/2328519335811756041579625*n^8) * eps^21
        + (25772032/6694371262875 - 133717557248/8856653180783625*n + 1545601024/163766200744125*n^2 - 101307837841408/5789298962505562875*n^3 + 911117337493504/17367896887516688625*n^4 - 4578636945424384/236898113545727632845*n^5 + 373748610906456064/6851465048626436440125*n^6 - 5893247183635873792/59705623995173231835375*n^7) * eps^22
        + (383798272/2232164622799125 + 134230114304/274556248604292375*n - 1587412992/84540195648671*n^2 + 4215981839024128/179468267837672449125*n^3 - 6728033666596864/538404803513017347375*n^4 + 45351317263679488/822175805835172372815*n^5 - 14952491409948934144/417939367966212622847625*n^6) * eps^23
        + (31922176/10382161036275 - 756217020416/70982835005012175*n + 83513311232/12911695808365125*n^2 - 77487943712768/4850493725342498625*n^3 + 35707127975641088/1024705916363484628875*n^4 - 154170794895474688/11072679359104853904015*n^5) * eps^24
        + (95460352/330152720953545 + 15683878912/18158399652444975*n - 1152264568832/79674610719911625*n^2 + 16279305360441344/1049323475915760535875*n^3 - 7264491379390939136/576078588277752534195375*n^4) * eps^25
        + (319913984/128782976258475 - 140867796992/18158399652444975*n + 8628023066624/1785575965823755875*n^2 - 21496495314305024/1561188586118570553375*n^3) * eps^26
        + (89350144/275963520553875 + 38433980416/37990977996250125*n - 5437096198144/484089484067773815*n^2) * eps^27
        + (648134656/319251915934875 - 48446308352/8346157230868875*n) * eps^28
        + 13087612928/40785938165944125 * eps^29;
C4[8] = + (16384/35334585 - 131072/82447365*n + 262144/111546435*n^2 - 393216/185910725*n^3 + 524288/386122275*n^4 - 131072/203591745*n^5 + 262144/1168767425*n^6 - 917504/16529710725*n^7 + 1048576/115707975075*n^8 - 393216/475688341975*n^9 + 262144/11131107202215*n^10 + 131072/207443361495825*n^11 + 524288/10902301109725025*n^12 + 131072/22643240766351975*n^13 + 1835008/1976431444034436675*n^14 + 131072/717371413019906645*n^15 + 2097152/49889920996384416675*n^16 + 131072/11964551189178163275*n^17 + 786432/248596785819590725825*n^18 + 131072/131610063080959796025*n^19 + 524288/1552998744355325593095*n^20 + 131072/1074069426368195704975*n^21) * eps^8
        - (32768/247342095 - 524288/632096465*n + 1048576/451497475*n^2 - 19398656/5019589575*n^3 + 2097152/490128275*n^4 - 3670016/1101980715*n^5 + 646971392/347123925225*n^6 - 524288/701260455*n^7 + 297795584/1427065025925*n^8 - 100139008/2650263619575*n^9 + 573571072/152125131763605*n^10 - 345505792/2973354848106825*n^11 - 140509184/42051732851796525*n^12 - 31981568/118248035113171425*n^13 - 370147328/10760571195298599675*n^14 - 173539328/29933952597830650005*n^15 - 1652555776/1385039235280576901025*n^16 - 163053568/570310273350825782775*n^17 - 1048576/13559824681068585045*n^18 - 145227776/6285947298581079781575*n^19 - 236978176/31577641135224953726265*n^20) * eps^9
        - (327680/1137773637 - 2097152/1896289395*n + 4194304/2585849175*n^2 - 140509184/274961962275*n^3 - 746586112/347123925225*n^4 + 4011851776/902522205585*n^5 - 180355072/38569325025*n^6 + 593494016/186138916425*n^7 - 16492003328/11131107202215*n^8 + 824180736/1773020183725*n^9 - 1819459715072/19624141997505045*n^10 + 1029701632/102529477520925*n^11 - 510757175296/1537224456471228525*n^12 - 140509184/13821198909331725*n^13 - 1431352377344/1646367392880685750275*n^14 - 225198473216/1939054929392807661435*n^15 - 8623489024/421533680302784274225*n^16 - 2097152/478582047567126531*n^17 - 7159676928/6574956369780209886475*n^18 - 2451870580736/8052298489482363200197575*n^19) * eps^10
        - (32768/3160482325 + 524288/4491211725*n - 2245001216/2474657660475*n^2 + 1357381632/568254722035*n^3 - 222103076864/76714387474725*n^4 + 252182528/347123925225*n^5 + 3595567104/1236789689135*n^6 - 825139658752/166966608033225*n^7 + 2229746532352/526586994566325*n^8 - 24933922504704/10902301109725025*n^9 + 236428469469184/294362129962575675*n^10 - 220538009550848/1257729100749186975*n^11 + 1499084095488/73201164593868025*n^12 - 13072994926592/18091949372315228025*n^13 - 2040474989756416/87257471822676344764575*n^14 - 6790939410432/3231758215654679435725*n^15 - 25599422758912/87257471822676344764575*n^16 - 20380647424/379017215455930526475*n^17 - 10682977222656/894699832164707022244175*n^18) * eps^11
        - (4390912/85333022775 - 30932992/353522522925*n - 974127104/6974035224975*n^2 + 1518862336/10959198210675*n^3 + 7400849408/5901106728825*n^4 - 488389476352/149391175608675*n^5 + 25309478912/8787716212275*n^6 + 52781645824/72059272940655*n^7 - 66496793411584/15492743682240825*n^8 + 523779964928/108340864910775*n^9 - 2218114952462336/728158953065318775*n^10 + 110526137368576/92674775844676935*n^11 - 24551725073432576/86650915414772934225*n^12 + 1139122395152384/32115374244636122475*n^13 - 243837663444992/183699940679318620557*n^14 - 3944412899442688/87257471822676344764575*n^15 - 21872702478352384/5148190837537904341109925*n^16 - 79756985368576/129181259189556628880175*n^17) * eps^12
        + (3178496/824885886825 - 8159494144/76714387474725*n + 28228714496/76714387474725*n^2 - 7773618176/25571462491575*n^3 - 918323986432/2838432336564825*n^4 - 73427058688/2838432336564825*n^5 + 368816685056/157052261537325*n^6 - 72769601536/19245644325765*n^7 + 676461543424/534232540766925*n^8 + 9767632764928/3152203260023025*n^9 - 25415227305623552/5097112671457231425*n^10 + 135017417670656/36638864868825765*n^11 - 66304019129171968/41373860513360049675*n^12 + 145615781360041984/353269116690997347225*n^13 - 137176212422262784/2493070623505038421845*n^14 + 3729769993966452736/1716063612512634780369975*n^15 + 1058897908499218432/13653897438687485426421975*n^16) * eps^13
        - (425787392/25571462491575 - 312475648/76714387474725*n - 3149922304/76714387474725*n^2 - 266338304/1220831112501*n^3 + 133689245696/218340948966525*n^4 - 706671017984/6125038199955675*n^5 - 169910302932992/333610413957585765*n^6 - 42284273893376/37625234656870575*n^7 + 2678029734117376/728158953065318775*n^8 - 50720495632384/18670742386290225*n^9 - 147754295071080448/86650915414772934225*n^10 + 1991354095820079104/417499865180269592175*n^11 - 6383204028028813312/1530832838994321837975*n^12 + 13477708903179354112/6712113217128949597275*n^13 - 21544372591302541312/38708201785999280760225*n^14 + 8255721773950736269312/104679880363270721602568475*n^15) * eps^14
        + (17530880/3068575498989 - 148373504/2191839642135*n + 404992557056/2838432336564825*n^2 - 20048248832/2838432336564825*n^3 - 3228475326464/116375725799157825*n^4 - 5795679305728/10998145515085245*n^5 + 170148181835776/294362129962575675*n^6 + 465493530509312/1083849501567271725*n^7 + 208517906563072/1333091006381122065*n^8 - 260996618389028864/86650915414772934225*n^9 + 3267061749675720704/918499703396593102785*n^10 + 94463949577650176/270146971587233265525*n^11 - 374414914557426270208/87257471822676344764575*n^12 + 48107557630944739328/10703099454340757465925*n^13 - 107256596269866972872704/44862805869973166401100775*n^14) * eps^15
        - (2392064/370600905675 + 13398966272/2838432336564825*n + 969408512/113537293462593*n^2 - 65784774656/391837460603225*n^3 + 65613878788096/384935093027983575*n^4 + 491445762654208/5004156209363786475*n^5 + 167957703950336/670072198974638075*n^6 - 27991057629184/35524164265415595*n^7 - 274682871808/4774307409778725*n^8 + 31849951526912/81267337633079675*n^9 + 85896645649629184/39934769712895352295*n^10 - 14718170769933991936/3793803122725058468025*n^11 + 6913119271458439168/8290162379288090726425*n^12 + 93498692521370058752/25617068365267327254075*n^13) * eps^16
        + (18907136/3625073226775 - 4455923712/105127123576475*n + 2328359862272/38791908599719275*n^2 + 17735090176/1630549432832775*n^3 + 10321999691776/122052590472287475*n^4 - 1564119174479872/5736471752197511325*n^5 - 12271672623104/26132815760010884925*n^6 - 1687898088275968/548789130960228583425*n^7 + 85790295270096896/114963730991668438425*n^8 - 48612562263605248/140511226767594758075*n^9 - 144303099260960768/252920208181670564535*n^10 - 32925506590743199744/24870487137864272179275*n^11 + 5803202512319846285312/1517099715409720602935775*n^12) * eps^17
        - (2818048/1052440614225 + 2097152/556196266395*n + 34830175698944/1668052069787928825*n^2 - 817174151168/8136839364819165*n^3 + 9693923228254208/235195341840097964325*n^4 + 1509699878912/12378702202110419175*n^5 + 20629029027577856/78398447280032654775*n^6 - 1502359475323928576/9695274646964038307175*n^7 - 77656474062422016/646351643130935887145*n^8 - 15703217037901824/28102245353518951615*n^9 + 3216346923887755264/4974097427572854435855*n^10 + 151253870568701689856/303419943081944120587155*n^11) * eps^18
        + (5668864/1307577732825 - 35127296/1285830078225*n + 1102053376/39315814688475*n^2 - 557695107072/8710938586670294975*n^3 + 137507511468032/1606212090615303171*n^4 - 182280443123990528/1646367392880685750275*n^5 - 5069564455944192/190103424450275260925*n^6 - 1757120135666597888/9695274646964038307175*n^7 + 8143172317497786368/29085823940892114921525*n^8 + 4608940312331026432/38134746944725217341555*n^9 + 27362078865048469504/82750893567802941978315*n^10) * eps^19
        - (30605312/27952275991419 + 2339897344/1128841915038075*n + 158625682161664/7586946510970902075*n^2 - 2136205134659584/36585942064015238895*n^3 + 18482688723779584/1646367392880685750275*n^4 - 8057707396857856/183699940679318620557*n^5 + 1468225245085171712/9695274646964038307175*n^6 - 45659846177456128/12465353117525192109225*n^7 + 3630426979762700288/43262107878469784379075*n^8 - 46360400310384984064/136836444919308132813815*n^9) * eps^20
        + (199327744/56660018901525 - 1799016153088/98531772869751975*n + 10114609184768/689722410088263825*n^2 - 35751973093376/4828056870617846775*n^3 + 509942296483987456/7932497438425122251325*n^4 - 3839901122350809088/87257471822676344764575*n^5 + 820897336077058048/87257471822676344764575*n^6 - 6551724376476614656/43262107878469784379075*n^7 + 1594219615901188096/25479889743595307489469*n^8) * eps^21
        - (3604480/9407823081427 + 3482423656448/4045128729436574325*n + 2660096597295104/149669762989153250025*n^2 - 92190363168538624/2644165812808374083775*n^3 + 179628626935808/27639363896951645475*n^4 - 616136831697682432/12465353117525192109225*n^5 + 7747397749250719744/100944918383096163551175*n^6 + 3997177385754558464/2638988580586656847123575*n^7) * eps^22
        + (248348672/87234019741575 - 3932568420352/311163748418198025*n + 20285863493632/2355954095166356475*n^2 - 50564857069568/4960911468683628675*n^3 + 943092251230208/21041107263727114725*n^4 - 19962886927941632/1012825268057821038975*n^5 + 13369059142137806848/473664617028374305893975*n^6) * eps^23
        - (9158656/176496737616675 + 51089113088/402236065028402325*n + 2603006914985984/181408465327809448575*n^2 - 790244020584448/36281693065561889715*n^3 + 3890695479230464/568170272325119119425*n^4 - 77002004121387008/1824125611149066646575*n^5) * eps^24
        + (96272384/41574787083039 - 185838075904/20579519606104305*n + 2264108367872/402236065028402325*n^2 - 733824970391552/69954898394384035725*n^3 + 40925748722139136/1324318593741959848725*n^4) * eps^25
        + (223215616/2189310596394075 + 9760145408/34299199343507175*n - 64667779072/5668495129599225*n^2 + 297990161956864/20815847814914274045*n^3) * eps^26
        + (34930688/18397568036925 - 1867513856/281414651824075*n + 9746486657024/2420447420338869075*n^2) * eps^27
        + (80084992/472492835583615 + 407322492928/816625117500347925*n) * eps^28
        + 474546176/302118060488475 * eps^29;
C4[9] = + (32768/92147055 - 524288/423876453*n + 1048576/557732175*n^2 - 524288/295269975*n^3 + 2097152/1712565855*n^4 - 524288/816762177*n^5 + 1048576/4083810885*n^6 - 524288/6806351475*n^7 + 4194304/251835004575*n^8 - 524288/218257003965*n^9 + 1048576/5369122297539*n^10 - 524288/104941935815535*n^11 - 2097152/17315419409563275*n^12 - 524288/62601900942267225*n^13 - 1048576/1139354597149263495*n^14 - 524288/3873805630307495883*n^15 - 8388608/342186164010495469665*n^16 - 524288/100642989414851608725*n^17 - 1048576/833530399512745374825*n^18 - 524288/1552998744355325593095*n^19 - 2097152/21175594643621439557613*n^20) * eps^9
        - (65536/706460755 - 2097152/3532303775*n + 4194304/2445441075*n^2 - 2097152/703227525*n^3 + 310378496/88482569175*n^4 - 10485760/3539302767*n^5 + 4194304/2268783825*n^6 - 216006656/251835004575*n^7 + 16777216/57436053675*n^8 - 1050673152/14914228604275*n^9 + 20971520/1877010234099*n^10 - 2097152/2124330684525*n^11 + 2457862144/90424968027719325*n^12 + 2097152/2981042902012725*n^13 + 1665138688/32281713585895799025*n^14 + 10485760/1754800841079463947*n^15 + 33554432/36402783405371858475*n^16 + 2097152/12026520747686670225*n^17 + 8216641536/213105938808758567496925*n^18 + 1524629504/157888205676124768631325*n^19) * eps^10
        - (2326528/10596911325 - 82313216/95372201925*n + 221249536/162693756225*n^2 - 2214068224/3175541093725*n^3 - 5773459456/4512611027925*n^4 + 38273024/11541204675*n^5 - 1439694848/363761673275*n^6 + 30220484608/9821565178425*n^7 - 675505242112/402684172315425*n^8 + 416099598336/641311829983825*n^9 - 3008871006208/17315419409563275*n^10 + 2228015857664/73984064749952175*n^11 - 606058053632/210991592064678425*n^12 + 629970305024/7449626212129799775*n^13 + 11919585968128/5132792460157432044975*n^14 + 286785536/1597507768489708075*n^15 + 2127007055872/97523056742991208854525*n^16 + 1188855021568/338462373402145960142175*n^17 + 390595608576/565194011623229244230975*n^18) * eps^11
        - (131072/13624600275 + 180355072/2765793855825*n - 52856619008/85739609530575*n^2 + 153607995392/85739609530575*n^3 - 214295379968/85739609530575*n^4 + 9030336512/7259417740575*n^5 + 15695085568/9821565178425*n^6 - 1529423593472/402684172315425*n^7 + 6129622974464/1574129037233025*n^8 - 6244047781888/2473631344223325*n^9 + 901962769891328/813824712249473925*n^10 - 169940577419264/517888453249665225*n^11 + 5983846365396992/96845140757687397075*n^12 - 2497185367195648/394830189242879388075*n^13 + 1016145951850496/5132792460157432044975*n^14 + 79944201797632/13931865248998744122075*n^15 + 2678152291680256/5753860347836481322416975*n^16 + 1219100030271488/20646204777530903568672675*n^17) * eps^12
        - (38371328/921931285275 - 7124549632/85739609530575*n - 7777288192/85739609530575*n^2 + 5844238336/28579869843525*n^3 + 2206377967616/3172365552631275*n^4 - 7741853138944/3172365552631275*n^5 + 588422053888/207443361495825*n^6 - 1226503094272/2473631344223325*n^7 - 47695532130304/17315419409563275*n^8 + 1124341091139584/271274904083157975*n^9 - 18477597873668096/5696772985746317475*n^10 + 2032671912361984/1257729100749186975*n^11 - 901293789562273792/1710930820052477348325*n^12 + 42334411434754048/394830189242879388075*n^13 - 163252679692255232/13931865248998744122075*n^14 + 744321399983177728/1917953449278827107472325*n^15 + 4148491175365443584/350985481218025360667435475*n^16) * eps^13
        + (3997696/2598169985775 - 903872512/12248515647225*n + 1463812096/5043506442975*n^2 - 330303537152/1057455184210425*n^3 - 644840685568/3172365552631275*n^4 + 33686114271232/130066987657882275*n^5 + 364877893861376/266327641394711325*n^6 - 3230396317696/1025652020775525*n^7 + 250926233288704/116260673178496275*n^8 + 8017412096/6166319734575*n^9 - 375725184457375744/96845140757687397075*n^10 + 1749781404081717248/466617496377948367725*n^11 - 3629731902618861568/1710930820052477348325*n^12 + 812820766249713664/1071681942230672624775*n^13 - 136540391127453270016/821980049690925903202425*n^14 + 18969171985216569344/983152608453852550889175*n^15) * eps^14
        - (245137408/17147921906115 - 716701696/85739609530575*n - 136481603584/3172365552631275*n^2 - 391995981824/3172365552631275*n^3 + 66031785607168/130066987657882275*n^4 - 59127928193024/223715218771557513*n^5 - 115604364197888/243168716056040775*n^6 - 446272603947008/1632704236376273775*n^7 + 1557731995549696/601522613401785075*n^8 - 64333349912576/20742159082820175*n^9 + 1510914246311936/8926595582882490513*n^10 + 103393420971081728/31880698510294608975*n^11 - 17039762398700896256/4240132901869182993675*n^12 + 49758510742429499392/19243680093098599740525*n^13 - 2203163010064352018432/2180034044832455656319475*n^14) * eps^15
        + (11272192/3175541093725 - 160750895104/3172365552631275*n + 391966097408/3172365552631275*n^2 - 1484783616/52937316914075*n^3 - 1645274464256/22643240766351975*n^4 - 271039707742208/798982924184133975*n^5 + 1203213663469568/1947150978196889465*n^6 + 14046369685700608/80002507582437414975*n^7 - 2400351256838144/6154039044802878075*n^8 - 555325673439232/330614651217870019*n^9 + 150633156104421376/44632977914412452565*n^10 - 1199924118397386752/848026580373836598735*n^11 - 22180222633385132032/9265475600380807282475*n^12 + 681703202986871750656/167694926525573512024575*n^13) * eps^16
        - (645431296/109391915607975 + 2509766656/1057455184210425*n - 119882645504/43355662552627425*n^2 - 77087334989824/621431163254326425*n^3 + 989579437932544/5592880469288937825*n^4 + 18971230665703424/262865382056580077775*n^5 + 361546193567744/5841452934590668395*n^6 - 4303816224145408/6456342717179159805*n^7 + 24826556685746176/94225175597092955415*n^8 + 1074863049015296/1847552462688097165*n^9 + 74487682881814528/94225175597092955415*n^10 - 10560014891117707264/3335571216137090621691*n^11 + 8338801317940035584/3569646389199342595143*n^12) * eps^17
        + (12517376/3528771471225 - 16569597952/498340948880775*n + 34373491490816/621431163254326425*n^2 + 14185784147968/1864293489762979275*n^3 + 9593926155501568/262865382056580077775*n^4 - 433933481381199872/1840057674396060544425*n^5 + 8370378225221632/122670511626404036295*n^6 + 745576811380867072/6501537116199413923635*n^7 + 3198014784708542464/6501537116199413923635*n^8 - 18857274447495168/31408391865697651805*n^9 - 7451675099423309824/16677856080685453108455*n^10 - 21739933006661943296/203469844184362527923151*n^11) * eps^18
        - (1007255552/381428116298775 + 175928508416/60138499669773525*n + 2279485734912/207143721084775475*n^2 - 804978403311616/9735754890984447325*n^3 + 95773494987456512/1840057674396060544425*n^4 + 50744948926447616/1840057674396060544425*n^5 + 26469016886312960/144478602582209198303*n^6 - 307334446787854336/1413377633956394331225*n^7 - 1485100810906894336/10835895193665689872725*n^8 - 251158947597647872/1039541164920773499985*n^9 + 12178767189407432704/16148400332092264120885*n^10) * eps^19
        + (804651008/260339825410275 - 10372513792/468611685738495*n + 1906369888256/71256541625529975*n^2 + 788413234020352/204450852710673393825*n^3 + 602924036128768/10514615282263203111*n^4 - 2206517246069571584/19504611348598241770905*n^5 - 240955790435811328/10835895193665689872725*n^6 - 1142671088526819328/13931865248998744122075*n^7 + 194173652701282304/654666099423880000275*n^8 + 789891485725097984/16269664915311980747575*n^9) * eps^20
        - (2371059712/1963103007823425 + 6706906529792/3413836130604936075*n + 329029822447616/23896852914234552525*n^2 - 94227876046962688/1840057674396060544425*n^3 + 1433188842334060544/97523056742991208854525*n^4 - 137127157376221184/8865732431181018986775*n^5 + 1854149531196719104/13931865248998744122075*n^6 - 7709842757648384/231348170473100451225*n^7 - 12929216601344966656/2949457825361557652667525*n^8) * eps^21
        + (6121127936/2365790804300025 - 9780355661824/645860889573906825*n + 337309337649152/23896852914234552525*n^2 - 6056167547600896/2955244143727006328925*n^3 + 254426069598208/5127664795362069975*n^4 - 4848317375375736832/97523056742991208854525*n^5 - 29396030701174784/3639380359162859786475*n^6 - 326650603128022368256/2949457825361557652667525*n^7) * eps^22
        - (1494646784/2827408522212225 + 371029704704/347771248232103675*n + 180777085042688/14094964119524672475*n^2 - 1032434305585381376/32507685580997069618175*n^3 + 533652355533504512/97523056742991208854525*n^4 - 1457447658973560832/48351767628877994306025*n^5 + 528841186136871141376/6882068259176967856224225*n^6) * eps^23
        + (13631488/6363259989975 - 165322686464/15501998449370475*n + 1654857408708608/202750637719316442525*n^2 - 1083196489859072/202750637719316442525*n^3 + 16533872472953454592/442604642141267794032075*n^4 - 11374232737209647104/509412890011647838414275*n^5) * eps^24
        - (133758976/696989077568595 + 3012558848/6764893988165775*n + 10799600893952/989027501069836305*n^2 - 5380229842337792/265828613898659335755*n^3 + 2984159999753715712/729699545151819876647475*n^4) * eps^25
        + (482213888/271875172101225 - 32879149056/4259377696252525*n + 11694399029248/2261729556710090775*n^2 - 13001758565466112/1977505542416856034275*n^3) * eps^26
        - (92864512/4311163443319425 + 13999538176/254358643155846075*n + 6558828537577472/729246229927810697025*n^2) * eps^27
        + (7357595648/4987424375604825 - 82988498944/14487280329137825*n) * eps^28
        + 1104084992/17220729447843075 * eps^29;
C4[10] = + (131072/468495027 - 1048576/1064761425*n + 2097152/1368978975*n^2 - 1048576/696498075*n^3 + 4194304/3810254175*n^4 - 1048576/1676511837*n^5 + 2097152/7522809525*n^6 - 1048576/10844569575*n^7 + 8388608/328951943775*n^8 - 1048576/214079836425*n^9 + 2097152/3313955867859*n^10 - 11534336/248546690089425*n^11 + 4194304/3893898144734325*n^12 + 1048576/44031002098149675*n^13 + 2097152/1390121637670154025*n^14 + 1048576/6876468367675028577*n^15 + 16777216/810440914761699796575*n^16 + 1048576/301928968244554826175*n^17 + 2097152/3058936920699883743975*n^18 + 1048576/6799013641555612046325*n^19) * eps^10
        - (262144/3904125225 - 4194304/9582852825*n + 360710144/277902731925*n^2 - 960495616/410237366175*n^3 + 687865856/237505843575*n^4 - 255852544/97796523825*n^5 + 6450839552/3618471381525*n^6 - 205520896/221539064175*n^7 + 14864613376/40461089084325*n^8 - 7000293376/64438030763925*n^9 + 5729419264/248546690089425*n^10 - 37971034112/11681694434202975*n^11 + 1694498816/6579345141102825*n^12 - 532676608/83169670629838275*n^13 - 8388608/55688924260406775*n^14 - 19079888896/1891028801110632858675*n^15 - 115628572672/107788641663306072944475*n^16 - 281018368/1842807840665041525275*n^17 - 54769221632/2052546673789621992207225*n^18) * eps^11
        - (262144/1527701175 - 2097152/3053876175*n + 9844031488/8614984689675*n^2 - 24006098944/31588277195475*n^3 - 67436019712/94764831586425*n^4 + 41307602944/16776549132525*n^5 - 4194304/1270084725*n^6 + 14032044032/4890900878325*n^7 - 4864671219712/2734013590983675*n^8 + 15122563072/18707815383075*n^9 - 21874415239168/81771861039420825*n^10 + 35727997927424/572403027275945775*n^11 - 55423533056/5802535160221275*n^12 + 148618870784/182819967237017775*n^13 - 1342592516096/62341608827823061275*n^14 - 2750890901504/5132792460157432044975*n^15 - 21836318375936/578139078012278027611275*n^16 - 212753973248/50597537673958335271575*n^17) * eps^12
        - (262144/30878081325 + 306184192/8614984689675*n - 13480493056/31588277195475*n^2 + 42828038144/31588277195475*n^3 - 255500222464/120906854093025*n^4 + 5103004155904/3506298768697725*n^5 + 1764870848512/2522074552922925*n^6 - 2563134980096/911337863661225*n^7 + 65528014045184/19138095136885725*n^8 - 258819959554048/99943385714847675*n^9 + 775812835966976/572403027275945775*n^10 - 180518863765504/360401906062632525*n^11 + 21996665896435712/171911709191875714425*n^12 - 9225991050231808/436391261794761428925*n^13 + 29608309069709312/15398377380472296134925*n^14 - 114470959603253248/2119843286045019434574675*n^15 - 61008813821526016/43103480149582061836351725*n^16) * eps^13
        - (10878976/319073507025 - 558891008/7289602429725*n - 1700790272/31588277195475*n^2 + 22818062336/106251477839325*n^3 + 174269136896/500899824099675*n^4 - 53224669184/29906022366675*n^5 + 20868585488384/8144406757857825*n^6 - 61644734464/51815196261675*n^7 - 5434802962432/3555298306061775*n^8 + 14461527130112/4345364596297725*n^9 - 476807490961408/150125338149511725*n^10 + 4796701484253184/2491474046259068325*n^11 - 5015812205182976/6324511040503788825*n^12 + 1694502243794944/7670151687419488575*n^13 - 570392634720256/14538161742456761325*n^14 + 21341862944190758912/5622193062988964587350225*n^15) * eps^14
        + (524288/1858133952675 - 4924112896/94764831586425*n + 804786274304/3506298768697725*n^2 - 351306514432/1168766256232575*n^3 - 13920760758272/143758249516606725*n^4 + 88386392031232/247264189168563567*n^5 + 62856661827584/89588474336436075*n^6 - 4404285865459712/1804567840205355225*n^7 + 1625213007560704/664840783233551925*n^8 + 4974444544/549909663551325*n^9 - 650529587855360/240639932272827087*n^10 + 852519184033120256/246655930579647764175*n^11 - 3820296696273829888/1562154227004435839775*n^12 + 23851902951906869248/21269330629214241818475*n^13 - 22104299820019613696/65121927370528547343825*n^14) * eps^15
        - (1164443648/94764831586425 - 5465178112/500899824099675*n - 138923737088/3506298768697725*n^2 - 981144174592/15973138835178525*n^3 + 7859572047872/19378071251454825*n^4 - 711065948127232/2060534909738029725*n^5 - 944472426807296/2767004021648211345*n^6 + 8403040600064/45934454114318133*n^7 + 823118570455040/505278995257499463*n^8 - 68153245696/23584672156045*n^9 + 9360719917088768/7047312302275650405*n^10 + 330730366828544000/187458507240532300773*n^11 - 63248384131625648128/18433419878652342909345*n^12 + 35425062558380326912/12356468270305416675495*n^13) * eps^16
        + (6815744/3100175745975 - 134544883712/3506298768697725*n + 391362117632/3686108961964275*n^2 - 1431121690624/32706903329175075*n^3 - 403223609344/4722387111699075*n^4 - 18764645921718272/96845140757687397075*n^5 + 78114179466133504/135583197060762355905*n^6 - 8136706490368/128840542027965495*n^7 - 56016360077000704/104143615133629055985*n^8 - 1141393774870528/1653073256089350095*n^9 + 1292681288351744/479924493703359705*n^10 - 276681095183859712/121539032166938524677*n^11 - 161296335454236311552/224887722519558583494009*n^12) * eps^17
        - (602537984/113106411893475 + 649068544/1228702987321425*n - 111067267072/12798353476633725*n^2 - 8775330168832/98120709987525225*n^3 + 7115549582557184/41505060324723170175*n^4 + 3469524564180992/107039366100601859925*n^5 - 2252269552664576/45194399020254118635*n^6 - 56513104184344576/114062054670165156555*n^7 + 1109330446304411648/2395303148073468287655*n^8 + 22222807760896/49805650470410835*n^9 - 36414339734831104/877781898983444900445*n^10 - 22778537759673942016/10708939167598027785429*n^11) * eps^18
        + (2883584/1180892000925 - 749643759616/28486657738313775*n + 2341788975104/46478231046722475*n^2 + 2676389576704/1257729100749186975*n^3 + 3670594293858304/677915985303811779525*n^4 - 35364246288072704/184886177810130485325*n^5 + 11426772662878208/93323499275589673545*n^6 + 315463962248347648/2199768197210328019275*n^7 + 117185833223585792/466617496377948367725*n^8 - 1011849117514596352/1519600921896071279265*n^9 - 142458605834042605568/1124438612597792917470045*n^10) * eps^19
        - (5780537344/2293730882825265 + 11108614144/5352038726592285*n + 21118836539392/4611673369413685575*n^2 - 45338866405605376/677915985303811779525*n^3 + 24220595910606848/406749591182287067715*n^4 + 13456242259263488/378205760222126571735*n^5 + 3987380822507257856/35929547221102024314825*n^6 - 3711602295908073472/15398377380472296134925*n^7 - 1052474648635113472/12899654884655290676925*n^8 - 291969534449942528/29143664739406397455275*n^9) * eps^20
        + (230948864/103321210938075 - 749090111488/41463596727995175*n + 14228899495936/561964066292189925*n^2 + 3116570150699008/677915985303811779525*n^3 + 3800113671217086464/107788641663306072944475*n^4 - 11642532714023747584/107788641663306072944475*n^5 - 4973179734851584/1159017652293613687575*n^6 - 23012225673330688/2137657095171448169319*n^7 + 241570468447970656256/912779579638208368299213*n^8) * eps^21
        - (462553088/373545916468425 + 52551483392/31036793320485225*n + 5880600854528/677238746557254525*n^2 - 144514017752252416/3266322474645638574075*n^3 + 2057594272357548032/107788641663306072944475*n^4 + 22438675829751808/9798967423936915722225*n^5 + 1223011637475147776/11336060353181922110025*n^6 - 69134393521856315392/1086642356712152819403825*n^7) * eps^22
        + (287309824/148810974853275 - 40835743744/3230073512991675*n + 171677157687296/12611283685890496425*n^2 + 4062868639055872/5132792460157432044975*n^3 + 3966011997937467392/107788641663306072944475*n^4 - 25918257887241568256/489194604471927561824925*n^5 - 239035500430102626304/18472920064106597929865025*n^6) * eps^23
        - (2097152/3460720345425 + 3338665984/3086210217609225*n + 291547312553984/32013258587260490925*n^2 - 3969582603698176/138724120544795460675*n^3 + 5811037897687564288/908504265447865471960575*n^4 - 314980684348453289984/20417437965591502975113975*n^5) * eps^24
        + (299892736/183418178307525 - 5670699008/626151712153275*n + 1229233061888/156162237011026785*n^2 - 25599716360192/11447165191808296755*n^3 + 388102326440689664/12801746406172278537675*n^4) * eps^25
        - (1325662208/4764970121563575 + 131707437056/223953595713488025*n + 6957566001152/843399711516752775*n^2 - 648601731057319936/34658386611832266284925*n^3) * eps^26
        + (729284608/529441124618175 - 622359216128/93711079057416975*n + 1318364018376704/268669663657614467325*n^2) * eps^27
        - (1705508864/16537249245426525 + 4212251426816/17149127467507306425*n) * eps^28
        + 7370964992/6344479270257975 * eps^29;
C4[11] = + (262144/1166167275 - 8388608/10495505475*n + 16777216/13233463425*n^2 - 8388608/6511704225*n^3 + 33554432/33929406225*n^4 - 8388608/13970931975*n^5 + 16777216/57436053675*n^6 - 8388608/73846354725*n^7 + 67108864/1926718527825*n^8 - 25165824/3068477655425*n^9 + 16777216/11835556670925*n^10 - 92274688/556271163533475*n^11 + 33554432/3028587445904475*n^12 - 8388608/35644144555644975*n^13 - 16777216/3508402228405626825*n^14 - 8388608/30016330176359251725*n^15 - 134217728/5132792460157432044975*n^16 - 8388608/2544829875204104963475*n^17 - 50331648/97740317799505809152725*n^18) * eps^11
        - (524288/10495505475 - 33554432/101456552925*n + 3154116608/3145153140675*n^2 - 8422162432/4512611027925*n^3 + 402653184/167133741775*n^4 - 2248146944/976412912475*n^5 + 67108864/39763421775*n^6 - 33554432/34801155675*n^7 + 130728067072/303779287887075*n^8 - 12314476544/82848896696475*n^9 + 50398756864/1297966048244775*n^10 - 66806874112/9085762337713425*n^11 + 432315301888/463373879223384675*n^12 - 14059307008/209904406827687075*n^13 + 6509559808/4288047168051321675*n^14 + 167872823296/5132792460157432044975*n^15 + 203474075648/100944918383096163551175*n^16 + 71705821184/362214118904050939801275*n^17) * eps^12
        - (13893632/101456552925 - 209715200/377418376881*n + 100143202304/103790053642275*n^2 - 847249408/1116022082175*n^3 - 56807653376/166966608033225*n^4 + 303692775424/166966608033225*n^5 - 327877132288/120098788234425*n^6 + 340233551872/130191123380175*n^7 - 1644771147776/911337863661225*n^8 + 13324355895296/14277626530692525*n^9 - 9906258182144/27257287013140275*n^10 + 6952620916736/66196268460483525*n^11 - 177590824337408/8186271866279795925*n^12 + 61708773097472/20780536275941020425*n^13 - 167166217289728/733256065736776006425*n^14 + 553770928832512/100944918383096163551175*n^15 + 2304156941418496/18472920064106597929865025*n^16) * eps^13
        - (23068672/3145153140675 + 268435456/14827150520325*n - 1073741824/3578967366975*n^2 + 120527519744/116370666204975*n^3 - 6792490778624/3840231984764175*n^4 + 930665725952/622330084487475*n^5 + 7516192768/74958525582525*n^6 - 268435456/133949591325*n^7 + 4294967296/1475520327675*n^8 - 36025917243392/14277626530692525*n^9 + 7782640727883776/5097112671457231425*n^10 - 969285803442176/1444636211696434575*n^11 + 19262771556253696/90048990529077755175*n^12 - 2707075742302208/56404312748982769725*n^13 + 676791282827264/95924851171773357825*n^14 - 507232968603860992/879662860195552282374525*n^15) * eps^14
        - (195559424/6919336909485 - 7230980096/103790053642275*n - 3590324224/132421792578075*n^2 + 768782368768/3840231984764175*n^3 + 15233712128/112867033243965*n^4 - 751199846400/590006883585119*n^5 + 129850383794176/58872425992515135*n^6 - 40231411646464/26352419253792489*n^7 - 341315682304/557976209245455*n^8 + 8519923269632/3386785828210785*n^9 - 10523692446515200/3601959621163110207*n^10 + 599531481726976/285869811203421445*n^11 - 62880043025563648/60385793648910965235*n^12 + 189132496728752128/517666248118441864365*n^13 - 5202387650333376512/58644190679703485491635*n^14) * eps^15
        - (1048576/2661283426725 + 10938744832/295402460366475*n - 19998441472/109720913850405*n^2 + 14616780341248/52483170458443725*n^3 + 278904438784/19854337211552025*n^4 - 2439370095198208/6770328989139240525*n^5 - 1901239885365248/7071232499767651215*n^6 + 13414323716096/7492854217229199*n^7 - 46041636559388672/19369028151537479415*n^8 + 1655979603132416/2001088678423950115*n^9 + 88115990755278848/54029394317446653105*n^10 - 3016160029834215424/1026558492031486408995*n^11 + 440601082733789184/172555416039480621455*n^12 - 408103109306259341312/284198770217024583536385*n^13) * eps^16
        - (447217664/42200351480925 - 15720251392/1280077328254725*n - 1793585053696/52483170458443725*n^2 - 48544689946624/2256776329713080175*n^3 + 193959179583488/615484453558112775*n^4 - 17041511862501376/45457923212792043525*n^5 - 1340168745254912/7071232499767651215*n^6 + 1915907735552/5005422944521545*n^7 + 1984009542303744/2236510875885591305*n^8 - 91383922335678464/38020684890055052185*n^9 + 217388623232761856/114062054670165156555*n^10 + 1205183727169175552/2243220408513248078915*n^11 - 1073322175445659025408/410509334757924398441445*n^12) * eps^17
        + (165675008/123878451121425 - 4622190116864/157449511375331175*n + 614939458797568/6770328989139240525*n^2 - 11825387143168/218397709327072275*n^3 - 5151446051848192/63641092497908860935*n^4 - 4826842355728384/54327761888458783725*n^5 + 121985894142967808/247493137491867792525*n^6 - 9299663088083009536/39351408861206979011475*n^7 - 3754773200299360256/7870281772241395802295*n^8 - 315887059992576/5431526412865007455*n^9 + 38068651355990392832/20188983676619232710235*n^10 - 3051858507355257831424/1231528004273773195324335*n^11) * eps^18
        - (68442914816/14313591943211925 - 84196458496/98120709987525225*n - 25683753435136/2256776329713080175*n^2 - 604695332651008/9642589772410433475*n^3 + 353014314325508096/2227438237426810132725*n^4 - 80709003771904/11911434424742300175*n^5 - 124062850418212864/1192466935188090273075*n^6 - 1194565469995008/3677358084403978975*n^7 + 7413082615709696/13706516496414830725*n^8 + 360655275281088512/1779105841234645028105*n^9 - 6125829954174189568/14155494301997393049705*n^10) * eps^19
        + (1985478656/1172351340110691 - 369199415296/17585270101660365*n + 2067731675348992/45457923212792043525*n^2 - 2675726071365632/742479412475603377575*n^3 - 135473603280896/10264692338372396925*n^4 - 3462210456242880512/23610845316724187406885*n^5 + 40055605280374784/257198750726843000075*n^6 + 2039759270643236864/16864889511945848147775*n^7 + 935494308843225088/14128193445098651693775*n^8 - 72049578521657344/120450007009226799905*n^9) * eps^20
        - (61731504128/26140266367332975 + 5430390554624/4132538473890185775*n + 2777619103744/5785553863446260085*n^2 - 39529633695137792/742479412475603377575*n^3 + 85969920990380032/1356945133145068241775*n^4 + 1267388178910674944/39351408861206979011475*n^5 + 178954570188193792/3372977902389169629555*n^6 - 4539444203519737856/19510362376564804719975*n^7 - 13768334851964928/4265706469428147268525*n^8) * eps^21
        + (51497664512/31502372288837175 - 11603927891968/781831603168413525*n + 687018673700864/28927769317231300425*n^2 + 451808010960896/123358648467733476525*n^3 + 315883222439297024/16864889511945848147775*n^4 - 11534590875170504704/118054226583620937034425*n^5 + 39818830423294738432/2321733122811211761677025*n^6 + 9511520652935299072/296081645626795646262645*n^7) * eps^22
        - (15328083968/12549725545959525 + 575324291072/420986247859914975*n + 1473387591368704/290059524775481417775*n^2 - 1484013735931543552/39351408861206979011475*n^3 + 2722552774796509184/118054226583620937034425*n^4 + 2014794043929657344/169882911425210616708075*n^5 + 1634232174940323315712/20232245784497702494614075*n^6) * eps^23
        + (348127232/238789703834325 - 213943058432/20155619816238025*n + 213938226593792/16362332166822028695*n^2 + 6461637905088512/3190654772530295595525*n^3 + 60410836325136072704/2321733122811211761677025*n^4 - 7569155107689462759424/141625720491483917462298525*n^5) * eps^24
        - (20004732928/31217773947940755 + 5140337655808/5150932701410224575*n + 1398502957514752/221490106160639656725*n^2 - 137966723012755456/5411965321238255854725*n^3 + 692499587030337978368/84975432294890350477379115*n^4) * eps^25
        + (5125439488/4059048622072675 - 4424890056704/572325855712247175*n + 51535312584704/6753445097404516665*n^2 - 10447444596752384/29523810817486745353825*n^3) * eps^26
        - (573046784/1739592266602575 + 2801795072/4462432336067475*n + 1814487552229376/294257250672625368975*n^2) * eps^27
        + (70254592/64918370480425 - 5136982212608/894398938214666775*n) * eps^28
        - 133782044672/854691993121895775 * eps^29;
C4[12] = + (2097152/11408158125 - 16777216/25448968125*n + 33554432/31556720475*n^2 - 16777216/15092344575*n^3 + 67108864/75461722875*n^4 - 16777216/29390355225*n^5 + 33554432/112374887625*n^6 - 16777216/131639154075*n^7 + 134217728/3047952721275*n^8 - 16777216/1385433055125*n^9 + 33554432/13023070718175*n^10 - 184549376/455807475136125*n^11 + 67108864/1549745415462825*n^12 - 218103808/82136507019529725*n^13 + 33554432/645358269439162125*n^14 + 16777216/17166529967081712525*n^15 + 268435456/5064126340289105194875*n^16 + 16777216/3634255373619240198675*n^17) * eps^12
        - (4194304/110278861875 - 67108864/262972670625*n + 134217728/170158786875*n^2 - 872415232/578539875375*n^3 + 268435456/132956368875*n^4 - 4898947072/2419805913525*n^5 + 41204842496/26108432224875*n^6 - 9193914368/9434139375375*n^7 + 31675383808/66038975627625*n^8 - 1543503872/8232975741375*n^9 + 1744830464/30387165009075*n^10 - 738197504/54955511186625*n^11 + 314337918976/136894178365882875*n^12 - 398693761024/1505835962024711625*n^13 + 71001178112/4087269039781360125*n^14 - 7180648448/19859318981525902725*n^15 - 13958643712/1942840923003996332625*n^16) * eps^13
        - (67108864/603290244375 - 3959422976/8678098130625*n + 7113539584/8678098130625*n^2 - 4093640704/5633151418125*n^3 - 27111981056/278277680055375*n^4 + 132405788672/99212042454525*n^5 - 47840969621504/21330589127722875*n^6 + 12952010752/5530357564875*n^7 - 5504537460736/3103831854498375*n^8 + 3169350320128/3103831854498375*n^9 - 858590806016/1894133285565675*n^10 + 2349682655232/15210464262875875*n^11 - 322390982656/8139653848782225*n^12 + 41969279565824/5722176655693904175*n^13 - 218880525991936/241148873347100247375*n^14 + 1306280681537536/20594113783842361125825*n^15) * eps^14
        - (54525952/8678098130625 + 67108864/8678098130625*n - 9797894144/45869947261875*n^2 + 3333095948288/4174165200830625*n^3 - 204279382016/138575524885875*n^4 + 424884404486144/294362129962575675*n^5 - 18405142822912/63991767383168625*n^6 - 20177018159104/14815827916300125*n^7 + 533664182042624/221613594411183975*n^8 - 201738439098368/85235997850455375*n^9 + 2721633399734272/1677931500541821525*n^10 - 3710043685912576/4517507886074134875*n^11 + 621105152786432/1996108135707175875*n^12 - 441490659916906496/5064126340289105194875*n^13 + 768849625137283072/44130243822519345269625*n^14) * eps^15
        - (29360128/1239728304375 - 20166213632/321089630833125*n - 34158411776/4174165200830625*n^2 + 20367540224/115713842619375*n^3 + 145894670336/19624141997505045*n^4 - 48704828473344/54511505548625125*n^5 + 14158386065047552/7686122282356142625*n^6 - 675825217175552/412809636648283875*n^7 + 270735679422464/7017763823020825875*n^8 + 19077338759168/10714760539858375*n^9 - 117763506962432/46060864720755885*n^10 + 795676952773001216/371941482620103771375*n^11 - 3778958784987136/3041517321494958075*n^12 + 3591058194887081984/6864704594614120375275*n^13) * eps^16
        - (4194304/5633151418125 + 111199387648/4174165200830625*n - 1310099243008/9007409117581875*n^2 + 9516238241792/37738734610586625*n^3 - 335643372683264/7359053249064391875*n^4 - 22046090417143808/69175100541205283625*n^5 - 136217706364928/38430611411780713125*n^6 + 201471972012457984/161408567929478995125*n^7 - 791337814187835392/371941482620103771375*n^8 + 53952165240111104/41326831402233752375*n^9 + 4257445253742592/5722176655693904175*n^10 - 1374618086908362752/593095877691516824625*n^11 + 1102596198475294048256/446205798649917824392875*n^12) * eps^17
        - (38319161344/4174165200830625 - 733969645568/57046924411351875*n - 201192374272/7110196375907625*n^2 + 77779173376/22783446591530625*n^3 + 1923744574472192/8043616342000614375*n^4 - 5134140219326464/13835020108241056725*n^5 - 73618021154816/1325193496957955625*n^6 + 12436689368645632/28920399257141266875*n^7 + 11914712262377472/32776452491426769125*n^8 - 2836087701504/1540608812758015*n^9 + 6146994640781312/2967484445515364775*n^10 - 1130662023437221888/3077281369999433271675*n^11) * eps^18
        + (809500672/1037216807479125 - 33355856871424/1471810649812878375*n + 65364033536/843057996226875*n^2 - 364693793275904/6067991275544323125*n^3 - 165619962893828096/2421128518942184926875*n^4 - 449830111412224/25485563357286157125*n^5 + 5641720934655066112/14257756833770644569375*n^6 - 499918004516028416/1474940362114204610625*n^7 - 486984838402801664/1474940362114204610625*n^8 + 786107394424832/2750797577516613625*n^9 + 10606783160177917952/9231844109998299815025*n^10) * eps^19
        - (10592714752/2473631344223325 - 2744769314816/1471810649812878375*n - 145531712045056/11926741472621600625*n^2 - 62140576694272/1464687549269319375*n^3 + 12704342603726848/89671426627488330625*n^4 - 7144092454617088/182013917026859292375*n^5 - 1709258891583291392/14257756833770644569375*n^6 - 35423917799636992/197111845628165593125*n^7 + 87349623902961664/165126150597225943125*n^8 - 7274724790894592/223837670809572945125*n^9) * eps^20
        + (117440512/99695905291125 - 166726067027968/9882157220172183375*n + 43686796722176/1070821989801939375*n^2 - 163178960912384/18768438131334766875*n^3 - 174335826732253184/7548224206113870654375*n^4 - 2725675759334064128/25663962300787160224875*n^5 + 750779530699866112/4424821086342613831875*n^6 + 81652953558166798336/1081552696961744609476875*n^7 - 18791673242996178944/346453864668165752623125*n^8) * eps^21
        - (224948912128/102725127028816875 + 1906697043968/2845039387711145625*n - 994752543588352/484225703788436985375*n^2 - 3193548971180032/76517478535441741875*n^3 + 2736885148577431552/42773270501311933708125*n^4 + 39548874636918784/1710930820052477348325*n^5 + 2478501459553943552/229420269052491280798125*n^6 - 4479132491550602297344/21991571504888807059363125*n^7) * eps^22
        + (2902458368/2407236357920625 - 663840882688/54123991660344375*n + 3649770329473024/165147762553327929375*n^2 + 16748683190075392/8554654100262386741625*n^3 + 5156555989188608/750408254408981293125*n^4 - 14223212158493130752/168241530638493605918625*n^5 + 5623976056189811163136/153941000534221649415541875*n^6) * eps^23
        - (124436611072/105638488544098125 + 10877407330304/10467396321391288125*n + 584845428260864/229552435606325225625*n^2 - 214471771993145344/6753674289680831638125*n^3 + 3034186506932584448/116474905826649419482125*n^4 + 1440843898823037157376/92364600320532989649325125*n^5) * eps^24
        + (20954742784/18851312770495625 - 16716281151488/1866279964279066875*n + 1001681399578624/80250038463999875625*n^2 + 48918012396306432/21569427004935077681875*n^3 + 233305107083558912/13509521766934765196625*n^4) * eps^25
        - (8589934592/13236028115454375 + 539823702016/622093321426355625*n + 22135724572672/5243357994879283125*n^2 - 721163988242530304/32091098714659505819375*n^3) * eps^26
        + (16777216/17034785219375 - 5177851510784/780925658811808125*n + 570623449366528/77203926338394961875*n^2) * eps^27
        - (96162807808/269058420262891875 + 169771903483904/279013581812618874375*n) * eps^28
        + 17725128704/20644734133379125 * eps^29;
C4[13] = + (4194304/27484885575 - 67108864/121718778975*n + 134217728/148767396525*n^2 - 67108864/69424785045*n^3 + 268435456/335050049565*n^4 - 67108864/124447161267*n^5 + 134217728/447573123855*n^6 - 469762048/3396290175135*n^7 + 536870912/10188870525405*n^8 - 67108864/4092965082855*n^9 + 134217728/32818138209801*n^10 - 738197504/929847249277695*n^11 + 268435456/2346757343415135*n^12 - 872415232/77442992332699455*n^13 + 134217728/210202407760184235*n^14 - 67108864/5787572960330405937*n^15 - 1073741824/5295629258702321432355*n^16) * eps^13
        - (8388608/284010484275 - 268435456/1338906568725*n + 536870912/852031452825*n^2 - 15837691904/12843585233325*n^3 + 56908316672/33393321606645*n^4 - 21206401024/11905445094543*n^5 + 535260299264/365667242189535*n^6 - 167235289088/173210798931885*n^7 + 49392123904/95775382938807*n^8 - 52881784832/237019887070785*n^9 + 476204498944/6136991845232787*n^10 - 3156532527104/147845712635153505*n^11 + 817117528064/180700315442965395*n^12 - 3489660928/4954265502765285*n^13 + 102542344192/1377993561983429985*n^14 - 1586721980416/353041950580154762157*n^15) * eps^14
        - (171966464/1874469196215 - 3556769792/9372345981075*n + 243068305408/346776801299775*n^2 - 32950452224/48474176525775*n^3 + 19058917376/315952196739795*n^4 + 34250552246272/35323455595509081*n^5 - 14085747900416/7679012085980235*n^6 + 64179360759808/30935448689234661*n^7 - 679288269438976/398904469940131155*n^8 + 3663003123712/3409439914018215*n^9 - 2248062789484544/4228387381365390243*n^10 + 336487132430336/1626302838986688555*n^11 - 645641764077568/10299917980249027515*n^12 + 8774655565365248/607695160834692623385*n^13 - 1832502691889152/756518465528903061765*n^14) * eps^15
        - (16777216/3124115327025 + 536870912/346776801299775*n - 46170898432/300539894459805*n^2 + 5905580032/9509288217975*n^3 - 9754744755060736/7947777508989543225*n^4 + 3564488385101824/2649259169663181075*n^5 - 257937482186752/488294827349684355*n^6 - 2181820300918784/2526394976287497315*n^7 + 1340283199422464/689016811714771995*n^8 - 1013098496393216/469820820151710027*n^9 + 34875738960166912/21141936906826951215*n^10 - 274679801577472/291718809898120605*n^11 + 249518931822247936/607695160834692623385*n^12 - 15207870067304824832/111208214432748750079455*n^13) * eps^16
        - (6949961728/346776801299775 - 28252831744/500899824099675*n + 131130720256/26404576441825725*n^2 + 2771797409792/18526287899742525*n^3 - 525786406715392/7947777508989543225*n^4 - 1127691377967104/1840125827204475525*n^5 + 431369469558784/286241795342918415*n^6 - 9685634637627392/6011077702201286715*n^7 + 39917962919936/83949174760650381*n^8 + 253937189912576/219866886277893855*n^9 - 761094108872704/355169585525828535*n^10 + 339072536111218688/163449043258986291807*n^11 - 3279870352129261568/2373902771142419952435*n^12) * eps^17
        - (1367343104/1502699472299025 + 3567238774784/184832035092780075*n - 132465918214144/1135396786998506175*n^2 + 16112301375488/71601599180085975*n^3 - 6424649378299904/74709108584501706315*n^4 - 97291441461526528/373545542922508531575*n^5 + 12455942029312/84188763336152475*n^6 + 27848647672594432/33892246618794488925*n^7 - 30246214112903168/16767743064035168205*n^8 + 66986725867520/43973377255578771*n^9 + 52142753567473664/817245216294931459035*n^10 - 260303992792285184/154340427845172814245*n^11) * eps^18
        - (1476978016256/184832035092780075 - 34286388379648/2649259169663181075*n - 180670617878528/7947777508989543225*n^2 + 61736732327936/3365275161464040825*n^3 + 66288410624524288/373545542922508531575*n^4 - 129772872452276224/373545542922508531575*n^5 + 385471838420992/7884473825126623725*n^6 + 882496258441216/2234131263791502075*n^7 + 35024921427968/1557121789915289325*n^8 - 88175242312155136/67371469443668184795*n^9 + 353258965091483648/178680853741902577065*n^10) * eps^19
        + (6308233216/15138623826646749 - 28033251540992/1589555501797908645*n + 2745111167369216/41505060324723170175*n^2 - 1883871440273408/30055388511006433575*n^3 - 138534565269471232/2614818800457559721025*n^4 + 36477384878194688/1319860918326196811565*n^5 + 20047764876427264/66659642339706909675*n^6 - 81615489704394752/212880793278418840575*n^7 - 806526138712064/4835272926579056325*n^8 + 40776148925284352/95573479908459517965*n^9) * eps^20
        - (117658615808/30686399648608275 - 137275476279296/53363648988929790225*n - 113666846359552/9508432001663853531*n^2 - 23743407872540672/871606266819186573675*n^3 + 5706074921671589888/46195132141416888404775*n^4 - 94257108270186496/1490165552948931884025*n^5 - 49559085925793792/439953639442065603855*n^6 - 26648109036760727552/389358970906228059411675*n^7 + 355114185834643849216/766157975009029407229425*n^8) * eps^21
        + (1778384896/2175355631198475 - 56733296754688/4157104611220285725*n + 95240944885956608/2614818800457559721025*n^2 - 27553288945664/2149710649235277975*n^3 - 24604832551665664/905786904733664478525*n^4 - 3321420989153148928/46195132141416888404775*n^5 + 153260985824307052544/908504265447865471960575*n^6 + 39586202742075424768/1583393148351994108274145*n^7) * eps^22
        - (582454607872/288579494587524525 + 29103503704064/201139907727504593925*n - 512589851262976/144812326462121907225*n^2 - 495843902356455424/15398377380472296134925*n^3 + 2873676414538743808/46195132141416888404775*n^4 + 3616386677989179392/302834755149288490653525*n^5 - 954646975949855260672/55418760192319793789595075*n^6) * eps^23
        + (11341398016/12676618625291775 - 28490665558016/2795807791649027925*n + 2074293110308864/101527762948168985505*n^2 + 487478788096/45156531907543390425*n^3 - 263322391923392512/209654830487968955067825*n^4 - 21704426226697895936/308453210717920930183275*n^5) * eps^24
        - (1957280350208/1746838046565206595 + 1484716507136/2015582361421392225*n + 9798431014912/12381434505874266525*n^2 - 168009336415584256/6353176681453604699025*n^3 + 928284064644245487616/33251256115391876273757045*n^4) * eps^25
        + (2785017856/3260242714754025 - 5101347405824/671860787140464075*n + 281627448049664/23783871864772428255*n^2 + 200888040405598208/103975159835496798854775*n^3) * eps^26
        - (24041750528/37532941992020475 + 24928795492352/34579388172186863775*n + 9096895888621568/3418589858264128911825*n^2) * eps^27
        + (75027709952/96861031294641075 - 245770913579008/43047809765375483475*n) * eps^28
        - 5320214577152/14381121797311898475 * eps^29;
C4[14] = + (16777216/130734984825 - 134217728/287616966615*n + 268435456/347123925225*n^2 - 402653184/475688341975*n^3 + 536870912/742073813481*n^4 - 671088640/1322827232727*n^5 + 805306368/2708646238441*n^6 - 939524096/6415214775255*n^7 + 1073741824/17736182025705*n^8 - 402653184/19312731539101*n^9 + 1342177280/227295994267881*n^10 - 1476395008/1095153426927063*n^11 + 1610612736/6692604275665385*n^12 - 1744830464/54496920530418135*n^13 + 268435456/91866237465561999*n^14 - 2013265920/13075627799264991191*n^15) * eps^14
        - (33554432/1438084833075 - 536870912/3355531277175*n + 63350767616/124154657255475*n^2 - 170188079104/166966608033225*n^3 + 19327352832/13344309803825*n^4 - 40265318400/25652473199353*n^5 + 1073741824/795175736355*n^6 - 1800128167936/1909595598100905*n^7 + 2658584756224/4924746542470755*n^8 - 1252519837696/4924746542470755*n^9 + 5127117209600/52202313350190003*n^10 - 617938419712/20077812826996155*n^11 + 517543559168/67319725361104755*n^12 - 272193552384/182985594951729185*n^13 + 1987496116224/9339734142332136565*n^14) * eps^15
        - (33554432/437677992675 - 118916907008/372463971766425*n + 2921114632192/4842031632963525*n^2 - 41529917833216/66174432317168175*n^3 + 15828028227584/98120709987525225*n^4 + 688000073728/991118282702275*n^5 - 41783052468224/27949535572204155*n^6 + 511575970545664/280710552920833035*n^7 - 451179871993856/280710552920833035*n^8 + 3293434609664/3000132951160345*n^9 - 466469418696704/783034700252850045*n^10 + 3850775604232192/14877659304804150855*n^11 - 2019084526944256/22507228179062689755*n^12 + 33587298968797184/1372940918922824075055*n^13) * eps^16
        - (33554432/7303215132675 - 536870912/254843770155975*n - 185757335552/1668262999592475*n^2 + 1385680466870272/2845500589638231525*n^3 - 8731481681690624/8536501768914694575*n^4 + 220686693957632/179675585821312425*n^5 - 18664854126592/27949535572204155*n^6 - 3126150465323008/6456342717179159805*n^7 + 22847709891264512/14877659304804150855*n^8 - 8552890499072/4455723062235445*n^9 + 24140837571002368/14877659304804150855*n^10 - 902189565035413504/877781898983444900445*n^11 + 1286177449842835456/2549747420856673282245*n^12) * eps^17
        - (7532969984/440184693905775 - 3347792789504/66174432317168175*n + 628407402496/45166676026003675*n^2 + 1061963278843904/8536501768914694575*n^3 - 42469753851215872/401215583138990645025*n^4 - 5274287887876096/12942438165773891775*n^5 + 211258703872/173992581377615*n^6 - 1850811063730176/1226473706130808135*n^7 + 2759545478709248/3679421118392424405*n^8 + 14770795184128/22853547319207605*n^9 - 561234382422016/325466035959749685*n^10 + 370678562706948096/191916472537599064255*n^11) * eps^18
        - (64156073984/66174432317168175 + 119902602002432/8536501768914694575*n - 803081574940672/8536501768914694575*n^2 + 26611905128824832/133738527712996881675*n^3 - 1091076312006656/9785745930219284025*n^4 - 80232536004886528/401215583138990645025*n^5 + 40295383171072/179333130140134971*n^6 + 27565954804219904/55191316775886366075*n^7 - 7369373605953536/5017392434171487825*n^8 + 113261581835436032/72361948661717679965*n^9 - 730314374996033536/1727248252838391578295*n^10) * eps^19
        - (11934908809216/1707300353782938915 - 21674552459264/1707300353782938915*n - 7136169766682624/401215583138990645025*n^2 + 2271120724066304/85106335817361651975*n^3 + 2672234162290688/20803770977577292705*n^4 - 444331359809306624/1417628393757766945755*n^5 + 15332470606004224/124353367873488328575*n^6 + 1711864442519552/5317435835550513675*n^7 - 53216998439518208/296026153616117781675*n^8 - 18886946599852834816/22070394341823892389325*n^9) * eps^20
        + (268435456/1507949438070075 - 2452426326016/177450501167178525*n + 9324812086280192/165206416586643206775*n^2 - 8403666155339776/133738527712996881675*n^3 - 797421959095779328/21264425906366504186325*n^4 + 8042800387494772736/148850981344565529304275*n^5 + 4598266951456784384/21264425906366504186325*n^6 - 19374719994788052992/50184045139024949879727*n^7 - 2122206253634551808/98749250112274901376237*n^8) * eps^21
        - (201259483136/58563068623411275 - 503944082096128/165206416586643206775*n - 31263441683480576/2808509081972934515175*n^2 - 4250309836668928/265331517548245150275*n^3 + 127802792763981824/1210170580037118124425*n^4 - 3927713021463363584/49616993781521843101425*n^5 - 7376736415775719424/79118990084048344404975*n^6 + 247806897622756622336/25510222945671016188861225*n^7) * eps^22
        + (58116276224/103318584481953225 - 799750827802624/72013053383921397825*n + 1608466708345913344/49616993781521843101425*n^2 - 790392194996371456/49616993781521843101425*n^3 - 454932135812268032/16538997927173947700475*n^4 - 624347071410864128/14142041705844390062725*n^5 + 28145849041027147497472/178571560619697113322028575*n^6) * eps^23
        - (2953729540096/1593028407244999725 - 993263800549376/3630511740111354373275*n - 92005258259070976/21264425906366504186325*n^2 - 330227400669396992/13531907394960502664025*n^3 + 516170577441955250176/8782207899329366228952225*n^4 + 64371065618968870912/76530668837013048566583675*n^5) * eps^24
        + (109655883776/164581882229990225 - 12603581530112/1481236940069912025*n + 129935645605888/6915260457354960711*n^2 - 11155084482183168/5913944713353108571685*n^3 - 1162207852366183530496/178571560619697113322028575*n^4) * eps^25
        - (455065206784/430714287538059525 + 180582436831232/384627858771487155825*n - 9176950320922624/22693043667517742193675*n^2 - 432325319462741868544/19841284513299679258003175*n^3) * eps^26
        + (36775657472/55670554171585925 - 3120779071848448/482830716330164727525*n + 15460645461047640064/1384275663718582273814175*n^2) * eps^27
        - (15502416019456/24924034576467086775 + 14832869272715264/25846223855796368985675*n) * eps^28
        + 11005853696/17940058163291825 * eps^29;
C4[15] = + (33554432/307452619485 - 4294967296/10760841681975*n + 8589934592/12843585233325*n^2 - 4294967296/5757469242525*n^3 + 17179869184/26228470993725*n^4 - 21474836480/45112970109207*n^5 + 8589934592/29421502245135*n^6 - 30064771072/197544372217335*n^7 + 34359738368/509456538876285*n^8 - 4294967296/169818846292095*n^9 + 42949672960/5400239312088621*n^10 - 4294967296/2077015120034085*n^11 + 17179869184/39463287280647615*n^12 - 55834574848/776111316519403095*n^13 + 8589934592/966179394034358955*n^14) * eps^15
        - (67108864/3586947227325 - 17179869184/132717047411025*n + 34359738368/82158172206825*n^2 - 1941325217792/2281876976454075*n^3 + 4191888080896/3383472758190525*n^4 - 17179869184/12393673106925*n^5 + 13159779794944/10601547975663645*n^6 - 51539607552/56606282097365*n^7 + 137438953472/248196775349985*n^8 - 17179869184/61227203084905*n^9 + 34359738368/290335446886485*n^10 - 2353642078208/57002526072046555*n^11 + 68719476736/5835423432476715*n^12 - 127526168952832/47342790307683588795*n^13) * eps^16
        - (25803358208/398151142233075 - 468151435264/1725321616343325*n + 2843268349952/5441398943852025*n^2 - 1749413194104832/3041742009613281975*n^3 + 2869038153728/12798353476633725*n^4 + 7477538062336/15389343835640775*n^5 - 12876311953408/10601547975663645*n^6 + 3191160700928/2005698265666095*n^7 - 256083130056704/171007578216139665*n^8 + 62521838927872/57002526072046555*n^9 - 2688649527296/4170916541857065*n^10 + 238675627606016/776111316519403095*n^11 - 73356546767060992/615456273999886654335*n^12) * eps^17
        - (1073741824/272419202580525 - 68719476736/16324196831556075*n - 740383642353664/9125226028839845925*n^2 + 184786672943104/480275054149465575*n^3 - 366345454624964608/428885623355472758475*n^4 + 15312142525792256/13835020108241056725*n^5 - 137438953472/185992069748485*n^6 - 2361269940125696/11799522896913636885*n^7 + 13962148405313536/11799522896913636885*n^8 - 6665789243392/3976920423631155*n^9 + 47061983886835712/30268341344256720705*n^10 - 1994417129603989504/1846368821999659963005*n^11) * eps^18
        - (164550934528/11169187305801525 - 481036337152/10598404214680425*n + 60335700574208/3041742009613281975*n^2 + 2078970329694208/20423124921689178975*n^3 - 8688615760592896/69818589848565332775*n^4 - 70574146693627904/272927214862573573575*n^5 + 10019162269155328/10369277697287741505*n^6 - 26920099097083904/19665871494856061475*n^7 + 17804941544390656/19665871494856061475*n^8 + 19171565778239488/77352427879767175135*n^9 - 43066633509404672/32392435473678244965*n^10) * eps^19
        - (9126805504/9417157924499325 + 1099511627776/107355600339292305*n - 1923595592794112/25228566079733691675*n^2 + 18691697672192/106836033005526825*n^3 - 75660693642149888/600439872697661861865*n^4 - 4587735356639543296/31823313252976078678845*n^5 + 4633891755261952/18245220303277192225*n^6 + 5232575836585984/19817731506399351525*n^7 - 12071927388468936704/10442577763768568643225*n^8 + 35301152318329716736/23592490503328988416175*n^9) * eps^20
        - (3298803318784/536778001696461525 - 23776938950656/1940658929210283975*n - 31061203484672/2293506007248517425*n^2 + 30755676691103744/1000733121162769769775*n^3 + 4781985526162915328/53038855421626797798075*n^4 - 14610072603059027968/53038855421626797798075*n^5 + 1187972560910811136/6918111576733930147575*n^6 + 105931591945715449856/447041781410854438583775*n^7 - 581521673484192710656/2052546673789621992207225*n^8) * eps^21
        + (13958643712/646886309736761325 - 46935402610688/4307316159954532725*n + 484197433081856/10040800546783643175*n^2 - 112187225831112704/1828926049021613717175*n^3 - 3719479336609251328/159116566264880393394225*n^4 + 10694315528765308928/159116566264880393394225*n^5 + 64983725589372338176/447041781410854438583775*n^6 - 1741649722614854189056/4812273294010962485931225*n^7) * eps^22
        - (1476797661184/478590684439392525 - 10072883720093696/3002199363488309309325*n - 714923076222976/71256859052790144825*n^2 - 31964572545974272/4079911955509753676775*n^3 + 14137901009686495232/159116566264880393394225*n^4 - 828273098770840813568/9387877409627943210259275*n^5 - 13142314124239393783808/190886840662434845275271925*n^6) * eps^23
        + (34091302912/89625917648992725 - 206227149684736/22695274035783824475*n + 3494935147839488/121370378539191756975*n^2 - 221792729640730624/12239735866529261030325*n^3 - 1863430041644302336/72774243485487931862475*n^4 - 4307536620664800673792/190886840662434845275271925*n^5) * eps^24
        - (22080561086464/12983807936750746095 - 8985071583232/14981316850097014725*n - 148111053849362432/31823313252976078678845*n^2 - 3775266271680004096/208619497991732071339095*n^3 + 31015178546408587264/570947678950453176296925*n^4) * eps^25
        + (76235669504/153472907053791325 - 2934527815057408/411153917997106959675*n + 1924007909654528/111788392450826316225*n^2 - 76026719619927506944/21209648962492760586141325*n^3) * eps^26
        - (262261440512/264716463890811075 + 410392715067392/1707197201241669978225*n - 2623596372082819072/2194101616809595922704275*n^2) * eps^27
        + (4558570913792/8880977837591720575 - 152607815888797696/27628722052747842708825*n) * eps^28
        - 54965112406016/91993525147884048975 * eps^29;
C4[16] = + (1073741824/11455089532425 - 8589934592/24931665452925*n + 17179869184/29464695535275*n^2 - 8589934592/12989812010175*n^3 + 34359738368/57782267217675*n^4 - 8589934592/19260755739225*n^5 + 17179869184/60350367982905*n^6 - 8589934592/55102509897435*n^7 + 68719476736/936742668256395*n^8 - 8589934592/290335446886485*n^9 + 17179869184/1690777014221295*n^10 - 8589934592/2920433024564055*n^11 + 34359738368/48599000844668505*n^12 - 111669149696/808510650415848765*n^13) * eps^16
        - (2147483648/141279437566575 - 34359738368/324111650888025*n + 4604204941312/13288577686409025*n^2 - 652835028992/911337863661225*n^3 + 137438953472/128898903793275*n^4 - 3332894621696/2715766559230725*n^5 + 68719476736/60350367982905*n^6 - 18794776887296/21545081369897085*n^7 + 27762668601344/49647361417588935*n^8 - 34359738368/113846357221905*n^9 + 74972949118976/546120975593478285*n^10 - 9036611190784/172305548449279245*n^11 + 643351741202432/38539007669822124465*n^12) * eps^17
        - (304942678016/5509898065096425 - 68719476736/295301726364645*n + 86723979640832/190469613505196025*n^2 - 6665789243392/12697974233679735*n^3 + 57999238365184/221952194249856525*n^4 + 180938382245888/551300611523837175*n^5 - 35321811042304/35908468949828475*n^6 + 239212498518016/173013532212809925*n^7 - 91809220919296/66459166342063495*n^8 + 21784074125312/20226702799758455*n^9 - 2430333014245376/3580126395557246535*n^10 + 20911817807101952/59560284580634192355*n^11) * eps^18
        - (2147483648/632789413638525 - 3058016714752/571408840515588075*n - 1168231104512/19703753121227175*n^2 + 2740292214063104/8952071834744213175*n^3 - 471827927269376/659626345717994655*n^4 + 287384886069690368/290535422273062191225*n^5 - 126580520233467904/165573950327659098225*n^6 + 73426760892416/8191814633902174275*n^7 + 7949743946727424/8971987456178571825*n^8 - 118514262413934592/82342907097816670305*n^9 + 2867242032764551168/1965489391160928347715*n^10) * eps^19
        - (292057776128/22856353620623523 - 7765300871168/190469613505196025*n + 7284264534016/308692132232559075*n^2 + 68719476736/835916799082365*n^3 - 59394793498738688/456555663571954871925*n^4 - 20119482240335872/132848746027604123517*n^5 + 42939215642347175936/56460717061731752494725*n^6 - 948135883385602048/780562908687535748775*n^7 + 986509869987135488/1010572041655022771925*n^8 - 270217970507055104/5022917332966816888605*n^9) * eps^20
        - (178241142784/190469613505196025 + 28621662060544/3836602214890377075*n - 238250425843712/3836602214890377075*n^2 + 373730874228736/2437749538523023725*n^3 - 22471975741209706496/169382151185195257484175*n^4 - 16232352634898481152/169382151185195257484175*n^5 + 70734537952329728/278131611141535726575*n^6 + 139064563512243126272/1427649559989502884509475*n^7 - 26056261464529829888/29571009561752012208855*n^8) * eps^21
        - (313532612608/57755302159640085 - 44873818308608/3836602214890377075*n - 217016107532288/21740745884378803425*n^2 + 1808506343460438016/56460717061731752494725*n^3 + 209591930143637504/3456778595616229744575*n^4 - 40204026742784917504/169382151185195257484175*n^5 + 17961121261241237504/90031954233572253978075*n^6 + 121171809712218308608/784564172606843927523225*n^7) * eps^22
        - (2147483648/26814079094227425 + 1452764097937408/168204718158088637025*n - 122625576908357632/2971616687459565920775*n^2 + 10274283326537728/174800981615268583575*n^3 + 270955536650862592/24197450169313608212025*n^4 - 714492347456237338624/9993546919926520191566325*n^5 - 17971202853986776383488/203202120705172577228515275*n^6) * eps^23
        - (1206885810176/434637514620384075 - 31478708665581568/8914850062378697762325*n - 1921327850061824/217435367375090189325*n^2 - 2008361067347968/1026558492031486408995*n^3 + 43335953522509217792/587855701172148246562725*n^4 - 56042554411652231462912/609606362115517731685545825*n^5) * eps^24
        + (229780750336/921431530995214239 - 309821760864256/41464418894784640755*n + 4327713982090575872/169382151185195257484175*n^2 - 2828328495191425024/144834013332268408573425*n^3 - 1522125277009729814528/67734040235057525742838425*n^4) * eps^25
        - (98573794410496/63225886967224806825 - 47942074225393664/56460717061731752494725*n - 46815176099431972864/9993546919926520191566325*n^2 - 530028984910848458752/40640424141034515445703055*n^3) * eps^26
        + (1007169830912/2724017805844152675 - 20291933767204864/3375058061440905164325*n + 5244397854327308288/333665222832795693314475*n^2) * eps^27
        - (15753940041728/17017099469449942005 + 4223018003857408/88233660749097949295925*n) * eps^28
        + 1187558457344/2967533069286582225 * eps^29;
C4[17] = + (2147483648/26442675480375 - 34359738368/114584927081625*n + 68719476736/134228057438475*n^2 - 34359738368/58301075453075*n^3 + 137438953472/253891780198875*n^4 - 34359738368/82295956340325*n^5 + 206158430208/746759603828875*n^6 - 34359738368/217627084544415*n^7 + 274877906944/3510419494172955*n^8 - 309237645312/9193955818072025*n^9 + 68719476736/5516373490843215*n^10 - 34359738368/8702300426731275*n^11 + 412316860416/389282905755779035*n^12) * eps^17
        - (4294967296/343754781244875 - 137438953472/1565994003448875*n + 19516331393024/67337742148301625*n^2 - 52639119179776/86577097047816375*n^3 + 549755813888/595684901368375*n^4 - 14156212207616/12993617106622425*n^5 + 357616156934144/342762658157453625*n^6 - 11407433138176/13731232715302375*n^7 + 825733232459776/1480226886709596025*n^8 - 20478404067328/64357690726504175*n^9 + 16767552323584/108488678653249895*n^10 - 192002218000384/3008095180840110725*n^11) * eps^18
        - (672162381824/14093946031039875 - 446676598784/2219925565328625*n + 1168231104512/2927727919491375*n^2 - 504504038457344/1054957960323392125*n^3 + 56045268763672576/199387054501121111625*n^4 + 299170241970176/1433226184574654925*n^5 - 2212698431422464/2787440241206382125*n^6 + 277867204182016/232091323700110875*n^7 - 4011293296033792/3171914757234848625*n^8 + 91101719546560512/87333386315866165475*n^9 - 97236616472428544/138973997354813115495*n^10) * eps^19
        - (8589934592/2927727919491375 - 274877906944/46618436871901125*n - 246840360435712/5696772985746317475*n^2 + 5429663295864832/22154117166791234625*n^3 - 2036694657362034688/3389579926519058897625*n^4 + 1858884660575076352/2113502777711883783225*n^5 - 15175708525948043264/19960859567278902397125*n^6 + 132330897327259648/827869751638295491125*n^7 + 7537479862869557248/11790007152641932339125*n^8 - 6483944038931103744/5327336565267836093975*n^9) * eps^20
        - (6762426007552/606039679334714625 - 1044982722985984/28483864928731587375*n + 9552007266304/369920323749760875*n^2 + 222305823613779968/3389579926519058897625*n^3 - 34475324527869952/269336935690419972375*n^4 - 470625336426496/6264960282668182095*n^5 + 3519193123127296/5942893780988789625*n^6 - 43409782051822370816/40923615560714660899125*n^7 + 557434867142939901952/563689801433069683997625*n^8) * eps^21
        - (442381631488/499716928574238375 + 8108898254848/1499150785722715125*n - 184992831373312/3640794765326593875*n^2 + 14573614309310464/108679816155783497625*n^3 - 34212953565691904/255544432582517953875*n^4 - 399858431600623616/7185909444220404862965*n^5 + 528521220698669056/2220661309496144389875*n^6 - 1001307509790605312/60886354858624251581625*n^7) * eps^22
        - (2407329169408/499716928574238375 - 282471409123328/25485563357286157125*n - 34565896798208/4911763119767877555*n^2 + 119606249259008/3783571030633519125*n^3 + 14237438629117952/373488016851372394125*n^4 - 322117427598983168/1599881725316995799679*n^5 + 501588313596791619584/2368323085141871529469875*n^6) * eps^23
        - (17179869184/118537503987377475 + 59923383713792/8714418438297847275*n - 975266813837312/27566017508901353625*n^2 + 46008514308472832/827869751638295491125*n^3 + 98201781523185664/89069045632143673721625*n^4 - 170579883200610304/2434995583254800593335*n^5) * eps^24
        - (6444598427648/2572828300830793005 - 139397458558976/38592424512461895075*n - 196192800411222016/25663962300787160224875*n^2 + 367602162055774208/168241530638493605918625*n^3 + 18650877066060234752/308911706757635416887375*n^4) * eps^25
        + (4294967296/27767187952228725 - 1173316345790464/190103424450275260925*n + 11436993233410850816/504724591915480817755875*n^2 - 5081081138781356032/250310569974344145391125*n^3) * eps^26
        - (5310727061504/3714569735242026375 - 11122006791553024/10738821104584698250125*n - 22042390638362624/4867699621635467175195*n^2) * eps^27
        + (1176821039104/4297247340770187375 - 175646982537216/34544538700609955875*n) * eps^28
        - 602006238527488/697370271282346822875 * eps^29;
C4[18] = + (8589934592/121132637200575 - 68719476736/261391480274925*n + 137438953472/303779287887075*n^2 - 68719476736/130191123380175*n^3 + 274877906944/556271163533475*n^4 - 68719476736/175853464600905*n^5 + 137438953472/515432568657825*n^6 - 68719476736/433617875220075*n^7 + 549755813888/6677715278389155*n^8 - 68719476736/1838791163614405*n^9 + 137438953472/9299029598849991*n^10 - 68719476736/13570354199278695*n^11) * eps^18
        - (17179869184/1655479375074525 - 274877906944/3746611217273925*n + 549755813888/2247966730364355*n^2 - 824633720832/1586402947854725*n^3 + 80264348827648/99943385714847675*n^4 - 29961691856896/30891591948225645*n^5 + 1649267441664/1725969189601475*n^6 - 274877906944/349009509323475*n^7 + 2199023255552/3989829883314275*n^8 - 22265110462464/67438908352020205*n^9 + 224850127880192/1323561879569648719*n^10) * eps^19
        - (1769526525952/42711367876922745 - 137438953472/784174440824775*n + 557177517375488/1584816544906870275*n^2 - 9758165696512/22411547099693115*n^3 + 210556476719104/728158953065318775*n^4 + 6389949263773696/54029394317446653105*n^5 - 1126174784749568/1765666480962308925*n^6 + 24452176529063936/23653421475379871175*n^7 - 35240447181848576/30623395201667356725*n^8 + 6613974757933056/6617809397848243595*n^9) * eps^20
        - (17179869184/6743900191093065 - 274877906944/45280472711624865*n - 549755813888/17415566427548025*n^2 + 37220942501380096/188593168843917562725*n^3 - 5061923935373754368/9995437948727630824425*n^4 + 210619973515608064/270146971587233265525*n^5 - 540556749854212096/733256065736776006425*n^6 + 62215590579798016/233849231775512347995*n^7 + 37208280525474627584/85128663889892156358825*n^8) * eps^21
        - (575525617664/58696909070624825 - 7490422964224/226402363558124325*n + 20753281974272/769768036097622705*n^2 + 15646943816450048/302892059052352449225*n^3 - 173465276589801472/1427919706961090117775*n^4 - 312763435504893952/14608717001986537358775*n^5 + 95646928817094656/209864695183152107175*n^6 - 266525260705169408/291246946317918204075*n^7) * eps^22
        - (3058016714752/3697905271449363975 + 549755813888/141480246694611825*n - 11279889789353984/270146971587233265525*n^2 + 390507497523249152/3331812649575876941475*n^3 - 1085215777591656448/8257100914166303724525*n^4 - 259937076091977465856/11204885940523674154180425*n^5 + 3732761141304157536256/17525590830049849318077075*n^6) * eps^23
        - (809755954118656/188593168843917562725 - 104456628295696384/9995437948727630824425*n - 9252940103548928/1999087589745526164885*n^2 + 520739427153084416/17264847365984089605825*n^3 + 236963197894260686848/11204885940523674154180425*n^4 - 2173497279199697698816/12896189478715926856698225*n^5) * eps^24
        - (8211977469952/44424168661011692553 + 549755813888/100049426442396585*n - 5772652649614671872/189913321025824985664075*n^2 + 64786503302480134144/1244987326724852683797825*n^3 - 281804537728895811584/40205767198349654317941525*n^4) * eps^25
        - (481783661461504/212668892526119804775 - 20856155030945792/5754949121994696535275*n - 324453099534024704/49799493068994107351913*n^2 + 20093572867302621184/3997064575274527037456175*n^3) * eps^26
        + (7095285972992/82463448122372985525 - 496704377847808/97029641238005820575*n + 218039311403828903936/10849175275745144815952475*n^2) * eps^27
        - (410444254674944/312819619211135826075 - 102777261723222016/87729180127319230317675*n) * eps^28
        + 601295421440/2991617395646009559 * eps^29;
C4[19] = + (17179869184/275520749478975 - 549755813888/2369478445519185*n + 1099511627776/2734013590983675*n^2 - 549755813888/1157645394380475*n^3 + 2199023255552/4862110656397995*n^4 - 549755813888/1502834202886653*n^5 + 1099511627776/4282269502849065*n^6 - 549755813888/3480662403793575*n^7 + 4398046511104/51436455522727275*n^8 - 549755813888/13487781670404041*n^9 + 5497558138880/321947484219644283*n^10) * eps^19
        - (34359738368/3949130742531975 - 2199023255552/35542176682787775*n + 347445674377216/1670482304091025425*n^2 - 134140418588672/299830157144543025*n^3 + 8796093022208/12523618357388775*n^4 - 10995116277760/12697860004100271*n^5 + 6390361580634112/7301269502357655825*n^6 - 129742372077568/174349544044569075*n^7 + 14759844091265024/27312757882568183025*n^8 - 6955510557310976/20568867047366162525*n^9) * eps^20
        - (17179869184/473895689103837 - 256735965085696/1670482304091025425*n + 1099511627776/3531675061503225*n^2 - 26276678636404736/66262464728944008525*n^3 + 234554417506942976/810440914761699796575*n^4 + 1092364802195456/21903808507072967475*n^5 - 70701896200880128/138724120544795460675*n^6 + 3123725178895335424/3507738476632685219925*n^7 - 50355798566745669632/48316268694263115771225*n^8) * eps^21
        - (137438953472/61869714966334275 - 70368744177664/11693376128637177975*n - 35184372088832/1540987551835907175*n^2 + 4714705859903488/29511854038941449175*n^3 - 121949033659891712/284749510591948577175*n^4 + 10624202627199533056/15398377380472296134925*n^5 - 5751835595965988864/8184723112142932179825*n^6 + 455215406085308416/1345736145123231436575*n^7) * eps^22
        - (33775622815744/3897792042879059325 - 5945059371384832/198787394186832025575*n + 6597069766656/241318671795096025*n^2 + 140795762471600128/3511910630634032451825*n^3 - 609362538252992512/5410240701247022966325*n^4 + 4538644361482600448/288062328068835393548475*n^5 + 155909009391241658368/450559025953819461704025*n^6) * eps^23
        - (50783693307904/66262464728944008525 + 998356558020608/363301099720761977775*n - 362953186375368704/10535731891902097355475*n^2 + 6835782537139191808/66726301982046616584675*n^3 - 8847585350760005632/69884943495989651689275*n^4 + 1707339911901640392704/720443882500157319264735975*n^5) * eps^24
        - (8097250303541248/2107146378380419471095 - 103462944662093824/10535731891902097355475*n - 535446769564123136/200178905946139849754025*n^2 + 12306584060557262848/437427979660083375388425*n^3 + 557162471658373513216/65494898409105210842248725*n^4) * eps^25
        - (15530601742336/74721502779447498975 + 881509258313596928/200178905946139849754025*n - 14719628353967489024/562407402420107196927975*n^2 + 203822997141859598336/4213122119883960931372725*n^3) * eps^26
        - (8392074038607872/4085283794819180607225 - 14119724364492439552/3936851816940750378495825*n - 438401893076171751424/80049320277795257696081775*n^2) * eps^27
        + (240518168576/6628488955650844425 - 2724235770884784128/639258103371923087191425*n) * eps^28
        - 1197385342517248/993297829878681822495 * eps^29;
C4[20] = + (137438953472/2490990160674015 - 1099511627776/5337836058587175*n + 2199023255552/6118982798868225*n^2 - 1099511627776/2562650915765325*n^3 + 4398046511104/10596907840867425*n^4 - 1099511627776/3209349231805563*n^5 + 2199023255552/8914858977237675*n^6 - 1099511627776/7025073203261025*n^7 + 8796093022208/100046732170579425*n^8 - 9895604649984/226031506015012775*n^9) * eps^20
        - (274877906944/37364852410110225 - 4398046511104/83626098251199075*n + 730075720843264/4097678814308754675*n^2 - 1974722883485696/5097112671457231425*n^3 + 474989023199232/769649491701519275*n^4 - 4398046511104/5673092076423975*n^5 + 1222656930086912/1524440885107642425*n^6 - 3003865767084032/4282952962921471575*n^7 + 31067800554438656/58994223069918334275*n^8) * eps^21
        - (18691697672192/585382687758393525 - 1666859627708416/12293036442926264025*n + 57887088179150848/208981619529746488425*n^2 - 1334644388399153152/3692008611692187962175*n^3 + 4521191813414912/15890998328660780325*n^4 - 655308930154496/394830189242879388075*n^5 - 7714173580476416/19078608653013827925*n^6 + 600012291370385408/783780392214629298225*n^7) * eps^22
        - (274877906944/141299269458922575 - 1218258883575808/208981619529746488425*n - 180610178024996864/11076025835076563886525*n^2 + 479664146640535552/3692008611692187962175*n^3 - 2637051095871913984/7256706581601886684275*n^4 + 184775141265151885312/302834755149288490653525*n^5 - 11443717021892608/17286398928081978975*n^6) * eps^23
        - (536286796447744/69660539843248829475 - 300168873406103552/11076025835076563886525*n + 43017292925108224/1582289405010937698075*n^2 + 6426889555932086272/210444490866454713843975*n^3 - 425316984525521158144/4138741653706942705598175*n^4 + 30568622275428352/748214369811373640175*n^5) * eps^24
        - (237219633692672/335637146517471632925 + 1614083069575168/852001987313581837425*n - 857627865758302208/30063498695207816263425*n^2 + 370804592201131098112/4138741653706942705598175*n^3 - 3142647162680895340544/26116886987185190176705725*n^4) * eps^25
        - (38242113925677056/11076025835076563886525 - 215297570858074112/23382721207383857093775*n - 4560536737503248384/4138741653706942705598175*n^2 + 6519761472431813820416/252463240876123505041488675*n^3) * eps^26
        - (40956808134656/186729805560296995425 + 146855171052273664/41525835990370662597975*n - 743768959490749104128/32929987940363935440194175*n^2) * eps^27
        - (8472149408874496/4536435864494274065325 - 1836887006316068864/522698221275618022860225*n) * eps^28
        + 549755813888/1740393633548117723175 * eps^29;
C4[21] = + (274877906944/5598218305347525 - 4398046511104/23919660031939425*n + 8796093022208/27257287013140275*n^2 - 4398046511104/11301801932277675*n^3 + 17592186044416/46076577108516675*n^4 - 4398046511104/13698441843072525*n^5 + 8796093022208/37181485002625425*n^6 - 4398046511104/28489709287725975*n^7 + 35184372088832/392422769866419075*n^8) * eps^21
        - (549755813888/87705420117111225 - 17592186044416/390687780521677275*n + 35184372088832/229023871340293575*n^2 - 2761973208973312/8186271866279795925*n^3 + 70368744177664/129195108363095775*n^4 - 2234207627640832/3210001538559995025*n^5 + 3764727813505024/5118651102028100175*n^6 - 4204532464615424/6372198310688043075*n^7) * eps^22
        - (364762982514688/12892696757215350075 - 479387069710336/3985015361321108205*n + 261411088526999552/1056029070750093674325*n^2 - 1277645705615245312/3872106592750343472525*n^3 + 228698418577408/827736245792199975*n^4 - 3003865767084032/74608217578045944975*n^5 - 333714973169549312/1050254139752492917725*n^6) * eps^23
        - (1099511627776/642744413116307775 - 5875790138834944/1056029070750093674325*n - 18929192183791616/1659474254035861488225*n^2 + 4683145478139805696/44142015157353915586785*n^3 - 4028567116287362203648/13021894471419405098101575*n^4 + 109531870615417389056/202999121583588988240275*n^5) * eps^24
        - (1451630226571264/211205814150018734865 - 285991770477559808/11616319778251030417575*n + 841091210876551168/31530010826681368276275*n^2 + 8952412789352169472/394602862770285002972775*n^3 - 629287817602805006336/6789192844073365051146975*n^4) * eps^25
        - (109401406963712/168352460554362759675 + 12015463068336128/9596090251598677301475*n - 13419213961564258304/566169324844321960787025*n^2 + 180572689076536213504/2302421921033575973867235*n^3) * eps^26
        - (29879503362719744/9596090251598677301475 - 36156340367785984/4193846850698681191015*n + 1788694312159019008/11512109605167879869336175*n^2) * eps^27
        - (2476100185751552/11101359310672979623275 + 14029979476654292992/4933761259357662801144075*n) * eps^28
        - 1109241755926003712/651628845575540369962425 * eps^29;
C4[22] = + (1099511627776/25032202359006375 - 8796093022208/53329474590926625*n + 17592186044416/60440071203050175*n^2 - 8796093022208/24831967238462475*n^3 + 35184372088832/99933526691373375*n^4 - 8796093022208/29211338571324525*n^5 + 17592186044416/77633737644511125*n^6 - 8796093022208/57987648934471575*n^7) * eps^22
        - (2199023255552/408859305197104125 - 35184372088832/906601068045752625*n + 70368744177664/528020402268405375*n^2 - 35184372088832/119122926001954875*n^3 + 12525636463624192/25949405764193286375*n^4 - 35184372088832/56153124521819325*n^5 + 118289858962653184/175219345863661609125*n^6) * eps^23
        - (525566558076928/20851824565052310375 - 5154510511013888/48049856606424889125*n + 2498090418307072/11245711120652633625*n^2 - 1009738702391345152/3347473343580933942375*n^3 + 52541456158950424576/197500927271275102600125*n^4 - 3862311669493399552/56035146807198982598175*n^5) * eps^24
        - (24189255811072/16016618868808296375 - 2779565395017728/528548422670673780375*n - 25825329113202688/3347473343580933942375*n^2 + 1561165773953564672/17954629751934100236375*n^3 - 9549604208874704863232/36142669690643343775822875*n^4) * eps^25
        - (3257852953100288/528548422670673780375 - 202310139510784/9022839201026776125*n + 15361127418077118464/592502781813825307800375*n^2 + 27973484562807259136/1721079509078254465515375*n^3) * eps^26
        - (1996713116041216/3347473343580933942375 + 8584986789675008/11179297770072175618875*n - 713879932158309564416/36142669690643343775822875*n^2) * eps^27
        - (1669577620452278272/592502781813825307800375 - 97178602390656385024/12047556563547781258607625*n) * eps^28
        - 2014305302085632/9092495519658702836685 * eps^29;
C4[23] = + (2199023255552/55699673461634475 - 140737488355328/946894448847786075*n + 281474976710656/1067774591253886425*n^2 - 140737488355328/435019277918250025*n^3 + 562949953421312/1729960384279552425*n^4 - 140737488355328/497891037426798015*n^5 + 281474976710656/1297921080471567475*n^6) * eps^23
        - (4398046511104/946894448847786075 - 562949953421312/16728468596310887325*n + 21392098230009856/184013154559419760575*n^2 - 57983845202395136/223164889572062262825*n^3 + 6755399441055744/15730858404721234775*n^4 - 78250043525562368/138358387178269092835*n^5) * eps^24
        - (226499395321856/10037081157786532395 - 140737488355328/1464295659624029925*n + 2098958901331361792/10488749809886926352775*n^2 - 56978557323073028096/206278746261109551604575*n^3 + 22721223070037573632/89241159729983564878575*n^4) * eps^25
        - (35184372088832/26287593508488537225 - 51791395714760704/10488749809886926352775*n - 3048936947729825792/618836238783328654813725*n^2 + 21939285584735371264/306902524925065430436075*n^3) * eps^26
        - (58221339713994752/10488749809886926352775 - 324822123124097024/15867595866239196277275*n + 314868042047701385216/12583003521927682647879075*n^2) * eps^27
        - (22570774694985728/41255749252221910320915 + 434597364041252864/1078543159022372798389635*n) * eps^28
        - 19316123519745523712/7549802113156609588727445 * eps^29;
C4[24] = + (35184372088832/987187829649819525 - 281474976710656/2092838198857617393*n + 562949953421312/2349104100758550135*n^2 - 281474976710656/949637827966222395*n^3 + 1125899906842624/3735242123333808087*n^4 - 1407374883553280/5298831849380518449*n^5) * eps^24
        - (70368744177664/17440318323813478275 - 1125899906842624/38368700312389652205*n + 2251799813685248/22091069876830405815*n^2 - 201536083324829696/877781898983444900445*n^3 + 436849163854938112/1139248847616811466535*n^4) * eps^25
        - (11681211533492224/575530504685844783075 - 9007199254740992/104143615133629055985*n + 864691128455135232/4779034783354311124645*n^2 - 21446141425538301952/84635164389081187336455*n^3) * eps^26
        - (70368744177664/59108538319086761505 - 595601050719748096/129033939150566400365415*n - 22195990763495489536/7871070288184550422290315*n^2) * eps^27
        - (15058911254020096/3000789282571311636405 - 49153412233028435968/2623690096061516807430105*n) * eps^28
        - 101260622871658496/201822315081655139033085 * eps^29;
C4[25] = + (70368744177664/2178260166157928307 - 1125899906842624/9215716087591235145*n + 2251799813685248/10299917980249027515*n^2 - 1125899906842624/4133980685950289955*n^3 + 4503599627370496/16096137564444745995*n^4) * eps^25
        - (140737488355328/39934769712895352295 - 4503599627370496/175098605664233467755*n + 927741523238322176/10330817734189774597545*n^2 - 58546795155816448/287359727216405038965*n^3) * eps^26
        - (41728665297354752/2276281873635035080815 - 269090077735387136/3443605911396591532515*n + 34481810546962202624/210059960595192083483415*n^2) * eps^27
        - (3659174697238528/3443605911396591532515 - 9007199254740992/2093620869719522426745*n) * eps^28
        - 260856934666600448/57289080162325113677295 * eps^29;
C4[26] = + (281474976710656/9577116718477165935 - 2251799813685248/20218357516785128085*n + 4503599627370496/22507228179062689755*n^2 - 6755399441055744/26920410174957334805*n^3) * eps^26
        - (562949953421312/181965217651066152765 - 9007199254740992/397627697830107519005*n + 1927540640514572288/24255289567636558659305*n^2) * eps^27
        - (178455135234555904/10735947841412903013135 - 1031324314667843584/14553173740581935195583*n) * eps^28
        - 562949953421312/591592428478940455105 * eps^29;
C4[27] = + (562949953421312/20981314404210981975 - 18014398509481984/176842507121206848075*n + 36028797018963968/196134416988974867865*n^2) * eps^27
        - (1125899906842624/412632516616149312175 - 72057594037927936/3595797644797872577525*n) * eps^28
        - 1142225455491842048/75511750540755324128025 * eps^29;
C4[28] = + (4503599627370496/183273143743796188005 - 36028797018963968/385505578219709223045*n) * eps^28
        - 9007199254740992/3726553922790522489435 * eps^29;
C4[29] = + 9007199254740992/399032089736190248415 * eps^29;
    
GeographicLib-2.4/doc/tmseries30.html0000644000771000077100000025414214644775140017411 0ustar ckarneyckarney Krueger's series for the transverse Mercator projection

Krueger's series for the transverse Mercator projection

This extends Krueger's series for the transverse Mercator projection given in here to 30th order in the flattening. See
Louis Krueger, Konforme Abbildung des Erdellipsoids in der Ebene, Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912), DOI: 10.2312/GFZ.b103-krueger28
and
Charles F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475–485 (Aug. 2011); preprint arXiv:1002.1417; resource page tm.html.

Krueger, p. 12, Eq. (5)
A = a/(n + 1) * (1 + 1/4 * n^2
                   + 1/64 * n^4
                   + 1/256 * n^6
                   + 25/16384 * n^8
                   + 49/65536 * n^10
                   + 441/1048576 * n^12
                   + 1089/4194304 * n^14
                   + 184041/1073741824 * n^16
                   + 511225/4294967296 * n^18
                   + 5909761/68719476736 * n^20
                   + 17631601/274877906944 * n^22
                   + 863948449/17592186044416 * n^24
                   + 2704312009/70368744177664 * n^26
                   + 34493775625/1125899906842624 * n^28
                   + 111759833025/4503599627370496 * n^30);

Krueger's gamma[j], p. 21, Eq. (41)
alpha[1]
   = 1/2 * n
   - 2/3 * n^2
   + 5/16 * n^3
   + 41/180 * n^4
   - 127/288 * n^5
   + 7891/37800 * n^6
   + 72161/387072 * n^7
   - 18975107/50803200 * n^8
   + 60193001/290304000 * n^9
   + 134592031/1026432000 * n^10
   - 1043934033787/3218890752000 * n^11
   + 1107802529272207/5178390497280000 * n^12
   + 142419537515471/2027901173760000 * n^13
   - 20550145413484373/80782891757568000 * n^14
   + 2101511170951245259/11421139410616320000 * n^15
   + 6871484604164555073473/152001089131039948800000 * n^16
   - 316612189636291463036929/1590165240140110233600000 * n^17
   + 311760891443585845069947023/2276285401141473705984000000 * n^18
   + 347174131720182892842402053/5544999731500337332224000000 * n^19
   - 10268774819324130983842267351303/53283288669919616509673472000000 * n^20
   + 464746136644252720151415143064067/3701786370752310199619420160000000 * n^21
   + 2064362591952186950153454576839857/30080838421836438047733841920000000 * n^22
   - 371073254699693809696179501698840034443/1863568101909611009933206974627840000000 * n^23
   + 5346008647175289889016543194428866601311819/37129264970421612359156732460741427200000000 * n^24
   + 6137137281591956159684411551066421423706607/167888850301036855884882616344222105600000000 * n^25
   - 5694433253276142746311340663687118018405227/34071560796386891341343825081621544960000000 * n^26
   + 1499618325109985269858805780437308686284756403/11441314242737326475117926447161802752000000000 * n^27
   + 28163788993539415131077859632876464031084037436421/1310187798864261519640035449688674889891840000000000 * n^28
   - 1382954166683887199687110280755185774160434238372379/10481502390914092157120283597509399119134720000000000 * n^29
   + 115342138314917862218900682540434301181025997372394740949/1236751772737919661464211462733624662313402368000000000000 * n^30;
alpha[2]
   = 13/48 * n^2
   - 3/5 * n^3
   + 557/1440 * n^4
   + 281/630 * n^5
   - 1983433/1935360 * n^6
   + 13769/28800 * n^7
   + 148003883/174182400 * n^8
   - 705286231/465696000 * n^9
   + 1703267974087/3218890752000 * n^10
   + 490493610499/373621248000 * n^11
   - 1975809888712343/976396861440000 * n^12
   + 1116592309932851/2013818526720000 * n^13
   + 802251814098377521231/445424437014036480000 * n^14
   - 25718419234005720100069/10254041727093964800000 * n^15
   + 10411677743818269012186343/20672148121821433036800000 * n^16
   + 58069234404819345427642159/24548175894662951731200000 * n^17
   - 1619780216513490679161882727/538657116774318483701760000 * n^18
   + 15210374203334956573188013/39416197422363181056000000 * n^19
   + 1350424643880191120787483875017417/444214364490277223954330419200000 * n^20
   - 363512649110052773321859331443938611/101105040251172472327105413120000000 * n^21
   + 110501360211107135866854552436284378043/372713620381922201986641394925568000000 * n^22
   + 435725651868235317320938241439343987241/116473006369350688120825435914240000000 * n^23
   - 236785644303962703650496588593815148631118759/55962950100345618628294205448074035200000000 * n^24
   + 29951219608236318375984513968969852637391/119180356695180484115811733824602112000000 * n^25
   + 62685650245065205952020811520018086774286032497/14257637748641899145916185264924708044800000000 * n^26
   - 4483003054643316539810052609365683886313161406697/933182192923263190626805875846634536960000000000 * n^27
   + 1345853871818243074858148169703931833087859724988709/10481502390914092157120283597509399119134720000000000 * n^28
   + 645835710031983279557286116276652061340439304187459/126360334379353222116394530036641089380679680000000 * n^29
   - 6417447834385545863906095749619028053009319834823545892863/1194396760656532610281735373146342851007532236800000000000 * n^30;
alpha[3]
   = 61/240 * n^3
   - 103/140 * n^4
   + 15061/26880 * n^5
   + 167603/181440 * n^6
   - 67102379/29030400 * n^7
   + 79682431/79833600 * n^8
   + 6304945039/2128896000 * n^9
   - 6601904925257/1307674368000 * n^10
   + 35472608886503/41845579776000 * n^11
   + 7660808256523559/1098446469120000 * n^12
   - 388334559174821269/43261891706880000 * n^13
   - 121304505560337904991/236631732163706880000 * n^14
   + 171473290780515481554677/12620359048731033600000 * n^15
   - 132727036454031241642633/9465269286548275200000 * n^16
   - 30639039363651602964664613/7934763925547620761600000 * n^17
   + 41628755176036445034328803761/1767468664415732524646400000 * n^18
   - 62731007539014996251923219444381/3110744849371689243377664000000 * n^19
   - 4253576948330492615223590251863457/425705432636515672956233318400000 * n^20
   + 21109173608034038907290057857778161/560369142096606397967892480000000 * n^21
   - 228353389351527744252835451931600005809/8319500454953620580058959708160000000 * n^22
   - 36528815353507244513448437301156996025493/1863568101909611009933206974627840000000 * n^23
   + 179949541301186621467483604212502389572317467/3179713073883273785698534400458752000000000 * n^24
   - 6667459517369124611809567288843679508075480287/186543167001152062094314018160246784000000000 * n^25
   - 236468538717455606379697014767782772375800752929/7057680450680141777849792338335891456000000000 * n^26
   + 2724615431989937919395302944576209366322330213709/33653452487089882156338604087632199680000000000 * n^27
   - 326200170759406656773108233662108528251650506200184011/7290019291116532045176607502113909002731520000000000 * n^28
   - 36898523581280468039266697831389451828857036025105495411081/698722104984071577014815193290610567839406358528000000000 * n^29
   + 48301814797856398208935403861888385264392898018206796432963809/432334302458894288277916900848565288850632684339200000000000 * n^30;
alpha[4]
   = 49561/161280 * n^4
   - 179/168 * n^5
   + 6601661/7257600 * n^6
   + 97445/49896 * n^7
   - 40176129013/7664025600 * n^8
   + 138471097/66528000 * n^9
   + 48087451385201/5230697472000 * n^10
   - 634613396309/40864824000 * n^11
   + 152161926556090753/1124809184378880000 * n^12
   + 797541596189032241/27161585418240000 * n^13
   - 670034891213941619/19612057573785600 * n^14
   - 797738204370016183711/62444484876533760000 * n^15
   + 1262572420740885661534720343/17264651178664053964800000 * n^16
   - 1504688538793152003510638173/24548175894662951731200000 * n^17
   - 4908380662744446707535585282187/97210776542865288855552000000 * n^18
   + 21617826231307521472044305870999/139740491280368852729856000000 * n^19
   - 9011412074161616811750466480987610329/96159344783777657891290349568000000 * n^20
   - 5712764954291035029425456603013754181/42570543263651567295623331840000000 * n^21
   + 13285505291912233404719867451738427771511/45538318279746133701375358402560000000 * n^22
   - 179649231017237416866042466928297549711/1455912579616883601510317948928000000 * n^23
   - 29884145110494866094058551866948880229303499503/101750818364264761142353100814680064000000000 * n^24
   + 2382017529810135366707938471482990925184741/4716709930568539119450511386869760000000 * n^25
   - 188545346993373372341522235835513997267194575937/1391079045351448234474741678280697446400000000 * n^26
   - 77189939882994048469559094011678147843496599936029/135603037409161682387957728833964081152000000000 * n^27
   + 5055292347375802605991447871089890508241922361424571717527/6177914279257927294560700205929359574176890880000000000 * n^28
   - 896129405773425784164009625079521008114002654837731749413/8398102223366244916043451842435223171146711040000000000 * n^29
   - 4583499403987764386036616357058392174411208549700462493009598039/4522881933416124861984361424261913791052772697702400000000000 * n^30;
alpha[5]
   = 34729/80640 * n^5
   - 3418889/1995840 * n^6
   + 14644087/9123840 * n^7
   + 2605413599/622702080 * n^8
   - 31015475399/2583060480 * n^9
   + 5820486440369/1307674368000 * n^10
   + 98568244458947/3678732288000 * n^11
   - 1367520624030470251/29877743960064000 * n^12
   - 11234223222165655787/1912175613444096000 * n^13
   + 2982454477844692970369/27248502491578368000 * n^14
   - 869190895988598534264203/7266267331087564800000 * n^15
   - 2458295530839889742624897/30213139562662094438400 * n^16
   + 20076007526718092337920372531/60426279125324188876800000 * n^17
   - 92612134608258706595931646307/396778679766797097369600000 * n^18
   - 3111621093870597339292256540131/8985511024872697343508480000 * n^19
   + 618939899724538734690312503581728709/751244881123262952275705856000000 * n^20
   - 349880405493459820104679463829848683211/1041726235157591293822312120320000000 * n^21
   - 207806888296724735724043450497658236815707/199230142473889334943517193011200000000 * n^22
   + 1022460523953867701806308301182024494003729/579578596287678065290231834214400000000 * n^23
   - 383432658756943317231248322200166817451364947/1418641217578691381311653809435443200000000 * n^24
   - 763997490849414433043000164958612268471750563033/295077373256367807312823992362572185600000000 * n^25
   + 69453259794643484263302719504607020126095692449473/20581646784631654560069473467289409945600000000 * n^26
   + 3526475778372639978202920400355285382983253400925713433/11591583469104547848231127456777395681361920000000000 * n^27
   - 3386844879506808385587873157467763778147265832357828657961/599864444526160351145960845888230226510479360000000000 * n^28
   + 8975715445112376764326365404354369942872021811244023950781587/1522855869837079078109212600761587135034603601920000000000 * n^29
   + 1141689688674260410162806230731137824563608969465073820136479347/565360241677015607748045178032739223881596587212800000000000 * n^30;
alpha[6]
   = 212378941/319334400 * n^6
   - 30705481/10378368 * n^7
   + 175214326799/58118860800 * n^8
   + 870492877/96096000 * n^9
   - 1328004581729009/47823519744000 * n^10
   + 3512873113922087/355687428096000 * n^11
   + 986615629722639449/13133074268160000 * n^12
   - 186591382609938512501/1419192838103040000 * n^13
   - 11945326540608489526613/373693748455931904000 * n^14
   + 4125626927677466366821/10899400996631347200 * n^15
   - 4011823062707782237989439819/10071046520887364812800000 * n^16
   - 5594107510292126787316683247/14477129373775586918400000 * n^17
   + 14982221707493385549304025695646893/11007251005469054245797888000000 * n^18
   - 7291595279883773582199320279582809/8943391441943606574710784000000 * n^19
   - 8513492703227656510956084303336491/4584255567495120990240768000000 * n^20
   + 157105326583313971040653100185655846951/40692431060843409914934067200000000 * n^21
   - 342420444562433578699362565080425434441037/375021444656732865776032363315200000000 * n^22
   - 6663996141625951282430738551524458085888493/1050486205771416493338545199513600000000 * n^23
   + 1065943196304789336567113254479304136821982769941/116477910495934660781377891722067968000000000 * n^24
   + 282615555043864261481140961100818513817314366357/285856205342106313334298242601241804800000000 * n^25
   - 2234022131193996792575080782842298020429068641824778623/126453637844776885617066844983026134705766400000000 * n^26
   + 1670315644839955612203042568472364219380574770260571/89166026685419598832547134282903043702784000000 * n^27
   + 10801933283402577517707581324454394034794780353978810731521/1182341513848663880519575000591294359498915840000000000 * n^28
   - 16737951977035205802462496054004751707736362520790525486549/392219059882489460364666706926919763487621120000000000 * n^29
   + 608596584899951573523771478197765351237552575059720715257651893101/18091527733664499447937445697047655164211090790809600000000000 * n^30;
alpha[7]
   = 1522256789/1383782400 * n^7
   - 16759934899/3113510400 * n^8
   + 1315149374443/221405184000 * n^9
   + 71809987837451/3629463552000 * n^10
   - 52653013293696143/812999835648000 * n^11
   + 101784256296129577/4455864483840000 * n^12
   + 4323558791348929159/21064086650880000 * n^13
   - 4743350772552838010233/12772735542927360000 * n^14
   - 29903451511253057978977829/239786821925889638400000 * n^15
   + 15436840428957043227623443109/12408968034664788787200000 * n^16
   - 510180710084169862809596281619/397086977109273241190400000 * n^17
   - 25997085578966927070281529664931/16379837805757521199104000000 * n^18
   + 35427299825029861083061489601504459/6814012527195128818827264000000 * n^19
   - 41290529970653089580171330206559029/15331528186189039842361344000000 * n^20
   - 5636751993648050664276890397282425312669/651078896973494558638945075200000000 * n^21
   + 141025630513942054689154210633777771281593/8496579605504103990238233231360000000 * n^22
   - 5083353505162393632768455472240415265887349/3625207298348417702501646178713600000000 * n^23
   - 2146307295003485715426155323634480307223656521293/64478843310249544361119904346144768000000000 * n^24
   + 2825817217957521232544774598978333849050291610759191/66026335549695533425786782050452242432000000000 * n^25
   + 1121526321726686366084998741747165637003373989067391/71050078471954976186444471989073608704000000000 * n^26
   - 24751330931089944559270444413306567745123372815680765867/240606738674941774627508140128468530626560000000000 * n^27
   + 283315570304624430111229930361091346970544306955451389315961/3103646473852742686363884376552147693684654080000000000 * n^28
   + 4800340784447363734591990355494651667081994231886256711/55232397096636431665504905041636298326016000000000 * n^29
   - 5883627608079327862661606773104442557734582970571316091093779/21654584826138278971716016135829556194222643609600000000 * n^30;
alpha[8]
   = 1424729850961/743921418240 * n^8
   - 256783708069/25204608000 * n^9
   + 2468749292989891/203249958912000 * n^10
   + 117880637749661/2707556544000 * n^11
   - 5921832934345276446697/38926432130826240000 * n^12
   + 58559280970406047561/1064394628577280000 * n^13
   + 707308930074513293534401/1284572260317265920000 * n^14
   - 174465694566990976559029/168307400643782400000 * n^15
   - 4693110873155601006258565965271/11118435359059650753331200000 * n^16
   + 676391985485095809371733839/171665565696943718400000 * n^17
   - 2198445417091794111397602386175901/542023723754157974224896000000 * n^18
   - 53363941504564359044259819052979/8957723800023644405760000000 * n^19
   + 3980756637943323854029497343795084553/210875756104775565551075328000000 * n^20
   - 57605246865079073769101876100784936151/6705002845252607315528908800000000 * n^21
   - 131556990309544385502695007449463535506251/3577507202317517469573992939520000000 * n^22
   + 16563201841502261061487372612686514822354259/246931844784963022216298653286400000000 * n^23
   + 3716622905750730591889081511594229480962791354087/1091129684472639151636059353184731136000000000 * n^24
   - 2213908725034918327552841712951816333387504312678259/14018459110275430350511715674314768384000000000 * n^25
   + 17011573703835625757730804229750060144161108086423592979/91512501071878009328140479921926808010752000000000 * n^26
   + 682892898514410238829628389193295165408986121549166351/5831466588978968792019684149065332817920000000000 * n^27
   - 155436494065578924089463413379949231968540857163058763243101/289553023799672787066018367491745557428305920000000000 * n^28
   + 165551112077463450636444122527612450331221233114708176183743/410124712616255283555227578330105230951186432000000000 * n^29
   + 1403124695221106030113716236806514839242351489435235474477081785401/2304047825501112882590584116852264779065289280061440000000000 * n^30;
alpha[9]
   = 21091646195357/6080126976000 * n^9
   - 67196182138355857/3379030566912000 * n^10
   + 395018924202597949/15446996877312000 * n^11
   + 91220875613845291081/946128558735360000 * n^12
   - 4988552993547340999703/13876552194785280000 * n^13
   + 2274808037645071351151/16571805601849344000 * n^14
   + 535711648203373741428799361/367673126953030778880000 * n^15
   - 27678709003769097826752781127/9651419582517057945600000 * n^16
   - 5280108162364963042999830777751/4014990546327096105369600000 * n^17
   + 1174431699627195631670489145666649/96789950670385352540160000000 * n^18
   - 1183738252014628519027860764867029/93856921862191857008640000000 * n^19
   - 40137685403486395923628481749776837043/1911061539699528562806620160000000 * n^20
   + 287333201658715623813482736998287053515959/4357220310514925123199093964800000000 * n^21
   - 106257838315599820564882015419176890518173209/3950909516559408355460778452582400000000 * n^22
   - 90892763520143573996692682431035087078662489897/622420206916436023998744174683750400000000 * n^23
   + 201524866709123266853440470935579547318921733655003/778803283904190575028428648573042688000000000 * n^24
   + 10814621264427896099430746759393142670689600538379/246140297135151589144787325968764108800000000 * n^25
   - 530693286808080774017187055905756612819533423821542721/762604175598983411067837332682723400089600000000 * n^26
   + 528646912311960943475639104830106896257711233429178692933/691427785876411626034839181632335882747904000000000 * n^27
   + 1238335239482617295952056865714588188866564716732256454849533/1822776500516690149134344792578245470894161920000000000 * n^28
   - 65933487212841390272205814518074033193900839255445948294377851/25518871007233662087880827096095436592518266880000000000 * n^29
   + 162727413247772587683519571850133568153397325055616238461382829/98282138338670185068189671924151343633347379200000000000 * n^30;
alpha[10]
   = 77911515623232821/12014330904576000 * n^10
   - 268897530802721453/6758061133824000 * n^11
   + 8257746726303249815683/149866763703681024000 * n^12
   + 323404376453879141969/1506527781986304000 * n^13
   - 565045774309646240886321061/661811628515455401984000 * n^14
   + 606966182513981199158868163/1723467782592331776000000 * n^15
   + 75743290339815584481785361977/19854348855463662059520000 * n^16
   - 22241327027192487028642722150343/2823040227886239449088000000 * n^17
   - 1526410847130700516846978043440307/394199071821205799436288000000 * n^18
   + 1980853898587532814589028918136701/54202372375415797422489600000 * n^19
   - 32336501755791644291373778373511296903/833917762777976100133797888000000 * n^20
   - 9178264588912399043908657569412179727459/129878682332656421941511454720000000 * n^21
   + 1806166894952081193938559978698482758385827197/8083379310603065246736937333555200000000 * n^22
   - 361654991248988355171855093660297726396047881/4322362548030805722213501213081600000000 * n^23
   - 105020035995730778911321036642305474913412418767240671/190651043899745852766959333170680850022400000000 * n^24
   + 2294386994267351811538453796616269131419043757692511/2383138048746823159586991664633510625280000000 * n^25
   + 2743769449547669368889674700489658732983220398593193929/10458571551071772494644626276791635201228800000000 * n^26
   - 23157882459582328183252760859500524302121767786137065570859/7994633774196009426027828037623883644272640000000000 * n^27
   + 89430614800491857673988760128056842290692364119137870498038657/29634817943884252747216444369659216688085729280000000000 * n^28
   + 2567130086431563482452599790796650371294900574502194735538864809/746426976961584616070514192560791520331159306240000000000 * n^29
   - 509038828002331582891050965787949294310918940649244811719555481648577/43567449791293770870803772391388279458689106386616320000000000 * n^30;
alpha[11]
   = 12809767642647461/1029799791820800 * n^11
   - 5303630969873795374429/65282870552739840000 * n^12
   + 505329992704194411750631/4178103715375349760000 * n^13
   + 902773043678795981447423/1880146671918907392000 * n^14
   - 52457275102567933937177869/25762220537492275200000 * n^15
   + 67595745292234822704267032563/73325720204837388288000000 * n^16
   + 81338369151994478217697814085661/8212480662941787488256000000 * n^17
   - 19217318226298386878750945280512161/893107272094919389347840000000 * n^18
   - 1873245185945872710662470867765863817/171476596242224522754785280000000 * n^19
   + 476337982883129731566963871315011795997/4406497269224532801843363840000000 * n^20
   - 8440994919935476843536233253371860518791717/71444009058360425160553739059200000000 * n^21
   - 33526203318350561460792162793779755990401717/146245349369463351503464326758400000000 * n^22
   + 710399978033562118273811779126576411439704335403/961922137961764764361695542693068800000000 * n^23
   - 34930525249908548784563565768397098265832106510929/133733897236073129045285727532744704000000000 * n^24
   - 23048480004933480948529688590232835511983254849209969/11554608721196718349512686858829142425600000000 * n^25
   + 3343638043167525209592261539785084441516908110518987/960960215823802999597333847150375731200000000 * n^26
   + 3245082101525034287044377973345367353808255099669736817511/2599324777920413759906374035762203880062976000000000 * n^27
   - 1563650841338021630530049879900135725592709642522865259185153573/135713995811197202921911671374689367332938055680000000000 * n^28
   + 100228142507845651554674218817828912081709008921929406668291104191/8685695731916620987002346967980119509308035563520000000000 * n^29
   + 1348681612012517778664036601950009019623074500848299186242899657141/84859828283817488489232796254889378316274578227200000000000 * n^30;
alpha[12]
   = 2240624428311897034834681/91918281738257694720000 * n^12
   - 1694308924283012695547/10043518546575360000 * n^13
   + 2898270966023179721324929303/10754438963376150282240000 * n^14
   + 5049523426723058614103389/4683336365740032000000 * n^15
   - 293488823111024724225343654073741/60224858194906441580544000000 * n^16
   + 15397766080743841984369762728863/6297551277592380309504000000 * n^17
   + 5863952550107110495571900519504737/229656155681550700118016000000 * n^18
   - 1430933931370883795713846515020911423/24472734089815246481326080000000 * n^19
   - 1870907814706500734631241404968509423277611/62870727971357174141287290372096000000 * n^20
   + 85087672018039782610988182307863449111159229/270147659251925357638343825817600000000 * n^21
   - 17181221423420856035067255437638564537594025459/48096106898088238218084777134653440000000 * n^22
   - 29840743030792811125826874514052113793829046631/41332591865544579718666605350092800000000 * n^23
   + 233752394874908577315877184530185132629657928559209871/97769766102433770649722734959323512832000000000 * n^24
   - 201646398092527015113891771761912798737265288328930229/244933632787867935846440809976221925376000000000 * n^25
   - 1478405663522054837879701822965363491041325865689756503513/211622658728717896571324859819455743524864000000000 * n^26
   + 321386243763712289433592425205485189709512429739435078423/26177282004203385643588361566208718274560000000000 * n^27
   + 2818199590151532790384019625468928958215697625600921714777625549/535252958269371601439920541444153022982568017920000000000 * n^28
   - 11378071070442404926793965546213173776855685042822972281764801951/257713735203578688495924900168357493335389739417600000000 * n^29
   + 26391837116130703226086300212905604518448450453630780847639554556493/613134590884340253673783066835327045013588110475264000000000 * n^30;
alpha[13]
   = 1987049611350093295679/40852569661447864320 * n^13
   - 49990807275475500894703/140691247558557696000 * n^14
   + 620844046443235040902108541/1021314241536196608000000 * n^15
   + 30593679475357306372670316797813/12595102555184760619008000000 * n^16
   - 785749129848932618333134357025453/67173880294318723301376000000 * n^17
   + 275581708051003997988541817255279573/42168403354758578552438784000000 * n^18
   + 642193387846955979009281483738217042761/9813737508016541917658480640000000 * n^19
   - 10379707152495210640484367519099555203413/65622913178605350033605787648000000 * n^20
   - 28662530127283669901885121584468088960326233/364665822910787579541585710284800000000 * n^21
   + 4609055620394562855489493272499773205216196129/5087088229605486734605120658472960000000 * n^22
   - 873057563036453343326459102080494704028393390097/813934116736877877536819305355673600000000 * n^23
   - 19289084079854993646765928794776984023563835229561783/8695868619687619024133993253593677824000000000 * n^24
   + 1182490481385670104330958793922877551368861956689593353/155502591787355069608043173476028121088000000000 * n^25
   - 293417158736416271896554762676460700877470285796817656847/111689736551267778745977009349157197971456000000000 * n^26
   - 39859038349761443605955883817872550236932196068750468867903/1675346048269016681189655140237357969571840000000000 * n^27
   + 26244234609643418748414712844720424679053976070350152552610637/618202691811267155358982746747585090772008960000000000 * n^28
   + 2077245025145718452430941958359096421872386057259172217716184873/101286329026358010734015733227124341272085948006400000000 * n^29
   - 191207856187024789574592797220884621637003872633248259491607835405551/1166134827662716367083406640577189322150843540884684800000000 * n^30;
alpha[14]
   = 10469176753142937388346729/106216681119764447232000 * n^14
   - 2524263545672345614192283257/3332037713011841433600000 * n^15
   + 28798233421533175181823218687239/20791915329193890545664000000 * n^16
   + 13912456133127892258104161571997/2535377787082646618112000000 * n^17
   - 5642793384271167571209335562965961618499/200480637663766499175023247360000000 * n^18
   + 2416612854960792848747357744110015450361/137830438393839468182828482560000000 * n^19
   + 37531174405336506824031127490381559959133931/224939275458746012074376083537920000000 * n^20
   - 2616330145733138560090205392154735810050979/6139719528452849037235086950400000000 * n^21
   - 68829610700469773329308127037458237442895425239/341327210244497174450924224826572800000000 * n^22
   + 63069353283833076130495586379466422512525299809581/24468894384402391193450630367254937600000000 * n^23
   - 714098347019839680389819042844541592537678056730181857/223156316785749807684269748949365030912000000000 * n^24
   - 2661752462851196865891091928419385880894607083642023593/398891916254527781235632176246989992755200000000 * n^25
   + 5961320530838574206567558505826389702787945152445692779/250285123924409588226279012547130975846400000000 * n^26
   - 94590092745211556049112510107228668331259876881195561421/11150842204387935702723354017813583888384000000000 * n^27
   - 17802000569076164486140040573046212865608178116650965279535007359/225025779819301244550669719816120973041011261440000000000 * n^28
   + 6231272989222159551881242282050573601231377672788471696790420989/43196913090312292480708919428987508217694126080000000000 * n^29
   + 422268052780700950950541531621666843181077037988763165839750231840343627/5605286734647678672031164692522288170338508448622182400000000000 * n^30;
alpha[15]
   = 100206984674719544740861653301/495045603076045012992000000 * n^15
   - 36822741875265270244508239254871/22559228132175371242045440000 * n^16
   + 179792631498449481362046446075850677/56496153931013103632252928000000 * n^17
   + 1198746750769645158859022771229488225047/96481306875687627727979937792000000 * n^18
   - 712415136407467601227112286139274196716669/10497166188074813896804217231769600000 * n^19
   + 4324780012493436320334302458159540323213361/91850204145654621597036900777984000000 * n^20
   + 1555975364258875353541471977713778721787643043/3674008165826184863881476031119360000000 * n^21
   - 1749084094448959255650030230541491009564819115959/1529305899025149449590664397953433600000000 * n^22
   - 3736902111701391887100479481424584566863791566838269/7438543892858326922808991631645501030400000000 * n^23
   + 160288079478771431803467565454719360005157928068793941/22073070464677426629639725167817628057600000000 * n^24
   - 205505625990694957725950514798454096070237493947357149/21661039816003447999219783631351699000524800000 * n^25
   - 12495724210779737453458596500764106334450954721020624496477/634054042883350928573315637689830862330265600000000 * n^26
   + 5055693252244555496228110569294083881781629217112771929053811/68689187979029683928775860749731676752445440000000000 * n^27
   - 3183992173345900271685562628167128755396195058359564971811781053/115191768240832779948557118477300021913851002880000000000 * n^28
   - 5698640861911756799224037518645406078168295920245835514736969952989/22116819502239893750122966747641604207459392552960000000000 * n^29
   + 142278670225215087706896520822001994673082990276889571404960221414791/294749152212543199400677229925300609918641519984640000000000 * n^30;
alpha[16]
   = 7712781743942384637654934879373/18338215136419449195724800000 * n^16
   - 2402063456298622602221186822696471/676776843965261137261363200000 * n^17
   + 7668107436276322919714287100049904599403/1041385534531231537381370757120000000 * n^18
   + 361303680860095904135414295125524607/12819051189903224347361280000000 * n^19
   - 7227390188103426658110578949868094476645931431/44088097989914218366577712373432320000000 * n^20
   + 12901408373363616730918554960524450439118853/102117113984051111751513381273600000000 * n^21
   + 497747383538267321534956030212997835594308172021801/464908993303645432675561976977843814400000000 * n^22
   - 252499664598382602456303781455085911751340300461/82547761595107498699496089662259200000000 * n^23
   - 131281534185888595153825331846748525760537617955805958541/108305199080017239996098918156758495002624000000000 * n^24
   + 1426262784250791324747799093000080956187589936714029719/70320626514158153080237367679905483980800000000 * n^25
   - 23170473116883805794188278794166757632616659619691851519/828740273599081251646377980227632916070400000000 * n^26
   - 44044500279817699335584829646278793104954720796019992410409/769175802890176148160771357353766171967488000000000 * n^27
   + 62420418657558519149643437875852556019705678659537976085016650961/277762254345241993722109472497853742008909168640000000000 * n^28
   - 109511822578379305705407097075954475716527637153298910483976431823/1209513566528744189459849744011650230095435530240000000000 * n^29
   - 168398596910687560076596170666837371522448204565539850254693515405079907/204359412200696618251136212748208422876924787189350400000000000 * n^30;
alpha[17]
   = 136336614071421552738346511544707/154416107000986498341273600000 * n^17
   - 27801197719443334715141091692509100501/3573381736136578804739997696000000 * n^18
   + 576392411336288932474450636964598560303/33631828104814859338729390080000000 * n^19
   + 556540535711605007979630683151193569919453/8691707297670641941407583961088000000 * n^20
   - 301243011881263087198414763542811432614781470369/759655217816414105679022838199091200000000 * n^21
   + 989789926631181163755007364622407618669102051/2925597777633984541291825940398080000000 * n^22
   + 2103270728132227977532547099652140536893417990637/779966854656425178023381737616179200000000 * n^23
   - 149750803535199564120198336297627481136417850061461067253/18366093042521305863309053676398844051456000000000 * n^24
   - 827633945205212562322541676028753996760694367358637422131/293857488680340893812944858822381504823296000000000 * n^25
   + 10871559511195696848205970321319912766271482873182818466013/193406204284510078070764728510649051643904000000000 * n^26
   - 1185910777714920025608418139877185236744968114328617926870881/14478603348520962788908637314894422060564480000000000 * n^27
   - 1794514783827843337644294958827668476221297946256830260008605439/10945824131481847868414929810060183077786746880000000000 * n^28
   + 128661408285411985453738219706261617148768669184661116871488103229/189555919076956236027138549181277523417671663616000000000 * n^29
   - 1855414703915628112302305459595288498254055876861869243258846990726549/6247526147877631344159452657828430574942185943203840000000000 * n^30;
alpha[18]
   = 67752028110741493306780180177177973987/36222105548912401300221591552000000 * n^18
   - 5545658735018547601364002065686581343/322869656256540697864175616000000 * n^19
   + 6903145472582253547590916629983711429839564343/172188516038387197287245176658460672000000 * n^20
   + 2594359997714507009889054556821919665165991039/17814495239540271366199495675084800000000 * n^21
   - 2653661574489733699865151526666294107005175728022119/2762887731633092857043339748896900382720000000 * n^22
   + 223899545504288463905906021765274294443981546647858717/247796493430843015616074533729190753075200000000 * n^23
   + 144506895392063363464005464205241390539753389057581011317/21348620972503398268461805982822587957248000000000 * n^24
   - 199508703723852397940714471767792646467211904185547826559/9208240064528857740794868475615606996992000000000 * n^25
   - 123747223374921892225259794899435553979183207374624389411529/19856370306543034681931845460426635968774144000000000 * n^26
   + 74365730590824979951370872254622112553384627249684845833999/480734876806360092600482098346103857479680000000000 * n^27
   - 453806568576657850636481186180714169477831867390896126354437393759/1902140993515290007355661135881569592628719124480000000000 * n^28
   - 129377367350744075863584786744687343612005128384626716428469495967/279376958422558219830362729332605533917343121408000000000 * n^29
   + 9812276168495581890730160638055577559800537496316269869797927437190396177/4833641563655724730627900082998991975493047684412997632000000000 * n^30;
alpha[19]
   = 471824901393496747102665687245792177081/118103493571358059411833618432000000 * n^19
   - 50561675675044750669650971499055765086319/1324934718670261598085912408883200000 * n^20
   + 67251111238362727892454291277989954473027123753/714019364752482795768480796350873600000000 * n^21
   + 240180124848943302649869868199872368699919588928959/724551150382581917006065888097048985600000000 * n^22
   - 485940263706654462038872744309833664639315267073048459/208670731310183592097746975771950107852800000000 * n^23
   + 1699999199365185300098132938338874634674993023922086094213/706611263899109188740995696707766052716544000000000 * n^24
   + 18316002921325135783401359443916180813949011876130693396319/1081422456054288845377523848874494132853145600000000 * n^25
   - 1070798289679403964467272203329695220087675802370874334174677/18654537366936482582762286393085023791716761600000000 * n^26
   - 66905570444410496337928253364613460714163911189816744933/5208993291563945942641955456499557439897600000000 * n^27
   + 639717024183652714810791734101835747576462370463927529907834770743/1512416617024375325397452369319368303913436446720000000000 * n^28
   - 121315610544001063260669429484399550327396846073348792749387872304069/175562790458797122792695361672570558744154047774720000000000 * n^29
   - 2310657553908327208643487025983368468395539176694805984465325989447845451/1788765381287069184854074866241403280404499554264678400000000000 * n^30;
alpha[20]
   = 202399116895368048088234707551711981612353729/23547147492429018432443784842182656000000 * n^20
   - 3365095273417630466576291762515903066833421003/39463570282275703540635396955176960000000 * n^21
   + 2717825461890719651841152458000965236132994648134207/12236863873128050153880223887861271756800000000 * n^22
   + 167575736694631175164505551372730340638238831166089517/221984358698463534822733436465733382963200000000 * n^23
   - 1780457197357285934359849612457829809553519546045920132315603/315054408863816150286651947972102624037883084800000000 * n^24
   + 31433611667605561414091907198192986558131456317053607536179/4922725138497127348228936687064103500591923200000000 * n^25
   + 81043708724580147220822100302291795209006507032171545390245907/1918125371612057150274616271477213034583582310400000000 * n^26
   - 1577108197581107731425828348589622362098940512581130343622369/10399988029071674998896733424633161124413440000000000 * n^27
   - 5514916654831738928837454570878277449201710700255298388849026950313581/235404621606609970647462666379821037767518556059074560000000000 * n^28
   + 2277087194186373183792618936007821692864753094815436081352010122233691/1980567729863305041505094548868686615832487851458560000000000 * n^29
   - 143439353635410339941300281453638717803865413230045426199413290694870693/72062639267329582851264081544843174826791394711961600000000000 * n^30;
alpha[21]
   = 7593597428771861155598510033855442354788700917369/407895462437601671796007462928709058560000000 * n^21
   - 45805642625336613066067381416091711616993807717957/239175066611139162098568012353652129792000000 * n^22
   + 1990618787705329951428358040285346629497792311202946171/3788533055120444327641317315681849735905280000000 * n^23
   + 930144112851858298709480062321695584642393218056377949791/540958806428255752552630405171879505559552000000000 * n^24
   - 752902102022542070422923926458337877174355061465216481203/54858440486545321043175068539316832105922560000000 * n^25
   + 24990276016004332532181513229852654837023995611735929270423877/1479326420770302763580519691998352523776334233600000000 * n^26
   + 1273703517934435922639076948106483178914355724092343511679304023/12119166110998363411723475629310149719087906816000000000 * n^27
   - 387147736345336231749751695652681175080211230836264638568453074861881/968987437728821283747116150252959580864281690767360000000000 * n^28
   - 26472588474688318840378923145456844687860042284441254323438583079847087/823916175623134897266119332329373632186314946206760960000000000 * n^29
   + 489733176366105123100315909250683812497390264686335645655218001765029594209/157573968587924549102145322307992707155632733462043033600000000000 * n^30;
alpha[22]
   = 2439323846938124516749950544509820877337338687175781/60135445319372132184782814534632535490560000000 * n^22
   - 34073601205416895076590748626649694428085903921401/78848923058617306186341102973731471360000000 * n^23
   + 114050797567384263375075461734480044074661222373269471907217/91493073281158730512537813173716671122112512000000000 * n^24
   + 137273833008580661426413574856400098350445610433824603561993/35055769925661361419206064286668615837548544000000000 * n^25
   - 45059179088074031893922072777375249940924991766835661888221084641/1351036625382288628601140188130286029427907231744000000000 * n^26
   + 206898006671113514273360240583654940027344524273411544491451421031/4644188399751617160816419396697858226158431109120000000000 * n^27
   + 2440824507911814657571898799746797396009020312235697337059397039885469/9362683813899260196205901503742882183935397115985920000000000 * n^28
   - 696311481675417712820466561405304148537325788366564328711011454870887/663190103484530930564584689848454154695423962382336000000000 * n^29
   - 6924245472208385163375477930704649011923426449727911613839020300441563381/3208778996699554454443686563362760582078339299590694502400000000000 * n^30;
alpha[23]
   = 7474565215206746325580483864591180104671541156913/84105517929191793265430509838646902784000000 * n^23
   - 16782060552985470049913293468183373087712600299046298630661/17138376408101110027167409206815767742801510400000000 * n^24
   + 6503735528674785551831538506800050725715065676154256817241867/2193712180236942083477428378472418271078593331200000000 * n^25
   + 43999179965065941867057377378097709899255133565469268235339039/4935852405533119687824213851562941109926834995200000000 * n^26
   - 320196265269217417773345496488501328010142269670188589023798556437/3948681924426495750259371081250352887941467996160000000000 * n^27
   + 123832182350468652680214620379816199199842965715033754557125222024173/1057259585265194237131946607004781985746328055971840000000000 * n^28
   + 223366335034930390488779600823060385213901770612295015887755022091478569/346358240132877632084425708454766578530497071136374784000000000 * n^29
   - 5683975145729510214638167363294386038771152028333168572495195332205249204543/2065161006792282881303388286661545724488088786650634649600000000000 * n^30;
alpha[24]
   = 39494178711472476796003427487122912293893944185276935843160849/201821520581798671679923410819462480939230586470400000000 * n^24
   - 76348957557716638341723622087037389639067389665177807014579/34276752816202220054334818413631535485603020800000000 * n^25
   + 4701748482852793217057834734347787548724108110072753226999643/665345672247687928615132123580645541557903032320000000 * n^26
   + 679403733200977595115362734887022205196905112342852746889825923/33505525877837670103112284999324825937176952832000000000 * n^27
   - 1551880057739501281928982393705767292741074023417989103820403149655498881/7867890886969072136238806216750253141927340875196661760000000000 * n^28
   + 40509752985115825377187326802004288703338863504362380792112685460851409119/131940842100618072972160918314487643508961228036012769280000000000 * n^29
   + 930119149078652355869135614976346780332901622265792177140238904719349791424829/584599423461200077168959145762652943547397441144179654656000000000000 * n^30;
alpha[25]
   = 8740098043964194699013511747075939410275887707894105297617/20190228149439643025202422050766554715809382400000000 * n^25
   - 560970870667805373435462259322216583674714967329353232405989/110325175245152335101998949063117245411386982400000000 * n^26
   + 37599914809270379883026138747614917048973558104768871252051312999/2227899902526348973090063625929131283095402577920000000000 * n^27
   + 62112464645162326712991624734748037976412787406014636486771832698244341/1348054580849226799204709254809580010308671550814945280000000000 * n^28
   - 337728148943314333204134420372420356729249456410758236907291010482662683997/703684491203296389184858231010600765381126549525401436160000000000 * n^29
   + 9318731629311992919328873307373838077895502043140333484055412345740103859247/11610794104854390421550160811674912628788588067169123696640000000000 * n^30;
alpha[26]
   = 981053882391585426104317525561993317308039476510023968359/1020137843340108279168122377301889080377737216000000 * n^26
   - 804535427693867223518181752525105894684868959294094526147221449/69088598041109651665505696484929975427905303347200000000 * n^27
   + 1850220524749669257030657681847129002392911081379585567459419325323237/45823979891138552002269970273380595222214183119277260800000000 * n^28
   + 4964057679773584492591452849477564911024827566211763096636472333282359/47482084426673170660246844197746340444070617376882688000000000 * n^29
   - 4451537474316831472817032033079424859226655324781227836739835901181143999400077/3810722167747081984508770727934330298679331468199097008128000000000000 * n^30;
alpha[27]
   = 219796242799180006558858282267295702822729406335181729959735197/102474606956438773279014366383959253494644552499200000000 * n^27
   - 1991862922927036259097631233677478784353889919238496520767270708775317/74463967323100147003688701694243467236098047568825548800000000 * n^28
   + 6916252182087743491582730686935092456222021350509646835638283740939656053/71485408630176141123541153626473728546654125666072526848000000000 * n^29
   + 4178831185325638216557225776185254600956561244767568179257086044280129070299149/17648407039378673440756244433745867195758653862097068018892800000000000 * n^30;
alpha[28]
   = 215719482708468448409738976464239418783926747463596671692384366197697/44929100822557395094481533143462725012487441496072519680000000 * n^28
   - 278069851593691889742988308687280247895937313870882245850732354899927/4512967716551524060829618284499604074915033185989427200000000 * n^29
   + 10456333895529602975165309445620837322364136333954987435106098028819923116751/45038779803274177894987830782750235833811918467990185574400000000000 * n^30;
alpha[29]
   = 27323334865827529185376977771399500293634233810796735936299404584293/2533595911046469648185048861473461936794404595643187200000000 * n^29
   - 52262641147658201267292303345886757439639836488719164781023668387608491790413/367286072424459165080994152236686477795330009828475136901120000000000 * n^30;
alpha[30]
   = 138503251037159093918050273397984791664345186887370360837473296764761046660471/5699690220901306106942517947753261728997763363224497107763200000000000 * n^30;

Krueger, p. 18, Eq. (26*)
beta[1]
   = 1/2 * n
   - 2/3 * n^2
   + 37/96 * n^3
   - 1/360 * n^4
   - 81/512 * n^5
   + 96199/604800 * n^6
   - 5406467/38707200 * n^7
   + 7944359/67737600 * n^8
   - 7378753979/97542144000 * n^9
   + 25123531261/804722688000 * n^10
   - 9280258847/6437781504000 * n^11
   - 1628053924171/99584432640000 * n^12
   + 171201246542931467/6186450514083840000 * n^13
   - 5718183564876629179/180953677536952320000 * n^14
   + 644468750008654952687/23162070724729896960000 * n^15
   - 212771552062192641437497/10336074060910716518400000 * n^16
   + 490410367787088228908921/33923525122989018316800000 * n^17
   - 17113867364186490261786648857/1602504922403597489012736000000 * n^18
   + 395980314414341959891853827859/51280157516915119648407552000000 * n^19
   - 19481411440513215539899023606263/5115195712312283184928653312000000 * n^20
   - 135570116300721989060886034459593007/108032933444035420865693157949440000000 * n^21
   + 11080348232555971953029572642513796537/1863568101909611009933206974627840000000 * n^22
   - 250868515348150853528597220771122960249/29817089630553776158931311594045440000000 * n^23
   + 961059950401200029458005065879527529605493/118813647905349159549301543874372567040000000 * n^24
   - 4018789334131226157542250009395235956239124497/659019700381670004966792563356519838515200000000 * n^25
   + 2391844895236730308938558863293259934461956219/570305509945675965836647410596988321792000000000 * n^26
   - 1573270095968198180509050797007198841027307027401/474494184274802403576090645616694283730944000000000 * n^27
   + 2061253330556904530218418240686914940538061818436749/670816153018501898055698150240601543624622080000000000 * n^28
   - 2710857345655764890042245118743890636519888766789337/1100826507517541576296530297830730738255790080000000000 * n^29
   + 455119247458368582897233478322666951033511063680152518561/460521387375865357577946377396084237894154190848000000000000 * n^30;
beta[2]
   = 1/48 * n^2
   + 1/15 * n^3
   - 437/1440 * n^4
   + 46/105 * n^5
   - 1118711/3870720 * n^6
   + 51841/1209600 * n^7
   + 24749483/348364800 * n^8
   - 115295683/1397088000 * n^9
   + 5487737251099/51502252032000 * n^10
   - 5845886411021/41845579776000 * n^11
   + 6339155669701909/46867049349120000 * n^12
   - 3825933403819459/36248733480960000 * n^13
   + 1576089193435485637/19579096132485120000 * n^14
   - 796020536210393262877/13672055636125286400000 * n^15
   + 2472784862443506933077081/82688592487285732147200000 * n^16
   - 1031884087773262337231/259769057086380441600000 * n^17
   - 3043575175820301204619799099/301647985393618350872985600000 * n^18
   + 1240087853302816440305681741/76309758209695118524416000000 * n^19
   - 162802157643900956474519187209659/7107429831844435583269286707200000 * n^20
   + 12816799444007020333086273455167501/404420161004689889308421652480000000 * n^21
   - 8434093090274924630876141677262180833/219243306107013059992141997015040000000 * n^22
   + 4577121708190925068719017020286339507/116473006369350688120825435914240000000 * n^23
   - 3765607524414111763649498176471170518355049/111925900200691237256588410896148070400000000 * n^24
   + 1131301743028144854789954188008691387730629/46411581213027015448945915575926784000000000 * n^25
   - 460026540064989874633511523684594620842417879/29318721223109392213055526792924758016000000000 * n^26
   + 604271886240145180390884566623502375996747842517/59723660347088844200115576054184610365440000000000 * n^27
   - 935636652514721565914189601103950324131311023910747/134163230603700379611139630048120308724924416000000000 * n^28
   + 13991916555135286064709925920796585055379160510097/3716480422922153591658662648136502628843520000000000 * n^29
   + 551187495544637127580837409130179426064488050021383801799/558977683987257261611852154632488454271525086822400000000000 * n^30;
beta[3]
   = 17/480 * n^3
   - 37/840 * n^4
   - 209/4480 * n^5
   + 5569/90720 * n^6
   + 9261899/58060800 * n^7
   - 6457463/17740800 * n^8
   + 2473691167/9289728000 * n^9
   - 852549456029/20922789888000 * n^10
   - 2673218294321/191294078976000 * n^11
   - 1619588070701683/35150287011840000 * n^12
   + 799518679601909/34085126799360000 * n^13
   + 29003748875152374779/473263464327413760000 * n^14
   - 1018892483578870404121/11218096932205363200000 * n^15
   + 481644368636077473383677/6234457370073130598400000 * n^16
   - 723295134325860384163989341/8379110705378287524249600000 * n^17
   + 18449123896439664237491327/175105254678958021017600000 * n^18
   - 9545551652020360064000248463489/99543835179894055788085248000000 * n^19
   + 1624734283470807394728668252816369/22704289740614169224332443648000000 * n^20
   - 2700625783869782207997557873010304073/43592236301979204910718291804160000000 * n^21
   + 115833584495328576175632817607784109681/1863568101909611009933206974627840000000 * n^22
   - 80331805706465175347621476210358062805003/1550488660788796360264428202890362880000000 * n^23
   + 521874000525184838244754419829212765128887/18500148793502683844064200148123648000000000 * n^24
   - 381143434387098814023111575357004480524467771/143265152256884783688433165947069530112000000000 * n^25
   - 3524924454475074760191004058569251720124879785757/215005177249519839120416073795064597315584000000000 * n^26
   + 38831080481512203835364300143596202089804731885903/1433367848330132260802773825300430648770560000000000 * n^27
   - 8744571180068348778510935237066929988537179992179467/279936740778874830534781728081174105704890368000000000 * n^28
   + 924277626444402405054252433779774364643696474585704740403/27948884199362863080592607731624422713576254341120000000000 * n^29
   - 126306569153879537470902727265265301493989903234598946584327/3458674419671154306223335206788522310805061474713600000000000 * n^30;
beta[4]
   = 4397/161280 * n^4
   - 11/504 * n^5
   - 830251/7257600 * n^6
   + 466511/2494800 * n^7
   + 324154477/7664025600 * n^8
   - 937932223/3891888000 * n^9
   - 89112264211/5230697472000 * n^10
   + 12003335387/32691859200 * n^11
   - 537877266968267441/2249618368757760000 * n^12
   - 63357208977773989/597554879201280000 * n^13
   + 887398150788484759/8825425908203520000 * n^14
   + 2384026112354539199/18578524426076160000 * n^15
   - 367013781018742745596861/2656100181332931379200000 * n^16
   - 116368807092865455691/7292981549216563200000 * n^17
   + 13509292858664313453220237223/388843106171461155422208000000 * n^18
   + 12614093798238667596568634093/279480982560737705459712000000 * n^19
   - 42830094113304502651660706556769109/1538549516540442526260645593088000000 * n^20
   - 1668094745107834360626912832785989/31436708871619618925998768128000000 * n^21
   + 324878397379290831787720619212058141009/5100291647331566974554040141086720000000 * n^22
   - 83347374922531563076841834327924641529/3028298165603117891141461333770240000000 * n^23
   + 61194082538219225945927920756047806920251343/1628013093828236178277649613034881024000000000 * n^24
   - 98047007466353520331537046826194116951241/1156259299593917740254012509257728000000000 * n^25
   + 1493069566723126691789414021618816357112902099/14163713916305654751015551633403464908800000000 * n^26
   - 428919341299773794465717432164006775623731672469/4733778760465280548815978897476564287488000000000 * n^27
   + 17024219401413321980501656137013731587720179574723869633/238879352131306522056347074629268570201506447360000000000 * n^28
   - 1999391624298578429684484594521785906724957573844027707/33592408893464979664173807369740892684586844160000000000 * n^29
   + 11744245649394563850890264467671937396646650052934109768653353/235189860537638492823186794061619517134744180280524800000000000 * n^30;
beta[5]
   = 4583/161280 * n^5
   - 108847/3991680 * n^6
   - 8005831/63866880 * n^7
   + 22894433/124540416 * n^8
   + 112731569449/557941063680 * n^9
   - 5391039814733/10461394944000 * n^10
   + 4863559943251/167382319104000 * n^11
   + 37588208648677/67596705792000 * n^12
   - 940430600213372183/7648702453776384000 * n^13
   - 3291872437542629663/5190190950776832000 * n^14
   + 189272332747364970877559/523171247838304665600000 * n^15
   + 502532269819919668347149/1208525582506483777536000 * n^16
   - 949451228897166389540897/2708180577045341798400000 * n^17
   - 1784576325496520253476120683753/7154713153554885259768627200000 * n^18
   + 524830142025358848902662672939/2071953130441233740385484800000 * n^19
   + 2016209403231616185652826723458583/12019918097972207236411293696000000 * n^20
   - 16096897691007333935470338878197156361/100005718575128764206941963550720000000 * n^21
   - 76250060255013791707276485885487883543/490412658397266055245580782796800000000 * n^22
   + 9252161795915253082728155240170650043693/58289047398075051137760458755276800000000 * n^23
   + 7020751793938461613149395590976276678732551/107300863002315566295572360859117158400000000 * n^24
   - 579414190481675218910106244870862973300742643/8393311950403350963564771338313164390400000000 * n^25
   - 14173007029062232289088502554662276328011078147/150540045053305816210793863075031112744960000000 * n^26
   + 772937441939971334194668845837513587924053359303309/7321000085750240746251238393754144640860160000000000 * n^27
   + 49025366795674025628029223704689793073534968814712031/2399457778104641404583843383552920906041917440000000000 * n^28
   - 669686609255507094686692239475289306509135059892997117053/9137135219022474468655275604569522810207621611520000000000 * n^29
   + 40227222695357598417206145371640258351589316954641039386851/1130720483354031215496090356065478447763193174425600000000000 * n^30;
beta[6]
   = 20648693/638668800 * n^6
   - 16363163/518918400 * n^7
   - 2204645983/12915302400 * n^8
   + 4543317553/18162144000 * n^9
   + 54894890298749/167382319104000 * n^10
   - 132058444054073/177843714048000 * n^11
   - 21678380925301381/85364982743040000 * n^12
   + 12818665941423773/9855505820160000 * n^13
   - 4808615626581842484821/26158562391915233280000 * n^14
   - 17463465220672744627/12110445551812608000 * n^15
   + 165202773463857304705337/353370053364468940800000 * n^16
   + 812997634361998476236143/536189976806503219200000 * n^17
   - 154619327801320908736885805799083/176116016087504867932766208000000 * n^18
   - 161959155482489360388164840926603/143094263071097705195372544000000 * n^19
   + 9349367148014299101273724109539769/10684371642641961987921149952000000 * n^20
   + 131732029936307954433180838298519269/162769724243373639659736268800000000 * n^21
   - 8489365993766826694602346374698947667527/12000686229015451704833035626086400000000 * n^22
   - 235155180584267064004207367582121161331463/369771144431538605655167910228787200000000 * n^23
   + 10739171442634029743650624432194704913120097/17833938449138321267962165239742464000000000 * n^24
   + 1762807308141499286674865995442897164018384597/4035617016594442070601857542605766656000000000 * n^25
   - 558496189945509263731011585527531303192423984003189/1264536378447768856170668449830261347057664000000000 * n^26
   - 97808507187022352611022156010465649331807161947569/289789586727613696205778186419434892034048000000000 * n^27
   + 32615652758302709344528899560237170963687405836157/90059147187314916442820962074212161290240000000000 * n^28
   + 943749252435341852900014209629694019211039392602319/4138675144863930994107684407508081919918080000000000 * n^29
   - 2396490245787484054215780490518037472472963419615505648060407/7617485361542947135973661346125328490194143490867200000000000 * n^30;
beta[7]
   = 219941297/5535129600 * n^7
   - 497323811/12454041600 * n^8
   - 79431132943/332107776000 * n^9
   + 4346429528407/12703122432000 * n^10
   + 947319776978297/1625999671296000 * n^11
   - 139564766909992667/115852476579840000 * n^12
   - 3704835620812833323/5560918875832320000 * n^13
   + 498841790610177443141/204363768686837760000 * n^14
   + 39982484505071686289633/174390415946101555200000 * n^15
   - 356813950170946951528704559/99271744277318310297600000 * n^16
   + 15060663961223625760663/21138232235891097600000 * n^17
   + 38394769836703949013594096271/9359907317575726399488000000 * n^18
   - 175303180605302340156213620047457/109024200435122061101236224000000 * n^19
   - 4999297133725717096793715285507829/1226522254895123187388907520000000 * n^20
   + 130827473840213685129346417144165899127/55558732541738202337189979750400000000 * n^21
   + 36940598630244479002168059481052336008621/10875621895045253107504938536140800000000 * n^22
   - 526486046546475419696035545214440337907/215492198539596346402574633533440000000 * n^23
   - 181704492729012922104603484325333564859103969/66558805997676949017930223841181696000000000 * n^24
   + 16251647159655239438323473490445618080618846399/7202872969057694555540376223685699174400000000 * n^25
   + 341205978466077200076092703065430429896507462203/161292905414256231654421996151819049369600000000 * n^26
   - 897269639413978000885629059505489580735895982361633/465305593801127068287908304050096166666240000000000 * n^27
   - 399121663633099371655729890858867495172854098268708589/248291717908219414909110750124171815494772326400000000 * n^28
   + 40132241906468687661336733055001237954868039321697804833/25223285628771496117750933345947613002643537920000000000 * n^29
   + 1896891499373733290268263706761724164585169669418091941816783/1593777443203777332318298787597055335894786569666560000000000 * n^30;
beta[8]
   = 191773887257/3719607091200 * n^8
   - 17822319343/336825216000 * n^9
   - 497155444501631/1422749712384000 * n^10
   + 4081516004323/8281937664000 * n^11
   + 3016420810780677019/2994340933140480000 * n^12
   - 41961075720314059/21502921789440000 * n^13
   - 14085528104367162867569/8992005822220861440000 * n^14
   + 10746171896356804622543/2308215780257587200000 * n^15
   + 13662158833536453560398591327/11118435359059650753331200000 * n^16
   - 57341614923409542539239823/7238564686887793459200000 * n^17
   + 144453057736406779924709655689/542023723754157974224896000000 * n^18
   + 887382930255915812302412329/81992895194724433920000000 * n^19
   - 2060398135313747799783225762752903/741970252961247360272302080000000 * n^20
   - 10832617062792890567329480261903684747/885060375573344165649815961600000000 * n^21
   + 10495965053853858396700728872356351447/2011024758699196210707274137600000000 * n^22
   + 2827633829976426948425669998692889423/232406442150553432674163438387200000 * n^23
   - 413070973425124733081767504737914466664159819031/59317777392239837516214863018588110848000000000 * n^24
   - 192169586323003861221251799348718483715643402161/17652874435161653033977716034322300928000000000 * n^25
   + 1383590112272607978551162261646356694508727283546677/183025002143756018656280959843853616021504000000000 * n^26
   + 42340030181859331179384696226318556087021301196292587/4618521538471343283279589846059743591792640000000000 * n^27
   - 41375761937244157344578465659087922365834839154673258123/5675239266473586626493960002838212925594796032000000000 * n^28
   - 20325331939679357943380416802660356668728866279500649633/2734164750775035223701517188867368206341242880000000000 * n^29
   + 26392423128042468212590130065257380662845826882235929755361/4017520183960092210271288782654341375876703191040000000000 * n^30;
beta[9]
   = 11025641854267/158083301376000 * n^9
   - 492293158444691/6758061133824000 * n^10
   - 3340781295639871/6360528125952000 * n^11
   + 230755947172792843/315376186245120000 * n^12
   + 2325760279413600365521/1332149010699386880000 * n^13
   - 348782269044368632301/108224036583505920000 * n^14
   - 136098374245460277375071/40852569661447864320000 * n^15
   + 239596529464231037411713/27496921887512985600000 * n^16
   + 35364463403763955482475445281/9177121248747648240844800000 * n^17
   - 184592588983229841779643912853103/10840474475083159484497920000000 * n^18
   - 104873550118556639023307009752009/57815863867110183917322240000000 * n^19
   + 7665339074386065543669975721317792709/290481354034328341546606264320000000 * n^20
   - 138062270900799459529491732714711746071/42901861518916185828421848268800000000 * n^21
   - 17357777314150207521711937000950161082441881/505716418119604269498979641930547200000000 * n^22
   + 4926642534361691999909217208854551999460491/475968393524333430116686721816985600000000 * n^23
   + 10015652615289525910183306384331679276443744239/259601094634730191676142882857680896000000000 * n^24
   - 116738227431164324545575763544019189664534311289453/6778703783102074765047442957179763556352000000000 * n^25
   - 84974069676491141925432663367251874389066142853087/2178869073139952603050963807664924000256000000000 * n^26
   + 3976320059916609695369389466291419325879319135434479/178432977000364290589635917840602808451072000000000 * n^27
   + 1586328506886857290329263116615881138694586692983247121/43790426438839402982206481503381272574033920000000000 * n^28
   - 80406545804397163817501103989422456991161536019523815972843/3266415488925908747248745868300215883842338160640000000000 * n^29
   - 96019711772725383787880372103741416386264796387585150918847311/3025517346617622977139150860513074962408965721292800000000000 * n^30;
beta[10]
   = 7028504530429621/72085985427456000 * n^10
   - 1396721719354981/13516122267648000 * n^11
   - 242069739433316973869/299733527407362048000 * n^12
   + 19998425063839930261/17952789402003456000 * n^13
   + 2005763449529247335066903/661811628515455401984000 * n^14
   - 1210830366517042702115957/224800145555521536000000 * n^15
   - 1753821857771614575775682513/258106535121027606773760000 * n^16
   + 332272605573163585761859289/20456813245552459776000000 * n^17
   + 344973470391758976060874801536373/34689518320266110350393344000000 * n^18
   - 2237438243573786540754649786424759/62874751955482325010087936000000 * n^19
   - 1109701881606701094584605721502811981/126755499942252367220337278976000000 * n^20
   + 627358150977452113555749190570504329703/10130537221947200911437893468160000000 * n^21
   - 9310014587788716960656374062579608860273/311210103458218011999372087341875200000000 * n^22
   - 446788868484797840813986816673961950907461/4958004099211806563715486685593600000000 * n^23
   + 1592669172541355914905142337333376652510632300857/95325521949872926383479666585340425011200000000 * n^24
   + 112875421374453323075239925362172217825744049933/992974186977842983161246526930629427200000000 * n^25
   - 11164164940636962806588613537158861808945650584917881/292840003430009629850049535750165785634406400000000 * n^26
   - 36738853303604438684911490335783868504502367676508134849/287806815871056339337001809354459811193815040000000000 * n^27
   + 216582649507727909201718946529683408391594400595766366243093/3674717425041647340654839101837742869322630430720000000000 * n^28
   + 4070973538524250670523695550641268121153963563101596930691/31101124040066025669604758023366313347131637760000000000 * n^29
   - 2373100737803367912157154987764399515404306692774646531223199381/31685418030031833360584561739191475969955713735720960000000000 * n^30;
beta[11]
   = 20180430688893997/144171970854912000 * n^11
   - 39227670225311092139/261131482210959360000 * n^12
   - 15850794471105785046511/12534311146126049280000 * n^13
   + 250199410574189500301/144626667070685184000 * n^14
   + 137588598842474725924656737/26071367183942182502400000 * n^15
   - 2668119315218475090518868331/293302880819349553152000000 * n^16
   - 147889032611857077276756370409/10949974217255716651008000000 * n^17
   + 107809340048140291312939137043109/3572429088379677557391360000000 * n^18
   + 6793119291340068971080115425271339/288802688407957090955427840000000 * n^19
   - 6754847041326342703335830346240936391/92384494472017791155888455680000000 * n^20
   - 64145623999655583749753779305277081997/2304645453495497585824314163200000000 * n^21
   + 2737268880658025692322671196199068915388587/19450631466138625749960755458867200000000 * n^22
   + 63226986025671434632048293692546868186915331/3847688551847059057446782170772275200000000 * n^23
   - 1090700244153262995408297323217157326170412252281/4814420300498632645630286191178809344000000000 * n^24
   + 55625038880876569156054733788858925319816102829/3136997842858837560953670640406102016000000000 * n^25
   + 6071056974043791221702396204511472430847588724030069/19238423520792536051938623619950522138624000000000 * n^26
   - 1146269064361582904187395791106052397722761459105729423/15595948667522482559438244214573223280377856000000000 * n^27
   - 106019806434003656675170902610826150161372006096027080991357/271427991622394405843823342749378734665876111360000000000 * n^28
   + 261700017996377874094049879699967368736409082839966183897/1848807094916266706471338222217990529865482240000000000 * n^29
   + 5564919878581209713189603625962524384371461254179337341860987383/12686544328430714529140303040105962058283049444966400000000000 * n^30;
beta[12]
   = 170866240186706518133/831839653739888640000 * n^12
   - 213377450872182833497/957482101440184320000 * n^13
   - 6175888888953945958057483/3072696846678900080640000 * n^14
   + 1699533901862334396426791/622363365936119808000000 * n^15
   + 1110507543583378006712775869269/120449716389812883161088000000 * n^16
   - 410039885606415108766607293/26460299485682270208000000 * n^17
   - 1868368333536354056091172181516467/70734095949917615636348928000000 * n^18
   + 38905214964730326413906323913167/694966079629641887907840000000 * n^19
   + 2767874903566891102867927978915243454399/52392273309464311784406075310080000000 * n^20
   - 20032373737511717465214006054179506710383/135073829625962678819171912908800000000 * n^21
   - 100577682847890502637160841018962740658759229/1322642939697426550997331371202969600000000 * n^22
   + 135919298571923883567006460953143491460279/435079914374153470722806372106240000000 * n^23
   + 3510216107422604000609260948095627318487208075137/48884883051216885324861367479661756416000000000 * n^24
   - 101070009063831782999779504525998847565124914603267/183700224590900951884830607482166444032000000000 * n^25
   - 290915990038543653257693921668246116917159442076793/22092475361789230960742705145987138060288000000000 * n^26
   + 87749504586448696585237158790684148758827946213899707/104709128016813542574353446264834873098240000000000 * n^27
   - 24637643848282085933220710334515754322900635607050021800141/214101183307748640575968216577661209193027207168000000000 * n^28
   - 21317214475850887868873427382826252613387447653666787141648689/18832926803338442620856050396918432205278480957440000000000 * n^29
   + 3923499613488828643584115055056306377586308324262330823616543131/12820086900308932576815464124738656395738660491755520000000000 * n^30;
beta[13]
   = 18814610183483742537419/61278854492171796480000 * n^13
   - 46368551984271450700489/137877422607386542080000 * n^14
   - 23268635133649915499415221/7193604657776689152000000 * n^15
   + 445607162860807165073496089/101984636074370531328000000 * n^16
   + 133255376497039560923384901787/8246409857103065776128000000 * n^17
   - 17940677571433980181912441444683151/674694453676137256839020544000000 * n^18
   - 2757949059159666555325445738852023379/53975556294090980547121643520000000 * n^19
   + 24878591848279833324547251174969715273/239776028921827240507405762560000000 * n^20
   + 15564548980094931213936099440270052236488729/135655686122812979589469884225945600000000 * n^21
   - 30311212070549573455862406697198244599608233/101741764592109734692102413169459200000000 * n^22
   - 62329425035966782423701548637355352965648981/325573646694751151014727722142269440000000 * n^23
   + 623169776009883975758448302456707372300199400409/915354591546065160435157184588808192000000000 * n^24
   + 9796262122721002376057350329922999007473366798297439/42296704966160578933387743185479648935936000000000 * n^25
   - 6972722553962255796263966532090565610961098085631862003/5361107354460853379806896448759545502629888000000000 * n^26
   - 204621385793344479983894287397851209945711725896319703509/1286665765070604811153655147702290920631173120000000000 * n^27
   + 16994612718512721017891137595235443147803252876143561437699/7912994455184219588594979158369089161881714688000000000 * n^28
   - 2017139943063547149336991050682980115243753114376812382829593/20257265805271602146803146645424868254417189601280000000000 * n^29
   - 38559351426567355385426086606064720807546966166200767527984103843/12275103449081224916667438321865150759482563588259840000000000 * n^30;
beta[14]
   = 8913139575903156465851797/19119002601557600501760000 * n^14
   - 267685764482874813822622157/519797883229847263641600000 * n^15
   - 1312607511537430955013430449229/249502983950326686547968000000 * n^16
   + 394441446207451421108383701253/55778311315818225598464000000 * n^17
   + 23930383074197527389616417665944303/842355620435993694012702720000000 * n^18
   - 3163985271870363313136985965093069527/68915219196919734091414241280000000 * n^19
   - 11031130611852394131866851413708829814267/112469637729373006037188041768960000000 * n^20
   + 82762604768504677943482108437799827136297/430547831932756038736110472396800000000 * n^21
   + 5150460631556395571372500982024919497071310731/21162287035158824815957301939247513600000000 * n^22
   - 29066497085581091842637088116335089148411714769/48937788768804782386901260734509875200000000 * n^23
   - 18574016067923889310355562046347950371431867757801/40573875779227237760776317990793641984000000000 * n^24
   + 2915644146751542300994700670854893964155460634998359/1994459581272638906178160881234949963776000000000 * n^25
   + 44136416359780678842389174803925334595468092209791307/67329448721643370547025387111579849326592000000000 * n^26
   - 19779807925985904471082228799863307496144797516514281/6575618800968119560003273400983467589632000000000 * n^27
   - 9437414987664054735309211086890504857237214217749919547327367/14401649908435279651242862068231742274624720732160000000000 * n^28
   + 10935173238809263052452436833453551042581316812365555123043/2044824288298806744648942931549704531015106560000000000 * n^29
   + 9844133982291098741335196902427881991238566220082170652715161789559/44842293877181429376249317540178305362708067588977459200000000000 * n^30;
beta[15]
   = 602749854274775522930992007/840077387038136991744000000 * n^15
   - 432388677389347815771203181653/541421475172208909809090560000 * n^16
   - 509985088489059649186381056338807/59064160927877335615537152000000 * n^17
   + 557542563821291613858429695152674917/48240653437843813863989968896000000 * n^18
   + 228594885325983207294554048445139632797/4563985299162962563827920535552000000 * n^19
   - 4879838474674757743673587551351918389761/61233469430436414398024600518656000000 * n^20
   - 2751159808671003044739048717767661132425533/14696032663304739455525904124477440000000 * n^21
   + 128125601507169052141729932672077247523358897/359836682123564576374273975989043200000000 * n^22
   + 30192393359192032330697554623405270813965905808153/59508351142866615382471933053164008243200000000 * n^23
   - 4779918733110943106587948891017151456334707858595371/4061444965500646499853709430878443562598400000000 * n^24
   - 43635999640355928220666371208517025763949804332853/41311582611576823901881341954262617292800000000 * n^25
   + 1093615732500524413310474447806551664943154712853580337/352628986416409072575533830586857805787955200000000 * n^26
   + 12242342315633438381845240050057352332923530458934703251/7112724086411810733447920053364873798615040000000000 * n^27
   - 201490867217252848518061423700123290704826593788569337593504193/29489092669653191666830622330188805609945856737280000000000 * n^28
   - 177101515631733926913192960801449153246340895052913001485847913/83263320479020776471051168932297804075141242552320000000000 * n^29
   + 3188424179872321062468258619737006762022989524905745242529616829657/245231294640835941901363455297850107452309744627220480000000000 * n^30;
beta[16]
   = 258111286167289650792323028754789/231006496073475801518545305600000 * n^16
   - 5263782718468783726282279549/4203582881771808305971200000 * n^17
   - 5480008133286071057255185152124708229/383668354827295829561557647360000000 * n^18
   + 3254656358469551348762078052918542501/170852314259030174101631139840000000 * n^19
   + 3903418284121815685136619157954211820691189/44088097989914218366577712373432320000000 * n^20
   - 1475869269349982196110739285641411486418113/10620179854341315622157391652454400000000 * n^21
   - 165406053235626113240302780087909075941876233947/464908993303645432675561976977843814400000000 * n^22
   + 31141324189381440915034448751509805569920381009/47217319632401489256111763286812262400000000 * n^23
   + 3425331498104147467678431771772144489569980472050747/3281975729697492121093906610810863484928000000000 * n^24
   - 181114801957939134097279485499338367321177700348427827/78055895430715549919063478124695087218688000000000 * n^25
   - 20329880662120223623532772221831681492746536794968375279/8563846812969934619691535885680832426278912000000000 * n^26
   + 15514402521245792750246961997116209460024931536101177881/2381963776692158394304324203418114597060608000000000 * n^27
   + 58528872092571805627208033537162293354868952581483996308205593/13610350462916857692383364152394833358436549263360000000000 * n^28
   - 2739294316618535857897844520835697665418072257962762663947501/179187195041295435475533295409133367421546004480000000000 * n^29
   - 28963918619355858559987610778078259702157647632421717394029814967389/4700266480616022219776132893208793726169270105355059200000000000 * n^30;
beta[17]
   = 5972486266662395092991359700731/3397154354021702963508019200000 * n^17
   - 14169262403755308738265442730293527/7146763472273157609479995392000000 * n^18
   - 1407123059162889531671157095700694121/59145628736053718147420651520000000 * n^19
   + 31616271318862027601140911742786459816003/999546339232123823261872155525120000000 * n^20
   + 33847994330735322699501662950595147934349517/215760061865017024098184001381990400000000 * n^21
   - 86502185255596416338989303038079495440176441813/355518641938081801457782688277174681600000000 * n^22
   - 1381419926651852376155125702746693024900887647/2049837214778129305702530815291817984000000 * n^23
   + 2039800582062773533252062008847436810010590704673393/1669644822047391442119004879672622186496000000000 * n^24
   + 6658940828673534449931395737435432548555706698080023117/3134479879256969534004745160772069384781824000000000 * n^25
   - 1381470469487772782735900360391332279866899387998419366549/303260928318111802414959094304697712977641472000000000 * n^26
   - 1395295684620560872662304928419977863449010608559002595498087/266869616919938386125164002988133987420324495360000000000 * n^27
   + 3800355884806913283793161651067966638660881579408061104605403/280213097765935305431422203137540686791340720128000000000 * n^28
   + 14254272866295825003590094337320088635299910217415520581006075573/1374912266371522565316844943394866303189511800094720000000000 * n^29
   - 702046212944594816164772022402471437675208441448777951843503358652627/20791767020136757113362658445253016953407594818982379520000000000 * n^30;
beta[18]
   = 32561519486094387080527719588034341533/11663517986749793218671352479744000000 * n^18
   - 729907719647457582367271201256463879/230528934567170058275021389824000000 * n^19
   - 2367236104332471655932050118751689811238261/59375350358064550788705233330503680000000 * n^20
   + 277337936278972764824727659347223162007380783/5246368848044609917345751476312473600000000 * n^21
   + 2072215526282883572284838680097819963389051894913/7438543892858326922808991631645501030400000000 * n^22
   - 21187399770302239981520985962108187969123956327017/49559298686168603123214906745838150615040000000 * n^23
   - 117781246505279918774486020036924169110810872979542077/92510690880848059163334492592231214481408000000000 * n^24
   + 15346233021039229146148984542248316965482710596146903/6780613138425795245494403150226037879603200000000 * n^25
   + 23577648358032142021574052998960694124312121496108401309501/5499131500168427350457924910058518528661232025600000000 * n^26
   - 25523104372278110417409133482492688317169934216303321881481/2864130989671055911696835890655478400344391680000000000 * n^27
   - 4904614526502535650801519867527379473641587091534278367071269/432842750524368215007154889587272725078179640770560000000 * n^28
   + 21605254007739675177136169588021592098439361907000904630780859/770695057717401985738931667124429059082325852160000000000 * n^29
   + 587901467817860255311504068569140875259033445501764848866062463918953/24168207818278623653139500414994959877465238422064988160000000000 * n^30;
beta[19]
   = 428624286990709813412232185601376712413/95900036779942744242408898166784000000 * n^19
   - 7696493507391194218978151080255673578313/1510425579284098221817940146126848000000 * n^20
   - 527610184507500637130291508233596994938727387/7854213012277310753453288759859609600000000 * n^21
   + 11361451298084078444421426214576116338438506193/127861967714573279471658686134773350400000000 * n^22
   + 413731746541624122896290630838483865650422207002637/834682925240734368390987903087800431411200000000 * n^23
   - 193620425636569480838170976533462900238070466349524697/256949550508766977723998435166460382806016000000000 * n^24
   - 132662492287173341243380190879466905201764211256445800247/55272703309441429874851218942474144568049664000000000 * n^25
   + 13146789691243844636190690725166722508695370878744595367/3135216364191005476094501914804205679280128000000000 * n^26
   + 37750506608225008520506075562486792560657544757045773087576929/4393516640660880377892173691299384803425131692032000000000 * n^27
   - 708261955363343231843730776055545581965081551994723487001141417/40755647785077903505447137531132451137035761090560000000000 * n^28
   - 41215834581264644962808643579846154211341882270808962207078377401/1700549382091093699207676640514703059208080384327680000000000 * n^29
   + 205978745011375578132532475847110147598943760061270638697653240745727/3577530762574138369708149732482806560808999108529356800000000000 * n^30;
beta[20]
   = 4413022171315891282875633078306076423077823/612225834803154479243538405896749056000000 * n^20
   - 20372356369389063598321199048537111545322489/2467109651840332692314561267713966080000000 * n^21
   - 8350441420653344994230757754481656794198878169653/73421183238768300923281343327167630540800000000 * n^22
   + 3602842136240118426653037995310224523478929843329/23998309048482544305160371509809014374400000000 * n^23
   + 556742892772424708949943649093699359972707482370822028429/630108817727632300573303895944205248075766169600000000 * n^24
   - 19669578953730635368229268600445326314943118813499628227/14768175415491382044686810061192310501775769600000000 * n^25
   - 58913853325627285400915530112249848640529228986228560671583/13043252526961988621867390646045048635168359710720000000 * n^26
   + 6202219939216563039972447651959676151814355411005403328908487/798219881207309199515322083807444382620980346880000000000 * n^27
   + 4029539464888473312146356584746881268371745066400450670075103971919/235404621606609970647462666379821037767518556059074560000000000 * n^28
   - 96689844226844260169337694369507826490314199510140141134776628313/2860820054246996171062914348365880667313593563217920000000000 * n^29
   - 1267431993370297356535644841552515784699654333219083107594851764271651/24717485268694046917983579969881208965589448386202828800000000000 * n^30;
beta[21]
   = 6364309775760426912861320334716314963236880099/543860616583468895728009950571612078080000000 * n^21
   - 163511162729184839208619679935376666925954633509/12142734151027065152696529857954646589440000000 * n^22
   - 293082088716477537348152181351392414509711063444079/1515413222048177731056526926272739894362112000000 * n^23
   + 3584068349124466527596686906788906996841447765124034119/14064928967134649566368390534468867144548352000000000 * n^24
   + 65325328354812776334115933271141213585155594697569614279619/41407150879244408323388541733476344873550348288000000000 * n^25
   - 295262389665020199502850268061912716873799689551659695461801/125108748728002748005666808237574956296512838041600000000 * n^26
   - 198220070520799681801810036957883626038127951175197474869802841/23353633095893846294391137537680658508682396434432000000000 * n^27
   + 9203041943910402313157326557559771543787851843067288847306443759/639119373821137442471502141656207383123249625825280000000000 * n^28
   + 223639420140739590352779061494286234859561093634481454398610059052269/6591329404985079178128954658634989057490519569654087680000000000 * n^29
   - 7514702451752062815378233648033968164404526829002371317311008928464377/114599249882126944801560234405812877931369260699667660800000000000 * n^30;
beta[22]
   = 4597258274619973879852787439286345056927543926539/240541781277488528739131258138530141962240000000 * n^22
   - 90547738027796418205837133798540945489664737617/4100143999048099921689737354634036510720000000 * n^23
   - 120833998747258442540330733531559589117031890572073705423/365972293124634922050151252694866684488450048000000000 * n^24
   + 700385303317244963533430016841479945264946535743006370213/1612565416580422625283478957186756328527233024000000000 * n^25
   + 41927528317378886896874815834318257768184011744864991769792173/14861402879205174914612542069433146323706979549184000000000 * n^26
   - 1883738571943229874285781147684391885621206162239253551981097/449437587072737144595137360970760473499203010560000000000 * n^27
   - 1193194903894549620369066288907357112160028172942643483767868101/74901470511194081569647212029943057471483176927887360000000 * n^28
   + 16593315611956986881113970672924159996956254881446619306408644351/621740722016747747404298146732925770026959964733440000000000 * n^29
   + 11172709187913729666978241526344191734961305583177742422182451010341965837/166856507828376831631071701294863550268073643578716114124800000000000 * n^30;
beta[23]
   = 105692798364122771092494104410403169316822970007103/3367584937884839402347837613939421987471360000000 * n^23
   - 4991587424316475527559827056175081831817518759624141283/137107011264808880217339273654526141942412083200000000 * n^24
   - 1094971199704775675327145588577419573356229203017369297031/1935628394326713603068319157475663180363464704000000000 * n^25
   + 55016459854774144990504572561411573956468991982011620879183/74037786082996795317363207773444116648902524928000000000 * n^26
   + 239397211441168562919535061028225053930721123237942287411752901/47384183093117949003112452975004234655297615953920000000000 * n^27
   - 3785206531097832093379025924494221733602175663051851724063493677/507484600927293233823334371362295353158237466866483200000000 * n^28
   - 2878530207214341630613762260409649820059076958972834659710423583641/96377945080452906319144544961326352286747011098817331200000000 * n^29
   + 4793620231717494054901024202427349307198672366940440795548189424277463/96899050172071924049425843362418567717916189402962329600000000000 * n^30;
beta[24]
   = 674454707484204643577912579775944698106967657841301509703/13020743263341849785801510375449192318660037836800000000 * n^24
   - 14426118473738594318758580084527169080893428452291501/239224795864861496358580131547117377080524800000000 * n^25
   - 8831250255802996377564597692702488675170603573810490306068589/9081968426180940225596553486875811642265376391168000000000 * n^26
   + 8524975532343064334059520385109401209472880856691153037771/6682542557352665505329874016485837860046372864000000000 * n^27
   + 3849014409982539112685345447510980453367887363991057306125975552515257/424866107896329895356895535704513669664076407260619735040000000000 * n^28
   - 7018181262756669326759909066253824968190524410099850934366975116824761/527763368402472291888643673257950574035844912144051077120000000000 * n^29
   - 850361604060552572056063294333220546778996672875303006775383312452755647779/15199585009991202006392937789828976532232333469748671021056000000000000 * n^30;
beta[25]
   = 199227752516955126043105919223151730212773157895262123371/2319787592894237605516361043901867597002650419200000000 * n^25
   - 1168128087731386349278531921296393465205853015166911689601/11643549264334538750764812162661296977263303065600000000 * n^26
   - 27390759516798680521492333486028666245475773964938356987895799/16337932618526559135993799923480296076032952238080000000000 * n^27
   + 16623553892978221252992741635428809183176541795604885967233054812289/7566499905411789131019980978608610380442220962638725120000000000 * n^28
   + 1391206775167565949946814294410548218174156897307634862471204069769203/85538095796791963737570611176977111081466475155984220160000000000 * n^29
   - 309601436775289074939542822961271536740569529708755160589227851116770297/13036681100187385736477373542933235232324028706996910817280000000000 * n^30;
beta[26]
   = 20988866881167764922693397699209941026240719371894993737321/146779287695853579403580662414154531592167699251200000000 * n^26
   - 20776782371826844247557167727961747229906685936639469810900161/123982629575591320352462040782956155904259153461248000000000 * n^27
   - 56519161473334888467049876826142477266800694645666348046158762501/19499565911122788086072327775906636264771992816713728000000000 * n^28
   + 713184336250531653186104175190769152673340166708863511978540935479/187949917522247967196810424949412597591112860450160640000000000 * n^29
   + 222786377756937595153775101581958876025910578503920819534055082789529097879/7621444335494163969017541455868660597358662936398194016256000000000000 * n^30;
beta[27]
   = 1159063206283901297028135487345019691847337244400674181558705769/4849098401178682751562959817288951875366580224262144000000000 * n^27
   - 836866364429699038099446680535614249403163042061868319644600230131/2978558692924005880147548067769738689443921902753021952000000000 * n^28
   - 276258332981610143691601963914139654258026350011955431757944008776431/54988775869366262402723964328056714266657019743132712960000000000 * n^29
   + 231942644768785218497452105692225263551992039422426853153865797716482578787/35296814078757346881512488867491734391517307724194136037785600000000000 * n^30;
beta[28]
   = 4820642953919212694667891843709465549522940845258602976903974801919/12021570220089681390145058868115702097935828940841025536000000000 * n^28
   - 1407966726686721532660580475865160144206500909159825439202238905333/2978558692924005880147548067769738689443921902753021952000000000 * n^29
   - 2269078966250518419628311750199082816400532696920651885729048451938814396007/259963837024498554809869759278034361232762393397239351135436800000000000 * n^30;
beta[29]
   = 2257448691193994841515777396189088185825275740674810644118087064739/3344346602581339935604264497144969756568614066249007104000000000 * n^29
   - 190079826774799091739713735364123004573671877623337777048243884284125889/238239614545595134106590801450823661272646492861713602314240000000000 * n^30;
beta[30]
   = 46619651201884945136956267547124218081125978370322440448000334604980392416839/40900977025187772623419508793077406167287949894498991245308723200000000000 * n^30;
    
GeographicLib-2.4/doc/index.html.in0000644000771000077100000000142314644775140017117 0ustar ckarneyckarney GeographicLib-@PROJECT_VERSION@ documentation

Online documentation for GeographicLib version @PROJECT_VERSION@ is available at
https://geographiclib.sourceforge.io/C++/@PROJECT_VERSION@/index.html.

You will be redirected there. Click on the link to go there directly.

GeographicLib-2.4/doc/Makefile.am0000644000771000077100000001234414644775140016555 0ustar ckarneyckarneyEXTRAFILES = $(srcdir)/tmseries30.html $(srcdir)/geodseries30.html FIGURES = \ $(srcdir)/gauss-krueger-graticule.png \ $(srcdir)/thompson-tm-graticule.png \ $(srcdir)/gauss-krueger-convergence-scale.png \ $(srcdir)/gauss-schreiber-graticule-a.png \ $(srcdir)/gauss-krueger-graticule-a.png \ $(srcdir)/thompson-tm-graticule-a.png \ $(srcdir)/gauss-krueger-error.png \ $(srcdir)/meridian-measures.png \ $(srcdir)/normal-gravity-potential-1.svg \ $(srcdir)/vptree.gif HPPFILES = \ $(top_srcdir)/include/GeographicLib/Accumulator.hpp \ $(top_srcdir)/include/GeographicLib/AlbersEqualArea.hpp \ $(top_srcdir)/include/GeographicLib/AuxAngle.hpp \ $(top_srcdir)/include/GeographicLib/AuxLatitude.hpp \ $(top_srcdir)/include/GeographicLib/AzimuthalEquidistant.hpp \ $(top_srcdir)/include/GeographicLib/CassiniSoldner.hpp \ $(top_srcdir)/include/GeographicLib/Constants.hpp \ $(top_srcdir)/include/GeographicLib/DAuxLatitude.hpp \ $(top_srcdir)/include/GeographicLib/DMS.hpp \ $(top_srcdir)/include/GeographicLib/Ellipsoid.hpp \ $(top_srcdir)/include/GeographicLib/EllipticFunction.hpp \ $(top_srcdir)/include/GeographicLib/GARS.hpp \ $(top_srcdir)/include/GeographicLib/GeoCoords.hpp \ $(top_srcdir)/include/GeographicLib/Geocentric.hpp \ $(top_srcdir)/include/GeographicLib/Geodesic.hpp \ $(top_srcdir)/include/GeographicLib/GeodesicExact.hpp \ $(top_srcdir)/include/GeographicLib/GeodesicLine.hpp \ $(top_srcdir)/include/GeographicLib/GeodesicLineExact.hpp \ $(top_srcdir)/include/GeographicLib/Geohash.hpp \ $(top_srcdir)/include/GeographicLib/Geoid.hpp \ $(top_srcdir)/include/GeographicLib/Georef.hpp \ $(top_srcdir)/include/GeographicLib/Gnomonic.hpp \ $(top_srcdir)/include/GeographicLib/LambertConformalConic.hpp \ $(top_srcdir)/include/GeographicLib/LocalCartesian.hpp \ $(top_srcdir)/include/GeographicLib/Math.hpp \ $(top_srcdir)/include/GeographicLib/MGRS.hpp \ $(top_srcdir)/include/GeographicLib/OSGB.hpp \ $(top_srcdir)/include/GeographicLib/PolarStereographic.hpp \ $(top_srcdir)/include/GeographicLib/PolygonArea.hpp \ $(top_srcdir)/include/GeographicLib/TransverseMercatorExact.hpp \ $(top_srcdir)/include/GeographicLib/TransverseMercator.hpp \ $(top_srcdir)/include/GeographicLib/UTMUPS.hpp \ $(top_srcdir)/experimental/JacobiConformal.hpp ALLSOURCES = \ $(top_srcdir)/src/AlbersEqualArea.cpp \ $(top_srcdir)/src/AuxAngle.cpp \ $(top_srcdir)/src/AuxLatitude.cpp \ $(top_srcdir)/src/AzimuthalEquidistant.cpp \ $(top_srcdir)/src/CassiniSoldner.cpp \ $(top_srcdir)/src/DAuxLatitude.cpp \ $(top_srcdir)/src/DMS.cpp \ $(top_srcdir)/src/Ellipsoid.cpp \ $(top_srcdir)/src/EllipticFunction.cpp \ $(top_srcdir)/src/GARS.cpp \ $(top_srcdir)/src/GeoCoords.cpp \ $(top_srcdir)/src/Geocentric.cpp \ $(top_srcdir)/src/Geodesic.cpp \ $(top_srcdir)/src/GeodesicLine.cpp \ $(top_srcdir)/src/Geohash.cpp \ $(top_srcdir)/src/Geoid.cpp \ $(top_srcdir)/src/Georef.cpp \ $(top_srcdir)/src/Gnomonic.cpp \ $(top_srcdir)/src/LambertConformalConic.cpp \ $(top_srcdir)/src/LocalCartesian.cpp \ $(top_srcdir)/src/MGRS.cpp \ $(top_srcdir)/src/OSGB.cpp \ $(top_srcdir)/src/PolarStereographic.cpp \ $(top_srcdir)/src/PolygonArea.cpp \ $(top_srcdir)/src/TransverseMercator.cpp \ $(top_srcdir)/src/TransverseMercatorExact.cpp \ $(top_srcdir)/src/UTMUPS.cpp \ $(top_srcdir)/tools/CartConvert.cpp \ $(top_srcdir)/tools/ConicProj.cpp \ $(top_srcdir)/tools/GeodesicProj.cpp \ $(top_srcdir)/tools/GeoConvert.cpp \ $(top_srcdir)/tools/GeodSolve.cpp \ $(top_srcdir)/tools/GeoidEval.cpp \ $(top_srcdir)/tools/Gravity.cpp \ $(top_srcdir)/tools/Planimeter.cpp \ $(top_srcdir)/tools/TransverseMercatorProj.cpp \ $(top_srcdir)/experimental/JacobiConformal.cpp MANPAGES = \ ../man/CartConvert.1.html \ ../man/ConicProj.1.html \ ../man/GeodesicProj.1.html \ ../man/GeoConvert.1.html \ ../man/GeodSolve.1.html \ ../man/GeoidEval.1.html \ ../man/Gravity.1.html \ ../man/IntersectTool.1.html \ ../man/MagneticField.1.html \ ../man/Planimeter.1.html \ ../man/RhumbSolve.1.html \ ../man/TransverseMercatorProj.1.html doc: html/index.html if HAVE_DOXYGEN manpages: $(MANPAGES) if test -d html; then rm -rf html/*; else mkdir html; fi cp $^ html/ touch $@ html/index.html: manpages doxyfile.in GeographicLib.dox.in \ $(HPPFILES) $(ALLSOURCES) $(EXTRAFILES) $(FIGURES) cp -p $(EXTRAFILES) $(top_srcdir)/maxima/*.mac \ $(top_srcdir)/LICENSE.txt html/ sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \ $(srcdir)/GeographicLib.dox.in > GeographicLib.dox sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \ -e "s%@PROJECT_BINARY_DIR@%..%g" \ -e "s%@PROJECT_VERSION@%$(VERSION)%g" \ $(srcdir)/doxyfile.in | $(DOXYGEN) - else html/index.html: index.html.in utilities.html.in if test -d html; then rm -rf html/*; else mkdir html; fi cp $(top_srcdir)/LICENSE.txt html/ sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \ $(srcdir)/utilities.html.in > html/utilities.html sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \ $(srcdir)/index.html.in > html/index.html endif maintainer-clean-local: rm -rf html manpages htmldir=$(DESTDIR)$(docdir)/html install-doc: html/index.html $(INSTALL) -d $(htmldir) $(INSTALL) -m 644 `dirname $<`/*.* $(htmldir) -test -f `dirname $<`/search/search.js && \ $(INSTALL) -d $(htmldir)/search && \ $(INSTALL) -m 644 `dirname $<`/search/*.* $(htmldir)/search || true GeographicLib-2.4/doc/CMakeLists.txt0000644000771000077100000000525514644775140017264 0ustar ckarneyckarney# Where the html versions of the man pages (extension .1.html) are # found. # Where to find the *.usage files for the --help option. if (RELEASE) set (MANDIR ${PROJECT_SOURCE_DIR}/man) else () set (MANDIR ${PROJECT_BINARY_DIR}/man) endif () # Build up a list of the .1.html files. set (HTMLMAN) foreach (TOOL ${TOOLS}) set (HTMLMAN ${HTMLMAN} ${MANDIR}/${TOOL}.1.html) endforeach () # Run doxygen, if available # First assemble a list of all the files the documentation uses. Add a # dependency on htmlman (from man/CMakeLists.txt). Use html/index.html # as the make target. To make this target, copy the non-doxygen # generated files into html/. Run doxfile.in thru cmake's config # process so that absolute path names are used and so that the pathnames # are properly stripped by doxygen (via STRIP_FROM_PATH). The # distrib-doc target copies the html directory into the source tree. # If doxygen is not available, only the install step (from the source # tree) is done. file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html-stage) if (BUILD_DOCUMENTATION) configure_file (GeographicLib.dox.in GeographicLib.dox @ONLY) configure_file (doxyfile.in doxyfile @ONLY) file (GLOB CXXSOURCES ../src/[A-Za-z]*.cpp ../include/GeographicLib/[A-Za-z]*.hpp ../tools/[A-Za-z]*.cpp ../examples/[A-Za-z]*.cpp ../experimental/[A-Za-z]*.[hc]pp) file (GLOB EXTRA_FILES ../maxima/[A-Za-z]*.mac tmseries30.html geodseries30.html ../LICENSE.txt) file (GLOB FIGURES *.png *.svg *.gif) file (COPY ${EXTRA_FILES} DESTINATION html-stage) if (DOCDIR) add_custom_target (doc ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html) else () add_custom_target (doc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html) endif () if (NOT RELEASE) add_dependencies (doc htmlman) endif () if (CMAKE_VERSION VERSION_LESS 3.17.0) set (RMDIR remove_directory) else () set (RMDIR rm -rf) endif () add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile ${CMAKE_CURRENT_BINARY_DIR}/GeographicLib.dox ${CXXSOURCES} ${EXTRA_FILES} ${FIGURES} ${HTMLMAN} COMMAND ${CMAKE_COMMAND} -E copy ${HTMLMAN} html-stage COMMAND ${CMAKE_COMMAND} -E ${RMDIR} html COMMAND ${CMAKE_COMMAND} -E copy_directory html-stage html COMMAND ${DOXYGEN_EXECUTABLE} doxyfile > doxygen.log COMMENT "Generating C++ documentation tree") else () file (COPY ../LICENSE.txt DESTINATION html) configure_file (index.html.in html/index.html) configure_file (utilities.html.in html/utilities.html) endif () if (DOCDIR) install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${DOCDIR}) endif () GeographicLib-2.4/doc/GeographicLib.dox.in0000644000771000077100000155754414644775140020362 0ustar ckarneyckarney// -*- text -*- /** * \file GeographicLib.dox * \brief Documentation for GeographicLib * * Written by Charles Karney and licensed under the * MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ namespace GeographicLib { /** \mainpage GeographicLib library \author Charles F. F. Karney (karney@alum.mit.edu) \version @PROJECT_VERSION@ \date 2024-07-14 \section abstract Abstract GeographicLib is a small C++ library for - geodesic and rhumb line calculations; - conversions between geographic, UTM, UPS, MGRS, geocentric, and local cartesian coordinates; - gravity (e.g., EGM2008) and geomagnetic field (e.g., WMM2020) calculations. The emphasis is on returning accurate results with errors close to round-off (about 5--15 nanometers). Accurate algorithms for \ref geodesic and \ref transversemercator have been developed for this library. The functionality of the library can be accessed from user code or from the \ref utilities provided. It is licensed under the MIT License; see LICENSE.txt. This library is not a general purpose projection library nor does it perform datum conversions; instead use PROJ. NOTE: Starting with version 2.0, this library *only* includes the C++ implementation. If you're interested in the [C](../../C/doc/index.html), [Fortran](../../Fortran/doc/index.html), [Python](../../Python/doc/index.html), [Octave/MATLAB](https://github.com/geographiclib/geographiclib-octave#readme), [Java](../../Java/doc/index.html), or [JavaScript](../../JavaScript/doc/index.html) implementations, go [here](../../doc/library.html#languages) on the main [GeographicLib web page](../../index.html). \section links Links - Library documentation (all versions): https://geographiclib.sourceforge.io/C++ - Git repository: https://github.com/geographiclib/geographiclib - Releases are on the `release` branch, and specific releases are tagged as, e.g., `r1.52`, `r2.0`, etc. This is the appropriate branch for most *users* of GeographicLib. - The main branch is `main` and most development is done on the `devel` branch. These branches are for the *developers* of GeographicLib. Tags `v1.52`, `v2.0`, etc., are aligned with the corresponding release tags `r1.52`, `r2.0`, etc. - Source distribution: https://sourceforge.net/projects/geographiclib/files/distrib-C++ - Main GeographicLib web page: https://geographiclib.sourceforge.io - SourceForge project page: https://sourceforge.net/projects/geographiclib - The library has been implemented in a few other languages. \section citint Citing GeographicLib When citing GeographicLib, use (adjust the version number and date as appropriate) - C. F. F. Karney, GeographicLib, Version @PROJECT_VERSION@ (2022-05-06), https://geographiclib.sourceforge.io/C++/@PROJECT_VERSION@ \section contents Contents - \ref intro - \ref install - \ref start - \ref utilities - \ref organization - \ref other - \ref geoid - \ref gravity - \ref normalgravity - \ref magnetic - \ref geodesic - \ref nearest - \ref triaxial - \ref jacobi - \ref rhumb - \ref greatellipse - \ref transversemercator - \ref geocentric - \ref auxlat - \ref highprec - \ref changes
Forward to \ref intro.
**********************************************************************/ /** \page intro Introduction
Forward to \ref install. Up to \ref contents.
GeographicLib offers a C++ interfaces to a small (but important!) set of geographic transformations. It grew out of a desire to improve on the GEOTRANS package for transforming between geographic and MGRS coordinates. At present, GeographicLib provides UTM, UPS, MGRS, geocentric, and local cartesian projections, gravity and geomagnetic models, and classes for geodesic calculations. The goals of GeographicLib are: - Accuracy. In most applications the accuracy is close to round-off, about 5 nm (5 nanometers). Even though in many geographic applications 1 cm is considered "accurate enough", there is little penalty in providing much better accuracy. In situations where a faster approximate algorithm is necessary, GeographicLib offers an accurate benchmark to guide the development. - Completeness. For each of the projections included, an attempt is made to provide a complete solution. For example, Geodesic::Inverse works for anti-podal points. Similarly, Geocentric::Reverse will return accurate geodetic coordinates even for points close to the center of the earth. - C++ interface. For the projection methods, this allows encapsulation of the ellipsoid parameters. - Emphasis on projections necessary for analyzing military data. - Uniform treatment of UTM/UPS. The UTMUPS class treats UPS as zone 0. This simplifies conversions between UTM and UPS coordinates, etc. - Well defined and stable conventions for the conversion between UTM/UPS to MGRS coordinates. - Detailed internal documentation on the algorithms. For the most part GeographicLib uses published algorithms and references are given. If changes have been made (usually to improve the numerical accuracy), these are described in the code. Various \ref utilities are provided with the library. These illustrate the use of the library and are useful in their own right. This library and the utilities have been tested with C++11 compliant versions of g++ under Linux, with Apple LLVM 7.0.2 under Mac OS X, and with MS Visual Studio 14 (2015), 15 (2017), and 16 (2019) compiled for 32 bit and 64 bit on Windows. The section \ref geodesic documents the method of solving the geodesic problem. The section \ref transversemercator documents various properties of this projection. The bulk of the testing has used geographically relevant values of the flattening. Thus, you can expect close to full accuracy for −0.01 ≤ \e f ≤ 0.01 (but note that TransverseMercatorExact is restricted to \e f > 0). However, reasonably accurate results can be expected if −0.1 ≤ \e f ≤ 0.1. Outside this range, you should attempt to verify the accuracy of the routines independently. Two types of problems may occur with larger values of f: - Some classes, specifically Geodesic, GeodesicLine, and TransverseMercator, use series expansions using \e f as a small parameter. The accuracy of these routines will degrade as \e f becomes large. - Even when exact formulas are used, many of the classes need to invert the exact formulas (e.g., to invert a projection), typically, using Newton's method. This usually provides an essentially exact inversion. However, the choice of starting guess and the exit conditions have been tuned to cover small values of \e f and the inversion may be incorrect if \e f is large. Undoubtedly, bugs lurk in this code and in the documentation. Please report any you find to karney@alum.mit.edu.
Forward to \ref install. Up to \ref contents.
**********************************************************************/ /** \page install Installing GeographicLib
Back to \ref intro. Forward to \ref start. Up to \ref contents.
GeographicLib has been developed under Linux with the g++ compiler, under Mac OS X with Xcode, and under Windows with Visual Studio 2015 and later. It should compile on any systems with a C++11 compliant compiler. First download one of - GeographicLib-@PROJECT_VERSION@.tar.gz tar'ed sources - GeographicLib-@PROJECT_VERSION@.zip zipped sources - GeographicLib-@PROJECT_VERSION@-win32.exe 32-bit binary installer for Windows - GeographicLib-@PROJECT_VERSION@-win64.exe 64-bit binary installer for Windows . Then pick one of the first five options below: - \ref cmake. This is the preferred installation method as it will work on the widest range of platforms. However it requires that you have cmake installed. - \ref autoconf. This method works for most Unix-like systems, including Linux and Mac OS X. - \ref binaryinst. Use this installation method if you only need to use the \ref utilities supplied with GeographicLib. - \ref maintainer. This describes addition tasks of interest only to the maintainers of this code. . This section documents only how to install the software. If you wish to use GeographicLib to evaluate geoid heights or the earth's gravitational or magnetic fields, then you must also install the relevant data files. See \ref geoidinst, \ref gravityinst, and \ref magneticinst for instructions. The first two installation methods use two important techniques which make software maintenance simpler - Out-of-source builds: This means that you create a separate directory for compiling the code. In the description here the directories are called BUILD and are located in the top-level of the source tree. You might want to use a suffix to denote the type of build, e.g., BUILD-vc14 for Visual Studio 14 (2015), or BUILD-shared for a build which creates a shared library. The advantages of out-of-source builds are: - You don't mess up the source tree, so it's easy to "clean up". Indeed the source tree might be on a read-only file system. - Builds for multiple platforms or compilers don't interfere with each other. - The library is installed: After compilation, there is a separate install step which copies the headers, libraries, tools, and documentation to a "central" location. You may at this point delete the source and build directories. If you have administrative privileges, you can install GeographicLib for the use of all users (e.g., in /usr/local). Otherwise, you can install it for your personal use (e.g., in $HOME/packages). \section cmake Installation with cmake This is the recommended method of installation; however it requires that cmake, version 3.7.0 or later, be installed on your system. This permits GeographicLib to be built either as a shared or a static library on a wide variety of systems. cmake can also determine the capabilities of your system and adjust the compilation of the libraries and examples appropriately. cmake is available for most computer platforms. On Linux systems cmake will typically be one of the standard packages and can be installed by a command like \verbatim yum install cmake \endverbatim (executed as root). The minimum version of cmake supported for building GeographicLib is 3.7.0 (which was released on 2016-11-11). On other systems, download a binary installer from https://www.cmake.org click on download, and save and run the appropriate installer. Run the cmake command with no arguments to get help. Other useful tools are ccmake and cmake-gui which offer curses and graphical interfaces to cmake. Building under cmake depends on whether it is targeting an IDE (interactive development environment) or generating Unix-style makefiles. The instructions below have been tested with makefiles and g++ on Linux and with the Visual Studio IDE on Windows. It is known to work also for Visual Studio 2017 Build Tools. Here are the steps to compile and install GeographicLib: - Unpack the source, running one of \verbatim tar xfpz GeographicLib-@PROJECT_VERSION@.tar.gz unzip -q GeographicLib-@PROJECT_VERSION@.zip \endverbatim then enter the directory created with \verbatim cd GeographicLib-@PROJECT_VERSION@ \endverbatim - Create a separate build directory and enter it, for example, \verbatim mkdir BUILD cd BUILD \endverbatim - Run cmake, pointing it to the source directory (..). On Linux, Unix, and MacOSX systems, the command is \verbatim cmake .. \endverbatim For Windows, the command is typically something like \verbatim cmake -G "Visual Studio 14" -A win32 \ -D CMAKE_INSTALL_PREFIX="C:/Program Files (x86)/GeographicLib-@PROJECT_VERSION@" \ .. cmake -G "Visual Studio 14" -A x64 \ -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib-@PROJECT_VERSION@" \ ..\endverbatim The definitions of CMAKE_INSTALL_PREFIX point to system directories. You might instead prefer to install to a user directory such as C:/Users/jsmith/projects/GeographicLib-@PROJECT_VERSION@. The settings given above are recommended to ensure that packages that use GeographicLib use the version compiled with the right compiler. If you need to rerun cmake, use \verbatim cmake . \endverbatim possibly including some options via -D (see the next step). - cmake allows you to configure how GeographicLib is built and installed by supplying options, for example \verbatim cmake -D CMAKE_INSTALL_PREFIX=/tmp/geographic . \endverbatim The options you might need to change are - CMAKE_INSTALL_PREFIX (default: /usr/local on non-Windows systems, C:/Program Files/GeographicLib on Windows systems) specifies where the library will be installed. For Windows systems, you might want to use a prefix which includes the compiler version, in order to keep the libraries built with different versions of the compiler in distinct locations. If you just want to try the library to see if it suits your needs, pick, for example, `CMAKE_INSTALL_PREFIX=/tmp/geographic`. Where under `CMAKE_INSTALL_PREFIX` the various components of the library are installed is governed by the following variables (a value of an empty string or "OFF" disables installation): - `INCDIR` header files (the `GeographicLib` subdirectory is used) - `BINDIR` tools - `SBINDIR` admin tools - `LIBDIR` libraries - `DLLDIR` dlls - `MANDIR` the man pages (the `man1` and `man8` subdirectories are used) - `CMAKEDIR` cmake configs - `PKGDIR` package config - `DOCDIR` documentation - `EXAMPLEDIR` examples - GEOGRAPHICLIB_DATA (default: /usr/local/share/GeographicLib for non-Windows systems, C:/ProgramData/GeographicLib for Windows systems) specifies the default location for the various datasets for use by Geoid, GravityModel, and MagneticModel. See \ref geoidinst, \ref gravityinst, and \ref magneticinst for more information. - BUILD_SHARED_LIBS (default ON) and BUILD_BOTH_LIBS (default OFF) specify the types of libraries to build. If `BUILD_BOTH_LIBS` is set, then both shared and static libraries are building. Otherwise a single library is built with the type determined by `BUILD_SHARED_LIBS` - CMAKE_BUILD_TYPE (default: Release). This flags only affects non-IDE compile environments (like make + g++). The default is actually blank, but this is treated as Release. Choose one of \verbatim Debug Release RelWithDebInfo MinSizeRel \endverbatim (With IDE compile environments, you get to select the build type in the IDE.) - BUILD_DOCUMENTATION (default: OFF). If set to ON, then html documentation is created from the source files, provided a sufficiently recent version of doxygen can be found. Otherwise, the html documentation will redirect to the appropriate version of the online documentation. - GEOGRAPHICLIB_PRECISION specifies the precision to be used for "real" (i.e., floating point) numbers. See \ref highprec for additional information about using quad and arbitrary precision. Nearly all the testing has been carried out with doubles and that's the recommended configuration. In particular you should avoid "installing" the library with a precision different from double. Here are the possible values -# float (24-bit precision); typically this is far to inaccurate for geodetic applications. -# double precision (53-bit precision, the default). -# long double (64-bit precision); this does not apply for Visual Studio (long double is the same as double with that compiler). -# quad precision (113-bit precision). -# arbitrary precision. - USE_BOOST_FOR_EXAMPLES (default: OFF). If set to ON, then the Boost library is searched for in order to build the NearestNeighbor example. - APPLE_MULTIPLE_ARCHITECTURES (default: OFF). If set to ON, build for i386 and x86_64 and Mac OS X systems. Otherwise, build for the default architecture. - CONVERT_WARNINGS_TO_ERRORS (default: OFF). If set to ON, then compiler warnings are treated as errors. . - Build and install the software. In non-IDE environments, run \verbatim make # compile the library and utilities make testprograms test # run some tests make install # as root, if CMAKE_INSTALL_PREFIX is a system directory \endverbatim Possible additional targets are \verbatim make libs # make the libraries only, not the utilities make tools # make the utilities make testprograms # make the programs needed for "make test" make exampleprograms # make the example programs \endverbatim On IDE environments, run your IDE (e.g., Visual Studio), load GeographicLib.sln, pick the build type (e.g., Release), and select "Build Solution". If this succeeds, select "RUN_TESTS" to build; finally, select "INSTALL" to install (RUN_TESTS and INSTALL are in the CMakePredefinedTargets folder). Alternatively (for example, if you are using the Visual Studio 2017 Build Tools), you run the Visual Studio compiler from the command line with \verbatim cmake --build . --config Release --target ALL_BUILD cmake --build . --config Release --target RUN_TESTS cmake --build . --config Release --target INSTALL \endverbatim For maximum flexibility, it's a good idea to build and install both the Debug and Release versions of the library (in that order). The installation directories will then contain the release versions of the tools and both versions (debug and release) of the libraries. If you use cmake to configure and build your programs, then the right version of the library (debug vs. release) will automatically be used. - The headers, library, and utilities are installed in the `include/GeographicLib`, `lib`, and `bin` directories under CMAKE_INSTALL_PREFIX. (dll dynamic libraries are installed in `bin`.) For documentation, open in a web browser `share/doc/GeographicLib/html/index.html`. - CMake can create the build directory for you. This allows you to configure and run the build on Windows with \verbatim cmake -G "Visual Studio 14" -A x64 -S . -B BUILD cmake --build BUILD --config Release --target ALL_BUILD \endverbatim or on Linux with \verbatim cmake -S . -B BUILD make -C BUILD -j4 \endverbatim \section autoconf Installation using the autoconfigure tools The method works on most Unix-like systems including Linux and Mac OS X. Here are the steps to compile and install GeographicLib: - Unpack the source, running \verbatim tar xfpz GeographicLib-@PROJECT_VERSION@.tar.gz \endverbatim then enter the directory created \verbatim cd GeographicLib-@PROJECT_VERSION@ \endverbatim - Create a separate build directory and enter it, for example, \verbatim mkdir BUILD cd BUILD \endverbatim - Configure the software, specifying the path of the source directory, with \verbatim ../configure \endverbatim - By default GeographicLib will be installed under /usr/local. You can change this with, for example \verbatim ../configure --prefix=/tmp/geographic \endverbatim - Compile and install the software with \verbatim make make install \endverbatim - The headers, library, and utilities are installed in the include/GeographicLib, lib, and bin directories under prefix. For documentation, open `share/doc/GeographicLib/html/index.html` in a web browser. \section binaryinst Using a binary installer Binary installers are available for some platforms \subsection binaryinstwin Windows Use this method if you only need to use the GeographicLib utilities. The header files and static and shared versions of library are also provided; these can only be used by Visual Studio 14 2015 or later (2017, 2019, or 2022) (in either release or debug mode). However, if you plan to use the library, it may be advisable to build it with the compiler you are using for your own code using \ref cmake. Download and run GeographicLib-@PROJECT_VERSION@-win32.exe or GeographicLib-@PROJECT_VERSION@-win64.exe: - read the MIT/X11 License agreement, - select whether you want your PATH modified, - select the installation folder, by default `C:\\Program Files\\GeographicLib-@PROJECT_VERSION@` or `C:\\Program Files (x86)\\GeographicLib-@PROJECT_VERSION@`, - select the start menu folder, - and install. . (Note that the default installation folder adheres the the convention given in \ref cmake.) The start menu will now include links to the documentation for the library and for the utilities (and a link for uninstalling the library). If you ask for your PATH to be modified, it will include C:/Program FilesGeographicLib-@PROJECT_VERSION@/bin where the utilities are installed. The headers and library are installed in the `include/GeographicLib` and `lib` folders. The libraries were built using using Visual Studio 14 2015 in release and debug modes. The utilities were linked against the release-mode shared library. \subsection binaryinstosx MacOSX GeographicLib is available as Homebrew package [geographiclib](https://formulae.brew.sh/formula/geographiclib). Follow the directions on https://brew.sh/ for installing this package manager. Then type \verbatim brew install geographiclib \endverbatim Now links to GeographicLib are installed under /usr/local. \subsection binaryinstlin Linux Some Linux distributions, Fedora, Debian, and Ubuntu, offer GeographicLib as a standard package. Typically these will be one or two versions behind the latest. It's also available with the follow package managers - Homebrew package [geographiclib]( https://formulae.brew.sh/formula/geographiclib) (also for MacOSX) - conda-forge package [geographiclib-cpp]( https://anaconda.org/conda-forge/geographiclib-cpp) (also for MacOSX and Windows) - vcpkg package [geographiclib](https://vcpkg.info/port/geographiclib) (also for MacOSX and Windows) \section maintainer Maintainer tasks Some aspects of library maintenance are covered in [HOWTO-RELEASE.txt]( https://github.com/geographiclib/geographiclib/blob/main/HOWTO-RELEASE.txt). Check the code out of git with \verbatim git clone git@github.com:geographiclib/geographiclib.git \endverbatim There are three branches in the git repository: - main: the main branch for code maintenance. Releases are tagged on this branch as, e.g., v@PROJECT_VERSION@. - devel: the development branch; changes made here are merged into main. - release: the release branch created by unpacking the source releases (git is \e not used to merge changes from the other branches into this branch). This differs from the main branch in that some administrative files are excluded while some intermediate files are included (in order to aid building on as many platforms as possible). Releases are tagged on this branch as, e.g., r@PROJECT_VERSION@. . The autoconf configuration script and the formatted man pages are not checked into main branch of the repository. In order to create these, configure with cmake and run \verbatim make dist \endverbatim which will copy the man pages from the build directory back into the source tree and package the resulting source tree for distribution as \verbatim GeographicLib-@PROJECT_VERSION@.tar.gz GeographicLib-@PROJECT_VERSION@.zip \endverbatim Finally, \verbatim make package \endverbatim or building PACKAGE in Visual Studio will create a binary installer for GeographicLib. For Windows, this requires in the installation of NSIS. On Windows, you should configure GeographicLib with PACKAGE_DEBUG_LIBS=ON, build both Release and Debug versions of the library and finally build PACKAGE in Release mode. This will get the release and debug versions of the library included in the package. For example, the 64-bit binary installer is created with \verbatim cmake -G "Visual Studio 14" -A x64 \ -D BUILD_BOTH_LIBS=ON \ -D PACKAGE_DEBUG_LIBS=ON \ .. cmake --build . --config Debug --target ALL_BUILD cmake --build . --config Release --target ALL_BUILD cmake --build . --config Release --target PACKAGE \endverbatim Prior to making a release, the script develop/test-distribution.sh is run on a Fedora system. This checked that the library compiles correctly is multiple configurations. In addition it creates a directory and scripts for checking the compilation on Windows. The following Fedora packages are required by tests/test-distribution.sh - cmake - automake - autoconf-archive - libtool - gcc-c++ - ccache - doxygen - boost-devel - mpfr-devel - mpreal.h, version 3.6.9 with PR #15, from https://github.com/advanpix/mpreal and installed in the include/ directory. For all the tests to be run, the following datasets need to be installed - geoid models: `egm96-5` - magnetic models: `wmm2010` `emm2015` - gravity models: `egm2008` `grs80`
Back to \ref intro. Forward to \ref start. Up to \ref contents.
**********************************************************************/ /** \page start Getting started
Back to \ref install. Forward to \ref utilities. Up to \ref contents.
Much (but not all!) of the useful functionality of GeographicLib is available via simple command line utilities. Interfaces to some of them are available via the web. See \ref utilities for documentation on these. In order to use GeographicLib from C++ code, you will need to - Include the header files for the GeographicLib classes in your code. E.g., \code #include \endcode - Include the GeographicLib:: namespace prefix to the GeographicLib classes, or include \code using namespace GeographicLib; \endcode in your code. - Build your code with cmake. In brief, the necessary steps are: - include in your CMakeLists.txt files \verbatim find_package (GeographicLib REQUIRED) include_directories (${GeographicLib_INCLUDE_DIRS}) add_executable (program source1.cpp source2.cpp) target_link_libraries (program ${GeographicLib_LIBRARIES}) \endverbatim - configure your package, e.g., with \verbatim mkdir BUILD cd BUILD cmake -G "Visual Studio 14" -A x64 \ -D CMAKE_PREFIX_PATH="C:/Program Files" \ -D CMAKE_INSTALL_PREFIX="C:/Program Files/testgeog" \ .. \endverbatim Note that you almost always want to configure and build your code somewhere other than the source directory (in this case, we use the BUILD subdirectory). Also, on Windows, make sure that the version of Visual Studio (14 in the example above) architecture (x64 in the example above) is compatible with that used to build GeographicLib. In this example, it's not necessary to specify CMAKE_PREFIX_PATH, because C:/Program Files is one of the system paths which is searched automatically. - build your package. On Linux and MacOS this usually involves just running make. On Windows, you can load the solution file created by cmake into Visual Studio; alternatively, you can get cmake to run build your code with \verbatim cmake --build . --config Release --target ALL_BUILD \endverbatim You might also want to install your package (using "make install" or build the "INSTALL" target with the command above). CMake can create the build directory for you. This allows you to configure and run the build on Windows with \verbatim cmake -G "Visual Studio 14" -A x64 \ -D CMAKE_PREFIX_PATH="C:/Program Files" \ -D CMAKE_INSTALL_PREFIX="C:/Program Files/testgeog" \ -S . -B BUILD cmake --build BUILD --config Release --target ALL_BUILD \endverbatim or on Linux with \verbatim cmake -D CMAKE_INSTALL_PREFIX="/tmp/testgeog" \ -S . -B BUILD make -C BUILD -j4 \endverbatim NOTE: The inclusion of \verbatim include_directories (${GeographicLib_INCLUDE_DIRS}) \endverbatim is only necessary if `find_package` found GeographicLib via the `FindGeographicLib.cmake` "module". However, it's OK to include this line even for "config" lookups. The most import step in using cmake is the `find_package` command. The cmake documentation describes the locations searched by find_package (the appropriate rule for GeographicLib are those for "Config" mode lookups). In brief, the locations that are searched are (from least specific to most specific, i.e., in reverse order) are - under the system paths, i.e., locations such as C:/Program Files and /usr/local); - frequently, it's necessary to search within a "package directory" (or set of directories) for external dependencies; this is given by a (semicolon separated) list of directories specified by the cmake variable CMAKE_PREFIX_PATH (illustrated above); - the package directory for GeographicLib can be overridden with the environment variable GeographicLib_DIR (which is the directory under which GeographicLib is installed); - finally, if you need to point to a particular build of GeographicLib, define the cmake variable GeographicLib_DIR, which specifies the absolute path of the directory containing the configuration file geographiclib-config.cmake (for debugging this may be the top-level build directory, as opposed to installation directory, for GeographicLib). . Typically, specifying nothing or CMAKE_PREFIX_PATH suffices. However the two GeographicLib_DIR variables allow for a specific version to be chosen. On Windows systems (with Visual Studio), find_package will only find versions of GeographicLib built with the right version of the compiler. (If you used a non-cmake method of installing GeographicLib, you can try copying cmake/FindGeographicLib.cmake to somewhere in your CMAKE_MODULE_PATH in order for find_package to work. However, this method has not been thoroughly tested.) If GeographicLib is not found, check the values of GeographicLib_CONSIDERED_CONFIGS and GeographicLib_CONSIDERED_VERSIONS; these list the configuration files and corresponding versions which were considered by find_package. If GeographicLib is found, then the following cmake variables are set: - GeographicLib_FOUND = 1 - GeographicLib_VERSION = @PROJECT_VERSION@ - GeographicLib_INCLUDE_DIRS - GeographicLib_LIBRARIES = one of the following two: - GeographicLib_SHARED_LIBRARIES = GeographicLib::GeographicLib_SHARED - GeographicLib_STATIC_LIBRARIES = GeographicLib::GeographicLib_STATIC - GeographicLib_LIBRARY_DIRS - GeographicLib_BINARY_DIRS - GEOGRAPHICLIB_DATA = value of this compile-time parameter - GEOGRAPHICLIB_PRECISION = value of this compile-time parameter (usually 2). You can set this parameter before calling `find_package` and only versions with a matching value of `GEOGRAPHICLIB_PRECISION` will be found. . Either of GeographicLib_SHARED_LIBRARIES or GeographicLib_STATIC_LIBRARIES may be empty, if that version of the library is unavailable. If you require a specific version, SHARED or STATIC, of the library, add a COMPONENTS clause to find_package, e.g., \verbatim find_package (GeographicLib 2.0 REQUIRED COMPONENTS SHARED) \endverbatim causes only packages which include the shared library to be found. If the package includes both versions of the library, then GeographicLib_LIBRARIES is set to the shared version, unless you include \verbatim set (GeographicLib_USE_STATIC_LIBS ON) \endverbatim before the find_package command. You can check whether GeographicLib_LIBRARIES refers to the shared or static library with \verbatim get_target_property (_LIBTYPE ${GeographicLib_LIBRARIES} TYPE) \endverbatim which results in _LIBTYPE being set to SHARED_LIBRARY or STATIC_LIBRARY. On Windows, cmake takes care of linking to the release or debug version of the library as appropriate. (This assumes that the Release and Debug versions of the libraries were built and installed. This is true for the Windows binary installer for GeographicLib version 1.34 and later.) You can also use the pkg-config utility to specify compile and link flags. This requires that pkg-config be installed and that it's configured to search, e.g., /usr/local/lib/pgkconfig; if not, define the environment variable PKG_CONFIG_PATH to include this directory. The compile and link steps under Linux would typically be \verbatim g++ -c -g -O3 `pkg-config --cflags geographiclib` testprogram.cpp g++ -g -o testprogram testprogram.o `pkg-config --libs geographiclib` \endverbatim Here is a very simple test code, which uses the Geodesic class: \include example-Geodesic-small.cpp This example is examples/example-Geodesic-small.cpp. If you compile, link, and run it according to the instructions above, it should print out \verbatim 5551.76 km \endverbatim Here is a complete CMakeList.txt files you can use to build this test code using the installed library: \verbatim cmake_minimum_required (VERSION 3.16.0) project (geodesictest) find_package (GeographicLib REQUIRED) add_executable (${PROJECT_NAME} example-Geodesic-small.cpp) target_link_libraries (${PROJECT_NAME} ${GeographicLib_LIBRARIES}) \endverbatim If GeographicLib is not installed on your system, you can download and compile the library as part of your project using CMake's FetchContent with: \verbatim cmake_minimum_required (VERSION 3.16.0) project (geodesictest) include(FetchContent) FetchContent_Declare(GeographicLib GIT_REPOSITORY https://github.com/geographiclib/geographiclib.git GIT_TAG r@PROJECT_VERSION@ ) FetchContent_MakeAvailable(GeographicLib) add_executable (${PROJECT_NAME} example-Geodesic-small.cpp) target_link_libraries (${PROJECT_NAME} GeographicLib::GeographicLib) \endverbatim In this case, the library needs to be specified as GeographicLib::GeographicLib instead of ${GeographicLib_LIBRARIES} The next steps are: - Learn about and run the \ref utilities. - Read the section, \ref organization, for an overview of the library. - Browse the Class List for full documentation on the classes in the library. - Look at the example code in the examples directory. Each file provides a very simple standalone example of using one GeographicLib class. These are included in the descriptions of the classes. - Look at the source code for the utilities in the tools directory for more examples of using GeographicLib from C++ code, e.g., GeodesicProj.cpp is a program to performing various geodesic projections. Here's a list of some of the abbreviations used here with links to the corresponding Wikipedia articles: - WGS84, World Geodetic System 1984. - UTM, Universal Transverse Mercator coordinate system. - UPS, Universal Polar Stereographic coordinate system. - MGRS, Military Grid Reference System. - EGM, Earth Gravity Model. - WMM, World Magnetic Model. - IGRF, International Geomagnetic Reference Field.
Back to \ref install. Forward to \ref utilities. Up to \ref contents.
**********************************************************************/ /** \page utilities Utility programs
Back to \ref start. Forward to \ref organization. Up to \ref contents.
Various utility programs are provided with GeographicLib. These should be installed in a directory included in your PATH (e.g., /usr/local/bin). These programs are wrapper programs that invoke the underlying functionality provided by the library. The utilities are - GeoConvert: convert geographic coordinates using GeoCoords. See \ref GeoConvert.cpp. - GeodSolve: perform geodesic calculations using Geodesic and GeodesicLine. See \ref GeodSolve.cpp. - Planimeter: compute the area of geodesic polygons using PolygonAreaT. See \ref Planimeter.cpp. - TransverseMercatorProj: convert between geographic and transverse Mercator. This is for testing TransverseMercatorExact and TransverseMercator. See \ref TransverseMercatorProj.cpp. - CartConvert: convert geodetic coordinates to geocentric or local cartesian using Geocentric and LocalCartesian. See \ref CartConvert.cpp. - GeodesicProj: perform projections based on geodesics using AzimuthalEquidistant, Gnomonic, and CassiniSoldner. See \ref GeodesicProj.cpp. - ConicProj: perform conic projections using LambertConformalConic and AlbersEqualArea. See \ref ConicProj.cpp. - GeoidEval: look up geoid heights using Geoid. See \ref GeoidEval.cpp. - Gravity: compute the earth's gravitational field using GravityModel and GravityCircle. See \ref Gravity.cpp. - MagneticField: compute the earth's magnetic field using MagneticModel and MagneticCircle. See \ref MagneticField.cpp. - RhumbSolve: perform rhumb line calculations using Rhumb and RhumbLine. See \ref RhumbSolve.cpp. - IntersectTool: find intersections between two geodesics. See \ref IntersectTool.cpp. . The documentation for these utilities is in the form of man pages. This documentation can be accessed by clicking on the utility name in the list above, running the man command on Unix-like systems, or by invoking the utility with the \--help option. A brief summary of usage is given by invoking the utility with the -h option. The version of the utility is given by the \--version option. The utilities all accept data on standard input, transform it in some way, and print the results on standard output. This makes the utilities easy to use within scripts to transform tabular data; however they can also be used interactively, often with the input supplied via a pipe, e.g., - echo 38SMB4488 | GeoConvert -d Online versions of four of these utilities are provided: - GeoConvert - GeodSolve - Planimeter - GeoidEval - RhumbSolve
Back to \ref start. Forward to \ref organization. Up to \ref contents.
**********************************************************************/ /** \page organization Code organization
Back to \ref utilities. Forward to \ref other. Up to \ref contents.
Here is a brief description of the relationship between the various components of GeographicLib. All of these are defined in the GeographicLib namespace. TransverseMercator, PolarStereographic, LambertConformalConic, and AlbersEqualArea provide the basic projections. The constructors for these classes specify the ellipsoid and the forward and reverse projections are implemented as const member functions. TransverseMercator uses Krüger's series which have been extended to sixth order in the square of the eccentricity. PolarStereographic, LambertConformalConic, and AlbersEqualArea use the exact formulas for the projections (e.g., from Snyder). TransverseMercator::UTM and PolarStereographic::UPS are const static instantiations specific for the WGS84 ellipsoid with the UTM and UPS scale factors. (These do \e not add the standard false eastings or false northings for UTM and UPS.) Similarly LambertConformalConic::Mercator is a const static instantiation of this projection for a WGS84 ellipsoid and a standard parallel of 0 (which gives the Mercator projection). AlbersEqualArea::CylindricalEqualArea, AzimuthalEqualAreaNorth, and AzimuthalEqualAreaSouth, likewise provide special cases of the equal area projection. UTMUPS uses TransverseMercator::UTM and PolarStereographic::UPS to perform the UTM and UPS projections. The class offers a uniform interface to UTM and UPS by treating UPS as UTM zone 0. This class stores no internal state and the forward and reverse projections are provided via static member functions. The forward projection offers the ability to override the standard UTM/UPS choice and the UTM zone. MGRS transforms between UTM/UPS coordinates and MGRS. UPS coordinates are handled as UTM zone 0. This class stores no internal state and the forward (UTM/UPS to MGRS) and reverse (MGRS to UTM/UPS) conversions are provided via static member functions. GeoCoords holds a single geographic location which may be specified as latitude and longitude, UTM or UPS, or MGRS. Member functions are provided to convert between coordinate systems and to provide formatted representations of them. GeoConvert is a simple command line utility to provide access to the GeoCoords class. TransverseMercatorExact is a drop in replacement for TransverseMercator which uses the exact formulas, based on elliptic functions, for the projection as given by Lee. TransverseMercatorProj is a simple command line utility to test to the TransverseMercator and TransverseMercatorExact. Geodesic and GeodesicLine perform geodesic calculations. The constructor for Geodesic specifies the ellipsoid and the direct and inverse calculations are implemented as const member functions. Geocentric::WGS84 is a const static instantiation of Geodesic specific for the WGS84 ellipsoid. In order to perform a series of direct geodesic calculations on a single line, the GeodesicLine class can be used. This packages all the information needed to specify a geodesic. A const member function returns the coordinates a specified distance from the starting point. GeodSolve is a simple command line utility to perform geodesic calculations. PolygonAreaT is a class which compute the area of geodesic polygons using the Geodesic class and Planimeter is a command line utility for the same purpose. AzimuthalEquidistant, CassiniSoldner, and Gnomonic are projections based on the Geodesic class. GeodesicProj is a command line utility to exercise these projections. GeodesicExact and GeodesicLineExact are drop in replacements for Geodesic and GeodesicLine in which the solution is given in terms of elliptic integrals (computed by EllipticFunction). These classes should be used if the absolute value of the flattening exceeds 0.02. The -E option to GeodSolve uses these classes. NearestNeighbor is a header-only class for efficiently \ref nearest of a collection of points where the distance function obeys the triangle inequality. The geodesic distance obeys this condition. Geocentric and LocalCartesian convert between geodetic and geocentric or a local cartesian system. The constructor for specifies the ellipsoid and the forward and reverse projections are implemented as const member functions. Geocentric::WGS84 is a const static instantiation of Geocentric specific for the WGS84 ellipsoid. CartConvert is a simple command line utility to provide access to these classes. Geoid evaluates geoid heights by interpolation. This is provided by the operator() member function. GeoidEval is a simple command line utility to provide access to this class. This class requires installation of data files for the various geoid models; see \ref geoidinst for details. AuxAngle, AuxLatitude, and Ellipsoid are classes which performs latitude conversions and returns various properties of the ellipsoid. GravityModel evaluates the earth's gravitational field using a particular gravity model. Various member functions return the gravitational field, the gravity disturbance, the gravity anomaly, and the geoid height Gravity is a simple command line utility to provide access to this class. If the field several points on a circle of latitude are sought then use GravityModel::Circle to return a GravityCircle object whose member functions performs the calculations efficiently. (This is particularly important for high degree models such as EGM2008.) These classes requires installation of data files for the various gravity models; see \ref gravityinst for details. NormalGravity computes the gravity of the so-called level ellipsoid. MagneticModel evaluates the earth's magnetic field using a particular magnetic model. The field is provided by the operator() member function. MagneticField is a simple command line utility to provide access to this class. If the field several points on a circle of latitude are sought then use MagneticModel::Circle to return a MagneticCircle object whose operator() member function performs the calculation efficiently. (This is particularly important for high degree models such as emm2010.) These classes requires installation of data files for the various magnetic models; see \ref magneticinst for details. Constants, Math, Utility, DMS, are general utility class which are used internally by the library; in addition EllipticFunction is used by TransverseMercatorExact, Ellipsoid, and GeodesicExact, and GeodesicLineExact; Accumulator is used by PolygonAreaT, and SphericalEngine, CircularEngine, SphericalHarmonic, SphericalHarmonic1, and SphericalHarmonic2 facilitate the summation of spherical harmonic series which is needed by and MagneticModel and MagneticCircle. One important definition is Math::real which is the type used for real numbers. This allows the library to be easily switched to using floats, doubles, or long doubles. However all the testing has been with real set to double and the library should be installed in this way. GeographicLib uniformly represents all angle-like variables (latitude, longitude, azimuth) in terms of degrees. To convert from degrees to radians, multiple the quantity by Math::degree(). To convert from radians to degrees , divide the quantity by Math::degree(). In general, the constructors for the classes in GeographicLib check their arguments and throw GeographicErr exceptions with a explanatory message if these are illegal. The member functions, e.g., the projections implemented by TransverseMercator and PolarStereographic, the solutions to the geodesic problem, etc., typically do not check their arguments; the calling program should ensure that the arguments are legitimate. However, the functions implemented by UTMUPS, MGRS, and GeoCoords do check their arguments and may throw GeographicErr exceptions. Similarly Geoid may throw exceptions on file errors. If a function does throw an exception, then the function arguments used for return values will not have been altered. GeographicLib attempts to act sensibly with NaNs. NaNs in constructors typically throw errors (an exception is GeodesicLine). However, calling the class functions with NaNs as arguments is not an error; NaNs are returned as appropriate. "INV" is treated as an invalid zone designation by UTMUPS. "INVALID" is the corresponding invalid MGRS string (and similarly for GARS, Geohash, and Georef strings). NaNs allow the projection of polylines which are separated by NaNs; in this format they can be easily plotted in MATLAB. A note about portability. For the most part, the code uses standard C++ and should be able to be deployed on any system with a modern C++ compiler. System dependencies come into - Math -- GeographicLib requires support of C++11 mathematical functions. - use of long double -- the type is used only for testing. On systems which lack this data type the cmake and autoconf configuration methods should detect its absence and omit the code that depends on it. - Geoid, GravityModel, and MagneticModel -- these class uses system-dependent default paths for looking up the respective datasets. It also relies on getenv to find the value of the environment variables. - Utility::readarray reads numerical data from binary files. This assumes that floating point numbers are in IEEE format. It attempts to handled the "endianness" of the target platform using the GEOGRAPHICLIB_WORDS_BIGENDIAN macro (which sets the compile-time constant Math::bigendian). An attempt is made to maintain backward compatibility with GeographicLib (especially at the level of your source code). Sometimes it's necessary to take actions that depend on what version of GeographicLib is being used; for example, you may want to use a new feature of GeographicLib, but want your code still to work with older versions. In that case, you can test the values of the macros `GEOGRAPHICLIB_VERSION_MAJOR`, `GEOGRAPHICLIB_VERSION_MINOR`, and `GEOGRAPHICLIB_VERSION_PATCH`; these expand to numbers (and the last one is usually 0); these macros appeared starting in version 1.31. There's also a macro `GEOGRAPHICLIB_VERSION_STRING` which expands to, e.g., "@PROJECT_VERSION@"; this macro has been defined since version 1.9. Since version 1.37, there's also been a macro `GEOGRAPHICLIB_VERSION` which encodes the version as a single number, e.g, 1003900. Do not rely on this particular packing; instead use the macro GEOGRAPHICLIB_VERSION_NUM(a,b,c) which allows you to compare versions with, e.g., \code #if GEOGRAPHICLIB_VERSION >= GEOGRAPHICLIB_VERSION_NUM(1,37,0) ... #endif \endcode
Back to \ref utilities. Forward to \ref other. Up to \ref contents.
**********************************************************************/ /** \page other GeographicLib in other languages
Back to \ref organization. Forward to \ref geoid. Up to \ref contents.
Jump to - \ref implement. - \ref wrappers. - \ref maxima. \section implement Implementations in other languages Various subsets of GeographicLib have been implemented in other languages: [C](../../C/doc/index.html), [Fortran](../../Fortran/doc/index.html), [Python](../../Python/doc/index.html), [Octave/MATLAB](https://github.com/geographiclib/geographiclib-octave#readme), [Java](../../Java/doc/index.html), and [JavaScript](../../JavaScript/doc/index.html). These are described [here](../../doc/library.html#languages) on the main [GeographicLib web page](../../index.html). For the most part, these implementations focus on the geodesic capabilities of GeographicLib, i.e., the classes Geodesic, GeodesicLine, and PolygonAreaT. The exceptions are - The [Java package GeographicLib-Java]( https://search.maven.org/artifact/net.sf.geographiclib/GeographicLib-Java) includes an implementation of the Gnomonic projection - The [Octave/MATLAB package geographiclib](https://github.com/geographiclib/geographiclib-octave#readme) also includes implementations of TransverseMercator, PolarStereographic, AzimuthalEquidistant, CassiniSoldner, Gnomonic, UTMUPS, MGRS, Geoid, Geocentric, LocalCartesian. In addition this package includes calculations for \ref greatellipse. \section wrappers Using wrappers to invoke GeographicLib Alternatively, it is possible to call the C++ library directly from certain other languages. Examples of this idiom are given in the [`wrapper`](https://github.com/geographiclib/geographiclib/blob/main/wrapper) directory in the source distribution. - The C example in [`wrapper/c`]( https://github.com/geographiclib/geographiclib/blob/main/wrapper/c) gives a small example, which converts heights above the geoid to heights above the ellipsoid. - For JavaScript, [`wrapper/javascript`]( https://github.com/geographiclib/geographiclib/blob/main/wrapper/javascript), there is a minimal description of translating C++ source code to JavaScript. - The Python example in [`wrapper/python`]( https://github.com/geographiclib/geographiclib/blob/main/wrapper/python) showns how to convert heights above the geoid to heights above the ellipsoid using `boost-python`. An alternation is to use [Cython](https::/cython.org). - It is also possible to call the C++ version of GeographicLib directly from Octave or MATLAB. The example in [`wrapper/octave`]( https://github.com/geographiclib/geographiclib/blob/main/wrapper/octave) solves the inverse geodesic problem for ellipsoids with arbitrary flattening. - The Excel example in [`wrapper/excel`]( https://github.com/geographiclib/geographiclib/blob/main/wrapper/excel) shows how to call the C++ library from Visual Basic which, in turn, allows the functionality to be exposed in Excel. Here computations involving geodesics and rhumb are illustrated. At present this works only on Windows systems. \section maxima Maxima routines Maxima is a free computer algebra system which can be downloaded from https://maxima.sourceforge.io. Maxima was used to generate the series used by TransverseMercator ( tmseries.mac), Geodesic ( geod.mac), Rhumb ( rhumbarea.mac), \ref gearea ( gearea.mac), the relation between \ref auxlat ( auxlat.mac), and to generate accurate data for testing ( tm.mac and geodesic.mac). The latter uses Maxima's bigfloat arithmetic together with series extended to high order or solutions in terms of elliptic integrals ( ellint.mac). These files contain brief instructions on how to use them.
Back to \ref organization. Forward to \ref geoid. Up to \ref contents.
**********************************************************************/ /** \page geoid Geoid height
Back to \ref other. Forward to \ref gravity. Up to \ref contents.
The gravitational equipotential surface approximately coinciding with mean sea level is called the geoid. The Geoid class and the GeoidEval utility evaluate the height of the geoid above the WGS84 ellipsoid. This can be used to convert heights above mean sea level to heights above the WGS84 ellipsoid. Because the normal to the ellipsoid differs from the normal to the geoid (the direction of a plumb line) there is a slight ambiguity in the measurement of heights; however for heights up to 10 km this ambiguity is only 1 mm. The geoid is usually approximated by an "earth gravity model" (EGM). The models published by the NGA are: - EGM84: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#tab_egm84 - EGM96: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#tab_egm96 - EGM2008: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#tab_egm2008 . Geoid offers a uniform way to handle all 3 geoids models at a variety of grid resolutions. (In contrast, the software tools that NGA offers are different for each geoid model, and the interpolation programs are different for each grid resolution. In addition these tools are written in Fortran with is nowadays difficult to integrate with other software.) The height of the geoid above the ellipsoid, \e N, is sometimes called the geoid undulation. It can be used to convert a height above the ellipsoid, \e h, to the corresponding height above the geoid (the orthometric height, roughly the height above mean sea level), \e H, using the relations    \e h = \e N + \e H;   \e H = −\e N + \e h. Unlike other components of GeographicLib, there is a appreciable error in the results obtained (at best, the RMS error is 1 mm). However the class provides methods to report the maximum and RMS errors in the results. The class also returns the gradient of the geoid. This can be used to estimate the direction of a plumb line relative to the WGS84 ellipsoid. The GravityModel class calculates geoid heights using the underlying gravity model. This is slower then Geoid but considerably more accurate. This class also can accurately compute all the components of the acceleration due to gravity (and hence the direction of plumb line). Go to - \ref geoidinst - \ref geoidformat - \ref geoidinterp - \ref geoidcache - \ref testgeoid \section geoidinst Installing the geoid datasets The geoid heights are computed using interpolation into a rectangular grid. The grids are read from data files which have been are computed using the NGA synthesis programs in the case of the EGM84 and EGM96 models and using the NGA binary gridded data files in the case of EGM2008. These data files are available for download:
Available geoid data files
name geoid grid size\n(MB)
Download Links (size, MB)
tar file Windows\n installer zip file
egm84-30 EGM84
30'
0.6
link (0.5)
link (0.8)
link (0.5)
egm84-15 EGM84
15'
2.1
link (1.5)
link (1.9)
link (2.0)
egm96-15 EGM96
15'
2.1
link (1.5)
link (1.9)
link (2.0)
egm96-5 EGM96
5'
19
link (11)
link (11)
link (17)
egm2008-5 EGM2008
5'
19
link (11)
link (11)
link (17)
egm2008-2_5 EGM2008
2.5'
75
link (35)
link (33)
link (65)
egm2008-1 EGM2008
1'
470
link (170)
link (130)
link (390)
The "size" column is the size of the uncompressed data and it also gives the memory requirements for caching the entire dataset using the Geoid::CacheAll method. At a minimum you should install egm96-5 and either egm2008-1 or egm2008-2_5. Many applications use the EGM96 geoid, however the use of EGM2008 is growing. (EGM84 is rarely used now.) For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-geoids (typically installed in /usr/local/sbin) which automates the process of downloading and installing the geoid data. For example \verbatim geographiclib-get-geoids best # to install egm84-15, egm96-5, egm2008-1 geographiclib-get-geoids -h # for help \endverbatim This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "geoids" subdirectory. Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being \verbatim C:/ProgramData/GeographicLib \endverbatim (which you probably should not change) and the data is installed in the "geoids" sub-directory. (The second directory name is an alternate name that Windows 7 uses for the "Application Data" directory.) Otherwise download \e either the tar.bz2 file \e or the zip file (they have the same contents). If possible use the tar.bz2 files, since these are compressed about 2 times better than the zip file. To unpack these, run, for example \verbatim mkdir -p /usr/local/share/GeographicLib tar xofjC egm96-5.tar.bz2 /usr/local/share/GeographicLib tar xofjC egm2008-2_5.tar.bz2 /usr/local/share/GeographicLib etc. \endverbatim and, again, the data will be placed in the "geoids" subdirectory. However you install the geoid data, all the datasets should be installed in the same directory. Geoid and GeoidEval uses a compile time default to locate the datasets. This is - /usr/local/share/GeographicLib/geoids, for non-Windows systems - C:/ProgramData/GeographicLib/geoids, for Windows systems . consistent with the examples above. This may be overridden at run-time by defining the GEOGRAPHICLIB_GEOID_PATH or the GEOGRAPHICLIB_DATA environment variables; see Geoid::DefaultGeoidPath() for details. Finally, the path may be set using the optional second argument to the Geoid constructor or with the "-d" flag to GeoidEval. Supplying the "-h" flag to GeoidEval reports the default geoid path for that utility. The "-v" flag causes GeoidEval to report the full path name of the data file it uses. \section geoidformat The format of the geoid data files The gridded data used by the Geoid class is stored in 16-bit PGM files. Thus the data for egm96-5 might be stored in the file - /usr/local/share/GeographicLib/geoids/egm96-5.pgm . PGM simple graphic format with the following properties - it is well documented here; - there are no separate "little-endian" and "big-endian" versions; - it uses 1 or 2 bytes per pixel; - pixels can be randomly accessed; - comments can be added to the file header; - it is sufficiently simple that it can be easily read without using the libnetpbm library (and thus we avoid adding a software dependency to GeographicLib). . The major drawback of this format is that since there are only 65535 possible pixel values, the height must be quantized to 3 mm. However, the resulting quantization error (up to 1.5 mm) is typically smaller than the linear interpolation errors. The comments in the header for egm96-5 are \verbatim # Geoid file in PGM format for the GeographicLib::Geoid class # Description WGS84 EGM96, 5-minute grid # URL https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#tab_egm96 # DateTime 2009-08-29 18:45:03 # MaxBilinearError 0.140 # RMSBilinearError 0.005 # MaxCubicError 0.003 # RMSCubicError 0.001 # Offset -108 # Scale 0.003 # Origin 90N 0E # AREA_OR_POINT Point # Vertical_Datum WGS84 \endverbatim Of these lines, the Scale and Offset lines are required and define the conversion from pixel value to height (in meters) using \e height = \e offset + \e scale \e pixel. The Geoid constructor also reads the Description, DateTime, and error lines (if present) and stores the resulting data so that it can be returned by Geoid::Description, Geoid::DateTime, Geoid::MaxError, and Geoid::RMSError methods. The other lines serve as additional documentation but are not used by this class. Accompanying egm96-5.pgm (and similarly with the other geoid data files) are two files egm96-5.wld and egm96-5.pgm.aux.xml. The first is an ESRI "world" file and the second supplies complete projection metadata for use by GDAL. Neither of these files is read by Geoid. You can use gdal_translate to convert the data files to a standard GeoTiff, e.g., with \verbatim gdal_translate -ot Float32 -scale 0 65000 -108 87 egm96-5.pgm egm96-5.tif \endverbatim The arguments to -scale here are specific to the Offset and Scale parameters used in the pgm file (note 65000 * 0.003 − 108 = 87). You can check these by running GeoidEval with the "-v" option. Here is a sample script which uses GDAL to create a 1-degree squared grid of geoid heights at 3" resolution (matching DTED1) by bilinear interpolation. \verbatim #! /bin/sh lat=37 lon=067 res=3 # resolution in seconds TEMP=`mktemp junkXXXXXXXXXX` # temporary file for GDAL gdalwarp -q -te `echo $lon $lat $res | awk '{ lon = $1; lat = $2; res = $3; printf "%.14f %.14f %.14f %.14f", lon -0.5*res/3600, lat -0.5*res/3600, lon+1+0.5*res/3600, lat+1+0.5*res/3600; }'` -ts $((3600/res+1)) $((3600/res+1)) -r bilinear egm96-5.tif $TEMP gdal_translate -quiet \ -mo AREA_OR_POINT=Point \ -mo Description="WGS84 EGM96, $res-second grid" \ -mo Vertical_Datum=WGS84 \ -mo Tie_Point_Location=pixel_corner \ $TEMP e$lon-n$lat.tif rm -f $TEMP \endverbatim Because the pgm files are uncompressed, they can take up a lot of disk space. Some compressed formats compress in tiles and so might be compatible with the requirement that the data can be randomly accessed. In particular gdal_translate can be used to convert the pgm files to compressed tiff files with \verbatim gdal_translate -co COMPRESS=LZW -co PREDICTOR=2 -co TILED=YES \ –a_offset -108 -a_scale 0.003 \ egmyy-g.pgm egmyy-g.tif \endverbatim (The -a_offset and -a_scale options were introduced in gdal_translate version 2.3.) The resulting files sizes are \verbatim pgm tif egm84-30 0.6 MB 0.5 MB egm84-15 2.1 MB 1.4 MB egm96-15 2.1 MB 1.5 MB egm96-5 19 MB 8.5 MB egm2008-5 19 MB 9.8 MB egm2008-2_5 75 MB 28 MB egm2008-1 470 MB 97 MB \endverbatim Currently, there are no plans for GeographicLib to support this compressed format. The Geoid class only handles world-wide geoid models. The pgm provides geoid height postings on grid of points with uniform spacing in latitude (row) and longitude (column). If the dimensions of the pgm file are \e h × \e w, then latitude (resp. longitude) spacing is −180°/(\e h − 1) (resp. 360°/\e w), with the (0,0) pixel given the value at φ = 90°, λ = 0°. Models covering a limited area will need to be "inserted" into a world-wide grid before being accessible to the Geoid class. \section geoidinterp Interpolating the geoid data Geoid evaluates the geoid height using bilinear or cubic interpolation. The bilinear interpolation is based on the values at the 4 corners of the enclosing cell. The interpolated height is a continuous function of position; however the gradient has discontinuities are cell boundaries. The quantization of the data files exacerbates the errors in the gradients. The cubic interpolation is a least-squares fit to the values on a 12-point stencil with weights as follows: \verbatim . 1 1 . 1 2 2 1 1 2 2 1 . 1 1 . \endverbatim The cubic is constrained to be independent of longitude when evaluating the height at one of the poles. Cubic interpolation is considerably more accurate than bilinear interpolation; however, in this implementation there are small discontinuities in the heights are cell boundaries. The over-constrained cubic fit slightly reduces the quantization errors on average. The algorithm for the least squares fit is taken from, F. H. Lesh, Multi-dimensional least-squares polynomial curve fitting, CACM 2, 29--30 (1959). This algorithm is not part of Geoid; instead it is implemented as Maxima code which is used to precompute the matrices to convert the function values on the stencil into the coefficients from the cubic polynomial. This code is included as a comment in Geoid.cpp. The interpolation methods are quick and give good accuracy. Here is a summary of the combined quantization and interpolation errors for the heights.
Interpolation and quantization errors for geoid heights
name geoid grid
bilinear error
cubic error
max
rms
max
rms
egm84-30 EGM84
30'
1.546 m
70 mm
0.274 m
14 mm
egm84-15 EGM84
15'
0.413 m
18 mm
0.021 m
1.2 mm
egm96-15 EGM96
15'
1.152 m
40 mm
0.169 m
7.0 mm
egm96-5 EGM96
5'
0.140 m
4.6 mm
0.0032 m
0.7 mm
egm2008-5 EGM2008
5'
0.478 m
12 mm
0.294 m
4.5 mm
egm2008-2_5EGM2008
2.5'
0.135 m
3.2 mm
0.031 m
0.8 mm
egm2008-1 EGM2008
1'
0.025 m
0.8 mm
0.0022 m
0.7 mm
The errors are with respect to the specific NGA earth gravity model (not to any "real" geoid). The RMS values are obtained using 5 million uniformly distributed random points. The maximum values are obtained by evaluating the errors using a different grid with points at the centers of the original grid. (The RMS difference between EGM96 and EGM2008 is about 0.5 m. The RMS difference between EGM84 and EGM96 is about 1.5 m.) The errors in the table above include the quantization errors that arise because the height data that Geoid uses are quantized to 3 mm. If, instead, Geoid were to use data files without such quantization artifacts, the overall error would be reduced but only modestly as shown in the following table, where only the changed rows are included and where the changed entries are given in bold:
Interpolation (only!) errors for geoid heights
name geoid grid
bilinear error
cubic error
max
rms
max
rms
egm96-5 EGM96
5'
0.140 m
4.6 mm
0.0026 m
0.1 mm
egm2008-2_5EGM2008
2.5'
0.135 m
3.2 mm
0.031 m
0.4 mm
egm2008-1 EGM2008
1'
0.025 m
0.6 mm
0.0010 m
0.011 mm
\section geoidcache Caching the geoid data A simple way of calling Geoid is as follows \code #include #include ... GeographicLib::Geoid g("egm96-5"); double lat, lon; while (std::cin >> lat >> lon) std::cout << g(lat, lon) << "\n"; ... \endcode The first call to g(lat, lon) causes the data for the stencil points (4 points for bilinear interpolation and 12 for cubic interpolation) to be read and the interpolated value returned. A simple 0th-order caching scheme is provided by default, so that, if the second and subsequent points falls within the same grid cell, the data values are not reread from the file. This is adequate for most interactive use and also minimizes disk accesses for the case when a continuous track is being followed. If a large quantity of geoid calculations are needed, the calculation can be sped up by preloading the data for a rectangular block with Geoid::CacheArea or the entire dataset with Geoid::CacheAll. If the requested points lie within the cached area, the cached data values are used; otherwise the data is read from disk as before. Caching all the data is a reasonable choice for the 5' grids and coarser. Caching all the data for the 1' grid will require 0.5 GB of RAM and should only be used on systems with sufficient memory. The use of caching does not affect the values returned. Because of the caching and the random file access, this class is \e not normally thread safe; i.e., a single instantiation cannot be safely used by multiple threads. If multiple threads need to calculate geoid heights, there are two alternatives: - they should all construct thread-local instantiations. - Geoid should be constructed with \e threadsafe = true. This causes all the data to be read at the time of construction (and if this fails, an exception is thrown), the data file to be closed and the single-cell caching to be turned off. The resulting object may then be shared safely between threads. \section testgeoid Test data for geoids A test set for the geoid models is available at - GeoidHeights.dat.gz . This is about 11 MB (compressed). This test set consists of a set of 500000 geographic coordinates together with the corresponding geoid heights according to various earth gravity models. Each line of the test set gives 5 space delimited numbers - latitude (degrees, exact) - longitude (degrees, exact) - EGM84 height (meters, accurate to 1 μm) - EGM96 height (meters, accurate to 1 μm) - EGM2008 height (meters, accurate to 1 μm) . The latitude and longitude are all multiples of 10−6 deg and should be regarded as exact. The geoid heights are computed using the harmonic NGA synthesis programs, where the programs were compiled (with gfortran) and run under Linux. In the case of the EGM2008 program, a SAVE statement needed to be added to subroutine latf, in order for the program to compile correctly with a stack-based compiler. Similarly the EGM96 code requires a SAVE statement in subroutine legfdn.
Back to \ref other. Forward to \ref gravity. Up to \ref contents.
**********************************************************************/ /** \page gravity Gravity models
Back to \ref geoid. Forward to \ref normalgravity. Up to \ref contents.
GeographicLib can compute the earth's gravitational field with an earth gravity model using the GravityModel and GravityCircle classes and with the Gravity utility. These models expand the gravitational potential of the earth as sum of spherical harmonics. The models also specify a reference ellipsoid, relative to which geoid heights and gravity disturbances are measured. Underlying all these models is normal gravity which is the exact solution for an idealized rotating ellipsoidal body. This is implemented with the NormalGravity class and some notes on are provided in section \ref normalgravity Go to - \ref gravityinst - \ref gravityformat - \ref gravitynga - \ref gravitygeoid - \ref gravityatmos - \ref gravityparallel - \ref normalgravity (now on its own page) The supported models are - egm84, the Earth Gravity Model 1984, which includes terms up to degree 180. - egm96, the Earth Gravity Model 1996, which includes terms up to degree 360. - egm2008, the Earth Gravity Model 2008, which includes terms up to degree 2190. See also Pavlis et al. (2012) - wgs84, the WGS84 Reference Ellipsoid. This is just reproduces the normal gravitational field for the reference ellipsoid. This includes the zonal coefficients up to order 20. Usually NormalGravity::WGS84() should be used instead. - grs80, the GRS80 Reference Ellipsoid. This is just reproduces the normal gravitational field for the GRS80 ellipsoid. This includes the zonal coefficients up to order 20. Usually NormalGravity::GRS80() should be used instead. See - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San Francisco, 1967). https://archive.org/details/HeiskanenMoritz1967PhysicalGeodesy . for more information. Acknowledgment: I would like to thank Mathieu Peyréga for sharing EGM_Geoid_CalculatorClass from his Geo library with me. His implementation was the first I could easily understand and he and I together worked through some of the issues with overflow and underflow the occur while performing high-degree spherical harmonic sums. \section gravityinst Installing the gravity models These gravity models are available for download:
Available gravity models
name max\n degree size\n(kB)
Download Links (size, kB)
tar file Windows\n installer zip file
egm84
180
27
link (26)
link (55)
link (26)
egm96
360
2100
link (2100)
link (2300)
link (2100)
egm2008
2190
76000
link (75000)
link (72000)
link (73000)
wgs84
20
1
link (1)
link (30)
link (1)
The "size" column is the size of the uncompressed data. For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-gravity (typically installed in /usr/local/sbin) which automates the process of downloading and installing the gravity models. For example \verbatim geographiclib-get-gravity all # to install egm84, egm96, egm2008, wgs84 geographiclib-get-gravity -h # for help \endverbatim This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "gravity" subdirectory. Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being \verbatim C:/ProgramData/GeographicLib \endverbatim (which you probably should not change) and the data is installed in the "gravity" sub-directory. (The second directory name is an alternate name that Windows 7 uses for the "Application Data" directory.) Otherwise download \e either the tar.bz2 file \e or the zip file (they have the same contents). To unpack these, run, for example \verbatim mkdir -p /usr/local/share/GeographicLib tar xofjC egm96.tar.bz2 /usr/local/share/GeographicLib tar xofjC egm2008.tar.bz2 /usr/local/share/GeographicLib etc. \endverbatim and, again, the data will be placed in the "gravity" subdirectory. However you install the gravity models, all the datasets should be installed in the same directory. GravityModel and Gravity uses a compile time default to locate the datasets. This is - /usr/local/share/GeographicLib/gravity, for non-Windows systems - C:/ProgramData/GeographicLib/gravity, for Windows systems . consistent with the examples above. This may be overridden at run-time by defining the GEOGRAPHICLIB_GRAVITY_PATH or the GEOGRAPHICLIB_DATA environment variables; see GravityModel::DefaultGravityPath() for details. Finally, the path may be set using the optional second argument to the GravityModel constructor or with the "-d" flag to Gravity. Supplying the "-h" flag to Gravity reports the default path for gravity models for that utility. The "-v" flag causes Gravity to report the full path name of the data file it uses. \section gravityformat The format of the gravity model files The constructor for GravityModel reads a file called NAME.egm which specifies various properties for the gravity model. It then opens a binary file NAME.egm.cof to obtain the coefficients of the spherical harmonic sum. The first line of the .egm file must consist of "EGMF-v" where EGMF stands for "Earth Gravity Model Format" and v is the version number of the format (currently "1"). The rest of the File is read a line at a time. A # character and everything after it are discarded. If the result is just white space it is discarded. The remaining lines are of the form "KEY WHITESPACE VALUE". In general, the KEY and the VALUE are case-sensitive. GravityModel only pays attention to the following keywords - keywords that affect the field calculation, namely: - ModelRadius (required), the normalizing radius for the model in meters. - ReferenceRadius (required), the equatorial radius \e a for the reference ellipsoid meters. - ModelMass (required), the mass constant \e GM for the model in meters3/seconds2. - ReferenceMass (required), the mass constant \e GM for the reference ellipsoid in meters3/seconds2. - AngularVelocity (required), the angular velocity ω for the model \e and the reference ellipsoid in rad seconds−1. - Flattening, the flattening of the reference ellipsoid; this can be given a fraction, e.g., 1/298.257223563. One of Flattening and DynamicalFormFactor is required. - DynamicalFormFactor, the dynamical form factor J2 for the reference ellipsoid. One of Flattening and DynamicalFormFactor is required. - HeightOffset (default 0), the constant height offset (meters) added to obtain the geoid height. - CorrectionMultiplier (default 1), the multiplier for the "zeta-to-N" correction terms for the geoid height to convert them to meters. - Normalization (default full), the normalization used for the associated Legendre functions (full or schmidt). - ID (required), 8 printable characters which serve as a signature for the .egm.cof file (they must appear as the first 8 bytes of this file). . The parameters ModelRadius, ModelMass, and AngularVelocity apply to the gravity model, while ReferenceRadius, ReferenceMass, AngularVelocity, and either Flattening or DynamicalFormFactor characterize the reference ellipsoid. AngularVelocity (because it can be measured precisely) is the same for the gravity model and the reference ellipsoid. ModelRadius is merely a scaling parameter for the gravity model and there's no requirement that it be close to the equatorial radius of the earth (although that's typically how it is chosen). ModelMass and ReferenceMass need not be the same and, indeed, they are slightly difference for egm2008. As a result the disturbing potential \e T has a 1/\e r dependence at large distances. - keywords that store data that the user can query: - Name, the name of the model. - Description, a more descriptive name of the model. - ReleaseDate, when the model was created. - keywords that are examined to verify that their values are valid: - ByteOrder (default little), the order of bytes in the .egm.cof file. Only little endian is supported at present. . Other keywords are ignored. The coefficient file NAME.egm.cof is a binary file in little endian order. The first 8 bytes of this file must match the ID given in NAME.egm. This is followed by 2 sets of spherical harmonic coefficients. The first of these gives the gravity potential and the second gives the zeta-to-N corrections to the geoid height. The format for each set of coefficients is: - \e N, the maximum degree of the sum stored as a 4-byte signed integer. This must satisfy \e N ≥ −1. - \e M, the maximum order of the sum stored as a 4-byte signed integer. This must satisfy \e N ≥ \e M ≥ −1. - Cnm, the coefficients of the cosine coefficients of the sum in column (i.e., \e m) major order. There are (\e M + 1) (2\e N - \e M + 2) / 2 elements which are stored as IEEE doubles (8 bytes). For example for \e N = \e M = 3, there are 10 coefficients arranged as C00, C10, C20, C30, C11, C21, C31, C22, C32, C33. - Snm, the coefficients of the sine coefficients of the sum in column (i.e., \e m) major order starting at \e m = 1. There are \e M (2\e N - \e M + 1) / 2 elements which are stored as IEEE doubles (8 bytes). For example for \e N = \e M = 3, there are 6 coefficients arranged as S11, S21, S31, S22, S32, S33. . Although the coefficient file is in little endian order, GeographicLib can read it on big endian machines. It can only be read on machines which store doubles in IEEE format. As an illustration, here is egm2008.egm: \verbatim EGMF-1 # An Earth Gravity Model (Format 1) file. For documentation on the # format of this file see # https://geographiclib.sourceforge.io/C++/doc/gravity.html#gravityformat Name egm2008 Publisher National Geospatial Intelligence Agency Description Earth Gravity Model 2008 URL https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84#tab_egm2008 ReleaseDate 2008-06-01 ConversionDate 2011-11-19 DataVersion 1 ModelRadius 6378136.3 ModelMass 3986004.415e8 AngularVelocity 7292115e-11 ReferenceRadius 6378137 ReferenceMass 3986004.418e8 Flattening 1/298.257223563 HeightOffset -0.41 # Gravitational and correction coefficients taken from # EGM2008_to2190_TideFree and Zeta-to-N_to2160_egm2008 from # the egm2008 distribution. ID EGM2008A \endverbatim The code to produce the coefficient files for the wgs84 and grs80 models is \include make-egmcof.cpp \section gravitynga Comments on the NGA harmonic synthesis code GravityModel attempts to reproduce the results of NGA's harmonic synthesis code for EGM2008, hsynth_WGS84.f. Listed here are issues that I encountered using the NGA code: -# A compiler which allocates local variables on the stack produces an executable with just returns NaNs. The problem here is a missing SAVE statement in subroutine latf. -# Because the model and references masses for egm2008 differ (by about 1 part in 109), there should be a 1/\e r contribution to the disturbing potential \e T. However, this term is set to zero in hsynth_WGS84 (effectively altering the normal potential). This shifts the surface \e W = U0 outward by about 5 mm. Note too that the reference ellipsoid is no longer a level surface of the effective normal potential. -# Subroutine radgrav computes the ellipsoidal coordinate β incorrectly. This leads to small errors in the deflection of the vertical, ξ and η, when the height above the ellipsoid, \e h, is non-zero (about 10−7 arcsec at \e h = 400 km). -# There are several expressions which will return inaccurate results due to cancellation. For example, subroutine grs computes the flattening using \e f = 1 − sqrt(1 − e2). Much better is to use \e f = e2/(1 + sqrt(1 − e2)). The expressions for \e q and \e q' in grs and radgrav suffer from similar problems. The resulting errors are tiny (about 50 pm in the geoid height); however, given that's there's essentially no cost to using more accurate expressions, it's preferable to do so. -# hsynth_WGS84 returns an "undefined" value for \e xi and \e eta at the poles. Better would be to return the value obtained by taking the limit \e lat → ± 90°. . Issues 1--4 have been reported to the authors of hsynth_WGS84. Issue 1 is peculiar to Fortran and is not encountered in C++ code and GravityModel corrects issues 3--5. On issue 2, GravityModel neglects the 1/\e r term in \e T in GravityModel::GeoidHeight and GravityModel::SphericalAnomaly in order to produce results which match NGA's for these quantities. On the other hand, GravityModel::Disturbance and GravityModel::T do include this term. \section gravitygeoid Details of the geoid height and anomaly calculations Ideally, the geoid represents a surface of constant gravitational potential which approximates mean sea level. In reality some approximations are taken in determining this surface. The steps taking by GravityModel in computing the geoid height are described here (in the context of EGM2008). This mimics NGA's code hsynth_WGS84 closely because most users of EGM2008 use the gridded data generated by this code (e.g., Geoid) and it is desirable to use a consistent definition of the geoid height. - The model potential is band limited; the minimum wavelength that is represented is 360°/2160 = 10' (i.e., about 10NM or 18.5km). The maximum degree for the spherical harmonic sum is 2190; however the model was derived using ellipsoidal harmonics of degree and order 2160 and the degree was increased to 2190 in order to capture the ellipsoidal harmonics faithfully with spherical harmonics. - The 1/\e r term is omitted from the \e T (this is issue 2 in \ref gravitynga). This moves the equipotential surface by about 5mm. - The surface \e W = U0 is determined by Bruns' formula, which is roughly equivalent to a single iteration of Newton's method. The RMS error in this approximation is about 1.5mm with a maximum error of about 10 mm. - The model potential is only valid above the earth's surface. A correction therefore needs to be included where the geoid lies beneath the terrain. This is NGA's "zeta-to-N" correction, which is represented by a spherical harmonic sum of degree and order 2160 (and so it misses short wavelength terrain variations). In addition, it entails estimating the isostatic equilibrium of the earth's crust. The correction lies in the range [−5.05 m, 0.05 m], however for 99.9% of the earth's surface the correction is less than 10 mm in magnitude. - The resulting surface lies above the observed mean sea level, so −0.41m is added to the geoid height. (Better would be to change the potential used to define the geoid; but this would only change the result by about 2mm.) . A useful discussion of the problems with defining a geoid is given by Dru A. Smith in There is no such thing as "The" EGM96 geoid: Subtle points on the use of a global geopotential model, IGeS Bulletin No. 8, International Geoid Service, Milan, Italy, pp. 17--28 (1998). GravityModel::GeoidHeight reproduces the results of the several NGA codes for harmonic synthesis with the following maximum discrepancies: - egm84 = 1.1mm. This is probably due to inconsistent parameters for the reference ellipsoid in the NGA code. (In particular, the value of mass constant excludes the atmosphere; however, it's not clear whether the other parameters have been correspondingly adjusted.) Note that geoid heights predicted by egm84 differ from those of more recent gravity models by about 1 meter. - egm96 = 23nm. - egm2008 = 78pm. After addressing some of the issues alluded to in issue 4 in \ref gravitynga, the maximum discrepancy becomes 23pm. The formula for the gravity anomaly vector involves computing gravity and normal gravity at two different points (with the displacement between the points unknown ab initio). Since the gravity anomaly is already a small quantity it is sometimes acceptable to employ approximations that change the quantities by \e O(\e f). The NGA code uses the spherical approximation described by Heiskanen and Moritz, Sec. 2-14 and GravityModel::SphericalAnomaly uses the same approximation for compatibility. In this approximation, the gravity disturbance delta = grad \e T is calculated. Here, \e T once again excludes the 1/\e r term (this is issue 2 in \ref gravitynga and is consistent with the computation of the geoid height). Note that delta compares the gravity and the normal gravity at the \e same point; the gravity anomaly vector is then found by estimating the gradient of the normal gravity in the limit that the earth is spherically symmetric. delta is expressed in \e spherical coordinates as \e deltax, \e deltay, \e deltaz where, for example, \e deltaz is the \e radial component of delta (not the component perpendicular to the ellipsoid) and \e deltay is similarly slightly different from the usual northerly component. The components of the anomaly are then given by - gravity anomaly, \e Dg01 = \e deltaz − 2T/\e R, where \e R distance to the center of the earth; - northerly component of the deflection of the vertical, \e xi = − deltay/\e gamma, where \e gamma is the magnitude of the normal gravity; - easterly component of the deflection of the vertical, \e eta = − deltax/\e gamma. . NormalGravity computes the normal gravity accurately and avoids issue 3 of \ref gravitynga. Thus while GravityModel::SphericalAnomaly reproduces the results for \e xi and \e eta at \e h = 0, there is a slight discrepancy if \e h is non-zero. \section gravityatmos The effect of the mass of the atmosphere All of the supported models use WGS84 for the reference ellipsoid. This has (see TR8350.2, table 3.1) - \e a = 6378137 m - \e f = 1/298.257223563 - ω = 7292115 × 10−11 rad s−1 - \e GM = 3986004.418 × 108 m3 s−2. . The value of \e GM includes the mass of the atmosphere and so strictly only applies above the earth's atmosphere. Near the surface of the earth, the value of \e g will be less (in absolute value) than the value predicted by these models by about δ\e g = (4πG/\e g) \e A = 8.552 × 10−11 \e A m2/kg, where \e G is the gravitational constant, \e g is the earth's gravity, and \e A is the pressure of the atmosphere. At sea level we have \e A = 101.3 kPa, and δ\e g = 8.7 × 10−6 m s−2, approximately. (In other words the effect is about 1 part in a million; by way of comparison, buoyancy effects are about 100 times larger.) \section gravityparallel Geoid heights on a multi-processor system The egm2008 model includes many terms (over 2 million spherical harmonics). For that reason computations using this model may be slow; for example it takes about 78 ms to compute the geoid height at a single point. There are two ways to speed up this computation: - Use a GravityCircle to compute the geoid height at several points on a circle of latitude. This reduces the cost per point to about 92 μs (a reduction by a factor of over 800). - Compute the values on several circles of latitude in parallel. One of the simplest ways of doing this is with OpenMP; on an 8-processor system, this can speed up the computation by another factor of 8. . Both of these techniques are illustrated by the following code, which computes a table of geoid heights on a regular grid and writes on the result in a .gtx file. On an 8-processor Intel 3.0 GHz machine using OpenMP (-DHAVE_OPENMP=1), it takes about 10 minutes of elapsed time to compute the geoid height for EGM2008 on a 1' grid. (Without these optimizations, the computation would have taken about 50 days!) \include GeoidToGTX.cpp cmake will add in support for OpenMP for examples/GeoidToGTX.cpp, if it is available.
Back to \ref geoid. Forward to \ref normalgravity. Up to \ref contents.
**********************************************************************/ /** \page normalgravity Normal gravity
Back to \ref gravity. Forward to \ref magnetic. Up to \ref contents.
The NormalGravity class computes "normal gravity" which refers to the exact (classical) solution of an idealised system consisting of an ellipsoid of revolution with the following properties: - \e M the mass interior to the ellipsoid, - \e a the equatorial radius, - \e b the polar semi-axis, - ω the rotation rate about the polar axis. . (N.B. The mass always appears in the combination \e GM, with units m3/s2, where \e G is the gravtitational constant.) The distribution of the mass \e M within the ellipsoid is such that the surface of the ellipsoid is at a constant normal potential where the normal potential is the sum of the gravitational potential (due to the gravitational attraction) and the centrifugal potential (due to the rotation). The resulting field exterior to the ellipsoid is called normal gravity and was found by Somigliana (1929). Because the potential is constant on the ellipsoid it is sometimes referred to as the level ellipsoid. Go to - \ref normalgravcoords - \ref normalgravpot - \ref normalgravmass - \ref normalgravsurf - \ref normalgravmean - \ref normalgravj2 References: - C. Somigliana, Teoria generale del campo gravitazionale dell'ellissoide di rotazione, Mem. Soc. Astron. Ital, 4, 541--599 (1929). - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San Francisco, 1967), Secs. 1-19, 2-7, 2-8 (2-9, 2-10), 6-2 (6-3). https://archive.org/details/HeiskanenMoritz1967PhysicalGeodesy - B. Hofmann-Wellenhof, H. Moritz, Physical Geodesy (Second edition, Springer, 2006). https://doi.org/10.1007/978-3-211-33545-1 - H. Moritz, Geodetic Reference System 1980, J. Geodesy 54(3), 395--405 (1980). https://doi.org/10.1007/BF02521480 - H. Moritz, The Figure of the Earth (Wichmann, 1990). - M. Chasles, Solution nouvelle du problème de l’attraction d’un ellipsoïde hétérogène sur un point exterieur, Jour. Liouville 5, 465--488 (1840), Note 2. http://sites.mathdoc.fr/JMPA/PDF/JMPA_1840_1_5_A41_0.pdf \section normalgravcoords Ellipsoidal coordinates Two set of formulas are presented: those of Heiskanen and Moritz (1967) which are applicable to an oblate ellipsoid and a second set where the variables are distinguished with primes which apply to a prolate ellipsoid. The primes are omitted from those variables which are the same in the two cases. In the text, the parenthetical "alt." clauses apply to prolate ellipsoids. Cylindrical coordinates \f$ R,Z \f$ are expressed in terms of ellipsoidal coordinates \f[ \begin{align} R &= \sqrt{u^2 + E^2} \cos\beta = u' \cos\beta,\\ Z &= u \sin\beta = \sqrt{u'^2 + E'^2} \sin\beta, \end{align} \f] where \f[ \begin{align} E^2 = a^2 - b^2,&{} \qquad u^2 = u'^2 + E'^2,\\ E'^2 = b^2 - a^2,&{} \qquad u'^2 = u^2 + E^2. \end{align} \f] Surfaces of constant \f$ u \f$ (or \f$ u' \f$) are confocal ellipsoids. The surface \f$ u = 0 \f$ (alt. \f$ u' = 0 \f$) corresponds to the focal disc of diameter \f$ 2E \f$ (alt. focal rod of length \f$ 2E' \f$). The level ellipsoid is given by \f$ u = b \f$ (alt. \f$ u' = a \f$). On the level ellipsoid, \f$ \beta \f$ is the familiar parametric latitude. In writing the potential and the gravity, it is useful to introduce the functions \f[ \begin{align} Q(z) &= \frac1{2z^3} \biggl[\biggl(1 + \frac3{z^2}\biggr)\tan^{-1}z - \frac3z\biggr],\\ Q'(z') &= \frac{(1+z'^2)^{3/2}}{2z'^3} \biggl[\biggl(2 + \frac3{z'^2}\biggr)\sinh^{-1}z' - \frac{3\sqrt{1+z'^2}}{z'}\biggr],\\ H(z) &= \biggl(3Q(z)+z\frac{dQ(z)}{dz}\biggr)(1+z^2)\\ &= \frac1{z^4}\biggl[3(1+z^2) \biggl(1-\frac{\tan^{-1}z}z\biggr)-z^2\biggr],\\ H'(z') &= \frac{3Q'(z')}{1+z'^2}+z'\frac{dQ'(z')}{dz'}\\ &= \frac{1+z'^2}{z'^4} \biggl[3\biggl(1-\frac{\sqrt{1+z'^2}\sinh^{-1}z'}{z'}\biggr) +z'^2\biggr]. \end{align} \f] The function arguments are \f$ z = E/u \f$ (alt. \f$ z' = E'/u' \f$) and the unprimed and primed quantities are related by \f[ \begin{align} Q'(z') = Q(z),&{} \qquad H'(z') = H(z),\\ z'^2 = -\frac{z^2}{1 + z^2},&{} \qquad z^2 = -\frac{z'^2}{1 + z'^2}. \end{align} \f] The functions \f$ q(u) \f$ and \f$ q'(u) \f$ used by Heiskanen and Moritz are given by \f[ q(u) = \frac{E^3}{u^3}Q\biggl(\frac Eu\biggr),\qquad q'(u) = \frac{E^2}{u^2}H\biggl(\frac Eu\biggr). \f] The functions \f$ Q(z) \f$, \f$ Q'(z') \f$, \f$ H(z) \f$, and \f$ H'(z') \f$ are more convenient for use in numerical codes because they are finite in the spherical limit \f$ E \rightarrow 0 \f$, i.e., \f$ Q(0) = Q'(0) = \frac2{15} \f$, and \f$ H(0) = H'(0) = \frac25 \f$. \section normalgravpot The normal potential The normal potential is the sum of three components, a mass term, a quadrupole term and a centrifugal term, \f[ U = U_m + U_q + U_r. \f] The mass term is \f[ U_m = \frac {GM}E \tan^{-1}\frac Eu = \frac {GM}{E'} \sinh^{-1}\frac{E'}{u'}; \f] the quadrupole term is \f[ \begin{align} U_q &= \frac{\omega^2}2 \frac{a^2 b^3}{u^3} \frac{Q(E/u)}{Q(E/b)} \biggl(\sin^2\beta-\frac13\biggr)\\ &= \frac{\omega^2}2 \frac{a^2 b^3}{(u'^2+E'^2)^{3/2}} \frac{Q'(E'/u')}{Q'(E'/a)} \biggl(\sin^2\beta-\frac13\biggr); \end{align} \f] finally, the rotational term is \f[ U_r = \frac{\omega^2}2 R^2 = \frac{\omega^2}2 (u^2 + E^2) \cos^2\beta = \frac{\omega^2}2 u'^2 \cos^2\beta. \f] \f$ U_m \f$ and \f$ U_q \f$ are both gravitational potentials (due to mass within the ellipsoid). The total mass contributing to \f$ U_m \f$ is \f$ M \f$; the total mass contributing to \f$ U_q \f$ vanishes (far from the ellipsoid, the \f$ U_q \f$ decays inversely as the cube of the distance). \f$ U_m \f$ and \f$ U_q + U_r \f$ are separately both constant on the level ellipsoid. \f$ U_m \f$ is the normal potential for a massive non-rotating ellipsoid. \f$ U_q + U_r \f$ is the potential for a massless rotating ellipsoid. Combining all the terms, \f$ U \f$ is the normal potential for a massive rotating ellipsoid. The figure shows normal gravity for the case \f$ GM = 1 \f$, \f$ a = 1 \f$, \f$ b = 0.8 \f$, \f$ \omega = 0.3 \f$. The level ellipsoid is shown in red. Contours of constant gravity potential are shown in blue; the contour spacing is constant outside the ellipsoid and equal to 1/20 of the difference between the potentials on the ellipsoid and at the geostationary point (\f$ R = 2.2536 \f$, \f$ Z = 0 \f$); inside the ellipsoid the contour spacing is 5 times greater. The green lines are stream lines for the gravity; these are spaced at intervals of 10° in parametric latitude on the surface of the ellipsoid. The normal gravity is continued into the level ellipsoid under the assumption that the mass is concentrated on the focal disc, shown in black. \image html normal-gravity-potential-1.svg "Normal gravity" \section normalgravmass The mass distribution Typically, the normal potential, \f$ U \f$, is only of interest for outside the ellipsoid \f$ u \ge b \f$ (alt. \f$ u' \ge a \f$). In planetary applications, an open problem is finding a mass distribution which is in hydrostatic equilibrium (the mass density is non-negative and a non-decreasing function of the potential interior to the ellipsoid). However it is possible to give singular mass distributions consistent with the normal potential. For a non-rotating body, the potential \f$ U = U_m \f$ is generated by a sandwiching the mass \f$ M \f$ uniformly between the level ellipsoid with semi-axes \f$ a \f$ and \f$ b \f$ and a close similar ellipsoid with semi-axes \f$ (1-\epsilon)a \f$ and \f$ (1-\epsilon)b \f$. Chasles (1840) extends a theorem of Newton to show that the field interior to such an ellipsoidal shell vanishes. Thus the potential on the ellipsoid is constant, i.e., it is indeed a level ellipsoid. This result also holds for a non-rotating triaxial ellipsoid. Observing that \f$ U_m \f$ and \f$ U_q \f$ as defined above obey \f$ \nabla^2 U_m = \nabla^2 U_q = 0 \f$ everywhere for \f$ u > 0 \f$ (alt. \f$ u' > 0 \f$), we see that these potentials correspond to masses concentrated at \f$ u = 0 \f$ (alt. \f$ u' = 0 \f$). In the oblate case, \f$ U_m \f$ is generated by a massive disc at \f$ Z = 0 \f$, \f$ R < E \f$, with mass density (mass per unit area) \f$ \rho_m \f$ and moments of inertia about the equatorial (resp. polar) axis of \f$ A_m \f$ (resp. \f$ C_m \f$) given by \f[ \begin{align} \rho_m &= \frac M{2\pi E\sqrt{E^2 - R^2}},\\ A_m &= \frac {ME^2}3, \\ C_m &= \frac {2ME^2}3, \\ C_m-A_m &= \frac {ME^2}3. \end{align} \f] This mass distribution is the same as that produced by projecting a uniform spherical shell of mass \f$ M \f$ and radius \f$ E \f$ onto the equatorial plane. In the prolate case, \f$ U_m \f$ is generated by a massive rod at \f$ R = 0 \f$, \f$ Z < E' \f$ and now the mass density \f$ \rho'_m \f$ has units mass per unit length, \f[ \begin{align} \rho'_m &= \frac M{2E'},\\ A_m &= \frac {ME'^2}3, \\ C_m &= 0, \\ C_m-A_m &= -\frac {ME'^2}3. \end{align} \f] This mass distribution is the same as that produced by projecting a uniform spherical shell of mass \f$ M \f$ and radius \f$ E' \f$ onto the polar axis. Similarly, \f$ U_q \f$ is generated in the oblate case by \f[ \begin{align} \rho_q &= \frac{a^2 b^3 \omega^2}G \frac{2E^2 - 3R^2}{6\pi E^5 \sqrt{E^2 - R^2} Q(E/b)}, \\ A_q &= -\frac{a^2 b^3 \omega^2}G \frac2{45\,Q(E/b)}, \\ C_q &= -\frac{a^2 b^3 \omega^2}G \frac4{45\,Q(E/b)}, \\ C_q-A_q &= -\frac{a^2 b^3 \omega^2}G \frac2{45\,Q(E/b)}. \end{align} \f] The corresponding results for a prolate ellipsoid are \f[ \begin{align} \rho_q' &= \frac{a^2 b^3 \omega^2}G \frac{3Z^2 - E'^2}{12\,E'^5 Q'(E'/a)}, \\ A_q &= \frac{a^2 b^3 \omega^2}G \frac2{45\,Q'(E'/a)}, \\ C_q &= 0, \\ C_q-A_q &= -\frac{a^2 b^3 \omega^2}G \frac2{45\,Q'(E'/a)}. \end{align} \f] Summing up the mass and quadrupole terms, we have \f[ \begin{align} A &= A_m + A_q, \\ C &= C_m + C_q, \\ J_2 & = \frac{C - A}{Ma^2}, \end{align} \f] where \f$ J_2 \f$ is the dynamical form factor. \section normalgravsurf The surface gravity Each term in the potential contributes to the gravity on the surface of the ellipsoid \f[ \gamma = \gamma_m + \gamma_q + \gamma_r; \f] These are the components of gravity normal to the ellipsoid and, by convention, \f$ \gamma \f$ is positive downwards. The tangential components of the total gravity and that due to \f$ U_m \f$ vanish. Those tangential components of the gravity due to \f$ U_q \f$ and \f$ U_r \f$ cancel one another. The gravity \f$ \gamma \f$ has the following dependence on latitude \f[ \begin{align} \gamma &= \frac{b\gamma_a\cos^2\beta + a\gamma_b\sin^2\beta} {\sqrt{b^2\cos^2\beta + a^2\sin^2\beta}}\\ &= \frac{a\gamma_a\cos^2\phi + b\gamma_b\sin^2\phi} {\sqrt{a^2\cos^2\phi + b^2\sin^2\phi}}, \end{align} \f] and the individual components, \f$ \gamma_m \f$, \f$ \gamma_q \f$, and \f$ \gamma_r \f$, have the same dependence on latitude. The equatorial and polar gravities are \f[ \begin{align} \gamma_a &= \gamma_{ma} + \gamma_{qa} + \gamma_{ra},\\ \gamma_b &= \gamma_{mb} + \gamma_{qb} + \gamma_{rb}, \end{align} \f] where \f[ \begin{align} \gamma_{ma} &= \frac{GM}{ab},\qquad \gamma_{mb} = \frac{GM}{a^2},\\ \gamma_{qa} &= -\frac{\omega^2 a}6 \frac{H(E/b)}{Q(E/b)} = -\frac{\omega^2 a}6 \frac{H'(E'/a)}{Q'(E'/a)},\\ \gamma_{qb} &= \frac{\omega^2 b}3 \frac{H(E/b)}{Q(E/b)} = \frac{\omega^2 b}3 \frac{H'(E'/a)}{Q'(E'/a)},\\ \gamma_{ra} &= -\omega^2 a,\qquad \gamma_{rb} = 0. \end{align} \f] \section normalgravmean The mean gravity Performing an average of the surface gravity over the area of the ellipsoid gives \f[ \langle \gamma \rangle = \frac {4\pi a^2 b}A \biggl(\frac{2\gamma_a}{3a} + \frac{\gamma_b}{3b}\biggr), \f] where \f$ A \f$ is the area of the ellipsoid \f[ \begin{align} A &= 2\pi\biggl( a^2 + ab\frac{\sinh^{-1}(E/b)}{E/b} \biggr)\\ &= 2\pi\biggl( a^2 + b^2\frac{\tan^{-1}(E'/a)}{E'/a} \biggr). \end{align} \f] The contributions to the mean gravity are \f[ \begin{align} \langle \gamma_m \rangle &= \frac{4\pi}A GM, \\ \langle \gamma_q \rangle &= 0 \quad \text{(as expected)}, \\ \langle \gamma_r \rangle &= -\frac{4\pi}A \frac{2\omega^2 a^2b}3,\\ \end{align} \f] resulting in \f[ \langle \gamma \rangle = \frac{4\pi}A \biggl(GM - \frac{2\omega^2 a^2b}3\biggr). \f] \section normalgravj2 Possible values of the dynamical form factor The solution for the normal gravity is well defined for arbitrary \f$ M \f$, \f$ \omega \f$, \f$ a > 0\f$, and \f$ f < 1 \f$. (Note that arbitrary oblate and prolate ellipsoids are possible, although hydrostatic equilibrium would not result in a prolate ellipsoid.) However, it is much easier to measure the dynamical form factor \f$ J_2 \f$ (from the motion of artificial satellites) than the flattening \f$ f \f$. (Note too that \f$ GM \f$ is typically measured from satellite or astronomical observations and so it includes the mass of the atmosphere.) So a question for the software developer is: given values of \f$ M > 0\f$, \f$ \omega \f$, and \f$ a > 0 \f$, what are the allowed values of \f$ J_2 \f$? We restrict the question to \f$ M > 0 \f$. The (unphysical) case \f$ M = 0 \f$ is problematic because \f$ M \f$ appears in the denominator in the definition of \f$ J_2 \f$. In the (also unphysical) case \f$ M < 0 \f$, a given \f$ J_2 \f$ can result from two distinct values of \f$ f \f$. Holding \f$ M > 0\f$, \f$ \omega \f$, and \f$ a > 0 \f$ fixed and varying \f$ f \f$ from \f$ -\infty \f$ to \f$ 1 \f$, we find that \f$ J_2 \f$ monotonically increases from \f$ -\infty \f$ to \f[ \frac13 - \frac8{45\pi} \frac{\omega^2 a^3}{GM}. \f] Thus any value of \f$ J_2 \f$ less that this value is permissible (but some of these values may be unphysical). In obtaining this limiting value, we used the result \f$ Q(z \rightarrow \infty) \rightarrow \pi/(4 z^3) \f$. The value \f[ J_2 = -\frac13 \frac{\omega^2 a^3}{GM} \f] results in a sphere (\f$ f = 0 \f$).
Back to \ref gravity. Forward to \ref magnetic. Up to \ref contents.
**********************************************************************/ /** \page magnetic Magnetic models
Back to \ref normalgravity. Forward to \ref geodesic. Up to \ref contents.
GeographicLib can compute the earth's magnetic field by a magnetic model using the MagneticModel and MagneticCircle classes and with the MagneticField utility. These models expand the internal magnetic potential of the earth as sum of spherical harmonics. They neglect magnetic fields due to the ionosphere, the magnetosphere, nearby magnetized materials, electric machinery, etc. Users of MagneticModel are advised to read the "Health Warning" this is provided with igrf11. Although the advice is specific to igrf11, many of the comments apply to all magnetic field models. The supported models are - wmm2010, the World Magnetic Model 2010, which approximates the main magnetic field for the period 2010--2015. - wmm2015v2, the World Magnetic Model 2015, which approximates the main magnetic field for the period 2015--2020. - wmm2015, a deprecated version of wmm2015v2. - wmm2020, the World Magnetic Model 2020, which approximates the main magnetic field for the period 2020--2025. - igrf11, the International Geomagnetic Reference Field (11th generation), which approximates the main magnetic field for the period 1900--2015. - igrf12, the International Geomagnetic Reference Field (12th generation), which approximates the main magnetic field for the period 1900--2020. - igrf13, the International Geomagnetic Reference Field (13th generation), which approximates the main magnetic field for the period 1900--2025. - emm2010, the Enhanced Magnetic Model 2010, which approximates the main and crustal magnetic fields for the period 2010--2015. - emm2015, the Enhanced Magnetic Model 2015, which approximates the main and crustal magnetic fields for the period 2000--2020. - emm2017, the Enhanced Magnetic Model 2017, which approximates the main and crustal magnetic fields for the period 2000--2022. Go to - \ref magneticinst - \ref magneticformat \section magneticinst Installing the magnetic field models These magnetic models are available for download:
Available magnetic models
name max\n degree time\n interval size\n(kB)
Download Links (size, kB)
tar file Windows\n installer zip file
wmm2010
12
2010--2015
3
link (2)
link (300)
link (2)
wmm2015
12
2015--2020
3
link (2)
link (300)
link (2)
wmm2015v2
12
2015--2020
3
link (2)
link (300)
link (2)
wmm2020
12
2020--2025
3
link (2)
link (1390)
link (2)
igrf11
13
1900--2015
25
link (7)
link (310)
link (8)
igrf12
13
1900--2020
26
link (7)
link (310)
link (8)
igrf13
13
1900--2025
28
link (7)
link (1420)
link (8)
emm2010
739
2010--2015
4400
link (3700)
link (3000)
link (4100)
emm2015
729
2000--2020
4300
link (660)
link (990)
link (1030)
emm2017
790
2000--2022
5050
link (1740)
link (1700)
link (2750)
The "size" column is the size of the uncompressed data. N.B., the wmm2015 model is deprecated; use wmm2015v2 instead. For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-magnetic (typically installed in /usr/local/sbin) which automates the process of downloading and installing the magnetic models. For example \verbatim geographiclib-get-magnetic all # install all available models geographiclib-get-magnetic -h # for help \endverbatim This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "magnetic" subdirectory. Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being \verbatim C:/ProgramData/GeographicLib \endverbatim (which you probably should not change) and the data is installed in the "magnetic" sub-directory. (The second directory name is an alternate name that Windows 7 uses for the "Application Data" directory.) Otherwise download \e either the tar.bz2 file \e or the zip file (they have the same contents). To unpack these, run, for example \verbatim mkdir -p /usr/local/share/GeographicLib tar xofjC wmm2020.tar.bz2 /usr/local/share/GeographicLib tar xofjC emm2010.tar.bz2 /usr/local/share/GeographicLib etc. \endverbatim and, again, the data will be placed in the "magnetic" subdirectory. However you install the magnetic models, all the datasets should be installed in the same directory. MagneticModel and MagneticField uses a compile time default to locate the datasets. This is - /usr/local/share/GeographicLib/magnetic, for non-Windows systems - C:/ProgramData/GeographicLib/magnetic, for Windows systems . consistent with the examples above. This may be overridden at run-time by defining the GEOGRAPHICLIB_MAGNETIC_PATH or the GEOGRAPHIC_DATA environment variables; see MagneticModel::DefaultMagneticPath() for details. Finally, the path may be set using the optional second argument to the MagneticModel constructor or with the "-d" flag to MagneticField. Supplying the "-h" flag to MagneticField reports the default path for magnetic models for that utility. The "-v" flag causes MagneticField to report the full path name of the data file it uses. \section magneticformat The format of the magnetic model files The constructor for MagneticModel reads a file called NAME.wmm which specifies various properties for the magnetic model. It then opens a binary file NAME.wmm.cof to obtain the coefficients of the spherical harmonic sum. The first line of the .wmm file must consist of "WMMF-v" where WMMF stands for "World Magnetic Model Format" and v is the version number of the format (currently "2"). The rest of the File is read a line at a time. A # character and everything after it are discarded. If the result is just white space it is discarded. The remaining lines are of the form "KEY WHITESPACE VALUE". In general, the KEY and the VALUE are case-sensitive. MagneticModel only pays attention to the following keywords - keywords that affect the field calculation, namely: - Radius (required), the normalizing radius of the model in meters. - NumModels (default 1), the number of models. WMM2020 consists of a single model giving the magnetic field and its time variation at 2020. IGRF12 consists of 24 models for 1900 thru 2015 at 5 year intervals. The time variation is given only for the last model to allow extrapolation beyond 2015. For dates prior to 2015, linear interpolation is used. - NumConstants (default 0), the number of time-independent terms; this can be 0 or 1. This keyword was introduced in format version 2 (GeographicLib version 1.43) to support the EMM2015 and later models. This model includes long wavelength time-varying components of degree 15. This is supplemented by a short wavelength time-independent component with much higher degree. - Epoch (required), the time origin (in fractional years) for the first model. - DeltaEpoch (default 1), the interval between models in years (only relevant for NumModels > 1). - Normalization (default schmidt), the normalization used for the associated Legendre functions (schmidt or full). - ID (required), 8 printable characters which serve as a signature for the .wmm.cof file (they must appear as the first 8 bytes of this file). - keywords that store data that the user can query: - Name, the name of the model. - Description, a more descriptive name of the model. - ReleaseDate, when the model was created. - MinTime, the minimum date at which the model should be used. - MaxTime, the maximum date at which the model should be used. - MinHeight, the minimum height above the ellipsoid for which the model should be used. - MaxHeight, the maximum height above the ellipsoid for which the model should be used. . MagneticModel does not enforce the restrictions implied by last four quantities. However, MagneticField issues a warning if these limits are exceeded. - keywords that are examined to verify that their values are valid: - Type (default linear), the type of the model. "linear" means that the time variation is piece-wise linear (either using interpolation between the field at two dates or using the field and its first derivative with respect to time). This is the only type of model supported at present. - ByteOrder (default little), the order of bytes in the .wmm.cof file. Only little endian is supported at present. . Other keywords are ignored. The coefficient file NAME.wmm.cof is a binary file in little endian order. The first 8 bytes of this file must match the ID given in NAME.wmm. This is followed by NumModels + 1 sets of spherical harmonic coefficients. The first NumModels of these model the magnetic field at Epoch + \e i * DeltaEpoch for 0 ≤ \e i < NumModels. The last set of coefficients model the rate of change of the magnetic field at Epoch + (NumModels − 1) * DeltaEpoch. The format for each set of coefficients is: - \e N, the maximum degree of the sum stored as a 4-byte signed integer. This must satisfy \e N ≥ −1. - \e M, the maximum order of the sum stored as a 4-byte signed integer. This must satisfy \e N ≥ \e M ≥ −1. - Cnm, the coefficients of the cosine coefficients of the sum in column (i.e., \e m) major order. There are (\e M + 1) (2\e N − \e M + 2) / 2 elements which are stored as IEEE doubles (8 bytes). For example for \e N = \e M = 3, there are 10 coefficients arranged as C00, C10, C20, C30, C11, C21, C31, C22, C32, C33. - Snm, the coefficients of the sine coefficients of the sum in column (i.e., \e m) major order starting at \e m = 1. There are \e M (2\e N − \e M + 1) / 2 elements which are stored as IEEE doubles (8 bytes). For example for \e N = \e M = 3, there are 6 coefficients arranged as S11, S21, S31, S22, S32, S33. . Although the coefficient file is in little endian order, GeographicLib can read it on big endian machines. It can only be read on machines which store doubles in IEEE format. As an illustration, here is igrf11.wmm: \verbatim WMMF-1 # A World Magnetic Model (Format 1) file. For documentation on the # format of this file see # https://geographiclib.sourceforge.io/C++/doc/magnetic.html#magneticformat Name igrf11 Description International Geomagnetic Reference Field 11th Generation URL https://ngdc.noaa.gov/IAGA/vmod/igrf.html Publisher National Oceanic and Atmospheric Administration ReleaseDate 2009-12-15 DataCutOff 2009-10-01 ConversionDate 2011-11-04 DataVersion 1 Radius 6371200 NumModels 23 Epoch 1900 DeltaEpoch 5 MinTime 1900 MaxTime 2015 MinHeight -1000 MaxHeight 600000 # The coefficients are stored in a file obtained by appending ".cof" to # the name of this file. The coefficients were obtained from IGRF11.COF # in the geomag70 distribution. ID IGRF11-A \endverbatim
Back to \ref normalgravity. Forward to \ref geodesic. Up to \ref contents.
**********************************************************************/ /** \page geodesic Geodesics on an ellipsoid of revolution
Back to \ref magnetic. Forward to \ref nearest. Up to \ref contents.
Geodesic and GeodesicLine provide accurate solutions to the direct and inverse geodesic problems. The GeodSolve utility provides an interface to these classes. AzimuthalEquidistant implements the azimuthal equidistant projection in terms of geodesics. CassiniSoldner implements a transverse cylindrical equidistant projection in terms of geodesics. The GeodesicProj utility provides an interface to these projections. The algorithms used by Geodesic and GeodesicLine are based on a Taylor expansion of the geodesic integrals valid when the flattening \e f is small. GeodesicExact and GeodesicLineExact evaluate the integrals exactly (in terms of incomplete elliptic integrals). For the WGS84 ellipsoid, the series solutions are about 2--3 times faster and 2--3 times more accurate (because it's easier to control round-off errors with series solutions); thus Geodesic and GeodesicLine are recommended for most geodetic applications. However, in applications where the absolute value of \e f is greater than about 0.02, the exact classes should be used. Go to - \ref testgeod - \ref geodseries - \ref geodellip - \ref meridian - \ref geodshort . For some background information on geodesics on triaxial ellipsoids, see \ref triaxial. References: - F. W. Bessel, The calculation of longitude and latitude from geodesic measurements (1825), Astron. Nachr. 331(8), 852--861 (2010); translated by C. F. F. Karney and R. E. Deakin; preprint: arXiv:0908.1824. - F. R. Helmert, Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880), Aeronautical Chart and Information Center (St. Louis, 1964), Chaps. 5--7. - J. Danielsen, The area under the geodesic, Survey Review 30(232), 61--66 (1989). DOI: 10.1179/003962689791474267 - C. F. F. Karney, Algorithms for geodesics, J. Geodesy 87(1), 43--55 (2013); DOI: 10.1007/s00190-012-0578-z; addenda: geod-addenda.html; resource page: geod.html. - A collection of some papers on geodesics is available at https://geographiclib.sourceforge.io/geodesic-papers/biblio.html - The wikipedia page, Geodesics on an ellipsoid. \section testgeod Test data for geodesics A test set a geodesics is available at - GeodTest.dat.gz - C. F. F. Karney, Test set for geodesics (2010),
DOI: 10.5281/zenodo.32156. . This is about 39 MB (compressed). This consists of a set of geodesics for the WGS84 ellipsoid. A subset of this (consisting of 1/50 of the members — about 690 kB, compressed) is available at - GeodTest-short.dat.gz Each line of the test set gives 10 space delimited numbers - latitude at point 1, \e lat1 (degrees, exact) - longitude at point 1, \e lon1 (degrees, always 0) - azimuth at point 1, \e azi1 (clockwise from north in degrees, exact) - latitude at point 2, \e lat2 (degrees, accurate to 10−18 deg) - longitude at point 2, \e lon2 (degrees, accurate to 10−18 deg) - azimuth at point 2, \e azi2 (degrees, accurate to 10−18 deg) - geodesic distance from point 1 to point 2, \e s12 (meters, exact) - arc distance on the auxiliary sphere, \e a12 (degrees, accurate to 10−18 deg) - reduced length of the geodesic, \e m12 (meters, accurate to 0.1 pm) - the area under the geodesic, \e S12 (m2, accurate to 1 mm2) . These are computed using as direct geodesic calculations with the given \e lat1, \e lon1, \e azi1, and \e s12. The distance \e s12 always corresponds to an arc length \e a12 ≤ 180°, so the given geodesics give the shortest paths from point 1 to point 2. For simplicity and without loss of generality, \e lat1 is chosen in [0°, 90°], \e lon1 is taken to be zero, \e azi1 is chosen in [0°, 180°]. Furthermore, \e lat1 and \e azi1 are taken to be multiples of 10−12 deg and \e s12 is a multiple of 0.1 μm in [0 m, 20003931.4586254 m]. This results in \e lon2 in [0°, 180°] and \e azi2 in [0°, 180°]. The direct calculation uses an expansion of the geodesic equations accurate to f30 (approximately 1 part in 1050) and is computed with with Maxima's bfloats and fpprec set to 100 (so the errors in the data are probably 1/2 of the values quoted above). The contents of the file are as follows: - 100000 entries randomly distributed - 50000 entries which are nearly antipodal - 50000 entries with short distances - 50000 entries with one end near a pole - 50000 entries with both ends near opposite poles - 50000 entries which are nearly meridional - 50000 entries which are nearly equatorial - 50000 entries running between vertices (\e azi1 = \e azi2 = 90°) - 50000 entries ending close to vertices . (a total of 500000 entries). The values for \e s12 for the geodesics running between vertices are truncated to a multiple of 0.1 pm and this is used to determine point 2. This data can be fed to the GeodSolve utility as follows - Direct from point 1: \verbatim gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,3,7 | ./GeodSolve \endverbatim This should yield columns 4, 5, 6, and 9 of the test set. - Direct from point 2: \verbatim gunzip -c GeodTest.dat.gz | cut -d' ' -f4,5,6,7 | sed "s/ \([^ ]*$\)/ -\1/" | ./GeodSolve \endverbatim (The sed command negates the distance.) This should yield columns 1, 2, and 3, and the negative of column 9 of the test set. - Inverse between points 1 and 2: \verbatim gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,4,5 | ./GeodSolve -i \endverbatim This should yield columns 3, 6, 7, and 9 of the test set. . Add, e.g., "-p 6", to the call to GeodSolve to change the precision of the output. Adding "-f" causes GeodSolve to print 12 fields specifying the geodesic; these include the 10 fields in the test set plus the geodesic scales \e M12 and \e M21 which are inserted between \e m12 and \e S12. Code for computing arbitrarily accurate geodesics in maxima is available in geodesic.mac (this depends on ellint.mac and uses the series computed by geod.mac). This solve both the direct and inverse geodesic problems and offers the ability to solve the problems either using series expansions (similar to Geodesic) or in terms of elliptic integrals (similar to GeodesicExact). \section geodseries Expansions for geodesics We give here the series expansions for the various geodesic integrals valid to order f10. In this release of the code, we use a 6th-order expansions. This is sufficient to maintain accuracy for doubles for the SRMmax ellipsoid (\e a = 6400 km, \e f = 1/150). However, the preprocessor macro GEOGRAPHICLIB_GEODESIC_ORDER can be used to select an order from 3 thru 8. (If using long doubles, with a 64-bit fraction, the default order is 7.) The series expanded to order f30 are given in geodseries30.html. In the formulas below ^ indicates exponentiation (f^3 = f3) and / indicates real division (3/5 = 0.6). The equations need to be converted to Horner form, but are here left in expanded form so that they can be easily truncated to lower order. These expansions were obtained using the Maxima code, geod.mac. In the expansions below, we have - \f$ \alpha \f$ is the azimuth - \f$ \alpha_0 \f$ is the azimuth at the equator crossing - \f$ \lambda \f$ is the longitude measured from the equator crossing - \f$ \sigma \f$ is the spherical arc length - \f$ \omega = \tan^{-1}(\sin\alpha_0\tan\sigma) \f$ is the spherical longitude - \f$ a \f$ is the equatorial radius - \f$ b \f$ is the polar semi-axis - \f$ f \f$ is the flattening - \f$ e^2 = f(2 - f) \f$ - \f$ e'^2 = e^2/(1-e^2) \f$ - \f$ k^2 = e'^2 \cos^2\alpha_0 = 4 \epsilon / (1 - \epsilon)^2 \f$ - \f$ n = f / (2 - f) \f$ - \f$ c^2 = a^2/2 + b^2/2 (\tanh^{-1}e)/e \f$ - \e ep2 = \f$ e'^2 \f$ - \e k2 = \f$ k^2 \f$ - \e eps = \f$ \epsilon = k^2 / (\sqrt{1 + k^2} + 1)^2\f$ The formula for distance is \f[ \frac sb = I_1(\sigma) \f] where \f[ \begin{align} I_1(\sigma) &= A_1\bigl(\sigma + B_1(\sigma)\bigr) \\ B_1(\sigma) &= \sum_{j=1} C_{1j} \sin 2j\sigma \end{align} \f] and \verbatim A1 = (1 + 1/4 * eps^2 + 1/64 * eps^4 + 1/256 * eps^6 + 25/16384 * eps^8 + 49/65536 * eps^10) / (1 - eps); \endverbatim \verbatim C1[1] = - 1/2 * eps + 3/16 * eps^3 - 1/32 * eps^5 + 19/2048 * eps^7 - 3/4096 * eps^9; C1[2] = - 1/16 * eps^2 + 1/32 * eps^4 - 9/2048 * eps^6 + 7/4096 * eps^8 + 1/65536 * eps^10; C1[3] = - 1/48 * eps^3 + 3/256 * eps^5 - 3/2048 * eps^7 + 17/24576 * eps^9; C1[4] = - 5/512 * eps^4 + 3/512 * eps^6 - 11/16384 * eps^8 + 3/8192 * eps^10; C1[5] = - 7/1280 * eps^5 + 7/2048 * eps^7 - 3/8192 * eps^9; C1[6] = - 7/2048 * eps^6 + 9/4096 * eps^8 - 117/524288 * eps^10; C1[7] = - 33/14336 * eps^7 + 99/65536 * eps^9; C1[8] = - 429/262144 * eps^8 + 143/131072 * eps^10; C1[9] = - 715/589824 * eps^9; C1[10] = - 2431/2621440 * eps^10; \endverbatim The function \f$ \tau(\sigma) = s/(b A_1) = \sigma + B_1(\sigma) \f$ may be inverted by series reversion giving \f[ \sigma(\tau) = \tau + \sum_{j=1} C'_{1j} \sin 2j\sigma \f] where \verbatim C1'[1] = + 1/2 * eps - 9/32 * eps^3 + 205/1536 * eps^5 - 4879/73728 * eps^7 + 9039/327680 * eps^9; C1'[2] = + 5/16 * eps^2 - 37/96 * eps^4 + 1335/4096 * eps^6 - 86171/368640 * eps^8 + 4119073/28311552 * eps^10; C1'[3] = + 29/96 * eps^3 - 75/128 * eps^5 + 2901/4096 * eps^7 - 443327/655360 * eps^9; C1'[4] = + 539/1536 * eps^4 - 2391/2560 * eps^6 + 1082857/737280 * eps^8 - 2722891/1548288 * eps^10; C1'[5] = + 3467/7680 * eps^5 - 28223/18432 * eps^7 + 1361343/458752 * eps^9; C1'[6] = + 38081/61440 * eps^6 - 733437/286720 * eps^8 + 10820079/1835008 * eps^10; C1'[7] = + 459485/516096 * eps^7 - 709743/163840 * eps^9; C1'[8] = + 109167851/82575360 * eps^8 - 550835669/74317824 * eps^10; C1'[9] = + 83141299/41287680 * eps^9; C1'[10] = + 9303339907/2972712960 * eps^10; \endverbatim The reduced length is given by \f[ \begin{align} \frac mb &= \sqrt{1 + k^2 \sin^2\sigma_2} \cos\sigma_1 \sin\sigma_2 \\ &\quad {}-\sqrt{1 + k^2 \sin^2\sigma_1} \sin\sigma_1 \cos\sigma_2 \\ &\quad {}-\cos\sigma_1 \cos\sigma_2 \bigl(J(\sigma_2) - J(\sigma_1)\bigr) \end{align} \f] where \f[ \begin{align} J(\sigma) &= I_1(\sigma) - I_2(\sigma) \\ I_2(\sigma) &= A_2\bigl(\sigma + B_2(\sigma)\bigr) \\ B_2(\sigma) &= \sum_{j=1} C_{2j} \sin 2j\sigma \end{align} \f] \verbatim A2 = (1 - 3/4 * eps^2 - 7/64 * eps^4 - 11/256 * eps^6 - 375/16384 * eps^8 - 931/65536 * eps^10) / (1 + eps); \endverbatim \verbatim C2[1] = + 1/2 * eps + 1/16 * eps^3 + 1/32 * eps^5 + 41/2048 * eps^7 + 59/4096 * eps^9; C2[2] = + 3/16 * eps^2 + 1/32 * eps^4 + 35/2048 * eps^6 + 47/4096 * eps^8 + 557/65536 * eps^10; C2[3] = + 5/48 * eps^3 + 5/256 * eps^5 + 23/2048 * eps^7 + 191/24576 * eps^9; C2[4] = + 35/512 * eps^4 + 7/512 * eps^6 + 133/16384 * eps^8 + 47/8192 * eps^10; C2[5] = + 63/1280 * eps^5 + 21/2048 * eps^7 + 51/8192 * eps^9; C2[6] = + 77/2048 * eps^6 + 33/4096 * eps^8 + 2607/524288 * eps^10; C2[7] = + 429/14336 * eps^7 + 429/65536 * eps^9; C2[8] = + 6435/262144 * eps^8 + 715/131072 * eps^10; C2[9] = + 12155/589824 * eps^9; C2[10] = + 46189/2621440 * eps^10; \endverbatim The longitude is given in terms of the spherical longitude by \f[ \lambda = \omega - f \sin\alpha_0 I_3(\sigma) \f] where \f[ \begin{align} I_3(\sigma) &= A_3\bigl(\sigma + B_3(\sigma)\bigr) \\ B_3(\sigma) &= \sum_{j=1} C_{3j} \sin 2j\sigma \end{align} \f] and \verbatim A3 = 1 - (1/2 - 1/2*n) * eps - (1/4 + 1/8*n - 3/8*n^2) * eps^2 - (1/16 + 3/16*n + 1/16*n^2 - 5/16*n^3) * eps^3 - (3/64 + 1/32*n + 5/32*n^2 + 5/128*n^3 - 35/128*n^4) * eps^4 - (3/128 + 5/128*n + 5/256*n^2 + 35/256*n^3 + 7/256*n^4) * eps^5 - (5/256 + 15/1024*n + 35/1024*n^2 + 7/512*n^3) * eps^6 - (25/2048 + 35/2048*n + 21/2048*n^2) * eps^7 - (175/16384 + 35/4096*n) * eps^8 - 245/32768 * eps^9; \endverbatim \verbatim C3[1] = + (1/4 - 1/4*n) * eps + (1/8 - 1/8*n^2) * eps^2 + (3/64 + 3/64*n - 1/64*n^2 - 5/64*n^3) * eps^3 + (5/128 + 1/64*n + 1/64*n^2 - 1/64*n^3 - 7/128*n^4) * eps^4 + (3/128 + 11/512*n + 3/512*n^2 + 1/256*n^3 - 7/512*n^4) * eps^5 + (21/1024 + 5/512*n + 13/1024*n^2 + 1/512*n^3) * eps^6 + (243/16384 + 189/16384*n + 83/16384*n^2) * eps^7 + (435/32768 + 109/16384*n) * eps^8 + 345/32768 * eps^9; C3[2] = + (1/16 - 3/32*n + 1/32*n^2) * eps^2 + (3/64 - 1/32*n - 3/64*n^2 + 1/32*n^3) * eps^3 + (3/128 + 1/128*n - 9/256*n^2 - 3/128*n^3 + 7/256*n^4) * eps^4 + (5/256 + 1/256*n - 1/128*n^2 - 7/256*n^3 - 3/256*n^4) * eps^5 + (27/2048 + 69/8192*n - 39/8192*n^2 - 47/4096*n^3) * eps^6 + (187/16384 + 39/8192*n + 31/16384*n^2) * eps^7 + (287/32768 + 47/8192*n) * eps^8 + 255/32768 * eps^9; C3[3] = + (5/192 - 3/64*n + 5/192*n^2 - 1/192*n^3) * eps^3 + (3/128 - 5/192*n - 1/64*n^2 + 5/192*n^3 - 1/128*n^4) * eps^4 + (7/512 - 1/384*n - 77/3072*n^2 + 5/3072*n^3 + 65/3072*n^4) * eps^5 + (3/256 - 1/1024*n - 71/6144*n^2 - 47/3072*n^3) * eps^6 + (139/16384 + 143/49152*n - 383/49152*n^2) * eps^7 + (243/32768 + 95/49152*n) * eps^8 + 581/98304 * eps^9; C3[4] = + (7/512 - 7/256*n + 5/256*n^2 - 7/1024*n^3 + 1/1024*n^4) * eps^4 + (7/512 - 5/256*n - 7/2048*n^2 + 9/512*n^3 - 21/2048*n^4) * eps^5 + (9/1024 - 43/8192*n - 129/8192*n^2 + 39/4096*n^3) * eps^6 + (127/16384 - 23/8192*n - 165/16384*n^2) * eps^7 + (193/32768 + 3/8192*n) * eps^8 + 171/32768 * eps^9; C3[5] = + (21/2560 - 9/512*n + 15/1024*n^2 - 7/1024*n^3 + 9/5120*n^4) * eps^5 + (9/1024 - 15/1024*n + 3/2048*n^2 + 57/5120*n^3) * eps^6 + (99/16384 - 91/16384*n - 781/81920*n^2) * eps^7 + (179/32768 - 55/16384*n) * eps^8 + 141/32768 * eps^9; C3[6] = + (11/2048 - 99/8192*n + 275/24576*n^2 - 77/12288*n^3) * eps^6 + (99/16384 - 275/24576*n + 55/16384*n^2) * eps^7 + (143/32768 - 253/49152*n) * eps^8 + 33/8192 * eps^9; C3[7] = + (429/114688 - 143/16384*n + 143/16384*n^2) * eps^7 + (143/32768 - 143/16384*n) * eps^8 + 429/131072 * eps^9; C3[8] = + (715/262144 - 429/65536*n) * eps^8 + 429/131072 * eps^9; C3[9] = + 2431/1179648 * eps^9; \endverbatim The formula for area between the geodesic and the equator is given in Sec. 6 of Algorithms for geodesics in terms of \e S, \f[ S = c^2 \alpha + e^2 a^2 \cos\alpha_0 \sin\alpha_0 I_4(\sigma) \f] where \f[ I_4(\sigma) = \sum_{j=0} C_{4j} \cos(2j+1)\sigma \f] In the paper, this was expanded in \f$ e'^2 \f$ and \f$ k^2 \f$. However, the series converges faster for eccentric ellipsoids if the expansion is in \f$ n \f$ and \f$ \epsilon \f$. The series to order \f$ f^{10} \f$ becomes \verbatim C4[0] = + (2/3 - 4/15*n + 8/105*n^2 + 4/315*n^3 + 16/3465*n^4 + 20/9009*n^5 + 8/6435*n^6 + 28/36465*n^7 + 32/62985*n^8 + 4/11305*n^9) - (1/5 - 16/35*n + 32/105*n^2 - 16/385*n^3 - 64/15015*n^4 - 16/15015*n^5 - 32/85085*n^6 - 112/692835*n^7 - 128/1616615*n^8) * eps - (2/105 + 32/315*n - 1088/3465*n^2 + 1184/5005*n^3 - 128/3465*n^4 - 3232/765765*n^5 - 1856/1616615*n^6 - 6304/14549535*n^7) * eps^2 + (11/315 - 368/3465*n - 32/6435*n^2 + 976/4095*n^3 - 154048/765765*n^4 + 368/11115*n^5 + 5216/1322685*n^6) * eps^3 + (4/1155 + 1088/45045*n - 128/1287*n^2 + 64/3927*n^3 + 2877184/14549535*n^4 - 370112/2078505*n^5) * eps^4 + (97/15015 - 464/45045*n + 4192/153153*n^2 - 88240/969969*n^3 + 31168/1322685*n^4) * eps^5 + (10/9009 + 4192/765765*n - 188096/14549535*n^2 + 23392/855855*n^3) * eps^6 + (193/85085 - 6832/2078505*n + 106976/14549535*n^2) * eps^7 + (632/1322685 + 3456/1616615*n) * eps^8 + 107/101745 * eps^9; C4[1] = + (1/45 - 16/315*n + 32/945*n^2 - 16/3465*n^3 - 64/135135*n^4 - 16/135135*n^5 - 32/765765*n^6 - 112/6235515*n^7 - 128/14549535*n^8) * eps - (2/105 - 64/945*n + 128/1485*n^2 - 1984/45045*n^3 + 256/45045*n^4 + 64/109395*n^5 + 128/855855*n^6 + 2368/43648605*n^7) * eps^2 - (1/105 - 16/2079*n - 5792/135135*n^2 + 3568/45045*n^3 - 103744/2297295*n^4 + 264464/43648605*n^5 + 544/855855*n^6) * eps^3 + (4/1155 - 2944/135135*n + 256/9009*n^2 + 17536/765765*n^3 - 3053056/43648605*n^4 + 1923968/43648605*n^5) * eps^4 + (1/9009 + 16/19305*n - 2656/153153*n^2 + 65072/2078505*n^3 + 526912/43648605*n^4) * eps^5 + (10/9009 - 1472/459459*n + 106112/43648605*n^2 - 204352/14549535*n^3) * eps^6 + (349/2297295 + 28144/43648605*n - 32288/8729721*n^2) * eps^7 + (632/1322685 - 44288/43648605*n) * eps^8 + 43/479655 * eps^9; C4[2] = + (4/525 - 32/1575*n + 64/3465*n^2 - 32/5005*n^3 + 128/225225*n^4 + 32/765765*n^5 + 64/8083075*n^6 + 32/14549535*n^7) * eps^2 - (8/1575 - 128/5775*n + 256/6825*n^2 - 6784/225225*n^3 + 4608/425425*n^4 - 128/124355*n^5 - 5888/72747675*n^6) * eps^3 - (8/1925 - 1856/225225*n - 128/17325*n^2 + 42176/1276275*n^3 - 2434816/72747675*n^4 + 195136/14549535*n^5) * eps^4 + (8/10725 - 128/17325*n + 64256/3828825*n^2 - 128/25935*n^3 - 266752/10392525*n^4) * eps^5 - (4/25025 + 928/3828825*n + 292288/72747675*n^2 - 106528/6613425*n^3) * eps^6 + (464/1276275 - 17152/10392525*n + 83456/72747675*n^2) * eps^7 + (1168/72747675 + 128/1865325*n) * eps^8 + 208/1119195 * eps^9; C4[3] = + (8/2205 - 256/24255*n + 512/45045*n^2 - 256/45045*n^3 + 1024/765765*n^4 - 256/2909907*n^5 - 512/101846745*n^6) * eps^3 - (16/8085 - 1024/105105*n + 2048/105105*n^2 - 1024/51051*n^3 + 4096/373065*n^4 - 1024/357357*n^5) * eps^4 - (136/63063 - 256/45045*n + 512/1072071*n^2 + 494336/33948915*n^3 - 44032/1996995*n^4) * eps^5 + (64/315315 - 16384/5360355*n + 966656/101846745*n^2 - 868352/101846745*n^3) * eps^6 - (16/97461 + 14848/101846745*n + 74752/101846745*n^2) * eps^7 + (5024/33948915 - 96256/101846745*n) * eps^8 - 1744/101846745 * eps^9; C4[4] = + (64/31185 - 512/81081*n + 1024/135135*n^2 - 512/109395*n^3 + 2048/1247103*n^4 - 2560/8729721*n^5) * eps^4 - (128/135135 - 2048/405405*n + 77824/6891885*n^2 - 198656/14549535*n^3 + 8192/855855*n^4) * eps^5 - (512/405405 - 2048/530145*n + 299008/130945815*n^2 + 280576/43648605*n^3) * eps^6 + (128/2297295 - 2048/1438965*n + 241664/43648605*n^2) * eps^7 - (17536/130945815 + 1024/43648605*n) * eps^8 + 2944/43648605 * eps^9; C4[5] = + (128/99099 - 2048/495495*n + 4096/765765*n^2 - 6144/1616615*n^3 + 8192/4849845*n^4) * eps^5 - (256/495495 - 8192/2807805*n + 376832/53348295*n^2 - 8192/855855*n^3) * eps^6 - (6784/8423415 - 432128/160044885*n + 397312/160044885*n^2) * eps^7 + (512/53348295 - 16384/22863555*n) * eps^8 - 16768/160044885 * eps^9; C4[6] = + (512/585585 - 4096/1422135*n + 8192/2078505*n^2 - 4096/1322685*n^3) * eps^6 - (1024/3318315 - 16384/9006855*n + 98304/21015995*n^2) * eps^7 - (103424/189143955 - 8192/4203199*n) * eps^8 - 1024/189143955 * eps^9; C4[7] = + (1024/1640925 - 65536/31177575*n + 131072/43648605*n^2) * eps^7 - (2048/10392525 - 262144/218243025*n) * eps^8 - 84992/218243025 * eps^9; C4[8] = + (16384/35334585 - 131072/82447365*n) * eps^8 - 32768/247342095 * eps^9; C4[9] = + 32768/92147055 * eps^9; \endverbatim \section geodellip Geodesics in terms of elliptic integrals GeodesicExact and GeodesicLineExact solve the geodesic problem using elliptic integrals. The formulation of geodesic in terms of incomplete elliptic integrals is given in - C. F. F. Karney, Geodesics on an arbitrary ellipsoid of revolution, Aug. 2022; preprint arxiv:2208.00492. . The key relations used by GeographicLib are \f[ \begin{align} \frac sb &= E(\sigma, ik), \\ \lambda &= (1 - f) \sin\alpha_0 G(\sigma, \cos^2\alpha_0, ik) \\ &= \chi - \frac{e'^2}{\sqrt{1+e'^2}}\sin\alpha_0 H(\sigma, -e'^2, ik), \\ J(\sigma) &= k^2 D(\sigma, ik), \end{align} \f] where \f$ \chi \f$ is a modified spherical longitude given by \f[ \tan\chi = \sqrt{\frac{1+e'^2}{1+k^2\sin^2\sigma}}\tan\omega, \f] and \f[ \begin{align} D(\phi,k) &= \int_0^\phi \frac{\sin^2\theta}{\sqrt{1 - k^2\sin^2\theta}}\,d\theta\\ &=\frac{F(\phi, k) - E(\phi, k)}{k^2},\\ G(\phi,\alpha^2,k) &= \int_0^\phi \frac{\sqrt{1 - k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta\\ &=\frac{k^2}{\alpha^2}F(\phi, k) +\biggl(1-\frac{k^2}{\alpha^2}\biggr)\Pi(\phi, \alpha^2, k),\\ H(\phi, \alpha^2, k) &= \int_0^\phi \frac{\cos^2\theta}{(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}} \,d\theta \\ &= \frac1{\alpha^2} F(\phi, k) + \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k), \end{align} \f] and \f$F(\phi, k)\f$, \f$E(\phi, k)\f$, \f$D(\phi, k)\f$, and \f$\Pi(\phi, \alpha^2, k)\f$, are incomplete elliptic integrals (see https://dlmf.nist.gov/19.2.ii). The formula for \f$ s \f$ and the first expression for \f$ \lambda \f$ are given by Legendre (1811) and are the most common representation of geodesics in terms of elliptic integrals. The second (equivalent) expression for \f$ \lambda \f$, which was given by Cayley (1870), is useful in that the elliptic integral is relegated to a small correction term. This form allows the longitude to be computed more accurately and is used in GeographicLib. (The equivalence of the two expressions for \f$ \lambda \f$ follows from https://dlmf.nist.gov/19.7.E8.) Nominally, GeodesicExact and GeodesicLineExact will give "exact" results for any value of the flattening. However, the geographic latitude is a distorted measure of distance from the equator with very eccentric ellipsoids and this introducing an irreducible representational error in the algorithms in this case. It is therefore recommended to restrict the use of these classes to b/\e a ∈ [0.01, 100] or \e f ∈ [−99, 0.99]. GeodesicExact uses an discrete sine transform fit for the area \e S12. The number of terms used is adjusted to give accurate results for this same range of flattenings, \e f ∈ [−99, 0.99]. Thomas (1952) and Rollins (2010) use a different independent variable for geodesics, \f$\theta\f$ instead of \f$\sigma\f$, where \f$ \tan\theta = \sqrt{1 + k^2} \tan\sigma \f$. The corresponding expressions for \f$ s \f$ and \f$ \lambda \f$ are given here for completeness: \f[ \begin{align} \frac sb &= \sqrt{1-k'^2} \Pi(\theta, k'^2, k'), \\ \lambda &= (1-f) \sqrt{1-k'^2} \sin\alpha_0 \Pi(\theta, k'^2/e^2, k'), \end{align} \f] where \f$ k' = k/\sqrt{1 + k^2} \f$. The expression for \f$ s \f$ can be written in terms of elliptic integrals of the second kind and Cayley's technique can be used to subtract out the leading order behavior of \f$ \lambda \f$ to give \f[ \begin{align} \frac sb &=\frac1{\sqrt{1-k'^2}} \biggl( E(\theta, k') - \frac{k'^2 \sin\theta \cos\theta}{\sqrt{1-k'^2\sin^2\theta}} \biggr), \\ \lambda &= \psi + (1-f) \sqrt{1-k'^2} \sin\alpha_0 \bigl( F(\theta, k') - \Pi(\theta, e^2, k') \bigr), \end{align} \f] where \f[ \begin{align} \tan\psi &= \sqrt{\frac{1+k^2\sin^2\sigma}{1+e'^2}}\tan\omega \\ &= \sqrt{\frac{1-e^2}{1+k^2\cos^2\theta}}\sin\alpha_0\tan\theta. \end{align} \f] The tangents of the three "longitude-like" angles are in geometric progression, \f$ \tan\chi/\tan\omega = \tan\omega/\tan\psi \f$. \section meridian Parameters for the meridian The formulas for \f$ s \f$ given in the previous section are the same as those for the distance along a meridian for an ellipsoid with equatorial radius \f$ a \sqrt{1 - e^2 \sin^2\alpha_0} \f$ and polar semi-axis \f$ b \f$. Here is a list of possible ways of expressing the meridian distance in terms of elliptic integrals using the notation: - \f$ a \f$, equatorial axis, - \f$ b \f$, polar axis, - \f$ e = \sqrt{(a^2 - b^2)/a^2} \f$, eccentricity, - \f$ e' = \sqrt{(a^2 - b^2)/b^2} \f$, second eccentricity, - \f$ \phi = \mathrm{am}(u, e) \f$, the geographic latitude, - \f$ \phi' = \mathrm{am}(v', ie') = \pi/2 - \phi \f$, the geographic colatitude, - \f$ \beta = \mathrm{am}(v, ie') \f$, the parametric latitude (\f$ \tan^2\beta = (1 - e^2) \tan^2\phi \f$), - \f$ \beta' = \mathrm{am}(u', e) = \pi/2 - \beta \f$, the parametric colatitude, - \f$ M \f$, the length of a quarter meridian (equator to pole), - \f$ y \f$, the distance along the meridian (measured from the equator). - \f$ y' = M -y \f$, the distance along the meridian (measured from the pole). . The eccentricities \f$ (e, e') \f$ are real (resp. imaginary) for oblate (resp. prolate) ellipsoids. The elliptic variables \f$(u, u')\f$ and \f$(v, v')\f$ are defined by - \f$ u = F(\phi, e) ,\quad u' = F(\beta', e) \f$ - \f$ v = F(\beta, ie') ,\quad v' = F(\phi', ie') \f$, . and are linearly related by - \f$ u + u' = K(e) ,\quad v + v' = K(ie') \f$ - \f$ v = \sqrt{1-e^2} u ,\quad u = \sqrt{1+e'^2} v \f$. . The cartesian coordinates for the meridian \f$ (x, z) \f$ are given by \f[ \begin{align} x &= a \cos\beta = a \cos\phi / \sqrt{1 - e^2 \sin^2\phi} \\ &= a \sin\beta' = (a^2/b) \sin\phi' / \sqrt{1 + e'^2 \sin^2\phi'} \\ &= a \,\mathrm{cn}(v, ie) = a \,\mathrm{cd}(u, e) \\ &= a \,\mathrm{sn}(u', e) = (a^2/b) \,\mathrm{sd}(v', ie'), \end{align} \f] \f[ \begin{align} z &= b \sin\beta = (b^2/a) \sin\phi / \sqrt{1 - e^2 \sin^2\phi} \\ &= b \cos\beta' = b \cos\phi' / \sqrt{1 + e'^2 \sin^2\phi'} \\ &= b \,\mathrm{sn}(v, ie) = (b^2/a) \,\mathrm{sd}(u, e) \\ &= b \,\mathrm{cn}(u', e) = b \,\mathrm{cd}(v', ie'). \end{align} \f] The distance along the meridian can be expressed variously as \f[ \begin{align} y &= b \int \sqrt{1 + e'^2 \sin^2\beta}\, d\beta = b E(\beta, ie') \\ &= \frac{b^2}a \int \frac1{(1 - e^2 \sin^2\phi)^{3/2}}\, d\phi = \frac{b^2}a \Pi(\phi, e^2, e) \\ &= a \biggl(E(\phi, e) - \frac{e^2\sin\phi \cos\phi}{\sqrt{1 - e^2\sin^2\phi}}\biggr) \\ &= b \int \mathrm{dn}^2(v, ie')\, dv = \frac{b^2}a \int \mathrm{nd}^2(u, e)\, du = \cal E(v, ie'), \end{align} \f] \f[ \begin{align} y' &= a \int \sqrt{1 - e^2 \sin^2\beta'}\, d\beta' = a E(\beta', e) \\ &= \frac{a^2}b \int \frac1{(1 + e'^2 \sin^2\phi')^{3/2}}\, d\phi' = \frac{a^2}b \Pi(\phi', -e'^2, ie') \\ &= b \biggl(E(\phi', ie') + \frac{e'^2\sin\phi' \cos\phi'}{\sqrt{1 + e'^2\sin^2\phi'}}\biggr) \\ &= a \int \mathrm{dn}^2(u', e)\, du' = \frac{a^2}b \int \mathrm{nd}^2(v', ie')\, dv' = \cal E(u', e), \end{align} \f] with the quarter meridian distance given by \f[ M = aE(e) = bE(ie') = (b^2/a)\Pi(e^2,e) = (a^2/b)\Pi(-e'^2,ie'). \f] (Here \f$ E, F, \Pi \f$ are elliptic integrals defined in https://dlmf.nist.gov/19.2.ii. \f$ \cal E, \mathrm{am}, \mathrm{sn}, \mathrm{cn}, \mathrm{sd}, \mathrm{cd}, \mathrm{dn}, \mathrm{nd} \f$ are Jacobi elliptic functions defined in https://dlmf.nist.gov/22.2 and https://dlmf.nist.gov/22.16.) There are several considerations in the choice of independent variable for evaluate the meridian distance - The use of an imaginary modulus (namely, \f$ ie' \f$, above) is of no practical concern. The integrals are real in this case and modern methods (GeographicLib uses the method given in https://dlmf.nist.gov/19.36.i) for computing integrals handles this case using just real arithmetic. - If the "natural" origin is the equator, choose one of \f$ \phi, \beta, u, v \f$ (this might be preferred in geodesy). If it's the pole, choose one of the complementary quantities \f$ \phi', \beta', u', v' \f$ (this might be preferred by mathematicians). - Applying these formulas to the geodesic problems, \f$ \beta \f$ becomes the arc length, \f$ \sigma \f$, on the auxiliary sphere. This is the traditional method of solution used by Legendre (1806), Oriani (1806), Bessel (1825), Helmert (1880), Rainsford (1955), Thomas (1970), Vincenty (1975), Rapp (1993), and so on. Many of the solutions in terms of elliptic functions use one of the elliptic variables (\f$ u \f$ or \f$ v \f$), see, for example, Jacobi (1855), Halphen (1888), Forsyth (1896). In the context of geodesics \f$ \phi \f$ becomes Thomas' variable \f$ \theta \f$; this is used by Thomas (1952) and Rollins (2010) in their formulation of the geodesic problem (see the previous section). - For highly eccentric ellipsoids the variation of the meridian with respect to \f$ \beta \f$ is considerably "better behaved" than other choices (see the figure below). The choice of \f$ \phi \f$ is probably a poor one in this case. . GeographicLib uses the geodesic generalization of \f$ y = b E(\beta, ie') \f$, namely \f$ s = b E(\sigma, ik) \f$. See \ref geodellip. \image html meridian-measures.png "Comparison of meridian measures" \section geodshort Short geodesics Here we describe Bowring's method for solving the inverse geodesic problem in the limit of short geodesics and contrast it with the great circle solution using Bessel's auxiliary sphere. References: - B. R. Bowring, The Direct and Inverse Problems for Short Geodesic Lines on the Ellipsoid, Surveying and Mapping 41(2), 135--141 (1981). - R. H. Rapp, Geometric Geodesy, Part I, Ohio State Univ. (1991), Sec. 6.5. Bowring considers the conformal mapping of the ellipsoid to a sphere of radius \f$ R \f$ such that circles of latitude and meridians are preserved (and hence the azimuth of a line is preserved). Let \f$ (\phi, \lambda) \f$ and \f$ (\phi', \lambda') \f$ be the latitude and longitude on the ellipsoid and sphere respectively. Define isometric latitudes for the sphere and the ellipsoid as \f[ \begin{align} \psi' &= \sinh^{-1} \tan \phi', \\ \psi &= \sinh^{-1} \tan \phi - e \tanh^{-1}(e \sin\phi). \end{align} \f] The most general conformal mapping satisfying Bowring's conditions is \f[ \psi' = A \psi + K, \quad \lambda' = A \lambda, \f] where \f$ A \f$ and \f$ K \f$ are constants. (In fact a constant can be added to the equation for \f$ \lambda' \f$, but this does affect the analysis.) The scale of this mapping is \f[ m(\phi) = \frac{AR}{\nu}\frac{\cos\phi'}{\cos\phi}, \f] where \f$ \nu = a/\sqrt{1 - e^2\sin^2\phi} \f$ is the transverse radius of curvature. (Note that in Bowring's Eq. (10), \f$ \phi \f$ should be replaced by \f$ \phi' \f$.) The mapping from the ellipsoid to the sphere depends on three parameters \f$ R, A, K \f$. These will be selected to satisfy certain conditions at some representative latitude \f$ \phi_0 \f$. Two possible choices are given below. \subsection bowring Bowring's method Bowring (1981) requires that \f[ m(\phi_0) = 1,\quad \left.\frac{dm(\phi)}{d\phi}\right|_{\phi=\phi_0} = 0,\quad \left.\frac{d^2m(\phi)}{d\phi^2}\right|_{\phi=\phi_0} = 0, \f] i.e, \f$m\approx 1\f$ in the vicinity of \f$\phi = \phi_0\f$. This gives \f[ \begin{align} R &= \frac{\sqrt{1 + e'^2}}{B^2} a, \\ A &= \sqrt{1 + e'^2 \cos^4\phi_0}, \\ \tan\phi'_0 &= \frac1B \tan\phi_0, \end{align} \f] where \f$ e' = e/\sqrt{1-e^2} \f$ is the second eccentricity, \f$ B = \sqrt{1+e'^2\cos^2\phi_0} \f$, and \f$ K \f$ is defined implicitly by the equation for \f$\phi'_0\f$. The radius \f$ R \f$ is the (Gaussian) mean radius of curvature of the ellipsoid at \f$\phi_0\f$ (so near \f$\phi_0\f$ the ellipsoid can be deformed to fit the sphere snugly). The third derivative of \f$ m \f$ is given by \f[ \left.\frac{d^3m(\phi)}{d\phi^3}\right|_{\phi=\phi_0} = \frac{-2e'^2\sin2\phi_0}{B^4}. \f] The method for solving the inverse problem between two nearby points \f$ (\phi_1, \lambda_1) \f$ and \f$ (\phi_2, \lambda_2) \f$ is as follows: Set \f$\phi_0 = (\phi_1 + \phi_2)/2\f$. Compute \f$ R, A, \phi'_0 \f$, and hence find \f$ (\phi'_1, \lambda'_1) \f$ and \f$ (\phi'_2, \lambda'_2) \f$. Finally, solve for the great circle on a sphere of radius \f$ R \f$; the resulting distance and azimuths are good approximations for the corresponding quantities for the ellipsoidal geodesic. Consistent with the accuracy of this method, we can compute \f$\phi'_1\f$ and \f$\phi'_2\f$ using a Taylor expansion about \f$\phi_0\f$. This also avoids numerical errors that arise from subtracting nearly equal quantities when using the equation for \f$\phi'\f$ directly. Write \f$\Delta \phi = \phi - \phi_0\f$ and \f$\Delta \phi' = \phi' - \phi'_0\f$; then we have \f[ \Delta\phi' \approx \frac{\Delta\phi}B \biggl[1 + \frac{\Delta\phi}{B^2}\frac{e'^2}2 \biggl(3\sin\phi_0\cos\phi_0 + \frac{\Delta\phi}{B^2} \bigl(B^2 - \sin^2\phi_0(2 - 3 e'^2 \cos^2\phi_0)\bigr)\biggr)\biggr], \f] where the error is \f$O(f\Delta\phi^4)\f$. This is essentially Bowring's method. Significant differences between this result, "Bowring (improved)", compared to Bowring's paper, "Bowring (original)", are: - Bowring elects to use \f$\phi_0 = \phi_1\f$. This simplifies the calculations somewhat but increases the error by about a factor of 4. - Bowring's expression for \f$ \Delta\phi' \f$ is only accurate in the limit \f$ e' \rightarrow 0 \f$. . In fact, arguably, the highest order \f$O(f\Delta\phi^3)\f$ terms should be dropped altogether. Their inclusion does result in a better estimate for the distance. However, if your goal is to generate both accurate distances \e and accurate azimuths, then \f$\Delta\phi\f$ needs to be restricted sufficiently to allow these terms to be dropped to give the "Bowring (truncated)" method. With highly eccentric ellipsoids, the parametric latitude \f$ \beta \f$ is a better behaved independent variable to use. In this case, \f$ \phi_0 \f$ is naturally defined using \f$\beta_0 = (\beta_1 + \beta_2)/2\f$ and in terms of \f$\Delta\beta = \beta - \beta_0\f$, we have \f[ \Delta\phi' \approx \frac{\Delta\beta}{B'} \biggl[1 + \frac{\Delta\beta}{B'^2}\frac{e'^2}2 \biggl(\sin\beta_0\cos\beta_0 + \frac{\Delta\beta}{3B'^2} \bigl( \cos^2\beta_0 - \sin^2\beta_0 B'^2\bigr) \biggr)\biggr], \f] where \f$B' = \sqrt{1+e'^2\sin^2\beta_0} = \sqrt{1+e'^2}/B\f$, and the error once again is \f$O(f\Delta\phi^4)\f$. This is the "Bowring (using \f$\beta\f$)" method. \subsection auxsphere Bessel's auxiliary sphere GeographicLib's uses the auxiliary sphere method of Legendre, Bessel, and Helmert. For short geodesics, this is equivalent to picking \f$ R, A, K \f$ so that \f[ m(\phi_0) = 1,\quad \left.\frac{dm(\phi)}{d\phi}\right|_{\phi=\phi_0} = 0,\quad \tan\phi'_0 = (1 - f) \tan\phi_0. \f] Bowring's requirement that the second derivative of \f$m\f$ vanish has been replaced by the last relation which states that \f$\phi'_0 = \beta_0\f$, the parametric latitude corresponding to \f$\phi_0\f$. This gives \f[ \begin{align} R &= B'(1-f)a, \\ A &= \frac1{B'(1-f)}, \\ \left.\frac{d^2m(\phi)}{d\phi^2}\right|_{\phi=\phi_0} &= -e^2B'^2\sin^2\phi_0. \end{align} \f] Similar to Bowring's method, we can compute \f$\phi'_1\f$ and \f$\phi'_2\f$ using a Taylor expansion about \f$\beta_0\f$. This results in the simple expression \f[ \Delta\phi' \approx \Delta\beta, \f] where the error is \f$O(f\Delta\beta^2)\f$. \subsection shorterr Estimating the accuracy In assessing the accuracy of these methods we use two metrics: - The absolute error in the distance. - The consistency of the predicted azimuths. Imagine starting ellipsoidal geodesics at \f$ (\phi_1, \lambda_1) \f$ and \f$ (\phi_2, \lambda_2) \f$ with the predicted azimuths. What is the distance between them when they are extended a distance \f$ a \f$ beyond the second point? . (The second metric is much more stringent.) We may now compare the methods by asking for a bound to the length of a geodesic which ensures that the one or other of the errors fall below 1 mm (an "engineering" definition of accurate) or 1 nm (1 nanometer, about the round-off limit).
Maximum distance that can be used in various methods for computing short geodesics while keeping the errors within prescribed bounds
method
distance metric
azimuth metric
1 mm error 1 nm error 1 mm error 1 nm error
Bowring (original)
87 km
870 m
35 km
350 m
Bowring (improved)
180 km
1.8 km
58 km
580 m
Bowring (truncated)
52 km
520 m
52 km
520 m
Bowring (using \f$\beta\f$)
380 km
24 km
60 km
600 m
Bessel's aux. sphere
42 km
420 m
1.7 km
1.7 m
For example, if you're only interested in measuring distances and an accuracy of 1 mm is sufficient, then Bowring's improved method can be used for distances up to 180 km. On the other hand, GeographicLib uses Bessel's auxiliary sphere and we require both the distance and the azimuth to be accurate, so the great circle approximation can only be used for distances less than 1.7 m. The reason that GeographicLib does not use Bowring's method is that the information necessary for auxiliary sphere method is already available as part of the general solution and, as much as possible, we allow all geodesics to be computed by the general method.
Back to \ref magnetic. Forward to \ref nearest. Up to \ref contents.
**********************************************************************/ /** \page nearest Finding nearest neighbors
Back to \ref geodesic. Forward to \ref triaxial. Up to \ref contents.
The problem of finding the maritime boundary defined by the "median line" is discussed in Section 14 of - C. F. F. Karney, Geodesics on an ellipsoid of revolution, Feb. 2011; preprint arxiv:1102.1215v1. . Figure 14 shows the median line which is equidistant from Britain and mainland Europe. Determining the median line involves finding, for any given \e P, the closest points on the coast of Britain and on the coast of mainland Europe. The operation of finding the closest in a set of points is usually referred to as the nearest neighbor problem and the NearestNeighbor class implements an efficient algorithm for solving it. The NearestNeighbor class implements nearest-neighbor calculations using the vantage-point tree described by - J. K. Uhlmann, Satisfying general proximity/similarity queries with metric trees, Information Processing Letters 40 175--179 (1991). - P. N. Yianilos, Data structures and algorithms for nearest neighbor search in general metric spaces, Proc. 4th ACM-SIAM Symposium on Discrete Algorithms, (SIAM, 1993). pp. 311--321. Given a set of points \e x, \e y, \e z, …, in some space and a distance function \e d satisfying the metric conditions, \f[ \begin{align} d(x,y) &\ge 0,\\ d(x,y) &= 0, \ \text{iff $x = y$},\\ d(x,y) &= d(y,x),\\ d(x,z) &\le d(x,y) + d(y,z), \end{align} \f] the vantage-point (VP) tree provides an efficient way of determining nearest neighbors. The geodesic distance (implemented by the Geodesic class) satisfies these metric conditions, while the great ellipse distance and the rhumb line distance do not (they do not satisfy the last condition, the triangle inequality). Typically the cost of constructing a VP tree of \e N points is \e N log \e N, while the cost of a query is log \e N. Thus a VP tree should be used in situations where \e N is large and at least log \e N queries are to be made. The condition, \e N is large, should be taken to mean that \f$ N \gg 2^D \f$, where \e D is the dimensionality of the space. - This implementation includes Yianilos' upper and lower bounds for the inside and outside sets. This helps limit the number of searches (compared to just using the median distance). - Rather than do a depth-first or breath-first search on the tree, the nodes to be processed are put on a priority queue with the nodes most likely to contain close points processed first. Frequently, this allows nodes lower down on the priority queue to be skipped. - This technique also allows non-exhaustive searchs to be performed (to answer questions such as "are there any points within 1km of the query point?"). - When building the tree, the first vantage point is (arbitrarily) chosen as the middle element of the set. Thereafter, the points furthest from the parent vantage point in both the inside and outside sets are selected as the children's vantage points. This information is already available from the computation of the upper and lower bounds of the children. This choice seems to lead to a reasonably optimized tree. - The leaf nodes can contain a bucket of points (instead of just a vantage point). - Coincident points are allowed in the set; these are treated as distinct points. The figure below shows the construction of the VP tree for the points making up the coastlines of Britain and Ireland (about 5000 points shown in blue). The set of points is recursively split into 2 equal "inside" and "outside" subsets based on the distance from a "vantage point". The boundaries between the inside and outside sets are shown as green circular arcs (arcs of geodesic circles). At each stage, the newly added vantage points are shown as red dots and the vantage points for the next stage are shown as red plus signs. The data is shown in the Cassini-Soldner projection with a central meridian of 5°W. \image html vptree.gif "Vantage-point tree"
Back to \ref geodesic. Forward to \ref triaxial. Up to \ref contents.
**********************************************************************/ /** \page triaxial Geodesics on a triaxial ellipsoid
Back to \ref nearest. Forward to \ref jacobi. Up to \ref contents.
Jacobi (1839) showed that the problem of geodesics on a triaxial ellipsoid (with 3 unequal axes) can be reduced to quadrature. Despite this, the detailed behavior of the geodesics is not very well known. In this section, I briefly give Jacobi's solution and illustrate the behavior of the geodesics and outline an algorithm for the solution of the inverse problem. See also - The wikipedia page, Geodesics on a triaxial ellipsoid. Go to - \ref triaxial-coords - \ref triaxial-jacobi - \ref triaxial-survey - \ref triaxial-stab - \ref triaxial-inverse NOTES -# A triaxial ellipsoid approximates the earth only slightly better than an ellipsoid of revolution. If you are really considering measuring distances on the earth using a triaxial ellipsoid, you should also be worrying about the shape of the geoid, which essentially makes the geodesic problem a hopeless mess; see, for example, Waters (2011) (preprint). -# There is nothing new in this section. It is just an exercise in exploring Jacobi's solution. My interest here is in generating long geodesics with the correct long-time behavior. Arnold gives a nice qualitative description of the solution in Mathematical Methods of Classical Mechanics (2nd edition, Springer, 1989), pp. 264--266. -# Possible reasons this problem might, nevertheless, be of interest are: - It is the first example of a dynamical system which has a non-trivial constant of motion. As such, Jacobi's paper generated a lot of excitement and was followed by many papers elaborating his solution. In particular, the unstable behavior of one of the closed geodesics of the ellipsoid, is an early example of a system with a positive Lyapunov exponent (one of the essential ingredients for chaotic behavior in dynamical systems). - Knowledge of ellipsoidal coordinates (used by Jacobi) might be useful in other areas of geodesy. - Geodesics which pass through the pole on an ellipsoid of revolution represent a degenerate class (they are all closed and all pass through the opposite pole). It is of interest to see how this degeneracy is broken with a surface with a more general shape. - Similarly, it is of interest to see how the Mercator projection of the ellipsoid generalizes; this is another problem addressed by Jacobi. -# My interest in this problem was piqued by Jean-Marc Baillard. I put him onto Jacobi's solution without having looked at it in detail myself; and he quickly implemented the solution for an HP-41 calculator(!) which is posted here. -# I do not give full citations of the papers here. You can find these in the Geodesic Bibliography; this includes links to online versions of the papers. -# An alternative to exploring geodesics using Jacobi's solution is to integrate the equations for the geodesics directly. This is the approach taken by Panou and Korakitis (2019). However it is difficult to ensure that the long time behavior is correctly modeled with such an approach. -# If you only want to learn about geodesics on a biaxial ellipsoid (an ellipsoid of revolution), then see \ref geodesic or the paper - C. F. F. Karney, Algorithms for geodesics, J. Geodesy 87(1), 43--55 (2013); DOI: 10.1007/s00190-012-0578-z; addenda: geod-addenda.html. \section triaxial-coords Triaxial coordinate systems Consider the ellipsoid defined by \f[ f = \frac{X^2}{a^2} + \frac{Y^2}{b^2} + \frac{Z^2}{c^2} = 1, \f] where, without loss of generality, \f$ a \ge b \ge c \gt 0\f$. A point on the surface is specified by a latitude and longitude. The \e geographical latitude and longitude \f$(\phi, \lambda)\f$ are defined by \f[ \frac{\nabla f}{\left| \nabla f\right|} = \left( \begin{array}{c} \cos\phi \cos\lambda \\ \cos\phi \sin\lambda \\ \sin\phi \end{array}\right). \f] The \e parametric latitude and longitude \f$(\phi', \lambda')\f$ are defined by \f[ \begin{align} X &= a \cos\phi' \cos\lambda', \\ Y &= b \cos\phi' \sin\lambda', \\ Z &= c \sin\phi'. \end{align} \f] Jacobi employed the \e ellipsoidal latitude and longitude \f$(\beta, \omega)\f$ defined by \f[ \begin{align} X &= a \cos\omega \frac{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}} {\sqrt{a^2 - c^2}}, \\ Y &= b \cos\beta \sin\omega, \\ Z &= c \sin\beta \frac{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}} {\sqrt{a^2 - c^2}}. \end{align} \f] Grid lines of constant \f$\beta\f$ and \f$\omega\f$ are given in Fig. 1.
Geodesic grid on a triaxial ellipsoid Fig. 1
\n Fig. 1: The ellipsoidal grid. The blue (resp. green) lines are lines of constant \f$\beta\f$ (resp. \f$\omega\f$); the grid spacing is 15°. Also shown in red are two of the principal sections of the ellipsoid, defined by \f$X = 0\f$ and \f$Z = 0\f$. The third principal section, \f$Y = 0\f$, is covered by the lines \f$\beta = \pm 90^\circ\f$ and \f$\omega = 90^\circ \pm 90^\circ\f$. These lines meet at four umbilical points (two of which are visible in this figure) where the principal radii of curvature are equal. The parameters of the ellipsoid are \f$a = 1.01\f$, \f$b = 1\f$, \f$c = 0.8\f$, and it is viewed in an orthographic projection from a point above \f$\phi = 40^\circ\f$, \f$\lambda = 30^\circ\f$. These parameters were chosen to accentuate the ellipsoidal effects on geodesics (relative to those on the earth) while still allowing the connection to an ellipsoid of revolution to be made. The grid lines of the ellipsoid coordinates are "lines of curvature" on the ellipsoid, i.e., they are parallel to the direction of principal curvature (Monge, 1796). They are also intersections of the ellipsoid with confocal systems of hyperboloids of one and two sheets (Dupin, 1813). Finally they are geodesic ellipses and hyperbolas defined using two adjacent umbilical points. For example, the lines of constant \f$\beta\f$ in Fig. 1 can be generated with the familiar string construction for ellipses with the ends of the string pinned to the two umbilical points. The element of length on the ellipsoid in ellipsoidal coordinates is given by \f[ \begin{align} \frac{ds^2}{(a^2-b^2)\sin^2\omega+(b^2-c^2)\cos^2\beta} &= \frac{b^2\sin^2\beta+c^2\cos^2\beta} {a^2-b^2\sin^2\beta-c^2\cos^2\beta} d\beta^2 \\ &\qquad+ \frac{a^2\sin^2\omega+b^2\cos^2\omega} {a^2\sin^2\omega+b^2\cos^2\omega-c^2} d\omega^2. \end{align} \f] The torus \f$(\omega, \beta) \in [-\pi,\pi] \times [-\pi,\pi]\f$ covers the ellipsoid twice. In order to facilitate passing to the limit of an oblate ellipsoid, we may regard as the principal sheet \f$[-\pi,\pi] \times [-\frac12\pi,\frac12\pi]\f$ and insert branch cuts at \f$\beta=\pm\frac12\pi\f$. The rule for switching sheets is \f[ \begin{align} \omega & \rightarrow -\omega,\\ \beta & \rightarrow \pi-\beta,\\ \alpha & \rightarrow \pi+\alpha, \end{align} \f] where \f$\alpha\f$ is the heading of a path, relative to a line of constant \f$\omega\f$. In the limit \f$b\rightarrow a\f$ (resp. \f$b\rightarrow c\f$), the umbilic points converge on the \f$Z\f$ (resp. \f$X\f$) axis and an oblate (resp. prolate) ellipsoid is obtained with \f$\beta\f$ (resp. \f$\omega\f$) becoming the standard parametric latitude and \f$\omega\f$ (resp. \f$\beta\f$) becoming the standard longitude. The sphere is a non-uniform limit, with the position of the umbilic points depending on the ratio \f$(a-b)/(b-c)\f$. Inter-conversions between the three different latitudes and longitudes and the cartesian coordinates are simple algebraic exercises. \section triaxial-jacobi Jacobi's solution Solving the geodesic problem for an ellipsoid of revolution is, from the mathematical point of view, trivial; because of symmetry, geodesics have a constant of the motion (analogous to the angular momentum) which was found by Clairaut (1733). By 1806 (with the work of Legendre, Oriani, et al.), there was a complete understanding of the qualitative behavior of geodesics on an ellipsoid of revolution. On the other hand, geodesics on a triaxial ellipsoid have no obvious constant of the motion and thus represented a challenging "unsolved" problem in the first half of the nineteenth century. Jacobi discovered that the geodesic equations are separable if they are expressed in ellipsoidal coordinates. You can get an idea of the importance Jacobi attached to his discovery from the letter he wrote to his friend and neighbor Bessel:
The day before yesterday, I reduced to quadrature the problem of geodesic lines on an ellipsoid with three unequal axes. They are the simplest formulas in the world, Abelian integrals, which become the well known elliptic integrals if 2 axes are set equal.\n Königsberg, 28th Dec. '38.
On the same day he wrote a similar letter to the editor of Compte Rendus and his result was published in J. Crelle in (1839) with a French translation (from German) appearing in J. Liouville in (1841). Here is the solution, exactly as given by Jacobi here (with minor changes in notation): \f[ \begin{align} \delta &= \int \frac {\sqrt{b^2\sin^2\beta + c^2\cos^2\beta}\,d\beta} {\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta} \sqrt{(b^2-c^2)\cos^2\beta - \gamma}}\\ &\quad - \int \frac {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega}\,d\omega} {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2} \sqrt{(a^2-b^2)\sin^2\omega + \gamma}} \end{align} \f] As Jacobi notes "a function of the angle \f$\beta\f$ equals a function of the angle \f$\omega\f$. These two functions are just Abelian integrals…" Two constants \f$\delta\f$ and \f$\gamma\f$ appear in the solution. Typically \f$\delta\f$ is zero if the lower limits of the integrals are taken to be the starting point of the geodesic and the direction of the geodesics is determined by \f$\gamma\f$. However for geodesics that go through an umbilical point, we have \f$\gamma = 0\f$ and \f$\delta\f$ determines the direction at the umbilical point. Incidentally the constant \f$\gamma\f$ may be expressed as \f[ \gamma = (b^2-c^2)\cos^2\beta\sin^2\alpha-(a^2-b^2)\sin^2\omega\cos^2\alpha \f] where \f$\alpha\f$ is the angle the geodesic makes with lines of constant \f$\omega\f$. In the limit \f$b\rightarrow a\f$, this reduces to \f$\cos\beta\sin\alpha = \text{const.}\f$, the familiar Clairaut relation. A nice derivation of Jacobi's result is given by Darboux (1894) §§583--584 where he gives the solution found by Liouville (1846) for general quadratic surfaces. In this formulation, the distance along the geodesic, \f$s\f$, is also found using \f[ \begin{align} \frac{ds}{(a^2-b^2)\sin^2\omega + (b^2-c^2)\cos^2\beta} &= \frac {\sqrt{b^2\sin^2\beta + c^2\cos^2\beta}\,d\beta} {\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta} \sqrt{(b^2-c^2)\cos^2\beta - \gamma}}\\ &= \frac {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega}\,d\omega} {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2} \sqrt{(a^2-b^2)\sin^2\omega + \gamma}} \end{align} \f] An alternative expression for the distance is \f[ \begin{align} ds &= \frac {\sqrt{b^2\sin^2\beta + c^2\cos^2\beta} \sqrt{(b^2-c^2)\cos^2\beta - \gamma}\,d\beta} {\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}}\\ &\quad {}+ \frac {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega} \sqrt{(a^2-b^2)\sin^2\omega + \gamma}\,d\omega} {\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}} \end{align} \f] Jacobi's solution is a convenient way to compute geodesics on an ellipsoid. Care must be taken with the signs of the square roots (which are determined by the initial azimuth of the geodesic). Also if \f$\gamma \gt 0\f$ (resp. \f$\gamma \lt 0\f$), then the \f$\beta\f$ (resp. \f$\omega\f$) integrand diverges. The integrand can be transformed into a finite one by a change of variable, e.g., \f$\sin\beta = \sin\sigma \sqrt{1 - \gamma/(b^2-c^2)}\f$. The resulting integrands are periodic, so the behavior of an arbitrarily long geodesic is entirely captured by tabulating the integrals over a single period. The situation is more complicated if \f$\gamma = 0\f$ (corresponding to umbilical geodesics). Both integrands have simple poles at the umbilical points. However, this behavior may be subtracted from the integrands to yield (for example) the sum of a term involving \f$\sinh^{-1}\tan\beta\f$ and a finite integral. Since both integrals contain similar logarithmic singularities they can be equated (thus fixing the ratio \f$\cos\beta/\sin\omega\f$ at the umbilical point) and connection formulas can be found which allow the geodesic to be followed through the umbilical point. The study of umbilical geodesics was of special interest to a group of Irish mathematicians in the 1840's and 1850's, including Michael and William Roberts (twins!), Hart, Graves, and Salmon. \section triaxial-survey Survey of triaxial geodesics Before delving into the nature of geodesics on a triaxial geodesic, it is worth reviewing geodesics on an ellipsoid of revolution. There are two classes of simple closed geodesics (i.e., geodesics which close on themselves without intersection): the equator and all the meridians. All other geodesics oscillate between two equal and opposite circles of latitude; but after completing a full oscillation in latitude these fall slightly short (for an oblate ellipsoid) of completing a full circuit in longitude. Turning to the triaxial case, we find that there are only 3 simple closed geodesics, the three principal sections of the ellipsoid given by \f$X = 0\f$, \f$Y = 0\f$, and \f$Z = 0\f$. To survey the other geodesics, it is convenient to consider geodesics which intersect the middle principal section, \f$Y = 0\f$, at right angles. Such geodesics are shown in Figs. 2--6, where I use the same ellipsoid parameters as in Fig. 1 and the same viewing direction. In addition, the three principal ellipses are shown in red in each of these figures. If the starting point is \f$\beta_1 \in (-90^\circ, 90^\circ)\f$, \f$\omega_1 = 0\f$, and \f$\alpha_1 = 90^\circ\f$, then the geodesic encircles the ellipsoid in a "circumpolar" sense. The geodesic oscillates north and south of the equator; on each oscillation it completes slightly less that a full circuit around the ellipsoid resulting in the geodesic filling the area bounded by the two latitude lines \f$\beta = \pm \beta_1\f$. Two examples are given in Figs. 2 and 3. Figure 2 shows practically the same behavior as for an oblate ellipsoid of revolution (because \f$a \approx b\f$). However, if the starting point is at a higher latitude (Fig. 3) the distortions resulting from \f$a \ne b\f$ are evident.
Example of a circumpolar geodesic on a
triaxial ellipsoid Fig. 2
\n Fig. 2: Example of a circumpolar geodesic on a triaxial ellipsoid. The starting point of this geodesic is \f$\beta_1 = 45.1^\circ\f$, \f$\omega_1 = 0^\circ\f$, and \f$\alpha_1 = 90^\circ\f$.
Another example of a circumpolar geodesic on a
triaxial ellipsoid Fig. 3
\n Fig. 3: Another example of a circumpolar geodesic on a triaxial ellipsoid. The starting point of this geodesic is \f$\beta_1 = 87.48^\circ\f$, \f$\omega_1 = 0^\circ\f$, and \f$\alpha_1 = 90^\circ\f$. If the starting point is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 \in (0^\circ, 180^\circ)\f$, and \f$\alpha_1 = 180^\circ\f$, then the geodesic encircles the ellipsoid in a "transpolar" sense. The geodesic oscillates east and west of the ellipse \f$X = 0\f$; on each oscillation it completes slightly more that a full circuit around the ellipsoid resulting in the geodesic filling the area bounded by the two longitude lines \f$\omega = \omega_1\f$ and \f$\omega = 180^\circ - \omega_1\f$. If \f$a = b\f$, all meridians are geodesics; the effect of \f$a \ne b\f$ causes such geodesics to oscillate east and west. Two examples are given in Figs. 4 and 5.
Example of a transpolar geodesic on a
triaxial ellipsoid Fig. 4
\n Fig. 4: Example of a transpolar geodesic on a triaxial ellipsoid. The starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 = 39.9^\circ\f$, and \f$\alpha_1 = 180^\circ\f$.
Another example of a transpolar geodesic on a
triaxial ellipsoid Fig. 5
\n Fig. 5: Another example of a transpolar geodesic on a triaxial ellipsoid. The starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 = 9.966^\circ\f$, and \f$\alpha_1 = 180^\circ\f$. If the starting point is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 = 0^\circ\f$ (an umbilical point), and \f$\alpha_1 = 135^\circ\f$ (the geodesic leaves the ellipse \f$Y = 0\f$ at right angles), then the geodesic repeatedly intersects the opposite umbilical point and returns to its starting point. However on each circuit the angle at which it intersects \f$Y = 0\f$ becomes closer to \f$0^\circ\f$ or \f$180^\circ\f$ so that asymptotically the geodesic lies on the ellipse \f$Y = 0\f$. This is shown in Fig. 6. Note that a single geodesic does not fill an area on the ellipsoid.
Example of an umbilical geodesic on a
triaxial ellipsoid Fig. 6
\n Fig. 6: Example of an umbilical geodesic on a triaxial ellipsoid. The starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 = 0^\circ\f$, and \f$\alpha_1 = 135^\circ\f$ and the geodesics is followed forwards and backwards until it lies close to the plane \f$Y = 0\f$ in both directions. Umbilical geodesics enjoy several interesting properties. - Through any point on the ellipsoid, there are two umbilical geodesics. - The geodesic distance between opposite umbilical points is the same regardless of the initial direction of the geodesic. - Whereas the closed geodesics on the ellipses \f$X = 0\f$ and \f$Z = 0\f$ are stable (an geodesic initially close to and nearly parallel to the ellipse remains close to the ellipse), the closed geodesic on the ellipse \f$Y = 0\f$, which goes through all 4 umbilical points, is \e unstable. If it is perturbed, it will swing out of the plane \f$Y = 0\f$ and flip around before returning to close to the plane. (This behavior may repeat depending on the nature of the initial perturbation.). \section triaxial-stab The stability of closed geodesics The stability of the three simple closed geodesics can be determined by examining the properties of Jacobi's solution. In particular the unstable behavior of umbilical geodesics was shown by Hart (1849). However an alternative approach is to use the equations that Gauss (1828) gives for a perturbed geodesic \f[ \frac {d^2m}{ds^2} + Km = 0 \f] where \f$m\f$ is the distance of perturbed geodesic from a reference geodesic and \f$K\f$ is the Gaussian curvature of the surface. If the reference geodesic is closed, then this is a linear homogeneous differential equation with periodic coefficients. In fact it's a special case of Hill's equation which can be treated using Floquet theory, see DLMF, §28.29. Using the notation of §3 of Algorithms for geodesics, the stability is determined by computing the reduced length \f$m_{12}\f$ and the geodesic scales \f$M_{12}, M_{21}\f$ over half the perimeter of the ellipse and determining the eigenvalues \f$\lambda_{1,2}\f$ of \f[ {\cal M} = \left(\begin{array}{cc} M_{12} & m_{12}\\ -\frac{1 - M_{12}M_{21}}{m_{12}} & M_{21} \end{array}\right). \f] Because \f$\mathrm{det}\,{\cal M} = 1\f$, the eigenvalues are determined by \f$\mathrm{tr}\,{\cal M}\f$. In particular if \f$\left|\mathrm{tr}\,{\cal M}\right| < 2\f$, we have \f$\left|\lambda_{1,2}\right| = 1\f$ and the solution is stable; if \f$\left|\mathrm{tr}\,{\cal M}\right| > 2\f$, one of \f$\left|\lambda_{1,2}\right|\f$ is larger than unity and the solution is (exponentially) unstable. In the transition case, \f$\left|\mathrm{tr}\,{\cal M}\right| = 2\f$, the solution is stable provided that the off-diagonal elements of \f${\cal M}\f$ are zero; otherwise the solution is linearly unstable. The exponential instability of the geodesic on the ellipse \f$Y = 0\f$ is confirmed by this analysis and results from the resonance between the natural frequency of the equation for \f$m\f$ and the driving frequency when \f$b\f$ lies in \f$(c, a)\f$. If \f$b\f$ is equal to either of the other axes (and the triaxial ellipsoid degenerates to an ellipsoid of revolution), then the solution is linearly unstable. (For example, a geodesic is which is close to a meridian on an oblate ellipsoid, slowly moves away from that meridian.) \section triaxial-inverse The inverse problem In order to solve the inverse geodesic problem, it helps to have an understanding of the properties of all the geodesics emanating from a single point \f$(\beta_1, \omega_1)\f$. - If the point is an umbilical point, all the lines meet at the opposite umbilical point. - Otherwise, the first envelope of the geodesics is a 4-pointed astroid. The cusps of the astroid lie on either \f$\beta = - \beta_1\f$ or \f$\omega = \omega_1 + \pi\f$; see Sinclair (2003). - All geodesics intersect (or, in the case of \f$\alpha_1 = 0\f$ or \f$\pi\f$, touch) the line \f$\omega = \omega_1 + \pi\f$. - All geodesics intersect (or, in the case of \f$\alpha_1 = \pm\pi/2\f$, touch) the line \f$\beta = -\beta_1\f$. - Two geodesics with azimuths \f$\pm\alpha_1\f$ first intersect on \f$\omega = \omega_1 + \pi\f$ and their lengths to the point of intersection are equal. - Two geodesics with azimuths \f$\alpha_1\f$ and \f$\pi-\alpha_1\f$ first intersect on \f$\beta = -\beta_1\f$ and their lengths to the point of intersection are equal. . (These assertions follow directly from the equations for the geodesics; some of them are somewhat surprising given the asymmetries of the ellipsoid.) Consider now terminating the geodesics from \f$(\beta_1, \omega_1)\f$ at the point where they first intersect (or touch) the line \f$\beta = -\beta_1\f$. To focus the discussion, take \f$\beta_1 \le 0\f$. - The geodesics completely fill the portion of the ellipsoid satisfying \f$\beta \le -\beta_1\f$. - None of geodesics intersect any other geodesics. - Any initial portion of these geodesics is a shortest path. - Each geodesic intersects the line \f$\beta = \beta_2\f$, where \f$\beta_1 < \beta_2 < -\beta_1\f$, exactly once. - For a given \f$\beta_2\f$, this defines a continuous monotonic mapping of the circle of azimuths \f$\alpha_1\f$ to the circle of longitudes \f$\omega_2\f$. - If \f$\beta_2 = \pm \beta_1\f$, then the previous two assertions need to be modified similarly to the case for an ellipsoid of revolution. These properties show that the inverse problem can be solved using techniques similar to those employed for an ellipsoid of revolution (see §4 of Algorithms for geodesics). - If the points are opposite umbilical points, an arbitrary \f$\alpha_1\f$ may be chosen. - If the points are neighboring umbilical points, the shortest path lies on the ellipse \f$Y = 0\f$. - If only one point is an umbilicial point, the azimuth at the non-umbilical point is found using the generalization of Clairaut's equation (given above) with \f$\gamma = 0\f$. - Treat the cases where the geodesic might follow a line of constant \f$\beta\f$. There are two such cases: (a) the points lie on the ellipse \f$Z = 0\f$, \f$\beta = 0\f$, on a general ellipsoid and (b) the points lie on an ellipse whose major axis is the \f$X\f$ axis, \f$\beta\f$ arbitrary, on a prolate ellipsoid (\f$a > b = c\f$). Determine the reduced length \f$m_{12}\f$ for the geodesic which is the shorter path along the ellipse. If \f$m_{12} \ge 0\f$, then this is the shortest path on the ellipsoid; otherwise proceed to the general case (next). - Swap the points, if necessary, so that the first point is the one closest to a pole. Estimate \f$\alpha_1\f$ (by some means) and solve the \e hybrid problem, i.e., determine the longitude \f$\omega_2\f$ corresponding to the first intersection of the geodesic with \f$\beta = \beta_2\f$. Adjust \f$\alpha_1\f$ so that the value of \f$\omega_2\f$ matches the given \f$\omega_2\f$ (there is a single root). If a sufficiently close solution can be found, Newton's method can be employed since the necessary derivative can be expressed in terms of the reduced length \f$m_{12}\f$. The shortest path found by this method is unique unless: - The length of the geodesic vanishes \f$s_{12}=0\f$, in which case any constant can be added to the azimuths. - The points are opposite umbilical points. In this case, \f$\alpha_1\f$ can take on any value and \f$\alpha_2\f$ needs to be adjusted to maintain the value of \f$\tan\alpha_1 / \tan\alpha_2\f$. Note that \f$\alpha\f$ increases by \f$\pm 90^\circ\f$ as the geodesic passes through an umbilical point, depending on whether the geodesic is considered as passing to the right or left of the point. Here \f$\alpha_2\f$ is the \e forward azimuth at the second umbilical point, i.e., its azimuth immediately \e after passage through the umbilical point. - \f$\beta_1 + \beta_2 = 0\f$ and \f$\cos\alpha_1\f$ and \f$\cos\alpha_2\f$ have opposite signs. In this case, there another shortest geodesic with azimuths \f$\pi - \alpha_1\f$ and \f$\pi - \alpha_2\f$. I have implemented this solution to the inverse geodesic problem on a triaxial ellipsoid in Octave/MATLAB. However, this is uses the method of Panou and Korakitis (2019) to solve the direct problem while searching for the inverse solution. \section triaxial-conformal Jacobi's conformal projection This material is now on its own page; see \ref jacobi.
Back to \ref nearest. Forward to \ref jacobi. Up to \ref contents.
**********************************************************************/ /** \page jacobi Jacobi's conformal projection
Back to \ref triaxial. Forward to \ref rhumb. Up to \ref contents.
In addition to solving the geodesic problem for the triaxial ellipsoid, Jacobi (1839) briefly mentions the problem of the conformal projection of ellipsoid. He covers this in greater detail in Vorlesungen über Dynamik, §28, which is now available in an English translation: Lectures on Dynamics ( errata). \section jacobi-conformal Conformal projection It is convenient to rotate Jacobi's ellipsoidal coordinate system so that \f$(X,Y,Z)\f$ are respectively the middle, large, and small axes of the ellipsoid. The longitude \f$\omega\f$ is shifted so that \f$(\beta=0,\omega=0)\f$ is the point \f$(b,0,0)\f$. The coordinates are thus defined by \f[ \begin{align} X &= b \cos\beta \cos\omega, \\ Y &= a \sin\omega \frac{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}} {\sqrt{a^2 - c^2}}, \\ Z &= c \sin\beta \frac{\sqrt{a^2\cos^2\omega + b^2\sin^2\omega - c^2}} {\sqrt{a^2 - c^2}}. \end{align} \f] After this change, the large principal ellipse is the equator, \f$\beta=0\f$, while the small principal ellipse is the prime meridian, \f$\omega=0\f$. The four umbilic points, \f$\left|\omega\right| = \left|\beta\right| = \frac12\pi\f$, lie on middle principal ellipse in the plane \f$X=0\f$. Jacobi gives the following conformal mapping of the triaxial ellipsoid onto a plane \f[ \begin{align} x &= \frac{\sqrt{a^2-c^2}}b \int \frac {\sqrt{a^2 \cos^2\omega + b^2 \sin^2\omega}} {\sqrt{a^2 \cos^2\omega + b^2 \sin^2\omega - c^2}}\, d\omega, \\ y &= \frac{\sqrt{a^2-c^2}}b \int \frac {\sqrt{b^2 \sin^2\beta + c^2 \cos^2\beta}} {\sqrt{a^2 - b^2 \sin^2\beta - c^2 \cos^2\beta}}\, d\beta. \end{align} \f] The scale of the projection is \f[ k = \frac{\sqrt{a^2-c^2}} {b\sqrt{a^2 \cos^2\omega + b^2 (\sin^2\omega-\sin^2\beta) - c^2 \cos^2\beta}}. \f] I have scaled the Jacobi's projection by a constant factor, \f[ \frac{\sqrt{a^2-c^2}}{2b}, \f] so that it reduces to the familiar formulas in the case of an oblate ellipsoid. \section jacobi-elliptic The projection in terms of elliptic integrals The projection may be expressed in terms of elliptic integrals, \f[ \begin{align} x&=(1+e_a^2)\,\Pi(\omega',-e_a^2, \cos\nu),\\ y&=(1-e_c^2)\,\Pi(\beta' , e_c^2, \sin\nu),\\ k&=\frac{\sqrt{e_a^2+e_c^2}}{b\sqrt{e_a^2\cos^2\omega+e_c^2\cos^2\beta}}, \end{align} \f] where \f[ \begin{align} e_a &= \frac{\sqrt{a^2-b^2}}b, \qquad e_c = \frac{\sqrt{b^2-c^2}}b, \\ \tan\omega' &= \frac ba \tan\omega = \frac 1{\sqrt{1+e_a^2}} \tan\omega, \\ \tan\beta' &= \frac bc \tan\beta = \frac 1{\sqrt{1-e_c^2}} \tan\beta, \\ \tan\nu &= \frac ac \frac{\sqrt{b^2-c^2}}{\sqrt{a^2-b^2}} =\frac{e_c}{e_a}\frac{\sqrt{1+e_a^2}}{\sqrt{1-e_c^2}}, \end{align} \f] \f$\nu\f$ is the geographic latitude of the umbilic point at \f$\beta = \omega = \frac12\pi\f$ (the angle a normal at the umbilic point makes with the equatorial plane), and \f$\Pi(\phi,\alpha^2,k)\f$ is the elliptic integral of the third kind, https://dlmf.nist.gov/19.2.E7. This allows the projection to be numerically computed using EllipticFunction::Pi(real phi) const. Nyrtsov, et al., - M. V. Nyrtsov, M. E. Flies, M. M. Borisov, P. J. Stooke, Jacobi conformal projection of the triaxial ellipsoid: new projection for mapping of small celestial bodies, in Cartography from Pole to Pole (Springer, 2014), pp. 235--246. . also expressed the projection in terms of elliptic integrals. However, their expressions don't allow the limits of ellipsoids of revolution to be readily recovered. The relations https://dlmf.nist.gov/19.7.E5 can be used to put their results in the form given here. \section jacobi-properties Properties of the projection \f$x\f$ (resp. \f$y\f$) depends on \f$\omega\f$ (resp. \f$\beta\f$) alone, so that latitude-longitude grid maps to straight lines in the projection. In this sense, the Jacobi projection is the natural generalization of the Mercator projection for the triaxial ellipsoid. (See below for the limit \f$a\rightarrow b\f$, which makes this connection explicit.) In the general case (all the axes are different), the scale diverges only at the umbilic points. The behavior of these singularities is illustrated by the complex function \f[ f(z;e) = \cosh^{-1}(z/e) - \log(2/e). \f] For \f$e > 0\f$, this function has two square root singularities at \f$\pm e\f$, corresponding to the two northern umbilic points. Plotting contours of its real (resp. imaginary) part gives the behavior of the lines of constant latitude (resp. longitude) near the north pole in Fig. 1. If we pass to the limit \f$e\rightarrow 0\f$, then \f$ f(z;e)\rightarrow\log z\f$, and the two branch points merge yielding a stronger (logarithmic) singularity at \f$z = 0\f$, concentric circles of latitude, and radial lines of longitude. Again in the general case, the extents of \f$x\f$ and \f$y\f$ are finite, \f[ \begin{align} x\bigl(\tfrac12\pi\bigr) &=(1+e_a^2)\,\Pi(-e_a^2, \cos\nu),\\ y\bigl(\tfrac12\pi\bigr) &=(1-e_c^2)\,\Pi(e_c^2, \sin\nu), \end{align} \f] where \f$\Pi(\alpha^2,k)\f$ is the complete elliptic integral of the third kind, https://dlmf.nist.gov/19.2.E8. In particular, if we substitute values appropriate for the earth, \f[ \begin{align} a&=(6378137+35)\,\mathrm m,\\ b&=(6378137-35)\,\mathrm m,\\ c&=6356752\,\mathrm m,\\ \end{align} \f] we have \f[ \begin{align} x\bigl({\textstyle\frac12}\pi\bigr) &= 1.5720928 = \hphantom{0}90.07428^\circ,\\ y\bigl({\textstyle\frac12}\pi\bigr) &= 4.2465810 = 243.31117^\circ.\\ \end{align} \f] The projection may be inverted (to give \f$\omega\f$ in terms of \f$x\f$ and \f$\beta\f$ in terms of \f$y\f$) by using Newton's method to find the root of, for example, \f$x(\omega) - x_0 = 0\f$. The derivative of the elliptic integral is, of course, just given by its defining relation. If rhumb lines are defined as curves with a constant bearing relative to the ellipsoid coordinates, then these are straight lines in the Jacobi projection. A rhumb line which passes over an umbilic point immediately retraces its path. A rhumb line which crosses the line joining the two northerly umbilic points starts traveling south with a reversed heading (e.g., a NE heading becomes a SW heading). This behavior is preserved in the limit \f$a\rightarrow b\f$ (although the longitude becomes indeterminate in this limit). \section jacobi-limiting Limiting cases Oblate ellipsoid, \f$a\rightarrow b\f$. The coordinate system is \f[ \begin{align} X &= b \cos\beta \cos\omega, \\ Y &= b \cos\beta \sin\omega, \\ Z &= c \sin\beta. \end{align} \f] Thus \f$\beta\f$ (resp. \f$\beta'\f$) is the parametric (resp. geographic) latitude and \f$\omega=\omega'\f$ is the longitude; the quantity \f$e_c\f$ is the eccentricity of the ellipsoid. Using https://dlmf.nist.gov/19.6.E12 and https://dlmf.nist.gov/19.2.E19 the projection reduces to the normal Mercator projection for an oblate ellipsoid, \f[ \begin{align} x &= \omega,\\ y &= \sinh^{-1}\tan\beta' - e_c \tanh^{-1}(e_c\sin\beta'),\\ k &= \frac1{b\cos\beta}. \end{align} \f] Prolate ellipsoid, \f$c\rightarrow b\f$. The coordinate system is \f[ \begin{align} X &= b \cos\omega \cos\beta, \\ Y &= a \sin\omega, \\ Z &= b \cos\omega \sin\beta. \end{align} \f] Thus \f$\omega\f$ (resp. \f$\omega'\f$) now plays the role of the parametric (resp. geographic) latitude and while \f$\beta=\beta'\f$ is the longitude. Using https://dlmf.nist.gov/19.6.E12 https://dlmf.nist.gov/19.2.E19 and https://dlmf.nist.gov/19.2.E18 the projection reduces to similar expressions with the roles of \f$\beta\f$ and \f$\omega\f$ switched, \f[ \begin{align} x &= \sinh^{-1}\tan\omega' + e_a \tan^{-1}(e_a\sin\omega'),\\ y &= \beta,\\ k &= \frac1{b\cos\omega}. \end{align} \f] Sphere, \f$a\rightarrow b\f$ and \f$c\rightarrow b\f$. This is a non-uniform limit depending on the parameter \f$\nu\f$, \f[ \begin{align} X &= b \cos\omega \cos\beta, \\ Y &= b \sin\omega \sqrt{1 - \sin^2\nu\sin^2\beta}, \\ Z &= b \sin\beta \sqrt{1 - \cos^2\nu\sin^2\omega}. \end{align} \f] Using https://dlmf.nist.gov/19.6.E13 the projection can be put in terms of the elliptic integral of the first kind, https://dlmf.nist.gov/19.2.E4 \f[ \begin{align} x &= F(\omega, \cos\nu), \\ y &= F(\beta, \sin\nu), \\ k &= \frac1{b \sqrt{\cos^2\nu\cos^2\omega + \sin^2\nu\cos^2\beta}}. \end{align} \f] Obtaining the limit of a sphere via an oblate (resp. prolate) ellipsoid corresponds to setting \f$\nu = \frac12\pi\f$ (resp. \f$\nu =0\f$). In these limits, the elliptic integral reduces to elementary functions https://dlmf.nist.gov/19.6.E7 and https://dlmf.nist.gov/19.6.E8 \f[ \begin{align} F(\phi, 0) &= \phi, \\ F(\phi, 1) &= \mathop{\mathrm{gd}}\nolimits^{-1}\phi = \sinh^{-1}\tan\phi. \end{align} \f] The spherical limit gives the projection found by É. Guyou in - Sur un nouveau système de projection de la sphère, Comptes Rendus 102(6), 308--310 (1886). - Nouveau système de projection de la sphère: généralisation de la projection de Mercator, Annales Hydrographiques (2nd series) 9, 16--35 (1887). . who apparently derived it without realizing that it is just a special case of the projection Jacobi had given some 40 years earlier. Guyou's name is usually associated with the particular choice, \f$\nu=\frac14\pi\f$, in which case the hemisphere \f$\left|\omega\right|\le\frac12\pi\f$ is mapped into a square. However, by varying \f$\nu\in[0,\frac12\pi]\f$ the hemisphere can be mapped into a rectangle with any aspect ratio, \f$K(\cos\nu) : K(\sin\nu)\f$, where \f$K(k)\f$ is the complete elliptic integral of the first find, https://dlmf.nist.gov/19.2.E8. \section jacobi-sphere Conformal mapping of an ellipsoid to a sphere An essential tool in deriving conformal projections of an ellipsoid of revolution is the conformal mapping of the ellipsoid onto a sphere. This allows conformal projections of the sphere to be generalized to the case of an ellipsoid of revolution. This conformal mapping is obtained by using the ellipsoidal Mercator projection to map the ellipsoid to the plane and then using the spherical Mercator projection to map the plane onto the sphere. A similar construction is possible for a triaxial ellipsoid. Map each octant of the ellipsoid onto a rectangle using the Jacobi projection. The aspect ratio of this rectangle is \f[ (1+e_a^2)\,\Pi(-e_a^2, \cos\nu) : (1-e_c^2)\,\Pi( e_c^2, \sin\nu). \f] Find the value of \f$\nu'\f$ such that this ratio equals \f[ K(\cos\nu') : K(\sin\nu'). \f] Map the rectangle onto the equivalent octant of the sphere using Guyou's projection with parameter \f$\nu = \nu'\f$. This reduces to the standard construction in the limit of an ellipsoid of revolution. \section jacobi-implementation An implementation of the projection The experimental::JacobiConformal class provides an implementation of the Jacobi conformal projection is given here. NOTE: This is just sample code. It is not part of GeographicLib itself.
Back to \ref triaxial. Forward to \ref rhumb. Up to \ref contents.
**********************************************************************/ /** \page rhumb Rhumb lines
Back to \ref jacobi. Forward to \ref greatellipse. Up to \ref contents.
This material is now written up in - C. F. F. Karney,
The area of rhumb polygons,
Technical Report, SRI International, March 2023.
arxiv:2303.03219 . The series expansions described in the paper are available in - C. F. F. Karney,
Series expansions for computing rhumb areas,
March 2023.
DOI: 10.5281/zenodo.7685484 The Rhumb and RhumbLine classes together with the RhumbSolve utility perform rhumb line calculations. A rhumb line (also called a loxodrome) is a line of constant azimuth on the surface of the ellipsoid. It is important for historical reasons because sailing with a constant compass heading is simpler than sailing the shorter geodesic course; see Osborne (2013). The formulation of the problem on an ellipsoid is covered by Smart (1946) and Carlton-Wippern (1992). Computational approaches are given by Williams (1950) and Bennett (1996). My interest in this problem was piqued by Botnev and Ustinov (2014) who discuss various techniques to improve the accuracy of rhumb line calculations. The items of interest here are: - Review of accurate formulas for the auxiliary latitudes. - The calculation of the area under a rhumb line. - Using divided differences to compute \f$\mu_{12}/\psi_{12}\f$ maintaining full accuracy. Two cases are treated: - If \f$f\f$ is small, Krüger's series for the transverse Mercator projection relate \f$\chi\f$ and \f$\mu\f$. - For arbitrary \f$f\f$, the divided difference formula for incomplete elliptic integrals of the second relates \f$\beta\f$ and \f$\mu\f$. . - Extending Clenshaw summation to compute the divided difference of a trigonometric sum. Go to - \ref rhumbform - \ref rhumblat - \ref rhumbarea - \ref divideddiffs - \ref dividedclenshaw - \ref platecarreearea References: - G. G. Bennett, Practical Rhumb Line Calculations on the Spheroid J. Navigation 49(1), 112--119 (1996). - F. W. Bessel, The calculation of longitude and latitude from geodesic measurements (1825), Astron. Nachr. 331(8), 852--861 (2010); translated by C. F. F. Karney and R. E. Deakin; preprint: arXiv:0908.1824. - V.A. Botnev, S.M. Ustinov, Metody resheniya pryamoy i obratnoy geodezicheskikh zadach s vysokoy tochnost'yu (Methods for direct and inverse geodesic problems solving with high precision), St. Petersburg State Polytechnical University Journal 3(198), 49--58 (2014). - K. C. Carlton-Wippern, On Loxodromic Navigation, J. Navigation 45(2), 292--297 (1992). - K. E. Engsager and K. Poder, A highly accurate world wide algorithm for the transverse Mercator mapping (almost), Proc. XXIII Intl. Cartographic Conf. (ICC2007), Moscow (2007). - F. R. Helmert, Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880), Aeronautical Chart and Information Center (St. Louis, 1964), Chaps. 5--7. - W. M. Kahan and R. J. Fateman, Symbolic computation of divided differences, SIGSAM Bull. 33(2), 7--28 (1999) DOI: 10.1145/334714.334716. - C. F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475--485 (Aug. 2011); addenda: tm-addenda.html; preprint: arXiv:1002.1417; resource page: tm.html. - C. F. F. Karney, Algorithms for geodesics, J. Geodesy 87(1), 43--55 (2013); DOI: 10.1007/s00190-012-0578-z; addenda: geod-addenda.html; resource page: geod.html. - L. Krüger, Konforme Abbildung des Erdellipsoids in der Ebene (Conformal mapping of the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912). - P. Osborne, The Mercator Projections (2013), §2.5 and §6.5; DOI: 10.5281/zenodo.35392. - W. M. Smart, On a Problem in Navigation MNRAS 106(2), 124--127 (1946). - J. E. D. Williams, Loxodromic Distances on the Terrestrial Spheroid Journal, J. Navigation 3(2), 133--140 (1950) \section rhumbform Formulation of the rhumb line problem The rhumb line can formulated in terms of three types of latitude, the isometric latitude \f$\psi\f$ (this serves to define the course of rhumb lines), the rectifying latitude \f$\mu\f$ (needed for computing distances along rhumb lines), and the parametric latitude \f$\beta\f$ (needed for dealing with rhumb lines that run along a parallel). These are defined in terms of the geographical latitude \f$\phi\f$ by \f[ \begin{align} \frac{d\psi}{d\phi} &= \frac{\rho}R, \\ \frac{d\mu}{d\phi} &= \frac{\pi}{2M}\rho, \\ \end{align} \f] where \f$\rho\f$ is the meridional radius of curvature, \f$R = a\cos\beta\f$ is the radius of a circle of latitude, and \f$M\f$ is the length of a quarter meridian (from the equator to the pole). Rhumb lines are straight in the Mercator projection, which maps a point with geographical coordinates \f$ (\phi,\lambda) \f$ on the ellipsoid to a point \f$ (\psi,\lambda) \f$. The azimuth \f$\alpha_{12}\f$ of a rhumb line from \f$ (\phi_1,\lambda_1) \f$ to \f$ (\phi_2,\lambda_2) \f$ is thus given by \f[ \tan\alpha_{12} = \frac{\lambda_{12}}{\psi_{12}}, \f] where the quadrant of \f$\alpha_{12}\f$ is determined by the signs of the numerator and denominator of the right-hand side, \f$\lambda_{12} = \lambda_2 - \lambda_1\f$, \f$\psi_{12} = \psi_2 - \psi_1\f$, and, typically, \f$\lambda_{12}\f$ is reduced to the range \f$[-\pi,\pi]\f$ (thus giving the course of the shortest rhumb line). The distance is given by \f[ \begin{align} s_{12} &= \frac {2M}{\pi} \mu_{12} \sec\alpha_{12} \\ &= \frac {2M}{\pi} \frac{\mu_{12}}{\psi_{12}} \sqrt{\lambda_{12}^2 + \psi_{12}^2}, \end{align} \f] where \f$\mu_{12} = \mu_2 - \mu_1\f$. This relation is indeterminate if \f$\phi_1 = \phi_2\f$, so we take the limits \f$\psi_{12}\rightarrow0\f$ and \f$\mu_{12}\rightarrow0\f$ and apply L'Hôpital's rule to yield \f[ \begin{align} s_{12} &= \frac {2M}{\pi} \frac{d\mu}{d\psi} \left|\lambda_{12}\right|\\ &=a \cos\beta \left|\lambda_{12}\right|, \end{align} \f] where the last relation is given by the defining equations for \f$\psi\f$ and \f$\mu\f$. This provides a complete solution for rhumb lines. This formulation entirely encapsulates the ellipsoidal shape of the earth via the \ref auxlat; thus in the Rhumb class, the ellipsoidal generalization is handled by the Ellipsoid class where the auxiliary latitudes are defined. \section rhumblat Determining the auxiliary latitudes Here we brief develop the necessary formulas for the \ref auxlat. Isometric latitude: The equation for \f$\psi\f$ can be integrated to give \f[ \psi = \sinh^{-1}\tan\phi - e\tanh^{-1}(e \sin\phi), \f] where \f$e = \sqrt{f(2-f)}\f$ is the eccentricity of the ellipsoid. To invert this equation (to give \f$\phi\f$ in terms of \f$\psi\f$), it is convenient to introduce the variables \f$\tau=\tan\phi\f$ and \f$\tau' = \tan\chi = \sinh\psi\f$ (\f$\chi\f$ is the conformal latitude) which are related by (Karney, 2011) \f[ \begin{align} \tau' &= \tau \sqrt{1 + \sigma^2} - \sigma \sqrt{1 + \tau^2}, \\ \sigma &= \sinh\bigl(e \tanh^{-1}(e \tau/\sqrt{1 + \tau^2}) \bigr). \end{align} \f] The equation for \f$\tau'\f$ can be inverted to give \f$\tau\f$ in terms of \f$\tau'\f$ using Newton's method with \f$\tau_0 = \tau'/(1-e^2)\f$ as a starting guess; and, of course, \f$\phi\f$ and \f$\psi\f$ are then given by \f[ \begin{align} \phi &= \tan^{-1}\tau,\\ \psi &= \sinh^{-1}\tau'. \end{align} \f] This allows conversions to and from \f$\psi\f$ to be carried out for any value of the flattening \f$f\f$; these conversions are implemented by Ellipsoid::IsometricLatitude and Ellipsoid::InverseIsometricLatitude. (For prolate ellipsoids, \f$f\f$ is negative and \f$e\f$ is imaginary, and the equation for \f$\sigma\f$ needs to be recast in terms of the tangent function.) For small values of \f$f\f$, Engsager and Poder (2007) express \f$\chi\f$ as a trigonometric series in \f$\phi\f$. This series can be reverted to give a series for \f$\phi\f$ in terms of \f$\chi\f$. Both series can be efficiently evaluated using Clenshaw summation and this provides a fast non-iterative way of making the conversions. Parametric latitude: This is given by \f[ \tan\beta = (1-f)\tan\phi, \f] which allows rapid and accurate conversions; these conversions are implemented by Ellipsoid::ParametricLatitude and Ellipsoid::InverseParametricLatitude. Rectifying latitude: Solving for distances on the meridian is naturally carried out in terms of the parametric latitude instead of the geographical latitude. This leads to a simpler elliptic integral which is easier to evaluate and to invert. Helmert (1880, §5.11) notes that the series for meridian distance in terms of \f$\beta\f$ converge faster than the corresponding ones in terms of \f$\phi\f$. In terms of \f$\beta\f$, the rectifying latitude is given by \f[ \mu = \frac{\pi}{2E(ie')} E(\beta,ie'), \f] where \f$e'=e/\sqrt{1-e^2}\f$ is the second eccentricity and \f$E(k)\f$ and \f$E(\phi,k)\f$ are the complete and incomplete elliptic integrals of the second kind; see https://dlmf.nist.gov/19.2.ii. These can be evaluated accurately for arbitrary flattening using the method given in https://dlmf.nist.gov/19.36.i. To find \f$\beta\f$ in terms of \f$\mu\f$, Newton's method can be used (noting that \f$dE(\phi,k)/d\phi = \sqrt{1 - k^2\sin^2\phi}\f$); for a starting guess use \f$\beta_0 = \mu\f$ (or use the first terms in the reverted series; see below). These conversions are implemented by Ellipsoid::RectifyingLatitude and Ellipsoid::InverseRectifyingLatitude. If the flattening is small, \f$\mu\f$ can be expressed as a series in various ways. The most economical series is in terms of the third flattening \f$ n = f/(2-f)\f$ and was found by Bessel (1825); see Eq. 5.5.7 of Helmert (1880). Helmert (1880, Eq. 5.6.8) also gives the reverted series (finding \f$\beta\f$ given \f$\mu\f$). These series are used by the Geodesic class where the coefficients are \f$C_{1j}\f$ and \f$C_{1j}'\f$; see Eqs. (18) and (21) of Karney (2013) and \ref geodseries. (Make the replacements, \f$\sigma\rightarrow\beta\f$, \f$\tau\rightarrow\mu\f$, \f$\epsilon\rightarrow n\f$, to convert the notation of the geodesic problem to the problem at hand.) The series are evaluated by Clenshaw summation. These relations allow inter-conversions between the various latitudes \f$\phi\f$, \f$\psi\f$, \f$\chi\f$, \f$\beta\f$, \f$\mu\f$ to be carried out simply and accurately. The approaches using series apply only if \f$f\f$ is small. The others apply for arbitrary values of \f$f\f$. \section rhumbarea The area under a rhumb line NOTE: Section 3 of the report, The area of rhumb polygons, provides an improved treatment of this problem. The area between a rhumb line and the equator is given by \f[ S_{12} = \int_{\lambda_1}^{\lambda_2} c^2 \sin\xi \,d\lambda, \f] where \f$c\f$ is the authalic radius and \f$\xi\f$ is the authalic latitude. Express \f$\sin\xi\f$ in terms of the conformal latitude \f$\chi\f$ and expand as a series in the third flattening \f$n\f$. This can be expressed in terms of powers of \f$\sin\chi\f$. Substitute \f$\sin\chi=\tanh\psi\f$, where \f$\psi\f$ is the isometric latitude. For a rhumb line we have \f[ \begin{align} \lambda &= \lambda_1 + \frac{\psi - \psi_1}m,\\ m &= \frac{\psi_2 - \psi_1}{\lambda_2 - \lambda_1}. \end{align} \f] Performing the integral over \f$\lambda\f$ gives \f[ S_{12} = c^2 \lambda_{12} \left<\sin\xi\right>_{12}, \f] where \f$\left<\sin\xi\right>_{12}\f$ is the mean value of \f$\sin\xi\f$ given by \f[ \begin{align} \left<\sin\xi\right>_{12} &= \frac{R(\chi_2) - R(\chi_1)}{\psi_2 - \psi_1},\\ R(\chi) &= \log\sec\chi + \sum_{l=1} R_l\cos(2l\chi), \end{align} \f] \f$\log\f$ is the natural logarithm, and \f$R_l = O(n^l)\f$ is given as a series in \f$n\f$ below. In the spherical limit, the sum vanishes. Note the simple way that longitude enters into the expression for the area. In the limit \f$\chi_2 \rightarrow \chi_1\f$, we can apply l'Hôpital's rule \f[ \left<\sin\xi\right>_{12} \rightarrow \frac{dR(\chi_1)/d\chi_1}{\sec\chi_1} =\sin\xi_1, \f] as expected. In order to maintain accuracy, particularly for rhumb lines which nearly follow a parallel, evaluate \f$\left<\sin\xi\right>_{12}\f$ using divided differences (see the \ref divideddiffs "next section") and use Clenshaw summation to evaluate the sum (see the \ref dividedclenshaw "following section"). Here is the series expansion accurate to 10th order: \verbatim R[1] = - 1/3 * n + 22/45 * n^2 - 356/945 * n^3 + 1772/14175 * n^4 + 41662/467775 * n^5 - 114456994/638512875 * n^6 + 258618446/1915538625 * n^7 - 1053168268/37574026875 * n^8 - 9127715873002/194896477400625 * n^9 + 33380126058386/656284056553125 * n^10; R[2] = - 2/15 * n^2 + 106/315 * n^3 - 1747/4725 * n^4 + 18118/155925 * n^5 + 51304574/212837625 * n^6 - 248174686/638512875 * n^7 + 2800191349/14801889375 * n^8 + 10890707749202/64965492466875 * n^9 - 3594078400868794/10719306257034375 * n^10; R[3] = - 31/315 * n^3 + 104/315 * n^4 - 23011/51975 * n^5 + 1554472/14189175 * n^6 + 114450437/212837625 * n^7 - 8934064508/10854718875 * n^8 + 4913033737121/21655164155625 * n^9 + 591251098891888/714620417135625 * n^10; R[4] = - 41/420 * n^4 + 274/693 * n^5 - 1228489/2027025 * n^6 + 3861434/42567525 * n^7 + 1788295991/1550674125 * n^8 - 215233237178/123743795175 * n^9 + 95577582133463/714620417135625 * n^10; R[5] = - 668/5775 * n^5 + 1092376/2027025 * n^6 - 3966679/4343625 * n^7 + 359094172/10854718875 * n^8 + 7597613999411/3093594879375 * n^9 - 378396252233936/102088631019375 * n^10; R[6] = - 313076/2027025 * n^6 + 4892722/6081075 * n^7 - 1234918799/834978375 * n^8 - 74958999806/618718975875 * n^9 + 48696857431916/9280784638125 * n^10; R[7] = - 3189007/14189175 * n^7 + 930092876/723647925 * n^8 - 522477774212/206239658625 * n^9 - 2163049830386/4331032831125 * n^10; R[8] = - 673429061/1929727800 * n^8 + 16523158892/7638505875 * n^9 - 85076917909/18749059875 * n^10; R[9] = - 39191022457/68746552875 * n^9 + 260863656866/68746552875 * n^10; R[10] = - 22228737368/22915517625 * n^10; \endverbatim \section divideddiffs Use of divided differences Despite our ability to compute latitudes accurately, the way that distances enter into the solution involves the ratio \f$\mu_{12}/\psi_{12}\f$; the numerical calculation of this term is subject to catastrophic round-off errors when \f$\phi_1\f$ and \f$\phi_2\f$ are close. A simple solution, suggested by Bennett (1996), is to extend the treatment of rhumb lines along parallels to this case, i.e., to replace the ratio by the derivative evaluated at the midpoint. However this is not entirely satisfactory: you have to pick the transition point where the derivative takes over from the ratio of differences; and, near this transition point, many bits of accuracy will be lost (I estimate that about 1/3 of bits are lost, leading to errors on the order of 0.1 mm for double precision). Note too that this problem crops up even in the spherical limit. It turns out that we can do substantially better than this and maintain full double precision accuracy. Indeed Botnev and Ustinov provide formulas which allow \f$\mu_{12}/\psi_{12}\f$ to be computed accurately (but the formula for \f$\mu_{12}\f$ applies only for small flattening). Here I give a more systematic treatment using the algebra of divided differences. Many readers will be already using this technique, e.g., when writing, for example, \f[ \frac{\sin(2x) - \sin(2y)}{x-y} = 2\frac{\sin(x-y)}{x-y}\cos(x+y). \f] However, Kahan and Fateman (1999) provide an extensive set of rules which allow the technique to be applied to a wide range of problems. (The classes LambertConformalConic and AlbersEqualArea use this technique to improve the accuracy.) To illustrate the technique, consider the relation between \f$\psi\f$ and \f$\chi\f$, \f[ \psi = \sinh^{-1}\tan\chi. \f] The divided difference operator is defined by \f[ \Delta[f](x,y) = \begin{cases} df(x)/dx, & \text{if $x=y$,} \\ \displaystyle\frac{f(x)-f(y)}{x-y}, & \text{otherwise.} \end{cases} \f] Many of the rules for differentiation apply to divided differences; in particular, we can use the chain rule to write \f[ \frac{\psi_1 - \psi_2}{\chi_1 - \chi_2} = \Delta[\sinh^{-1}](\tan\chi_1,\tan\chi_2) \times \Delta[\tan](\chi_1,\chi_2). \f] Kahan and Fateman catalog the divided difference formulas for all the elementary functions. In this case, we need \f[ \begin{align} \Delta[\tan](x,y) &= \frac{\tan(x-y)}{x-y} (1 + \tan x\tan y),\\ \Delta[\sinh^{-1}](x,y) &= \frac1{x-y} \sinh^{-1}\biggl(\frac{(x-y)(x+y)}{x\sqrt{1+y^2}+y\sqrt{1+x^2}}\biggr). \end{align} \f] The crucial point in these formulas is that the right hand sides can be evaluated accurately even if \f$x-y\f$ is small. (I've only included the basic results here; Kahan and Fateman supplement these with the derivatives if \f$x-y\f$ vanishes or the direct ratios if \f$x-y\f$ is not small.) To complete the computation of \f$\mu_{12}/\psi_{12}\f$, we now need \f$(\mu_1 - \mu_2)/(\chi_1 - \chi_2)\f$, i.e., we need the divided difference of the function that converts the conformal latitude to rectifying latitude. We could go through the chain of relations between these quantities. However, we can take a short cut and recognize that this function was given as a trigonometric series by Krüger (1912) in his development of the transverse Mercator projection. This is also given by Eqs. (5) and (35) of Karney (2011) with the replacements \f$\zeta \rightarrow \mu\f$ and \f$\zeta' \rightarrow \chi\f$. The coefficients appearing in this series and the reverted series Eqs. (6) and (36) are already computed by the TransverseMercator class. The series can be readily converted to divided difference form (see the example at the beginning of this section) and Clenshaw summation can be used to evaluate it (see below). The approach of using the series for the transverse Mercator projection limits the applicability of the method to \f$\left|f\right|\lt 0.01\f$. If we want to extend the method to arbitrary flattening we need to compute \f$\Delta[E](x,y;k)\f$. The necessary relation is the "addition theorem" for the incomplete elliptic integral of the second kind given in https://dlmf.nist.gov/19.11.E2. This can be converted in the following divided difference formula \f[ \Delta[E](x,y;k) =\begin{cases} \sqrt{1 - k^2\sin^2x}, & \text{if $x=y$,} \\ \displaystyle \frac{E(x,k)-E(y,k)}{x-y}, & \text{if $xy \le0$,}\\ \displaystyle \biggl(\frac{E(z,k)}{\sin z} - k^2 \sin x \sin y\biggr)\frac{\sin z}{x-y}, &\text{otherwise,} \end{cases} \f] where the angle \f$z\f$ is given by \f[ \begin{align} \sin z &= \frac{2t}{1 + t^2},\quad\cos z = \frac{(1-t)(1+t)}{1 + t^2},\\ t &= \frac{(x-y)\Delta[\sin](x,y)} {\sin x\sqrt{1 - k^2\sin^2y} + \sin y\sqrt{1 - k^2\sin^2x}} \frac{\sin x + \sin y}{\cos x + \cos y}. \end{align} \f] We also need to apply the divided difference formulas to the conversions from \f$\phi\f$ to \f$\beta\f$ and \f$\phi\f$ to \f$\psi\f$; but these all involve elementary functions and the techniques given in Kahan and Fateman can be used. The end result is that the Rhumb class allows the computation of all rhumb lines for any flattening with full double precision accuracy (the maximum error is about 10 nanometers). I've kept the implementation simple, which results in rather a lot of repeated evaluations of quantities. However, in this case, the need for clarity trumps the desire for speed. \section dividedclenshaw Clenshaw evaluation of differenced sums The use of Clenshaw summation for summing series of the form, \f[ g(x) = \sum_{k=1}^N c_k \sin kx, \f] is well established. However when computing divided differences, we are interested in evaluating \f[ g(x)-g(y) = \sum_{k=1}^N 2 c_k \sin\bigl({\textstyle\frac12}k(x-y)\bigr) \cos\bigl({\textstyle\frac12}k(x+y)\bigr). \f] Clenshaw summation can be used in this case if we simultaneously compute \f$g(x)+g(y)\f$ and perform a matrix summation, \f[ \mathsf G(x,y) = \begin{bmatrix} (g(x) + g(y)) / 2\\ (g(x) - g(y)) / (x - y) \end{bmatrix} = \sum_{k=1}^N c_k \mathsf F_k(x,y), \f] where \f[ \mathsf F_k(x,y)= \begin{bmatrix} \cos kd \sin kp\\ {\displaystyle\frac{\sin kd}d} \cos kp \end{bmatrix}, \f] \f$d=\frac12(x-y)\f$, \f$p=\frac12(x+y)\f$, and, in the limit \f$d\rightarrow0\f$, \f$(\sin kd)/d \rightarrow k\f$. The first element of \f$\mathsf G(x,y)\f$ is the average value of \f$g\f$ and the second element, the divided difference, is the average slope. \f$\mathsf F_k(x,y)\f$ satisfies the recurrence relation \f[ \mathsf F_{k+1}(x,y) = \mathsf A(x,y) \mathsf F_k(x,y) - \mathsf F_{k-1}(x,y), \f] where \f[ \mathsf A(x,y) = 2\begin{bmatrix} \cos d \cos p & -d\sin d \sin p \\ - {\displaystyle\frac{\sin d}d} \sin p & \cos d \cos p \end{bmatrix}, \f] and \f$\lim_{d\rightarrow0}(\sin d)/d = 1\f$. The standard Clenshaw algorithm can now be applied to yield \f[ \begin{align} \mathsf B_{N+1} &= \mathsf B_{N+2} = \mathsf 0, \\ \mathsf B_k &= \mathsf A \mathsf B_{k+1} - \mathsf B_{k+2} + c_k \mathsf I, \qquad\text{for $N\ge k \ge 1$},\\ \mathsf G(x,y) &= \mathsf B_1 \mathsf F_1(x,y), \end{align} \f] where \f$\mathsf B_k\f$ are \f$2\times2\f$ matrices. The divided difference \f$\Delta[g](x,y)\f$ is given by the second element of \f$\mathsf G(x,y)\f$. The same basic recursion applies to the more general case, \f[ g(x) = \sum_{k=0}^N c_k \sin\bigl( (k+k_0)x + x_0\bigr). \f] For example, the sum area arising in the computation of geodesic areas, \f[ \sum_{k=0}^N c_k\cos\bigl((2k+1)\sigma) \f] is given by \f$x=2\sigma\f$, \f$x_0=\frac12\pi\f$, \f$k_0=\frac12\f$. Again we consider the matrix sum, \f[ \mathsf G(x,y) = \begin{bmatrix} (g(x) + g(y)) / 2\\ (g(x) - g(y)) / (x - y) \end{bmatrix} = \sum_{k=0}^N c_k \mathsf F_k(x,y), \f] where \f[ \mathsf F_k(x,y)= \begin{bmatrix} \cos\bigl( (k+k_0)d \bigr) \sin \bigl( (k+k_0)p + x_0 \bigr)\\ {\displaystyle\frac{\sin\bigl( (k+k_0)d \bigr)}d} \cos \bigl( (k+k_0)p + x_0 \bigr) \end{bmatrix}. \f] The recursion for \f$\mathsf B_k\f$ is identical to the previous case; in particular, the expression for \f$\mathsf A(x,y)\f$ remains unchanged. The result for the sum is \f[ \mathsf G(x,y) = (c_0\mathsf I - \mathsf B_2) \mathsf F_0(x,y) + \mathsf B_1 \mathsf F_1(x,y). \f] \section platecarreearea Plate carrée areas Occasionally, rhumb lines are mistakenly replaced by straight lines in a plate carrée projection (a projection where the axes are just the longitude and latitude). - The documentation for Google Earth incorrectly states that the edges of a polygon in Google Earth are lines of constant bearing (i.e., rhumb lines); in reality, they are plate carrée lines. - The documentation for GRASS's area_poly1.c confusingly states "This routine computes the area of a polygon on the ellipsoid. The sides of the polygon are rhumb lines and, in general, not geodesics. Each side is actually defined by a linear relationship between latitude and longitude, i.e., on a rectangular/equidistant cylindrical/Plate Carrée grid, the side would appear as a straight line." . Also the GeoJSon format (misguidedly) specifies that the line joining two points is a plate carrée line (Section 3.1.1). (It would have be preferable to apply this definition only to "ordinary" projections. Longitude/latitude pairs should be regarded not as the coordinates for a planar projection but as positions on the reference ellipsoid, with lines then defined as geodesic segments.) In any case, there may be some reason to compute the area of a polygon made up of plate carrée lines. The derivation closely follows that for rhumb lines given in \ref rhumbarea, but now with \f$\lambda\f$ linearly related to \f$\phi\f$ (instead of \f$\psi\f$), \f[ \begin{align} \lambda &= \lambda_1 + \frac{\phi - \phi_1}m,\\ m &= \frac{\phi_2 - \phi_1}{\lambda_2 - \lambda_1} = \frac{\phi_{12}}{\lambda_{12}}. \end{align} \f] The area between a plate carrée segment and the equator is then \f[ \begin{align} S_{12} &= \frac{b^2\lambda_{12}}{\phi_{12}} \int_{\phi_1}^{\phi_2} A(\phi)\,d\phi \\ &= \frac{c^2\lambda_{12}}{\phi_{12}} \int_{\phi_1}^{\phi_2} \sin\xi \,d\phi, \end{align} \f] where \f[ A(\phi) = \frac12 \biggl( \frac{\tanh^{-1}(e\sin\phi)}e +\frac{\sin\phi}{1 - e^2\sin^2\phi} \biggr), \f] \f$b\f$ is the polar semi-axis, \f$c\f$ is the authalic radius, and \f$\xi\f$ is the authalic latitude. In the approach taken in GRASS, \f$A(\phi)\f$ is expanded as a Taylor series in \f$e^2\f$; this as a particularly simple form when written in terms of powers of \f$\sin\phi\f$, \f[ A(\phi) = \sum_{l=0} \biggl(\frac{l+1}{2l+1}\sin^{2l+1}\phi\biggr) e^{2l}. \f] and the resulting expression for \f$S_{12}\f$ is expressed terms of powers of \f$\cos\phi\f$. A better approach is to expand \f$\sin\xi\f$ as a Taylor series in \f$n\f$ and to integrate this to give \f[ \begin{align} \sin\xi &= Q'(\phi) = -\sum_{l=0} (2l+1) Q_l \sin((2l+1)\phi),\\ Q(\phi) &= \sum_{l=0} Q_l \cos((2l+1)\phi), \\ S_{12} &= c^2\lambda_{12} \frac{Q(\phi_2) - Q(\phi_1)}{\phi_{12}}, \\ \end{align} \f] where \f$Q_l = O(n^l)\f$ is a series in \f$n\f$. Here is the series expansion accurate to 6th order: \verbatim Q[0]= - 1 + 2/3 * n + 22/45 * n^2 + 22/945 * n^3 - 274/2025 * n^4 - 33974/467775 * n^5 + 2578106/638512875 * n^6; Q[1]= + 2/9 * n - 1/27 * n^2 - 74/405 * n^3 - 506/8505 * n^4 + 3506/127575 * n^5 + 131242/4209975 * n^6; Q[2]= - 3/25 * n^2 + 0 * n^3 + 14/125 * n^4 + 22/525 * n^5 - 566/39375 * n^6; Q[3]= + 4/49 * n^3 + 1/147 * n^4 - 178/2205 * n^5 - 1474/46305 * n^6; Q[4]= - 5/81 * n^4 - 2/243 * n^5 + 46/729 * n^6; Q[5]= + 6/121 * n^5 + 1/121 * n^6; Q[6]= - 7/169 * n^6; \endverbatim The formulation used in GRASS differs in three respects: - The overall multiplicative factor is \f$b^2\f$ instead of \f$c^2\f$. - The expansion parameter is \f$e^2\f$ instead of \f$n\f$. - The series is expressed in terms of \f$\cos^{2l+1}\phi\f$ instead of \f$\cos((2l+1)\phi)\f$. . The first two choices increase the truncation error of the results. The last increases the roundoff error in the result. This series given here was generated by the Maxima code platecarreearea.mac. This code allows higher-order terms to be computed. The code also computes the expressions used by GRASS. Computing the length of a plate carrée line segment is more problematic. The result for a sphere already involves elliptic integrals. For example the length of the edge from \f$(\lambda, \phi) = (0, 0)\f$ to \f$(\gamma\, 90^\circ, 90^\circ)\f$ is \f[ a E(i\gamma), \f] where \f$a\f$ is the radius of the sphere, \f$E\f$ is the complete elliptic integral of the second kind, and \f$i = \sqrt{-1}\f$. It would be possible to generalize the result to an ellipsoid but the result will probably be fairly messy.
Back to \ref jacobi. Forward to \ref greatellipse. Up to \ref contents.
**********************************************************************/ /** \page greatellipse Great Ellipses
Back to \ref rhumb. Forward to \ref transversemercator. Up to \ref contents.
Great ellipses are sometimes proposed (Williams, 1996; Pallikaris & Latsas, 2009) as alternatives to geodesics for the purposes of navigation. This is predicated on the assumption that solving the geodesic problems is complex and costly. These assumptions are no longer true, and geodesics should normally be used in place of great ellipses. This is discussed in more detail in \ref gevsgeodesic. Solutions of the great ellipse problems implemented for MATLAB and Octave are provided by - gedoc: briefly describe the routines - gereckon: solve the direct great ellipse problem - gedistance: solve the inverse great ellipse problem . At this time, there is no C++ support in GeographicLib for great ellipses. References: - P. D. Thomas, Mathematical Models for Navigation Systems, TR-182 (U.S. Naval Oceanographic Office, 1965). - B. R. Bowring, The direct and inverse solutions for the great elliptic line on the reference ellipsoid, Bull. Geod. 58, 101--108 (1984). - M. A. Earle, A vector solution for navigation on a great ellipse, J. Navigation 53(3), 473--481 (2000). - M. A. Earle, Vector solutions for azimuth, J. Navigation 61(3), 537--545 (2008). - C. F. F. Karney, Algorithms for geodesics, J. Geodesy 87(1), 43--55 (2013); addenda: geod-addenda.html. - A. Pallikaris & G. Latsas, New algorithm for great elliptic sailing (GES), J. Navigation 62(3), 493--507 (2009). - A. Pallikaris, L. Tsoulos, & D. Paradissis, New meridian arc formulas for sailing calculations in navigational GIS, International Hydrographic Review, 24--34 (May 2009). - L. E. Sjöberg, Solutions to the direct and inverse navigation problems on the great ellipse, J. Geodetic Science 2(3), 200--205 (2012). - R. Williams, The Great Ellipse on the Surface of the Spheroid, J. Navigation 49(2), 229--234 (1996). - T. Vincenty, Direct and Inverse Solutions of Geodesics on the Ellipsoid with Application of Nested Equations, Survey Review 23(176), 88--93 (1975). - Wikipedia page, Great ellipse. Go to - \ref geformulation - \ref gearea - \ref gevsgeodesic \section geformulation Solution of great ellipse problems Adopt the usual notation for the ellipsoid: equatorial semi-axis \f$a\f$, polar semi-axis \f$b\f$, flattening \f$f = (a-b)/a\f$, eccentricity \f$e = \sqrt{f(2-f)}\f$, second eccentricity \f$e' = e/(1-f)\f$, and third flattening \f$n=(a-b)/(a+b)=f/(2-f)\f$. There are several ways in which an ellipsoid can be mapped into a sphere converting the great ellipse into a great circle. The simplest ones entail scaling the ellipsoid in the \f$\hat z\f$ direction, the direction of the axis of rotation, scaling the ellipsoid radially, or a combination of the two. One such combination (scaling by \f$a^2/b^2\f$ in the \f$\hat z\f$ direction, following by a radial scaling to the sphere) preserves the geographical latitude \f$\phi\f$. This enables a great ellipse to be plotted on a chart merely by determining way points on the corresponding great circle and transferring them directly on the chart. In this exercise the flattening of the ellipsoid can be ignored! Bowring (1984), Williams (1996), Earle (2000, 2008) and Pallikaris & Latsas (2009), scale the ellipsoid radially onto a sphere preserving the geocentric latitude \f$\theta\f$. More convenient than this is to scale the ellipsoid along \f$\hat z\f$ onto the sphere, as is done by Thomas (1965) and Sjöberg (2012), thus preserving the parametric latitude \f$\beta\f$. The advantage of this "parametric" mapping is that Bessel's rapidly converging series for meridian arc in terms of parametric latitude can be used (a possibility that is overlooked by Sjöberg). The full parametric mapping is: - The geographic latitude \f$\phi\f$ on the ellipsoid maps to the parametric latitude \f$\beta\f$ on the sphere, where \f[a\tan\beta = b\tan\phi.\f] - The longitude \f$\lambda\f$ is unchanged. - The azimuth \f$\alpha\f$ on the ellipsoid maps to an azimuth \f$\gamma\f$ on the sphere where \f[ \begin{align} \tan\alpha &= \frac{\tan\gamma}{\sqrt{1-e^2\cos^2\beta}}, \\ \tan\gamma &= \frac{\tan\alpha}{\sqrt{1+e'^2\cos^2\phi}}, \end{align} \f] and the quadrants of \f$\alpha\f$ and \f$\gamma\f$ are the same. - Positions on the great circle of radius \f$a\f$ are parametrized by arc length \f$\sigma\f$ measured from the northward crossing of the equator. The great ellipse has semi-axes \f$a\f$ and \f$b'=a\sqrt{1-e^2\cos^2\gamma_0}\f$, where \f$\gamma_0\f$ is the great-circle azimuth at the northward equator crossing, and \f$\sigma\f$ is the parametric angle on the ellipse. [In contrast, the ellipse giving distances on a geodesic has semi-axes \f$b\sqrt{1+e'^2\cos^2\alpha_0}\f$ and \f$b\f$.] . To determine the distance along the ellipse in terms of \f$\sigma\f$ and vice versa, the series for distance \f$s\f$ and for \f$\tau\f$ given in \ref geodseries can be used. The direct and inverse great ellipse problems are now simply solved by mapping the problem to the sphere, solving the resulting great circle problem, and mapping this back onto the ellipsoid. \section gearea The area under a great ellipse The area between the segment of a great ellipse and the equator can be found by very similar methods to those used for geodesic areas; see Danielsen (1989). The notation here is similar to that employed by Karney (2013). \f[ \begin{align} S_{12} &= S(\sigma_2) - S(\sigma_1) \\ S(\sigma) &= c^2\gamma + e^2 a^2 \cos\gamma_0 \sin\gamma_0 I_4(\sigma)\\ c^2 &= {\textstyle\frac12}\bigl(a^2 + b^2 (\tanh^{-1}e)/e\bigr) \end{align} \f] \f[ I_4(\sigma) = - \sqrt{1+e'^2}\int \frac{r(e'^2) - r(k^2\sin^2\sigma)}{e'^2 - k^2\sin^2\sigma} \frac{\sin\sigma}2 \,d\sigma \f] \f[ \begin{align} k &= e' \cos\gamma_0,\\ r(x) &= \sqrt{1+x} + (\sinh^{-1}\sqrt x)/\sqrt x. \end{align} \f] Expand in terms of the third flattening of the ellipsoid, \f$n\f$, and the third flattening of the great ellipse, \f$\epsilon=(a-b')/(a+b')\f$, by substituting \f[ \begin{align} e'&=\frac{2\sqrt n}{1-n},\\ k&=\frac{1+n}{1-n} \frac{2\sqrt{\epsilon}}{1+\epsilon}, \end{align} \f] to give \f[ I_4(\sigma) = \sum_{l = 0}^\infty G_{4l}\cos \bigl((2l+1)\sigma\bigr). \f] Compared to the area under a geodesic, we have - \f$\gamma\f$ and \f$\gamma_0\f$ instead of \f$\alpha\f$ and \f$\alpha_0\f$. In both cases, these are azimuths on the auxiliary sphere; however, for the geodesic, they are also the azimuths on the ellipsoid. - \f$r(x) = \bigl(1+t(x)\bigr)/\sqrt{1+x}\f$ instead of \f$t(x)\f$ with a balancing factor of \f$\sqrt{1+e'^2}\f$ appearing in front of the integral. These changes are because expressing \f$\sin\phi\,d\lambda\f$ in terms of \f$\sigma\f$ is a little more complicated with great ellipses. (Don't worry about the addition of \f$1\f$ to \f$t(x)\f$; that's immaterial.) - the factors involving \f$n\f$ in the expression for \f$k\f$ in terms of \f$\epsilon\f$. This is because \f$k\f$ is defined in terms of \f$e'\f$, whereas it is \f$e\cos\gamma_0\f$ that plays the role of the eccentricity for the great ellipse. Here is the series expansion accurate to 10th order, found by gearea.mac: \verbatim G4[0] = + (1/6 + 7/30 * n + 8/105 * n^2 + 4/315 * n^3 + 16/3465 * n^4 + 20/9009 * n^5 + 8/6435 * n^6 + 28/36465 * n^7 + 32/62985 * n^8 + 4/11305 * n^9) - (3/40 + 12/35 * n + 589/840 * n^2 + 1063/1155 * n^3 + 14743/15015 * n^4 + 14899/15015 * n^5 + 254207/255255 * n^6 + 691127/692835 * n^7 + 1614023/1616615 * n^8) * eps + (67/280 + 7081/5040 * n + 5519/1320 * n^2 + 6417449/720720 * n^3 + 708713/45045 * n^4 + 2700154/109395 * n^5 + 519037063/14549535 * n^6 + 78681626/1616615 * n^7) * eps^2 - (29597/40320 + 30013/5280 * n + 33759497/1441440 * n^2 + 100611307/1441440 * n^3 + 16639623457/98017920 * n^4 + 3789780779/10581480 * n^5 + 1027832503/1511640 * n^6) * eps^3 + (357407/147840 + 19833349/823680 * n + 61890679/480480 * n^2 + 97030756063/196035840 * n^3 + 2853930388817/1862340480 * n^4 + 15123282583393/3724680960 * n^5) * eps^4 - (13200233/1537536 + 306285589/2882880 * n + 26279482199/37340160 * n^2 + 3091446335399/931170240 * n^3 + 93089556575647/7449361920 * n^4) * eps^5 + (107042267/3294720 + 253176989449/522762240 * n + 57210830762263/14898723840 * n^2 + 641067300459403/29797447680 * n^3) * eps^6 - (51544067373/398295040 + 38586720036247/17027112960 * n + 104152290127363/4966241280 * n^2) * eps^7 + (369575321823/687964160 + 1721481081751393/158919720960 * n) * eps^8 - 10251814360817/4445306880 * eps^9; G4[1] = + (1/120 + 4/105 * n + 589/7560 * n^2 + 1063/10395 * n^3 + 14743/135135 * n^4 + 14899/135135 * n^5 + 254207/2297295 * n^6 + 691127/6235515 * n^7 + 1614023/14549535 * n^8) * eps - (53/1680 + 847/4320 * n + 102941/166320 * n^2 + 1991747/1441440 * n^3 + 226409/90090 * n^4 + 3065752/765765 * n^5 + 24256057/4157010 * n^6 + 349229428/43648605 * n^7) * eps^2 + (4633/40320 + 315851/332640 * n + 5948333/1441440 * n^2 + 11046565/864864 * n^3 + 9366910279/294053760 * n^4 + 23863367599/349188840 * n^5 + 45824943037/349188840 * n^6) * eps^3 - (8021/18480 + 39452953/8648640 * n + 3433618/135135 * n^2 + 29548772933/294053760 * n^3 + 44355142973/139675536 * n^4 + 4771229132843/5587021440 * n^5) * eps^4 + (2625577/1537536 + 5439457/247104 * n + 353552588953/2352430080 * n^2 + 405002114215/558702144 * n^3 + 61996934629789/22348085760 * n^4) * eps^5 - (91909777/13178880 + 2017395395921/18819440640 * n + 51831652526149/59594895360 * n^2 + 1773086701957889/357569372160 * n^3) * eps^6 + (35166639971/1194885120 + 26948019211109/51081338880 * n + 7934238355871/1596291840 * n^2) * eps^7 - (131854991623/1031946240 + 312710596037369/119189790720 * n) * eps^8 + 842282436291/1481768960 * eps^9; G4[2] = + (1/560 + 29/2016 * n + 1027/18480 * n^2 + 203633/1441440 * n^3 + 124051/450450 * n^4 + 1738138/3828825 * n^5 + 98011493/145495350 * n^6 + 4527382/4849845 * n^7) * eps^2 - (533/40320 + 14269/110880 * n + 908669/1441440 * n^2 + 15253627/7207200 * n^3 + 910103119/163363200 * n^4 + 2403810527/193993800 * n^5 + 746888717/30630600 * n^6) * eps^3 + (2669/36960 + 2443153/2882880 * n + 1024791/200200 * n^2 + 10517570057/490089600 * n^3 + 164668999127/2327925600 * n^4 + 1826633124599/9311702400 * n^5) * eps^4 - (5512967/15375360 + 28823749/5765760 * n + 31539382001/871270400 * n^2 + 1699098121381/9311702400 * n^3 + 287618085731/398361600 * n^4) * eps^5 + (22684703/13178880 + 25126873327/896163840 * n + 10124249914577/42567782400 * n^2 + 836412216748957/595948953600 * n^3) * eps^6 - (3259030001/398295040 + 2610375232847/17027112960 * n + 2121882247763/1418926080 * n^2) * eps^7 + (13387413913/343982080 + 939097138279/1135140864 * n) * eps^8 - 82722916855/444530688 * eps^9; G4[3] = + (5/8064 + 23/3168 * n + 1715/41184 * n^2 + 76061/480480 * n^3 + 812779/1782144 * n^4 + 9661921/8953560 * n^5 + 40072069/18106088 * n^6) * eps^3 - (409/59136 + 10211/109824 * n + 46381/73920 * n^2 + 124922951/43563520 * n^3 + 12524132449/1241560320 * n^4 + 30022391821/1022461440 * n^5) * eps^4 + (22397/439296 + 302399/384384 * n + 461624513/74680320 * n^2 + 1375058687/41385344 * n^3 + 4805085120841/34763688960 * n^4) * eps^5 - (14650421/46126080 + 17533571183/3136573440 * n + 1503945368767/29797447680 * n^2 + 43536234862451/139054755840 * n^3) * eps^6 + (5074867067/2788065280 + 479752611137/13243310080 * n + 1228808683449/3310827520 * n^2) * eps^7 - (12004715823/1203937280 + 17671119291563/79459860480 * n) * eps^8 + 118372499107/2222653440 * eps^9; G4[4] = + (7/25344 + 469/109824 * n + 13439/411840 * n^2 + 9282863/56010240 * n^3 + 37558503/59121920 * n^4 + 44204289461/22348085760 * n^5) * eps^4 - (5453/1317888 + 58753/823680 * n + 138158857/224040960 * n^2 + 191056103/53209728 * n^3 + 712704605341/44696171520 * n^4) * eps^5 + (28213/732160 + 331920271/448081920 * n + 2046013913/283785216 * n^2 + 11489035343/241274880 * n^3) * eps^6 - (346326947/1194885120 + 11716182499/1891901440 * n + 860494893431/12770334720 * n^2) * eps^7 + (750128501/386979840 + 425425087409/9287516160 * n) * eps^8 - 80510858479/6667960320 * eps^9; G4[5] = + (21/146432 + 23/8320 * n + 59859/2263040 * n^2 + 452691/2687360 * n^3 + 21458911/26557440 * n^4) * eps^5 - (3959/1464320 + 516077/9052160 * n + 51814927/85995520 * n^2 + 15444083489/3611811840 * n^3) * eps^6 + (1103391/36208640 + 120920041/171991040 * n + 18522863/2263040 * n^2) * eps^7 - (92526613/343982080 + 24477436759/3611811840 * n) * eps^8 + 1526273559/740884480 * eps^9; G4[6] = + (11/133120 + 1331/696320 * n + 145541/6615040 * n^2 + 46863487/277831680 * n^3) * eps^6 - (68079/36208640 + 621093/13230080 * n + 399883/680960 * n^2) * eps^7 + (658669/26460160 + 186416197/277831680 * n) * eps^8 - 748030679/2963537920 * eps^9; G4[7] = + (143/2785280 + 11011/7938048 * n + 972829/52093440 * n^2) * eps^7 - (434863/317521920 + 263678129/6667960320 * n) * eps^8 + 185257501/8890613760 * eps^9; G4[8] = + (715/21168128 + 27313/26148864 * n) * eps^8 - 1838551/1778122752 * eps^9; G4[9] = + 2431/104595456 * eps^9; \endverbatim \section gevsgeodesic Great ellipses vs geodesics Some papers advocating the use of great ellipses for navigation exhibit a prejudice against the use of geodesics. These excerpts from Pallikaris, Tsoulos, & Paradissis (2009) give the flavor - … it is required to adopt realistic accuracy standards in order not only to eliminate the significant errors of the spherical model but also to avoid the exaggerated and unrealistic requirements of sub meter accuracy. - Calculation of shortest sailings paths on the ellipsoid by a geodetic inverse method involve formulas that are much too complex. - Despite the fact that contemporary computers are fast enough to handle more complete geodetic formulas of sub meter accuracy, a basic principle for the design of navigational systems is the avoidance of unnecessary consumption of computing power. . This prejudice was probably due to the fact that the most well-known algorithms for geodesics, by Vincenty (1975), come with some "asterisks": - no derivation was given (although they follow in a straightforward fashion from classic 19th century methods); - the accuracy is "only" 0.5 mm or so, surely good enough for most applications, but still a reason for a user to worry and a spur to numerous studies "validating" the algorithms; - no indication is given for how to extend the series to improve the accuracy; - there was a belief in some quarters (erroneous!) that the Vincenty algorithms could not be used to compute waypoints; - the algorithm for the inverse problem fails to converge for some inputs. . These problems meant that users were reluctant to bundle the algorithms into a library and treat them as a part of the software infrastructure (much as you might regard the computation of \f$\sin x\f$ as a given). In particular, I regard the last issue, lack of convergence of the inverse solution, as fatal. Even though the problem only arises for nearly antipodal points, it means all users of the library must have some way to handle this problem. For these reasons, substitution of a great ellipse for the geodesic makes some sense. The solution of the great ellipse is, in principle, no more difficult than solving for the great circle and, for paths of less then 10000 km, the error in the distance is less than 13.5 m. Now (2014), however, the situation has reversed. The algorithms given by Karney (2013)—and used in GeographicLib since 2009—explicitly resolve the issues with Vincenty's algorithm. The geodesic problem is conveniently bundled into a library. Users can call this with an assurance of an accurate result much as they would when evaluating \f$\sin x\f$. On the other hand, great ellipses come with their own set of asterisks: - To the extent that they are regarded as approximations to geodesics, the errors need to be quantified, the limits of allowable use documented, etc. - The user is now left with decisions on when to trust the results and to find alternative solutions if necessary. - Even though the great ellipse is no more that 13.5 m longer than a 10000 km geodesic, the path of the great ellipse can deviate from the geodesic by as much as 8.3 km. This disqualifies great ellipses from use in congested air corridors where the strategic lateral offset procedure is in effect and in any situation which demands coordination in the routes of vessels. - Because geodesics obey the triangle inequality, while great ellipses do not, the solutions for realistic navigational problems, e.g., determining the time of closest approach of two vessels, are often simpler in terms of geodesics. To address some other of the objections in the quotes from Pallikaris et al. given above: - "exaggerated and unrealistic requirements of sub meter accuracy": The geodesic algorithms allow full double precision accuracy at essentially no cost. This is because Clenshaw summation allows additional terms to be added to the series without the need for addition trigonometric evaluations. Full accuracy is important to maintain because it allows the results to be used reliably in more complex problems (e.g., in the determination of maritime boundaries). - "unnecessary consumption of computing power": The solution of the inverse geodesic problem takes 2.3 μs; multiple points on a geodesic can be computed at a rate of one point per 0.4 μs. The actual power consumed in these calculations is minuscule compared to the power needed to drive the display of a navigational computer. - "formulas that are much too complex": There's no question that the solution of the geodesic problem is more complex than for great ellipses. However this complexity is only an issue when implementing the algorithms. For the end user, navigational software employing geodesics is less complex compared with that employing great ellipses. Here is what the user needs to know about the geodesic solution:
The shortest path is found.
And here is the corresponding documentation for great ellipses:
A path which closely approximates the shortest path is found. Provided that the distance is less than 10000 km, the error in distance is no more than 14 m and the deviation the route from that of the shortest path is no more than 9 km. These bounds apply to the WGS84 ellipsoid. The deviation of the path means that it should be used with caution when planning routes. In addition, great ellipses do not obey the triangle inequality; this disqualifies them from use in some applications.
Having all the geodesic functions bundled up into a reliable "black box" enables users to concentrate on how to solve problems using geodesics (instead of figuring out how to solve for the geodesics). A wide range of problems (intersection of paths, the path for an interception, the time of closest approach, median lines, tri-points, etc.) are all amenable to simple and fast solutions in terms of geodesics.
Back to \ref rhumb. Forward to \ref transversemercator. Up to \ref contents.
**********************************************************************/ /** \page transversemercator Transverse Mercator projection
Back to \ref greatellipse. Forward to \ref geocentric. Up to \ref contents.
TransverseMercator and TransverseMercatorExact provide accurate implementations of the transverse Mercator projection. The TransverseMercatorProj utility provides an interface to these classes. Go to - \ref testmerc - \ref tmseries - \ref tmfigures References: - L. Krüger, Konforme Abbildung des Erdellipsoids in der Ebene (Conformal mapping of the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912). - L. P. Lee, Conformal Projections Based on Elliptic Functions, (B. V. Gutsell, Toronto, 1976), 128pp., ISBN: 0919870163 (Also appeared as: Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13). Part V, pp. 67--101, Conformal Projections Based On Jacobian Elliptic Functions; borrow from archive.org. - C. F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475--485 (Aug. 2011); addenda: tm-addenda.html; preprint: arXiv:1002.1417; resource page: tm.html. . The algorithm for TransverseMercator is based on Krüger (1912); that for TransverseMercatorExact is based on Lee (1976). See tm-grid.kmz, for an illustration of the exact transverse Mercator grid in Google Earth. \section testmerc Test data for the transverse Mercator projection A test set for the transverse Mercator projection is available at - TMcoords.dat.gz - C. F. F. Karney, Test data for the transverse Mercator projection (2009),
DOI: 10.5281/zenodo.32470. . This is about 17 MB (compressed). This test set consists of a set of geographic coordinates together with the corresponding transverse Mercator coordinates. The WGS84 ellipsoid is used, with central meridian 0°, central scale factor 0.9996 (the UTM value), false easting = false northing = 0 m. Each line of the test set gives 6 space delimited numbers - latitude (degrees, exact) - longitude (degrees, exact — see below) - easting (meters, accurate to 0.1 pm) - northing (meters, accurate to 0.1 pm) - meridian convergence (degrees, accurate to 10−18 deg) - scale (accurate to 10−20) . The latitude and longitude are all multiples of 10−12 deg and should be regarded as exact, except that longitude = 82.63627282416406551 should be interpreted as exactly (1 − \e e) 90°. These results are computed using Lee's formulas with Maxima's bfloats and fpprec set to 80 (so the errors in the data are probably 1/2 of the values quoted above). The Maxima code, tm.mac and ellint.mac, was used to prepare this data set is included in the distribution; you will need to have Maxima installed to use this code. The comments at the top of tm.mac illustrate how to run it. The contents of the file are as follows: - 250000 entries randomly distributed in lat in [0°, 90°], lon in [0°, 90°]; - 1000 entries randomly distributed on lat in [0°, 90°], lon = 0°; - 1000 entries randomly distributed on lat = 0°, lon in [0°, 90°]; - 1000 entries randomly distributed on lat in [0°, 90°], lon = 90°; - 1000 entries close to lat = 90° with lon in [0°, 90°]; - 1000 entries close to lat = 0°, lon = 0° with lat ≥ 0°, lon ≥ 0°; - 1000 entries close to lat = 0°, lon = 90° with lat ≥ 0°, lon ≤ 90°; - 2000 entries close to lat = 0°, lon = (1 − \e e) 90° with lat ≥ 0°; - 25000 entries randomly distributed in lat in [−89°, 0°], lon in [(1 − \e e) 90°, 90°]; - 1000 entries randomly distributed on lat in [−89°, 0°], lon = 90°; - 1000 entries randomly distributed on lat in [−89°, 0°], lon = (1 − \e e) 90°; - 1000 entries close to lat = 0°, lon = 90° (lat < 0°, lon ≤ 90°); - 1000 entries close to lat = 0°, lon = (1 − \e e) 90° (lat < 0°, lon ≤ (1 − \e e) 90°); . (a total of 287000 entries). The entries for lat < 0° and lon in [(1 − \e e) 90°, 90°] use the "extended" domain for the transverse Mercator projection explained in Sec. 5 of Karney (2011). The first 258000 entries have lat ≥ 0° and are suitable for testing implementations following the standard convention. \section tmseries Series approximation for transverse Mercator Krüger (1912) gives a 4th-order approximation to the transverse Mercator projection. This is accurate to about 200 nm (200 nanometers) within the UTM domain. Here we present the series extended to 10th order. By default, TransverseMercator uses the 6th-order approximation. The preprocessor macro GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be used to select an order from 4 thru 8. The series expanded to order n30 are given in tmseries30.html. In the formulas below ^ indicates exponentiation (n^3 = n*n*n) and / indicates real division (3/5 = 0.6). The equations need to be converted to Horner form, but are here left in expanded form so that they can be easily truncated to lower order in \e n. Some of the integers here are not representable as 32-bit integers and will need to be included as 64-bit integers. \e A in Krüger, p. 12, eq. (5) \verbatim A = a/(n + 1) * (1 + 1/4 * n^2 + 1/64 * n^4 + 1/256 * n^6 + 25/16384 * n^8 + 49/65536 * n^10); \endverbatim γ in Krüger, p. 21, eq. (41) \verbatim alpha[1] = 1/2 * n - 2/3 * n^2 + 5/16 * n^3 + 41/180 * n^4 - 127/288 * n^5 + 7891/37800 * n^6 + 72161/387072 * n^7 - 18975107/50803200 * n^8 + 60193001/290304000 * n^9 + 134592031/1026432000 * n^10; alpha[2] = 13/48 * n^2 - 3/5 * n^3 + 557/1440 * n^4 + 281/630 * n^5 - 1983433/1935360 * n^6 + 13769/28800 * n^7 + 148003883/174182400 * n^8 - 705286231/465696000 * n^9 + 1703267974087/3218890752000 * n^10; alpha[3] = 61/240 * n^3 - 103/140 * n^4 + 15061/26880 * n^5 + 167603/181440 * n^6 - 67102379/29030400 * n^7 + 79682431/79833600 * n^8 + 6304945039/2128896000 * n^9 - 6601904925257/1307674368000 * n^10; alpha[4] = 49561/161280 * n^4 - 179/168 * n^5 + 6601661/7257600 * n^6 + 97445/49896 * n^7 - 40176129013/7664025600 * n^8 + 138471097/66528000 * n^9 + 48087451385201/5230697472000 * n^10; alpha[5] = 34729/80640 * n^5 - 3418889/1995840 * n^6 + 14644087/9123840 * n^7 + 2605413599/622702080 * n^8 - 31015475399/2583060480 * n^9 + 5820486440369/1307674368000 * n^10; alpha[6] = 212378941/319334400 * n^6 - 30705481/10378368 * n^7 + 175214326799/58118860800 * n^8 + 870492877/96096000 * n^9 - 1328004581729009/47823519744000 * n^10; alpha[7] = 1522256789/1383782400 * n^7 - 16759934899/3113510400 * n^8 + 1315149374443/221405184000 * n^9 + 71809987837451/3629463552000 * n^10; alpha[8] = 1424729850961/743921418240 * n^8 - 256783708069/25204608000 * n^9 + 2468749292989891/203249958912000 * n^10; alpha[9] = 21091646195357/6080126976000 * n^9 - 67196182138355857/3379030566912000 * n^10; alpha[10]= 77911515623232821/12014330904576000 * n^10; \endverbatim β in Krüger, p. 18, eq. (26*) \verbatim beta[1] = 1/2 * n - 2/3 * n^2 + 37/96 * n^3 - 1/360 * n^4 - 81/512 * n^5 + 96199/604800 * n^6 - 5406467/38707200 * n^7 + 7944359/67737600 * n^8 - 7378753979/97542144000 * n^9 + 25123531261/804722688000 * n^10; beta[2] = 1/48 * n^2 + 1/15 * n^3 - 437/1440 * n^4 + 46/105 * n^5 - 1118711/3870720 * n^6 + 51841/1209600 * n^7 + 24749483/348364800 * n^8 - 115295683/1397088000 * n^9 + 5487737251099/51502252032000 * n^10; beta[3] = 17/480 * n^3 - 37/840 * n^4 - 209/4480 * n^5 + 5569/90720 * n^6 + 9261899/58060800 * n^7 - 6457463/17740800 * n^8 + 2473691167/9289728000 * n^9 - 852549456029/20922789888000 * n^10; beta[4] = 4397/161280 * n^4 - 11/504 * n^5 - 830251/7257600 * n^6 + 466511/2494800 * n^7 + 324154477/7664025600 * n^8 - 937932223/3891888000 * n^9 - 89112264211/5230697472000 * n^10; beta[5] = 4583/161280 * n^5 - 108847/3991680 * n^6 - 8005831/63866880 * n^7 + 22894433/124540416 * n^8 + 112731569449/557941063680 * n^9 - 5391039814733/10461394944000 * n^10; beta[6] = 20648693/638668800 * n^6 - 16363163/518918400 * n^7 - 2204645983/12915302400 * n^8 + 4543317553/18162144000 * n^9 + 54894890298749/167382319104000 * n^10; beta[7] = 219941297/5535129600 * n^7 - 497323811/12454041600 * n^8 - 79431132943/332107776000 * n^9 + 4346429528407/12703122432000 * n^10; beta[8] = 191773887257/3719607091200 * n^8 - 17822319343/336825216000 * n^9 - 497155444501631/1422749712384000 * n^10; beta[9] = 11025641854267/158083301376000 * n^9 - 492293158444691/6758061133824000 * n^10; beta[10]= 7028504530429621/72085985427456000 * n^10; \endverbatim The high-order expansions for α and β were produced by the Maxima program tmseries.mac (included in the distribution). To run, start Maxima and enter \verbatim load("tmseries.mac")$ \endverbatim Further instructions are included at the top of the file. \section tmfigures Figures from paper on transverse Mercator projection This section gives color versions of the figures in - C. F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475--485 (Aug. 2011); addenda: tm-addenda.html; preprint: arXiv:1002.1417; resource page: tm.html. \b NOTE: The numbering of the figures matches that in the paper cited above. The figures in this section are relatively small in order to allow them to be displayed quickly. Vector versions of these figures are available in tm-figs.pdf. This allows you to magnify the figures to show the details more clearly. \image html gauss-schreiber-graticule-a.png "Fig. 1(a)" Fig. 1(a): The graticule for the spherical transverse Mercator projection. The equator lies on \e y = 0. Compare this with Lee, Fig. 1 (right), which shows the graticule for half a sphere, but note that in his notation \e x and \e y have switched meanings. The graticule for the ellipsoid differs from that for a sphere only in that the latitude lines have shifted slightly. (The conformal transformation from an ellipsoid to a sphere merely relabels the lines of latitude.) This projection places the point latitude = 0°, longitude = 90° at infinity. \image html gauss-krueger-graticule-a.png "Fig. 1(b)" Fig. 1(b): The graticule for the Gauss-Krüger transverse Mercator projection. The equator lies on \e y = 0 for longitude < 81°; beyond this, it arcs up to meet \e y = 1. Compare this with Lee, Fig. 45 (upper), which shows the graticule for the International Ellipsoid. Lee, Fig. 46, shows the graticule for the entire ellipsoid. This projection (like the Thompson projection) projects the ellipsoid to a finite area. \image html thompson-tm-graticule-a.png "Fig. 1(c)" Fig. 1(c): The graticule for the Thompson transverse Mercator projection. The equator lies on \e y = 0 for longitude < 81°; at longitude = 81°, it turns by 120° and heads for \e y = 1. Compare this with Lee, Fig. 43, which shows the graticule for the International Ellipsoid. Lee, Fig. 44, shows the graticule for the entire ellipsoid. This projection (like the Gauss-Krüger projection) projects the ellipsoid to a finite area. \image html gauss-krueger-error.png "Fig. 2" Fig. 2: The truncation error for the series for the Gauss-Krüger transverse Mercator projection. The blue curves show the truncation error for the order of the series \e J = 2 (top) thru \e J = 12 (bottom). The red curves show the combined truncation and round-off errors for - float and \e J = 4 (top) - double and \e J = 6 (middle) - long double and \e J = 8 (bottom) \image html gauss-krueger-graticule.png "Fig. 3(a)" Fig. 3(a): The graticule for the extended domain. The blue lines show latitude and longitude at multiples of 10°. The green lines show 1° intervals for longitude in [80°, 90°] and latitude in [−5°, 10°]. \image html gauss-krueger-convergence-scale.png "Fig. 3(b)" Fig. 3(b): The convergence and scale for the Gauss-Krüger transverse Mercator projection in the extended domain. The blue lines emanating from the top left corner (the north pole) are lines of constant convergence. Convergence = 0° is given by the dog-legged line joining the points (0,1), (0,0), (1.71,0), (1.71,−∞). Convergence = 90° is given by the line y = 1. The other lines show multiples of 10° between 0° and 90°. The other blue, the green and the black lines show scale = 1 thru 2 at intervals of 0.1, 2 thru 15 at intervals of 1, and 15 thru 35 at intervals of 5. Multiples of 5 are shown in black, multiples of 1 are shown in blue, and the rest are shown in green. Scale = 1 is given by the line segment (0,0) to (0,1). The red line shows the equator between lon = 81° and 90°. The scale and convergence at the branch point are 1/\e e = 10 and 0°, respectively. \image html thompson-tm-graticule.png "Fig. 3(c)" Fig. 3(c): The graticule for the Thompson transverse Mercator projection for the extended domain. The range of the projection is the rectangular region shown - 0 ≤ \e u ≤ K(e2), 0 ≤ \e v ≤ K(1 − e2) . The coloring of the lines is the same as Fig. 3(a), except that latitude lines extended down to −10° and a red line has been added showing the line \e y = 0 for \e x > 1.71 in the Gauss-Krüger projection (Fig. 3(a)). The extended Thompson projection figure has reflection symmetry on all the four sides of Fig. 3(c).
Back to \ref greatellipse. Forward to \ref geocentric. Up to \ref contents.
**********************************************************************/ /** \page geocentric Geocentric coordinates
Back to \ref transversemercator. Forward to \ref auxlat. Up to \ref contents.
The implementation of Geocentric::Reverse is adapted from - H. Vermeille, Direct transformation from geocentric coordinates to geodetic coordinates, J. Geodesy 76, 451--454 (2002). This provides a closed-form solution but can't directly be applied close to the center of the earth. Several changes have been made to remove this restriction and to improve the numerical accuracy. Now the method is accurate for all inputs (even if \e h is infinite). The changes are described in Appendix B of - C. F. F. Karney, Geodesics on an ellipsoid of revolution, Feb. 2011; preprint arxiv:1102.1215v1. . Vermeille similarly updated his method in - H. Vermeille, An analytical method to transform geocentric into geodetic coordinates, J. Geodesy 85, 105--117 (2011). The problems encountered near the center of the ellipsoid are: - There's a potential division by zero in the definition of \e s. The equations are easily reformulated to avoid this problem. - t3 may be negative. This is OK; we just take the real root. - The solution for \e t may be complex. However this leads to 3 real roots for u/\e r. It's then just a matter of picking the one that computes the geodetic result which minimizes |h| and which avoids large round-off errors. - Some of the equations result in a large loss of accuracy due to subtracting nearly equal quantities. E.g., \e k = sqrt(\e u + \e v + w2) − \e w is inaccurate if \e u + \e v is small; we can fix this by writing \e k = (\e u + \e v)/(sqrt(\e u + \e v + w2) + \e w). The error is computed as follows. Write a version of Geocentric::WGS84.Forward which uses long doubles (including using long doubles for the WGS84 parameters). Generate random (long double) geodetic coordinates (\e lat0, \e lon0, \e h0) and use the "long double" WGS84.Forward to obtain the corresponding (long double) geocentric coordinates (\e x0, \e y0, \e z0). [We restrict \e h0 so that \e h0 ≥ − \e a (1 − e2) / sqrt(1 − e2 sin2\e lat0), which ensures that (\e lat0, \e lon0, \e h0) is the principal geodetic inverse of (\e x0, \e y0, \e z0).] Because the forward calculation is numerically stable and because long doubles (on Linux systems using g++) provide 11 bits additional accuracy (about 3.3 decimal digits), we regard this set of test data as exact. Apply the double version of WGS84.Reverse to (\e x0, \e y0, \e z0) to compute the approximate geodetic coordinates (\e lat1, \e lon1, \e h1). Convert (\e lat1 − \e lat0, \e lon1 − \e lon0) to a distance, \e ds, on the surface of the ellipsoid and define \e err = hypot(\e ds, \e h1 − \e h0). For |h0| < 5000 km, we have \e err < 7 nm (7 nanometers). This methodology is not very useful very far from the globe, because the absolute errors in the approximate geodetic height become large, or within 50 km of the center of the earth, because of errors in computing the approximate geodetic latitude. To illustrate the second issue, the maximum value of \e err for \e h0 < 0 is about 80 mm. The error is maximum close to the circle given by geocentric coordinates satisfying hypot(\e x, \e y) = \e a e2 (= 42.7 km), \e z = 0. (This is the center of meridional curvature for \e lat = 0.) The geodetic latitude for these points is \e lat = 0. However, if we move 1 nm towards the center of the earth, the geodetic latitude becomes 0.04", a distance of 1.4 m from the equator. If, instead, we move 1 nm up, the geodetic latitude becomes 7.45", a distance of 229 m from the equator. In light of this, Reverse does quite well in this vicinity. To obtain a practical measure of the error for the general case we define - errh = |\e h1 − h0| / max(1, \e h0 / \e a) - for \e h0 > 0, errout = \e ds - for \e h0 < 0, apply the long double version of WGS84.Forward to (\e lat1, \e lon1, \e h1) to give (\e x1, \e y1, \e z1) and compute errin = hypot(\e x1 − \e x0, \e y1 − \e y0, \e z1 − \e z0). . We then find errh < 8 nm, errout < 4 nm, and errin < 7 nm (1 nm = 1 nanometer). The testing has been confined to the WGS84 ellipsoid. The method will work for all ellipsoids used in terrestrial geodesy. However, the central region, which leads to multiple real roots for the cubic equation in Reverse, pokes outside the ellipsoid (at the poles) for ellipsoids with \e e > 1/sqrt(2); Reverse has not been analyzed for this case. Similarly ellipsoids which are very nearly spherical may yield inaccurate results due to underflow; in the other hand, the case of the sphere, \e f = 0, is treated specially and gives accurate results. Other comparable methods are K. M. Borkowski, Transformation of geocentric to geodetic coordinates without approximations, Astrophys. Space Sci. 139, 1--4 (1987) ( erratum) and T. Fukushima, Fast transform from geocentric to geodetic coordinates, J. Geodesy 73, 603--610 (1999). However the choice of independent variables in these methods leads to a loss of accuracy for points near the equatorial plane.
Back to \ref transversemercator. Forward to \ref auxlat. Up to \ref contents.
**********************************************************************/ /** \page auxlat Auxiliary latitudes
Back to \ref geocentric. Forward to \ref highprec. Up to \ref contents.
This material is now written up as - C. F. F. Karney,
On auxiliary latitudes,
Survey Review 56(395), 165--180 (2024).
DOI: 10.1080/00396265.2023.2217604
preprint: arxiv:2212.05818 . The implementation of the methods described in this paper is available as the classes AuxAngle, AuxLatitude, and DAuxLatitude. The series expansions described in the paper are available in - C. F. F. Karney,
Series expansions for converting between auxiliary latitudes,
December 2022.
doi:10.5281/zenodo.7382666 . Go to - \ref auxlatformula - \ref auxlattable - \ref auxlaterror Six latitudes are used by GeographicLib: - φ, the (geographic) latitude; - β, the parametric latitude; - θ, the geocentric latitude; - μ, the rectifying latitude; - χ, the conformal latitude; - ξ, the authalic latitude. . The last five of these are called auxiliary latitudes. These quantities are all defined in the Wikipedia article on latitudes. The Ellipsoid class contains methods for converting all of these and the geographic latitude. In addition there's the isometric latitude, ψ, defined by ψ = gd−1χ = sinh−1 tanχ and χ = gdψ = tan−1 sinhψ. This is not an angle-like variable (for example, it diverges at the poles) and so we don't treat it further here. However conversions between ψ and any of the auxiliary latitudes is easily accomplished via an intermediate conversion to χ. The relations between φ, β, and θ are all simple elementary functions. The latitudes χ and ξ can be expressed as elementary functions of φ; however, these functions can only be inverted iteratively. The rectifying latitude μ as a function of φ (or β) involves the incomplete elliptic integral of the second kind (which is not an elementary function) and this needs to be inverted iteratively. The Ellipsoid class evaluates all the auxiliary latitudes (and the corresponding inverse relations) in terms of their basic definitions. An alternative method of evaluating these auxiliary latitudes is in terms of trigonometric series. This offers some advantages: - these series give a uniform way of expressing any latitude in terms of any other latitude; - the evaluation may be faster, particularly if Clenshaw summation is used; - provided that the flattening is sufficiently small, the result may be more accurate (because the round-off errors are smaller). Here we give the complete matrix of relations between all six latitudes; there are 30 (= 6 × 5) such relations. These expansions complement the work of - O. S. Adams, Latitude developments connected with geodesy and cartography, Spec. Pub. 67 (US Coast and Geodetic Survey, 1921). - P. Osborne, The Mercator Projections (2013), Chap. 5. - S. Orihuela, Funciones de Latitud (2013). . Here, the expansions are in terms of the third flattening n = (a − b)/(a + b). This choice of expansion parameter results in expansions in which half the coefficients vanish for all relations between φ, β, θ, and μ. In addition, the expansions converge for |n| < 1 or b/a ∈ (0, ∞). These expansions were obtained with the the maxima code, auxlat.mac. Adams (1921) uses the eccentricity squared e2 as the expansion parameter, but the resulting series only converge for |e2| < 1 or b/a ∈ (0, √2). In addition, it is shown in \ref auxlaterror, that the errors when the series are truncated are much worse than for the corresponding series in \e n. \b NOTE: The assertions about convergence above are too optimistic. Some of the series do indeed converge for |n| < 1. However others have a smaller radius of convergence. More on this later… \section auxlatformula Series approximations for conversions Here are the relations between φ, β, θ, and μ carried out to 4th order in n: \f[ \begin{align} \beta-\phi&=\textstyle{} -n\sin 2\phi +\frac{1}{2}n^{2}\sin 4\phi -\frac{1}{3}n^{3}\sin 6\phi +\frac{1}{4}n^{4}\sin 8\phi -\ldots\\ \phi-\beta&=\textstyle{} +n\sin 2\beta +\frac{1}{2}n^{2}\sin 4\beta +\frac{1}{3}n^{3}\sin 6\beta +\frac{1}{4}n^{4}\sin 8\beta +\ldots\\ \theta-\phi&=\textstyle{} -\bigl(2n-2n^{3}\bigr)\sin 2\phi +\bigl(2n^{2}-4n^{4}\bigr)\sin 4\phi -\frac{8}{3}n^{3}\sin 6\phi +4n^{4}\sin 8\phi -\ldots\\ \phi-\theta&=\textstyle{} +\bigl(2n-2n^{3}\bigr)\sin 2\theta +\bigl(2n^{2}-4n^{4}\bigr)\sin 4\theta +\frac{8}{3}n^{3}\sin 6\theta +4n^{4}\sin 8\theta +\ldots\\ \theta-\beta&=\textstyle{} -n\sin 2\beta +\frac{1}{2}n^{2}\sin 4\beta -\frac{1}{3}n^{3}\sin 6\beta +\frac{1}{4}n^{4}\sin 8\beta -\ldots\\ \beta-\theta&=\textstyle{} +n\sin 2\theta +\frac{1}{2}n^{2}\sin 4\theta +\frac{1}{3}n^{3}\sin 6\theta +\frac{1}{4}n^{4}\sin 8\theta +\ldots\\ \mu-\phi&=\textstyle{} -\bigl(\frac{3}{2}n-\frac{9}{16}n^{3}\bigr)\sin 2\phi +\bigl(\frac{15}{16}n^{2}-\frac{15}{32}n^{4}\bigr)\sin 4\phi -\frac{35}{48}n^{3}\sin 6\phi +\frac{315}{512}n^{4}\sin 8\phi -\ldots\\ \phi-\mu&=\textstyle{} +\bigl(\frac{3}{2}n-\frac{27}{32}n^{3}\bigr)\sin 2\mu +\bigl(\frac{21}{16}n^{2}-\frac{55}{32}n^{4}\bigr)\sin 4\mu +\frac{151}{96}n^{3}\sin 6\mu +\frac{1097}{512}n^{4}\sin 8\mu +\ldots\\ \mu-\beta&=\textstyle{} -\bigl(\frac{1}{2}n-\frac{3}{16}n^{3}\bigr)\sin 2\beta -\bigl(\frac{1}{16}n^{2}-\frac{1}{32}n^{4}\bigr)\sin 4\beta -\frac{1}{48}n^{3}\sin 6\beta -\frac{5}{512}n^{4}\sin 8\beta -\ldots\\ \beta-\mu&=\textstyle{} +\bigl(\frac{1}{2}n-\frac{9}{32}n^{3}\bigr)\sin 2\mu +\bigl(\frac{5}{16}n^{2}-\frac{37}{96}n^{4}\bigr)\sin 4\mu +\frac{29}{96}n^{3}\sin 6\mu +\frac{539}{1536}n^{4}\sin 8\mu +\ldots\\ \mu-\theta&=\textstyle{} +\bigl(\frac{1}{2}n+\frac{13}{16}n^{3}\bigr)\sin 2\theta -\bigl(\frac{1}{16}n^{2}-\frac{33}{32}n^{4}\bigr)\sin 4\theta -\frac{5}{16}n^{3}\sin 6\theta -\frac{261}{512}n^{4}\sin 8\theta -\ldots\\ \theta-\mu&=\textstyle{} -\bigl(\frac{1}{2}n+\frac{23}{32}n^{3}\bigr)\sin 2\mu +\bigl(\frac{5}{16}n^{2}-\frac{5}{96}n^{4}\bigr)\sin 4\mu +\frac{1}{32}n^{3}\sin 6\mu +\frac{283}{1536}n^{4}\sin 8\mu +\ldots\\ \end{align} \f] Here are the remaining relations (including χ and ξ) carried out to 3rd order in n: \f[ \begin{align} \chi-\phi&=\textstyle{} -\bigl(2n-\frac{2}{3}n^{2}-\frac{4}{3}n^{3}\bigr)\sin 2\phi +\bigl(\frac{5}{3}n^{2}-\frac{16}{15}n^{3}\bigr)\sin 4\phi -\frac{26}{15}n^{3}\sin 6\phi +\ldots\\ \phi-\chi&=\textstyle{} +\bigl(2n-\frac{2}{3}n^{2}-2n^{3}\bigr)\sin 2\chi +\bigl(\frac{7}{3}n^{2}-\frac{8}{5}n^{3}\bigr)\sin 4\chi +\frac{56}{15}n^{3}\sin 6\chi +\ldots\\ \chi-\beta&=\textstyle{} -\bigl(n-\frac{2}{3}n^{2}\bigr)\sin 2\beta +\bigl(\frac{1}{6}n^{2}-\frac{2}{5}n^{3}\bigr)\sin 4\beta -\frac{1}{15}n^{3}\sin 6\beta +\ldots\\ \beta-\chi&=\textstyle{} +\bigl(n-\frac{2}{3}n^{2}-\frac{1}{3}n^{3}\bigr)\sin 2\chi +\bigl(\frac{5}{6}n^{2}-\frac{14}{15}n^{3}\bigr)\sin 4\chi +\frac{16}{15}n^{3}\sin 6\chi +\ldots\\ \chi-\theta&=\textstyle{} +\bigl(\frac{2}{3}n^{2}+\frac{2}{3}n^{3}\bigr)\sin 2\theta -\bigl(\frac{1}{3}n^{2}-\frac{4}{15}n^{3}\bigr)\sin 4\theta -\frac{2}{5}n^{3}\sin 6\theta -\ldots\\ \theta-\chi&=\textstyle{} -\bigl(\frac{2}{3}n^{2}+\frac{2}{3}n^{3}\bigr)\sin 2\chi +\bigl(\frac{1}{3}n^{2}-\frac{4}{15}n^{3}\bigr)\sin 4\chi +\frac{2}{5}n^{3}\sin 6\chi +\ldots\\ \chi-\mu&=\textstyle{} -\bigl(\frac{1}{2}n-\frac{2}{3}n^{2}+\frac{37}{96}n^{3}\bigr)\sin 2\mu -\bigl(\frac{1}{48}n^{2}+\frac{1}{15}n^{3}\bigr)\sin 4\mu -\frac{17}{480}n^{3}\sin 6\mu -\ldots\\ \mu-\chi&=\textstyle{} +\bigl(\frac{1}{2}n-\frac{2}{3}n^{2}+\frac{5}{16}n^{3}\bigr)\sin 2\chi +\bigl(\frac{13}{48}n^{2}-\frac{3}{5}n^{3}\bigr)\sin 4\chi +\frac{61}{240}n^{3}\sin 6\chi +\ldots\\ \xi-\phi&=\textstyle{} -\bigl(\frac{4}{3}n+\frac{4}{45}n^{2}-\frac{88}{315}n^{3}\bigr)\sin 2\phi +\bigl(\frac{34}{45}n^{2}+\frac{8}{105}n^{3}\bigr)\sin 4\phi -\frac{1532}{2835}n^{3}\sin 6\phi +\ldots\\ \phi-\xi&=\textstyle{} +\bigl(\frac{4}{3}n+\frac{4}{45}n^{2}-\frac{16}{35}n^{3}\bigr)\sin 2\xi +\bigl(\frac{46}{45}n^{2}+\frac{152}{945}n^{3}\bigr)\sin 4\xi +\frac{3044}{2835}n^{3}\sin 6\xi +\ldots\\ \xi-\beta&=\textstyle{} -\bigl(\frac{1}{3}n+\frac{4}{45}n^{2}-\frac{32}{315}n^{3}\bigr)\sin 2\beta -\bigl(\frac{7}{90}n^{2}+\frac{4}{315}n^{3}\bigr)\sin 4\beta -\frac{83}{2835}n^{3}\sin 6\beta -\ldots\\ \beta-\xi&=\textstyle{} +\bigl(\frac{1}{3}n+\frac{4}{45}n^{2}-\frac{46}{315}n^{3}\bigr)\sin 2\xi +\bigl(\frac{17}{90}n^{2}+\frac{68}{945}n^{3}\bigr)\sin 4\xi +\frac{461}{2835}n^{3}\sin 6\xi +\ldots\\ \xi-\theta&=\textstyle{} +\bigl(\frac{2}{3}n-\frac{4}{45}n^{2}+\frac{62}{105}n^{3}\bigr)\sin 2\theta +\bigl(\frac{4}{45}n^{2}-\frac{32}{315}n^{3}\bigr)\sin 4\theta -\frac{524}{2835}n^{3}\sin 6\theta -\ldots\\ \theta-\xi&=\textstyle{} -\bigl(\frac{2}{3}n-\frac{4}{45}n^{2}+\frac{158}{315}n^{3}\bigr)\sin 2\xi +\bigl(\frac{16}{45}n^{2}-\frac{16}{945}n^{3}\bigr)\sin 4\xi -\frac{232}{2835}n^{3}\sin 6\xi +\ldots\\ \xi-\mu&=\textstyle{} +\bigl(\frac{1}{6}n-\frac{4}{45}n^{2}-\frac{817}{10080}n^{3}\bigr)\sin 2\mu +\bigl(\frac{49}{720}n^{2}-\frac{2}{35}n^{3}\bigr)\sin 4\mu +\frac{4463}{90720}n^{3}\sin 6\mu +\ldots\\ \mu-\xi&=\textstyle{} -\bigl(\frac{1}{6}n-\frac{4}{45}n^{2}-\frac{121}{1680}n^{3}\bigr)\sin 2\xi -\bigl(\frac{29}{720}n^{2}-\frac{26}{945}n^{3}\bigr)\sin 4\xi -\frac{1003}{45360}n^{3}\sin 6\xi -\ldots\\ \xi-\chi&=\textstyle{} +\bigl(\frac{2}{3}n-\frac{34}{45}n^{2}+\frac{46}{315}n^{3}\bigr)\sin 2\chi +\bigl(\frac{19}{45}n^{2}-\frac{256}{315}n^{3}\bigr)\sin 4\chi +\frac{248}{567}n^{3}\sin 6\chi +\ldots\\ \chi-\xi&=\textstyle{} -\bigl(\frac{2}{3}n-\frac{34}{45}n^{2}+\frac{88}{315}n^{3}\bigr)\sin 2\xi +\bigl(\frac{1}{45}n^{2}-\frac{184}{945}n^{3}\bigr)\sin 4\xi -\frac{106}{2835}n^{3}\sin 6\xi -\ldots\\ \end{align} \f] \section auxlattable Series approximations in tabular form Finally, this is a listing of all the coefficients for the expansions carried out to 8th order in n. Here's how to interpret this data: the 5th line for φ − θ is [32/5, 0, -32, 0]; this means that the coefficient of sin(10θ) is [(32/5)n5 − 32n7 + O(n9)].

β − φ:
   [-1, 0, 0, 0, 0, 0, 0, 0]
   [1/2, 0, 0, 0, 0, 0, 0]
   [-1/3, 0, 0, 0, 0, 0]
   [1/4, 0, 0, 0, 0]
   [-1/5, 0, 0, 0]
   [1/6, 0, 0]
   [-1/7, 0]
   [1/8]

φ − β:
   [1, 0, 0, 0, 0, 0, 0, 0]
   [1/2, 0, 0, 0, 0, 0, 0]
   [1/3, 0, 0, 0, 0, 0]
   [1/4, 0, 0, 0, 0]
   [1/5, 0, 0, 0]
   [1/6, 0, 0]
   [1/7, 0]
   [1/8]

θ − φ:
   [-2, 0, 2, 0, -2, 0, 2, 0]
   [2, 0, -4, 0, 6, 0, -8]
   [-8/3, 0, 8, 0, -16, 0]
   [4, 0, -16, 0, 40]
   [-32/5, 0, 32, 0]
   [32/3, 0, -64]
   [-128/7, 0]
   [32]

φ − θ:
   [2, 0, -2, 0, 2, 0, -2, 0]
   [2, 0, -4, 0, 6, 0, -8]
   [8/3, 0, -8, 0, 16, 0]
   [4, 0, -16, 0, 40]
   [32/5, 0, -32, 0]
   [32/3, 0, -64]
   [128/7, 0]
   [32]

θ − β:
   [-1, 0, 0, 0, 0, 0, 0, 0]
   [1/2, 0, 0, 0, 0, 0, 0]
   [-1/3, 0, 0, 0, 0, 0]
   [1/4, 0, 0, 0, 0]
   [-1/5, 0, 0, 0]
   [1/6, 0, 0]
   [-1/7, 0]
   [1/8]

β − θ:
   [1, 0, 0, 0, 0, 0, 0, 0]
   [1/2, 0, 0, 0, 0, 0, 0]
   [1/3, 0, 0, 0, 0, 0]
   [1/4, 0, 0, 0, 0]
   [1/5, 0, 0, 0]
   [1/6, 0, 0]
   [1/7, 0]
   [1/8]

μ − φ:
   [-3/2, 0, 9/16, 0, -3/32, 0, 57/2048, 0]
   [15/16, 0, -15/32, 0, 135/2048, 0, -105/4096]
   [-35/48, 0, 105/256, 0, -105/2048, 0]
   [315/512, 0, -189/512, 0, 693/16384]
   [-693/1280, 0, 693/2048, 0]
   [1001/2048, 0, -1287/4096]
   [-6435/14336, 0]
   [109395/262144]

φ − μ:
   [3/2, 0, -27/32, 0, 269/512, 0, -6607/24576, 0]
   [21/16, 0, -55/32, 0, 6759/4096, 0, -155113/122880]
   [151/96, 0, -417/128, 0, 87963/20480, 0]
   [1097/512, 0, -15543/2560, 0, 2514467/245760]
   [8011/2560, 0, -69119/6144, 0]
   [293393/61440, 0, -5962461/286720]
   [6459601/860160, 0]
   [332287993/27525120]

μ − β:
   [-1/2, 0, 3/16, 0, -1/32, 0, 19/2048, 0]
   [-1/16, 0, 1/32, 0, -9/2048, 0, 7/4096]
   [-1/48, 0, 3/256, 0, -3/2048, 0]
   [-5/512, 0, 3/512, 0, -11/16384]
   [-7/1280, 0, 7/2048, 0]
   [-7/2048, 0, 9/4096]
   [-33/14336, 0]
   [-429/262144]

β − μ:
   [1/2, 0, -9/32, 0, 205/1536, 0, -4879/73728, 0]
   [5/16, 0, -37/96, 0, 1335/4096, 0, -86171/368640]
   [29/96, 0, -75/128, 0, 2901/4096, 0]
   [539/1536, 0, -2391/2560, 0, 1082857/737280]
   [3467/7680, 0, -28223/18432, 0]
   [38081/61440, 0, -733437/286720]
   [459485/516096, 0]
   [109167851/82575360]

μ − θ:
   [1/2, 0, 13/16, 0, -15/32, 0, 509/2048, 0]
   [-1/16, 0, 33/32, 0, -1673/2048, 0, 2599/4096]
   [-5/16, 0, 349/256, 0, -2989/2048, 0]
   [-261/512, 0, 963/512, 0, -43531/16384]
   [-921/1280, 0, 5545/2048, 0]
   [-6037/6144, 0, 16617/4096]
   [-19279/14336, 0]
   [-490925/262144]

θ − μ:
   [-1/2, 0, -23/32, 0, 499/1536, 0, -14321/73728, 0]
   [5/16, 0, -5/96, 0, 6565/12288, 0, -201467/368640]
   [1/32, 0, -77/128, 0, 2939/4096, 0]
   [283/1536, 0, -4037/7680, 0, 1155049/737280]
   [1301/7680, 0, -19465/18432, 0]
   [17089/61440, 0, -442269/286720]
   [198115/516096, 0]
   [48689387/82575360]

χ − φ:
   [-2, 2/3, 4/3, -82/45, 32/45, 4642/4725, -8384/4725, 1514/1323]
   [5/3, -16/15, -13/9, 904/315, -1522/945, -2288/1575, 142607/42525]
   [-26/15, 34/21, 8/5, -12686/2835, 44644/14175, 120202/51975]
   [1237/630, -12/5, -24832/14175, 1077964/155925, -1097407/187110]
   [-734/315, 109598/31185, 1040/567, -12870194/1216215]
   [444337/155925, -941912/184275, -126463/72765]
   [-2405834/675675, 3463678/467775]
   [256663081/56756700]

φ − χ:
   [2, -2/3, -2, 116/45, 26/45, -2854/675, 16822/4725, 189416/99225]
   [7/3, -8/5, -227/45, 2704/315, 2323/945, -31256/1575, 141514/8505]
   [56/15, -136/35, -1262/105, 73814/2835, 98738/14175, -2363828/31185]
   [4279/630, -332/35, -399572/14175, 11763988/155925, 14416399/935550]
   [4174/315, -144838/6237, -2046082/31185, 258316372/1216215]
   [601676/22275, -115444544/2027025, -2155215124/14189175]
   [38341552/675675, -170079376/1216215]
   [1383243703/11351340]

χ − β:
   [-1, 2/3, 0, -16/45, 2/5, -998/4725, -34/4725, 1384/11025]
   [1/6, -2/5, 19/45, -22/105, -2/27, 1268/4725, -12616/42525]
   [-1/15, 16/105, -22/105, 116/567, -1858/14175, 1724/51975]
   [17/1260, -8/105, 2123/14175, -26836/155925, 115249/935550]
   [-1/105, 128/4455, -424/6237, 140836/1216215]
   [149/311850, -31232/2027025, 210152/4729725]
   [-499/225225, 30208/6081075]
   [-68251/113513400]

β − χ:
   [1, -2/3, -1/3, 38/45, -1/3, -3118/4725, 4769/4725, -25666/99225]
   [5/6, -14/15, -7/9, 50/21, -247/270, -14404/4725, 193931/42525]
   [16/15, -34/21, -5/3, 17564/2835, -36521/14175, -1709614/155925]
   [2069/1260, -28/9, -49877/14175, 2454416/155925, -637699/85050]
   [883/315, -28244/4455, -20989/2835, 48124558/1216215]
   [797222/155925, -2471888/184275, -16969807/1091475]
   [2199332/225225, -1238578/42525]
   [87600385/4540536]

χ − θ:
   [0, 2/3, 2/3, -2/9, -14/45, 1042/4725, 18/175, -1738/11025]
   [-1/3, 4/15, 43/45, -4/45, -712/945, 332/945, 23159/42525]
   [-2/5, 2/105, 124/105, 274/2835, -1352/945, 13102/31185]
   [-55/126, -16/105, 21068/14175, 1528/4725, -2414843/935550]
   [-22/45, -9202/31185, 20704/10395, 60334/93555]
   [-90263/155925, -299444/675675, 40458083/14189175]
   [-8962/12285, -3818498/6081075]
   [-4259027/4365900]

θ − χ:
   [0, -2/3, -2/3, 4/9, 2/9, -3658/4725, 76/225, 64424/99225]
   [1/3, -4/15, -23/45, 68/45, 61/135, -2728/945, 2146/1215]
   [2/5, -24/35, -46/35, 9446/2835, 428/945, -95948/10395]
   [83/126, -80/63, -34712/14175, 4472/525, 29741/85050]
   [52/45, -2362/891, -17432/3465, 280108/13365]
   [335882/155925, -548752/96525, -48965632/4729725]
   [51368/12285, -197456/15795]
   [1461335/174636]

χ − μ:
   [-1/2, 2/3, -37/96, 1/360, 81/512, -96199/604800, 5406467/38707200, -7944359/67737600]
   [-1/48, -1/15, 437/1440, -46/105, 1118711/3870720, -51841/1209600, -24749483/348364800]
   [-17/480, 37/840, 209/4480, -5569/90720, -9261899/58060800, 6457463/17740800]
   [-4397/161280, 11/504, 830251/7257600, -466511/2494800, -324154477/7664025600]
   [-4583/161280, 108847/3991680, 8005831/63866880, -22894433/124540416]
   [-20648693/638668800, 16363163/518918400, 2204645983/12915302400]
   [-219941297/5535129600, 497323811/12454041600]
   [-191773887257/3719607091200]

μ − χ:
   [1/2, -2/3, 5/16, 41/180, -127/288, 7891/37800, 72161/387072, -18975107/50803200]
   [13/48, -3/5, 557/1440, 281/630, -1983433/1935360, 13769/28800, 148003883/174182400]
   [61/240, -103/140, 15061/26880, 167603/181440, -67102379/29030400, 79682431/79833600]
   [49561/161280, -179/168, 6601661/7257600, 97445/49896, -40176129013/7664025600]
   [34729/80640, -3418889/1995840, 14644087/9123840, 2605413599/622702080]
   [212378941/319334400, -30705481/10378368, 175214326799/58118860800]
   [1522256789/1383782400, -16759934899/3113510400]
   [1424729850961/743921418240]

ξ − φ:
   [-4/3, -4/45, 88/315, 538/4725, 20824/467775, -44732/2837835, -86728/16372125, -88002076/13956067125]
   [34/45, 8/105, -2482/14175, -37192/467775, -12467764/212837625, -895712/147349125, -2641983469/488462349375]
   [-1532/2835, -898/14175, 54968/467775, 100320856/1915538625, 240616/4209975, 8457703444/488462349375]
   [6007/14175, 24496/467775, -5884124/70945875, -4832848/147349125, -4910552477/97692469875]
   [-23356/66825, -839792/19348875, 816824/13395375, 9393713176/488462349375]
   [570284222/1915538625, 1980656/54729675, -4532926649/97692469875]
   [-496894276/1915538625, -14848113968/488462349375]
   [224557742191/976924698750]

φ − ξ:
   [4/3, 4/45, -16/35, -2582/14175, 60136/467775, 28112932/212837625, 22947844/1915538625, -1683291094/37574026875]
   [46/45, 152/945, -11966/14175, -21016/51975, 251310128/638512875, 1228352/3007125, -14351220203/488462349375]
   [3044/2835, 3802/14175, -94388/66825, -8797648/10945935, 138128272/147349125, 505559334506/488462349375]
   [6059/4725, 41072/93555, -1472637812/638512875, -45079184/29469825, 973080708361/488462349375]
   [768272/467775, 455935736/638512875, -550000184/147349125, -1385645336626/488462349375]
   [4210684958/1915538625, 443810768/383107725, -2939205114427/488462349375]
   [387227992/127702575, 101885255158/54273594375]
   [1392441148867/325641566250]

ξ − β:
   [-1/3, -4/45, 32/315, 34/675, 2476/467775, -70496/8513505, -18484/4343625, 29232878/97692469875]
   [-7/90, -4/315, 74/2025, 3992/467775, 53836/212837625, -4160804/1915538625, -324943819/488462349375]
   [-83/2835, 2/14175, 7052/467775, -661844/1915538625, 237052/383107725, -168643106/488462349375]
   [-797/56700, 934/467775, 1425778/212837625, -2915326/1915538625, 113042383/97692469875]
   [-3673/467775, 390088/212837625, 6064888/1915538625, -558526274/488462349375]
   [-18623681/3831077250, 41288/29469825, 155665021/97692469875]
   [-6205669/1915538625, 504234982/488462349375]
   [-8913001661/3907698795000]

β − ξ:
   [1/3, 4/45, -46/315, -1082/14175, 11824/467775, 7947332/212837625, 9708931/1915538625, -5946082372/488462349375]
   [17/90, 68/945, -338/2025, -16672/155925, 39946703/638512875, 164328266/1915538625, 190673521/69780335625]
   [461/2835, 1102/14175, -101069/467775, -255454/1563705, 236067184/1915538625, 86402898356/488462349375]
   [3161/18900, 1786/18711, -189032762/638512875, -98401826/383107725, 110123070361/488462349375]
   [88868/467775, 80274086/638512875, -802887278/1915538625, -200020620676/488462349375]
   [880980241/3831077250, 66263486/383107725, -296107325077/488462349375]
   [37151038/127702575, 4433064236/18091198125]
   [495248998393/1302566265000]

ξ − θ:
   [2/3, -4/45, 62/105, 778/4725, -193082/467775, -4286228/42567525, 53702182/212837625, 182466964/8881133625]
   [4/45, -32/315, 12338/14175, 92696/467775, -61623938/70945875, -32500616/273648375, 367082779691/488462349375]
   [-524/2835, -1618/14175, 612536/467775, 427003576/1915538625, -663111728/383107725, -42668482796/488462349375]
   [-5933/14175, -8324/66825, 427770788/212837625, 421877252/1915538625, -327791986997/97692469875]
   [-320044/467775, -9153184/70945875, 6024982024/1915538625, 74612072536/488462349375]
   [-1978771378/1915538625, -46140784/383107725, 489898512247/97692469875]
   [-2926201612/1915538625, -42056042768/488462349375]
   [-2209250801969/976924698750]

θ − ξ:
   [-2/3, 4/45, -158/315, -2102/14175, 109042/467775, 216932/2627625, -189115382/1915538625, -230886326/6343666875]
   [16/45, -16/945, 934/14175, -7256/155925, 117952358/638512875, 288456008/1915538625, -11696145869/69780335625]
   [-232/2835, 922/14175, -25286/66825, -7391576/54729675, 478700902/1915538625, 91546732346/488462349375]
   [719/4725, 268/18711, -67048172/638512875, -67330724/383107725, 218929662961/488462349375]
   [14354/467775, 46774256/638512875, -117954842/273648375, -129039188386/488462349375]
   [253129538/1915538625, 2114368/34827975, -178084928947/488462349375]
   [13805944/127702575, 6489189398/54273594375]
   [59983985827/325641566250]

ξ − μ:
   [1/6, -4/45, -817/10080, 1297/18900, 7764059/239500800, -9292991/302702400, -25359310709/1743565824000, 39534358147/2858202547200]
   [49/720, -2/35, -29609/453600, 35474/467775, 36019108271/871782912000, -14814966289/245188944000, -13216941177599/571640509440000]
   [4463/90720, -2917/56700, -4306823/59875200, 3026004511/30648618000, 99871724539/1569209241600, -27782109847927/250092722880000]
   [331799/7257600, -102293/1871100, -368661577/4036032000, 2123926699/15324309000, 168979300892599/1600593426432000]
   [11744233/239500800, -875457073/13621608000, -493031379277/3923023104000, 1959350112697/9618950880000]
   [453002260127/7846046208000, -793693009/9807557760, -145659994071373/800296713216000]
   [103558761539/1426553856000, -53583096419057/500185445760000]
   [12272105438887727/128047474114560000]

μ − ξ:
   [-1/6, 4/45, 121/1680, -1609/28350, -384229/14968800, 12674323/851350500, 7183403063/560431872000, -375027460897/125046361440000]
   [-29/720, 26/945, 16463/453600, -431/17325, -31621753811/1307674368000, 1117820213/122594472000, 30410873385097/2000741783040000]
   [-1003/45360, 449/28350, 3746047/119750400, -32844781/1751349600, -116359346641/3923023104000, 151567502183/17863765920000]
   [-40457/2419200, 629/53460, 10650637121/326918592000, -13060303/766215450, -317251099510901/8002967132160000]
   [-1800439/119750400, 205072597/20432412000, 146875240637/3923023104000, -2105440822861/125046361440000]
   [-59109051671/3923023104000, 228253559/24518894400, 91496147778023/2000741783040000]
   [-4255034947/261534873600, 126430355893/13894040160000]
   [-791820407649841/42682491371520000]

ξ − χ:
   [2/3, -34/45, 46/315, 2458/4725, -55222/93555, 2706758/42567525, 16676974/30405375, -64724382148/97692469875]
   [19/45, -256/315, 3413/14175, 516944/467775, -340492279/212837625, 158999572/1915538625, 85904355287/37574026875]
   [248/567, -15958/14175, 206834/467775, 4430783356/1915538625, -7597644214/1915538625, 2986003168/37574026875]
   [16049/28350, -832976/467775, 62016436/70945875, 851209552/174139875, -375566203/39037950]
   [15602/18711, -651151712/212837625, 3475643362/1915538625, 5106181018156/488462349375]
   [2561772812/1915538625, -10656173804/1915538625, 34581190223/8881133625]
   [873037408/383107725, -5150169424688/488462349375]
   [7939103697617/1953849397500]

χ − ξ:
   [-2/3, 34/45, -88/315, -2312/14175, 27128/93555, -55271278/212837625, 308365186/1915538625, -17451293242/488462349375]
   [1/45, -184/945, 6079/14175, -65864/155925, 106691108/638512875, 149984636/1915538625, -101520127208/488462349375]
   [-106/2835, 772/14175, -14246/467775, 5921152/54729675, -99534832/383107725, 10010741462/37574026875]
   [-167/9450, -5312/467775, 75594328/638512875, -35573728/273648375, 1615002539/75148053750]
   [-248/13365, 2837636/638512875, 130601488/1915538625, -3358119706/488462349375]
   [-34761247/1915538625, -3196/3553875, 46771947158/488462349375]
   [-2530364/127702575, -18696014/18091198125]
   [-14744861191/651283132500]
\section auxlaterror Truncation errors There are two sources of error when using these series. The truncation error arises from retaing terms up to a certain order in \e n; it is the absolute difference between the value of the truncated series compared with the exact latitude (evaluated with exact arithmetic). In addition, using standard double-precision arithmetic entails accumulating round-off errors so that at the end of a complex calculation a few of the trailing bits of the result are wrong. Here's a table of the truncation errors. The errors are given in "units in the last place (ulp)" where 1 ulp = 2−53 radian = 6.4 × 10−15 degree = 2.3 × 10−11 arcsecond which is a measure of the round-off error for double precision. Here is some rough guidance on how to interpret these errors: - if the truncation error is less than 1 ulp, then round-off errors dominate; - if the truncation error is greater than 8 ulp, then truncation errors dominate; - otherwise, round-off and truncation errors are comparable. . The truncation errors are given accurate to 2 significant figures.

Auxiliary latitude truncation errors (ulp)
expression [f = 1/150, order = 6] [f = 1/297, order = 5]
n series e2 series n series e2 series
β − φ
0.0060 
28   
 0.035 
 41   
φ − β
0.0060 
28   
 0.035 
 41   
θ − φ
2.9    
82   
 6.0   
120   
φ − θ
2.9    
82   
 6.0   
120   
θ − β
0.0060 
28   
 0.035 
 41   
β − θ
0.0060 
28   
 0.035 
 41   
μ − φ
0.037  
41   
 0.18  
 60   
φ − μ
0.98   
59   
 2.3   
 84   
μ − β
0.00069
 5.8 
 0.0024
  9.6 
β − μ
0.13   
12   
 0.35  
 19   
μ − θ
0.24   
30   
 0.67  
 40   
θ − μ
0.099  
23   
 0.23  
 33   
χ − φ
0.78   
43   
 2.1   
 64   
φ − χ
9.0    
71   
17     
100   
χ − β
0.018  
 3.7 
 0.11  
  6.4 
β − χ
1.7    
16   
 3.4   
 24   
χ − θ
0.18   
31   
 0.56  
 43   
θ − χ
0.87   
23   
 1.9   
 32   
χ − μ
0.022  
 0.56
 0.11  
  0.91
μ − χ
0.31   
 1.2 
 0.86  
  2.0 
ξ − φ
0.015  
39   
 0.086 
 57   
φ − ξ
0.34   
53   
 1.1   
 75   
ξ − β
0.00042
 6.3 
 0.0039
 10   
β − ξ
0.040  
10   
 0.15  
 15   
ξ − θ
0.28   
28   
 0.75  
 38   
θ − ξ
0.040  
23   
 0.11  
 33   
ξ − μ
0.015  
 0.79
 0.058 
  1.5 
μ − ξ
0.0043 
 0.54
 0.018 
  1.1 
ξ − χ
0.60   
 1.9 
 1.5   
  3.6 
χ − ξ
0.023  
 0.53
 0.079 
  0.92
\if SKIP 0 beta phi ,0.0060!,28!!!,!0.035!,!41!!! 1 phi beta ,0.0060!,28!!!,!0.035!,!41!!! 2 theta phi ,2.9!!!!,82!!!,!6.0!!!,120!!! 3 phi theta,2.9!!!!,82!!!,!6.0!!!,120!!! 4 theta beta ,0.0060!,28!!!,!0.035!,!41!!! 5 beta theta,0.0060!,28!!!,!0.035!,!41!!! 6 mu phi ,0.037!!,41!!!,!0.18!!,!60!!! 7 phi mu ,0.98!!!,59!!!,!2.3!!!,!84!!! 8 mu beta ,0.00069,!5.8!,!0.0024,!!9.6! 9 beta mu ,0.13!!!,12!!!,!0.35!!,!19!!! 10 mu theta,0.24!!!,30!!!,!0.67!!,!40!!! 11 theta mu ,0.099!!,23!!!,!0.23!!,!33!!! 12 chi phi ,0.78!!!,43!!!,!2.1!!!,!64!!! 13 phi chi ,9.0!!!!,71!!!,17!!!!!,100!!! 14 chi beta ,0.018!!,!3.7!,!0.11!!,!!6.4! 15 beta chi ,1.7!!!!,16!!!,!3.4!!!,!24!!! 16 chi theta,0.18!!!,31!!!,!0.56!!,!43!!! 17 theta chi ,0.87!!!,23!!!,!1.9!!!,!32!!! 18 chi mu ,0.022!!,!0.56,!0.11!!,!!0.91 19 mu chi ,0.31!!!,!1.2!,!0.86!!,!!2.0! 20 xi phi ,0.015!!,39!!!,!0.086!,!57!!! 21 phi xi ,0.34!!!,53!!!,!1.1!!!,!75!!! 22 xi beta ,0.00042,!6.3!,!0.0039,!10!!! 23 beta xi ,0.040!!,10!!!,!0.15!!,!15!!! 24 xi theta,0.28!!!,28!!!,!0.75!!,!38!!! 25 theta xi ,0.040!!,23!!!,!0.11!!,!33!!! 26 xi mu ,0.015!!,!0.79,!0.058!,!!1.5! 27 mu xi ,0.0043!,!0.54,!0.018!,!!1.1! 28 xi chi ,0.60!!!,!1.9!,!1.5!!!,!!3.6! 29 chi xi ,0.023!!,!0.53,!0.079!,!!0.92 \endif The 2nd and 3rd columns show the results for the SRMmax ellipsoid, \e f = 1/150, retaining 6th order terms in the series expansion. The 4th and 5th columns show the results for the International ellipsoid, \e f = 1/297, retaining 5th order terms in the series expansion. The 2nd and 4th columns give the errors for the series expansions in terms of \e n given in this section (appropriately truncated). The 3rd and 5th columns give the errors when the series are reexpanded in terms of e2 = 4\e n/(1 + \e n)2 and truncated retaining the e12 and e10 terms respectively. Some observations: - For production use, the 6th order series in \e n are recommended. For \e f = 1/150, the resulting errors are close to the round-off limit. The errors in the 6th order series scale as f7; so the errors with \e f = 1/297 are about 120 times smaller. - It's inadvisable to use the 5th order series in \e n; this order is barely acceptable for \e f = 1/297 and the errors grow as f6 as \e f is increased. - In all cases, the expansions in terms of e2 are considerably less accurate than the corresponding series in \e n. - For every series converting between φ and any of θ, μ, χ, or ξ, the series where β is substituted for φ is more accurate. Considering that the transformation between φ and β is so simple, tanβ = (1 - \e f) tanφ, it sometimes makes sense to use β internally as the basic measure of latitude. (This is the case with geodesic calculations.)
Back to \ref geocentric. Forward to \ref highprec. Up to \ref contents.
**********************************************************************/ /** \page highprec Support for high precision arithmetic
Back to \ref auxlat. Forward to \ref changes. Up to \ref contents.
One of the goals with the algorithms in GeographicLib is to deliver accuracy close to the limits for double precision. In order to develop such algorithms it is very useful to be have accurate test data. For this purpose, I used Maxima's bfloat capability, which support arbitrary precision floating point arithmetic. As of version 1.37, such high-precision test data can be generated directly by GeographicLib by compiling it with GEOGRAPHICLIB_PRECISION equal to 4 or 5. Here's what you should know: - This is mainly for use for algorithm developers. It's not recommended for installation for all users on a system. - Configuring with -D GEOGRAPHICLIB_PRECISION=4 gives quad precision (113-bit precision) via boost::multiprecision::float128; this requires: - Boost, version 1.64 or later, - the quadmath library (the package names are libquadmath and libquadmath-devel), - the use of g++. - Configuring with -D GEOGRAPHICLIB_PRECISION=5 gives arbitrary precision via mpfr::mpreal; this requires: - MPFR, version 3.0 or later, - MPFR C++ (version 3.6.9, dated 2022-01-18, or later; version 3.6.9 also requires the fixes given in pull requests #15), - a compiler which supports the explicit cast operator (e.g., g++ 4.5 or later, Visual Studio 12 2013 or later). - MPFR, MPFR C++, and Boost all come with their own licenses. Be sure to respect these. - The indicated precision is used for all floating point arithmetic. Thus, you can't compare the results of different precisions within a single invocation of a program. Instead, you can create a file of accurate test data at a high precision and use this to test the algorithms at double precision. - With MPFR, the precision should be set (using Utility::set_digits) just once before any other GeographicLib routines are called. Calling this function after other GeographicLib routines will lead to inconsistent results (because the precision of some constants like Math::pi() is set when the functions are first called). - All the \ref utilities call Utility::set_digits() (with no arguments). This causes the precision (in bits) to be determined by the GEOGRAPHICLIB_DIGITS environment variable. If this is not defined the precision is set to 256 bits (about 77 decimal digits). - The accuracy of most calculations should increase as the precision increases (and typically only a few bits of accuracy should be lost). We can distinguish 4 sources of error: - Round-off errors; these are reliably reduced when the precision is increased. For the most part, the algorithms used by GeographicLib are carefully tuned to minimize round-off errors, so that only a few bits of accuracy are lost. - Convergence errors due to not iterating certain algorithms to convergence. However, all iterative methods used by GeographicLib converge quadratically (the number of correct digits doubles on each iteration) so that full convergence is obtained for "reasonable" precisions (no more than, say, 100 decimal digits or about 340 bits). An exception is thrown if the convergence criterion is not met when using high precision arithmetic. - Truncation errors. Some classes (namely, Geodesic and TransverseMercator) use series expansion to approximate the true solution. Additional terms in the series are used for high precision, however there's always a finite truncation error which varies as some power of the flattening. On the other hand, GeodesicExact and TransverseMercatorExact are somewhat slower classes offering the same functionality implemented with EllipticFunction. These classes provide arbitrary accuracy. (However, a caveat is that the evaluation of the area in GeodesicExact still uses a series (albeit of considerably higher order). So the area calculations are always have a finite truncation error.) - Quantization errors. Geoid, GravityModel, and MagneticModel all depend on external data files. The coefficient files for GravityModel and MagneticModel store the coefficients as IEEE doubles (and perhaps these coefficients can be regarded as exact). However, with Geoid, the data files for the geoid heights are quantized at 3mm leading to an irreducible ±1.5mm quantization error. On the other hand, all the physical constants used by GeographicLib, e.g., the flattening of the WGS84 ellipsoid, are evaluated as exact decimal numbers. - Where might high accuracy be important? - checking the truncation error of series approximations; - checking for excessive round-off errors (typically due to subtraction); - checking the round-off error in computing areas of many-sided polygons; - checking the summation of high order spherical harmonic expansions (where underflow and overflow may also be a problem). - Because only a tiny number of people will be interested in using this facility: - the cmake support for the required libraries is rudimentary; - however geographiclib-config.cmake does export GEOGRAPHICLIB_PRECISION and GeographicLib_HIGHPREC_LIBRARIES, the libraries providing the support for high-precision arithmetic; - support for the C++11 mathematical functions and the explicit cast operator is required; - quad precision is only available on Linux; - mpfr has been mostly tested on Linux (but it works on Windows with Visual Studio 12 and MacOS too). The following steps needed to be taken - Phase 1, make sure you can switch easily between double, float, and long double. - use \#include <cmath> instead of \#include <math.h>; - use, e.g., std::sqrt instead of sqrt in header files (similarly for sin, cos, atan2, etc.); - use using namespace std; and plain sqrt, etc., in code files; - express all convergence criteria in terms of\code numeric_limits::epsilon() \endcode etc., instead of using "magic constants", such as 1.0e-15; - use typedef double real; and replace all occurrences of double by real; - write all literals by, e.g., real(0.5). Some constants might need the L suffix, e.g., real f = 1/real(298.257223563L) (but see below); - Change the typedef of real to float or long double, compile, and test. In this way, the library can be run with any of the three basic floating point types. - If you want to run the library with multiple floating point types within a single executable, then make all your classes take a template parameter specifying the floating-point type and instantiate your classes with the floating-point types that you plan to use. I did not take this approach with GeographicLib because double precision is suitable for the vast majority of applications and turning all the classes into templates classes would end up needlessly complicating (and bloating) the library. - Phase 2, changes to support arbitrary, but fixed, precision - Use, e.g., \code typedef boost::multiprecision::float128 real; \endcode - Change std::sqrt(...), etc. to \code using std::sqrt; sqrt(...) \endcode (but note that std::max can stay). It's only necessary to do this in header files (code files already have using namespace std;). - In the case of boost's multiprecision numbers, the C++11 mathematical functions need special treatment, see Math.hpp. - If necessary, use series with additional terms to improve the accuracy. - Replace slowly converging root finding methods with rapidly converging methods. In particular, the simple iterative method to determine the flattening from the dynamical form factor in NormalGravity converged too slowly; this was replaced by Newton's method. - If necessary, increase the maximum allowed iteration count in root finding loops. Also throw an exception of the maximum iteration count is exceeded. - Write literal constants in a way that works for any precision, e.g., \code real f = 1/( real(298257223563LL) / 1000000000 ); \endcode [Note that \code real f = 1/( 298 + real(257223563) / 1000000000 ); \endcode and 1/real(298.257223563L) are susceptible to double rounding errors. We normally want to avoid such errors when real is a double.] - For arbitrary constants, you might have to resort to macros \code #if GEOGRAPHICLIB_PRECISION == 1 #define REAL(x) x##F #elif GEOGRAPHICLIB_PRECISION == 2 #define REAL(x) x #elif GEOGRAPHICLIB_PRECISION == 3 #define REAL(x) x##L #elif GEOGRAPHICLIB_PRECISION == 4 #define REAL(x) x##Q #else #define REAL(x) real(#x) #endif \endcode and then use \code real f = 1/REAL(298.257223563); \endcode - Perhaps use local static declarations to avoid the overhead of reevaluating constants, e.g., \code static inline real pi() { using std::atan2; // pi is computed just once static const real pi = atan2(real(0), real(-1)); return pi; } \endcode This is not necessary for built-in floating point types, since the atan2 function will be evaluated at compile time. - In Utility::readarray and Utility::writearray, arrays of reals were treated as plain old data. This assumption now no longer holds and these functions needed special treatment. - volatile declarations don't apply. - Phase 3, changes to support arbitrary precision which can be set at runtime. - The big change now is that the precision is not known at compile time. All static initializations which involve floating point numbers need to be eliminated. - Some static variables (e.g., tolerances which are expressed in terms of numeric_limits<double>\::epsilon()) were made member variables and so initialized when the constructor was called. - Some simple static real arrays (e.g., the interpolating stencils for Geoid) were changed into integer arrays. - Some static variables where converted to static functions similar to the definition of pi() above. - All the static instances of classes where converted as follows \code // declaration static const Geodesic WGS84; // definition const Geodesic Geodesic::WGS84(Constants::WGS84_a(), Constants::WGS84_f()); // use const Geodesic& geod = Geodesic::WGS84; \endcode becomes \code // declaration static const Geodesic& WGS84(); // definition const Geodesic& Geodesic::WGS84() { static const Geodesic wgs84(Constants::WGS84_a(), Constants::WGS84_f()); return wgs84; static const Geodesic& WGS84(); } // use const Geodesic& geod = Geodesic::WGS84(); \endcode This is the so-called "construct on first use idiom". This is the most disruptive of the changes since it requires a different calling convention in user code. However the old static initializations were invoked every time a code linking to GeographicLib was started, even if the objects were not subsequently used. The new method only initializes the static objects if they are used. . - numeric_limits<double>\::digits is no longer a compile-time constant. It becomes numeric_limits<double>\::digits(). - Depending on the precision cos(π/2) might be negative. Similarly atan(tan(π/2)) may evaluate to −π/2. GeographicLib already handled this, because this happens with long doubles (64 bits in the fraction). - The precision needs to be set in each thread in a multi-processing applications (for an example, see examples/GeoidToGTX.cpp). - Passing numbers to functions by value incurs a substantially higher overhead than with doubles. This could be avoided by passing such arguments by reference. This was not done here because it would junk up the code to benefit a narrow application. - The constants in GeodesicExact, e.g., 831281402884796906843926125, can't be specified as long doubles nor long longs (since they have more than 64 significant bits): - first tried macro which expanded to a string (see the macro REAL above); - now use inline function to combine two long long ints each with at most 52 significant bits; - also needed to simplify one routine in GeodesicExact which took inordinately long (15 minutes) to compile using g++.
Back to \ref auxlat. Forward to \ref changes. Up to \ref contents.
**********************************************************************/ /** \page changes Change log
Back to \ref highprec. Up to \ref contents.
List of versions in reverse chronological order together with a brief list of changes. (Note: Old versions of the library use a year-month style of numbering. Now, the library uses a major and minor version number.) Recent versions of GeographicLib are available at https://sourceforge.net/projects/geographiclib/files/distrib-C++/. Older versions are in https://sourceforge.net/projects/geographiclib/files/distrib/. The corresponding documentation for these versions is obtained by clicking on the “Version m.nn” links below. Some of the links in the documentation of older versions may be out of date (in particular the links for the source code will not work if the code has been migrated to the archive subdirectory). All the releases are available as tags “rm.nn” in the the "release" branch of the git repository for GeographicLib. \if SKIP - TODO: Planned updates - Change templating in PolygonArea so that the AddPoint and AddEdge methods are templated instead of the class itself. This would allow a polygon to contain a mixture of geodesic and rhumb-line edges. - Generalize Geoid, UTMUPS, MGRS, GeoCoords to handle non-WGS84 ellipsoids. - Add GreatEllipse class. - Implement Geodesic + TM + PolarStereographic on Jets. - Template versions of Gnomonic and AzimuthalEquidistant so that they can use either Geodesic and GeodesicExact. Use typedefs so that Geodesic::Line points to GeodesicLine. - Check Geocentric::Reverse for accuracy for extreme ellipsoids, \e e > 1/sqrt(2). - Check Visual Studo "code analysis" results (from Analize VS menu). Probably an awful lot of false positives. - Add Math routine for Clenshaw summation; and maybe AuxiliaryLatitude class for conversions via the series? - Allow addition of points to NearestNeighbor objects (maybe by allowing larger buckets on construction or by just do additional splits as necessary). - Improve documentation for Intersect class + tool to treat case of equally close intersectons. \endif - Version 2.4 (released 2024-07-14) - Math::sind, Math::sincosd, etc., now return accurate results for arguments = 30°, 45°, 60°, …. - Add Math::hypot3. - Add EllipticFunction::am. - Make constructor for AuxAngle explicit. - Include notes for \ref platecarreearea. - C++14 compliant compiler required (this requirement tracks the Boost math library). - CMake configuration changes - update cmake_minimum_required to 3.16.0. - exclude the tools and doc targets from the default build (make all) if these components won't be installed (BINDIR or DOCDIR set to OFF). - testprograms is now excluded from the default build and it now depends on tools. Before running the test suite, build testprograms, e.g., make testprograms test. - added a target libs to build only the static and/or shared libraries. - document the use of CMake's FetchContent as an alternative to find_package. - stop requiring that `CMAKE_CROSSCOMPILING` match with `find_package(GeographicLib)`. - Internal code changes - stop using reserved identifiers (\e _N in the DST class and \e _R in the Intersect class). - remove the workaround for the boost-quadmath bug with setprecision(0). - GEOGRAPHICLIB_PANIC(msg) macro now takes a message argument. . - Version 2.3 (released 2023-07-25) - Add the Intersect class and the IntersectTool utility. The methods are described in Geodesic intersections, preprint. - Add typedefs Geodesic::LineClass, GeodesicExact::LineClass, Rhumb::LineClass, GeodesicLine::BaseClass, GeodesicLineExact::BaseClass, RhumbLine::BaseClass. - Geodesic constructor accepts optional third argument \e exact, default false. If true, then the calculations are delegated to GeodesicExact. GeodSolve and Planimeter now use this simplified interface. - PolygonAreaExact is deprecated; use PolygonArea instead. - Bug in Planimeter -Q (introduced in version 2.2) has been fixed. - TransverseMercator constructor accepts optional arguments \e exact and \e extendp (default false for both). If \e exact = true, then the calculations are delegated to TransverseMercatorExact. TransverseMercatorProj now uses this simplified interface. - Minor fixes: - Fix documentation bug for TransverseMercatorProj (incorrectly stated that -t for the extended domain was the default). - Remove unnecessary friend declarations for Ellipsoid in AlbersEqualArea and TransverseMercator. (As of version 2.2, Ellipsoid uses the AuxLatitude class for this functionality.) - Small change in EllipticFunction to speed up the default contructor. - Remove workaround for boost 1.76 with enums (not needed for boost 1.78). - Remove unused header from NearestNeighbor. . - Version 2.2 (released 2023-03-07) - Completely redo Rhumb and RhumbLine classes to yield accurate results for the course and the area even for very eccentric ellipsoids: - these methods are accurate for 1/100 < b/a < 100 (the previous methods for the course were limited to 1/4 < b/a < 4 for the course and the area calculation was only valid for |f| < 0.01); - the meaning of the \e exact flag in the constructor is now more straightforward: \e exact = false (the default) consistently uses series expansions valid for |f| < 0.01; \e exact = true uses exact equations for the course of the rhumb line and an accurate DFT fit for the area computation; - the RhumbSolve(1) utiity accepts the u to unroll the longitudes for the results of direct calculations; - rhumb lines which include a pole as one of the endpoints are treated properly (previously point at the pole were moved slightly away from the pole); - this treatment of rhumb areas is described in The area of rhumb polygons. - The -E option for Planimeter(1) is now a toggle switching on exact treatment for geodesics (-G option), rhumb lines (-R option), authlatic lines (-Q option). Previously -E has turned on the exact treatment for geodesics. - The online version of Planimeter now allows the ellipsoid to be specified. - The deprecated -l option for GeodSolve and RhumbSolve has been removed. - Add AuxAngle and AuxLatitude classes to perform accurate conversions between auxiliary latitudes. The Ellipsoid class has been mostly reimplimented in terms of the AuxLatitude class. The DAuxLatitude class computes the divides differences of auxiliary latitude. and implements additional divided difference formulas needed by Rhumb. - Created an "experimental" directory + namespace and moved the experimental::JacobiConformal class there. Use the cmake target "experimental" to build this directory. . - Version 2.1.2 (released 2022-12-13) - Add MGRS::Decode to break an MGRS string into its components. - Add definite integral overload for DST::integral. This is used in GeodesicExact. - Add example code examples/AuxLatitude.[hc]pp implementating the AuxAngle and AuxLatitude classes. These classes implement the methods documented in the paper On auxiliary latitudes. They are not part of GeographicLib. See \ref auxlat for more details. - Minor cmake issues: - fix cross-compile build on Windows; - check cmake version for "cmake rm -rf"; - move cmake_minimum_required to the beginning of the cmake file and update minimum version to 3.13.0. . - Version 2.1.1 (released 2022-07-25) - Paper describing algorithms in GeodesicExact class is available at arxiv:2208.00492. - The Planimeter utility used to accept polygon vertices as UTM/UPS or MGRS coordinates. However, since these are converted to latitude and longitude using the WGS84 ellipoid, this convention is incompatible with the -e option to specify the ellipsoid. So now, you have to provide the \--geoconvert-input option to allow vertices to be specified in this way. - Fix sign error in DST::refine. - Relax overly strict convergence test for inverse problem in Geodesic and GeodesicExact. - Minor: - Use lookup table for selecting number of points for DST in GeodesicExact. - Relax one of the test thresholds in geodtest.cpp. . - Version 2.1 (released 2022-06-09) - Improve the accuracy of the area calculations in GeodesicExact and the Planimeter utility with the -E option. This now gives full double precision accuracy for b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99]. (Previously the range for full accuracy was b/\e a ∈ [0.5, 2].) The method involves a direct computation of the Fourier series for the integrand of area integral which then allows the integral to be evaluated. - Add a new class DST for doing discrete sine transforms. This is mainly for "internal" use, to compute the area in GeodesicExact. Internally, this uses the kissfft package by Mark Borgerding. - Fix various warnings from Visual Studio about arithmetic involving enums. - Minor improvement in the logic for the geodesic inverse problem to address a slow down that can occur with `GEOGRAPHICLIB_PRECISION = 5` due to the time it takes to calculate, for example, `sin(10^(10^8))` accurately. . - Version 2.0 (released 2022-05-06) - Remove non C++ implementations from this package. These are now managed as separate packages. See [https://geographiclib.sourceforge.io/doc/library.html#languages]( ../../doc/library.html#languages). - This allowed the cmake interface to be rationalized, see \ref cmake - Replace `GEOGRAPHICLIB_LIB_TYPE` by `BUILD_SHARED_LIBS` (a standard cmake variable) and `BUILD_BOTH_LIBS`. - Remove `COMMON_INSTALL_PATH` and replace with variables to specify where various components are to be installed. - `GEOGRAPHICLIB_DOCUMENTATION` is now `BUILD_DOCUMENTATION`. - Remove `BUILD_NETGEOGRAPHICLIB`. - Remove legacy cmake config support (non-namespace). - `make exampleprograms` does a separate cmake configuration to mimic how a user's program might find GeographicLib. - `find_package (GeographicLib)` now sets and checks the value of `GEOGRAPHICLIB_PRECISION`. - Improve the separation of end-user and maintain cmake code. - More careful treatment of ±0° and ±180°. - These behave consistently with taking the limits - ±0 means ±ε as ε → 0+ - ±180 means ±(180 − ε) as ε → 0+ - As a consequence, azimuths of +0° and +180° are reckoned to be east-going, as far as tracking the longitude with Geodesic::LONG_UNROLL and the area goes, while azimuths −0° and −180° are reckoned to be west-going. - When computing longitude differences, if λ2 − λ1 = ±180° (mod 360°), then the sign is picked depending on the sign of the difference. - The normal range for returned longitudes and azimuths is [−180°, 180°]. - Programs in directory `tests` now allow testing to extend beyond invocations of the utility programs. - BUG FIXES: - Fixed bug where in the solution of the inverse geodesic problem where with lat1 = 0 and lat2 = nan was treated as equatorial. - Fixed roundoff corner case in geodesic area computation (only triggered with long double). - Minor changes in code: - Use fmin, fmax, fabs instead of min, max, abs, where appropriate. - Parameterize the conversion units for degrees, minutes, seconds as Math::qd, Math::dm, Math::ms. - Ellipsoid::MinorRadius() has be renamed Ellipsoid::PolarRadius(). - Remove deprecated functions: XXX::MajorRadius, Utility::val, and placeholders (Math::cbrt, etc.) for C++11 math functions. - Can specify the comment character in Utility::ParseLine. - Rename various internal identifiers to avoid reserved names. - Remove unused internal variable in RhumbLine. - The documentation for EllipticFunction specifies restrictions on the arguments. - Put GeodesicExactC4.cpp back into GeodesicExact.cpp. - Library file now called `libGeographicLib.so`, etc., instead of `libGeographic.so`. - The .NET version of GeographicLib has been removed. . - Version 1.52 (released 2021-06-22) - Add MagneticModel::FieldGeocentric and MagneticCircle::FieldGeocentric to return the field in geocentric coordinates (thanks to Marcelo Banik de Padua). - Document realistic errors for PolygonAreaT and Planimeter. - Geodesic routines: be more aggressive in preventing negative \e s12 and \e m12 for short lines (all languages). - Fix bug in AlbersEqualArea for extreme prolate ellipsoids (plus general cleanup in the code). - Thanks to Thomas Warner, a sample of wrapping the C++ library, so it's accessible in Excel, is given in wrapper/Excel. - Minor changes - Work around inaccuracies in hypot routines in Visual Studio (win32), Python, and JavaScript. - Initialize reference argument to remquo (C++ and C). - Get ready to retire unused _exact in RhumbLine. - Declare RhumbLine copy constructor "= default". - Use C++11 "= delete" idiom to delete copy assignment and copy constructors in RhumbLine, Geoid, GravityModel, MagneticModel. - Fix MGRS::Forward to work around aggressive optimization leading to incorrect rounding. - Fix plain makefiles, Makefile.mk, so that PREFIX is handled properly. - Make cmake's GeographicLib_LIBRARIES point to namespace versions. - NOTE: In the next version (tentatively 2.0), I plan to split up the git repository and the packaging of GeographicLib into separate entities for each language. This will simplify development and deployment of the library. - WARNING: The .NET version of GeographicLib will not be supported in the next version. . - Version 1.51 (released 2020-11-22) - C++11 compiler required for C++ library. As a consequence: - The workaround implementations for C++11 routines (Math::hypot, Math::expm1, Math::log1p, Math::asinh, Math::atanh, Math::copysign, Math::cbrt, Math::remainder, Math::remquo, Math::round, Math::lround, Math::fma, Math::isfinite, and Math::isnan) are now deprecated. Just use the versions in the std:: namespace instead. - SphericalEngine class, fix the namespace for using streamoff. - Some templated functions, e.g., Math::degree(), now have default template parameters, T = Math::real. - C99 compiler required for C library. - Reduce memory footprint in Java implementation. - New form of Utility::ParseLine to allow the syntax "KEY = VAL". - Add International Geomagnetic Reference Field (13th generation), igrf13, which approximates the main magnetic field of the earth for the period 1900--2025. - More symbols allowed with DMS decoding in C++, JS, and cgi-bin packages; see DMS::Decode. - Fix bug in cgi-bin argument processing which causes "+" to be misinterpreted. - Required minium version of CMake is now 3.7.0 (released 2016-11-11). This is to work around a bug in find_package for cmake 3.4 and 3.5. . - Version 1.50.1 (released 2019-12-13) - Add the World Magnetic Model 2020, wmm2020, covering the period 2020--2025. This is now the model returned by MagneticModel::DefaultMagneticName and is default magnetic model for MagneticField (replacing wmm2015v2 which is only valid thru the end of 2019). - Include float instantiations of those templated Math functions which migrated to Math.cpp in version 1.50. - WARNING: The next version of GeographicLib will require a C++11 compliant compiler. This means that the minimum version of Visual Studio will be Visual Studio 14 2015. (This repeats the warning given with version 1.50. It didn't apply to this version because this is a minor update.) . - Version 1.50 (released 2019-09-24) - BUG fixes: - Java + JavaScript implementations of PolygonArea::TestEdge counted the pole encirclings wrong. - Fix typo in JavaScript implementation which affected unsigned areas. - Adding edges to a polygon counted pole encirclings inconsistent with the way the adding point counted them. This might have caused an incorrect result if a polygon vertex had longitude = 0. This affected all implementations except Fortran and MATLAB). - GARS::Forward: fix BUG in handling of longitude = ±180°. - Fix bug in Rhumb class and RhumbSolve(1) utiity which caused incorrect area to be reported if an endpoint is at a pole. Thanks to Natalia Sabourova for reporting this. - Fix bug in MATLAB routine mgrs_inv which resulted in incorrect results for UPS zones with prec = −1. - In geodreckon.m geoddistance.m, suppress (innocuous) "warning: division by zero" messages from Octave. - In python implementation, work around problems caused by sin(inf) and fmod(inf) raising exceptions. - Geoid class, fix the use of streamoff. - The PolygonArea class, the Planimeter utility, and their equivalents in C, Fortran, MATLAB, Java, JavaScript, Python, and Maxima can now handle arbitrarily complex polygons. In the case of self-intersecting polygons the area is accumulated "algebraically", e.g., the areas of the 2 loops in a figure-8 polygon will partially cancel. - Changes in gravity and magnetic model handling - SphericalEngine::coeff::readcoeffs takes new optional argument \e truncate. - The constructors for GravityModel and MagneticModel allow the maximum degree and order to be specified. The array of coefficients will then be truncated if necessary. - GravityModel::Degree(), GravityModel::Order(), MagneticModel::Degree(), MagneticModel::Order() return the maximum degree and order of all the components of a GravityModel or MagneticModel. - Gravity and MagneticField utilities accept -N and -M options to to allow the maximum degree and order to be specified. - The GeodSolve allows fractional distances to be entered as fractions (with the -F flag). - MajorRadius() methods are now called EquatorialRadius() for the C++, Java, and .NET libraries. "Equatorial" is more descriptive in the case of prolate ellipsoids. MajorRadius() is retained for backward compatibility for C++ and Java but is deprecated. - Minimum version updates: - CMake = 3.1.0, released 2014-12-15. - Minimum g++ version = 4.8.0, released 2013-03-22. - Visual Studio 10 2010 (haven't been able to check Visual Studio 2008 for a long time). - WARNING: The next version of GeographicLib will require a C++11 compliant compiler. This means that the minimum version of Visual Studio will be Visual Studio 14 2015. - Minimum boost version = 1.64 needed for GEOGRAPHICLIB_PRECISION = 4. - Java = 1.6; this allows the removal of epsilon, min, hypot, log1p, copysign, cbrt from GeoMath. - CMake updates: - Fine tune Visual Studio compatibility check in find_package(GeographicLib); this allows GeographicLib compiled with Visual Studio 14 2015 to be used with a project compiled with Visual Studio 15 2017 and 16 2019. - Suppress warnings with dotnet build. - Change CMake target names and add an interface library (thanks to Matthew Woehlke). - Remove pre-3.1.0 cruft and update the documentation to remove the need to call include_dirctories. - Add _d suffix to example and test programs. - Changer installation path for binary installer to the Windows default. - Add support for Intel compiler (for C++, C, Fortran). This entails supplying the -fp-model precise flag to prevent the compiler from incorrectly simplying (a + b) + c and 0.0 + x. - Add version 2 of the World Magnetic Model 2015, wmm2015v2. This is now the default magnetic model for MagneticField (replacing wmm2015 which is now deprecated). Coming in 2019-12: the wmm2020 model. - The -f flag in the scripts geographiclib-get-geoids, geographiclib-get-gravity, and geographiclib-get-magnetic, allows you to load new models (not yet in the set defined by "all"). This is in addition to its original role of allowing you to overwrite existing models. - Changes in math function support: - Move some of the functionality from Math.hpp to Math.cpp to make compilation of package which depend on GeographicLib less sensitive to the current compiler environment. - Add Math::remainder, Math::remquo, Math::round, and Math::lround. Also add implementations of remainder, remquo to C implementation. - Math::cbrt, Math::atanh, and Math::asinh now preserve the sign of −0. (Also: C, Java, JavaScript, Python, MATLAB. Not necessary: Fortran because sign is a built-in function.) - JavaScript: fall back to Math.hypot, Math.cbrt, Math.log1p, Math.atanh if they are available. - When parsing DMS strings ignore various non-breaking spaces (C++ and JavaScript). - Improve code coverage in the tests of geodesic algorithms (C++, C, Java, JavaScript, Python, MATLAB, Fortran). - Old deprecated NormalGravity::NormalGravity constructor removed. - Additions to the documentation: - add documentation links to ge{distance,reckon}.m; - clarify which solution is returned for Geocentric::Reverse. . - Version 1.49 (released 2017-10-05) - Add the Enhanced Magnetic Model 2017, emm2017. This is valid for 2000 thru the end of 2021. - Avoid potential problems with the order of initializations in DMS, GARS, Geohash, Georef, MGRS, OSGB, SphericalEngine; this only would have been an issue if GeographicLib objects were instantiated globally. Now no GeographicLib initialization code should be run prior to the entry of main(). - To support the previous fix, add an overload, Utility::lookup(const char* s, char c). - NearestNeighbor::Search throws an error if \e pts is the wrong size (instead of merely returning no results). - Use complex arithmetic for Clenshaw sums in TransverseMercator and tranmerc_{fwd,inv}.m. - Changes in cmake support: - fix compiler flags for GEOGRAPHICLIB_PRECISION = 4; - add CONVERT_WARNINGS_TO_ERRORS option (default OFF), if ON then compiler warnings are treated as errors. - Fix warnings about implicit conversions of doubles to bools in C++, C, and JavaScript packages. - Binary installers for Windows now use Visual Studio 14 2015. . - Version 1.48 (released 2017-04-09) - The "official" URL for GeographicLib is now https://geographiclib.sourceforge.io (instead of http://geographiclib.sourceforge.net). - The default range for longitude and azimuth is now (−180°, 180°], instead of [−180°, 180°). This was already the case for the C++ library; now the change has been made to the other implementations (C, Fortran, Java, JavaScript, Python, MATLAB, and Maxima). - Changes to NearestNeighbor: - fix BUG in reading a NearestNeighbor object from a stream which sometimes incorrectly caused a "Bad index" exception to be thrown; - add NearestNeighbor::operator<<, NearestNeighbor::operator>>, NearestNeighbor::swap, std::swap(GeographicLib::NearestNeighbor&, GeographicLib::NearestNeighbor&); - Additions to the documentation: - add documentation on \ref nearest; - \ref normalgravity documentation is now on its own page and now has an illustrative figure; - document the \ref auxlaterror in the series for auxiliary latitudes. - Fix BUGS in MATLAB function geodreckon with mixed scalar and array arguments. - Workaround bug in math.fmod for Python 2.7 on 32-bit Windows machines. - Changes in cmake support: - add USE_BOOST_FOR_EXAMPLES option (default OFF), if ON search for Boost libraries for building examples; - add APPLE_MULTIPLE_ARCHITECTURES option (default OFF), if ON build for both i386 and x86_64 on Mac OS X systems; - don't add flag for C++11 for g++ 6.0 (since it's not needed). - Fix compiler warnings with Visual Studio 2017 and for the C library. . - Version 1.47 (released 2017-02-15) - Add NearestNeighbor class. - Improve accuracy of area calculation (fixing a flaw introduced in version 1.46); fix applied in Geodesic, GeodesicExact, and the implementations in C, Fortran, Java, JavaScript, Python, MATLAB, and Maxima. - Generalize NormalGravity to allow oblate and prolate ellipsoids. As a consequence a new form of constructor, NormalGravity::NormalGravity, has been introduced and the old form is now deprecated (and because the signatures of the two constructors are similar, the compiler will warn about the use of the old one). - Changes in Math class: - Math::sincosd, Math::sind, Math::cosd only return −0 for the case sin(−0); - Math::atan2d and Math::AngNormalize return results in (−180°, 180°]; this may affect the longitudes and azimuth returned by several other functions. - Add Utility::trim() and Utility::val(); Utility::num() is now deprecated. - Changes in cmake support: - remove support of PACKAGE_PATH and INSTALL_PATH in cmake configuration; - fix to FindGeographicLib.cmake to make it work on Debian systems; - use $ (cmake version ≥ 3.1); - use NAMESPACE for exported targets; - geographiclib-config.cmake exports GEOGRAPHICLIB_DATA, GEOGRAPHICLIB_PRECISION, and GeographicLib_HIGHPREC_LIBRARIES. - Add pkg-config support for cmake and autoconf builds. - Minor fixes: - fix the order of declarations in C library, incorporating the patches in version 1.46.1; - fix the packaging of the Python library, incorporating the patches in version 1.46.3; - restrict junit dependency in the Java package to testing scope (thanks to Mick Killianey); - various behind-the-scenes fixes to EllipticFunction; - fix documentation and default install location for Windows binary installers; - fix clang compiler warnings in GeodesicExactC4 and TransverseMercator. . - Version 1.46 (released 2016-02-15) - The following BUGS have been fixed: - the -w flag to Planimeter(1) was being ignored; - in the Java package, the wrong longitude was being returned with direct geodesic calculation with a negative distance when starting point was at a pole (this bug was introduced in version 1.44); - in the JavaScript package, PolygonArea.TestEdge contained a misspelling of a variable name and other typos (problem found by threepointone). - INCOMPATIBLE CHANGES: - make the -w flag (to swap the default order of latitude and longitude) a toggle for all \ref utilities; - the -a option to GeodSolve(1) now toggles (instead of sets) arc mode; - swap order \e coslon and \e sinlon arguments in CircularEngine class. - Remove deprecated functionality: - remove gradient calculation from the Geoid class and GeoidEval(1) (this was inaccurate and of dubious utility); - remove reciprocal flattening functions, InverseFlattening in many classes and Constants::WGS84_r(); stop treating flattening > 1 as the reciprocal flattening in constructors; - remove DMS::Decode(string), DMS::DecodeFraction, EllipticFunction:m, EllipticFunction:m1, Math::extradigits, Math::AngNormalize2, PolygonArea::TestCompute; - stop treating LONG_NOWRAP as an alias for LONG_UNROLL in Geodesic (and related classes) and Rhumb; - stop treating full/schmidt as aliases for FULL/SCHMIDT in SphericalEngine (and related classes); - remove qmake project file src/GeographicLib.pro because QtCreator can handle cmake projects now; - remove deprecated Visual Studio 2005 project and solution files. - Changes to GeodesicLine and GeodesicLineExact classes; these changes (1) simplify the process of computing waypoints on a geodesic given two endpoints and (2) allow a GeodesicLine to be defined which is consistent with the solution of the inverse problem (in particular Geodesic::InverseLine the specification of south-going lines which pass the poles in a westerly direction by setting sin α1 = −0): - the class stores the distance \e s13 and arc length \e a13 to a reference point 3; by default these quantities are NaNs; - GeodesicLine::SetDistance (and GeodesicLine::SetArc) specify the distance (and arc length) to point 3; - GeodesicLine::Distance (and GeodesicLine::Arc) return the distance (and arc length) to point 3; - new methods Geodesic::InverseLine and Geodesic::DirectLine return a GeodesicLine with the reference point 3 defined as point 2 of the corresponding geodesic calculation; - these changes are also included in the C, Java, JavaScript, and Python packages. - Other changes to the geodesic routines: - more accurate solution of the inverse problem when longitude difference is close to 180° (also in C, Fortran, Java, JavaScript, Python, MATLAB, and Maxima packages); - more accurate calculation of lon2 in the inverse calculation with LONG_UNROLL (also in Java, JavaScript, Python packages). - Changes to GeodSolve(1) utility: - the -I and -D options now specify geodesic line calculation via the standard inverse or direct geodesic problems; - rename -l flag to -L to parallel the new -I and -D flags (-l is is retained for backward compatibility but is deprecated), and similarly for RhumbSolve(1); - the -F flag (in conjunction with the -I or -D flags) specifies that distances read on standard input are fractions of \e s13 or \e a13; - the -a option now toggles arc mode (noted above); - the -w option now toggles longitude first mode (noted above). - Changes to Math class: - Math::copysign added; - add overloaded version of Math::AngDiff which returns the error in the difference. This allows a more accurate treatment of inverse geodesic problem when \e lon12 is close to 180°; - Math::AngRound now converts tiny negative numbers to −0 (instead of +0), however −0 is still converted to +0. - Add -S and -T options to GeoConvert(1). - Add Sphinx documentation for Python package. - Samples of wrapping the C++ library, so it's accessible in other languages, are given in wrapper/C, wrapper/python, and wrapper/matlab. - Binary installers for Windows now use Visual Studio 12 2013. - Remove top-level pom.xml from release (it was specific to SRI). - A reminder: because of the JavaScript changes introduced in version 1.45, you should remove the following installation directories from your system: - Windows: ${CMAKE_INSTALL_PREFIX}/doc/scripts - Others: ${CMAKE_INSTALL_PREFIX}/share/doc/GeographicLib/scripts . - Version 1.45 (released 2015-09-30) - Fix BUG in solution of inverse geodesic caused by misbehavior of some versions of Visual Studio on Windows (fmod(−0.0, 360.0) returns +0.0 instead of −0.0) and Octave (sind(−0.0) returns +0.0 instead of −0.0). These bugs were exposed because max(−0.0, +0.0) returns −0.0 for some languages. - Geodesic::Inverse now correctly returns NaNs if one of the latitudes is a NaN. - Changes to JavaScript package: - thanks to help from Yurij Mikhalevich, it is a now a node package that can be installed with npm; - make install now installs the node package in lib/node_modules/geographiclib; - add unit tests using mocha; - add documentation via JSDoc; - fix bug Geodesic.GenInverse (this bug, introduced in version 1.44, resulted in the wrong azimuth being reported for points at the pole). - Changes to Java package: - add implementation of ellipsoidal Gnomonic projection (courtesy of Sebastian Mattheis); - add unit tests using JUnit; - Math.toRadians and Math.toDegrees are used instead of GeoMath.degree (which is now removed), as a result… - Java version 1.2 (released 1998-12) or later is now required. - Changes to Python package: - add unit tests using the unittest framework; - fixed bug in normalization of the area. - Changes to MATLAB package: - fix array size mismatch in geoddistance by avoiding calls to subfunctions with zero-length arrays; - fix tranmerc_{fwd,inv} so that they work with arrays and mixed array/scalar arguments; - work around Octave problem which causes mgrs_fwd to return garbage with prec = 10 or 11; - add geographiclib_test.m to run a test suite. - Behavior of substituting 1/\e f for \e f if \e f > 1 is now deprecated. This behavior has been removed from the JavaScript, C, and Python implementations (it was never documented). Maxima, MATLAB, and Fortran implementations never included this behavior. - Other changes: - fix bug, introduced in version 1.42, in the C++ implementation to the computation of area which causes NaNs to be returned in the case of a sphere; - fixed bug, introduced in version 1.44, in the detection of C++11 math functions in configure.ac; - throw error on non-convergence in Gnomonic::Reverse if GEOGRAPHICLIB_PRECISION > 3; - add geod_polygon_clear to C library; - turn illegal latitudes into NaNs for Fortran library; - add test suites for the C and Fortran libraries. . - Version 1.44 (released 2015-08-14) - Various changes to improve accuracy, e.g., by minimizing round-off errors: - Add Math::sincosd, Math::sind, Math::cosd which take their arguments in degrees. These functions do exact range reduction and thus they obey exactly the elementary properties of the trigonometric functions, e.g., sin 9° = cos 81° = − sin 123456789°. - Math::AngNormalize now works for any angles, instead of angles in the range [−540°, 540°); the function Math::AngNormalize2 is now deprecated. - This means that there is now no restriction on longitudes and azimuths; any values can be used. - Improve the accuracy of Math::atan2d. - DMS::Decode avoids unnecessary round-off errors; thus 7:33:36 and 7.56 result in identical values. DMS::Encode rounds ties to even. These changes have also been made to DMS.js. - More accurate rounding in MGRS::Reverse and mgrs_inv.m; this change only makes a difference at sub-meter precisions. - With MGRS::Forward and mgrs_fwd.m, ensure that digits in lower precision results match those at higher precision; as a result, strings of trailing 9s are less likely to be generated. This change only makes a difference at sub-meter precisions. - Replace the series for A2 in the Geodesic class with one with smaller truncation errors. - Geodesic::Inverse sets \e s12 to zero for coincident points at pole (instead of returning a tiny quantity). - Math::LatFix returns its argument if it is in [−90°, 90°]; if not, it returns NaN. - Using Math::LatFix, routines which don't check their arguments now interpret a latitude outside the legal range of [−90°, 90°] as a NaN; such routines will return NaNs instead of finite but incorrect results; caution: code that (dangerously) relied on the "reasonable" results being returned for values of the latitude outside the allowed range will now malfunction. - All the \ref utilities accept the -w option to swap the latitude-longitude order on input and output (and where appropriate on the command-line arguments). CartConvert now accepts the -p option to set the precision; now all of the utilities except GeoidEval accept -p. - Add classes for GARS, the Global Area Reference System, and for Georef, the World Geographic Reference System. - Changes to DMS::Decode and DMS.js: - tighten up the rules: - 30:70.0 and 30:60 are illegal (minutes and second must be strictly less than 60), however - 30:60.0 and 30:60. are legal (floating point 60 is OK, since it might have been generated by rounding 59.99…); - generalize a+b concept, introduced in version 1.42, to any number of pieces; thus 8+0:40-0:0:10 is interpreted as 8:39:50. - Documentation fixes: - update man pages to refer to GeoConvert(1) on handling of geographic coordinates; - document limitations of the series used for TransverseMercator; - hide the documentation of the computation of the gradient of the geoid height (now deprecated) in the Geoid class; - warn about the possible misinterpretation of 7.0E+1 by DMS::Decode; - \e swaplatlong optional argument of DMS::DecodeLatLon and various functions in the GeoCoords class is now called \e longfirst; - require Doxygen 1.8.7 or later. - More systematic treatment of version numbers: - Python: \__init\__.py defines \__version\__ and \__version_info\__; - JavaScript: - Math.js defines Constants.version and Constants.version_string; - version number included as comment in packed script geographiclib.js; - geod-calc.html and geod-google.html report the version number; - https://geographiclib.sourceforge.io/scripts/ gives access to earlier versions of geographiclib.js as geographiclib-m.nn.js; - Fortran: add geover subroutine to return version numbers; - Maxima: geodesic.mac defines geod_version; - CGI scripts: these report the version numbers of the utilities. - BUG FIXES: - NormalGravity now works properly for a sphere (\e omega = \e f = \e J2 = 0), instead of returning NaNs (problem found by htallon); - CassiniSoldner::Forward and cassini_fwd.m now returns the correct azimuth for points at the pole. - MATLAB-specific fixes: - mgrs_fwd now treats treats prec > 11 as prec = 11; - illegal letter combinations are now correctly detected by mgrs_inv; - fixed bug where mgrs_inv returned the wrong results for prec = 0 strings and center = 0; - mgrs_inv now decodes prec = 11 strings properly; - routines now return array results with the right shape; - routines now properly handle mixed scalar and array arguments. - Add Accumulator::operator*=(T y). - Geohash uses "invalid" instead of "nan" when the latitude or longitude is a nan. . - Version 1.43 (released 2015-05-23) - Add the Enhanced Magnetic Model 2015, emm2015. This is valid for 2000 thru the end of 2019. This required some changes in the MagneticModel and MagneticCircle classes; so this model cannot be used with versions of GeographicLib prior to 1.43. - Fix BLUNDER in PolarStereographic constructor introduced in version 1.42. This affected UTMUPS conversions for UPS which could be incorrect by up to 0.5 km. - Changes in the LONG_NOWRAP option (added in version 1.39) in the Geodesic and GeodesicLine classes: - The option is now called LONG_UNROLL (a less negative sounding term); the original name, LONG_NOWRAP, is retained for backwards compatibility. - There were two bad BUGS in the implementation of this capability: (a) it gave incorrect results for west-going geodesics; (b) the option was ignored if used directly via the GeodesicLine class. The first bug affected the implementations in all languages. The second affected the implementation in C++ (GeodesicLine and GeodesicLineExact), JavaScript, Java, C, Python. These bugs have now been FIXED. - The GeodSolve utility now accepts a -u option, which turns on the LONG_UNROLL treatment. With this option lon1 is reported as entered and lon2 is given such that lon2lon1 indicates how often and in what sense the geodesic has encircled the earth. (This option also affects the value of longitude reported when an inverse calculation is run with the -f option.) - The inverse calculation with the JavaScript and Python libraries similarly sets lon1 and lon2 in output dictionary respecting the LONG_UNROLL flag. - The online version of GeodSolve now offers an option to unroll the longitude. - To support these changes DMS::DecodeLatLon no longer reduces the longitude to the range [−180°, 180°) and Math::AngRound now coverts −0 to +0. - Add Math::polyval (also to C, Java, JavaScript, Fortran, Python versions of the library; this is a built-in function for MATLAB/Octave). This evaluates a polynomial using Horner's method. The Maxima-generated code fragments for the evaluation of series in the Geodesic, TransverseMercator, and Rhumb classes and MATLAB routines for great ellipses have been replaced by Maxima-generated arrays of polynomial coefficients which are used as input to Math::polyval. - Add MGRS::Check() to verify that \e a, \e f, kUTM, and kUPS are consistent with the assumptions in the UTMUPS and MGRS classes. This is invoked with GeoConvert \--version. (This function was added to document and check the assumptions used in the UTMUPS and MGRS classes in case they are extended to deal with ellipsoids other than WS84.) - MATLAB function mgrs_inv now takes an optional \e center argument and strips white space from both beginning and end of the string. - Minor internal changes: - GeodSolve sets the geodesic mask so that unnecessary calculations are avoided; - some routines have migrated into a math class for the Python, Java, and JavaScript libraries. - A reminder: because of changes in the installation directories for non-Windows systems introduced in version 1.42, you should remove the following directories from your system: - ${CMAKE_INSTALL_PREFIX}/share/cmake/GeographicLib* - ${CMAKE_INSTALL_PREFIX}/libexec/GeographicLib/matlab . - Version 1.42 (released 2015-04-28) - DMS::Decode allows a single addition or subtraction operation, e.g., 70W+0:0:15. This affects the GeoCoords class and the utilities (which use the DMS class for reading coordinates). - Add Math::norm, Math::AngRound, Math::tand, Math::atan2d, Math::eatanhe, Math::taupf, Math::tauf, Math::fma and remove duplicated (but private) functionality from other classes. - On non-Windows systems, the cmake config-style find_package files are now installed under ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} instead of ${CMAKE_INSTALL_PREFIX}/share, because the files are architecture-specific. This change will let 32-bit and 64-bit versions coexist on the same machine (in lib and lib64). You should remove the versions in the old "share" location. - MATLAB changes: - provide native MATLAB implementations for compiled interface functions, see `wrapper/octave`; - the compiled MATLAB interface is now deprecated and so the MATLAB_COMPILER option in the cmake build has been removed; - reorganize directories, so that - matlab/geographiclib contains the native matlab code; - matlab/geographiclib-legacy contains wrapper functions to mimic the previous compiled functionality; - the installed MATLAB code mirrors this layout, but the parent installation directory on non-Windows systems is ${CMAKE_INSTALL_PREFIX}/share (instead of ${CMAKE_INSTALL_PREFIX}/libexec), because the files are now architecture independent; - matlab/geographiclib is now packaged and distributed as MATLAB File Exchange package 50605 (this supersedes three earlier MATLAB packages); - point fix for geodarea.m to correct bug in area of polygons which encircle a pole multiple times (released as version 1.41.1 of MATLAB File Exchange package 39108, 2014-04-22). - artifactId for Java package changed from GeographicLib to GeographicLib-Java and the package is now deployed to Maven Central (thanks to Chris Bennight for help on this). - Fix autoconf mismatch of version numbers (which were inconsistent in versions 1.40 and 1.41). - Mark the computation of the gradient of the geoid height in the Geoid class and the GeoidEval utility as deprecated. - Work around the boost-quadmath bug with setprecision(0). - Deprecate use of Visual Studio 2005 "-vc8" project files in the windows directory. . - Version 1.41 (released 2015-03-09) - Fix bug in Rhumb::Inverse (with \e exact = true) and related functions which causes the wrong distance to be reported if one of the end points is at a pole. Thanks to Thomas Murray for reporting this. - Add International Geomagnetic Reference Field (12th generation), igrf12, which approximates the main magnetic field of the earth for the period 1900--2020. - Split information about \ref jacobi to a separate section and include more material. . - Version 1.40 (released 2014-12-18) - Add the World Magnetic Model 2015, wmm2015. This is now the default magnetic model for MagneticField (replacing wmm2010 which is valid thru the end of 2014). - Geodesic::Inverse didn't return NaN if one of the longitudes was a NaN (bug introduced in version 1.25). Fixed in the C++, Java, JavaScript, C, Fortran, and Python implementations of the geodesic routines. This bug was not present in the MATLAB version. - Fix bug in Utility::readarray and Utility::writearray which caused an exception in debug mode with zero-sized arrays. - Fix BLUNDER in OSGB::GridReference (found by kalderami) where the wrong result was returned if the easting or northing was negative. - OSGB::GridReference now returns "INVALID" if either coordinate is NaN. Similarly a grid reference starting with "IN" results in NaNs for the coordinates. - Default constructor for GeoCoords corresponds to an undefined position (latitude and longitude = NaN), instead of the north pole. - Add an online version of RhumbSolve at https://geographiclib.sourceforge.io/cgi-bin/RhumbSolve. - Additions to the documentation: - documentation on \ref triaxial-conformal; - a page on \ref auxlat (actually, this was added in version 1.39); - document the use of two single quotes to stand for a double quote in DMS (this feature was introduced in version 1.13). - The MATLAB function, geographiclibinterface, which compiles the wrapper routines for MATLAB now works with MATLAB on a Mac. . - Version 1.39 (released 2014-11-11) - GeographicLib usually normalizes longitudes to the range [−180°, 180°). However, when solving the direct geodesic and rhumb line problems, it is sometimes necessary to know how many lines the line encircled the earth by returning the longitude "unwrapped". So the following changes have been made: - add a LONG_NOWRAP flag to \e mask enums for the \e outmask arguments for Geodesic, GeodesicLine, Rhumb, and RhumbLine; - similar changes have been made to the Python, JavaScript, and Java implementations of the geodesic routines; - for the C, Fortran, and MATLAB implementations the \e arcmode argument to the routines was generalized to allow a combination of ARCMODE and LONG_NOWRAP bits; - the Maxima version now returns the longitude unwrapped. . These changes were necessary to fix the PolygonAreaT::AddEdge (see the next item). - Changes in area calculations: - fix BUG in PolygonAreaT::AddEdge (also in C, Java, JavaScript, and Python implementations) which sometimes causes the wrong area to be returned if the edge spanned more than 180°; - add area calculation to the Rhumb and RhumbLine classes and the RhumbSolve utility (see \ref rhumbarea); - add PolygonAreaRhumb typedef for PolygonAreaT; - add -R option to Planimeter to use PolygonAreaRhumb (and -G option for the default geodesic polygon); - fix BLUNDER in area calculation in MATLAB routine geodreckon; - add area calculation to MATLAB/Octave routines for great ellipses (see \ref gearea). - Fix bad BUG in Geohash::Reverse; this was introduced in version 1.37 and affected all platforms where unsigned longs are 32-bits. Thanks to Christian Csar for reporting and diagnosing this. - Binary installers for Windows are now built with Visual Studio 11 2012 (instead of Visual Studio 10 2010). Compiled MATLAB support still with version 2013a (64-bit). - Update GeographicLib.pro for builds with qmake to include all the source files. - Cmake updates: - include cross-compiling checks in cmake config file; - improve the way unsuitable versions are reported; - include_directories (${GeographicLib_INCLUDE_DIRS}) is no longer necessary with cmake 2.8.11 or later. - legacy/Fortran now includes drop-in replacements for the geodesic utilities from the NGS. - geographiclib-get-{geoids,gravity,magnetic} with no arguments now print the usage instead of loading the minimal sets. - Utility::date(const std::string&, int&, int&, int&) and hence the MagneticField utility accepts the string "now" as a legal time (meaning today). . - Version 1.38 (released 2014-10-02) - On MacOSX, the installed package is relocatable (for cmake version 2.8.12 and later). - On Mac OSX, GeographicLib can be installed using homebrew. - In cmake builds under Windows, set the output directories so that binaries and shared libraries are together. - Accept the minus sign as a synonym for - in DMS.{cpp,js}. - The cmake configuration file geographiclib-depends.cmake has been renamed to geographiclib-targets.cmake. - MATLAB/Octave routines for great ellipses added; see \ref greatellipse. - Provide man pages for geographiclib-get-{geoids,gravity,magnetic}. . - Version 1.37 (released 2014-08-08) - Add \ref highprec. - INCOMPATIBLE CHANGE: the static instantiations of various classes for the WGS84 ellipsoid have been changed to a "construct on first use idiom". This avoids a lot of wasteful initialization before the user's code starts. Unfortunately it means that existing source code that relies on any of the following static variables will need to be changed to a function call: - AlbersEqualArea::AzimuthalEqualAreaNorth - AlbersEqualArea::AzimuthalEqualAreaSouth - AlbersEqualArea::CylindricalEqualArea - Ellipsoid::WGS84 - Geocentric::WGS84 - Geodesic::WGS84 - GeodesicExact::WGS84 - LambertConformalConic::Mercator - NormalGravity::GRS80 - NormalGravity::WGS84 - PolarStereographic::UPS - TransverseMercator::UTM - TransverseMercatorExact::UTM . Thus, occurrences of, for example, \code const Geodesic& geod = Geodesic::WGS84; // version 1.36 and earlier \endcode need to be changed to \code const Geodesic& geod = Geodesic::WGS84(); // version 1.37 and later \endcode (note the parentheses!); alternatively use \code // works with all versions const Geodesic geod(Constants::WGS84_a(), Constants::WGS84_a()); \endcode - Incompatible change: the environment variables {GEOID,GRAVITY,MAGNETIC}_{NAME,PATH} are now prefixed with GEOGRAPHICLIB_. - Incompatible change for Windows XP: retire the Windows XP common data path. If you're still using Windows XP, then you might have to move the folder C:\\Documents and Settings\\All Users\\Application Data\\GeographicLib to C:\\ProgramData\\GeographicLib. - All macro names affecting the compilation now start with GEOGRAPHICLIB_; this applies to GEOID_DEFAULT_NAME, GRAVITY_DEFAULT_NAME, MAGNETIC_DEFAULT_NAME, PGM_PIXEL_WIDTH, HAVE_LONG_DOUBLE, STATIC_ASSERT, WORDS_BIGENDIAN. - Changes to PolygonArea: - introduce PolygonAreaT which takes a geodesic class as a parameter; - PolygonArea and PolygonAreaExact are typedef'ed to PolygonAreaT and PolygonAreaT; - add -E option to Planimeter to use PolygonAreaExact; - add -Q option to Planimeter to calculate the area on the authalic sphere. - Add -p option to Planimeter, ConicProj, GeodesicProj, TransverseMercatorProj. - Add Rhumb and RhumbLine classes and the RhumbSolve utility; see \ref rhumb for more information. - Minor changes to NormalGravity: - add NormalGravity::J2ToFlattening and NormalGravity::FlatteningToJ2; - use Newton's method to determine \e f from \e J2; - in constructor, allow \e omega = 0 (i.e., treat the spherical case). - Add grs80 GravityModel, see \ref gravity. - Make geographiclib-get-{geoids,gravity,magnetic} scripts work on MacOS. - Minor changes: - simplify cross-platform support for C++11 mathematical functions; - change way area coefficients are given in GeodesicExact to improve compile times; - enable searching the online documentation; - add macros GEOGRAPHICLIB_VERSION and GEOGRAPHICLIB_VERSION_NUM; - add solution and project files for Visual Studio Express 2010. . - Version 1.36 (released 2014-05-13) - Changes to comply with NGA's prohibition of the use of the upper-case letters N/S to designate the hemisphere when displaying UTM/UPS coordinates: - UTMUPS::DecodeZone allows north/south as hemisphere designators (in addition to n/s); - UTMUPS::EncodeZone now encodes the hemisphere in lower case (to distinguish this use from a grid zone designator); - UTMUPS::EncodeZone takes an optional parameter \e abbrev to indicate whether to use n/s or north/south as the hemisphere designator; - GeoCoords::UTMUPSRepresentation and GeoCoords::AltUTMUPSRepresentation similarly accept the \e abbrev parameter; - GeoConvert uses the flags -a and -l to govern whether UTM/UPS output uses n/s (the -a flag) or north/south (the -l flag) to denote the hemisphere; - Fixed a bug what allowed +3N to be accepted as an alternative UTM zone designation (instead of 3N). . WARNING: The use of lower case n/s for the hemisphere might cause compatibility problems. However DecodeZone has always accepted either case; so the issue will only arise with other software reading the zone information. To avoid possible misinterpretation of the zone designator, consider calling EncodeZone with \e abbrev = false and GeoConvert with -l, so that north/south are used to denote the hemisphere. - MGRS::Forward with \e prec = −1 will produce a grid zone designation. Similarly MGRS::Reverse will decode a grid zone designation (and return \e prec = −1). - Stop using the throw() declaration specification which is deprecated in C++11. - Add missing std:: qualifications to copy in LocalCartesion and Geocentric headers (bug found by Clemens). . - Version 1.35 (released 2014-03-13) - Fix blunder in UTMUPS::EncodeEPSG (found by Ben Adler). - MATLAB wrapper routines geodesic{direct,inverse,line} switch to "exact" routes if |f| > 0.02. - GeodSolve.cgi allows ellipsoid to be set (and uses the -E option for GeodSolve). - Set title in HTML versions of man pages for the \ref utilities. - Changes in cmake support: - add _d to names of executables in debug mode of Visual Studio; - add support for Android (cmake-only), thanks to Pullan Yu; - check CPACK version numbers supplied on command line; - configured version of project-config.cmake.in is project-config.cmake (instead of geographiclib-config.cmake), to prevent find_package incorrectly using this file; - fix tests with multi-line output; - this release includes a file, pom.xml, which is used by an experimental build system (based on maven) at SRI. . - Version 1.34 (released 2013-12-11) - Many changes in cmake support: - minimum version of cmake needed increased to 2.8.4 (which was released in 2011-02); - allow building both shared and static libraries with -D GEOGRAPHICLIB_LIB_TYPE=BOTH; - both shared and static libraries (Release plus Debug) included in binary installer; - find_package uses COMPONENTS and GeographicLib_USE_STATIC_LIBS to select the library to use; - find_package version checking allows nmake and Visual Studio generators to interoperate on Windows; - find_package (GeographicLib …) requires that GeographicLib be capitalized correctly; - on Unix/Linux, don't include the version number in directory for the cmake configuration files; - defaults for GEOGRAPHICLIB_DOCUMENTATION and BUILD_NETGEOGRAPHICLIB are now OFF; - the GEOGRAPHICLIB_EXAMPLES configuration parameter is no longer used; cmake always configures to build the examples, but they are not built by default (instead build targets: exampleprograms and netexamples); - matlab-all target renamed to matlabinterface; - the configuration parameters PACKAGE_PATH and INSTALL_PATH are now deprecated (use CMAKE_INSTALL_PREFIX instead); - on Linux, the installed package is relocatable; - on MacOSX, the installed utilities can find the shared library. - Use a more precise value for OSGB::CentralScale(). - Add Arc routines to Python interface. - The Geod utility has been removed; the same functionality lives on with GeodSolve (introduced in version 1.30). . - Version 1.33 (released 2013-10-08) - Add NETGeographic .NET wrapper library (courtesy of Scott Heiman). - Make inspector functions in Ellipsoid const. - Add Accumulator.cpp to instantiate Accumulator. - Defer some of the initialization of OSGB to when it is first called. - Fix bug in autoconf builds under MacOS. . - Version 1.32 (released 2013-07-12) - Generalize C interface for polygon areas to allow vertices to be specified incrementally. - Fix way flags for C++11 support are determined. . - Version 1.31 (released 2013-07-01) - Changes breaking binary compatibility (source compatibility is maintained): - overloaded versions of DMS::Encode, EllipticFunction::EllipticFunction, and GeoCoords::DMSRepresentation, have been eliminated by the use of optional arguments; - correct the declaration of first arg to UTMUPS::DecodeEPSG. - FIX BUG in GravityCircle constructor (found by Mathieu Peyréga) which caused bogus results for the gravity disturbance and gravity anomaly vectors. (This only affected calculations using GravityCircle. GravityModel calculations did not suffer from this bug.) - Improvements to the build: - add macros GEOGRAPHICLIB_VERSION_{MAJOR,MINOR,PATCH} to Config.h; - fix documentation for new version of perlpod; - improving setting of runtime path for Unix-like systems with cmake; - install PDB files when compiling with Visual Studio to aid debugging; - Windows binary release now uses MATLAB R2013a (64-bit) and uses the -largeArrayDims option. - fixes to the way the MATLAB interface routines are built (thanks to Phil Miller and Chris F.). - Changes to the geodesic routines: - add Java implementation of the geodesic routines (thanks to Skip Breidbach for the maven support); - FIX BUG: avoid altering input args in Fortran implementation; - more systematic treatment of very short geodesic; - fixes to Python port so that they work with version 3.x, in addition to 2.x (courtesy of Amato); - accumulate the perimeter and area of polygons via a double-wide accumulator in Fortran, C, and MATLAB implementations (this is already included in the other implementations); - port PolygonArea::AddEdge and PolygonArea::TestEdge to JavaScript and Python interfaces; - include documentation on \ref geodshort. - Unix scripts for downloading datasets, geographiclib-get-{geoids,gravity,magnetic}, skip already download models by default, unless the -f flag is given. - FIX BUGS: meridian convergence and scale returned by TransverseMercatorExact was wrong at a pole. - Improve efficiency of MGRS::Forward by avoiding the calculation of the latitude if possible (adapting an idea of Craig Rollins). . - Version 1.30 (released 2013-02-27) - Changes to geodesic routines: - FIX BUG in fail-safe mechanisms in Geodesic::Inverse; - the command line utility Geod is now called GeodSolve; - allow addition of polygon edges in PolygonArea; - add full Maxima implementation of geodesic algorithms. . - Version 1.29 (released 2013-01-16) - Changes to allow compilation with libc++ (courtesy of Kal Conley). - Add description of \ref triaxial to documentation. - Update journal reference for "Algorithms for geodesics". . - Version 1.28 (released 2012-12-11) - Changes to geodesic routines: - compute longitude difference exactly; - hence FIX BUG in area calculations for polygons with vertices very close to the prime meridian; - FIX BUG is geoddistance.m where the value of m12 was wrong for meridional geodesics; - add MATLAB implementations of the geodesic projections; - remove unneeded special code for geodesics which start at a pole; - include polygon area routine in C and Fortran implementations; - add doxygen documentation for C and Fortran libraries. . - Version 1.27 (released 2012-11-29) - Changes to geodesic routines: - add native MATLAB implementations: geoddistance.m, geodreckon.m, geodarea.m; - add C and Fortran implementations; - improve the solution of the direct problem so that the series solution is accurate to round off for |f| < 1/50; - tighten up the convergence criteria for solution of the inverse problem; - no longer signal failures of convergence with NaNs (a slightly less accurate answer is returned instead). - Fix DMS::Decode double rounding BUG. - On MacOSX platforms with the cmake configuration, universal binaries are built. . - Version 1.26 (released 2012-10-22) - Replace the series used for geodesic areas by one with better convergence (this only makes an appreciable difference if |f| > 1/150). . - Version 1.25 (released 2012-10-16) - Changes to geodesic calculations: - restart Newton's method in Geodesic::Inverse when it goes awry; - back up Newton's method with the bisection method; - Geodesic::Inverse now converges for any value of \e f; - add GeodesicExact and GeodesicLineExact which are formulated in terms of elliptic integrals and thus yield accurate results even for very eccentric ellipsoids; - the -E option to Geod invokes these exact classes. - Add functionality to EllipticFunction: - add all the traditional elliptic integrals; - remove restrictions on argument range for incomplete elliptic integrals; - allow imaginary modulus for elliptic integrals and elliptic functions; - make interface to the symmetric elliptic integrals public. - Allow Ellipsoid to be copied. - Changes to the build tools: - cmake uses folders in Visual Studio to reduce clutter; - allow precision of reals to be set in cmake; - fail gracefully in the absence of pod documentation tools; - remove support for maintainer tasks in Makefile.mk; - upgrade to automake 1.11.6 to fix the "make distcheck" security vulnerability; see https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3386 . - Version 1.24 (released 2012-09-22) - Allow the specification of the hemisphere in UTM coordinates in order to provide continuity across the equator: - add UTMUPS::Transfer; - add GeoCoords::UTMUPSRepresentation(bool, int) and GeoCoords::AltUTMUPSRepresentation(bool, int); - use the hemisphere letter in, e.g., GeoConvert -u -z 31n. - Add UTMUPS::DecodeEPSG and UTMUPS::EncodeEPSG. - cmake changes: - restore support for cmake 2.4.x; - explicitly check version of doxygen. - Fix building under cygwin. - Document restrictions on \e f in \ref intro. - Fix Python interface to work with version 2.6.x. . - Version 1.23 (released 2012-07-17) - Documentation changes: - remove html documentation from distribution and use web links if doxygen is not available; - use doxygen tags to document exceptions; - begin migrating the documentation to using Greek letters where appropriate (requires doxygen 1.8.1.2 or later). - Add Math::AngNormalize and Math::AngNormalize2; the allowed range for longitudes and azimuths widened to [−540°, 540°). - DMS::Decode understands more unicode symbols. - Geohash uses geohash code "nan" to stand for not a number. - Add Ellipsoid::NormalCurvatureRadius. - Various fixes in LambertConformalConic, TransverseMercator, PolarStereographic, and Ellipsoid to handle reverse projections of points near infinity. - Fix programming blunder in LambertConformalConic::Forward (incorrect results were returned if the tangent latitude was negative). . - Version 1.22 (released 2012-05-27) - Add Geohash and Ellipsoid classes. - FIX BUG in AlbersEqualArea for very prolate ellipsoids (b2 > 2 a2). - cmake changes: - optionally use PACKAGE_PATH and INSTALL_PATH to determine CMAKE_INSTALL_PREFIX; - use COMMON_INSTALL_PATH to determine layout of installation directories; - as a consequence, the installation paths for the documentation, and Python and MATLAB interfaces are shortened for Windows; - zip source distribution now uses DOS line endings; - the tests work in debug mode for Windows; - default setting of GEOGRAPHICLIB_DATA does not depend on CMAKE_INSTALL_PREFIX; - add a cmake configuration for build tree. . - Version 1.21 (released 2012-04-25) - Support colon-separated DMS output: - DMS::Encode and GeoCoords::DMSRepresentation generalized; - GeoConvert and Geod now accept a -: option. - GeoidEval does not print the gradient of the geoid height by default (because it's subject to large errors); give the -g option to get the gradient printed. - Work around optimization BUG in Geodesic::Inverse with tdm mingw g++ version 4.6.1. - autoconf fixed to ensure that that out-of-sources builds work; document this as the preferred method of using autoconf. - cmake tweaks: - simplify the configuration of doxygen; - allow the MATLAB compiler to be specified with the MATLAB_COMPILER option. . - Version 1.20 (released 2012-03-23) - cmake tweaks: - improve find_package's matching of compiler versions; - CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available; - add "x64" to the package name for the 64-bit binary installer; - fix cmake warning with Visual Studio Express. - Fix SphericalEngine to deal with aggressive iterator checking by Visual Studio. - Fix transcription BUG is Geodesic.js. . - Version 1.19 (released 2012-03-13) - Slight improvement in Geodesic::Inverse for very short lines. - Fix argument checking tests in MGRS::Forward. - Add \--comment-delimiter and \--line-separator options to the \ref utilities. - Add installer for 64-bit Windows; the compiled MATLAB interface is supplied with the Windows 64-bit installer only. . - Version 1.18 (released 2012-02-18) - Improve documentation on configuration with cmake. - cmake's find_package ensures that the compiler versions match on Windows. - Improve documentation on compiling MATLAB interface. - Binary installer for Windows installs under C:/pkg-vc10 by default. . - Version 1.17 (released 2012-01-21) - Work around optimization BUG in Geodesic::Inverse with g++ version 4.4.0 (mingw). - Fix BUG in argument checking with OSGB::GridReference. - Fix missing include file in SphericalHarmonic2. - Add simple examples of usage for each class. - Add internal documentation to the cmake configuration files. . - Version 1.16 (released 2011-12-07) - Add calculation of the earth's gravitational field: - add NormalGravity GravityModel and GravityCircle classes; - add command line utility Gravity; - add \ref gravity; - add Constants::WGS84_GM(), Constants::WGS84_omega(), and similarly for GRS80. - Build uses GEOGRAPHICLIB_DATA to specify a common parent directory for geoid, gravity, and magnetic data (instead of GEOGRAPHICLIB_GEOID_PATH, etc.); similarly, GeoidEval, Gravity, and MagneticField, look at the environment variable GEOGRAPHICLIB_DATA to locate the data. - Spherical harmonic software changes: - capitalize enums SphericalHarmonic::FULL and SphericalHarmonic::SCHMIDT (the lower case names are retained but deprecated); - optimize the sum by using a static table of square roots which is updated by SphericalEngine::RootTable; - avoid overflow for high degree models. - Magnetic software fixes: - fix documentation BUG in MagneticModel::Circle; - make MagneticModel constructor explicit; - provide default MagneticCircle constructor; - add additional inspector functions to MagneticCircle; - add -c option to MagneticField; - default height to zero in MagneticField. . - Version 1.15 (released 2011-11-08) - Add calculation of the earth's magnetic field: - add MagneticModel and MagneticCircle classes; - add command line utility MagneticField; - add \ref magnetic; - add \ref magneticinst; - add \ref magneticformat; - add classes SphericalEngine, CircularEngine, SphericalHarmonic, SphericalHarmonic1, and SphericalHarmonic2. which sum spherical harmonic series. - Add Utility class to support I/O and date manipulation. - Cmake configuration includes a _d suffix on the library built in debug mode. - For the Python package, include manifest and readme files; don't install setup.py for non-Windows systems. - Include Doxygen tag file in distribution as doc/html/Geographic.tag. . - Version 1.14 (released 2011-09-30) - Ensure that geographiclib-config.cmake is relocatable. - Allow more unicode symbols to be used in DMS::Decode. - Modify GeoidEval so that it can be used to convert the height datum for LIDAR data. - Modest speed-up of Geodesic::Inverse. - Changes in Python interface: - FIX BUG in transcription of Geodesic::Inverse; - include setup.py for easy installation; - Python only distribution is available at https://pypi.python.org/pypi/geographiclib - Supply a minimal Qt qmake project file for library src/Geographic.pro. . - Version 1.13 (released 2011-08-13) - Changes to I/O: - allow : (colon) to be used as a DMS separator in DMS::Decode(const std::string&, flag&); - also accept Unicode symbols for degrees, minutes, and seconds (coded as UTF-8); - provide optional \e swaplatlong argument to various DMS and GeoCoords functions to make longitude precede latitude; - GeoConvert now has a -w option to make longitude precede latitude on input and output; - include a JavaScript version of DMS. - Slight improvement in starting guess for solution of geographic latitude in terms of conformal latitude in TransverseMercator, TransverseMercatorExact, and LambertConformalConic. - For most classes, get rid of const member variables so that the default copy assignment works. - Put Math and Accumulator in their own header files. - Remove unused "fast" Accumulator method. - Reorganize `wrapper/python`. - Withdraw some deprecated routines. - cmake changes: - include FindGeographic.cmake in distribution; - building with cmake creates and installs geographiclib-config.cmake; - better support for building a shared library under Windows. . - Version 1.12 (released 2011-07-21) - Change license to MIT/X11. - Add PolygonArea class and equivalent MATLAB function. - Provide JavaScript and Python implementations of geodesic routines. - Fix Windows installer to include runtime dlls for MATLAB. - Fix (innocuous) unassigned variable in Geodesic::GenInverse. - Geodesic routines in MATLAB return a12 as first column of aux return value (incompatible change). - A couple of code changes to enable compilation with Visual Studio 2003. . - Version 1.11 (released 2011-06-27) - Changes to Planimeter: - add -l flag to Planimeter for polyline calculations; - trim precision of area to 3 decimal places; - FIX BUG with pole crossing edges (due to compiler optimization). - Geod no longer reports the reduced length by default; however the -f flag still reports this and in addition gives the geodesic scales and the geodesic area. - FIX BUGS (compiler-specific) in inverse geodesic calculations. - FIX BUG: accommodate tellg() returning −1 at end of string. - Change way flattening of the ellipsoid is specified: - constructors take \e f argument which is taken to be the flattening if \e f < 1 and the inverse flattening otherwise (this is a compatible change for spheres and oblate ellipsoids, but it is an INCOMPATIBLE change for prolate ellipsoids); - the -e arguments to the \ref utilities are handled similarly; in addition, simple fractions, e.g., 1/297, can be used for the flattening; - introduce Constants::WGS84_f() for the WGS84 flattening (and deprecate Constants::WGS84_r() for the inverse flattening); - most classes have a Flattening() member function; - InverseFlattening() has been deprecated (and now returns inf for a sphere, instead of 0). . - Version 1.10 (released 2011-06-11) - Improvements to MATLAB/Octave interface: - add {geocentric,localcartesian}{forward,reverse}; - make geographiclibinterface more general; - install the source for the interface; - cmake compiles the interface if ENABLE_MATLAB=ON; - include compiled interface with Windows binary installer. - Fix various configuration issues - autoconf did not install Config.h; - cmake installed in man/man1 instead of share/man/man1; - cmake did not set the rpath on the tools. . - Version 1.9 (released 2011-05-28) - FIX BUG in area returned by Planimeter for pole encircling polygons. - FIX BUG in error message reported when DMS::Decode reads the string "5d.". - FIX BUG in AlbersEqualArea::Reverse (lon0 not being used). - Ensure that all exceptions thrown in the \ref utilities are caught. - Avoid using catch within DMS. - Move Accumulator class from Planimeter.cpp to Constants.hpp. - Add Math::sq. - Simplify \ref geoidinst - add geographiclib-get-geoids for Unix-like systems; - add installers for Windows. - Provide cmake support: - build binary installer for Windows; - include regression tests; - add \--input-string, \--input-file, \--output-file options to the \ref utilities to support tests. - Rename utility EquidistantTest as GeodesicProj and TransverseMercatorTest as TransverseMercatorProj. - Add ConicProj. - Reverse the initial sense of the -s option for Planimeter. - Migrate source from subversion to git. . - Version 1.8 (released 2011-02-22) - Optionally return rotation matrix from Geocentric and LocalCartesian. - For the \ref utilities, supply man pages, -h prints the synopsis, \--help prints the man page, \--version prints the version. - Use accurate summation in Planimeter. - Add 64-bit targets for Visual Studio 2010. - Use templates for defining math functions and some constants. - Geoid updates - Add Geoid::DefaultGeoidPath and Geoid::DefaultGeoidName; - GeoidEval uses environment variable GEOGRAPHICLIB_GEOID_NAME as the default geoid; - Add \--msltohae and \--haetomsl as GeoidEval options (and don't document the single hyphen versions). - Remove documentation that duplicates papers on transverse Mercator and geodesics. . - Version 1.7 (released 2010-12-21) - FIX BUG in scale returned by LambertConformalConic::Reverse. - Add AlbersEqualArea projection. - Library created by Visual Studio is Geographic.lib instead of GeographicLib.lib (compatible with makefiles). - Make classes NaN aware. - Use cell arrays for MGRS strings in MATLAB. - Add solution/project files for Visual Studio 2010 (32-bit only). - Use C++11 static_assert and math functions, if available. . - Version 1.6 (released 2010-11-23) - FIX BUG introduced in Geoid in version 1.5 (found by Dave Edwards). . - Version 1.5 (released 2010-11-19) - Improve area calculations for small polygons. - Add -s and -r flags to Planimeter. - Improve the accuracy of LambertConformalConic using divided differences. - FIX BUG in meridian convergence returned by LambertConformalConic::Forward. - Add optional threadsafe parameter to Geoid constructor. WARNING: This changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible. - Add OSGB. - MATLAB and Octave interfaces to UTMUPS, MGRS, Geoid, Geodesic provided. - Minor changes - explicitly turn on optimization in Visual Studio 2008 projects; - add missing dependencies in some Makefiles; - move pi() and degree() from Constants to Math; - introduce Math::extended type to aid testing; - add Math::epi() and Math::edegree(). - fixes to compile under cygwin; - tweak expression used to find latitude from conformal latitude. . - Version 1.4 (released 2010-09-12) - Changes to Geodesic and GeodesicLine: - FIX BUG in Geodesic::Inverse with prolate ellipsoids; - add area computations to Geodesic::Direct and Geodesic::Inverse; - add geodesic areas to geodesic test set; - make GeodesicLine constructor public; - change longitude series in Geodesic into Helmert-like form; - ensure that equatorial geodesics have cos(alpha0) = 0 identically; - generalize interface for Geodesic and GeodesicLine; - split GeodesicLine and Geodesic into different files; - signal convergence failure in Geodesic::Inverse with NaNs; - deprecate one function in Geodesic and two functions in GeodesicLine; - deprecate -n option for Geod. . WARNING: These changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible (with the proviso that GeographicLib/GeodesicLine.hpp may now need to be included). - Add the Planimeter utility for computing the areas of geodesic polygons. - Improve iterative solution of Gnomonic::Reverse. - Add Geoid::ConvertHeight. - Add -msltohae, -haetomsl, and -z options to GeoidEval. - Constructors check that minor radius is positive. - Add overloaded Forward and Reverse functions to the projection classes which don't return the convergence (or azimuth) and scale. - Document function parameters and return values consistently. . - Version 1.3 (released 2010-07-21) - Add Gnomonic, the ellipsoid generalization of the gnomonic projection. - Add -g and -e options to EquidistantTest. - Use fixed-point notation for output from CartConvert, EquidistantTest, TransverseMercatorTest. - PolarStereographic: - Improved conversion to conformal coordinates; - Fix bug with scale at opposite pole; - Complain if latitude out of range in SetScale. - Add Math::NaN(). - Add long double version of hypot for Windows. - Add EllipticFunction::E(real). - Update references to Geotrans in MGRS documentation. - Speed up tmseries.mac. . - Version 1.2 (released 2010-05-21) - FIX BUGS in Geodesic, - wrong azimuth returned by Direct if point 2 is on a pole; - Inverse sometimes fails with very close points. - Improve calculation of scale in CassiniSoldner, - add GeodesicLine::Scale, GeodesicLine::EquatorialAzimuth, and GeodesicLine::EquatorialArc; - break friend connection between CassiniSoldner and Geodesic. - Add DMS::DecodeAngle and DMS::DecodeAzimuth. Extend DMS::Decode and DMS::Encode to deal with distances. - Code and documentation changes in Geodesic and Geocentric for consistency with the forthcoming paper on geodesics. - Increase order of series using in Geodesic to 6 (full accuracy maintained for ellipsoid flattening < 0.01). - Macro __NO_LONG_DOUBLE_MATH to disable use of long double. - Correct declaration of Math::isfinite to return a bool. - Changes in the \ref utilities, - improve error reporting when parsing command line arguments; - accept latitudes and longitudes in decimal degrees or degrees, minutes, and seconds, with optional hemisphere designators; - GeoConvert -z accepts zone or zone+hemisphere; - GeoidEval accepts any of the input formats used by GeoConvert; - CartConvert allows the ellipsoid to be specified with -e. . - Version 1.1 (released 2010-02-09) - FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn). - Increase accuracy of scale calculation in TransverseMercator and TransverseMercatorExact. - Code and documentation changes for consistency with arXiv:1002.1417 . - Version 1.0 (released 2010-01-07) - Add autoconf configuration files. - BUG FIX: Improve initial guess for Newton's method in PolarStereographic::Reverse. (Previously this failed to converge when the co-latitude exceeded about 130 deg.) - Constructors for TransverseMercator, TransverseMercatorExact, PolarStereographic, Geocentric, and Geodesic now check for obvious problems with their arguments and throw an exception if necessary. - Most classes now include inspector functions such as MajorRadius() so that you can determine how instances were constructed. - Add LambertConformalConic class. - Add PolarStereographic::SetScale to allow the latitude of true scale to be specified. - Add solution and project files for Visual Studio 2008. - Add GeographicErr for exceptions. - Geoid changes: - BUG FIX: fix typo in Geoid::Cache which could cause a segmentation fault in some cases when the cached area spanned the prime meridian. - Include sufficient edge data to allow heights to be returned for cached area without disk reads; - Add inspector functions to query the extent of the cache. . - Version 2009-11 (released 2009-11-03) - Allow specification of "closest UTM zone" in UTMUPS and GeoConvert (via -t option). - Utilities now complain is there are too many tokens on input lines. - Include real-to-real versions of DMS::Decode and DMS::Encode. - More house-cleaning changes: - Ensure that functions which return results through reference arguments do not alter the arguments when an exception is thrown. - Improve accuracy of MGRS::Forward. - Include more information in some error messages. - Improve accuracy of inverse hyperbolic functions. - Fix the way Math functions handle different precisions. . - Version 2009-10 (released 2009-10-18) - Change web site to https://geographiclib.sourceforge.io - Several house-cleaning changes: - Change from the a flat directory structure to a more easily maintained one. - Introduce Math class for common mathematical functions (in Constants.hpp). - Use Math::real as the type for all real quantities. By default this is typedef'ed to double; and the library should be installed this way. - Eliminate const reference members of AzimuthalEquidistant, CassiniSoldner and LocalCartesian so that they may be copied. - Make several constructors explicit. Disallow some constructors. Disallow copy constructor/assignment for Geoid. - Document least squares formulas in Geoid.cpp. - Use unsigned long long for files positions of geoid files in Geoid. - Introduce optional mgrslimits argument in UTMUPS::Forward and UTMUPS::Reverse to enforce stricter MGRS limits on eastings and northings. - Add 64-bit targets in Visual Studio project files. . - Version 2009-09 (released 2009-09-01) - Add Geoid and GeoidEval utility. . - Version 2009-08 (released 2009-08-14) - Add CassiniSoldner class and EquidistantTest utility. - Fix bug in Geodesic::Inverse where NaNs were sometimes returned. - INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal of the azimuthal scale instead of the reduced length. - Add -n option to GeoConvert. . - Version 2009-07 (released 2009-07-16) - Speed up the series inversion code in tmseries.mac and geod.mac. - Reference Borkowski in section on \ref geocentric. . - Version 2009-06 (released 2009-06-01) - Add routines to decode and encode zone+hemisphere to UTMUPS. - Clean up code in Geodesic. . - Version 2009-05 (released 2009-05-01) - Improvements to Geodesic: - more economical series expansions, - return reduced length (as does the Geod utility), - improved calculation of starting point for inverse method, - use reduced length to give derivative for Newton's method. - Add AzimuthalEquidistant class. - Make Geocentric, TransverseMercator, and PolarStereographic classes work with prolate ellipsoids. - CartConvert checks its inputs more carefully. - Remove reference to defunct Constants.cpp from GeographicLib.vcproj. . - Version 2009-04 (released 2009-04-01) - Use compile-time constants to select the order of series in TransverseMercator. - 2x unroll of Clenshaw summation to avoid data shuffling. - Simplification of EllipticFunction::E. - Use STATIC_ASSERT for compile-time checking of constants. - Improvements to Geodesic: - compile-time option to change order of series used, - post Maxima code for generating the series, - tune the order of series for double, - improvements in the selection of starting points for Newton's method, - accept and return spherical arc lengths, - works with both oblate and prolate ellipsoids, - add -a, -e, -b options to the Geod utility. . - Version 2009-03 (released 2009-03-01) - Add Geodesic and the Geod utility. - Declare when no exceptions are thrown by functions. - Minor changes to DMS class. - Use invf = 0 to mean a sphere in constructors to some classes. - The makefile creates a library and includes an install target. - Rename ECEF to Geocentric, ECEFConvert to CartConvert. - Use inline functions to define constant doubles in Constants.hpp. . - Version 2009-02 (released 2009-01-30) - Fix documentation of constructors (flattening → inverse flattening). - Use std versions of math functions. - Add ECEF and LocalCartesian classes and the ECEFConvert utility. - Gather the documentation on the \ref utilities onto one page. . - Version 2009-01 (released 2009-01-12) - First proper release of library. - More robust TransverseMercatorExact: - Introduce \e extendp version of constructor, - Test against extended test data, - Optimize starting positions for Newton's method, - Fix behavior near all singularities, - Fix order dependence in C++ start-up code, - Improved method of computing scale and convergence. - Documentation on transverse Mercator projection. - Add MGRS, UTMUPS, etc. . - Version 2008-09 - Ad hoc posting of information on the transverse Mercator projection.
Back to \ref highprec. Up to \ref contents.
**********************************************************************/ } GeographicLib-2.4/doc/doxyfile.in0000644000771000077100000036673414644775140016713 0ustar ckarneyckarney# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). # # Note: # # Use doxygen to compare the used configuration file with the template # configuration file: # doxygen -x [configFile] # Use doxygen to compare the used configuration file with the template # configuration file without replacing the environment variables or CMake type # replacement variables: # doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = GeographicLib # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @PROJECT_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = # With the PROJECT_ICON tag one can specify an icon that is included in the tabs # when the HTML document is shown. Doxygen will copy the logo to the output # directory. PROJECT_ICON = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format # and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to # control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO # Controls the number of sub-directories that will be created when # CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every # level increment doubles the number of directories, resulting in 4096 # directories at level 8 which is the default and also the maximum value. The # sub-directories are organized in 2 levels, the first level always has a fixed # number of 16 directories. # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. CREATE_SUBDIRS_LEVEL = 8 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English # (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, # Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with # English messages), Korean, Korean-en (Korean with English messages), Latvian, # Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, # Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, # Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@/ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = @PROJECT_SOURCE_DIR@/include/ \ @PROJECT_SOURCE_DIR@/examples/ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # By default Python docstrings are displayed as preformatted text and doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the # doxygen's special commands can be used and the contents of the docstring # documentation blocks is shown as doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". Note that you cannot put \n's in the value part of an alias # to insert newlines (in the resulting output). You can put ^^ in the value part # of an alias to insert a newline as if a physical newline was in the original # file. When you need a literal { or } or , in the value part of an alias you # have to escape them by means of a backslash (\), this can lead to conflicts # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to # generate identifiers for the Markdown headings. Note: Every identifier is # unique. # Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a # sequence number starting at 0 and GITHUB use the lower case version of title # with any whitespace replaced by '-' and punctuation characters removed. # The default value is: DOXYGEN. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. MARKDOWN_ID_STYLE = DOXYGEN # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 # The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, # which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 # If the TIMESTAMP tag is set different from NO then each generated page will # contain the date or date and time when the page was generated. Setting this to # NO can help when comparing the output of multiple runs. # Possible values are: YES, NO, DATETIME and DATE. # The default value is: NO. TIMESTAMP = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed # parameters remain unnamed in the output. # The default value is: YES. RESOLVE_UNNAMED_PARAMS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # will also hide undocumented C++ concepts if enabled. This option has no effect # if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # Possible values are: SYSTEM, NO and YES. # The default value is: SYSTEM. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. # The default value is: YES. SHOW_HEADERFILE = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete # function parameter documentation. If set to NO, doxygen will accept that some # parameters have no documentation without warning. # The default value is: YES. WARN_IF_INCOMPLETE_DOC = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about # undocumented enumeration values. If set to NO, doxygen will accept # undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: NO. WARN_IF_UNDOC_ENUM_VAL = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. # If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves # like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not # write the warning messages in between other messages but write them at the end # of a run, in case a WARN_LOGFILE is defined the warning messages will be # besides being in the defined file also be shown at the end of a run, unless # the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case # the behavior will remain as with the setting FAIL_ON_WARNINGS. # Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # In the $text part of the WARN_FORMAT command it is possible that a reference # to a more specific place is given. To make it easier to jump to this place # (outside of doxygen) the user can define a custom "cut" / "paste" string. # Example: # WARN_LINE_FORMAT = "'vi $file +$line'" # See also: WARN_FORMAT # The default value is: at line $line of file $file. WARN_LINE_FORMAT = "at line $line of file $file" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the # warning and error messages are written to standard error. When as file - is # specified the warning and error messages are written to standard output # (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @PROJECT_SOURCE_DIR@/src \ @PROJECT_SOURCE_DIR@/include/GeographicLib \ @PROJECT_SOURCE_DIR@/tools \ @PROJECT_BINARY_DIR@/doc/GeographicLib.dox \ @PROJECT_SOURCE_DIR@/experimental/JacobiConformal.hpp # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # This tag can be used to specify the character encoding of the source files # that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify # character encoding on a per file pattern basis. Doxygen will compare the file # name with each pattern and apply the encoding instead of the default # INPUT_ENCODING) if there is a match. The character encodings are a list of the # form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding # "INPUT_ENCODING" for further information on supported encodings. INPUT_FILE_ENCODING = # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, # *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, # *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, # *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to # be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = [A-Za-z]*.cpp \ [A-Za-z]*.hpp # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = @PROJECT_SOURCE_DIR@/examples \ @PROJECT_SOURCE_DIR@/experimental # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = @PROJECT_SOURCE_DIR@/doc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that doxygen will use the data processed and written to standard output # for further processing, therefore nothing else, like debug statements or used # commands (so in case of a Windows batch file always use @echo OFF), should be # written to standard output. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common # extension is to allow longer lines before the automatic comment starts. The # setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can # be processed before the automatic comment starts. # Minimum value: 7, maximum value: 10000, default value: 72. FORTRAN_COMMENT_AFTER = 72 #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # multi-line macros, enums or list initialized variables directly into the # documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = NO # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) # that should be ignored while generating the index headers. The IGNORE_PREFIX # tag works for classes, function and member names. The entity will be placed in # the alphabetical list under the first letter of the entity name that remains # after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). # Note: Since the styling of scrollbars can currently not be overruled in # Webkit/Chromium, the styling will be left out of the default doxygen.css if # one or more extra stylesheets have been specified. So if scrollbar # customization is desired it has to be added explicitly. For an example see the # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. # Possible values are: LIGHT always generate light mode output, DARK always # generate dark mode output, AUTO_LIGHT automatically set the mode according to # the user preference, use light mode if no preference is set (the default), # AUTO_DARK automatically set the mode according to the user preference, use # dark mode if no preference is set and TOGGLE allow to user to switch between # light and dark mode via a button. # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE = AUTO_LIGHT # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be # dynamically folded and expanded in the generated HTML source code. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_CODE_FOLDING = YES # If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in # the top right corner of code and text fragments that allows the user to copy # its content to the clipboard. Note this only works if supported by the browser # and the web page is served via a secure context (see: # https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: # protocol. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COPY_CLIPBOARD = YES # Doxygen stores a couple of settings persistently in the browser (via e.g. # cookies). By default these settings apply to all HTML pages generated by # doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store # the settings under a project specific key, such that the user preferences will # be stored separately. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_PROJECT_COOKIE = # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag determines the URL of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDURL = # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with # a.o. the download links, offline the HTML help workshop was already many years # in maintenance mode). You can download the HTML help workshop from the web # archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # The SITEMAP_URL tag is used to specify the full URL of the place where the # generated documentation will be placed on the server by the user during the # deployment of the documentation. The generated sitemap is called sitemap.xml # and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL # is specified no sitemap is generated. For information about the sitemap # protocol see https://www.sitemaps.org # This tag requires that the tag GENERATE_HTML is set to YES. SITEMAP_URL = # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an # example, the default style sheet generated by doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. # Since the tree basically has the same information as the tab index, you could # consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview # area (value NO) or if it should extend to the full height of the window (value # YES). Setting this to YES gives a layout similar to # https://docs.readthedocs.io with more room for contents, but less room for the # project logo, title, and description. If either GENERATE_TREEVIEW or # DISABLE_INDEX is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. OBFUSCATE_EMAILS = YES # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png (the default) and svg (looks nicer but requires the # pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = YES # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with # regards to the different settings, so it is possible that also other MathJax # settings have to be changed when switching between the different MathJax # versions. # Possible values are: MathJax_2 and MathJax_3. # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_VERSION = MathJax_2 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax # version 2 (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 # (see: # http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported # for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. The default value is: # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # for MathJax version 2 (see # https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): # MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /